X-Git-Url: http://wagnertech.de/git?a=blobdiff_plain;f=report.php;h=53c73ee1c72a18de78a04a28320aebe7c1d2dece;hb=HEAD;hp=7bf0e2acee3d8c8c737303ed269628670c338284;hpb=1647c2dbe4244fa273ec515b55b42a0a933cce61;p=timetracker.git diff --git a/report.php b/report.php index 7bf0e2ac..53c73ee1 100644 --- a/report.php +++ b/report.php @@ -27,17 +27,28 @@ // +----------------------------------------------------------------------+ require_once('initialize.php'); +import('ttConfigHelper'); import('form.Form'); import('form.ActionForm'); import('ttReportHelper'); -import('ttTeamHelper'); +import('ttGroupHelper'); +import('ttTimesheetHelper'); -// Access check. -if (!ttAccessCheck(right_view_reports)) { +// Access checks. +if (!(ttAccessAllowed('view_own_reports') || ttAccessAllowed('view_reports') || ttAccessAllowed('view_all_reports') || ttAccessAllowed('view_client_reports'))) { header('Location: access_denied.php'); exit(); } +// End of access checks. +$config = new ttConfigHelper($user->getConfig()); + +if ($user->isPluginEnabled('ap')) { + $cl_mark_approved_select_option = $request->getParameter('mark_approved_select_options', ($request->isPost() ? null : @$_SESSION['mark_approved_select_option'])); + $_SESSION['mark_approved_select_option'] = $cl_mark_approved_select_option; + $cl_mark_approved_action_option = $request->getParameter('mark_approved_action_options', ($request->isPost() ? null : @$_SESSION['mark_approved_action_option'])); + $_SESSION['mark_aproved_action_option'] = $cl_mark_approved_action_option; +} if ($user->isPluginEnabled('ps')) { $cl_mark_paid_select_option = $request->getParameter('mark_paid_select_options', ($request->isPost() ? null : @$_SESSION['mark_paid_select_option'])); $_SESSION['mark_paid_select_option'] = $cl_mark_paid_select_option; @@ -47,49 +58,92 @@ if ($user->isPluginEnabled('ps')) { if ($user->isPluginEnabled('iv')) { $cl_assign_invoice_select_option = $request->getParameter('assign_invoice_select_options', ($request->isPost() ? null : @$_SESSION['assign_invoice_select_option'])); $_SESSION['assign_invoice_select_option'] = $cl_assign_invoice_select_option; + $cl_recent_invoice_option = $request->getParameter('recent_invoice', ($request->isPost() ? null : @$_SESSION['recent_invoice_option'])); + $_SESSION['recent_invoice_option'] = $cl_recent_invoice_option; +} +if ($user->isPluginEnabled('ts')) { + $cl_assign_timesheet_select_option = $request->getParameter('assign_timesheet_select_options', ($request->isPost() ? null : @$_SESSION['assign_timesheet_select_option'])); + $_SESSION['assign_timesheet_select_option'] = $cl_assign_timesheet_select_option; + $cl_timesheet_option = $request->getParameter('timesheet', ($request->isPost() ? null : @$_SESSION['timesheet_option'])); + $_SESSION['timesheet_option'] = $cl_timesheet_option; } // Use custom fields plugin if it is enabled. if ($user->isPluginEnabled('cf')) { require_once('plugins/CustomFields.class.php'); - $custom_fields = new CustomFields($user->team_id); + $custom_fields = new CustomFields(); $smarty->assign('custom_fields', $custom_fields); } -$form = new Form('reportForm'); +$form = new Form('reportViewForm'); // Report settings are stored in session bean before we get here from reports.php. -$bean = new ActionForm('reportBean', $form, $request); +$bean = new ActionForm('reportBean', new Form('reportForm'), $request); +// If we are in post, load the bean from session, as the constructor does it only in get. +if ($request->isPost()) $bean->loadBean(); + $client_id = $bean->getAttribute('client'); +$options = ttReportHelper::getReportOptions($bean); + +// Do we need to show checkboxes? We show them in the following 4 situations: +// - We can approve items. +// - We can mark items as paid. +// - We can sssign items to invoices. +// - We can assign items to a timesheet. +// Determine these conditions separately. +if ($bean->getAttribute('chapproved') && ($user->can('approve_reports') || $user->can('approve_all_reports'))) + $useMarkApproved = true; +if ($bean->getAttribute('chpaid') && $user->can('manage_invoices')) + $useMarkPaid = true; +if ($bean->getAttribute('chinvoice') && $client_id && 'no_grouping' == $bean->getAttribute('group_by1') && !$user->isClient() && $user->can('manage_invoices')) + $useAssignToInvoice = true; +if ($bean->getAttribute('chtimesheet')) { + $timesheets = ttTimesheetHelper::getMatchingTimesheets($options); + if ($timesheets) $useAssignToTimesheet = true; +} -// Do we need to show checkboxes? -if ($bean->getAttribute('chpaid') || - ($client_id && $bean->getAttribute('chinvoice') && ('no_grouping' == $bean->getAttribute('group_by')) && !$user->isClient())) { +$use_checkboxes = $useMarkApproved || $useMarkPaid || $useAssignToInvoice || $useAssignToTimesheet; +if ($use_checkboxes) $smarty->assign('use_checkboxes', true); + +// Controls for "Mark approved" block. +if ($useMarkApproved) { + $mark_approved_select_options = array('1'=>$i18n->get('dropdown.all'),'2'=>$i18n->get('dropdown.select')); + $form->addInput(array('type'=>'combobox', + 'name'=>'mark_approved_select_options', + 'data'=>$mark_approved_select_options, + 'value'=>$cl_mark_approved_select_option)); + $mark_approved_action_options = array('1'=>$i18n->get('dropdown.approved'),'2'=>$i18n->get('dropdown.not_approved')); + $form->addInput(array('type'=>'combobox', + 'name'=>'mark_approved_action_options', + 'data'=>$mark_approved_action_options, + 'value'=>$cl_mark_approved_action_option)); + $form->addInput(array('type'=>'submit','name'=>'btn_mark_approved','value'=>$i18n->get('button.submit'))); + $smarty->assign('use_mark_approved', true); } // Controls for "Mark paid" block. -if ($bean->getAttribute('chpaid')) { - $mark_paid_select_options = array('1'=>$i18n->getKey('dropdown.all'),'2'=>$i18n->getKey('dropdown.select')); +if ($useMarkPaid) { + $mark_paid_select_options = array('1'=>$i18n->get('dropdown.all'),'2'=>$i18n->get('dropdown.select')); $form->addInput(array('type'=>'combobox', 'name'=>'mark_paid_select_options', 'data'=>$mark_paid_select_options, 'value'=>$cl_mark_paid_select_option)); - $mark_paid_action_options = array('1'=>$i18n->getKey('dropdown.paid'),'2'=>$i18n->getKey('dropdown.not_paid')); + $mark_paid_action_options = array('1'=>$i18n->get('dropdown.paid'),'2'=>$i18n->get('dropdown.not_paid')); $form->addInput(array('type'=>'combobox', 'name'=>'mark_paid_action_options', 'data'=>$mark_paid_action_options, 'value'=>$cl_mark_paid_action_option)); - $form->addInput(array('type'=>'submit','name'=>'btn_mark_paid','value'=>$i18n->getKey('button.submit'))); + $form->addInput(array('type'=>'submit','name'=>'btn_mark_paid','value'=>$i18n->get('button.submit'))); $smarty->assign('use_mark_paid', true); } // Controls for "Assign to invoice" block. -if ($client_id && $bean->getAttribute('chinvoice') && ('no_grouping' == $bean->getAttribute('group_by')) && !$user->isClient()) { +if ($useAssignToInvoice) { // Client is selected and we are displaying the invoice column. - $recent_invoices = ttTeamHelper::getRecentInvoices($user->team_id, $client_id); + $recent_invoices = ttGroupHelper::getRecentInvoices($client_id); if ($recent_invoices) { - $assign_invoice_select_options = array('1'=>$i18n->getKey('dropdown.all'),'2'=>$i18n->getKey('dropdown.select')); + $assign_invoice_select_options = array('1'=>$i18n->get('dropdown.all'),'2'=>$i18n->get('dropdown.select')); $form->addInput(array('type'=>'combobox', 'name'=>'assign_invoice_select_options', 'data'=>$assign_invoice_select_options, @@ -98,114 +152,169 @@ if ($client_id && $bean->getAttribute('chinvoice') && ('no_grouping' == $bean->g 'name'=>'recent_invoice', 'data'=>$recent_invoices, 'datakeys'=>array('id','name'), - 'empty'=>array(''=>$i18n->getKey('dropdown.select_invoice')))); - $form->addInput(array('type'=>'submit','name'=>'btn_assign','value'=>$i18n->getKey('button.submit'))); + 'value'=>$cl_recent_invoice_option, + 'empty'=>array(''=>$i18n->get('dropdown.select_invoice')))); + $form->addInput(array('type'=>'submit','name'=>'btn_assign_invoice','value'=>$i18n->get('button.submit'))); + $smarty->assign('use_assign_to_invoice', true); } - $smarty->assign('use_assign_to_invoice', true); +} + +// Controls for "Assign to timesheet" block. +if ($useAssignToTimesheet) { + $assign_timesheet_select_options = array('1'=>$i18n->get('dropdown.all'),'2'=>$i18n->get('dropdown.select')); + $form->addInput(array('type'=>'combobox', + 'name'=>'assign_timesheet_select_options', + 'data'=>$assign_timesheet_select_options, + 'value'=>$cl_assign_timesheet_select_option)); + $form->addInput(array('type'=>'combobox', + 'name'=>'timesheet', + 'data'=>$timesheets, + 'datakeys'=>array('id','name'), + 'value'=>$cl_timesheet_option, + 'empty'=>array(''=>$i18n->get('dropdown.select_timesheet')))); + $form->addInput(array('type'=>'submit','name'=>'btn_assign_timesheet','value'=>$i18n->get('button.submit'))); + $smarty->assign('use_assign_to_timesheet', true); } if ($request->isPost()) { - if ($request->getParameter('btn_mark_paid')) { - // User clicked the "Mark paid" button to mark some or all items either paid or not paid. - - // Determine user action. - $mark_paid = $request->getParameter('mark_paid_action_options') == 1 ? true : false; - - // Obtain 2 arrays or record ids, one for log, another for expense items. - if (1 == $request->getParameter('mark_paid_select_options')) { - // We are marking all report items. Get the arrays from session. - $item_ids = ttReportHelper::getFromSession(); - $time_log_ids = $item_ids['report_item_ids']; - $expense_item_ids = $item_ids['report_item_expense_ids']; - } else if (2 == $request->getParameter('mark_paid_select_options')) { - // We are marking only selected items. Get the arrays from $_POST. - foreach($_POST as $key => $val) { - if ('log_id_' == substr($key, 0, 7)) - $time_log_ids[] = substr($key, 7); - if ('item_id_' == substr($key, 0, 8)) - $expense_item_ids[] = substr($key, 8); + + // Validate parameters and at the same time build arrays of record ids. + if (($request->getParameter('btn_mark_approved') && 2 == $request->getParameter('mark_approved_select_options')) + || ($request->getParameter('btn_mark_paid') && 2 == $request->getParameter('mark_paid_select_options')) + || ($request->getParameter('btn_assign_invoice') && 2 == $request->getParameter('assign_invoice_select_options')) + || ($request->getParameter('btn_assign_timesheet') && 2 == $request->getParameter('assign_timesheet_select_options'))) { + // We act on selected records. Are there any? + foreach($_POST as $key => $val) { + if ('log_id_' == substr($key, 0, 7)) + $time_log_ids[] = substr($key, 7); + if ('item_id_' == substr($key, 0, 8)) + $expense_item_ids[] = substr($key, 8); + } + if (!$time_log_ids && !$expense_item_ids) $err->Add($i18n->get('error.record')); // There are no selected records. + // Validation of parameteres ended here. + } else { + // We are assigning all report items. Get the arrays from session. + // Note: getting from session assures we act only on previously displayed records. + // Rebuilding from $bean may get us a different set. + $item_ids = ttReportHelper::getFromSession(); + $time_log_ids = $item_ids['report_item_ids']; + $expense_item_ids = $item_ids['report_item_expense_ids']; + // The above code is here beacues the arrays are used in both "Mark paid" and "Assign to invoice" handlers below. + } + + if ($err->no()) { + if ($request->getParameter('btn_mark_approved')) { + // User clicked the "Mark approved" button to mark some or all items either approved or not approved. + + // Determine user action. + $mark_approved = $request->getParameter('mark_approved_action_options') == 1 ? true : false; + + // Mark as requested. + if ($time_log_ids || $expense_item_ids) { + ttReportHelper::markApproved($time_log_ids, $expense_item_ids, $mark_approved); } + + // Re-display this form. + header('Location: report.php'); + exit(); } - // Mark as requested. - if ($time_log_ids || $expense_item_ids) { - ttReportHelper::markPaid($time_log_ids, $expense_item_ids, $mark_paid); + + if ($request->getParameter('btn_mark_paid')) { + // User clicked the "Mark paid" button to mark some or all items either paid or not paid. + + // Determine user action. + $mark_paid = $request->getParameter('mark_paid_action_options') == 1 ? true : false; + + // Mark as requested. + if ($time_log_ids || $expense_item_ids) { + ttReportHelper::markPaid($time_log_ids, $expense_item_ids, $mark_paid); + } + + // Re-display this form. + header('Location: report.php'); + exit(); } - // Re-display this form. - header('Location: report.php'); - exit(); - } + if ($request->getParameter('btn_assign_invoice')) { + // User clicked the Submit button to assign all or some items to a recent invoice. - if ($request->getParameter('btn_assign')) { - // User clicked the Submit button to assign all or some items to a recent invoice. - - // Determine invoice id. - $invoice_id = $request->getParameter('recent_invoice'); - - // Obtain 2 arrays or record ids, one for log, another for expense items. - if (1 == $request->getParameter('assign_invoice_select_options')) { - // We are assigning all report items. Get the arrays from session. - $item_ids = ttReportHelper::getFromSession(); - $time_log_ids = $item_ids['report_item_ids']; - $expense_item_ids = $item_ids['report_item_expense_ids']; - } else if (2 == $request->getParameter('assign_invoice_select_options')) { - // We are marking only selected items. Get the arrays from $_POST. - foreach($_POST as $key => $val) { - if ('log_id_' == substr($key, 0, 7)) - $time_log_ids[] = substr($key, 7); - if ('item_id_' == substr($key, 0, 8)) - $expense_item_ids[] = substr($key, 8); + // Determine invoice id. + $invoice_id = $request->getParameter('recent_invoice'); + + // Assign as requested. + if ($time_log_ids || $expense_item_ids) { + ttReportHelper::assignToInvoice($invoice_id, $time_log_ids, $expense_item_ids); } + // Re-display this form. + header('Location: report.php'); + exit(); } - // Assign as requested. - if ($time_log_ids || $expense_item_ids) { - ttReportHelper::assignToInvoice($invoice_id, $time_log_ids, $expense_item_ids); + + if ($request->getParameter('btn_assign_timesheet')) { + // User clicked the Submit button to assign all or some items to a timesheet. + + // Determine invoice id. + $timesheet_id = $request->getParameter('timesheet'); + + // Assign as requested. + if ($time_log_ids) { + ttReportHelper::assignToTimesheet($timesheet_id, $time_log_ids); + } + // Re-display this form. + header('Location: report.php'); + exit(); } - // Re-display this form. - header('Location: report.php'); - exit(); } } // isPost -$group_by = $bean->getAttribute('group_by'); - -$report_items = ttReportHelper::getItems($bean); +$report_items = ttReportHelper::getItems($options); // Store record ids in session in case user wants to act on records such as marking them all paid. -if ($request->isGet() && $user->isPluginEnabled('ps')) +if ($request->isGet() && $use_checkboxes) ttReportHelper::putInSession($report_items); -if ('no_grouping' != $group_by) - $subtotals = ttReportHelper::getSubtotals($bean); -$totals = ttReportHelper::getTotals($bean); - -// Assign variables that are used to print subtotals. -if ($report_items && 'no_grouping' != $group_by) { - $smarty->assign('print_subtotals', true); - $smarty->assign('first_pass', true); - $smarty->assign('group_by', $group_by); - $smarty->assign('prev_grouped_by', ''); - $smarty->assign('cur_grouped_by', ''); -} -// Determine group by header. -if ('no_grouping' != $group_by) { - if ('cf_1' == $group_by) - $smarty->assign('group_by_header', $custom_fields->fields[0]['label']); - else { - $key = 'label.'.$group_by; - $smarty->assign('group_by_header', $i18n->getKey($key)); +if (ttReportHelper::grouping($options)) { + $subtotals = ttReportHelper::getSubtotals($options); + $smarty->assign('group_by_header', ttReportHelper::makeGroupByHeader($options)); + if ($report_items) { + // Assign variables that are used to print subtotals. + $smarty->assign('print_subtotals', true); + $smarty->assign('first_pass', true); + $smarty->assign('prev_grouped_by', ''); + $smarty->assign('cur_grouped_by', ''); } } +$totals = ttReportHelper::getTotals($options); + +// Determine column span for note field. +$colspan = 1; +if ($user->can('view_reports') || $user->can('view_all_reports') || $user->isClient()) $colspan++; +if ($bean->getAttribute('chclient')) $colspan++; +if ($bean->getAttribute('chproject')) $colspan++; +if ($bean->getAttribute('chtask')) $colspan++; +if ($bean->getAttribute('chcf_1')) $colspan++; +if ($bean->getAttribute('chstart')) $colspan++; +if ($bean->getAttribute('chfinish')) $colspan++; +if ($bean->getAttribute('chduration')) $colspan++; +if ($bean->getAttribute('chunits')) $colspan++; +if ($bean->getAttribute('chcost')) $colspan++; +if ($bean->getAttribute('chapproved')) $colspan++; +if ($bean->getAttribute('chpaid')) $colspan++; +if ($bean->getAttribute('chip')) $colspan++; +if ($bean->getAttribute('chinvoice')) $colspan++; +if ($bean->getAttribute('chtimesheet')) $colspan++; +if ($bean->getAttribute('chfiles')) $colspan++; + // Assign variables that are used to alternate color of rows for different dates. $smarty->assign('prev_date', ''); $smarty->assign('cur_date', ''); $smarty->assign('report_row_class', 'rowReportItem'); - $smarty->assign('forms', array($form->getName()=>$form->toArray())); - $smarty->assign('report_items', $report_items); $smarty->assign('subtotals', $subtotals); $smarty->assign('totals', $totals); +$smarty->assign('note_on_separate_row', $user->getConfigOption('report_note_on_separate_row')); +$smarty->assign('colspan', $colspan); $smarty->assign('bean', $bean); -$smarty->assign('title', $i18n->getKey('title.report').": ".$totals['start_date']." - ".$totals['end_date']); +$smarty->assign('title', $i18n->get('title.report').": ".$totals['start_date']." - ".$totals['end_date']); $smarty->assign('content_page_name', 'report.tpl'); $smarty->display('index.tpl');