Production:->Recent Average Coffee Production Print '); output.writeStartElement("html"); output.writeAttribute("xmlns", "http://www.w3.org/1999/xhtml"); output.writeStartElement("head"); output.writeTextElement("title", "Recent Average Coffee Production"); output.writeEndElement(); output.writeStartElement("body"); output.writeTextElement("h1", "Recent Average Coffee Production"); switch(unitBox.currentIndex) { case 0: output.writeTextElement("p", "This is a report of average coffee production per " + scaleBox.text + " days in kilograms over the past " + daysBox.text + " days."); break; case 1: output.writeTextElement("p", "This is a report of average coffee production per " + scaleBox.text + " days in pounds over the past " + daysBox.text + " days."); break; } output.writeStartElement("table"); output.writeAttribute("rules", "groups"); output.writeAttribute("cellpadding", "3px"); output.writeStartElement("thead"); output.writeStartElement("tr"); output.writeTextElement("th", "Roasted Coffee"); output.writeTextElement("th", "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", "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(); }); ]]>