From 1e172cb4e35970885e0b76d5cd1cce3fc85514e7 Mon Sep 17 00:00:00 2001 From: hujiaying Date: Tue, 27 Aug 2024 17:24:04 +0800 Subject: [PATCH 01/10] =?UTF-8?q?=E5=A4=84=E7=90=86=E4=BB=A3=E5=8F=91?= =?UTF-8?q?=E8=B4=A7=E4=B8=8B=E5=8F=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- sf_stock/__init__.py | 4 +++ sf_stock/__manifest__.py | 36 +++++++++++++++++++++++++ sf_stock/controllers/__init__.py | 3 +++ sf_stock/controllers/controllers.py | 21 +++++++++++++++ sf_stock/demo/demo.xml | 30 +++++++++++++++++++++ sf_stock/models/__init__.py | 3 +++ sf_stock/models/stock_picking.py | 39 +++++++++++++++++++++++++++ sf_stock/security/ir.model.access.csv | 2 ++ sf_stock/views/stock_picking.xml | 5 ++++ 9 files changed, 143 insertions(+) create mode 100644 sf_stock/__init__.py create mode 100644 sf_stock/__manifest__.py create mode 100644 sf_stock/controllers/__init__.py create mode 100644 sf_stock/controllers/controllers.py create mode 100644 sf_stock/demo/demo.xml create mode 100644 sf_stock/models/__init__.py create mode 100644 sf_stock/models/stock_picking.py create mode 100644 sf_stock/security/ir.model.access.csv create mode 100644 sf_stock/views/stock_picking.xml diff --git a/sf_stock/__init__.py b/sf_stock/__init__.py new file mode 100644 index 00000000..511a0ca3 --- /dev/null +++ b/sf_stock/__init__.py @@ -0,0 +1,4 @@ +# -*- coding: utf-8 -*- + +from . import controllers +from . import models \ No newline at end of file diff --git a/sf_stock/__manifest__.py b/sf_stock/__manifest__.py new file mode 100644 index 00000000..f22004e5 --- /dev/null +++ b/sf_stock/__manifest__.py @@ -0,0 +1,36 @@ +# -*- coding: utf-8 -*- +{ + 'name': "sf_stock", + + 'summary': """ + Short (1 phrase/line) summary of the module's purpose, used as + subtitle on modules listing or apps.openerp.com""", + + 'description': """ + Long description of module's purpose + """, + + 'author': "My Company", + 'website': "https://www.yourcompany.com", + + # Categories can be used to filter modules in modules listing + # Check https://github.com/odoo/odoo/blob/16.0/odoo/addons/base/data/ir_module_category_data.xml + # for the full list + 'category': 'Uncategorized', + 'version': '0.1', + + # any module necessary for this one to work correctly + 'depends': ['sf_sale', 'stock'], + + # always loaded + 'data': [ + # 'security/ir.model.access.csv', + 'views/stock_picking.xml', + ], + # only loaded in demonstration mode + 'demo': [ + 'demo/demo.xml', + ], + 'installable': True, + 'application': True, +} diff --git a/sf_stock/controllers/__init__.py b/sf_stock/controllers/__init__.py new file mode 100644 index 00000000..457bae27 --- /dev/null +++ b/sf_stock/controllers/__init__.py @@ -0,0 +1,3 @@ +# -*- coding: utf-8 -*- + +from . import controllers \ No newline at end of file diff --git a/sf_stock/controllers/controllers.py b/sf_stock/controllers/controllers.py new file mode 100644 index 00000000..af35ee1d --- /dev/null +++ b/sf_stock/controllers/controllers.py @@ -0,0 +1,21 @@ +# -*- coding: utf-8 -*- +# from odoo import http + + +# class SfStock(http.Controller): +# @http.route('/sf_stock/sf_stock', auth='public') +# def index(self, **kw): +# return "Hello, world" + +# @http.route('/sf_stock/sf_stock/objects', auth='public') +# def list(self, **kw): +# return http.request.render('sf_stock.listing', { +# 'root': '/sf_stock/sf_stock', +# 'objects': http.request.env['sf_stock.sf_stock'].search([]), +# }) + +# @http.route('/sf_stock/sf_stock/objects/', auth='public') +# def object(self, obj, **kw): +# return http.request.render('sf_stock.object', { +# 'object': obj +# }) diff --git a/sf_stock/demo/demo.xml b/sf_stock/demo/demo.xml new file mode 100644 index 00000000..726c51be --- /dev/null +++ b/sf_stock/demo/demo.xml @@ -0,0 +1,30 @@ + + + + + \ No newline at end of file diff --git a/sf_stock/models/__init__.py b/sf_stock/models/__init__.py new file mode 100644 index 00000000..c62a4dff --- /dev/null +++ b/sf_stock/models/__init__.py @@ -0,0 +1,3 @@ +# -*- coding: utf-8 -*- + +from . import stock_picking \ No newline at end of file diff --git a/sf_stock/models/stock_picking.py b/sf_stock/models/stock_picking.py new file mode 100644 index 00000000..a28fbb5b --- /dev/null +++ b/sf_stock/models/stock_picking.py @@ -0,0 +1,39 @@ +# -*- coding: utf-8 -*- +import json +import requests +from odoo import models, fields, api + +from odoo.exceptions import UserError +import logging + +_logger = logging.getLogger(__name__) + + +class StockPicking(models.Model): + _inherit = 'stock.picking' + + # 重写验证,下发发货到bfm + def button_validate(self): + info = super(StockPicking, self).button_validate() + if self.picking_type_id.code == 'outgoing': + self.send_to_bfm() + return info + + def send_to_bfm(self): + # 下发发货到bfm + config = self.env['res.config.settings'].get_values() + json1 = { + 'params': { + 'name': self.origin, + 'send_no': self.name, + 'qty_done': self.move_line_ids.qty_done, + }, + } + url1 = config['bfm_url_new'] + '/api/stock/deliver_goods' + r = requests.post(url1, json=json1, data=None) + if r.status_code == 200: + result = json.loads(r.json()['result']) + if result['code'] != 200: + raise UserError(result['message'] or '工厂发货下发bfm失败') + else: + raise UserError('工厂发货下发bfm失败') diff --git a/sf_stock/security/ir.model.access.csv b/sf_stock/security/ir.model.access.csv new file mode 100644 index 00000000..af1bcbaf --- /dev/null +++ b/sf_stock/security/ir.model.access.csv @@ -0,0 +1,2 @@ +id,name,model_id:id,group_id:id,perm_read,perm_write,perm_create,perm_unlink +access_sf_stock_sf_stock,sf_stock.sf_stock,model_sf_stock_sf_stock,base.group_user,1,1,1,1 \ No newline at end of file diff --git a/sf_stock/views/stock_picking.xml b/sf_stock/views/stock_picking.xml new file mode 100644 index 00000000..7750ca76 --- /dev/null +++ b/sf_stock/views/stock_picking.xml @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file From 0ca6d46a7bfc81b094a217484a39879d4edbbb70 Mon Sep 17 00:00:00 2001 From: hujiaying Date: Sat, 31 Aug 2024 21:09:56 +0800 Subject: [PATCH 02/10] =?UTF-8?q?=E4=BF=AE=E6=94=B9sf=E4=B8=8B=E5=8F=91?= =?UTF-8?q?=E6=AC=A0=E5=8D=95=EF=BC=8Cbfm=E6=8E=A5=E6=94=B6=E4=B8=8B?= =?UTF-8?q?=E5=8F=91=E6=AC=A0=E5=8D=95=EF=BC=8C=E5=8F=8A=E5=A4=84=E7=90=86?= =?UTF-8?q?=E5=8F=91=E8=B4=A7=E5=8D=95=E7=9A=84=E5=85=B3=E7=B3=BB?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- sf_stock/models/__init__.py | 3 +- .../models/stock_backorder_confirmation.py | 27 ++++++++++ sf_stock/models/stock_picking.py | 53 +++++++++++++++++-- 3 files changed, 77 insertions(+), 6 deletions(-) create mode 100644 sf_stock/models/stock_backorder_confirmation.py diff --git a/sf_stock/models/__init__.py b/sf_stock/models/__init__.py index c62a4dff..313cb109 100644 --- a/sf_stock/models/__init__.py +++ b/sf_stock/models/__init__.py @@ -1,3 +1,4 @@ # -*- coding: utf-8 -*- -from . import stock_picking \ No newline at end of file +from . import stock_picking +from . import stock_backorder_confirmation \ No newline at end of file diff --git a/sf_stock/models/stock_backorder_confirmation.py b/sf_stock/models/stock_backorder_confirmation.py new file mode 100644 index 00000000..4e894381 --- /dev/null +++ b/sf_stock/models/stock_backorder_confirmation.py @@ -0,0 +1,27 @@ +# -*- coding: utf-8 -*- +import json +import requests +from odoo import models, fields, api + +from odoo.exceptions import UserError +import logging +from odoo.tools import date_utils + +_logger = logging.getLogger(__name__) + + +class StockBackorderConfirmation(models.TransientModel): + _inherit = 'stock.backorder.confirmation' + + # 继承创建欠单 + def process(self): + info = super(StockBackorderConfirmation, self).process() + _logger.info("创建欠单") + # 下发创建欠单到bfm + + return info + + # 继承取消创建欠单 + def process_cancel_backorder(self): + info = super(StockBackorderConfirmation, self).process_cancel_backorder() + return info diff --git a/sf_stock/models/stock_picking.py b/sf_stock/models/stock_picking.py index a28fbb5b..fdb22c21 100644 --- a/sf_stock/models/stock_picking.py +++ b/sf_stock/models/stock_picking.py @@ -5,6 +5,7 @@ from odoo import models, fields, api from odoo.exceptions import UserError import logging +from odoo.tools import date_utils _logger = logging.getLogger(__name__) @@ -15,22 +16,64 @@ class StockPicking(models.Model): # 重写验证,下发发货到bfm def button_validate(self): info = super(StockPicking, self).button_validate() - if self.picking_type_id.code == 'outgoing': + if self.picking_type_code == 'outgoing': self.send_to_bfm() return info + def deal_move_ids(self, send_move_ids): + move_ids = [] # 本次发货单 + if send_move_ids: + for item in send_move_ids: + val = { + 'name': item.product_id.upload_model_file.display_name, + 'quantity_done': item.quantity_done, + 'date': date_utils.json_default(item.date) if item.date else None, + 'description_picking': item.description_picking, + 'date_deadline': date_utils.json_default(item.date_deadline) if item.date_deadline else None, + 'product_uom_qty': item.product_uom_qty, + 'sequence': item.sequence, + 'price_unit': item.price_unit, + 'priority': item.priority + } + move_ids.append(val) + return move_ids + + def deal_send_backorder_id(self, backorder_ids1): + backorder_ids = [] + if backorder_ids1: + for item in backorder_ids1: + val = { + 'receiverName': item.receiverName, + 'name': item.sale_id.default_code, + 'send_no': item.name, + 'scheduled_date': date_utils.json_default(item.scheduled_date) if item.scheduled_date else None, + 'date': date_utils.json_default(item.date) if item.date else None, + 'date_deadline': date_utils.json_default(item.date_deadline) if item.date_deadline else None, + 'move_ids': self.deal_move_ids(item.move_ids), + } + backorder_ids.append(val) + return backorder_ids + def send_to_bfm(self): # 下发发货到bfm config = self.env['res.config.settings'].get_values() - json1 = { + + data = { 'params': { - 'name': self.origin, + 'receiverName': self.receiverName, + 'name': self.sale_id.default_code, 'send_no': self.name, - 'qty_done': self.move_line_ids.qty_done, + 'scheduled_date': date_utils.json_default(self.scheduled_date) if self.scheduled_date else None, + 'date': date_utils.json_default(self.date) if self.date else None, + 'date_deadline': date_utils.json_default(self.date_deadline) if self.date_deadline else None, + 'move_ids': self.deal_move_ids(self.move_ids), + 'backorder_id': self.deal_send_backorder_id(self.backorder_id), + 'backorder_ids': self.deal_send_backorder_id(self.backorder_ids) + }, } url1 = config['bfm_url_new'] + '/api/stock/deliver_goods' - r = requests.post(url1, json=json1, data=None) + r = requests.post(url1, json=data, data=None) if r.status_code == 200: result = json.loads(r.json()['result']) if result['code'] != 200: From fc1cdf4d0eae06756c78ea73de9686e013c6e61d Mon Sep 17 00:00:00 2001 From: hujiaying Date: Mon, 2 Sep 2024 19:02:53 +0800 Subject: [PATCH 03/10] =?UTF-8?q?=E8=81=94=E8=B0=83=E6=8E=A5=E5=8F=A3?= =?UTF-8?q?=E6=95=B0=E6=8D=AE=EF=BC=8C=E5=A4=84=E7=90=86=E4=BF=AE=E6=94=B9?= =?UTF-8?q?sf=E4=B8=8B=E5=8F=91=E4=BB=A3=E5=8F=91=E8=B4=A7=EF=BC=8Cbfm?= =?UTF-8?q?=E6=8E=A5=E6=94=B6=E4=BB=A3=E5=8F=91=E8=B4=A7=E6=B6=88=E6=81=AF?= =?UTF-8?q?=EF=BC=8C=E4=B8=8B=E5=8F=91=E5=88=B0=E5=86=85=E9=83=A8=E7=AE=A1?= =?UTF-8?q?=E7=90=86=EF=BC=8C=E5=A4=84=E7=90=86=E9=87=87=E8=B4=AD=E8=AE=A2?= =?UTF-8?q?=E5=8D=95=E4=BB=A3=E5=8F=91=E8=B4=A7=E6=95=B0=E9=87=8F=E4=BF=AE?= =?UTF-8?q?=E6=94=B9=E5=8F=8A=E5=88=9B=E5=BB=BA=E6=AC=A0=E5=8D=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- sf_stock/models/stock_picking.py | 32 ++++++++++++++++++++++++++------ 1 file changed, 26 insertions(+), 6 deletions(-) diff --git a/sf_stock/models/stock_picking.py b/sf_stock/models/stock_picking.py index fdb22c21..b995f812 100644 --- a/sf_stock/models/stock_picking.py +++ b/sf_stock/models/stock_picking.py @@ -20,8 +20,9 @@ class StockPicking(models.Model): self.send_to_bfm() return info - def deal_move_ids(self, send_move_ids): + def deal_move_ids(self, send_move_ids, send_move_line_ids): move_ids = [] # 本次发货单 + move_line_ids = [] # 本次发货单行 if send_move_ids: for item in send_move_ids: val = { @@ -33,15 +34,28 @@ class StockPicking(models.Model): 'product_uom_qty': item.product_uom_qty, 'sequence': item.sequence, 'price_unit': item.price_unit, - 'priority': item.priority + 'priority': item.priority, + 'state': item.state, } move_ids.append(val) - return move_ids + for item in send_move_line_ids: + val = { + 'qty_done': item.qty_done, + 'reserved_qty': item.reserved_qty, + 'reserved_uom_qty': item.reserved_uom_qty, + 'date': date_utils.json_default(item.date) if item.date else None, + 'description_picking': item.description_picking, + 'state': item.state, + } + move_line_ids.append(val) + return move_ids, move_line_ids def deal_send_backorder_id(self, backorder_ids1): backorder_ids = [] + if backorder_ids1: for item in backorder_ids1: + move_ids, move_line_ids = self.deal_move_ids(item.move_ids, item.move_line_ids) val = { 'receiverName': item.receiverName, 'name': item.sale_id.default_code, @@ -49,7 +63,9 @@ class StockPicking(models.Model): 'scheduled_date': date_utils.json_default(item.scheduled_date) if item.scheduled_date else None, 'date': date_utils.json_default(item.date) if item.date else None, 'date_deadline': date_utils.json_default(item.date_deadline) if item.date_deadline else None, - 'move_ids': self.deal_move_ids(item.move_ids), + 'move_ids': move_ids, + 'move_line_ids': move_line_ids, + 'state': item.state, } backorder_ids.append(val) return backorder_ids @@ -57,7 +73,7 @@ class StockPicking(models.Model): def send_to_bfm(self): # 下发发货到bfm config = self.env['res.config.settings'].get_values() - + move_ids, move_line_ids = self.deal_move_ids(self.move_ids, self.move_line_ids) data = { 'params': { 'receiverName': self.receiverName, @@ -66,13 +82,17 @@ class StockPicking(models.Model): 'scheduled_date': date_utils.json_default(self.scheduled_date) if self.scheduled_date else None, 'date': date_utils.json_default(self.date) if self.date else None, 'date_deadline': date_utils.json_default(self.date_deadline) if self.date_deadline else None, - 'move_ids': self.deal_move_ids(self.move_ids), + 'move_ids': move_ids, + 'move_line_ids': move_line_ids, + 'state': self.state, 'backorder_id': self.deal_send_backorder_id(self.backorder_id), 'backorder_ids': self.deal_send_backorder_id(self.backorder_ids) }, } url1 = config['bfm_url_new'] + '/api/stock/deliver_goods' + json_str = json.dumps(data) + print('json_str', json_str) r = requests.post(url1, json=data, data=None) if r.status_code == 200: result = json.loads(r.json()['result']) From 589035d42bcbdcccdcf07e56e5132cdcfdb158aa Mon Sep 17 00:00:00 2001 From: hujiaying Date: Tue, 3 Sep 2024 19:14:48 +0800 Subject: [PATCH 04/10] =?UTF-8?q?=E5=A4=84=E7=90=86=E9=87=87=E8=B4=AD?= =?UTF-8?q?=E8=AE=A2=E5=8D=95=E4=BB=A3=E5=8F=91=E8=B4=A7=E6=95=B0=E9=87=8F?= =?UTF-8?q?=E4=BF=AE=E6=94=B9=E5=8F=8A=E5=88=9B=E5=BB=BA=E6=AC=A0=E5=8D=95?= =?UTF-8?q?=EF=BC=8C=E5=A4=84=E7=90=86sf=E5=8F=91=E8=B4=A7=E5=8D=95?= =?UTF-8?q?=E4=B8=8B=E5=8F=91=E4=B8=8D=E9=9C=80=E8=A6=81=E5=88=9B=E5=BB=BA?= =?UTF-8?q?=E6=AC=A0=E5=8D=95=EF=BC=8C=E5=A4=84=E7=90=86bfm=E5=8F=91?= =?UTF-8?q?=E8=B4=A7=E5=8D=95=E4=B8=8B=E5=8F=91=E5=86=85=E9=83=A8=E7=AE=A1?= =?UTF-8?q?=E7=90=86=EF=BC=8C=E5=86=85=E9=83=A8=E7=AE=A1=E7=90=86=E5=A4=84?= =?UTF-8?q?=E7=90=86=E4=B8=8D=E9=9C=80=E8=A6=81=E5=88=9B=E5=BB=BA=E6=AC=A0?= =?UTF-8?q?=E5=8D=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- sf_stock/models/__init__.py | 3 +-- .../models/stock_backorder_confirmation.py | 27 ------------------- sf_stock/models/stock_picking.py | 10 +++++-- 3 files changed, 9 insertions(+), 31 deletions(-) delete mode 100644 sf_stock/models/stock_backorder_confirmation.py diff --git a/sf_stock/models/__init__.py b/sf_stock/models/__init__.py index 313cb109..c62a4dff 100644 --- a/sf_stock/models/__init__.py +++ b/sf_stock/models/__init__.py @@ -1,4 +1,3 @@ # -*- coding: utf-8 -*- -from . import stock_picking -from . import stock_backorder_confirmation \ No newline at end of file +from . import stock_picking \ No newline at end of file diff --git a/sf_stock/models/stock_backorder_confirmation.py b/sf_stock/models/stock_backorder_confirmation.py deleted file mode 100644 index 4e894381..00000000 --- a/sf_stock/models/stock_backorder_confirmation.py +++ /dev/null @@ -1,27 +0,0 @@ -# -*- coding: utf-8 -*- -import json -import requests -from odoo import models, fields, api - -from odoo.exceptions import UserError -import logging -from odoo.tools import date_utils - -_logger = logging.getLogger(__name__) - - -class StockBackorderConfirmation(models.TransientModel): - _inherit = 'stock.backorder.confirmation' - - # 继承创建欠单 - def process(self): - info = super(StockBackorderConfirmation, self).process() - _logger.info("创建欠单") - # 下发创建欠单到bfm - - return info - - # 继承取消创建欠单 - def process_cancel_backorder(self): - info = super(StockBackorderConfirmation, self).process_cancel_backorder() - return info diff --git a/sf_stock/models/stock_picking.py b/sf_stock/models/stock_picking.py index b995f812..37f24bf0 100644 --- a/sf_stock/models/stock_picking.py +++ b/sf_stock/models/stock_picking.py @@ -13,6 +13,8 @@ _logger = logging.getLogger(__name__) class StockPicking(models.Model): _inherit = 'stock.picking' + cancel_backorder_ids = fields.Boolean(default=False, string='是否取消后置单据') + # 重写验证,下发发货到bfm def button_validate(self): info = super(StockPicking, self).button_validate() @@ -63,6 +65,7 @@ class StockPicking(models.Model): 'scheduled_date': date_utils.json_default(item.scheduled_date) if item.scheduled_date else None, 'date': date_utils.json_default(item.date) if item.date else None, 'date_deadline': date_utils.json_default(item.date_deadline) if item.date_deadline else None, + 'date_done': date_utils.json_default(item.date_done) if item.date_done else None, 'move_ids': move_ids, 'move_line_ids': move_line_ids, 'state': item.state, @@ -71,23 +74,26 @@ class StockPicking(models.Model): return backorder_ids def send_to_bfm(self): + skip_backorder = self.env.context.get('skip_backorder') # 下发发货到bfm config = self.env['res.config.settings'].get_values() move_ids, move_line_ids = self.deal_move_ids(self.move_ids, self.move_line_ids) data = { 'params': { 'receiverName': self.receiverName, + 'priority': self.priority, 'name': self.sale_id.default_code, 'send_no': self.name, 'scheduled_date': date_utils.json_default(self.scheduled_date) if self.scheduled_date else None, 'date': date_utils.json_default(self.date) if self.date else None, 'date_deadline': date_utils.json_default(self.date_deadline) if self.date_deadline else None, + 'date_done': date_utils.json_default(self.date_done) if self.date_done else None, 'move_ids': move_ids, 'move_line_ids': move_line_ids, 'state': self.state, 'backorder_id': self.deal_send_backorder_id(self.backorder_id), - 'backorder_ids': self.deal_send_backorder_id(self.backorder_ids) - + 'backorder_ids': self.deal_send_backorder_id(self.backorder_ids), + 'cancel_backorder_ids': skip_backorder, }, } url1 = config['bfm_url_new'] + '/api/stock/deliver_goods' From 04c0d687636af151803b1abd4fc8a95d3daad9b8 Mon Sep 17 00:00:00 2001 From: "jinling.yang" Date: Wed, 4 Sep 2024 14:58:04 +0800 Subject: [PATCH 05/10] =?UTF-8?q?=E6=8E=A5=E5=8F=A3=E6=9A=82=E6=97=B6?= =?UTF-8?q?=E5=8E=BB=E6=8E=89=E8=BA=AB=E4=BB=BD=E9=AA=8C=E8=AF=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- sf_manufacturing/controllers/controllers.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/sf_manufacturing/controllers/controllers.py b/sf_manufacturing/controllers/controllers.py index 632e9e4c..719ac481 100644 --- a/sf_manufacturing/controllers/controllers.py +++ b/sf_manufacturing/controllers/controllers.py @@ -477,7 +477,7 @@ class Manufacturing_Connect(http.Controller): logging.info('LocationChange error:%s' % e) return json.JSONEncoder().encode(res) - @http.route('/AutoDeviceApi/AGVToProduct', type='json', auth='sf_token', methods=['GET', 'POST'], csrf=False, + @http.route('/AutoDeviceApi/AGVToProduct', type='json', auth='none', methods=['GET', 'POST'], csrf=False, cors="*") def AGVToProduct(self, **kw): """ @@ -549,7 +549,7 @@ class Manufacturing_Connect(http.Controller): logging.info('AGVToProduct error:%s' % e) return json.JSONEncoder().encode(res) - @http.route('/AutoDeviceApi/AGVDownProduct', type='json', auth='sf_token', methods=['GET', 'POST'], csrf=False, + @http.route('/AutoDeviceApi/AGVDownProduct', type='json', auth='none', methods=['GET', 'POST'], csrf=False, cors="*") def AGVDownProduct(self, **kw): """ From 511bed47ff6233211a94bb8d15b627e61351db04 Mon Sep 17 00:00:00 2001 From: "jinling.yang" Date: Wed, 4 Sep 2024 16:58:55 +0800 Subject: [PATCH 06/10] =?UTF-8?q?=E4=BC=98=E5=8C=96=E8=BF=94=E5=B7=A5-?= =?UTF-8?q?=E4=BF=9D=E7=95=99=E8=A3=85=E5=A4=B9=E6=B5=8B=E9=87=8F=E6=95=B0?= =?UTF-8?q?=E6=8D=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- sf_manufacturing/models/product_template.py | 4 +- sf_manufacturing/views/mrp_workorder_view.xml | 4 +- sf_manufacturing/wizard/rework_wizard.py | 54 +++++++++++++++---- .../wizard/rework_wizard_views.xml | 26 +++++---- sf_sale/models/quick_easy_order.py | 4 +- sf_sale/models/quick_easy_order_old.py | 4 +- 6 files changed, 68 insertions(+), 28 deletions(-) diff --git a/sf_manufacturing/models/product_template.py b/sf_manufacturing/models/product_template.py index 071f1167..37fa02bd 100644 --- a/sf_manufacturing/models/product_template.py +++ b/sf_manufacturing/models/product_template.py @@ -9,8 +9,8 @@ from odoo.exceptions import ValidationError, UserError 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_workorder_view.xml b/sf_manufacturing/views/mrp_workorder_view.xml index a802266f..512534d4 100644 --- a/sf_manufacturing/views/mrp_workorder_view.xml +++ b/sf_manufacturing/views/mrp_workorder_view.xml @@ -486,8 +486,8 @@ - - + + = 1 and self.programming_state == '已编程': @@ -149,9 +183,7 @@ class ReworkWizard(models.TransientModel): 'cmm_ids': new_cnc_workorder.cmm_ids.sudo()._json_cmm_program(panel.name, ret), 'cnc_worksheet': cnc_rework.cnc_worksheet}) - new_pre_workorder = self.production_id.workorder_ids.filtered(lambda - p: p.routing_type == '装夹预调' and p.processing_panel == panel.name and p.state not in ( - 'rework', 'done')) + if new_pre_workorder: pre_rework = max(self.production_id.workorder_ids.filtered( lambda pr: pr.processing_panel == panel.name and pr.state in ( diff --git a/sf_manufacturing/wizard/rework_wizard_views.xml b/sf_manufacturing/wizard/rework_wizard_views.xml index 8ba3f4dd..d8cf0fb9 100644 --- a/sf_manufacturing/wizard/rework_wizard_views.xml +++ b/sf_manufacturing/wizard/rework_wizard_views.xml @@ -14,17 +14,25 @@ + +
+ 保留装夹测量数据 + + +
- 注意: 该制造订单产品已申请重新编程次数为,且当前编程状态为 - + + 注意: 该制造订单产品已申请重新编程次数为,且当前编程状态为 + +
申请重新编程 diff --git a/sf_sale/models/quick_easy_order.py b/sf_sale/models/quick_easy_order.py index 081807a4..cb1886a1 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 3ae65db3..92f6cda2 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 69578ab054c49fac5775f9fdfecf0c24bd0e3b53 Mon Sep 17 00:00:00 2001 From: hujiaying Date: Wed, 4 Sep 2024 17:28:26 +0800 Subject: [PATCH 07/10] =?UTF-8?q?bfm=E6=96=B0=E5=A2=9E=E5=BA=93=E5=AD=98?= =?UTF-8?q?=E8=8F=9C=E5=8D=95=EF=BC=8C=E4=BB=A3=E5=8F=91=E8=B4=A7=E8=8F=9C?= =?UTF-8?q?=E5=8D=95=EF=BC=8C=E5=A4=84=E7=90=86sf=E4=B8=80=E6=AC=A1?= =?UTF-8?q?=E6=80=A7=E5=8F=91=E8=B4=A7=EF=BC=8Cbfm=E7=94=9F=E6=88=90?= =?UTF-8?q?=E4=BB=A3=E5=8F=91=E8=B4=A7=E5=90=8D=E5=AD=97=E8=A7=84=E5=88=99?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- sf_stock/models/stock_picking.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/sf_stock/models/stock_picking.py b/sf_stock/models/stock_picking.py index 37f24bf0..82ce7ea5 100644 --- a/sf_stock/models/stock_picking.py +++ b/sf_stock/models/stock_picking.py @@ -69,6 +69,7 @@ class StockPicking(models.Model): 'move_ids': move_ids, 'move_line_ids': move_line_ids, 'state': item.state, + 'move_type': item.move_type, } backorder_ids.append(val) return backorder_ids @@ -94,6 +95,7 @@ class StockPicking(models.Model): 'backorder_id': self.deal_send_backorder_id(self.backorder_id), 'backorder_ids': self.deal_send_backorder_id(self.backorder_ids), 'cancel_backorder_ids': skip_backorder, + 'move_type': self.move_type, }, } url1 = config['bfm_url_new'] + '/api/stock/deliver_goods' From ca1060ada5570873f13ed38b5b7ebce259fcbfbb Mon Sep 17 00:00:00 2001 From: "jinling.yang" Date: Wed, 4 Sep 2024 17:33:54 +0800 Subject: [PATCH 08/10] =?UTF-8?q?=E5=8E=BB=E6=8E=89=E6=B3=A8=E9=87=8A?= =?UTF-8?q?=E4=BB=A3=E7=A0=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- sf_manufacturing/models/product_template.py | 4 ++-- sf_sale/models/quick_easy_order.py | 4 ++-- sf_sale/models/quick_easy_order_old.py | 4 ++-- 3 files changed, 6 insertions(+), 6 deletions(-) diff --git a/sf_manufacturing/models/product_template.py b/sf_manufacturing/models/product_template.py index 37fa02bd..071f1167 100644 --- a/sf_manufacturing/models/product_template.py +++ b/sf_manufacturing/models/product_template.py @@ -9,8 +9,8 @@ from odoo.exceptions import ValidationError, UserError 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_sale/models/quick_easy_order.py b/sf_sale/models/quick_easy_order.py index cb1886a1..081807a4 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 92f6cda2..3ae65db3 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 a7e1c89e660d8cc38292c4145fbe7c746321b4e5 Mon Sep 17 00:00:00 2001 From: "jinling.yang" Date: Wed, 4 Sep 2024 17:36:41 +0800 Subject: [PATCH 09/10] =?UTF-8?q?=E8=BF=98=E5=8E=9F=E4=BB=A3=E7=A0=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- sf_manufacturing/views/mrp_workorder_view.xml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/sf_manufacturing/views/mrp_workorder_view.xml b/sf_manufacturing/views/mrp_workorder_view.xml index 512534d4..a802266f 100644 --- a/sf_manufacturing/views/mrp_workorder_view.xml +++ b/sf_manufacturing/views/mrp_workorder_view.xml @@ -486,8 +486,8 @@
- - + +
Date: Wed, 4 Sep 2024 17:43:48 +0800 Subject: [PATCH 10/10] =?UTF-8?q?=E4=BC=98=E5=8C=96=E8=BF=94=E5=B7=A5?= =?UTF-8?q?=E4=BB=A3=E7=A0=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- sf_manufacturing/wizard/rework_wizard.py | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/sf_manufacturing/wizard/rework_wizard.py b/sf_manufacturing/wizard/rework_wizard.py index 51d40ac3..4698a994 100644 --- a/sf_manufacturing/wizard/rework_wizard.py +++ b/sf_manufacturing/wizard/rework_wizard.py @@ -63,11 +63,12 @@ class ReworkWizard(models.TransientModel): for panel in self.processing_panel_id: panel_workorder = self.production_id.workorder_ids.filtered( lambda ap: ap.processing_panel == panel.name and ap.state != 'rework') - rework_clamp_workorder = max(panel_workorder.filtered( - lambda rp: rp.processing_panel == panel.name and rp.routing_type == '装夹预调' and rp.state in [ - 'done', 'rework'])) if panel_workorder: panel_workorder.write({'state': 'rework'}) + rework_clamp_workorder = max(panel_workorder.filtered( + lambda + rp: rp.processing_panel == panel.name and rp.routing_type == '装夹预调' and rp.state in [ + 'done', 'rework'])) # panel_workorder.filtered( # lambda wo: wo.routing_type == '装夹预调').workpiece_delivery_ids.filtered( # lambda wd: wd.status == '待下发').write({'status': '已取消'})