Added import brew json logfiles

Wed, 27 Feb 2019 14:39:25 +0100

author
Michiel Broek <mbroek@mbse.eu>
date
Wed, 27 Feb 2019 14:39:25 +0100
changeset 297
5e2424bfbc4a
parent 296
69fadd1aded2
child 298
307640ba6ab6

Added import brew json logfiles

www/Makefile file | annotate | diff | comparison | revisions
www/getbrewlog.php file | annotate | diff | comparison | revisions
www/includes/global.inc.php file | annotate | diff | comparison | revisions
www/js/log_brew.js file | annotate | diff | comparison | revisions
www/js/prod_impbrew.js file | annotate | diff | comparison | revisions
www/prod_impbrew.php file | annotate | diff | comparison | revisions
www/upl_brew.php file | annotate | diff | comparison | revisions
--- a/www/Makefile	Tue Feb 26 16:18:16 2019 +0100
+++ b/www/Makefile	Wed Feb 27 14:39:25 2019 +0100
@@ -11,11 +11,11 @@
 		  inv_miscs.php inv_suppliers.php inv_waters.php inv_yeasts.php log_brew.php \
 		  log_fermentation.php mon_brewer.php mon_fermenter.php mon_node.php \
 		  prod_archive_code.php prod_archive_date.php prod_archive_name.php \
-		  prod_edit.php prod_export.php prod_inprod.php prod_new.php prod_print.php \
-		  prod_reduce.php profile_fermentation.php \
+		  prod_edit.php prod_export.php prod_impbrew.php prod_inprod.php prod_new.php \
+		  prod_print.php prod_reduce.php profile_fermentation.php \
 		  profile_mash.php profile_setup.php profile_styles.php profile_water.php \
 		  rec_edit.php rec_export.php rec_main.php rec_new.php rec_print.php \
