needlogin=true; $me = new User(); $me->loadMe(); $this->me = $me; $this->layout()->set("me",$me); if(!$me->is(["Admin", "netowner", "salespartner"])) { $this->redirect("Dashboard"); } } protected function indexAction() { $this->layout()->setTemplate("Preorder/Index"); $rfilter = $this->request->filter; iF(!is_array($rfilter)) { $rfilter = []; } $this->layout->set("filter", $rfilter); $where = ""; $filter = $this->getPreparedFilter($rfilter); // pagination defaults $pagination = []; $pagination['start'] = 0; $pagination['count'] = 25; $pagination['maxItems'] = 0; if(is_numeric($this->request->s)) { $pagination['start'] = intval($this->request->s); } $preorder_filter = $filter; $my_campaigns = []; $my_campaign_ids = []; if($this->me->is("Admin")) { if($filter['preordercampaign_id']) { $this->layout()->set("campaign", new Preordercampaign($filter['preordercampaign_id'])); } else { $my_campaigns = PreordercampaignModel::getAll(); } $this->layout()->set("my_campaigns", PreordercampaignModel::getAll()); } else { $my_networks = $this->me->myNetworks(["netowner", "salespartner"]); //var_dump($my_networks);exit; foreach($my_networks as $network) { foreach(PreordercampaignModel::search(['network_id' => $network->id]) as $campaign) { $my_campaigns[] = $campaign; if(!in_array($campaign->id, $my_campaign_ids)) $my_campaign_ids[] = $campaign->id; } } //var_dump($my_network_ids,$my_campaign_ids);exit; $this->layout()->set("my_campaigns", $my_campaigns); if($filter['preordercampaign_id'] && in_array($filter['preordercampaign_id'], $my_campaign_ids)) { $campaign_id = $filter['preordercampaign_id']; if(is_numeric($campaign_id) && $campaign_id > 0) { $campaign = new Preordercampaign($campaign_id); $this->layout()->set("campaign", $campaign); } } else { $filter['preordercampaign_id'] = $my_campaign_ids; } } if($filter['addon_services']) { $pagination['maxItems'] = PreorderModel::countOrderedAddonservices($filter); $preorders = PreorderModel::searchOrderedAddonservices($filter, $pagination); } else { $pagination['maxItems'] = PreorderModel::count($filter); $preorders = PreorderModel::search($filter, $pagination); } $this->layout()->set("pagination", $pagination); $this->layout()->set("preorders", $preorders); } private function getPreparedFilter($filter) { $new_filter = []; if(array_key_exists("show_deleted", $filter)) { if($filter['show_deleted'] == "show") { $new_filter['deleted'] = null; } elseif($filter['show_deleted'] == "only") { $new_filter['deleted'] = 1; } else { $new_filter['deleted'] = 0; } } else { $new_filter['deleted'] = 0; } $new_filter['add-where'] = ""; if(array_key_exists("address", $filter)) { $address = $this->db()->escape($filter['address']); $new_filter['add-where'] .= " AND (adb_hausnummer.gemeinde like '%$address%' OR adb_hausnummer.plz like '%$address%' OR adb_hausnummer.strasse like '%$address%')"; } if(array_key_exists("kunde", $filter)) { $kunde = $this->db()->escape($filter['kunde']); $new_filter['add-where'] .= " AND (firstname like '%$kunde%' OR lastname like '%$kunde%' OR street like '%$kunde%' OR zip like '%$kunde%' OR city like '%$kunde%')"; } $new_filter['addon_services'] = false; if(array_key_exists("addon_services", $filter) && $filter['addon_services'] == 1) { $new_filter['addon_services'] = true; } if(is_array($filter) && count($filter)) { foreach($filter as $name => $value) { $new_filter[$name] = $value; } } return $new_filter; } protected function addAction() { $this->layout()->setTemplate("Preorder/Form"); if($this->me->isAdmin()) { $this->layout()->set("networks", NetworkModel::getAll()); } else { $this->layout()->set("networks", $this->me->my_networks); } if(!$this->request->preordercampaign_id) { $this->layout()->setFlash("Keine Kampagne ausgewählt!", "warn"); } $campaign_id = $this->request->preordercampaign_id; $campaign = new Preordercampaign($campaign_id); $this->layout()->set("campaign", $campaign); $products = []; foreach(ProductNetworkModel::search(["network_id" => $campaign->network_id]) as $pn) { if(!array_key_exists($pn->product_id, $products)) { if(is_array($pn->product->attributes) && !array_key_exists("presales", $pn->product->attributes)) { $products[$pn->product_id] = $pn->product; } } } //var_dump($products);exit; $this->layout()->set("products", $products); $partners = AddressModel::search(['addresstype' => ['netowner','salespartner']]); $this->layout()->set("partners", $partners); } protected function editAction() { $id = $this->request->id; if(!is_numeric($id) || $id < 1) { $this->layout()->setFlash("Vorbestellung nicht gefunden", "error"); $this->redirect("Preordercampaign"); } $preorder = new Preorder($id); if(!$preorder->id) { $this->layout()->setFlash("Vorbestellung nicht gefunden", "error"); $this->redirect("Preordercampaign"); } $this->request->set("preordercampaign_id", $preorder->preordercampaign_id); // needed in addAction() $this->layout()->set("preorder", $preorder); //var_dump($preorder->building->street);exit; return $this->addAction(); } protected function saveAction() { $r = $this->request; //var_dump($r);exit; /* * add or edit */ $id = $r->id; if(is_numeric($id) && $id > 0) { $mode = "edit"; $preorder = new Preorder($id); if(!$preorder->id) { $this->layout()->setFlash("Vorbestellung nicht gefunden", "error"); $this->redirect("Preordercampaign"); } } else { $id = false; $mode = "add"; } /* * data colletion */ $data = []; $data['preordercampaign_id'] = $r->campaign_id; $data['building_id'] = ($r->building_id) ? $r->building_id : null; $data['adb_hausnummer_id'] = $r->adb_hausnummer_id; $data['adb_wohneinheit_id'] = ($r->adb_wohneinheit_id) ? $r->adb_wohneinheit_id : null; $data['termination_id'] = ($r->termination_id) ? $r->termination_id : null; if($campaign->product_type != "setup_only") { $data['product_id'] = $r->product_id; } if(!$r->product_id) { $data['product_id'] = null; } if($campaign->product_type != "no_setup") { $data['setup_product_id'] = $r->setup_product_id; } if(!$r->setup_product_id) { $data['setup_product_id'] = null; } switch($r->type) { case "interest": $data['type'] = "interest"; break; case "provision": $data['type'] = "provision"; break; case "order": $data['type'] = "order"; break; } switch($r->connection_type) { case "single-dwelling": $data['connection_type'] = "single-dwelling"; break; case "multi-dwelling": $data['connection_type'] = "multi-dwelling"; break; case "apartment-building": $data['connection_type'] = "apartment-building"; break; case "apartment": $data['connection_type'] = "apartment"; break; case "business": $data['connection_type'] = "business"; break; } $data['connection_count'] = (intval($r->connection_count)) ? intval($r->connection_count) : 1; $data['accept_agb'] = 1; $data['accept_dsgvo'] = 1; $data['accept_withdrawal'] = 1; $data['accept_marketing'] = 0; if($r->accept_marketing == 1) { $data['accept_marketing'] = 1; } $data['price'] = ($r->price) ? Layout::commaToDot($r->price) : 0; $data['price_setup'] = ($r->price_setup) ? Layout::commaToDot($r->price_setup) : 0; $data['price_nne'] = ($r->price_nne) ? Layout::commaToDot($r->price_nne) : 0; $data['price_nbe'] = ($r->price_nbe) ? Layout::commaToDot($r->price_nbe) : 0; $data['billing_delay'] = ($r->billing_delay) ? $r->billing_delay : 0; //var_dump($r->partner_id);exit; if($r->partner_id) { $data['partner_id'] = $r->partner_id; } else { $data['partner_id'] = null; } $data['company'] = (trim($r->company)) ? trim($r->company) : null; $data['uid'] = (trim($r->uid)) ? trim($r->uid) : null; $data['firstname'] = (trim($r->firstname)) ? trim($r->firstname) : null; $data['lastname'] = (trim($r->lastname)) ? trim($r->lastname) : null; $data['street'] = (trim($r->street)) ? trim($r->street) : null; $data['housenumber'] = (trim($r->housenumber)) ? trim($r->housenumber) : null; $data['block'] = (trim($r->block)) ? trim($r->block) : null; $data['stiege'] = (trim($r->stiege)) ? trim($r->stiege) : null; $data['stock'] = (trim($r->stock)) ? trim($r->stock) : null; $data['tuer'] = (trim($r->tuer)) ? trim($r->tuer) : null; $data['zip'] = (trim($r->zip)) ? trim($r->zip) : null; $data['city'] = (trim($r->city)) ? trim($r->city) : null; $data['phone'] = (trim($r->phone)) ? trim($r->phone) : null; $data['email'] = (trim($r->email)) ? trim($r->email) : null; $data['note'] = (trim($r->note)) ? trim($r->note) : null; $data['edit_by'] = $this->me->id; if($mode == "add") { $data['create_by'] = $this->me->id; $preorder = PreorderModel::create($data); } else { $preorder->update($data); } $campaign = new Preordercampaign($preorder->preordercampaign_id); if(!$campaign->id) { $this->layout()->setFlash("Keine Kampagne ausgewählt!", "error"); $this->redirect("Preordercampaign"); } //var_dump($preorder, $r);exit; // handle new address creation if(!$preorder->adb_hausnummer_id) { // check if new address was submitted $this->log->debug("check if new address was submitted"); if($r->new_address_street && $r->new_address_housenumber && $r->new_address_zip && $r->new_address_city && $r->new_address_district) { $city_search = trim($r->new_address_city); $district_search = trim($r->new_address_district); $zip_search = trim($r->new_address_zip); $street_search = trim($r->new_address_street); $housenumber_search = trim($r->new_address_housenumber); $block = trim($r->new_address_block); $stiege = trim($r->new_address_stiege); $stock = trim($r->new_address_stock); $tuer = trim($r->new_address_tuer); $preorder->new_address_city = $city_search; $preorder->new_address_district = $district_search; $preorder->new_address_zip = $zip_search; $preorder->new_address_street = $street_search; $preorder->new_address_housenumber = $housenumber_search; $netzgebiet_ids = []; foreach($campaign->salesclusters as $scluster) { $netzgebiet_ids[] = $scluster->id; } $netzgebiet_id = $netzgebiet_ids[0]; if(!$netzgebiet_id) { $this->layout()->setFlash("Kann Adresse nicht updaten: Kampagne hat kein Netzgebiet", "error"); $this->layout()->set("preorder", $preorder); $this->layout()->set("campaign", $campaign); return $this->addAction(); } $netzgebiet = new ADBNetzgebiet($netzgebiet_id); if(!$netzgebiet->id) { $this->layout()->setFlash("Neztgebiet nicht gefunden", "error"); $this->layout()->set("preorder", $preorder); $this->layout()->set("campaign", $campaign); return $this->addAction(); } $city = ADBGemeindeModel::getFirst(['name' => $city_search, 'netzgebiet_id' => $netzgebiet_id]); if(!$city) { $this->layout()->setFlash("Gemeinde nicht Adress-DB gefunden", "error"); $this->layout()->set("preorder", $preorder); $this->layout()->set("campaign", $campaign); return $this->addAction(); } $district = ADBOrtschaftModel::getFirst(['name' => $district_search, 'netzgebiet_id' => $netzgebiet_id]); if(!$district) { $this->layout()->setFlash("Ortsteil nicht Adress-DB gefunden", "error"); $this->layout()->set("preorder", $preorder); $this->layout()->set("campaign", $campaign); return $this->addAction(); } $zip = ADBPlzModel::getFirst(['plz' => $zip_search, 'gemeinde_id' => $city->id]); if(!$zip) { $this->layout()->setFlash("PLZ nicht Adress-DB gefunden", "error"); $this->layout()->set("preorder", $preorder); $this->layout()->set("campaign", $campaign); return $this->addAction(); } $street = ADBStrasseModel::getFirst(['name' => $street_search, 'ortschaft_id' => $district->id, 'gemeinde_id' => $city->id]); if(!$street) { $this->log->debug("create street"); $street = ADBStrasseModel::create([ 'ortschaft_id' => $district->id, 'gemeinde_id' => $city->id, 'name' => $street_search ]); if(!$street->save()) { $this->layout()->setFlash("Fehler beim Speichern der neuen Straße", "error"); $this->layout()->set("preorder", $preorder); $this->layout()->set("campaign", $campaign); return $this->addAction(); } } $this->log->debug("search hausnummer"); $hausnummer = ADBHausnummerModel::getFirst(['netzgebiet_id' => $netzgebiet_ids, 'ortschaft_id' => $district_search, 'gemeinde_id' => $city->id, 'plz_id' => $zip->id, 'strasse_id' => $street->id, 'hausnummer' => $housenumber_search]); if($hausnummer) { // hausnummer gibts scho! $this->layout()->setFlash("Adresse war schon vorhanden!", "warn"); $preorder->adb_hausnummer_id = $hausnummer->id; } else { // try with empty netzgebiet $this->log->debug("search hausnummer mit empty netzgebiet"); $hausnummer = ADBHausnummerModel::getFirst(['netzgebiet_id' => null, 'ortschaft_id' => $district_search, 'gemeinde_id' => $city->id, 'plz_id' => $zip->id, 'strasse_id' => $street->id, 'hausnummer' => $housenumber_search]); if($hausnummer) { // Hausnummer ohne Netzgebiet gefunden -> update netzgebiet_id $this->log->debug("hausnummer id: updated netzgebiet from NULL to ".$netzgebiet_ids); $hausnummer->netzgebiet_id = $netzgebiet_id; $hausnummer->save(); $preorder->adb_hausnummer_id = $hausnummer->id; } else { // try with any netzgebiet $this->log->debug("search hausnummer with ohne netzgebiet"); $hausnummer = ADBHausnummerModel::getFirst(['ortschaft_id' => $district_search, 'gemeinde_id' => $city->id, 'plz_id' => $zip->id, 'strasse_id' => $street->id, 'hausnummer' => $housenumber_search]); if($hausnummer) { $this->log->debug("Hausnummer ".$hausnummer->id." in Netzgebiet (".implode(",", $netzgebiet_ids)." gesucht, aber in ".$hausnummer->netzgebiet_id)." gefunden"; $this->layout()->setFlash("Neue Adresse ist bereits im Netzgebiet ".$hausnummer->netzgebiet->name." vorhanden", "error"); $this->layout()->set("preorder", $preorder); $this->layout()->set("campaign", $campaign); return $this->addAction(); } else { // hausnummer anlegen $hausnummer = ADBHausnummerModel::create([ 'netzgebiet_id' => $netzgebiet_id, 'ortschaft_id' => $district->id, 'plz_id' => $zip->id, 'strasse_id' => $street->id, 'hausnummer' => $housenumber_search, 'freigabe' => $netzgebiet->freigabe, 'manual_add' => date('U'), 'manual_add_by' => $this->me->id, 'manual_add_info' => "thetool user ".$this->me->username ]); if(!$hausnummer->save()) { $this->layout()->setFlash("Fehler beim Speichern der neuen Adresse", "error"); $this->layout()->set("preorder", $preorder); $this->layout()->set("campaign", $campaign); return $this->addAction(); } $preorder->adb_hausnummer_id = $hausnummer->id; $preorder->address_created = date('U'); $preorder->address_created_by = $this->me->id; $preorder->adb_wohneinheit_id = null; // create wohneinheit $wohneinheit = ADBWohneinheitModel::create([ 'hausnummer_id' => $hausnummer->id, 'num' => 1, 'block' => ($block) ? $block : null, 'stiege' => ($stiege) ? $stiege : null, 'stock' => ($stock) ? $stock : null, 'tuer' => ($tuer) ? $tuer : null ]); if($wohneinheit->save()) { $preorder->adb_wohneinheit_id = $wohneinheit->id; } else { $this->layout()->setFlash("Konnte Wohneinheit nicht speichern", "warn"); } } } } } } /* * validation */ if(!array_key_exists($data['type'], $campaign->types)) { $this->layout()->setFlash("Bitte Vorbestelltyp auswählen!", "error"); $this->layout()->set("preorder", $preorder); $this->layout()->set("campaign", $campaign); return $this->addAction(); } if($data['product_id']) { $product = new Product($data['product_id']); if(!$product->id) { $this->layout()->setFlash("Bitte Produkt auswählen!", "error"); $this->layout()->set("preorder", $preorder); $this->layout()->set("campaign", $campaign); return $this->addAction(); } $preorder->billing_period = $product->billing_period; if(!$this->me->isAdmin()) { $preorder->price_nne = $product->price_nne; $preorder->price_nbe = $product->price_nbe; } if(!strlen($preorder->price) || !strlen($preorder->price_setup) || !strlen($preorder->price_nne) || !strlen($preorder->price_nbe) || !strlen($preorder->price_nne)) { $this->layout()->setFlash("Bitte alle benötigten Produktdaten ausfüllen!", "error"); $this->layout()->set("preorder", $preorder); $this->layout()->set("campaign", $campaign); return $this->addAction(); } if(!strlen($preorder->firstname) || !strlen($preorder->lastname) || !strlen($preorder->street) || !strlen($preorder->zip) || !strlen($preorder->city)) { $this->layout()->setFlash("Bitte alle benötigten Kundendaten ausfüllen!", "error"); $this->layout()->set("preorder", $preorder); $this->layout()->set("campaign", $campaign); return $this->addAction(); } } else { $preorder->billing_period = 0; } //var_dump($preorder);exit; // unset temporary properties unset($preorder->new_address_city); unset($preorder->new_address_district); unset($preorder->new_address_zip); unset($preorder->new_address_street); unset($preorder->new_address_housenumber); /* * generate ucode and save */ $preorder->createUcode(); $new_id = $preorder->save(); if(!$new_id) { $this->layout()->setFlash("Fehler beim Speichern", "error"); $this->layout()->set("preorder", $preorder); return $this->addAction(); } $qs = ['filter' => ['preordercampaign_id' => $preorder->preordercampaign_id, 'ucode' => $preorder->ucode]]; $qs = http_build_query($qs); $this->layout()->setFlash("Vorbestellung erfolgreich gespeichert!", "success"); $this->redirect("Preorder", "Index", $qs); } public function deleteAction() { $qs = ""; if(is_array($this->request->filter) && count($this->request->filter)) { $qs = ['filter' => $this->request->filter]; $qs = http_build_query($qs); } $id = $this->request->id; if(!is_numeric($id) || $id < 1) { $this->layout()->setFlash("Vorbestellung nicht gefunden!", "error"); $this->redirect("Preorder", "Index", $qs); } $preorder = new Preorder($id); if(!$preorder->id) { $this->layout()->setFlash("Vorbestellung nicht gefunden!", "error"); $this->redirect("Preorder", "Index", $qs); } $preorder->deleted = date('U'); $preorder->deleted_by = $this->me->id; $preorder->save(); $this->layout()->setFlash("Vorbestellung erfolgreich gelöscht!", "success"); $this->redirect("Preorder", "Index", $qs); } }