fix(campaigns/wizard): always show parse summary, even on 0 drops
The previous breakdown only rendered when at least one of the drop counters was > 0. When the Map CSV cleanly parses every row and the imbalance comes purely from the Giftbit CSV having more entries than the Map CSV, the operator was left with "13 surplus gifts" and no explanation. The summary now always shows "Map CSV: N raw rows → M contacts paired" and, when no rows were dropped, explicitly states that the imbalance must come from the Giftbit side (asks the operator to confirm the generated gift count matches the Map file). 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
This commit is contained in:
parent
5c55087198
commit
5b5df954c1
|
|
@ -220,17 +220,28 @@
|
||||||
il y a plus de cartes-cadeaux que de contacts. Le surplus sera perdu si
|
il y a plus de cartes-cadeaux que de contacts. Le surplus sera perdu si
|
||||||
la campagne est envoyée tel quel.
|
la campagne est envoyée tel quel.
|
||||||
</div>
|
</div>
|
||||||
<!-- Parser skip breakdown: tells the operator exactly WHERE the missing
|
<!-- Always-on parse summary: explains the imbalance precisely even
|
||||||
contacts went (no_email = lost forever; duplicate = couple/foyer
|
when no Map rows were dropped (= the Giftbit CSV simply had
|
||||||
de-duped; multi_skip = couple skipped by their multi setting). -->
|
more entries than the Map CSV upstream). -->
|
||||||
<div v-if="parseSkipped && (parseSkipped.no_email || parseSkipped.duplicate || parseSkipped.multi_skip)"
|
<div v-if="parseSkipped" class="q-mt-sm text-caption" style="color:#7C3F00">
|
||||||
class="q-mt-sm text-caption" style="color:#7C3F00">
|
<q-icon name="info" size="14px" />
|
||||||
<q-icon name="info" size="14px" /> Ventilation des contacts droppés au parsing du Map CSV
|
<strong>Map CSV :</strong> {{ parseSkipped.total_rows }} ligne(s) brute(s) →
|
||||||
(sur {{ parseSkipped.total_rows }} lignes brutes) :
|
<strong>{{ recipients.length }} contact(s)</strong> pairé(s) avec un cadeau.
|
||||||
<span v-if="parseSkipped.no_email"> <strong>{{ parseSkipped.no_email }}</strong> sans email valide ·</span>
|
<span v-if="(parseSkipped.no_email + parseSkipped.duplicate + parseSkipped.multi_skip) === 0">
|
||||||
<span v-if="parseSkipped.duplicate"> <strong>{{ parseSkipped.duplicate }}</strong> emails en double (déjà vu plus haut) ·</span>
|
Aucun contact n'a été droppé au parsing — l'imbalance vient probablement du fait
|
||||||
<span v-if="parseSkipped.multi_skip"> <strong>{{ parseSkipped.multi_skip }}</strong> couples ignorés (selon le réglage "Emails multiples") ·</span>
|
que le CSV Giftbit a {{ unusedGifts.length }} ligne(s) de plus que le CSV Map.
|
||||||
<span v-if="parseSkipped.no_name"> <strong>{{ parseSkipped.no_name }}</strong> sans nom (gardés, utilisent "cher client" à l'envoi)</span>
|
Vérifie que le nombre de cartes-cadeaux générées chez Giftbit correspond bien au
|
||||||
|
fichier Map utilisé.
|
||||||
|
</span>
|
||||||
|
<span v-else>
|
||||||
|
Ventilation des droppés :
|
||||||
|
<span v-if="parseSkipped.no_email"> <strong>{{ parseSkipped.no_email }}</strong> sans email valide</span><span v-if="parseSkipped.no_email && (parseSkipped.duplicate || parseSkipped.multi_skip)"> ·</span>
|
||||||
|
<span v-if="parseSkipped.duplicate"> <strong>{{ parseSkipped.duplicate }}</strong> emails en double</span><span v-if="parseSkipped.duplicate && parseSkipped.multi_skip"> ·</span>
|
||||||
|
<span v-if="parseSkipped.multi_skip"> <strong>{{ parseSkipped.multi_skip }}</strong> couples ignorés (réglage "Emails multiples")</span>.
|
||||||
|
</span>
|
||||||
|
<span v-if="parseSkipped.no_name">
|
||||||
|
({{ parseSkipped.no_name }} ligne(s) sans nom ont été <em>gardées</em> et utiliseront "cher client" à l'envoi.)
|
||||||
|
</span>
|
||||||
</div>
|
</div>
|
||||||
</q-banner>
|
</q-banner>
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue
Block a user