Use digits string for amounts

This commit is contained in:
Cédric Krier committed 2008-07-28 18:10:52 +02:00
1 parent ac875777e7
commit 74a2f47310
2 files changed
+34 -8

No files matched your search

+32 -8
View File
@@ -42,16 +42,17 @@ class Purchase(OSV):
domain=[('type', '=', 'warehouse')], required=True, states=_STATES)
currency = fields.Many2One('currency.currency', 'Currency', required=True,
states=_STATES)
currency_digits = fields.Function('get_currency_digits', type='integer',
string='Currency Digits', on_change_with=['currency'])
lines = fields.One2Many('purchase.line', 'purchase', 'Lines',
states=_STATES)
comment = fields.Text('Comment')
#TODO digits must depend of currency
untaxed_amount = fields.Function('get_untaxed_amount', type='numeric',
digits=(16, 2), string='Untaxed')
digits="(16, currency_digits)", string='Untaxed')
tax_amount = fields.Function('get_tax_amount', type='numeric',
digits=(16, 2), string='Tax')
digits="(16, currency_digits)", string='Tax')
total_amount = fields.Function('get_total_amount', type='numeric',
digits=(16, 2), string='Total')
digits="(16, currency_digits)", string='Total')
invoice_method = fields.Selection([
('manual', 'Manual'),
('order', 'From Order'),
@@ -160,6 +161,21 @@ class Purchase(OSV):
res['payment_term'], context=context)[0]
return res
def on_change_with_currency_digits(self, cursor, user, ids, vals,
context=None):
currency_obj = self.pool.get('currency.currency')
if vals.get('currency'):
currency = currency_obj.browse(cursor, user, vals['currency'],
context=context)
return currency.digits
return 2
def get_currency_digits(self, cursor, user, ids, name, arg, context=None):
res = {}
for purchase in self.browse(cursor, user, ids, context=context):
res[purchase.id] = purchase.currency.digits
return res
def get_untaxed_amount(self, cursor, user, ids, name, arg, context=None):
currency_obj = self.pool.get('currency.currency')
res = {}
@@ -457,9 +473,11 @@ class PurchaseLine(OSV):
'required': "type == 'line'",
})
amount = fields.Function('get_amount', type='numeric', string='Amount',
digits="(16, parent.currency_digits)",
states={
'invisible': "type not in ('line', 'subtotal')",
}, on_change_with=['type', 'quantity', 'unit_price'])
}, on_change_with=['type', 'quantity', 'unit_price',
'parent.currency'])
description = fields.Char('Description', size=None, required=True)
comment = fields.Text('Comment',
states={
@@ -589,10 +607,16 @@ class PurchaseLine(OSV):
return res
def on_change_with_amount(self, cursor, user, ids, vals, context=None):
currency_obj = self.pool.get('currency.currency')
if vals.get('type') == 'line':
#TODO add rounding
return Decimal(str(vals.get('quantity') or '0.0')) * \
(vals.get('unit_price') or Decimal('0.0'))
if isinstance(vals.get('parent.currency'), (int, long)):
currency = currency_obj.browse(cursor, user,
vals['parent.currency'], context=context)
else:
currency = vals['parent.currency']
return currency_obj.round(cursor, user, currency,
Decimal(str(vals.get('quantity') or '0.0')) * \
(vals.get('unit_price') or Decimal('0.0')))
return Decimal('0.0')
def get_amount(self, cursor, user, ids, name, arg, context=None):
+2
View File
@@ -99,6 +99,7 @@
<field name="packings" colspan="4" widget="one2many"/>
</page>
</notebook>
<field name="currency_digits" invisible="1"/>
</form>
]]>
</field>
@@ -120,6 +121,7 @@
<field name="invoice_state" select="2"/>
<field name="packing_state" select="2"/>
<field name="description" select="2"/>
<field name="currency_digits" tree_invisible="1"/>
</tree>
]]>
</field>