Untitled
unknown
plain_text
10 months ago
25 kB
4
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