75 lines
2.8 KiB
Python
Executable File
75 lines
2.8 KiB
Python
Executable File
from odoo import models, fields, api
|
|
|
|
class SOSCalculateMSPWizard(models.TransientModel):
|
|
_name = 'sos_msp_wizard'
|
|
_description = 'Calculate MSP Wizard'
|
|
|
|
material_plan_ids = fields.Many2many('sos_material_plan_msp', string="Material Plan")
|
|
sfg_plan_ids = fields.Many2many('sos_sfg_plan_msp', string="SFG Plan")
|
|
currency_id = fields.Many2one('res.currency', string='Currency')
|
|
old_msp = fields.Monetary(string="Current MSP", currency_field='currency_id')
|
|
total_sfg_cost = fields.Monetary(
|
|
string="Total SFG Cost",
|
|
currency_field='currency_id',
|
|
compute="_compute_total_cost",
|
|
store=True
|
|
)
|
|
total_material_cost = fields.Monetary(
|
|
string="Total Material Cost",
|
|
currency_field='currency_id',
|
|
compute="_compute_total_material_cost",
|
|
store=True
|
|
)
|
|
new_msp = fields.Monetary(
|
|
string="Maximum Selling Price",
|
|
currency_field='currency_id',
|
|
compute="_compute_final_cost",
|
|
store=True
|
|
)
|
|
@api.depends('total_material_cost','total_sfg_cost')
|
|
def _compute_final_cost(self):
|
|
for record in self:
|
|
record.new_msp = record.total_material_cost + record.total_sfg_cost
|
|
@api.depends('material_plan_ids.final_cost')
|
|
def _compute_total_material_cost(self):
|
|
for record in self:
|
|
record.total_material_cost = sum(record.material_plan_ids.mapped('final_cost'))
|
|
|
|
@api.depends('sfg_plan_ids.final_cost')
|
|
def _compute_total_cost(self):
|
|
for record in self:
|
|
record.total_sfg_cost = sum(record.sfg_plan_ids.mapped('final_cost'))
|
|
@api.model
|
|
def default_get(self, fields):
|
|
res = super(SOSCalculateMSPWizard, self).default_get(fields)
|
|
fg_name = self.env.context.get('fg_name')
|
|
material_plans = self.env['sos_material_plan_msp'].search([('fg_name', '=', fg_name)])
|
|
sfg_plans = self.env['sos_sfg_plan_msp'].search([('fg_name', '=', fg_name)])
|
|
|
|
# Use the correct command format for Many2many fields
|
|
res.update({
|
|
'material_plan_ids': [(6, 0, material_plans.ids)],
|
|
'sfg_plan_ids': [(6, 0, sfg_plans.ids)],
|
|
'old_msp': self.env.context.get('old_msp')
|
|
|
|
})
|
|
return res
|
|
def action_update_msp(self):
|
|
fg_name = self.env.context.get('fg_name')
|
|
fg_master = self.env['sos_fg'].search([('id', '=', fg_name)])
|
|
if fg_master:
|
|
fg_master.write({
|
|
'msp':self.new_msp
|
|
})
|
|
return {
|
|
'type': 'ir.actions.client',
|
|
'tag': 'display_notification',
|
|
'params': {
|
|
'message': "Updated Successfully",
|
|
'type': 'success',
|
|
'sticky': False
|
|
}
|
|
}
|
|
|
|
|