From bcc42d5b9c45c0da86283b5557b4b51c3fae071e Mon Sep 17 00:00:00 2001 From: Frank Schubert Date: Thu, 3 Apr 2025 17:05:13 +0200 Subject: [PATCH] Added Service PIN PDF+Email to Address --- Layout/default/Address/Index.php | 6 +- .../attachments/address_spin.pdf.php | 97 +++++++++++++++++++ .../default/Emailtemplates/customer/spin.php | 21 ++++ application/Address/Address.php | 60 +++++++++++- application/Address/AddressController.php | 27 ++++++ 5 files changed, 209 insertions(+), 2 deletions(-) create mode 100644 Layout/default/Emailtemplates/attachments/address_spin.pdf.php create mode 100644 Layout/default/Emailtemplates/customer/spin.php diff --git a/Layout/default/Address/Index.php b/Layout/default/Address/Index.php index 5029c3f5c..e1ca5736e 100644 --- a/Layout/default/Address/Index.php +++ b/Layout/default/Address/Index.php @@ -182,6 +182,7 @@ + @@ -207,6 +208,7 @@ +
Typ Kundennummer FIBU Konten Firma billing_type == "sepa") ? " " : ""?> $address->id, 's' => $pagination['start']])?>"> customer_number?> @@ -215,7 +217,8 @@ fibu_account_number): ?> - fibu_account_number?>fibu_primary_account) ? " " : ""?> + fibu_account_number?> + fibu_primary_account) ? " " : ""?> fibu_supplier_number): ?>
fibu_supplier_number?> @@ -232,6 +235,7 @@
["address_id" => $address->id]])?>" title="Benutzer anzeigen"> $address->id, 's' => $pagination['start']])?>"> + $address->id])?>" onclick="if(!confirm('Soll der Service-PIN an den Kunden gesendet werden?')) return false;"> $address->id, 's' => $pagination['start']])?>"> $address->id, 's' => $pagination['start']])?>" onclick="if(!confirm('Person/Firma wirklich löschen?')) return false;" class="text-danger" title="Löschen"> diff --git a/Layout/default/Emailtemplates/attachments/address_spin.pdf.php b/Layout/default/Emailtemplates/attachments/address_spin.pdf.php new file mode 100644 index 000000000..838700416 --- /dev/null +++ b/Layout/default/Emailtemplates/attachments/address_spin.pdf.php @@ -0,0 +1,97 @@ +setReturnValue([ + 'filename' => "xinon_Service_PIN_".$owner->customer_number.".pdf" +]); +?> + + + + + Wichtige Kundeninformation - Service PIN + + + + + + + +
+   +
+ + + + + + +
+ + + + + + + +
Ihre Kundennummer:customer_number?>
+
+ + +
+ +

Wichtige Kundeninformation

+ +
+ +
+ company): ?> + company)?>
+ + getFullName()): ?> + getFullName()?>
+ + street?>
+ zip?> city?> +
+ +
+ +
+

Sehr geehrte Damen und Herren,

+

wir freuen uns, dass Sie sich für ein Produkt von Xinon bzw. einem unserer Partner + entschieden haben.

+

Nachfolgend finden Sie Ihren persönlichen Service-PIN.

+
+ +
+ +
+

Ihr persönlicher Service-PIN lautet: spin?>

+
+ +
+ +
+

Gemäß der EU Datenschutzverordnung sind wir dazu verpflichtet, vor der Beauskunftung + von persönlichen Daten eine Kundenidentifizierung vorzunehmen. Daher werden wir und + unsere Partner Sie bei zukünftigen Kontaktaufnahmen (z.B. vergessenen Passwörtern, + Rechnungsauskünfte, etc) nach Ihrem persönlichen Service-PIN fragen.

+
+ +
+ +
+

Sollten Sie noch Fragen haben erreichen Sie uns per Mail (office@xinon.at) oder + telefonisch unter der Rufnummer 03115 40800.

+
+ +
+ +
+

Mit besten Grüßen,

+ +

Ihr XINON Team

