[34588f42] Feat: Tool 4 für Freigabe-Anfrage verschlankt
- 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.
This commit is contained in:
@@ -103,36 +103,30 @@ function App() {
|
|||||||
setIsSendingRelease(true);
|
setIsSendingRelease(true);
|
||||||
setReleaseMessage("Bereite Senden vor...");
|
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
|
if (lines.length === 0) {
|
||||||
const targetRows = reminderResult.filter(row => {
|
setReleaseMessage("⚠️ Bitte Daten eingeben.");
|
||||||
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).");
|
|
||||||
setIsSendingRelease(false);
|
setIsSendingRelease(false);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
const emailsToSend = targetRows.map(row => {
|
const emailsToSend = lines.map(line => {
|
||||||
// Split the buyer name to get first name
|
const parts = line.split(',');
|
||||||
const fullName = row["Name Käufer"] || "";
|
const to = parts[0] ? parts[0].trim().toLowerCase() : "";
|
||||||
const firstName = fullName.split(' ')[0] || "Liebe Eltern";
|
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 kindergartenName = selectedJob ? selectedJob.name.replace(/\(JOB\d+\)\s*/, '') : "dem Kindergarten";
|
||||||
const childrenNames = row["Kindernamen"] || "Euren Kindern";
|
|
||||||
|
|
||||||
let subject = "Eure Bilder vom Kindergarten-Fotoshooting";
|
let subject = "Eure Bilder vom Kindergarten-Fotoshooting";
|
||||||
let body = `Guten Morgen ${firstName},<br><br>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. :)<br><br>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: <a href="https://www.kinderfotos-erding.de/angebot/schulfotograf/#5134aec7-5498-49ab-b26e-73574510c90a">Beispiel ansehen</a>) veröffentlichen.<br><br>Um den rechtlichen Anforderungen (DSGVO) gerecht zu werden, müsstet Ihr noch dieses Formular auf unserer Website ausfüllen:<br><a href="https://www.kinderfotos-erding.de/angebot/schulfotograf/freigabe-zur-veroeffentlichung/"><b>Zum Formular zur Veröffentlichung</b></a><br><br>Das hilft uns wirklich sehr, damit andere einen besseren Eindruck von unserer Arbeit gewinnen.<br><br>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.<br><br>Vielen Dank für Eure Unterstützung und Euer Vertrauen!<br><br>` + SIGNATURE_HTML;
|
let body = `Guten Morgen ${firstName},<br><br>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. :)<br><br>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: <a href="https://www.kinderfotos-erding.de/angebot/schulfotograf/#5134aec7-5498-49ab-b26e-73574510c90a">Beispiel ansehen</a>) veröffentlichen.<br><br>Um den rechtlichen Anforderungen (DSGVO) gerecht zu werden, müsstet Ihr noch dieses Formular auf unserer Website ausfüllen:<br><a href="https://www.kinderfotos-erding.de/angebot/schulfotograf/freigabe-zur-veroeffentlichung/"><b>Zum Formular zur Veröffentlichung</b></a><br><br>Das hilft uns wirklich sehr, damit andere einen besseren Eindruck von unserer Arbeit gewinnen.<br><br>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.<br><br>Vielen Dank für Eure Unterstützung und Euer Vertrauen!<br><br>` + SIGNATURE_HTML;
|
||||||
|
|
||||||
return {
|
return {
|
||||||
to: row["E-Mail-Adresse Käufer"],
|
to: to,
|
||||||
subject: subject,
|
subject: subject,
|
||||||
body: body
|
body: body
|
||||||
};
|
};
|
||||||
});
|
}).filter(e => e.to);
|
||||||
|
|
||||||
setReleaseMessage(`Sende ${emailsToSend.length} Mails...`);
|
setReleaseMessage(`Sende ${emailsToSend.length} Mails...`);
|
||||||
|
|
||||||
@@ -1018,15 +1012,16 @@ function App() {
|
|||||||
|
|
||||||
{/* Send Requests */}
|
{/* Send Requests */}
|
||||||
<div className="bg-gray-50 p-3 rounded-lg border border-gray-100">
|
<div className="bg-gray-50 p-3 rounded-lg border border-gray-100">
|
||||||
<label className="text-[10px] font-bold text-gray-500 uppercase block mb-2">Ziel-E-Mails für Anfrage</label>
|
<label className="text-[10px] font-bold text-gray-500 uppercase block mb-2">Empfänger-Daten (Pro Zeile)</label>
|
||||||
<p className="text-[10px] text-gray-400 mb-2 leading-tight">
|
<p className="text-[10px] text-gray-400 mb-2 leading-tight">
|
||||||
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: <b>E-Mail, Vorname Elternteil, Namen der Kinder</b><br/>
|
||||||
|
(z.B. <i>max@muster.de, Max, Moritz und Leni</i>)
|
||||||
</p>
|
</p>
|
||||||
<textarea
|
<textarea
|
||||||
placeholder="z.B. max@muster.de, anna@test.de"
|
placeholder="max@muster.de, Max, Moritz und Leni anna@test.de, Anna, Lisa"
|
||||||
value={releaseEmails}
|
value={releaseEmails}
|
||||||
onChange={(e) => setReleaseEmails(e.target.value)}
|
onChange={(e) => setReleaseEmails(e.target.value)}
|
||||||
className="w-full px-3 py-2 text-sm border border-gray-200 rounded-lg focus:ring-2 focus:ring-indigo-500 mb-2 h-20"
|
className="w-full px-3 py-2 text-sm border border-gray-200 rounded-lg focus:ring-2 focus:ring-indigo-500 mb-2 h-20 font-mono"
|
||||||
/>
|
/>
|
||||||
|
|
||||||
<div className="flex items-center gap-2 mb-3 bg-white p-2 rounded-lg border border-gray-100">
|
<div className="flex items-center gap-2 mb-3 bg-white p-2 rounded-lg border border-gray-100">
|
||||||
@@ -1041,12 +1036,12 @@ function App() {
|
|||||||
</div>
|
</div>
|
||||||
<button
|
<button
|
||||||
onClick={handleSendRelease}
|
onClick={handleSendRelease}
|
||||||
disabled={isSendingRelease || !releaseEmails.trim() || !reminderResult || !isGmailAuthenticated}
|
disabled={isSendingRelease || !releaseEmails.trim() || !isGmailAuthenticated}
|
||||||
className="w-full px-3 py-1.5 bg-indigo-600 text-white text-sm font-bold rounded-lg hover:bg-indigo-700 disabled:opacity-50 shadow-sm"
|
className="w-full px-3 py-1.5 bg-indigo-600 text-white text-sm font-bold rounded-lg hover:bg-indigo-700 disabled:opacity-50 shadow-sm"
|
||||||
>
|
>
|
||||||
{isSendingRelease ? 'Sende...' : 'Anfrage-E-Mails jetzt senden'}
|
{isSendingRelease ? 'Sende...' : 'Anfrage-E-Mails jetzt senden'}
|
||||||
</button>
|
</button>
|
||||||
{!reminderResult && <p className="text-center text-[10px] mt-2 text-red-500">Bitte erst Tool 3 Analyse starten.</p>}
|
|
||||||
{!isGmailAuthenticated && <p className="text-center text-[10px] mt-2 text-red-500">Gmail nicht verbunden.</p>}
|
{!isGmailAuthenticated && <p className="text-center text-[10px] mt-2 text-red-500">Gmail nicht verbunden.</p>}
|
||||||
{releaseMessage && <p className="text-center text-xs mt-2 font-bold text-indigo-600">{releaseMessage}</p>}
|
{releaseMessage && <p className="text-center text-xs mt-2 font-bold text-indigo-600">{releaseMessage}</p>}
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
Reference in New Issue
Block a user