mrp_packaging_qty/models/mrp_production_schedule.py

39 lines
2.1 KiB
Python

from odoo import api, fields, models
from odoo.tools.float_utils import float_round
class MrpProductionSchedule(models.Model):
_inherit = 'mrp.production.schedule'
packaging_id = fields.Many2one('mrp.packaging', string='Packaging', domain="[('product_tmpl_id', '=', product_tmpl_id)]", check_company=True)
def get_production_schedule_view_state(self, period_scale=False, use_all_schedules=False):
res = super().get_production_schedule_view_state(period_scale, use_all_schedules)
for state in res:
mps = self.browse(state['id'])
if mps.packaging_id:
packaging_qty = mps.packaging_id.qty
if packaging_qty:
# Adjust header details if needed, but mostly we modify forecast_ids
for forecast in state['forecast_ids']:
forecast['forecast_qty'] = forecast['forecast_qty'] / packaging_qty
forecast['replenish_qty'] = forecast['replenish_qty'] / packaging_qty
forecast['safety_stock_qty'] = forecast['safety_stock_qty'] / packaging_qty
forecast['starting_inventory_qty'] = forecast['starting_inventory_qty'] / packaging_qty
forecast['incoming_qty'] = forecast['incoming_qty'] / packaging_qty
forecast['outgoing_qty'] = forecast['outgoing_qty'] / packaging_qty
forecast['indirect_demand_qty'] = forecast['indirect_demand_qty'] / packaging_qty
if state.get('product_uom_id'):
state['product_uom_id'] = (state['product_uom_id'][0], mps.packaging_id.name)
return res
def set_forecast_qty(self, date_index, quantity, period_scale=False):
if self.packaging_id:
quantity = float(quantity) * self.packaging_id.qty
return super().set_forecast_qty(date_index, quantity, period_scale)
def set_replenish_qty(self, date_index, quantity, period_scale=False):
if self.packaging_id:
quantity = float(quantity) * self.packaging_id.qty
return super().set_replenish_qty(date_index, quantity, period_scale)