public function process_request() { $project_id = $this->project_id; $self_test_ok = $this->request->get_parameter('self_test_ok'); $self_test_delayed = $this->request->get_parameter('self_test_delayed'); $delay_detail = $this->request->get_parameter('delay_detail'); $rates = $this->request->get_parameter('rate'); if ($self_test_delayed != Null) { Bll_ReportPmtInfoBiz::get_instance()->replace_pmt_info(array('project_id' => $project_id, 'self_test_ok' => $self_test_ok, 'self_test_delayed' => $self_test_delayed, 'delay_detail' => $delay_detail)); } foreach ($rates as $user => $rate) { if ($rate['rate'] != '') { Bll_ReportPmtInfoBiz::get_instance()->replace_through_rate(array('project_id' => $project_id, 'rate' => floatval($rate['rate']), 'user' => $user, 'chinese_name' => $rate['chinese_name'])); } } }
public function handle_request_internal() { $req = APF::get_instance()->get_request(); $res = APF::get_instance()->get_response(); $params = $req->get_parameters(); $product_array = array(12, 12, 13, 14, 7, 6, 4); //12=>用户事业部,13=>经纪人事业部,14=>开发商事业部,7=>CRM,6=>移动,4=>anjuke inc $pro_v = $params['pro'] ? $params['pro'] : 1; $tab_info = array(1 => array('name' => '用户端', 'click' => false), 2 => array('name' => '客户端', 'click' => false), 3 => array('name' => '开发商', 'click' => false), 4 => array('name' => 'CRM', 'click' => false), 5 => array('name' => '移动', 'click' => false), 6 => array('name' => 'Inc.', 'click' => false)); $tab_info[$pro_v]['click'] = true; $product = $product_array[$pro_v]; $from = $params['from'] ? date("Y-m-d 00:00:00", strtotime($params['from'])) : date("Y-m-01 00:00:00"); $to = $params['to'] ? date("Y-m-d 23:59:59", strtotime($params['to'])) : date("Y-m-t 23:59:59"); $input_from = date("Y-m-d", strtotime($from)); $input_to = date("Y-m-d", strtotime($to)); $projects = Bll_PMTProjectBiz::get_instance()->get_project_detail_by_release_date_new($product, $from, $to); if (empty($projects)) { $req->set_attribute('tab_info', $tab_info); $req->set_attribute('input_from', $input_from); $req->set_attribute('input_to', $input_to); $req->set_attribute('table_project', array()); return 'NewReport_ProjectBug'; } $pmt_ids_init = array(); $projects_pmtid = array(); foreach ($projects as $project) { $projects_pmtid[$project['id']] = $project; $pmt_ids_init[] = $project['id']; } $tasks = Bll_PMTProjectBiz::get_instance()->get_tasks_by_pmt_ids($pmt_ids_init); $tasks_pmtid = array(); foreach ($tasks as $task) { if (in_array($task['task_type_id'], array(2, 3, 33))) { //2=>前端开发, 3=>后端开发,33=>开发 $tasks_pmtid[$task['project_id']]['dev'][] = $task; } elseif (in_array($task['task_type_id'], array(4))) { //4=>测试 $tasks_pmtid[$task['project_id']]['test'][] = $task; } } $pmt_ids = array(); foreach ($pmt_ids_init as $pmt_id) { if (!empty($tasks_pmtid[$pmt_id]['dev']) && !empty($tasks_pmtid[$pmt_id]['test'])) { $pmt_ids[] = $pmt_id; } else { $pmt_ids[] = ''; } } $rates = Bll_ReportPmtInfoBiz::get_instance()->get_through_rate_by_pmtids($pmt_ids); $rates_pmtid = array(); foreach ($rates as $rate) { $rates_pmtid[$rate->project_id][$rate->chinese_name] = $rate->rate; } $delay_infos = Bll_ReportPmtInfoBiz::get_instance()->get_project_delay_info_by_pmtids($pmt_ids); //延期信息 $delay_infos_pmtid = array(); foreach ($delay_infos as $delay_info) { $delay_infos_pmtid[$delay_info->project_id] = $delay_info; } //stage: 5-dev 6-test $table_workload = array(); $table_through = array(); foreach ($pmt_ids as $pmt_id) { if (empty($tasks_pmtid[$pmt_id]['dev'])) { $table_workload[$pmt_id]['dev_person'] = ''; $table_workload[$pmt_id]['dev_workload'] = 0; } else { $person = array(); $time = 0; foreach ($tasks_pmtid[$pmt_id]['dev'] as $row) { $person[] = $row['chinese_name']; $time += intval($row['workload']); } $person = array_unique($person); $person_str = implode("/", $person); $table_workload[$pmt_id]['dev_person'] = $person_str; $table_workload[$pmt_id]['dev_workload'] = $time; $through_arr = array(); $through_str = ""; foreach ($person as $person_row) { $str = isset($rates_pmtid[$pmt_id][$person_row]) ? $rates_pmtid[$pmt_id][$person_row] : "-"; if ($str == "-") { $through_arr[] = $person_row . ": " . $str; } else { if ($str < 100) { $through_arr[] = '<span style="color:red;">' . $person_row . ": " . $str . '%</span>'; } else { $through_arr[] = $person_row . ": " . $str . '%'; } } } $str = isset($rates_pmtid[$pmt_id]['all']) ? $rates_pmtid[$pmt_id]['all'] : "-"; if ($str == "-") { $through_arr[] = '整个项目' . ": " . $str; } else { if ($str < 100) { $through_arr[] = '<span style="color:red;">' . '整个项目' . ": " . $str . '%</span>'; } else { $through_arr[] = '整个项目' . ": " . $str . '%'; } } $through_str = implode("<br />", $through_arr); $table_through[$pmt_id] = $through_str; } if (empty($tasks_pmtid[$pmt_id]['test'])) { $table_workload[$pmt_id]['test_person'] = ''; $table_workload[$pmt_id]['test_workload'] = 0; } else { $person = array(); $time = 0; foreach ($tasks_pmtid[$pmt_id]['test'] as $row) { $person[] = $row['chinese_name']; $time += intval($row['workload']); } $person = array_unique($person); $person_str = implode("/", $person); $table_workload[$pmt_id]['test_person'] = $person_str; $table_workload[$pmt_id]['test_workload'] = $time; } } $bugs = Bll_TicketBiz::get_instance()->get_bugs_detail_by_pmtids($pmt_ids); //bug数 $bugs_pmtid = array(); foreach ($bugs as $bug) { $bugs_pmtid[$bug->pmt_id][] = $bug; } //environment id-value array $environments = Bll_DdCommonBiz::get_instance()->get_environments(); $envi_names = array(); foreach ($environments as $environment) { $envi_names[$environment->sort] = $environment->name; } ksort($envi_names); //priority id-value array $prioritys = Bll_DdCommonBiz::get_instance()->get_prioritys(); $priority_names = array(); foreach ($prioritys as $priority) { if ($priority->value == 6) { continue; } $priority_names[$priority->sort] = $priority->name; } ksort($priority_names); $table_bugs = array(); foreach ($pmt_ids as $pmt_id) { foreach ($envi_names as $envi) { $table_bugs[$pmt_id][$envi] = 0; } foreach ($priority_names as $prior) { $table_bugs[$pmt_id][$prior] = 0; } if (isset($bugs_pmtid[$pmt_id])) { foreach ($bugs_pmtid[$pmt_id] as $bug) { foreach ($envi_names as $envi) { if ($bug->environment == $envi) { $table_bugs[$pmt_id][$envi] += 1; } } foreach ($priority_names as $prior) { if ($bug->priority == $prior) { $table_bugs[$pmt_id][$prior] += 1; } } } } } $table_project = array(); foreach ($pmt_ids as $pmt_id) { $table_project[$pmt_id]['pmt_id'] = $pmt_id; $table_project[$pmt_id]['summary'] = $projects_pmtid[$pmt_id]['summary']; $table_project[$pmt_id]['release_date'] = date("Y-m-d", strtotime($projects_pmtid[$pmt_id]['date_release'])); $table_project[$pmt_id]['pro_set'] = empty($projects_pmtid[$pmt_id]['set_id']) ? '' : $projects_pmtid[$pmt_id]['set_id'] . ". " . $projects_pmtid[$pmt_id]['set_name']; $table_project[$pmt_id]['owner'] = $projects_pmtid[$pmt_id]['chinese_name']; $table_project[$pmt_id]['dev_person'] = $table_workload[$pmt_id]['dev_person']; $table_project[$pmt_id]['test_person'] = $table_workload[$pmt_id]['test_person']; $table_project[$pmt_id]['self_test'] = $table_through[$pmt_id]; $table_project[$pmt_id]['bugs_count'] = isset($bugs_pmtid[$pmt_id]) ? count($bugs_pmtid[$pmt_id]) : 0; $table_project[$pmt_id]['Production'] = $table_bugs[$pmt_id]['Production']; $table_project[$pmt_id]['PreRelease'] = $table_bugs[$pmt_id]['PreRelease']; $table_project[$pmt_id]['Test'] = $table_bugs[$pmt_id]['Test']; $table_project[$pmt_id]['Dev'] = $table_bugs[$pmt_id]['Dev']; $table_project[$pmt_id]['P1'] = $table_bugs[$pmt_id]['P1-Blocker']; $table_project[$pmt_id]['P2'] = $table_bugs[$pmt_id]['P2-Critical']; $table_project[$pmt_id]['P3'] = $table_bugs[$pmt_id]['P3-Major']; $table_project[$pmt_id]['P4'] = $table_bugs[$pmt_id]['P4-Minor']; $table_project[$pmt_id]['P5'] = $table_bugs[$pmt_id]['P5-Trivial']; if (isset($delay_infos_pmtid[$pmt_id])) { $table_project[$pmt_id]['is_delay'] = $delay_infos_pmtid[$pmt_id]->self_test_delayed == 1 ? 'Yes' . '<br />' . '原因:' . $delay_infos_pmtid[$pmt_id]->delay_detail : 'No'; } else { $table_project[$pmt_id]['is_delay'] = '-'; } } unset($table_project[""]); $req->set_attribute('tab_info', $tab_info); $req->set_attribute('input_from', $input_from); $req->set_attribute('input_to', $input_to); $req->set_attribute('table_project', $table_project); return 'NewReport_ProjectBug'; }
public function handle_request_internal() { $req = APF::get_instance()->get_request(); $res = APF::get_instance()->get_response(); $params = $req->get_parameters(); $pmt_id = $params['form_pmt'] ? trim($params['form_pmt']) : 0; if ($pmt_id != 0) { //project detail table $project = Bll_PMTProjectBiz::get_instance()->get_project_detail_by_ids(array($pmt_id)); $table_project = array(); if (!empty($project)) { $tasks = Bll_PMTProjectBiz::get_instance()->get_tasks_by_pmt_ids(array($pmt_id)); $rates = Bll_ReportPmtInfoBiz::get_instance()->get_through_rate_by_pmtids(array($pmt_id)); $delay_info = Bll_ReportPmtInfoBiz::get_instance()->get_project_delay_info_by_pmtids(array($pmt_id)); $dev_person = array(); $test_person = array(); foreach ($tasks as $task) { if (in_array($task['task_type_id'], array(2, 3, 33))) { $dev_person[] = $task['chinese_name']; } else { if (in_array($task['task_type_id'], array(4))) { $test_person[] = $task['chinese_name']; } } } $dev_person = array_unique($dev_person); $test_person = array_unique($test_person); $table_project['dev_person'] = implode("/", $dev_person); $table_project['test_person'] = implode("/", $test_person); $rate_person = array(); foreach ($rates as $rate) { $rate_person[$rate->chinese_name] = $rate->rate; } $through_arr = array(); foreach ($dev_person as $person_row) { $str = isset($rate_person[$person_row]) ? $rate_person[$person_row] . "%" : "-"; $through_arr[] = $person_row . ": " . $str; } $str = isset($rate_person['all']) ? $rate_person['all'] . "%" : "-"; $through_arr[] = '整个项目' . ": " . $str; $through_str = implode(" ", $through_arr); $table_project['through_rate'] = $through_str; $table_project['pmt_id'] = $pmt_id; $table_project['summary'] = $project[0]['summary']; $table_project['release_date'] = date("Y-m-d", strtotime($project[0]['date_release'])); $table_project['pro_set'] = empty($project[0]['set_id']) ? '' : $project[0]['set_id'] . ". " . $project[0]['set_name']; $table_project['owner'] = $project[0]['chinese_name']; if (!empty($delay_info)) { $table_project['is_delay'] = $delay_info[0]->self_test_delayed == 1 ? 'Yes' . '<br />' . '原因:' . $delay_info[0]->delay_detail : 'No'; } else { $table_project['is_delay'] = '-'; } } //reopen & reject list $reopen_id = Bll_TicketRelationBiz::get_instance()->find_reopen_id_by_pmtid($pmt_id); $reopen = array(); if (!empty($reopen_id)) { foreach ($reopen_id as $row) { $reopen[] = $row['ticket_id']; } } $reject_id = Bll_TicketCounterBiz::get_instance()->get_reject_id_by_pmtid($pmt_id); $reject = array(); if (!empty($reject_id)) { foreach ($reject_id as $row) { $reject[] = $row["ticket_id"]; } } //prepare $day = date("Y-m-d"); $date_arr = array(); for ($i = 9; $i >= 1; $i--) { $t = "-{$i} day"; $date_arr[] = date("Y-m-d", strtotime($t)); } $date_arr[] = $day; $status = Ticket_Status::get_all_status(); $prioritys = Bll_DdCommonBiz::get_instance()->get_prioritys(); $priority = array(); $p_id_name = array(); foreach ($prioritys as $prioritys_row) { $priority[$prioritys_row->value] = $prioritys_row->name; $p_id_name[$prioritys_row->id] = $prioritys_row->name; } $environments = Bll_DdCommonBiz::get_instance()->get_environments(); $environment = array(); foreach ($environments as $environments_row) { $environment[$environments_row->value] = $environments_row->name; } //daily table $table_data = Bll_ReportProgessPmtBiz::get_instance()->get_counts_by_type_date($pmt_id, '2012-05-01', $day); foreach ($table_data as $key => $data_row) { $table_data[$key]->environment = $environment[$data_row->environment]; } //pmt_day $counts_day = Bll_ReportDayPmtBiz::get_instance()->get_counts_by_pmt_type($pmt_id, 'all'); $pmt_day = array(); if (!empty($counts_day)) { foreach ($counts_day as $key => $row) { $pmt_day[] = array('date' => $this->convert_date($row->day), 'count' => $row->count); } } else { $pmt_day[] = array('date' => $this->convert_date($day), 'count' => 0); } /*$day_pro = array(); foreach($counts_day as $row){ $day_pro[$row->day] = $row->count; } foreach($date_arr as $date_row){ $c = isset($day_pro[$date_row])? $day_pro[$date_row] : 0; $pmt_day[] = array('date' => $date_row, 'count' => $c); }*/ //pmt_priority $counts_prior = Bll_ReportDayPmtBiz::get_instance()->get_counts_by_pmt_type($pmt_id, 'priority'); $prior_pro = array(); foreach ($counts_prior as $row) { $prior_pro[$row->day][$row->type_value] = $row->count; } $pmt_priority = array(); if (!empty($prior_pro)) { foreach ($prior_pro as $key => $row) { $tmp = array(); $tmp['date'] = $this->convert_date($key); foreach ($priority as $p_value => $p_name) { $o = isset($row[$p_value]) ? $row[$p_value] : 0; $tmp[$p_name] = $o; } $pmt_priority[] = $tmp; } } /*else { $tmp = array(); $tmp['date'] = $this->convert_date($day); foreach($priority as $p_value => $p_name){ $tmp[$p_name] = 0; } $pmt_priority[] = $tmp; }*/ //pmt_status $counts_status = Bll_ReportDayPmtBiz::get_instance()->get_counts_by_pmt_type($pmt_id, 'status'); $status_pro = array(); foreach ($counts_status as $row) { $status_pro[$row->day][$row->type_value] = $row->count; } $pmt_status = array(); if (!empty($status_pro)) { foreach ($status_pro as $key => $row) { $tmp = array(); $tmp['date'] = $this->convert_date($key); foreach ($status as $status_row) { $s = isset($row[$status_row]) ? $row[$status_row] : 0; $tmp[$status_row] = $s; } $pmt_status[] = $tmp; } } /*else { $tmp = array(); $tmp['date'] = $this->convert_date($day); foreach($status as $status_row){ $tmp[$status_row] = 0; } $pmt_status[] = $tmp; }*/ //priority and status today $tickets_type = Bll_TicketBiz::get_instance()->get_count_pmt_type($pmt_id); $ticket_priority = array(); $ticket_status = array(); foreach ($tickets_type as $row) { $ticket_priority[$row->priority][] = $row; $ticket_status[$row->status][] = $row; } $tmp_p = array(); $tmp_p['date'] = $this->convert_date($day); foreach ($p_id_name as $id => $p_name) { $tmp_p[$p_name] = isset($ticket_priority[$id]) ? count($ticket_priority[$id]) : 0; } if (!isset($prior_pro[$day])) { $pmt_priority[] = $tmp_p; } $tmp_s = array(); $tmp_s['date'] = $this->convert_date($day); foreach ($status as $status_row) { $tmp_s[$status_row] = isset($ticket_status[$status_row]) ? count($ticket_status[$status_row]) : 0; } if (!isset($status_pro[$day])) { $pmt_status[] = $tmp_s; } $req->set_attribute('pmt_day', $pmt_day); $req->set_attribute('pmt_priority', $pmt_priority); $req->set_attribute('pmt_status', $pmt_status); $req->set_attribute('table_data', $table_data); $req->set_attribute('table_project', $table_project); $req->set_attribute('reopen', $reopen); $req->set_attribute('reject', $reject); } $req->set_attribute('pmt_id', $pmt_id); return 'NewReport_ProjectDaily'; }
public function handle_request_internal() { $req = APF::get_instance()->get_request(); $params = $req->get_parameters(); $from = $params['from']; $to = $params['to']; $person = $params['p']; $product = $params['pro']; $mode = $params['m']; $pmt_id_q = $params['pmt'] ? $params['pmt'] : 0; if ($pmt_id_q != 0) { $projects = Bll_PMTProjectBiz::get_instance()->get_project_detail_by_ids(array($pmt_id_q)); } else { $projects = Bll_PMTProjectBiz::get_instance()->get_projects_by_release_date_new($product, $from, $to); } $pmt_ids_init = array(); $projects_pmtid = array(); foreach ($projects as $project) { $projects_pmtid[$project['id']] = $project; $pmt_ids_init[] = $project['id']; } $tasks = Bll_PMTProjectBiz::get_instance()->get_tasks_by_pmt_ids($pmt_ids_init); $tasks_pmtid = array(); foreach ($tasks as $task) { if (in_array($task['task_type_id'], array(2, 3, 33))) { $tasks_pmtid[$task['project_id']]['dev'][$task['chinese_name']][] = $task['workload']; } elseif (in_array($task['task_type_id'], array(4))) { $tasks_pmtid[$task['project_id']]['test'][$task['chinese_name']][] = $task['workload']; } } $pmt_ids = array(); foreach ($pmt_ids_init as $pmt_id) { if (!empty($tasks_pmtid[$pmt_id]['dev']) && !empty($tasks_pmtid[$pmt_id]['test'])) { $pmt_ids[] = $pmt_id; } } $rates = Bll_ReportPmtInfoBiz::get_instance()->get_through_rate_by_pmtids($pmt_ids); $rates_pmtid = array(); foreach ($rates as $rate) { $rates_pmtid[$rate->project_id][$rate->chinese_name] = $rate->rate; } if ($mode == '1') { $bugs = Bll_TicketBiz::get_instance()->get_bugs_by_persons_sort_pmt($person, $pmt_ids); } elseif ($mode == '2') { $bugs = Bll_TicketBiz::get_instance()->get_bugs_by_qa_sort_pmt($person, $pmt_ids); } $bugs_pmtid = array(); foreach ($bugs as $bug) { $bugs_pmtid[$bug['pmt_id']] = $bug['BugCount']; } $table = array(); $m = $mode == '1' ? 'dev' : 'test'; foreach ($pmt_ids as $pmt_id) { if (isset($bugs_pmtid[$pmt_id]) || !empty($tasks_pmtid[$pmt_id][$m][$person])) { $table[$pmt_id]['pmt_id'] = $pmt_id; $table[$pmt_id]['summary'] = $projects_pmtid[$pmt_id]['summary']; $table[$pmt_id]['person'] = $person; $table[$pmt_id]['test_through'] = isset($rates_pmtid[$pmt_id][$person]) ? $rates_pmtid[$pmt_id][$person] . "%" : "-"; $time = 0; if (isset($tasks_pmtid[$pmt_id][$m][$person])) { foreach ($tasks_pmtid[$pmt_id][$m][$person] as $time_row) { $time += intval($time_row); } } $table[$pmt_id]['workload'] = $time; $table[$pmt_id]['bugs_count'] = isset($bugs_pmtid[$pmt_id]) ? $bugs_pmtid[$pmt_id] : 0; } } $req->set_attribute('table', $table); $req->set_attribute('from', $from); $req->set_attribute('to', $to); $req->set_attribute('person', $person); $req->set_attribute('mode', $mode); return 'NewReport_PersonDetail'; }
public function handle_request_internal() { $req = APF::get_instance()->get_request(); $res = APF::get_instance()->get_response(); $params = $req->get_parameters(); $sub = $params['form_sub'] ? trim($params['form_sub']) : 'Update'; $product_array = array(0, 12, 13, 14, 7, 6, 4); $pro_v = $params['pro'] ? $params['pro'] : 0; $pmt_id_q = $params['pmt_id'] ? trim($params['pmt_id']) : 0; /*$tab_info = array( 1 => array('name' => 'Anjuke', 'click' => false), 2 => array('name' => 'Aifang', 'click' => false), 3 => array('name' => 'Haozu', 'click' => false), 4 => array('name' => 'Jinpu', 'click' => false), 5 => array('name' => 'Mobile', 'click' => false), 6 => array('name' => 'Inc', 'click' => false) );*/ $tab_info = array(0 => array('name' => '全部', 'click' => false), 1 => array('name' => '用户端', 'click' => false), 2 => array('name' => '客户端', 'click' => false), 3 => array('name' => '开发商', 'click' => false), 4 => array('name' => 'CRM', 'click' => false), 5 => array('name' => '移动', 'click' => false), 6 => array('name' => 'Inc.', 'click' => false)); $tab_info[$pro_v]['click'] = true; $product = $product_array[$pro_v]; $from = $params['from'] ? date("Y-m-d 00:00:00", strtotime($params['from'])) : date("Y-m-01 00:00:00"); $to = $params['to'] ? date("Y-m-d 23:59:59", strtotime($params['to'])) : date("Y-m-t 23:59:59"); $input_from = date("Y-m-d", strtotime($from)); $input_to = date("Y-m-d", strtotime($to)); $mode = $params['select_mode'] ? $params['select_mode'] : '1'; if ($sub == 'OK' && $pmt_id_q != 0) { $projects = Bll_PMTProjectBiz::get_instance()->get_project_detail_by_ids(array($pmt_id_q)); } else { $projects = Bll_PMTProjectBiz::get_instance()->get_projects_by_release_date_new($product, $from, $to); } //shirlyhu $groups = Bll_UserGroupCustomBiz::get_instance()->get_all_groups(); foreach ($groups as $value) { $group[$value->department][] = array('name' => $value->group_name, 'id' => $value->id); } if ($group != null) { $req->set_attribute('group', $group); } $groups_users = Bll_UserGroupCustomBiz::get_instance()->get_groups_by_department(10); //属于用户端的组 $member_group = array(); foreach ($groups as $groups_user) { $group_members = explode(',', $groups_user->group_members); $member_chinesename = Bll_UserBiz::get_instance()->get_chinesenames_by_ids($group_members); foreach ($member_chinesename as $group_member) { if ($group_member) { $member_group[$group_member] .= $groups_user->id . ","; } } } //shirlyhu if (empty($projects)) { $req->set_attribute('product', $product); $req->set_attribute('tab_info', $tab_info); $req->set_attribute('table_person', array()); $req->set_attribute('table_project', array()); $req->set_attribute('input_from', $input_from); $req->set_attribute('input_to', $input_to); $req->set_attribute('mode', $mode); $req->set_attribute('pmt_id_q', $pmt_id_q); return 'NewReport_Workload'; } $pmt_ids_init = array(); $projects_pmtid = array(); foreach ($projects as $project) { $projects_pmtid[$project['id']] = $project; $pmt_ids_init[] = $project['id']; } $tasks = Bll_PMTProjectBiz::get_instance()->get_tasks_by_pmt_ids($pmt_ids_init); $tasks_pmtid = array(); $tasks_pmtid_person = array(); if ($tasks) { foreach ($tasks as $task) { if (in_array($task['task_type_id'], array(2, 3, 33))) { $tasks_pmtid[$task['project_id']]['dev'][] = $task; $tasks_pmtid_person[$task['project_id']]['dev'][$task['chinese_name']][] = $task['workload']; } elseif (in_array($task['task_type_id'], array(4))) { $tasks_pmtid[$task['project_id']]['test'][] = $task; $tasks_pmtid_person[$task['project_id']]['test'][$task['chinese_name']][] = $task['workload']; } } } $pmt_ids = array(); foreach ($pmt_ids_init as $pmt_id) { if (!empty($tasks_pmtid[$pmt_id]['dev']) && !empty($tasks_pmtid[$pmt_id]['test'])) { $pmt_ids[] = $pmt_id; } } if (empty($pmt_ids)) { $req->set_attribute('product', $product); $req->set_attribute('tab_info', $tab_info); $req->set_attribute('table_person', array()); $req->set_attribute('table_project', array()); $req->set_attribute('input_from', $input_from); $req->set_attribute('input_to', $input_to); $req->set_attribute('mode', $mode); $req->set_attribute('pmt_id_q', $pmt_id_q); return 'NewReport_Workload'; } $tasks_person = array(); $tasks_qa = array(); $persons = array(); $qa_users = array(); foreach ($tasks as $task) { if (in_array($task['project_id'], $pmt_ids)) { if (in_array($task['task_type_id'], array(2, 3, 33))) { $tasks_person[$task['chinese_name']][] = $task['workload']; $persons[] = $task['chinese_name']; } elseif (in_array($task['task_type_id'], array(4))) { $tasks_qa[$task['chinese_name']][] = $task['workload']; $qa_users[] = $task['chinese_name']; } } } $persons_pro = array_unique($persons); $persons = array(); foreach ($persons_pro as $row) { $persons[] = $row; } $qa_pro = array_unique($qa_users); $qa_users = array(); foreach ($qa_pro as $row) { $qa_users[] = $row; } $rates = Bll_ReportPmtInfoBiz::get_instance()->get_through_rate_by_pmtids($pmt_ids); $rates_pmtid = array(); foreach ($rates as $rate) { $rates_pmtid[$rate->project_id][$rate->chinese_name] = $rate->rate; } $delay_infos = Bll_ReportPmtInfoBiz::get_instance()->get_project_delay_info_by_pmtids($pmt_ids); $delay_infos_pmtid = array(); foreach ($delay_infos as $delay_info) { $delay_infos_pmtid[$delay_info->project_id] = $delay_info; } $bugs = Bll_TicketBiz::get_instance()->get_bugs_by_pmtids($pmt_ids); $bugs_pmtid = array(); foreach ($bugs as $bug) { $bugs_pmtid[$bug['pmt_id']] = $bug['BugCount']; } $bug_detail = Bll_TicketBiz::get_instance()->get_bugs_detail_by_pmtids($pmt_ids); $users = Bll_UserBiz::get_instance()->get_all_users(); $user_wc = array(); foreach ($users as $row) { $user_wc[$row->whole_name] = $row->chinese_name; } $bug_detail_dev = array(); $bug_detail_qa = array(); foreach ($bug_detail as $row) { $bug_detail_dev[$row->pmt_id][$user_wc[$row->owner]][] = $row; $bug_detail_qa[$row->pmt_id][$user_wc[$row->reporter]][] = $row; } $table_work_person = array(); foreach ($pmt_ids as $pmt_id) { $dev_p = array(); $dev_t = array(); $test_p = array(); $test_t = array(); $dev_bug = array(); $test_bug = array(); $dev_bug_workload = array(); $test_bug_workload = array(); foreach ($tasks_pmtid_person[$pmt_id]['dev'] as $d_p => $task_dev) { $dev_p[$d_p] = $d_p; $dev_t[$d_p] = 0; $dev_bug[$d_p] = isset($bug_detail_dev[$pmt_id][$d_p]) ? count($bug_detail_dev[$pmt_id][$d_p]) : 0; foreach ($task_dev as $t) { $dev_t[$d_p] += intval($t); } $dev_bug_workload[$d_p] = $dev_t[$d_p] == 0 ? 0 : round(intval($dev_bug[$d_p]) / $dev_t[$d_p], 2); } foreach ($tasks_pmtid_person[$pmt_id]['test'] as $t_p => $task_test) { $test_p[$t_p] = $t_p; $test_t[$t_p] = 0; $test_bug[$t_p] = isset($bug_detail_qa[$pmt_id][$t_p]) ? count($bug_detail_qa[$pmt_id][$t_p]) : 0; foreach ($task_test as $t) { $test_t[$t_p] += intval($t); } $test_bug_workload[$t_p] = $test_t[$t_p] == 0 ? 0 : round(intval($test_bug[$t_p]) / $test_t[$t_p], 2); } $table_work_person[$pmt_id]['dev_p'] = implode("<br />", $dev_p); $table_work_person[$pmt_id]['dev_t'] = implode("<br />", $dev_t); $table_work_person[$pmt_id]['test_p'] = implode("<br />", $test_p); $table_work_person[$pmt_id]['test_t'] = implode("<br />", $test_t); $table_work_person[$pmt_id]['dev_bug'] = implode("<br />", $dev_bug); $table_work_person[$pmt_id]['test_bug'] = implode("<br />", $test_bug); $table_work_person[$pmt_id]['dev_bug_workload'] = implode("<br />", $dev_bug_workload); $table_work_person[$pmt_id]['test_bug_workload'] = implode("<br />", $test_bug_workload); } //stage: 5-dev 6-test $table_workload = array(); $table_through = array(); foreach ($pmt_ids as $pmt_id) { if (empty($tasks_pmtid[$pmt_id]['dev'])) { $table_workload[$pmt_id]['dev_person'] = ''; $table_workload[$pmt_id]['dev_workload'] = 0; } else { $person = array(); $time = 0; foreach ($tasks_pmtid[$pmt_id]['dev'] as $row) { $person[] = $row['chinese_name']; $time += intval($row['workload']); } $person = array_unique($person); $person_str = implode("/", $person); $table_workload[$pmt_id]['dev_person'] = $person_str; $table_workload[$pmt_id]['dev_workload'] = $time; $through_arr = array(); $through_str = ""; foreach ($person as $person_row) { $str = isset($rates_pmtid[$pmt_id][$person_row]) ? $rates_pmtid[$pmt_id][$person_row] : "-"; if ($str == "-") { $through_arr[] = $person_row . ": " . $str; } else { if ($str < 100) { $through_arr[] = '<span style="color:red;">' . $person_row . ": " . $str . '%</span>'; } else { $through_arr[] = $person_row . ": " . $str . '%'; } } } $str = isset($rates_pmtid[$pmt_id]['all']) ? $rates_pmtid[$pmt_id]['all'] : "-"; if ($str == "-") { $through_arr[] = '整个项目' . ": " . $str; } else { if ($str < 100) { $through_arr[] = '<span style="color:red;">' . '整个项目' . ": " . $str . '%</span>'; } else { $through_arr[] = '整个项目' . ": " . $str . '%'; } } $through_str = implode("<br />", $through_arr); $table_through[$pmt_id] = $through_str; } if (empty($tasks_pmtid[$pmt_id]['test'])) { $table_workload[$pmt_id]['test_person'] = ''; $table_workload[$pmt_id]['test_workload'] = 0; } else { $person = array(); $time = 0; foreach ($tasks_pmtid[$pmt_id]['test'] as $row) { $person[] = $row['chinese_name']; $time += intval($row['workload']); } $person = array_unique($person); $person_str = implode("/", $person); $table_workload[$pmt_id]['test_person'] = $person_str; $table_workload[$pmt_id]['test_workload'] = $time; } } $table_project = array(); foreach ($pmt_ids as $pmt_id) { $table_project[$pmt_id]['release_date'] = date("Y-m-d", strtotime($projects_pmtid[$pmt_id]['date_release'])); $table_project[$pmt_id]['pmt_id'] = $pmt_id; $table_project[$pmt_id]['summary'] = $projects_pmtid[$pmt_id]['summary']; $table_project[$pmt_id]['owner'] = $projects_pmtid[$pmt_id]['chinese_name']; //$table_project[$pmt_id]['dev_person'] = $table_workload[$pmt_id]['dev_person']; $table_project[$pmt_id]['dev_workload_all'] = $table_workload[$pmt_id]['dev_workload']; //$table_project[$pmt_id]['test_person'] = $table_workload[$pmt_id]['test_person']; $table_project[$pmt_id]['test_workload_all'] = $table_workload[$pmt_id]['test_workload']; $table_project[$pmt_id]['dev_person'] = $table_work_person[$pmt_id]['dev_p']; $table_project[$pmt_id]['dev_workload'] = $table_work_person[$pmt_id]['dev_t']; $table_project[$pmt_id]['dev_bug'] = $table_work_person[$pmt_id]['dev_bug']; $table_project[$pmt_id]['dev_bug_workload'] = $table_work_person[$pmt_id]['dev_bug_workload']; $table_project[$pmt_id]['test_person'] = $table_work_person[$pmt_id]['test_p']; $table_project[$pmt_id]['test_workload'] = $table_work_person[$pmt_id]['test_t']; $table_project[$pmt_id]['test_bug'] = $table_work_person[$pmt_id]['test_bug']; $table_project[$pmt_id]['test_bug_workload'] = $table_work_person[$pmt_id]['test_bug_workload']; $table_project[$pmt_id]['self_test'] = $table_through[$pmt_id]; $table_project[$pmt_id]['bugs_count'] = isset($bugs_pmtid[$pmt_id]) ? $bugs_pmtid[$pmt_id] : 0; $table_project[$pmt_id]['bug_devload'] = $table_project[$pmt_id]['dev_workload_all'] == 0 ? 0 : round($table_project[$pmt_id]['bugs_count'] / $table_project[$pmt_id]['dev_workload_all'], 2); $table_project[$pmt_id]['bug_testload'] = $table_project[$pmt_id]['test_workload_all'] == 0 ? 0 : round($table_project[$pmt_id]['bugs_count'] / $table_project[$pmt_id]['test_workload_all'], 2); $table_project[$pmt_id]['devload_testload'] = $table_project[$pmt_id]['test_workload_all'] == 0 ? 0 : round($table_project[$pmt_id]['dev_workload_all'] / $table_project[$pmt_id]['test_workload_all'], 2); //shirlyhu // $person_groups=explode("<br />",$table_project[$pmt_id]['dev_person']); // // foreach($person_groups as $person_group){ // if($member_group[$person_group]){ // $table_project[$pmt_id]['group_id'].=$member_group[$person_group].","; // } // } //shirlyhu if (isset($delay_infos_pmtid[$pmt_id])) { $table_project[$pmt_id]['is_delay'] = $delay_infos_pmtid[$pmt_id]->self_test_delayed == 1 ? 'Yes' . '<br />' . '原因:' . $delay_infos_pmtid[$pmt_id]->delay_detail : 'No'; } else { $table_project[$pmt_id]['is_delay'] = '-'; } } //by person $bugs = Bll_TicketBiz::get_instance()->get_bugs_by_persons($persons, $pmt_ids); $bugs_person = array(); foreach ($bugs as $bug) { $bugs_person[$bug['chinese_name']] = $bug['BugCount']; } $bugs_qa_user = Bll_TicketBiz::get_instance()->get_bugs_by_qas($qa_users, $pmt_ids); $bugs_qa = array(); foreach ($bugs_qa_user as $bug) { $bugs_qa[$bug['chinese_name']] = $bug['BugCount']; } $table_qa = array(); $table_qa['total'] = array('person' => 'Total', 'bugs_count' => 0, 'workload' => 0, 'bugs_load' => 0); foreach ($qa_users as $qa) { $table_qa[$qa]['person'] = $qa; if ($member_group[$qa]) { $table_qa[$qa]['group_id'] = $member_group[$qa]; } $table_qa[$qa]['bugs_count'] = isset($bugs_qa[$qa]) ? $bugs_qa[$qa] : 0; $table_qa[$qa]['workload'] = 0; foreach ($tasks_qa[$qa] as $row) { $table_qa[$qa]['workload'] += intval($row); } $table_qa[$qa]['bugs_load'] = $table_qa[$qa]['workload'] == 0 ? 0 : round($table_qa[$qa]['bugs_count'] / $table_qa[$qa]['workload'], 2); $table_qa['total']['bugs_count'] += $table_qa[$qa]['bugs_count']; $table_qa['total']['workload'] += $table_qa[$qa]['workload']; } $table_qa['total']['bugs_load'] = $table_qa['total']['workload'] == 0 ? 0 : round($table_qa['total']['bugs_count'] / $table_qa['total']['workload'], 2); $table_person = array(); $table_person['total'] = array('person' => 'Total', 'bugs_count' => 0, 'workload' => 0, 'bugs_load' => 0); foreach ($persons as $person) { $table_person[$person]['person'] = $person; if ($member_group[$person]) { $table_person[$person]['group_id'] = $member_group[$person]; } $table_person[$person]['bugs_count'] = isset($bugs_person[$person]) ? $bugs_person[$person] : 0; $table_person[$person]['workload'] = 0; foreach ($tasks_person[$person] as $row) { $table_person[$person]['workload'] += intval($row); } $table_person[$person]['bugs_load'] = $table_person[$person]['workload'] == 0 ? 0 : round($table_person[$person]['bugs_count'] / $table_person[$person]['workload'], 2); $table_person['total']['bugs_count'] += $table_person[$person]['bugs_count']; $table_person['total']['workload'] += $table_person[$person]['workload']; } $table_person['total']['bugs_load'] = $table_person['total']['workload'] == 0 ? 0 : round($table_person['total']['bugs_count'] / $table_person['total']['workload'], 2); $req->set_attribute('product', $product); $req->set_attribute('tab_info', $tab_info); $req->set_attribute('table_person', $table_person); $req->set_attribute('table_qa', $table_qa); $req->set_attribute('table_project', $table_project); $req->set_attribute('input_from', $input_from); $req->set_attribute('input_to', $input_to); $req->set_attribute('mode', $mode); $req->set_attribute('pmt_id_q', $pmt_id_q); return 'NewReport_Workload'; }
public function handle_request_internal() { $req = APF::get_instance()->get_request(); $params = $req->get_parameters(); $pmt_id = isset($params['pmt']) ? $params['pmt'] : ''; $product = isset($params['pro']) ? $params['pro'] : '1'; $from = $params['from'] ? date("Y-m-d 00:00:00", strtotime($params['from'])) : date("Y-m-01 00:00:00"); $to = $params['to'] ? date("Y-m-d 23:59:59", strtotime($params['to'])) : date("Y-m-t 23:59:59"); if ($pmt_id != '' || $product != '' || $from != '' || $to != '') { if ($pmt_id != 0) { $projects = Bll_PMTProjectBiz::get_instance()->get_project_detail_by_ids(array($pmt_id)); } else { $projects = Bll_PMTProjectBiz::get_instance()->get_projects_by_release_date($product, $from, $to); } if (empty($projects)) { $datas = array(); } else { $datas = array(); foreach ($projects as $project) { $tasks = Bll_PMTProjectBiz::get_instance()->get_tasks_by_pmt_ids(array($project['id'])); $count_dev_task = 0; $count_test_task = 0; if ($tasks) { foreach ($tasks as $task) { if (in_array($task['task_type_id'], array(2, 3, 33))) { $count_dev_task += 1; } elseif (in_array($task['task_type_id'], array(4))) { $count_test_task += 1; } } } if ($count_dev_task == 0 || $count_test_task == 0) { continue; } $datas[$project['id']]['release_date'] = date("Y-m-d", strtotime($project['date_release'])); $datas[$project['id']]['pmt_id'] = $project['id']; $datas[$project['id']]['summary'] = $project['summary']; $bug_details = Bll_TicketBiz::get_instance()->get_bugs_detail_by_pmtids(array($project['id'])); if (empty($bug_details)) { $datas[$project['id']]['component'] = ''; } else { foreach ($bug_details as $bug_detail) { $components[] = $bug_detail->component; } $components = array_count_values($components); $components_count = '0'; $component = ''; foreach ($components as $a => $b) { if ($b > $components_count) { $components_count = $b; $component = $a; } else { continue; } } $datas[$project['id']]['component'] = $component; } $dev_workload_all = '0'; $test_workload_all = '0'; foreach ($tasks as $task) { if (in_array($task['task_type_id'], array(2, 3, 33))) { $datas[$project['id']]['dev'][$task['chinese_name']]['dev_person'] = $task['chinese_name']; $bugs = Bll_TicketBiz::get_instance()->get_bugs_by_persons(array($task['chinese_name']), array($project['id'])); $datas[$project['id']]['dev'][$task['chinese_name']]['dev_person_bug_count'] = $bugs[0]['BugCount'] ? $bugs[0]['BugCount'] : '0'; $datas[$project['id']]['dev'][$task['chinese_name']]['dev_person_workload'] += $task['workload']; $dev_workload_all += $task['workload']; } elseif (in_array($task['task_type_id'], array(4))) { $datas[$project['id']]['test'][$task['chinese_name']]['test_person'] = $task['chinese_name']; $bugs = Bll_TicketBiz::get_instance()->get_bugs_by_qas(array($task['chinese_name']), array($project['id'])); $datas[$project['id']]['test'][$task['chinese_name']]['test_person_bug_count'] = $bugs[0]['BugCount'] ? $bugs[0]['BugCount'] : '0'; $datas[$project['id']]['test'][$task['chinese_name']]['test_person_workload'] += $task['workload']; $test_workload_all += $task['workload']; } if (in_array($task['task_type_id'], array(2, 3, 33))) { $datas[$project['id']]['dev'][$task['chinese_name']]['dev_bug_workload'] = $datas[$project['id']]['dev'][$task['chinese_name']]['dev_person_workload'] == 0 ? 0 : round($datas[$project['id']]['dev'][$task['chinese_name']]['dev_person_bug_count'] / $datas[$project['id']]['dev'][$task['chinese_name']]['dev_person_workload'], 2); } elseif (in_array($task['task_type_id'], array(4))) { $datas[$project['id']]['test'][$task['chinese_name']]['test_bug_workload'] = $datas[$project['id']]['test'][$task['chinese_name']]['test_person_workload'] == 0 ? 0 : round($datas[$project['id']]['test'][$task['chinese_name']]['test_person_bug_count'] / $datas[$project['id']]['test'][$task['chinese_name']]['test_person_workload'], 2); } } $datas[$project['id']]['dev_workload_all'] = $dev_workload_all; $datas[$project['id']]['test_workload_all'] = $test_workload_all; $bug_details = Bll_TicketBiz::get_instance()->get_bugs_detail_by_pmtids(array($project['id'])); $datas[$project['id']]['project_bug'] = count($bug_details); $production_bug = '0'; foreach ($bug_details as $bug_detail) { if ($bug_detail->environment == 'Production') { $production_bug += 1; } } $datas[$project['id']]['production_bug'] = $production_bug; $datas[$project['id']]['bug_devload'] = $dev_workload_all == 0 ? 0 : round(count($bug_details) / $dev_workload_all, 2); $datas[$project['id']]['bug_testload'] = $test_workload_all == 0 ? 0 : round(count($bug_details) / $test_workload_all, 2); $delay_infos = Bll_ReportPmtInfoBiz::get_instance()->get_project_delay_info_by_pmtids(array($project['id'])); if (!empty($delay_infos)) { if ($delay_infos[0]->self_test_delayed == '1') { $datas[$project['id']]['is_delay'] = 'Yes'; } else { $datas[$project['id']]['is_delay'] = 'No'; } } else { $datas[$project['id']]['is_delay'] = 'No'; } } if (!empty($datas)) { $return = array('status' => 'ok', 'result' => array('count' => count($datas), 'data' => $datas)); } else { $return = array('status' => 'ok', 'result' => array('count' => 0, 'data' => array())); } } } else { $return = array('status' => 'error', 'result' => array('code' => 101, 'message' => 'empty parameter')); } $return = json_encode($return); echo $return; }