-		  version.php
+		  upl_brew.php version.php
 SUB		= version.php.in images/* css/* jqwidgets/* jqwidgets/styles/* \
 		  jqwidgets/styles/images/* jqwidgets/globalization/* js/* \
 		  includes/* fpdf/* import/*
--- a/www/getbrewlog.php	Tue Feb 26 16:18:16 2019 +0100
+++ b/www/getbrewlog.php	Wed Feb 27 14:39:25 2019 +0100
@@ -13,22 +13,22 @@
 }
 mysqli_set_charset($connect, "utf8" );
 
-$query = "SELECT * FROM log_brews WHERE product_code='".$code."' ORDER BY datetime;";
+$query = "SELECT * FROM log_brews WHERE code='".$code."' ORDER BY datetime;";
 $result = mysqli_query($connect, $query) or die("SQL Error 1: " . mysqli_error($connect));
 while ($row = mysqli_fetch_array($result, MYSQLI_ASSOC)) {
 	$lines[] = array(
 		'record' => $row['record'],
 		'date' => substr($row['datetime'],0,16),
 		'version' => $row['version'],
-		'code' => $row['product_code'],
-		'name' => $row['product_name'],
-		'pv_mlt' => $row['temperature_mlt'],
-		'pv_bk' => $row['temperature_bk'],
-		'pv_hlt' => $row['temperature_hlt'],
-		'pv_room' => $row['temperature_room'],
-		'sp_mlt' => $row['setpoint_mlt'],
-		'sp_bk' => $row['setpoint_bk'],
-		'sp_hlt' => $row['setpoint_hlt'],
+		'code' => $row['code'],
+		'name' => $row['name'],
+		'pv_mlt' => $row['pv_mlt'],
+		'pv_hlt' => $row['pv_hlt'],
+		'pv_room' => $row['pv_room'],
+		'sp_mlt' => $row['sp_mlt'],
+		'sp_hlt' => $row['sp_hlt'],
+		'pwm_mlt' => $row['pwm_mlt'],
+		'pwm_hlt' => $row['pwm_hlt'],
 		'event' => $row['event']
 	);
 }
--- a/www/includes/global.inc.php	Tue Feb 26 16:18:16 2019 +0100
+++ b/www/includes/global.inc.php	Wed Feb 27 14:39:25 2019 +0100
@@ -167,6 +167,8 @@
   <script src="jqwidgets/jqxchart.rangeselector.js"></script>
   <script src="jqwidgets/jqxdraw.js"></script>
   <script src="jqwidgets/jqxprogressbar.js"></script>
+  <script src="jqwidgets/jqxfileupload.js"></script>
+  <script src="jqwidgets/jqxpanel.js"></script>
   <script src="jqwidgets/globalization/globalize.js"></script>
   <script src="js/global.js"></script>
 <?php
@@ -224,7 +226,7 @@
        </li>
        <li>Import
         <ul>
-	 <li>Brouw log</li>
+	 <li><a href="prod_impbrew.php">Brouw log</a></li>
 	 <li>Etiket</li>
         </ul>
        </li>
--- a/www/js/log_brew.js	Tue Feb 26 16:18:16 2019 +0100
+++ b/www/js/log_brew.js	Wed Feb 27 14:39:25 2019 +0100
@@ -46,12 +46,12 @@
 			{ name: "code", type: "string" },
 			{ name: "name", type: "string" },
 			{ name: "pv_mlt", type: "float" },
-			{ name: "pv_bk", type: "float" },
 			{ name: "pv_hlt", type: "float" },
 			{ name: "pv_room", type: "float" },
 			{ name: "sp_mlt", type: "float" },
-			{ name: "sp_bk", type: "float" },
 			{ name: "sp_hlt", type: "float" },
+			{ name: "pwm_mlt", type: "int" },
+			{ name: "pwm_hlt", type: "int" },
 			{ name: "event", type: "string" }
 		],
 		url: 'getbrewlog.php?code=' + my_code
@@ -95,8 +95,6 @@
 				series: [
 					{ dataField: "pv_mlt", lineWidth: 2, displayText: "MLT" },
 					{ dataField: "sp_mlt", lineWidth: 1, displayText: "mlt", opacity: 0.7 },
-					{ dataField: "pv_bk", lineWidth: 2, displayText: "BK" },
-					{ dataField: "sp_bk", lineWidth: 1, displayText: "bk", opacity: 0.7 },
 					{ dataField: "pv_hlt", lineWidth: 1, displayText: "HLT" },
 					{ dataField: "sp_hlt", lineWidth: 1, displayText: "hlt", opacity: 0.7 },
 					{ dataField: "pv_room", lineWidth: 1, displayText: "Room", opacity: 0.5 }
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/www/js/prod_impbrew.js	Wed Feb 27 14:39:25 2019 +0100
@@ -0,0 +1,56 @@
+/*****************************************************************************
+ * Copyright (C) 2019
+ *
+ * Michiel Broek <mbroek at mbse dot eu>
+ *
+ * This file is part of BMS
+ *
+ * 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.
+ *****************************************************************************/
+
+
+$(document).ready(function () {
+
+	$('#jqxFileUpload').jqxFileUpload({
+		width: 300,
+		browseTemplate: 'success',
+		cancelTemplate: 'inverse',
+		uploadTemplate: 'primary',
+		theme: theme,
+		multipleFilesUpload: false,
+		accept: 'application/json',
+		uploadUrl: 'upl_brew.php',
+		fileInputName: 'fileToUpload'
+	});
+	$('#eventsPanel').jqxPanel({
+		width: 800,
+		height: 200,
+		theme: theme
+	});
+	$('#jqxFileUpload').on('select', function (event) {
+		var args = event.args;
+		var fileName = args.file;
+		var fileSize = args.size;
+		$('#eventsPanel').jqxPanel('clearcontent');
+		$('#eventsPanel').jqxPanel('append', '<strong>' + event.type + ':</strong> ' + fileName + '  size: ' + fileSize + '<br />');
+	});
+	$('#jqxFileUpload').on('uploadEnd', function (event) {
+		var args = event.args;
+		var fileName = args.file;
+		var serverResponce = args.response;
+		$('#eventsPanel').jqxPanel('append', '<strong>' + event.type + ':</strong> ontvangen ' + fileName + '<br />' + serverResponce + '<br />');
+	});
+
+});
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/www/prod_impbrew.php	Wed Feb 27 14:39:25 2019 +0100
@@ -0,0 +1,16 @@
+<?php
+require_once($_SERVER['DOCUMENT_ROOT'].'/includes/global.inc.php');
+page_header('Product brouwlog import', 'prod_impbrew');
+?>
+
+   <div id="MainPanel">
+    <div style="float: left; margin-left: 240px; margin-top: 50px;">
+     <div align="center">Brouw log bestanden upload.</div><br>
+     <div id="eventsPanel"> </div>
+     <div style="float: left; margin-top: 10px;" id="jqxFileUpload"> </div>
+    </div>
+   </div>
+
+<?php
+page_footer();
+?>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/www/upl_brew.php	Wed Feb 27 14:39:25 2019 +0100
@@ -0,0 +1,123 @@
+<?php
+require_once('config.php');
+
+$target_dir = "tmp/";
+$target_file = $target_dir . basename($_FILES["fileToUpload"]["name"]);
+$uploadOk = 1;
+$imageFileType = pathinfo($target_file,PATHINFO_EXTENSION);
+
+// Check if file already exists
+if (file_exists($target_file)) {
+	echo "Fout 1: bestand bestaat al. ";
+	$uploadOk = 0;
+}
+// Check file size
+if ($_FILES["fileToUpload"]["size"] > 500000 && $uploadOk) {
+	echo "Fout 2: het bestand is te groot. ";
+	$uploadOk = 0;
+}
+// Allow certain file formats
+if ($imageFileType != "json" && $uploadOk) {
+	echo "Fout 3: alleen JSON bestanden toegestaan. ";
+	$uploadOk = 0;
+}
+// Check if $uploadOk is set to 0 by an error
+if ($uploadOk == 0) {
+	exit;
+}
+
+if (move_uploaded_file($_FILES["fileToUpload"]["tmp_name"], $target_file)) {
+	echo "Verwerken bestand ". basename( $_FILES["fileToUpload"]["name"]). "<br />";
+} else {
+	echo "Fout 4: er gieng iets fout met de upload.";
+	exit;
+}
+
+$json= file_get_contents($target_file);
+$brew = json_decode($json, true);
+$records =  count($brew);
+if ($records != 1) {
+	echo "Fout 5: dit is geen JSON brouw logfile";
+	exit;
+}
+
+$connect = mysqli_connect(DBASE_HOST, DBASE_USER, DBASE_PASS, DBASE_NAME);
+if (! $connect) {
+	echo "Fout 6: ".mysqli_connect_errno()." ".mysqli_connect_error();
+	exit;
+}
+mysqli_set_charset($connect, "utf8" );
+date_default_timezone_set('Europe/Amsterdam');
+
+foreach($brew as $brewdata) {
+
+	foreach($brewdata as $item) {
+		$temps  = $item['brewdata'];
+		$events = $item['annotations'];
+		$date   = date("Y-m-d H:i:s"   , strtotime($item['Date']));
+		$code   = strtok($item['Recipe'], " ");
+		$name   = strtok('\0');
+		$insert = 0;
+		$update = 0;
+		$delete = 0;
+
+		$sql = "SELECT uuid FROM products WHERE code='".$code."';";
+		$result = mysqli_query($connect, $sql) or die("SQL Error 1: " . mysqli_error($connect));
+		if ($row = mysqli_fetch_array($result, MYSQLI_ASSOC)) {
+			$uuid = $row['uuid'];
+		}
+		echo "Brouw: ".$code." ".$name."<br />";
+
+		$sql = "DELETE FROM log_brews WHERE code='".$code."';";
+		$result = mysqli_query($connect, $sql) or die("SQL Error 1: " . mysqli_error($connect));
+		$delete += mysqli_affected_rows($connect);
+
+		foreach($temps as $temp) {
+			// Create full datetime from the Label
+			$t = floatval(substr($temp['Label'], 0, 2)) * 60 + floatval(substr($temp['Label'], 3, 2));
+			$time = new DateTime($date);
+			$time->add(new DateInterval('PT' . $t . 'M'));
+			$stamp = $time->format('Y-m-d H:i:s');
+
+			$sql  = "INSERT INTO log_brews SET version='2";
+			$sql .= "', datetime='" . $stamp;
+			$sql .= "', uuid='" . $uuid;
+			$sql .= "', code='" . $code;
+			$sql .= "', name='" . mysqli_real_escape_string($connect, $name);
+			$sql .= "', pv_mlt='" . $temp['MLT_pv'];
+			$sql .= "', sp_mlt='" . $temp['MLT_sp'];
+			$sql .= "', pwm_mlt='" . $temp['MLT_pwm'];
+			if (isset($temp['HLT_pv']))
+				$sql .= "', pv_hlt='" . $temp['HLT_pv'];
+			if (isset($temp['HLT_sp']))
+				$sql .= "', sp_hlt='" . $temp['HLT_sp'];
+			if (isset($temp['HLT_pwm']))
+				$sql .= "', pwm_hlt='" . $temp['HLT_pwm'];
+			$sql .= "';";
+			$result = mysqli_query($connect, $sql) or die("SQL Error 1: " . mysqli_error($connect));
+			$insert += mysqli_affected_rows($connect);
+		}
+
+		// The events are annotations in the JSON file.
+		foreach($events as $event) {
+			$t = floatval(substr($event['value'], 0, 2)) * 60 + floatval(substr($event['value'], 3, 2));
+			$time = new DateTime($date);
+			$time->add(new DateInterval('PT' . $t . 'M'));
+			$stamp = $time->format('Y-m-d H:i:s');
+
+			$sql  = "UPDATE log_brews SET event='".mysqli_real_escape_string($connect, $event['label']['content'])."' WHERE ";
+			$sql .= "datetime='".$stamp."' AND uuid='".$uuid."';";
+			$result = mysqli_query($connect, $sql) or die("SQL Error 1: " . mysqli_error($connect));
+			$update += mysqli_affected_rows($connect);
+		}
+
+		$sql = "UPDATE products SET log_brew='1' WHERE code='".$code."';";
+		$result = mysqli_query($connect, $sql) or die("SQL Error 1: " . mysqli_error($connect));
+		$update += mysqli_affected_rows($connect);
+		echo "Database delete: ".$delete.", insert: ".$insert.", update: ".$update." records." . PHP_EOL;
+	}
+}
+// Don't clutter the upload directory.
+unlink($target_file);
+
+?>

mercurial