Tue, 29 Oct 2019 10:44:08 +0100
Better way to show splitted batches. Added flameout calculations to the php scripts.
/***************************************************************************** * Copyright (C) 2014-2019 * * Michiel Broek <mbroek at mbse dot eu> * * This file is part of BrewCloud * * 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. * * BrewCloud 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 maisch profiel.' }); $('#notes').jqxTooltip({ content: 'De uitgebreide opmerkingen over dit maisch profiel.' }); var steprow = 0, stepData = {}, dataRecord = {}, url = 'includes/db_profile_mash.php', source = { datatype: 'json', cache: false, datafields: [ { name: 'record', type: 'number' }, { name: 'name', type: 'string' }, { name: 'notes', type: 'string' }, { 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); console.log('mash deleterow ' + rowid + ' success'); location.reload(true); }, error: function(jqXHR, textStatus, errorThrown) { commit(false); console.log('mash deleterow ' + textStatus); } }); }, 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); console.log('mash addrow ' + rowid + ' success'); location.reload(true); }, error: function(jqXHR, textStatus, errorThrown) { commit(false); console.log('mash addrow ' + textStatus); } }); }, 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); console.log('mash updaterow ' + rowid + ' success'); location.reload(true); }, error: function(jqXHR, textStatus, errorThrown) { commit(false); console.log('mash updaterow ' + textStatus); } }); } }, dataAdapter = new $.jqx.dataAdapter(source), editrow = -1, // Inline steps editor editsteps = function(data) { var generaterow = function() { var row = {}; row['step_name'] = 'Stap 1'; row['step_type'] = 0; row['step_temp'] = 62.0; row['step_time'] = 20.0; row['ramp_time'] = 1.0; row['end_temp'] = 62.0; return row; }; var stepSource = { localdata: data.steps, datatype: 'local', datafields: [ { name: 'step_name', type: 'string' }, { name: 'step_type', type: 'int' }, { name: 'step_temp', type: 'float' }, { name: 'step_time', type: 'float' }, { name: 'ramp_time', type: 'float' }, { name: 'end_temp', type: 'float' } ], addrow: function(rowid, rowdata, position, commit) { commit(true); }, deleterow: function(rowid, commit) { commit(true); } }, stepAdapter = new $.jqx.dataAdapter(stepSource); $('#grid').jqxGrid({ width: 1020, height: 330, source: stepAdapter, theme: theme, selectionmode: 'singlerow', 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: 450px;" 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 rowscount, id, selectedrowindex = $('#grid').jqxGrid('getselectedrowindex'); rowscount = $('#grid').jqxGrid('getdatainformation').rowscount; if (selectedrowindex >= 0 && selectedrowindex < rowscount) { id = $('#grid').jqxGrid('getrowid', selectedrowindex); $('#grid').jqxGrid('deleterow', id); } }); }, columns: [ { text: 'Stap naam', datafield: 'step_name' }, { text: 'Stap type', datafield: 'step_type', width: 150, cellsrenderer: function(index, datafield, value, defaultvalue, column, rowdata) { return '<div style="margin: 4px;">' + MashStepTypeData[value].nl + '</div>'; } }, { text: 'Begin °C', datafield: 'step_temp', width: 100, align: 'right', cellsalign: 'right', cellsformat: 'f1' }, { text: 'Eind °C', datafield: 'end_temp', width: 100, align: 'right', cellsalign: 'right', cellsformat: 'f1' }, { text: 'Rust min.', datafield: 'step_time', width: 90, align: 'right', cellsalign: 'right' }, { text: 'Stap min.', datafield: 'ramp_time', width: 90, align: 'right', cellsalign: 'right' }, { text: '', datafield: 'Edit', columntype: 'button', width: 100, align: 'center', cellsrenderer: function() { return 'Wijzig'; }, buttonclick: function(row) { steprow = row; stepData = $('#grid').jqxGrid('getrowdata', steprow); $('#m_step_name').val(stepData.step_name); $('#m_step_type').val(stepData.step_type); $('#m_step_temp').val(stepData.step_temp); $('#m_end_temp').val(stepData.end_temp); $('#m_step_time').val(stepData.step_time); $('#m_ramp_time').val(stepData.ramp_time); // show the popup window. $('#popupStep').jqxWindow('open'); } } ] }); }; // Initialize the input fields. $('#m_step_name').jqxInput({ theme: theme, width: 320, height: 23 }); $('#m_step_type').jqxDropDownList({ theme: theme, source: MashStepTypeAdapter, valueMember: 'id', displayMember: 'nl', width: 180, height: 23, autoDropDownHeight: true }); $('#m_step_temp').jqxNumberInput(Spin1dec); $('#m_step_temp').jqxNumberInput({ Min: 30, Max: 80 }); $('#m_end_temp').jqxNumberInput(Spin1dec); $('#m_end_temp').jqxNumberInput({ Min: 30, Max: 80 }); $('#m_step_time').jqxNumberInput(PosInt); $('#m_step_time').jqxNumberInput({ Min: 1, Max: 120 }); $('#m_ramp_time').jqxNumberInput(PosInt); $('#m_ramp_time').jqxNumberInput({ Min: 1, Max: 30 }); // initialize the input fields. $('#name').jqxInput({ theme: theme, width: 480, height: 23 }); $('#notes').jqxInput({ theme: theme, width: 800, height: 100 }); // initialize jqxGrid $('#jqxgrid').jqxGrid({ width: 1280, height: 630, source: dataAdapter, theme: theme, showstatusbar: true, renderstatusbar: function(statusbar) { var addButton, container = $('<div style="overflow: hidden; position: relative; margin: 5px;"></div>'); 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: -3px;">Add</span></div>'); container.append(addButton); statusbar.append(container); addButton.jqxButton({ theme: theme, width: 90, height: 20 }); // add new row. addButton.click(function(event) { editrow = -1; $('#name').val('Nieuw maisch schema'); $('#notes').val(''); editsteps(''); $('#popupWindow').jqxWindow('open'); }); }, filterable: true, filtermode: 'excel', columns: [ { text: 'Maish schema', datafield: 'name', width: 250 }, { text: 'Opmerkingen', datafield: 'notes' }, { text: '', datafield: 'Edit', width: 100, align: 'center', columntype: 'button', 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); $('#notes').val(dataRecord.notes); editsteps(dataRecord); // show the popup window. $('#popupWindow').jqxWindow('open'); } } ] }); // initialize the popup window and buttons. $('#popupWindow').jqxWindow({ width: 1050, height: 580, 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'); }); $('#popupStep').jqxWindow({ width: 800, height: 300, position: { x: 230, y: 100 }, resizable: false, theme: theme, isModal: true, autoOpen: false, cancelButton: $('#Ready'), modalOpacity: 0.40 }); // step detail popup update values. $('#Ready').jqxButton({ template: 'success', width: '90px', theme: theme }); $('#Ready').click(function() { $('#grid').jqxGrid('setcellvalue', steprow, 'step_name', $('#m_step_name').val()); $('#grid').jqxGrid('setcellvalue', steprow, 'step_type', $('#m_step_type').val()); $('#grid').jqxGrid('setcellvalue', steprow, 'step_temp', $('#m_step_temp').val()); $('#grid').jqxGrid('setcellvalue', steprow, 'end_temp', $('#m_end_temp').val()); $('#grid').jqxGrid('setcellvalue', steprow, 'step_time', $('#m_step_time').val()); $('#grid').jqxGrid('setcellvalue', steprow, 'ramp_time', $('#m_ramp_time').val()); $('#grid').jqxGrid('sortby', 'step_temp', 'asc'); }); // mash profile popup. $('#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 }); $('#Save').jqxButton({ template: 'success', width: '90px', theme: theme }); $('#Save').click(function() { var steprows = $('#grid').jqxGrid('getrows'), rowID = -1, row; if (editrow >= 0) { rowID = $('#jqxgrid').jqxGrid('getrowid', editrow); } row = { record: rowID, name: $('#name').val(), notes: $('#notes').val(), steps: steprows }; if (editrow >= 0) { $('#jqxgrid').jqxGrid('updaterow', rowID, row); } else { $('#jqxgrid').jqxGrid('addrow', null, row); } $('#popupWindow').jqxWindow('hide'); }); createDelElements(); });