/*
	Copyright (C) 2008 - Juan Ferrer Toribio

	This program is free software; you can redistribute it and/or
	modify it under the terms of the GNU Lesser General Public
	License as published by the Free Software Foundation; either
	version 2.1 of the License, or (at your option) any later version.

	This program is distributed in the hope that it will be useful,
	but WITHOUT ANY WARRANTY; without even the implied warranty of
	MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
	Lesser General Public License for more details.

	You should have received a copy of the GNU Lesser General Public
	License along with this program; if not, write to the Free
	Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
	02111-1307 USA.
*/

var VnTicket = new Class
({
	Extends: VnModule

	,activate: function (id)
	{
		var n;
		var stmt;
		var model;
		var div;
		var table;
		var td;
		var colgroup;
		var col;
		var tbody;
		var tr;
		var label;
		var entry;
		var renderer;
		var treeview;
		var foot;
		var rendspin;
		var rendprice;
		var renddisc;
		var data;
		var total = 0;
		var db = this.db;
		var gui = this.gui;
		var form;
		var cssHeight = '115px';
		var vbox;
		var hbox;
		var box;
		var frame;

		stmt = new SqlString (
			'SELECT date, type, note, province, zip_code, ' +
			'city, c.name, t.id FROM vn_ticket_view t ' +
				'INNER JOIN vn_address_view c ON t.address_id = c.id ' +
				'WHERE t.id = %s'
		);
		stmt.addValue (id);

		model = new DbModel (db);
		model.setStmt (stmt);

		n = 0;
		form = new DbForm (model);
		form.setRow (0);

		vbox = new HtkVBox ();
		this.setChild (vbox);

		hbox = new HtkHBox ();
		hbox.setSize (140, -1);
		vbox.add (hbox, false);

// Action

		frame = new HtkFrame (TEXT_Actions);
		hbox.add (frame, false);

		table = document.createElement ('table');
		table.style.borderCollapse = 'separate';
		table.cellSpacing = '4px';
		frame.setChild (table);

		tbody = document.createElement ('tbody');
		table.appendChild (tbody);

		tr = new VnOrdersAction (TEXT_Print, 'print.png', this, this.printClicked);
		tbody.appendChild (tr.getNode ());

		tr = new VnOrdersAction (TEXT_Exit, 'exit.png', this, this.closeClicked);
		tbody.appendChild (tr.getNode ());

// Data

		frame = new HtkFrame (TEXT_Data);
		hbox.add (frame, true);

		table = document.createElement ('table');
		table.style.borderCollapse = 'separate';
		table.cellSpacing = 4;
		frame.setChild (table);

		colgroup = document.createElement ('colgroup');
		table.appendChild (colgroup);

		col = document.createElement ('col');
		col.style.width = '130px';
		colgroup.appendChild (col);

		col = document.createElement ('col');
		colgroup.appendChild (col);

		tbody = document.createElement ('tbody');
		table.appendChild (tbody);

		tr = document.createElement ('tr');
		tbody.appendChild (tr);

		td = document.createElement ('td');
		tr.appendChild (td);

		label = document.createElement ('label');
		td.style.textAlign = 'right';
		label.appendChild (document.createTextNode (TEXT_Id + ':'));
		td.appendChild (label);

		td = document.createElement ('td');
		td.appendChild (document.createTextNode (id));
		tr.appendChild (td);

		tr = document.createElement ('tr');
		tbody.appendChild (tr);

		td = document.createElement ('td');
		tr.appendChild (td);

		label = document.createElement ('label');
		td.style.textAlign = 'right';
		label.appendChild (document.createTextNode (TEXT_ShipCollect + ':'));
		td.appendChild (label);

		td = document.createElement ('td');
		tr.appendChild (td);
		
		label = new HtkDate ();
		form.bindParam (label, n++);
		td.appendChild (label.getNode ());

		tr = document.createElement ('tr');
		tbody.appendChild (tr);

		td = document.createElement ('td');
		tr.appendChild (td);

		label = document.createElement ('label');
		td.style.textAlign = 'right';
		label.appendChild (document.createTextNode (TEXT_Type + ':'));
		td.appendChild (label);

		td = document.createElement ('td');
		tr.appendChild (td);
		
		label = new HtkLabel ();
		form.bindParam (label, n++);
		td.appendChild (label.getNode ());

		tr = document.createElement ('tr');
		tbody.appendChild (tr);

		td = document.createElement ('td');
		tr.appendChild (td);

		label = document.createElement ('label');
		td.style.textAlign = 'right';
		label.appendChild (document.createTextNode (TEXT_Notes + ':'));
		td.appendChild (label);

		td = document.createElement ('td');
		tr.appendChild (td);
		
		label = new HtkLabel ();
		form.bindParam (label, n++);
		td.appendChild (label.getNode ());

// Address

		renderer = new HtkCellRendererText ();
		rendspin = new HtkCellRendererSpin ();

		treeview = new HtkTreeView ();
		treeview.setSize (52, -1);
		treeview.appendColumn (n++, renderer, TEXT_Province);
		treeview.appendColumn (n++, rendspin, TEXT_PC);
		treeview.appendColumn (n++, renderer, TEXT_City);
		treeview.appendColumn (n++, renderer, TEXT_Street);
		treeview.setModel (model);
		vbox.add (treeview, false);

// Movement

		renddisc = new HtkCellRendererSpin ();
		renddisc.unit = '%';
		rendprice = new HtkCellRendererSpin ();
		rendprice.unit = '€';
		rendprice.digits = 2;

		n = 0;
		treeview = new HtkTreeView ();
		treeview.appendColumn (n++, rendspin, TEXT_Amount);
		treeview.appendColumn (n++, renderer, TEXT_Name);
		treeview.appendColumn (n++, rendspin, TEXT_Siz);
		treeview.appendColumn (n++, renderer, TEXT_Color);
		treeview.appendColumn (n++, renderer, TEXT_Cat);
		treeview.appendColumn (n++, rendspin, TEXT_Stems);
		treeview.appendColumn (n++, renderer, TEXT_Origin);
		treeview.appendColumn (n++, rendspin, TEXT_Id);
		treeview.appendColumn (n++, rendprice, TEXT_Price);
		treeview.appendColumn (n++, renddisc, TEXT_Disc);
		treeview.appendColumnWithFunc (this.subtotalRenderer, rendprice, TEXT_Subtotal);
		vbox.add (treeview, true);

		stmt = new SqlString (
			'SELECT amount, concept, Medida, Color, Categoria, Tallos, ' +
			'Abreviatura, m.item_id, IF(fixed != FALSE, price, NULL), discount ' +
				'FROM vn_ticket_row_view m ' + 
				'INNER JOIN vn2008.Articles a ON m.item_id = a.Id_Article AND ticket_id = %s ' + 
				'LEFT JOIN vn2008.Origen o ON a.id_origen = o.id ' +
					'ORDER BY concept'
		);
		stmt.addValue (id);

		model = new DbModel (db);
		model.setStmt (stmt);
		treeview.setModel (model);

		foot = document.createElement ('tr');
		treeview.setFoot (foot);

		td = document.createElement ('td');
		td.colSpan = n--;
		td.style.textAlign = 'right';
		td.appendChild (document.createTextNode (TEXT_OrderTotal + ':'));
		foot.appendChild (td);
		
		data = model.data;
		total = 0;

		td = document.createElement ('td');
		td.style.textAlign = 'right';
		td.style.paddingRight = '10px';
		foot.appendChild (td);
		
		entry = new VnOrderSubtotal (vnTicketSubtotal);
		model.addForeach (entry);
		td.appendChild (entry.getNode ());
		
		this.id = id;
	}

	,subtotalRenderer: function (renderer, row)
	{
		renderer.value = vnTicketSubtotal (row);
	}

	,closeClicked: function ()
	{
		this.gui.openModule (VnOrders);		
	},
	
	printClicked: function (event)
	{
		new VnTicketInform (this.db, this.id);
	}
});

