app.controller('incassiSDDCtrl',
	
function ($scope,$http,$cookies,$window, $location,$timeout, $mdDialog, $q, $routeParams, $cookies, utilsSvc, userService, UserManager,
		ComboManager, DisposizioniRid, DistinteBanca) {
	var vm=this;
	
	vm.filteredView = (typeof $routeParams.filter!="undefined");
	$location.search('filter', null).replace();

	vm.maxItems = 0;
	vm.itemsPerPage = 100;
	vm.records=[];
	vm.esitiRid=[];
	vm.selectedIndex=-1;
	vm.topIndex = 0;
	vm.filter = userService.getFiltroIncassiSDD();
	vm.allSelected=false;
	vm.tipologia = "SDD";
	vm.abilitaFirma = false;

	vm.initFilter = function() {
		return;
		if (vm.filter.tipoChiamata!="DistinteBanca" &&  vm.filter.tipoChiamata!="DistinteFlussiInput") {
			vm.filter.idDistintaBanca = 0;
			vm.filter.idDistintaFlusso = 0;
			vm.filter.codiceClienteDebitore='';
			userService.setFiltroIncassiSDD(vm.filter);
		}
	}
	
	vm.toggleSelectAll=function(){
		vm.allSelected=!vm.allSelected;
		vm.records.forEach(function(item) {
					item.selected = vm.allSelected
				});
	}

	vm.getSelectedIds = function(){
		var res = [];
		if (vm.allSelected)
			res.push(-1);
		else
			vm.records.forEach(function(item){
						if (item.selected) 
							res.push(item.id)
					});
		return res;
	}
	
	vm.cancellaDisposizioni = function(ev){
		utilsSvc.showConfirm('Attenzione','Confermi la cancellazione delle disposizioni selezionate?',ev).then(function(){
			utilsSvc.showForever('Cancellazione in corso...');
			ids=vm.getSelectedIds();
			let filter = new Object();
			filter = vm.filter;
					
			filter.selectedIds=ids;
			
			DisposizioniRid.MassDelete({},filter).$promise.then(function(data){
				utilsSvc.cancelMessage();
				if (data.value)
					utilsSvc.showMessage('Cancellazione effettuata');
				else
					utilsSvc.showMessage('Cancellazione effettuata.  Alcune distinte non erano in uno stato da permetterne la cancellazione');
				
				vm.getDisposizioni();
				
			}).catch(function(err){
					utilsSvc.cancelMessage();
					utilsSvc.showMessage('Si è verificato un errore durante la cancellazione');
			})
		});
	}

	$scope.largeScreen = function(){
		return utilsSvc.largeScreen();
	}
	
	vm.initFilter();
	
	vm.getGridItemHeight = function() {
		return utilsSvc.getGridHeight();
	}

	if (localStorage.getItem("filter")) {
		vm.filter = $scope.$eval(localStorage.getItem("filter"));
		localStorage.removeItem("filter");
		userService.hideMenu();
	}
	

	if (utilsSvc.largeScreen())	
		vm.columnWidths=[
				70,  //0
				90,  //1
				180, //2
				120, //3
				90,  //4
				120, //5this.listPromise
				114, //6
				114, //7
				60,  //8
				220, //9
				90,  //10
				80,  //11
				90,  //12
				70,  //13
				140, //14
				290, //15
				200  //16
			];
	else
		vm.columnWidths=[
			70,  //0
			90,  //1
			220, //2
			120, //3
			90,  //4
			70, //5
			114, //6
			114, //7
			60,  //8
			220, //9
			90,  //10
			90,  //11
			90,  //12
			70,  //13
			140, //14
			290, //15
			200  //16
		];

	vm.getListHeight = function() {
		containerHeight = ($window.innerHeight - $('#container').position().top - $('#view').position().top);
		  return {'height':  containerHeight + 'px'};
	};
	$window.addEventListener('resize', onResize);
	function onResize() {
	  $scope.$digest();
	}
	$scope.$on('$destroy', function() {
	  $window.removeEventListener('resize', onResize);
	});
	
	$timeout(function() {
	    var evt = $window.document.createEvent('UIEvents'); 
	    evt.initUIEvent('resize', true, false, $window, 0); 
	    $window.dispatchEvent(evt);
	});
	
	vm.largeScreen =function(){
		return utilsSvc.largeScreen();
	}
	
	vm.openMenu = function($mdMenu, ev) {
	      originatorEv = ev;
	      $mdMenu.open(ev);
	    };
	    
	vm.getEsitoColor=function(esito){
		var color;
		if (esito==2)
			color = 'red';
		else if (esito==1)
			color = 'green';
		return {'color': color};		
	}
	    
	    
	vm.getColumnWidth = //	              }
		//        this.lastStartIdx = index;
		function(idx) {
		return {
				'width': vm.columnWidths[idx] + 'px', 
				'min-width':vm.columnWidths[idx] + 'px',
				//'padding-left':'6px',
				//'padding-right':'6px',
				'margin-left':'8px',
				'margin-right':'8px'
		};
	}
	
	vm.cercaErrori = function(event){
		vm.getDisposizioni();		
	}
	
	vm.stampaDisposizioni = function() {
		utilsSvc.showForever('Generazione in corso...');
		ids=vm.getSelectedIds();
		let filter = new Object();
		if (vm.filteredView)
			 filter = userService.getFilter();
		else
			filter = vm.filter;
				
		filter.selectedIds=ids;
		if (vm.filteredView)
			DisposizioniRid.PrintFiltered({label:'Stampa Disposizioni SDD'},filter).$promise.then(function(data){
				utilsSvc.downloadFile('application/pdf',data.response,'DisposizioniRid.pdf');
				utilsSvc.cancelMessage();
			}).catch(function(err){
				if (err.status==404) {
					utilsSvc.cancelMessage();
					utilsSvc.showMessage('Nessuna distinta estratta');
				}
			})
		else
			DisposizioniRid.Print({label:'Stampa Disposizioni SDD'},filter).$promise.then(function(data){
				utilsSvc.downloadFile('application/pdf',data.response,'DisposizioniRid.pdf');
				utilsSvc.cancelMessage();
			}).catch(function(err){
				if (err.status==404) {
					utilsSvc.cancelMessage();
					utilsSvc.showMessage('Nessuna distinta estratta');
				}
			})
	}
	
	vm.esportaDisposizioni = function() {
		utilsSvc.showForever('Generazione in corso...');
		ids=vm.getSelectedIds();
		let filter = new Object();
		if (vm.filteredView)
			 filter = userService.getFilter();
		else
			filter = vm.filter;
				
		filter.selectedIds=ids;
		
		if (vm.filteredView)
			DisposizioniRid.ExportFiltered({},filter).$promise.then(function(data){
				utilsSvc.downloadFile('attachment/csv',data.response,'export.csv');
				utilsSvc.cancelMessage();
			}).catch(function(err){
				if (err.status==404) {
					utilsSvc.cancelMessage();
					utilsSvc.showMessage('Nessuna distinta estratta');
				}
			})
		else
			DisposizioniRid.Export({},filter).$promise.then(function(data){
				utilsSvc.downloadFile('attachment/csv',data.response,'export.csv');
				utilsSvc.cancelMessage();
			}).catch(function(err){
				if (err.status==404) {
					utilsSvc.cancelMessage();
					utilsSvc.showMessage('Nessuna distinta estratta');
				}
			})
	}
	
	vm.getMaxListWidth = function() {
		var res=0;
		for (var i=0;i<vm.columnWidths.length;i++)
			res += vm.columnWidths[i]+6+8+10;
		
		$('#container').css('width',($('#header').width()+10)+'px');
		return {'width': res+ 'px!important;'}
	}
	
	vm.setOrderField = function(field) {
		if (vm.filter.orderField!=field)
			vm.filter.orderField = field;
		else
			vm.filter.orderField = "-" +field;
		
		vm.getDisposizioni();
	}


	vm.firmaDistinta = function() {
		if (userService.getFiltroIncassiSDD().importoDistinta < vm.appVariables.importoLimiteFirma
				&& (userService.getFiltroIncassiSDD().userIdFirmatario1 == '' || userService
						.getFiltroIncassiSDD().userIdFirmatario1 == null)) {
			utilsSvc
					.showConfirm("Conferma",
							"Confermi la firma della distinta e l'emissione del flusso di pagamento?")
					.then(
							function(res) {
								vm
										.eseguiFirma(
												1,
												1,
												userService
														.getFiltroIncassiSDD().idDistintaBanca);
							});
		} else if (userService.getFiltroIncassiSDD().importoDistinta >= vm.appVariables.importoLimiteFirma
				&& (userService.getFiltroIncassiSDD().userIdFirmatario1 == '' || userService
						.getFiltroIncassiSDD().userIdFirmatario1 == null)) {
			utilsSvc
					.showConfirm(
							"Conferma",
							"Confermi la firma della distinta e l'emissione del flusso di pagamento?<br>Per l'emissione del flusso di pagamento sarà richiesto il secondo firmatario")
					.then(
							function(res) {
								vm
										.eseguiFirma(
												1,
												0,
												userService
														.getFiltroIncassiSDD().idDistintaBanca);
							});
		} else if (userService.getFiltroIncassiSDD().userIdFirmatario1 != '') {
			utilsSvc
					.showConfirm("Conferma",
							"Confermi la firma della distinta e l'emissione del flusso di pagamento?")
					.then(
							function(res) {
								vm
										.eseguiFirma(
												2,
												1,
												userService
														.getFiltroIncassiSDD().idDistintaBanca);
							});
		}

	}

	vm.eseguiFirma = function(tipoFirma, generaFlusso, idDistintaBanca) {
		DistinteBanca.FirmaDistinta({
			tipoFirma : tipoFirma,
			generaFlusso : generaFlusso,
			idDistintaBanca : idDistintaBanca
		}).$promise
				.then(function(res) {
					if (res[0] == "0")
						utilsSvc
								.show("Firma distinta effettuata");
					else if (res[0] == "4")
						utilsSvc
								.show("Firma distinta non effettuata: Errore : ErrorConflict");
					else if (res[0] == "5")
						utilsSvc
								.show("Firma distinta non effettuata: Errore : ErrorConflictRecordDeleted");
					else if (res[0] == "6")
						utilsSvc
								.show("Firma distinta non effettuata, tutte le disposizioni sono state eliminate");
					else
						utilsSvc
								.show("Firma distinta non effettuata: Errore : "
										+ res);
					$location.path('/distinteBanca');
				})
	}
	
	vm.infiniteItems = {
	          numLoaded_: 0,
	          toLoad_: 0,
	          loading_:false,
	          lastStartIdx:-1,
	          listPromise:null,
	          canceler: $q.defer(),
	          // Required.vm.initFilter();
	          getItemAtIndex: function(index) {
	        	  if (vm.maxItems==0 ||  index>vm.maxItems)
	        		  return null;
	        	 if (!vm.infiniteItems.loading_)
	        		 if (index > vm.records.length+vm.infiniteItems.toLoad_) {
	        			 vm.infiniteItems.fetchMoreItems_(index);
	        			 return null;
	        		 }
	            return vm.records [index];
	          },
	          // Required.
	          // For infinite scroll behavior, we always return a slightly
				// higher
	          // number than the previously loaded items.
	          getLength: function() {
        		  return vm.maxItems;
	        	  
	          },
	          fetchMoreItems_: function(index) {
	            if (vm.infiniteItems.toLoad_ < index) {
	            	vm.infiniteItems.toLoad_ += vm.itemsPerPage;
	              utilsSvc.showWaitMessage('Ricerca in corso...');
	              
	              vm.infiniteItems.loading_ = true;
	              
	              if ((vm.records.length+vm.itemsPerPage)<vm.selectedIndex)
	            	  vm.itemsPerPage=vm.selectedIndex-vm.records.length+1;
	              
	              if (vm.filteredView) {
	            	  var args = {filtroRicerca: userService.getFilter(), filtro:vm.filter};
	            	  this.listPromise = DisposizioniRid.Filter({start: vm.records.length,size:vm.itemsPerPage,orderField:vm.filter.orderField},args).$promise;
	              }
            	  else	            	  
            		  this.listPromise = DisposizioniRid.List({start: vm.records.length,size:vm.itemsPerPage},vm.filter).$promise;
		              
	              var mod=this;
		              this.listPromise.then(
			              			function(data){
			              				vm.infiniteItems.loading_ = false;
			              				vm.infiniteItems.toLoad_=0;
			              				utilsSvc.cancelWaitMessage();
			              				vm.records = vm.records.concat(data);
			              				mod.numLoaded_ = vm.records.length;
			              				mod.lastStartIdx = vm.records.length;
			              				
			              				vm.topIndex = vm.selectedIndex;
			              			},
			              			function(error) {
			              				vm.infiniteItems.loading_ = false;
			              				vm.infiniteItems.toLoad_=0;
			              				utilsSvc.handleHttpError(error);
			              			}
	              	)
	              
	            }
	            
          }
	}	

	

	vm.getDisposizioni = function(){
		utilsSvc.showWaitMessage('Ricerca in corso...');
		 vm.filter.selectedIds=[];
		if (vm.filteredView) {
			var args = {filtroRicerca: userService.getFilter(), filtro:vm.filter};
			DisposizioniRid.CountFiltered({},args,
					function(data){
						vm.records=[];
						vm.maxItems = data.value;
						vm.infiniteItems.numLoaded_ = 0;
						vm.infiniteItems.toLoad_ = 0;
						utilsSvc.cancelWaitMessage();
						if (data.value==0 && vm.filteredView) {
							utilsSvc.showMessage('Nessuna disposizione estratta');
							$window.history.back();
						}
			},
			function(error) {
				utilsSvc.cancelWaitMessage();	
  				utilsSvc.handleHttpError(error);
  			}
		);
		}
		else
			DisposizioniRid.Count(vm.filter,
					function(data){
						vm.records=[];
						vm.maxItems = data.value;
						vm.infiniteItems.numLoaded_ = 0;
						vm.infiniteItems.toLoad_ = 0;
						utilsSvc.cancelWaitMessage();	
					}, 
          			function(error) {
						utilsSvc.cancelWaitMessage();	
          				utilsSvc.handleHttpError(error);
          			}
				);
	}
	
	vm.decodeCircuitoSDD = function(cod){
		return utilsSvc.decodeCircuitoSDD(cod);
	}
	
	vm.getEsitoIcon = function(esito) {
		if (esito==='1')
			return "fa-clear";
		else if (esito==='2')
			return 'fa-times';
	}
	

	vm.ricercaDisposizioni = function(ev) {
		$mdDialog.show({
            templateUrl: 'templates/filtroDisposizioni.html',
            controller: 'filtroDisposizioniCtrl',
            targetEvent: ev,
            locals: {filter:vm.filter}
        })
        	.then(function(args){
        		//vm.filteredView = false;
        		// dialog confirmed
        		vm.filter = args;
        		vm.getDisposizioni();
        	},
        	function(){
 
        	}
        	);
	}
	
	vm.mostraDisposizione = function(idx, ev) {
		if (typeof vm.records=="undefined" || typeof vm.records[idx]=="undefined") 
			return
		vm.selectedIndex = idx;
		//var disposizione = angular.copy(vm.records[idx]);
//		if (disposizione.importo == null)
//			disposizione.importo = "0";
//		disposizione.importo = parseFloat(disposizione.importo.replace(",","."));
		
		DisposizioniRid.Get({id:vm.records[idx].id}).$promise.then(function(res){
			var disposizione = res;
			$mdDialog.show({
	            templateUrl: 'templates/dettaglioDisposizione.html',
	            controller: 'dettaglioDisposizioneCtrl',
	            targetEvent: ev,
	            locals: {label: 'SDD',disposizione:disposizione, appVariables: vm.appVariables}
	        })
	        	.then(function(args){
	        		vm.getDisposizioni();
	        	},
	        	function(){
	 
	        	}
        	);
		}, function(err){
			utilsSvc.handleHttpError(err);
		}
		);
	}
	
	vm.key = function($event){
	    if ($event.keyCode == 38)
	        if (vm.selectedIndex>0)
	        	vm.selectedIndex--;
	    else if ($event.keyCode == 40)
	    	 if (vm.selectedIndex<vm.maxItems)
		        	vm.selectedIndex++;
	}
	
	
	vm.init = function() {
		
		vm.getDisposizioni();
		UserManager.AppVariables().$promise.then(function(data) {
			vm.appVariables = data;
			if (vm.filter.tipoChiamata == 'FiltroDisposizioni'
					|| vm.filter.tipoChiamata == 'FiltroDisposizioniReadOnly'
					|| vm.filter.tipoChiamata == 'DistinteBanca') {
				vm.abilitaFirma = vm.appVariables.profiloLocale == "DF";
			}

		});
	}	
	
	
	$scope.$evalAsync(function() {
		vm.init();
	})
	

	
}
);