From bc2c0f7fb0c4ff18b1a786bce067926513aa1c5d Mon Sep 17 00:00:00 2001 From: "jinling.yang" Date: Sun, 28 Apr 2024 15:17:41 +0800 Subject: [PATCH 1/6] =?UTF-8?q?=E4=BF=AE=E5=A4=8D=E7=AB=99=E7=82=B9?= =?UTF-8?q?=E7=8A=B6=E6=80=81=E6=9C=AA=E5=8F=98=EF=BC=8C=E5=8F=8A=E9=A1=B5?= =?UTF-8?q?=E9=9D=A2=E7=AD=9B=E9=80=89=E6=A1=86=E4=BC=98=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- sf_manufacturing/models/agv_setting.py | 2 ++ sf_manufacturing/models/mrp_workorder.py | 12 ++---------- sf_manufacturing/views/mrp_workorder_view.xml | 11 +++++++---- sf_plan/models/custom_plan.py | 3 ++- 4 files changed, 13 insertions(+), 15 deletions(-) diff --git a/sf_manufacturing/models/agv_setting.py b/sf_manufacturing/models/agv_setting.py index dad6ec4f..164d3175 100644 --- a/sf_manufacturing/models/agv_setting.py +++ b/sf_manufacturing/models/agv_setting.py @@ -32,6 +32,8 @@ class AgvSetting(models.Model): if da['DeviceId'] == item.name: if da['AtHome'] is True: item.state = '占用' + else: + item.state = '空闲' class AgvTaskRoute(models.Model): diff --git a/sf_manufacturing/models/mrp_workorder.py b/sf_manufacturing/models/mrp_workorder.py index dd7dbd3c..9d64361e 100644 --- a/sf_manufacturing/models/mrp_workorder.py +++ b/sf_manufacturing/models/mrp_workorder.py @@ -1081,9 +1081,7 @@ class WorkPieceDelivery(models.Model): delivery_num = fields.Char('工件配送编码') workorder_id = fields.Many2one('mrp.workorder', string='工单', readonly=True) production_id = fields.Many2one('mrp.production', string='制造订单号', readonly=True) - production_line_id = fields.Many2one('sf.production.line', compute='_compute_production_line_id', - string='目的生产线', readonly=True, - store=True) + production_line_id = fields.Many2one('sf.production.line', string='目的生产线') plan_start_processing_time = fields.Datetime('计划开始加工时间', readonly=True) route_id = fields.Many2one('sf.agv.task.route', '任务路线') @@ -1235,13 +1233,7 @@ class WorkPieceDelivery(models.Model): raise UserError(ret['message']) except Exception as e: logging.info('config-e:%s' % e) - raise UserError("工件配送请求agv失败") - - @api.onchange('production_id.production_line_id') - def _compute_production_line_id(self): - if self.production_id.production_line_id: - self.production_line_id = self.production_id.production_line_id.id - self.plan_start_processing_time = self.production_id.plan_start_processing_time + raise UserError("工件配送请求agv失败:%s" % e) @api.depends('task_delivery_time', 'task_completion_time') def _compute_delivery_duration(self): diff --git a/sf_manufacturing/views/mrp_workorder_view.xml b/sf_manufacturing/views/mrp_workorder_view.xml index 0611e1e3..841b51ed 100644 --- a/sf_manufacturing/views/mrp_workorder_view.xml +++ b/sf_manufacturing/views/mrp_workorder_view.xml @@ -608,9 +608,12 @@ sf.workpiece.delivery - - - + + + + @@ -631,7 +634,7 @@ 工件配送 sf.workpiece.delivery - {'search_default_on_down':1} + {'search_default_on_up':1} tree,search [('type','in',['上产线','下产线'])] diff --git a/sf_plan/models/custom_plan.py b/sf_plan/models/custom_plan.py index fc38bc11..bcb15d69 100644 --- a/sf_plan/models/custom_plan.py +++ b/sf_plan/models/custom_plan.py @@ -84,7 +84,8 @@ class sf_production_plan(models.Model): item.sudo().production_id.production_line_id = item.production_line_id.id item.sudo().production_id.workorder_ids.filtered( lambda b: b.routing_type == "装夹预调").workpiece_delivery_ids.write( - {'production_line_id': item.production_line_id.id}) + {'production_line_id': item.production_line_id.id, + 'plan_start_processing_time': item.plan_start_processing_time}) # item.sudo().production_id.plan_start_processing_time = item.date_planned_start # @api.onchange('state') From 45220d75af03ef8fce8f1933f102796a6ffd5bee Mon Sep 17 00:00:00 2001 From: "jinling.yang" Date: Sun, 28 Apr 2024 17:34:41 +0800 Subject: [PATCH 2/6] =?UTF-8?q?=E6=96=B0=E5=A2=9E=E8=BF=90=E9=80=81?= =?UTF-8?q?=E7=A9=BA=E6=96=99=E6=9E=B6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- sf_manufacturing/controllers/controllers.py | 4 +- sf_manufacturing/data/empty_racks_data.xml | 36 +++++++++ sf_manufacturing/models/mrp_workorder.py | 2 + sf_manufacturing/models/product_template.py | 4 +- .../views/mrp_production_addional_change.xml | 2 +- sf_manufacturing/views/mrp_workorder_view.xml | 76 +++++++++++++++++-- sf_plan/views/view.xml | 8 ++ sf_sale/models/quick_easy_order.py | 4 +- sf_sale/models/quick_easy_order_old.py | 4 +- 9 files changed, 125 insertions(+), 15 deletions(-) create mode 100644 sf_manufacturing/data/empty_racks_data.xml diff --git a/sf_manufacturing/controllers/controllers.py b/sf_manufacturing/controllers/controllers.py index 1568f7c7..4358b35d 100644 --- a/sf_manufacturing/controllers/controllers.py +++ b/sf_manufacturing/controllers/controllers.py @@ -430,7 +430,7 @@ class Manufacturing_Connect(http.Controller): if 'DeviceId' in ret: logging.info('DeviceId:%s' % ret['DeviceId']) if 'IsComplete' in ret: - if ret['IsComplete'] is True: + if ret['IsComplete'] is True or ret['IsComplete'] is False: for i in range(1, 5): logging.info('F-RfidCode:%s' % i) if f'RfidCode{i}' in ret: @@ -482,7 +482,7 @@ class Manufacturing_Connect(http.Controller): logging.info('DeviceId:%s' % ret['DeviceId']) delivery_Arr = [] if 'IsComplete' in ret: - if ret['IsComplete'] is True: + if ret['IsComplete'] is True or ret['IsComplete'] is False: for i in range(1, 5): logging.info('F-RfidCode:%s' % i) if f'RfidCode{i}' in ret: diff --git a/sf_manufacturing/data/empty_racks_data.xml b/sf_manufacturing/data/empty_racks_data.xml new file mode 100644 index 00000000..90102ec2 --- /dev/null +++ b/sf_manufacturing/data/empty_racks_data.xml @@ -0,0 +1,36 @@ + + + + + 运送空料架路线:C01-A01 + sf.workpiece.delivery + WCA%(year)s%(month)s%(day)s + 4 + + + + + 运送空料架路线:B01-B02 + sf.workpiece.delivery + WBB%(year)s%(month)s%(day)s + 4 + + + + + 运送空料架路线:B01-A01 + sf.workpiece.delivery + WBA%(year)s%(month)s%(day)s + 4 + + + + + 运送空料架路线:C01-B02 + sf.workpiece.delivery + WCB%(year)s%(month)s%(day)s + 4 + + + + \ No newline at end of file diff --git a/sf_manufacturing/models/mrp_workorder.py b/sf_manufacturing/models/mrp_workorder.py index 9d64361e..70551c5e 100644 --- a/sf_manufacturing/models/mrp_workorder.py +++ b/sf_manufacturing/models/mrp_workorder.py @@ -1078,6 +1078,7 @@ class WorkPieceDelivery(models.Model): _name = "sf.workpiece.delivery" _description = '工件配送' + name = fields.Char('名称') delivery_num = fields.Char('工件配送编码') workorder_id = fields.Many2one('mrp.workorder', string='工单', readonly=True) production_id = fields.Many2one('mrp.production', string='制造订单号', readonly=True) @@ -1095,6 +1096,7 @@ class WorkPieceDelivery(models.Model): status = fields.Selection( [('待下发', '待下发'), ('待配送', '待配送'), ('已配送', '已配送')], string='状态', default='待下发') is_cnc_program_down = fields.Boolean('程序是否下发', default=False) + active = fields.Boolean(string="有效", default=True) # @api.model # def create(self, vals): diff --git a/sf_manufacturing/models/product_template.py b/sf_manufacturing/models/product_template.py index 16ea429a..d766629c 100644 --- a/sf_manufacturing/models/product_template.py +++ b/sf_manufacturing/models/product_template.py @@ -7,8 +7,8 @@ import os from odoo import models, fields, api, _ from odoo.exceptions import ValidationError from odoo.modules import get_resource_path -from OCC.Extend.DataExchange import read_step_file -from OCC.Extend.DataExchange import write_stl_file +# from OCC.Extend.DataExchange import read_step_file +# from OCC.Extend.DataExchange import write_stl_file class ResProductMo(models.Model): diff --git a/sf_manufacturing/views/mrp_production_addional_change.xml b/sf_manufacturing/views/mrp_production_addional_change.xml index 0e1695ef..c90122f7 100644 --- a/sf_manufacturing/views/mrp_production_addional_change.xml +++ b/sf_manufacturing/views/mrp_production_addional_change.xml @@ -79,12 +79,12 @@ - + diff --git a/sf_manufacturing/views/mrp_workorder_view.xml b/sf_manufacturing/views/mrp_workorder_view.xml index 841b51ed..28b06aeb 100644 --- a/sf_manufacturing/views/mrp_workorder_view.xml +++ b/sf_manufacturing/views/mrp_workorder_view.xml @@ -183,6 +183,8 @@ attrs='{"invisible": [("routing_type","in",("获取CNC加工程序","切割"))]}'/> + sf.workpiece.delivery - - + + + + - + @@ -634,9 +636,71 @@ 工件配送 sf.workpiece.delivery - {'search_default_on_up':1} + tree,search [('type','in',['上产线','下产线'])] + + + + + 运送空料架 + sf.workpiece.delivery + + +
+
+ + + +
+
+
+ + + + 运送空料架 + sf.workpiece.delivery + +
+ +
+
+ + + + + + + +
+
+
+
+ + + + 运送空料架 + sf.workpiece.delivery + + + + + + + + + + + + 运送空料架 + sf.workpiece.delivery + + + tree,form + [('type','in',['运送空料架'])] + diff --git a/sf_plan/views/view.xml b/sf_plan/views/view.xml index 68772142..96e19c8e 100644 --- a/sf_plan/views/view.xml +++ b/sf_plan/views/view.xml @@ -306,6 +306,14 @@ action="sf_manufacturing.sf_workpiece_delivery_act" parent="mrp.menu_mrp_manufacturing" /> + + diff --git a/sf_sale/models/quick_easy_order.py b/sf_sale/models/quick_easy_order.py index 1ece6b86..ed52d9de 100644 --- a/sf_sale/models/quick_easy_order.py +++ b/sf_sale/models/quick_easy_order.py @@ -8,8 +8,8 @@ from datetime import datetime import requests from odoo import http from odoo.http import request -from OCC.Extend.DataExchange import read_step_file -from OCC.Extend.DataExchange import write_stl_file +# from OCC.Extend.DataExchange import read_step_file +# from OCC.Extend.DataExchange import write_stl_file from odoo import models, fields, api from odoo.modules import get_resource_path from odoo.exceptions import ValidationError, UserError diff --git a/sf_sale/models/quick_easy_order_old.py b/sf_sale/models/quick_easy_order_old.py index 724d4369..24bf5738 100644 --- a/sf_sale/models/quick_easy_order_old.py +++ b/sf_sale/models/quick_easy_order_old.py @@ -6,8 +6,8 @@ import os from datetime import datetime from stl import mesh # from OCC.Core.GProp import GProp_GProps -from OCC.Extend.DataExchange import read_step_file -from OCC.Extend.DataExchange import write_stl_file +# from OCC.Extend.DataExchange import read_step_file +# from OCC.Extend.DataExchange import write_stl_file from odoo.addons.sf_base.commons.common import Common from odoo import models, fields, api from odoo.modules import get_resource_path From b1d42b9421dc35ed63d9998f2513c7a02219814a Mon Sep 17 00:00:00 2001 From: "jinling.yang" Date: Mon, 29 Apr 2024 15:31:46 +0800 Subject: [PATCH 3/6] =?UTF-8?q?=E4=BC=98=E5=8C=96=E5=B7=A5=E4=BB=B6?= =?UTF-8?q?=E9=85=8D=E9=80=81=E5=92=8C=E7=A9=BA=E6=96=99=E6=9E=B6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- sf_manufacturing/__manifest__.py | 1 + sf_manufacturing/controllers/workpiece.py | 2 +- sf_manufacturing/data/empty_racks_data.xml | 54 +++++---- sf_manufacturing/models/agv_setting.py | 7 -- sf_manufacturing/models/mrp_workorder.py | 113 +++++++++++------- sf_manufacturing/views/mrp_workorder_view.xml | 60 +++++----- sf_plan/views/view.xml | 2 +- 7 files changed, 137 insertions(+), 102 deletions(-) diff --git a/sf_manufacturing/__manifest__.py b/sf_manufacturing/__manifest__.py index 1c49c88b..54538a7d 100644 --- a/sf_manufacturing/__manifest__.py +++ b/sf_manufacturing/__manifest__.py @@ -13,6 +13,7 @@ 'depends': ['sf_base', 'sf_maintenance', 'web_widget_model_viewer', 'sf_warehouse'], 'data': [ 'data/stock_data.xml', + 'data/empty_racks_data.xml', 'security/group_security.xml', 'security/ir.model.access.csv', 'wizard/workpiece_delivery_views.xml', diff --git a/sf_manufacturing/controllers/workpiece.py b/sf_manufacturing/controllers/workpiece.py index 8cda129b..5c5d6f22 100644 --- a/sf_manufacturing/controllers/workpiece.py +++ b/sf_manufacturing/controllers/workpiece.py @@ -28,7 +28,7 @@ class Workpiece(http.Controller): req_codes = ret['reqCode'].split(',') for req_code in req_codes: workpiece_delivery = request.env['sf.workpiece.delivery'].sudo().search( - [('delivery_num', '=', req_code.strip()), ('task_completion_time', '=', False)]) + [('name', '=', req_code.strip()), ('task_completion_time', '=', False)]) if workpiece_delivery: workpiece_delivery.write({'status': '已配送', 'task_completion_time': datetime.now()}) else: diff --git a/sf_manufacturing/data/empty_racks_data.xml b/sf_manufacturing/data/empty_racks_data.xml index 90102ec2..e30edd9f 100644 --- a/sf_manufacturing/data/empty_racks_data.xml +++ b/sf_manufacturing/data/empty_racks_data.xml @@ -1,36 +1,48 @@ - - + + + 工件配送 + sf.workpiece.delivery + WDO%(year)s%(month)s%(day)s + 4 + + + + 运送空料架路线:C01-A01 - sf.workpiece.delivery - WCA%(year)s%(month)s%(day)s - 4 - + 运送空料架 + + + - + 运送空料架路线:B01-B02 - sf.workpiece.delivery - WBB%(year)s%(month)s%(day)s - 4 - + 运送空料架 + + + - + 运送空料架路线:B01-A01 - sf.workpiece.delivery - WBA%(year)s%(month)s%(day)s - 4 - + 运送空料架 + + + - + 运送空料架路线:C01-B02 - sf.workpiece.delivery - WCB%(year)s%(month)s%(day)s - 4 - + 运送空料架 + + + \ No newline at end of file diff --git a/sf_manufacturing/models/agv_setting.py b/sf_manufacturing/models/agv_setting.py index 164d3175..efdde900 100644 --- a/sf_manufacturing/models/agv_setting.py +++ b/sf_manufacturing/models/agv_setting.py @@ -46,11 +46,4 @@ class AgvTaskRoute(models.Model): start_site_id = fields.Many2one('sf.agv.site', '起点接驳站位置编号') end_site_id = fields.Many2one('sf.agv.site', '终点接驳站位置编号') destination_production_line_id = fields.Many2one('sf.production.line', '目的生产线') - priority = fields.Selection([ - ('0', '正常'), - ('1', '低'), - ('2', '中'), - ('3', '高'), - ('4', '紧急'), - ], string='优先级', default='0') active = fields.Boolean('有效', default=True) diff --git a/sf_manufacturing/models/mrp_workorder.py b/sf_manufacturing/models/mrp_workorder.py index 70551c5e..3e0d5671 100644 --- a/sf_manufacturing/models/mrp_workorder.py +++ b/sf_manufacturing/models/mrp_workorder.py @@ -484,9 +484,8 @@ class ResMrpWorkOrder(models.Model): def _json_workpiece_delivery_list(self, production): return [ - [0, '', {'production_id': production.id, 'type': '上产线', 'delivery_num': '%s-%s' % (production.name, 1)}], - [0, '', - {'production_id': production.id, 'type': '下产线', 'delivery_num': '%s-%s' % (production.name, 2)}]] + [0, '', {'production_id': production.id, 'type': '上产线'}], + [0, '', {'production_id': production.id, 'type': '下产线'}]] # 拼接工单对象属性值(表面工艺) def _json_workorder_surface_process_str(self, production, route, process_parameter, supplier_id): @@ -770,7 +769,7 @@ class ResMrpWorkOrder(models.Model): raise UserError("请对前置三元检测定位参数进行计算定位") if not self.rfid_code: raise UserError("请扫RFID码进行绑定") - self.workpiece_delivery_ids[0].write({'status': '待下发'}) + # self.workpiece_delivery_ids[0].write({'status': '待下发'}) if self.picking_out_id: picking_out = self.env['stock.picking'].search([('id', '=', self.picking_out_id.id)]) if picking_out.workorder_out_id: @@ -1078,8 +1077,7 @@ class WorkPieceDelivery(models.Model): _name = "sf.workpiece.delivery" _description = '工件配送' - name = fields.Char('名称') - delivery_num = fields.Char('工件配送编码') + name = fields.Char('单据编号') workorder_id = fields.Many2one('mrp.workorder', string='工单', readonly=True) production_id = fields.Many2one('mrp.production', string='制造订单号', readonly=True) production_line_id = fields.Many2one('sf.production.line', string='目的生产线') @@ -1098,8 +1096,22 @@ class WorkPieceDelivery(models.Model): is_cnc_program_down = fields.Boolean('程序是否下发', default=False) active = fields.Boolean(string="有效", default=True) - # @api.model - # def create(self, vals): + @api.model + def create(self, vals): + if vals.get('name', '/') == '/' or vals.get('name', '/') is False: + vals['name'] = self.env['ir.sequence'].next_by_code('sf.workpiece.delivery') or '/' + obj = super(WorkPieceDelivery, self).create(vals) + return obj + + def action_delivery_history(self): + return { + 'name': _('配送历史'), + 'type': 'ir.actions.act_window', + 'view_mode': 'tree', + 'res_model': 'sf.workpiece.delivery', + 'view_id': self.env.ref('sf_manufacturing.sf_workpiece_delivery_empty_racks_tree').id, + 'domain': [('type', '=', '运送空料架'), ('route_id', '=', self.route_id.id), ('name', 'ilike', 'WDO')] + } @api.onchange('route_id') def onchange_route(self): @@ -1120,29 +1132,37 @@ class WorkPieceDelivery(models.Model): num = 0 for item in self: num += 1 - if num > 4: - raise UserError('仅限于配送1-4个制造订单,请重新选择') - if item.route_id: - if same_route_id is None: - same_route_id = item.route_id.id - if item.route_id.id != same_route_id: - is_not_route += 1 + if item.type == "运送空料架": + if num >= 2: + raise UserError('仅选择一条路线进行配送,请重新选择') + else: + delivery_ids.append(item.id) else: - raise UserError('请选择【任务路线】再进行配送') - if production_type is None: - production_type = item.type - if production_type != item.type: - raise UserError('请选择类型为%s的制造订单进行配送' % production_type) - if down_status != item.status: - raise UserError('请选择状态为【待下发】的制造订单进行配送') - if same_production_line_id is None: - same_production_line_id = item.production_line_id.id - if item.production_line_id.id != same_production_line_id: - is_not_production_line += 1 - if item.is_cnc_program_down is False: - is_cnc_down += 1 - if is_cnc_down == 0 and is_not_production_line == 0 and is_not_route == 0: - delivery_ids.append(item.id) + if num > 4: + raise UserError('仅限于配送1-4个制造订单,请重新选择') + if item.status in ['待配送', '已配送']: + raise UserError('请选择状态为【待下发】的制造订单进行配送') + if item.route_id: + if same_route_id is None: + same_route_id = item.route_id.id + if item.route_id.id != same_route_id: + is_not_route += 1 + else: + raise UserError('请选择【任务路线】再进行配送') + if production_type is None: + production_type = item.type + if production_type != item.type: + raise UserError('请选择类型为%s的制造订单进行配送' % production_type) + if down_status != item.status: + raise UserError('请选择状态为【待下发】的制造订单进行配送') + if same_production_line_id is None: + same_production_line_id = item.production_line_id.id + if item.production_line_id.id != same_production_line_id: + is_not_production_line += 1 + if item.is_cnc_program_down is False: + is_cnc_down += 1 + if is_cnc_down == 0 and is_not_production_line == 0 and is_not_route == 0: + delivery_ids.append(item.id) if is_cnc_down >= 1: raise UserError('您所选择制造订单的【CNC程序】暂未下发,请在程序下发后再进行配送') if is_not_production_line >= 1: @@ -1162,7 +1182,11 @@ class WorkPieceDelivery(models.Model): 'default_delivery_ids': [(6, 0, delivery_ids)], }} else: - raise UserError("您所选择制造订单的【任务路线】的【终点接驳站】已占用,请在该接驳站空闲时进行配送") + if self.type == '运送空料架': + raise UserError("您所选择的【任务路线】的【终点接驳站】已占用,请在该接驳站空闲时进行配送") + else: + raise UserError( + "您所选择制造订单的【任务路线】的【终点接驳站】已占用,请在该接驳站空闲时或选择其他路线进行配送") # 验证agv站点是否可用 def _check_avgsite_state(self): @@ -1171,21 +1195,29 @@ class WorkPieceDelivery(models.Model): if agv_site: agv_site.update_site_state() for item in self: - if item.type in ["上产线", "下产线"]: - logging.info('工件配送-起点状态:%s-%s' % ( - item.feeder_station_start_id.name, item.feeder_station_start_id.state)) - logging.info('工件配送-终点状态:%s-%s' % ( - item.feeder_station_destination_id.name, item.feeder_station_destination_id.state)) + logging.info('工件配送-起点状态:%s-%s' % ( + item.feeder_station_start_id.name, item.feeder_station_start_id.state)) + logging.info('工件配送-终点状态:%s-%s' % ( + item.feeder_station_destination_id.name, item.feeder_station_destination_id.state)) + if item.type in ['上产线', '下产线']: if ( item.feeder_station_start_id.state == '占用' and item.feeder_station_destination_id.state == '空闲') or ( item.feeder_station_start_id.state == '空闲' and item.feeder_station_destination_id.state == '空闲'): is_free = True + else: + if item.feeder_station_destination_id.state == '空闲': + is_free = True logging.info('is_free:%s' % is_free) return is_free # 配送至avg小车 def _delivery_avg(self): config = self.env['res.config.settings'].get_values() + if self.type == '运送空料架': + self = self.create( + {'name': self.env['ir.sequence'].next_by_code('sf.workpiece.delivery'), 'route_id': self.route_id.id, + 'feeder_station_start_id': self.feeder_station_start_id.id, + 'feeder_station_destination_id': self.feeder_station_destination_id.id}) positionCode_Arr = [] delivery_Arr = [] feeder_station_start = None @@ -1195,7 +1227,7 @@ class WorkPieceDelivery(models.Model): feeder_station_start = item.feeder_station_start_id.name if feeder_station_destination is None: feeder_station_destination = item.feeder_station_destination_id.name - delivery_Arr.append(item.delivery_num) + delivery_Arr.append(item.name) delivery_str = ','.join(map(str, delivery_Arr)) if feeder_station_start is not None: positionCode_Arr.append({ @@ -1224,13 +1256,14 @@ class WorkPieceDelivery(models.Model): req_codes = ret['reqCode'].split(',') for delivery_item in self: for req_code in req_codes: - if delivery_item.delivery_num == req_code.strip(): - logging.info('delivery_num:%s' % delivery_item.delivery_num) + if delivery_item.name == req_code.strip(): + logging.info('delivery_item-name:%s' % delivery_item.name) delivery_item.write({ 'task_delivery_time': fields.Datetime.now(), 'status': '待配送' }) - delivery_item.workorder_id.write({'is_delivery': True}) + if delivery_item == "上产线": + delivery_item.workorder_id.write({'is_delivery': True}) else: raise UserError(ret['message']) except Exception as e: diff --git a/sf_manufacturing/views/mrp_workorder_view.xml b/sf_manufacturing/views/mrp_workorder_view.xml index 28b06aeb..87f262c0 100644 --- a/sf_manufacturing/views/mrp_workorder_view.xml +++ b/sf_manufacturing/views/mrp_workorder_view.xml @@ -591,8 +591,7 @@ decoration-warning="status == '待下发'" decoration-danger="status == '待配送'"/> - - + @@ -644,45 +643,42 @@ - 运送空料架 + 空料架配送 sf.workpiece.delivery - +
+ - - + + +