Production:->Previous Year Production Comparison By Month Print '); output.writeStartElement("html"); output.writeAttribute("xmlns", "http://www.w3.org/1999/xhtml"); output.writeStartElement("head"); output.writeTextElement("title", TTR("pytdprodcomp", "Previous Year Production Comparison By Month")); 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("pytdprodcomp", "Previous Year Production Comparison By Month")); switch(unitBox.currentIndex) { case 0: output.writeTextElement("p", TTR("pytdprodcomp", "This report compares total roasted coffee production in kilograms with the previous year on a monthly basis.")); break; case 1: output.writeTextElement("p", TTR("pytdprodcomp", "This report compares total roasted coffee production in pounds with the previous year on a monthly basis.")); break; } output.writeStartElement("table"); output.writeAttribute("style", "page-break-after:auto;"); output.writeAttribute("rules", "groups"); output.writeAttribute("cellpadding", "3px"); output.writeStartElement("thead"); output.writeStartElement("tr"); output.writeTextElement("th", TTR("pytdprodcomp", "Month")); var query = new QSqlQuery(); query.exec("SELECT EXTRACT(YEAR FROM 'now'::date) AS current_year"); query.next(); var current_year = query.value(0); output.writeTextElement("th", current_year-1); output.writeTextElement("th", current_year); output.writeTextElement("th", "Change"); output.writeEndElement(); output.writeEndElement(); output.writeStartElement("tbody"); var month_names = [TTR("pytdprodcomp", "January"), TTR("pytdprodcomp", "February"), TTR("pytdprodcomp", "March"), TTR("pytdprodcomp", "April"), TTR("pytdprodcomp", "May"), TTR("pytdprodcomp", "June"), TTR("pytdprodcomp", "July"), TTR("pytdprodcomp", "August"), TTR("pytdprodcomp", "September"), TTR("pytdprodcomp", "October"), TTR("pytdprodcomp", "November"), TTR("pytdprodcomp", "December")]; var current_data = new Array(); var previous_data = new Array(); for(var i = 0; i < 12; i++) { var q = "SELECT SUM(roasted_quantity) FROM roasting_log WHERE roasted_id IS NOT NULL AND time > '" q += current_year; q += "-"; q += 1+i; q += "-01' AND time < '"; if(i == 11) { q += 1+current_year; } else { q += current_year; } q += "-"; if(i == 11) { q += "01" } else { q += 2+i; } q += "-01'"; query.exec(q); query.next(); current_data.push(query.value(0)); } for(var i = 0; i < 12; i++) { var q = "SELECT SUM(roasted_quantity) FROM roasting_log WHERE roasted_id IS NOT NULL AND time > '" q += current_year-1; q += "-"; q += 1+i; q += "-01' AND time < '"; if(i == 11) { q += current_year; } else { q += current_year-1; } q += "-"; if(i == 11) { q += "01" } else { q += 2+i; } q += "-01'"; query.exec(q); query.next(); previous_data.push(query.value(0)); } query = query.invalidate(); for(var i = 0; i < 12; i++) { output.writeStartElement("tr"); output.writeTextElement("td", month_names[i]); switch(unitBox.currentIndex) { case 0: output.writeTextElement("td", Number(previous_data[i] / 2.2).toFixed(2)); output.writeTextElement("td", Number(current_data[i] / 2.2).toFixed(2)); output.writeTextElement("td", Number((current_data[i] - previous_data[i]) / 2.2).toFixed(2)); break; case 1: output.writeTextElement("td", Number(previous_data[i]).toFixed(2)); output.writeTextElement("td", Number(current_data[i]).toFixed(2)); output.writeTextElement("td", Number(current_data[i]-previous_data[i]).toFixed(2)); break; } output.writeEndElement(); } output.writeEndElement(); output.writeStartElement("tfoot"); output.writeTextElement("th", TTR("pytdprodcomp", "Totals")); var current_total = current_data.reduce(function(a,b) {return Number(a) + Number(b);}, 0); var previous_total = previous_data.reduce(function(a,b) {return Number(a) + Number(b);}, 0); switch(unitBox.currentIndex) { case 0: output.writeTextElement("td", (previous_total/2.2).toFixed(2)); output.writeTextElement("td", (current_total/2.2).toFixed(2)); output.writeTextElement("td", ((current_total-previous_total)/2.2).toFixed(2)); break; case 1: output.writeTextElement("td", previous_total.toFixed(2)); output.writeTextElement("td", current_total.toFixed(2)); output.writeTextElement("td", (current_total-previous_total).toFixed(2)); break; } output.writeEndElement(); output.writeEndElement(); output.writeEndElement(); output.writeEndDocument(); view.setContent(buffer); buffer.close(); } refresh(); var notifier = Application.subscribe("roastinglogchange"); notifier.notify.connect(function() { refresh(); }); ]]>