bug automation
This commit is contained in:
@@ -810,6 +810,66 @@ class PurchaseTradeTestCase(ModuleTestCase):
|
|||||||
with self.assertRaises(UserError):
|
with self.assertRaises(UserError):
|
||||||
report.validate_remote_weight_report_context(shipment)
|
report.validate_remote_weight_report_context(shipment)
|
||||||
|
|
||||||
|
def test_weight_report_create_from_json_accepts_missing_weight_date(self):
|
||||||
|
'weight report import keeps working when OCR returns null for weight_date'
|
||||||
|
WeightReport = Pool().get('weight.report')
|
||||||
|
party_model = Mock()
|
||||||
|
vessel_model = Mock()
|
||||||
|
location_model = Mock()
|
||||||
|
party_model.getPartyByName.side_effect = lambda name: Mock(id={
|
||||||
|
'SELLER': 1,
|
||||||
|
'BUYER': 2,
|
||||||
|
'CARRIER': 3,
|
||||||
|
}[name])
|
||||||
|
vessel_model.search.return_value = []
|
||||||
|
location_model.search.return_value = []
|
||||||
|
|
||||||
|
payload = {
|
||||||
|
'lab': 'LAB',
|
||||||
|
'report': {
|
||||||
|
'reference': 'REF',
|
||||||
|
'file_no': 'FILE',
|
||||||
|
'date': '28 October 2025',
|
||||||
|
},
|
||||||
|
'contract': {},
|
||||||
|
'parties': {
|
||||||
|
'seller': 'SELLER',
|
||||||
|
'buyer': 'BUYER',
|
||||||
|
'carrier': 'CARRIER',
|
||||||
|
},
|
||||||
|
'shipment': {
|
||||||
|
'bl_no': 'BL-1',
|
||||||
|
'weighing_place': 'PORT',
|
||||||
|
'weighing_method': 'METHOD',
|
||||||
|
'bales': 10,
|
||||||
|
},
|
||||||
|
'weights': {
|
||||||
|
'weight_date': None,
|
||||||
|
'gross_landed_kg': '10',
|
||||||
|
'tare_kg': '1',
|
||||||
|
'net_landed_kg': '9',
|
||||||
|
'invoice_net_kg': '9',
|
||||||
|
'gain_loss_kg': '0',
|
||||||
|
'gain_loss_percent': '0',
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
with patch(
|
||||||
|
'trytond.modules.purchase_trade.weight_report.Pool') as PoolMock, patch.object(
|
||||||
|
WeightReport, 'create', return_value=[payload]) as create_mock:
|
||||||
|
PoolMock.return_value.get.side_effect = lambda name: {
|
||||||
|
'party.party': party_model,
|
||||||
|
'trade.vessel': vessel_model,
|
||||||
|
'stock.location': location_model,
|
||||||
|
}[name]
|
||||||
|
|
||||||
|
created = WeightReport.create_from_json(payload)
|
||||||
|
|
||||||
|
self.assertEqual(created, payload)
|
||||||
|
values = create_mock.call_args.args[0][0]
|
||||||
|
self.assertIsNone(values['weight_date'])
|
||||||
|
self.assertEqual(values['report_date'].isoformat(), '2025-10-28')
|
||||||
|
|
||||||
def test_invoice_report_uses_invoice_template_from_configuration(self):
|
def test_invoice_report_uses_invoice_template_from_configuration(self):
|
||||||
'invoice report path is resolved from purchase_trade configuration'
|
'invoice report path is resolved from purchase_trade configuration'
|
||||||
report_class = Pool().get('account.invoice', type='report')
|
report_class = Pool().get('account.invoice', type='report')
|
||||||
|
|||||||
@@ -206,6 +206,12 @@ class WeightReport(ModelSQL, ModelView):
|
|||||||
|
|
||||||
def parse_date(date_str):
|
def parse_date(date_str):
|
||||||
logger.info("TRY_TO_PARSE:%s",date_str)
|
logger.info("TRY_TO_PARSE:%s",date_str)
|
||||||
|
if not date_str:
|
||||||
|
return None
|
||||||
|
if isinstance(date_str, datetime.date):
|
||||||
|
return date_str
|
||||||
|
if not isinstance(date_str, str):
|
||||||
|
date_str = str(date_str)
|
||||||
for fmt in ('%d %B %Y', '%d %b %Y'):
|
for fmt in ('%d %B %Y', '%d %b %Y'):
|
||||||
try:
|
try:
|
||||||
return dt.strptime(date_str, fmt).date()
|
return dt.strptime(date_str, fmt).date()
|
||||||
|
|||||||
Reference in New Issue
Block a user