<future>
<page func=InfoCon title="Stempeluhr">
+<script type="text/javascript" src="<root_prefix>jquery.editable.js"></script>
<?
session_name('STEMPEL');
session_start();
- function update_db()
- {
- global $dbh;
-
- $count = 0;
- for ($idx=0; $idx < $_POST["fields"]; $idx++) {
- if (isset($_POST["oid_".$idx])) {
- $query = sprintf('UPDATE stempel SET status=%d WHERE oid=%d',
- $_POST["status"], $_POST["oid_".$idx]);
- $count++;
- $sth = pg_exec ($dbh, $query);
- }
- }
- return sprintf("<br>%d records updated.", $count);
- }
-
$stati = false;
function display_tables()
{
<form action="status.php" method="POST">
<table class="smallfont border" id="table_%d" width="100%%" cellpadding=0 cellspacing=0>
<thead>
- <tr class="head" onclick="edit_task_finish(this)">
+ <tr class="head">
<th width=15%%>Datum</th>
<th width=5%%>Dauer</th>
<th width=5%%>St.</th>
foreach ($stati as $k=>$v)
$table_foot .= sprintf('<input type="radio" name="status" value="%s"%s>%s ', $k, 0==$k?' checked':'', $v);
- $table_foot .= '<input type="submit" class="button" value="Aktualisieren"></p></div>'.
+ $table_foot .= '<input type="submit" class="button" value="Aktualisieren" onclick="return status_change(event)"></p></div>'.
'<input type="hidden" name="fields" value="%d">'.
'</form>';
- $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 = '</tbody><tfoot><tr class="t%d"><td> </td><td align="center">%s</td><td> </td><td>Summe</td></tr></tfoot>';
+ $table_row = '<tr class="t%d" status="%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><span class="edit" route="Stempel/EditTask" item_id="%d">%s</span></td></tr>';
+ $table_sum = '</tbody><tfoot><tr class="t%d" onclick="edit_task_finish(this)">' .
+ '<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 ";
+ $query = "SELECT stempel.oid,stempel.id,stempel.status,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))
$query .= "AND cast(start AS TEXT) LIKE '".$month."-%' ";
if (isset($cust) && strlen($cust))
$sum += $row['time'];
$d = explode(' ', $row['start']);
- $check = sprintf('<input type="checkbox" class="checkbox" name="oid_%d" value="%d" onclick="add_sum(%d,this)">',
+ $check = sprintf('<input type="checkbox" class="checkbox" name="id_%d" value="%d" onclick="add_sum(%d,this)">',
$fieldnr++,
- $row['oid'],
+ $row['id'],
$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'], ENT_COMPAT | ENT_HTML401, 'ISO-8859-1'));
+ printf($table_row, $color, $row['status'], $check.$date, $form, min2hour($row['time']), $form, $row['kurz'],
+ $row['id'],
+ htmlspecialchars($row['task'], ENT_COMPAT | ENT_HTML401, 'ISO-8859-1'));
$color = !$color;
}
if (pg_num_rows($sth) > 0) {
add_sum(id, checkbox);
}
});
+
+ return false;
}
function plant(form, rate)
{
document.write('<div class="jscode">');
- document.write('<input class="filter" id="filter_'+form+'" size="10" value="" style="font-size: 90%; position: relative; bottom: 2px;">');
+ 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" ' +
- 'style="position: relative; bottom: -3px; margin-left: 1px; margin-right: 10px;" title="Filter löschen">');
+ 'title="Filter löschen">');
document.write('<input type="hidden" id="rate_'+form+'" value="'+rate+'">');
- document.write('<a href="javascript:check('+form+',true)">Check all</a>');
+ 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="time_'+form+'" class="sum">0:00</span>' );
document.write('<span id="sum_'+form+'" class="sum">€0.00</span>');
var task_parent = null;
var task_title = '';
-var task_oid = 0;
+var task_id = 0;
function edit_task(obj)
{
- if (task_oid) {
- if (task_oid != obj.parentNode.children[0].children[0].value)
+ if (task_id) {
+ if (task_id != obj.parentNode.children[0].children[0].value)
edit_task_save();
}
- if (!task_oid) {
+ if (!task_id) {
task_parent = obj;
task_title = obj.innerHTML;
- task_oid = obj.parentNode.children[0].children[0].value;
+ task_id = obj.parentNode.children[0].children[0].value;
var input = $('<input>');
-<protect>
input.val(obj.innerHTML.replace('>', '>').replace('<', '<').replace('&', '&'));
-</protect>
input.css('fontSize', '100%').css('width', '100%').css('background', 'yellow');
obj.innerHTML = '';
$(obj).append(input);
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('Stempel/Task', {id: task_id, content: task_parent.children[0].value});
task_parent.innerHTML = task_parent.children[0].value;
task_parent = null;
task_title = '';
- task_oid = 0;
+ task_id = 0;
}
function edit_task_finish(obj)
{
- if (task_oid)
+ if (task_id)
edit_task_save();
}
function toggle_checkbox(form, obj)
{
- edit_task_finish(obj);
-
var row = $(obj).parents('tr:first');
var checkbox = row.find('input[type="checkbox"]')
checkbox.prop('checked', !checkbox.prop('checked'));
function filter_change(e)
{
var form = $(this).attr('id').split('_')[1];
- var filter = $('input#filter_'+form).val();
+ var filter = $('input#filter_'+form).val().toLowerCase();
- $('table#table_'+form+' tbody tr').each(function(i,e){
+ var cnum = 0;
+ $('table#table_'+form+' tbody tr').not('.deleted').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 (td.text().toLowerCase().indexOf(filter) > -1) {
+ $(this).removeClass('t0').removeClass('t1').addClass('t'+cnum).show();
+ cnum = cnum ? 0 : 1;
+ } else {
if ($(this).find('input[type="checkbox"]').prop('checked')) {
toggle_checkbox(form, td);
}
$(this).hide();
}
} else {
- $(this).show();
+ $(this).removeClass('t0').removeClass('t1').addClass('t'+cnum).show();
+ cnum = cnum ? 0 : 1;
}
});
}
function filter_clear(e)
{
var form = $(this).attr('id').split('_')[1];
- $('div.jscode input.filter#filter_'+form).val('').change();
+ $('div.jscode input.filter#filter_'+form).val('').keyup();
+}
+
+function status_change(e)
+{
+ var ids = [];
+ var form = $(e.target).parents('form:first');
+ var p = $(e.target).parents('p:first');
+ form.find('tr').not('.deleted').find('input.checkbox').each(function(i,e){
+ if ($(this).prop('checked') == true)
+ ids.push($(this).val());
+ });
+
+ var new_status = 0;
+ p.find('input[name="status"]').each(function(i,e){
+ if ($(this).prop('checked') == true)
+ new_status = $(this).val();
+ });
+
+ $.invoke('Stempel/SetStatus', {status: new_status, ids: ids}, function(data){
+ for (var i=0; i < ids.length; i++) {
+ show_message('Positionen aktualisiert');
+ var checkbox = form.find('input.checkbox[value="'+ids[i]+'"]');
+ var row = checkbox.parents('tr:first');
+
+ checkbox.prop('checked',false);
+ add_sum(form.find('table:first').attr('id').split('_')[1], checkbox);
+
+ if (row.attr('status') != new_status)
+ row.addClass('deleted').hide();
+ }
+ });
+
+ return false;
}
$(function(){
- $('div.jscode input.filter').change(filter_change);
+ $('div.jscode input.filter').keyup(filter_change);
$('div.jscode img.filter').click(filter_clear);
+ make_editable('table.smallfont tr span.edit');
});
</protect>
</script>
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;