[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:
Haresh Shyara
2016-09-28 12:45:03 +02:00
committed by Josse Colpaert
parent 3597942721
commit ae7cb1483c
4 changed files with 53 additions and 2 deletions
+7 -2
View File
@@ -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)
+1
View File
@@ -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>
+39
View File
@@ -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>