Initial commit: Kimai TMS

Kimai time management system (PHP 5.6 / MySQL) with custom extensions:
- Budget tracking (ki_budget)
- Change request form (ki_changerequest)
- Invoice generation (ki_invoice)
- Expense tracking (ki_expenses)
- Flexi time (ki_flexitime)
- Export, admin panel, timesheets, tasks, summary

Database: ~900K time entries, 2,000+ users, 439 projects.
Config: includes/autoconf.php — localhost/kimai/kimai
This commit is contained in:
TMS
2026-06-18 21:20:26 +00:00
commit eb299c9131
1099 changed files with 359817 additions and 0 deletions

View File

@@ -0,0 +1,95 @@
{literal}
<script type="text/javascript">
$(document).ready(function() {
$('#help').hide();
$('#floater input#timeformat').attr('value',$('#xp_ext_timeformat').attr('value'));
$('#floater input#dateformat').attr('value',$('#xp_ext_dateformat').attr('value'));
$('#floater input#default_location').attr('value',$('#default_location').attr('value'));
$('#floater input#axValue').attr('value',filterUsr.join(":")+'|'+filterKnd.join(":")+'|'+filterPct.join(":")+'|'+filterEvt.join(":"));
$('#floater input#filter_cleared').attr('value',$('#xp_ext_tab_filter_cleared').attr('value'));
$('#floater input#filter_refundable').attr('value',$('#xp_ext_tab_filter_refundable').attr('value'));
$('#floater input#filter_type').attr('value',$('#xp_ext_tab_filter_type').attr('value'));
$('#floater input#axColumns').attr('value',xp_enabled_columns());
$('.floater_content fieldset label').css('width','200px');
$('#floater input#first_day').attr('value',new Date($('#pick_in').val()).getTime()/1000);
$('#floater input#last_day').attr('value',new Date($('#pick_out').val()).getTime()/1000);
});
</script>
{/literal}
<div id="floater_innerwrap">
<div id="floater_handle">
<span id="floater_title">{$kga.lang.xp_ext.exportCSV}</span>
<div class="right">
<a href="#" class="close" onClick="floaterClose();">{$kga.lang.close}</a>
</div>
</div>
<div id="help">
<div class="content">
</div>
</div>
<div class="floater_content">
<form id="xp_ext_form_export_CSV" action="../extensions/ki_export/processor.php" method="post">
<fieldset>
<ul>
<li>
<label for="column_delimiter">{$kga.lang.xp_ext.column_delimiter}:</label>
<input type="text" value="{$prefs.column_delimiter|escape:'html'}" name="column_delimiter" id="column_delimiter" size="1"/>
</li>
<li>
<label for="quote_char">{$kga.lang.xp_ext.quote_char}:</label>
<input type="text" value="{$prefs.quote_char|escape:'html'}" name="quote_char" id="quote_char" size="1">
</li>
<li>
<label for="reverse_order">{$kga.lang.xp_ext.reverse_order}:</label>
<input type="checkbox" value="true" name="reverse_order" id="reverse_order"/>
</li>
<li>
{$kga.lang.xp_ext.dl_hint}
</li>
</ul>
{* -------------------------------------------------------------------- *}
<!-- <input name="id" type="hidden" value="" /> -->
<input name="axAction" type="hidden" value="export_csv" />
<input name="axValue" id="axValue" type="hidden" value="" />
<input name="first_day" id="first_day" type="hidden" value="" />
<input name="last_day" id="last_day" type="hidden" value="" />
<input name="axColumns" id="axColumns" type="hidden" value=""/>
<input name="timeformat" id="timeformat" type="hidden" value=""/>
<input name="dateformat" id="dateformat" type="hidden" value=""/>
<input name="default_location" id="default_location" type="hidden" value=""/>
<input name="filter_cleared" id="filter_cleared" type="hidden" value=""/>
<input name="filter_refundable" id="filter_refundable" type="hidden" value=""/>
<input name="filter_type" id="filter_type" type="hidden" value=""/>
<div id="formbuttons">
<input class='btn_norm' type='button' value='{$kga.lang.cancel}' onClick='floaterClose(); return false;' />
<input class='btn_ok' type='submit' value='{$kga.lang.submit}' onClick="floaterClose();"/>
</div>
{* -------------------------------------------------------------------- *}
</fieldset>
</form>
</div>
</div>

View File

@@ -0,0 +1,121 @@
{literal}
<script type="text/javascript">
$(document).ready(function() {
$('#help').hide();
$('#floater input#timeformat').attr('value',$('#xp_ext_timeformat').attr('value'));
$('#floater input#dateformat').attr('value',$('#xp_ext_dateformat').attr('value'));
$('#floater input#default_location').attr('value',$('#xp_ext_default_location').attr('value'));
$('#floater input#axValue').attr('value',filterUsr.join(":")+'|'+filterKnd.join(":")+'|'+filterPct.join(":")+'|'+filterEvt.join(":"));
$('#floater input#filter_cleared').attr('value',$('#xp_ext_tab_filter_cleared').attr('value'));
$('#floater input#filter_refundable').attr('value',$('#xp_ext_tab_filter_refundable').attr('value'));
$('#floater input#filter_type').attr('value',$('#xp_ext_tab_filter_type').attr('value'));
$('#floater input#axColumns').attr('value',xp_enabled_columns());
$('.floater_content fieldset label').css('width','200px');
$('#floater input#first_day').attr('value',new Date($('#pick_in').val()).getTime()/1000);
$('#floater input#last_day').attr('value',new Date($('#pick_out').val()).getTime()/1000);
});
</script>
{/literal}
<div id="floater_innerwrap">
<div id="floater_handle">
<span id="floater_title">{$kga.lang.xp_ext.exportPDF}</span>
<div class="right">
<a href="#" class="close" onClick="floaterClose();">{$kga.lang.close}</a>
</div>
</div>
<div id="help">
<div class="content">
</div>
</div>
<div class="floater_content">
<form id="xp_ext_form_export_PDF" action="../extensions/ki_export/processor.php" method="post" target="_blank">
<fieldset>
<ul>
<li>
<label for="print_comments">{$kga.lang.xp_ext.print_comment}:</label>
<input type="checkbox" value="true" name="print_comments" id="print_comments" {if $prefs.print_comments}checked="checked"{/if}/>
</li>
<li>
<label for="print_summary">{$kga.lang.xp_ext.print_summary}:</label>
<input type="checkbox" value="true" name="print_summary" id="print_summary" {if $prefs.print_summary}checked="checked"{/if}>
</li>
<li>
<label for="create_bookmarks">{$kga.lang.xp_ext.create_bookmarks}:</label>
<input type="checkbox" value="true" name="create_bookmarks" id="create_bookmarks" {if $prefs.create_bookmarks}checked="checked"{/if}/>
</li>
<li>
<label for="download_pdf">{$kga.lang.xp_ext.download_pdf}:</label>
<input type="checkbox" value="true" name="download_pdf" id="download_pdf" {if $prefs.download_pdf}checked="checked"{/if}/>
</li>
<li>
<label for="customer_new_page">{$kga.lang.xp_ext.customer_new_page}:</label>
<input type="checkbox" value="true" name="customer_new_page" id="customer_new_page" {if $prefs.customer_new_page}checked="checked"{/if}/>
</li>
<li>
<label for="reverse_order">{$kga.lang.xp_ext.reverse_order}:</label>
<input type="checkbox" value="true" name="reverse_order" id="reverse_order" {if $prefs.reverse_order}checked="checked"{/if}/>
</li>
<li>
<label for="reverse_order">{$kga.lang.comment}:</label>
<textarea name="document_comment" id="document_comment"></textarea>
</li>
<li>
<label for="axAction">{$kga.lang.xp_ext.pdf_format}:</label>
<select name="axAction" id="axAction">
<option value="export_pdf" {if $prefs.pdf_format=='export_pdf'}selected="selected"{/if}>{$kga.lang.xp_ext.export_pdf}</option>
<option value="export_pdf2" {if $prefs.pdf_format=='export_pdf2'}selected="selected"{/if}>{$kga.lang.xp_ext.export_pdf2}</option>
</select>
</li>
<li>
{$kga.lang.xp_ext.dl_hint}
</li>
</ul>
{* -------------------------------------------------------------------- *}
<!-- <input name="id" type="hidden" value="" /> -->
<input name="axValue" id="axValue" type="hidden" value="" />
<input name="first_day" id="first_day" type="hidden" value="" />
<input name="last_day" id="last_day" type="hidden" value="" />
<input name="axColumns" id="axColumns" type="hidden" value=""/>
<input name="timeformat" id="timeformat" type="hidden" value=""/>
<input name="dateformat" id="dateformat" type="hidden" value=""/>
<input name="default_location" id="default_location" type="hidden" value=""/>
<input name="filter_cleared" id="filter_cleared" type="hidden" value=""/>
<input name="filter_refundable" id="filter_refundable" type="hidden" value=""/>
<input name="filter_type" id="filter_type" type="hidden" value=""/>
<div id="formbuttons">
<input class='btn_norm' type='button' value='{$kga.lang.cancel}' onClick='floaterClose(); return false;' />
<input class='btn_ok' type='submit' value='{$kga.lang.submit}' onClick="floaterClose();"/>
</div>
{* -------------------------------------------------------------------- *}
</fieldset>
</form>
</div>
</div>

