Commit c71f3106 by 夏超

[add] 新增零部件数量逻辑

parent 5309270c
...@@ -15,31 +15,3 @@ class JzjxInheritRepairOrderLine(models.Model): ...@@ -15,31 +15,3 @@ class JzjxInheritRepairOrderLine(models.Model):
repair_work_order_id = fields.Many2one("roke.work.order", string="返修工单") repair_work_order_id = fields.Many2one("roke.work.order", string="返修工单")
is_refix_auto_work_order = fields.Boolean(string="是否自动生产返修单") is_refix_auto_work_order = fields.Boolean(string="是否自动生产返修单")
class JzjxInheritWorkOrder(models.Model):
_inherit = "roke.work.order"
def write(self, vals):
id_dict = {}
for v in self:
id_dict[str(v.id)] = v.state
res = super(JzjxInheritWorkOrder, self).write(vals)
for v in self:
old_state = id_dict.get(str(v.id), "")
if "state" not in vals.keys():
return res
state = vals.get("state", "")
if state in ["已完工", "强制完成"]:
repair_order_id = self.env["roke.repair.order.line"].sudo().search([
("repair_work_order_id", "=", self.id)], limit=1)
if repair_order_id:
repair_order_id.write({"state": "返修完成"})
repair_order_id.order_id.write({"state": "返修完成"})
if state == "未完工" and old_state in ["暂停", "强制完工", "已完工"]:
repair_order_id = self.env["roke.repair.order.line"].sudo().search([
("repair_work_order_id", "=", self.id)], limit=1)
if repair_order_id:
repair_order_id.write({"state": "返修中"})
repair_order_id.order_id.write({"state": "返修中"})
return res
# -*- coding: utf-8 -*- # -*- coding: utf-8 -*-
import http.client import http.client
import mimetypes import mimetypes
import math
from codecs import encode from codecs import encode
from odoo import models, fields, api, _ from odoo import models, fields, api, _
from odoo.exceptions import ValidationError from odoo.exceptions import ValidationError
...@@ -13,7 +14,9 @@ class InheritProductionTask(models.Model): ...@@ -13,7 +14,9 @@ class InheritProductionTask(models.Model):
taskName = fields.Char(string="任务名称") taskName = fields.Char(string="任务名称")
UploadMsg = fields.Char(string="上传状态") UploadMsg = fields.Char(string="上传状态")
TaskUUID = fields.Char(string="任务UUID") TaskUUID = fields.Char(string="任务UUID")
spare_parts_qty = fields.Float(string="零部件数量", default=0) spare_parts_qty = fields.Float(string="切割零部件数量", default=0)
press_riveting_qty = fields.Float(string="压铆零部件数量", default=0)
bending_qty = fields.Float(string="折弯零部件数量", default=0)
def upload_task(self): def upload_task(self):
""" """
...@@ -44,3 +47,51 @@ class InheritProductionTask(models.Model): ...@@ -44,3 +47,51 @@ class InheritProductionTask(models.Model):
self.document_ids = [(4, a.id)] self.document_ids = [(4, a.id)]
return res return res
@api.onchange("routing_id", "product_id", "plan_qty", "type", "spare_parts_qty", "press_riveting_qty", "bending_qty")
def _onchange_routing_id(self):
return super(InheritProductionTask, self)._onchange_routing_id()
def _create_work_order_get_values(self, task, routing_line):
"""
任务生成工单获取工单数据
:return:
"""
res = super(InheritProductionTask, self)._create_work_order_get_values(task, routing_line)
rounding_type = self.env['ir.config_parameter'].sudo().get_param('e_bom.material.demand.rounding',
default="精确计算")
if routing_line.process_id.name in "切割":
plan_qty = task.spare_parts_qty
elif routing_line.process_id.name in "压铆":
plan_qty = task.press_riveting_qty
elif routing_line.process_id.name in "折弯":
plan_qty = task.bending_qty
else:
plan_qty = task.plan_qty * routing_line.multiple
if rounding_type == "向上取整":
plan_qty = math.ceil(plan_qty)
elif rounding_type == "向下取整":
plan_qty = int(plan_qty)
res.update({"plan_qty": plan_qty})
return res
def _get_new_work_order_data(self, routing_line, product, plan_qty, task_type):
"""
onchang获取工单数据
:return:
"""
res = super(InheritProductionTask, self)._get_new_work_order_data(routing_line, product, plan_qty, task_type)
rounding_type = self.env['ir.config_parameter'].sudo().get_param('e_bom.material.demand.rounding', default="精确计算")
if routing_line.process_id.name in "切割":
plan_qty = self.spare_parts_qty
elif routing_line.process_id.name in "压铆":
plan_qty = self.press_riveting_qty
elif routing_line.process_id.name in "折弯":
plan_qty = self.bending_qty
else:
plan_qty = self.plan_qty * routing_line.multiple
if rounding_type == "向上取整":
plan_qty = math.ceil(plan_qty)
elif rounding_type == "向下取整":
plan_qty = int(plan_qty)
res.update({"plan_qty": plan_qty})
return res
...@@ -7,3 +7,76 @@ class InheritWorkOrder(models.Model): ...@@ -7,3 +7,76 @@ class InheritWorkOrder(models.Model):
document_ids = fields.Many2many(related="task_id.document_ids", string="作业指导") document_ids = fields.Many2many(related="task_id.document_ids", string="作业指导")
task_file_ids = fields.Many2many(related="task_id.file_ids") task_file_ids = fields.Many2many(related="task_id.file_ids")
repair_task_id = fields.Many2one('roke.production.task', string="返修上级任务") repair_task_id = fields.Many2one('roke.production.task', string="返修上级任务")
def write(self, vals):
id_dict = {}
for v in self:
id_dict[str(v.id)] = v.state
res = super(InheritWorkOrder, self).write(vals)
for v in self:
old_state = id_dict.get(str(v.id), "")
if "state" not in vals.keys():
return res
state = vals.get("state", "")
if state in ["已完工", "强制完成"]:
repair_order_id = self.env["roke.repair.order.line"].sudo().search([
("repair_work_order_id", "=", self.id)], limit=1)
if repair_order_id:
repair_order_id.write({"state": "返修完成"})
repair_order_id.order_id.write({"state": "返修完成"})
if state == "未完工" and old_state in ["暂停", "强制完工", "已完工"]:
repair_order_id = self.env["roke.repair.order.line"].sudo().search([
("repair_work_order_id", "=", self.id)], limit=1)
if repair_order_id:
repair_order_id.write({"state": "返修中"})
repair_order_id.order_id.write({"state": "返修中"})
return res
def _get_production_multiple(self, previous):
"""
获取当前生产倍数
:param previous:
:return:
"""
judge = "切割" in self.process_id.name or "压铆" in self.process_id.name or "折弯" in self.process_id.name
if not self.routing_line_id and not judge:
# 无工艺明细直接返回
return 1
if "切割" in self.process_id.name:
multiple = self.task_id.spare_parts_qty / self.task_id.plan_qty
elif "压铆" in self.process_id.name:
multiple = self.task_id.press_riveting_qty / self.task_id.plan_qty
elif "折弯" in self.process_id.name:
multiple = self.task_id.bending_qty / self.task_id.plan_qty
else:
multiple = self.routing_line_id.multiple
if len(previous) > 1:
# 取到最小数对应的前道工单
rel_previous = self._multi_previous_get_min_finished(previous)
rel_previous_judge = "切割" in rel_previous.process_id.name or "压铆" in rel_previous.process_id.name \
or "折弯" in rel_previous.process_id.name
if not rel_previous.routing_line_id.multiple and not rel_previous_judge: # 无倍数直接返回
return 1
if "切割" in rel_previous.process_id.name:
rel_previous_multiple = rel_previous.task_id.spare_parts_qty / rel_previous.task_id.plan_qty
elif "压铆" in rel_previous.process_id.name:
rel_previous_multiple = rel_previous.task_id.press_riveting_qty / rel_previous.task_id.plan_qty
elif "折弯" in rel_previous.process_id.name:
rel_previous_multiple = rel_previous.task_id.bending_qty / rel_previous.task_id.plan_qty
else:
rel_previous_multiple = rel_previous.routing_line_id.multiple
return multiple / rel_previous_multiple
if not previous.routing_line_id.multiple and not judge: # 无倍数直接返回
return 1
elif not previous and judge:
return 1
if "切割" in previous.process_id.name:
previous_multiple = previous.task_id.spare_parts_qty / self.task_id.plan_qty
elif "压铆" in previous.process_id.name:
previous_multiple = previous.task_id.press_riveting_qty / self.task_id.plan_qty
elif "折弯" in previous.process_id.name:
previous_multiple = previous.task_id.bending_qty / self.task_id.plan_qty
else:
previous_multiple = previous.routing_line_id.multiple
return multiple / previous_multiple
...@@ -60,7 +60,7 @@ class RokeWorkLog(models.Model): ...@@ -60,7 +60,7 @@ class RokeWorkLog(models.Model):
return res return res
try: try:
work_order.app_confirm( work_order.app_confirm(
finish_qty=sum(res.part_ids.mapped("amount")) / (task.spare_parts_qty if task.spare_parts_qty != 0 else 1), finish_qty=sum(res.part_ids.mapped("amount")),
employee_id=self.env.user.employee_id.id, employee_id=self.env.user.employee_id.id,
unqualified_qty=0, unqualified_qty=0,
work_hours=round(res.timeTaken / 3600, 2), work_hours=round(res.timeTaken / 3600, 2),
......
...@@ -13,7 +13,11 @@ ...@@ -13,7 +13,11 @@
</xpath> </xpath>
<xpath expr="//field[@name='pass_rate']" position="after"> <xpath expr="//field[@name='pass_rate']" position="after">
<field name="UploadMsg" readonly="1"/> <field name="UploadMsg" readonly="1"/>
</xpath>
<xpath expr="//field[@name='type']" position="after">
<field name="spare_parts_qty"/> <field name="spare_parts_qty"/>
<field name="press_riveting_qty"/>
<field name="bending_qty"/>
</xpath> </xpath>
<xpath expr="//header" position="inside"> <xpath expr="//header" position="inside">
<button name="upload_task" type="object" string="上传任务" class="btn btn-primary" <button name="upload_task" type="object" string="上传任务" class="btn btn-primary"
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment