Untitled

 avatar
unknown
plain_text
2 months ago
25 kB
2
Indexable
# -*- coding: utf-8 -*-

from odoo import models, fields, api, _
from datetime import date, datetime, timedelta
from odoo.exceptions import UserError

class sales_stage(models.Model):
    _inherit = "sale.order"
    
    
    
    
    sale_type = fields.Selection([('standard','Standard'),('non_standard','Non-Standard')],required=True)
    state = fields.Selection(selection_add=[("pre_waiting_otf","Waiting For OTF"),("pre_ct","Pre CT Partner Approval"),("pre_tst", "Pre TST approval"),("pre_cf_executive", "Pre C&F Executive"),("pre_cf_head","Pre C&F Head"),("pre_cf", "Pre C&F approval"),("pre_md", "Pre MD approval"),("waiting_otf","Waiting For OTF"),("ct_approve", "CT partner approval"),("tst_approve", "TST approval"),("cf_executive", "C&F Executive"),("cf_head", "C&F Head"),
                                ("cf_approve", "C&F approval"),("md_approve", "MD approval"),("ct_approve_email", "CT partner Approval"),("tst_approve_email", "TST Approval"),("cf_executive_email", "C&F Executive Approval"),("cf_head_email", "C&F Head Approval"),
                                ("cf_approve_email", "C&F Approval"),("md_approve_email", "MD Approval"),("internal","Internal Meeting"),('sale','Work Order')])
    requirement_ids = fields.One2many('sale.requirement', 'req_id')
    req_id = fields.Char('test')
    is_workorder = fields.Boolean("Work Order?",default=True) 
    
    state_email = fields.Selection([('draft', 'Quotation'),
                                ('sent', 'Quotation Sent'),
                                ('sale', 'Sales Order'),
                                ('done', 'Locked'),
                                ('cancel', 'Cancelled'),
                                ("pre_ct","Pre CT Partner Approval"),("pre_tst", "Pre TST approval"),("pre_cf_executive", "Pre C&F Executive"),("pre_cf_head","Pre C&F Head"),("pre_cf", "Pre C&F approval"),("pre_md", "Pre MD approval"),("pre_waiting_otf","Waiting For OTF"),("waiting_otf","Waiting For OTF"),("ct_approve", "CT partner approval"),("tst_approve", "TST approval"),
                                ("cf_approve", "C&F approval"),("md_approve", "MD approval"),("ct_approve_email", "CT partner Approval"),("tst_approve_email", "TST Approval"),("cf_executive_email", "C&F Executive Approval"),("cf_head_email", "C&F Head Approval"),
                                ("cf_approve_email", "C&F Approval"),("md_approve_email", "MD Approval"),("internal","Internal Meeting"),('sale','Work Order')], related='state', 
                                    tracking=False, string="State Email")
    state_wo = fields.Selection([('draft', 'Quotation'),
                                ('sent', 'Quotation Sent'),
                                ('sale', 'Sales Order'),
                                ('done', 'Locked'),
                                ('cancel', 'Cancelled'),
                                ("pre_ct","Pre CT Partner Approval"),("pre_tst", "Pre TST approval"),("pre_cf", "Pre C&F approval"),("pre_md", "Pre MD approval"),("waiting_otf","Waiting For OTF"),("ct_approve", "CT partner approval"),("tst_approve", "TST approval"),("cf_executive", "C&F Executive"),("cf_head", "C&F Head"),
                                ("cf_approve", "C&F approval"),("md_approve", "MD approval"),("ct_approve_email", "CT partner Approval"),("tst_approve_email", "TST Approval"),
                                ("cf_approve_email", "C&F Approval"),("md_approve_email", "MD Approval"),("internal","Internal Meeting"),('sale','Work Order')], related='state', 
                                 tracking=False, string="State WO")
    
    
    
    # fields for reject reason
    
    reason_id= fields.Char(string="CT Partner Reject")
    
    action_id= fields.Char(string="TST Reject")
    
    cf_executive= fields.Char(string="C&F Reject")
    
    cf_reject= fields.Char(string="C&F Head Reject")
    
    md_reject= fields.Char(string="MD Reject")
    
    ct_email= fields.Char(string="CT Email Reject")
    
    tst_email= fields.Char(string="TST Email Reject")
    
    cf_executive_email= fields.Char(string="C&F Email Reject")
    
    cf_approve_email= fields.Char(string="C&F Approve Email")
    
    md_email= fields.Char(string="MD Approve Email")
    
    is_pre_ct_approval = fields.Char('Pre CT Reject')
    
    is_pre_tst_approval = fields.Char('Pre TST Reject')
    
    is_pre_cf_executive = fields.Char('Pre CF Reject')
    
    is_pre_cf_approval = fields.Char('Pre CF Reject')
    
    is_pre_md_approval = fields.Char('Pre MD Reject')
    
    
    date1 = fields.Datetime('Date')
    date2 = fields.Datetime('Date')
    date3 = fields.Datetime('Date')
    date4 = fields.Datetime('Date')
    date5 = fields.Datetime('Date')
    date6 = fields.Datetime('Date')
    date7 = fields.Datetime('Date')
    date8 = fields.Datetime('Date')
    date9 = fields.Datetime('Date')
    date10 = fields.Datetime('Date')
    date11 = fields.Datetime('Date')
    date12 = fields.Datetime('Date')
    date13 = fields.Datetime('Date')
    date14 = fields.Datetime('Date')
    date15 = fields.Datetime('Date')
    
    
    # ------------------------------------
     
    def check_quotation_date(self):
        sale = self.env['sale.order'].search([])
        for rec in sale:
            if rec.date_order:
                days = int(self.env['ir.config_parameter'].sudo().get_param("base.sale_expire_days"))
                expire_date = datetime.date(rec.date_order) + timedelta(days=days)
                if (expire_date <= date.today()) and (rec.state in ['pre_ct','pre_tst','pre_cf']):
                    rec.state = 'pre_md'
                elif (expire_date <= date.today()) and (rec.state in ['ct_approve','tst_approve','cf_approve']):
                    rec.state = 'md_approve'
                elif (expire_date <= date.today()) and (rec.state in ['ct_approve_email','tst_approve_email','cf_approve_email']):
                    rec.state = 'md_approve_email'
            if not rec.create_uid.approve_md:
                raise UserError(_('Please assign MD in User Configuration.'))
            rec.check_sale_state(rec)
                
    def check_sale_state(self,rec):
        sale = self.env['sale.order'].search([])
        days = int(self.env['ir.config_parameter'].sudo().get_param("base.sale_expire_days"))
        expire_date = datetime.date(rec.date_order) + timedelta(days=days)
        if (expire_date <= date.today()) and (rec.state in ['pre_md','md_approve','md_approve_email']):
            mail_template = self.env.ref('sales_stage.sale_md_escalation_email_template')
            mail_template.send_mail(self.id, force_send=True)
            users = rec.create_uid.approve_md.id
            if rec.state == 'pre_md':
                rec.activity_schedule('sales_stage.mail_act_sale_stage', user_id=users, note="Pre MD Approval Done")
            else:
                rec.activity_schedule('sales_stage.mail_act_sale_stage', user_id=users, note="MD Approval Done")

    def button_ct_approval(self):
        if  not self.block_no or not self.build_area or not self.floor_no or not self.rating_version or not self.construction_start_date or not self.construction_end_date or not self.occupancy_date or not self.rating_target or not self.project_address or not self.statutory_obligation or not self.project_stage_during_otf_creation:
            raise UserError(_('Project Details are Mandatory to Generate OTF'))
        if  self.calculated_amount_travel>0:
            if not self.travel_line_ids:
                raise UserError(_('Travel Details are Mandatory '))
                    
        
        
            
        view_id = self.env.ref('wizard_sale.sale_report_wizard')
        result = {
            'type': 'ir.actions.act_window',
            'res_model': 'ordertype.test',
            'view_type': 'tree',
            'view_mode': 'form',
            'target': 'new',
            'view_id': view_id.id,
            'views': [(view_id.id, 'form')],
            'context': {'default_saleorder_id':self.id}
        }
        # self.write({'state': 'ct_approve'})
        return result
        

    def waiting_otf_button(self):
        self.otf_prepared_by=self.user_id.name
        self.ct_approved_date=datetime.today()
        template_id = self.env.ref('sales_stage.sale_state_approve_template').id
        template = self.env['mail.template'].browse(template_id)
        template.send_mail(self.id, force_send=True)
        self.state = 'ct_approve'


 
    def pre_waiting_otf_button(self):
        users = self.user_id.approve_ct.id      
        template_id = self.env.ref('sales_stage.sale_state_approve_template').id
        template = self.env['mail.template'].browse(template_id)
        template.send_mail(self.id, force_send=True)
        self.activity_schedule('sales_stage.mail_act_sale_stage', user_id=users, note="Pre CT Approval")
        self.state = 'pre_ct'   
        
    @api.model
    def get_email_to_members(self):
        users = self.user_id.approve_ct.name
        print("Approveeee Cttttttttt",users)
        return users          
    # def button_otf_generate(self):        

    # @api.depends('state')
    # def cancel_button_invisible(self):
        # for rec in self:
            # wiz_obj = self.env['ordertype.test'].search([('saleorder_id','=',rec.id)])
            # if wiz_obj.confirm_id == 'work':
                # rec.test = True
            # elif wiz_obj.confirm_id == 'mail':
                # rec.write({'test':False})
            # else:
                # rec.write({'test':False})


    def button_ct_approval2(self):
        # result = super(sales_stage, self).action_confirm()
        if not self.total_site_area or not self.block_no or not self.build_area or not self.floor_no or not self.rating_version or not self.construction_start_date or not self.construction_end_date or not self.occupancy_date or not self.rating_target:#not self.service_required or
            raise UserError(_('Project Details are Mandatory to Generate OTF'))
        view_id = self.env.ref('wizard_sale.sale_report_wizard2')
        template_id = self.env.ref('sales_stage.sale_state_approve_template').id
        template = self.env['mail.template'].browse(template_id)
        template.send_mail(self.id, force_send=True)
        users = self.user_id.approve_ct.id 
        self.activity_schedule('sales_stage.mail_act_sale_stage', user_id=users, note="CT Approval")
        result = {
            'type': 'ir.actions.act_window',
            'res_model': 'ordertype.test',
            'view_type': 'tree',
            'view_mode': 'form',
            'target': 'new',
            'view_id': view_id.id,
            'views': [(view_id.id, 'form')],
            'context': {'default_saleorder_id':self.id}
        }
        # self.write({'state': 'sale'})
        return result

    def action_ct_approve(self):
        
        self.otf_checked_by=self.env.user.name
        self.partner_approved_date=datetime.today()
        template_id = self.env.ref('sales_stage.sale_cf_exe_state_approve_template').id
        template = self.env['mail.template'].browse(template_id)
        template.send_mail(self.id, force_send=True)
        if not self.user_id.approve_ct.id:
            raise UserError(_("CT Partner is mandatory"))
        users = self.user_id.approve_ct.id
        self.activity_schedule('sales_stage.mail_act_sale_stage', user_id=users, note="CT Approval")
        if self.sale_type == 'non_standard':
            self.state = 'tst_approve'
        else:
            self.state = 'cf_executive'
        

        # return self.write({'state': 'draft'})

    def action_tst_approve(self):
        template_id = self.env.ref('sales_stage.sale_tst_state_approve_template').id
        template = self.env['mail.template'].browse(template_id)
        template.send_mail(self.id, force_send=True)
        users = self.user_id.approve_tst.id
        self.activity_schedule('sales_stage.mail_act_sale_stage', user_id=users, note="TST Approval")
        self.state = 'cf_executive'
        
    # def action_tst_reject(self):
        # return self.write({'state': 'draft'})
    
    
    
    def action_cf_exe_approve(self):
        self.otf_commercials_checked_by=self.env.user.name
        self.cf_approved_date=datetime.today()
        # template_id = self.env.ref('sales_stage.sale_cf_state_approve_template').id
        # template = self.env['mail.template'].browse(template_id)      
        # template.send_mail(self.id, force_send=True)
        
        template_id = self.env.ref('sales_stage.sale_cf_state_approve_template')
        template = self.env['mail.template'].browse(template_id.id)

        # Render the email template with specific record data
        rendered_template = template._render_template(template.body_html, 'sale.order', self.id)
        
        mail = {
                    'subject': "CF Approval",
                    'email_from': self.company_id.email,
                    'email_to': self.create_uid.approve_cf.email,
                    'auto_delete':True,
                    # 'recipient_ids': [(6, 0, [v.id for v in email_to])],
                    'body_html': rendered_template,
                }
        print(mail,'maillllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllll')
        mail_create = self.env['mail.mail'].create(mail)
        mail_create.send()
        
        if not self.user_id.cf_execute.id:
            raise UserError(_("Executive is mandatory"))
        users = self.user_id.cf_execute.id
        self.activity_schedule('sales_stage.mail_act_sale_stage', user_id=users, note="CF Executive Approval")
        self.state = 'cf_approve'
    
  
    
    # def action_cf_exe_reject(self):
        # return self.write({'state': 'draft'})
    
    
    
    # def action_cf_head_approve(self):
        # template_id = self.env.ref('sales_stage.sale_cf_exe_state_approve_template').id
        # template = self.env['mail.template'].browse(template_id)
        # template.send_mail(self.id, force_send=True)
        # users = self.user_id.cf_execute.id
        # self.activity_schedule('sales_stage.mail_act_sale_stage', user_id=users, note="CF Executive Head Approval")
        # self.state = 'cf_approve'
    
    
    
    # def action_cf_head_reject(self):
        # return self.write({'state': 'sent'})
    
    

    def action_cf_approve(self):
        self.otf_commercials_approved_by=self.env.user.name
        self.action_cf_approved_date=datetime.today()
        template_id = self.env.ref('sales_stage.sale_md_state_approve_template').id
        template = self.env['mail.template'].browse(template_id)
        template.send_mail(self.id, force_send=True)
        if not self.user_id.approve_cf.id :
            raise UserError(_("CF Partner is mandatory"))
        users = self.user_id.approve_cf.id      
        self.activity_schedule('sales_stage.mail_act_sale_stage', user_id=users, note="CF Approval")
        self.state = 'md_approve'
        
    @api.model
    def get_email_to_cf_approve(self):
        users = self.user_id.approve_cf.name
        print("ApproveeeeCF EXecuteeeeeeeeeee",users)
        return users       
    
    # def action_cf_reject(self):
        # return self.write({'state': 'draft'})

    
    def action_md_approve(self):
        self.otf_approved_by=self.env.user.name
        self.approved_date=datetime.today()
        if not self.user_id.approve_cf.id:
            raise UserError(_("CF Partner is mandatory"))
        users = self.user_id.approve_cf.id
        self.activity_schedule('sales_stage.mail_act_sale_stage', user_id=users, note="MD Approval")
        self.state = 'sale'
        
        template_id = self.env.ref('sales_stage_inherit.project_approval_mail_template').id
        template = self.env['mail.template'].browse(template_id)
        template.send_mail(self.id, force_send=True)
        
        
        
        # super(sales_stage, self).action_confirm()
        self.action_confirm() 
        
        
    
        
    # def action_md_reject(self):
        # return self.write({'state': 'draft'})
        
    def action_pre_ct_approve(self):
        if not self.user_id.approve_ct:
            raise UserError(_('Please assign CT Approver in User Configuration.'))
        template_id = self.env.ref('sales_stage.sale_pre_ct_approve_template').id
        template = self.env['mail.template'].browse(template_id)
        template.send_mail(self.id, force_send=True)
        users = self.user_id.approve_ct.id      
        self.activity_schedule('sales_stage.mail_act_sale_stage', user_id=users, note="Pre CT Approval")
        
        if self.sale_type == 'non_standard':
            self.state = 'pre_tst'
        else:
            self.state = 'pre_cf_executive'
        

        
    # def action_pre_ct_reject(self):
        # return self.write({'state': 'draft'})

         
    def action_pre_tst_approve(self):
        if not self.user_id.approve_tst:
            raise UserError(_('Please assign TST Approver in User Configuration.'))
        template_id = self.env.ref('sales_stage.sale_pre_tst_approve_template').id
        template = self.env['mail.template'].browse(template_id)
        template.send_mail(self.id, force_send=True)
        users = self.user_id.approve_tst.id  
        self.activity_schedule('sales_stage.mail_act_sale_stage', user_id=users, note="Pre TST Approval")
        self.state = 'pre_cf_executive'        
        
    # def action_pre_tst_reject(self):
        # return self.write({'state': 'draft'})



    def action_pre_cf_execute_approve(self):
        if not self.user_id.cf_execute:
            raise UserError(_('Please assign CF executive in User Configuration.'))
        template_id = self.env.ref('sales_stage.sale_pre_cf_executive_approve_template').id
        template = self.env['mail.template'].browse(template_id)
        template.send_mail(self.id, force_send=True)
        users = self.user_id.cf_execute.id  
        self.activity_schedule('sales_stage.mail_act_sale_stage', user_id=users, note="Pre CF Executive Approval")
        self.state = 'pre_cf'

    @api.model
    def get_email_to_cf_execute(self):
        users = self.user_id.cf_execute.name
        print("Approveeee Pre CF EXecuteeeeeeeeeee",users)
        return users       
     
    # def action_pre_cf_execute_reject(self):
        # return self.write({'state': 'draft'})




    # def action_pre_cf_head_approve(self):
        # if not self.user_id.cf_execute:
            # raise UserError(_('Please assign CF executive in User Configuration.'))
        # template_id = self.env.ref('sales_stage.sale_pre_cf_executive_approve_template').id
        # template = self.env['mail.template'].browse(template_id)
        # template.send_mail(self.id, force_send=True)
        # users = self.user_id.cf_execute.id  
        # self.activity_schedule('sales_stage.mail_act_sale_stage', user_id=users, note="Pre CF Executive Approval")
        # self.state = 'pre_cf'


    # def action_pre_cf_head_reject(self):
        # return self.write({'state': 'sent'})

    def get_url(self):
        baseurl=self.env['ir.config_parameter'].sudo().get_param('web.base.url')
        baseurl = baseurl+'/web#id=' +str(self.id) +'&model=sale.order&view_type=form'
        return baseurl



    def action_pre_cf_approve(self):
        if not self.user_id.approve_cf:
            raise UserError(_('Please assign CF Approver in User Configuration.'))
        template_id = self.env.ref('sales_stage.sale_pre_cf_approve_template').id
        template = self.env['mail.template'].browse(template_id)
        template.send_mail(self.id, force_send=True)
        users = self.user_id.approve_cf.id  
        self.activity_schedule('sales_stage.mail_act_sale_stage', user_id=users, note="Pre CF Approval")
        self.state = 'pre_md'    
       
    # def action_pre_cf_reject(self):
    #     return self.write({'state': 'draft'})
 
    def action_pre_md_approve(self):
        if not self.user_id.approve_md:
            raise UserError(_('Please assign MD in User Configuration.'))
        template_id = self.env.ref('sales_stage.sale_pre_md_approve_template').id
        template = self.env['mail.template'].browse(template_id)
        template.send_mail(self.id, force_send=True)
        users = self.user_id.approve_md.id
        self.activity_schedule('sales_stage.mail_act_sale_stage', user_id=users, note="Pre MD Approval")
        self.state = 'sale'
        result = super(sales_stage, self).action_confirm()
        self.is_workorder=False
        return result
    
    @api.model
    def get_email_to_pre_md(self):
        users = self.user_id.approve_md.name
        print("Approveeee Pre MD Testttttttttttttttttt",users)
        return users       
        
    # def action_pre_md_reject(self):
        # return self.write({'state': 'draft'})

    def action_ct_approve1(self):
        template_id = self.env.ref('sales_stage.sale_state_approve_template').id
        template = self.env['mail.template'].browse(template_id)
        template.send_mail(self.id, force_send=True)
        users = self.user_id.approve_ct.id       
        self.activity_schedule('sales_stage.mail_act_sale_stage', user_id=users, note="CT Approval")
        if self.sale_type == 'non_standard':
            self.state = 'tst_approve_email'
        else:
            self.state = 'cf_executive_email'
            
            
    # def action_ct_reject1(self):
        # return self.write({'state': 'draft'})
        
        
        
    def action_exe_approve1(self):
        template_id = self.env.ref('sales_stage.sale_cf_exe_state_approve_template').id
        template = self.env['mail.template'].browse(template_id)
        template.send_mail(self.id, force_send=True)
        users = self.user_id.cf_execute.id       
        self.activity_schedule('sales_stage.mail_act_sale_stage', user_id=users, note="C&F Executive Approval")
        
        self.state = 'cf_approve_email'
      
            
            
    # def action_exe_reject1(self):
        # return self.write({'state': 'draft'})   
        
        
        
    # def action_cf_head_approve1(self):
        # template_id = self.env.ref('sales_stage.sale_cf_exe_state_approve_template').id
        # template = self.env['mail.template'].browse(template_id)
        # template.send_mail(self.id, force_send=True)
        # users = self.user_id.cf_execute.id       
        # self.activity_schedule('sales_stage.mail_act_sale_stage', user_id=users, note="C&F Head Approval")
        
        # self.state = 'cf_approve_email'
      
            
            
    # def action_cf_head_reject1(self):
        # return self.write({'state': 'sent'})      
        
        
        

    def action_tst_approve1(self):
        template_id = self.env.ref('sales_stage.sale_tst_state_approve_template').id
        template = self.env['mail.template'].browse(template_id)
        template.send_mail(self.id, force_send=True)
        users = self.user_id.approve_cf.id  
        self.activity_schedule('sales_stage.mail_act_sale_stage', user_id=users, note="TST Approval")
        self.state = 'cf_executive_email'
        
    # def action_tst_reject1(self):
        # return self.write({'state': 'draft'})

    def action_cf_approve1(self):
        template_id = self.env.ref('sales_stage.sale_tst_state_approve_template').id
        template = self.env['mail.template'].browse(template_id)      
        template.send_mail(self.id, force_send=True)
        users = self.user_id.approve_md.id  
        self.activity_schedule('sales_stage.mail_act_sale_stage', user_id=users, note="CF Approval")
        self.state = 'md_approve_email'

        
    # def action_cf_reject1(self):
        # return self.write({'state': 'draft'})

    def action_md_approve1(self):
        template_id = self.env.ref('sales_stage.sale_md_state_approve_template').id
        template = self.env['mail.template'].browse(template_id)
        template.send_mail(self.id, force_send=True)
        self.state = 'internal'
    # def action_md_reject1(self):
        # return self.write({'state': 'draft'})
        
    def action_cancel_internal(self):
        self.state = 'cancel'
        
        
    # @api.depends('sale_type')    
    # def _compute_hide(self):    
    #     if self.sale_type == 'standard':
    #         self.hide = True
    #     else:
    #         self.hide = False
        
            
        

class salesLine(models.Model):
    _name = "sale.requirement"
    
    req_id = fields.Many2one('sale.order')
    name = fields.Char("Name")
    desc = fields.Char("Description")
Editor is loading...
Leave a Comment