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

CC.b.mod.events = function(){

	return{
	
		config : {},
	
		init : function(){
			CC.f.mod.events.init();
		}
	}

}();

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

CC.f.mod.events = function(){
	
	return{
		
		ajaxUrl : CC_baseURL +'events/',
		
		grids : {},
		formItems : [],
		windows: [],
		tree :{},
	
		init : function(){
			eval( 'this.'+ CC.b.mod.events.config.start_event +'();' );
		},
		
		list : function () {
			
			var tbarConfig = [ 
	        		{
	        			text : CC.b.enter.config.gridNewRecord,
	        			handler : CC.f.mod.events.displayeventsForm
	        		}
        		];
        	
			/*CC.help.grid.initGrid(
				'events', 
				{
					dataIndex : 'events_base',
					ajaxUrl : 'extBase',
					primaryField : 'ID'
				}, 
				tbarConfig
			);*/
			
			
			this.tree = new Ext.TreeBar({
				moduleName: 'events',
				gridName: 'events_base',
				dataIndex: 'categoryTree',
				title: '',
				urlGetData : this.ajaxUrl+'extCategorytree',
				urlGetTreeFormItem : this.ajaxUrl+'extCategoryForm',
				urlTreeHandler : this.ajaxUrl+'extCategoryHandle',
				urlTreeDelete : this.ajaxUrl+'extCategorytreeDelete',
				dblClickEvent : CC.f.mod.events.refreshGridByTree,
				buttons : {
					create : CC.b.mod.events.config.buttonCreateMenu,
					edit : CC.b.mod.events.config.buttonEditMenu,
					del : CC.b.mod.events.config.buttonDeleteMenu,
					changeParent : CC.b.mod.events.config.buttonAddData
				},
				changeParent : function(){
					try{
						var category = this.obj.tree.selModel.getSelectedNode().attributes[this.obj.gridPkField];
						var prevId = this.obj.previousNode;
					}catch(e){
					}
					try{
						var datas = CC.f.mod.events.grids.events_base.grid.getSelectionModel().getSelections();
					}catch(e){
					}
					if (typeof category != 'undefined' && datas.length>0){
						var ids = {};
						ids['category'] = category;
						ids['products'] = {};
						for ( i in datas){
							if (typeof datas[i] == 'object'){
								ids['products'][i] = {ID : datas[i].id}
							}
						}
						
						var param ={
							singleInstance : true,
							url: CC.f.mod.events.ajaxUrl+'extAssignData',
							params:{ 
								formData : Ext.encode(ids) 
							},
							success: function(result){
					
								//CC.f.mod.events.grids.events_base.grid.getStore().reload({params: {categoryId: prevId}});
							}
						};	
						CC.help.ajax.doAjax(param);
					}
				}			
			});
			CC.main.layout.west.add(this.tree);
			CC.main.layout.west.setWidth(200);
			//CC.main.layout.center.add(this.grids.events_base.grid);			
			Ext.getCmp('CCWiew').doLayout();
			this.grids.events_base.grid.on('rowdblclick', this.displayEditorWindowByDblClick );

		},
		
		
		refreshGridByTree : function(node){
			CC.f.mod.events.grids.events_base.grid.getStore().reload({params: {categoryId: node.id}});
		},
		
		
		displayEditorWindow : function( dbId ){
			
			var request_params = null;
			request_params = {};
			if ( dbId != null ) {
				request_params.ID = dbId;
			}
		
			var param ={
				singleInstance : true,
				url: CC.f.mod.events.ajaxUrl +'extBaseform',
				params: request_params,
				success: function(result){
					if ( typeof result.success != 'undefined' && result.success == false ) {
						if ( typeof result.message != 'undefined' ) {
							Ext.MessageBox.show(
								{
									title: CC.b.enter.config.msgError,
									msg: result.message,
									buttons: Ext.MessageBox.OK,
									icon: Ext.MessageBox.ERROR
								}
							);
						}
					} else {
						CC.b.mod.events.config.formData.editForm = result;
						//makeitems(formleíró adatok, modul neve, formon belüli index, gridconfig helye helye)
						CC.help.form.makeItems( CC.b.mod.events.config.formData.editForm.items, 'events', 'edit', CC.b.mod.events.config.grids.events_base);
						CC.help.form.showWindow( CC.b.mod.events.config.formData.editForm.items, 'events', 'edit', 'doSaveRecord', CC.b.mod.events.config.formData.editForm.window.edit);
						CC.f.mod.events.windows.edit.dbId = dbId;
					}
				}
			};	
			CC.help.ajax.doAjax(param);
		},
		
		displayEditorWindowByDblClick : function( gridObject, rowIndex ){
			var key = null;
			var gridObject = CC.f.mod.events.grids.events_base.grid;
			if ( typeof gridObject.selModel.selections.keys == 'object' ) {
				key = gridObject.selModel.selections.keys[0];
			} else {
				key = gridObject.selModel.selections.keys;
			}
			CC.f.mod.events.displayEditorWindow( key );
		},

		displayeventsForm : function(){
			CC.f.mod.events.displayEditorWindow( null);
		},
		

		ware_filter_change : function() {
			if ( this.isValid() ) {
				CC.f.mod.events.warehouse_changed = true;
				var move_combo = Ext.getCmp('MOVEMENT_TYPE_ID');
				move_combo.store.baseParams = {warehouse_id : this.getValue() };
				move_combo.store.reload();
			}
		},
		
		move_type_filter_change : function() {
			if ( this.isValid() ) {
				CC.f.mod.events.last_movement_id = this.getValue();
				CC.f.mod.events.reload_grid( this.getValue() );
			}
		},
		
		move_type_filter_after_change : function() {
			if ( CC.f.mod.events.warehouse_changed ) {
				CC.f.mod.events.warehouse_changed = false;
				var move_combo = Ext.getCmp('MOVEMENT_TYPE_ID');
				
				var current_val = move_combo.getValue();
				var found = false;
				Ext.each( move_combo.store.reader.jsonData.result, function(itemParam){
					if(itemParam.value == current_val){
						found = true;
					}
				});
				
				if ( ! found ) {
					move_combo.setValue( move_combo.store.getAt( 0 ).json.value );
				}
				CC.f.mod.events.reload_grid( move_combo.store.getAt( 0 ).json.value );
			}
		},
		
		invoice_group_filter_change : function() {
			if ( this.isValid() ) {
				CC.f.mod.events.last_invoice_group_id = this.getValue();
				CC.f.mod.events.reload_grid( CC.b.mod.events.config.billMoveTypeId );
			}
		},
		
		reload_grid : function( p_movement_type_id ) {
			CC.f.mod.events.grids.events_base.gridStore.baseParams = {movement_type_id : p_movement_type_id, invoice_group_id : this.last_invoice_group_id };
			CC.f.mod.events.grids.events_base.gridStore.reload();
		},
		
		changePartnerHandData : function( combo_obj ) {
			var id_prefix = combo_obj.id.split('_');
			id_prefix = id_prefix[0] +'_';
			var id_suffix = '$events_base';
			var url_params = {};
			url_params.ID = combo_obj.getValue();
			
			var param ={
				url: CC.f.mod.events.ajaxUrl +'extGetPartner',	
				params : url_params,
				success: function(result){
					if ( result.success ) {
						Ext.getCmp( id_prefix + 'NAME' + id_suffix ).setValue( result.partner.NAME );
						Ext.getCmp( id_prefix + 'ZIP' + id_suffix ).setValue( result.partner.ZIP );
						Ext.getCmp( id_prefix + 'CITY' + id_suffix ).setValue( result.partner.CITY );
						Ext.getCmp( id_prefix + 'ADDRESS' + id_suffix ).setValue( result.partner.ADDRESS );
						Ext.getCmp( id_prefix + 'TAX_NUMBER' + id_suffix ).setValue( result.partner.TAX_NUMBER );
						Ext.getCmp( id_prefix + 'BANK_ACCOUNT' + id_suffix ).setValue( result.partner.BANK_ACCOUNT );
					}
				}
			};	
			CC.help.ajax.doAjax(param);
		},

		open_antecedent_selector_window : function(){

			var param ={
				singleInstance : true,
				url: CC.f.mod.events.ajaxUrl +'extAntecedentSelectorForm',
				params: {},
				success: function(result){

					CC.f.mod.events.displayEditorWindow(null);

				}
			};	
			CC.help.ajax.doAjax(param);
		},
		
		doSelectAntecedents : function(){
			var data = CC.help.form.getFormData( CC.f.mod.events.formItems.antecedentSelector );
			CC.f.mod.events.displayEditorWindow( null, data['default'].open_bills, Ext.getCmp('MOVEMENT_TYPE_ID').getValue() );
			return true;
		},
		
		doSaveRecord : function(){
			var ok = CC.help.form.validateForm(CC.f.mod.events.formItems.edit);
			if ( ok ) {
				var data = CC.help.form.getFormData(CC.f.mod.events.formItems.edit);
				data['default']['ID'] = CC.f.mod.events.windows.edit.dbId;
				
				
				var param ={
					url: CC.f.mod.events.ajaxUrl +'extBasesave',
					params: {
						formdata: Ext.encode( data )
					},
					success: function(result){
						if ( result.success ) {
							//CC.f.mod.events.windows.edit.close();
						} else {
							Ext.MessageBox.alert( CC.b.enter.config.msgError, result.message );
						}
						CC.f.mod.events.grids.events_base.gridStore.reload();
					}
				};	
				CC.help.ajax.doAjax(param);
			} else {
				Ext.MessageBox.alert( CC.b.enter.config.msgError, CC.b.enter.config.msgCheckField );
			}
			
			return ok;
		},
		
		doDelete : function( key ) {
			Ext.MessageBox.confirm('', 
				CC.b.mod.events.config.deleteQuestion, 
				function( btn )
				{
					if (btn == 'yes')
					{
						CC.f.mod.events.deleteFromDatabase( key, false );
					}
				}
			);
		},
		
		deleteFromDatabase : function( pDbId, confirmed ) {
			var url_params = {
				ID: pDbId
			};
			if ( confirmed ) {
				url_params['confirmed'] = true;
			}
			
			var param ={
				url: CC.f.mod.events.ajaxUrl +'extBasedelete',
				params: url_params,
				success: function(result){
					if ( result.success ) {
						CC.f.mod.events.grids.events_base.gridStore.reload();
					} else {
						if ( result.confirm ) {
							Ext.MessageBox.confirm('', 
								result.message, 
								function( btn )
								{
									if (btn == 'yes')
									{
										CC.f.mod.events.deleteFromDatabase( pDbId, true );
									}
								}
							);
						} else {
							Ext.MessageBox.alert( CC.b.enter.config.msgError, result.message );
						}
					}
				}
			};	
			CC.help.ajax.doAjax(param);
		},
		

		doPrint : function( pDbId ){
			var param ={
				url: CC.f.mod.events.ajaxUrl +'extIsPrintable',
				params: {
					ID: pDbId
				},
				success: function(result){
					if ( !result.success ) {
						Ext.MessageBox.alert( CC.b.enter.config.msgError, result.message );
					} else {
						window.open(CC.f.mod.events.ajaxUrl +'Printevents/ID/'+ pDbId );
					}
				}
			};	
			CC.help.ajax.doAjax(param);
		},
		
		
		
		
		
		
		// ------ v v v ---- Tételek kezelése ---- v v v -------------------------------
		/**
		 * events_base - bill_item
		 * editForm	 - itemEditForm
		 * edit		 - itemEdit
		 */
		
		
		display_bill_item_EditorWindow : function( dbId ){
			var request_params = null;
			if ( dbId != null ) {
				request_params = { 'ID': dbId };
			} else {
				request_params = {};
			}
			
			var param ={
				singleInstance : true,
				url: CC.f.mod.events.ajaxUrl +'extItemform',
				params: request_params,
				success: function(result){
					CC.b.mod.events.config.formData.bill_item_EditForm = result;
					//makeitems(formleíró adatok, modul neve, formon belüli index, gridconfig helye helye)
					CC.help.form.makeItems( CC.b.mod.events.config.formData.bill_item_EditForm.items, 'events', 'bill_item_Edit', CC.b.mod.events.config.grids.bill_item);
					CC.help.form.showWindow( CC.b.mod.events.config.formData.bill_item_EditForm.items, 'events', 'bill_item_Edit', 'doSave_bill_item_Record', CC.b.mod.events.config.formData.bill_item_EditForm.window.edit);
					CC.f.mod.events.windows.bill_item_Edit.dbId = dbId;
					
					var postfix = '$bill_item';
					Ext.getCmp( 'AMOUNT'+ postfix ).on( 'change', CC.f.mod.events.bill_item_num_change );
					Ext.getCmp( 'NET_UNIT_PRICE'+ postfix ).on( 'change', CC.f.mod.events.bill_item_num_change );
					Ext.getCmp( 'DISCOUNT'+ postfix ).on( 'change', CC.f.mod.events.bill_item_discount_change );
					Ext.getCmp( 'DISCOUNTED_NET_UNIT_PRICE'+ postfix ).on( 'change', CC.f.mod.events.bill_item_num_change );
				}
			};	
			CC.help.ajax.doAjax(param);
		},

		showAddbill_itemForm : function() {
			CC.f.mod.events.display_bill_item_EditorWindow( null );
		},
		

		doSave_bill_item_Record : function(){
			var ok = CC.help.form.validateForm(CC.f.mod.events.formItems.bill_item_Edit);
			if ( ok ) {
				var data = CC.help.form.getFormData(CC.f.mod.events.formItems.bill_item_Edit);
				data['default']['ID'] = CC.f.mod.events.windows.bill_item_Edit.dbId;
				
				//CCdebug( 'data', data );
				
				var param ={
					url: CC.f.mod.events.ajaxUrl +'extItemsave',
					params: {
						formdata: Ext.encode( data )
					},
					success: function(result){
						if ( result.success ) {
							
							CC.f.mod.events.changeSumPrice( result.sumPrice );
							
							//CC.f.mod.events.windows.edit.close();
						} else {
							Ext.MessageBox.alert( CC.b.enter.config.msgError, result.message );
						}
						CC.f.mod.events.grids.bill_item.gridStore.reload();
					}
				};	
				CC.help.ajax.doAjax(param);
			} else {
				Ext.MessageBox.alert( CC.b.enter.config.msgError, CC.b.enter.config.msgCheckField );
			}
			
			return ok;
		},
		
		doDelete_bill_item : function( key ) {
			Ext.MessageBox.confirm('', 
				CC.b.mod.events.config.deleteItemQuestion, 
				function( btn )
				{
					if (btn == 'yes')
					{
						CC.f.mod.events.delete_bill_item_FromDatabase( key );
					}
				}
			);
		},
		
		delete_bill_item_FromDatabase : function( pDbId ) {
			var param ={
				url: CC.f.mod.events.ajaxUrl +'extItemdelete',
				params: {
					ID: pDbId
				},
				success: function(result){
					if ( result.success ) {
						CC.f.mod.events.changeSumPrice( result.sumPrice );
						CC.f.mod.events.grids.bill_item.gridStore.reload();
					} else {
						Ext.MessageBox.alert( CC.b.enter.config.msgError, result.message );
					}
					
				}
			};
			CC.help.ajax.doAjax(param);
		},
		
		changeSumPrice : function( price ) {
			postfix = '$events_base';
			Ext.getCmp( 'NET'+ postfix ).setValue( price.SUM_NET );
			Ext.getCmp( 'GROSS'+ postfix ).setValue( price.SUM_GROSS );
		},
		
		bill_item_num_change : function() {
			
			postfix = '$bill_item';
			
			amount_OBJ = Ext.getCmp('AMOUNT' + postfix );
			net_unit_price_OBJ = Ext.getCmp('NET_UNIT_PRICE' + postfix );
			discount_OBJ = Ext.getCmp('DISCOUNT' + postfix );
			discounted_net_unit_price_OBJ = Ext.getCmp('DISCOUNTED_NET_UNIT_PRICE' + postfix );
			
			net_OBJ = Ext.getCmp('NET' + postfix );
			vat_key_OBJ = Ext.getCmp('VAT_KEY' + postfix );
			gross_OBJ = Ext.getCmp('GROSS' + postfix );
			
			tmp_price = net_unit_price_OBJ.getValue();
			if ( discounted_net_unit_price_OBJ.getValue() > 0 ) {
				tmp_price = discounted_net_unit_price_OBJ.getValue();
				discount_OBJ.setValue( round_fixed( 100 * (1 - (discounted_net_unit_price_OBJ.getValue()/net_unit_price_OBJ.getValue())) , 4) );
			} else {
				discount_OBJ.setValue( null );
				discounted_net_unit_price_OBJ.setValue( null );
			}
			
			
			tmp_price = amount_OBJ.getValue() * tmp_price;
			net_OBJ.setValue( round_fixed( tmp_price, 2 ) );
			gross_OBJ.setValue( round_fixed( tmp_price * (1+(vat_key_OBJ.getValue()/100)), 2) );
			
		},
		
		bill_item_discount_change : function() {

			postfix = '$bill_item';
			
			amount_OBJ = Ext.getCmp('AMOUNT' + postfix );
			net_unit_price_OBJ = Ext.getCmp('NET_UNIT_PRICE' + postfix );
			discount_OBJ = Ext.getCmp('DISCOUNT' + postfix );
			discounted_net_unit_price_OBJ = Ext.getCmp('DISCOUNTED_NET_UNIT_PRICE' + postfix );
			
			net_OBJ = Ext.getCmp('NET' + postfix );
			vat_key_OBJ = Ext.getCmp('VAT_KEY' + postfix );
			gross_OBJ = Ext.getCmp('GROSS' + postfix );
			
			tmp_price = net_unit_price_OBJ.getValue();
			discount_percent = discount_OBJ.getValue();
			if ( discount_percent > 0 && discount_percent < 100 ) {
				tmp_price = round_fixed( tmp_price * (1 -(discount_OBJ.getValue()/100) ), 4 );
				discounted_net_unit_price_OBJ.setValue( tmp_price );
			} else {
				discount_OBJ.setValue( null );
				discounted_net_unit_price_OBJ.setValue( null );
			}
			
			
			tmp_price = amount_OBJ.getValue() * tmp_price;
			net_OBJ.setValue( round_fixed( tmp_price, 2) );
			gross_OBJ.setValue( round_fixed( tmp_price * (1+(vat_key_OBJ.getValue()/100)), 2) );
			
		},
		
		changePacking : function( product_id_combo_obj ) {
			var field_suffix = '$bill_item';
			var customer_id = null;
			
			// FIXME ezt nem találja meg az Ext!!!
			//var customer_id_combo_obj = Ext.getCmp( "CUSTOMER_ID$events_base" );
			var customer_id_combo_obj = null;
			var idx = 0;
			for ( idx = 0; (idx < CC.f.mod.events.formItems.edit.length) && customer_id_combo_obj == null; idx++ ) {
				if ( CC.f.mod.events.formItems.edit[ idx ].dataIndex == 'CUSTOMER_ID' ) {
					customer_id_combo_obj = CC.f.mod.events.formItems.edit[ idx ];
				}
			}
			try {
				customer_id = customer_id_combo_obj.getValue()
			} catch(e){
				die_r( customer_id_combo_obj ,'furcs ollyektum' );
			}
			
			var param ={
				url: CC.f.mod.events.ajaxUrl +'extPackingData',
				params: {
					ID: product_id_combo_obj.getValue(),
					CUSTOMER_ID : customer_id
				},
				success: function(result){
					if ( result.success ) {
						
						//die_r( result, 'result' );
						
						Ext.getCmp( 'VAT_KEY'+ field_suffix ).setValue( result.data.VAT_KEY );
						Ext.getCmp( 'NET_UNIT_PRICE'+ field_suffix ).setValue( result.data.NET_UNIT_PRICE );
						Ext.getCmp( 'DISCOUNT'+ field_suffix ).setValue( result.data.DISCOUNT );
						
						CC.f.mod.events.bill_item_num_change();
					} else {
						Ext.MessageBox.alert( CC.b.enter.config.msgError, result.message );
					}
				}
			};
			CC.help.ajax.doAjax(param);
			
		},
		
		showAddworksheetsForm : function() {
			//CC.f.mod.delivery_notes.display_bill_item_EditorWindow( null );
			CC.f.mod.events.grids.worksheets.grid.store.add( new Ext.data.Record(
					{
						id : -1,
						BILL_ID: ''
						
					}
				)
			);
		},
		
		doDelete_worksheets : function(key){
			Ext.MessageBox.confirm('', 
				CC.b.mod.products.config.deleteQuestion, 
				function( btn )
				{
					if (btn == 'yes')
					{
						CC.f.mod.events.deleteworksheetsFromDatabase( key );
					}
				}
			);
		},
		
		deleteworksheetsFromDatabase : function( pDbId ) {
			var param ={
				url: CC.f.mod.events.ajaxUrl +'extWorksheetDelete',
				params: {
					ID: pDbId
				},
				success: function(result){
					if ( !result.success ) {
						Ext.MessageBox.alert( CC.b.enter.config.msgError, result.message );
					}
					CC.f.mod.events.grids.worksheets.grid.store.reload();
				}
			};	
			CC.help.ajax.doAjax(param);
		},
	
		worksheets_movetype_renderer : function( value, metadata, record, colIndex, rowIndex, store ) {

			return record.data.MOVE_TYPE_NAME;
		},
		
		worksheets_bill_renderer : function( value, metadata, record, colIndex, rowIndex, store ) {
			//alert(record.data.BILL_NAME);
			return record.data.BILL_NAME;
		},
		
		callBillModul : function(){
		//	CC.b.mod.delivery_notes;
		},
		
		worksheet_items_date_renderer : function(value, metadata, record, colIndex, rowIndex, store){
			if (value instanceof Date) {
            	return new Date(value).dateFormat('Y-m-d');
            }
            return value;
        },
        
        worksheets_autosave : function(event){     	
        	/* The edit event object has the following properties 
		    * grid - This grid
		    * record - The record being edited
		    * field - The field name being edited
		    * value - The value being set
		    * originalValue - The original value for the field, before the edit.
		    * row - The grid row index
		    * column - The grid column index
		    */
			var datas = {};
			temp = {};
			//die_r(event.record);
			if (typeof event.record.json != 'undefined'){
				if (typeof event.record.json.ID != 'undefined'){
						temp['ID']=event.record.json.ID;
				}
			}
			temp['BILL_ID']=event.record.data.BILL_ID;
			temp['PACKING_ID']=1;
			temp['COMMENT']=event.record.data.COMMENT;
			//temp['EXPIRE_DATE']= event.record.data.EXPIRE_DATE.format('Y-m-d');
			temp['EXPIRE_DATE']= event.record.data.EXPIRE_DATE;
			//die_r(temp['EXPIRE_DATE']);
			//die_r(event.record.data.EXPIRE_DATE);
			
			datas['default']=temp;
			
			var param ={
				url: CC.f.mod.events.ajaxUrl +'extWorksheetSave',
				params: {
					formdata : Ext.encode(datas)
				},
				success: function(result){
					if ( !result.success ) {
						Ext.MessageBox.alert( CC.b.enter.config.msgError, result.message );
					}else{
						//die_r(result);
						if ( typeof result.newId != 'undefined' ) {
							event.record.set('ID', result.newId );
							event.record.id = result.newId;
						}
					}
					CC.f.mod.events.grids.worksheets.grid.store.commitChanges();
					CC.f.mod.events.grids.worksheets.grid.store.reload();
				}
			};	
			CC.help.ajax.doAjax(param);
        }
		
	}
	
}();
