from tt_log l
$left_joins
where l.date >= '$start_date' and l.date <= '$end_date' and l.user_id = $user_id and l.status = 1
- order by p.name, t.name, l.date, l.start, l.id";
+ order by l.date, p.name, t.name, l.start, l.id";
$res = $mdb2->query($sql);
if (!is_a($res, 'PEAR_Error')) {
while ($val = $res->fetchRow()) {
// 'day_6' => array('control_id' => '2_day_6', 'tt_log_id' => null, 'duration' => null)
// )
// );
- static function getDataForWeekView($user_id, $start_date, $end_date, $dayHeaders) {
+ static function getDataForWeekView($records, $dayHeaders) {
global $i18n;
- // Start by obtaining all records in interval.
- $records = ttWeekViewHelper::getRecordsForInterval($user_id, $start_date, $end_date);
-
$dataArray = array();
// Construct the first row for a brand new entry.
<br>
<table cellspacing="0" cellpadding="4" width="100%" border="0">
<tr>
- <td align="center"> Anuko Time Tracker 1.13.7.3726 | Copyright © <a href="https://www.anuko.com/lp/tt_3.htm" target="_blank">Anuko</a> |
+ <td align="center"> Anuko Time Tracker 1.13.8.3727 | Copyright © <a href="https://www.anuko.com/lp/tt_3.htm" target="_blank">Anuko</a> |
<a href="https://www.anuko.com/lp/tt_4.htm" target="_blank">{$i18n.footer.credits}</a> |
<a href="https://www.anuko.com/lp/tt_5.htm" target="_blank">{$i18n.footer.license}</a> |
<a href="https://www.anuko.com/lp/tt_7.htm" target="_blank">{$i18n.footer.improve}</a>
<td>{$forms.weekTimeForm.week_durations.control}</td>
</tr>
</table>
+
+<table>
+ <tr>
+ <td align="center" colspan="2">{$forms.weekTimeForm.btn_submit.control}</td>
+ </tr>
+ <tr><td> </td></tr>
+</table>
+
+<table width="720">
+<tr>
+ <td valign="top">
+{if $time_records}
+ <table border="0" cellpadding="3" cellspacing="1" width="100%">
+ <tr>
+ <td width="5%" class="tableHeader">{$i18n.label.date}</td>
+ {if $user->isPluginEnabled('cl')}
+ <td width="20%" class="tableHeader">{$i18n.label.client}</td>
+ {/if}
+ {if ($smarty.const.MODE_PROJECTS == $user->tracking_mode || $smarty.const.MODE_PROJECTS_AND_TASKS == $user->tracking_mode)}
+ <td class="tableHeader">{$i18n.label.project}</td>
+ {/if}
+ {if ($smarty.const.MODE_PROJECTS_AND_TASKS == $user->tracking_mode)}
+ <td class="tableHeader">{$i18n.label.task}</td>
+ {/if}
+ {if (($smarty.const.TYPE_START_FINISH == $user->record_type) || ($smarty.const.TYPE_ALL == $user->record_type))}
+ <td width="5%" class="tableHeader" align="right">{$i18n.label.start}</td>
+ <td width="5%" class="tableHeader" align="right">{$i18n.label.finish}</td>
+ {/if}
+ <td width="5%" class="tableHeader">{$i18n.label.duration}</td>
+ <td class="tableHeader">{$i18n.label.note}</td>
+ <td width="5%" class="tableHeader">{$i18n.label.edit}</td>
+ </tr>
+ {foreach $time_records as $record}
+ <tr bgcolor="{cycle values="#f5f5f5,#ffffff"}" {if !$record.billable} class="not_billable" {/if}>
+ <td valign="top">{$record.date}</td>
+ {if $user->isPluginEnabled('cl')}
+ <td valign="top">{$record.client|escape}</td>
+ {/if}
+ {if ($smarty.const.MODE_PROJECTS == $user->tracking_mode || $smarty.const.MODE_PROJECTS_AND_TASKS == $user->tracking_mode)}
+ <td valign="top">{$record.project|escape}</td>
+ {/if}
+ {if ($smarty.const.MODE_PROJECTS_AND_TASKS == $user->tracking_mode)}
+ <td valign="top">{$record.task|escape}</td>
+ {/if}
+ {if (($smarty.const.TYPE_START_FINISH == $user->record_type) || ($smarty.const.TYPE_ALL == $user->record_type))}
+ <td nowrap align="right" valign="top">{if $record.start}{$record.start}{else} {/if}</td>
+ <td nowrap align="right" valign="top">{if $record.finish}{$record.finish}{else} {/if}</td>
+ {/if}
+ <td align="right" valign="top">{if ($record.duration == '0:00' && $record.start <> '')}<font color="#ff0000">{$i18n.form.time.uncompleted}</font>{else}{$record.duration}{/if}</td>
+ <td valign="top">{if $record.comment}{$record.comment|escape}{else} {/if}</td>
+ <td valign="top" align="center">
+ {if $record.invoice_id}
+
+ {else}
+ <a href="time_edit.php?id={$record.id}">{$i18n.label.edit}</a>
+ {if ($record.duration == '0:00' && $record.start <> '')}
+ <input type="hidden" name="record_id" value="{$record.id}">
+ <input type="hidden" name="browser_date" value="">
+ <input type="hidden" name="browser_time" value="">
+ <input type="submit" id="btn_stop" name="btn_stop" onclick="browser_date.value=get_date();browser_time.value=get_time()" value="{$i18n.button.stop}">
+ {/if}
+ {/if}
+ </td>
+ </tr>
+ {/foreach}
+ </table>
+{/if}
+ </td>
+</tr>
+</table>
+{if $time_records}
<table cellpadding="3" cellspacing="1" width="720">
<tr>
<td align="left">{$i18n.label.week_total}: {$week_total}</td>
</tr>
{/if}
</table>
-<table>
- <tr>
- <td align="center" colspan="2">{$forms.weekTimeForm.btn_submit.control}</td>
- </tr>
-</table>
+{/if}
{$forms.weekTimeForm.close}
// Get column headers, which are day numbers in month.
$dayHeaders = ttWeekViewHelper::getDayHeadersForWeek($startDate->toString(DB_DATEFORMAT));
$lockedDays = ttWeekViewHelper::getLockedDaysForWeek($startDate->toString(DB_DATEFORMAT));
-// Build data array for the table. Format is described in the function..
-$dataArray = ttWeekViewHelper::getDataForWeekView($user->getActiveUser(), $startDate->toString(DB_DATEFORMAT), $endDate->toString(DB_DATEFORMAT), $dayHeaders);
+// 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 = ttWeekViewHelper::getDayTotals($dataArray, $dayHeaders);
$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');