﻿
/// <reference Path="../../ExtJS/adapter/ext/ext-base.js"/>
/// <reference path="../../ExtJS/ext-all.js"/>

/*
 * Copyright(c) 2010 Medicor AB.
 */

function createRecordProxy() {
	return new Ext.data.HttpProxy({
		autoDestroy: true,
		api: {
			read:		{ method: 'GET' }, // url is assigned during construction of RecordGridWindow
			create:		{ url: 'DataService.svc/RecordSet', method: 'POST' },
			update:		{ url: 'DataService.svc/RecordSet', method: 'MERGE' },
			destroy:	{ url: 'DataService.svc/RecordSet', method: 'DELETE' }
		}
	})
};

function createRecordReader() {
	return new Ext.data.JsonReader({
		idProperty: 'RecordID',
		root: 'd',
		fields: [
			{name: 'RecordID',		type: 'int'},
			{name: 'PerformedAt',	type: 'date', dateFormat: 'M$'},
			{name: 'HoursWorked',	type: 'int'},
			{name: 'CurrentRate',	type: 'int'},
			{name: 'Notation',		type: 'string'}
		]
	})
};

function createRecordWriter() {
	return new Ext.data.JsonWriter({
		returnJson: true,
		writeAllFields: false
	})
};

function createRecordStore() {
	return new Ext.data.Store ({
		proxy:  createRecordProxy(),
		reader: createRecordReader(),
		writer: createRecordWriter(),
		autoLoad: false,
		autoSave: false,
		restful: true,
		listeners: {
		//	write: function(store, action, result, res, rs) {
		//		App.setAlert(res.success, res.message); // <-- show user-feedback for all write actions
		//	},
			exception: function(proxy, type, action, options, res, arg) {
				if (type === 'remote') {
					Ext.Msg.show({
						title: 'REMOTE EXCEPTION',
						msg: res.message,
						icon: Ext.MessageBox.ERROR
					});
				}
			}
		}
	})
};

function createRecordGridColumnModel() {
	return new Ext.grid.ColumnModel ({
		defaults: {
//			editor: new Ext.form.TextField(),
			menuDisabled: true
		},
		columns: [
			{id: 'notation',		header: "Notering",	dataIndex: 'Notation'},
			{id: 'performedAt',		header: "Utfört",	dataIndex: 'PerformedAt',	width: 80, fixed: true, xtype: 'datecolumn',	format: Date.patterns.ISO8601Short}, 
			{id: 'hoursWorked',		header: "Timmar",	dataIndex: 'HoursWorked',	width: 60, fixed: true, xtype: 'numbercolumn',	format: '000',	align: 'right'}, 
			{id: 'currentRate',		header: "Taxa",		dataIndex: 'CurrentRate',	width: 60, fixed: true, xtype: 'numbercolumn',	format: '0000',	align: 'right'}
		]
	})
} 
function createRecordGridPanel() {
	return new Ext.grid.GridPanel({
		store: createRecordStore(),
		colModel: createRecordGridColumnModel(),
		frame: false,
		loadMask: true,
		border: false,
		viewConfig: {
			forceFit: true
		},
		selModel: new Ext.grid.RowSelectionModel ({
			singleSelect: true, 
			moveEditorOnEnter: false
		}),
		listeners: {
			rowclick: function() {
				Ext.getCmp('deleteRecordButton').enable();
			},
			rowdblclick: function (aGrid, aRowIndex, anEvent) {
				Ext.getCmp('browseRecordButton').handler();
			}
		}
	})	
};

