Files
thetool/application/Preorderlogistics/PreorderlogisticsController.php
2023-11-21 17:56:15 +01:00

212 lines
7.4 KiB
PHP

<?php
class PreorderlogisticsController extends mfBaseController {
protected function init() {
$this->needlogin=true;
$me = new User();
$me->loadMe();
$this->me = $me;
$this->layout()->set("me",$me);
if(!$me->is(["Preorderlogistics"])) {
$this->redirect("Dashboard");
}
}
protected function indexAction() {
$this->layout()->setTemplate("Preorderlogistics/Index");
$this->layout->set("filter", $this->request->filter);
$filter = [];
if($this->request->filter) {
$filter = $this->getPreparedFilter($this->request->filter);
} else {
$filter = $this->getPreparedFilter([]);
}
// pagination defaults
$pagination = [];
$pagination['start'] = 0;
$pagination['count'] = 25;
$pagination['maxItems'] = 0;
if(is_numeric($this->request->s)) {
$pagination['start'] = intval($this->request->s);
}
$my_networks = [];
$my_network_ids = [];
$my_campaign_ids = [];
$user_network_ids = $this->me->getFlag("preorder_networks")->value();
if($user_network_ids) {
$user_network_ids = json_decode($user_network_ids);
}
if(is_array($user_network_ids) && count($user_network_ids)) {
foreach($user_network_ids as $mnid) {
$my_networks[] = new Network($mnid);
}
}
foreach($my_networks as $network) {
$my_network_ids[] = $network->id;
}
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;
}
$filter['network_id'] = $my_network_ids;
$filter[">status_code"] = 139;
$filter["<status_code"] = 300;
$filter["connection_type"] = ["single-dwelling", "business"];
$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 = [];
$new_filter['add-where'] = "";
if(array_key_exists("name", $filter) && $filter['name']) {
$new_filter['name%'] = "%".$filter['name'];
unset($filter['name']);
}
if(array_key_exists("area", $filter) && $filter['area']) {
$new_filter['area%'] = "%".$filter['area'];
unset($filter['area']);
}
if(array_key_exists("search",$filter) && trim($filter['search'])) {
$search = trim($filter['search']);
$new_filter['add-where'] .= " AND (";
$new_filter['add-where'] .= " adb_hausnummer.gemeinde like '%$search%' OR adb_hausnummer.plz like '%$search%' OR adb_hausnummer.strasse like '%$search%'";
$new_filter['add-where'] .= " OR company like '%$search%' OR firstname like '%$search%' OR lastname like '%$search%' OR concat(firstname, ' ', lastname) like '%$search%' OR concat(lastname, ' ', firstname) like '%$search%' OR street like '%$search%' OR zip like '%$search%' OR city like '%$search%' OR email like '%$search' OR phone like '%$search'";
$new_filter['add-where'] .= " OR ucode like '%$search' OR oaid like '%$search'";
}
if(array_key_exists("address", $filter) && $filter["address"]) {
$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%'
OR adb_hausnummer.hausnummer like '%$address%' OR CONCAT (adb_hausnummer.strasse, ' ', adb_hausnummer.hausnummer) like '%$address%'
OR CONCAT (adb_hausnummer.strasse, ' ', adb_hausnummer.hausnummer) like '%".str_replace(" ", "%", $address)."%')";
}
if(array_key_exists("hausnummer", $filter) && $filter["hausnummer"]) {
$hausnummer = $this->db()->escape($filter['hausnummer']);
$new_filter['hausnummer'] = $hausnummer;
}
if(array_key_exists("kunde", $filter) && $filter["kunde"]) {
$kunde = $this->db()->escape($filter['kunde']);
$new_filter['add-where'] .= " AND (company like '%$kunde%' OR firstname like '%$kunde%' OR lastname like '%$kunde%' OR concat(firstname, ' ', lastname) like '%$kunde%' OR concat(lastname, ' ', firstname) like '%$kunde%' OR street like '%$kunde%' OR zip like '%$kunde%' OR city like '%$kunde%' OR phone like '%$kunde%' OR email like '%$kunde%')";
}
if(array_key_exists("ucode", $filter) && $filter['ucode']) {
$new_filter['ucode'] = "%".$filter['ucode']."%";
unset($filter['ucode']);
}
if(array_key_exists("oaid", $filter) && $filter['oaid']) {
$new_filter['oaid'] = "%".$filter['oaid']."%";
unset($filter['oaid']);
}
$new_filter['deleted'] = 0;
foreach($filter as $name => $value) {
$new_filter[$name] = $value;
}
return $new_filter;
}
protected function printAction() {
$this->layout()->setTemplate("Preorderlogistics/Print");
$id = $this->request->id;
if(!is_numeric($id) || $id < 1) {
$this->layout()->setFlash("Vorbestellung nicht gefunden", "error");
$this->redirect("Preorderlogistics");
}
$preorder = new Preorder($id);
if(!$preorder->id) {
$this->layout()->setFlash("Vorbestellung nicht gefunden", "error");
$this->redirect("Preorderlogistics");
}
$user_network_ids_json = $this->me->getFlag("preorder_networks")->value();
$user_network_ids = json_decode($user_network_ids_json);
if(!is_array($user_network_ids) || !count($user_network_ids)) {
$this->layout()->setFlash("Vorbestellung nicht gefunden (3)", "error");
$this->redirect("Preorderlogistics");
}
//var_dump($preorder->adb_hausnummer->netzgebiet_id, $user_network_ids);exit;
$network = NetworkModel::getFirst(["adb_network_id" => $preorder->adb_hausnummer->netzgebiet_id]);
if(!$network) {
$this->layout()->setFlash("Vorbestellung nicht gefunden (4)", "error");
$this->redirect("Preorderlogistics");
}
if(!in_array($network->id, $user_network_ids)) {
$this->layout()->setFlash("Vorbestellung nicht gefunden (2)", "error");
$this->redirect("Preorderlogistics");
}
/*
* generate QR code
*/
if(!$preorder->ciftoken) {
$preorder->createCiftoken();
$preorder->save();
}
$plog = PreorderlogisticsModel::getFirst(["preorder_id" => $preorder->id]);
if(!$plog) {
$plog = PreorderlogisticsModel::create([
"preorder_id" => $preorder->id,
"sent" => 0
]);
if(!$plog->save()) {
$this->layout()->setFlash("Eintrag konnte nicht gespeichert werden");
}
}
$this->layout()->set("preorder", $preorder);
}
private function setSentApi() {
}
}