www/js/profile_styles.js

Sun, 04 Jul 2021 20:01:13 +0200

author
Michiel Broek <mbroek@mbse.eu>
date
Sun, 04 Jul 2021 20:01:13 +0200
changeset 768
ae1195153fa2
parent 702
f0896a6f9b64
child 785
aa79acfdf8a9
permissions
-rw-r--r--

Better error reporting in profiles fermentation steps, mash profiles, beer styles, water profiles and general setup.

/*****************************************************************************
 * Copyright (C) 2014-2021
 *
 * Michiel Broek <mbroek at mbse dot eu>
 *
 * This file is part of Brewery Management System
 *
 * 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() {

 var dataRecord = {},
 url = 'includes/db_profile_styles.php',
 source = {
  datatype: 'json',
  cache: false,
  datafields: [
   { name: 'record', type: 'number' },
   { name: 'name', type: 'string' },
   { name: 'category', type: 'string' },
   { name: 'category_number', type: 'number' },
   { name: 'style_letter', type: 'string' },
   { name: 'style_guide', type: 'string' },
   { name: 'type', type: 'int' },
   { name: 'og_min', type: 'float' },
   { name: 'og_max', type: 'float' },
   { name: 'fg_min', type: 'float' },
   { name: 'fg_max', type: 'float' },
   { name: 'ibu_min', type: 'float' },
   { name: 'ibu_max', type: 'float' },
   { name: 'color_min', type: 'float' },
   { name: 'color_max', type: 'float' },
   { name: 'carb_min', type: 'float' },
   { name: 'carb_max', type: 'float' },
   { name: 'abv_min', type: 'float' },
   { name: 'abv_max', type: 'float' },
   { name: 'notes', type: 'string' },
   { name: 'profile', type: 'string' },
   { name: 'ingredients', type: 'string' },
   { name: 'examples', type: 'string' }
  ],
  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) {
     if (data.error) {
      console.log('delete: ' + data.msg);
      alert('Fout: ' + data.msg);
     } else {
      console.log('delete: success');
     }
     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) {
     if (data.error) {
      console.log('insert: ' + data.msg);
      alert('Fout: ' + data.msg);
     } else {
      console.log('insert: success');
     }
     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) {
     if (data.error) {
      console.log('updaterow: ' + data.msg);
      alert('Fout: ' + data.msg);
     } else {
      console.log('updaterow: success');
     }
     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: 320, height: 23 });
 $('#category').jqxInput({ theme: theme, width: 320, height: 23 });
 $('#category_number').jqxNumberInput(PosInt);
 $('#style_letter').jqxInput({ theme: theme, width: 250, height: 23 });
 $('#style_guide').jqxInput({ theme: theme, width: 320, height: 23 });
 $('#type').jqxDropDownList({
  theme: theme,
  source: StyleTypeAdapter,
  valueMember: 'id',
  displayMember: 'nl',
  width: 180,
  height: 23,
  autoDropDownHeight: true
 });
 $('#og_min').jqxNumberInput(SGopts);
 $('#og_max').jqxNumberInput(SGopts);
 $('#fg_min').jqxNumberInput(SGopts);
 $('#fg_max').jqxNumberInput(SGopts);
 $('#ibu_min').jqxNumberInput(PosInt);
 $('#ibu_min').jqxNumberInput({ max: 200 });
 $('#ibu_max').jqxNumberInput(PosInt);
 $('#ibu_max').jqxNumberInput({ max: 200 });
 $('#color_min').jqxNumberInput(PosInt);
 $('#color_min').jqxNumberInput({ max: 200 });
 $('#color_max').jqxNumberInput(PosInt);
 $('#color_max').jqxNumberInput({ max: 200 });
 $('#carb_min').jqxNumberInput(Spin1dec);
 $('#carb_min').jqxNumberInput({ max: 5 });
 $('#carb_max').jqxNumberInput(Spin1dec);
 $('#carb_max').jqxNumberInput({ max: 5 });
 $('#abv_min').jqxNumberInput(Spin1dec);
 $('#abv_min').jqxNumberInput({ max: 20 });
 $('#abv_max').jqxNumberInput(Spin1dec);
 $('#abv_max').jqxNumberInput({ max: 20 });
 $('#notes').jqxInput({ theme: theme, width: 800, height: 100 });
 $('#profile').jqxInput({ theme: theme, width: 800, height: 48 });
 $('#ingredients').jqxInput({ theme: theme, width: 800, height: 23 });
 $('#examples').jqxInput({ theme: theme, width: 800, height: 48 });

 var  localizationobj = {};
 localizationobj.filterchoosestring= "Keuze:";

 // initialize jqxGrid
 $('#jqxgrid').jqxGrid({
  width: 1280,
  height: 630,
  source: dataAdapter,
  theme: theme,
  showstatusbar: true,
  renderstatusbar: function(statusbar) {
   var rowCount = $("#jqxgrid").jqxGrid('getrows').length;
   statusbar.append('<div style="float: left; margin: 8px; color: orange !important;">Aantal items: ' + rowCount + '</div>');
   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: -4px;">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: -4px;">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: -10px;">Export</span></div>');
   container.append(addButton);
   container.append(impButton);
   container.append(expButton);
   statusbar.append(container);
   addButton.jqxButton({ theme: theme, width: 90, height: 17 });
   impButton.jqxButton({ theme: theme, width: 90, height: 17 });
   expButton.jqxButton({ theme: theme, width: 90, height: 17 });
   // add new row.
   addButton.click(function(event) {
    editrow = -1;
    $('#name').val('Nieuwe stijl');
    $('#category').val('');
    $('#category_number').val('');
    $('#style_letter').val('');
    $('#style_guide').val('BKG 2015');
    $('#type').val(0);
    $('#og_min').val(1.030);
    $('#og_max').val(1.050);
    $('#fg_min').val(1.005);
    $('#fg_max').val(1.010);
    $('#ibu_min').val(20);
    $('#ibu_max').val(30);
    $('#color_min').val(52);
    $('#color_max').val(79);
    $('#carb_min').val(2.0);
    $('#carb_max').val(2.5);
    $('#abv_min').val(4.0);
    $('#abv_max').val(5.0);
    $('#notes').val('');
    $('#profile').val('');
    $('#ingredients').val('');
    $('#examples').val('');
    $('#popupWindow').jqxWindow('open');
   });
   impButton.click(function(event) {
    window.location.href = 'import_ingredients.php?select=styles';
   });
   expButton.click(function(event) {
    window.open('export_styles.php');
   });
  },
  ready: function () {
   $("#jqxgrid").jqxGrid('localizestrings', localizationobj);
  },
  filterable: true,
  showfilterrow: true,
  columns: [
   { text: 'Gids', datafield: 'style_guide', width: 100, filtertype: 'list' },
   { text: 'Groep', datafield: 'style_letter', width: 30, filtertype: 'list' },
   { text: 'Style Name', menu: false, datafield: 'name', filtertype: 'textbox' },
   { text: 'OG', menu: false, datafield: 'og_min', width: 60, align: 'right', cellsalign: 'right', cellsformat: 'f3', filterable: false },
   { text: 'OG', menu: false, datafield: 'og_max', width: 60, align: 'right', cellsalign: 'right', cellsformat: 'f3', filterable: false },
   { text: 'FG', menu: false, datafield: 'fg_min', width: 60, align: 'right', cellsalign: 'right', cellsformat: 'f3', filterable: false },
   { text: 'FG', menu: false, datafield: 'fg_max', width: 60, align: 'right', cellsalign: 'right', cellsformat: 'f3', filterable: false },
   { text: 'IBU', menu: false, datafield: 'ibu_min', width: 50, align: 'right', cellsalign: 'right', cellsformat: 'f0', filterable: false },
   { text: 'IBU', menu: false, datafield: 'ibu_max', width: 50, align: 'right', cellsalign: 'right', cellsformat: 'f0', filterable: false },
   { text: 'EBC', menu: false, datafield: 'color_min', width: 50, align: 'right', cellsalign: 'right', cellsformat: 'f0', filterable: false },
   { text: 'EBC', menu: false, datafield: 'color_max', width: 50, align: 'right', cellsalign: 'right', cellsformat: 'f0', filterable: false },
   { text: 'Co2', menu: false, datafield: 'carb_min', width: 50, align: 'right', cellsalign: 'right', cellsformat: 'f1', filterable: false },
   { text: 'Co2', menu: false, datafield: 'carb_max', width: 50, align: 'right', cellsalign: 'right', cellsformat: 'f1', filterable: false },
   { text: 'ABV', menu: false, datafield: 'abv_min', width: 50, align: 'right', cellsalign: 'right', cellsformat: 'f1', filterable: false },
   { text: 'ABV', menu: false, datafield: 'abv_max', width: 50, align: 'right', cellsalign: 'right', cellsformat: 'f1', filterable: false },
   { text: '', menu: false, datafield: 'Edit', width: 100, align: 'center', columntype: 'button', filterable: false, cellsrenderer: function() {
    return 'Wijzig';
    }, buttonclick: function(row) {
     // open the popup window when the user clicks a button.
     editrow = row;
     // get the clicked row's data and initialize the input fields.
     dataRecord = $('#jqxgrid').jqxGrid('getrowdata', editrow);
     $('#name').val(dataRecord.name);
     $('#category').val(dataRecord.category);
     $('#category_number').val(dataRecord.category_number);
     $('#style_letter').val(dataRecord.style_letter);
     $('#style_guide').val(dataRecord.style_guide);
     $('#type').val(dataRecord.type);
     $('#og_min').val(dataRecord.og_min);
     $('#og_max').val(dataRecord.og_max);
     $('#fg_min').val(dataRecord.fg_min);
     $('#fg_max').val(dataRecord.fg_max);
     $('#ibu_min').val(dataRecord.ibu_min);
     $('#ibu_max').val(dataRecord.ibu_max);
     $('#color_min').val(dataRecord.color_min);
     $('#color_max').val(dataRecord.color_max);
     $('#carb_min').val(dataRecord.carb_min);
     $('#carb_max').val(dataRecord.carb_max);
     $('#abv_min').val(dataRecord.abv_min);
     $('#abv_max').val(dataRecord.abv_max);
     $('#notes').val(dataRecord.notes);
     $('#profile').val(dataRecord.profile);
     $('#ingredients').val(dataRecord.ingredients);
     $('#examples').val(dataRecord.examples);
     // show the popup window.
     $('#popupWindow').jqxWindow('open');
    }
   }
  ]
 });
 // initialize the popup window and buttons.
 $('#popupWindow').jqxWindow({
  width: 1050,
  position: { x: 110, y: 30 },
  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 });
 $('#Save').jqxButton({ template: 'success', width: '90px', theme: theme });
 // update the edited row when the user clicks the 'Save' button.
 $('#Save').click(function() {
  var row, rowID = -1;
  if (editrow >= 0) {
   rowID = $('#jqxgrid').jqxGrid('getrowid', editrow);
  }
  row = {
   record: rowID,
   name: $('#name').val(),
   category: $('#category').val(),
   category_number: parseFloat($('#category_number').jqxNumberInput('decimal')),
   style_letter: $('#style_letter').val(),
   style_guide: $('#style_guide').val(),
   type: $('#type').val(),
   og_min: parseFloat($('#og_min').jqxNumberInput('decimal')),
   og_max: parseFloat($('#og_max').jqxNumberInput('decimal')),
   fg_min: parseFloat($('#fg_min').jqxNumberInput('decimal')),
   fg_max: parseFloat($('#fg_max').jqxNumberInput('decimal')),
   ibu_min: parseFloat($('#ibu_min').jqxNumberInput('decimal')),
   ibu_max: parseFloat($('#ibu_max').jqxNumberInput('decimal')),
   color_min: parseFloat($('#color_min').jqxNumberInput('decimal')),
   color_max: parseFloat($('#color_max').jqxNumberInput('decimal')),
   carb_min: parseFloat($('#carb_min').jqxNumberInput('decimal')),
   carb_max: parseFloat($('#carb_max').jqxNumberInput('decimal')),
   abv_min: parseFloat($('#abv_min').jqxNumberInput('decimal')),
   abv_max: parseFloat($('#abv_max').jqxNumberInput('decimal')),
   notes: $('#notes').val(),
   profile: $('#profile').val(),
   ingredients: $('#ingredients').val(),
   examples: $('#examples').val()
  };
  if (editrow >= 0) {
   $('#jqxgrid').jqxGrid('updaterow', rowID, row);
  } else {
   $('#jqxgrid').jqxGrid('addrow', null, row);
  }
  $('#popupWindow').jqxWindow('hide');
 });
 createDelElements();
});

mercurial