From a71ff7cf839603d402b63972c9739f4f4a5091d0 Mon Sep 17 00:00:00 2001 From: Jared Kipe Date: Thu, 23 Sep 2021 10:44:55 -0700 Subject: [PATCH] [IMP] stock_delivery_planner: implement system config way of setup --- stock_delivery_planner/__init__.py | 2 + stock_delivery_planner/__manifest__.py | 5 ++- stock_delivery_planner/models/__init__.py | 3 ++ .../models/res_config_settings.py | 43 +++++++++++++++++++ stock_delivery_planner/models/stock.py | 2 + .../tests/test_stock_delivery_planner.py | 6 ++- .../views/res_config_settings_views.xml | 28 ++++++++++++ .../wizard/stock_delivery_planner.py | 12 ++++-- 8 files changed, 94 insertions(+), 7 deletions(-) create mode 100644 stock_delivery_planner/models/res_config_settings.py 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 ac46a9d7..76b7332a 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': '14.0.1.1.0', + 'version': '14.0.1.1.1', 'author': "Hibou Corp.", 'category': 'Warehouse', - 'license': 'AGPL-3', + 'license': 'OPL-1', 'website': "https://hibou.io", 'description': """ Stock Delivery Planner @@ -20,6 +20,7 @@ Re-rate deliveries at packing time to find lowest-priced delivery method that st ], '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..8e581549 --- /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.company.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.company.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 5a14cc9b..a3d728af 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 fields, models, tools, _ from odoo.exceptions import UserError diff --git a/stock_delivery_planner/tests/test_stock_delivery_planner.py b/stock_delivery_planner/tests/test_stock_delivery_planner.py index 917be6af..dfcfd049 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.company.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') 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..9167bfd8 --- /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/wizard/stock_delivery_planner.py b/stock_delivery_planner/wizard/stock_delivery_planner.py index 8c65c0a4..e18bd3f3 100644 --- a/stock_delivery_planner/wizard/stock_delivery_planner.py +++ b/stock_delivery_planner/wizard/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 api, fields, models, _ from odoo.tools import safe_eval import logging @@ -25,9 +27,13 @@ class StockDeliveryPlanner(models.TransientModel): planner = super(StockDeliveryPlanner, self).create(values) base_carriers = self.env['delivery.carrier'] - carrier_domain = self.env['ir.config_parameter'].sudo().get_param('stock.delivery.planner.carrier_domain') - if carrier_domain: - base_carriers = base_carriers.search(safe_eval.safe_eval(carrier_domain)) + carrier_ids = self.env['ir.config_parameter'].sudo().get_param('stock.delivery.planner.carrier_ids.%s' % (self.env.company.id, )) + if carrier_ids: + try: + carrier_ids = [int(c) for c in carrier_ids.split(',')] + base_carriers = base_carriers.browse(carrier_ids) + except: + pass for carrier in base_carriers: rates = carrier.rate_shipment_multi(picking=planner.picking_id)