Files
thetool/application/Preorderlogistics/PreorderlogisticsController.php
2025-09-08 14:26:00 +02:00

324 lines
11 KiB
PHP

<?php
include_once(BASEDIR."/lib/QRCode/QRCode.php");
use Apirone\Lib\PhpQrCode\QrCode;
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"] = 140;
//$filter["<status_code"] = 800;
$filter["deleted"] = 0;
//$filter["connection_type"] = ["single-dwelling", "business"];
$filter["unit_count<="] = 2;
$installation_kit_status_flag = PreorderStatusflagModel::getFirst(["code" => "145"]);
if ($filter['sent'] !== true) {
$filter["preorder_status_flags_disabled"] = [$installation_kit_status_flag->id];
}
$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->save();
}
if(!$preorder->cifurl) {
$preorder->cifurl = $preorder->generateCifUrl();
$preorder->save();
}
if(!$preorder->cifcableurl) {
$preorder->cifcableurl = $preorder->generateCifCableUrl();
$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");
}
}
$qr = QRCode::init($preorder->cifurl); // $data & $options are optional
$image_encoded = $qr->base64();
$this->layout()->set("qr_url", $image_encoded);
$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;
$installation_kit_status_flag = PreorderStatusflagModel::getFirst(["code" => "145"]);
$flagvalue = PreorderStatusflagValueModel::getFirst(["preorder_id" => $preorder_id, "flag_id" => $installation_kit_status_flag->id]);
// var_dump($flagvalue);
// exit;
if(!$flagvalue) {
$flagvalue = PreorderStatusflagValueModel::create([
"preorder_id" => $preorder_id,
"flag_id" => $installation_kit_status_flag->id
]);
}
$value = ($sent) ? 1 : 0;
$flagvalue->value = $value;
try {
if(!$flagvalue->save()) {
return false;
}
} catch(Exception $e) {
$this->log->debug($e->getTraceAsString());
die("hi");
}
if($sent) {
$plog->sent_by = $this->me->id;
$plog->sent = date('U');
} else {
$plog->sent_by = null;
$plog->sent = 0;
}
if(!$plog->save()) return false;
return ["preorder_id" => $preorder->id];
}
}