| 
				
			 | 
			
			
				
				@@ -56,7 +56,11 @@ 
			 | 
		
		
	
		
			
			| 
				56
			 | 
			
				56
			 | 
			
			
				
				             </page>
 
			 | 
		
		
	
		
			
			| 
				57
			 | 
			
				57
			 | 
			
			
				
				             <page>
 
			 | 
		
		
	
		
			
			| 
				58
			 | 
			
				58
			 | 
			
			
				
				                 <layout type="vertical">
 
			 | 
		
		
	
		
			
			| 
				59
			 | 
			
				
			 | 
			
			
				
				-                    
 
			 | 
		
		
	
		
			
			| 
				
			 | 
			
				59
			 | 
			
			
				
				+                    <webview id="batchTag" />
 
			 | 
		
		
	
		
			
			| 
				
			 | 
			
				60
			 | 
			
			
				
				+                    <layout type="horizontal">
 
			 | 
		
		
	
		
			
			| 
				
			 | 
			
				61
			 | 
			
			
				
				+                        <printerselector id="printerlist" />
 
			 | 
		
		
	
		
			
			| 
				
			 | 
			
				62
			 | 
			
			
				
				+                        <button name="Print" id="printbutton" type="push" />
 
			 | 
		
		
	
		
			
			| 
				
			 | 
			
				63
			 | 
			
			
				
				+                    </layout>
 
			 | 
		
		
	
		
			
			| 
				60
			 | 
			
				64
			 | 
			
			
				
				                 </layout>
 
			 | 
		
		
	
		
			
			| 
				61
			 | 
			
				65
			 | 
			
			
				
				             </page>
 
			 | 
		
		
	
		
			
			| 
				62
			 | 
			
				66
			 | 
			
			
				
				         </layout>
 
			 | 
		
		
	
	
		
			
			| 
				
			 | 
			
			
				
				@@ -224,7 +228,7 @@ 
			 | 
		
		
	
		
			
			| 
				224
			 | 
			
				228
			 | 
			
			
				
				                 machine = mref;
 
			 | 
		
		
	
		
			
			| 
				225
			 | 
			
				229
			 | 
			
			
				
				                 batchTime = tref;
 
			 | 
		
		
	
		
			
			| 
				226
			 | 
			
				230
			 | 
			
			
				
				                 var query = new QSqlQuery();
 
			 | 
		
		
	
		
			
			| 
				227
			 | 
			
				
			 | 
			
			
				
				-                var q = "WITH names AS ( WITH greens AS ( SELECT unnest(unroasted_id) AS gitem, machine, time FROM roasting_log WHERE machine = :machine AND time = :time) SELECT array_agg((SELECT name FROM items WHERE id = greens.gitem) || ' (' || gitem || ')') AS names, max(greens.machine) AS machine, max(greens.time) AS time FROM greens LIMIT 1) SELECT (SELECT name FROM items WHERE id = roasted_id), duration, names, unroasted_quantity, (unroasted_total_quantity/:c1)::numeric(12,3), (roasted_quantity/:c2)::numeric(12,3), approval, files, annotation, (SELECT file FROM files WHERE id = files[1]) AS file, additional_data FROM names, roasting_log WHERE roasting_log.machine = names.machine AND roasting_log.time = names.time";
 
			 | 
		
		
	
		
			
			| 
				
			 | 
			
				231
			 | 
			
			
				
				+                var q = "WITH names AS ( WITH greens AS ( SELECT unnest(unroasted_id) AS gitem, machine, time FROM roasting_log WHERE machine = :machine AND time = :time) SELECT array_agg((SELECT name FROM items WHERE id = greens.gitem) || ' (' || gitem || ')') AS names, max(greens.machine) AS machine, max(greens.time) AS time FROM greens LIMIT 1) SELECT (SELECT name FROM items WHERE id = roasted_id), duration, names, unroasted_quantity, (unroasted_total_quantity/:c1)::numeric(12,3), (roasted_quantity/:c2)::numeric(12,3), approval, files, annotation, (SELECT file FROM files WHERE id = files[1]) AS file, additional_data, roasted_id FROM names, roasting_log WHERE roasting_log.machine = names.machine AND roasting_log.time = names.time";
 
			 | 
		
		
	
		
			
			| 
				228
			 | 
			
				232
			 | 
			
			
				
				                 query.prepare(q);
 
			 | 
		
		
	
		
			
			| 
				229
			 | 
			
				233
			 | 
			
			
				
				                 query.bind(":machine", mref);
 
			 | 
		
		
	
		
			
			| 
				230
			 | 
			
				234
			 | 
			
			
				
				                 query.bind(":time", tref);
 
			 | 
		
		
	
	
		
			
			| 
				
			 | 
			
			
				
				@@ -459,6 +463,7 @@ 
			 | 
		
		
	
		
			
			| 
				459
			 | 
			
				463
			 | 
			
			
				
				                 annotationField.plainText = query.value(8);
 
			 | 
		
		
	
		
			
			| 
				460
			 | 
			
				464
			 | 
			
			
				
				                 unitEdit.text = unitText;
 
			 | 
		
		
	
		
			
			| 
				461
			 | 
			
				465
			 | 
			
			
				
				                 roastedEdit.text = query.value(5);
 
			 | 
		
		
	
		
			
			| 
				
			 | 
			
				466
			 | 
			
			
				
				+                drawTag(query.value(11), query.value(0));
 
			 | 
		
		
	
		
			
			| 
				462
			 | 
			
				467
			 | 
			
			
				
				                 query = query.invalidate();
 
			 | 
		
		
	
		
			
			| 
				463
			 | 
			
				468
			 | 
			
			
				
				             }
 
			 | 
		
		
	
		
			
			| 
				464
			 | 
			
				469
			 | 
			
			
				
				             var saveMenu = findChildObject(this, 'save');
 
			 | 
		
		
	
	
		
			
			| 
				
			 | 
			
			
				
				@@ -494,6 +499,64 @@ 
			 | 
		
		
	
		
			
			| 
				494
			 | 
			
				499
			 | 
			
			
				
				                 displayInfo(TTR("batchDetails", "Batch Data Saved"),
 
			 | 
		
		
	
		
			
			| 
				495
			 | 
			
				500
			 | 
			
			
				
				                             TTR("roastspec", "New batch details saved"));
 
			 | 
		
		
	
		
			
			| 
				496
			 | 
			
				501
			 | 
			
			
				
				             });
 
			 | 
		
		
	
		
			
			| 
				
			 | 
			
				502
			 | 
			
			
				
				+            var batchTag = findChildObject(this, 'batchTag');
 
			 | 
		
		
	
		
			
			| 
				
			 | 
			
				503
			 | 
			
			
				
				+            var printers = findChildObject(this, 'printerlist');
 
			 | 
		
		
	
		
			
			| 
				
			 | 
			
				504
			 | 
			
			
				
				+            printers.currentIndex = printers.findText(QSettings.value("script/batchtagprinter"));
 
			 | 
		
		
	
		
			
			| 
				
			 | 
			
				505
			 | 
			
			
				
				+            printers['currentIndexChanged(int)'].connect(function() {
 
			 | 
		
		
	
		
			
			| 
				
			 | 
			
				506
			 | 
			
			
				
				+                QSettings.setValue("script/batchtagprinter", printers.currentText);
 
			 | 
		
		
	
		
			
			| 
				
			 | 
			
				507
			 | 
			
			
				
				+            });
 
			 | 
		
		
	
		
			
			| 
				
			 | 
			
				508
			 | 
			
			
				
				+            var printbutton = findChildObject(this, 'printbutton');
 
			 | 
		
		
	
		
			
			| 
				
			 | 
			
				509
			 | 
			
			
				
				+            printbutton.clicked.connect(function() {
 
			 | 
		
		
	
		
			
			| 
				
			 | 
			
				510
			 | 
			
			
				
				+                batchTag.print(printers.currentText);
 
			 | 
		
		
	
		
			
			| 
				
			 | 
			
				511
			 | 
			
			
				
				+            });
 
			 | 
		
		
	
		
			
			| 
				
			 | 
			
				512
			 | 
			
			
				
				+            function drawTag(item, name) {
 
			 | 
		
		
	
		
			
			| 
				
			 | 
			
				513
			 | 
			
			
				
				+                var buffer = new QBuffer;
 
			 | 
		
		
	
		
			
			| 
				
			 | 
			
				514
			 | 
			
			
				
				+                buffer.open(3);
 
			 | 
		
		
	
		
			
			| 
				
			 | 
			
				515
			 | 
			
			
				
				+                var output = new XmlWriter(buffer);
 
			 | 
		
		
	
		
			
			| 
				
			 | 
			
				516
			 | 
			
			
				
				+                output.writeStartDocument("1.0");
 
			 | 
		
		
	
		
			
			| 
				
			 | 
			
				517
			 | 
			
			
				
				+                output.writeDTD('<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1 plus MathML 2.0 plus SVG 1.1//EN" "http://www.w3.org/2002/04/xhtml-math-svg.dtd">');
 
			 | 
		
		
	
		
			
			| 
				
			 | 
			
				518
			 | 
			
			
				
				+                output.writeStartElement("html");
 
			 | 
		
		
	
		
			
			| 
				
			 | 
			
				519
			 | 
			
			
				
				+                output.writeAttribute("xmlns", "http://www.w3.org/1999/xhtml");
 
			 | 
		
		
	
		
			
			| 
				
			 | 
			
				520
			 | 
			
			
				
				+                output.writeStartElement("head");
 
			 | 
		
		
	
		
			
			| 
				
			 | 
			
				521
			 | 
			
			
				
				+                var styleFile = new QFile(QSettings.value("config") + "/Scripts/batchtag.css");
 
			 | 
		
		
	
		
			
			| 
				
			 | 
			
				522
			 | 
			
			
				
				+                styleFile.open(1);
 
			 | 
		
		
	
		
			
			| 
				
			 | 
			
				523
			 | 
			
			
				
				+                output.writeTextElement("style", styleFile.readToString());
 
			 | 
		
		
	
		
			
			| 
				
			 | 
			
				524
			 | 
			
			
				
				+                styleFile.close();
 
			 | 
		
		
	
		
			
			| 
				
			 | 
			
				525
			 | 
			
			
				
				+                output.writeStartElement("script");
 
			 | 
		
		
	
		
			
			| 
				
			 | 
			
				526
			 | 
			
			
				
				+                scriptFile = new QFile(QSettings.value("config") + "/Scripts/qrcode.js");
 
			 | 
		
		
	
		
			
			| 
				
			 | 
			
				527
			 | 
			
			
				
				+                scriptFile.open(1);
 
			 | 
		
		
	
		
			
			| 
				
			 | 
			
				528
			 | 
			
			
				
				+                output.writeCDATA(scriptFile.readToString());
 
			 | 
		
		
	
		
			
			| 
				
			 | 
			
				529
			 | 
			
			
				
				+                scriptFile.close();
 
			 | 
		
		
	
		
			
			| 
				
			 | 
			
				530
			 | 
			
			
				
				+                output.writeEndElement();
 
			 | 
		
		
	
		
			
			| 
				
			 | 
			
				531
			 | 
			
			
				
				+                output.writeEndElement();
 
			 | 
		
		
	
		
			
			| 
				
			 | 
			
				532
			 | 
			
			
				
				+                output.writeStartElement("body");
 
			 | 
		
		
	
		
			
			| 
				
			 | 
			
				533
			 | 
			
			
				
				+                output.writeStartElement("h1");
 
			 | 
		
		
	
		
			
			| 
				
			 | 
			
				534
			 | 
			
			
				
				+                output.writeCharacters(name + " (" + item + ")");
 
			 | 
		
		
	
		
			
			| 
				
			 | 
			
				535
			 | 
			
			
				
				+                output.writeEndElement();
 
			 | 
		
		
	
		
			
			| 
				
			 | 
			
				536
			 | 
			
			
				
				+                output.writeTextElement("span", "Roasted at: " + batchTime);
 
			 | 
		
		
	
		
			
			| 
				
			 | 
			
				537
			 | 
			
			
				
				+                output.writeTextElement("span", "On machine: " + machine);
 
			 | 
		
		
	
		
			
			| 
				
			 | 
			
				538
			 | 
			
			
				
				+                output.writeTextElement("span", "Batch file: " + fileID);
 
			 | 
		
		
	
		
			
			| 
				
			 | 
			
				539
			 | 
			
			
				
				+                output.writeStartElement("div");
 
			 | 
		
		
	
		
			
			| 
				
			 | 
			
				540
			 | 
			
			
				
				+                output.writeAttribute("id", "container");
 
			 | 
		
		
	
		
			
			| 
				
			 | 
			
				541
			 | 
			
			
				
				+                output.writeEndElement();
 
			 | 
		
		
	
		
			
			| 
				
			 | 
			
				542
			 | 
			
			
				
				+                output.writeStartElement("script");
 
			 | 
		
		
	
		
			
			| 
				
			 | 
			
				543
			 | 
			
			
				
				+                var tag = {g: "Typica", m: Number(machine), v: 1};
 
			 | 
		
		
	
		
			
			| 
				
			 | 
			
				544
			 | 
			
			
				
				+                tag.t = batchTime;
 
			 | 
		
		
	
		
			
			| 
				
			 | 
			
				545
			 | 
			
			
				
				+                tag.f = Number(fileID);
 
			 | 
		
		
	
		
			
			| 
				
			 | 
			
				546
			 | 
			
			
				
				+                var scriptData = 'var width = document.getElementById("container").offsetWidth;';
 
			 | 
		
		
	
		
			
			| 
				
			 | 
			
				547
			 | 
			
			
				
				+                scriptData += 'var qrcode = new QRCode({content: \'';
 
			 | 
		
		
	
		
			
			| 
				
			 | 
			
				548
			 | 
			
			
				
				+                scriptData += JSON.stringify(tag);
 
			 | 
		
		
	
		
			
			| 
				
			 | 
			
				549
			 | 
			
			
				
				+                scriptData += '\', width: width, height: width});';
 
			 | 
		
		
	
		
			
			| 
				
			 | 
			
				550
			 | 
			
			
				
				+                scriptData += 'var svg = qrcode.svg();';
 
			 | 
		
		
	
		
			
			| 
				
			 | 
			
				551
			 | 
			
			
				
				+                scriptData += 'document.getElementById("container").innerHTML = svg;';
 
			 | 
		
		
	
		
			
			| 
				
			 | 
			
				552
			 | 
			
			
				
				+                output.writeCDATA(scriptData);
 
			 | 
		
		
	
		
			
			| 
				
			 | 
			
				553
			 | 
			
			
				
				+                output.writeEndElement();
 
			 | 
		
		
	
		
			
			| 
				
			 | 
			
				554
			 | 
			
			
				
				+                output.writeEndElement();
 
			 | 
		
		
	
		
			
			| 
				
			 | 
			
				555
			 | 
			
			
				
				+                output.writeEndElement();
 
			 | 
		
		
	
		
			
			| 
				
			 | 
			
				556
			 | 
			
			
				
				+                output.writeEndDocument();
 
			 | 
		
		
	
		
			
			| 
				
			 | 
			
				557
			 | 
			
			
				
				+                batchTag.setContent(buffer);
 
			 | 
		
		
	
		
			
			| 
				
			 | 
			
				558
			 | 
			
			
				
				+                buffer.close();
 
			 | 
		
		
	
		
			
			| 
				
			 | 
			
				559
			 | 
			
			
				
				+            };
 
			 | 
		
		
	
		
			
			| 
				497
			 | 
			
				560
			 | 
			
			
				
				         ]]>
 
			 | 
		
		
	
		
			
			| 
				498
			 | 
			
				561
			 | 
			
			
				
				     </program>
 
			 | 
		
		
	
		
			
			| 
				499
			 | 
			
				562
			 | 
			
			
				
				 </window>
 
			 |