View File

@@ -0,0 +1,87 @@
{literal}
<script type="text/javascript">
$(document).ready(function() {
$('#help').hide();
$('#floater input#timeformat').attr('value',$('#xp_ext_timeformat').attr('value'));
$('#floater input#dateformat').attr('value',$('#xp_ext_dateformat').attr('value'));
$('#floater input#default_location').attr('value',$('#default_location').attr('value'));
$('#floater input#axValue').attr('value',filterUsr.join(":")+'|'+filterKnd.join(":")+'|'+filterPct.join(":")+'|'+filterEvt.join(":"));
$('#floater input#filter_cleared').attr('value',$('#xp_ext_tab_filter_cleared').attr('value'));
$('#floater input#filter_refundable').attr('value',$('#xp_ext_tab_filter_refundable').attr('value'));
$('#floater input#filter_type').attr('value',$('#xp_ext_tab_filter_type').attr('value'));
$('#floater input#axColumns').attr('value',xp_enabled_columns());
$('.floater_content fieldset label').css('width','200px');
$('#floater input#first_day').attr('value',new Date($('#pick_in').val()).getTime()/1000);
$('#floater input#last_day').attr('value',new Date($('#pick_out').val()).getTime()/1000);
});
</script>
{/literal}
<div id="floater_innerwrap">
<div id="floater_handle">
<span id="floater_title">{$kga.lang.xp_ext.exportXLS}</span>
<div class="right">
<a href="#" class="close" onClick="floaterClose();">{$kga.lang.close}</a>
</div>
</div>
<div id="help">
<div class="content">
</div>
</div>
<div class="floater_content">
<form id="xp_ext_form_export_XLS" action="../extensions/ki_export/processor.php" method="post">
<fieldset>
<ul>
<li>
<label for="decimal_separator">{$kga.lang.decimal_separator}:</label>
<input type="text" value="{$kga.conf.decimalSeparator|escape:'html'}" name="decimal_separator" id="decimal-separator" size="1"/>
</li>
<li>
<label for="reverse_order">{$kga.lang.xp_ext.reverse_order}:</label>
<input type="checkbox" value="true" name="reverse_order" id="reverse_order" {if $prefs.reverse_order}checked="checked"{/if}/>
</li>
<li>
{$kga.lang.xp_ext.dl_hint}
</li>
</ul>
{* -------------------------------------------------------------------- *}
<input name="axAction" type="hidden" value="export_xls" />
<input name="axValue" id="axValue" type="hidden" value="" />
<input name="first_day" id="first_day" type="hidden" value="" />
<input name="last_day" id="last_day" type="hidden" value="" />
<input name="axColumns" id="axColumns" type="hidden" value=""/>
<input name="timeformat" id="timeformat" type="hidden" value=""/>
<input name="dateformat" id="dateformat" type="hidden" value=""/>
<input name="default_location" id="default_location" type="hidden" value=""/>
<input name="filter_cleared" id="filter_cleared" type="hidden" value=""/>
<input name="filter_refundable" id="filter_refundable" type="hidden" value=""/>
<input name="filter_type" id="filter_type" type="hidden" value=""/>
<div id="formbuttons">
<input class='btn_norm' type='button' value='{$kga.lang.cancel}' onClick='floaterClose(); return false;' />
<input class='btn_ok' type='submit' value='{$kga.lang.submit}' onClick="floaterClose();"/>
</div>
{* -------------------------------------------------------------------- *}
</fieldset>
</form>
</div>
</div>

View File

