Linkage report
This commit is contained in:
@@ -6584,6 +6584,111 @@ class PurchaseTradeTestCase(ModuleTestCase):
|
||||
self.assertIn('80.000 USD/MT', lotqt.report_linkage_pricing_input_prices)
|
||||
self.assertIn('100.000 USD/MT', lotqt.report_linkage_pricing_input_prices)
|
||||
|
||||
def test_lot_report_linkage_rejects_non_physical_lines(self):
|
||||
'lot.report linkage report is only available for physical lines'
|
||||
linkage_report = Pool().get('lot.report.linkage', type='report')
|
||||
lot_report_model = Mock()
|
||||
lot_report_model.browse.return_value = [
|
||||
SimpleNamespace(
|
||||
id=10000001,
|
||||
rec_name='Open quantity',
|
||||
r_lot_type='virtual',
|
||||
r_lot_p=None,
|
||||
r_lot_s=None,
|
||||
)
|
||||
]
|
||||
|
||||
with patch('trytond.modules.purchase_trade.stock.Pool') as PoolMock:
|
||||
PoolMock.return_value.get.return_value = lot_report_model
|
||||
|
||||
with self.assertRaises(UserError):
|
||||
linkage_report._get_records([10000001], 'lot.report', {})
|
||||
|
||||
def test_lot_report_linkage_helpers_use_physical_lot(self):
|
||||
'lot.report linkage report exposes data from the selected physical lot'
|
||||
currency = SimpleNamespace(code='USD')
|
||||
unit = SimpleNamespace(symbol='MT')
|
||||
product = SimpleNamespace(
|
||||
rec_name='Sulphuric Acid',
|
||||
name='Sulphuric Acid',
|
||||
code='H2SO4')
|
||||
purchase = SimpleNamespace(
|
||||
id=1,
|
||||
number='P-10',
|
||||
reference='26.0001',
|
||||
currency=currency,
|
||||
party=SimpleNamespace(rec_name='SUPPLIER SA'),
|
||||
company=SimpleNamespace(party=SimpleNamespace(rec_name='TRADING SA')),
|
||||
to_location=SimpleNamespace(rec_name='Odda'),
|
||||
incoterm=SimpleNamespace(code='FOB'),
|
||||
operator=SimpleNamespace(rec_name='Operator A'))
|
||||
sale = SimpleNamespace(
|
||||
id=2,
|
||||
number='S-20',
|
||||
reference='26.0001',
|
||||
currency=currency,
|
||||
party=SimpleNamespace(rec_name='CLIENT SA'),
|
||||
to_location=SimpleNamespace(rec_name='Mejillones'),
|
||||
incoterm=SimpleNamespace(code='CFR'))
|
||||
period = SimpleNamespace(rec_name='Chile FY26')
|
||||
purchase_line = SimpleNamespace(
|
||||
id=11,
|
||||
product=product,
|
||||
purchase=purchase,
|
||||
quantity_theorical=Decimal('100'),
|
||||
quantity=Decimal('100'),
|
||||
unit_price=Decimal('80'),
|
||||
unit=unit,
|
||||
price_type='fixed',
|
||||
del_period=period,
|
||||
period_at='laycan',
|
||||
from_del=datetime.date(2026, 4, 30),
|
||||
to_del=datetime.date(2026, 5, 8),
|
||||
fees=[],
|
||||
mtm=[])
|
||||
sale_line = SimpleNamespace(
|
||||
id=12,
|
||||
product=product,
|
||||
sale=sale,
|
||||
quantity_theorical=Decimal('100'),
|
||||
quantity=Decimal('100'),
|
||||
unit_price=Decimal('100'),
|
||||
unit=unit,
|
||||
price_type='fixed',
|
||||
del_period=period,
|
||||
period_at='laycan',
|
||||
from_del=datetime.date(2026, 4, 30),
|
||||
to_del=datetime.date(2026, 4, 30),
|
||||
fees=[],
|
||||
mtm=[])
|
||||
physical_lot = SimpleNamespace(
|
||||
id=101,
|
||||
rec_name='LOT-101',
|
||||
line=purchase_line,
|
||||
sale_line=sale_line,
|
||||
lot_shipment_in=SimpleNamespace(
|
||||
bl_date=datetime.date(2026, 4, 30),
|
||||
fees=[]),
|
||||
move=None)
|
||||
lot_report = SimpleNamespace(
|
||||
id=101,
|
||||
rec_name='Physical lot',
|
||||
r_lot_type='physic',
|
||||
r_lot_p=physical_lot,
|
||||
r_lot_s=None)
|
||||
record = stock_module.LotReportLinkageRecord(
|
||||
physical_lot, lot_report)
|
||||
|
||||
self.assertEqual(
|
||||
record.report_linkage_title, 'Linkage P-10/S-20 26.0001')
|
||||
self.assertEqual(record.report_linkage_bl_date, 'Thursday, April 30, 2026')
|
||||
self.assertIn('Purchases', record.report_linkage_summary_groups)
|
||||
self.assertIn('Sales', record.report_linkage_summary_groups)
|
||||
self.assertIn('P-10', record.report_linkage_movement_references)
|
||||
self.assertIn('S-20', record.report_linkage_movement_references)
|
||||
self.assertIn('80.000 USD/MT', record.report_linkage_pricing_input_prices)
|
||||
self.assertIn('100.000 USD/MT', record.report_linkage_pricing_input_prices)
|
||||
|
||||
def test_shipment_insurance_contact_surveyor_prefers_shipment_surveyor(self):
|
||||
'insurance contact surveyor property uses shipment surveyor first'
|
||||
ShipmentIn = Pool().get('stock.shipment.in')
|
||||
|
||||
Reference in New Issue
Block a user