function vnTicketSubtotal (row)
{
	return row[0] * row[8] * (100 - row[9]) / 100;
}

var VnTicketInform = new Class
({
	initialize: function (db, id)
	{
		var n;
		var obj
		var stmt;
		var model;
		var form;
		var entry;
		var div;
		var table;
		var tablebody;
		var tablerow;
		var td;
		var fieldset;
		var legend;
		var colgroup;
		var col;
		var tbody;
		var tr;
		var label;
		var renderer;
		var treeview;
		var foot;
		var rendspin;
		var rendprice;
		var renddisc;
		var document;

		obj = window.open ('', '', 'width=0,height=0,scrollbars=yes,menubar=yes');
		document = obj.document;

		stmt = new SqlString (
			'SELECT date, type, note, province, zip_code, city, c.name ' +
				'FROM vn_ticket_view t ' + 
				'INNER JOIN vn_address_view c ' +
					'ON t.address_id = c.id WHERE t.id = %s'
		);
		stmt.addValue (id);

		model = new DbModel (db);
		model.setStmt (stmt); 

		n = -1;
		form = new DbForm (model);
		form.setRow (0);

		table = document.createElement ('table');
		table.style.width = '100%';
		document.body.appendChild (table);

		tablebody = document.createElement ('tbody');
		table.appendChild (tablebody);

// Data

		tablerow = document.createElement ('tr');
		tablebody.appendChild (tablerow);

		td = document.createElement ('td');
		tablerow.appendChild (td);
	
		fieldset = document.createElement ('fieldset');
		td.appendChild (fieldset);

		legend = document.createElement ('legend');
		fieldset.appendChild (legend);
		legend.appendChild (document.createTextNode (TEXT_Data));

		table = document.createElement ('table');
		table.style.borderCollapse = 'separate';
		fieldset.appendChild (table);

		colgroup = document.createElement ('colgroup');
		table.appendChild (colgroup);

		col = document.createElement ('col');
		col.style.width = '130px';
		colgroup.appendChild (col);

		col = document.createElement ('col');
		colgroup.appendChild (col);

		tbody = document.createElement ('tbody');
		table.appendChild (tbody);

		tr = document.createElement ('tr');
		tbody.appendChild (tr);

		td = document.createElement ('td');
		tr.appendChild (td);

		label = document.createElement ('label');
		td.style.textAlign = 'right';
		label.appendChild (document.createTextNode (TEXT_Id + ':'));
		td.appendChild (label);

		td = document.createElement ('td');
		td.appendChild (document.createTextNode (id));
		tr.appendChild (td);

		tr = document.createElement ('tr');
		tbody.appendChild (tr);

		td = document.createElement ('td');
		tr.appendChild (td);

		label = document.createElement ('label');
		td.style.textAlign = 'right';
		label.appendChild (document.createTextNode (TEXT_ShipCollect + ':'));
		td.appendChild (label);

		td = document.createElement ('td');
		tr.appendChild (td);
		
		entry = new HtkDate ();
		form.bindParam (entry, ++n);
		td.appendChild (entry.getNode ());

		tr = document.createElement ('tr');
		tbody.appendChild (tr);

		td = document.createElement ('td');
		tr.appendChild (td);

		label = document.createElement ('label');
		td.style.textAlign = 'right';
		label.appendChild (document.createTextNode (TEXT_Type + ':'));
		td.appendChild (label);
		
		td = document.createElement ('td');
		tr.appendChild (td);

		entry = new HtkLabel ();
		form.bindParam (entry, ++n);
		td.appendChild (entry.getNode ());

		tr = document.createElement ('tr');
		tbody.appendChild (tr);

		td = document.createElement ('td');
		tr.appendChild (td);

		label = document.createElement ('label');
		td.style.textAlign = 'right';
		label.appendChild (document.createTextNode (TEXT_Notes + ':'));
		td.appendChild (label);

		td = document.createElement ('td');
		tr.appendChild (td);

		entry = new HtkLabel ();
		form.bindParam (entry, ++n);
		td.appendChild (entry.getNode ());

		tr = document.createElement ('tr');
		tablebody.appendChild (tr);

		td = document.createElement ('td');
		tr.appendChild (td);

// Address

		tablerow = document.createElement ('tr');
		tablebody.appendChild (tablerow);

		td = document.createElement ('td');
		td.colSpan = 2;
		tablerow.appendChild (td);
	
		renderer = new HtkCellRendererText ();
		rendspin = new HtkCellRendererSpin ();

		treeview = new HtkTreeView ();
		treeview.appendColumn (++n, renderer, TEXT_Province);
		treeview.appendColumn (++n, rendspin, TEXT_PC);
		treeview.appendColumn (++n, renderer, TEXT_City);
		treeview.appendColumn (++n, renderer, TEXT_Street);
		treeview.setModel (model);
		td.appendChild (treeview.getNode ());

// Movement

		tablerow = document.createElement ('tr');
		tablebody.appendChild (tablerow);

		td = document.createElement ('td');
		td.colSpan = 2;
		tablerow.appendChild (td);

		renddisc = new HtkCellRendererSpin ();
		renddisc.unit = '%';
		rendprice = new HtkCellRendererSpin ();
		rendprice.digits = 2;
		rendprice.unit = '€';

		n = 0;
		treeview = new HtkTreeView ();
		treeview.appendColumn (n++, rendspin, TEXT_Amount);
		treeview.appendColumn (n++, renderer, TEXT_Name);
		treeview.appendColumn (n++, rendspin, TEXT_Siz);
		treeview.appendColumn (n++, renderer, TEXT_Color);
		treeview.appendColumn (n++, renderer, TEXT_Cat);
		treeview.appendColumn (n++, rendspin, TEXT_Stems);
		treeview.appendColumn (n++, rendprice, TEXT_Price);
		treeview.appendColumn (n++, renddisc, TEXT_Disc);
		treeview.appendColumnWithFunc (this.subtotalRenderer, rendprice, TEXT_Subtotal);
		td.appendChild (treeview.getNode ());

		stmt = new SqlString (
			'SELECT amount, concept, Medida, Color, Categoria, ' +
			'Tallos, IF(fixed != FALSE, price, NULL), discount ' + 
				'FROM vn_ticket_row_view m ' +
				'INNER JOIN vn2008.Articles a ' +
					'ON m.item_id = a.Id_Article AND ticket_id = %s ' +
				'ORDER BY concept'
		);
		stmt.addValue (id);

		model = new DbModel (db);
		model.setStmt (stmt);
		treeview.setModel (model);

		foot = document.createElement ('tr');
		treeview.setFoot (foot);

		td = document.createElement ('td');
		td.colSpan = n--;
		td.style.textAlign = 'right';
		td.appendChild (document.createTextNode (TEXT_OrderTotal + ':'));
		foot.appendChild (td);

		td = document.createElement ('td');
		td.style.textAlign = 'right';
		td.style.paddingRight = '15px';
		foot.appendChild (td);
		
		entry = new VnOrderSubtotal (vnTicketInformSubtotal);
		model.addForeach (entry);
		td.appendChild (entry.getNode ());
		
		obj.print ();
	}

	,subtotalRenderer: function (renderer, row)
	{	
		renderer.value = vnTicketInformSubtotal (row);
	}
});

function vnTicketInformSubtotal (row)
{
	return row[0] * row[6] * (100 - row[7]) / 100;
}