@@ -0,0 +1,55 @@
<div id="floater_innerwrap">
<div id="floater_handle">
<span id="floater_title">{$kga.lang.xp_ext.export_timeformat_help}</span>
<div class="right">
<a href="#" class="close" onClick="floaterClose();">{$kga.lang.close}</a>
</div>
</div>
<div class="floater_content">
<table class="xp_time_help_table">
<tr> <td class="xp_time_shortcut">a</td> <td class="xp_time_description">abbreviated weekday name according to the current locale</td> </tr>
<tr> <td class="xp_time_shortcut">A</td> <td class="xp_time_description">full weekday name according to the current locale</td> </tr>
<tr> <td class="xp_time_shortcut">b</td> <td class="xp_time_description">abbreviated month name according to the current locale</td> </tr>
<tr> <td class="xp_time_shortcut">B</td> <td class="xp_time_description">full month name according to the current locale</td> </tr>
<tr> <td class="xp_time_shortcut">c</td> <td class="xp_time_description">preferred date and time representation for the current locale</td> </tr>
<tr> <td class="xp_time_shortcut">C</td> <td class="xp_time_description">century number (the year divided by 100 and truncated to an integer, range 00 to 99)</td> </tr>
<tr> <td class="xp_time_shortcut">d</td> <td class="xp_time_description">day of the month as a decimal number (range 01 to 31)</td> </tr>
<tr> <td class="xp_time_shortcut">D</td> <td class="xp_time_description">same as m/d/y</td> </tr>
<tr> <td class="xp_time_shortcut">e</td> <td class="xp_time_description">day of the month as a decimal number, a single digit is preceded by a space (range 1 to 31)</td> </tr>
<tr> <td class="xp_time_shortcut">g</td> <td class="xp_time_description">Week-based year within century [00,99]</td> </tr>
<tr> <td class="xp_time_shortcut">G</td> <td class="xp_time_description">Week-based year, including the century [0000,9999]</td> </tr>
<tr> <td class="xp_time_shortcut">h</td> <td class="xp_time_description">same as b</td> </tr>
<tr> <td class="xp_time_shortcut">H</td> <td class="xp_time_description">hour as a decimal number using a 24-hour clock (range 00 to 23)</td> </tr>
<tr> <td class="xp_time_shortcut">I</td> <td class="xp_time_description">hour as a decimal number using a 12-hour clock (range 01 to 12)</td> </tr>
<tr> <td class="xp_time_shortcut">j</td> <td class="xp_time_description">day of the year as a decimal number (range 001 to 366)</td> </tr>
<tr> <td class="xp_time_shortcut">k</td> <td class="xp_time_description">Hour (24-hour clock) single digits are preceded by a blank. (range 0 to 23)</td> </tr>
<tr> <td class="xp_time_shortcut">l</td> <td class="xp_time_description">hour as a decimal number using a 12-hour clock, single digits preceeded by a space (range 1 to 12)</td> </tr>
<tr> <td class="xp_time_shortcut">m</td> <td class="xp_time_description">month as a decimal number (range 01 to 12)</td> </tr>
<tr> <td class="xp_time_shortcut">M</td> <td class="xp_time_description">minute as a decimal number</td> </tr>
<tr> <td class="xp_time_shortcut">n</td> <td class="xp_time_description">newline character</td> </tr>
<tr> <td class="xp_time_shortcut">p</td> <td class="xp_time_description"> either `am' or `pm' according to the given time value, or the corresponding strings for the current locale</td> </tr>
<tr> <td class="xp_time_shortcut">r</td> <td class="xp_time_description">time in a.m. and p.m. notation</td> </tr>
<tr> <td class="xp_time_shortcut">R</td> <td class="xp_time_description">time in 24 hour notation</td> </tr>
<tr> <td class="xp_time_shortcut">S</td> <td class="xp_time_description">second as a decimal number</td> </tr>
<tr> <td class="xp_time_shortcut">t</td> <td class="xp_time_description">tab character</td> </tr>
<tr> <td class="xp_time_shortcut">T</td> <td class="xp_time_description">current time, equal to H:M:S</td> </tr>
<tr> <td class="xp_time_shortcut">u</td> <td class="xp_time_description">weekday as a decimal number [1,7], with 1 representing Monday</td> </tr>
<tr> <td class="xp_time_shortcut">U</td> <td class="xp_time_description">week number of the current year as a decimal number, starting with the first Sunday as the first day of the first week</td> </tr>
<tr> <td class="xp_time_shortcut">V</td> <td class="xp_time_description">The ISO 8601:1988 week number of the current year as a decimal number, range 01 to 53, where week
1 is the first week that has at least 4 days in the current year, and with Monday as the first day of the week.</td> </tr>
<tr> <td class="xp_time_shortcut">w</td> <td class="xp_time_description">day of the week as a decimal, Sunday being 0</td> </tr>
<tr> <td class="xp_time_shortcut">W</td> <td class="xp_time_description">week number of the current year as a decimal number, starting with the first Monday
as the first day of the first week</td> </tr>
<tr> <td class="xp_time_shortcut">x</td> <td class="xp_time_description">preferred date representation for the current locale without the time</td> </tr>
<tr> <td class="xp_time_shortcut">X</td> <td class="xp_time_description">preferred time representation for the current locale without the date</td> </tr>
<tr> <td class="xp_time_shortcut">y</td> <td class="xp_time_description">year as a decimal number without a century (range 00 to 99)</td> </tr>
<tr> <td class="xp_time_shortcut">Y</td> <td class="xp_time_description">year as a decimal number including the century</td> </tr>
<tr> <td class="xp_time_shortcut">Z</td> <td class="xp_time_description">time zone or name or abbreviation</td> </tr>
</table>
</div>
</div>

View File

@@ -0,0 +1,83 @@
{literal}
<script type="text/javascript">
$(document).ready(function() {
$('#help').hide();
$('#floater input#timeformat').attr('value',$('#xp_ext_timeformat').attr('value'));
$('#floater input#dateformat').attr('value',$('#xp_ext_dateformat').attr('value'));
$('#floater input#default_location').attr('value',$('#default_location').attr('value'));
$('#floater input#axValue').attr('value',filterUsr.join(":")+'|'+filterKnd.join(":")+'|'+filterPct.join(":")+'|'+filterEvt.join(":"));
$('#floater input#filter_cleared').attr('value',$('#xp_ext_tab_filter_cleared').attr('value'));
$('#floater input#filter_refundable').attr('value',$('#xp_ext_tab_filter_refundable').attr('value'));
$('#floater input#filter_type').attr('value',$('#xp_ext_tab_filter_type').attr('value'));
$('#floater input#axColumns').attr('value',xp_enabled_columns());
$('.floater_content fieldset label').css('width','200px');
$('#floater input#first_day').attr('value',new Date($('#pick_in').val()).getTime()/1000);
$('#floater input#last_day').attr('value',new Date($('#pick_out').val()).getTime()/1000);
});
</script>
{/literal}
<div id="floater_innerwrap">
<div id="floater_handle">
<span id="floater_title">{$kga.lang.xp_ext.print}</span>
<div class="right">
<a href="#" class="close" onClick="floaterClose();">{$kga.lang.close}</a>
</div>
</div>
<div id="help">
<div class="content">
</div>
</div>
<div class="floater_content">
<form id="xp_ext_form_print" action="../extensions/ki_export/processor.php" method="post" target="_blank">
<fieldset>
<ul>
<li>
{$kga.lang.xp_ext.print_hint}
</li>
<li>
<label for="print_summary">{$kga.lang.xp_ext.print_summary}:</label>
<input type="checkbox" value="true" name="print_summary" id="print_summary" {if $prefs.print_summary}checked="checked"{/if}>
</li>
<li>
<label for="reverse_order">{$kga.lang.xp_ext.reverse_order}:</label>
<input type="checkbox" value="true" name="reverse_order" id="reverse_order" {if $prefs.reverse_order}checked="checked"{/if}/>
</li>
</ul>
{* -------------------------------------------------------------------- *}
<input name="axAction" type="hidden" value="export_html" />
<input name="axValue" id="axValue" type="hidden" value="" />
<input name="first_day" id="first_day" type="hidden" value="" />
<input name="last_day" id="last_day" type="hidden" value="" />
<input name="axColumns" id="axColumns" type="hidden" value=""/>
<input name="timeformat" id="timeformat" type="hidden" value=""/>
<input name="dateformat" id="dateformat" type="hidden" value=""/>
<input name="default_location" id="default_location" type="hidden" value=""/>
<input name="filter_cleared" id="filter_cleared" type="hidden" value=""/>
<input name="filter_refundable" id="filter_refundable" type="hidden" value=""/>
<input name="filter_type" id="filter_type" type="hidden" value=""/>
<div id="formbuttons">
<input class='btn_norm' type='button' value='{$kga.lang.cancel}' onClick='floaterClose(); return false;' />
<input class='btn_ok' type='submit' value='{$kga.lang.submit}' onClick="floaterClose();"/>
</div>
{* -------------------------------------------------------------------- *}
</fieldset>
</form>
</div>
</div>

