/*
	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 VnOrders = new Class
({
	Extends: VnModule

	,activate: function (data)
	{
		var n;
		var button;
		var box;
		var vbox;
		var tr;
		var td;
		var order;
		var model;
		var treeview;
		var renderer;
		var rendedit;
		var rendshow;
		var rendspin;
		var renddate;
		var rendtime;
		var db = this.db;
		var gui = this.gui;

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

// Current Order

		order = gui.getData (VnOrders);

		if (order != null)
		{
			var fieldset;
			var legend;
			var button;
			var table;
			var tbody;
			var entry;
			var stmt;
			var form;
			var frame;

			stmt = new SqlString ('SELECT date_send FROM order_view WHERE id = %s');
			stmt.addValue (order);

			model = new DbModel (this.db);
			model.setStmt (stmt);
			model.setUpdatable ('order_view');

			form = new DbForm (model);
			form.setRow (0);
			
			frame = new HtkFrame (TEXT_CurrentOrder);
			frame.setColor (HTK_FRAME_BLUE);
			frame.setSize (120, -1);
			vbox.add (frame, false);

			table = document.createElement ('table');
			table.cellSpacing = 6;
			frame.setChild (table);

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

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

			td = document.createElement ('td');
			td.style.textAlign = 'right';
			td.style.fontWeight = 'bold';
			td.style.width = '300px';
			td.appendChild (document.createTextNode (TEXT_Identifier + ':'));
			tr.appendChild (td);

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

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

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

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

			entry = new HtkDate ();
			entry.format = DATE_FORMAT_FULL_DATE;
			form.bindParam (entry, 0);
			td.appendChild (entry.getNode ());

			tr = document.createElement ('tr');
			tbody.appendChild (tr);
		
			td = document.createElement ('td');
			td.style.textAlign = 'right';
			tr.appendChild (td);

			button = new VnOrdersButtonEdit (gui);
			td.appendChild (button.getNode ());
		
			td = document.createElement ('td');
			tr.appendChild (td);

			button = new VnOrdersButtonConfirm (gui, order);
			button.getNode ().appendChild (document.createTextNode (TEXT_Confirm));
			td.appendChild (button.getNode ());
		}

// Started Description

		tr = this.createDesc (TEXT_StartedOrders, TEXT_StartedOrdersDesc, 'order');
		vbox.add (tr, false);

// Started List

		renderer = new HtkCellRendererText ();	
		rendspin = new HtkCellRendererSpin ();
		rendedit = new HtkCellRendererImgButton ();
		renddate = new HtkCellRendererDate ();
		rendtime = new HtkCellRendererDate ();
		rendtime.format = DATE_FORMAT_ABR_DATE_TIME;
		rendedit.setData (this.editClicked, 'image/edit.png', TEXT_Edit, gui);

		n = 0;
		treeview = new HtkTreeView ();
		treeview.appendColumn (n, rendedit, TEXT_Edit);
		treeview.appendColumn (n++, rendspin, TEXT_Id);
		treeview.appendColumn (n++, rendtime, TEXT_DateMake);
		treeview.appendColumn (n++, renddate, TEXT_ShipCollect);
		treeview.appendColumn (n++, renderer, TEXT_City);
		treeview.appendColumn (n++, renderer, TEXT_Province);
		treeview.appendColumn (n++, renderer, TEXT_Type);
		treeview.setSize (150, -1);
		vbox.add (treeview, false);

		model = new DbModel (db);
		model.setSql (
			'SELECT o.id, date_make, date_send, city, province, Agencia ' +
				'FROM order_view o ' + 
				'INNER JOIN vn_address_view c ON o.address_id = c.id ' +
				'INNER JOIN vn2008.Agencias a ON o.type_id = a.Id_Agencia ' +
					'LIMIT 3'
		);
		model.setView ('o', 'order_view');
		model.setUpdatable ('order_view');
		treeview.setModel (model);

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

		td = document.createElement ('td');
		td.colSpan = n + 2;
		tr.appendChild (td);
		
		button = new VnOrdersButtonInit (gui);
		td.appendChild (button.getNode ());

// Confirmed Description

		tr = this.createDesc (TEXT_ConfirmedOrders, TEXT_ConfirmedOrdersDesc, 'ok');
		vbox.add (tr, false);

// Confirmed List

		rendshow = new HtkCellRendererImgButton ();
		rendshow.setData (this.showClicked, 'image/show.png', TEXT_Show, gui);

		n = 0;
		treeview = new HtkTreeView ();
		treeview.appendColumn (n, rendshow, TEXT_Show);
		treeview.appendColumn (n++, rendspin, TEXT_Id);
		treeview.appendColumn (n++, renddate, TEXT_ShipCollect);
		treeview.appendColumn (n++, renderer, TEXT_City);
		treeview.appendColumn (n++, renderer, TEXT_Province);
		treeview.appendColumn (n++, renderer, TEXT_Type);
		treeview.appendColumn (n++, rendspin, TEXT_Pieces);
		vbox.add (treeview, true);

		model = new DbModel (db);
		model.setSql (
			"SELECT t.id, date, city, province, type, packages " +
				"FROM vn_ticket_view t " +
				"INNER JOIN vn_address_view c ON t.address_id = c.id AND date > 20010101000000 " +
					"ORDER BY date DESC, t.id DESC LIMIT 10"
		);

		treeview.setModel (model);
	}

	,createDesc: function (title, desc, image)
	{
		var frame;
		var hbox;
		var text;
		var img;

		frame = new HtkFrame ();
		frame.setColor (HTK_FRAME_YELLOW);
		frame.setSize (45, -1);

		hbox = new HtkHBox ();
		hbox.style.padding = '6px';
		frame.setChild (hbox);

		img = document.createElement ('img');
		img.alt = null;
		img.src = 'image/' + image + '.png';
		hbox.add (img, false);

		text = document.createTextNode (desc + '.');
		hbox.add (text, true);

		return frame;
	}

	,editClicked: function (renderer, value, gui)
	{
		gui.openModule (VnOrder, value);
	}

	,showClicked: function  (renderer, value, gui)
	{
		gui.openModule (VnTicket, value);
	}
});

var VnOrdersButtonEdit = new Class
({
	Extends: HtkWidget

	,initialize: function (gui)
	{
		var obj = this;
	
		this.parent ('button');
		this.node.appendChild (document.createTextNode (TEXT_SeeOrder));

		this.gui = gui;
		this.node.addEventListener ('click', 
			function () { obj.clicked (); }, false);
	}

	,clicked: function (event)
	{
		this.gui.openModule (VnOrder, null);
	}
});

var VnOrdersConfirmAction = new Class
({
	initialize: function (gui, orderId)
	{
		var stmt;
	
		this.gui = gui;
		this.db = gui.db;
		this.orderId = orderId;

		stmt = new SqlString (
			'SELECT MONTH(date_send) NOT BETWEEN 5 AND 8 OR (type_id IN (1, 2) OR insurance) ' +
				'FROM order_view WHERE id = %s'
		);
		stmt.addValue (orderId);
		this.db.stmt (stmt, this, this.checkDone, null);
	}

	,checkDone: function (json, error)
	{
		if (json)
		{
			if (!json.data[0][0] && confirm (TEXT_InsuranceQuestion))
			{
				var stmt = new SqlString ('UPDATE order_view SET insurance = TRUE WHERE id = %s');
				stmt.addValue (this.orderId);
				this.db.stmt (stmt, this, this.insuranceDone, null);
			}
			else
				this.confirm ();
		}
	}

	,insuranceDone: function (json, error)
	{
		if (json)
			this.confirm ();
	}

	,confirm: function ()
	{
		if (confirm (TEXT_SureConfirmOrder))
		{	
			var sql = new SqlString ('CALL order_confirm (%s)');
			sql.addValue (this.orderId);
			this.db.stmt (sql, this, this.confirmDone, null);
		}
	}

	,confirmDone: function (json, error)
	{
		if (json)
		{
			this.gui.clearData (VnOrders);
			this.gui.openModule (VnOrders);
			alert (TEXT_OrderConfirm);
		}
	}
});

var VnOrdersButtonConfirm = new Class
({
	Extends: HtkWidget

	,initialize: function (gui, orderId)
	{
		var obj = this;
		this.parent ('button');
		this.node.addEventListener ('click', 
			function () { obj.clicked (gui, orderId); }, false);
	}

	,clicked: function (event)
	{
		new VnOrdersConfirmAction (this.gui, this.orderId);
	}
});

var VnOrdersButtonInit = new Class
({
	Extends: HtkWidget

	,initialize: function (gui)
	{
		var obj = this;
		this.parent ('button');
		this.gui = gui;
		this.node.appendChild (document.createTextNode (TEXT_OrderInit));
		this.node.addEventListener ('click',
			function () { obj.clicked (); }, false);
	}

	,clicked: function ()
	{
		var sql;
		var gui = this.gui;

		sql = 'INSERT INTO order_view (date_send) VALUES (CURDATE()); SELECT LAST_INSERT_ID();';
		gui.db.multiQuery (sql, this, this.initDone, gui);
	}

	,initDone: function (json, error, gui)
	{
		if (json && json.length == 2)
		{
			gui.setData (VnOrders, json[1].data[0][0]);
			gui.openModule (VnOrder, null);
		}
	}
});

var VnOrdersAction = new Class
({
	Extends: HtkWidget

	,initialize: function (text, src, obj, func)
	{
		var td;
		var img;
		var button;

		this.parent ('tr');

		td = document.createElement ('td');
		this.node.appendChild (td);
		
		button = document.createElement ('button');
		button.obj = obj;
		button.func = func;
		button.addEventListener ('click',
			function () { func.apply (obj); }, false);
		button.style.padding = '0px';
		button.style.margin = '0px';
		button.style.width = '35px';
		button.title = text;
		td.appendChild (button);

		img = document.createElement ('img');
		img.alt = text;
		img.src = 'image/' + src;
		button.appendChild (img);

		td = document.createElement ('td');
		this.node.appendChild (td);

		td.appendChild (document.createTextNode (text));
	}
});


