Pnl bug sh fee

This commit is contained in:
2026-06-19 12:39:58 +02:00
parent 4f331d5c8e
commit dfbc006efb
2 changed files with 42 additions and 1 deletions

View File

@@ -2206,6 +2206,34 @@ class PurchaseTradeTestCase(ModuleTestCase):
self.assertEqual(values[1]['quantity'], Decimal('132.00000'))
self.assertEqual(values[1]['amount'], Decimal('-1320.00'))
def test_shipment_fee_pnl_sums_all_shipment_lotqt(self):
'shipment fee pnl sums every lot.qt linked to the shipment'
Valuation = Pool().get('valuation.valuation')
shipment = Mock(id=70)
unit = Mock(id=2)
lot = Mock(id=5, lot_type='virtual', sale_line=None)
lot.get_current_quantity_converted.return_value = Decimal('18000')
line = Mock(id=4, unit=unit)
lot_qt_model = Mock()
lot_qt_model.search.return_value = [
Mock(id=1, lot_quantity=Decimal('5000'), lot_unit=unit,
lot_shipment_in=shipment),
Mock(id=2, lot_quantity=Decimal('6000'), lot_unit=unit,
lot_shipment_in=shipment),
Mock(id=3, lot_quantity=Decimal('7000'), lot_unit=unit,
lot_shipment_in=shipment),
]
fee = Mock(shipment_in=shipment)
segments = Valuation._fee_segments_for_fee(
fee, lot, line, lot_qt_model)
self.assertEqual(segments, [{
'quantity': Decimal('18000'),
'share': Decimal('1'),
'shipment_in': shipment.id,
}])
def test_snapshot_identity_prefers_sale_line_over_purchase_line(self):
'valuation snapshot identity ignores purchase line when sale line exists'
Valuation = Pool().get('valuation.valuation')

View File

@@ -1180,7 +1180,20 @@ class ValuationBase(ModelSQL):
segment for segment in segments
if segment.get('shipment_in') == shipment_id]
if selected:
return selected
quantities = [
Decimal(str(segment['quantity']))
for segment in selected
if segment.get('quantity') is not None]
shares = [
Decimal(str(segment['share']))
for segment in selected
if segment.get('share') is not None]
return [{
'quantity': (
sum(quantities, Decimal(0)) if quantities else None),
'share': sum(shares, Decimal(0)) if shares else None,
'shipment_in': shipment_id,
}]
return [{
'quantity': None,
'share': None,