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("Preordercampaign/Index"); $this->layout->set("filter", $this->request->filter); if($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")) { if($filter['network_id']) { $my_networks[] = new Network($filter['network_id']); } else { $my_networks = NetworkModel::getAll(); } $this->layout()->set("mynetworks", NetworkModel::getAll()); } else { $use_filter_network = false; $my_networks = $this->me->myNetworks(["netowner", "salespartner"]); //var_dump($my_networks);exit; foreach($my_networks as $mn) { if($mn->id == $filter['network_id']) { $use_filter_network = true; break; } } 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']); //var_dump($this->me->my_networks);exit; $my_network_ids = []; foreach($my_networks as $network) { $my_network_ids[] = $network->id; } $campaigns = PreordercampaignModel::search(['network_id' => $my_network_ids]); $this->layout()->set("campaigns", $campaigns); } private function getPreparedFilter($filter) { $new_filter = []; foreach($filter as $name => $value) { $new_filter[$name] = $value; } return $new_filter; } protected function addAction() { if(!$this->me->is("Admin")) { $this->redirect("Preordercampaign"); } $this->layout()->setTemplate("Preordercampaign/Form"); if($this->me->isAdmin()) { $this->layout()->set("networks", NetworkModel::getAll()); } else { $this->layout()->set("networks", $this->me->my_networks); } $this->layout()->set("types", BuildingtypeModel::getAll()); $this->layout()->set("statuses", BuildingstatusModel::getAll()); $this->layout()->set("networksections", NetworksectionModel::getAll()); $this->layout()->set("adb_netzgebiete", ADBNetzgebietModel::getAll()); } protected function editAction() { if(!$this->me->is("Admin")) { $this->redirect("Preordercampaign"); } $id = $this->request->id; if(!is_numeric($id) || !$id) { $this->layout()->setFlash("Vorbestellkampagne nicht gefunden", "error"); $this->redirect("Preordercampaign"); } $campaign = new Preordercampaign($id); if(!$campaign->id) { $this->layout()->setFlash("Vorbestellkampagne nicht gefunden", "error"); $this->redirect("Preordercampaign"); } $this->layout()->set("campaign", $campaign); return $this->addAction(); } protected function saveAction() { if(!$this->me->is("Admin")) { $this->redirect("Preordercampaign"); } $r = $this->request; //var_dump($r);exit; $id = $r->id; if(is_numeric($id) && $id > 0) { $mode = "edit"; $campaign = new Preordercampaign($id); if(!$campaign->id) { $this->layout()->setFlash("Vorbestellkampagne nicht gefunden", "error"); $this->redirect("Preordercampaign"); } } else { $id = false; $mode = "add"; } $data = []; $data['network_id'] = $r->network_id; $data['name'] = $r->name; $data['description'] = $r->description; $data['area'] = $r->area; $data['note'] = $r->note; $data['homes_total'] = (int)$r->homes_total; if($r->from) { $data['from'] = self::dateToTimestamp($r->from); } if($r->to) { $data['to'] = self::dateToTimestamp($r->to); } if($r->fulfillment == "thirdparty") { $data['fulfillment'] = "thirdparty"; } else { $data['fulfillment'] = "thetool"; } if($r->product_type == "setup_only") { $data['product_type'] = "setup_only"; } elseif($r->product_type == "no_setup") { $data['product_type'] = "no_setup"; } else { $data['product_type'] = "all"; } if(is_array($r->required_fields) && count($r->required_fields)) { $rfields = []; foreach(['contact_type'] as $afield) { if(in_array($afield, $r->required_fields)) { $rfields[] = "contact_type"; } } $data['required_preorder_fields'] = json_encode($rfields); } else { $data['required_preorder_fields'] = null; } if($r->district_is_city == 1) { $data['district_is_city'] = 1; } else { $data['district_is_city'] = 0; } $data['edit_by'] = $this->me->id; if($mode == "add") { $data['create_by'] = $this->me->id; $campaign = PreordercampaignModel::create($data); } else { $campaign->update($data); } $new_id = $campaign->save(); if(!$new_id) { $this->layout()->setFlash("Fehler beim Speichern", "error"); $this->layout()->set("campaign", $campaign); return $this->add(); } if(is_array($r->types) && count($r->types)) { $campaign->addTypes($r->types); } //var_dump($r->adb_netzgebiet_ids);exit; foreach(PreordercampaignSalesclusterModel::search(['preordercampaign_id' => $campaign->id]) as $pcg) { $pcg->delete(); } //var_dump($r->adb_netzgebiet_ids);exit; if(is_array($r->adb_netzgebiet_ids) && count($r->adb_netzgebiet_ids)) { foreach($r->adb_netzgebiet_ids as $netzgebiet_id) { $pcg = PreordercampaignSalesclusterModel::getFirst(['preordercampaign_id' => $campaign->id, 'salescluster_id' => $netzgebiet_id]); if($pcg) continue; $pcg = PreordercampaignSalesclusterModel::create(['preordercampaign_id' => $campaign->id, 'salescluster_id' => $netzgebiet_id]); $pcg->save(); } } foreach(PreordercampaignApiuserModel::search(['preordercampaign_id' => $campaign->id]) as $pca) { $pca->delete(); } if(is_array($r->apiusers) && count($r->apiusers)) { foreach($r->apiusers as $user_id) { $pca = PreordercampaignApiuserModel::getFirst(['preordercampaign_id' => $campaign->id, 'worker_id' => $user_id]); if($pca) continue; $pca = PreordercampaignApiuserModel::create(['preordercampaign_id' => $campaign->id, 'worker_id' => $user_id]); $pca->save(); } } foreach(PreordercampaignOriginhostnameModel::search(['preordercampaign_id' => $campaign->id]) as $origin) { $origin->delete(); } // var_dump($r->corsorigins);exit; if($r->corsorigins) { $origins = str_replace("\r", "\n", $r->corsorigins); $origins = preg_replace("/\n+/", "\n", $origins); $origins = explode("\n", $origins); if(is_array($origins) && count($origins)) { foreach($origins as $origin) { $poh = PreordercampaignOriginhostnameModel::getFirst(['preordercampaign_id' => $campaign->id, 'hostname' => $origin]); if($poh) continue; $poh = PreordercampaignOriginhostnameModel::create(['preordercampaign_id' => $campaign->id, 'hostname' => $origin]); $poh->save(); } } } $this->layout()->setFlash("Vorbestellkampagne erfolgreich gespeichert.", "success"); //$this->redirect("Preordercampaign", "Edit", ['id' => $new_id]); $this->redirect("Preordercampaign"); } protected function downloadAddonServices() { $id = $this->request->preordercampaign_id; if(!is_numeric($id) || !$id) { $this->layout()->setFlash("Vorbestellkampagne nicht gefunden", "error"); $this->redirect("Preordercampaign"); } $campaign = new Preordercampaign($id); if(!$campaign->id) { $this->layout()->setFlash("Vorbestellkampagne nicht gefunden", "error"); $this->redirect("Preordercampaign"); } $this->layout()->set("campaign", $campaign); $preorders = PreorderModel::search(["preordercampaign_id" => $id, "add-where" => "AND JSON_LENGTH(addon_services) > 1"]); if(!count($preorders)) { $this->layout->setFlash("Keine Vorbestellungen mit bestellten Dienstleistungen gefunden."); $this->redirect("Preordercampaign"); } $csv = []; foreach($preorders as $preorder) { $sjson = json_decode($preorder->addon_services); if(!$sjson) { continue; } // address data and stuff $general = [ "ucode" => $preorder->ucode, "gemeinde" => $preorder->adb_hausnummer->ortschaft->gemeinde->name, "plz" => $preorder->adb_hausnummer->plz->plzstring, "ortschaft" => $preorder->adb_hausnummer->ortschaft->name, "strasse" => $preorder->adb_hausnummer->strasse->name, "hausnummer" => $preorder->adb_hausnummer->hausnummer, "block" => "", "stiege" => "", "stock" => "", "tuer" => "", "zusatz" => "", "address_info" => $preorder->address_info, "contact_firma" => $preorder->company, "contact_uid" => $preorder->uid, "contact_firstname" => $preorder->firstname, "contact_lastname" => $preorder->lastname, "contact_street" => $preorder->street, "contact_plz" => $preorder->zip, "contact_ort" => $preorder->city, "phone" => $preorder->phone, "email" => $preorder->email, ]; if($preorder->adb_wohneinheit_id) { $general["block"] = $preorder->adb_wohneinheit->block; $general["stiege"] = $preorder->adb_wohneinheit->stiege; $general["stock"] = $preorder->adb_wohneinheit->stock; $general["tuer"] = $preorder->adb_wohneinheit->tuer; $general["zusatz"] = $preorder->adb_wohneinheit->zusatz; } foreach($sjson as $service) { if(!$service->ordered) continue; $s = $general; $s["service"] = $service->service; $data = []; foreach($service->data as $d) { $data[] = (string)$d->name.": ".(is_bool($d->value) ? (int)$d->value : (string)$d->value); } $s["service_data"] = implode("; ", $data); $csv[] = $s; } //var_dump($csv);exit; $this->layout()->setTemplate("Preordercampaign/services.csv"); $this->layout()->set("csv", $csv); } } }