www/js/profile_fermentation.js

Sat, 25 Sep 2021 10:42:54 +0200

author
Michiel Broek <mbroek@mbse.eu>
date
Sat, 25 Sep 2021 10:42:54 +0200
changeset 778
e64fd38c469c
parent 768
ae1195153fa2
permissions
-rw-r--r--

If during styles import the CATEGORY_NUMBER is empty, insert 0 in the database instead.

/*****************************************************************************
 * Copyright (C) 2019-2021
 *
 * Michiel Broek <mbroek at mbse dot eu>
 *
 * This file is part of BMS
 *
 * This is free software; you can redistribute it and/or modify it
 * under the terms of the GNU General Public License as published by the
 * Free Software Foundation; either version 2, or (at your option) any
 * later version.
 *
 * Brewery Management System is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
 * General Public License for more details.
 *
 * You should have received a copy of the GNU General Public License
 * along with ThermFerm; see the file COPYING.  If not, write to the Free
 * Software Foundation, 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA.
 *****************************************************************************/


function createDelElements() {
 $('#eventWindow').jqxWindow({
  theme: theme,
  position: { x: 490, y: 210 },
  width: 300,
  height: 175,
  resizable: false,
  isModal: true,
  modalOpacity: 0.4,
  okButton: $('#delOk'),
  cancelButton: $('#delCancel'),
  initContent: function() {
   $('#delOk').jqxButton({ template: 'danger', width: '65px', theme: theme });
   $('#delCancel').jqxButton({ template: 'success', width: '65px', theme: theme });
   $('#delCancel').focus();
  }
 });
 $('#eventWindow').jqxWindow('hide');
}