View File

@@ -0,0 +1,235 @@
<html xmlns:o="urn:schemas-microsoft-com:office:office"
xmlns:x="urn:schemas-microsoft-com:office:excel"
xmlns="http://www.w3.org/TR/REC-html40">
<head>
<meta http-equiv=Content-Type content="text/html; charset=utf-8">
<style>
{literal}
.date {
mso-number-format:"Short Date";
}
.time {
mso-number-format:"h\:mm\:ss\;\@";
}
.duration {
mso-number-format:"h\:mm\;\@";
}
.decimal {
mso-number-format:Fixed;
}
{/literal}
</style>
<!--[if gte mso 9]><xml>
<x:ExcelWorkbook>
<x:ExcelWorksheets>
<x:ExcelWorksheet>
<x:Name>Tabelle1</x:Name>
<x:WorksheetOptions>
<x:DefaultColWidth>10</x:DefaultColWidth>
<x:Selected/>
<x:Panes>
<x:Pane>
<x:Number>3</x:Number>
<x:ActiveRow>4</x:ActiveRow>
<x:ActiveCol>3</x:ActiveCol>
</x:Pane>
</x:Panes>
<x:ProtectContents>False</x:ProtectContents>
<x:ProtectObjects>False</x:ProtectObjects>
<x:ProtectScenarios>False</x:ProtectScenarios>
</x:WorksheetOptions>
</x:ExcelWorksheet>
</x:ExcelWorksheets>
</x:ExcelWorkbook>
</xml><![endif]-->
</head>
<body>
<table>
<thead><tr>
{*column headers------------------------------------------------*}
{ if $columns.date } <td>{$kga.lang.datum}</td> { /if }
{ if $columns.from } <td>{$kga.lang.in}</td> { /if }
{ if $columns.to } <td>{$kga.lang.out}</td> { /if }
{ if $columns.time } <td>{$kga.lang.time}</td> { /if }
{ if $columns.dec_time } <td>{$kga.lang.timelabel}</td> { /if }
{ if $columns.rate } <td>{$kga.lang.rate}</td> { /if }
{ if $columns.wage } <td>{$kga.currency_name}</td> { /if }
{ if $columns.knd } <td>{$kga.lang.knd}</td> { /if }
{ if $columns.division } <td>Division</td> { /if }
{ if $columns.pct } <td>{$kga.lang.pct}</td> { /if }
{ if $columns.action } <td>{$kga.lang.evt}</td> { /if }
{ if $columns.comment } <td>{$kga.lang.comment}</td> { /if }
{ if $columns.location } <td>{$kga.lang.zlocation}</td> { /if }
{ if $columns.trackingnr } <td>{$kga.lang.trackingnr}</td> { /if }
{ if $columns.user } <td>{$kga.lang.username}</td> { /if }
{ if $columns.cleared } <td>{$kga.lang.cleared}</td> { /if }
</tr>
</thead>
{section name=row loop=$arr_data}
<tr>
{*datum --------------------------------------------------------*}
{ if $columns.date }
<td class=date>
{ if $custom_dateformat }
{$arr_data[row].time_in|date_format:$custom_dateformat|escape:'html'}
{ else }
{$arr_data[row].time_in|date_format:$kga.date_format.1|escape:'html'}
{ /if }
</td>
{/if}
{*in -----------------------------------------------------------*}
{ if $columns.from }
<td align=right class=time>
{ if $custom_timeformat }
{$arr_data[row].time_in|date_format:$custom_timeformat|escape:'html'}
{ else }
{$arr_data[row].time_in|date_format:"%H:%M"|escape:'html'}
{ /if }
</td>
{/if}
{*out ----------------------------------------------------------*}
{ if $columns.to }
<td align=right class=time>
{if $arr_data[row].time_out}
{ if $custom_timeformat }
{$arr_data[row].time_out|date_format:$custom_timeformat|escape:'html'}
{ else }
{$arr_data[row].time_out|date_format:"%H:%M"|escape:'html'}
{ /if }
{else}
&ndash;&ndash;:&ndash;&ndash;
{/if}
</td>
{/if}
{*task time ----------------------------------------------------*}
{ if $columns.time }
<td align=right class=duration>
{if $arr_data[row].zef_time}
{$arr_data[row].zef_duration}
{else}
&ndash;:&ndash;&ndash;
{/if}
</td>
{/if}
{*decimal time --------------------------------------------------*}
{ if $columns.dec_time }
<td align=right class=decimal>
{if $arr_data[row].dec_zef_time}
{$arr_data[row].dec_zef_time}
{else}
&ndash;:&ndash;&ndash;
{/if}
</td>
{/if}
{*rate ---------------------------------------------------------*}
{ if $columns.rate }
<td align=right class=decimal>
{$arr_data[row].zef_rate}
</td>
{/if}
{*task wage ----------------------------------------------------*}
{ if $columns.wage }
<td align=right class=decimal>
{if $arr_data[row].wage}
{$arr_data[row].wage}
{else}
&ndash;
{/if}
</td>
{/if}
{*client name --------------------------------------------------*}
{ if $columns.knd }
<td>
{$arr_data[row].knd_name|escape:'html'}
</td>
{/if}
{*division name -------------------------------------------------*}
{ if $columns.division }
<td>
{$arr_data[row].division|escape:'html'}
</td>
{/if}
{*project name -------------------------------------------------*}
{ if $columns.pct }
<td>
{$arr_data[row].pct_name|escape:'html'}
</td>
{/if}
{*event name and comment bubble --------------------------------*}
{ if $columns.action }
<td>
{$arr_data[row].evt_name|escape:'html'}
</td>
{/if}
{*comment -----------------------------------------------------*}
{ if $columns.comment }
<td>
{$arr_data[row].comment|escape:'html'|replace:"\n":"&#10;"}
</td>
{/if}
{*location ----------------------------------------------------*}
{ if $columns.location }
<td>
{$arr_data[row].location|escape:'html'}
</td>
{/if}
{*tracking number ---------------------------------------------*}
{ if $columns.trackingnr }
<td>
{$arr_data[row].trackingnr|escape:'html'}
</td>
{/if}
{*user --------------------------------------------------------*}
{ if $columns.user }
<td>
{$arr_data[row].username|escape:'html'}
</td>
{/if}
{*cleared -----------------------------------------------------*}
{ if $columns.cleared }
<td>
{if $arr_data[row].cleared}cleared{else}{/if}
</td>
{/if}
</tr>
{/section}
</table>
</body>
</html>

View File

