diff -r 509510586665 -r b702c25661e7 www/js/prod_edit.js --- a/www/js/prod_edit.js Fri Jun 18 21:26:28 2021 +0200 +++ b/www/js/prod_edit.js Sun Jun 27 10:15:09 2021 +0200 @@ -765,9 +765,6 @@ var editFermentable = function(data) { var fermentableSource = { localdata: data.fermentables, - datatype: 'local', - cache: false, - async: true, datafields: [ { name: 'f_name', type: 'string' }, { name: 'f_origin', type: 'string' }, @@ -944,10 +941,8 @@ { text: 'Gewicht Kg', datafield: 'f_amount', width: 120, align: 'right', cellsalign: 'right', cellsformat: 'f3' }, { text: 'Voorraad Kg', datafield: 'f_inventory', width: 120, align: 'right', cellsrenderer: function(row, columnfield, value, defaulthtml, columnproperties, rowdata) { - var color = '#ffffff'; + var color = (value < rowdata.f_amount) ? '#ff4040':'#ffffff'; if (block_fermentable(dataRecord.inventory_reduced, rowdata.f_added) == false) { - if (value < rowdata.f_amount) - color = '#ff4040'; return '' + fermentableAdapter.formatNumber(value, 'f3') + ''; } else { return ''; @@ -958,9 +953,7 @@ cellsrenderer: function(row, columnfield, value, defaulthtml, columnproperties, rowdata) { if (rowdata.f_added >= 4) return ''; - var color = '#ffffff'; - if (value > rowdata.f_max_in_batch) - color = '#ff4040'; + var color = (value > rowdata.f_max_in_batch) ? '#ff4040':'#ffffff'; return '' + fermentableAdapter.formatNumber(value, 'p1') + ''; } }, @@ -1006,9 +999,6 @@ var editHop = function(data) { var hopSource = { localdata: data.hops, - datatype: 'local', - cache: false, - async: true, datafields: [ { name: 'h_name', type: 'string' }, { name: 'h_origin', type: 'string' }, @@ -1170,10 +1160,8 @@ { text: 'Voorraad', datafield: 'h_inventory', width: 110, align: 'right', cellsrenderer: function(index, datafield, value, defaultvalue, column, rowdata) { if (block_hop(dataRecord.inventory_reduced, rowdata.h_useat) == false) { - var amount, color = '#ffffff'; - if (value < rowdata.h_amount) - color = '#ff4040'; - amount = dataAdapter.formatNumber(value, 'f1') + ' kg'; + var amount = dataAdapter.formatNumber(value, 'f1') + ' kg', + color = (value < rowdata.h_amount) ? '#ff4040':'#ffffff'; if (value < 1) amount = dataAdapter.formatNumber(value * 1000, 'f1') + ' gr'; return '' + amount + ''; @@ -1219,9 +1207,6 @@ var editMisc = function(data) { var miscSource = { localdata: data.miscs, - datatype: 'local', - cache: false, - async: false, datafields: [ { name: 'm_name', type: 'string' }, { name: 'm_amount', type: 'float' }, @@ -1402,12 +1387,9 @@ }, { text: 'Voorraad', datafield: 'm_inventory', width: 110, align: 'right', cellsrenderer: function(index, datafield, value, defaultvalue, column, rowdata) { - var vstr, color, amount; if (block_misc(dataRecord.inventory_reduced, rowdata.m_use_use) == false) { - vstr = rowdata.m_amount_is_weight ? 'gr' : 'ml'; - color = '#ffffff'; - if (value < rowdata.m_amount) - color = '#ff4040'; + var vstr = rowdata.m_amount_is_weight ? 'gr' : 'ml', + color = (value < rowdata.m_amount) ? '#ff4040':'#ffffff', amount = dataAdapter.formatNumber(value * 1000, 'f2') + ' ' + vstr; return '' + amount + ''; } else { @@ -1456,9 +1438,6 @@ var editYeast = function(data) { var yeastSource = { localdata: data.yeasts, - datatype: 'local', - cache: false, - async: false, datafields: [ { name: 'y_name', type: 'string' }, { name: 'y_laboratory', type: 'string' }, @@ -1598,11 +1577,9 @@ { text: 'Max. °C', width: 70, align: 'right', cellsalign: 'right', datafield: 'y_max_temperature' }, { text: 'Tol. %', width: 60, align: 'right', cellsalign: 'right', datafield: 'y_tolerance', cellsrenderer: function(index, datafield, value, defaultvalue, column, rowdata) { - var amount = '', color = '#ffffff'; + var amount = '', color = (dataRecord.est_abv > value) ? '#ff4040':'#ffffff'; if (value > 0) { amount = dataAdapter.formatNumber(value, 'f1'); - if (dataRecord.est_abv > value) - color = '#ff4040'; } return '' + amount + ''; } @@ -1683,9 +1660,6 @@ var editMash = function(data) { var mashSource = { localdata: data.mashs, - datatype: 'local', - cache: false, - async: false, datafields: [ { name: 'step_name', type: 'string' }, { name: 'step_type', type: 'int' }, @@ -1949,10 +1923,10 @@ function calcViability() { var vpm = 1.00; var max = 100; - var rowscount = $('#yeastGrid').jqxGrid('getdatainformation').rowscount; + var rowscount = dataRecord.yeasts.length; if (rowscount) { for (i = 0; i < rowscount; i++) { - row = $('#yeastGrid').jqxGrid('getrowdata', i); + row = dataRecord.yeasts[i]; if (row.y_use == 0) { if (row.y_form == 0) { // Liquid vpm = 0.80; @@ -2019,10 +1993,10 @@ function calcPercentages() { console.log('calcPercentages()'); - var tw = 0, rowdata, percentage, rowscount = $('#fermentableGrid').jqxGrid('getdatainformation').rowscount; + var tw = 0, rowdata, percentage, rowscount = dataRecord.fermentables.length; if (rowscount > 1) { for (i = 0; i < rowscount; i++) { - rowdata = $('#fermentableGrid').jqxGrid('getrowdata', i); + rowdata = dataRecord.fermentables[i]; if (rowdata.f_added < 4) tw += Round(rowdata.f_amount, 3); } @@ -2073,10 +2047,10 @@ ok_fermentables = 1; // All is in stock. ok_yeasts = 1; - if ((rows = $('#mashGrid').jqxGrid('getrows'))) { - for (i = 0; i < rows.length; i++) { - row = rows[i]; - if (row.step_type == 0) // Infusion + if (dataRecord.mashs.length) { + for (i = 0; i < dataRecord.mashs.length; i++) { + row = dataRecord.mashs[i]; + if (parseFloat(row.step_type) == 0) // Infusion mvol += parseFloat(row.step_infuse_amount); if (row.step_temp <= 75) { // Ignore mashout timem = row.step_time + row.ramp_time; @@ -2088,16 +2062,16 @@ mashtime -= 5; //Correct last ramp > 75 mashtemp = Round(mashtemp / mashtime, 2); } else { - console.log("calcFermentables() mashGrid not loaded"); + console.log("calcFermentables() no mash steps"); } - if (!(rows = $('#fermentableGrid').jqxGrid('getrows'))) { - console.log("calcFermentables() fermentableGrid not loaded"); + if (! dataRecord.fermentables.length) { + console.log("calcFermentables() no fermentables"); return; // grid not yet loaded. } - for (i = 0; i < rows.length; i++) { - row = rows[i]; + for (i = 0; i < dataRecord.fermentables.length; i++) { + row = dataRecord.fermentables[i]; if (row.f_adjust_to_total_100) my_100 = true; if (row.f_type == 1 && row.f_added < 4) // Sugar @@ -2256,9 +2230,8 @@ // Calculate estimated svg. svg = 0; // default. initcells = 0; - rows = $('#yeastGrid').jqxGrid('getrows'); - for (i = 0; i < rows.length; i++) { - row = rows[i]; + for (i = 0; i < dataRecord.yeasts.length; i++) { + row = dataRecord.yeasts[i]; if (row.y_use == 0) { // Primary if (parseFloat(row.y_attenuation) > svg) svg = parseFloat(row.y_attenuation); // Take the highest if multiple yeasts. @@ -2317,10 +2290,10 @@ var graintemp = 18.0; var tuntemp = 18.0; - if ((rows = $('#mashGrid').jqxGrid('getrows')) && (mashkg > 0)) { + if (dataRecord.mashs.length && (mashkg > 0)) { console.log('calcMash()'); - for (i = 0; i < rows.length; i++) { - row = $('#mashGrid').jqxGrid('getrowdata', i); + for (i = 0; i < dataRecord.mashs.length; i++) { + row = dataRecord.mashs[i]; if (row.step_type == 0) { // Infusion if (i == 0) { // First mash step, temperature from the mashtun and malt. @@ -2337,11 +2310,11 @@ tuntemp += (temp - tuntemp) / 2; row.step_infuse_temp = Round(temp, 6); } - console.log('init infuse temp: ' + row.step_infuse_temp); + //console.log('init infuse temp: ' + row.step_infuse_temp); } else { // Calculate amount of infusion water. row.step_infuse_amount = infusionVol(infused, mashkg, row.step_infuse_temp, row.step_temp, lasttemp); - //console.log('vol: ' + row.step_infuse_amount + ' temp: ' + row.step_infuse_temp); + console.log('vol: ' + row.step_infuse_amount + ' temp: ' + row.step_infuse_temp); } infused += row.step_infuse_amount; } else if (row.step_type == 1) { // Temperature @@ -2379,10 +2352,10 @@ console.log('calcFermentablesFromOG(' + OG + ')'); var amount, row, d, i, sug, tot = 0, totmass = 0, rowscount, efficiency = parseFloat($('#efficiency').jqxNumberInput('decimal')); sug = sg_to_plato(OG) * parseFloat($('#batch_size').jqxNumberInput('decimal')) * OG / 100; //total amount of sugars in kg - rowscount = $('#fermentableGrid').jqxGrid('getdatainformation').rowscount; + rowscount = dataRecord.fermentables.length; for (i = 0; i < rowscount; i++) { - row = $('#fermentableGrid').jqxGrid('getrowdata', i); + row = dataRecord.fermentables[i]; if (row.f_added < 4) { d = row.f_percentage / 100 * (row.f_yield / 100) * (1 - row.f_moisture / 100); if (row.f_added == 0) // Mash @@ -2395,9 +2368,10 @@ if (totmass) { for (i = 0; i < rowscount; i++) { - row = $('#fermentableGrid').jqxGrid('getrowdata', i); + row = dataRecord.fermentables[i]; if (row.f_added < 4) { amount = Math.round(row.f_percentage * 10 * totmass) / 1000; + dataRecord.fermentables[i].f_amount = amount; $('#fermentableGrid').jqxGrid('setcellvalue', i, 'f_amount', amount); } } @@ -2786,7 +2760,7 @@ if (!(rows = $('#yeastGrid').jqxGrid('getrows'))) { return; // grid not yet loaded. } - rowscount = $('#yeastGrid').jqxGrid('getdatainformation').rowscount; + rowscount = dataRecord.yeasts.length; if (rowscount == 0) return; // no yeast in recipe @@ -2796,7 +2770,7 @@ var maybe_starter = 0; var pitchrate = 0.75; // Yeast pitch rate default for (i = 0; i < rowscount; i++) { - row = $('#yeastGrid').jqxGrid('getrowdata', i); + row = dataRecord.yeasts[i]; if (row.y_use == 0) { // primary if (row.y_form == 1) { // Dry yeast @@ -2816,8 +2790,7 @@ $('#yeast_grams').val(yeast_grams); var yeast_gr_hl = Round(yeast_grams / (volume * 0.01), 2); $('#yeast_gr_hl').val(yeast_gr_hl); - console.log('need ' + yeast_grams + ' grams, gr/hl: ' + yeast_gr_hl); -// obj.initgram = Round(obj.volume * multiplier_yeast_needed * (100 / obj.yeastviability), 2); + //console.log('need ' + yeast_grams + ' grams, gr/hl: ' + yeast_gr_hl); } else { // Liquid yeast @@ -2849,7 +2822,7 @@ use_cells = initcells; if (needed <= initcells) maybe_starter = 0; - console.log('calcYeast() pitchrate:' + dataRecord.yeast_pitchrate + ' start:' + initcells + ' needed:' + needed + ' volume:' + volume + ' maybe_starter:' + maybe_starter); + //console.log('calcYeast() pitchrate:' + dataRecord.yeast_pitchrate + ' start:' + initcells + ' needed:' + needed + ' volume:' + volume + ' maybe_starter:' + maybe_starter); if (maybe_starter != dataRecord.starter_enable) { dataRecord.starter_enable = maybe_starter; @@ -2886,27 +2859,27 @@ function adjustHops(factor) { - console.log('adjustHops(' + factor + ')'); - var row, i, amount, rowscount = $('#hopGrid').jqxGrid('getdatainformation').rowscount; + //console.log('adjustHops(' + factor + ')'); + var row, i, amount, rowscount = dataRecord.hops.length; if (rowscount == 0) return; for (i = 0; i < rowscount; i++) { - row = $('#hopGrid').jqxGrid('getrowdata', i); + row = dataRecord.hops[i]; amount = row.h_amount * factor; + dataRecord.hops[i].h_amount = amount; $('#hopGrid').jqxGrid('setcellvalue', i, 'h_amount', amount); } }; function whirlpoolHops() { - var row, i, time, rowscount; - if (!(rowscount = $('#hopGrid').jqxGrid('getdatainformation').rowscount)) - return; + var row, i, time, rowscount = dataRecord.hops.length; if (rowscount == 0) return; for (i = 0; i < rowscount; i++) { - row = $('#hopGrid').jqxGrid('getrowdata', i); + row = dataRecord.hops[i]; if (row.h_useat == 4) { time = parseFloat(dataRecord.brew_whirlpool9) + parseFloat(dataRecord.brew_whirlpool7) + parseFloat(dataRecord.brew_whirlpool6); + dataRecord.hops[i].h_time = time; $('#hopGrid').jqxGrid('setcellvalue', i, 'h_time', time); } } @@ -2915,11 +2888,11 @@ function calcMiscs() { ok_miscs = 1; - var row, i, rowscount = $('#miscGrid').jqxGrid('getdatainformation').rowscount; + var row, i, rowscount = dataRecord.miscs.length; if (rowscount == 0) return; for (i = 0; i < rowscount; i++) { - row = $('#miscGrid').jqxGrid('getrowdata', i); + row = dataRecord.miscs[i]; if ((((dataRecord.inventory_reduced <= 2) && (row.m_use_use <= 2)) || // Starter, Mash, Boil ((dataRecord.inventory_reduced <= 3) && (row.m_use_use == 3)) || // Primary ((dataRecord.inventory_reduced <= 5) && (row.m_use_use == 4)) || // Secondary, Teriary @@ -2933,13 +2906,14 @@ function adjustMiscs(factor) { - console.log('adjustMiscs(' + factor + ')'); - var row, i, amount, rowscount = $('#miscGrid').jqxGrid('getdatainformation').rowscount; + //console.log('adjustMiscs(' + factor + ')'); + var row, i, amount, rowscount = dataRecord.miscs.length; if (rowscount == 0) return; for (i = 0; i < rowscount; i++) { - row = $('#miscGrid').jqxGrid('getrowdata', i); + row = dataRecord.miscs[i]; amount = row.m_amount * factor; + dataRecord.miscs[i].m_amount = amount; $('#miscGrid').jqxGrid('setcellvalue', i, 'm_amount', amount); switch (row.m_name) { case 'CaCl2': @@ -2972,14 +2946,15 @@ function adjustYeasts(factor) { - console.log('adjustYeasts(' + factor + ')'); - var row, i, amount, rowscount = $('#yeastGrid').jqxGrid('getdatainformation').rowscount; + //console.log('adjustYeasts(' + factor + ')'); + var row, i, amount, rowscount = dataRecord.yeasts.length; if (rowscount == 0) return; for (i = 0; i < rowscount; i++) { - row = $('#yeastGrid').jqxGrid('getrowdata', i); + row = dataRecord.yeasts[i]; if (! dataRecord.starter_enable) { // Only adjust without a starter amount = row.y_amount * factor; + dataRecord.yeasts[i].y_amount = amount; $('#yeastGrid').jqxGrid('setcellvalue', i, 'y_amount', amount); } } @@ -2988,15 +2963,16 @@ function adjustWaters(factor) { - console.log('adjustWaters(' + factor + ')'); - var amount, row, i, rowscount = $('#mashGrid').jqxGrid('getdatainformation').rowscount; + //console.log('adjustWaters(' + factor + ')'); + var amount, row, i, rowscount = dataRecord.mashs.length; if (rowscount == 0) return; mash_infuse = 0; for (i = 0; i < rowscount; i++) { - row = $('#mashGrid').jqxGrid('getrowdata', i); + row = dataRecord.mashs[i]; if (row.step_type == 0) { // Infusion amount = Round(parseFloat(row.step_infuse_amount) * factor, 1); + dataRecord.mashs[i].step_infuse_amount = amount; $('#mashGrid').jqxGrid('setcellvalue', i, 'step_infuse_amount', amount); mash_infuse += amount; } @@ -3028,12 +3004,13 @@ }; function calcEfficiencyBeforeBoil() { - var m = 0, rows = {}, i, row, tot, result = 0; - if (!(rows = $('#fermentableGrid').jqxGrid('getrows'))) { - return; // grid not yet loaded. - } - for (i = 0; i < rows.length; i++) { - row = rows[i]; + var m = 0, i, row, tot, result = 0; + if (!($('#fermentableGrid').jqxGrid('getrows'))) + return; // no grid loaded yet + if (dataRecord.fermentables.length == 0) + return; // no fermentables + for (i = 0; i < dataRecord.fermentables.length; i++) { + row = dataRecord.fermentables[i]; if (row.f_added == 0) { // Mash m += row.f_amount * (row.f_yield / 100) * (1 - row.f_moisture / 100); } @@ -3049,12 +3026,12 @@ function calcEfficiencyAfterBoil() { var m = 0, // Sugars added at mash b = 0, // Sugars added at boil - rows = {}, i, row, tot, result = 0; - if (!(rows = $('#fermentableGrid').jqxGrid('getrows'))) { + i, row, tot, result = 0; + if (!($('#fermentableGrid').jqxGrid('getrows'))) { return; // grid not yet loaded. } - for (i = 0; i < rows.length; i++) { - row = rows[i]; + for (i = 0; i < dataRecord.fermentables.length; i++) { + row = dataRecord.fermentables[i]; if (row.f_added == 0) { // Mash m += row.f_amount * (row.f_yield / 100) * (1 - row.f_moisture / 100); } else if (row.f_added == 1) { // Boil @@ -3206,11 +3183,11 @@ function ProtonDeficit(pHZ) { - var rows, i, C1, x, Result = ZRA(pHZ) * parseFloat($('#wg_amount').jqxNumberInput('decimal')); + var i, C1, x, Result = ZRA(pHZ) * parseFloat($('#wg_amount').jqxNumberInput('decimal')); // proton deficit for the grist - if ((rows = $('#fermentableGrid').jqxGrid('getrows'))) { - for (i = 0; i < rows.length; i++) { - row = rows[i]; + if (( $('#fermentableGrid').jqxGrid('getrows'))) { + for (i = 0; i < dataRecord.fermentables.length; i++) { + row = dataRecord.fermentables[i]; if (row.f_added == 0 && row.f_graintype != 6) { // Added == Mash && graintype != No Malt C1 = BufferCapacity(row.f_di_ph, row.f_acid_to_ph_57, row.f_color, row.f_graintype); x = C1 * (pHZ - row.f_di_ph); // AcidRequired(ZpH)