<window id="pytdprodcomp">
	<reporttitle>Production:->Previous Year Production Comparison By Month</reporttitle>
    <layout type="vertical">
		<layout type="horizontal">
			<label>Weight Unit:</label>
			<sqldrop id="unit" />
            <stretch />
        </layout>
        <webview id="report" />
    </layout>
    <menu name="File">
        <item id="print" shortcut="Ctrl+P">Print</item>
    </menu>
    <program>
        <![CDATA[
            this.windowTitle = "Typica - Previous Year Production Comparison By Month";
            var view = findChildObject(this, 'report');
            var printMenu = findChildObject(this, 'print');
            printMenu.triggered.connect(function() {
                view.print();
            });
			var unitBox = findChildObject(this, 'unit');
			unitBox.addItem("Kg");
			unitBox.addItem("Lb");
			unitBox.currentIndex = QSettings.value("script/report_unit", 1);
			unitBox['currentIndexChanged(int)'].connect(function() {
				QSettings.setValue("script/report_unit", unitBox.currentIndex);
				refresh();
			});
            function refresh() {
                var buffer = new QBuffer;
                buffer.open(3);
                var output = new XmlWriter(buffer);
                output.writeStartDocument("1.0");
                output.writeDTD('<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1 plus MathML 2.0 plus SVG 1.1//EN" "http://www.w3.org/2002/04/xhtml-math-svg.dtd">');
                output.writeStartElement("html");
                output.writeAttribute("xmlns", "http://www.w3.org/1999/xhtml");
                output.writeStartElement("head");
                output.writeTextElement("title", "Previous Year Production Comparison By Month");
                output.writeEndElement();
                output.writeStartElement("body");
                output.writeTextElement("h1", "Previous Year Production Comparison By Month");
				switch(unitBox.currentIndex)
				{
					case 0:
						output.writeTextElement("p", "This report compares total roasted coffee production in kilograms with the previous year on a monthly basis.");
						break;
					case 1:
						output.writeTextElement("p", "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", "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 = ["January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "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", "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();
        ]]>
    </program>
</window>
