#include <infocon.style>
#include "common.inc"
+<future>
+<page func=InfoCon title="Stempeluhr">
+
<?
session_name('STEMPEL');
session_start();
$name = load_customers();
- $table_head = '<h3 class="bar">Kunde: %s</h3><script type="text/javascript">plant(%d);</script>
+ $table_head = '<h3 class="bar">Kunde: %s</h3><script type="text/javascript">plant(%d,%.2f);</script>
<form action="status.php" method="POST">
- <table class="smallfont border" width="100%%" cellpadding=0 cellspacing=0>
+ <table class="smallfont border" id="table_%d" width="100%%" cellpadding=0 cellspacing=0>
+ <thead>
<tr class="head" onclick="edit_task_finish(this)">
<th width=15%%>Datum</th>
<th width=5%%>Dauer</th>
<th width=5%%>St.</th>
<th width=75%% align=left>Arbeitsbeschreibung</th>
- </tr>';
+ </tr>
+ </thead>
+ <tbody>';
if (!is_array($stati))
$stati = find_status();
$table_row = '<tr class="t%d"><td>%s</td><td align="center" onclick="toggle_checkbox(%d,this)">%s</td>' .
'<td align="center" onclick="toggle_checkbox(%d,this)">%s</td><td onclick="edit_task(this)">%s</td></tr>';
- $table_sum = '<tr class="t%d"><td> </td><td align="center">%s</td><td> </td><td>Summe</td></tr>';
+ $table_sum = '</tbody><tfoot><tr class="t%d"><td> </td><td align="center">%s</td><td> </td><td>Summe</td></tr></tfoot>';
$query = "SELECT stempel.oid,start,customer,time,task,kurz FROM stempel JOIN stempel_status ON (stempel.status = stempel_status.id) WHERE time IS NOT NULL ";
if (isset($month) && strlen($month))
printf($table_foot, $fieldnr);
$form++;
}
- $cname = $name[$row['customer']];
+ $cname = $name[$row['customer']]['name'];
if (!strlen($cname)) $cname = ucfirst($row['customer']);
- printf($table_head, $cname, $form);
+ printf($table_head, $cname, $form, $name[$row['customer']]['rate'], $form);
$customer = $row['customer'];
$fieldnr = 0;
$sum = 0;
$row['oid'],
$form);
$date = sprintf('<span onclick="toggle_checkbox(%d,this)">%s</span>', $form, $d[0]);
- printf($table_row, $color, $check.$date, $form, min2hour($row['time']), $form, $row['kurz'], htmlspecialchars($row['task']));
+ printf($table_row, $color, $check.$date, $form, min2hour($row['time']), $form, $row['kurz'], htmlspecialchars($row['task'], ENT_COMPAT | ENT_HTML401, 'ISO-8859-1'));
$color = !$color;
}
if (pg_num_rows($sth) > 0) {
<script src="<root_prefix>basics.js"></script>
<script type="text/javascript">
+<protect>
var color_checked = '#c4ffc3';
function format_int(value, width)
{
function check(id, value)
{
- var form = document.forms[id];
- var sum = document.getElementById('sum_'+id.toString());
- var newval = 0;
-
- for (i=0; i< form.elements.length; i++) {
- if (form.elements[i].name.substr(0,4) == 'oid_') {
- form.elements[i].checked = value;
- if (value) {
- var ta = form.elements[i].parentNode.nextSibling.innerHTML.split(':');
- newval = newval + parseInt(ta[0],10) * 60 + parseInt(ta[1],10);
- form.elements[i].parentNode.parentNode.style.backgroundColor = color_checked;
- } else
- form.elements[i].parentNode.parentNode.style.backgroundColor = '';
- }
- }
+ var hours = $('#time_'+id);
+ var rate = $('#rate_'+id);
+ var sum = $('#sum_'+id);
+ var newval = 0;
+
+ $('table#table_'+id+' tbody tr:visible').each(function(i,e){
+ var checkbox = $(this).find('input[type="checkbox"]');
+ if (checkbox.prop('checked') != value) {
+ checkbox.prop('checked', !checkbox.prop('checked'));
+ if (checkbox.prop('checked'))
+ $(this).css('background-color', color_checked);
+ else
+ $(this).css('background-color', '');
+ add_sum(id, checkbox);
+ }
+ });
- sum.innerHTML = timestr(newval);
+ return false;
}
-function plant(form)
+function plant(form, rate)
{
document.write('<div class="jscode">');
- document.write('<a href="javascript:check('+form+',true)">Check all</a>');
+ document.write('<input class="filter" id="filter_'+form+'" size="10" value="">');
+ document.write('<img class="filter" id="img_'+form+'" src="/pix/Actions-edit-delete-icon.png" border="0" ' +
+ 'title="Filter löschen">');
+ document.write('<input type="hidden" id="rate_'+form+'" value="'+rate+'">');
+ document.write('<a href="#" onclick="return check('+form+',true)">Check all</a>');
document.write(" / ");
- document.write('<a href="javascript:check('+form+',false)">Uncheck all</a>');
+ document.write('<a href="#" onclick="return check('+form+',false)">Uncheck all</a>');
document.write(" ");
- document.write('<span id="sum_'+form+'" class="sum">0:00</span>');
+ document.write('<span id="time_'+form+'" class="sum">0:00</span>' );
+ document.write('<span id="sum_'+form+'" class="sum">€0.00</span>');
document.write(" ");
document.write('</div>');
}
function add_sum(form, checkbox)
{
- var sum = document.getElementById('sum_'+form.toString());
- var time = strtime(checkbox.parentNode.nextSibling.innerHTML);
+ var hours = $('#time_'+form);
+ var rate = $('#rate_'+form);
+ var sum = $('#sum_'+form);
+ var time = strtime($(checkbox).parents('tr:first').find('td:nth-child(2)').text());
var newval;
- if (checkbox.checked) {
- newval = strtime(sum.innerHTML) + time;
- checkbox.parentNode.parentNode.style.backgroundColor = color_checked;
+ if ($(checkbox).prop('checked')) {
+ newval = strtime(hours.text()) + time;
+ $(checkbox).parents('tr:first').css('background-color', color_checked);
} else {
- newval = strtime(sum.innerHTML) - time;
- checkbox.parentNode.parentNode.style.backgroundColor = '';
+ newval = strtime(hours.text()) - time;
+ $(checkbox).parents('tr:first').css('background-color', '');
}
- sum.innerHTML = timestr(newval);
+ hours.text(timestr(newval));
+ sum.html('€' + ((newval/60)*rate.val()).toFixed(2));
}
var task_parent = null;
task_title = obj.innerHTML;
task_oid = obj.parentNode.children[0].children[0].value;
- var input = document.createElement('input');
- input.value = obj.innerHTML
- input.style.fontSize = '100%';
- input.style.width = '100%';
- input.style.background = 'yellow';
-
+ var input = $('<input>');
+ input.val(obj.innerHTML.replace('>', '>').replace('<', '<').replace('&', '&'));
+ input.css('fontSize', '100%').css('width', '100%').css('background', 'yellow');
obj.innerHTML = '';
- obj.appendChild(input);
+ $(obj).append(input);
input.focus();
}
}
if (!task_parent) return;
if (task_parent.children[0].value != task_title)
- ajax_request('save','oid='+task_oid+'&task='+encodeURIComponent(task_parent.children[0].value));
+ $.invoke('Sales/Text', {id: task_oid, text: task_parent.children[0].value});
task_parent.innerHTML = task_parent.children[0].value;
task_parent = null;
function toggle_checkbox(form, obj)
{
- edit_task_finish(obj);
+ edit_task_finish(obj);
- var row = obj;
- while (row.tagName.toLowerCase() != 'tr')
- row = row.parentNode;
+ var row = $(obj).parents('tr:first');
+ var checkbox = row.find('input[type="checkbox"]')
+ checkbox.prop('checked', !checkbox.prop('checked'));
- var checkbox = row.children[0].children[0];
+ checkbox.checked = !checkbox.checked;
+ add_sum(form, checkbox);
+}
- checkbox.checked = !checkbox.checked;
- add_sum(form, checkbox);
+function filter_change(e)
+{
+ var form = $(this).attr('id').split('_')[1];
+ var filter = $('input#filter_'+form).val();
+
+ $('table#table_'+form+' tbody tr').each(function(i,e){
+ if (filter.length) {
+ var td = $(this).find('td:nth-child(4)');
+ if (td.text().toLowerCase().indexOf(filter) > -1)
+ $(this).show();
+ else {
+ if ($(this).find('input[type="checkbox"]').prop('checked')) {
+ toggle_checkbox(form, td);
+ }
+ $(this).hide();
+ }
+ } else {
+ $(this).show();
+ }
+ });
}
+
+function filter_clear(e)
+{
+ var form = $(this).attr('id').split('_')[1];
+ $('div.jscode input.filter#filter_'+form).val('').change();
+}
+
+$(function(){
+ $('div.jscode input.filter').change(filter_change);
+ $('div.jscode img.filter').click(filter_clear);
+});
+</protect>
</script>
<style type="text/css">
margin-top: -13px;
font-size: 12px;
}
+div.jscode input.filter {
+ font-size: 90%;
+ position: relative;
+ bottom: 2px;
+}
+div.jscode img.filter {
+ position: relative;
+ bottom: -3px;
+ margin-left: 1px;
+ margin-right: 10px;
+}
span.sum {
display: inline;
border: 1px solid #9b9b9b;
}
</style>
-<page func=InfoCon title="Stempeluhr">
-
<?
if (!empty($msg))
echo $msg;