<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 = TTR("pytdprodcomp", "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(TTR("pytdprodcomp", "Kg"));
            unitBox.addItem(TTR("pytdprodcomp", "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", 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();
        ]]>
    </program>
</window>
