diff --git a/modules/purchase_trade/valuation.py b/modules/purchase_trade/valuation.py index d41df89..5b68559 100644 --- a/modules/purchase_trade/valuation.py +++ b/modules/purchase_trade/valuation.py @@ -67,6 +67,7 @@ class ValuationBase(ModelSQL): shipment_in = fields.Many2One('stock.shipment.in', "Shipment In") fee = fields.Many2One('fee.fee', "Fee") base_amount = fields.Numeric("Base Amount",digits=(16,2)) + base_currency = fields.Many2One('currency.currency', "Base Cur") rate = fields.Numeric("Rate", digits=(16,6)) @classmethod @@ -136,6 +137,20 @@ class ValuationBase(ModelSQL): return Decimal(str(Uom.compute_qty( lot_unit, float(quantity), line_unit, True, factor, rate))) + @classmethod + def _base_amount_values(cls, amount, currency, company_currency): + Currency = Pool().get('currency.currency') + Date = Pool().get('ir.date') + base_amount = amount + rate = Decimal(1) + if cls._record_id(currency) != cls._record_id(company_currency): + with Transaction().set_context(date=Date.today()): + base_amount = Currency.compute( + currency, amount, company_currency) + if base_amount and amount: + rate = round(amount / base_amount, 6) + return base_amount, rate, cls._record_id(company_currency) + @classmethod def _purchase_lot_segments(cls, line, lot, LotQt): if getattr(lot, 'lot_type', None) == 'physic': @@ -740,6 +755,7 @@ class ValuationBase(ModelSQL): 'quantity': round(qty, 5), 'amount': amount, 'base_amount': base_amount, + 'base_currency': cls._record_id(line.purchase.company.currency), 'rate': rate, 'mtm_price': None, 'mtm': None, #round(amount - (mtm * pc.ratio / 100), 2), @@ -781,6 +797,7 @@ class ValuationBase(ModelSQL): 'quantity': round(qty, 5), 'amount': amount, 'base_amount': base_amount, + 'base_currency': cls._record_id(company_currency), 'rate': rate, 'mtm_price': None, 'mtm': Decimal(0), @@ -946,6 +963,7 @@ class ValuationBase(ModelSQL): 'quantity': round(qty, 5), 'amount': amount, 'base_amount': base_amount, + 'base_currency': cls._record_id(sale_line.sale.company.currency), 'rate': rate, 'mtm_price': None, 'mtm': None, @@ -981,6 +999,7 @@ class ValuationBase(ModelSQL): 'quantity': round(qty, 5), 'amount': amount, 'base_amount': base_amount, + 'base_currency': cls._record_id(company_currency), 'rate': rate, 'mtm_price': None, 'mtm': Decimal(0), @@ -1244,6 +1263,8 @@ class ValuationBase(ModelSQL): with Transaction().set_context(date=Date.today()): price = Currency.compute( sf.currency, price, line.purchase.currency) + base_amount, rate, base_currency = cls._base_amount_values( + amount, sf.currency, line.purchase.company.currency) fee_lines.append({ 'lot': lot.id, 'sale': matched_sale_line.sale.id if matched_sale_line else None, @@ -1265,6 +1286,9 @@ class ValuationBase(ModelSQL): 'state': sf.type, 'quantity': qty, 'amount': amount, + 'base_amount': base_amount, + 'base_currency': base_currency, + 'rate': rate, 'mtm_price': None, 'mtm': None, 'strategy': None, @@ -1309,6 +1333,8 @@ class ValuationBase(ModelSQL): with Transaction().set_context(date=Date.today()): price = Currency.compute( sf.currency, price, sale_line.sale.currency) + base_amount, rate, base_currency = cls._base_amount_values( + amount, sf.currency, sale_line.sale.company.currency) fee_lines.append({ 'lot': lot.id, 'sale': sale_line.sale.id, @@ -1327,6 +1353,9 @@ class ValuationBase(ModelSQL): 'state': sf.type, 'quantity': qty, 'amount': amount, + 'base_amount': base_amount, + 'base_currency': base_currency, + 'rate': rate, 'mtm_price': None, 'mtm': None, 'strategy': None, @@ -1536,6 +1565,7 @@ class ValuationDyn(ModelSQL,ModelView): r_amount = fields.Numeric("Amount",digits='r_unit') r_amount_prev = fields.Numeric("Amount -1", digits='r_unit') r_base_amount = fields.Numeric("Base Amount",digits='r_unit') + r_base_currency = fields.Many2One('currency.currency', "Base Cur") r_rate = fields.Numeric("Rate",digits=(16,6)) r_mtm_price = fields.Numeric("Mtm Price",digits='r_unit') r_mtm_price_prev = fields.Numeric("Mtm Price -1", digits='r_unit') @@ -1574,6 +1604,7 @@ class ValuationDyn(ModelSQL,ModelView): Sum(val.amount).as_('r_amount'), Sum(val.amount_prev).as_('r_amount_prev'), Sum(val.base_amount).as_('r_base_amount'), + Max(val.base_currency).as_('r_base_currency'), Sum(val.rate).as_('r_rate'), Avg(val.mtm_price).as_('r_mtm_price'), Avg(val.mtm_price_prev).as_('r_mtm_price_prev'), @@ -1631,6 +1662,7 @@ class ValuationReport(ValuationBase, ModelView): val.amount.as_('amount'), val.amount_prev.as_('amount_prev'), val.base_amount.as_('base_amount'), + val.base_currency.as_('base_currency'), val.rate.as_('rate'), val.mtm_price.as_('mtm_price'), val.mtm_price_prev.as_('mtm_price_prev'), diff --git a/modules/purchase_trade/view/valuation_list.xml b/modules/purchase_trade/view/valuation_list.xml index a1adffa..1600509 100644 --- a/modules/purchase_trade/view/valuation_list.xml +++ b/modules/purchase_trade/view/valuation_list.xml @@ -16,8 +16,10 @@ sum="1" sum_previous="amount_prev" sum_variation="1"/> + + diff --git a/modules/purchase_trade/view/valuation_tree_sequence3.xml b/modules/purchase_trade/view/valuation_tree_sequence3.xml index c1ddced..3d8bc51 100755 --- a/modules/purchase_trade/view/valuation_tree_sequence3.xml +++ b/modules/purchase_trade/view/valuation_tree_sequence3.xml @@ -17,7 +17,11 @@ this repository contains the full copyright notices and license terms. --> sum="1" sum_previous="amount_prev" sum_variation="1"/> + + + +