Compare commits
2 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
ffb4de7fba | ||
|
|
dd9ab3736b |
@@ -268,6 +268,19 @@ export async function fetchFormats(): Promise<Format[]> {
|
|||||||
return data?.data ?? [];
|
return data?.data ?? [];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Formate für den Textmengencheck: alle mit show_check=true. Das sind die
|
||||||
|
* Text-Seiten-Formate (A4, A5, DIN lang, A6) – unabhängig davon, ob sie im
|
||||||
|
* öffentlichen Konfigurator bestellbar sind. Adress-Postkarten sind ausgenommen.
|
||||||
|
*/
|
||||||
|
export async function fetchCheckFormats(): Promise<Format[]> {
|
||||||
|
const data = await request(
|
||||||
|
'/items/formats?fields=id,key,name,product&filter[show_check][_eq]=true&limit=-1',
|
||||||
|
{ auth: false },
|
||||||
|
);
|
||||||
|
return data?.data ?? [];
|
||||||
|
}
|
||||||
|
|
||||||
/* ── Preis & Bestellung (Extension skrift-orders) ─────────────────────────── */
|
/* ── Preis & Bestellung (Extension skrift-orders) ─────────────────────────── */
|
||||||
|
|
||||||
export type QuoteLine = { label: string; amount: number; per_unit?: boolean };
|
export type QuoteLine = { label: string; amount: number; per_unit?: boolean };
|
||||||
|
|||||||
@@ -584,23 +584,6 @@ export default function Configurator({ vorwahlProdukt }: { vorwahlProdukt?: stri
|
|||||||
useEffect(() => { setPreviewSession(null); },
|
useEffect(() => { setPreviewSession(null); },
|
||||||
[textTemplate, font, format, realistisch, labeling, needsEnvelope, umschlagText, entries]);
|
[textTemplate, font, format, realistisch, labeling, needsEnvelope, umschlagText, entries]);
|
||||||
|
|
||||||
// Empfängerzeilen an die Menge angleichen (nur im Tabellenmodus). Gilt auch im
|
|
||||||
// Extern-Modus: die (vom Betreiber vorgegebene) Menge erzeugt die passende
|
|
||||||
// Anzahl Zeilen – egal ob mit oder ohne Kuvert/Empfänger.
|
|
||||||
useEffect(() => {
|
|
||||||
// Bei vielen Empfängern (Tabelle unpraktisch) wird auf Excel verwiesen und
|
|
||||||
// nicht synchronisiert – AUSSER im Extern-Modus ohne Empfänger-Schritt, wo die
|
|
||||||
// Menge einfach N Blanko-Dokumente erzeugen muss (auch über der Tabellengrenze).
|
|
||||||
if (nurUpload && (!externModus || empfaengerSchritt)) return;
|
|
||||||
setEntries((prev) => {
|
|
||||||
if (prev.length === quantity) return prev;
|
|
||||||
if (prev.length < quantity) {
|
|
||||||
return [...prev, ...Array.from({ length: quantity - prev.length }, leereEntry)];
|
|
||||||
}
|
|
||||||
return prev.slice(0, quantity);
|
|
||||||
});
|
|
||||||
}, [quantity, nurUpload, externModus, empfaengerSchritt]);
|
|
||||||
|
|
||||||
// Extern-Preset (vom Betreiber im Direktlink gesetzt) – der Kunde wählt nichts:
|
// Extern-Preset (vom Betreiber im Direktlink gesetzt) – der Kunde wählt nichts:
|
||||||
// ?extern=1&versand=sammel|einzeln&kuvert=0|1&beschriftung=empfaenger|freitext|keine&menge=N
|
// ?extern=1&versand=sammel|einzeln&kuvert=0|1&beschriftung=empfaenger|freitext|keine&menge=N
|
||||||
// Die Menge ist maßgeblich (greift immer); nur ein Excel-Import passt sie an die
|
// Die Menge ist maßgeblich (greift immer); nur ein Excel-Import passt sie an die
|
||||||
@@ -806,6 +789,27 @@ export default function Configurator({ vorwahlProdukt }: { vorwahlProdukt?: stri
|
|||||||
const eigeneImText = genutztePlatzhalter.filter((p) => !standardSet.has(p.toLowerCase()));
|
const eigeneImText = genutztePlatzhalter.filter((p) => !standardSet.has(p.toLowerCase()));
|
||||||
/** Platzhalter im individuellen Umschlagtext – analog zur Text-Tabelle. */
|
/** Platzhalter im individuellen Umschlagtext – analog zur Text-Tabelle. */
|
||||||
const genutztePlatzhalterUmschlag = useMemo(() => textPlatzhalter(umschlagText), [umschlagText]);
|
const genutztePlatzhalterUmschlag = useMemo(() => textPlatzhalter(umschlagText), [umschlagText]);
|
||||||
|
|
||||||
|
// Müssen pro Dokument eigene Daten erfasst werden? Das ist der Fall bei einem
|
||||||
|
// Empfänger-/Individualtext-Schritt oder bei eigenen Platzhaltern im Brieftext
|
||||||
|
// (jede Zeile trägt andere Werte → oberhalb der Tabellengrenze via Excel).
|
||||||
|
const zeilenDatenNoetig = !!empfaengerSchritt || eigeneImText.length > 0;
|
||||||
|
|
||||||
|
// Empfängerzeilen an die Menge angleichen. Unterhalb der Tabellengrenze immer;
|
||||||
|
// darüber nur, wenn KEINE Pflicht-Zeilendaten nötig sind (z. B. identische
|
||||||
|
// Sammelkarten ohne Empfängerliste) – dann erzeugt die Menge N Blanko-Zeilen.
|
||||||
|
// Werden pro Zeile Daten gebraucht, bleibt es beim Excel-Upload (nicht syncen).
|
||||||
|
// Im Extern-Modus wie bisher: syncen außer bei Empfänger-/Individualtext-Schritt.
|
||||||
|
useEffect(() => {
|
||||||
|
if (nurUpload && (externModus ? empfaengerSchritt : zeilenDatenNoetig)) return;
|
||||||
|
setEntries((prev) => {
|
||||||
|
if (prev.length === quantity) return prev;
|
||||||
|
if (prev.length < quantity) {
|
||||||
|
return [...prev, ...Array.from({ length: quantity - prev.length }, leereEntry)];
|
||||||
|
}
|
||||||
|
return prev.slice(0, quantity);
|
||||||
|
});
|
||||||
|
}, [quantity, nurUpload, externModus, empfaengerSchritt, zeilenDatenNoetig]);
|
||||||
/**
|
/**
|
||||||
* Entry für den Versand ans Backend: löst ALLE im Text/Umschlag genutzten
|
* Entry für den Versand ans Backend: löst ALLE im Text/Umschlag genutzten
|
||||||
* Platzhalter explizit auf (Standard-Platzhalter aus der Adresse via standardWert,
|
* Platzhalter explizit auf (Standard-Platzhalter aus der Adresse via standardWert,
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
import { useEffect, useMemo, useState } from 'react';
|
import { useEffect, useMemo, useState } from 'react';
|
||||||
import { fetchFormats, fetchSettings, generatePreview } from '../lib/api';
|
import { fetchCheckFormats, fetchSettings, generatePreview } from '../lib/api';
|
||||||
import type { Format, PublicSettings, PreviewDoc, PreviewOverflow } from '../lib/api';
|
import type { Format, PublicSettings, PreviewDoc, PreviewOverflow } from '../lib/api';
|
||||||
|
|
||||||
/** Schriftarten wie im Konfigurator/manuellen Druck. */
|
/** Schriftarten wie im Konfigurator/manuellen Druck. */
|
||||||
@@ -99,7 +99,7 @@ export default function Textmenge() {
|
|||||||
const [gross, setGross] = useState(false);
|
const [gross, setGross] = useState(false);
|
||||||
|
|
||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
fetchFormats()
|
fetchCheckFormats()
|
||||||
.then((f) => {
|
.then((f) => {
|
||||||
setFormate(f);
|
setFormate(f);
|
||||||
setFormat(f.find((x) => x.key === 'a4')?.key ?? f[0]?.key ?? 'a4');
|
setFormat(f.find((x) => x.key === 'a4')?.key ?? f[0]?.key ?? 'a4');
|
||||||
|
|||||||
Reference in New Issue
Block a user