From d5caa630b7f0b5e06c3630f1ec8d44bc11c9850e Mon Sep 17 00:00:00 2001 From: Jared Kipe Date: Mon, 4 Oct 2021 10:56:49 -0700 Subject: [PATCH] [IMP] stock_delivery_planner: multi-rating per-package shipping backports from 14.0 --- stock_delivery_planner/__init__.py | 2 + stock_delivery_planner/__manifest__.py | 6 +- stock_delivery_planner/models/__init__.py | 3 + .../models/res_config_settings.py | 43 ++++++++++++ stock_delivery_planner/models/stock.py | 2 + .../security/ir.model.access.csv | 3 + .../tests/test_stock_delivery_planner.py | 10 +-- .../views/res_config_settings_views.xml | 28 ++++++++ stock_delivery_planner/views/stock_views.xml | 2 +- .../wizard/stock_delivery_planner.py | 68 +++++++++++++++++-- .../wizard/stock_delivery_planner_views.xml | 43 +++++++----- 11 files changed, 180 insertions(+), 30 deletions(-) create mode 100644 stock_delivery_planner/models/res_config_settings.py create mode 100644 stock_delivery_planner/security/ir.model.access.csv create mode 100644 stock_delivery_planner/views/res_config_settings_views.xml diff --git a/stock_delivery_planner/__init__.py b/stock_delivery_planner/__init__.py index 9b429614..c7120225 100644 --- a/stock_delivery_planner/__init__.py +++ b/stock_delivery_planner/__init__.py @@ -1,2 +1,4 @@ +# Part of Hibou Suite Professional. See LICENSE_PROFESSIONAL file for full copyright and licensing details. + from . import models from . import wizard diff --git a/stock_delivery_planner/__manifest__.py b/stock_delivery_planner/__manifest__.py index ded10ba9..48c7c42c 100644 --- a/stock_delivery_planner/__manifest__.py +++ b/stock_delivery_planner/__manifest__.py @@ -1,10 +1,10 @@ { 'name': 'Stock Delivery Planner', 'summary': 'Get rates and choose carrier for delivery.', - 'version': '12.0.1.0.0', + 'version': '12.0.1.1.0', 'author': "Hibou Corp.", 'category': 'Warehouse', - 'license': 'AGPL-3', + 'license': 'OPL-1', 'website': "https://hibou.io", 'description': """ Stock Delivery Planner @@ -19,6 +19,8 @@ Re-rate deliveries at packing time to find lowest-priced delivery method that st 'stock', ], 'data': [ + 'security/ir.model.access.csv', + 'views/res_config_settings_views.xml', 'views/stock_views.xml', 'wizard/stock_delivery_planner_views.xml', ], diff --git a/stock_delivery_planner/models/__init__.py b/stock_delivery_planner/models/__init__.py index 12bab770..03ea18f8 100644 --- a/stock_delivery_planner/models/__init__.py +++ b/stock_delivery_planner/models/__init__.py @@ -1 +1,4 @@ +# Part of Hibou Suite Professional. See LICENSE_PROFESSIONAL file for full copyright and licensing details. + +from . import res_config_settings from . import stock diff --git a/stock_delivery_planner/models/res_config_settings.py b/stock_delivery_planner/models/res_config_settings.py new file mode 100644 index 00000000..6f145a6e --- /dev/null +++ b/stock_delivery_planner/models/res_config_settings.py @@ -0,0 +1,43 @@ +# Part of Hibou Suite Professional. See LICENSE_PROFESSIONAL file for full copyright and licensing details. + +from odoo import api, fields, models + + +class ResConfigSettings(models.TransientModel): + _inherit = 'res.config.settings' + + stock_delivery_planner_base_carrier_ids = fields.Many2many('delivery.carrier', + string='Delivery Planner Base Carriers', + compute='_compute_stock_delivery_planner_base_carrier_ids', + inverse='_inverse_stock_delivery_planner_base_carrier_ids') + + def _compute_stock_delivery_planner_base_carrier_ids_ids(self): + # used to compute the field and update in get_values + get_param = self.env['ir.config_parameter'].sudo().get_param + company_id = self.company_id.id or self.env.user.company_id.id + carrier_ids = get_param('stock.delivery.planner.carrier_ids.%s' % (company_id,)) or [] + if carrier_ids and isinstance(carrier_ids, str): + try: + carrier_ids = [int(c) for c in carrier_ids.split(',')] + except: + carrier_ids = [] + return carrier_ids + + def _compute_stock_delivery_planner_base_carrier_ids(self): + for settings in self: + carrier_ids = settings._compute_stock_delivery_planner_base_carrier_ids_ids() + carriers = self.env['delivery.carrier'].browse(carrier_ids) + settings.stock_delivery_planner_base_carrier_ids = carriers + + def _inverse_stock_delivery_planner_base_carrier_ids(self): + set_param = self.env['ir.config_parameter'].sudo().set_param + company_id = self.company_id.id or self.env.user.company_id.id + for settings in self: + carrier_ids = ','.join(str(i) for i in settings.stock_delivery_planner_base_carrier_ids.ids) + set_param('stock.delivery.planner.carrier_ids.%s' % (company_id, ), carrier_ids) + + @api.model + def get_values(self): + res = super(ResConfigSettings, self).get_values() + res['stock_delivery_planner_base_carrier_ids'] = [(6, 0, self._compute_stock_delivery_planner_base_carrier_ids_ids())] + return res diff --git a/stock_delivery_planner/models/stock.py b/stock_delivery_planner/models/stock.py index ca771553..3f7fd6ea 100644 --- a/stock_delivery_planner/models/stock.py +++ b/stock_delivery_planner/models/stock.py @@ -1,3 +1,5 @@ +# Part of Hibou Suite Professional. See LICENSE_PROFESSIONAL file for full copyright and licensing details. + from odoo import api, fields, models, tools, _ from odoo.exceptions import UserError diff --git a/stock_delivery_planner/security/ir.model.access.csv b/stock_delivery_planner/security/ir.model.access.csv new file mode 100644 index 00000000..204f355c --- /dev/null +++ b/stock_delivery_planner/security/ir.model.access.csv @@ -0,0 +1,3 @@ +id,name,model_id:id,group_id:id,perm_read,perm_write,perm_create,perm_unlink +access_stock_delivery_planner_user,stock.delivery.planner user,model_stock_delivery_planner,stock.group_stock_user,1,1,1,0 +access_stock_delivery_planner_option_user,stock.delivery.planner.option user,model_stock_delivery_planner_option,stock.group_stock_user,1,1,1,0 \ No newline at end of file diff --git a/stock_delivery_planner/tests/test_stock_delivery_planner.py b/stock_delivery_planner/tests/test_stock_delivery_planner.py index 985fa7d6..bea2a1d6 100644 --- a/stock_delivery_planner/tests/test_stock_delivery_planner.py +++ b/stock_delivery_planner/tests/test_stock_delivery_planner.py @@ -1,3 +1,5 @@ +# Part of Hibou Suite Professional. See LICENSE_PROFESSIONAL file for full copyright and licensing details. + from odoo import fields from odoo.tests.common import Form, TransactionCase @@ -15,8 +17,8 @@ class TestStockDeliveryPlanner(TransactionCase): self.skipTest('FedEx Shipping Connector demo data is required to run this test.') self.env['ir.config_parameter'].sudo().set_param('sale.order.planner.carrier_domain', "[('id', 'in', (%d,))]" % self.fedex_ground.id) - self.env['ir.config_parameter'].sudo().set_param('stock.delivery.planner.carrier_domain', - "[('id', 'in', (%d,))]" % self.fedex_ground.id) + self.env['ir.config_parameter'].sudo().set_param('stock.delivery.planner.carrier_ids.%s' % (self.env.user.company_id.id, ), + "%d" % self.fedex_ground.id) # Does it make sense to set default package in fedex_rate_shipment_multi # instead of relying on a correctly configured delivery method? self.fedex_package = self.browse_ref('delivery_fedex.fedex_packaging_FEDEX_25KG_BOX') @@ -109,11 +111,11 @@ class TestStockDeliveryPlanner(TransactionCase): self.assertEqual(self.picking.shipping_weight, 0.0) self.picking.move_line_ids.filtered(lambda ml: ml.product_id == self.product).qty_done = 5.0 - packing_action = self.picking.put_in_pack() + packing_action = self.picking.action_put_in_pack() packing_wizard = Form(self.env[packing_action['res_model']].with_context(packing_action['context'])) packing_wizard.delivery_packaging_id = self.fedex_package choose_delivery_package = packing_wizard.save() - choose_delivery_package.put_in_pack() + choose_delivery_package.action_put_in_pack() self.assertEqual(self.picking.shipping_weight, 5.0) action = self.picking.action_plan_delivery() diff --git a/stock_delivery_planner/views/res_config_settings_views.xml b/stock_delivery_planner/views/res_config_settings_views.xml new file mode 100644 index 00000000..bc8f2557 --- /dev/null +++ b/stock_delivery_planner/views/res_config_settings_views.xml @@ -0,0 +1,28 @@ + + + + + res.config.settings.view.form.inherit + res.config.settings + + + + +

Delivery Planner

+
+
+
+
+
+ + + + + diff --git a/stock_delivery_planner/views/stock_views.xml b/stock_delivery_planner/views/stock_views.xml index 985dbd14..a65334dd 100644 --- a/stock_delivery_planner/views/stock_views.xml +++ b/stock_delivery_planner/views/stock_views.xml @@ -6,7 +6,7 @@ -