Files
thetool/application/Preordercampaign/PreordercampaignController.php
2022-10-12 15:54:25 +02:00

238 lines
7.0 KiB
PHP

<?php
class PreordercampaignController extends mfBaseController {
protected function init() {
$this->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("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->my_networks;
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']);
$campaigns = PreordercampaignModel::search(['network_id' => $my_networks]);
$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() {
$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() {
$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() {
$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";
}
$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");
}
}