Production:->Production Summary
');
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]);
});
]]>