Production:->Recent Average Coffee Production
');
output.writeStartElement("html");
output.writeAttribute("xmlns", "http://www.w3.org/1999/xhtml");
output.writeStartElement("head");
output.writeTextElement("title", TTR("productionreport", "Recent Average Coffee Production"));
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")));
output.writeTextElement("h1", TTR("productionreport", "Recent Average Coffee Production"));
switch(unitBox.currentIndex)
{
case 0:
output.writeTextElement("p", TTR("productionreport", "This is a report of average coffee production per ") + scaleBox.text +
TTR("productionreport", " days in kilograms over the past ") + daysBox.text +
TTR("productionreport", " days."));
break;
case 1:
output.writeTextElement("p", TTR("productionreport", "This is a report of average coffee production per ") + scaleBox.text +
TTR("productionreport", " days in pounds over the past ") + daysBox.text +
TTR("productionreport", " days."));
break;
}
output.writeStartElement("table");
output.writeAttribute("rules", "groups");
output.writeAttribute("cellpadding", "3px");
output.writeStartElement("thead");
output.writeStartElement("tr");
output.writeTextElement("th", TTR("productionreport", "Roasted Coffee"));
output.writeTextElement("th", TTR("productionreport", "Weekly Use"));
output.writeEndElement();
output.writeEndElement();
output.writeStartElement("tbody");
var batchClause = "";
switch(batchType.currentIndex) {
case 1:
batchClause = " AND transaction_type = 'ROAST'";
break;
case 2:
batchClause = " AND transaction_type = 'SAMPLEROAST'";
break;
}
var q = "SELECT (SELECT name FROM items WHERE id = roasted_id) AS name, ((sum(roasted_quantity) / :scale) / :conversion)::numeric(18,2) AS weekly FROM roasting_log WHERE time > current_date - integer '" + daysBox.text + "' AND roasted_quantity > 0 " + batchClause + " GROUP BY roasted_id ORDER BY "
switch(sortBox.currentIndex)
{
case 0:
q += "name ASC";
break;
case 1:
q += "name DESC";
break;
case 2:
q += "weekly ASC";
break;
case 3:
q += "weekly DESC";
break;
}
var query = new QSqlQuery();
query.prepare(q);
switch(unitBox.currentIndex)
{
case 0:
query.bind(":conversion", 2.2);
break;
case 1:
query.bind(":conversion", 1);
break;
}
query.bind(":scale", Number(daysBox.text)/Number(scaleBox.text));
query.exec();
while(query.next())
{
output.writeStartElement("tr");
output.writeTextElement("td", query.value(0));
output.writeTextElement("td", query.value(1));
output.writeEndElement();
}
output.writeEndElement();
output.writeStartElement("tfoot")
output.writeTextElement("th", TTR("productionreport", "Total:"));
query.prepare("SELECT ((sum(roasted_quantity) / :scale) / :conversion)::numeric(18,2) FROM roasting_log WHERE time > current_date - integer '" + daysBox.text + "' AND roasted_quantity > 0 " + batchClause);
switch(unitBox.currentIndex)
{
case 0:
query.bind(":conversion", 2.2);
break;
case 1:
query.bind(":conversion", 1);
break;
}
query.bind(":scale", Number(daysBox.text)/Number(scaleBox.text));
query.exec();
query.next();
output.writeTextElement("td", query.value(0));
query = query.invalidate();
output.writeEndElement();
output.writeEndElement();
output.writeEndElement();
output.writeEndElement();
output.writeEndDocument();
report.setContent(buffer);
buffer.close();
}
refresh();
sortBox['currentIndexChanged(int)'].connect(function() {
QSettings.setValue("rwacp_sort", sortBox.currentIndex);
refresh();
});
unitBox['currentIndexChanged(int)'].connect(function() {
QSettings.setValue("script/report_unit", unitBox.currentIndex);
refresh();
});
var notifier = Application.subscribe("roastinglogchange");
notifier.notify.connect(function() {
refresh();
});
]]>