X-Git-Url: http://wagnertech.de/git?a=blobdiff_plain;f=report.php;h=ed7928c7f995d390f09a8aebd581293309cae234;hb=fa647157935f37f999ae81377b19f5ea72e7bbbb;hp=cb563b9b04d49c3e18e28a60f2a2a455ed73428a;hpb=83e5b07e961d0060f759dd8c59ef2c26d66b0c97;p=timetracker.git diff --git a/report.php b/report.php index cb563b9b..ed7928c7 100644 --- a/report.php +++ b/report.php @@ -33,11 +33,17 @@ import('ttReportHelper'); import('ttGroupHelper'); // Access check. -if (!(ttAccessAllowed('view_own_reports') || ttAccessAllowed('view_reports') || ttAccessAllowed('view_all_reports'))) { +if (!(ttAccessAllowed('view_own_reports') || ttAccessAllowed('view_reports') || ttAccessAllowed('view_all_reports') || ttAccessAllowed('view_client_reports'))) { header('Location: access_denied.php'); exit(); } +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; @@ -58,20 +64,42 @@ if ($user->isPluginEnabled('cf')) { $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'); -// Do we need to show checkboxes? +// 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')) - $smarty->assign('use_checkboxes', true); + $showForInvoicesOrPaid = true; +} +$use_checkboxes = $showForApproved || $showForInvoicesOrPaid; +if ($use_checkboxes) + $smarty->assign('use_checkboxes', true); + +// Controls for "Mark approved" block. +if ($showForApproved) { + $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. @@ -115,7 +143,8 @@ if ($user->can('manage_invoices') && if ($request->isPost()) { // Validate parameters and at the same time build arrays of record ids. - if (($request->getParameter('btn_mark_paid') && 2 == $request->getParameter('mark_paid_select_options')) + 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'))) { // We act on selected records. Are there any? foreach($_POST as $key => $val) { @@ -137,6 +166,22 @@ if ($request->isPost()) { } 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(); + } + if ($request->getParameter('btn_mark_paid')) { // User clicked the "Mark paid" button to mark some or all items either paid or not paid. @@ -174,7 +219,7 @@ $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() && $user->isPluginEnabled('ps')) +if ($request->isGet() && $use_checkboxes) ttReportHelper::putInSession($report_items); if (ttReportHelper::grouping($options)) { @@ -183,6 +228,39 @@ if (ttReportHelper::grouping($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; + } + } + // 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. +} + // Assign variables that are used to print subtotals. if ($report_items) { $smarty->assign('print_subtotals', true); @@ -199,6 +277,7 @@ $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('bean', $bean); $smarty->assign('title', $i18n->get('title.report').": ".$totals['start_date']." - ".$totals['end_date']); $smarty->assign('content_page_name', 'report.tpl');