function createRecordGridWindow (aContainer, aProject) {
	var n = 0;
	Ext.WindowMgr.each(function(){n=n+1;}); // JavaScript 4ever.
	var gridPanel = createRecordGridPanel();
	return new Ext.Window ({
		layout: 'fit',
		renderTo: aContainer,
		x: (20+20*n),
		y: (20+20*n),
		width: 485,
		height: 360,
		minWidth: 420,
		minHeight: 200,
		constrain: true,
		plain: true,
		collapsible: true,
		closable: true,
		iconCls: 'IconRecords',
		items: gridPanel,
		tbar: [{
			id: 'browseRecordButton',
			text: 'Redigera',
			iconCls: 'IconRecordsBrowse',
			disabled: true,
			handler: function() {
				var r = gridPanel.getSelectionModel().getSelected();
				var d = createRecordFormDialog (r, '<b>' + aProject.ProjectName + '</b>&nbsp;&mdash;&nbsp;registrering ' + r.data.PerformedAt.format(Date.patterns.ShortDate));
				d.show(this.getEl());
			}
		}, {
			xtype: 'tbseparator'
		}, {
			id: 'insertRecordButton',
			text: 'Registrera ny',
			iconCls: 'IconRecordsInsert',
			disabled: true,
			handler: function(b,e) {
				Ext.MessageBox.alert(e);
			}
		}, {
			xtype: 'tbseparator'
		}, {
			id: 'deleteRecordButton',
			text: 'Ta bort',
			iconCls: 'IconRecordsDelete',
			disabled: true,
			handler: function(b,e) {
				;
			}
		}],
		listeners: {
			show: function (t) {
				t.setTitle('Tidsredovisning för &nbsp;<b>' + aProject.ProjectName + '</b>');
				gridPanel.getStore().proxy.setApi(Ext.data.Api.actions.read, 'DataService.svc/ProjectSet(#)/Records?$orderby=PerformedAt%20desc'.replace('#', aProject.ProjectID));
				gridPanel.getStore().load();
				var c = this.getTopToolbar();
				c.findById('browseRecordButton').enable();
				c.findById('insertRecordButton').enable();
			}
		}
	});
};

function createRecordFormPanel (aRecord) {
	return new Ext.form.FormPanel ({
		// Generated by Ext Designer!
		"labelWidth": 100,
		"labelAlign": "left",
		"layout": "absolute",
		"width": 310,
		"height": 220,
		"padding": 10,
		"autoScroll": false,
		"items": [
		{
			"xtype": "label",
			"text": "Datum utfört:",
			"x": 20,
			"y": 20
		},
		{
			"xtype": "datefield",
			"x": 20,
			"y": 40,
			"altFormats": "ymd|Ymd|Y-m-d",
			"showToday": true,
			"name": "PerformedAt"
		},
		{
			"xtype": "label",
			"text": "Tid i timmar:",
			"x": 20,
			"y": 80
		},
		{
			"xtype": "numberfield",
			"x": 100,
			"y": 80,
			"width": 50,
			"name": "HoursWorked",
			"decimalSeparator": ",",
			"decimalPrecision": 1,
			"maxValue": 9999,
			"minValue": 0.5,
			"allowDecimals": true
		},
		{
			"xtype": "label",
			"text": "Aktuell taxa:",
			"x": 20,
			"y": 110
		},
		{
			"xtype": "numberfield",
			"x": 100,
			"y": 110,
			"width": 50,
			"name": "CurrentRate",
			"maxValue": 10000,
			"maxText": "10 000 kr per timmai taxa är den högsta tillåtna taxan.",
			"minValue": 100,
			"minText": "100 kr per timma är den lägsta tillåtna taxan."
		},
		{
			"xtype": "label",
			"text": "Notering:",
			"x": 20,
			"y": 150
		},
		{
			"xtype": "textfield",
			"x": 20,
			"y": 170,
			"name": "Notation",
			"width": 270
		}]
		,
		listeners: {
			afterrender: function (t) {
				t.getForm().loadRecord(aRecord);
			}
		}
	})	
};

function createRecordFormDialog (aRecord, aTitle) {
	return new Ext.Window ({
		title: aTitle,
		layout: 'fit',
		modal: true,
//		constrain: true,
		width: 400,
		plain: true,
		closable: true,
		resizable: false,
		iconCls: 'IconRecords',
		buttonAlign: 'left',
		items: createRecordFormPanel (aRecord),
        buttons: [{
            text: 'Spara'
        },{
            text: 'Avbryt',
            handler: function(t,e) {
				this.ownerCt.ownerCt.close();
			}
        }],
		listeners: {
			beforeshow: function(t) {
				this.center();
				this.setPosition(this.x, this.y-100);
			}
		}

	})
};

/*
Ext.reg('recordstore', RecordGrid);
Ext.reg('recordgrid', RecordGrid);
Ext.reg('recordwindow', RecordWindow);

Ext.extend(Ext.data.HttpProxy, RecordProxy, recordProxy);
Ext.extend(Ext.data.JsonReader, RecordReader, recordReader);
Ext.extend(Ext.data.JsonWriter, RecordWriter, recordWriter);
Ext.extend(Ext.data.Store, RecordStore, recordStore);
Ext.extend(Ext.grid.ColumnModel, RecordColumnModel, recordColumnModel);
Ext.extend(Ext.grid.EditorGridPanel, RecordGrid, recordGrid);
Ext.extend(Ext.Window, RecordWindow, recordWindow);
*/

