public function run() { $signups = \Workshop\SignUp::get_all()->where(array("lunch" => true, "canceled" => false))->add_filter(array("attr" => "id_assigned_to", "type" => "exact", "exact" => [3, 5, 9, 10]))->fetch(); $stats = array(); $default = [1, 2]; $foods = \Food\Item::get_all()->where(array('date' => $this::DATE))->fetch(); $canSend = array(); foreach ($foods as $food) { $canSend[$food->id] = $food; $stats[$food->id] = 0; } foreach ($signups as $person) { $food = $person->food->where(array('date' => $this::DATE))->fetch(); if (count($food)) { foreach ($food as $item) { $stats[$item->id] += 1; } } else { foreach ($default as $item) { $stats[$item] += 1; } } } $this->partial('stats/delivery', array("stats" => $stats, "foods" => $canSend)); }
public function run() { $account_pay = \Workshop\Check::get_all()->reset_cols()->add_cols(array('SUM(amount) as `total`'))->where(array("is_paid" => false))->assoc_with(null)->fetch_one(); $account_sum = \Workshop\Payment::get_all()->reset_cols()->add_cols(array('SUM(amount) as `total`'))->assoc_with(null)->fetch_one(); $stats = array("total" => \Workshop\SignUp::get_all()->count(), "unpaid" => \Workshop\SignUp::get_all()->where(array('paid' => false, 'solved' => false))->count(), "paid" => \Workshop\SignUp::get_all()->where(array('paid' => true))->count(), "waiting" => \Workshop\SignUp::get_all()->where(array('paid' => true, 'solved' => false, 'canceled' => false))->count(), "solved" => \Workshop\SignUp::get_all()->where(array('solved' => true, 'canceled' => false))->count(), "meals" => \Workshop\SignUp::get_all()->where(array('solved' => true, 'lunch' => true, 'canceled' => false))->count(), "hotel" => \Workshop\SignUp::get_all()->where(array('solved' => true, 'hotel' => true, 'canceled' => false))->count(), "expected_cnt" => \Workshop\Check::get_all()->where(array("is_paid" => false))->count(), "expected_sum" => $account_pay['total'], "received_cnt" => \Workshop\Payment::get_all()->count(), "received_sum" => $account_sum['total']); $ws = \Workshop::get_all()->fetch(); foreach ($ws as $w) { $w->sig_total = $w->signups->count(); $w->ass_total = $w->assignees->count(); } $this->partial('stats/signups', array("stats" => $stats, "workshops" => $ws)); }
public function run() { $ppl = \Workshop\SignUp::get_all(array("solved" => true, "lunch" => true, 'canceled' => false))->add_filter(array("attr" => 'id_assigned_to', "type" => 'is_null', "is_null" => false))->sort_by('name_first, name_last')->fetch(); $defaults = array('2016-05-14' => array(\Food\Item::find(1), \Food\Item::find(2)), '2016-05-15' => array(\Food\Item::find(5), \Food\Item::find(7))); $participants = array(); $focus = array('2016-05-14', '2016-05-15'); foreach ($ppl as $person) { $days = array(); foreach ($focus as $date_str) { $date = new \DateTime($date_str); $days[$date_str] = array("date" => $date->format('d. m. Y'), "items" => array(), 'food' => $defaults[$date->format('Y-m-d')]); $food = $person->food->where(array("date" => $date_str))->fetch(); if (any($food)) { $days[$date_str]['food'] = $food; } } $participants[] = array("days" => $days, "name" => $person->toName()); } $this->partial('stats/participant-lunch', array("participants" => $participants)); }
public function run() { $food = \Food\Item::get_all(array("edible" => true))->sort_by('type, blank desc')->fetch(); $days = array(); foreach ($food as $item) { $date = $item->date->format('Y-m-d'); if (!array_key_exists($date, $days)) { $days[$date] = array("date" => $item->date, "items" => array()); } $item->type_label = $item->type == 1 ? 'Polévka' : 'Hlavní'; $item->total = $item->eaters->where(array("solved" => true))->count(); if ($item->blank) { $today_picked = \Workshop\SignUp::get_all()->where(array('solved' => true, 'canceled' => false))->join('workshop_signup_has_food_item', 'USING(id_workshop_signup)', 'wshfi', 'left')->join('food_item', 'USING(id_food_item)', 'fi', 'left')->where(array('type' => $item->type, 'date' => $item->date->format('Y-m-d H:i:s')), 'fi')->count(); $signups_total = \Workshop\SignUp::get_all()->where(array('solved' => true, 'lunch' => true))->count(); $unpicked = $signups_total - $today_picked; $item->total += $unpicked; } $days[$date]['items'][] = $item; } $this->partial('stats/meals', array("days" => $days)); }
public function run() { $ppl = \Workshop\SignUp::get_all(array("solved" => true, "canceled" => false))->add_filter(array("attr" => 'id_assigned_to', "type" => 'is_null', "is_null" => false))->sort_by('name_first, name_last')->fetch(); $this->partial('stats/check-in', array("participants" => $ppl)); }
public function run() { $items = \Workshop\SignUp::get_all()->where(array('paid' => false, 'solved' => false, 'canceled' => false))->fetch(); $this->partial('stats/non-payers', array("items" => $items)); }
public function run() { $conds = array('paid' => true, 'solved' => true, 'canceled' => false); $items = \Workshop\SignUp::get_all()->reset_cols()->add_cols(array("team" => 'team', "total" => 'COUNT(*)'))->where($conds)->group_by('team')->assoc_with(null)->sort_by('total desc')->fetch(); $this->partial('stats/teams', array("items" => $items)); }
public function fetchRooms() { $signups = \Workshop\SignUp::get_all(array("hotel" => true, "solved" => true, "canceled" => false))->fetch(); $availableRoommates = array_map(function ($signup) { return $this->getAvailableRoommates($signup); }, $signups); $roommates = $this->getRoommates($availableRoommates); $roommates = $this->optimizeRoommates($roommates); $rooms = $this->getRooms($roommates); $housedIds = array_reduce($rooms, function ($carry, $item) { if (count($item) > 1) { $carry = array_merge($carry, $item); } return $carry; }, []); $roomNumbers = $this->roomNumbers; usort($roomNumbers, function ($a, $b) { if ($a['max'] == $b['max']) { return 0; } return $a['max'] > $b['max'] ? -1 : 1; }); $rooms = array_map(function ($item) use(&$roomNumbers) { $end = \DateTime::createFromFormat('Y-m-d H:i:s', \Module\Hotel\Picker::EDITABLE_UNTIL); $now = new \DateTime(); if (count($item) > 1 || $now > $end) { foreach ($roomNumbers as $key => $room) { if ($room['max'] <= count($item)) { break; } } } $label = 'Nespárováno'; $max = '?'; $paired = false; if (isset($room)) { array_splice($roomNumbers, $key, 1); $label = $room['label']; $max = $room['max']; $paired = true; } return array("label" => $label, "max" => $max, "paired" => $paired, "housed" => $this->fetchRoomsSignups($item)); }, $rooms); return array('rooms' => $rooms, 'housed' => $housedIds, 'free' => $roomNumbers, 'matched' => array_map(function ($item) { return $item->id; }, $signups)); }
public function cmd_lostAndFound() { \System\Init::full(); $users = \Workshop\SignUp::get_all()->where(array("solved" => true, "newsletter" => true, "sentLostAndFound" => false))->fetch(); \Helper\Cli::do_over($users, function ($key, $user) { $ren = new \System\Template\Renderer\Txt(); $ren->reset_layout(); $ren->partial('mail/notif/lost-and-found', array("user" => $user, "symvar" => $user->check->symvar)); $mail = new \Helper\Offcom\Mail(array('rcpt' => array($user->email), 'subject' => 'Improtřesk 2016 - Ztráty a nálezy, pozvánka', 'reply_to' => \System\Settings::get('offcom', 'default', 'reply_to'), 'message' => $ren->render_content())); $mail->send(); $user->sentLostAndFound = true; $user->save(); }); }