@@ -0,0 +1,403 @@
<html>
<head>
<title></title>
<meta content="">
{literal}
<style type="text/css" media="all">
body, div, dl, dt, dd, ul, ol, li, h1, h2, h3, h4, h5, h6, pre, form, fieldset, input, textarea, p, blockquote, th, td {
margin: 0;
padding: 0;
}
table {
border-collapse: collapse;
border-spacing: 0;
margin-bottom:30px;
}
fieldset, img { border: 0; }
address, caption, cite, code, dfn, em, strong, th, var {
font-style: normal;
font-weight: normal;
}
ol, ul { list-style: none; }
caption, th { text-align: left; }
h2 {
margin-bottom:10px;
}
q:before { content: ''; }
q:after { content: ''; }
abbr, acronym { border: 0; }
th {
text-align: left;
font-weight: bold;
}
th {
border-right: 1px solid #999999;
padding: 5px;
}
th:first-child { border-left: 1px solid #999999; }
td {
border-right: 1px solid #999999;
padding: 5px;
}
td:first-child { border-left: 1px solid #999999; }
h1 {
font-size: 150%;
font-weight: bold;
margin-bottom: 10px;
}
</style>
<style type="text/css" media="print">
body {
color: black;
font-family: Arial, Verdana, sans-serif;
font-size: 11px;
}
th {
background: #ccc;
border-top: 1px solid #999;
border-bottom: 1px solid #999;
font-family: Arial, Verdana, sans-serif;
font-size: 11px;
font-weight: normal;
}
td {
border-bottom: 1px solid #999;
font-family: Arial, Verdana, sans-serif;
font-size: 11px;
}
#div_selectform {
display: none;
}
#div_liste {
}
#invertbtn, .invertclm {
display: none;
}
</style>
<style type="text/css" media="screen">
body {
color: black;
font-family: Arial, Verdana, sans-serif;
font-size: 11px;
padding:10px;
}
th {
background: #ccc;
border-top: 1px solid #999;
border-bottom: 1px solid #999;
font-family: Arial, Verdana, sans-serif;
font-size: 11px;
font-weight: normal;
}
td {
border-bottom: 1px solid #999;
font-family: Arial, Verdana, sans-serif;
font-size: 11px;
}
#div_liste {
margin-top:10px;
float: left;
width: 600px;
}
</style>
{/literal}
</head>
<body>
<h2> {$kga.lang.xp_ext.time_period}: {$timespan|escape:'html'} </h2>
{ if $customersFilter != "" }
<br/><b>{$kga.lang.knds}</b>: {$customersFilter|escape:'html'}
{/if}
{ if $projectsFilter != "" }
<br/><b>{$kga.lang.pcts}</b>: {$projectsFilter|escape:'html'}
{/if}
<br/>
{if $summary != 0}
<h2>{$kga.lang.xp_ext.summary}</h2>
<table border="1">
<tbody>
<tr>
<th>{$kga.lang.evt}</th>
{ if $columns.dec_time }
<th>{$kga.lang.xp_ext.duration}</th>
{/if}
{ if $columns.wage }
<th>{$kga.lang.xp_ext.costs}</th>
{/if}
</tr>
{section name=row loop=$summary}
<tr>
<td>{$summary[row].name|escape:'html'}</td>
{ if $columns.dec_time }
<td>{if $summary[row].time != -1}
{$summary[row].time|escape:'html'}
{/if}</td>
{/if}
{ if $columns.wage }
<td>{$summary[row].wage|escape:'html'}</td>
{/if}
</tr>
{/section}
<tr>
<td>
<i>{$kga.lang.xp_ext.finalamount}</i>
</td>
{ if $columns.dec_time }
<td>{$timeSum|number_format:2:$kga.conf.decimalSeparator:""|escape:'html'}</td>
{/if}
{ if $columns.wage }
<td>{$wageSum|number_format:2:$kga.conf.decimalSeparator:""|escape:'html'}</td>
{/if}
</tr>
</tbody>
</table>
{/if}
<h2>{$kga.lang.xp_ext.full_list}</h2>
<table border="1">
<tbody>
{*column headers------------------------------------------------*}
<tr>
{ if $columns.date } <th>{$kga.lang.datum}</th> { /if }
{ if $columns.from } <th>{$kga.lang.in}</th> { /if }
{ if $columns.to } <th>{$kga.lang.out}</th> { /if }
{ if $columns.time } <th>{$kga.lang.time}</th> { /if }
{ if $columns.dec_time } <th>{$kga.lang.timelabel}</th> { /if }
{ if $columns.rate } <th>{$kga.lang.rate}</th> { /if }
{ if $columns.wage } <th>{$kga.currency_name}</th> { /if }
{ if $columns.knd } <th>{$kga.lang.knd}</th> { /if }
{ if $columns.division } <th>Division</th> { /if }
{ if $columns.pct } <th>{$kga.lang.pct}</th> { /if }
{ if $columns.action } <th>{$kga.lang.evt}</th> { /if }
{ if $columns.comment } <th>{$kga.lang.comment}</th> { /if }
{ if $columns.location } <th>{$kga.lang.zlocation}</th> { /if }
{ if $columns.trackingnr } <th>{$kga.lang.trackingnr}</th> { /if }
{ if $columns.user } <th>{$kga.lang.username}</th> { /if }
{ if $columns.cleared } <th>{$kga.lang.cleared}</th> { /if }
</tr>
{section name=row loop=$arr_data}
<tr>
{*datum --------------------------------------------------------*}
{ if $columns.date }
<td>
{ if $custom_dateformat }
{$arr_data[row].time_in|date_format:$custom_dateformat|escape:'html'}
{ else }
{$arr_data[row].time_in|date_format:$kga.date_format.1|escape:'html'}
{ /if }
</td>
{/if}
{*in -----------------------------------------------------------*}
{ if $columns.from }
<td>
{ if $custom_timeformat }
{$arr_data[row].time_in|date_format:$custom_timeformat|escape:'html'}
{ else }
{$arr_data[row].time_in|date_format:"%H:%M"|escape:'html'}
{ /if }
</td>
{/if}
{*out ----------------------------------------------------------*}
{ if $columns.to }
<td>
{if $arr_data[row].time_out}
{ if $custom_timeformat }
{$arr_data[row].time_out|date_format:$custom_timeformat|escape:'html'}
{ else }
{$arr_data[row].time_out|date_format:"%H:%M"|escape:'html'}
{ /if }
{else}
&ndash;&ndash;:&ndash;&ndash;
{/if}
</td>
{/if}
{*task time ----------------------------------------------------*}
{ if $columns.time }
<td>
{if $arr_data[row].zef_time}
{$arr_data[row].zef_duration}
{else}
&ndash;:&ndash;&ndash;
{/if}
</td>
{/if}
{*decimal time --------------------------------------------------*}
{ if $columns.dec_time }
<td>
{if $arr_data[row].dec_zef_time}
{$arr_data[row].dec_zef_time|replace:'.':$kga.conf.decimalSeparator|escape:'html'}
{else}
&ndash;:&ndash;&ndash;
{/if}
</td>
{/if}
{*rate ---------------------------------------------------------*}
{ if $columns.rate }
<td>
{$arr_data[row].zef_rate|replace:'.':$kga.conf.decimalSeparator|escape:'html'}
</td>
{/if}
{*task wage ----------------------------------------------------*}
{ if $columns.wage }
<td>
{if $arr_data[row].wage}
{$arr_data[row].wage|replace:'.':$kga.conf.decimalSeparator|escape:'html'}
{else}
&ndash;
{/if}
</td>
{/if}
{*client name --------------------------------------------------*}
{ if $columns.knd }
<td>
{$arr_data[row].knd_name|escape:'html'}
</td>
{/if}
{*division name -------------------------------------------------*}
{ if $columns.division }
<td>
{$arr_data[row].division|escape:'html'}
</td>
{/if}
{*project name -------------------------------------------------*}
{ if $columns.pct }
<td>
{$arr_data[row].pct_name|escape:'html'}
</td>
{/if}
{*event name and comment bubble --------------------------------*}
{ if $columns.action }
<td>
{$arr_data[row].evt_name|escape:'html'}
</td>
{/if}
{*comment -----------------------------------------------------*}
{ if $columns.comment }
<td>
{$arr_data[row].comment|escape:'html'|nl2br}
</td>
{/if}
{*location ----------------------------------------------------*}
{ if $columns.location }
<td>
{$arr_data[row].location|escape:'html'}
</td>
{/if}
{*tracking number ---------------------------------------------*}
{ if $columns.trackingnr }
<td>
{$arr_data[row].trackingnr|escape:'html'}
</td>
{/if}
{*user --------------------------------------------------------*}
{ if $columns.user }
<td>
{$arr_data[row].username|escape:'html'}
</td>
{/if}
{*cleared -----------------------------------------------------*}
{ if $columns.cleared }
<td>
{if $arr_data[row].cleared}{$kga.lang.cleared}{else}{/if}
</td>
{/if}
</tr>
{/section}
{if $timeSum > 0 || $wageSum > 0}
<tr>
<td colspan="{$columns|@count}">
{$kga.lang.xp_ext.finalamount}
</td>
</tr>
<tr>
{ if $columns.date } <td></td> {/if}
{ if $columns.from } <td></td> {/if}
{ if $columns.to }<td></td> {/if}
{ if $columns.time } <td></td> {/if}
{ if $columns.dec_time } <td>
{$timeSum|escape:'html'}
</td> {/if}
{ if $columns.rate } <td></td> {/if}
{ if $columns.wage } <td>
{$wageSum|escape:'html'}
</td>{/if}
{ if $columns.knd } <td></td> {/if}
{ if $columns.division } <td></td> {/if}
{ if $columns.pct } <td></td> {/if}
{ if $columns.action } <td></td> {/if}
{ if $columns.comment } <td></td> {/if}
{ if $columns.location } <td></td> {/if}
{ if $columns.trackingnr } <td></td> {/if}
{ if $columns.user } <td></td> {/if}
{ if $columns.cleared } <td></td> {/if}
</tr>
{/if}
</tbody>
</table>
</body>
</html>

