[IMP] mrp: create graph and pivot of duration_expected of workorders related to a workcenter and add stat button with load to come
This replaces the old workcenter load report
This commit is contained in:
committed by
Josse Colpaert
parent
3597942721
commit
ae7cb1483c
@@ -49,24 +49,29 @@ class MrpWorkcenter(models.Model):
|
||||
oee = fields.Float(compute='_compute_oee', help='Overall Equipment Effectiveness, based on the last month')
|
||||
oee_target = fields.Float(string='OEE Target', help="OEE Target in percentage", default=90)
|
||||
performance = fields.Integer('Performance', compute='_compute_performance', help='Performance over the last month')
|
||||
workcenter_load = fields.Float('Work Center Load', compute='_compute_workorder_count')
|
||||
|
||||
@api.depends('order_ids.workcenter_id', 'order_ids.state', 'order_ids.date_planned_start')
|
||||
@api.depends('order_ids.duration_expected', 'order_ids.workcenter_id', 'order_ids.state', 'order_ids.date_planned_start')
|
||||
def _compute_workorder_count(self):
|
||||
MrpWorkorder = self.env['mrp.workorder']
|
||||
result = {wid: {} for wid in self.ids}
|
||||
result_duration_expected = {wid: 0 for wid in self.ids}
|
||||
#Count Late Workorder
|
||||
data = MrpWorkorder.read_group([('workcenter_id', 'in', self.ids), ('state', 'in', ('pending', 'ready')), ('date_planned_start', '<', datetime.datetime.now().strftime('%Y-%m-%d'))], ['workcenter_id'], ['workcenter_id'])
|
||||
count_data = dict((item['workcenter_id'][0], item['workcenter_id_count']) for item in data)
|
||||
#Count All, Pending, Ready, Progress Workorder
|
||||
res = MrpWorkorder.read_group(
|
||||
[('workcenter_id', 'in', self.ids)],
|
||||
['workcenter_id', 'state'], ['workcenter_id', 'state'],
|
||||
['workcenter_id', 'state', 'duration_expected'], ['workcenter_id', 'state'],
|
||||
lazy=False)
|
||||
for res_group in res:
|
||||
result[res_group['workcenter_id'][0]][res_group['state']] = res_group['__count']
|
||||
if res_group['state'] in ('pending', 'ready', 'progress'):
|
||||
result_duration_expected[res_group['workcenter_id'][0]] += res_group['duration_expected']
|
||||
for workcenter in self:
|
||||
workcenter.workorder_count = sum(count for state, count in result[workcenter.id].items() if state not in ('done', 'cancel'))
|
||||
workcenter.workorder_pending_count = result[workcenter.id].get('pending', 0)
|
||||
workcenter.workcenter_load = result_duration_expected[workcenter.id]
|
||||
workcenter.workorder_ready_count = result[workcenter.id].get('ready', 0)
|
||||
workcenter.workorder_progress_count = result[workcenter.id].get('progress', 0)
|
||||
workcenter.workorder_late_count = count_data.get(workcenter.id, 0)
|
||||
|
||||
@@ -121,6 +121,7 @@ class MrpWorkorder(models.Model):
|
||||
next_work_order_id = fields.Many2one('mrp.workorder', "Next Work Order")
|
||||
scrap_ids = fields.One2many('stock.scrap', 'workorder_id')
|
||||
scrap_count = fields.Integer(compute='_compute_scrap_move_count', string='Scrap Move')
|
||||
production_date = fields.Datetime('Production Date', related='production_id.date_planned_start', store=True)
|
||||
color = fields.Integer('Color', compute='_compute_color')
|
||||
capacity = fields.Float(
|
||||
'Capacity', default=1.0,
|
||||
|
||||
@@ -271,6 +271,12 @@
|
||||
<span class="o_stat_text">Lost</span>
|
||||
</div>
|
||||
</button>
|
||||
<button name="%(action_mrp_workcenter_load_report_graph)d" type="action" class="oe_stat_button" icon="fa-bar-chart" context="{'search_default_workcenter_id': active_id}">
|
||||
<div class="o_form_field o_stat_info">
|
||||
<span class="o_stat_value"><field name="workcenter_load" widget="statinfo" nolabel="1"/> minute(s)</span>
|
||||
<span class="o_stat_text">Work Center Load</span>
|
||||
</div>
|
||||
</button>
|
||||
<button name="%(mrp_workorder_report)d" type="action" class="oe_stat_button" icon="fa-bar-chart" context="{'search_default_workcenter_id': active_id, 'search_default_thisyear': True}">
|
||||
<div class="o_form_field o_stat_info">
|
||||
<span class="o_stat_value"><field name="performance" widget="statinfo" nolabel="1"/>%</span>
|
||||
|
||||
@@ -419,4 +419,43 @@
|
||||
</p>
|
||||
</field>
|
||||
</record>
|
||||
|
||||
<record id="view_workcenter_load_pivot" model="ir.ui.view">
|
||||
<field name="name">report.workcenter.load.pivot</field>
|
||||
<field name="model">mrp.workorder</field>
|
||||
<field name="arch" type="xml">
|
||||
<pivot string="Work Center Loads">
|
||||
<field name="duration_expected" type="measure"/>
|
||||
<field name="workcenter_id" type="row"/>
|
||||
<field name="production_date" type="row" interval="day"/>
|
||||
</pivot>
|
||||
</field>
|
||||
</record>
|
||||
|
||||
<record id="view_work_center_load_graph" model="ir.ui.view">
|
||||
<field name="name">report.workcenter.load.graph</field>
|
||||
<field name="model">mrp.workorder</field>
|
||||
<field name="arch" type="xml">
|
||||
<graph string="Work Center load" type="bar">
|
||||
<field name="production_date" interval="day"/>
|
||||
<field name="workcenter_id"/>
|
||||
<field name="duration_expected" type="measure"/>
|
||||
</graph>
|
||||
</field>
|
||||
</record>
|
||||
|
||||
<record id="action_mrp_workcenter_load_report_graph" model="ir.actions.act_window">
|
||||
<field name="name">Work Center Loads</field>
|
||||
<field name="type">ir.actions.act_window</field>
|
||||
<field name="res_model">mrp.workorder</field>
|
||||
<field name="view_type">form</field>
|
||||
<field name="view_mode">pivot,graph</field>
|
||||
<field name="view_id" ref="view_workcenter_load_pivot"/>
|
||||
</record>
|
||||
|
||||
<record id="action_mrp_workcenter_load_report_pivot" model="ir.actions.act_window.view">
|
||||
<field name="view_mode">graph</field>
|
||||
<field name="view_id" ref="view_work_center_load_graph"/>
|
||||
<field name="act_window_id" ref="action_mrp_workcenter_load_report_graph"/>
|
||||
</record>
|
||||
</odoo>
|
||||
Reference in New Issue
Block a user