Odoo Help


This community is for beginners and experts willing to share their Odoo knowledge. It's not a forum to discuss ideas, but a knowledge base of questions and their answers.


Adding a global discount to sale.order, how?

on 2/7/16, 3:12 PM 518 views


I am trying to extend the sale.order class, but I do not know how to use the new field discount_rate in _amount_all.

Could someone help and clarify how to add this field?

This is the code to inherit the sale.order class adding the two new fields:
# -*- coding: utf-8 -*-
from openerp import models, fields, api
class SaleOrderDiscount(models.Model):
_inherit = 'sale.order'
discount_rate = fields.Float(
string='Discount Rate (%)',
amount_discount = fields.Float(
string='Amount Discount'
@api.onchange('discount_rate', 'amount_untaxed')
def calculate_discount(self):
self.amount_discount = self.amount_untaxed * (self.discount_rate / 100)
def _amount_all(self, cr, uid, ids, field_name, arg, context=None):
cur_obj = self.pool.get('res.currency')
res = {}
for order in self.browse(cr, uid, ids, context=context):
res[order.id] = {
'amount_untaxed': 0.0,
'amount_discount': 0.0,
'amount_tax': 0.0,
'amount_total': 0.0,
val = val1 = 0.0
cur = order.pricelist_id.currency_id
for line in order.order_line:
val1 += line.price_subtotal
val += self._amount_line_tax(cr, uid, line, context=context)
val2 = val1 * (self.discount_rate / 100)
res[order.id]['amount_tax'] = cur_obj.round(cr, uid, cur, val)
res[order.id]['amount_untaxed'] = cur_obj.round(cr, uid, cur, val1)
res[order.id]['amount_discount'] = cur_obj.round(cr, uid, cur, val2)
res[order.id]['amount_total'] = res[order.id]['amount_untaxed'] + res[order.id]['amount_tax'] - res[order.id]['amount_discount']
return res


Ray Carnes

--Ray Carnes--
| 9 7 9
Greater Los Angeles, United States
--Ray Carnes--

Senior Odoo Analyst

OpenERP 6.1, 7.0 and Odoo 8.0, 9.0 (Since 2012)

Completed Functional and Technical Training.

Major Skills:

  • Needs Discovery and Requirements Analysis;

  • Function and Technical Specifications;

  • Project Planning;

  • Prototyping and Proof of concepts;

  • Data migration;

  • Configuration & Customization (UI and modules);

  • Integration - data, business logic and service levels;

  • Training and Knowledge transfer;

  • Go Live support;

  • Help desk;

  • Version Migration.

I have over 20 years of experience empowering and enabling users with enterprise information systems that make a real and measurable difference in their ability to proactively manage their businesses and organizations. 

Ray Carnes
On 2/7/16, 4:42 PM

Have you seen "Global Discount on Sales Orders" at https://apps.openerp.com/apps/modules/8.0/global_discount/

Thanks Ray, I checked it out and it is great and easy. However I would like to be able to add a true global discount Ialso for the shake of trying to finally understand how Odoo works, (which is being quite challenging)

on 2/8/16, 2:04 AM

Your Answer

Please try to give a substantial answer. If you wanted to comment on the question or answer, just use the commenting tool. Please remember that you can always revise your answers - no need to answer the same question twice. Also, please don't forget to vote - it really helps to select the best questions and answers!

About This Community

This community is for professionals and enthusiasts of our products and services. Read Guidelines

Question tools

1 follower(s)


Asked: 2/7/16, 3:12 PM
Seen: 518 times
Last updated: 2/7/16, 4:42 PM