L'ordre et les libellés des colonnes étaient retapés à six endroits : l'en-tête du tableau, deux boucles de cellules, la ligne « Totaux », la table des libellés et la liste des colonnes recoupées. Ces copies avaient déjà divergé — le solde antérieur, rendu hors de la boucle, était comparé aux lignes sans que son écart puisse s'afficher dans sa cellule. `COLONNES_CRG` devient la seule déclaration, et tout le reste en dérive ; l'écart du solde antérieur s'affiche du coup là où on le cherche. `ecartsAvecLignes` rapporte maintenant l'extrait, le calculé et ce qui manque entre les deux. Le composant refaisait cette soustraction pour son infobulle, avec un `|| 0` là où l'utilitaire emploie `Number` et `Number.isFinite` : deux règles de coercition pour un même calcul, libres de diverger. Le contenu déplié d'un lot passe de `v-show` à `v-if`. Le tableau des lignes compte une centaine de champs éditables ; les garder montés pour la vingtaine de lots d'un document faisait re-rendre à chaque frappe deux mille champs que personne ne regardait. `setNestedValue` était recopié à l'identique dans trois composants et `formatCurrency` redéfini dans le composant alors que `utils/format.js` existe et dit lui-même que les nouveaux affichages passent par lui. Le premier part dans `utils/chemin.js`, le second cède la place à `formatMontantPrecis`, dont le formateur `Intl` est construit une fois pour toutes. `EditableField` affirmait en dur que sa valeur venait du compte rendu. C'est vrai des trois écrans qui l'emploient aujourd'hui, mais un formulaire de saisie manuelle mentirait sans le savoir : l'origine devient une prop, avec cette valeur par défaut. Le type des lignes de report est défini des deux côtés de l'application sans lien entre eux ; chacun renvoie désormais à l'autre. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
21 lines
738 B
JavaScript
21 lines
738 B
JavaScript
/**
|
|
* Écriture d'une valeur désignée par un chemin pointé (`"divers.montant"`).
|
|
*
|
|
* Les formulaires d'édition adressent leurs champs par ce chemin plutôt que par
|
|
* une référence : ils travaillent sur une copie fraîche de l'objet à chaque
|
|
* modification, et une référence prise avant la copie viserait l'ancien.
|
|
*/
|
|
|
|
/** Écrit `valeur` à `chemin`, en créant les objets intermédiaires manquants. */
|
|
export function setNestedValue(objet, chemin, valeur) {
|
|
const parties = chemin.split('.')
|
|
let courant = objet
|
|
for (let i = 0; i < parties.length - 1; i++) {
|
|
if (!courant[parties[i]]) {
|
|
courant[parties[i]] = {}
|
|
}
|
|
courant = courant[parties[i]]
|
|
}
|
|
courant[parties[parties.length - 1]] = valeur
|
|
}
|