diff --git a/addons/account/account.py b/addons/account/account.py index 7fbab48d436..84e7e0c74c5 100644 --- a/addons/account/account.py +++ b/addons/account/account.py @@ -23,6 +23,7 @@ import time import netsvc from osv import fields, osv +import decimal_precision as dp from tools.misc import currency from tools.translate import _ @@ -53,12 +54,13 @@ class account_payment_term(osv.osv): amount = value result = [] for line in pt.line_ids: + prec = self.pool.get('decimal.precision').precision_get(cr, uid, 'Account') if line.value == 'fixed': - amt = round(line.value_amount, int(config['price_accuracy'])) + amt = round(line.value_amount, prec) elif line.value == 'procent': - amt = round(value * line.value_amount, int(config['price_accuracy'])) + amt = round(value * line.value_amount, prec) elif line.value == 'balance': - amt = round(amount, int(config['price_accuracy'])) + amt = round(amount, prec) if amt: next_date = datetime.strptime(date_ref, '%y-%m-%d') + relativedelta(days=line.days) if line.days2 < 0: @@ -296,9 +298,9 @@ class account_account(osv.osv): 'child_parent_ids': fields.one2many('account.account','parent_id','Children'), 'child_consol_ids': fields.many2many('account.account', 'account_account_consol_rel', 'child_id', 'parent_id', 'Consolidated Children'), 'child_id': fields.function(_get_child_ids, method=True, type='many2many', relation="account.account", string="Child Accounts"), - 'balance': fields.function(__compute, digits=(16, int(config['price_accuracy'])), method=True, string='Balance', multi='balance'), - 'credit': fields.function(__compute, digits=(16, int(config['price_accuracy'])), method=True, string='Credit', multi='balance'), - 'debit': fields.function(__compute, digits=(16, int(config['price_accuracy'])), method=True, string='Debit', multi='balance'), + 'balance': fields.function(__compute, digits_compute=dp.get_precision('Account'), method=True, string='Balance', multi='balance'), + 'credit': fields.function(__compute, digits_compute=dp.get_precision('Account'), method=True, string='Credit', multi='balance'), + 'debit': fields.function(__compute, digits_compute=dp.get_precision('Account'), method=True, string='Debit', multi='balance'), 'reconcile': fields.boolean('Reconcile', help="Check this if the user is allowed to reconcile entries in this account."), 'shortcut': fields.char('Shortcut', size=12), 'tax_ids': fields.many2many('account.tax', 'account_account_tax_default_rel', @@ -817,7 +819,7 @@ class account_move(osv.osv): 'line_id': fields.one2many('account.move.line', 'move_id', 'Entries', states={'posted':[('readonly',True)]}), 'to_check': fields.boolean('To Be Verified'), 'partner_id': fields.related('line_id', 'partner_id', type="many2one", relation="res.partner", string="Partner"), - 'amount': fields.function(_amount_compute, method=True, string='Amount', digits=(16,int(config['price_accuracy'])), type='float', fnct_search=_search_amount), + 'amount': fields.function(_amount_compute, method=True, string='Amount', digits_compute=dp.get_precision('Account'), type='float', fnct_search=_search_amount), 'date': fields.date('Date', required=True), 'type': fields.selection([ ('pay_voucher','Cash Payment'), @@ -1189,7 +1191,7 @@ class account_tax_code(osv.osv): for rec in record.child_ids: amount += _rec_get(rec) * rec.sign return amount - res[record.id] = round(_rec_get(record), int(config['price_accuracy'])) + res[record.id] = round(_rec_get(record), self.pool.get('decimal.precision').precision_get(cr, uid, 'Account')) return res def _sum_year(self, cr, uid, ids, name, args, context): @@ -1460,9 +1462,9 @@ class account_tax(osv.osv): total = 0.0 for r in res: if r.get('balance',False): - r['amount'] = round(r['balance'] * quantity, int(config['price_accuracy'])) - total + r['amount'] = round(r['balance'] * quantity, self.pool.get('decimal.precision').precision_get(cr, uid, 'Account')) - total else: - r['amount'] = round(r['amount'] * quantity, int(config['price_accuracy'])) + r['amount'] = round(r['amount'] * quantity, self.pool.get('decimal.precision').precision_get(cr, uid, 'Account')) total += r['amount'] return res @@ -1556,10 +1558,11 @@ class account_tax(osv.osv): res = self._unit_compute_inv(cr, uid, taxes, price_unit, address_id, product, partner=None) total = 0.0 for r in res: + prec = self.pool.get('decimal.precision').precision_get(cr, uid, 'Account') if r.get('balance',False): - r['amount'] = round(r['balance'] * quantity, int(config['price_accuracy'])) - total + r['amount'] = round(r['balance'] * quantity, prec) - total else: - r['amount'] = round(r['amount'] * quantity, int(config['price_accuracy'])) + r['amount'] = round(r['amount'] * quantity, prec) total += r['amount'] return res account_tax() @@ -1627,9 +1630,9 @@ class account_model_line(osv.osv): _columns = { 'name': fields.char('Name', size=64, required=True), 'sequence': fields.integer('Sequence', required=True, help="The sequence field is used to order the resources from lower sequences to higher ones"), - 'quantity': fields.float('Quantity', digits=(16, int(config['price_accuracy'])), help="The optional quantity on entries"), - 'debit': fields.float('Debit', digits=(16, int(config['price_accuracy']))), - 'credit': fields.float('Credit', digits=(16, int(config['price_accuracy']))), + 'quantity': fields.float('Quantity', digits_compute=dp.get_precision('Account'), help="The optional quantity on entries"), + 'debit': fields.float('Debit', digits_compute=dp.get_precision('Account')), + 'credit': fields.float('Credit', digits_compute=dp.get_precision('Account')), 'account_id': fields.many2one('account.account', 'Account', required=True, ondelete="cascade"), diff --git a/addons/account/account_analytic_line.py b/addons/account/account_analytic_line.py index b41ef632477..18f63733ff6 100644 --- a/addons/account/account_analytic_line.py +++ b/addons/account/account_analytic_line.py @@ -20,6 +20,7 @@ ############################################################################## import time +import decimal_precision as dp from osv import fields from osv import osv @@ -85,7 +86,7 @@ class account_analytic_line(osv.osv): }, help="The related account currency if not equal to the company one."), 'company_id': fields.many2one('res.company','Company',required=True), - 'amount_currency': fields.function(_amount_currency, method=True, digits=(16, int(config['price_accuracy'])), string='Amount currency', + 'amount_currency': fields.function(_amount_currency, method=True, digits_compute= dp.get_precision('Account'), string='Amount currency', store={ 'account.analytic.account': (_get_account_line, ['company_id'], 50), 'account.analytic.line': (lambda self,cr,uid,ids,c={}: ids, ['amount','unit_amount'],10), diff --git a/addons/account/account_move_line.py b/addons/account/account_move_line.py index 0ab2b5cbe96..0adc85a942e 100644 --- a/addons/account/account_move_line.py +++ b/addons/account/account_move_line.py @@ -25,7 +25,7 @@ from osv import fields, osv from tools.translate import _ from datetime import datetime - +import decimal_precision as dp import tools class account_move_line(osv.osv): @@ -397,8 +397,8 @@ class account_move_line(osv.osv): 'quantity': fields.float('Quantity', digits=(16,2), help="The optional quantity expressed by this line, eg: number of product sold. The quantity is not a legal requirement but is very useful for some reports."), 'product_uom_id': fields.many2one('product.uom', 'UoM'), 'product_id': fields.many2one('product.product', 'Product'), - 'debit': fields.float('Debit', digits=(16,int(tools.config['price_accuracy']))), - 'credit': fields.float('Credit', digits=(16,int(tools.config['price_accuracy']))), + 'debit': fields.float('Debit', digits_compute=dp.get_precision('Account')), + 'credit': fields.float('Credit', digits_compute=dp.get_precision('Account')), 'account_id': fields.many2one('account.account', 'Account', required=True, ondelete="cascade", domain=[('type','<>','view'), ('type', '<>', 'closed')], select=2), 'move_id': fields.many2one('account.move', 'Move', ondelete="cascade", states={'valid':[('readonly',True)]}, help="The move of this entry line.", select=2), @@ -406,7 +406,7 @@ class account_move_line(osv.osv): 'statement_id': fields.many2one('account.bank.statement', 'Statement', help="The bank statement used for bank reconciliation", select=1), 'reconcile_id': fields.many2one('account.move.reconcile', 'Reconcile', readonly=True, ondelete='set null', select=2), 'reconcile_partial_id': fields.many2one('account.move.reconcile', 'Partial Reconcile', readonly=True, ondelete='set null', select=2), - 'amount_currency': fields.float('Amount Currency', help="The amount expressed in an optional other currency if it is a multi-currency entry.", digits=(16,int(tools.config['price_accuracy']))), + 'amount_currency': fields.float('Amount Currency', help="The amount expressed in an optional other currency if it is a multi-currency entry.", digits_compute=dp.get_precision('Account')), 'currency_id': fields.many2one('res.currency', 'Currency', help="The optional other currency if it is a multi-currency entry."), 'period_id': fields.many2one('account.period', 'Period', required=True, select=2), @@ -426,14 +426,14 @@ class account_move_line(osv.osv): 'state': fields.selection([('draft','Draft'), ('valid','Valid')], 'State', readonly=True, help='When new move line is created the state will be \'Draft\'.\n* When all the payments are done it will be in \'Valid\' state.'), 'tax_code_id': fields.many2one('account.tax.code', 'Tax Account', help="The Account can either be a base tax code or a tax code account."), - 'tax_amount': fields.float('Tax/Base Amount', digits=(16,int(tools.config['price_accuracy'])), select=True, help="If the Tax account is a tax code account, this field will contain the taxed amount.If the tax account is base tax code, "\ + 'tax_amount': fields.float('Tax/Base Amount', digits_compute=dp.get_precision('Account'), select=True, help="If the Tax account is a tax code account, this field will contain the taxed amount.If the tax account is base tax code, "\ "this field will contain the basic amount(without tax)."), 'invoice': fields.function(_invoice, method=True, string='Invoice', type='many2one', relation='account.invoice', fnct_search=_invoice_search), 'account_tax_id':fields.many2one('account.tax', 'Tax'), 'analytic_account_id' : fields.many2one('account.analytic.account', 'Analytic Account'), #TODO: remove this - 'amount_taxed':fields.float("Taxed Amount",digits=(16,int(tools.config['price_accuracy']))), + 'amount_taxed':fields.float("Taxed Amount",digits_compute=dp.get_precision('Account')), 'company_id': fields.related('account_id','company_id',type='many2one',relation='res.company',string='Company',store=True) } diff --git a/addons/account/invoice.py b/addons/account/invoice.py index 8b31f99e0c6..47561e57aaf 100644 --- a/addons/account/invoice.py +++ b/addons/account/invoice.py @@ -20,6 +20,8 @@ ############################################################################## import time +import decimal_precision as dp + import netsvc from osv import fields, osv import ir @@ -262,21 +264,21 @@ class account_invoice(osv.osv): 'tax_line': fields.one2many('account.invoice.tax', 'invoice_id', 'Tax Lines', readonly=True, states={'draft':[('readonly',False)]}), 'move_id': fields.many2one('account.move', 'Invoice Movement', readonly=True, help="Links to the automatically generated Ledger Postings."), - 'amount_untaxed': fields.function(_amount_all, method=True, digits=(16, int(config['price_accuracy'])),string='Untaxed', + 'amount_untaxed': fields.function(_amount_all, method=True, digits_compute=dp.get_precision('Account'),string='Untaxed', store={ 'account.invoice': (lambda self, cr, uid, ids, c={}: ids, ['invoice_line'], 20), 'account.invoice.tax': (_get_invoice_tax, None, 20), 'account.invoice.line': (_get_invoice_line, ['price_unit','invoice_line_tax_id','quantity','discount'], 20), }, multi='all'), - 'amount_tax': fields.function(_amount_all, method=True, digits=(16, int(config['price_accuracy'])), string='Tax', + 'amount_tax': fields.function(_amount_all, method=True, digits_compute=dp.get_precision('Account'), string='Tax', store={ 'account.invoice': (lambda self, cr, uid, ids, c={}: ids, ['invoice_line'], 20), 'account.invoice.tax': (_get_invoice_tax, None, 20), 'account.invoice.line': (_get_invoice_line, ['price_unit','invoice_line_tax_id','quantity','discount'], 20), }, multi='all'), - 'amount_total': fields.function(_amount_all, method=True, digits=(16, int(config['price_accuracy'])), string='Total', + 'amount_total': fields.function(_amount_all, method=True, digits_compute=dp.get_precision('Account'), string='Total', store={ 'account.invoice': (lambda self, cr, uid, ids, c={}: ids, ['invoice_line'], 20), 'account.invoice.tax': (_get_invoice_tax, None, 20), @@ -286,7 +288,7 @@ class account_invoice(osv.osv): 'currency_id': fields.many2one('res.currency', 'Currency', required=True, readonly=True, states={'draft':[('readonly',False)]}), 'journal_id': fields.many2one('account.journal', 'Journal', required=True,readonly=True, states={'draft':[('readonly',False)]}), 'company_id': fields.many2one('res.company', 'Company', required=True, change_default=True), - 'check_total': fields.float('Total', digits=(16, int(config['price_accuracy'])), states={'open':[('readonly',True)],'close':[('readonly',True)]}), + 'check_total': fields.float('Total', digits_compute=dp.get_precision('Account'), states={'open':[('readonly',True)],'close':[('readonly',True)]}), 'reconciled': fields.function(_reconciled, method=True, string='Paid/Reconciled', type='boolean', store={ 'account.invoice': (lambda self, cr, uid, ids, c={}: ids, None, 50), # Check if we can remove ? @@ -296,7 +298,7 @@ class account_invoice(osv.osv): 'partner_bank': fields.many2one('res.partner.bank', 'Bank Account', help='The bank account to pay to or to be paid from'), 'move_lines':fields.function(_get_lines , method=True,type='many2many' , relation='account.move.line',string='Entry Lines'), - 'residual': fields.function(_amount_residual, method=True, digits=(16, int(config['price_accuracy'])),string='Residual', + 'residual': fields.function(_amount_residual, method=True, digits_compute=dp.get_precision('Account'),string='Residual', store={ 'account.invoice': (lambda self, cr, uid, ids, c={}: ids, ['invoice_line'], 50), 'account.invoice.tax': (_get_invoice_tax, None, 50), @@ -1076,7 +1078,7 @@ class account_invoice(osv.osv): if l.account_id.id==src_account_id: line_ids.append(l.id) total += (l.debit or 0.0) - (l.credit or 0.0) - if (not round(total,int(config['price_accuracy']))) or writeoff_acc_id: + if (not round(total,self.pool.get('decimal.precision').precision_get(cr, uid, 'Account'))) or writeoff_acc_id: self.pool.get('account.move.line').reconcile(cr, uid, line_ids, 'manual', writeoff_acc_id, writeoff_period_id, writeoff_journal_id, context) else: self.pool.get('account.move.line').reconcile_partial(cr, uid, line_ids, 'manual', context) @@ -1096,7 +1098,7 @@ class account_invoice_line(osv.osv): cur = line.invoice_id.currency_id res[line.id] = cur_obj.round(cr, uid, cur, res[line.id]) else: - res[line.id] = round(line.price_unit * line.quantity * (1-(line.discount or 0.0)/100.0),int(config['price_accuracy'])) + res[line.id] = round(line.price_unit * line.quantity * (1-(line.discount or 0.0)/100.0),self.pool.get('decimal.precision').precision_get(cr, uid, 'Account')) return res @@ -1127,10 +1129,10 @@ class account_invoice_line(osv.osv): 'uos_id': fields.many2one('product.uom', 'Unit of Measure', ondelete='set null'), 'product_id': fields.many2one('product.product', 'Product', ondelete='set null'), 'account_id': fields.many2one('account.account', 'Account', required=True, domain=[('type','<>','view'), ('type', '<>', 'closed')], help="The income or expense account related to the selected product."), - 'price_unit': fields.float('Unit Price', required=True, digits=(16, int(config['price_accuracy']))), - 'price_subtotal': fields.function(_amount_line, method=True, string='Subtotal',store=True, type="float", digits=(16, int(config['price_accuracy']))), + 'price_unit': fields.float('Unit Price', required=True, digits_compute= dp.get_precision('Account')), + 'price_subtotal': fields.function(_amount_line, method=True, string='Subtotal',store=True, type="float", digits_compute= dp.get_precision('Account')), 'quantity': fields.float('Quantity', required=True), - 'discount': fields.float('Discount (%)', digits=(16, int(config['price_accuracy']))), + 'discount': fields.float('Discount (%)', digits_compute= dp.get_precision('Account')), 'invoice_line_tax_id': fields.many2many('account.tax', 'account_invoice_line_tax', 'invoice_line_id', 'tax_id', 'Taxes', domain=[('parent_id','=',False)]), 'note': fields.text('Notes', translate=True), 'account_analytic_id': fields.many2one('account.analytic.account', 'Analytic Account'), @@ -1355,15 +1357,15 @@ class account_invoice_tax(osv.osv): 'invoice_id': fields.many2one('account.invoice', 'Invoice Line', ondelete='cascade', select=True), 'name': fields.char('Tax Description', size=64, required=True), 'account_id': fields.many2one('account.account', 'Tax Account', required=True, domain=[('type','<>','view'),('type','<>','income'), ('type', '<>', 'closed')]), - 'base': fields.float('Base', digits=(16,int(config['price_accuracy']))), - 'amount': fields.float('Amount', digits=(16,int(config['price_accuracy']))), + 'base': fields.float('Base', digits_compute=dp.get_precision('Account')), + 'amount': fields.float('Amount', digits_compute=dp.get_precision('Account')), 'manual': fields.boolean('Manual'), 'sequence': fields.integer('Sequence', help="Gives the sequence order when displaying a list of invoice tax."), 'base_code_id': fields.many2one('account.tax.code', 'Base Code', help="The account basis of the tax declaration."), - 'base_amount': fields.float('Base Code Amount', digits=(16,int(config['price_accuracy']))), + 'base_amount': fields.float('Base Code Amount', digits_compute=dp.get_precision('Account')), 'tax_code_id': fields.many2one('account.tax.code', 'Tax Code', help="The tax basis of the tax declaration."), - 'tax_amount': fields.float('Tax Code Amount', digits=(16,int(config['price_accuracy']))), + 'tax_amount': fields.float('Tax Code Amount', digits_compute=dp.get_precision('Account')), 'company_id': fields.related('account_id','company_id',type='many2one',relation='res.company',string='Company',store=True), } diff --git a/addons/account/wizard/wizard_pay_invoice.py b/addons/account/wizard/wizard_pay_invoice.py index b8ec568f0f8..f534a72a77f 100644 --- a/addons/account/wizard/wizard_pay_invoice.py +++ b/addons/account/wizard/wizard_pay_invoice.py @@ -25,6 +25,8 @@ import pooler import time from tools.translate import _ import tools +import decimal_precision as dp + pay_form = '''
''' pay_fields = { - 'amount': {'string': 'Amount paid', 'type':'float', 'required':True, 'digits': (16,int(tools.config['price_accuracy']))}, + 'amount': {'string': 'Amount paid', 'type':'float', 'required':True, 'digits': (16,dp.get_precision('Account'))}, 'name': {'string': 'Entry Name', 'type':'char', 'size': 64, 'required':True}, 'date': {'string': 'Payment date', 'type':'date', 'required':True, 'default':lambda *args: time.strftime('%Y-%m-%d')}, 'journal_id': {'string': 'Journal/Payment Mode', 'type': 'many2one', 'relation':'account.journal', 'required':True, 'domain':[('type','=','cash')]}, diff --git a/addons/account_tax_include/invoice_tax_incl.py b/addons/account_tax_include/invoice_tax_incl.py index 94e2871da84..31f3d8a233a 100644 --- a/addons/account_tax_include/invoice_tax_incl.py +++ b/addons/account_tax_include/invoice_tax_incl.py @@ -24,6 +24,7 @@ import netsvc from osv import fields, osv import ir from tools import config +import decimal_precision as dp class account_invoice(osv.osv): _inherit = "account.invoice" @@ -84,7 +85,7 @@ class account_invoice_line(osv.osv): else: res[line.id]['price_subtotal'] = cur and cur_obj.round(cr, uid, cur, res_init[line.id]) or res_init[line.id] for tax in tax_obj.compute_inv(cr, uid, product_taxes, res_init[line.id]/line.quantity, line.quantity): - res[line.id]['price_subtotal'] = res[line.id]['price_subtotal'] - round(tax['amount'], int(config['price_accuracy'])) + res[line.id]['price_subtotal'] = res[line.id]['price_subtotal'] - round(tax['amount'], self.pool.get('decimal.precision').precision_get(cr, uid, 'Account')) else: res[line.id]['price_subtotal'] = cur and cur_obj.round(cr, uid, cur, res_init[line.id]) or res_init[line.id] @@ -99,8 +100,8 @@ class account_invoice_line(osv.osv): res[line.id]['price_subtotal'] = res[line.id]['price_subtotal'] - tax['amount'] res[line.id]['data'].append( tax) - res[line.id]['price_subtotal']= round(res[line.id]['price_subtotal'], int(config['price_accuracy'])) - res[line.id]['price_subtotal_incl']= round(res[line.id]['price_subtotal_incl'], int(config['price_accuracy'])) + res[line.id]['price_subtotal']= round(res[line.id]['price_subtotal'], self.pool.get('decimal.precision').precision_get(cr, uid, 'Account')) + res[line.id]['price_subtotal_incl']= round(res[line.id]['price_subtotal_incl'], self.pool.get('decimal.precision').precision_get(cr, uid, 'Account')) return res def _price_unit_default(self, cr, uid, context=None): diff --git a/addons/decimal_precision/decimal_precision.py b/addons/decimal_precision/decimal_precision.py index 54bb501e02c..463dbf67cee 100644 --- a/addons/decimal_precision/decimal_precision.py +++ b/addons/decimal_precision/decimal_precision.py @@ -30,6 +30,11 @@ class decimal_precision(osv.osv): _defaults = { 'digits': lambda *a : 2, } + def precision_get(self, cr, uid, application): + cr.execute('select digits from decimal_precision where name=%s', (application,)) + res = cr.fetchone() + return res and res[0] or 2 + def write(self, cr, uid, ids, data, *args, **argv): res = super(decimal_precision, self).write(cr, uid, ids, data, *args, **argv) for obj in self.pool.obj_list(): @@ -43,7 +48,5 @@ def get_precision(application): def change_digit(cr): cr.execute('select digits from decimal_precision where name=%s', (application,)) res = cr.fetchone() - if res: - return (16,res[0]) - return (16,2) + return (16,res and res[0] or 2) return change_digit diff --git a/addons/delivery/stock.py b/addons/delivery/stock.py index 901e2670f76..29a3003ff52 100644 --- a/addons/delivery/stock.py +++ b/addons/delivery/stock.py @@ -24,6 +24,8 @@ from osv import fields,osv from tools.translate import _ import tools +import decimal_precision as dp + # Overloaded stock_picking to manage carriers : class stock_picking(osv.osv): _name = "stock.picking" @@ -54,7 +56,7 @@ class stock_picking(osv.osv): _columns = { 'carrier_id':fields.many2one("delivery.carrier","Carrier"), 'volume': fields.float('Volume'), - 'weight': fields.function(_cal_weight, method=True, type='float', string='Weight',digits=(16, int(tools.config['price_accuracy'])), + 'weight': fields.function(_cal_weight, method=True, type='float', string='Weight',digits_compute= dp.get_precision('Stock Weight'), store={ 'stock.picking': (lambda self, cr, uid, ids, c={}: ids, ['move_lines'], 20), 'stock.move': (_get_picking_line, ['product_id','product_uos_qty'], 20), diff --git a/addons/membership/membership.py b/addons/membership/membership.py index a364c0caedc..8c15c652335 100644 --- a/addons/membership/membership.py +++ b/addons/membership/membership.py @@ -23,6 +23,9 @@ from osv import fields, osv from tools import config import time +import decimal_precision as dp + + STATE = [ ('none', 'Non Member'), ('canceled', 'Canceled Member'), @@ -415,7 +418,7 @@ Partner() class product_template(osv.osv): _inherit = 'product.template' _columns = { - 'member_price':fields.float('Member Price', digits=(16, int(config['price_accuracy']))), + 'member_price':fields.float('Member Price', digits_compute= dp.get_precision('Sale Price')), } product_template() @@ -753,4 +756,4 @@ class account_invoice_line(osv.osv): return result account_invoice_line() -# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: \ No newline at end of file +# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/addons/mrp_repair/mrp_repair.py b/addons/mrp_repair/mrp_repair.py index 7ae054c3a16..fc91fe1f9e6 100644 --- a/addons/mrp_repair/mrp_repair.py +++ b/addons/mrp_repair/mrp_repair.py @@ -26,6 +26,7 @@ import mx.DateTime from mx.DateTime import RelativeDateTime, today, DateTime, localtime from tools import config from tools.translate import _ +import decimal_precision as dp class mrp_repair(osv.osv): _name = 'mrp.repair' @@ -500,8 +501,8 @@ class mrp_repair_line(osv.osv, ProductChangeMixin): 'to_invoice': fields.boolean('To Invoice'), 'product_id': fields.many2one('product.product', 'Product', domain=[('sale_ok','=',True)], required=True), 'invoiced': fields.boolean('Invoiced',readonly=True), - 'price_unit': fields.float('Unit Price', required=True, digits=(16, int(config['price_accuracy']))), - 'price_subtotal': fields.function(_amount_line, method=True, string='Subtotal',digits=(16, int(config['price_accuracy']))), + 'price_unit': fields.float('Unit Price', required=True, digits_compute= dp.get_precision('Sale Price')), + 'price_subtotal': fields.function(_amount_line, method=True, string='Subtotal',digits_compute= dp.get_precision('Sale Price')), 'tax_id': fields.many2many('account.tax', 'repair_operation_line_tax', 'repair_operation_line_id', 'tax_id', 'Taxes'), 'product_uom_qty': fields.float('Quantity (UoM)', digits=(16,2), required=True), 'product_uom': fields.many2one('product.uom', 'Product UoM', required=True), @@ -575,7 +576,7 @@ class mrp_repair_fee(osv.osv, ProductChangeMixin): 'product_uom_qty': fields.float('Quantity', digits=(16,2), required=True), 'price_unit': fields.float('Unit Price', required=True), 'product_uom': fields.many2one('product.uom', 'Product UoM', required=True), - 'price_subtotal': fields.function(_amount_line, method=True, string='Subtotal',digits=(16, int(config['price_accuracy']))), + 'price_subtotal': fields.function(_amount_line, method=True, string='Subtotal',digits_compute= dp.get_precision('Sale Price')), 'tax_id': fields.many2many('account.tax', 'repair_fee_line_tax', 'repair_fee_line_id', 'tax_id', 'Taxes'), 'invoice_line_id': fields.many2one('account.invoice.line', 'Invoice Line', readonly=True), 'to_invoice': fields.boolean('To Invoice'), diff --git a/addons/product/pricelist.py b/addons/product/pricelist.py index b2f4194e370..001bee74055 100644 --- a/addons/product/pricelist.py +++ b/addons/product/pricelist.py @@ -27,6 +27,8 @@ import time from tools import config from tools.misc import ustr from tools.translate import _ +import decimal_precision as dp + class price_type(osv.osv): """ @@ -369,18 +371,18 @@ class product_pricelist_item(osv.osv): 'base_pricelist_id': fields.many2one('product.pricelist', 'If Other Pricelist'), 'price_surcharge': fields.float('Price Surcharge', - digits=(16, int(config['price_accuracy']))), + digits_compute= dp.get_precision('Sale Price')), 'price_discount': fields.float('Price Discount', digits=(16,4)), 'price_round': fields.float('Price Rounding', - digits=(16, int(config['price_accuracy'])), + digits_compute= dp.get_precision('Sale Price'), help="Sets the price so that it is a multiple of this value.\n" \ "Rounding is applied after the discount and before the surcharge.\n" \ "To have prices that end in 9.99, set rounding 10, surcharge -0.01" \ ), 'price_min_margin': fields.float('Min. Price Margin', - digits=(16, int(config['price_accuracy']))), + digits_compute= dp.get_precision('Sale Price')), 'price_max_margin': fields.float('Max. Price Margin', - digits=(16, int(config['price_accuracy']))), + digits_compute= dp.get_precision('Sale Price')), 'company_id': fields.related('price_version_id','company_id',type='many2one', readonly=True, relation='res.company', string='Company', store=True) } diff --git a/addons/product/product_data.xml b/addons/product/product_data.xml index 77ee4adb499..4ed27c81d1d 100644 --- a/addons/product/product_data.xml +++ b/addons/product/product_data.xml @@ -124,6 +124,10 @@ parameter) will see those record just disappear.