www/js/prod_edit.js

changeset 153
15fe253ffa83
parent 152
2e4249add363
child 159
6428dae0605d
equal deleted inserted replaced
152:2e4249add363 153:15fe253ffa83
150 var x = (row.f_yield / 100) * (1 - row.f_moisture / 100); 150 var x = (row.f_yield / 100) * (1 - row.f_moisture / 100);
151 vol += row.f_amount / (x * sugardensity + (1 - x) * 1); 151 vol += row.f_amount / (x * sugardensity + (1 - x) * 1);
152 sug2 += row.f_amount * x; 152 sug2 += row.f_amount * x;
153 } 153 }
154 } 154 }
155 // if FEquipment <> NIL then /* Use this for prod_edit.js 155 sug = sg_to_plato(OG) * OG / 100; // kg/l
156 // begin 156 vol1 = dataRecord.batch_size - dataRecord.eq_trub_chiller_loss;
157 // sug:= SGToPlato(OG) * OG / 100; //kg/l 157 vol2 = vol1 + dataRecord.eq_top_up_water + vol;
158 // vol1:= FBatchSize.Value - FEquipment.TrubChillerLoss.Value; 158 sug = sug * vol2; // kg in het gistvat
159 // vol2:= vol1 + FEquipment.TopUpWater.Value + vol; 159 sug = sug - sug2; // kg voor toevoeging in gistvat
160 // sug:= sug * vol2; //kg in het gistvat 160 if (vol1 > 0)
161 // sug:= sug - sug2; //kg voor toevoeging in gistvat 161 sug = sug * dataRecord.batch_size / vol1; //kg in kookketel
162 // if vol1 > 0 then 162 sug = sug + sug2;
163 // sug:= sug * FBatchSize.Value / vol1; //kg in kookketel 163 // sug = sg_to_plato(OG) * parseFloat($("#batch_size").jqxNumberInput('decimal')) * OG / 100; //total amount of sugars in kg
164 // sug:= sug + sug2;
165 // end
166 // else
167 sug = sg_to_plato(OG) * parseFloat($("#batch_size").jqxNumberInput('decimal')) * OG / 100; //total amount of sugars in kg
168 164
169 tot = 0; 165 tot = 0;
170 d = 0; 166 d = 0;
171 for (i = 0; i < rows.length; i++) { 167 for (i = 0; i < rows.length; i++) {
172 row = rows[i]; 168 row = rows[i];
307 $("#brew_mash_efficiency").val(100 * m / c); 303 $("#brew_mash_efficiency").val(100 * m / c);
308 else 304 else
309 $("#brew_mash_efficiency").val(0); 305 $("#brew_mash_efficiency").val(0);
310 }; 306 };
311 307
308 function setWaterAgent(name, amount) {
309 console.log("setWaterAgent(" + name + ", " + amount + ")");
310 var rows = $('#miscGrid').jqxGrid('getrows');
311 if (amount == 0) {
312 for (var i = 0; i < rows.length; i++) {
313 var row = rows[i];
314 if (row.m_name == name) {
315 var id = $("#miscGrid").jqxGrid('getrowid', i);
316 // console.log("name found, erase "+ id);
317 var commit = $("#miscGrid").jqxGrid('deleterow', id);
318 // console.log("result: "+commit);
319 }
320 }
321 } else {
322 var found = false;
323 for (var i = 0; i < rows.length; i++) {
324 var row = rows[i];
325 if (row.m_name == name) {
326 found = true;
327 $("#miscGrid").jqxGrid('setcellvalue', i, 'm_weight', amount);
328 $("#miscGrid").jqxGrid('setcellvalue', i, 'm_amount', amount / 1000);
329 break;
330 }
331 }
332 console.log("set something, found: "+found);
333 if (! found) {
334 var miscs = new $.jqx.dataAdapter(miscInvSource, {
335 loadComplete: function () {
336 var records = miscs.records;
337 for (var i = 0; i < records.length; i++) {
338 var record = records[i];
339 if (record.name == name) {
340 var row = {};
341 row["m_name"] = record.name;
342 row["m_amount"] = amount / 1000;
343 row["m_cost"] = record.cost;
344 row["m_type"] = record.type;
345 row["m_use_use"] = record.use_use;
346 row["m_time"] = 0;
347 row["m_weight"] = amount;
348 row["m_amount_is_weight"] = record.amount_is_weight;
349 var commit = $("#miscGrid").jqxGrid('addrow', null, row);
350 }
351 }
352 }
353 });
354 miscs.dataBind();
355 return;
356 }
357 }
358 }
359
360 function setRangeIndicator(ion, rangeCode) {
361 $("#wr_" + ion).html("<img src='images/checkmark_range_" + rangeCode + ".gif'><span style='font-size: 10px; font-style: italic;'>" + rangeCode + "</span>");
362 }
363
364 function mix(v1, v2, c1, c2) {
365 if ((v1 + v2) > 0) {
366 return ((v1 * c1) + (v2 * c2)) / (v1 + v2);
367 }
368 return 0;
369 }
370
371 // pH calculations
372
373 function calcWater() {
374
375 console.log("calcWater()");
376 var liters = 0;
377 var calcium = 0;
378 var magnesium = 0;
379 var sodium = 0;
380 var total_alkalinity = 0;
381 var chloride = 0;
382 var sulfate = 0;
383 var ph = 0;
384 var RA = 0;
385 var acid = 0;
386 var frac = 0;
387 var MolWt = 0;
388 var pK1 = 0;
389 var pK2 = 0;
390 var pK3 = 0;
391 var TpH = 0;
392 var AcidSG = 0;
393 var AcidPrc = 0;
394 var protonDeficit = 0;
395
396 if (dataRecord.w1_name != "") {
397 if (dataRecord.w2_name != "") {
398 liters = dataRecord.w1_amount + dataRecord.w2_amount;
399 calcium = mix(dataRecord.w1_amount, dataRecord.w2_amount, dataRecord.w1_calcium, dataRecord.w2_calcium);
400 magnesium = mix(dataRecord.w1_amount, dataRecord.w2_amount, dataRecord.w1_magnesium, dataRecord.w2_magnesium);
401 sodium = mix(dataRecord.w1_amount, dataRecord.w2_amount, dataRecord.w1_sodium, dataRecord.w2_sodium);
402 chloride = mix(dataRecord.w1_amount, dataRecord.w2_amount, dataRecord.w1_chloride, dataRecord.w2_chloride);
403 sulfate = mix(dataRecord.w1_amount, dataRecord.w2_amount, dataRecord.w1_sulfate, dataRecord.w2_sulfate);
404 total_alkalinity = mix(dataRecord.w1_amount, dataRecord.w2_amount, dataRecord.w1_total_alkalinity, dataRecord.w2_total_alkalinity);
405 ph = -Math.log10(((Math.pow(10, -dataRecord.w1_ph) * dataRecord.w1_amount) + (Math.pow(10, -dataRecord.w2_ph) * dataRecord.w2_amount)) / liters);
406 } else {
407 liters = dataRecord.w1_amount;
408 calcium = dataRecord.w1_calcium;
409 magnesium = dataRecord.w1_magnesium;
410 sodium = dataRecord.w1_sodium;
411 chloride = dataRecord.w1_chloride;
412 sulfate = dataRecord.w1_sulfate;
413 total_alkalinity = dataRecord.w1_total_alkalinity;
414 ph = dataRecord.w1_ph;
415 }
416 }
417 $('#wg_amount').val(liters);
418 $('#wg_calcium').val(Math.round(calcium * 10) / 10);
419 $('#wg_magnesium').val(Math.round(magnesium * 10) / 10);
420 $('#wg_sodium').val(Math.round(sodium * 10) / 10);
421 $('#wg_total_alkalinity').val(Math.round(total_alkalinity * 10) / 10);
422 $('#wg_chloride').val(Math.round(chloride * 10) / 10);
423 $('#wg_sulfate').val(Math.round(sulfate * 10) / 10);
424 // Note: brouwhulp has the malts included here in the result.
425 $('#wg_ph').val(Math.round(ph * 10) / 10);
426
427 // Noot: de volgende berekeningen geven bijna gelijke resultaten in Brun'water.
428 // Calculate Ca
429 RA = parseFloat($("#wa_cacl2").jqxNumberInput('decimal')) * MMCa / MMCaCl2 +
430 parseFloat($("#wa_caso4").jqxNumberInput('decimal')) * MMCa / MMCaSO4;
431 calcium += 1000 * RA / parseFloat($("#wg_amount").jqxNumberInput('decimal'));
432
433 // Calculate Mg
434 RA = parseFloat($("#wa_mgso4").jqxNumberInput('decimal')) * MMMg / MMMgSO4;
435 magnesium += 1000 * RA / parseFloat($("#wg_amount").jqxNumberInput('decimal'));
436
437 // Calculate Na
438 RA = parseFloat($("#wa_nacl").jqxNumberInput('decimal')) * MMNa / MMNaCl +
439 parseFloat($("#wa_base").jqxNumberInput('decimal')) * MMNa / MMNaHCO3;
440 sodium += 1000 * RA / parseFloat($("#wg_amount").jqxNumberInput('decimal'));
441
442 // Calculate SO4
443 RA = parseFloat($("#wa_caso4").jqxNumberInput('decimal')) * MMSO4 / MMCaSO4 +
444 parseFloat($("#wa_mgso4").jqxNumberInput('decimal')) * MMSO4 / MMMgSO4;
445 sulfate += 1000 * RA / parseFloat($("#wg_amount").jqxNumberInput('decimal'));
446
447 // Calculate Cl
448 RA = 2 * parseFloat($("#wa_cacl2").jqxNumberInput('decimal')) * MMCl / MMCaCl2 +
449 parseFloat($("#wa_nacl").jqxNumberInput('decimal')) * MMCl / MMNaCl;
450 chloride += 1000 * RA / parseFloat($("#wg_amount").jqxNumberInput('decimal'));
451 // Einde noot.
452
453 TpH = parseFloat(dataRecord.mash_ph);
454 if (TpH < 5.0 || TpH > 6.0) {
455 TpH = 5.4;
456 dataRecord.mash_ph = 5.4;
457 $("#mash_ph").val(5.4);
458 $("#tgt_mash_ph").val(5.4);
459 }
460 var acid_amount = parseFloat($("#wa_acid").jqxNumberInput('decimal'));
461 var acid_perc = parseFloat($("#wa_acid_perc").jqxNumberInput('decimal'));
462
463 switch ($("#wa_acid_name").val()) {
464 case 'Melkzuur': pK1 = 3.08;
465 pK2 = 20;
466 pK3 = 20;
467 MolWt = 90.08;
468 AcidSG = 1214; //@88%
469 AcidPrc = 0.88;
470 //frac = CalcFrac(TpH, pK1, pK2, pK3);
471 acid += acid_amount * acid_perc / 100 * AcidSG / MolWt * frac / liters; //mEq/l
472 break;
473
474 case 'Zoutzuur': pK1 = -10;
475 pK2 = 20;
476 pK3 = 20;
477 MolWt = 36.46;
478 AcidSG = 1142; //@28%
479 AcidPrc = 0.28;
480 //frac = CalcFrac(TpH, pK1, pK2, pK3);
481 Acidmg = acid_amount * acid_perc / 100 * AcidSG / liters;
482 acid += Acidmg / MolWt * frac; //mEq/l
483 chloride += Acidmg / 1000 * MMCl / (MMCl + 1);
484 break;
485
486 case 'Fosforzuur': pK1 = 2.12;
487 pK2 = 7.20;
488 pK3 = 12.44;
489 MolWt = 98.00;
490 AcidSG = 1170; //@25%
491 AcidPrc = 0.25;
492 //frac = CalcFrac(TpH, pK1, pK2, pK3);
493 Acidmg = acid_amount * acid_perc / 100 * AcidSG / liters;
494 acid += Acidmg / MolWt * frac; //mEq/l
495 break;
496
497 case 'Zwavelzuur': pK1 = -10;
498 pK2 = 1.92;
499 pK3 = 20;
500 MolWt = 98.07;
501 AcidSG = 1700; //@93%
502 AcidPrc = 0.93;
503 //frac = CalcFrac(TpH, pK1, pK2, pK3);
504 Acidmg = acid_amount * acid_perc / 100 * AcidSG / liters;
505 acid += Acidmg / MolWt * frac; //mEq/l
506 sulfate += Acidmg / 1000 * MMSO4 / (MMSO4 + 2);
507 break;
508 }
509 //protonDeficit = ProtonDeficit(TpH);
510 //console.log("frac: "+frac+" acid: "+acid+" protonDeficit: "+protonDeficit);
511 //total_alkalinity -= 50 / 61 * protonDeficit * frac / liters;
512
513 $('#wb_calcium').val(Math.round(calcium * 10) / 10);
514 $('#wb_magnesium').val(Math.round(magnesium * 10) / 10);
515 $('#wb_sodium').val(Math.round(sodium * 10) / 10);
516 $('#wb_sulfate').val(Math.round(sulfate * 10) / 10);
517 $('#wb_chloride').val(Math.round(chloride * 10) / 10);
518 $('#wb_total_alkalinity').val(Math.round(total_alkalinity * 10) / 10);
519
520 if (calcium < 40) {
521 setRangeIndicator("calcium", "low");
522 } else if (calcium > 150) {
523 setRangeIndicator("calcium", "high");
524 } else {
525 setRangeIndicator("calcium", "normal");
526 }
527 if (magnesium >= 0 && magnesium <= 30) {
528 setRangeIndicator("magnesium", "normal");
529 } else {
530 setRangeIndicator("magnesium", "high");
531 }
532 if (sodium <= 150) {
533 setRangeIndicator("sodium", "normal");
534 } else {
535 setRangeIndicator("sodium", "high");
536 }
537 if (chloride <= 100) {
538 setRangeIndicator("chloride", "normal");
539 } else {
540 setRangeIndicator("chloride", "high");
541 }
542 if (sulfate <= 350) {
543 setRangeIndicator("sulfate", "normal");
544 } else {
545 setRangeIndicator("sulfate", "high");
546 }
547 }
548
312 function calcInit () { 549 function calcInit () {
313 console.log("calc.init()"); 550 console.log("calc.init()");
314 551
315 calcSGendMash(); 552 calcSGendMash();
316 calcMashEfficiency(); 553 calcMashEfficiency();
554
555 $("#w1_name").jqxDropDownList('selectItem', dataRecord.w1_name);
556 $("#w2_name").jqxDropDownList('selectItem', dataRecord.w2_name);
557 // Fix tap water if zero using mash infuse amount.
558 if (parseFloat($("#wg_amount").jqxNumberInput('decimal')) == 0 && mash_infuse > 0) {
559 $("#w1_amount").val(mash_infuse);
560 dataRecord.w1_amount = mash_infuse;
561 $("#wg_amount").val(mash_infuse);
562 $("#w2_amount").val(0);
563 dataRecord.w2_amount = 0;
564 }
565 calcWater();
566 $("#w2_amount").on('change', function (event) {
567 var newval = parseFloat(event.args.value);
568
569 if (newval > mash_infuse) {
570 $("#w2_amount").val(dataRecord.w2_amount);
571 return;
572 }
573 dataRecord.w1_amount = parseFloat($("#wg_amount").jqxNumberInput('decimal')) - newval;
574 $("#w1_amount").val(dataRecord.w1_amount);
575 dataRecord.w2_amount = newval;
576 console.log("new: "+event.args.value+" w1: "+dataRecord.w1_amount+" w2: "+dataRecord.w2_amount);
577 calcWater();
578 });
579 $('#wa_cacl2').on('change', function (event) {
580 setWaterAgent('CaCl2', event.args.value);
581 calcWater();
582 });
583 $('#wa_caso4').on('change', function (event) {
584 setWaterAgent('CaSO4', event.args.value);
585 calcWater();
586 });
587 $('#wa_mgso4').on('change', function (event) {
588 setWaterAgent('MgSO4', event.args.value);
589 calcWater();
590 });
591 $('#wa_nacl').on('change', function (event) {
592 setWaterAgent('NaCl', event.args.value);
593 calcWater();
594 });
595 $('#wa_base_name').on('change', function (event) {
596 setWaterAgent(last_base, 0);
597 last_base = event.args.item.value;
598 setWaterAgent(last_base, parseFloat($("#wa_base").jqxNumberInput('decimal')));
599 calcWater();
600 });
601 $('#wa_base').on('change', function (event) {
602 setWaterAgent($("#wa_base_name").val(), parseFloat(event.args.value));
603 calcWater();
604 });
605 $('#wa_acid_name').on('change', function (event) {
606 setWaterAgent(last_acid, 0);
607 last_acid = event.args.item.value;
608 setWaterAgent(last_acid, parseFloat($("#wa_acid").jqxNumberInput('decimal')));
609 calcWater();
610 });
611 $('#wa_acid').on('change', function (event) {
612 setWaterAgent($("#wa_acid_name").val(), parseFloat(event.args.value));
613 calcWater();
614 });
615 $('#wa_acid_perc').on('change', function (event) { calcWater(); });
616
617 $('#color_method').on('change', function (event) { calcFermentables(); });
618 $('#ibu_method').on('change', function (event) {
619 calcFermentables();
620 calcIBUs();
621 });
317 622
318 $('#batch_size').on('change', function (event) { 623 $('#batch_size').on('change', function (event) {
319 console.log("batch_size change:"+event.args.value+" old:"+dataRecord.batch_size); 624 console.log("batch_size change:"+event.args.value+" old:"+dataRecord.batch_size);
320 var new_boil = parseFloat(event.args.value) + dataRecord.boil_size - dataRecord.batch_size; 625 var new_boil = parseFloat(event.args.value) + dataRecord.boil_size - dataRecord.batch_size;
321 dataRecord.boil_size = new_boil; 626 dataRecord.boil_size = new_boil;
358 calcIBUs(); // and the IBU's. 663 calcIBUs(); // and the IBU's.
359 }); 664 });
360 $('#mash_ph').on('change', function (event) { 665 $('#mash_ph').on('change', function (event) {
361 dataRecord.mash_ph = parseFloat(event.args.value); 666 dataRecord.mash_ph = parseFloat(event.args.value);
362 $("#tgt_mash_ph").val(parseFloat(event.args.value)); 667 $("#tgt_mash_ph").val(parseFloat(event.args.value));
363 // calcWater(); 668 calcWater();
364 }); 669 });
365 }; 670 };
366 671
367 $("#styleSelect").jqxDropDownList({ 672 $("#styleSelect").jqxDropDownList({
368 placeHolder: "Kies bierstijl:", 673 placeHolder: "Kies bierstijl:",

mercurial