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; } }