$(document).ready(function() {

 // tooltips
 $('#name').jqxTooltip({ content: 'De naam voor dit vergisting profiel.' });
 $('#inittemp_lo').jqxTooltip({ content: 'De minimale begin temperatuur van dit profiel.' });
 $('#inittemp_hi').jqxTooltip({ content: 'De maximale begin temperatuur van dit profiel.' });

 var dataRecord = {},
 url = 'includes/db_profile_fermentation.php',
 source = {
  datatype: 'json',
  cache: false,
  datafields: [
   { name: 'record', type: 'number' },
   { name: 'uuid', type: 'string' },
   { name: 'name', type: 'string' },
   { name: 'inittemp_lo', type: 'float' },
   { name: 'inittemp_hi', type: 'float' },
   { name: 'fridgemode', type: 'int' },
   { name: 'totalsteps', type: 'int' },
   { name: 'duration', type: 'int' },
   { name: 'steps', type: 'array' }
  ],
  id: 'record',
  url: url,
  deleterow: function(rowid, commit) {
   var data = 'delete=true&' + $.param({ record: rowid });
   $.ajax({
    dataType: 'json',
    url: url,
    cache: false,
    data: data,
    type: 'POST',
    success: function(data) {
     if (data.error) {
      console.log('delete: ' + data.msg);
      alert('Fout: ' + data.msg);
     } else {
      console.log('delete: success');
     }
     location.reload(true);
    },
    error: function(jqXHR, textStatus, errorThrown) { commit(false); }
   });
  },
  addrow: function(rowid, rowdata, position, commit) {
   var data = 'insert=true&' + $.param(rowdata);
   $.ajax({
    dataType: 'json',
    url: url,
    cache: false,
    data: data,
    type: 'POST',
    success: function(data) {
     if (data.error) {
      console.log('insert: ' + data.msg);
      alert('Fout: ' + data.msg);
     } else {
      console.log('insert: success');
     }
     location.reload(true);
    },
    error: function(jqXHR, textStatus, errorThrown) { commit(false); }
   });
  },
  updaterow: function(rowid, rowdata, commit) {
   var data = 'update=true&' + $.param(rowdata);
   $.ajax({
    dataType: 'json',
    url: url,
    cache: false,
    data: data,
    type: 'POST',
    success: function(data) {
     if (data.error) {
      console.log('updaterow: ' + data.msg);
      alert('Fout: ' + data.msg);
     } else {
      console.log('updaterow: success');
     }
     location.reload(true);
    },
    error: function(jqXHR, textStatus, errorThrown) { commit(false); }
   });
  }
 },
 dataAdapter = new $.jqx.dataAdapter(source),
 editrow = -1,

 // Inline steps editor
 editsteps = function(data) {
  var generaterow = function() {
   var row = {};
   row['name'] = 'Stap 1';
   row['steptime'] = 12;
   row['resttime'] = 24;
   row['target_lo'] = 22.0;
   row['target_hi'] = 23.0;
   row['fridgemode'] = 0;
   return row;
  };
  var stepSource = {
   localdata: data.steps,
   datatype: 'local',
   datafields: [
    { name: 'name', type: 'string' },
    { name: 'steptime', type: 'float' },
    { name: 'resttime', type: 'float' },
    { name: 'target_lo', type: 'float' },
    { name: 'target_hi', type: 'float' },
    { name: 'fridgemode', type: 'int' }
   ],
   addrow: function(rowid, rowdata, position, commit) { commit(true); },
   deleterow: function(rowid, commit) { commit(true); }
  },
  stepAdapter = new $.jqx.dataAdapter(stepSource);
  $('#grid').jqxGrid({
   width: 800,
   height: 330,
   source: stepAdapter,
   theme: theme,
   selectionmode: 'singlerow',
   editmode: 'selectedcell',
   editable: true,
   showtoolbar: true,
   rendertoolbar: function(toolbar) {
    var container = $('<div style="margin: 5px;"></div>');
    toolbar.append(container);
    container.append('<input style="margin-left: 100px;" id="addrowbutton" type="button" value="Nieuwe stap" />');
    container.append('<input style="margin-left: 290px;" id="deleterowbutton" type="button" value="Verwijder stap" />');
    $('#addrowbutton').jqxButton({ template: 'primary', theme: theme, width: 150 });
    $('#deleterowbutton').jqxButton({ template: 'danger', theme: theme, width: 150 });
    // create new row.
    $('#addrowbutton').on('click', function() {
     var datarow = generaterow();
     $('#grid').jqxGrid('addrow', null, datarow);
    });
    // delete row.
    $('#deleterowbutton').on('click', function() {
     var selectedrowindex = $('#grid').jqxGrid('getselectedrowindex'),
     rowscount = $('#grid').jqxGrid('getdatainformation').rowscount,
     id;
     if (selectedrowindex >= 0 && selectedrowindex < rowscount) {
      id = $('#grid').jqxGrid('getrowid', selectedrowindex);
      $('#grid').jqxGrid('deleterow', id);
     }
    });
   },
   columns: [
    { text: 'Stap naam', datafield: 'name' },
    { text: 'Min. &deg;C', datafield: 'target_lo', width: 100, align: 'right', cellsalign: 'right', cellsformat: 'f1',
     validation: function(cell, value) {
      if (value < 0 || value > 45) {
       return { result: false, message: 'De temperatuur moet tussen 0 en 45 zijn.' };
      }
      return true;
     }
    },
    { text: 'Max. &deg;C', datafield: 'target_hi', width: 100, align: 'right', cellsalign: 'right', cellsformat: 'f1',
     validation: function(cell, value) {
      if (value < 0 || value > 45) {
       return { result: false, message: 'De temperatuur moet tussen 0 en 45 zijn.' };
      }
      return true;
     }
    },
    { text: 'Koelkast', datafield: 'fridgemode', columntype: 'checkbox', width: 80 },
    { text: 'Stap tijd', datafield: 'steptime', width: 80, align: 'right', cellsalign: 'right',
      validation: function(cell, value) {
       if (value < 0 || value > 14400) {
      return { result: false, message: 'De tijd moet tussen 0 en 14400 zijn.' };
     }
     return true;
      }
    },
    { text: 'Rust tijd', datafield: 'resttime', width: 80, align: 'right', cellsalign: 'right',
      validation: function(cell, value) {
     if (value < 0 || value > 14400) {
      return { result: false, message: 'De tijd moet tussen 0 en 14400 zijn.' };
     }
     return true;
      }
    }
   ]
  });
 };

 // initialize the input fields.
 $('#name').jqxInput({ theme: theme, width: 640, height: 23 });
 $('#inittemp_lo').jqxNumberInput(Spin1dec);
 $('#inittemp_lo').jqxNumberInput({ max: 45 });
 $('#inittemp_hi').jqxNumberInput(Spin1dec);
 $('#inittemp_hi').jqxNumberInput({ max: 45 });
 $('#fridgemode').jqxCheckBox({ theme: theme, height: 23, enableContainerClick: false });

 var  localizationobj = {};
 localizationobj.filterchoosestring= "Keuze:";

 // initialize jqxGrid
 $('#jqxgrid').jqxGrid({
  width: 1280,
  height: 630,
  source: dataAdapter,
  theme: theme,
  showstatusbar: true,
  renderstatusbar: function(statusbar) {
   var rowCount = $("#jqxgrid").jqxGrid('getrows').length;
   statusbar.append('<div style="float: left; margin: 8px; color: orange !important;">Aantal items: ' + rowCount + '</div>');
   var container = $('<div style="overflow: hidden; position: relative; margin: 5px;"></div>');
   var addButton = $('<div style="float: right; margin-right: 15px;"><img style="position: relative; margin-top: 2px;" ' +
     'src="images/add.png"/><span style="margin-left: 4px; position: relative; top: -4px;">Nieuw</span></div>');
   container.append(addButton);
   statusbar.append(container);
   addButton.jqxButton({ theme: theme, width: 90, height: 17 });
   // add new row.
   addButton.click(function(event) {
    editrow = -1;
    $('#name').val('Nieuw vergist profiel');
    dataRecord.uuid = '';
    $('#inittemp_lo').val(20.0);
    $('#inittemp_hi').val(20.0);
    $('#fridgemode').val(0);
    dataRecord.totalsteps = 0;
    dataRecord.duration = 0;
    editsteps('');
    $('#popupWindow').jqxWindow('open');
   });
  },
  ready: function () {
   $("#jqxgrid").jqxGrid('localizestrings', localizationobj);
  },
  filterable: true,
  showfilterrow: true,
  columns: [
   { text: 'Vergisting profiel', datafield: 'name', filtertype: 'textbox' },
   { text: 'Min. start &deg;C', datafield: 'inittemp_lo', width: 120, align: 'right', cellsalign: 'right', cellsformat: 'f1', filtertype: 'number' },
   { text: 'Max. start &deg;C', datafield: 'inittemp_hi', width: 120, align: 'right', cellsalign: 'right', cellsformat: 'f1', filtertype: 'number' },
   { text: 'Sensor', datafield: 'fridgemode', align: 'right', width: 80, filterable: false,
     cellsrenderer: function(row, columnfield, value, defaulthtml, column) {
      if (value == 0)
       return '<span style="margin: 3px; margin-top: 6px; float: right;">Bier</span>';
      else
       return '<span style="margin: 3px; margin-top: 6px; float: right;">Koelkast</span>';
     }
   },
   { text: 'Stappen', datafield: 'totalsteps', width: 80, align: 'right', cellsalign: 'right', filterable: false },
   { text: 'Tijdsduur', datafield: 'duration', width: 150, align: 'right', filterable: false,
     cellsrenderer: function(row, columnfield, value, defaulthtml, column) {
      var show, days, hours;
      if (value < 24) {
       show = value + ' uur';
      } else {
       days = Math.floor(value / 24);
       hours = value % 24;
       if (days == 1)
        show = days + ' dag, ' + hours + ' uur';
       else
        show = days + ' dagen, ' + hours + ' uur';
      }
      return '<span style="margin: 3px; margin-top: 6px; float: right;">' + show + '</span>';
     }
   },
   { text: '', datafield: 'Edit', width: 100, align: 'center', columntype: 'button', filterable: false, cellsrenderer:
    function() {
     return 'Wijzig';
    }, buttonclick: function(row) {
     editrow = row;
     // get the clicked row's data and initialize the input fields.
     dataRecord = $('#jqxgrid').jqxGrid('getrowdata', editrow);
     $('#name').val(dataRecord.name);
     $('#inittemp_lo').val(parseFloat(dataRecord.inittemp_lo));
     $('#inittemp_hi').val(parseFloat(dataRecord.inittemp_hi));
     $('#fridgemode').val(parseFloat(dataRecord.fridgemode));
     editsteps(dataRecord);
     // show the popup window.
     $('#popupWindow').jqxWindow('open');
    }
   }
  ]
 });
 // initialize the popup window and buttons.
 $('#popupWindow').jqxWindow({
  width: 1050,
  height: 550,
  position: { x: 110, y: 30 },
  resizable: false,
  theme: theme,
  isModal: true,
  autoOpen: false,
  cancelButton: $('#Cancel'),
  modalOpacity: 0.40
 });
 $('#popupWindow').on('open', function() {
  $('#name').jqxInput('selectAll');
 });
 $('#Delete').jqxButton({ template: 'danger', width: '90px', theme: theme });
 $('#Delete').click(function() {
  if (editrow >= 0) {
   // Open a popup to confirm this action.
   $('#eventWindow').jqxWindow('open');
   $('#delOk').click(function() {
    var rowID = $('#jqxgrid').jqxGrid('getrowid', editrow);
    $('#jqxgrid').jqxGrid('deleterow', rowID);
   });
  }
  $('#popupWindow').jqxWindow('hide');
 });
 $('#Cancel').jqxButton({ template: 'primary', width: '90px', theme: theme });
 $('#Clone').jqxButton({ template: 'warning', width: '90px', theme: theme });
 $('#Clone').click(function() {
  var steprows = $('#grid').jqxGrid('getrows');
  var row = {
   record: -1,
   name: $('#name').val() + ' kopie',
   inittemp_lo: parseFloat($('#inittemp_lo').jqxNumberInput('decimal')),
   inittemp_hi: parseFloat($('#inittemp_hi').jqxNumberInput('decimal')),
   fridgemode: $('#fridgemode').val(),
   steps: steprows
  };
  $('#jqxgrid').jqxGrid('addrow', null, row);
  $('#popupWindow').jqxWindow('hide');
 });
 $('#Save').jqxButton({ template: 'success', width: '90px', theme: theme });
 // update the edited row when the user clicks the 'Save' button.
 $('#Save').click(function() {
  var row, rowID = -1, steprows = $('#grid').jqxGrid('getrows');
  if (editrow >= 0) {
   rowID = $('#jqxgrid').jqxGrid('getrowid', editrow);
  }
  row = {
   record: rowID,
   uuid: dataRecord.uuid,
   name: $('#name').val(),
   inittemp_lo: parseFloat($('#inittemp_lo').jqxNumberInput('decimal')),
   inittemp_hi: parseFloat($('#inittemp_hi').jqxNumberInput('decimal')),
   fridgemode: $('#fridgemode').val(),
   steps: steprows
  };
  if (editrow >= 0) {
   $('#jqxgrid').jqxGrid('updaterow', rowID, row);
  } else {
   $('#jqxgrid').jqxGrid('addrow', null, row);
  }
  $('#popupWindow').jqxWindow('hide');
 });
 createDelElements();
});

mercurial