- Pri importe ZIP-u sa šablóna priradí produktom so stĺpcami Zľava grafická, Farba cenovky a Pôvod podľa týchto tagov.
+ Pri importe ZIP-u sa šablóna priradí produktom podľa stĺpcov Zľava grafická (prázdna = základná, s výkričníkom podľa stĺpca Výkričník), Farba cenovky a Pôvod.
);
diff --git a/src/lib/podkladyZip.ts b/src/lib/podkladyZip.ts
index 40f6fd5..a6d9faf 100644
--- a/src/lib/podkladyZip.ts
+++ b/src/lib/podkladyZip.ts
@@ -1,7 +1,7 @@
// Import ZIP-u s podkladmi z Databázy produktov: tabuľka podklady_*.xlsx (jeden riadok = jeden produkt)
// a fotky v priečinkoch /web/*.png.
import JSZip from 'jszip';
-import { BadgeColor, BadgeTemplate, ProductItem } from '@/types/newsletter';
+import { BADGE_IMPORT_TYPES, BadgeColor, BadgeTemplate, ProductItem } from '@/types/newsletter';
import { findBadgeByCode } from './badgeUtils';
import { CARD_BG_BY_BADGE_COLOR } from './productCard';
@@ -43,14 +43,13 @@ function toBadgeColor(value: string): BadgeColor | undefined {
// opačne nie – zahraničný produkt nesmie dostať cenovku so slovenskou vlajkou.
function findBadgeByTags(
badges: BadgeTemplate[],
- graphic: string,
+ type: string,
color: BadgeColor | undefined,
origin: string
): { badge: BadgeTemplate; match: 'exact' | 'origin' } | undefined {
- if (!graphic) return undefined;
const sk = norm(origin) === 'sk' ? 'SK' : '';
const candidates = badges.filter(
- (b) => b.importTags?.type && norm(b.importTags.type) === norm(graphic) && (!b.importTags.color || b.importTags.color === color)
+ (b) => b.importTags?.type && norm(b.importTags.type) === norm(type) && (!b.importTags.color || b.importTags.color === color)
);
// presná farba má prednosť pred „hocijakou“
const rank = (b: BadgeTemplate) => (b.importTags?.color ? 0 : 1);
@@ -143,7 +142,8 @@ export async function readPodkladyZip(file: File, badges: BadgeTemplate[]): Prom
color: col('Farba cenovky'),
origin: col('Pôvod'),
formats: col('Formát'),
- deposit: col('Zálohovanie')
+ deposit: col('Zálohovanie'),
+ exclaim: col('Výkričník')
};
if (c.ean < 0) throw new Error('Tabuľka nemá stĺpec EAN – nejde o podklady z Databázy produktov?');
const get = (row: string[], i: number) => (i >= 0 ? String(row[i] ?? '').trim() : '');
@@ -163,8 +163,10 @@ export async function readPodkladyZip(file: File, badges: BadgeTemplate[]): Prom
const colorText = get(row, c.color);
const color = toBadgeColor(colorText);
const origin = get(row, c.origin);
+ // prázdna „Zľava grafická“ = základná cenovka (s výkričníkom podľa stĺpca Výkričník)
+ const type = graphic || (norm(get(row, c.exclaim)) === 'ano' ? 'ZÁKLADNÁ !' : 'ZÁKLADNÁ');
const tries = [[graphic, colorText, origin], [graphic, colorText], [graphic]].map((parts) => parts.filter(Boolean).join(' | '));
- const byTags = findBadgeByTags(badges, graphic, color, origin);
+ const byTags = findBadgeByTags(badges, type, color, origin);
const byName = !byTags && graphic ? tries.map((t) => findBadgeByCode(badges, t)).find(Boolean) : undefined;
const formats = norm(get(row, c.formats));
@@ -178,7 +180,7 @@ export async function readPodkladyZip(file: File, badges: BadgeTemplate[]): Prom
cardPrice: toNumber(get(row, c.cardPrice)),
unitPrice: formatUnitPrice(get(row, c.unitPrice)),
discount: discount ? `${Math.round(discount)}%` : '',
- badgeLabel: tries[0],
+ badgeLabel: [BADGE_IMPORT_TYPES.find((t) => t.value === type)?.label || type, colorText, origin].filter(Boolean).join(' | '),
badge: byTags?.badge || byName,
badgeMatch: byTags ? byTags.match : byName ? 'exact' : undefined,
color,
diff --git a/src/types/newsletter.ts b/src/types/newsletter.ts
index 54265c2..059641d 100644
--- a/src/types/newsletter.ts
+++ b/src/types/newsletter.ts
@@ -243,10 +243,18 @@ export interface BadgeTemplate {
importTags?: BadgeImportTags; // podľa čoho sa šablóna vyberie pri importe podkladov (ZIP)
}
+// Druhy cenoviek v podkladoch: „Zľava grafická“, a keď je prázdna, základná cenovka s výkričníkom alebo bez
+export const BADGE_IMPORT_TYPES = [
+ { value: 'SUPER CENA', label: 'SUPER CENA' },
+ { value: 'SUPER VÝHODNÉ', label: 'SUPER VÝHODNÉ' },
+ { value: 'ZÁKLADNÁ !', label: 'Základná s výkričníkom' },
+ { value: 'ZÁKLADNÁ', label: 'Základná (bez nápisu)' }
+];
+
// Tagy šablóny cenovky pre import podkladov – zodpovedajú stĺpcom tabuľky z Databázy produktov
export type BadgeColor = 'cervena' | 'oranzova' | 'zelena';
export interface BadgeImportTags {
- type?: string; // „Zľava grafická“, napr. SUPER CENA, SUPER VÝHODNÉ
+ type?: string; // druh cenovky – jeden z BADGE_IMPORT_TYPES (SUPER CENA, SUPER VÝHODNÉ, ZÁKLADNÁ, ZÁKLADNÁ !)
color?: BadgeColor; // „Farba cenovky“
origin?: 'SK' | ''; // „Pôvod“: SK alebo bez pôvodu
}