Valuation fee

This commit is contained in:
2026-06-12 19:39:16 +02:00
parent dbfd6a0d89
commit 7107625664
6 changed files with 101 additions and 20 deletions

View File

@@ -1218,6 +1218,8 @@ class PurchaseTradeTestCase(ModuleTestCase):
currency=currency,
shipment_in=None,
sale_line=None,
shipment_out=None,
shipment_internal=None,
unit=unit,
)
fee.get_amount.return_value = None
@@ -1228,6 +1230,44 @@ class PurchaseTradeTestCase(ModuleTestCase):
purchase=Mock(id=7, currency=currency),
unit=unit,
)
fee.line = line
fee_lots = Mock()
fee_lots.search.return_value = [Mock(fee=fee)]
with patch('trytond.modules.purchase_trade.valuation.Pool') as PoolMock:
PoolMock.return_value.get.side_effect = lambda name: {
'ir.date': Mock(today=Mock(return_value=datetime.date(2026, 4, 23))),
'currency.currency': Mock(),
'fee.lots': fee_lots,
'lot.qt': Mock(),
}[name]
values = Valuation.create_pnl_fee_from_line(line)
self.assertEqual(values[0]['amount'], Decimal('0'))
self.assertEqual(values[0]['fee'], fee.id)
def test_create_pnl_fee_from_line_ignores_orphan_fee_lot(self):
'purchase fee valuation ignores fees without business attachment'
Valuation = Pool().get('valuation.valuation')
currency = Mock(id=1)
unit = Mock(id=2)
lot = Mock(id=5, sale_line=None, lot_type='virtual')
lot.get_current_quantity_converted.return_value = Decimal('10')
fee = Mock(
line=None,
sale_line=None,
shipment_in=None,
shipment_out=None,
shipment_internal=None,
)
line = Mock(
id=6,
lots=[lot],
get_matched_lines=Mock(return_value=[]),
purchase=Mock(id=7, currency=currency),
unit=unit,
)
fee_lots = Mock()
fee_lots.search.return_value = [Mock(fee=fee)]
@@ -1241,8 +1281,7 @@ class PurchaseTradeTestCase(ModuleTestCase):
values = Valuation.create_pnl_fee_from_line(line)
self.assertEqual(values[0]['amount'], Decimal('0'))
self.assertEqual(values[0]['fee'], fee.id)
self.assertEqual(values, [])
def test_fee_quantity_sync_uses_physical_lots_when_present(self):
'fee quantity sync ignores virtual lot once physical lots exist'
@@ -1356,6 +1395,8 @@ class PurchaseTradeTestCase(ModuleTestCase):
currency=currency,
shipment_in=None,
sale_line=None,
shipment_out=None,
shipment_internal=None,
unit=unit,
)
fee.is_effective_fee_lot.side_effect = lambda lot: lot is physical
@@ -1367,6 +1408,7 @@ class PurchaseTradeTestCase(ModuleTestCase):
purchase=Mock(id=8, currency=currency),
unit=unit,
)
fee.line = line
fee_lots = Mock()
fee_lots.search.return_value = [Mock(fee=fee)]
@@ -1670,6 +1712,8 @@ class PurchaseTradeTestCase(ModuleTestCase):
currency=currency,
shipment_in=None,
sale_line=None,
shipment_out=None,
shipment_internal=None,
unit=unit,
)
line = Mock(
@@ -1680,6 +1724,7 @@ class PurchaseTradeTestCase(ModuleTestCase):
purchase=Mock(id=10, currency=currency),
unit=unit,
)
fee.line = line
lot_qt_model = Mock()
lot_qt_model.search.return_value = [
Mock(
@@ -1774,6 +1819,9 @@ class PurchaseTradeTestCase(ModuleTestCase):
currency=currency,
shipment_in=None,
sale_line=sale_line,
line=None,
shipment_out=None,
shipment_internal=None,
unit=unit,
)
fee.is_effective_fee_lot.return_value = True