[FIX] Account : Rounding problem based on price_accuracy
lp bug: https://launchpad.net/bugs/407332 fixed bzr revid: jvo@tinyerp.com-20090918140022-demflhtd2gs6r19r
This commit is contained in:
parent
294d923ac2
commit
758b7ed285
|
@ -30,6 +30,7 @@ import pooler
|
|||
import mx.DateTime
|
||||
from mx.DateTime import RelativeDateTime, now, DateTime, localtime
|
||||
|
||||
from tools import config
|
||||
|
||||
class account_payment_term(osv.osv):
|
||||
_name = "account.payment.term"
|
||||
|
@ -53,11 +54,11 @@ class account_payment_term(osv.osv):
|
|||
result = []
|
||||
for line in pt.line_ids:
|
||||
if line.value == 'fixed':
|
||||
amt = round(line.value_amount, 2)
|
||||
amt = round(line.value_amount, int(config['price_accuracy']))
|
||||
elif line.value == 'procent':
|
||||
amt = round(value * line.value_amount, 2)
|
||||
amt = round(value * line.value_amount, int(config['price_accuracy']))
|
||||
elif line.value == 'balance':
|
||||
amt = round(amount, 2)
|
||||
amt = round(amount, int(config['price_accuracy']))
|
||||
if amt:
|
||||
next_date = mx.DateTime.strptime(date_ref, '%Y-%m-%d') + RelativeDateTime(days=line.days)
|
||||
if line.days2 < 0:
|
||||
|
@ -267,9 +268,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, 2), method=True, string='Balance', multi='balance'),
|
||||
'credit': fields.function(__compute, digits=(16, 2), method=True, string='Credit', multi='balance'),
|
||||
'debit': fields.function(__compute, digits=(16, 2), method=True, string='Debit', multi='balance'),
|
||||
'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'),
|
||||
'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',
|
||||
|
@ -743,7 +744,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,2)),
|
||||
'amount': fields.function(_amount_compute, method=True, string='Amount', digits=(16,int(config['price_accuracy']))),
|
||||
'date': fields.date('Date', required=True),
|
||||
'type': fields.selection([
|
||||
('pay_voucher','Cash Payment'),
|
||||
|
@ -1109,7 +1110,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), 2)
|
||||
res[record.id] = round(_rec_get(record), int(config['price_accuracy']))
|
||||
return res
|
||||
|
||||
def _sum_year(self, cr, uid, ids, name, args, context):
|
||||
|
@ -1380,9 +1381,9 @@ class account_tax(osv.osv):
|
|||
total = 0.0
|
||||
for r in res:
|
||||
if r.get('balance',False):
|
||||
r['amount'] = round(r['balance'] * quantity, 2) - total
|
||||
r['amount'] = round(r['balance'] * quantity, int(config['price_accuracy'])) - total
|
||||
else:
|
||||
r['amount'] = round(r['amount'] * quantity, 2)
|
||||
r['amount'] = round(r['amount'] * quantity, int(config['price_accuracy']))
|
||||
total += r['amount']
|
||||
|
||||
return res
|
||||
|
@ -1477,9 +1478,9 @@ class account_tax(osv.osv):
|
|||
total = 0.0
|
||||
for r in res:
|
||||
if r.get('balance',False):
|
||||
r['amount'] = round(r['balance'] * quantity, 2) - total
|
||||
r['amount'] = round(r['balance'] * quantity, int(config['price_accuracy'])) - total
|
||||
else:
|
||||
r['amount'] = round(r['amount'] * quantity, 2)
|
||||
r['amount'] = round(r['amount'] * quantity, int(config['price_accuracy']))
|
||||
total += r['amount']
|
||||
return res
|
||||
account_tax()
|
||||
|
@ -1545,9 +1546,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,2), help="The optional quantity on entries"),
|
||||
'debit': fields.float('Debit', digits=(16,2)),
|
||||
'credit': fields.float('Credit', digits=(16,2)),
|
||||
'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']))),
|
||||
|
||||
'account_id': fields.many2one('account.account', 'Account', required=True, ondelete="cascade"),
|
||||
|
||||
|
|
|
@ -233,21 +233,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="Link to the automatically generated account moves."),
|
||||
'amount_untaxed': fields.function(_amount_all, method=True, digits=(16,2),string='Untaxed',
|
||||
'amount_untaxed': fields.function(_amount_all, method=True, digits=(16, int(config['price_accuracy'])),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,2), string='Tax',
|
||||
'amount_tax': fields.function(_amount_all, method=True, digits=(16, int(config['price_accuracy'])), 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,2), string='Total',
|
||||
'amount_total': fields.function(_amount_all, method=True, digits=(16, int(config['price_accuracy'])), string='Total',
|
||||
store={
|
||||
'account.invoice': (lambda self, cr, uid, ids, c={}: ids, ['invoice_line'], 20),
|
||||
'account.invoice.tax': (_get_invoice_tax, None, 20),
|
||||
|
@ -257,7 +257,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),
|
||||
'check_total': fields.float('Total', digits=(16,2), states={'open':[('readonly',True)],'close':[('readonly',True)]}),
|
||||
'check_total': fields.float('Total', digits=(16, int(config['price_accuracy'])), 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 ?
|
||||
|
@ -267,7 +267,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='Move Lines'),
|
||||
'residual': fields.function(_amount_residual, method=True, digits=(16,2),string='Residual',
|
||||
'residual': fields.function(_amount_residual, method=True, digits=(16, int(config['price_accuracy'])),string='Residual',
|
||||
store={
|
||||
'account.invoice': (lambda self, cr, uid, ids, c={}: ids, ['invoice_line'], 50),
|
||||
'account.invoice.tax': (_get_invoice_tax, None, 50),
|
||||
|
@ -916,7 +916,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),2)
|
||||
res[line.id] = round(line.price_unit * line.quantity * (1-(line.discount or 0.0)/100.0),int(config['price_accuracy']))
|
||||
return res
|
||||
|
||||
|
||||
|
@ -948,9 +948,9 @@ class account_invoice_line(osv.osv):
|
|||
'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),
|
||||
'price_subtotal': fields.function(_amount_line, method=True, string='Subtotal',store=True, type="float", digits=(16, int(config['price_accuracy']))),
|
||||
'quantity': fields.float('Quantity', required=True),
|
||||
'discount': fields.float('Discount (%)', digits=(16,2)),
|
||||
'discount': fields.float('Discount (%)', digits=(16, int(config['price_accuracy']))),
|
||||
'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'),
|
||||
'account_analytic_id': fields.many2one('account.analytic.account', 'Analytic Account'),
|
||||
|
@ -1100,15 +1100,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,2)),
|
||||
'amount': fields.float('Amount', digits=(16,2)),
|
||||
'base': fields.float('Base', digits=(16,int(config['price_accuracy']))),
|
||||
'amount': fields.float('Amount', digits=(16,int(config['price_accuracy']))),
|
||||
'manual': fields.boolean('Manual'),
|
||||
'sequence': fields.integer('Sequence'),
|
||||
|
||||
'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,2)),
|
||||
'base_amount': fields.float('Base Code Amount', digits=(16,int(config['price_accuracy']))),
|
||||
'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,2)),
|
||||
'tax_amount': fields.float('Tax Code Amount', digits=(16,int(config['price_accuracy']))),
|
||||
}
|
||||
def base_change(self, cr, uid, ids, base,currency_id=False,company_id=False,date_invoice=False):
|
||||
cur_obj = self.pool.get('res.currency')
|
||||
|
|
Loading…
Reference in New Issue