307 lines
11 KiB
PHP
307 lines
11 KiB
PHP
<?php
|
|
|
|
class DashboardController extends mfBaseController {
|
|
|
|
protected function init() {
|
|
$this->needlogin=true;
|
|
$me = new User();
|
|
$me->loadMe();
|
|
$this->me = $me;
|
|
$this->layout()->set("me",$me);
|
|
}
|
|
|
|
protected function indexAction() {
|
|
if($this->me->is("preorderfront")) {
|
|
$this->redirect("Preorder");
|
|
}
|
|
if($this->me->is("Preorderlogistics")) {
|
|
$this->redirect("Preorderlogistics");
|
|
}
|
|
|
|
$newss = NewsModel::getAll();
|
|
$this->layout()->set("newss", $newss);
|
|
|
|
if($this->me->can("Statistics") && $this->me->is(["Admin", "netowner", "salespartner"])) {
|
|
$this->redirect("DashboardNew");
|
|
}
|
|
}
|
|
|
|
protected function dashboardAction() {
|
|
$this->layout()->setTemplate("Dashboard/Dashboard");
|
|
|
|
$r = $this->request;
|
|
|
|
$campaign_ids = $r->campaign_id;
|
|
if($campaign_ids && !is_array($campaign_ids)) {
|
|
$campaign_ids = [$campaign_ids];
|
|
}
|
|
|
|
$netowner_id = intval($r->netowner_id);
|
|
$this->layout()->set("netowner_id", $netowner_id);
|
|
|
|
$gemeinde_id = intval($r->gemeinde_id);
|
|
if(!$gemeinde_id) {
|
|
$gemeinde_id = false;
|
|
}
|
|
$this->layout()->set("gemeinde_id", $gemeinde_id);
|
|
|
|
|
|
if($this->me->is("Admin")) {
|
|
if($netowner_id) {
|
|
$campaigns = PreordercampaignModel::search(["owner_id" => $netowner_id]);
|
|
} else {
|
|
$campaigns = PreordercampaignModel::getAll();
|
|
}
|
|
|
|
if(!$campaign_ids) {
|
|
$campaign_filter = [];
|
|
if($netowner_id) {
|
|
$campaign_filter['owner_id'] = $netowner_id;
|
|
}
|
|
foreach(PreordercampaignModel::search($campaign_filter) as $campaign) {
|
|
$campaign_ids[] = $campaign->id;
|
|
}
|
|
}
|
|
} else {
|
|
$campaigns = PreordercampaignModel::search(["owner_id" => $this->me->address_id]);
|
|
$campaign_filter = ["preordercampaign_id" => $campaign_ids];
|
|
if(!$campaign_ids) {
|
|
foreach(PreordercampaignModel::search(["owner_id" => $this->me->address_id]) as $campaign) {
|
|
$campaign_ids[] = $campaign->id;
|
|
}
|
|
}
|
|
}
|
|
|
|
if(!$campaign_ids) {
|
|
$campaign_ids = [0];
|
|
}
|
|
|
|
|
|
if($gemeinde_id) {
|
|
$count_orders = PreorderModel::countActive(["preordercampaign_id" => $campaign_ids, "gemeinde_id" => $gemeinde_id]);
|
|
$status_connected_single = PreorderModel::countActive(["preordercampaign_id" => $campaign_ids, "gemeinde_id" => $gemeinde_id, "status_code" => 244]);
|
|
$status_connected_multi = PreorderModel::countActive(["preordercampaign_id" => $campaign_ids, "gemeinde_id" => $gemeinde_id, "status_code" => 245]);
|
|
$status_connected = PreorderModel::countActive(["preordercampaign_id" => $campaign_ids, "gemeinde_id" => $gemeinde_id , "status_code" => 500]);
|
|
} else {
|
|
$count_orders = PreorderModel::countActive(["preordercampaign_id" => $campaign_ids]);
|
|
$status_connected_single = PreorderModel::countActive(["preordercampaign_id" => $campaign_ids, "status_code" => 244]);
|
|
$status_connected_multi = PreorderModel::countActive(["preordercampaign_id" => $campaign_ids, "status_code" => 245]);
|
|
$status_connected = PreorderModel::countActive(["preordercampaign_id" => $campaign_ids, "status_code" => 500]);
|
|
}
|
|
|
|
|
|
$max_connections = $this->getTotalHomes($campaign_ids, $gemeinde_id);
|
|
$weekly_orders = $this->getWeeklyOrders($campaign_ids, $gemeinde_id);
|
|
|
|
$partner_orders = $this->getPartnerOrderCount($campaign_ids, $gemeinde_id);
|
|
$partner_orders_by_status = $this->getPartnerOrdersByStatus($campaign_ids, $gemeinde_id);
|
|
|
|
$total_orders = $partner_orders["total"];
|
|
unset($partner_orders["total"]);
|
|
|
|
//var_dump($partner_orders);exit;
|
|
|
|
$stati = [];
|
|
foreach(PreorderstatusModel::getAll() as $status) {
|
|
$stati[$status->id] = ["code" => $status->code, "name" => $status->name];
|
|
}
|
|
|
|
$this->layout()->set("stati", $stati);
|
|
|
|
$this->layout()->set("max_connections", $max_connections);
|
|
$this->layout()->set("count_orders", $count_orders);
|
|
$this->layout()->set("weekly_orders", $weekly_orders);
|
|
|
|
$this->layout()->set("status_connected_single", $status_connected_single);
|
|
$this->layout()->set("status_connected_multi", $status_connected_multi);
|
|
$this->layout()->set("status_connected", $status_connected);
|
|
$this->layout()->set("partner_orders", $partner_orders);
|
|
$this->layout()->set("total_orders", $total_orders);
|
|
$this->layout()->set("partner_orders_by_status", $partner_orders_by_status);
|
|
|
|
$this->layout()->set("campaigns", $campaigns);
|
|
$this->layout()->set("campaign_id", $r->campaign_id);
|
|
|
|
$this->layout()->set("gemeinden", $this->getGemeindenFromCampaigns($campaign_ids));
|
|
|
|
}
|
|
|
|
private function getGemeindenFromCampaigns($campaignids = []) {
|
|
$gemeinden = [];
|
|
|
|
foreach($campaignids as $campaign_id) {
|
|
$campaign = new Preordercampaign($campaign_id);
|
|
if(!$campaign || !$campaign->network_id || !$campaign->network->adb_netzgebiet_id) continue;
|
|
$gems = $campaign->network->adb_netzgebiet->gemeinden;
|
|
|
|
if(!is_array($gems)) continue;
|
|
|
|
foreach($gems as $gem) {
|
|
if(!array_key_exists($gem->name, $gemeinden)) {
|
|
$gemeinden[$gem->name] = $gem;
|
|
}
|
|
}
|
|
}
|
|
ksort($gemeinden);
|
|
|
|
return $gemeinden;
|
|
}
|
|
|
|
private function getTotalHomes($preordercampaign_id = [], $gemeinde_id = false) {
|
|
return 0;
|
|
// $i_total_calculated_homes = 0;
|
|
|
|
// if($gemeinde_id) {
|
|
// $sql = "SELECT COUNT(adb_wohneinheit.id) as cnt FROM `".ADDRESSDB_DBNAME."`.Wohneinheit adb_wohneinheit
|
|
// LEFT JOIN `".ADDRESSDB_DBNAME."`.Hausnummer adb_hausnummer ON (adb_wohneinheit.hausnummer_id = adb_hausnummer.id)
|
|
// LEFT JOIN `".ADDRESSDB_DBNAME."`.Strasse adb_strasse ON (adb_hausnummer.strasse_id = adb_strasse.id)
|
|
// WHERE adb_strasse.gemeinde_id = $gemeinde_id
|
|
// ";
|
|
// $res = $this->db()->query($sql);
|
|
// if($this->db()->num_rows($res)) {
|
|
// $data = $this->db()->fetch_object($res);
|
|
// return $data->cnt;
|
|
// }
|
|
// } else {
|
|
// foreach($preordercampaign_id as $campaign_id) {
|
|
// $campaign = new Preordercampaign($campaign_id);
|
|
// if($campaign->id) {
|
|
// $i_total_calculated_homes += ($campaign->homes_DEPRECATED_total) ? $campaign->homes_DEPRECATED_total : $campaign->homes_DEPRECATED_total;
|
|
// }
|
|
// }
|
|
// }
|
|
// return $i_total_calculated_homes;
|
|
}
|
|
|
|
private function getPartnerOrderCount($preordercampaign_id = [], $gemeinde_id = false) {
|
|
$orders = [];
|
|
$totals = 0;
|
|
|
|
$where = "(tt_preorder.deleted = 0 OR tt_preorder.deleted IS NULL) AND tt_preorderstatus.code < 899 AND tt_preorder.preordercampaign_id IN (".implode(",", $preordercampaign_id).")";
|
|
if($gemeinde_id) {
|
|
$where .= " AND gemeinde_id=$gemeinde_id";
|
|
}/* else {
|
|
$sql = "SELECT COUNT(Preorder.id) as cnt, IF(Address.company IS NOT NULL AND Address.company <> '', Address.company, CONCAT(Address.firstname, ' ', Address.lastname)) as partner FROM Preorder
|
|
LEFT JOIN Preorderstatus ON (Preorderstatus.id = Preorder.status_id)
|
|
LEFT JOIN Address ON (Preorder.partner_id = Address.id)
|
|
LEFT JOIN Addresstype ON (Addresstype.address_id = Address.id AND Addresstype.type='salespartner')
|
|
WHERE (Preorder.deleted = 0 OR Preorder.deleted IS NULL)
|
|
AND Preorderstatus.code < 899
|
|
AND Preorder.preordercampaign_id IN (".implode(",", $preordercampaign_id).")
|
|
GROUP BY Address.id";
|
|
}*/
|
|
|
|
$sql = "SELECT COUNT(*) as cnt,
|
|
IF(tt_address.company IS NOT NULL AND tt_address.company <> '', tt_address.company, CONCAT(tt_address.firstname, ' ', tt_address.lastname)) as partner
|
|
FROM `".FRONKDB_DBNAME."`.Preorder tt_preorder
|
|
LEFT JOIN `".FRONKDB_DBNAME."`.Preorderstatus tt_preorderstatus ON (tt_preorder.status_id = tt_preorderstatus.id)
|
|
LEFT JOIN `".ADDRESSDB_DBNAME."`.view_hausnummer as adb_hausnummer ON (tt_preorder.adb_hausnummer_id = adb_hausnummer.hausnummer_id)
|
|
LEFT JOIN `".FRONKDB_DBNAME."`.Address tt_address ON (tt_preorder.partner_id = tt_address.id)
|
|
LEFT JOIN `".FRONKDB_DBNAME."`.Addresstype tt_addresstype ON (tt_addresstype.address_id = tt_address.id AND tt_addresstype.type='salespartner')
|
|
WHERE
|
|
$where
|
|
GROUP BY tt_address.id
|
|
";
|
|
|
|
|
|
|
|
$this->log->debug($sql);
|
|
$res = $this->db()->query($sql);
|
|
if($this->db()->num_rows($res)) {
|
|
while($data = $this->db()->fetch_object($res)) {
|
|
if($data->partner) {
|
|
$orders[$data->partner] = $data->cnt;
|
|
} else {
|
|
$orders["Kein Partner"] = $data->cnt;
|
|
}
|
|
$totals += $data->cnt;
|
|
}
|
|
}
|
|
arsort($orders);
|
|
$orders["total"] = $totals;
|
|
return $orders;
|
|
}
|
|
|
|
private function getWeeklyOrders($preordercampaign_id = [], $gemeinde_id = false) {
|
|
$orders = [];
|
|
|
|
$week = new DateTime("now - 52 weeks");
|
|
$start = $week->getTimestamp();
|
|
|
|
for($w = 1; $w <= 52; $w++) {
|
|
$week->modify("+1 week");
|
|
$end = $week->getTimestamp();
|
|
|
|
/*$week = $now->modify("-$w weeks");
|
|
$week_before = $week->modify("-1 weeks");
|
|
$this->log->debug("now: ".$now->getTimestamp()." | week ".$week->getTimestamp()." | before: ".$week_before->getTimestamp());*/
|
|
|
|
$where = "AND (tt_preorder.`create` > $start AND tt_preorder.`create` <= $end)";
|
|
|
|
if($gemeinde_id) {
|
|
$count = PreorderModel::countActive(["preordercampaign_id" => $preordercampaign_id, "gemeinde_id" => $gemeinde_id, "add-where" => $where]);
|
|
} else {
|
|
$count = PreorderModel::countActive(["preordercampaign_id" => $preordercampaign_id, "add-where" => $where]);
|
|
}
|
|
$orders[$week->getTimestamp()] = $count;
|
|
$start = $end;
|
|
}
|
|
|
|
return $orders;
|
|
//var_dump($orders);exit;
|
|
}
|
|
|
|
private function getPartnerOrdersByStatus($preordercampaign_id = [], $gemeinde_id = false) {
|
|
$orders = [];
|
|
|
|
if ($gemeinde_id) {
|
|
$preorders = PreorderModel::searchActive(["preordercampaign_id" => $preordercampaign_id, "gemeinde_id" => $gemeinde_id]);
|
|
} else {
|
|
$preorders = PreorderModel::searchActive(["preordercampaign_id" => $preordercampaign_id], false, false, true);
|
|
}
|
|
|
|
$preorderStatus = PreorderstatusModel::getAll();
|
|
$preorderStatus = array_column($preorderStatus, null, 'id');
|
|
|
|
|
|
$partners = [];
|
|
// log add partnerids from preorders
|
|
$parnerIDs = [];
|
|
foreach ($preorders as $preorder) {
|
|
if (!in_array($preorder->partner_id, $parnerIDs))
|
|
$parnerIDs[] = $preorder->partner_id;
|
|
}
|
|
|
|
foreach ($preorders as $preorder) {
|
|
$partnerId = $preorder->partner_id;
|
|
if (!array_key_exists($partnerId, $partners) && $partnerId !== null) {
|
|
$partner = AddressModel::getFirst(["id" => $partnerId]);
|
|
$partners[$partnerId] = $partner->getCompanyOrName();
|
|
$name = $partners[$partnerId];
|
|
} else if ($partnerId === null) {
|
|
$name = "Kein Partner";
|
|
} else {
|
|
$name = $partners[$partnerId];
|
|
}
|
|
|
|
if (!array_key_exists($name, $orders)) {
|
|
$orders[$name] = [];
|
|
$orders[$name]["total"] = 0;
|
|
}
|
|
|
|
$status_id = $preorder->status_id;
|
|
$status_code = $preorderStatus[$status_id]->code;
|
|
|
|
if (!array_key_exists($preorder->status_id, $orders[$name])) {
|
|
$orders[$name][$preorder->status_id] = 0;
|
|
}
|
|
|
|
$orders[$name][$preorder->status_id]++;
|
|
$orders[$name]["total"]++;
|
|
}
|
|
|
|
|
|
return $orders;
|
|
}
|
|
|
|
} |