Skip to content
Snippets Groups Projects

Enhancement/improve error messages

Merged Neda Moeini requested to merge enhancement/improve-error-messages into develop
1 file
+ 26
9
Compare changes
  • Side-by-side
  • Inline
@@ -130,17 +130,20 @@ class CSVUploadForm(forms.Form):
@@ -130,17 +130,20 @@ class CSVUploadForm(forms.Form):
msg = f"Missing required columns: {', '.join(missing_columns)}"
msg = f"Missing required columns: {', '.join(missing_columns)}"
raise forms.ValidationError(msg)
raise forms.ValidationError(msg)
@staticmethod
def _validate_source_and_trader_type(self, data: list[dict]) -> list:
def _validate_source_and_trader_type(data: list[dict]) -> list:
"""Validate that 'Source' is always 80 and 'SYSTraderTranType' is always 4."""
"""Validate that 'Source' is always 80 and 'SYSTraderTranType' is always 4."""
errors = []
errors = []
for index, row in enumerate(data, start=1):
for index, row in enumerate(data, start=1):
 
claimant_name = self.get_account_name_from_code(row.get("AccountNumber"))
 
claim_number = row.get("SecondReference")
if row.get("Source") != "80":
if row.get("Source") != "80":
errors.append(f"Row {index}: 'Source' must be 80, but found {row.get('Source')}.")
errors.append(f"Row {index}, claimant: {claimant_name} with claim number: {claim_number}: "
 
f"'Source' must be 80, but found {row.get('Source')}.")
if row.get("SYSTraderTranType") != "4":
if row.get("SYSTraderTranType") != "4":
errors.append(f"Row {index}: 'SYSTraderTranType' must be 4, but found {row.get('SYSTraderTranType')}.")
errors.append(f"Row {index}, claimant: {claimant_name} with claim number: {claim_number}: "
 
f"'SYSTraderTranType' must be 4, but found {row.get('SYSTraderTranType')}.")
return errors
return errors
@@ -189,6 +192,16 @@ class CSVUploadForm(forms.Form):
@@ -189,6 +192,16 @@ class CSVUploadForm(forms.Form):
return errors
return errors
 
@staticmethod
 
def get_account_name_from_code(account_code: str| None) -> str | None:
 
"""Get the account name from the PL Account Codes table."""
 
if account_code is None:
 
return None
 
try:
 
return MeoValidSuppliers.objects.using("meo").get(
 
supplier_account_number=account_code).supplier_account_name
 
except MeoValidSuppliers.DoesNotExist:
 
return None
def _validate_nc_cc_dep_combination_against_meo_sage_account(self, data: list[dict]) -> list[str]:
def _validate_nc_cc_dep_combination_against_meo_sage_account(self, data: list[dict]) -> list[str]:
"""Validate that all nominal analysis fields exist in MEO.
"""Validate that all nominal analysis fields exist in MEO.
@@ -218,6 +231,8 @@ class CSVUploadForm(forms.Form):
@@ -218,6 +231,8 @@ class CSVUploadForm(forms.Form):
max_repeat = self._get_max_repeat(fieldnames, "NominalAnalysisNominalCostCentre")
max_repeat = self._get_max_repeat(fieldnames, "NominalAnalysisNominalCostCentre")
for index, row in enumerate(data, start=1):
for index, row in enumerate(data, start=1):
 
claimant_name = self.get_account_name_from_code(row.get("AccountNumber"))
 
claim_number = row.get("SecondReference")
for repeat in range(1, max_repeat + 1):
for repeat in range(1, max_repeat + 1):
cc_field = f"NominalAnalysisNominalCostCentre/{repeat}"
cc_field = f"NominalAnalysisNominalCostCentre/{repeat}"
dep_field = f"NominalAnalysisNominalDepartment/{repeat}"
dep_field = f"NominalAnalysisNominalDepartment/{repeat}"
@@ -251,13 +266,13 @@ class CSVUploadForm(forms.Form):
@@ -251,13 +266,13 @@ class CSVUploadForm(forms.Form):
errors.append(
errors.append(
f"Row {index}: The combination of '{cc_field}' ({cc}), "
f"Row {index}: The combination of '{cc_field}' ({cc}), "
f"'{dep_field}' ({dep}), and '{nominal_account_field}' "
f"'{dep_field}' ({dep}), and '{nominal_account_field}' "
f"({nc}) does not exist in MEO valid Sage accounts."
f"({nc}) for claimant '{claimant_name}' and claim number '{claim_number}' "
 
f"does not exist in MEO valid Sage accounts."
)
)
return errors
return errors
@staticmethod
def _cheque_fields_must_be_empty(self, data: list[dict]) -> list[str]:
def _cheque_fields_must_be_empty(data: list[dict]) -> list[str]:
"""Validate that cheque fields are empty.
"""Validate that cheque fields are empty.
The cheque fields are 'ChequeCurrencyName', 'ChequeToBankExchangeRate', and 'ChequeValueInChequeCurrency'.
The cheque fields are 'ChequeCurrencyName', 'ChequeToBankExchangeRate', and 'ChequeValueInChequeCurrency'.
@@ -267,10 +282,12 @@ class CSVUploadForm(forms.Form):
@@ -267,10 +282,12 @@ class CSVUploadForm(forms.Form):
cheque_currency_name = row.get("ChequeCurrencyName")
cheque_currency_name = row.get("ChequeCurrencyName")
cheque_to_bank_exchange_rate = row.get("ChequeToBankExchangeRate")
cheque_to_bank_exchange_rate = row.get("ChequeToBankExchangeRate")
cheque_value_in_cheque_currency = row.get("ChequeValueInChequeCurrency")
cheque_value_in_cheque_currency = row.get("ChequeValueInChequeCurrency")
claimant_name = self.get_account_name_from_code(row.get("AccountNumber"))
 
claim_number = row.get("SecondReference")
if any([cheque_currency_name, cheque_to_bank_exchange_rate, cheque_value_in_cheque_currency]):
if any([cheque_currency_name, cheque_to_bank_exchange_rate, cheque_value_in_cheque_currency]):
errors.append(
errors.append(
f"Row {index}: Unexpected values in the Cheque columns. All cheque columns must be empty."
f"Row {index}: Unexpected values in the Cheque columns for {claimant_name} with claim number: "
 
f"{claim_number}. All cheque columns must be empty."
)
)
return errors
return errors
Loading