Ext.namespace('CC');
Ext.namespace('CC.b');
Ext.namespace('CC.b.mod');

CC.b.mod.worksheet = function() {
	return {
		config : {},
		init : function() {
			CC.f.mod.worksheet.init();
		}
	};
} ();


Ext.namespace('CC.f');
Ext.namespace('CC.f.mod');

CC.f.mod.worksheet = function() {
	return {
		ajaxUrl : CC_baseURL + 'worksheet/',
		grids : {},
		formItems : [],
		windows : [],
		projectId : 0,

		init : function() {
			eval('this.' + CC.b.mod.worksheet.config.start_event + '();');
		},


		list : function() {
			var module = CC.f.mod.worksheet;

			var tbarConfig = [ 
				{
					text : CC.b.enter.config.gridNewRecord,
					handler : module.newWorksheet,
		            cls: 'x-btn-text-icon add'
				}
			];
			//modulNameParam, { gridName, ajaxUrl, primaryField }, tbarConfig
			CC.help.grid.initGrid(
				'worksheet', 
				{
					dataIndex : 'worksheets',
					ajaxUrl : 'extBase',
					primaryField : 'ID'
				},
				tbarConfig
			);

			var center = CC.main.layout.center;
			var grid = this.grids.worksheets.grid;
			center.add(grid);
			center.doLayout();
			grid.on('rowdblclick', this.gridDblClick);
		},


		newWorksheet : function() {
			CC.f.mod.worksheet.displayEditWindow(null);
		},


		gridDblClick : function(o, i) {
			var module = CC.f.mod.worksheet;
			var sel = module.grids.worksheets.grid.selModel.selections;
			id = typeof sel.keys == 'object' ? sel.keys[0] : sel.keys;
			module.displayEditWindow(id);
		},


		displayEditWindow : function(id) {
			var module = CC.f.mod.worksheet;
			var module_back = CC.b.mod.worksheet;

			var request_params = null;
			request_params = {};
			if(id != null) request_params.ID = id;

			var param = {
				singleInstance : true,
				url : module.ajaxUrl + 'extBaseform',
				params : request_params,
				success : function(result) {
					if(result.success != null && result.success == false) {
						if(result.message != null) {
							Ext.MessageBox.show(
								{
									title : CC.b.enter.config.msgError,
									msg : result.message,
									buttons : Ext.MessageBox.OK,
									icon : Ext.MessageBox.ERROR
								}
							);
						}
						return;
					}
					
					var formData = module_back.config.formData;
					formData.editForm = result;
					//makeitems(formleíró adatok, modul neve, formon belüli index, gridconfig helye helye)
					CC.help.form.makeItems(formData.editForm.items, 'worksheet', 'edit', module_back.config.grids.worksheets);
					CC.help.form.showWindow(formData.editForm.items, 'worksheet', 'edit', 'saveWorksheet', formData.editForm.window.edit);
					module.windows.edit.dbId = id;

					var combo = CCgetCmp(module.formItems.edit, 'PROJEKT_ID$worksheets');
					combo.on('select', module.projectChanged);
					var w = Ext.getCmp('VENDOR_ZIP$worksheets');
					w.on('render', CC.f.mod.worksheet.renderWorktimeFrame);
					//w.show();
				}
			};	
			CC.help.ajax.doAjax(param);
		},


		projectChanged : function(o, newValue, oldValue) {
			var module = CC.f.mod.worksheet;
			module.projectId = newValue;
			Ext.getCmp('PROJECT_RESPONSIBLE_NAME$worksheets').setValue(newValue.json.responsible);
		},


		saveWorksheet : function() {
			var module = CC.f.mod.worksheet;
			var form = CC.help.form;
			var conf = CC.b.enter.config;

			if(!form.validateForm(module.formItems.edit)) {
				Ext.MessageBox.alert(conf.msgError, conf.msgCheckField);
				return false;
			}

			var data = form.getFormData(module.formItems.edit);
			data['default']['ID'] = CC.f.mod.worksheet.windows.edit.dbId;
			var param = {
				url : module.ajaxUrl + 'extBasesave',
				params : { formdata: Ext.encode(data) },
				success : function(result) {
					if(!result.success) Ext.MessageBox.alert(conf.msgError, result.message);
					module.grids.worksheets.gridStore.reload();
				}
			};
			CC.help.ajax.doAjax(param);
			return true;
		},


		printWorksheet : function(id) {
			var param = {
				url : CC.f.mod.worksheet.ajaxUrl +'extIsPrintable',
				params : { ID: id },
				success : function(result) {
					if(!result.success) Ext.MessageBox.alert(CC.b.enter.config.msgError, result.message);
					else window.open(CC.f.mod.worksheet.ajaxUrl + 'PrintWorksheet/ID/' + id);
				}
			};
			CC.help.ajax.doAjax(param);
		},


		deleteWorksheet : function(key) {
			Ext.MessageBox.confirm('', CC.b.mod.worksheet.config.confirmDelete, function(btn) {
				if(btn == 'yes') CC.f.mod.worksheet.deleteWorksheetDB(key, false);
			} );
		},


		deleteWorksheetDB : function(id, confirmed) {
			var module = CC.f.mod.worksheet;

			var url_params = { ID : id };
			if(confirmed) url_params['confirmed'] = true;
			var param = {
				url : module.ajaxUrl +'extBasedelete',
				params : url_params,
				success : function(result){
					if(result.success) module.grids.worksheets.gridStore.reload();
					else {
						if(result.confirm) {
							Ext.MessageBox.confirm('', result.message,
								function(btn) {
									if(btn == 'yes') module.deleteWorksheetDB(id, true);
								}
							);
						} else Ext.MessageBox.alert(CC.b.enter.config.msgError, result.message);
					}
				}
			};
			CC.help.ajax.doAjax(param);
		},


		display_worksheetItems_EditorWindow: function(dbId) {
			var request_params = {};
			if(id != null) request_params.ID = id;
				
			var param ={
				singleInstance : true,
				url: CC.f.mod.worksheet.ajaxUrl +'extItemform',
				params: request_params,
				success: function(result) {
					var module = CC.f.mod.worksheet; 
					CC.b.mod.worksheet.config.formData.editItemForm = result;
					//makeitems(formleiro adatok, modul neve, formon beluli index, gridconfig helye helye)
					CC.help.form.makeItems( CC.b.mod.worksheet.config.formData.editItemForm.items, 'worksheet', 'editItem', CC.b.mod.worksheet.config.grids.bill_item);
					CC.help.form.showWindow( CC.b.mod.worksheet.config.formData.editItemForm.items, 'worksheet', 'editItem', 'bill_item_save', CC.b.mod.worksheet.config.formData.editItemForm.window.editItem);
					module.windows.editItem.dbId = dbId;
					//eventek
					Ext.getCmp('AMOUNT').on('valid', module.calculatePrices);
					Ext.getCmp('NET_UNIT_PRICE').on('change', module.calculatePrices);
					Ext.getCmp('VAT_KEY').on('change', module.calculatePrices);
					Ext.getCmp('DISCOUNT').on('change', module.calculatePrices);

					//packing nek default product id
					var productCombo = CCgetCmp(module.formItems.editItem,'ITEM_PRODUCT_ID');
					productCombo.on('select',
						function() {
							module.productComboFilter();
						}
					);
					var product_id = productCombo.getValue();
					var packingCombo = CCgetCmp(module.formItems.editItem,'PACKING_ID');
					packingCombo.store.on('load', function(){
						var record = packingCombo.store.getAt(0);
						packingCombo.setValue(record.data.value);
						
						//get packing data
						CC.f.mod.worksheet.bill_item_change_packing();
					});
					packingCombo.on('select', function(){
					//get packing data
							CC.f.mod.worksheet.bill_item_change_packing();
					});
					packingCombo.store.baseParams.ID=product_id;
 				}
			};	
			CC.help.ajax.doAjax(param);
		},
		
		showAddworksheetItemsForm : function() {
			CC.f.mod.worksheet.display_worksheetItems_EditorWindow( null );
		},

		bill_item_save : function() {
			var ok = CC.help.form.validateForm(CC.f.mod.worksheet.formItems.editItem);
			if ( ok ) {
				var data = CC.help.form.getFormData(CC.f.mod.worksheet.formItems.editItem);
				data['default']['ID'] = CC.f.mod.worksheet.windows.editItem.dbId;

				var param ={
					url: CC.f.mod.worksheet.ajaxUrl +'extItemSave',
					params: {
						formdata: Ext.encode( data )
					},
					success: function(result){
						if ( result.success ) {
							try {
								CC.f.mod.worksheet.grids.worksheetItems.gridStore.reload();
								CC.f.mod.worksheet.recalculateSum();
							} catch (e) {
								// Ha külső modul hívja, akkor nem lehet frissítenbi a gridet
							}
						} else {
							ok = false;
							Ext.MessageBox.alert( CC.b.enter.config.msgError, result.message );
						}
						
					}
				};	
				CC.help.ajax.doAjax(param);
			} 
			return ok;
		},


		bill_item_change_packing : function(record) {
			var packing_id = CCgetCmp(CC.f.mod.worksheet.formItems.editItem,'PACKING_ID').getValue();
			var param = {
				url : CC.f.mod.worksheet.ajaxUrl + 'extPackingData',
				params : {
					ID : packing_id
				},
				success : function(result) {
					if(result.success) {
						Ext.getCmp('NET_UNIT_PRICE').setValue( Math.round(result.data.NET_UNIT_PRICE * 100) / 100);
						Ext.getCmp('VAT_KEY').setValue( Math.round(result.data.VAT_KEY * 100) / 100);
						
						Ext.getCmp('AMOUNT').on('valid', CC.f.mod.worksheet.calculatePrices);
						Ext.getCmp('NET_UNIT_PRICE').on('change', CC.f.mod.worksheet.calculatePrices);
						Ext.getCmp('VAT_KEY').on('change', CC.f.mod.worksheet.calculatePrices);
						Ext.getCmp('DISCOUNT').on('change', CC.f.mod.worksheet.calculatePrices);
						
						CC.f.mod.worksheet.calculatePrices();
						
					} else {
						Ext.MessageBox.alert(CC.b.enter.config.msgError, result.message);
					}
				}
			};
			CC.help.ajax.doAjax(param);
		},

		deleteItem : function(key) {
			var module = CC.f.mod.worksheet;
			var store = module.grids.worksheetItems.grid.store;
			var record = store.getById(key);
			if(record.data.ID == null) store.remove(record);
			else {
				Ext.MessageBox.confirm('', CC.b.mod.worksheet.config.confirmItemDelete, 
					function(btn) {
						if(btn == 'yes') module.deleteItemDB(record.data.ID);
					}
				);
			}
		},


		deleteItemDB : function(id) {
			var module = CC.f.mod.worksheet;
			var param = {
				url : module.ajaxUrl + 'extItemdelete',
				params : { ID : id },
				success : function(result) {
					if(result.success) {
						module.grids.worksheetItems.gridStore.reload();
					} else Ext.MessageBox.alert(CC.b.enter.config.msgError, result.message);
				}
			};
			CC.help.ajax.doAjax(param);
		},
		
		productComboFilter : function() {
			var ei = CC.f.mod.worksheet.formItems.editItem;
			var product_id = CCgetCmp(ei, 'ITEM_PRODUCT_ID').getValue();
			var packingCombo = CCgetCmp(ei, 'PACKING_ID');
			
			var param = {
					url : CC.f.mod.worksheet.ajaxUrl + 'extStockHtml',
					params : { ID : product_id },
					success : function(result) {
						if(result.success) Ext.getCmp('STOCK_HTML').body.update( result.result);
						else Ext.MessageBox.alert(CC.b.enter.config.msgError, result.message);
					}
				};
			CC.help.ajax.doAjax(param);

			var s = packingCombo.store;
			s.baseParams.ID = product_id;
			s.reload();
		},
		
		calculatePrices : function(){		
			var amount = Ext.getCmp('AMOUNT').getValue();
			var netUnitPrice = Ext.getCmp('NET_UNIT_PRICE').getValue();
			var vatKey = Ext.getCmp('VAT_KEY').getValue();
			var discount = Ext.getCmp('DISCOUNT').getValue();
			
			//kedvezményes nettó egységár
			if (discount != ""){
				netUnitPrice = netUnitPrice * ((100-discount)/100);
				Ext.getCmp('DISCOUNTED_NET_UNIT_PRICE').setValue(netUnitPrice);
				
			}		
			Ext.getCmp('NET').setValue(Math.round(netUnitPrice*amount));
			Ext.getCmp('GROSS').setValue(Math.round(netUnitPrice*amount*((vatKey+100)/100)));

		},


		worksheetItems_renderer_packing_name : function(value, metadata, record, colIndex, rowIndex, store) {
			return record.data.PRODUCT_NAME;
		}

	};
	
} ();
