Fri, 13 Dec 2019 20:33:38 +0100
Added ispindel logging. Updated the documentation.
/***************************************************************************** * 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() { function calcTotal() { $('#totval').val(dataRecord.cost * dataRecord.inventory); if (dataRecord.form == 'Vloeibaar') { // Liquid $('#pmpt_cost').html('Prijs per pak:'); $('#pmpt_inventory').html('Voorraad pak(ken):'); $('#pmpt_cells').html('Miljard cellen per pak:'); $('#inventory').jqxNumberInput({ decimalDigits: 0 }); } else if (dataRecord.form == 'Droog' || dataRecord.form == 'Gedroogd') { // Dry $('#pmpt_cost').html('Prijs per kg:'); $('#pmpt_inventory').html('Voorraad gram:'); $('#pmpt_cells').html('Miljard cellen per gram:'); $('#inventory').jqxNumberInput({ decimalDigits: 1 }); } else { $('#pmpt_cost').html('Prijs per liter:'); $('#pmpt_inventory').html('Voorraad ml:'); $('#pmpt_cells').html('Miljard cellen per ml:'); $('#inventory').jqxNumberInput({ decimalDigits: 1 }); } } var dataRecord = {}, url = 'includes/db_inventory_yeasts.php', source = { datatype: 'json', cache: false, datafields: [ { name: 'record', type: 'number' }, { name: 'name', type: 'string' }, { name: 'type', type: 'string' }, { name: 'form', type: 'string' }, { name: 'laboratory', type: 'string' }, { name: 'product_id', type: 'string' }, { name: 'min_temperature', type: 'float' }, { name: 'max_temperature', type: 'float' }, { name: 'flocculation', type: 'int' }, { name: 'attenuation', type: 'float' }, { name: 'notes', type: 'string' }, { name: 'best_for', type: 'string' }, { name: 'max_reuse', type: 'int' }, { name: 'inventory', type: 'float' }, { name: 'cost', type: 'float' }, { name: 'production_date', type: 'string' }, { name: 'tht_date', type: 'string' }, { name: 'cells', type: 'float' }, { name: 'tolerance', type: 'float' }, { name: 'sta1', type: 'int' }, { name: 'bacteria', type: 'int' }, { name: 'harvest_top', type: 'int' }, { name: 'harvest_time', type: 'int' }, { name: 'pitch_temperature', type: 'float' }, { name: 'pofpos', type: 'int' }, { name: 'zymocide', type: 'int' } ], id: 'record', url: url, deleterow: function(rowid, commit) { // synchronize with the server - send delete command 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; // initialize the input fields. $('#name').jqxInput({ theme: theme, width: 640, height: 23 }); $('#laboratory').jqxInput({ theme: theme, width: 320, height: 23 }); $('#product_id').jqxInput({ theme: theme, width: 320, height: 23 }); $('#type').jqxDropDownList({ theme: theme, source: YeastTypeAdapter, valueMember: 'nl', displayMember: 'nl', width: 180, height: 23, autoDropDownHeight: true }); $('#form').jqxDropDownList({ theme: theme, source: YeastFormAdapter, valueMember: 'nl', displayMember: 'nl', width: 180, height: 23, autoDropDownHeight: true }); $('#notes').jqxInput({ theme: theme, width: 800, height: 120 }); $('#best_for').jqxInput({ theme: theme, width: 320, height: 100 }); $('#inventory').jqxNumberInput(Spin1dec); $('#production_date').jqxDateTimeInput(Dateopts); $('#min_temperature').jqxNumberInput(YeastT); $('#max_temperature').jqxNumberInput(YeastT); $('#flocculation').jqxDropDownList({ theme: theme, source: FlocculationAdapter, valueMember: 'id', displayMember: 'nl', width: 180, height: 23, autoDropDownHeight: true }); $('#attenuation').jqxNumberInput(Perc1dec); $('#max_reuse').jqxNumberInput(PosInt); $('#max_reuse').jqxNumberInput({ max: 10 }); $('#cost').jqxNumberInput(Spin2dec); $('#tht_date').jqxDateTimeInput(Dateopts); $('#totval').jqxNumberInput(Show2dec); $('#cells').jqxNumberInput(Spin1dec); $('#tolerance').jqxNumberInput(Perc1dec); $('#tolerance').jqxNumberInput({ max: 25 }); $('#sta1').jqxCheckBox({ theme: theme, width: 120, height: 23 }); $('#sta1').on('checked', function(event) { dataRecord.sta1 = 1; }); $('#sta1').on('unchecked', function(event) { dataRecord.sta1 = 0; }); $('#bacteria').jqxCheckBox({ theme: theme, width: 120, height: 23 }); $('#bacteria').on('checked', function(event) { dataRecord.bacteria = 1; }); $('#bacteria').on('unchecked', function(event) { dataRecord.bacteria = 0; }); $('#harvest_top').jqxCheckBox({ theme: theme, width: 120, height: 23 }); $('#harvest_top').on('checked', function(event) { dataRecord.harvest_top = 1; }); $('#harvest_top').on('unchecked', function(event) { dataRecord.harvest_top = 0; }); $('#harvest_time').jqxNumberInput(PosInt); $('#pitch_temperature').jqxNumberInput(YeastT); $('#pofpos').jqxCheckBox({ theme: theme, width: 120, height: 23 }); $('#pofpos').on('checked', function(event) { dataRecord.pofpos = 1; }); $('#pofpos').on('unchecked', function(event) { dataRecord.pofpos = 0; }); $('#zymocide').jqxDropDownList({ theme: theme, source: ZymocideAdapter, valueMember: 'id', displayMember: 'nl', width: 80, height: 23, autoDropDownHeight: true }); // initialize jqxGrid $('#jqxgrid').jqxGrid({ width: 1280, height: 630, source: dataAdapter, theme: theme, showstatusbar: true, renderstatusbar: function(statusbar) { var container, addButton, impButton; 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;">Nieuw</span></div>'); impButton = $('<div style="float: right; margin-right: 50px;"><img style="position: relative; margin-top: 2px;" ' + 'src="images/add.png"/><span style="margin-left: 4px; position: relative; top: -3px;">Import</span></div>'); expButton = $('<div style="float: right; margin-right: 50px;"><img style="position: relative; margin-top: 2px;" ' + 'src="images/database.png"/><span style="margin-left: 4px; position: relative; top: -3px;">Export</span></div>'); container.append(addButton); container.append(impButton); container.append(expButton); statusbar.append(container); addButton.jqxButton({ theme: theme, width: 90, height: 20 }); impButton.jqxButton({ theme: theme, width: 90, height: 20 }); expButton.jqxButton({ theme: theme, width: 90, height: 20 }); // add new row. addButton.click(function(event) { editrow = -1; $('#popupWindow').jqxWindow({ position: { x: 110, y: 30 } }); $('#name').val(''); $('#laboratory').val(''); $('#product_id').val(''); $('#type').val('Bovengist'); $('#form').val('Vloeibaar'); $('#min_temperature').val(18); $('#max_temperature').val(22); $('#flocculation').val(0); $('#attenuation').val(77); $('#notes').val(''); $('#best_for').val(''); $('#max_reuse').val(10); $('#inventory').val(0); $('#cost').val(0); $('#production_date').val(''); $('#tht_date').val(''); $('#cells').val(1); $('#tolerance').val(0); $('#sta1').val(0); $('#bacteria').val(0); $('#harvest_top').val(0); $('#harvest_time').val(0); $('#pitch_temperature').val(0); $('#pofpos').val(0); $('#zymocide').val(0); $('#popupWindow').jqxWindow('open'); }); impButton.click(function(event) { window.location.href = 'import_ingredients.php?select=yeasts'; }); expButton.click(function(event) { window.open('export_yeasts.php'); }); }, filterable: true, filtermode: 'excel', columns: [ { text: 'Laboratorium', datafield: 'laboratory', width: 150 }, { text: 'Product ID', datafield: 'product_id', width: 120, menu: false }, { text: 'Gist naam', datafield: 'name', menu: false }, { text: 'Type', datafield: 'type', align: 'center', cellsalign: 'center', width: 110 }, { text: 'Vorm', datafield: 'form', align: 'center', cellsalign: 'center', width: 110 }, { text: 'SVG', datafield: 'attenuation', width: 70, align: 'right', cellsalign: 'right', menu: false, cellsformat: 'p1' }, { text: 'Tol%', datafield: 'tolerance', width: 60, align: 'right', cellsalign: 'right', menu: false, cellsrenderer: function(index, datafield, value, defaultvalue, column, rowdata) { var amount = ''; if (value > 0) amount = dataAdapter.formatNumber(value, 'p0'); return '<span style="margin: 4px; margin-top: 6px; float: right;">' + amount + '</span>'; } }, { text: 'Voorraad', datafield: 'inventory', width: 100, align: 'right', menu: false, cellsrenderer: function(index, datafield, value, defaultvalue, column, rowdata) { var amount = ''; if (value > 0) { if ((rowdata.form == 'Vloeibaar') && (value > 1)) amount = dataAdapter.formatNumber(value, 'f0') + ' pakken'; else if (rowdata.form == 'Vloeibaar') amount = dataAdapter.formatNumber(value, 'f0') + ' pak'; else if (rowdata.form == 'Droog' || rowdata.form == 'Gedroogd') amount = dataAdapter.formatNumber(value * 1000, 'f1') + ' gram'; else amount = dataAdapter.formatNumber(value * 1000, 'f1') + ' ml'; } return '<span style="margin: 3px; margin-top: 6px; float: right;">' + amount + '</span>'; } }, { text: '', datafield: 'Edit', columntype: 'button', width: 100, align: 'center', menu: false, cellsrenderer: function() { return 'Wijzig'; }, buttonclick: function(row) { // open the popup window when the user clicks a button. editrow = row; $('#popupWindow').jqxWindow({ position: { x: 110, y: 15 } }); // get the clicked row's data and initialize the input fields. dataRecord = $('#jqxgrid').jqxGrid('getrowdata', editrow); $('#name').val(dataRecord.name); $('#laboratory').val(dataRecord.laboratory); $('#product_id').val(dataRecord.product_id); $('#type').val(dataRecord.type); $('#form').val(dataRecord.form); $('#min_temperature').val(parseFloat(dataRecord.min_temperature)); $('#max_temperature').val(parseFloat(dataRecord.max_temperature)); $('#flocculation').val(dataRecord.flocculation); $('#attenuation').val(dataRecord.attenuation); $('#notes').val(dataRecord.notes); $('#best_for').val(dataRecord.best_for); $('#max_reuse').val(dataRecord.max_reuse); if (dataRecord.form == 'Vloeibaar') $('#inventory').val(dataRecord.inventory); else $('#inventory').val(dataRecord.inventory * 1000); $('#cost').val(dataRecord.cost); $('#production_date').val(dataRecord.production_date); $('#tht_date').val(dataRecord.tht_date); $('#cells').val(dataRecord.cells); $('#tolerance').val(dataRecord.tolerance); $('#sta1').val(dataRecord.sta1); $('#bacteria').val(dataRecord.bacteria); $('#harvest_top').val(dataRecord.harvest_top); $('#harvest_time').val(dataRecord.harvest_time); $('#pitch_temperature').val(parseFloat(dataRecord.pitch_temperature)); $('#pofpos').val(dataRecord.pofpos); $('#zymocide').val(dataRecord.zymocide); calcTotal(); // show the popup window. $('#popupWindow').jqxWindow('open'); } } ] }); $('#popupWindow').on('open', function(event) { calcTotal(); }); $('#cost').on('change', function(event) { dataRecord.cost = parseFloat(event.args.value); calcTotal(); }); $('#inventory').on('change', function(event) { if (dataRecord.form == 'Vloeibaar') dataRecord.inventory = parseFloat(event.args.value); else dataRecord.inventory = parseFloat(event.args.value) / 1000.0; calcTotal(); }); $('#form').on('select', function(event) { dataRecord.form = $('#form').val(); calcTotal(); }); // initialize the popup window and buttons. $('#popupWindow').jqxWindow({ width: 1050, height: 625, 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 row = { record: -1, name: $('#name').val() + ' kopie', type: $('#type').val(), form: $('#form').val(), laboratory: $('#laboratory').val(), product_id: $('#product_id').val(), min_temperature: parseFloat($('#min_temperature').jqxNumberInput('decimal')), max_temperature: parseFloat($('#max_temperature').jqxNumberInput('decimal')), flocculation: $('#flocculation').val(), attenuation: parseFloat($('#attenuation').jqxNumberInput('decimal')), notes: $('#notes').val(), best_for: $('#best_for').val(), max_reuse: parseInt($('#max_reuse').jqxNumberInput('decimal')), inventory: 0, cost: parseFloat($('#cost').jqxNumberInput('decimal')), production_date: '', tht_date: '', cells: parseFloat($('#cells').jqxNumberInput('decimal')), tolerance: parseFloat($('#tolerance').jqxNumberInput('decimal')), sta1: $('#sta1').val(), bacteria: $('#bacteria').val(), harvest_top: $('#harvest_top').val(), harvest_time: $('#harvest_time').val(), pitch_temperature: parseFloat($('#pitch_temperature').jqxNumberInput('decimal')), pofpos: $('#pofpos').val(), zymocide: $('#zymocide').val() }; $('#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 n_inventory, row, rowID = -1; if (editrow >= 0) { rowID = $('#jqxgrid').jqxGrid('getrowid', editrow); } if (dataRecord.form == 'Vloeibaar') n_inventory = parseFloat($('#inventory').jqxNumberInput('decimal')); else n_inventory = parseFloat($('#inventory').jqxNumberInput('decimal')) / 1000.0; row = { record: rowID, name: $('#name').val(), type: $('#type').val(), form: $('#form').val(), laboratory: $('#laboratory').val(), product_id: $('#product_id').val(), min_temperature: parseFloat($('#min_temperature').jqxNumberInput('decimal')), max_temperature: parseFloat($('#max_temperature').jqxNumberInput('decimal')), flocculation: $('#flocculation').val(), attenuation: parseFloat($('#attenuation').jqxNumberInput('decimal')), notes: $('#notes').val(), best_for: $('#best_for').val(), max_reuse: parseInt($('#max_reuse').jqxNumberInput('decimal')), inventory: n_inventory, cost: parseFloat($('#cost').jqxNumberInput('decimal')), production_date: $('#production_date').val(), tht_date: $('#tht_date').val(), cells: parseFloat($('#cells').jqxNumberInput('decimal')), tolerance: parseFloat($('#tolerance').jqxNumberInput('decimal')), sta1: $('#sta1').val(), bacteria: $('#bacteria').val(), harvest_top: $('#harvest_top').val(), harvest_time: $('#harvest_time').val(), pitch_temperature: parseFloat($('#pitch_temperature').jqxNumberInput('decimal')), pofpos: $('#pofpos').val(), zymocide: $('#zymocide').val() }; if (editrow >= 0) { $('#jqxgrid').jqxGrid('updaterow', rowID, row); } else { $('#jqxgrid').jqxGrid('addrow', null, row); } $('#popupWindow').jqxWindow('hide'); }); createDelElements(); });