X-Git-Url: http://wagnertech.de/git?a=blobdiff_plain;f=report.php;h=53c73ee1c72a18de78a04a28320aebe7c1d2dece;hb=19f479eb795f39d331fbfe33ab20534112555630;hp=ed7928c7f995d390f09a8aebd581293309cae234;hpb=ecb94422f83654dd371f751a30112a80833748dd;p=timetracker.git diff --git a/report.php b/report.php index ed7928c7..53c73ee1 100644 --- a/report.php +++ b/report.php @@ -27,16 +27,21 @@ // +----------------------------------------------------------------------+ require_once('initialize.php'); +import('ttConfigHelper'); import('form.Form'); import('form.ActionForm'); import('ttReportHelper'); import('ttGroupHelper'); +import('ttTimesheetHelper'); -// Access check. +// 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'])); @@ -56,6 +61,12 @@ if ($user->isPluginEnabled('iv')) { $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')) { @@ -72,22 +83,31 @@ $bean = new ActionForm('reportBean', new Form('reportForm'), $request); if ($request->isPost()) $bean->loadBean(); $client_id = $bean->getAttribute('client'); +$options = ttReportHelper::getReportOptions($bean); -// Do we need to show checkboxes? We show them if we allow setting approved or paid status, -// and also when we can assign / deassign records to invoces. -if ($bean->getAttribute('chapproved') && ($user->can('approve_reports') || $user->can('approve_all_eports'))) - $showForApproved = true; -if ($bean->getAttribute('chpaid') || - ($client_id && $bean->getAttribute('chinvoice') && ('no_grouping' == $bean->getAttribute('group_by1')) && !$user->isClient())) { - if ($user->can('manage_invoices')) - $showForInvoicesOrPaid = true; +// 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; } -$use_checkboxes = $showForApproved || $showForInvoicesOrPaid; + +$use_checkboxes = $useMarkApproved || $useMarkPaid || $useAssignToInvoice || $useAssignToTimesheet; if ($use_checkboxes) $smarty->assign('use_checkboxes', true); // Controls for "Mark approved" block. -if ($showForApproved) { +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', @@ -103,7 +123,7 @@ if ($showForApproved) { } // Controls for "Mark paid" block. -if ($user->can('manage_invoices') && $bean->getAttribute('chpaid')) { +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', @@ -119,8 +139,7 @@ if ($user->can('manage_invoices') && $bean->getAttribute('chpaid')) { } // Controls for "Assign to invoice" block. -if ($user->can('manage_invoices') && - ($client_id && $bean->getAttribute('chinvoice') && ('no_grouping' == $bean->getAttribute('group_by1')) && !$user->isClient())) { +if ($useAssignToInvoice) { // Client is selected and we are displaying the invoice column. $recent_invoices = ttGroupHelper::getRecentInvoices($client_id); if ($recent_invoices) { @@ -135,17 +154,35 @@ if ($user->can('manage_invoices') && 'datakeys'=>array('id','name'), 'value'=>$cl_recent_invoice_option, 'empty'=>array(''=>$i18n->get('dropdown.select_invoice')))); - $form->addInput(array('type'=>'submit','name'=>'btn_assign','value'=>$i18n->get('button.submit'))); + $form->addInput(array('type'=>'submit','name'=>'btn_assign_invoice','value'=>$i18n->get('button.submit'))); $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()) { // 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') && 2 == $request->getParameter('assign_invoice_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)) @@ -198,7 +235,7 @@ if ($request->isPost()) { exit(); } - if ($request->getParameter('btn_assign')) { + if ($request->getParameter('btn_assign_invoice')) { // User clicked the Submit button to assign all or some items to a recent invoice. // Determine invoice id. @@ -212,11 +249,24 @@ if ($request->isPost()) { header('Location: report.php'); exit(); } + + 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(); + } } } // isPost -$options = ttReportHelper::getReportOptions($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() && $use_checkboxes) @@ -225,49 +275,34 @@ if ($request->isGet() && $use_checkboxes) if (ttReportHelper::grouping($options)) { $subtotals = ttReportHelper::getSubtotals($options); $smarty->assign('group_by_header', ttReportHelper::makeGroupByHeader($options)); -} -$totals = ttReportHelper::getTotals($options); - -// TODO: Determine if we can create a timesheet out of this report. -// There must be only one user, and nothing assigned to existing timesheets. -$canCreateTimesheet = false; -if ($user->isPluginEnabled('ts') && count($report_items) > 0 && - ($user->can('manage_own_timesheets') || $user->can('manage_timesheets'))) { - - $canCreateTimesheet = true; // Start with true and reset if we can't. - $first_user_id = null; - foreach ($report_items as $report_item) { - // Check user id. - if (!$first_user_id) - $first_user_id = $report_item['user_id']; - else { - if ($report_item['user_id'] != $first_user_id) { - // We have items for multiple users. - $canCreateTimesheet = false; - break; - } - } - // Check timesheet id. - if ($report_item['timesheet_id']) { - // We have an item already assigned to a timesheet. - $canCreateTimesheet = false; - break; - } + 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', ''); } - // Save user_id in session. - $bean->saveDetachedAttribute('timesheet_user_id', $first_user_id); - - // TODO: Improve this for "view_all_reports" situation. - // We may need to add "manage_all_timesheets" right. } +$totals = ttReportHelper::getTotals($options); -// Assign variables that are used to print subtotals. -if ($report_items) { - $smarty->assign('print_subtotals', true); - $smarty->assign('first_pass', true); - $smarty->assign('prev_grouped_by', ''); - $smarty->assign('cur_grouped_by', ''); -} +// 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', ''); @@ -277,7 +312,8 @@ $smarty->assign('forms', array($form->getName()=>$form->toArray())); $smarty->assign('report_items', $report_items); $smarty->assign('subtotals', $subtotals); $smarty->assign('totals', $totals); -$smarty->assign('can_create_timesheet', $canCreateTimesheet); +$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->get('title.report').": ".$totals['start_date']." - ".$totals['end_date']); $smarty->assign('content_page_name', 'report.tpl');