diff --git a/Layout/default/Preordercampaign/Form.php b/Layout/default/Preordercampaign/Form.php
index c141cf45b..f993dc2d6 100644
--- a/Layout/default/Preordercampaign/Form.php
+++ b/Layout/default/Preordercampaign/Form.php
@@ -502,6 +502,43 @@
+
+
+
+
+
diff --git a/application/Preordercampaign/PreordercampaignController.php b/application/Preordercampaign/PreordercampaignController.php
index 70a3bdbc1..d81672df0 100644
--- a/application/Preordercampaign/PreordercampaignController.php
+++ b/application/Preordercampaign/PreordercampaignController.php
@@ -517,7 +517,6 @@ class PreordercampaignController extends mfBaseController {
if($statusmailtemplate) {
$statusmailtemplate->update($mt_data);
} else {
-
$statusmailtemplate = PreordercampaignStatusnotificationMailtemplate::create($mt_data);
}
}
@@ -528,12 +527,12 @@ class PreordercampaignController extends mfBaseController {
}
foreach($mailtemplates_delete as $mt_code) {
- $status_mt = PreordercampaignStatusnotificationMailtemplate::getFirst(["preordercampaign_id" => $campaign->id, "status_code" => $mt_code]);
- if($status_mt) {
- $status_mt->delete();
- }
- }
+ $status_mt = null;
+ if(preg_match("/^\d+$/", $mt_code)) $status_mt = PreordercampaignStatusnotificationMailtemplate::getFirst(["preordercampaign_id" => $campaign->id, "status_code" => $mt_code]);
+ else $status_mt = PreordercampaignStatusnotificationMailtemplate::getFirst(["preordercampaign_id" => $campaign->id, "logical_config" => json_encode(["type" => $mt_code])]);
+ if($status_mt) $status_mt->delete();
+ }
$this->layout()->setFlash("Vorbestellkampagne erfolgreich gespeichert.", "success");
diff --git a/scripts/preorder/custom_notifications/init.php b/scripts/preorder/custom_notifications/init.php
new file mode 100644
index 000000000..ff5583228
--- /dev/null
+++ b/scripts/preorder/custom_notifications/init.php
@@ -0,0 +1,83 @@
+id);
+define("INTERNAL_USER_USERNAME", $me->username);
+define("MFBASE_BYPASS_LOGIN", true);
+
+$db = FronkDB::singleton();
+$db = $db->link;
+
+function logMessage($message): void {
+ echo "[" . date("Y-m-d H:i:s") . "] " . $message . "\n";
+}
+
+function sendPreorderEmail($mailtemplate, $preordercampaign, $preorder, $email_type = "300-custom") {
+ $data = ["preorder" => $preorder->getPropertiesAsArray()];
+
+ foreach(["adb_hausnummer", "adb_wohneinheit"] as $prop) {
+ $obj = $preorder->getProperty($prop);
+ if($obj) {
+ $obj_data = (array) $obj->data;
+ unset($obj->data, $obj->_old_data, $obj->db, $obj->log);
+ $data[$prop] = array_merge((array) $obj, $obj_data);
+ } else {
+ $data[$prop] = null;
+ }
+ }
+
+ $replacers = [];
+ foreach($data as $values) {
+ foreach($values as $key => $value) {
+ if($key[0] !== "\0") $replacers[$key] = $value;
+ }
+ }
+
+ $subject = $mailtemplate->getVariableReplacedSubject($replacers);
+ $body = "";
+ $body .= $mailtemplate->renderBody($replacers);
+ $body .= "\n";
+
+ $body_type = $mailtemplate->body_html ? "html" : "text";
+
+ $email = new Emailnotification();
+ $email->setSubject($subject);
+ if($body_type == "html") {
+ $email->setHtmlBody($body);
+ } else {
+ $email->setBody($body);
+ }
+ $email->setFrom($preordercampaign->from_email, $preordercampaign->from_email_name);
+ $email->setTo($preorder->email);
+ $email->setHeader("X-".ucfirst(MFAPPNAME)."-pid", $preorder->id);
+ $email->setHeader("X-".ucfirst(MFAPPNAME)."-ps", '300-custom');
+ // add attachments
+ try {
+ foreach ($mailtemplate->files as $file) {
+ if (!$file->filename || !$file->file_id || !$file->file->store_filename) continue;
+ logMessage("Adding attachment: " . $file->filename);
+ $email->addAttachment($file->file->getFullPath(), null, $file->filename, $file->file->mimetype ?: null);
+ }
+ $email->send();
+ logMessage("Email sent successfully for Preorder ID: $preorder->id, Campaign: $preordercampaign->name, Type: $email_type");
+ $psn_log = PreorderStatusnotificationLog::create([
+ "preorder_id" => $preorder->id,
+ "email_type" => $email_type,
+ "email" => $preorder->email,
+ ]);
+ $psn_log->save();
+ } catch (Exception $e) {
+ logMessage("Error sending email for Preorder ID $preorder->id: " . $e->getMessage());
+ }
+
+}
\ No newline at end of file
diff --git a/scripts/preorder/send-preorder-custom-300-notification.php b/scripts/preorder/custom_notifications/send-preorder-custom-300-notification.php
similarity index 51%
rename from scripts/preorder/send-preorder-custom-300-notification.php
rename to scripts/preorder/custom_notifications/send-preorder-custom-300-notification.php
index c0b191ea2..c2074a683 100644
--- a/scripts/preorder/send-preorder-custom-300-notification.php
+++ b/scripts/preorder/custom_notifications/send-preorder-custom-300-notification.php
@@ -1,22 +1,7 @@
id);
-define("INTERNAL_USER_USERNAME", $me->username);
-define("MFBASE_BYPASS_LOGIN", true);
+global $db;
+require_once 'init.php';
$sql = "WITH first_status_300_plus AS (
SELECT
@@ -54,11 +39,8 @@ WHERE p.type = 'order'
AND psnl.id IS NULL -- No existing '300-custom' notification
ORDER BY fs.first_status_300_timestamp ASC;";
-$db = FronkDB::singleton();
-$db = $db->link;
-
$res = $db->query($sql);
-// exit if no results
+
if ($res->num_rows == 0) {
logMessage("No preorders found for custom 300 notification.");
exit;
@@ -68,12 +50,7 @@ while($row = $res->fetch_assoc()) {
logMessage("Processing Preorder ID: " . $row['id']);
$preorder_id = $row['id'];
$campaign_name = $row['campaign_name'];
- $current_status_code = $row['current_status_code'];
- $current_status_name = $row['current_status_name'];
- $first_reached_300 = $row['first_reached_300_plus'];
- $days_since_first_300 = $row['days_since_first_300'];
$mailtemplate_id = $row['mailtemplate_id'];
- $logical_config = json_decode($row['logical_config'], true);
$preorder = new Preorder($preorder_id);
if (!$preorder || !$preorder->id) {
@@ -95,44 +72,11 @@ while($row = $res->fetch_assoc()) {
logMessage("Preparing to send email for Preorder ID: $preorder_id, Campaign: $campaign_name");
+ sendPreorderEmail(
+ $mailtemplate,
+ $preordercampaign,
+ $preorder,
+ "300-custom"
+ );
- $subject = $mailtemplate->subject;
- $body = "";
- $body .= $mailtemplate->renderBody();
- $body .= "\n";
-
- $body_type = $mailtemplate->body_html ? "html" : "text";
-
- $email = new Emailnotification();
- $email->setSubject($subject);
- if($body_type == "html") {
- $email->setHtmlBody($body);
- } else {
- $email->setBody($body);
- }
- $email->setFrom($preordercampaign->from_email, $preordercampaign->from_email_name);
- $email->setTo($preorder->email);
- $email->setHeader("X-".ucfirst(MFAPPNAME)."-pid", $preorder->id);
- $email->setHeader("X-".ucfirst(MFAPPNAME)."-ps", '300-custom');
- // add attachments
- try {
- foreach ($mailtemplate->files as $file) {
- if (!$file->filename || !$file->file_id || !$file->file->store_filename) continue;
- logMessage("Adding attachment: " . $file->filename);
- $email->addAttachment($file->file->getFullPath(), null, $file->filename, $file->file->mimetype ?: null);
- }
- $email->send();
- logMessage("Email sent successfully for Preorder ID: $preorder_id");
- $psn_log = PreorderStatusnotificationLog::create([
- "preorder_id" => $preorder_id,
- "email_type" => "300-custom",
- "email" => $preorder->email,
- ]);
- $psn_log->save();
- // Log the notification
- $log = new PreorderStatusnotificationLog();
-
- } catch (Exception $e) {
- logMessage("Error sending email for Preorder ID $preorder_id: " . $e->getMessage());
- }
}
\ No newline at end of file
diff --git a/scripts/preorder/custom_notifications/send-preorder-custom-new-noticiation.php b/scripts/preorder/custom_notifications/send-preorder-custom-new-noticiation.php
new file mode 100644
index 000000000..6c8097d78
--- /dev/null
+++ b/scripts/preorder/custom_notifications/send-preorder-custom-new-noticiation.php
@@ -0,0 +1,84 @@
+query($sql);
+
+if ($res->num_rows == 0) {
+ logMessage("No preorders found for custom 300-new-order notification.");
+ exit;
+}
+
+logMessage("Found " . $res->num_rows . " preorders for 300-custom-new-order notification.");
+
+while($row = $res->fetch_assoc()) {
+ logMessage("Processing Preorder ID: " . $row['id']);
+ $preorder_id = $row['id'];
+ $campaign_name = $row['campaign_name'];
+ $mailtemplate_id = $row['mailtemplate_id'];
+ $wohneinheit_status_code = $row['wohneinheit_status_code'];
+ $wohneinheit_status_name = $row['wohneinheit_status_name'];
+
+ logMessage("Wohneinheit Status: {$wohneinheit_status_code} ({$wohneinheit_status_name})");
+
+ $preorder = new Preorder($preorder_id);
+ if (!$preorder || !$preorder->id) {
+ logMessage("Preorder with ID $preorder_id not found. Skipping.");
+ continue;
+ }
+
+ $preordercampaign = new Preordercampaign($preorder->preordercampaign_id);
+ if (!$preordercampaign || !$preordercampaign->id) {
+ logMessage("Preordercampaign with ID {$preorder->preordercampaign_id} not found. Skipping.");
+ continue;
+ }
+
+ $mailtemplate = new Mailtemplate($mailtemplate_id);
+ if(!$mailtemplate || !$mailtemplate->id) {
+ logMessage("Mailtemplate with ID $mailtemplate_id not found. Skipping.");
+ continue;
+ }
+
+ logMessage("Preparing to send email for Preorder ID: $preorder_id, Campaign: $campaign_name");
+
+ sendPreorderEmail(
+ $mailtemplate,
+ $preordercampaign,
+ $preorder,
+ "300-custom-new-order"
+ );
+}
+
+logMessage("Completed processing 300-custom-new-order notifications.");
+
+?>
\ No newline at end of file