New file import format (ARGUS +ICIS)

This commit is contained in:
AzureAD\SylvainDUVERNAY
2026-07-13 21:35:01 +02:00
parent febe29c6b4
commit 808e75daa6
3 changed files with 328 additions and 48 deletions

View File

@@ -5190,6 +5190,111 @@ class PurchaseTradeTestCase(ModuleTestCase):
self.assertEqual(result[0]['mid_price'], '75.25')
self.assertEqual(result[0]['high_price'], '75.25')
@with_transaction()
def test_import_historical_all_sources_uses_mapping_table(self):
'all sources import maps source columns to standard price values'
ImportPrices = Pool().get('purchase_trade.import_prices')
ns = {'s': 'http://schemas.openxmlformats.org/spreadsheetml/2006/main'}
sheet = ElementTree.fromstring('''
<worksheet xmlns="http://schemas.openxmlformats.org/spreadsheetml/2006/main">
<sheetData>
<row r="1">
<c r="A1" t="inlineStr"><is><t>Copyright</t></is></c>
</row>
<row r="2">
<c r="A2" t="inlineStr"><is><t>combined_x000D_
description</t></is></c>
<c r="B2" t="inlineStr"><is><t>Original Mid</t></is></c>
<c r="C2" t="inlineStr"><is><t>Original High</t></is></c>
<c r="D2" t="inlineStr"><is><t>Original Low</t></is></c>
</row>
<row r="3">
<c r="A3"><v>46191</v></c>
<c r="B3"><v>470</v></c>
<c r="C3"><v>480</v></c>
<c r="D3"><v>460</v></c>
</row>
</sheetData>
</worksheet>
''')
rows = sheet.findall('.//s:sheetData/s:row', ns)
mapping = [
{
'excel_tab': 'Argus Download',
'original_price_index': 'Original Mid',
'source': 'ARGUS',
'column_destination': 'mid_price',
'standard_price_index': 'ARGUS-CFR Brasil',
'index_description': 'Brazil CFR',
},
{
'excel_tab': 'Argus Download',
'original_price_index': 'Original High',
'source': 'ARGUS',
'column_destination': 'high_price',
'standard_price_index': 'ARGUS-CFR Brasil',
'index_description': 'Brazil CFR',
},
{
'excel_tab': 'Argus Download',
'original_price_index': 'Original Low',
'source': 'ARGUS',
'column_destination': 'low_price',
'standard_price_index': 'ARGUS-CFR Brasil',
'index_description': 'Brazil CFR',
},
{
'excel_tab': 'Acuity Download',
'original_price_index': 'Missing Header',
'source': 'ACUITY',
'column_destination': 'mid_price',
'standard_price_index': 'ACUITY-Missing',
'index_description': 'Missing',
},
]
result = ImportPrices._read_historical_all_sources_rows(
{'Argus Download': rows}, mapping, [], ns)
self.assertEqual(len(result), 1)
self.assertEqual(result[0]['price_index'], 'ARGUS-CFR Brasil')
self.assertEqual(result[0]['price_date'], '46191')
self.assertEqual(result[0]['mid_price'], '470')
self.assertEqual(result[0]['price_value'], '470')
self.assertEqual(result[0]['high_price'], '480')
self.assertEqual(result[0]['low_price'], '460')
self.assertEqual(result[0]['_source'], 'ARGUS')
self.assertEqual(result[0]['_price_desc'], 'Brazil CFR')
def test_import_historical_all_sources_requires_exact_tab_match(self):
'all sources import ignores similarly named source sheets'
ImportPrices = Pool().get('purchase_trade.import_prices')
result = ImportPrices._matching_sheet_name(
{
'Acuity Download CODELCO': [],
},
'Acuity Download')
self.assertIsNone(result)
def test_import_price_index_values_uses_mapping_metadata(self):
'created price indexes use mapped description and source area'
ImportPrices = Pool().get('purchase_trade.import_prices')
area = Mock(id=8)
with patch.object(
ImportPrices, '_first_record',
side_effect=lambda model, domain: (
area if model == 'price.area' else None)):
values = ImportPrices._price_index_values(
'ARGUS-CFR Brasil',
{'_price_desc': 'Brazil CFR', '_source': 'ARGUS'})
self.assertEqual(values['price_index'], 'ARGUS-CFR Brasil')
self.assertEqual(values['price_desc'], 'Brazil CFR')
self.assertEqual(values['price_area'], 8)
def test_pricing_component_matrix_returns_generic_line_price(self):
'matrix pricing can use an unconditional matrix line as a component price'
Component = Pool().get('pricing.component')