# HG changeset patch # User Michiel Broek # Date 1549139754 -3600 # Node ID 0a063ac5d7f584a9d73054e25fe2fca370ecec78 # Parent b8b5efa495bb449e7a401de43b0500b76d187d67 Recipes in progress loading uses indexes. Recipe from database has added inventory information for the ingredients. diff -r b8b5efa495bb -r 0a063ac5d7f5 www/includes/db_product.php --- a/www/includes/db_product.php Sat Feb 02 20:49:41 2019 +0100 +++ b/www/includes/db_product.php Sat Feb 02 21:35:54 2019 +0100 @@ -25,30 +25,6 @@ } $stage = $_POST['stage']; - if ($stage == 'Plan') - $stageno = 0; - else if ($stage == 'Wait') - $stageno = 1; - else if ($stage == 'Brew') - $stageno = 2; - else if ($stage == 'Primary') - $stageno = 3; - else if ($stage == 'Secondary') - $stageno = 4; - else if ($stage == 'Tertiary') - $stageno = 5; - else if ($stage == 'Package') - $stageno = 6; - else if ($stage == 'Carbonation') - $stageno = 7; - else if ($stage == 'Mature') - $stageno = 8; - else if ($stage == 'Taste') - $stageno = 9; - else if ($stage == 'Ready') - $stageno = 10; - else if ($stage == 'Closed') - $stageno = 11; // Basic settings if (isset($_POST['uuid'])) { @@ -319,7 +295,7 @@ * SELECT, produce a list of products that are not yet Closed. */ if (isset($_GET['select']) && ($_GET['select'] == "inprod")) { - $query = "SELECT record,name,code,birth,stage FROM products WHERE stage != 'Closed' ORDER BY birth,code;"; + $query = "SELECT record,name,code,birth,stage FROM products WHERE stage != '11' ORDER BY birth,code;"; $result = mysqli_query($connect, $query) or die("SQL Error 1: " . mysqli_error($connect)); while ($row = mysqli_fetch_array($result, MYSQLI_ASSOC)) { $brews[] = array( @@ -330,7 +306,7 @@ 'stage' => $row['stage'] ); } - echo json_encode($brews); + echo json_encode($brews, JSON_UNESCAPED_UNICODE); return; } @@ -339,7 +315,7 @@ */ if (isset($_GET['select']) && ($_GET['select'] == "ferment")) { $query = "SELECT code,name,uuid,stage FROM products WHERE "; - $query .= "stage='Wait' OR stage='Brew' OR stage='Primary' OR stage='Secondary' OR stage='Tertiary' OR stage='Carbonation' ORDER BY code;"; + $query .= "stage='1' OR stage='2' OR stage='3' OR stage='4' OR stage='5' OR stage='6' ORDER BY code;"; $result = mysqli_query($connect, $query) or die("SQL Error 1: " . mysqli_error($connect)); while ($row = mysqli_fetch_array($result, MYSQLI_ASSOC)) { $brews[] = array( @@ -349,7 +325,7 @@ 'stage' => $row['stage'] ); } - echo json_encode($brews); + echo json_encode($brews, JSON_UNESCAPED_UNICODE); return; } @@ -374,8 +350,8 @@ $brew .= '","name":"' . str_replace($escapers, $replacements, $row['name']); $brew .= '","code":"' . str_replace($escapers, $replacements, $row['code']); $brew .= '","birth":"' . str_replace($escapers, $replacements, $row['birth']); - $brew .= '","stage":"' . str_replace($escapers, $replacements, $row['stage']); - $brew .= '","notes":"' . str_replace($escapers, $replacements, $row['notes']); + $brew .= '","stage":' . $row['stage']; + $brew .= ',"notes":"' . str_replace($escapers, $replacements, $row['notes']); $brew .= '","log_brew":' . $row['log_brew']; $brew .= ',"log_fermentation":' . $row['log_fermentation']; $brew .= ',"inventory_reduced":' . $row['inventory_reduced']; @@ -387,8 +363,8 @@ $brew .= ',"eq_tun_volume":' . floatval($row['eq_tun_volume']); $brew .= ',"eq_tun_weight":' . floatval($row['eq_tun_weight']); $brew .= ',"eq_tun_specific_heat":' . floatval($row['eq_tun_specific_heat']); - $brew .= ',"eq_tun_material":"' . $row['eq_tun_material']; - $brew .= '","eq_tun_height":' . floatval($row['eq_tun_height']); + $brew .= ',"eq_tun_material":' . $row['eq_tun_material']; + $brew .= ',"eq_tun_height":' . floatval($row['eq_tun_height']); $brew .= ',"eq_top_up_water":' . floatval($row['eq_top_up_water']); $brew .= ',"eq_trub_chiller_loss":' . floatval($row['eq_trub_chiller_loss']); $brew .= ',"eq_evap_rate":' . floatval($row['eq_evap_rate']); @@ -419,8 +395,8 @@ $brew .= ',"brew_aboil_sg":' . floatval($row['brew_aboil_sg']); $brew .= ',"brew_aboil_ph":' . floatval($row['brew_aboil_ph']); $brew .= ',"brew_aboil_efficiency":' . floatval($row['brew_aboil_efficiency']); - $brew .= ',"brew_cooling_method":"' . $row['brew_cooling_method']; - $brew .= '","brew_cooling_time":' . floatval($row['brew_cooling_time']); + $brew .= ',"brew_cooling_method":' . $row['brew_cooling_method']; + $brew .= ',"brew_cooling_time":' . floatval($row['brew_cooling_time']); $brew .= ',"brew_cooling_to":' . floatval($row['brew_cooling_to']); $brew .= ',"brew_whirlpool9":' . floatval($row['brew_whirlpool9']); $brew .= ',"brew_whirlpool7":' . floatval($row['brew_whirlpool7']); @@ -430,8 +406,8 @@ $brew .= ',"brew_fermenter_extrawater":' . floatval($row['brew_fermenter_extrawater']); $brew .= ',"brew_aeration_time":' . floatval($row['brew_aeration_time']); $brew .= ',"brew_aeration_speed":' . floatval($row['brew_aeration_speed']); - $brew .= ',"brew_aeration_type":"' . $row['brew_aeration_type']; - $brew .= '","brew_fermenter_sg":' . floatval($row['brew_fermenter_sg']); + $brew .= ',"brew_aeration_type":' . $row['brew_aeration_type']; + $brew .= ',"brew_fermenter_sg":' . floatval($row['brew_fermenter_sg']); $brew .= ',"brew_fermenter_ibu":' . floatval($row['brew_fermenter_ibu']); $brew .= ',"brew_date_end":"' . $row['brew_date_end']; $brew .= '","brew_log_available":' . $row['brew_log_available']; @@ -448,13 +424,13 @@ $brew .= ',"package_date":"' . $row['package_date']; $brew .= '","bottle_amount":' . floatval($row['bottle_amount']); $brew .= ',"bottle_carbonation":' . floatval($row['bottle_carbonation']); - $brew .= ',"bottle_priming_sugar":"' . str_replace($escapers, $replacements, $row['bottle_priming_sugar']); - $brew .= '","bottle_priming_amount":' . floatval($row['bottle_priming_amount']); + $brew .= ',"bottle_priming_sugar":' . $row['bottle_priming_sugar']; + $brew .= ',"bottle_priming_amount":' . floatval($row['bottle_priming_amount']); $brew .= ',"bottle_carbonation_temp":' . floatval($row['bottle_carbonation_temp']); $brew .= ',"keg_amount":' . floatval($row['keg_amount']); $brew .= ',"keg_carbonation":' . floatval($row['keg_carbonation']); - $brew .= ',"keg_priming_sugar":"' . str_replace($escapers, $replacements, $row['keg_priming_sugar']); - $brew .= '","keg_priming_amount":' . floatval($row['keg_priming_amount']); + $brew .= ',"keg_priming_sugar":' . $row['keg_priming_sugar']; + $brew .= ',"keg_priming_amount":' . floatval($row['keg_priming_amount']); $brew .= ',"keg_carbonation_temp":' . floatval($row['keg_carbonation_temp']); $brew .= ',"keg_forced_carb":' . floatval($row['keg_forced_carb']); $brew .= ',"keg_pressure":' . floatval($row['keg_pressure']); @@ -471,8 +447,8 @@ $brew .= '","st_guide":"' . str_replace($escapers, $replacements, $row['st_guide']); $brew .= '","st_letter":"' . str_replace($escapers, $replacements, $row['st_letter']); $brew .= '","st_name":"' . str_replace($escapers, $replacements, $row['st_name']); - $brew .= '","st_type":"' . str_replace($escapers, $replacements, $row['st_type']); - $brew .= '","st_category":"' . str_replace($escapers, $replacements, $row['st_category']); + $brew .= '","st_type":' . $row['st_type']; + $brew .= ',"st_category":"' . str_replace($escapers, $replacements, $row['st_category']); $brew .= '","st_category_number":' . floatval($row['st_category_number']); $brew .= ',"st_og_min":' . floatval($row['st_og_min']); $brew .= ',"st_og_max":' . floatval($row['st_og_max']); @@ -486,8 +462,8 @@ $brew .= ',"st_carb_max":' . floatval($row['st_carb_max']); $brew .= ',"st_abv_min":' . floatval($row['st_abv_min']); $brew .= ',"st_abv_max":' . floatval($row['st_abv_max']); - $brew .= ',"type":"' . $row['type']; - $brew .= '","batch_size":' . floatval($row['batch_size']); + $brew .= ',"type":' . $row['type']; + $brew .= ',"batch_size":' . floatval($row['batch_size']); $brew .= ',"boil_size":' . floatval($row['boil_size']); $brew .= ',"boil_time":' . floatval($row['boil_time']); $brew .= ',"efficiency":' . floatval($row['efficiency']); @@ -496,15 +472,15 @@ $brew .= ',"est_abv":' . floatval($row['est_abv']); $brew .= ',"est_carb":' . floatval($row['est_carb']); $brew .= ',"est_color":' . floatval($row['est_color']); - $brew .= ',"color_method":"' . $row['color_method']; - $brew .= '","est_ibu":' . floatval($row['est_ibu']); - $brew .= ',"ibu_method":"' . $row['ibu_method']; - $brew .= '","sparge_temp":' . floatval($row['sparge_temp']); + $brew .= ',"color_method":' . $row['color_method']; + $brew .= ',"est_ibu":' . floatval($row['est_ibu']); + $brew .= ',"ibu_method":' . $row['ibu_method']; + $brew .= ',"sparge_temp":' . floatval($row['sparge_temp']); $brew .= ',"sparge_ph":' . floatval($row['sparge_ph']); $brew .= ',"sparge_volume":' . floatval($row['sparge_volume']); - $brew .= ',"sparge_source":"' . $row['sparge_source']; - $brew .= '","sparge_acid_type":"' . $row['sparge_acid_type']; - $brew .= '","sparge_acid_perc":' . floatval($row['sparge_acid_perc']); + $brew .= ',"sparge_source":' . $row['sparge_source']; + $brew .= ',"sparge_acid_type":' . $row['sparge_acid_type']; + $brew .= ',"sparge_acid_perc":' . floatval($row['sparge_acid_perc']); $brew .= ',"sparge_acid_amount":' . floatval($row['sparge_acid_amount']); $brew .= ',"mash_ph":' . $row['mash_ph']; $brew .= ',"mash_name":"' . $row['mash_name']; @@ -529,10 +505,88 @@ $brew .= ',"w2_total_alkalinity":' . $row['w2_total_alkalinity']; $brew .= ',"w2_ph":' . $row['w2_ph']; $brew .= ',"w2_cost":' . $row['w2_cost']; - $brew .= ',"fermentables":' . $row['json_fermentables']; - $brew .= ',"hops":' . $row['json_hops']; - $brew .= ',"miscs":' . $row['json_miscs']; - $brew .= ',"yeasts":' . $row['json_yeasts']; + $brew .= ',"wa_acid_name":' . $row['wa_acid_name']; + $brew .= ',"wa_acid_perc":' . $row['wa_acid_perc']; + $brew .= ',"wa_base_name":' . $row['wa_base_name']; + if (isset($_GET['record'])) { + // Append stock information. + $fermentables = json_decode($row['json_fermentables'], true); + for ($i = 0; $i < count($fermentables); $i++) { + $fermentables[$i]['f_inventory'] = 0; // Not in stock + $fermentables[$i]['f_avail'] = 0; // Ingredient not in db + $sql2 = "SELECT inventory FROM inventory_fermentables "; + $sql2 .= "WHERE name='".str_replace($rescapers, $rreplacements, $fermentables[$i]['f_name'])."' AND"; + $sql2 .= " supplier='".str_replace($rescapers, $rreplacements, $fermentables[$i]['f_supplier'])."'"; + if ($result2 = mysqli_query($connect, $sql2)) { + if ($obj = mysqli_fetch_object($result2)) { + $fermentables[$i]['f_inventory'] = floatval($obj->inventory); + $fermentables[$i]['f_avail'] = 1; + } + mysqli_free_result($result2); + } + } + $brew .= ',"fermentables":' . json_encode($fermentables, JSON_UNESCAPED_UNICODE); + + $hops = json_decode($row['json_hops'], true); + for ($i = 0; $i < count($hops); $i++) { + $hops[$i]['h_inventory'] = 0; // Not in stock + $hops[$i]['h_avail'] = 0; // Ingredient not in db + $sql2 = "SELECT inventory FROM inventory_hops "; + $sql2 .= "WHERE name='".str_replace($rescapers, $rreplacements, $hops[$i]['h_name'])."' AND"; + $sql2 .= " origin='".str_replace($rescapers, $rreplacements, $hops[$i]['h_origin'])."' AND"; + $sql2 .= " form='".$hops[$i]['h_form']."'"; + if ($result2 = mysqli_query($connect, $sql2)) { + if ($obj = mysqli_fetch_object($result2)) { + $hops[$i]['h_inventory'] = floatval($obj->inventory); + $hops[$i]['h_avail'] = 1; + } + mysqli_free_result($result2); + } + } + $brew .= ',"hops":' . json_encode($hops, JSON_UNESCAPED_UNICODE); + + $miscs = json_decode($row['json_miscs'], true); + for ($i = 0; $i < count($miscs); $i++) { + $miscs[$i]['m_inventory'] = 0; // Not in stock + $miscs[$i]['m_avail'] = 0; // Ingredient not in db + $sql2 = "SELECT inventory FROM inventory_miscs "; + $sql2 .= "WHERE name='".str_replace($rescapers, $rreplacements, $miscs[$i]['m_name'])."' AND"; + $sql2 .= " type='".$miscs[$i]['m_type']."'"; + if ($result2 = mysqli_query($connect, $sql2)) { + if ($obj = mysqli_fetch_object($result2)) { + $miscs[$i]['m_inventory'] = floatval($obj->inventory); + $miscs[$i]['m_avail'] = 1; + } + mysqli_free_result($result2); + } + } + $brew .= ',"miscs":' . json_encode($miscs, JSON_UNESCAPED_UNICODE); + + $yeasts = json_decode($row['json_yeasts'], true); + for ($i = 0; $i < count($yeasts); $i++) { + $yeasts[$i]['y_inventory'] = 0; // Not in stock + $yeasts[$i]['y_avail'] = 0; // Ingredient not in db + $sql2 = "SELECT inventory FROM inventory_yeasts "; + $sql2 .= "WHERE name='".str_replace($rescapers, $rreplacements, $yeasts[$i]['y_name'])."' AND"; + $sql2 .= " form='".str_replace($rescapers, $rreplacements, $yeasts[$i]['y_form'])."' AND"; + $sql2 .= " laboratory='".str_replace($rescapers, $rreplacements, $yeasts[$i]['y_laboratory'])."' AND"; + $sql2 .= " product_id='".str_replace($rescapers, $rreplacements, $yeasts[$i]['y_product_id'])."'"; + if ($result2 = mysqli_query($connect, $sql2)) { + if ($obj = mysqli_fetch_object($result2)) { + $yeasts[$i]['y_inventory'] = floatval($obj->inventory); + $yeasts[$i]['y_avail'] = 1; + } + mysqli_free_result($result2); + } + } + $brew .= ',"yeasts":' . json_encode($yeasts, JSON_UNESCAPED_UNICODE); + } else { + // Just leave it + $brew .= ',"fermentables":' . $row['json_fermentables']; + $brew .= ',"hops":' . $row['json_hops']; + $brew .= ',"miscs":' . $row['json_miscs']; + $brew .= ',"yeasts":' . $row['json_yeasts']; + } $brew .= ',"mashs":' . $row['json_mashs']; $brew .= '}'; // syslog(LOG_NOTICE, $brew); diff -r b8b5efa495bb -r 0a063ac5d7f5 www/js/prod_inprod.js --- a/www/js/prod_inprod.js Sat Feb 02 20:49:41 2019 +0100 +++ b/www/js/prod_inprod.js Sat Feb 02 21:35:54 2019 +0100 @@ -1,5 +1,5 @@ /***************************************************************************** - * Copyright (C) 2018 + * Copyright (C) 2018-2019 * * Michiel Broek * @@ -30,7 +30,7 @@ { name: 'name', type: 'string' }, { name: 'code', type: 'string' }, { name: 'birth', type: 'string' }, - { name: 'stage', type: 'string' }, + { name: 'stage', type: 'int' }, ], id: 'record', url: "includes/db_product.php?select=inprod" @@ -49,21 +49,23 @@ var addButton = $("
Add
"); container.append(addButton); statusbar.append(container); - addButton.jqxButton({ theme: theme, width: 120, height: 20 }); + addButton.jqxButton({ theme: theme, width: 90, height: 20 }); // add new recipe. addButton.click(function (event) { var url= "prod_new.php?return=prod_inprod.php"; window.location.href = url; }); }, - filterable: true, - filtermode: 'excel', columns: [ { text: 'Datum', datafield: 'birth', width: 120 }, { text: 'Code', datafield: 'code', width: 120 }, { text: 'Naam', datafield: 'name' }, - { text: 'Fase', datafield: 'stage', width: 130 }, - { text: 'Wijzig', datafield: 'Edit', width: 120, align: 'center', columntype: 'button', cellsrenderer: function () { + { text: 'Fase', datafield: 'stage', width: 130, + cellsrenderer: function (index, datafield, value, defaultvalue, column, rowdata) { + return "
" + StageData[value].nl + "
"; + } + }, + { text: 'Wijzig', datafield: 'Edit', width: 100, align: 'center', columntype: 'button', cellsrenderer: function () { return "Wijzig"; }, buttonclick: function (row) { var datarecord = dataAdapter.records[row];