Added confirmation dialog to avoid accidental delete of invoice entries.
[timetracker.git] / week.php
index 4de08c9..fb2dcaa 100644 (file)
--- a/week.php
+++ b/week.php
@@ -33,6 +33,7 @@ import('form.Table');
 import('form.TextField');
 import('ttUserHelper');
 import('ttTeamHelper');
+import('ttWeekViewHelper');
 import('ttClientHelper');
 import('ttTimeHelper');
 import('DateAndTime');
@@ -73,7 +74,7 @@ if ($user->isPluginEnabled('cf')) {
   $smarty->assign('custom_fields', $custom_fields);
 }
 
-// TODO: how is this plugin supposed to work for week view?
+// Use Monthly Quotas plugin, if applicable.
 if ($user->isPluginEnabled('mq')){
   require_once('plugins/MonthlyQuota.class.php');
   $quota = new MonthlyQuota();
@@ -110,12 +111,14 @@ $cl_note = trim($request->getParameter('note'));
 
 // Get the data we need to display week view.
 // Get column headers, which are day numbers in month.
-$dayHeaders = ttTimeHelper::getDayHeadersForWeek($startDate->toString(DB_DATEFORMAT));
-$lockedDays = ttTimeHelper::getLockedDaysForWeek($startDate->toString(DB_DATEFORMAT));
-// Build data array for the table. Format is described in the function..
-$dataArray = ttTimeHelper::getDataForWeekView($user->getActiveUser(), $startDate->toString(DB_DATEFORMAT), $endDate->toString(DB_DATEFORMAT), $dayHeaders);
+$dayHeaders = ttWeekViewHelper::getDayHeadersForWeek($startDate->toString(DB_DATEFORMAT));
+$lockedDays = ttWeekViewHelper::getLockedDaysForWeek($startDate->toString(DB_DATEFORMAT));
+// Get already existing records.
+$records = ttWeekViewHelper::getRecordsForInterval($user->getActiveUser(), $startDate->toString(DB_DATEFORMAT), $endDate->toString(DB_DATEFORMAT));
+// Build data array for the table. Format is described in the function.
+$dataArray = ttWeekViewHelper::getDataForWeekView($records, $dayHeaders);
 // Build day totals (total durations for each day in week).
-$dayTotals = ttTimeHelper::getDayTotals($dataArray, $dayHeaders);
+$dayTotals = ttWeekViewHelper::getDayTotals($dataArray, $dayHeaders);
 
 // Define rendering class for a label field to the left of durations.
 class LabelCellRenderer extends DefaultCellRenderer {
@@ -128,7 +131,7 @@ class LabelCellRenderer extends DefaultCellRenderer {
     // Special handling for not billable entries.
     if ($row > 0) {
       $row_id = $table->getValueAtName($row,'row_id');
-      $billable = ttTimeHelper::parseFromWeekViewRow($row_id, 'bl');
+      $billable = ttWeekViewHelper::parseFromWeekViewRow($row_id, 'bl');
       if (!$billable) {
         $this->setOptions(array('style'=>'color: red;')); // TODO: style it properly in CSS.
       }
@@ -179,8 +182,7 @@ if ($user->canManageTeam()) {
 }
 
 // Create week_durations table.
-$table = new Table('week_durations');
-// $table->setIAScript('markModified'); // TODO: write a script to mark table or particular cells as modified.
+$table = new Table('week_durations', 'week_view_table');
 $table->setTableOptions(array('width'=>'100%','cellspacing'=>'1','cellpadding'=>'3','border'=>'0'));
 $table->setRowOptions(array('class'=>'tableHeaderCentered'));
 $table->setData($dataArray);
@@ -310,8 +312,8 @@ if ($request->isPost()) {
     // Process the table of values.
     if ($err->no()) {
 
-      // Obtain values. Perhaps, it's best to iterate throigh posted parameters one by one,
-      // see if anything changed, and apply one change at a time until we see an error.
+      // Obtain values. Iterate through posted parameters one by one,
+      // see if value changed, apply one change at a time until we see an error.
       $result = true;
       $rowNumber = 0;
       // Iterate through existing rows.
@@ -346,21 +348,24 @@ if ($request->isPost()) {
             $fields = array();
             $fields['row_id'] = $dataArray[$rowNumber]['row_id'];
             if (!$fields['row_id']) {
-              // Special handling for row 0, a new entry. Need to construct row_id.
+              // Special handling for row 0, a new entry. Need to construct new row_id.
               $record = array();
               $record['client_id'] = $cl_client;
               $record['billable'] = $cl_billable ? '1' : '0';
               $record['project_id'] = $cl_project;
               $record['task_id'] = $cl_task;
               $record['cf_1_value'] = $cl_cf_1;
-              $fields['row_id'] = ttTimeHelper::makeRecordIdentifier($record).'_0';
+              $fields['row_id'] = ttWeekViewHelper::makeRowIdentifier($record).'_0';
+              // Note: no need to check for a possible conflict with an already existing row
+              // because we are doing an insert that does not affect already existing data.
+
               $fields['note'] = $cl_note;
             }
             $fields['day_header'] = $dayHeader;
             $fields['start_date'] = $startDate->toString(DB_DATEFORMAT); // To be able to determine date for the entry using $dayHeader.
             $fields['duration'] = $postedDuration;
             $fields['browser_today'] = $request->getParameter('browser_today', null);
-            $result = ttTimeHelper::insertDurationFromWeekView($fields, $custom_fields, $err);
+            $result = ttWeekViewHelper::insertDurationFromWeekView($fields, $custom_fields, $err);
           } elseif ($postedDuration == null || 0 == ttTimeHelper::toMinutes($postedDuration)) {
             // Delete an already existing record here.
             $result = ttTimeHelper::delete($dataArray[$rowNumber][$dayHeader]['tt_log_id'], $user->getActiveUser());
@@ -368,7 +373,7 @@ if ($request->isPost()) {
             $fields = array();
             $fields['tt_log_id'] = $dataArray[$rowNumber][$dayHeader]['tt_log_id'];
             $fields['duration'] = $postedDuration;
-            $result = ttTimeHelper::modifyDurationFromWeekView($fields, $err);
+            $result = ttWeekViewHelper::modifyDurationFromWeekView($fields, $err);
           }
           if (!$result) break; // Break out of the loop in case of first error.
         }
@@ -407,6 +412,7 @@ $smarty->assign('task_list', $task_list);
 $smarty->assign('forms', array($form->getName()=>$form->toArray()));
 $smarty->assign('onload', 'onLoad="fillDropdowns()"');
 $smarty->assign('timestring', $startDate->toString($user->date_format).' - '.$endDate->toString($user->date_format));
+$smarty->assign('time_records', $records);
 
 $smarty->assign('title', $i18n->getKey('title.time'));
 $smarty->assign('content_page_name', 'week.tpl');