View File

@@ -0,0 +1,59 @@
{literal}
<script type="text/javascript">
$(document).ready(function() {
xp_ext_onload();
});
</script>
{/literal}
<div id="xp_head">
<div class="right">
<a href="#" onClick="$('#xptable td.cleared>a').click(); return false;">invert</a>
</div>
<table>
<colgroup>
<col class="date" />
<col class="from" />
<col class="to" />
<col class="time" />
<col class="dec_time" />
<col class="rate" />
<col class="wage" />
<col class="knd" />
<col class="division" />
<col class="pct" />
<col class="evt" />
<col class="comment" />
<col class="location" />
<col class="trackingnr" />
<col class="user" />
</colgroup>
<tbody>
<tr>
<td class="date {if $disabled_columns.date}disabled{/if}"><a onClick="xp_toggle_column('date');">{$kga.lang.datum}</a></td>
<td class="from {if $disabled_columns.from}disabled{/if}"><a onClick="xp_toggle_column('from');">{$kga.lang.in}</a></td>
<td class="to {if $disabled_columns.to}disabled{/if}"><a onClick="xp_toggle_column('to');">{$kga.lang.out}</a></td>
<td class="time {if $disabled_columns.time}disabled{/if}"><a onClick="xp_toggle_column('time');">{$kga.lang.time}</a></td>
<td class="dec_time {if $disabled_columns.dec_time}disabled{/if}"><a onClick="xp_toggle_column('dec_time');">{$kga.lang.timelabel}</a></td>
<td class="rate"><a class="rate {if $disabled_columns.rate}disabled{/if}" onClick="xp_toggle_column('rate');">{$kga.lang.rate_short}</a></td>
<td class="wage"><a class="wage {if $disabled_columns.wage}disabled{/if}" onClick="xp_toggle_column('wage');">{$kga.lang.total}</a></td>
<td class="knd {if $disabled_columns.knd}disabled{/if}"><a onClick="xp_toggle_column('knd');">{$kga.lang.knd}</a></td>
<td class="division {if $disabled_columns.division}disabled{/if}"><a onClick="xp_toggle_column('division');">Division</a></td>
<td class="pct {if $disabled_columns.pct}disabled{/if}"><a onClick="xp_toggle_column('pct');">{$kga.lang.pct}</a></td>
<td class="evt {if $disabled_columns.evt}disabled{/if}"><a onClick="xp_toggle_column('evt');">{$kga.lang.evt}</a></td>
<td class="moreinfo" colspan="3">
<a class="comment {if $disabled_columns.comment}disabled{/if}" onClick="xp_toggle_column('comment');">{$kga.lang.comment}</a>,
<a class="location {if $disabled_columns.location}disabled{/if}" onClick="xp_toggle_column('location');">{$kga.lang.zlocation}</a>,
<a class="trackingnr {if $disabled_columns.trackingnr}disabled{/if}" onClick="xp_toggle_column('trackingnr');">{$kga.lang.trackingnr}</a>
</td>
<td class="user {if $disabled_columns.user}disabled{/if}"><a onClick="xp_toggle_column('user');">{$kga.lang.username}</a></td>
</tr>
</tbody>
</table>
</div>
<div id="xp">{$table_display} </div>

View File

