Sun, 11 Apr 2021 10:53:20 +0200
Bump to version 0.3.37
/***************************************************************************** * Copyright (C) 2019-2020 * * 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, status, xhr) { commit(true); 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, status, xhr) { commit(true); 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, status, xhr) { commit(true); 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. °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. °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 °C', datafield: 'inittemp_lo', width: 120, align: 'right', cellsalign: 'right', cellsformat: 'f1', filtertype: 'number' }, { text: 'Max. start °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(); });