From 22fa7f90e48f47e20f189a5e7e5ab573fc9d200d Mon Sep 17 00:00:00 2001 From: "Tiffany Chang (tic)" Date: Mon, 14 Feb 2022 16:05:12 +0000 Subject: [PATCH] [IMP] {website_}sale, delivery: add local delivery option This commit does a couple of small related improvements: - adds new delivery options: "Local Delivery". We replace the existing "Normal Delivery Charges" with the new "Local Delivery" since it is now redundant. - Originally a "Local Pickup" demo option was going to be added, but this appeared redundant with the "[On Site Pick]" added in odoo/odoo#87636 . Regardless, an additional `carrier_description` field has been added so users can include extra instructions (e.g. address to pick up from, when pickup can occur, etc) to sales orders/ confirmation emails (emails only via ecommerce sales). - adds option to filter based on zip prefix rather than the previous zip "range" option, which was too restrictive in some cases (e.g. in the UK where zips can have letters in them). Note that users can view/edit zip prefixes in menu under settings when debug mode is active. Note: - prefixes are ordered by name so its easier to read large numbers prefixes - prefixes are always capitalized to avoid duplicate prefixes that differ by case + avoid capitalizing all prefixes every time the `_match_address` logic is called Task: 2706451 Upgrade PR: odoo/upgrade#3384 closes odoo/odoo#84620 Signed-off-by: Arnold Moyaux (arm) --- addons/delivery/__manifest__.py | 1 + addons/delivery/data/delivery_demo.xml | 23 ++++++++------- addons/delivery/models/__init__.py | 1 + addons/delivery/models/delivery_carrier.py | 12 ++++---- addons/delivery/models/delivery_zip_prefix.py | 29 +++++++++++++++++++ .../report/ir_actions_report_templates.xml | 11 +++++++ addons/delivery/security/ir.model.access.csv | 2 ++ addons/delivery/views/delivery_view.xml | 27 ++++++++++++----- addons/sale/data/mail_template_data.xml | 6 ++++ .../report/ir_actions_report_templates.xml | 2 +- .../data/website_sale_delivery_demo.xml | 4 --- .../views/website_sale_delivery_views.xml | 8 ++--- 12 files changed, 94 insertions(+), 32 deletions(-) create mode 100644 addons/delivery/models/delivery_zip_prefix.py create mode 100644 addons/delivery/report/ir_actions_report_templates.xml diff --git a/addons/delivery/__manifest__.py b/addons/delivery/__manifest__.py index 1ef640b8deb..abe3fa5ad9a 100644 --- a/addons/delivery/__manifest__.py +++ b/addons/delivery/__manifest__.py @@ -32,6 +32,7 @@ invoices from picking, the system is able to add and compute the shipping line. 'views/stock_picking_type_views.xml', 'views/stock_rule_views.xml', 'views/stock_move_line_views.xml', + 'report/ir_actions_report_templates.xml', ], 'demo': ['data/delivery_demo.xml'], 'installable': True, diff --git a/addons/delivery/data/delivery_demo.xml b/addons/delivery/data/delivery_demo.xml index fde9b245550..7b3f9b3985f 100644 --- a/addons/delivery/data/delivery_demo.xml +++ b/addons/delivery/data/delivery_demo.xml @@ -23,22 +23,25 @@ - - Normal Delivery Charges - Delivery_008 + + + Local Delivery + Delivery_010 service 10.0 + order - - - Normal Delivery Charges - 10.0 - 3 + + Local Delivery + 5.0 + + 50 + 4 fixed - + @@ -66,7 +69,7 @@ property_delivery_carrier_id - + diff --git a/addons/delivery/models/__init__.py b/addons/delivery/models/__init__.py index 8335f4645fc..9caafda7a6c 100644 --- a/addons/delivery/models/__init__.py +++ b/addons/delivery/models/__init__.py @@ -3,6 +3,7 @@ from . import delivery_carrier from . import delivery_grid +from . import delivery_zip_prefix from . import product_template from . import sale_order from . import partner diff --git a/addons/delivery/models/delivery_carrier.py b/addons/delivery/models/delivery_carrier.py index 708941a3032..87ae26ab173 100644 --- a/addons/delivery/models/delivery_carrier.py +++ b/addons/delivery/models/delivery_carrier.py @@ -53,8 +53,12 @@ class DeliveryCarrier(models.Model): country_ids = fields.Many2many('res.country', 'delivery_carrier_country_rel', 'carrier_id', 'country_id', 'Countries') state_ids = fields.Many2many('res.country.state', 'delivery_carrier_state_rel', 'carrier_id', 'state_id', 'States') - zip_from = fields.Char('Zip From') - zip_to = fields.Char('Zip To') + zip_prefix_ids = fields.Many2many( + 'delivery.zip.prefix', 'delivery_zip_prefix_rel', 'carrier_id', 'zip_prefix_id', 'Zip Prefixes') + carrier_description = fields.Text( + 'Carrier Description', translate=True, + help="A description of the delivery method that you want to communicate to your customers on the Sales Order and sales confirmation email." + "E.g. instructions for customers to follow.") margin = fields.Float(help='This percentage will be added to the shipping price.') free_over = fields.Boolean('Free if order amount is above', help="If the order total amount (shipping excluded) is above or equal to this value, the customer benefits from a free shipping", default=False) @@ -115,9 +119,7 @@ class DeliveryCarrier(models.Model): return False if self.state_ids and partner.state_id not in self.state_ids: return False - if self.zip_from and (partner.zip or '').upper() < self.zip_from.upper(): - return False - if self.zip_to and (partner.zip or '').upper() > self.zip_to.upper(): + if self.zip_prefix_ids and not partner.zip.upper().startswith(tuple(self.zip_prefix_ids.mapped('name'))): return False return True diff --git a/addons/delivery/models/delivery_zip_prefix.py b/addons/delivery/models/delivery_zip_prefix.py new file mode 100644 index 00000000000..2d56f66d232 --- /dev/null +++ b/addons/delivery/models/delivery_zip_prefix.py @@ -0,0 +1,29 @@ +# -*- coding: utf-8 -*- +# Part of Odoo. See LICENSE file for full copyright and licensing details. + +from odoo import api, fields, models + + +class DeliveryZipPrefix(models.Model): + """ Zip prefix that a delivery.carrier will deliver to. """ + _name = 'delivery.zip.prefix' + _description = 'Delivery Zip Prefix' + _order = 'name, id' + + name = fields.Char('Prefix', required=True) + + @api.model_create_multi + def create(self, vals_list): + for vals in vals_list: + # we cannot easily convert a list of prefix names into upper to compare with partner zips + # later on, so let's ensure they are always upper + vals['name'] = vals['name'].upper() + return super(DeliveryZipPrefix, self).create(vals_list) + + def write(self, vals): + vals['name'] = vals['name'].upper() + return super().write(vals) + + _sql_constraints = [ + ('name_uniq', 'unique (name)', "Prefix already exists!"), + ] diff --git a/addons/delivery/report/ir_actions_report_templates.xml b/addons/delivery/report/ir_actions_report_templates.xml new file mode 100644 index 00000000000..af24fc3e9cb --- /dev/null +++ b/addons/delivery/report/ir_actions_report_templates.xml @@ -0,0 +1,11 @@ + + + + diff --git a/addons/delivery/security/ir.model.access.csv b/addons/delivery/security/ir.model.access.csv index 30cad15e316..5eb1fcc9e13 100644 --- a/addons/delivery/security/ir.model.access.csv +++ b/addons/delivery/security/ir.model.access.csv @@ -1,12 +1,14 @@ id,name,model_id:id,group_id:id,perm_read,perm_write,perm_create,perm_unlink access_delivery_carrier,delivery.carrier,model_delivery_carrier,sales_team.group_sale_salesman,1,0,0,0 access_delivery_carrier_system,delivery.carrier,model_delivery_carrier,base.group_system,1,0,0,0 +access_delivery_zip_prefix,delivery.zip.prefix,model_delivery_zip_prefix,sales_team.group_sale_salesman,1,0,0,0 access_delivery_price_rule,delivery.price.rule,model_delivery_price_rule,sales_team.group_sale_salesman,1,0,0,0 access_delivery_carrier_manager,delivery.carrier,model_delivery_carrier,sales_team.group_sale_manager,1,1,1,1 access_delivery_price_rule_manager,delivery.price.rule,model_delivery_price_rule,sales_team.group_sale_manager,1,1,1,1 access_delivery_carrier_partner_manager,delivery.carrier partner_manager,model_delivery_carrier,base.group_partner_manager,1,0,0,0 access_delivery_carrier_stock_user,delivery.carrier stock_user,model_delivery_carrier,stock.group_stock_user,1,0,0,0 access_delivery_carrier_stock_manager,delivery.carrier,model_delivery_carrier,stock.group_stock_manager,1,1,1,1 +access_delivery_zip_prefix_stock_manager,delivery.zip.prefix,model_delivery_zip_prefix,stock.group_stock_manager,1,1,1,1 access_delivery_price_rule_stock_manager,delivery.price.rule,model_delivery_price_rule,stock.group_stock_manager,1,1,1,1 access_choose_delivery_package,access.choose.delivery.package,model_choose_delivery_package,stock.group_stock_user,1,1,1,0 access_choose_delivery_carrier,access.choose.delivery.carrier,model_choose_delivery_carrier,stock.group_stock_user,1,1,1,0 diff --git a/addons/delivery/views/delivery_view.xml b/addons/delivery/views/delivery_view.xml index 132f762bcc4..79e15476f2b 100644 --- a/addons/delivery/views/delivery_view.xml +++ b/addons/delivery/views/delivery_view.xml @@ -130,16 +130,13 @@ - - - - - - - + + + + @@ -167,8 +164,24 @@ + + Zip Prefix + ir.actions.act_window + delivery.zip.prefix + tree,form + +

