From 2322758e50cf78f6253cc8433709cb4c038b444f Mon Sep 17 00:00:00 2001 From: "qihao.gong@jikimo.com" Date: Wed, 15 Nov 2023 16:21:40 +0800 Subject: [PATCH] =?UTF-8?q?wms=E8=B7=AF=E7=BA=BF=E8=A7=84=E5=88=99?= =?UTF-8?q?=E5=8A=A8=E6=80=81=E9=80=89=E5=8F=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- sf_warehouse/models/model.py | 53 ++++++++++++++++++++++++++---------- 1 file changed, 38 insertions(+), 15 deletions(-) diff --git a/sf_warehouse/models/model.py b/sf_warehouse/models/model.py index aa11a0a3..10acb1fa 100644 --- a/sf_warehouse/models/model.py +++ b/sf_warehouse/models/model.py @@ -4,7 +4,6 @@ from odoo import SUPERUSER_ID, _, api, fields, models from odoo.osv import expression - class SfLocation(models.Model): _inherit = 'stock.location' @@ -201,7 +200,6 @@ class SfLocation(models.Model): j_str = str(j + 1).zfill(3) # 确保是两位数,如果不足两位,左侧补0 return area_type_barcode + self.channel + self.direction + '-' + self.barcode + '-' + i_str + '-' + j_str - # def generate_barcode(self, i, j): # # 这里是你生成barcode的代码 # area_type_barcode = self.location_id.barcode @@ -217,26 +215,51 @@ class SfProcurementGroup(models.Model): 修改路线多规则条件选取 """ if warehouse_id: - domain = expression.AND([['|', ('warehouse_id', '=', warehouse_id.id), ('warehouse_id', '=', False)], domain]) + domain = expression.AND( + [['|', ('warehouse_id', '=', warehouse_id.id), ('warehouse_id', '=', False)], domain]) Rule = self.env['stock.rule'] res = self.env['stock.rule'] if route_ids: - res = Rule.search(expression.AND([[('route_id', 'in', route_ids.ids)], domain]), order='route_sequence, sequence', limit=1) + res_list = Rule.search(expression.AND([[('route_id', 'in', route_ids.ids)], domain]), + order='route_sequence, sequence') + for res1 in res_list: + if product_id.categ_id in res1.location_dest_id.product_type or product_id.categ_id in res1.location_src_id.product_type: + res = res1 + if not res: + res = Rule.search(expression.AND([[('route_id', 'in', route_ids.ids)], domain]), + order='route_sequence, sequence', limit=1) + if not res and packaging_id: packaging_routes = packaging_id.route_ids if packaging_routes: - res = Rule.search(expression.AND([[('route_id', 'in', packaging_routes.ids)], domain]), order='route_sequence, sequence', limit=1) - if not res: - product_routes = product_id.route_ids | product_id.categ_id.total_route_ids - if product_routes: - res = Rule.search(expression.AND([[('route_id', 'in', product_routes.ids)], domain]), order='route_sequence, sequence', limit=1) - if not res and warehouse_id: - warehouse_routes = warehouse_id.route_ids - if warehouse_routes: - res_list = Rule.search(expression.AND([[('route_id', 'in', warehouse_routes.ids)], domain]), order='route_sequence, sequence') + res_list = Rule.search(expression.AND([[('route_id', 'in', packaging_routes.ids)], domain]), + order='route_sequence, sequence') for res1 in res_list: if product_id.categ_id in res1.location_dest_id.product_type or product_id.categ_id in res1.location_src_id.product_type: res = res1 + if not res: + res = Rule.search(expression.AND([[('route_id', 'in', packaging_routes.ids)], domain]), + order='route_sequence, sequence', limit=1) if not res: - res = Rule.search(expression.AND([[('route_id', 'in', warehouse_routes.ids)], domain]), order='route_sequence, sequence', limit=1) - return res \ No newline at end of file + product_routes = product_id.route_ids | product_id.categ_id.total_route_ids + if product_routes: + res_list = Rule.search(expression.AND([[('route_id', 'in', product_routes.ids)], domain]), + order='route_sequence, sequence') + for res1 in res_list: + if product_id.categ_id in res1.location_dest_id.product_type or product_id.categ_id in res1.location_src_id.product_type: + res = res1 + if not res: + res = Rule.search(expression.AND([[('route_id', 'in', product_routes.ids)], domain]), + order='route_sequence, sequence', limit=1) + if not res and warehouse_id: + warehouse_routes = warehouse_id.route_ids + if warehouse_routes: + res_list = Rule.search(expression.AND([[('route_id', 'in', warehouse_routes.ids)], domain]), + order='route_sequence, sequence') + for res1 in res_list: + if product_id.categ_id in res1.location_dest_id.product_type or product_id.categ_id in res1.location_src_id.product_type: + res = res1 + if not res: + res = Rule.search(expression.AND([[('route_id', 'in', warehouse_routes.ids)], domain]), + order='route_sequence, sequence', limit=1) + return res