From 3f6b27a89fb2c3543a829f9ed1b8d72ae6574890 Mon Sep 17 00:00:00 2001 From: Floke Date: Fri, 17 Apr 2026 20:56:13 +0000 Subject: [PATCH] =?UTF-8?q?[34588f42]=20Feat:=20Tool=204=20f=C3=BCr=20Frei?= =?UTF-8?q?gabe-Anfrage=20verschlankt?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Tool 4 (Freigabeanfragen) wurde von der Tool 3 Abhängigkeit (Supermailer-Analyse) getrennt. - UI akzeptiert nun eine Liste im Format: E-Mail, Vorname, Kindernamen. - Das vereinfacht den Workflow drastisch, wenn nur eine Handvoll Kunden manuell für Freigaben angefragt werden sollen. --- fotograf-de-scraper/frontend/src/App.tsx | 39 +++++++++++------------- 1 file changed, 17 insertions(+), 22 deletions(-) diff --git a/fotograf-de-scraper/frontend/src/App.tsx b/fotograf-de-scraper/frontend/src/App.tsx index 786d2bb81..3bbfb0b15 100644 --- a/fotograf-de-scraper/frontend/src/App.tsx +++ b/fotograf-de-scraper/frontend/src/App.tsx @@ -103,36 +103,30 @@ function App() { setIsSendingRelease(true); setReleaseMessage("Bereite Senden vor..."); - const targetEmails = releaseEmails.split(',').map(e => e.trim().toLowerCase()).filter(e => e); + const lines = releaseEmails.split('\n').filter(line => line.trim()); - // We only send to emails that are in targetEmails and exist in reminderResult - const targetRows = reminderResult.filter(row => { - const rowEmail = row["E-Mail-Adresse Käufer"]?.trim().toLowerCase(); - return targetEmails.includes(rowEmail); - }); - - if (targetRows.length === 0) { - setReleaseMessage("⚠️ Keine passenden E-Mails im Auftrag gefunden (bitte vorher Supermailer-Analyse starten)."); + if (lines.length === 0) { + setReleaseMessage("⚠️ Bitte Daten eingeben."); setIsSendingRelease(false); return; } - const emailsToSend = targetRows.map(row => { - // Split the buyer name to get first name - const fullName = row["Name Käufer"] || ""; - const firstName = fullName.split(' ')[0] || "Liebe Eltern"; + const emailsToSend = lines.map(line => { + const parts = line.split(','); + const to = parts[0] ? parts[0].trim().toLowerCase() : ""; + const firstName = parts[1] ? parts[1].trim() : "Liebe Eltern"; + const childrenNames = parts[2] ? parts[2].trim() : "Euren Kindern"; const kindergartenName = selectedJob ? selectedJob.name.replace(/\(JOB\d+\)\s*/, '') : "dem Kindergarten"; - const childrenNames = row["Kindernamen"] || "Euren Kindern"; let subject = "Eure Bilder vom Kindergarten-Fotoshooting"; let body = `Guten Morgen ${firstName},

vielen Dank für Eure Teilnahme am Mini-Familien-Fotoshooting im Kindergarten ${kindergartenName} diese Woche. Die Bilder sind jetzt bereits online, ihr solltet bald eine Mail dazu erhalten. :)

Die Bilder von ${childrenNames} gefallen uns sehr gut, sie wirken auf den Bildern sehr selbstbewusst. Gerne würden wir diese in unserer Galerie auf www.kinderfotos-erding.de (Link: Beispiel ansehen) veröffentlichen.

Um den rechtlichen Anforderungen (DSGVO) gerecht zu werden, müsstet Ihr noch dieses Formular auf unserer Website ausfüllen:
Zum Formular zur Veröffentlichung

Das hilft uns wirklich sehr, damit andere einen besseren Eindruck von unserer Arbeit gewinnen.

Als kleines Dankeschön erhaltet Ihr im Anschluss einen Rabattcode über 25 € für Eure Bestellung. Diesen senden wir Euch per separater E-Mail zu, sobald das Formular ausgefüllt ist. Bitte wartet mit Eurer Bestellung, bis wir Euch den Rabattcode zugesendet haben.

Vielen Dank für Eure Unterstützung und Euer Vertrauen!

` + SIGNATURE_HTML; return { - to: row["E-Mail-Adresse Käufer"], + to: to, subject: subject, body: body }; - }); + }).filter(e => e.to); setReleaseMessage(`Sende ${emailsToSend.length} Mails...`); @@ -1018,15 +1012,16 @@ function App() { {/* Send Requests */}
- +

- Die Daten (Namen) werden automatisch aus der Supermailer-Analyse gezogen. Bitte die Analyse oben ('CSV für Supermailer') vorher durchlaufen lassen, damit alle Käuferdaten bereitliegen. + Format: E-Mail, Vorname Elternteil, Namen der Kinder
+ (z.B. max@muster.de, Max, Moritz und Leni)