Production:->Production Summary Print '); output.writeStartElement("html"); output.writeAttribute("xmlns", "http://www.w3.org/1999/xhtml"); output.writeStartElement("head"); output.writeTextElement("title", TTR("dailyproduction", "Production Summary")); output.writeEndElement(); output.writeStartElement("body"); var cdt = new Date(Date.now()); output.writeTextElement("p", cdt.toLocaleDateString(TTR("reports", "en-US")) + " " + cdt.toLocaleTimeString(TTR("reports", "en-US"))); var dateRange = dateSelect.currentRange(); var startDate = dateRange[0]; var endDate = dateRange[dateRange.length - 1]; output.writeTextElement("h1", TTR("dailyproduction", "Production Summary: ") + startDate + " - " + endDate); var conversion = 1; var unitText = TTR("dailyproduction", "Lb"); if(unitBox.currentIndex == 0) { conversion = 2.2; unitText = TTR("dailyproduction", "Kg"); } var transaction_filter; var approval_filter; switch(batchType.currentIndex) { case 0: transaction_filter = ""; break; case 1: transaction_filter = " AND transaction_type = 'ROAST'"; break; case 2: transaction_filter = " AND transaction_type = 'SAMPLEROAST'"; break; } switch(approval.currentIndex) { case 0: approval_filter = ""; break; case 1: approval_filter = " AND approval = true"; break; case 2: approval_filter = " AND approval = false"; break; } var query = new QSqlQuery(); query.prepare("SELECT count(1), sum(unroasted_total_quantity) / :c1, sum(roasted_quantity) / :c2 FROM roasting_log WHERE time >= :sd AND time < :ed ::date + interval '1 day'" + transaction_filter + approval_filter); query.bind(":c1", conversion); query.bind(":c2", conversion); query.bind(":sd", startDate); query.bind(":ed", endDate); query.exec(); query.next(); var batchesRoasted = query.value(0); var unroastedSum = query.value(1); var roastedSum = query.value(2); output.writeTextElement("p", "" + roastedSum + " " + unitText + TTR("dailyproduction", " roasted from ") + unroastedSum + " " + unitText + TTR("dailyproduction", " green in ") + batchesRoasted + TTR("dailyproduction", " batches.")); query.prepare("SELECT time::date AS date, count(1), sum(unroasted_total_quantity) / :c1, sum(roasted_quantity) / :c2 FROM roasting_log WHERE time >= :sd AND time < :ed ::date + interval '1 day'" + transaction_filter + approval_filter + " GROUP BY date ORDER BY date ASC"); query.bind(":c1", conversion); query.bind(":c2", conversion); query.bind(":sd", startDate); query.bind(":ed", endDate); query.exec(); output.writeStartElement("table"); output.writeAttribute("rules", "groups"); output.writeAttribute("cellpadding", "3px"); output.writeStartElement("thead"); output.writeStartElement("tr"); output.writeTextElement("th", TTR("dailyproduction", "Date")); output.writeTextElement("th", TTR("dailyproduction", "Batches")); output.writeTextElement("th", TTR("dailyproduction", "Unroasted (") + unitText + ")"); output.writeTextElement("th", TTR("dailyproduction", "Roasted (") + unitText + ")"); output.writeEndElement(); output.writeEndElement(); output.writeStartElement("tbody"); while(query.next()) { output.writeStartElement("tr"); output.writeStartElement("td"); output.writeStartElement("a"); output.writeAttribute("href", "typica://script/d" + query.value(0)); output.writeCDATA(query.value(0)); output.writeEndElement(); output.writeEndElement(); output.writeTextElement("td", query.value(1)); output.writeTextElement("td", query.value(2)); output.writeTextElement("td", query.value(3)); output.writeEndElement(); } output.writeEndElement(); output.writeStartElement("tfoot"); output.writeStartElement("tr"); output.writeStartElement("td"); output.writeTextElement("strong", TTR("dailyproduction", "Totals:")); output.writeEndElement(); output.writeTextElement("td", batchesRoasted); output.writeTextElement("td", unroastedSum); output.writeTextElement("td", roastedSum); output.writeEndElement(); output.writeEndElement(); output.writeEndElement(); output.writeEndElement(); output.writeEndElement(); output.writeEndDocument(); view.setContent(buffer); buffer.close(); query = query.invalidate(); } refresh(); dateSelect.rangeUpdated.connect(refresh); var notifier = Application.subscribe("roastinglogchange"); notifier.notify.connect(function() { refresh(); }); view.scriptLinkClicked.connect(function(url) { var arg = url.slice(1, url.length).split("-"); var details = createReport("dailyproductiondetail.xml"); var selector = findChildObject(details, "reportdate"); selector.setDate(arg[0], arg[1], arg[2]); }); ]]>