@@ -0,0 +1,76 @@
{literal}
<script type="text/javascript">
$(document).ready(function() {
xp_ext_onload();
});
</script>
{/literal}
<div id="xp_panel">
<div class="w">
<div class="c">
<div class="w">
<div class="c">
<div id="xp_ext_tab_filter">
<select id="xp_ext_tab_filter_cleared" name="cleared" onChange="xp_ext_reload()">
<option value="-1" {if !$kga.conf.hideClearedEntries}selected="selected"{/if}>{$kga.lang.xp_ext.cleared_all}</option>
<option value="1">{$kga.lang.xp_ext.cleared_cleared}</option>
<option value="0" {if $kga.conf.hideClearedEntries}selected="selected"{/if}>{$kga.lang.xp_ext.cleared_open}</option>
</select>
<select id="xp_ext_tab_filter_refundable" name="refundable" onChange="xp_ext_reload()">
<option value="-1" selected="selected">{$kga.lang.xp_ext.refundable_all}</option>
<option value="0">{$kga.lang.xp_ext.refundable_refundable}</option>
<option value="1">{$kga.lang.xp_ext.refundable_not_refundable}</option>
</select>
<select id="xp_ext_tab_filter_type" name="type" onChange="xp_ext_reload()">
<option value="-1" selected="selected">{$kga.lang.xp_ext.times_and_expenses}</option>
<option value="0">{$kga.lang.xp_ext.times}</option>
<option value="1">{$kga.lang.xp_ext.expenses}</option>
</select>
</div>
<div id="xp_ext_tab_timeformat">
<span>{$kga.lang.xp_ext.timeformat}:<a href="#" class="helpfloater">{$kga.lang.xp_ext.export_timeformat_help}</a></span>
<input type="text" name="time_format" value="{$timeformat|escape:'html'}" id="xp_ext_timeformat" onChange="xp_ext_reload()">
<span>{$kga.lang.xp_ext.dateformat}:<a href="#" class="helpfloater">{$kga.lang.xp_ext.export_timeformat_help}</a></span>
<input type="text" name="date_format" value="{$dateformat|escape:'html'}" id="xp_ext_dateformat" onChange="xp_ext_reload()">
</div>
<div id="xp_ext_tab_location">
<span>{$kga.lang.xp_ext.stdrd_location}</span>
<input type="text" name="std_loc" value="" id="xp_ext_default_location" onChange="xp_ext_reload()">
</div>
</div>
</div>
<div class="l">&nbsp;</div><div class="r">&nbsp;</div>
</div>
</div>
<div class="l">
<div class="w">
<div class="c">
<a id="xp_ext_select_filter" href="#" class="select_btn">{$kga.lang.xp_ext.filter}</a>
<a id="xp_ext_select_location" href="#" class="select_btn">{$kga.lang.xp_ext.location}</a>
<a id="xp_ext_select_timeformat" href="#" class="select_btn">{$kga.lang.xp_ext.timeformat}</a>
</div>
</div>
<div class="l">&nbsp;</div>
</div>
<div class="r">
<div class="w">
<div class="c">
<a id="xp_ext_export_pdf" href="#" class="output_btn">{$kga.lang.xp_ext.exportPDF}</a>
<a id="xp_ext_export_xls" href="#" class="output_btn">{$kga.lang.xp_ext.exportXLS}</a>
<a id="xp_ext_export_csv" href="#" class="output_btn">{$kga.lang.xp_ext.exportCSV}</a>
<a id="xp_ext_print" href="#" class="output_btn">{$kga.lang.xp_ext.print}</a>
</div>
</div>
<div class="l">&nbsp;</div><div class="r">&nbsp;</div>
</div>
</div>

View File

