Skip to content

Commit 59b6e2c

Browse files
committed
delivery_auto_refresh: multi-company
Move config to company level Prefix config settings by sale
1 parent 058f90b commit 59b6e2c

File tree

7 files changed

+59
-49
lines changed

7 files changed

+59
-49
lines changed

delivery_auto_refresh/migrations/16.0.2.0.0/post-migration.py

+15
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,21 @@ def _migrate_setting_to_company(env):
1010
):
1111
env["res.company"].search([]).sale_auto_assign_carrier_on_create = True
1212

13+
if env["ir.config_parameter"].get_param(
14+
"delivery_auto_refresh.auto_add_delivery_line"
15+
):
16+
env["res.company"].search([]).sale_auto_add_delivery_line = True
17+
18+
if env["ir.config_parameter"].get_param(
19+
"delivery_auto_refresh.refresh_after_picking"
20+
):
21+
env["res.company"].search([]).sale_refresh_delivery_after_picking = True
22+
23+
if env["ir.config_parameter"].get_param(
24+
"delivery_auto_refresh.auto_void_delivery_line"
25+
):
26+
env["res.company"].search([]).sale_auto_void_delivery_line = True
27+
1328

1429
def migrate(cr, version):
1530
env = api.Environment(cr, SUPERUSER_ID, {})

delivery_auto_refresh/models/res_company.py

+10
Original file line numberDiff line numberDiff line change
@@ -12,3 +12,13 @@ class ResCompany(models.Model):
1212
"Set default shipping method automatically"
1313
)
1414
# End migration note
15+
16+
sale_auto_add_delivery_line = fields.Boolean(
17+
"Refresh shipping cost line automatically",
18+
)
19+
sale_refresh_delivery_after_picking = fields.Boolean(
20+
"Refresh delivery after picking automatically",
21+
)
22+
sale_auto_void_delivery_line = fields.Boolean(
23+
"Void delivery lines automatically",
24+
)

delivery_auto_refresh/models/res_config_settings.py

+9-9
Original file line numberDiff line numberDiff line change
@@ -14,15 +14,15 @@ class ResConfigSettings(models.TransientModel):
1414
)
1515
# End migration note
1616

