From a40dc708fabb84fcbc5433393d569b55fce33c1d Mon Sep 17 00:00:00 2001 From: Frank Schubert Date: Fri, 27 Aug 2021 19:42:34 +0200 Subject: [PATCH] Added buttons to Order/Index --- ...w_order.pdf.php => new_order_spin.pdf.php} | 0 Layout/default/Order/Index.php | 31 ++++++ application/Address/AddressController.php | 2 + application/Order/OrderController.php | 102 +++++++++++++++++- lib/PdfForm/PdfForm.php | 64 +++++++++++ lib/mvcfronk/mfLayout/mfLayout.php | 10 +- 6 files changed, 199 insertions(+), 10 deletions(-) rename Layout/default/Emailtemplates/attachments/{new_order.pdf.php => new_order_spin.pdf.php} (100%) create mode 100644 lib/PdfForm/PdfForm.php diff --git a/Layout/default/Emailtemplates/attachments/new_order.pdf.php b/Layout/default/Emailtemplates/attachments/new_order_spin.pdf.php similarity index 100% rename from Layout/default/Emailtemplates/attachments/new_order.pdf.php rename to Layout/default/Emailtemplates/attachments/new_order_spin.pdf.php diff --git a/Layout/default/Order/Index.php b/Layout/default/Order/Index.php index bb1ac768b..02cc272b5 100644 --- a/Layout/default/Order/Index.php +++ b/Layout/default/Order/Index.php @@ -51,6 +51,35 @@ BNC + + products)) { + foreach($order->products as $product) { + if(is_array($product->product->attributes) && count($product->product->attributes)) { + if(array_key_exists("hw_only", $product->product->attributes)) { + if($product->product->attributes["hw_only"]->value) { + $hw = true; + } + } + if(array_key_exists("voip_chan", $product->product->attributes)) { + if($product->product->attributes["voip_chan"]->value) { + $voip = true; + } + } + if($hw && $voip_chan) { + break; + } + } + } + } + + ?> + " : ""?> + " : ""?> owner->getCompanyOrName())?> @@ -70,6 +99,8 @@ edit)?> editor->name?> + $order->id])?>"> + $order->id])?>" onclick="if(!confirm('Soll der Service-PIN an den Vertragsinhaber gesendet werden?')) return false;"> $order->id])?>"> $order->id])?>" onclick="if(!confirm('Bestellung wirklich löschen?')) return false;" class="text-danger" title="Löschen"> diff --git a/application/Address/AddressController.php b/application/Address/AddressController.php index 90ccdf67e..e7ce3497f 100644 --- a/application/Address/AddressController.php +++ b/application/Address/AddressController.php @@ -140,5 +140,7 @@ class AddressController extends mfBaseController { $this->layout()->setFlash("Adresse erfolgreich gespeichert.", "success"); $this->redirect("Address", "Edit", ['id' => $new_id]); } + + } \ No newline at end of file diff --git a/application/Order/OrderController.php b/application/Order/OrderController.php index 992ce5cd1..e9e23dbca 100644 --- a/application/Order/OrderController.php +++ b/application/Order/OrderController.php @@ -383,15 +383,18 @@ class OrderController extends mfBaseController { if($owner->save()) { // render service pin PDF - $pdf = new Layout(); + $pdf = new PdfForm("Emailtemplates/attachments/new_order_spin.pdf", ["owner" => $owner, "order" => $order]); + $pdfpath = $pdf->render(); + $tvalue = $pdf->getReturnedValues(); + $pdfname = $tvalue['filename']; + + /*$pdf = new Layout(); $pdf->setTemplate("Emailtemplates/attachments/new_order.pdf"); $pdf->set("ressourcePathPrefix", BASEDIR."/public/"); $pdf->set("owner", $owner); - $pdf->set("order", $order); + $pdf->set("order", $order);*/ + - $pdfpath = $pdf->renderPDF(); - $tvalue = $pdf->getReturnedValue(); - $pdfname = $tvalue['filename']; //var_dump($pdfpath);exit; @@ -513,5 +516,94 @@ class OrderController extends mfBaseController { $this->redirect("Order"); } + protected function downloadServicePinAction() { + $order_id = $this->request->id; + if(!is_numeric($order_id) || !$order_id) { + $this->layout->setFlash("Adresse nicht gefunden!"); + $this->redirect("Order"); + } + + $order = new Order($order_id); + if(!$order->id) { + $this->layout->setFlash("Bestellung nicht gefunden!"); + $this->redirect("Order"); + } + + $owner = $order->owner; + + if(!$owner->customer_number || !$owner->spin) { + $this->layout->setFlash("Vertragsinhaber hat keine Kundennummer oder Service PIN!", "error"); + $this->redirect("Order"); + } + + // render service pin PDF + $pdf = new PdfForm("Emailtemplates/attachments/new_order_spin.pdf", ["owner" => $owner, "order" => $order]); + $pdfpath = $pdf->render(); + $tvalue = $pdf->getReturnedValues(); + $pdfname = $tvalue['filename']; + $pdf->download($pdfname); + + } + + protected function sendServicePinAction() { + $order_id = $this->request->id; + if(!is_numeric($order_id) || !$order_id) { + $this->layout->setFlash("Adresse nicht gefunden!"); + $this->redirect("Order"); + } + + $order = new Order($order_id); + if(!$order->id) { + $this->layout->setFlash("Bestellung nicht gefunden!"); + $this->redirect("Order"); + } + + $owner = $order->owner; + + if(!$owner->customer_number || !$owner->spin) { + $this->layout->setFlash("Vertragsinhaber hat keine Kundennummer oder Service PIN!", "error"); + $this->redirect("Order"); + } + + // render service pin PDF + $pdf = new PdfForm("Emailtemplates/attachments/new_order_spin.pdf", ["owner" => $owner, "order" => $order]); + $pdfpath = $pdf->render(); + $tvalue = $pdf->getReturnedValues(); + $pdfname = $tvalue['filename']; + + // TODO template rendern auslagern nach Emailtempate klasse + $tpl = new Layout(); + $tpl->setTemplate("Emailtemplates/customer/new_order"); + $tpl->set("owner", $owner); + $body = $tpl->render(); + + $values = $tpl->getReturnedValue(); + + //var_dump($values);exit; + + $subject = $values['subject']; + $from = $values['from_email']; + $from_name = $values['from_email_name']; + $to = $owner->email; + + if(!$subject || !$from || !$from_name || !$to) { + $this->log->warn("Service PIN Email not sent. (subject: '$subject', from: '$from', from_email: '$from_name', to: '$to')"); + $this->layout()->setFlash("Beim Email versenden ist ein Fehler aufgetragen.", "error"); + $this->redirect("Order"); + } else { + $email = new Emailnotification(); + $email->setSubject($subject); + $email->setBody($body); + $email->setFrom($from, $from_name); + $email->setTo($to); + $email->setHeader("X-xinon-oid", $order->id); + $email->setHeader("X-xinon-pid", $product->id); + $email->addAttachment($pdfpath, null, $pdfname, "application/pdf"); + $email->send(); + + $this->layout()->setFlash("Service PIN wurde erfolgreich verschickt..", "success"); + $this->redirect("Order"); + } + } } \ No newline at end of file diff --git a/lib/PdfForm/PdfForm.php b/lib/PdfForm/PdfForm.php new file mode 100644 index 000000000..ac0b5ceae --- /dev/null +++ b/lib/PdfForm/PdfForm.php @@ -0,0 +1,64 @@ +log = mfLoghandler::singleton(); + $this->layout = new Layout(); + $this->template = $template; + $this->variables = $variables; + } + + + public function render() { + $this->layout->setTemplate($this->template); + $this->layout->set("ressourcePathPrefix", BASEDIR."/public/"); + foreach($this->variables as $name => $value) { + $this->layout->set($name, $value); + } + + $fullpath = $this->layout->renderPDF(); + $this->fullpath = $fullpath; + $this->returnValues = $this->layout->getReturnedValue(); + + return $fullpath; + } + + public function download($filename = false) { + if(!$this->fullpath) { + $this->render(); + } + + $filepath = $this->fullpath; + + if (!$filename && strpos($filepath, "/") !== false) { + $path_parts = explode("/", $filepath); + $filename = end($path_parts); + } + + header('Content-Type: application/octet-stream'); + header('Content-disposition: attachment; filename="'.$filename.'"'); + header('Content-Transfer-Encoding: binary'); + header('Cache-Control: must-revalidate, post-check=0, pre-check=0'); + header('Content-Type: ' . mime_content_type($filepath)); + header("Content-Length: " . filesize($filepath)); + + readfile($filepath); + exit; + } + + public function getFullPath() { + return $this->fullpath; + } + + public function getReturnedValues() { + return $this->returnValues; + } + +} \ No newline at end of file diff --git a/lib/mvcfronk/mfLayout/mfLayout.php b/lib/mvcfronk/mfLayout/mfLayout.php index 6694e363e..57fdcd5f9 100644 --- a/lib/mvcfronk/mfLayout/mfLayout.php +++ b/lib/mvcfronk/mfLayout/mfLayout.php @@ -76,7 +76,7 @@ class mfLayout { $html = $this->render(); if (!$filename) - $filename = date('U') . ".pdf"; + $filename = date('U') . "-" . rand(1000, 9999) . ".pdf"; $wk = new mfWkhtmltopdf($html); @@ -108,10 +108,10 @@ class mfLayout { header('Content-disposition: attachment; filename=' . $filename); header('Content-Transfer-Encoding: binary'); header('Cache-Control: must-revalidate, post-check=0, pre-check=0'); - header('Content-Type: ' . mime_content_type($filename)); - header("Content-Length: " . filesize($filename)); - - readfile($file); + header('Content-Type: ' . mime_content_type($filepath)); + header("Content-Length: " . filesize($filepath)); + + readfile($filepath); exit; }