@@ -0,0 +1,398 @@
{cycle values="odd,even" reset=true print=false}
{if $arr_data}
<div id="xptable">
<table>
<colgroup>
<col class="date" />
<col class="from" />
<col class="to" />
<col class="time" />
<col class="dec_time" />
<col class="rate" />
<col class="wage" />
<col class="client" />
<col class="division" />
<col class="project" />
<col class="action" />
<col class="comment" />
<col class="location" />
<col class="trackingnr" />
<col class="user" />
<col class="cleared" />
</colgroup>
<tbody>
{assign var="day_buffer" value="0"}
{assign var="time_in_buffer" value=0}
{section name=row loop=$arr_data}
<tr id="xp{$arr_data[row].type}{$arr_data[row].id}" class="{cycle values="odd,even"} {if !$arr_data[row].time_out}active{/if}
{if $arr_data[row].type=="exp"}expense{/if}">
{*datum --------------------------------------------------------*}
<td class="date
{if $arr_data[row].time_in|date_format:"%d" != $day_buffer}
{if $kga.show_daySeperatorLines}break_day{/if}
{else}
{if $arr_data[row].time_out != $time_in_buffer}
{if $kga.show_gabBreaks}break_gap{/if}
{/if}
{/if}
{if $disabled_columns.date}disabled{/if}
">
{$arr_data[row].time_in|date_format:$dateformat|escape:'html'}
</td>
{*in -----------------------------------------------------------*}
<td class="from
{if $arr_data[row].time_in|date_format:"%d" != $day_buffer}
{if $kga.show_daySeperatorLines}break_day{/if}
{else}
{if $arr_data[row].time_out != $time_in_buffer}
{if $kga.show_gabBreaks}break_gap{/if}
{/if}
{/if}
{if $disabled_columns.from}disabled{/if}
">
{$arr_data[row].time_in|date_format:$timeformat|escape:'html'}
</td>
{*out ----------------------------------------------------------*}
<td class="to
{if $arr_data[row].time_in|date_format:"%d" != $day_buffer}
{if $kga.show_daySeperatorLines}break_day{/if}
{else}
{if $arr_data[row].time_out != $time_in_buffer}
{if $kga.show_gabBreaks}break_gap{/if}
{/if}
{/if}
{if $disabled_columns.to}disabled{/if}
">
{if $arr_data[row].time_out}
{$arr_data[row].time_out|date_format:$timeformat|escape:'html'}
{else}
&ndash;&ndash;:&ndash;&ndash;
{/if}
</td>
{*task time ----------------------------------------------------*}
<td class="time
{if $arr_data[row].time_in|date_format:"%d" != $day_buffer}
{if $kga.show_daySeperatorLines}break_day{/if}
{else}
{if $arr_data[row].time_out != $time_in_buffer}
{if $kga.show_gabBreaks}break_gap{/if}
{/if}
{/if}
{if $disabled_columns.time}disabled{/if}
">
{if $arr_data[row].zef_time}
{$arr_data[row].zef_duration}
{else}
&ndash;:&ndash;&ndash;
{/if}
</td>
{*decimal time --------------------------------------------------*}
<td class="dec_time
{if $arr_data[row].time_in|date_format:"%d" != $day_buffer}
{if $kga.show_daySeperatorLines}break_day{/if}
{else}
{if $arr_data[row].time_out != $time_in_buffer}
{if $kga.show_gabBreaks}break_gap{/if}
{/if}
{/if}
{if $disabled_columns.dec_time}disabled{/if}
">
{if $arr_data[row].dec_zef_time}
{$arr_data[row].dec_zef_time|replace:'.':$kga.conf.decimalSeparator|escape:'html'}
{else}
&ndash;:&ndash;&ndash;
{/if}
</td>
{*rate ---------------------------------------------------------*}
<td class="rate
{if $arr_data[row].time_in|date_format:"%d" != $day_buffer}
{if $kga.show_daySeperatorLines}break_day{/if}
{else}
{if $arr_data[row].time_out != $time_in_buffer}
{if $kga.show_gabBreaks}break_gap{/if}
{/if}
{/if}
{if $disabled_columns.rate}disabled{/if}
">
{$arr_data[row].zef_rate|replace:'.':$kga.conf.decimalSeparator|escape:'html'}
</td>
{*task wage ----------------------------------------------------*}
<td class="wage
{if $arr_data[row].time_in|date_format:"%d" != $day_buffer}
{if $kga.show_daySeperatorLines}break_day{/if}
{else}
{if $arr_data[row].time_out != $time_in_buffer}
{if $kga.show_gabBreaks}break_gap{/if}
{/if}
{/if}
{if $disabled_columns.wage}disabled{/if}
">
{if $arr_data[row].wage}
{$arr_data[row].wage|replace:'.':$kga.conf.decimalSeparator|escape:'html'}
{else}
&ndash;
{/if}
</td>
{*client name --------------------------------------------------*}
<td class="knd
{if $arr_data[row].time_in|date_format:"%d" != $day_buffer}
{if $kga.show_daySeperatorLines}break_day{/if}
{else}
{if $arr_data[row].time_out != $time_in_buffer}
{if $kga.show_gabBreaks}break_gap{/if}
{/if}
{/if}
{if $disabled_columns.knd}disabled{/if}
">
{$arr_data[row].knd_name|escape:'html'}
</td>
{*division -----------------------------------------------------*}
<td class="division
{if $arr_data[row].time_in|date_format:"%d" != $day_buffer}
{if $kga.show_daySeperatorLines}break_day{/if}
{else}
{if $arr_data[row].time_out != $time_in_buffer}
{if $kga.show_gabBreaks}break_gap{/if}
{/if}
{/if}
{if $disabled_columns.division}disabled{/if}
">
{$arr_data[row].division|escape:'html'|nl2br}
</td>
{*project name -------------------------------------------------*}
<td class="pct
{if $arr_data[row].time_in|date_format:"%d" != $day_buffer}
{if $kga.show_daySeperatorLines}break_day{/if}
{else}
{if $arr_data[row].time_out != $time_in_buffer}
{if $kga.show_gabBreaks}break_gap{/if}
{/if}
{/if}
{if $disabled_columns.pct}disabled{/if}
">
<a href ="#" class="preselect_lnk"
onClick="buzzer_preselect('pct',{$arr_data[row].pct_ID},'{$arr_data[row].pct_name|replace:"'":"\\'"|escape:'html'}',{$arr_data[row].pct_kndID},'{$arr_data[row].knd_name|replace:"'":"\\'"|escape:'html'}');
return false;">
{$arr_data[row].pct_name|escape:'html'}
{if $kga.conf.pct_comment_flag == 1}
{if $arr_data[row].pct_comment}
<span class="lighter">({$arr_data[row].pct_comment|escape:'html'})</span>
{/if}
{/if}
</a>
</td>
{*event name and comment bubble --------------------------------*}
<td class="evt
{if $arr_data[row].time_in|date_format:"%d" != $day_buffer}
{if $kga.show_daySeperatorLines}break_day{/if}
{else}
{if $arr_data[row].time_out != $time_in_buffer}
{if $kga.show_gabBreaks}break_gap{/if}
{/if}
{/if}
{if $disabled_columns.evt}disabled{/if}
">
<a href ="#" class="preselect_lnk"
onClick="buzzer_preselect('evt',{$arr_data[row].zef_evtID},'{$arr_data[row].evt_name|replace:"'":"\\'"|escape:'html'}',0,0);
return false;">
{$arr_data[row].evt_name|escape:'html'}
</a>
</td>
{*comment -----------------------------------------------------*}
<td class="comment
{if $arr_data[row].time_in|date_format:"%d" != $day_buffer}
{if $kga.show_daySeperatorLines}break_day{/if}
{else}
{if $arr_data[row].time_out != $time_in_buffer}
{if $kga.show_gabBreaks}break_gap{/if}
{/if}
{/if}
{if $disabled_columns.comment}disabled{/if}
">
{$arr_data[row].comment|escape:'html'|nl2br}
</td>
{*location ----------------------------------------------------*}
<td class="location
{if $arr_data[row].time_in|date_format:"%d" != $day_buffer}
{if $kga.show_daySeperatorLines}break_day{/if}
{else}
{if $arr_data[row].time_out != $time_in_buffer}
{if $kga.show_gabBreaks}break_gap{/if}
{/if}
{/if}
{if $disabled_columns.location}disabled{/if}
">
{$arr_data[row].location|escape:'html'}
</td>
{*tracking number ---------------------------------------------*}
<td class="trackingnr
{if $arr_data[row].time_in|date_format:"%d" != $day_buffer}
{if $kga.show_daySeperatorLines}break_day{/if}
{else}
{if $arr_data[row].time_out != $time_in_buffer}
{if $kga.show_gabBreaks}break_gap{/if}
{/if}
{/if}
{if $disabled_columns.trackingnr}disabled{/if}
">
{$arr_data[row].trackingnr|escape:'html'}
</td>
{*user --------------------------------------------------------*}
<td class="user
{if $arr_data[row].time_in|date_format:"%d" != $day_buffer}
{if $kga.show_daySeperatorLines}break_day{/if}
{else}
{if $arr_data[row].time_out != $time_in_buffer}
{if $kga.show_gabBreaks}break_gap{/if}
{/if}
{/if}
{if $disabled_columns.user}disabled{/if}
">
{$arr_data[row].username|escape:'html'}
</td>
<td class="cleared
{if $arr_data[row].time_in|date_format:"%d" != $day_buffer}
{if $kga.show_daySeperatorLines}break_day{/if}
{else}
{if $arr_data[row].time_out != $time_in_buffer}
{if $kga.show_gabBreaks}break_gap{/if}
{/if}
{/if}
{if $disabled_columns.cleared}disabled{/if}
">
<a class ="{if $arr_data[row].cleared}is_cleared{else}isnt_cleared{/if}" href ="#" onClick="xp_toggle_cleared('{$arr_data[row].type}{$arr_data[row].id}'); return false;"></a>
</td>
</tr>
{assign var="day_buffer" value=$arr_data[row].time_in|date_format:"%d"}
{assign var="time_in_buffer" value=$arr_data[row].time_in}
{/section}
</tbody>
</table>
</div>
{else}
<div style='padding:5px;color:#f00'>
<strong>{$kga.lang.noEntries}</strong>
</div>
{/if}
<script type="text/javascript">
ts_usr_ann = null;
ts_knd_ann = null;
ts_pct_ann = null;
ts_evt_ann = null;
ts_total = '{$total}';
{ if $usr_ann }
ts_usr_ann = new Array();
{foreach key=id item=value from=$usr_ann}
ts_usr_ann[{$id}] = '{$value}';
{/foreach}
{/if}
{ if $knd_ann }
ts_knd_ann = new Array();
{foreach key=id item=value from=$knd_ann}
ts_knd_ann[{$id}] = '{$value}';
{/foreach}
{/if}
{ if $pct_ann }
ts_pct_ann = new Array();
{foreach key=id item=value from=$pct_ann}
ts_pct_ann[{$id}] = '{$value}';
{/foreach}
{/if}
{ if $evt_ann }
ts_evt_ann = new Array();
{foreach key=id item=value from=$evt_ann}
ts_evt_ann[{$id}] = '{$value}';
{/foreach}
{/if}
{literal}
lists_update_annotations(parseInt($('#gui div.ki_export').attr('id').substring(7)),ts_usr_ann,ts_knd_ann,ts_pct_ann,ts_evt_ann);
$('#display_total').html(ts_total);
{/literal}
</script>