Added Service PIN PDF+Email to Address

This commit is contained in:
Frank Schubert
2025-04-03 17:05:13 +02:00
parent cfe2924961
commit bcc42d5b9c
5 changed files with 209 additions and 2 deletions

View File

@@ -182,6 +182,7 @@
<table class="table table-striped table-hover">
<tr>
<th>Typ</th>
<th></th>
<th>Kundennummer</th>
<th>FIBU Konten</th>
<th>Firma</th>
@@ -207,6 +208,7 @@
<?php else: ?>
<td></td>
<?php endif; ?>
<td><?=($address->billing_type == "sepa") ? " <i class='far fa-money-from-bracket text-success' title='Bankeinzug aktiviert'></i>" : ""?></td>
<td>
<a href="<?=self::getUrl("Address", "view", ["id" => $address->id, 's' => $pagination['start']])?>">
<?=$address->customer_number?>
@@ -215,7 +217,8 @@
</td>
<td>
<?php if($address->fibu_account_number): ?>
<span title="Verrechnungskonto"><?=$address->fibu_account_number?></span><?=($address->fibu_primary_account) ? " <i class='fas fa-check text-success' title='Primäres Verrechnungskonto'></i>" : ""?>
<span title="Verrechnungskonto"><?=$address->fibu_account_number?></span>
<?=($address->fibu_primary_account) ? " <i class='fas fa-check text-success' title='Primäres Verrechnungskonto'></i>" : ""?>
<?php endif; ?>
<?php if($address->fibu_supplier_number): ?>
<br /><span title="Lieferantenkonto"><?=$address->fibu_supplier_number?></span>
@@ -232,6 +235,7 @@
<td style="text-align: left; letter-spacing: 4px; font-size: 1.1em;">
<a href="<?=self::getUrl("User", "Index", ["filter" => ["address_id" => $address->id]])?>" title="Benutzer anzeigen"><i class="fas fa-users"></i></a>
<a href="<?=self::getUrl("Address", "view", ["id" => $address->id, 's' => $pagination['start']])?>"><i class="far fa-eyes" title="Anzeigen"></i></a>
<a href="<?=self::getUrl("Address", "sendServicePin", ["id" => $address->id])?>" onclick="if(!confirm('Soll der Service-PIN an den Kunden gesendet werden?')) return false;"><i class="fas fa-paper-plane" title="Service PIN als PDF per Email an Kunde"></i></a>
<a href="#" onclick="openCreateTicketModal('<?=$address->getCompanyOrName()?>', '<?=$address->customer_number?>', '<?=$address->street . ', ' . $address->zip . ' ' . $address->city?>', '<?=$address->phone?>', '<?=$address->email?>', '<?=$address->spin?>')" title="Störungs-Ticket erstellen" class="text-warning"><i class="fas fa-exclamation-triangle"></i></a>
<a href="<?=self::getUrl("Address", "edit", ["id" => $address->id, 's' => $pagination['start']])?>"><i class="far fa-edit" title="Bearbeiten"></i></a>
<a href="<?=self::getUrl("Address", "delete", ["id" => $address->id, 's' => $pagination['start']])?>" onclick="if(!confirm('Person/Firma wirklich löschen?')) return false;" class="text-danger" title="Löschen"><i class="fas fa-trash"></i></a>

View File

@@ -0,0 +1,97 @@
<?php
$this->setReturnValue([
'filename' => "xinon_Service_PIN_".$owner->customer_number.".pdf"
]);
?>
<!DOCTYPE html>
<html>
<head>
<title>Wichtige Kundeninformation - Service PIN</title>
<meta charset="utf-8" />
<link href="<?=$ressourcePathPrefix?>fontawesome/css/all.min.css" rel="stylesheet" type="text/css" />
<!--<link href="<?=$ressourcePathPrefix?>assets/css/bootstrap.min.css" rel="stylesheet" type="text/css" />-->
<link href="<?=$ressourcePathPrefix?>assets/css/print.css" rel="stylesheet" type="text/css" />
</head>
<body>
<div style="border-top: 1pt solid #000">
&nbsp;
</div>
<table style="width: 100%">
<tr>
<td style="width:50%">
<img height="96px" src="<?=$ressourcePathPrefix?>assets/images/xinon-full.png" />
</td>
<td style="width:50%; text-align: right;">
<table style="text-align: left; width:100%">
<tr>
<td style="text-align: right;">Ihre Kundennummer:</td>
<td style="padding-left: 4pt;"><?=$owner->customer_number?></td>
</tr>
</table>
</td>
</tr>
</table>
<div style="height:24pt;"></div>
<h3>Wichtige Kundeninformation</h3>
<div style="height:24pt;"></div>
<div>
<?php if($owner->company): ?>
<?=nl2br($owner->company)?><br />
<?php endif; ?>
<?php if($owner->getFullName()): ?>
<?=$owner->getFullName()?><br />
<?php endif; ?>
<?=$owner->street?><br />
<?=$owner->zip?> <?=$owner->city?>
</div>
<div style="height:24pt;"></div>
<div>
<p>Sehr geehrte Damen und Herren,</p>
<p>wir freuen uns, dass Sie sich für ein Produkt von Xinon bzw. einem unserer Partner
entschieden haben.</p>
<p>Nachfolgend finden Sie Ihren persönlichen Service-PIN.</p>
</div>
<div style="height:1.5pt;"></div>
<div style="background-color: #ccc;">
<p style="padding-top: 4pt; padding-bottom: 5pt; padding-left: 4pt;"><strong>Ihr persönlicher Service-PIN lautet: <?=$owner->spin?></strong></p>
</div>
<div style="height:1.5pt;"></div>
<div>
<p>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 <strong>persönlichen Service-PIN</strong> fragen.</p>
</div>
<div style="height:32pt;"></div>
<div>
<p><strong>Sollten Sie noch Fragen haben erreichen Sie uns per Mail (office@xinon.at) oder
telefonisch unter der Rufnummer <span style="white-space: nowrap">03115 40800.</span></strong></p>
</div>
<div style="height:32pt;"></div>
<div>
<p>Mit besten Grüßen,</p>
<p>Ihr XINON Team</p>
</div>
</body>
</html>

View File

@@ -0,0 +1,21 @@
<?php
$this->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

View File

@@ -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 = "";

View File

@@ -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");
}
}