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

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


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

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

		warehouse_changed : false,
		last_movement_id : null,
		last_invoice_group_id : null,


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


		list : function() {
			this.last_invoice_group_id = null;
			var tbarConfig = [ 
				{
					text : CC.b.enter.config.gridNewRecord,
					handler : CC.f.mod.delivery_notes.open_antecedent_selector_window
				},
				{
					xtype : 'tbfill'
				},
				{
					xtype : 'label',
					text : CC.b.mod.delivery_notes.config.textWarehouse,
					style : 'padding:0 2px;'
				},
				{
					xtype : 'combo',
					id : 'WAREHOUSE_ID',
					dataIndex : 'WAREHOUSE_ID',
					displayField : 'text',
					valueField : 'value',
					mode : 'remote',
					triggerAction : 'all',
					store : new Ext.data.JsonStore(
						{
							autoLoad : true,
							url : this.ajaxUrl + 'extComboListFilterWarehouse',
				  			fields : ['value', 'text'],
				  			root : 'result'
						}
					),
					autoLoad : true,
					typeAhead : true,
					forceSelection : true,
					allowBlank : false
				},
				{
					xtype : 'tbseparator'
				},
				{
					xtype : 'label',
					text : CC.b.mod.delivery_notes.config.textMovementType,
					style : 'padding:0 2px;'
				},
				{
					xtype : 'combo',
					id : 'MOVEMENT_TYPE_ID',
					dataIndex : 'MOVEMENT_TYPE_ID',
					displayField : 'text',
					valueField : 'value',
					mode : 'remote',
					triggerAction : 'all',
					store : new Ext.data.JsonStore(
						{
							autoLoad : true,
							url : this.ajaxUrl + 'extComboListFilterMovementType',
				  			fields : ['value', 'text'],
				  			root: 'result'
						}
					),
			   		autoLoad : true,
			   		editable : false,
			   		forceSelection : true,
					allowBlank : false
				}
			];

			// modulNameParam, gridName, ajaxUrl, primaryField, tbarConfig
			CC.help.grid.initGrid(
				'delivery_notes', 
				{
					dataIndex : 'bill_base',
					ajaxUrl : 'extBase',
					primaryField : 'ID'
				}, 
				tbarConfig
			);

			CC.main.layout.center.add(this.grids.bill_base.grid);
			CC.f.mod.delivery_notes.grids.bill_base.gridStore.baseParams = {
				movement_type_id : CC.b.mod.delivery_notes.config.defaultMovementType.ID, 
				invoice_group_id : this.last_invoice_group_id
			};
			CC.main.layout.center.doLayout();
			this.grids.bill_base.grid.on('rowdblclick', this.displayEditorWindowByDblClick);
			
			// Warehouse alapérték beállítás
			ware_combo = CC.help.form.setComboDefaultValue(
				'WAREHOUSE_ID',
				CC.b.mod.delivery_notes.config.defaultWarehouse.ID,
				CC.b.mod.delivery_notes.config.defaultWarehouse.NAME
			);
			ware_combo.on('select', CC.f.mod.delivery_notes.ware_filter_change);

			// Movement type alapérték beállítás
			move_combo = CC.help.form.setComboDefaultValue(
				'MOVEMENT_TYPE_ID',
				CC.b.mod.delivery_notes.config.defaultMovementType.ID,
				CC.b.mod.delivery_notes.config.defaultMovementType.NAME
			);
			move_combo.on('select', CC.f.mod.delivery_notes.move_type_filter_change);
			move_combo.store.on('load', CC.f.mod.delivery_notes.move_type_filter_after_change);
		},


		displayEditorWindow : function(dbId, srcBillIds, movement_type_id, duplicate) {
			var request_params = null;
			request_params = {};
			if(dbId != null) {
				request_params.ID = dbId;
			}
			request_params.duplicate = duplicate;
			if(srcBillIds != null) {
				request_params.antecedent_bill_ids = Ext.encode(srcBillIds);
			}
			if(movement_type_id != null && movement_type_id > 0) {
				request_params.movement_type_id = movement_type_id;
			}

			var param ={
				singleInstance : true,
				url: CC.f.mod.delivery_notes.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.delivery_notes.config.formData.editForm = result;
						if (result.finalized == 'N' || duplicate){
							//makeitems(formleíró adatok, modul neve, formon belüli index, gridconfig helye helye)
							CC.help.form.makeItems(CC.b.mod.delivery_notes.config.formData.editForm.items, 'delivery_notes', 'edit', CC.b.mod.delivery_notes.config.grids.bill_base);
							CC.help.form.showWindow(CC.b.mod.delivery_notes.config.formData.editForm.items, 'delivery_notes', 'edit', 'doSaveRecord', CC.b.mod.delivery_notes.config.formData.editForm.window.edit);
							CC.f.mod.delivery_notes.windows.edit.dbId = dbId;
							CC.f.mod.delivery_notes.windows.edit.duplicate = duplicate;

							// FIXME ez nem megy mac alatt!!!
							try{
							Ext.getCmp('ISSUE_DATE$bill_base').on('change',function(obj) {
								var payType = Ext.getCmp('PAYMENT_METHOD$bill_base').getValue();
								if(payType == 'cache' || payType == 'online_card'){
									var time = Ext.getCmp('ISSUE_DATE$bill_base').getValue();
									Ext.getCmp('TRADE_DATE$bill_base').setValue(time);
									Ext.getCmp('TRADE_DATE$bill_base').setDisabled(true);
									Ext.getCmp('PAYMENT_DATE$bill_base').setValue(time);
									Ext.getCmp('PAYMENT_DATE$bill_base').setDisabled(true);
								}else{
									Ext.getCmp('TRADE_DATE$bill_base').reset();
									Ext.getCmp('TRADE_DATE$bill_base').setDisabled(false);
									Ext.getCmp('PAYMENT_DATE$bill_base').reset();
									Ext.getCmp('PAYMENT_DATE$bill_base').setDisabled(false);
								}
							} );
							} catch(e) {}

							var selector = Ext.getCmp('PAYMENT_METHOD$bill_base');
							for(var i = 0; i < selector.items.length; i++) {
								if(typeof selector.items.items[i] == 'object') {
									Ext.getCmp(selector.items.items[i].id).on('check',
										function(obj) {
											Ext.getCmp('ISSUE_DATE$bill_base').fireEvent('change');
										}
									);
								}
							}					
						} else {
							CC.help.form.makeItems(CC.b.mod.delivery_notes.config.formData.editForm.items, 'delivery_notes', 'edit', CC.b.mod.delivery_notes.config.grids.bill_base);
							CC.help.form.showWindow(CC.b.mod.delivery_notes.config.formData.editForm.items, 'delivery_notes', 'edit', 'cantEdit', CC.b.mod.delivery_notes.config.formData.editForm.window.edit);
							CC.f.mod.delivery_notes.windows.edit.dbId = dbId;
						}
					}
				}
			};	
			CC.help.ajax.doAjax(param);
		},


		cantEdit : function() {
			Ext.MessageBox.show(
				{
					title : CC.b.enter.config.msgError,
					msg : CC.b.mod.delivery_notes.config.readOnly,
					buttons : Ext.MessageBox.OK,
					icon : Ext.MessageBox.ERROR
				}
			);
		},


		displayEditorWindowByDblClick : function(gridObject, rowIndex) {
			var module = CC.f.mod.delivery_notes;
			var sels = module.grids.bill_base.grid.selModel.selections;
			var key = typeof sels.keys == 'object' ? sels.keys[0] : sels.keys;
			module.displayEditorWindow(key, null, null, false);
		},


		displayBillForm : function() {
			CC.f.mod.delivery_notes.displayEditorWindow(null, null, CC.b.mod.delivery_notes.config.billMoveTypeId, false);
		},


		ware_filter_change : function() {
			if(!this.isValid()) return;

			CC.f.mod.delivery_notes.warehouse_changed = true;
			var s = Ext.getCmp('MOVEMENT_TYPE_ID').store;
			s.baseParams = {warehouse_id : this.getValue() };
			s.reload();
		},


		move_type_filter_change : function() {
			if(!this.isValid()) return;

			var module = CC.f.mod.delivery_notes;
			module.last_movement_id = this.getValue();
			module.reload_grid(this.getValue());
		},


		move_type_filter_after_change : function() {
			var module = CC.f.mod.delivery_notes;
			if(module.warehouse_changed) {
				module.warehouse_changed = false;
				module.reload_grid(Ext.getCmp('MOVEMENT_TYPE_ID').getValue());
			}
		},


		invoice_group_filter_change : function() {
			if(!this.isValid()) return;

			var module = CC.f.mod.delivery_notes;
			module.last_invoice_group_id = this.getValue();
			module.reload_grid(CC.b.mod.delivery_notes.config.billMoveTypeId);
		},


		reload_grid : function(p_movement_type_id) {
			var s = CC.f.mod.delivery_notes.grids.bill_base.gridStore;
			s.baseParams = {movement_type_id : p_movement_type_id, invoice_group_id : this.last_invoice_group_id };
			s.reload();
		},


		changePartnerHandData : function(combo_obj) {
			var id_prefix = combo_obj.id.split('_');
			id_prefix = id_prefix[0] + '_';
			var id_suffix = '$bill_base';
			var url_params = {};
			url_params.ID = combo_obj.getValue();

			var param = {
				url : CC.f.mod.delivery_notes.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_for_bills : function() {
			var module = CC.f.mod.delivery_notes;
			var module_back = CC.b.mod.delivery_notes;
			var request_params = {
				movement_type_id : Ext.getCmp('MOVEMENT_TYPE_ID_BILL').getValue()	
			};
			var param = {
				singleInstance : true,
				url : module.ajaxUrl + 'extAntecedentSelectorForm',
				params : request_params,
				success : function(result){
					if(result.noAntecedents == null) {
						var f = CC.help.form;
						module_back.config.formData.antecedentSelectorForm = result;
						var asf = module_back.config.formData.antecedentSelectorForm;
						//makeitems(formleíró adatok, modul neve, formon belüli index, gridconfig helye helye)
						f.makeItems(asf.items, 'delivery_notes', 'antecedentSelector',
								module_back.config.grids.open_bills);
						f.showWindow(asf.items, 'delivery_notes', 'antecedentSelector', 'doSelectAntecedentsBills',
								asf.window.antecedentSelector);
						module.windows.antecedentSelector.movement_type_id = request_params.movement_type_id;
						var partnerCombo = CCgetCmp(module.formItems.antecedentSelector, 'PARTNER$open_bills');
						partnerCombo.on('select',
							function() {
								var g = CCgetCmp(module.formItems.antecedentSelector , 'open_bills$open_bills').gridL;
								var s = g.getStore();
								s.baseParams = {partner : partnerCombo.getValue() };
								s.reload();
								g.getView().refresh(); 
							}
						);
					} else {
						module.displayEditorWindow(null, null, Ext.getCmp('MOVEMENT_TYPE_ID_BILL').getValue(), false);
					}
				}
			};	
			CC.help.ajax.doAjax(param);
		},


		open_antecedent_selector_window : function() {
			var module = CC.f.mod.delivery_notes;
			var module_back = CC.b.mod.delivery_notes;
			var request_params = {
				warehouse_id : Ext.getCmp('WAREHOUSE_ID').getValue(),
				movement_type_id : Ext.getCmp('MOVEMENT_TYPE_ID').getValue()	
			};
			var param = {
				singleInstance : true,
				url: module.ajaxUrl + 'extAntecedentSelectorForm',
				params: request_params,
				success: function(result) {
					if(result.noAntecedents == null) {
						var f = CC.help.form;
						module_back.config.formData.antecedentSelectorForm = result;
						var asf = module_back.config.formData.antecedentSelectorForm;
						//makeitems(formleíró adatok, modul neve, formon belüli index, gridconfig helye helye)
						f.makeItems(asf.items, 'delivery_notes', 'antecedentSelector',
								CC.b.mod.delivery_notes.config.grids.open_bills);
						f.showWindow(asf.items, 'delivery_notes', 'antecedentSelector', 'doSelectAntecedents',
								asf.window.antecedentSelector);
						module.windows.antecedentSelector.warehouse_id = request_params.warehouse_id;
						module.windows.antecedentSelector.movement_type_id = request_params.movement_type_id;
						var partnerCombo = CCgetCmp(module.formItems.antecedentSelector , 'PARTNER$open_bills');
						partnerCombo.on('select',
							function() {
								var g = CCgetCmp(module.formItems.antecedentSelector , 'open_bills$open_bills').gridL;
								var s = g.getStore();
								s.baseParams = {partner : partnerCombo.getValue() };
								s.reload();
								g.getView().refresh(); 
							}
						);
					} else {
						module.displayEditorWindow(null, null, Ext.getCmp('MOVEMENT_TYPE_ID').getValue(), false);
					}
				}
			};	
			CC.help.ajax.doAjax(param);
		},


		doSelectAntecedents : function() {
			var module = CC.f.mod.delivery_notes;
			var data = CC.help.form.getFormData(module.formItems.antecedentSelector);
			module.displayEditorWindow(null, data['default'].open_bills, Ext.getCmp('MOVEMENT_TYPE_ID').getValue(),false);
			return true;
		},


		doSelectAntecedentsBills : function() {
			var module = CC.f.mod.delivery_notes;
			var data = CC.help.form.getFormData(module.formItems.antecedentSelector);
			module.displayEditorWindow(null, data['default'].open_bills, Ext.getCmp('MOVEMENT_TYPE_ID_BILL').getValue(), false);
			return true;
		},


		doSaveRecord : function() {
			var ok = CC.help.form.validateForm(CC.f.mod.delivery_notes.formItems.edit);
			if(ok) {
				var data = CC.help.form.getFormData(CC.f.mod.delivery_notes.formItems.edit);
				if(!CC.f.mod.delivery_notes.windows.edit.duplicate) {
					data['default']['ID'] = CC.f.mod.delivery_notes.windows.edit.dbId;
				} else {
					if(data['default']['FINALIZED'] == true) {
						data['default']['FINALIZED'] = false;
					}
					data['default']['DUPLICATION_ID'] = CC.f.mod.delivery_notes.windows.edit.dbId;
				}

				var param = {
					url : CC.f.mod.delivery_notes.ajaxUrl +'extBasesave',
					params : {
						formdata : Ext.encode(data)
					},
					success : function(result) {
						if(result.success) {
							//CC.f.mod.delivery_notes.windows.edit.close();
						} else {
							Ext.MessageBox.alert(CC.b.enter.config.msgError, result.message);
						}
						CC.f.mod.delivery_notes.grids.bill_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.delivery_notes.config.confirmDelete,
				function(btn) {
					if(btn == 'yes') CC.f.mod.delivery_notes.deleteFromDatabase(key, false);
				}
			);
		},


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

			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.bill_base.gridStore.reload();
					else {
						if(result.confirm) {
							Ext.MessageBox.confirm('', result.message,
								function(btn) {
									if(btn == 'yes') module.deleteFromDatabase(id, 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.delivery_notes.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.delivery_notes.ajaxUrl + 'PrintDeliveryNotes/ID/' + pDbId);
					}
				}
			};	
			CC.help.ajax.doAjax(param);
		},


		before_query_delivery_address : function(obj) {
			var combo_obj = obj.combo;
			var id_suffix = '$bill_base';
			var customer_id_obj = CCgetCmp(CC.f.mod.delivery_notes.formItems.edit, 'CUSTOMER_ID' + id_suffix);
			if(customer_id_obj != null) {
				var last_customer_id = customer_id_obj.getValue();
				combo_obj.store.baseParams = {
					customer_id : last_customer_id
				};
			}
			return true;
		},
		// ------ v v v ---- Tételek kezelése ---- v v v -------------------------------
		display_bill_item_EditorWindow: function(dbId) {
			if (Ext.getCmp('TRADE_DATE$bill_base').getValue() == ''){
				Ext.MessageBox.alert(CC.b.enter.config.msgError, CC.b.enter.config.fillTradeDate);			
			}else{	
				/*CC.f.mod.delivery_notes.grids.bill_item.grid.store.add(
					new Ext.data.Record(
						{
							id : -1,
							AMOUNT : 0
						}
					)
				);*/
				
				var request_params = null;
				if ( dbId != null ) {
					request_params = { ID: dbId };
				} else {
					request_params = {};
				}
				
				var param ={
					singleInstance : true,
					url: CC.f.mod.delivery_notes.ajaxUrl +'extItemform',
					params: request_params,
					success: function(result) {
						var module = CC.f.mod.delivery_notes; 
						CC.b.mod.delivery_notes.config.formData.editItemForm = result;
						//makeitems(formleiro adatok, modul neve, formon beluli index, gridconfig helye helye)
						CC.help.form.makeItems( CC.b.mod.delivery_notes.config.formData.editItemForm.items, 'delivery_notes', 'editItem', CC.b.mod.delivery_notes.config.grids.bill_item);
						CC.help.form.showWindow( CC.b.mod.delivery_notes.config.formData.editItemForm.items, 'delivery_notes', 'editItem', 'bill_item_save', CC.b.mod.delivery_notes.config.formData.editItemForm.window.editItem);
						module.windows.editItem.dbId = dbId;
						//eventek
						Ext.getCmp('AMOUNT$bill_item').on('valid', module.calculatePrices);
						Ext.getCmp('NET_UNIT_PRICE$bill_item').on('change', module.calculatePrices);
						Ext.getCmp('VAT_KEY$bill_item').on('change', module.calculatePrices);
						Ext.getCmp('DISCOUNT$bill_item').on('change', module.calculatePrices);

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

		recalculateSum : function(){			
			var store = CC.f.mod.delivery_notes.grids.bill_item.gridStore.data.items;
			var price = {};
			price.SUM_NET = 0;
			price.SUM_GROSS= 0;
		//	die_r(store, 'store');
			for (i in store){
				if (typeof store[i] != 'undefined' ){
					if (typeof store[i] != 'function' ){
				//		die_r(store[i], 'store ii');
						price.SUM_NET += store[i].data.NET;
						price.SUM_GROSS += store[i].data.GROSS;
					}
				}
			}		
			
			CC.f.mod.delivery_notes.changeSumPrice(price);
		},
		
		
		doDelete_bill_item : function(key) {
			var module = CC.f.mod.delivery_notes;
			var store = module.grids.bill_item.grid.store;
			if (key.indexOf('_')){
				var keyTemp = key.toString();
				var record = store.getById(keyTemp);
				record.data.ID = record.id;
			}else{
				var record = store.getById(key);
			}
			
			if(record.data.ID == null) store.remove(record);
			else {
				Ext.MessageBox.confirm('', CC.b.mod.delivery_notes.config.confirmItemDelete, 
					function(btn) {
						if(btn == 'yes') module.delete_bill_item_FromDatabase(record.data.ID);
						CC.f.mod.delivery_notes.recalculateSum();
					}
				);
			}
		},


		delete_bill_item_FromDatabase : function(id) {
			var module = CC.f.mod.delivery_notes;
			var param = {
				url : module.ajaxUrl + 'extItemdelete',
				params : { ID : id },
				success : function(result) {
					if(result.success) {
						if(result.sumPrice != null) module.changeSumPrice(result.sumPrice);
						module.grids.bill_item.gridStore.reload();
						//CC.f.mod.delivery_notes.changeSumPrice(result.sumPrice);
					} else Ext.MessageBox.alert(CC.b.enter.config.msgError, result.message);
				}
			};
			CC.help.ajax.doAjax(param);
		},


		changeSumPrice : function(price) {
		//	die_r(price);
			postfix = '$bill_base';
			Ext.getCmp('NET' + postfix).setValue(price.SUM_NET);
			Ext.getCmp('GROSS' + postfix).setValue(price.SUM_GROSS);
		},


		// FIXME Ezt a gridhelp -nek kellene megoldania
		bill_item_renderer_packing_name : function(value, metadata, record, colIndex, rowIndex, store) {
			return record.data.PRODUCT_NAME;
		},

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

				var param ={
					url: CC.f.mod.delivery_notes.ajaxUrl +'extItemSave',
					params: {
						formdata: Ext.encode( data )
					},
					success: function(result){
						if ( result.success ) {
							try {
								CC.f.mod.delivery_notes.grids.bill_item.gridStore.reload();
								CC.f.mod.delivery_notes.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 customer_id = null;
			// FIXME ezt nem találja meg az Ext!!!
			//var customer_id_combo_obj = Ext.getCmp("CUSTOMER_ID$bill_base");
			var customer_id_combo_obj = null;
			var idx = 0;
			for(idx = 0; (idx < CC.f.mod.delivery_notes.formItems.edit.length) && customer_id_combo_obj == null; idx++) {
				if (CC.f.mod.delivery_notes.formItems.edit[ idx ].dataIndex == 'CUSTOMER_ID') {
					customer_id_combo_obj = CC.f.mod.delivery_notes.formItems.edit[ idx ];
				}
			}
			try {
				customer_id = customer_id_combo_obj.getValue();
			} catch(e) {
				die_r(customer_id_combo_obj ,'furcs ollyektum');
			}
			//vendor
			var vendor_id_combo_obj = null;
			var idx = 0;
			for(idx = 0; (idx < CC.f.mod.delivery_notes.formItems.edit.length) && vendor_id_combo_obj == null; idx++) {
				if (CC.f.mod.delivery_notes.formItems.edit[ idx ].dataIndex == 'VENDOR_ID') {
					vendor_id_combo_obj = CC.f.mod.delivery_notes.formItems.edit[ idx ];
				}
			}
			
			try {
				vendor_id = vendor_id_combo_obj.getValue();
			} catch(e) {
				die_r(vendor_id_combo_obj ,'furcs ollyektum');
			}
			var tradeDate = Ext.getCmp('TRADE_DATE$bill_base').getRawValue();
			var packing_id = CCgetCmp(CC.f.mod.delivery_notes.formItems.editItem,'PACKING_ID$bill_item').getValue();
			var param = {
				url : CC.f.mod.delivery_notes.ajaxUrl + 'extPackingData',
				params : {
					ID : packing_id,
					CUSTOMER_ID : customer_id,
					VENDOR_ID : vendor_id,
					TRADE_DATE : tradeDate
				},
				success : function(result) {
					if(result.success) {
						Ext.getCmp('NET_UNIT_PRICE$bill_item').setValue( Math.round(result.data.NET_UNIT_PRICE * 100) / 100);
						Ext.getCmp('VAT_KEY$bill_item').setValue( Math.round(result.data.VAT_KEY * 100) / 100);
						
						Ext.getCmp('AMOUNT$bill_item').on('valid', CC.f.mod.delivery_notes.calculatePrices);
						Ext.getCmp('NET_UNIT_PRICE$bill_item').on('change', CC.f.mod.delivery_notes.calculatePrices);
						Ext.getCmp('VAT_KEY$bill_item').on('change', CC.f.mod.delivery_notes.calculatePrices);
						Ext.getCmp('DISCOUNT$bill_item').on('change', CC.f.mod.delivery_notes.calculatePrices);
						
						CC.f.mod.delivery_notes.calculatePrices();
						
					} else {
						Ext.MessageBox.alert(CC.b.enter.config.msgError, result.message);
					}
				}
			};
			CC.help.ajax.doAjax(param);
		},

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

		},
		

		duplicate : function(id) {
			CC.f.mod.delivery_notes.displayEditorWindow(id, null, null, true);
		},


		productComboFilter : function() {
			var ei = CC.f.mod.delivery_notes.formItems.editItem;
			var product_id = CCgetCmp(ei, 'ITEM_PRODUCT_ID$bill_item').getValue();
			var packingCombo = CCgetCmp(ei, 'PACKING_ID$bill_item');
			
			var param = {
					url : CC.f.mod.delivery_notes.ajaxUrl + 'extStockHtml',
					params : { ID : product_id },
					success : function(result) {
						if(result.success) Ext.getCmp('STOCK_HTML$bill_item').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();
		}

	};

}();
