2024-10-12 22:41:30 +02:00
|
|
|
import { EvenementFamille } from "../EvenementFamille";
|
2024-10-12 18:54:11 +02:00
|
|
|
import { Famille } from "../Famille";
|
|
|
|
|
import { checkDataConsistency } from "./checkDataConsistency";
|
|
|
|
|
import {
|
|
|
|
|
MessageDeNettoyage,
|
|
|
|
|
msgDonneeBloquante,
|
|
|
|
|
msgDonneeIgnoree,
|
|
|
|
|
msgDonneeSuspecte,
|
|
|
|
|
} from "./MessageDeNettoyage";
|
|
|
|
|
|
|
|
|
|
type DonneesNettoyees = {
|
|
|
|
|
familles: Famille[];
|
|
|
|
|
messages: MessageDeNettoyage[];
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
export function nettoyerDonneesFamilles(
|
|
|
|
|
donneesFamillesBrutes: Famille[]
|
|
|
|
|
): DonneesNettoyees {
|
|
|
|
|
let familles = donneesFamillesBrutes;
|
|
|
|
|
|
|
|
|
|
let messages: MessageDeNettoyage[] = [];
|
|
|
|
|
|
2024-10-12 22:41:30 +02:00
|
|
|
const output1 = supprimerLesEntreesVide(familles);
|
|
|
|
|
messages = [...messages, ...output1.messages];
|
|
|
|
|
familles = output1.familles;
|
2024-10-12 18:54:11 +02:00
|
|
|
|
|
|
|
|
// TODO convert checkDataConsistency to filters
|
|
|
|
|
const consistencyReport = checkDataConsistency(familles);
|
|
|
|
|
|
|
|
|
|
// Adapte les message
|
|
|
|
|
const errorMessages: MessageDeNettoyage[] = consistencyReport.errors.map(
|
|
|
|
|
(e) => msgDonneeBloquante(`${e.familyId} - ${e.issueType}`)
|
|
|
|
|
);
|
|
|
|
|
const warnings: MessageDeNettoyage[] = consistencyReport.warnings.map((e) =>
|
|
|
|
|
msgDonneeSuspecte(`${e.familyId} - ${e.issueType}`)
|
|
|
|
|
);
|
|
|
|
|
|
|
|
|
|
messages = [...messages, ...errorMessages, ...warnings];
|
|
|
|
|
|
2024-10-12 22:41:30 +02:00
|
|
|
const output2 = supprimerLesEvenementsSansDate(familles);
|
|
|
|
|
messages = [...messages, ...output2.messages];
|
|
|
|
|
familles = output2.familles;
|
|
|
|
|
|
|
|
|
|
const output3 = supprimerLesEvenementsHorsResisstance(familles);
|
|
|
|
|
messages = [...messages, ...output3.messages];
|
|
|
|
|
familles = output3.familles;
|
|
|
|
|
|
2024-10-12 18:54:11 +02:00
|
|
|
return {
|
|
|
|
|
familles,
|
|
|
|
|
messages,
|
|
|
|
|
};
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* Supprime "Famille de résistant" qui sont souvent créé par erreur
|
|
|
|
|
*/
|
|
|
|
|
function supprimerLesEntreesVide(familles: Famille[]): DonneesNettoyees {
|
|
|
|
|
const nettoyees = familles.filter((f) => f.Titre !== "Famille de résistant");
|
|
|
|
|
const ignorees = familles.filter((f) => f.Titre === "Famille de résistant");
|
|
|
|
|
if (ignorees.length > 0) {
|
|
|
|
|
return {
|
|
|
|
|
familles: nettoyees,
|
|
|
|
|
messages: [
|
|
|
|
|
msgDonneeIgnoree(
|
|
|
|
|
`${
|
|
|
|
|
nettoyees.length - familles.length
|
|
|
|
|
} enregistrement(s) famille "vide" ignoré(s)`
|
|
|
|
|
),
|
|
|
|
|
],
|
|
|
|
|
};
|
|
|
|
|
} else {
|
|
|
|
|
return {
|
|
|
|
|
familles: nettoyees,
|
|
|
|
|
messages: [],
|
|
|
|
|
};
|
|
|
|
|
}
|
|
|
|
|
}
|
2024-10-12 22:41:30 +02:00
|
|
|
|
|
|
|
|
function supprimerLesEvenementsSansDate(familles: Famille[]): DonneesNettoyees {
|
|
|
|
|
return ignorerEvenements(
|
|
|
|
|
familles,
|
|
|
|
|
(e: EvenementFamille) => e.Date === null,
|
|
|
|
|
(e, f) =>
|
|
|
|
|
`Evenement "${f.Titre} - ${e.Évènement}" [${e.notionId}] n'as pas de Date il sera ignoré`
|
|
|
|
|
);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
function supprimerLesEvenementsHorsResisstance(
|
|
|
|
|
familles: Famille[]
|
|
|
|
|
): DonneesNettoyees {
|
|
|
|
|
return ignorerEvenements(
|
|
|
|
|
familles,
|
|
|
|
|
(e: EvenementFamille, f: Famille) => {
|
|
|
|
|
return (
|
|
|
|
|
e.Date !== null &&
|
|
|
|
|
((f.Integration !== null && e.Date < f.Integration) ||
|
|
|
|
|
(f.Sortie !== null && e.Date > f.Sortie))
|
|
|
|
|
);
|
|
|
|
|
},
|
|
|
|
|
(e, f) =>
|
|
|
|
|
`Evenement "${f.Titre} - ${e.Évènement}" [${e.notionId}] hors période de résistance il sera ignoré`
|
|
|
|
|
);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
function ignorerEvenements(
|
|
|
|
|
familles: Famille[],
|
|
|
|
|
conditionAIgnoree: (evt: EvenementFamille, f: Famille) => boolean,
|
|
|
|
|
messageIgnoreeFn: (evt: EvenementFamille, f: Famille) => string
|
|
|
|
|
): DonneesNettoyees {
|
|
|
|
|
let messages: MessageDeNettoyage[] = [];
|
|
|
|
|
const nettoyees = familles.map((f) => {
|
|
|
|
|
const nettoyees = f.Evenements.filter((e) => !conditionAIgnoree(e, f));
|
|
|
|
|
const evtIgnorees = f.Evenements.filter((e) => conditionAIgnoree(e, f));
|
|
|
|
|
messages = [
|
|
|
|
|
...messages,
|
|
|
|
|
...evtIgnorees.map((e) => msgDonneeIgnoree(messageIgnoreeFn(e, f))),
|
|
|
|
|
];
|
|
|
|
|
return { ...f, Evenements: nettoyees };
|
|
|
|
|
});
|
|
|
|
|
return {
|
|
|
|
|
familles: nettoyees,
|
|
|
|
|
messages,
|
|
|
|
|
};
|
|
|
|
|
}
|