Move status change to AJAX
authorJoey Schulze <joey@infodrom.org>
Wed, 12 Jul 2017 00:09:23 +0000 (02:09 +0200)
committerJoey Schulze <joey@infodrom.org>
Wed, 12 Jul 2017 00:09:23 +0000 (02:09 +0200)
class/sales.class.php
src/InfoCon/stempel/status.wml

index e432746..3a0292d 100644 (file)
@@ -2,7 +2,7 @@
 
 class Sales extends DatabaseTable {
 
-  public function __construct($id)
+  public function __construct($id=false)
   {
     $this->idcolumn = 'nr';
     parent::__construct('sales', $id);
@@ -23,5 +23,16 @@ class Sales extends DatabaseTable {
     return $this->modify('description', $data['text']);
   }
 
+  public function ajaxSetStatus(Array $data)
+  {
+    if (count($data['ids'])) {
+      $sql = sprintf('UPDATE stempel SET status = %d WHERE oid IN (%s)',
+                    $data['status'], implode(',',$data['ids']));
+      return $this->execute($sql);
+    }
+
+    return true;
+  }
+
 }
 
index af5233b..822d46e 100644 (file)
 
     foreach ($stati as $k=>$v)
       $table_foot .= sprintf('<input type="radio" name="status" value="%s"%s>%s&nbsp;', $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>' .
+    $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 onclick="edit_task(this)">%s</td></tr>';
     $table_sum = '</tbody><tfoot><tr class="t%d"><td>&nbsp;</td><td align="center">%s</td><td>&nbsp;</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.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))
                       $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'], ENT_COMPAT | ENT_HTML401, 'ISO-8859-1'));
+      printf($table_row, $color, $row['status'], $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) {
@@ -311,7 +311,7 @@ function filter_change(e)
     var filter = $('input#filter_'+form).val();
 
     var cnum = 0;
-    $('table#table_'+form+' tbody tr').each(function(i,e){
+    $('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) {
@@ -336,6 +336,39 @@ function filter_clear(e)
     $('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('Sales/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').keyup(filter_change);
     $('div.jscode img.filter').click(filter_clear);