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 @@ - - - - - + + +