+
+ + + diff --git a/Layout/default/Emailtemplates/customer/spin.php b/Layout/default/Emailtemplates/customer/spin.php new file mode 100644 index 000000000..58e713cb1 --- /dev/null +++ b/Layout/default/Emailtemplates/customer/spin.php @@ -0,0 +1,21 @@ +setReturnValue([ + 'subject' => "Ihr persönlicher XINON Service-Pin", + 'from_email' => "office@xinon.at", + 'from_email_name' => "XINON Kundenservice" +]); +?> +Sehr geehrte Damen und Herren, + +im Anhang finden Sie Ihren persönlichen Service-PIN. + +Mit besten Grüßen, + +Ihr XINON Team +-- +XINON GmbH + +p: +43 3115 40 800 +f: +43 3115 40 800 10 +a: Fladnitz im Raabtal 150, 8322 Studenzen, AUSTRIA +w: www.xinon.at  e: office@xinon.at diff --git a/application/Address/Address.php b/application/Address/Address.php index 5b6785145..c0dc8a2b4 100644 --- a/application/Address/Address.php +++ b/application/Address/Address.php @@ -233,7 +233,65 @@ class Address extends mfBaseModel { return true; } - + + public function sendSpinEmail() { + $spin_pdf_template = "Emailtemplates/attachments/address_spin.pdf"; + $new_order_template = "Emailtemplates/customer/spin"; + + $pdf_vars = [ + 'owner' => $this + ]; + + + /*if(TT_CUSTOM_ORDER_PDF_PER_NETOWNER) { + $terms = $this->getTerminations(); + if(is_array($terms) && count($terms) && $terms[0]->id) { + $netowner = $terms[0]->building->network->owner; + } else { + $netowner = new Address(TT_CUSTOM_ORDER_PDF_DEFAULT_OWNER_ID); + } + $pdf_vars['netowner'] = $netowner; + }*/ + + // render service pin PDF + $pdf = new PdfForm($spin_pdf_template, $pdf_vars); + $pdfpath = $pdf->render(); + $tvalue = $pdf->getReturnedValues(); + $pdfname = $tvalue['filename']; + + // send email to customer + $tpl = new Layout(); + $tpl->setTemplate($new_order_template); + + foreach($pdf_vars as $name => $val) { + $tpl->set($name, $val); + } + + $body = $tpl->render(); + $values = $tpl->getReturnedValue(); + + $subject = $values['subject']; + $from = $values['from_email']; + $from_name = $values['from_email_name']; + $to = $this->email; + + if(!$subject || !$from || !$from_name || !$to) { + $this->log->warn("Service PIN copy Email not sent. (subject: '$subject', from: '$from_name', from_email: '$from', to: '$to')"); + } else { + $email = new Emailnotification(); + $email->setSubject($subject); + $email->setBody($body); + $email->setFrom($from, $from_name); + $email->setTo($to); + $email->setHeader("X-".MFAPPNAME."-Oid", $this->id); + $email->addAttachment($pdfpath, null, $pdfname, "application/pdf"); + $email->send(); + $this->log->info(__CLASS__."::sendSpinEmail(): Sending SPIN for ".$this->getCompanyOrName()." (".$this->id.")"); + } + + return true; + } + public function getFullName() { // Assumes "Firma1 Firma2" or "firstname lastname" as readable form $name = ""; diff --git a/application/Address/AddressController.php b/application/Address/AddressController.php index cdb9f1543..716417a21 100644 --- a/application/Address/AddressController.php +++ b/application/Address/AddressController.php @@ -705,4 +705,31 @@ class AddressController extends mfBaseController { Helper::renderVue($this,"AddressTickets", "Tickets von Kunden: " . $address->getCompanyOrName() . '(' . $address->customer_number . ')', ["TICKETS" => $tickets]); } + + protected function sendServicePinAction() { + $address_id = $this->request->id; + if(!is_numeric($address_id) || !$address_id) { + $this->layout->setFlash("Adresse nicht gefunden!", "error"); + $this->redirect("Address"); + } + + $address = new Address($address_id); + if(!$address->id) { + $this->layout->setFlash("Adresse nicht gefunden!", "error"); + $this->redirect("Address"); + } + + if(!$address->customer_number || !$address->spin) { + $this->layout->setFlash("Kunde hat keine Kundennummer oder keinen Service PIN!", "error"); + $this->redirect("Address"); + } + + if($address->sendSpinEmail()) { + $this->layout()->setFlash("Service PIN wurde erfolgreich versendet.", "success"); + } else { + $this->layout()->setFlash("Fehler beim SPIN Versand!", "success"); + } + + $this->redirect("Address"); + } }