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"])) { return $this->dashboardAction(); } } 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); 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]; } $max_connections = $this->getTotalHomes($campaign_ids); $count_orders = PreorderModel::count(["preordercampaign_id" => $campaign_ids, "deleted" => 0]); $weekly_orders = $this->getWeeklyOrders($campaign_ids); $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); $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); } private function getTotalHomes($preordercampaign_id = []) { $total_homes = 0; 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 = []) { $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 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 "; $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 = []) { $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)"; $count = PreorderModel::count(["preordercampaign_id" => $preordercampaign_id, "deleted" => 0, "add-where" => $where]); $orders[$week->getTimestamp()] = $count; $start = $end; } return $orders; //var_dump($orders);exit; } private function getPartnerOrdersByStatus($preordercampaign_id = []) { $orders = []; foreach(PreorderModel::search(["preordercampaign_id" => $preordercampaign_id, "deleted" => 0]) as $preorder) { $name = $preorder->partner->getCompanyOrName(); if(!$name) $name = "Kein Partner"; if(!array_key_exists($name, $orders)) { $orders[$name] = []; $orders[$name]["total"] = 0; } if(!array_key_exists($preorder->status->id, $orders[$name])) { $orders[$name][$preorder->status->id] = 0; } $orders[$name][$preorder->status->id]++; $orders[$name]["total"]++; } //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(); } } }