72 |
72 |
73 |
73 |
74 function hopFlavourContribution(bt, vol, use, amount) { |
74 function hopFlavourContribution(bt, vol, use, amount) { |
75 var result; |
75 var result; |
76 |
76 |
|
77 if (use == 4 || use == 5) // Whirlpool or Dry-hop |
|
78 return 0; |
77 if (use == 1) { // First wort |
79 if (use == 1) { // First wort |
78 result = 0.15; // assume 15% flavourcontribution for fwh |
80 result = 0.15; // assume 15% flavourcontribution for fwh |
79 } else if (bt > 50) { |
81 } else if (bt > 50) { |
80 result = 0.10; // assume 10% flavourcontribution as a minimum |
82 result = 0.10; // assume 10% flavourcontribution as a minimum |
81 } else { |
83 } else { |
90 function hopAromaContribution(bt, vol, use, amount) { |
92 function hopAromaContribution(bt, vol, use, amount) { |
91 var result = 0; |
93 var result = 0; |
92 |
94 |
93 if (use == 5) { // Dry hop |
95 if (use == 5) { // Dry hop |
94 result = 1.33; |
96 result = 1.33; |
|
97 } else if (use == 4) { // Whirlpool |
|
98 if (bt > 30) |
|
99 bt = 30; // Max 30 minutes |
|
100 result = 0.62 * bt / 30; |
95 } else if (bt > 20) { |
101 } else if (bt > 20) { |
96 result = 0; |
102 result = 0; |
97 } else if (bt > 7.5) { |
103 } else if (bt > 7.5) { |
98 result = 10.03 / (4 * Math.sqrt(2 * Math.PI)) * Math.exp(-0.5 * Math.pow((bt - 7.5) / 4, 2)); |
104 result = 10.03 / (4 * Math.sqrt(2 * Math.PI)) * Math.exp(-0.5 * Math.pow((bt - 7.5) / 4, 2)); |
99 } else if (use == 2) { // Boil |
105 } else if (use == 2) { // Boil |
100 result = 1; |
106 result = 1; |
101 } else if (use == 3) { // Aroma |
107 } else if (use == 3) { // Aroma |
102 result = 1.2; |
|
103 } else if (use == 4) { // Whirlpool |
|
104 result = 1.2; |
108 result = 1.2; |
105 } |
109 } |
106 return (result * amount * 1000) / vol; |
110 return (result * amount * 1000) / vol; |
107 } |
111 } |
108 |
112 |
370 return; |
374 return; |
371 } |
375 } |
372 for (i = 0; i < rows.length; i++) { |
376 for (i = 0; i < rows.length; i++) { |
373 row = rows[i]; |
377 row = rows[i]; |
374 total_ibus += toIBU(row.h_useat, row.h_form, preboil_sg, parseFloat(dataRecord.batch_size), |
378 total_ibus += toIBU(row.h_useat, row.h_form, preboil_sg, parseFloat(dataRecord.batch_size), |
375 parseFloat(row.h_amount), parseFloat(row.h_time), parseFloat(row.h_alpha), dataRecord.ibu_method); |
379 parseFloat(row.h_amount), parseFloat(row.h_time), parseFloat(row.h_alpha), dataRecord.ibu_method, 0, parseFloat(row.h_time), 0); |
376 hop_flavour += hopFlavourContribution(parseFloat(row.h_time), parseFloat(dataRecord.batch_size), row.h_useat, parseFloat(row.h_amount)); |
380 hop_flavour += hopFlavourContribution(parseFloat(row.h_time), parseFloat(dataRecord.batch_size), row.h_useat, parseFloat(row.h_amount)); |
377 hop_aroma += hopAromaContribution(parseFloat(row.h_time), parseFloat(dataRecord.batch_size), row.h_useat, parseFloat(row.h_amount)); |
381 hop_aroma += hopAromaContribution(parseFloat(row.h_time), parseFloat(dataRecord.batch_size), row.h_useat, parseFloat(row.h_amount)); |
378 } |
382 } |
379 total_ibus = Round(total_ibus, 1); |
383 total_ibus = Round(total_ibus, 1); |
380 hop_flavour = Round(hop_flavour * 100 / 5, 1); |
384 hop_flavour = Round(hop_flavour * 100 / 5, 1); |
1224 }, |
1228 }, |
1225 { text: 'IBU', datafield: 'ibu', width: 80, align: 'right', |
1229 { text: 'IBU', datafield: 'ibu', width: 80, align: 'right', |
1226 cellsrenderer: function(index, datafield, value, defaultvalue, column, rowdata) { |
1230 cellsrenderer: function(index, datafield, value, defaultvalue, column, rowdata) { |
1227 var ibu = toIBU(rowdata.h_useat, rowdata.h_form, preboil_sg, parseFloat($('#batch_size').jqxNumberInput('decimal')), |
1231 var ibu = toIBU(rowdata.h_useat, rowdata.h_form, preboil_sg, parseFloat($('#batch_size').jqxNumberInput('decimal')), |
1228 parseFloat(rowdata.h_amount), parseFloat(rowdata.h_time), |
1232 parseFloat(rowdata.h_amount), parseFloat(rowdata.h_time), |
1229 parseFloat(rowdata.h_alpha), $('#ibu_method').val()); |
1233 parseFloat(rowdata.h_alpha), $('#ibu_method').val(), 0, parseFloat(rowdata.h_time), 0); |
1230 return '<span style="margin: 4px; margin-top: 6px; float: right;">' + dataAdapter.formatNumber(ibu, 'f1') + '</span>'; |
1234 return '<span style="margin: 4px; margin-top: 6px; float: right;">' + dataAdapter.formatNumber(ibu, 'f1') + '</span>'; |
1231 } |
1235 } |
1232 }, |
1236 }, |
1233 { text: 'Gewicht', datafield: 'h_amount', width: 110, align: 'right', |
1237 { text: 'Gewicht', datafield: 'h_amount', width: 110, align: 'right', |
1234 cellsrenderer: function(index, datafield, value, defaultvalue, column, rowdata) { |
1238 cellsrenderer: function(index, datafield, value, defaultvalue, column, rowdata) { |
1258 $('#wh_name').val(hopData.h_name); |
1262 $('#wh_name').val(hopData.h_name); |
1259 $('#wh_amount').val(hopData.h_amount * 1000); |
1263 $('#wh_amount').val(hopData.h_amount * 1000); |
1260 var ibu = toIBU(hopData.h_useat, hopData.h_form, preboil_sg, |
1264 var ibu = toIBU(hopData.h_useat, hopData.h_form, preboil_sg, |
1261 parseFloat($('#batch_size').jqxNumberInput('decimal')), |
1265 parseFloat($('#batch_size').jqxNumberInput('decimal')), |
1262 parseFloat(hopData.h_amount), parseFloat(hopData.h_time), |
1266 parseFloat(hopData.h_amount), parseFloat(hopData.h_time), |
1263 parseFloat(hopData.h_alpha), $('#ibu_method').val() |
1267 parseFloat(hopData.h_alpha), $('#ibu_method').val(), |
|
1268 0, parseFloat(hopData.h_time), 0 |
1264 ); |
1269 ); |
1265 $('#wh_ibu').val(ibu); |
1270 $('#wh_ibu').val(ibu); |
1266 if (hopData.h_useat == 5) // Dry hop |
1271 if (hopData.h_useat == 5) // Dry hop |
1267 $('#wh_time').val(hopData.h_time / 1440); |
1272 $('#wh_time').val(hopData.h_time / 1440); |
1268 else |
1273 else |
3300 }); |
3305 }); |
3301 $('#wh_amount').jqxNumberInput(Spin1dec); |
3306 $('#wh_amount').jqxNumberInput(Spin1dec); |
3302 $('#wh_amount').on('change', function(event) { |
3307 $('#wh_amount').on('change', function(event) { |
3303 var ibu, amount = parseFloat(event.args.value) / 1000; |
3308 var ibu, amount = parseFloat(event.args.value) / 1000; |
3304 ibu = toIBU(hopData.h_useat, hopData.h_form, preboil_sg, parseFloat($('#batch_size').jqxNumberInput('decimal')), |
3309 ibu = toIBU(hopData.h_useat, hopData.h_form, preboil_sg, parseFloat($('#batch_size').jqxNumberInput('decimal')), |
3305 amount, parseFloat(hopData.h_time), parseFloat(hopData.h_alpha), $('#ibu_method').val()); |
3310 amount, parseFloat(hopData.h_time), parseFloat(hopData.h_alpha), $('#ibu_method').val(), 0, parseFloat(hopData.h_time), 0); |
3306 hopData.h_amount = amount; |
3311 hopData.h_amount = amount; |
3307 console.log('amount changed: ' + event.args.value + ' time:' + hopData.h_time + ' alpha:' + hopData.h_alpha + ' IBU:' + ibu); |
3312 console.log('amount changed: ' + event.args.value + ' time:' + hopData.h_time + ' alpha:' + hopData.h_alpha + ' IBU:' + ibu); |
3308 $('#wh_ibu').val(ibu); |
3313 $('#wh_ibu').val(ibu); |
3309 }); |
3314 }); |
3310 $('#wh_ibu').jqxNumberInput(Show1dec); |
3315 $('#wh_ibu').jqxNumberInput(Show1dec); |
3330 $('#wh_time').val(newtime); |
3335 $('#wh_time').val(newtime); |
3331 } |
3336 } |
3332 hopData.h_time = newtime * 1440; |
3337 hopData.h_time = newtime * 1440; |
3333 } |
3338 } |
3334 ibu = toIBU(hopData.h_useat, hopData.h_form, preboil_sg, parseFloat($('#batch_size').jqxNumberInput('decimal')), |
3339 ibu = toIBU(hopData.h_useat, hopData.h_form, preboil_sg, parseFloat($('#batch_size').jqxNumberInput('decimal')), |
3335 parseFloat(hopData.h_amount), parseFloat(hopData.h_time), parseFloat(hopData.h_alpha), $('#ibu_method').val()); |
3340 parseFloat(hopData.h_amount), parseFloat(hopData.h_time), parseFloat(hopData.h_alpha), $('#ibu_method').val(), 0, parseFloat(hopData.h_time), 0); |
3336 $('#wh_ibu').val(ibu); |
3341 $('#wh_ibu').val(ibu); |
3337 }); |
3342 }); |
3338 $('#wh_useat').jqxDropDownList({ |
3343 $('#wh_useat').jqxDropDownList({ |
3339 theme: theme, |
3344 theme: theme, |
3340 source: HopUseAdapter, |
3345 source: HopUseAdapter, |