needlogin=true; $me = new User(); $me->loadMe(); $this->me = $me; $this->layout()->set("me",$me); if(!$me->is(["Admin", "salespartner"])) { $this->redirect("Dashboard"); } } protected function indexAction() { $this->layout()->setTemplate("Order/Index"); if($this->request->id && $this->me->is("Admin")) { $order = new Order($this->request->id); if($order->id) { $this->layout()->set("orders", [$order]); $this->layout()->set("highlight", $this->request->id); $this->layout()->set("mynetworks", NetworkModel::getAll()); if($this->request->addJournal) { $this->layout()->set("addJournal", true); } return true; } } $filter = []; $this->layout->set("filter", $this->request->filter); $filter = $this->getPreparedFilter($this->request->filter); // pagination defaults $pagination = []; $pagination['start'] = 0; $pagination['count'] = 20; $pagination['maxItems'] = 0; if(is_numeric($this->request->s)) { $pagination['start'] = intval($this->request->s); } $my_networks = []; if($this->me->is("Admin")) { $my_networks = NetworkModel::getAll(); $this->layout()->set("mynetworks", $my_networks); /* if(!count($filter)) { $this->layout()->set("orders", OrderModel::getAll()); return true; }*/ if($filter['network_id']) { //$this->layout()->set("orders", OrderModel::search(['network_id' => $filter['network_id']])); $my_networks = []; $my_networks[] = new Network($filter['network_id']); } } else { $my_networks = $this->me->myNetworks("salespartner"); if(array_key_exists("network_id", $filter)) { $use_filter_network = false; foreach($my_networks as $mn) { if($mn->id == $filter['network_id']) { $use_filter_network = true; continue; } } if($use_filter_network) { $my_networks = []; $my_networks[] = new Network($filter['network_id']); } } $this->layout()->set("mynetworks", $this->me->my_networks); } unset($filter['network_id']); // get Orders in my networks $my_network_ids = []; $orders = []; //var_dump($this->me->my_networks);exit; foreach($my_networks as $network) { $my_network_ids[] = $network->id; } $order_search = [ 'network_id' => $my_network_ids ]; if(is_array($filter) && count($filter)) { foreach($filter as $name => $value) { $order_search[$name] = $value; } } //var_dump($order_search);exit; $pagination['maxItems'] = OrderModel::count($order_search); foreach(OrderModel::search($order_search, $pagination) as $order) { if(!array_key_exists($order->id, $orders)) { $orders[$order->id] = $order; } } if(!array_key_exists("network_linked_status", $order_search)) { $lonelyOrders = []; unset($order_search["network_id"]); $order_search['product_id'] = null; // orders without a product if($this->me->isAdmin()) { if(!$this->request->filter['network_id']) { $lonelies = OrderModel::search($order_search); } } else { $order_search['create_by'] = $this->me->id; $lonelies = OrderModel::search($order_search); } foreach($lonelies as $order) { if(!array_key_exists($order->id, $orders)) { $lonelyOrders[$order->id] = $order; } } // orders with termination product not requiring termination_id $order_search['product_id'] = ">0"; $order_search['termination_id'] = null; if($this->me->isAdmin()) { if(!$this->request->filter['network_id']) { $lonelies = OrderModel::search($order_search); } } else { $order_search['create_by'] = $this->me->id; $lonelies = OrderModel::search($order_search); } foreach($lonelies as $order) { if(!array_key_exists($order->id, $orders)) { $o = new Order($order->id); $add = true; foreach($o->products as $p) { $attribs = $p->product->attributes; if(is_array($attribs) && count($attribs)) { if(array_key_exists(TT_ATTRIB_TERMINATION_REQUIRED_NAME, $attribs) && $attribs[TT_ATTRIB_TERMINATION_REQUIRED_NAME]->value == 1) { //$this->log->debug("found additional order where termination_required 0"); //$lonelyOrders[$order->id] = $order; $add = false; break; } } else { $add = true; } } if($add) { $lonelyOrders[$order->id] = $order; } //$lonelyOrders[$order->id] = $order; } } $this->layout()->set("lonelyOrders", $lonelyOrders); } $this->layout()->set("orders", $orders); $this->layout()->set("pagination", $pagination); } private function getPreparedFilter($filter) { $new_filter = []; if(is_array($filter) && count($filter)) { if(is_numeric($filter['networksection_id']) && $filter['networksection_id']) { $section = new Networksection($filter['networksection_id']); if($section->id) { $filter['network_id'] = $section->network_id; } } if(array_key_exists("termination_status", $filter)) { $status = $filter['termination_status']; if($status == "term_connected") { $new_filter["termination_status_code"] = ">=".TT_TERMSTATUS_CONNECTED; } if($status == "building_connected") { $new_filter["building_status_code"] = ">=".TT_BUILDINGSTATUS_CONNECTED; $new_filter["termination_status_code"] = "<".TT_TERMSTATUS_CONNECTED; } if($status == "pipework_needed") { $new_filter["building_status_code"] = "<".TT_BUILDINGSTATUS_CONNECTED; $new_filter["termination_status_code"] = "<".TT_TERMSTATUS_CONNECTED; } if($status == "systemowner_action_status" && $this->me->is("Admin")) { $new_filter['network_linked_status'] = []; foreach(NetworkModel::getAll() as $network) { if($network->sytemowner_action_status) { $new_filter['network_linked_status'][$network->id] = $network->sytemowner_action_status; } if(!count($new_filter['network_linked_status'])) { unset($new_filter['network_linked_status']); } } } } if(array_key_exists("finished", $filter)) { if($filter["finished"] == "1") { $new_filter["finish_date"] = true; } else { $new_filter["finish_date"] = false; } } //var_dump($new_filter);exit; foreach($filter as $name => $value) { $new_filter[$name] = $value; } } else { $new_filter["finish_date"] = false; } return $new_filter; } protected function addAction() { // TODO: filter by network permissions $this->layout()->setTemplate("Order/Form"); if($this->me->is("Admin")) { $this->layout()->set("addresses", AddressModel::search(['parents_only' => 1])); $this->layout()->set("products", ProductModel::getAll()); $this->layout()->set("terminations", TerminationModel::getAll()); } else { // get all salespartner addresses of my networks $network_ids = []; $addresses = []; // get users from salespartner addresses of my networks $users = []; foreach($this->me->my_networks as $network) { $network_ids[] = $network->id; $tmp_users = $network->getAddressUsersByAddresstype("salespartner"); foreach($tmp_users as $user) { if(!in_array($user->id, $users)) { $users[] = $user->id; } } } // get addresses from salespartner address' user ids $addresses = AddressModel::search(["create_by" => $users]); $this->layout()->set("addresses", $addresses); // get terminations in my networks $terms = TerminationModel::search(["network_id" => $network_ids]); $this->layout()->set("terminations", $terms); // get products assigned to my networks $products = []; foreach(ProductNetworkModel::search(["network_id" => $network_ids]) as $pn) { if(!array_key_exists($pn->product_id, $products)) $products[$pn->product_id] = $pn->product; } $this->layout()->set("products", $products); } } protected function editAction() { $order_id = $this->request->id; $order = new Order($order_id); if(!$order->id) { $this->layout()->setFlash("Bestellung nicht gefunden.", "error"); $this->redirect("Order"); } $this->layout()->set("order", $order); return $this->addAction(); } protected function saveAction() { $r = $this->request; //var_dump($r->products); //var_dump($r); //exit; $id = $r->id; if(is_numeric($id) && $id > 0) { $mode = "edit"; $order = new Order($id); if(!$order->id) { $this->layout()->setFlash("Bestellung nicht gefunden", "error"); $this->redirect("Order"); } } else { $id = false; $mode = "add"; } // validate owner $owner = false; /*if(!$r->owner_id) { $this->layout()->setFlash("Bitte Vertragsinhaber auswählen oder eintragen.", "error"); $this->layout()->set("order", $r); return $this->add(); }*/ if(is_numeric($r->owner_id) && $r->owner_id > 0) { $owner = new Address($r->owner_id); if(!$owner->id) { $this->layout()->setFlash("Ungültiger Vertragsinhaber.", "error"); $this->layout()->set("order", $r); return $this->add(); } } else { if(!$r->owner_company && !($r->owner_firstname && $r->owner_lastname)) { $this->layout()->setFlash("Fehler in Vertragsinhaber: Firmenname oder Vor- und Nachname benötigt."); $this->layout()->set("order", $r); return $this->add(); } foreach(["street", "zip", "city", "phone", "email"] as $required) { if(!$r->{"owner_$required"}) { $this->layout()->setFlash("Fehler in Vertragsinhaber: Bitte alle benötigten Felder ausfüllen."); $this->layout()->set("order", $r); return $this->add(); } } }/* else { $this->layout()->setFlash("Ungültiger Vertragsinhaber."); $this->layout()->set("order", $r); return $this->add(); }*/ // validate billindaddress $billingaddress = false; if($r->billingaddress_id) { // billingaddress can be empty if(is_numeric($r->billingaddress_id)) { $billingaddress = new Address($r->billingaddress_id); if(!$billingaddress->id) { $this->layout()->setFlash("Ungültiger Rechnungsempfänger.", "error"); $this->layout()->set("order", $r); return $this->add(); } } } // if any required part of new billingaddress is set $billingaddress_new = false; if(!$r->billingaddress_id && ($r->billing_company || $r->billing_firstname || $r->billing_lastname || $r->billing_street || $r->billing_zip || $r->billing_city || $r->billing_phone || $r->billing_email) ) { $billingaddress_new = true; if(!$r->billing_company && !($r->billing_firstname && $r->billing_lastname)) { $this->layout()->setFlash("Fehler in Rechnungsqmpfänger: Firmenname oder Vor- und Nachname benötigt."); $this->layout()->set("order", $r); return $this->add(); } foreach(["street", "zip", "city", "phone", "email"] as $required) { if(!$r->{"billing_$required"}) { $this->layout()->setFlash("Fehler in Rechnungsempfänger: Bitte alle benötigten Felder ausfüllen."); $this->layout()->set("order", $r); return $this->add(); } } } /*else { $this->layout()->setFlash("Ungültiger Rechnungsempfänger."); $this->layout()->set("order", $r); return $this->add(); }*/ // validate sepa if(!$r->billing_type) { $this->layout()->setFlash("Ungültige Verrechnungsart."); $this->layout()->set("order", $r); return $this->add(); } if($r->billing_type == "sepa") { foreach(['bank', 'owner', 'iban', 'bic'] as $required) { if(!$r->{"bank_account_$required"}) { $this->layout()->setFlash("Bitte Bankdaten für SEPA ausfüllen."); $this->layout()->set("order", $r); return $this->add(); } } } // create objects for saving (if new) but don't save yet $owner_data = []; $billing_data = []; $request = $r->get(); foreach($request as $field => $value) { $m = []; if(preg_match('/([a-z0-9]+)_(.+)/i', $field, $m)) { if($m[1] == "owner" && !$owner) { $owner_data[$m[2]] = $value; } if($m[1] == "billing" && !$billingaddress) { $billing_data[$m[2]] = $value; } } } if(!$owner) { $owner = AddressModel::create($owner_data); } if(!$billingaddress) { $billingaddress = AddressModel::create($billing_data); } // create or save Order object $order_data = []; if(is_numeric($r->owner_id)) { $order_data['owner_id'] = $r->owner_id; } if(is_numeric($r->billingaddress_id)) { $order_data['billingaddress_id'] = $r->billingaddress_id; } if($r->billing_type == "sepa") { $order_data['billing_type'] = "sepa"; } else { $order_data['billing_type'] = "invoice"; } $order_data['partner_number'] = $r->partner_number; $order_data['bank_account_bank'] = $r->bank_account_bank; $order_data['bank_account_owner'] = $r->bank_account_owner; $order_data['bank_account_iban'] = $r->bank_account_iban; $order_data['bank_account_bic'] = $r->bank_account_bic; $order_data['allow_contact'] = ($r->allow_contact) ? 1 : 0; $order_data['allow_spin'] = ($r->allow_spin) ? 1 : 0; $order_data['note'] = $r->note; $order_data['order_date'] = Layout::dateToInt($r->order_date); if($r->finish_after) { $order_data['finish_after'] = Layout::dateToInt($r->finish_after); if(!$r->finish_after_comment) { $this->layout()->setFlash("Bitte Verzögerungsgrund angeben.", "warn"); $this->layout()->set("order", $r); return $this->add(); } $order_data['finish_after_comment'] = $r->finish_after_comment; } $order_data['upgrade'] = 0; if($r->upgrade === "1") { $order_data['upgrade'] = 1; } $send_to_bill_email = false; $order_data['edit_by'] = $this->me->id; //var_dump($r); if($r->order_finished == "1" && $this->me->is("Admin", "netoperator")) { if($r->finish_date) { $order_data['finish_date'] = Layout::dateToInt($r->finish_date); } else { $order_data['finish_date'] = date("U"); } if(!$order->finish_date) { // first time finishing order $send_to_bill_email = true; } } //var_dump($order_data);exit; if($mode == "add") { $order = OrderModel::create($order_data); } else { $order->update($order_data); } /* var_dump($order); var_dump($owner); var_dump($billingaddress); exit;*/ if(!$owner || !$billingaddress) { $this->layout()->setFlash("Fehler beim Speichern", "error"); $this->layout()->set("order", $order); return $this->add(); } $new_id = $order->save(); if(!$new_id) { $this->layout()->setFlash("Fehler beim Speichern", "error"); $this->layout()->set("order", $order); return $this->add(); } // save owner and billingaddress if new if(!$r->owner_id) { $owner_id = $owner->save(); if(!$owner_id) { $this->layout()->setFlash("Fehler beim Speichern des Inhabers", "error"); $this->redirect("Order", "edit", ['id' => $new_id]); } $order->owner_id = $owner_id; $order->save(); } if($billingaddress_new) { $billingaddress_id = $billingaddress->save(); if(!$billingaddress_id) { $this->layout()->setFlash("Fehler beim Speichern des Rechnungsempfängers", "error"); $this->redirect("Order", "edit", ['id' => $new_id]); } // create addresstype (billing) $at = AddresstypeModel::create(['address_id' => $billingaddress_id, 'type' => "billing"]); $at->save(); $order->billingaddress_id = $billingaddress_id; $order->save(); } $ext_products = false; $int_products = false; //var_dump($r->products);exit; // validate and add products if(is_array($r->products) && count($r->products)) { foreach($r->products as $product_id => $p) { //var_dump($p); if(!$product_id || !$p["product_id"]) { continue; } $prod = new Product($p['product_id']); if(!$prod->id) { $this->log->warn(__CLASS__."::save() Invalid product: ".$p['product_id']); } $product_data = []; $product_data["order_id"] = $new_id; $product_data["product_id"] = $p["product_id"]; $product_data['amount'] = (!empty($p['amount'])) ? $p['amount'] : 1; $product_data["pos"] = ($p["pos"]) ? $p['pos'] : $order->getNewPos(); $product_data["description"] = $p["description"]; $product_data["price"] = Layout::commaToDot($p["price"]); $product_data["price_setup"] = Layout::commaToDot($p["price_setup"]); if($this->me->is("Admin") && $p["price_nne"]) { $product_data["price_nne"] = Layout::commaToDot($p["price_nne"]); } else { $product_data["price_nne"] = $prod->price_nne; } if($this->me->is("Admin") && $p["price_nbe"]) { $product_data["price_nbe"] = Layout::commaToDot($p["price_nbe"]); } else { $product_data["price_nbe"] = $prod->price_nbe; } $product_data["billing_delay"] = ($p["billing_delay"]) ? $p["billing_delay"] : 0; if($product_data["billing_delay"] > 6) { $product_data["billing_delay"] = 6; } $product_data["billing_period"] = $p["billing_period"]; $product_data['upgrade'] = $order_data['upgrade']; $require_term = false; if(array_key_exists(TT_ATTRIB_TERMINATION_REQUIRED_NAME, $prod->attributes) && $prod->attributes[TT_ATTRIB_TERMINATION_REQUIRED_NAME]->value == 1) { //var_dump($prod->attributes); $require_term = true; if(!$p['termination_id']) { $this->layout()->setFlash("Ein oder mehrere Produkte erfordern Anschluss.", "warn"); continue; } $product_data['termination_id'] = $p['termination_id']; } else { $product_data['termination_id'] = null; } if($product_id == "new") { $product = OrderProductModel::create($product_data); } else { $product = new OrderProduct($product_id); $product->update($product_data); } if(!$product->save()) { $this->log->warn("Unable to save OrderProduct:".print_r($product, true)); } // if product is not external and customer is new, create customer_number and service pin if($prod->external) { $ext_products = true; } else { $int_products = true; if(!$owner->customer_number) { $last_num = AddressModel::getLastCustomerNumber(); $this->log->debug("last_num: $last_num"); if($last_num) { $new_num = $last_num + 1; } else { $new_num = TT_FIRST_CUSTNUM; } if(!AddressModel::search(['customer_number' => $new_num])) { $owner->customer_number = $new_num; $owner->save(); } } // generate and send Service PIN // only if owner_id wasn't changed $this->log->debug("test"); if(!$owner->spin && (!property_exists($order->_old_data, "owner_id") || $order->owner_id == $order->_old_data->owner_id)) { $this->log->debug(__CLASS__."::save(): creating new SPIN for ".$owner->getCompanyOrName()." (".$owner->id.")"); $spin = $owner->generateServicePin(); if($spin && !AddressModel::search(['spin' => $spin])) { $owner->spin = $spin; if($owner->save()) { // 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']; // send email to customer // 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(); $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_email', to: '$to')"); } 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->log->info(__CLASS__."::save(): Sending new SPIN for ".$owner->getCompanyOrName()." (".$owner->id.")"); } } } } else { $this->log->debug(__CLASS__."::save(): NOT creating new SPIN for ".$owner->getCompanyOrName()." (".$owner->id."): SPIN exists or owner of Order was changed"); } } } } //var_dump($_FILES['OrderFileUpload']);exit; // handle file upload if(array_key_exists("OrderFileUpload", $_FILES) && !$_FILES['OrderFileUpload']['error']) { //var_dump($_FILES);exit; $upload = new mfUpload("OrderFileUpload"); $upload->setSavepath(MFUPLOAD_FILE_SAVE_PATH."/documents"); $upload->save(); $file_data = []; $file_data['name'] = ($r->file_name) ? $r->file_name : $upload->getOriginalFilename(); $file_data['filename'] = ($r->file_filename) ? $r->file_filename : $upload->getOriginalFilename(); $file_data['subfolder'] = "documents"; $file_data['store_filename'] = $upload->getFilename(); $file_data['orig_filename'] = $upload->getOriginalFilename(); $file = FileModel::create($file_data); $file_id = $file->save(); if(!$file_id) { $this->layout()->setFlash("Dateiupload fehlgeschlagen", "warn"); unlink($upload->getSavepath()."/".$upload->getFilename()); } else { $of = []; $of['order_id'] = $new_id; $of['file_id'] = $file_id; $of['name'] = $file->name; $of['description'] = $file->description; $orderfile = OrderFileModel::create($of); if(!$orderfile->save()) { $file->delete(); unlink($upload->getSavepath()."/".$upload->getFilename()); $this->layout()->setFlash("Dateiupload fehlgeschlagen", "warn"); } } } // send order finish email if($send_to_bill_email) { if($ext_products && !$int_products) { if(!$order->sendExtBillinfoEmail()) { $this->layout()->setFlash("Beim Senden der externen Billing Benachrichtigung ist ein Fehler aufgetreten.", "warning"); } } if($int_products) { if(!$order->sendIntBillinfoEmail()) { $this->layout()->setFlash("Beim Senden der Billing Benachrichtigung ist ein Fehler aufgetreten.", "warning"); } } if($int_products && $ext_products) { $this->layout()->setFlash("Eigene und Fremdprodukte gefunden, nur interne Billing Benachrichtigung verschickt.", "warning"); } } $this->layout()->setFlash("Bestellung erfolgreich gespeichert.", "success"); $this->redirect("Order", "edit", ["id" => $new_id]); } protected function saveVorortterminAction() { if(!$this->me->is(["Admin","salespartner"])) { $this->layout()->setFlash("Keine Berechtigung", "error"); $this->redirect("Order"); } $r = $this->request; $order_id = $r->id; if(!is_numeric($order_id) || $order_id < 1) { $this->returnJson(["status" => "error", "order" => ['id' => $order_id]]); } $order = new Order($order_id); if(!$order->id) { $this->returnJson(["status" => "error", "order" => ['id' => $order_id]]); } $date = $r->install_date; if($date === null) { $this->returnJson(["status" => "error", "order" => ['id' => $order_id]]); } if($date) { $date = Layout::dateToInt($date); if(!$date) { $this->returnJson(["status" => "error", "order" => ['id' => $order_id]]); } } elseif($date === "") { $date = null; } if($date && !$order->install_date && is_array($order->terminations) && count($order->terminations)) { $term = $order->terminations[0]; if(!$term->getWorkflowvalue("pop_id")) { $this->returnJson(["status" => "error", "msg" => "Kein POP im Leitungsbau !", "order" => ['id' => $order_id]]); } } $order->install_date = $date; $order->cpeprovisioning_enabled = ($date) ? 1 : 0; $order->save(); $this->returnJson(["status" => "OK", "order" => ['id' => $order_id, 'date' => ($date) ? date('d.m.Y', $date) : ""]]); } protected function saveCpeprovisioningAction() { if(!$this->me->is(["Admin","salespartner"])) { $this->layout()->setFlash("Keine Berechtigung", "error"); $this->redirect("Order"); } $r = $this->request; $order_id = $r->id; if(!is_numeric($order_id) || $order_id < 1) { $this->returnJson(["status" => "error", "msg" => "Fehler beim Speichern!", "order" => ['id' => $order_id]]); } $order = new Order($order_id); if(!$order->id) { $this->returnJson(["status" => "error", "msg" => "Fehler beim Speichern!", "order" => ['id' => $order_id]]); } $enabled = $r->enabled; if($enabled === null || !is_numeric($enabled)) { $this->returnJson(["status" => "error", "msg" => "Fehler beim Speichern!", "order" => ['id' => $order_id]]); } $term = $order->terminations[0]; if($enabled && !$term->getWorkflowvalue("pop_id")) { $this->returnJson(["status" => "error", "msg" => "Kein POP im Leitungsbau !", "order" => ['id' => $order_id, "enabled" => 0]]); } $order->cpeprovisioning_enabled = ($enabled) ? 1 : 0; $order->save(); $this->returnJson(["status" => "OK", "order" => ['id' => $order_id]]); } protected function deleteAction() { if(!$this->me->is(["Admin","salespartner"])) { $this->layout()->setFlash("Keine Berechtigung", "error"); $this->redirect("Order"); } $id = $this->request->id; $order = new Order($id); if(!$order->id || $order->id != $id) { $this->layout()->setFlash("Bestellung nicht gefunden.", "error"); $this->redirect("Order"); } if(!$this->me->is("Admin")) { $my_network_ids = []; foreach($this->me->my_networks as $network) { $my_network_ids[] = $network->id; } if(!in_array($order->terminations[0]->building->network_id, $my_network_ids) ) { if($order->create_by != $this->me->id) { $this->layout()->setFlash("Keine Berechtigung", "error"); $this->redirect("Order"); } } } $order->deleteFiles(); $order->deletePositions(); // TODO: check if Product is unused $order->delete(); $this->layout()->setFlash("Bestellung gelöscht", "success"); $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 aufgetreten.", "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 versendet.", "success"); $this->redirect("Order"); } } }