+ Manage delivery zip prefixes +

+ Delivery zip prefixes are assigned to delivery carriers to restrict + which zips it is available to. +

+
+
+ + delivery.price.rule.form diff --git a/addons/sale/data/mail_template_data.xml b/addons/sale/data/mail_template_data.xml index 6de653b00c1..0d5bc91430e 100644 --- a/addons/sale/data/mail_template_data.xml +++ b/addons/sale/data/mail_template_data.xml @@ -222,6 +222,12 @@ + + + Shipping Description: + + + diff --git a/addons/sale/report/ir_actions_report_templates.xml b/addons/sale/report/ir_actions_report_templates.xml index f812fcaa049..fef873112cb 100644 --- a/addons/sale/report/ir_actions_report_templates.xml +++ b/addons/sale/report/ir_actions_report_templates.xml @@ -166,7 +166,7 @@
-

+

diff --git a/addons/website_sale_delivery/data/website_sale_delivery_demo.xml b/addons/website_sale_delivery/data/website_sale_delivery_demo.xml index 07c440824b3..79a372e920a 100644 --- a/addons/website_sale_delivery/data/website_sale_delivery_demo.xml +++ b/addons/website_sale_delivery/data/website_sale_delivery_demo.xml @@ -6,9 +6,5 @@ - - - - diff --git a/addons/website_sale_delivery/views/website_sale_delivery_views.xml b/addons/website_sale_delivery/views/website_sale_delivery_views.xml index 2699876fdf8..401697b3b85 100644 --- a/addons/website_sale_delivery/views/website_sale_delivery_views.xml +++ b/addons/website_sale_delivery/views/website_sale_delivery_views.xml @@ -9,11 +9,9 @@ - - - - - + + +