17-
auto_add_delivery_line = fields.Boolean(
18-
"Refresh shipping cost line automatically",
19-
config_parameter="delivery_auto_refresh.auto_add_delivery_line",
17+
sale_auto_add_delivery_line = fields.Boolean(
18+
related="company_id.sale_auto_add_delivery_line",
19+
readonly=False,
2020
)
21-
refresh_after_picking = fields.Boolean(
22-
"Refresh after picking automatically",
23-
config_parameter="delivery_auto_refresh.refresh_after_picking",
21+
sale_refresh_delivery_after_picking = fields.Boolean(
22+
related="company_id.sale_refresh_delivery_after_picking",
23+
readonly=False,
2424
)
25-
auto_void_delivery_line = fields.Boolean(
26-
"Void delivery lines automatically",
27-
config_parameter="delivery_auto_refresh.auto_void_delivery_line",
25+
sale_auto_void_delivery_line = fields.Boolean(
26+
related="company_id.sale_auto_void_delivery_line",
27+
readonly=False,
2828
)

delivery_auto_refresh/models/sale_order.py

+8-8
Original file line numberDiff line numberDiff line change
@@ -72,16 +72,12 @@ def _is_auto_set_carrier_on_create(self):
7272

7373
# End migration note
7474

75-
def _get_param_auto_add_delivery_line(self):
75+
def _is_auto_add_delivery_line(self):
7676
# When we have the context 'website_id' it means that we are doing the order from
7777
# e-commerce. So we don't want to add the delivery line automatically.
7878
if self.env.context.get("website_id"):
7979
return False
80-
return (
81-
self.env["ir.config_parameter"]
82-
.sudo()
83-
.get_param("delivery_auto_refresh.auto_add_delivery_line")
84-
)
80+
return self.company_id.sale_auto_add_delivery_line
8581

8682
def _get_delivery_discount(self, delivery_lines):
8783
return delivery_lines[-1:].discount
@@ -122,7 +118,7 @@ def _auto_refresh_delivery(self):
122118
self.ensure_one()
123119
if self.env.context.get("auto_refresh_delivery"):
124120
return
125-
if not self._get_param_auto_add_delivery_line():
121+
if not self._is_auto_add_delivery_line():
126122
return
127123
if self.state not in ("draft", "sent"):
128124
return
@@ -178,7 +174,7 @@ def write(self, vals):
178174
return res
179175

180176
def set_delivery_line(self, carrier, amount):
181-
if self._get_param_auto_add_delivery_line() and self.state in ("draft", "sent"):
177+
if self._is_auto_add_delivery_line() and self.state in ("draft", "sent"):
182178
# This will trigger an _auto_refresh_delivery in write
183179
self.carrier_id = carrier.id
184180
else:
@@ -188,6 +184,10 @@ def _is_delivery_line_voidable(self):
188184
"""If the picking is returned before being invoiced, like when the picking
189185
is delivered but immediately return because the customer refused the order,
190186
so no delivery charges should be applied."""
187+
self.ensure_one()
188+
if not self.company_id.sale_auto_void_delivery_line:
189+
return False
190+
191191
# There are invoiceable lines so there's no full return or the lines
192192
# were not set to refund.
193193
qty_delivered = sum(

delivery_auto_refresh/models/stock_picking.py

+2-15
Original file line numberDiff line numberDiff line change
@@ -13,15 +13,9 @@ def _add_delivery_cost_to_so(self):
1313
# based on rules doesn't refresh with real picking data, only with SO
1414
# ones.
1515
res = super()._add_delivery_cost_to_so()
16-
refresh_after_picking = (
17-
self.env["ir.config_parameter"]
18-
.sudo()
19-
.get_param("delivery_auto_refresh.refresh_after_picking")
20-
)
21-
if not refresh_after_picking:
22-
return res
23-
self.ensure_one()
2416
sale_order = self.sale_id
17+
if not sale_order.company_id.sale_refresh_delivery_after_picking:
18+
return res
2519
if not sale_order or not self.carrier_id: # pragma: no cover
2620
return res
2721
so_line = sale_order.order_line.filtered(lambda x: x.is_delivery)[:1]
@@ -65,13 +59,6 @@ def _action_done(self):
6559
# If configured, we want to set to 0 automatically the delivery line
6660
# when we have a returned picking that isn't invoiced so we don't have
6761
# it as invoiceable line. Otherwise, the salesman has to do it by hand.
68-
auto_void_delivery_line = (
69-
self.env["ir.config_parameter"]
70-
.sudo()
71-
.get_param("delivery_auto_refresh.auto_void_delivery_line")
72-
)
73-
if not auto_void_delivery_line:
74-
return res
7562
sales_to_void_delivery = self.filtered(
7663
lambda x: x.sale_id
7764
and x.picking_type_code == "incoming"

delivery_auto_refresh/tests/test_delivery_auto_refresh.py

+9-11
Original file line numberDiff line numberDiff line change
@@ -74,9 +74,6 @@ def setUpClass(cls):
7474
"property_product_pricelist": pricelist.id,
7575
}
7676
)
77-
cls.auto_add_delivery_line = "delivery_auto_refresh.auto_add_delivery_line"
78-
cls.refresh_after_picking = "delivery_auto_refresh.refresh_after_picking"
79-
cls.auto_void_delivery_line = "delivery_auto_refresh.auto_void_delivery_line"
8077
cls.settings = cls.env["res.config.settings"].create({})
8178
cls.settings.execute()
8279
order_form = Form(cls.env["sale.order"])
@@ -90,7 +87,7 @@ def setUpClass(cls):
9087

9188
def test_auto_refresh_so(self):
9289
self.assertFalse(self.order.order_line.filtered("is_delivery"))
93-
self.settings.auto_add_delivery_line = True
90+
self.settings.sale_auto_add_delivery_line = True
9491
self.settings.execute()
9592
self.order.write(
9693
{"order_line": [(1, self.order.order_line.id, {"product_uom_qty": 3})]}
@@ -128,7 +125,7 @@ def test_auto_refresh_so(self):
128125
self.assertEqual(line_delivery.name, "Test carrier 1")
129126

130127
def test_auto_refresh_picking(self):
131-
self.settings.refresh_after_picking = True
128+
self.settings.sale_refresh_delivery_after_picking = True
132129
self.settings.execute()
133130
self.order.order_line.product_uom_qty = 3
134131
wiz = Form(
@@ -147,7 +144,7 @@ def test_auto_refresh_picking(self):
147144
self.assertEqual(line_delivery.price_unit, 50)
148145

149146
def test_auto_refresh_picking_fixed_price(self):
150-
self.settings.refresh_after_picking = True
147+
self.settings.sale_refresh_delivery_after_picking = True
151148
self.settings.execute()
152149
product_fixed_price = self.env["product.product"].create(
153150
{
@@ -178,7 +175,7 @@ def test_auto_refresh_picking_fixed_price(self):
178175
self.assertEqual(line_delivery.price_unit, 2)
179176

180177
def test_no_auto_refresh_picking(self):
181-
self.settings.refresh_after_picking = False
178+
self.settings.sale_refresh_delivery_after_picking = False
182179
self.settings.execute()
183180
self.order.order_line.product_uom_qty = 3
184181
wiz = Form(
@@ -232,8 +229,8 @@ def _return_whole_picking(self, picking, to_refund=True):
232229
def _test_autorefresh_void_line(self, lock=False, to_refund=True, invoice=False):
233230
"""Helper method to test the possible cases for voiding the line"""
234231
self.assertFalse(self.order.order_line.filtered("is_delivery"))
235-
self.settings.auto_add_delivery_line = True
236-
self.settings.auto_void_delivery_line = True
232+
self.settings.sale_auto_add_delivery_line = True
233+
self.settings.sale_auto_void_delivery_line = True
237234
self.settings.execute()
238235
line_delivery = self._confirm_sale_order(self.order)
239236
self._validate_picking(self.order.picking_ids)
@@ -274,7 +271,7 @@ def test_auto_refresh_so_and_return_no_refund(self):
274271
def _test_autorefresh_unlink_line(self):
275272
"""Helper method to test the possible cases for voiding the line"""
276273
self.assertFalse(self.order.order_line.filtered("is_delivery"))
277-
self.settings.auto_add_delivery_line = True
274+
self.settings.sale_auto_add_delivery_line = True
278275
self.settings.execute()
279276
sale_form = Form(self.order)
280277
# Force the delivery line creation
@@ -295,7 +292,8 @@ def test_auto_refresh_so_and_unlink_line(self):
295292

296293
def test_auto_add_delivery_line_add_service(self):
297294
"""No delivery line when service only"""
298-
self.env["ir.config_parameter"].sudo().set_param(self.auto_add_delivery_line, 1)
295+
self.settings.sale_auto_add_delivery_line = True
296+
self.settings.set_values()
299297
service = self.env["product.product"].create(
300298
{"name": "Service Test", "type": "service"}
301299
)

delivery_auto_refresh/views/res_config_settings_views.xml

+6-6
Original file line numberDiff line numberDiff line change
@@ -29,30 +29,30 @@
2929
<!-- End Migratio note -->
3030

3131
<div class="o_setting_left_pane">
32-
<field name="auto_add_delivery_line" />
32+
<field name="sale_auto_add_delivery_line" />
3333
</div>
3434
<div class="o_setting_right_pane">
35-
<label for="auto_add_delivery_line" />
35+
<label for="sale_auto_add_delivery_line" />
3636
<div class="text-muted">
3737
On the sales quotation, refresh the shipping cost line when saving
3838
</div>
3939
</div>
4040

4141
<div class="o_setting_left_pane">
42-
<field name="refresh_after_picking" />
42+
<field name="sale_refresh_delivery_after_picking" />
4343
</div>
4444
<div class="o_setting_right_pane">
45-
<label for="refresh_after_picking" />
45+
<label for="sale_refresh_delivery_after_picking" />
4646
<div class="text-muted">
4747
After delivering a sales order, update the shipping cost line based on what has been delivered
4848
</div>
4949
</div>
5050

5151
<div class="o_setting_left_pane">
52-
<field name="auto_void_delivery_line" />
52+
<field name="sale_auto_void_delivery_line" />
5353
</div>
5454
<div class="o_setting_right_pane">
55-
<label for="auto_void_delivery_line" />
55+
<label for="sale_auto_void_delivery_line" />
5656
<div class="text-muted">
5757
Void the shipping cost line when the delivery is returned before invoicing
5858
</div>

0 commit comments

Comments
 (0)