function total_task_times($report_data = null, $task = null) { if (!$report_data) { $report_data = array_var($_POST, 'report'); // save selections into session $_SESSION['total_task_times_report_data'] = $report_data; } if (array_var($_GET, 'export') == 'csv') { $context = build_context_array(array_var($_REQUEST, 'context')); $report_data = json_decode(str_replace("'", '"', $_REQUEST['parameters']), true); tpl_assign('context', $context); } else { $context = active_context(); } $columns = array_var($report_data, 'columns'); if (!is_array($columns)) { $columns = array_var($_POST, 'columns', array()); } asort($columns); //sort the array by column order foreach ($columns as $column => $order) { if ($order > 0) { $newColumn = new ReportColumn(); //$newColumn->setReportId($newReport->getId()); if (is_numeric($column)) { $newColumn->setCustomPropertyId($column); } else { $newColumn->setFieldName($column); } } } $user = Contacts::findById(array_var($report_data, 'user')); $now = DateTimeValueLib::now(); $now->advance(logged_user()->getTimezone() * 3600, true); switch (array_var($report_data, 'date_type')) { case 1: //Today $st = DateTimeValueLib::make(0, 0, 0, $now->getMonth(), $now->getDay(), $now->getYear()); $et = DateTimeValueLib::make(23, 59, 59, $now->getMonth(), $now->getDay(), $now->getYear()); break; case 2: //This week $monday = $now->getMondayOfWeek(); $nextMonday = $now->getMondayOfWeek()->add('w', 1)->add('d', -1); $st = DateTimeValueLib::make(0, 0, 0, $monday->getMonth(), $monday->getDay(), $monday->getYear()); $et = DateTimeValueLib::make(23, 59, 59, $nextMonday->getMonth(), $nextMonday->getDay(), $nextMonday->getYear()); break; case 3: //Last week $monday = $now->getMondayOfWeek()->add('w', -1); $nextMonday = $now->getMondayOfWeek()->add('d', -1); $st = DateTimeValueLib::make(0, 0, 0, $monday->getMonth(), $monday->getDay(), $monday->getYear()); $et = DateTimeValueLib::make(23, 59, 59, $nextMonday->getMonth(), $nextMonday->getDay(), $nextMonday->getYear()); break; case 4: //This month $st = DateTimeValueLib::make(0, 0, 0, $now->getMonth(), 1, $now->getYear()); $et = DateTimeValueLib::make(23, 59, 59, $now->getMonth(), 1, $now->getYear())->add('M', 1)->add('d', -1); break; case 5: //Last month $now->add('M', -1); $st = DateTimeValueLib::make(0, 0, 0, $now->getMonth(), 1, $now->getYear()); $et = DateTimeValueLib::make(23, 59, 59, $now->getMonth(), 1, $now->getYear())->add('M', 1)->add('d', -1); break; case 6: //Date interval $st = getDateValue(array_var($report_data, 'start_value')); $st = $st->beginningOfDay(); $et = getDateValue(array_var($report_data, 'end_value')); $et = $et->endOfDay(); break; } $timeslotType = array_var($report_data, 'timeslot_type', 0); $group_by = array(); for ($i = 1; $i <= 3; $i++) { if ($timeslotType == 0) { $gb = array_var($report_data, 'group_by_' . $i); } else { $gb = array_var($report_data, 'alt_group_by_' . $i); } if ($gb != '0') { $group_by[] = $gb; } } $timeslots = Timeslots::getTaskTimeslots($context, null, $user, $st, $et, array_var($report_data, 'task_id', 0), $group_by, null, null, null, $timeslotType); $unworkedTasks = null; if (array_var($report_data, 'include_unworked') == 'checked') { $unworkedTasks = ProjectTasks::getPendingTasks(logged_user(), $workspace); tpl_assign('unworkedTasks', $unworkedTasks); } $gb_criterias = array(); foreach ($group_by as $text) { if (in_array($text, array('contact_id', 'rel_object_id'))) { $gb_criterias[] = array('type' => 'column', 'value' => $text); } else { if (in_array($text, array('milestone_id', 'priority'))) { $gb_criterias[] = array('type' => 'assoc_obj', 'fk' => 'rel_object_id', 'value' => $text); } else { if (str_starts_with($text, 'dim_')) { $gb_criterias[] = array('type' => 'dimension', 'value' => str_replace_first('dim_', '', $text)); } } } } $grouped_timeslots = groupObjects($gb_criterias, $timeslots); tpl_assign('columns', $columns); tpl_assign('timeslotsArray', array()); tpl_assign('grouped_timeslots', $grouped_timeslots); if (array_var($report_data, 'date_type') == 6) { $st->advance(logged_user()->getTimezone() * 3600, true); $et->advance(logged_user()->getTimezone() * 3600, true); } tpl_assign('start_time', $st); tpl_assign('end_time', $et); tpl_assign('user', $user); tpl_assign('post', $report_data); tpl_assign('template_name', 'total_task_times'); tpl_assign('title', lang('task time report')); tpl_assign('allow_export', false); if (array_var($_GET, 'export') == 'csv') { $this->setTemplate('total_task_times_csv'); ajx_current("empty"); } else { $this->setTemplate('report_wrapper'); } }
function total_task_times($report_data = null, $task = null) { if (!$report_data) { $report_data = array_var($_POST, 'report'); // save selections into session $_SESSION['total_task_times_report_data'] = $report_data; } $conditions = array(); $all_conditions = array_var($report_data, 'conditions'); if (!is_array($all_conditions)) { $all_conditions = array_var($_POST, 'conditions'); } if ($all_conditions != null) { tpl_assign('has_conditions', true); } if (is_array($all_conditions)) { foreach ($all_conditions as $condition) { if ($condition['deleted'] != "1") { $conditions[] = $condition; } } } $columns = array_var($report_data, 'columns'); if (!is_array($columns)) { $columns = array_var($_POST, 'columns', array()); } asort($columns); //sort the array by column order foreach ($columns as $column => $order) { if ($order > 0) { $newColumn = new ReportColumn(); //$newColumn->setReportId($newReport->getId()); if (is_numeric($column)) { $newColumn->setCustomPropertyId($column); } else { $newColumn->setFieldName($column); } } } tpl_assign('allow_export', false); $this->setTemplate('report_wrapper'); $user = Users::findById(array_var($report_data, 'user')); $workspace = Projects::findById(array_var($report_data, 'project_id')); if ($workspace instanceof Project) { if (array_var($report_data, 'include_subworkspaces')) { $workspacesCSV = $workspace->getAllSubWorkspacesQuery(null, logged_user()); } else { $workspacesCSV = $workspace->getId(); } } else { $workspacesCSV = logged_user()->getWorkspacesQuery(); } $st = DateTimeValueLib::now(); $et = DateTimeValueLib::now(); switch (array_var($report_data, 'date_type')) { case 1: //Today $now = DateTimeValueLib::now(); $st = DateTimeValueLib::make(0, 0, 0, $now->getMonth(), $now->getDay(), $now->getYear()); $et = DateTimeValueLib::make(23, 59, 59, $now->getMonth(), $now->getDay(), $now->getYear()); break; case 2: //This week $now = DateTimeValueLib::now(); $monday = $now->getMondayOfWeek(); $nextMonday = $now->getMondayOfWeek()->add('w', 1)->add('d', -1); $st = DateTimeValueLib::make(0, 0, 0, $monday->getMonth(), $monday->getDay(), $monday->getYear()); $et = DateTimeValueLib::make(23, 59, 59, $nextMonday->getMonth(), $nextMonday->getDay(), $nextMonday->getYear()); break; case 3: //Last week $now = DateTimeValueLib::now(); $monday = $now->getMondayOfWeek()->add('w', -1); $nextMonday = $now->getMondayOfWeek()->add('d', -1); $st = DateTimeValueLib::make(0, 0, 0, $monday->getMonth(), $monday->getDay(), $monday->getYear()); $et = DateTimeValueLib::make(23, 59, 59, $nextMonday->getMonth(), $nextMonday->getDay(), $nextMonday->getYear()); break; case 4: //This month $now = DateTimeValueLib::now(); $st = DateTimeValueLib::make(0, 0, 0, $now->getMonth(), 1, $now->getYear()); $et = DateTimeValueLib::make(23, 59, 59, $now->getMonth(), 1, $now->getYear())->add('M', 1)->add('d', -1); break; case 5: //Last month $now = DateTimeValueLib::now(); $now->add('M', -1); $st = DateTimeValueLib::make(0, 0, 0, $now->getMonth(), 1, $now->getYear()); $et = DateTimeValueLib::make(23, 59, 59, $now->getMonth(), 1, $now->getYear())->add('M', 1)->add('d', -1); break; case 6: //Date interval $st = getDateValue(array_var($report_data, 'start_value')); $st = $st->beginningOfDay(); $et = getDateValue(array_var($report_data, 'end_value')); $et = $et->beginningOfDay()->add('d', 1); break; } $st = new DateTimeValue($st->getTimestamp() - logged_user()->getTimezone() * 3600); $et = new DateTimeValue($et->getTimestamp() - logged_user()->getTimezone() * 3600); $timeslotType = array_var($report_data, 'timeslot_type', 0); $group_by = array(); for ($i = 1; $i <= 3; $i++) { if ($timeslotType == 0) { $gb = array_var($report_data, 'group_by_' . $i); } else { $gb = array_var($report_data, 'alt_group_by_' . $i); } if ($gb != '0') { $group_by[] = $gb; } } $object_subtype = array_var($report_data, 'object_subtype'); $timeslotsArray = Timeslots::getTaskTimeslots($workspace, $user, $workspacesCSV, $st, $et, array_var($report_data, 'task_id', 0), $group_by, null, 0, 0, $timeslotType, $conditions, $object_subtype); $unworkedTasks = null; if (array_var($report_data, 'include_unworked') == 'checked') { $unworkedTasks = ProjectTasks::getPendingTasks(logged_user(), $workspace); tpl_assign('unworkedTasks', $unworkedTasks); } if (array_var($_POST, 'exportCSV')) { $skip_ws = $all_conditions != null ? true : false; self::total_task_times_csv($report_data, $columns, $timeslotsArray, $skip_ws); } else { if (array_var($_POST, 'exportPDF')) { //self::total_task_times_pdf($report_data, $columns, $timeslotsArray); } else { tpl_assign('columns', $columns); tpl_assign('conditions', $conditions); tpl_assign('timeslot_type', $timeslotType); tpl_assign('group_by', $group_by); tpl_assign('timeslotsArray', $timeslotsArray); tpl_assign('workspace', $workspace); tpl_assign('start_time', $st); tpl_assign('end_time', $et); tpl_assign('user', $user); $report_data['conditions'] = $conditions; $report_data['columns'] = $columns; tpl_assign('post', $report_data); tpl_assign('template_name', 'total_task_times'); tpl_assign('title', lang('task time report')); } } }
function total_task_times($report_data = null, $task = null, $csv = null) { if (!$report_data) { $report_data = array_var($_POST, 'report'); set_user_config_option('timeReportDate', $report_data['date_type'], logged_user()->getId()); $dateStart = getDateValue($report_data['start_value']); if ($dateStart instanceof DateTimeValue) { set_user_config_option('timeReportDateStart', $dateStart, logged_user()->getId()); } $dateEnd = getDateValue($report_data['end_value']); if ($dateEnd instanceof DateTimeValue) { set_user_config_option('timeReportDateEnd', $dateEnd, logged_user()->getId()); } set_user_config_option('timeReportShowEstimatedTime', array_var($report_data, 'show_estimated_time') == 'checked', logged_user()->getId()); set_user_config_option('timeReportPerson', $report_data['user'], logged_user()->getId()); set_user_config_option('timeReportTimeslotType', $report_data['timeslot_type'], logged_user()->getId()); set_user_config_option('timeReportShowBilling', isset($report_data['show_billing']) ? 1 : 0, logged_user()->getId()); $group = $report_data['group_by_1'] . ", " . $report_data['group_by_2'] . ", " . $report_data['group_by_3']; $altGroup = $report_data['alt_group_by_1'] . "," . $report_data['alt_group_by_2'] . "," . $report_data['alt_group_by_3']; set_user_config_option('timeReportGroupBy', $group, logged_user()->getId()); set_user_config_option('timeReportAltGroupBy', $altGroup, logged_user()->getId()); $_SESSION['total_task_times_report_data'] = $report_data; } if (array_var($_GET, 'export') == 'csv' || isset($csv) && $csv == true) { $context = build_context_array(array_var($_REQUEST, 'context')); CompanyWebsite::instance()->setContext($context); if (!$report_data) { if (isset($_REQUEST['parameters'])) { $report_data = json_decode(str_replace("'", '"', $_REQUEST['parameters']), true); } else { $report_data = $_REQUEST; } } tpl_assign('context', $context); $this->setTemplate('total_task_times_csv'); } else { $context = active_context(); } $columns = array_var($report_data, 'columns'); if (!is_array($columns)) { $columns = array_var($_POST, 'columns', array()); } asort($columns); //sort the array by column order foreach ($columns as $column => $order) { if ($order > 0) { $newColumn = new ReportColumn(); //$newColumn->setReportId($newReport->getId()); if (is_numeric($column)) { $newColumn->setCustomPropertyId($column); } else { $newColumn->setFieldName($column); } } } $user = Contacts::findById(array_var($report_data, 'user')); $now = DateTimeValueLib::now(); $now->advance(logged_user()->getTimezone() * 3600, true); switch (array_var($report_data, 'date_type')) { case 1: //Today $st = DateTimeValueLib::make(0, 0, 0, $now->getMonth(), $now->getDay(), $now->getYear()); $et = DateTimeValueLib::make(23, 59, 59, $now->getMonth(), $now->getDay(), $now->getYear()); break; case 2: //This week $monday = $now->getMondayOfWeek(); $nextMonday = $now->getMondayOfWeek()->add('w', 1)->add('d', -1); $st = DateTimeValueLib::make(0, 0, 0, $monday->getMonth(), $monday->getDay(), $monday->getYear()); $et = DateTimeValueLib::make(23, 59, 59, $nextMonday->getMonth(), $nextMonday->getDay(), $nextMonday->getYear()); break; case 3: //Last week $monday = $now->getMondayOfWeek()->add('w', -1); $nextMonday = $now->getMondayOfWeek()->add('d', -1); $st = DateTimeValueLib::make(0, 0, 0, $monday->getMonth(), $monday->getDay(), $monday->getYear()); $et = DateTimeValueLib::make(23, 59, 59, $nextMonday->getMonth(), $nextMonday->getDay(), $nextMonday->getYear()); break; case 4: //This month $st = DateTimeValueLib::make(0, 0, 0, $now->getMonth(), 1, $now->getYear()); $et = DateTimeValueLib::make(23, 59, 59, $now->getMonth(), 1, $now->getYear())->add('M', 1)->add('d', -1); break; case 5: //Last month $now->add('M', -1); $st = DateTimeValueLib::make(0, 0, 0, $now->getMonth(), 1, $now->getYear()); $et = DateTimeValueLib::make(23, 59, 59, $now->getMonth(), 1, $now->getYear())->add('M', 1)->add('d', -1); break; case 6: //Date interval $st = getDateValue(array_var($report_data, 'start_value')); $st = $st->beginningOfDay(); $et = getDateValue(array_var($report_data, 'end_value')); $et = $et->endOfDay(); break; } if ($st instanceof DateTimeValue) { $st->add('h', -logged_user()->getTimezone()); } if ($et instanceof DateTimeValue) { $et->add('h', -logged_user()->getTimezone()); } $timeslotType = array_var($report_data, 'timeslot_type', 0); $group_by = array(); for ($i = 1; $i <= 3; $i++) { if ($timeslotType == 0) { $gb = array_var($report_data, 'group_by_' . $i); } else { $gb = array_var($report_data, 'alt_group_by_' . $i); } if ($gb != '0') { $group_by[] = $gb; } } $dateFormat = user_config_option('date_format'); $date_format_tip = date_format_tip($dateFormat); $extra_conditions = ""; $conditions = array_var($_POST, 'conditions', array()); foreach ($conditions as $cond) { if ($cond['deleted'] > 0) { continue; } if (array_var($cond, 'custom_property_id') > 0) { if (!in_array($cond['condition'], array('like', 'not like', '=', '<=', '>=', '<', '>', '<>', '%'))) { continue; } $cp = CustomProperties::getCustomProperty($cond['custom_property_id']); if (!$cp instanceof CustomProperty) { continue; } $current_condition = ' AND e.rel_object_id IN ( SELECT object_id as id FROM ' . TABLE_PREFIX . 'custom_property_values cpv WHERE cpv.custom_property_id = ' . $cond['custom_property_id']; $value = $cond['value']; if ($cond['condition'] == 'like' || $cond['condition'] == 'not like') { $value = '%' . $cond['value'] . '%'; } if ($cp->getType() == 'date') { if ($value == $date_format_tip) { continue; } $dtValue = DateTimeValueLib::dateFromFormatAndString($dateFormat, $value); $value = $dtValue->format('Y-m-d H:i:s'); } if ($cond['condition'] != '%') { if ($cp->getType() == 'numeric') { $current_condition .= ' AND cpv.value ' . $cond['condition'] . ' ' . DB::escape($value); } else { if ($cp->getType() == 'boolean') { $current_condition .= ' AND cpv.value ' . $cond['condition'] . ' ' . ($value ? '1' : '0'); if (!$value) { $current_condition .= ') OR o.id NOT IN (SELECT object_id as id FROM ' . TABLE_PREFIX . 'custom_property_values cpv2 WHERE cpv2.object_id=o.id AND cpv2.value=1 AND cpv2.custom_property_id = ' . $cp->getId(); } } else { $current_condition .= ' AND cpv.value ' . $cond['condition'] . ' ' . DB::escape($value); } } } else { $current_condition .= ' AND cpv.value like ' . DB::escape("%{$value}"); } $current_condition .= ')'; $extra_conditions .= $current_condition; } } $timeslots = Timeslots::getTaskTimeslots($context, null, $user, $st, $et, array_var($report_data, 'task_id', 0), $group_by, null, null, null, $timeslotType, $extra_conditions); $unworkedTasks = null; if (array_var($report_data, 'include_unworked') == 'checked') { $unworkedTasks = ProjectTasks::getPendingTasks(logged_user(), $workspace); tpl_assign('unworkedTasks', $unworkedTasks); } $gb_criterias = array(); foreach ($group_by as $text) { if (in_array($text, array('contact_id', 'rel_object_id'))) { $gb_criterias[] = array('type' => 'column', 'value' => $text); } else { if (in_array($text, array('milestone_id', 'priority'))) { $gb_criterias[] = array('type' => 'assoc_obj', 'fk' => 'rel_object_id', 'value' => $text); } else { if (str_starts_with($text, 'dim_')) { $gb_criterias[] = array('type' => 'dimension', 'value' => str_replace_first('dim_', '', $text)); } } } } $grouped_timeslots = groupObjects($gb_criterias, $timeslots); tpl_assign('columns', $columns); tpl_assign('timeslotsArray', array()); tpl_assign('grouped_timeslots', $grouped_timeslots); if (array_var($report_data, 'date_type') == 6) { $st->advance(logged_user()->getTimezone() * 3600, true); $et->advance(logged_user()->getTimezone() * 3600, true); } tpl_assign('start_time', $st); tpl_assign('end_time', $et); tpl_assign('user', $user); tpl_assign('post', $report_data); tpl_assign('title', lang('task time report')); tpl_assign('allow_export', false); if (array_var($_GET, 'export') == 'csv' || isset($csv) && $csv == true) { $filename = $this->total_task_times_csv_export($grouped_timeslots); ajx_extra_data(array('filename' => "{$filename}.csv")); ajx_current("empty"); } else { tpl_assign('template_name', 'total_task_times'); $this->setTemplate('report_wrapper'); } }