public function getAvgAmountPerPlan($from, $to) { if (!$this->usr->canRead()) { return array(); } //можно заменить на FULL OUTER JOIN , когда будет реалзован в SQLITE //$amounts = $this->getAvgAmount($from, $to); $amounts = $this->getSumAmount($from, $to); $plans = $this->getList(); $mb = months_between($from, $to); $ret = array(); $sum_plan = 0; $sum_fact = 0; foreach ($plans as $plan) { $sum = 0; foreach ($amounts as $amount) { if ($amount['group'] == $plan["grp_id"]) { $sum = $amount["amount"]; break; } } if (floatval($plan["plan"]) == 0 && $sum == 0) { continue; } //months between $plan["plan"] = round($plan["plan"] * $mb, 2); $sum_plan += floatval($plan["plan"]); $sum_fact += $sum; $ret[] = array('id' => $plan["grp_id"], 'tname' => $plan["name"], 'plan' => floatval($plan["plan"]), 'fact' => $sum); } $ret[] = array('id' => -1, 'tname' => "Итог", 'plan' => $sum_plan, 'fact' => $sum_fact); return $ret; }
/** Shows a timeline of experiments */ public function timeline() { $experiments = $this->experimentModel->get_all_experiments(FALSE); // Retrieve the months between the selected dates $date_start = $this->input->post('date_start'); $date_end = $this->input->post('date_end'); $min_date = $date_start ? input_date($date_start) : input_date(date('Y-01-01')); $max_date = $date_end ? input_date($date_end) : input_date(date('Y-12-31')); $months = months_between($min_date, $max_date); // Loop over experiments, count participations per year/month $tested = array(); foreach ($experiments as $experiment) { // For every new experiment, add default counts foreach ($months as $month) { $default_counts[$month] = 0; } $tested[$experiment->name] = $default_counts; $month_counts = $this->experimentModel->count_participations_per_month($experiment->id, $min_date, $max_date); foreach ($month_counts as $mc) { $tested[$experiment->name][$mc->month] = array(); $tested[$experiment->name][$mc->month]['count'] = $mc->count; $tested[$experiment->name][$mc->month]['color'] = 'none'; } if ($experiment->date_start) { $e_months = months_between(max(input_date($experiment->date_start), $min_date), min(input_date($experiment->date_end), $max_date)); foreach ($e_months as $month) { if (!isset($tested[$experiment->name][$month]['count'])) { $tested[$experiment->name][$month] = array(); $tested[$experiment->name][$month]['count'] = 0; } $tested[$experiment->name][$month]['color'] = $experiment->experiment_color; } } } ksort($tested); $data['page_title'] = lang('timeline'); $data['action'] = 'experiment/timeline/'; $data['tested'] = $tested; $data['date_start'] = output_date($min_date, TRUE); $data['date_end'] = output_date($max_date, TRUE); $this->load->view('templates/header', $data); $this->load->view('experiment_timeline_view', $data); $this->load->view('templates/footer'); }