Added gemeinde filter to Dashboard

This commit is contained in:
Frank Schubert
2024-02-26 13:33:15 +01:00
parent 8fbea5f824
commit 26d022441d
6 changed files with 335 additions and 87 deletions
+107 -74
View File
@@ -40,6 +40,13 @@ class DashboardController extends mfBaseController {
$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]);
@@ -70,17 +77,25 @@ class DashboardController extends mfBaseController {
$campaign_ids = [0];
}
$max_connections = $this->getTotalHomes($campaign_ids);
$count_orders = PreorderModel::count(["preordercampaign_id" => $campaign_ids, "deleted" => 0]);
$weekly_orders = $this->getWeeklyOrders($campaign_ids);
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);
$status_connected_single = PreorderModel::count(["preordercampaign_id" => $campaign_ids, "deleted" => 0, "status_code" => 244]);
$status_connected_multi = PreorderModel::count(["preordercampaign_id" => $campaign_ids, "deleted" => 0, "status_code" => 245]);
$status_connected = PreorderModel::count(["preordercampaign_id" => $campaign_ids, "deleted" => 0, "status_code" => 500]);
$partner_orders = $this->getPartnerOrderCount($campaign_ids);
$partner_orders_by_status = $this->getPartnerOrdersByStatus($campaign_ids);
$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"]);
@@ -108,31 +123,88 @@ class DashboardController extends mfBaseController {
$this->layout()->set("campaigns", $campaigns);
$this->layout()->set("campaign_id", $r->campaign_id);
$this->layout()->set("gemeinden", $this->getGemeindenFromCampaigns($campaign_ids));
}
private function getTotalHomes($preordercampaign_id = []) {
$total_homes = 0;
foreach($preordercampaign_id as $campaign_id) {
private function getGemeindenFromCampaigns($campaignids = []) {
$gemeinden = [];
foreach($campaignids as $campaign_id) {
$campaign = new Preordercampaign($campaign_id);
if($campaign->id) {
$total_homes += ($campaign->homes_total) ? $campaign->homes_total : $campaign->total_homes;
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) {
$total_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) {
$total_homes += ($campaign->homes_total) ? $campaign->homes_total : $campaign->total_homes;
}
}
}
return $total_homes;
}
private function getPartnerOrderCount($preordercampaign_id = []) {
private function getPartnerOrderCount($preordercampaign_id = [], $gemeinde_id = false) {
$orders = [];
$totals = 0;
$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
$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 AND Preorder.preordercampaign_id IN (".implode(",", $preordercampaign_id).")
GROUP BY Address.id
";
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)) {
@@ -150,7 +222,7 @@ class DashboardController extends mfBaseController {
return $orders;
}
private function getWeeklyOrders($preordercampaign_id = []) {
private function getWeeklyOrders($preordercampaign_id = [], $gemeinde_id = false) {
$orders = [];
$week = new DateTime("now - 52 weeks");
@@ -166,7 +238,11 @@ class DashboardController extends mfBaseController {
$where = "AND (tt_preorder.`create` > $start AND tt_preorder.`create` <= $end)";
$count = PreorderModel::count(["preordercampaign_id" => $preordercampaign_id, "deleted" => 0, "add-where" => $where]);
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;
}
@@ -175,10 +251,16 @@ class DashboardController extends mfBaseController {
//var_dump($orders);exit;
}
private function getPartnerOrdersByStatus($preordercampaign_id = []) {
private function getPartnerOrdersByStatus($preordercampaign_id = [], $gemeinde_id = false) {
$orders = [];
foreach(PreorderModel::search(["preordercampaign_id" => $preordercampaign_id, "deleted" => 0]) as $preorder) {
if($gemeinde_id) {
$preorders = PreorderModel::searchActive(["preordercampaign_id" => $preordercampaign_id, "gemeinde_id" => $gemeinde_id]);
} else {
$preorders = PreorderModel::searchActive(["preordercampaign_id" => $preordercampaign_id]);
}
foreach($preorders as $preorder) {
$name = $preorder->partner->getCompanyOrName();
if(!$name) $name = "Kein Partner";
if(!array_key_exists($name, $orders)) {
@@ -194,54 +276,5 @@ class DashboardController extends mfBaseController {
//var_dump($orders);exit;
return $orders;
}
protected function pdfAction() {
$order = new Order(7);
$owner = new Address(1);
$pdf = new Layout();
$pdf->setTemplate("Emailtemplates/attachments/new_order.pdf");
$pdf->set("ressourcePathPrefix", BASEDIR."/public/");
$pdf->set("owner", $owner);
$pdf->set("order", $order);
$pdfpath = $pdf->renderPDF();
$tvalue = $pdf->getReturnedValue();
$pdfname = $tvalue['filename'];
echo $pdfname;
exit;
return true;
//var_dump($pdfpath);exit;
// send email to customer
// TODO template rendern auslagern nach Emailtempate klasse
$tpl = new Layout();
$tpl->setTemplate("Emailtemplates/customer/new_order");
$tpl->set("owner", $owner);
$body = $tpl->render();
$values = $tpl->getReturnedValue();
$subject = $values['subject'];
$from = $values['from_email'];
$from_name = $values['from_email_name'];
$to = $owner->email;
if(!$subject || !$from || !$from_name || !$to) {
$this->log->warn("Service PIN Email not sent. (subject: '$subject', from: '$from', from_email: '$from_email', to: '$to')");
} else {
$email = new Emailnotification();
$email->setSubject($subject);
$email->setBody($body);
$email->setFrom($from, $from_name);
$email->setTo($to);
$email->setHeader("X-".MFAPPNAME."-oid", $order->id);
$email->setHeader("X-".MFAPPNAME."-pid", $product->id);
$email->addAttachment($pdfpath, null, $pdfname, "application/pdf");
$email->send();
}
}
}