Use digits string for amounts
This commit is contained in:
1 parent
ac875777e7
commit
74a2f47310
2 files changed
+34
-8
No files matched your search
+32
-8
@@ -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):
|
||||
|
||||
@@ -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>
|
||||
|
||||
Reference in new issue
Block a user