diff options
| author | Parth Mehta <pme@odoo.com> | 2016-02-17 15:54:41 +0100 |
|---|---|---|
| committer | Richard Mathot <rim@odoo.com> | 2016-02-26 11:37:35 +0100 |
| commit | 9aa351a9dbeaa08f9f260b88782ce69f1cf6c90d (patch) | |
| tree | 39ad806bf2dd2e5fd2fa2c82dc1fc3e873709091 /addons | |
| parent | 7f64a2ec2410517537a6e312f24a0e168183ecc5 (diff) | |
[IMP] delivery: margin on shipping price
Allow users to define a percentage on shipping price, in order to cover
up differences between rating and shipping actual price.
Authors:
Barad Mahendra <mba@openerp.com>
Parth Mehta <pme@odoo.com>
Diffstat (limited to 'addons')
| -rw-r--r-- | addons/delivery/models/delivery_carrier.py | 19 | ||||
| -rw-r--r-- | addons/delivery/models/sale_order.py | 3 | ||||
| -rw-r--r-- | addons/delivery/views/delivery_view.xml | 4 |
3 files changed, 19 insertions, 7 deletions
diff --git a/addons/delivery/models/delivery_carrier.py b/addons/delivery/models/delivery_carrier.py index 8a7f8fee787..e360a70ccaa 100644 --- a/addons/delivery/models/delivery_carrier.py +++ b/addons/delivery/models/delivery_carrier.py @@ -52,6 +52,11 @@ class DeliveryCarrier(models.Model): fixed_price = fields.Float(compute='_compute_fixed_price', inverse='_set_product_fixed_price', store=True, string='Fixed Price',help="Keep empty if the pricing depends on the advanced pricing per destination") shipping_enabled = fields.Boolean(string="Shipping enabled", default=True, help="Uncheck this box to disable package shipping while validating Delivery Orders") prod_environment = fields.Boolean("Environment", help="Set to True if your credentials are certified for production.") + margin = fields.Integer(help='This percentage will be added to the shipping price.') + + _sql_constraints = [ + ('margin_not_under_100_percent', 'CHECK (margin >= -100)', 'Margin cannot be lower than -100%'), + ] @api.one def toggle_prod_environment(self): @@ -99,24 +104,26 @@ class DeliveryCarrier(models.Model): order = SaleOrder.browse(order_id) if self.delivery_type not in ['fixed', 'base_on_rule']: try: - self.price = self.get_shipping_price_from_so(order)[0] + computed_price = self.get_shipping_price_from_so(order)[0] self.available = True except UserError as e: # No suitable delivery method found, probably configuration error _logger.info("Carrier %s: %s, not found", self.name, e.name) - self.price = 0.0 + computed_price = 0.0 else: carrier = self.verify_carrier(order.partner_shipping_id) if carrier: try: - self.price = carrier.get_price_available(order) + computed_price = carrier.get_price_available(order) self.available = True - except UserError, e: + except UserError as e: # No suitable delivery method found, probably configuration error _logger.info("Carrier %s: %s", carrier.name, e.name) - self.price = 0.0 + computed_price = 0.0 else: - self.price = 0.0 + computed_price = 0.0 + + self.price = computed_price * (1.0 + (float(self.margin) / 100.0)) # -------------------------- # # API for external providers # diff --git a/addons/delivery/models/sale_order.py b/addons/delivery/models/sale_order.py index b99391c1aeb..9d64c718e1e 100644 --- a/addons/delivery/models/sale_order.py +++ b/addons/delivery/models/sale_order.py @@ -65,7 +65,8 @@ class SaleOrder(models.Model): if order.company_id.currency_id.id != order.pricelist_id.currency_id.id: price_unit = order.company_id.currency_id.with_context(date=order.date_order).compute(price_unit, order.pricelist_id.currency_id) - order._create_delivery_line(carrier, price_unit) + final_price = price_unit * (1.0 + (float(self.carrier_id.margin) / 100.0)) + order._create_delivery_line(carrier, final_price) else: raise UserError(_('No carrier set for this order.')) diff --git a/addons/delivery/views/delivery_view.xml b/addons/delivery/views/delivery_view.xml index 36be1fa7803..4e418df7c3f 100644 --- a/addons/delivery/views/delivery_view.xml +++ b/addons/delivery/views/delivery_view.xml @@ -63,6 +63,10 @@ <page string="Pricing"> <group> <field name="delivery_type" widget="radio"/> + <label for="margin"/> + <div> + <field name="margin" class="oe_inline"/>% + </div> </group> <group attrs="{'invisible':[('delivery_type', '!=', 'fixed')]}"> <group> |
