From 44835659e7fae2cdbc785b20d9ff76bd8dc4e57d Mon Sep 17 00:00:00 2001 From: Neda Moeini <neda.moeini@geant.org> Date: Thu, 27 Mar 2025 15:07:23 +0100 Subject: [PATCH] Refactor error messages in form validation --- sage_validation/file_validator/forms.py | 35 ++++++++++++++++++------- 1 file changed, 26 insertions(+), 9 deletions(-) diff --git a/sage_validation/file_validator/forms.py b/sage_validation/file_validator/forms.py index 96ca943..ef6e9ec 100644 --- a/sage_validation/file_validator/forms.py +++ b/sage_validation/file_validator/forms.py @@ -130,17 +130,20 @@ class CSVUploadForm(forms.Form): msg = f"Missing required columns: {', '.join(missing_columns)}" raise forms.ValidationError(msg) - @staticmethod - def _validate_source_and_trader_type(data: list[dict]) -> list: + def _validate_source_and_trader_type(self, data: list[dict]) -> list: """Validate that 'Source' is always 80 and 'SYSTraderTranType' is always 4.""" errors = [] 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": - 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": - 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 @@ -189,6 +192,16 @@ class CSVUploadForm(forms.Form): 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]: """Validate that all nominal analysis fields exist in MEO. @@ -218,6 +231,8 @@ class CSVUploadForm(forms.Form): max_repeat = self._get_max_repeat(fieldnames, "NominalAnalysisNominalCostCentre") 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): cc_field = f"NominalAnalysisNominalCostCentre/{repeat}" dep_field = f"NominalAnalysisNominalDepartment/{repeat}" @@ -251,13 +266,13 @@ class CSVUploadForm(forms.Form): errors.append( f"Row {index}: The combination of '{cc_field}' ({cc}), " 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 - @staticmethod - def _cheque_fields_must_be_empty(data: list[dict]) -> list[str]: + def _cheque_fields_must_be_empty(self, data: list[dict]) -> list[str]: """Validate that cheque fields are empty. The cheque fields are 'ChequeCurrencyName', 'ChequeToBankExchangeRate', and 'ChequeValueInChequeCurrency'. @@ -267,10 +282,12 @@ class CSVUploadForm(forms.Form): cheque_currency_name = row.get("ChequeCurrencyName") cheque_to_bank_exchange_rate = row.get("ChequeToBankExchangeRate") 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]): 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 -- GitLab