diff --git a/addons/delivery/models/delivery_carrier.py b/addons/delivery/models/delivery_carrier.py index 191d86e6229846725c6a0b2f762d3f1fbd26da54..910a8e9000858bc6d2a38041af4d71c922dbd101 100644 --- a/addons/delivery/models/delivery_carrier.py +++ b/addons/delivery/models/delivery_carrier.py @@ -127,9 +127,11 @@ class DeliveryCarrier(models.Model): res = getattr(self, '%s_rate_shipment' % self.delivery_type)(order) # apply margin on computed price res['price'] = float(res['price']) * (1.0 + (float(self.margin) / 100.0)) + # save the real price in case a free_over rule overide it to 0 + res['carrier_price'] = res['price'] # free when order is large enough if res['success'] and self.free_over and order._compute_amount_total_without_delivery() >= self.amount: - res['warning_message'] = _('Info:\nThe shipping is free because the order amount exceeds %.2f.\n(The actual shipping cost is: %.2f)') % (self.amount, res['price']) + res['warning_message'] = _('The shipping is free since the order amount exceeds %.2f.') % (self.amount) res['price'] = 0.0 return res diff --git a/addons/delivery/models/sale_order.py b/addons/delivery/models/sale_order.py index c772f967bdde71c06d6279ebcfc9e5716b1158bf..8eb988d8447b43ee48a89314449820761c7ab4da 100644 --- a/addons/delivery/models/sale_order.py +++ b/addons/delivery/models/sale_order.py @@ -80,11 +80,13 @@ class SaleOrder(models.Model): self.delivery_message = res.get('warning_message', False) else: raise UserError(res['error_message']) + delivery_line.name = self.carrier_id.with_context(lang=self.partner_id.lang).name if self.carrier_id.invoice_policy == 'real': - delivery_line.name = self.carrier_id.with_context(lang=self.partner_id.lang).name delivery_line.name += _(' (Estimated Cost: %s )') % self._format_currency_amount(res['price']) else: delivery_line.price_unit = res['price'] + if self.carrier_id.free_over and self._compute_amount_total_without_delivery() >= res['price']: + delivery_line.name += '\nFree Shipping' self.recompute_delivery_price = False def _create_delivery_line(self, carrier, price_unit, price_unit_in_description=False): @@ -114,7 +116,8 @@ class SaleOrder(models.Model): values['name'] += _(' (Estimated Cost: %s )') % self._format_currency_amount(price_unit) else: values['price_unit'] = price_unit - + if carrier.free_over and self._compute_amount_total_without_delivery() >= price_unit: + values['name'] += '\n' + 'Free Shipping' if self.order_line: values['sequence'] = self.order_line[-1].sequence + 1 sol = SaleOrderLine.sudo().create(values) diff --git a/addons/delivery/views/delivery_view.xml b/addons/delivery/views/delivery_view.xml index f52a571b52f732cd332c99b2455fe48e5ada26ac..28702c4eb54cd75d5e061629bea238b0f466456f 100644 --- a/addons/delivery/views/delivery_view.xml +++ b/addons/delivery/views/delivery_view.xml @@ -295,13 +295,6 @@ <field name="inherit_id" ref="sale.view_order_form"/> <field name="arch" type="xml"> <data> - <xpath expr="//field[@name='payment_term_id']" position="after"> - <div name='carrier_selection'> - <div class="alert alert-info" role="status" attrs="{'invisible': [('delivery_message','=',False)]}"> - <field name='delivery_message' force_save="1"/> - </div> - </div> - </xpath> <xpath expr="//field[@name='partner_id']" position='after'> <field name="delivery_set" invisible="1"/> <field name="recompute_delivery_price" invisible="1"/> diff --git a/addons/delivery/wizard/choose_delivery_carrier.py b/addons/delivery/wizard/choose_delivery_carrier.py index e2c6372a29dff3b21d2b6b0247254f7bb3af0de1..454190a101e786bfa574edcbf7470dda1ec36e4f 100644 --- a/addons/delivery/wizard/choose_delivery_carrier.py +++ b/addons/delivery/wizard/choose_delivery_carrier.py @@ -18,23 +18,27 @@ class ChooseDeliveryCarrier(models.TransientModel): required=True, ) delivery_type = fields.Selection(related='carrier_id.delivery_type') - delivery_price = fields.Float(string='Cost', readonly=True) + delivery_price = fields.Float() + display_price = fields.Float(string='Cost', readonly=True) currency_id = fields.Many2one('res.currency', related='order_id.currency_id') available_carrier_ids = fields.Many2many("delivery.carrier", compute='_compute_available_carrier', string="Available Carriers") invoicing_message = fields.Text(compute='_compute_invoicing_message') + delivery_message = fields.Text(readonly=True) @api.onchange('carrier_id') def _onchange_carrier_id(self): + self.delivery_message = False if self.delivery_type in ('fixed', 'base_on_rule'): vals = self.carrier_id.rate_shipment(self.order_id) if vals.get('success'): - if vals['warning_message']: - self.order_id.delivery_message = vals['warning_message'] - else: - self.delivery_price = vals['price'] + if vals.get('warning_message'): + self.delivery_message = vals['warning_message'] + self.delivery_price = vals['price'] + self.display_price = vals['carrier_price'] else: return {'error': vals['error_message']} else: + self.display_price = 0 self.delivery_price = 0 @api.depends('carrier_id') @@ -55,8 +59,9 @@ class ChooseDeliveryCarrier(models.TransientModel): vals = self.carrier_id.rate_shipment(self.order_id) if vals.get('success'): if vals['warning_message']: - self.order_id.delivery_message = vals['warning_message'] + self.delivery_message = vals['warning_message'] self.delivery_price = vals['price'] + self.display_price = vals['carrier_price'] else: raise UserError(vals['error_message']) return { @@ -70,4 +75,5 @@ class ChooseDeliveryCarrier(models.TransientModel): def button_confirm(self): self.order_id.carrier_id = self.carrier_id + self.order_id.delivery_message = self.delivery_message self.order_id.set_delivery_line(self.carrier_id, self.delivery_price) diff --git a/addons/delivery/wizard/choose_delivery_carrier_views.xml b/addons/delivery/wizard/choose_delivery_carrier_views.xml index 3b25fc50d28e4c2c157fadf9cb59b943c9a46784..e34849eccbe43872c551af7990fc66c2ba1c4db2 100644 --- a/addons/delivery/wizard/choose_delivery_carrier_views.xml +++ b/addons/delivery/wizard/choose_delivery_carrier_views.xml @@ -11,7 +11,8 @@ <field name="delivery_type" invisible="1"/> <field name="currency_id" invisible="1"/> <field name="order_id" invisible="1"/> - <field name='delivery_price' string="Cost" widget="monetary" options="{'currency_field': 'currency_id'}" attrs="{'invisible': [('carrier_id','=', False)]}" force_save="1"/> + <field name='delivery_price' invisible="1"/> + <field name='display_price' string="Cost" widget="monetary" options="{'currency_field': 'currency_id'}" attrs="{'invisible': [('carrier_id','=', False)]}"/> </group> <button name="update_price" type="object" attrs="{'invisible': [('delivery_type','in', ('fixed', 'base_on_rule'))]}"> <i class="fa fa-arrow-right"/> @@ -20,6 +21,9 @@ <div role="alert" class="alert alert-warning" attrs="{'invisible': [('invoicing_message', '=', '')]}"> <field name="invoicing_message" nolabel="1"/> </div> + <div role="alert" class="alert alert-info" attrs="{'invisible': [('delivery_message', '=', False)]}"> + <field name="delivery_message" nolabel="1"/> + </div> <footer> <button name="button_confirm" type="object" string="Add" class="btn-primary"/> <button string="Discard" special="cancel" class="btn-secondary"/>