Skip to content

Instantly share code, notes, and snippets.

@helabenkhalfallah
Created February 2, 2025 13:27
Show Gist options
  • Save helabenkhalfallah/158e5308453ab775f36fbbf07b6c4ad5 to your computer and use it in GitHub Desktop.
Save helabenkhalfallah/158e5308453ab775f36fbbf07b6c4ad5 to your computer and use it in GitHub Desktop.
Refactoring Example (2)
const formatVirementsBadWay = (virements) => {
let dataSource = [];
for (let i = 0; i < virements.length; i++) {
const virement = virements[i];
const uiVirement = {};
// Reference interne
uiVirement.referenceInterne = virement.referenceInterne;
// Format emetteur
if (virement.compteEmetteur) {
if (virement.compteEmetteur.iban) {
uiVirement.emetteurValue = virement.compteEmetteur.iban;
} else if (virement.compteEmetteur.rib) {
uiVirement.emetteurValue = `${virement.compteEmetteur.rib.codeBanque || ''}`;
uiVirement.emetteurValue += `${virement.compteEmetteur.rib.codeGuichet || ''}`;
uiVirement.emetteurValue += `${virement.compteEmetteur.rib.numero || ''}`;
uiVirement.emetteurValue += `${virement.compteEmetteur.rib.cleRib || ''}`;
}
uiVirement.emetteurValue += ` - ${virement.compteEmetteur.intitule || ''}`;
}
// Format montant
if (virement.montant && 'valeur' in virement.montant && virement.montant.valeur != null) {
const { valeur, valeurReelle, devise, decimales } = virement.montant;
const montantDivisor = 10 ** decimales;
const montantValeurReelle = `${valeur / montantDivisor}`;
let montantValeur = '';
if (`${valeurReelle}`.includes('.') || `${valeurReelle}`.includes(',')) {
const normalizedValue = montantValeurReelle.replace('.', ',');
const valeurReelleComponents = normalizedValue.split(',');
const decimale = valeurReelleComponents[0];
montantValeur = `${normalizedValue}${decimale.length < 2 ? '0' : ''}`;
} else {
montantValeur = montantValeurReelle.replace('.', '').replace('.', '');
montantValeur = `${montantValeur},00`;
}
uiVirement.montantValue = montantValeur ? montantValeur : '0';
uiVirement.montantValue += ` ${devise}`;
}
// Format date
if (virement.dateExecution) {
const dateT = new Date(virement.dateExecution);
const year = dateT.getFullYear();
const month = dateT.getMonth() + 1;
const date = dateT.getDate();
uiVirement.dateExecutionValue = date + '/' + month + '/' + year;
}
// Format état
uiVirement.etatLibelleValue = virement.etatLibelle;
dataSource.push(uiVirement);
}
return dataSource;
};
// Helper function: Formats Emetteur (Sender) Information
const formatEmetteur = (compte) => {
if (!compte) return "Unknown Sender";
const accountNumber = compte.iban
? compte.iban
: `${compte.rib?.codeBanque || ''}${compte.rib?.codeGuichet || ''}${compte.rib?.numero || ''}${compte.rib?.cleRib || ''}`;
return `${accountNumber} - ${compte.intitule || ''}`;
};
// Helper function: Formats Montant (Amount)
const formatMontant = (montant) => {
if (!montant || montant.valeur == null) return "0,00 EUR";
const montantDivisor = 10 ** montant.decimales;
let montantValeur = (montant.valeur / montantDivisor).toFixed(montant.decimales);
return `${montantValeur.replace('.', ',')} ${montant.devise}`;
};
// Helper function: Formats Date
const formatDate = (timestamp) => {
if (!timestamp) return "Invalid Date";
const date = new Date(timestamp);
return date.toLocaleDateString('fr-FR'); // Converts to 'DD/MM/YYYY' format
};
const formatVirements = (virements) =>
virements.map((virement) => ({
referenceInterne: virement.referenceInterne,
emetteurValue: formatEmetteur(virement.compteEmetteur),
montantValue: formatMontant(virement.montant),
dateExecutionValue: formatDate(virement.dateExecution),
etatLibelleValue: virement.etatLibelle,
}));
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment