303 lines
9.9 KiB
PHP
303 lines
9.9 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(array_key_exists("preordercampaign_id", $filter) && $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"] = 800;
|
|
$filter["deleted"] = 0;
|
|
$filter["connection_type"] = ["single-dwelling", "business"];
|
|
$pagination['maxItems'] = PreorderModel::countWithLogistics($filter);
|
|
$preorders = PreorderModel::searchWithLogistics($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["sent"] = false;
|
|
if(array_key_exists("sent", $filter)) {
|
|
if($filter['sent'] == "yes") {
|
|
$new_filter["sent"] = true;
|
|
}
|
|
if($filter['sent'] == "no") {
|
|
$new_filter["sent"] = false;
|
|
}
|
|
if($filter['sent'] == "all") {
|
|
unset($new_filter["sent"]);
|
|
}
|
|
unset($filter['sent']);
|
|
}
|
|
|
|
|
|
$new_filter['deleted'] = 0;
|
|
|
|
foreach($filter as $name => $value) {
|
|
$new_filter[$name] = $value;
|
|
}
|
|
|
|
return $new_filter;
|
|
}
|
|
|
|
protected function printAction() {
|
|
$this->layout()->setTemplate("Preorderlogistics/Print.template");
|
|
$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->cifurl = "https://pro.ichwillglasfaser.at/ClientSubmit/finishedInstallationWork?c=".$preorder->ciftoken;
|
|
$preorder->save();
|
|
}
|
|
|
|
if(!$preorder->cifcableurl) {
|
|
$preorder->cifcableurl = "https://www.deineglasfaser.at/kundinnen/leerrohr-nachbestellung/";
|
|
$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");
|
|
}
|
|
}
|
|
|
|
$qrimg = $plog->getCifQrPng($preorder->cifurl);
|
|
|
|
$this->layout()->set("qr_url", $qrimg);
|
|
$this->layout()->set("preorder", $preorder);
|
|
|
|
}
|
|
|
|
protected function apiAction() {
|
|
if(!$this->me->is(["Preorderlogistics"])) {
|
|
$this->redirect("Dashboard");
|
|
}
|
|
$do = $this->request->do;
|
|
$data = [];
|
|
|
|
switch($do) {
|
|
case "saveSent":
|
|
$return = $this->saveSentApi();
|
|
break;
|
|
default:
|
|
$return = false;
|
|
}
|
|
|
|
if(!is_array($return) || !count($return)) {
|
|
$data = ["status" => "error"];
|
|
$this->returnJson($data);
|
|
}
|
|
$data['status'] = "OK";
|
|
$data['result'] = $return;
|
|
$this->returnJson($data);
|
|
}
|
|
|
|
|
|
private function saveSentApi() {
|
|
if(!$this->me->is(["Preorderlogistics"])) {
|
|
return false;
|
|
}
|
|
|
|
$preorder_id = $this->request->id;
|
|
if(!is_numeric($preorder_id) || $preorder_id < 1) {
|
|
return false;
|
|
}
|
|
|
|
$preorder = new Preorder($preorder_id);
|
|
if(!$preorder->id) return false;
|
|
|
|
$plog = PreorderlogisticsModel::getFirst(["preorder_id" => $preorder->id]);
|
|
if(!$plog) {
|
|
$plog = PreorderlogisticsModel::create([
|
|
"preorder_id" => $preorder->id,
|
|
"sent" => 0
|
|
]);
|
|
|
|
}
|
|
|
|
$sent = intval($this->request->sent);
|
|
if($sent < 0 || $sent > 1) return false;
|
|
|
|
if($sent) {
|
|
$plog->sent_by = $this->me->id;
|
|
$plog->sent = date('U');
|
|
|
|
$new_status = PreorderstatusModel::getFirst(["code" => 145]);
|
|
|
|
if($preorder->status->code < $new_status->code) {
|
|
$plog->prev_status_code = $preorder->status->code;
|
|
$preorder->status_id = $new_status->id;
|
|
$preorder->save();
|
|
}
|
|
} else {
|
|
$plog->sent_by = null;
|
|
$plog->sent = 0;
|
|
|
|
|
|
}
|
|
if(!$plog->save()) {
|
|
return false;
|
|
}
|
|
|
|
return ["preorder_id" => $preorder->id];
|
|
}
|
|
} |