
app.controller('distinteBancaCtrl',
	
function ($scope,$http,$cookies,$window, $location,$timeout, $mdDialog, $q, $routeParams, $mdBottomSheet, $mdMenu, utilsSvc, userService, 
		DistinteBanca, ProvenienzaDisposizioni, UserManager) {
	
	var vm=this;
	
	vm.filteredView = (typeof $routeParams.filter!="undefined");
	$location.search('filter', null);
	
	vm.provenienza=['Findomest'];
	vm.maxItems = 0;
	vm.itemsPerPage = 100;
	vm.selectedIndex=-1;
	vm.records=[];
	vm.esitiRid=[];
	vm.appVariables={};
	vm.ricercaInCorso = false;
	vm.filteredView=false;
	vm.topIndex = 0;
	vm.selectedIndex = -1;
	
	vm.filter={
		provenienza: '',
		vistaGenerale: false,
		sdd: false,
		sdd_esteri: false,
		seda: false,
		sct: false,
		dom: false,
		sct_int: false,
		sct_inps:false,
		sct_esteri:false,
		assegni: false,
		orderField:null,
		flagAbilitaDaDataCreazione: false,
		flagAbilitaADataCreazione: false,
		daDataCreazione:null,
		aDataCreazione: null,
		flagAbilitaDaDataValuta: false,
		flagAbilitaADataValuta: false,
		daDataValuta:null,
		aDataValuta: null,
		daImporto:null,
		aImporto:null,
		daDistinta:null,
		aDistinta:null,
		nomeSupportoCBI:'',
		contoOrdinante:''
		
	};
	
	vm.tipologieSelezionate=[];
	
	vm.filtriTipologie=[
		{id:'sdd', label:"SDD"},
		{id:'sdd_esteri', label:"SDD_ESTERI"},
		{id:'seda', label:"SEDA"},
		{id:'sct', label:"SCT"},
		{id:'dom', label:"DOM"},
		{id:'sct_int', label:"SCT INT"},
		{id:'sct_inps', label:"SCT INPS"},
		{id:'sct_esteri', label:"SCT Esteri"},
		{id:'intesa', label:"Assegni Intesa"}
		
	]

	
	
	if (localStorage.getItem("filterDistinte")) {
		vm.filter = $scope.$eval(localStorage.getItem("filterDistinte"));
		vm.filteredView = $scope.$eval(localStorage.getItem("filterDistinteAttivo"));
		vm.selectedIndex = $scope.$eval(localStorage.getItem("filterDistinteSelectedIndex"));
	}
	
	vm.defaultFilter=angular.copy(vm.filter);
	
	vm.aggiornaFiltro=function(){
		vm.filter.sdd=vm.tipologieSelezionate.indexOf('sdd')>=0;
		vm.filter.sdd_esteri=vm.tipologieSelezionate.indexOf('sdd_esteri')>=0;
		vm.filter.seda=vm.tipologieSelezionate.indexOf('seda')>=0;
		vm.filter.sct=vm.tipologieSelezionate.indexOf('sct')>=0;
		vm.filter.dom=vm.tipologieSelezionate.indexOf('dom')>=0;
		vm.filter.sct_int=vm.tipologieSelezionate.indexOf('sct_int')>=0;
		vm.filter.sct_inps=vm.tipologieSelezionate.indexOf('sct_inps')>=0;
		vm.filter.sct_esteri=vm.tipologieSelezionate.indexOf('sct_esteri')>=0;
		vm.filter.assegni=vm.tipologieSelezionate.indexOf('intesa')>=0;
	}	
	
	vm.setSelected=function(idx) {
		vm.selectedIndex = idx;
	}
	
	$timeout(function() {
	    var evt = $window.document.createEvent('UIEvents'); 
	    evt.initUIEvent('resize', true, false, $window, 0); 
	    $window.dispatchEvent(evt);
	});
	
	UserManager.AppVariables().$promise.then(function(data) {
		vm.appVariables = data;
	});
	
	if (utilsSvc.largeScreen())
		vm.columnWidths=[
			70,  // 0
			100,  // 1
			90, // 2
			90, // 3
			150,  // 4
			140, // 5
			150, // 6
			90, // 7
			70,  // 8
			120, // 9
			140,  // 10
			120,  // 11
			120,  // 12
			200,  // 13
			320 // 14
		];
	else
		vm.columnWidths=[
			100,  // 0
			100,  // 1
			90, // 2
			90, // 3
			150,  // 4
			140, // 5
			100, // 6
			100, // 7
			100,  // 8
			90, // 9
			140,  // 10
			120,  // 11
			120,  // 12
			200,  // 13
			320 // 14
		];
		
	vm.largeScreen =function(){
		return utilsSvc.largeScreen();
	}
	
	vm.veryLargeScreen =function(){
		return utilsSvc.veryLargeScreen();
	}
	
	vm.getListHeight = function() {
		containerHeight = ($window.innerHeight - $('#container').position().top - $('#view').position().top);
		  return {'height':  containerHeight + 'px'};
	};
	
	vm.getGridItemHeight = function() {
		return utilsSvc.getGridHeight();
	}

	$window.addEventListener('resize', onResize);
	function onResize() {
	  $scope.$digest();
	}
	$scope.$on('$destroy', function() {
	  $window.removeEventListener('resize', onResize);
	});
	
	vm.largeScreen =function(){
		return utilsSvc.largeScreen();
	}
	
	vm.openMenu = function($mdMenu, ev) {
	      originatorEv = ev;
	      $mdMenu.open(ev);
	    };


	
	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.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;
			vm.defaultFilter.orderField = field;
		} else {
			vm.filter.orderField = "-" +field;
			vm.defaultFilter.orderField = "-" + field;
		}
		
		vm.getDistinte();
	}
	
	
	vm.visualizzaFiltro=function(ev){
			$mdDialog.show({
				templateUrl: 'templates/filtroDistinte.html',
				controller: 'filtroDistinteCtrl',
				targetEvent: ev,
				locals: {filter:vm.filter}
			})
			.then(function(args){
				vm.filter = args;
				if (vm.filteredView)
					vm.getDistinte();
				// vm.filteredView = false;
			},
			function(){
				
			}
			);
	}
	
	vm.eseguiRicerca = function(ev) {
		// if (!vm.filteredView) {
		// vm.filter=vm.defaultFilter;
		// }
		
		if (vm.filteredView)
			$mdDialog.show({
				templateUrl: 'templates/filtroDistinte.html',
				controller: 'filtroDistinteCtrl',
				targetEvent: ev,
				locals: {filter:vm.filter}
			})
			.then(function(args){
				// vm.filteredView = false;
				vm.filter = args;
				vm.getDistinte();
			},
			function(){
				
			}
			);
		else
			vm.getDistinte();
	}


	// fab toolbar functions
	
	vm.isNotDelegatoFirma = function() {
		return (vm.appVariables.profiloLocale!="DF");
	}
	
	vm.espandiDistinta = function(data) {
		$location.path('/estrattore');
	}
	
	vm.stampaDistinta = function(data) {
		utilsSvc.showForever('Generazione in corso...');
		DistinteBanca.Print({},vm.filter).$promise.then(function(data){
			utilsSvc.downloadFile('application/pdf',data.response,'DistinteBanca.pdf');
			utilsSvc.cancelMessage();
		}).catch(function(err){
			if (err.status==404) {
				utilsSvc.cancelMessage();
				utilsSvc.showMessage('Nessuna distinta estratta');
			} else 
				utilsSvc.handleHttpError(err);
		});		
	}
	
	vm.apriDistinta = function(distinta) {
		localStorage.setItem("filterDistinte",JSON.stringify(vm.filter));
		localStorage.setItem("filterDistinteAttivo",JSON.stringify(vm.filteredView));
		localStorage.setItem("filterDistinteSelectedIndex", JSON.stringify(vm.selectedIndex));

		if (distinta.tipologia=='RID') {
			var filtro = userService.clearFiltroIncassiSDD();
			filtro.idDistintaBanca = distinta.iddistintaBanca;
			filtro.tipoChiamata = 'DistinteBanca';
			filtro.inErrore = false;
			filtro.importoDistinta = distinta.importoDisposizioniDecimal;
			filtro.userIdFirmatario1 = distinta.userIdfirmatario1;
			userService.setFiltroIncassiSDD(filtro);
			if (distinta.tipologiaDbgrid=='SDD_ESTERI')
				$location.path('/incassiSDDEsteri');
			else
				$location.path('/incassiSDD');
		} else if (distinta.tipologia=='AEA') {
			var filtro = userService.clearFiltroIncassiSDD();
			filtro.idDistintaBanca = distinta.iddistintaBanca;
			filtro.tipoChiamata = 'DistinteBanca';
			filtro.inErrore = false;
			filtro.importoDistinta = distinta.importoDisposizioniDecimal;
			filtro.userIdFirmatario1 = distinta.userIdfirmatario1;
			userService.setFiltroIncassiSDD(filtro);
			$location.path('/allineamentoSEDA');
		}  else if (distinta.tipologia=='BONIFICI' && (distinta.tipologiaDbgrid=='SCT' || distinta.tipologiaDbgrid=='SCT_INT')) {
			var filtro = userService.clearFiltroIncassiSDD();
			filtro.idDistintaBanca = distinta.iddistintaBanca;
			filtro.tipoChiamata = 'DistinteBanca';
			filtro.inErrore = false;
			filtro.importoDistinta = distinta.importoDisposizioniDecimal;
			filtro.userIdFirmatario1 = distinta.userIdfirmatario1;
			userService.setFiltroIncassiSDD(filtro);
			$location.path('/pagamentiSCT');
		}  else if (distinta.tipologia=='BONIFICI' && distinta.tipologiaDbgrid=='SCT_ESTERI') {
			var filtro = userService.clearFiltroIncassiSDD();
			filtro.idDistintaBanca = distinta.iddistintaBanca;
			filtro.tipoChiamata = 'DistinteBanca';
			filtro.inErrore = false;
			filtro.importoDistinta = distinta.importoDisposizioniDecimal;
			filtro.userIdFirmatario1 = distinta.userIdfirmatario1;
			userService.setFiltroIncassiSDD(filtro);
			$location.path('/pagamentiSCT_ESTERI');
		}  else if (distinta.tipologia=='BONIFICI' && distinta.tipologiaDbgrid=='ASSEGNI_INTESA') {
			var filtro = userService.clearFiltroIncassiSDD();
			filtro.idDistintaBanca = distinta.iddistintaBanca;
			filtro.tipoChiamata = 'DistinteBanca';
			filtro.inErrore = false;
			filtro.importoDistinta = distinta.importoDisposizioniDecimal;
			filtro.userIdFirmatario1 = distinta.userIdfirmatario1;
			userService.setFiltroIncassiSDD(filtro);
			$location.path('/AssegniIntesa');
		}  else if (distinta.tipologia=='BONIFICI' && distinta.tipologiaDbgrid=='SCT_INPS') {
			var filtro = userService.clearFiltroIncassiSDD();
			filtro.idDistintaBanca = distinta.iddistintaBanca;
			filtro.tipoChiamata = 'DistinteBanca';
			filtro.inErrore = false;
			filtro.importoDistinta = distinta.importoDisposizioniDecimal;
			filtro.userIdFirmatario1 = distinta.userIdfirmatario1;
			userService.setFiltroIncassiSDD(filtro);
			$location.path('/pagamentiSCTInps');
		}  else if (distinta.tipologia=='BONIFICI' && distinta.tipologiaDbgrid=='DOM') {
			var filtro = userService.clearFiltroIncassiSDD();
			filtro.idDistintaBanca = distinta.iddistintaBanca;
			filtro.tipoChiamata = 'DistinteBanca';
			filtro.inErrore = false;
			filtro.importoDistinta = distinta.importoDisposizioniDecimal;
			filtro.userIdFirmatario1 = distinta.userIdfirmatario1;
			userService.setFiltroIncassiSDD(filtro);
			$location.path('/pagamentiDOM');
		}  else if (distinta.tipologia=='BONIFICI' && distinta.tipologiaDbgrid=='SCT_INPS') {
			var filtro = userService.clearFiltroIncassiSDD();
			filtro.idDistintaBanca = distinta.iddistintaBanca;
			filtro.tipoChiamata = 'DistinteBanca';
			filtro.inErrore = false;
			filtro.importoDistinta = distinta.importoDisposizioniDecimal;
			filtro.userIdFirmatario1 = distinta.userIdfirmatario1;
			userService.setFiltroIncassiSDD(filtro);
			$location.path('/pagamentiDOM');
		}
	}

	vm.annullaDistinta = function(distinta,event) {
		utilsSvc.showConfirm('Conferma',"Confermi l'annullamento della distinta?",event)
			.then(function(data){
				DistinteBanca.AnnullaDistinta({
					id: distinta.id,
					idDistintaBanca: distinta.iddistintaBanca,
					tipologia: distinta.tipologia,
					flagDanni: distinta.flagDanni,
					lastSaved: distinta.lastSaved
				}).$promise.then(
					function (data) {
						 vm.selectedIndex = -1;
						 utilsSvc.showMessage('Annullamento distinta effettuato');
					     vm.getDistinte();
					},
					function(error) {
          				utilsSvc.handleHttpError(error);
          			}
				);	
			}, function(res){
				
			}
		);		
	}

	vm.logStatiDistinta = function(distinta,event) {
		DistinteBanca.LogStati({id: distinta.iddistintaBanca})
		.$promise.then(function(data){
			if (data.length==0) {
				utilsSvc.showMessage("Nessuno stato presente");
			} else {
				vm.showLog(data, "Log stati distinta " +distinta.iddistintaBanca, event);
			}
		})		
	}

	vm.showLog = function(log, title, event) {
		$mdDialog.show({
            templateUrl: 'templates/logStati.html',
            controller: 'logStatiCtrl',
            targetEvent: event,
            locals: {log:log, dialogTitle: title},
            multiple: true
        })

    }
	
	vm.modificaContoOrdinante = function(distinta,event) {
		if (distinta.tipologia!='BONIFICI' && distinta.tipologia!='RID')
			utilsSvc.showMessage('Modifica conto non abilitata');
		else {
	    	var options={};
    		options.inFunzioneOrdinante = "TUTTICONTI";
    		options.inBancaAllineamento = false;
    		options.inEstrattoreDistinteBanca = false;
    		options.inOnlyContiCassa = false;
    		options.inOnlyContiBancoPosta = false;    		
	    	$mdDialog.show({
	    		targetEvent:event,
	            templateUrl: 'templates/ricercaConti.html',
	            controller: 'ricercaContiCtrl',
	            locals: options,
	            multiple: true
	        }).then(function(conto){
	        	utilsSvc.showConfirm('Conferma','Confermi la modifica del conto di ' +(distinta.tipologia=='BONIFICI'?'addebito':'accredito') + ' per tutte le disposizioni della distinta?')
	        		.then(function(){
			        	DistinteBanca.ModificaContoDistinta({
							idDistintaBanca: distinta.iddistintaBanca,
							idContoOrdinante: conto.id,
							tipologia: distinta.tipologia,
							lastSaved: distinta.lastSaved
						}).$promise.then(
							function (data) {
								utilsSvc.showMessage('Modifica conto effettuata');
							     vm.getDistinte();
							},
							function(error,status) {
			      				utilsSvc.handleHttpError(error);
			      			}
							
						);
	        		});	        	
	        })		
	    }
		    			
	}

	vm.modificaValutaBeneficiario = function(distinta,event) {
		$mdDialog.show({
    		targetEvent:event,
            templateUrl: 'templates/selezioneData.html',
            controller: 'selezioneDataCtrl',
            locals: {
            	dialogTitle:'Modifica valuta',
            	prompt: 'Data da utilizzare',
            	dataIniziale: new Date(distinta.dataValutaDestinatario)
            },
            multiple: true
        }).then(function(dataSelezionata){
        	utilsSvc.showConfirm('Conferma','Confermi la modifica della valuta beneficiario di tutte le disposizioni della disinta con la data ' + dataSelezionata.toLocaleDateString() +'?')
    		.then(function(){
    			DistinteBanca.ModificaDataValuta({
					idDistintaBanca: distinta.iddistintaBanca,
					data: dataSelezionata,
					tipologia: distinta.tipologia,
					lastSaved: distinta.lastSaved
				}).$promise.then(
					function (data) {
						utilsSvc.showMessage('Modifica data valuta effettuata');
					     vm.getDistinte();
					},
					function(error,status) {
	      				utilsSvc.handleHttpError(error);
	      			}
				);
    		});
        });
	}
	
	vm.modificaDataEsecuzione = function(distinta,event) {
		$mdDialog.show({
    		targetEvent:event,
            templateUrl: 'templates/selezioneData.html',
            controller: 'selezioneDataCtrl',
            locals: {
            	dialogTitle:'Modifica data esecuzione',
            	prompt: 'Data da utilizzare',
            	dataIniziale: new Date()
            },
            multiple: true
        }).then(function(dataSelezionata){
        	utilsSvc.showConfirm('Conferma','Confermi la modifica della data esecuzione di tutte le disposizioni della disinta con la data ' + dataSelezionata.toLocaleDateString() +'?')
        	.then(function(){
	        	DistinteBanca.ModificaDataEsecuzione({
					idDistintaBanca: distinta.iddistintaBanca,
					data: dataSelezionata,
					tipologia: distinta.tipologia,
					lastSaved: distinta.lastSaved
				}).$promise.then(
					function (data) {
						utilsSvc.showMessage('Modifica data esecuzione effettuata');
					     vm.getDistinte();
					},
					function(error,status) {
	      				utilsSvc.handleHttpError(error);
	      			}
				);
        	});
        });
	}

	vm.validaEGeneraFlusso = function(distinta,event) {
		utilsSvc.showConfirm('Conferma',"Confermi la validazione e la generazione del flusso per la distinta " + distinta.iddistintaBanca+ "?",event)
		.then(function(data){
			utilsSvc.showConfirm('Conferma',"Procedere all'invio del file alla banca?", event)
				.then(function(data){
					DistinteBanca.ValidaEGeneraFlusso({id: distinta.id})
					.$promise.then(function(data){
						utilsSvc.showMessage(data.value);
						 vm.getDistinte();
					},
					function(error) {
						utilsSvc.handleHttpError(error);	
					}
					)
				})
			
		}, function(res){
			
		});
	}
	
	vm.forzaturaInviata = function(distinta,event){
		utilsSvc.showConfirm('Conferma',"Confermi la forzatura dello stato in 'Inviata'?").then(function(res){
			DistinteBanca.ForzaturaInviata({id: distinta.iddistintaBanca}).$promise.then(function(res){
				if (res.value==0)
					utilsSvc.showMessage('Forzatura stato completata');
				else
					utilsSvc.showMessage('Si è verificato un errore durante il cambio stato.(' + res.value +')');
				vm.getDistinte();
			})
		});
	}
		

	vm.generaFlusso = function(distinta,event) {
		utilsSvc.showConfirm('Conferma',"Confermi la generazione del flusso per la distinta " + distinta.iddistintaBanca+ "?",event)
		.then(function(data){
				DistinteBanca.GeneraFlusso({id: distinta.id})
				.$promise.then(function(data){
					utilsSvc.showMessage(data.value);
					 vm.getDistinte();
				},
				function(error) {
					utilsSvc.handleHttpError(error);	
				}
				)
			});
			
	}
	vm.exportDistinte = function(distinta, event) {
		utilsSvc.showConfirm('Conferma',"Confermi l'esportazione dell'elenco distinte verso TASC?",event)
		.then(function(data){
// var a = document.createElement('a');
// a.href = 'rest/distinte/esportaTASC';
// a.target = '_blank';
//
// document.body.appendChild(a);
// a.click();
// document.body.removeChild(a);
			
				DistinteBanca.EsportaTASC({},vm.filter)
				.$promise.then(function(data){
					vm.getDistinte();
					utilsSvc.showMessage("Esportazione terminata.");
				},
				function(error) {
					if (error.status==404)
						utilsSvc.showMessage("Non ci sono distinte da esportare.");
					else
						utilsSvc.showMessage("Si è verificato un errore durante l'esportazione, verificare il percorso configurato.");
				}
				)
			});	
	}

	vm.abilitaExport = function(distinta, event) {
		if (!distinta.flagChiusuraPartitaSep) {
			utilsSvc.showMessage('La distinta non è ancora stata esportata verso TASC');
			return;
		}
		utilsSvc.showConfirm('Conferma',"Confermi la riabilitazione dell'esportazione distinta verso TASC?",event)
		.then(function(data){
			distinta.flagChiusuraPartitaSep = false;
			DistinteBanca.save(distinta).$promise.then(function(data){
				if (data[0]=="0")
					utilsSvc.showMessage("Riabilitazione esportazione distinta -> TASC effettuata");
				else
					utilsSvc.showMessage("Si è verificato un errore; codice: " + data);
				 vm.getDistinte();
			});
		});
	}

	vm.showCommands = function(distinta,index,$event) {
		vm.selectedIndex = index;
	    $mdBottomSheet.show({
	      templateUrl: 'templates/bottom-sheet-template.html',
	      controller: 'comandiDistintaCtrl',
	      distinta: distinta,
	      idx: index,
	      appVariables: vm.appVariables,
	      targetEvent: $event
	    }).then(function(selectedCommand) {
	      vm.executeCommand(selectedCommand.cmdIndex, selectedCommand.recordIdx, $event);
	    }, 
    	function(){}
	    );
	}
	
	vm.executeCommand = function(id,idx, $event) {
		vm.selectedIndex = idx;
		switch(id) {
		case 0: vm.espandiDistinta(vm.records[idx],$event);break;
		case 1: vm.apriDistinta(vm.records[idx],$event);break;
		case 2: vm.stampaDistinta(vm.records[idx],$event);break;
		case 3: vm.annullaDistinta(vm.records[idx],$event);break;
		case 4: vm.logStatiDistinta(vm.records[idx],$event);break;
		case 5: vm.modificaContoOrdinante(vm.records[idx],$event);break;
		case 6: vm.modificaValutaBeneficiario(vm.records[idx],$event);break;
		case 7: vm.modificaDataEsecuzione(vm.records[idx],$event);break;
		case 8: vm.validaEGeneraFlusso(vm.records[idx],$event);break;
		case 9: vm.generaFlusso(vm.records[idx],$event);break;
		case 10: vm.exportDistinte(vm.records[idx],$event);break;
		case 11: vm.abilitaExport(vm.records[idx],$event);break;
		case 12: vm.forzaturaInviata(vm.records[idx],$event);break;
		}
		
	}
	
	vm.infiniteItems = {
	          numLoaded_: 0,
	          toLoad_: 0,
	          loading_:false,
	          lastStartIdx:-1,
	          listPromise:null,
	          canceler: $q.defer(),
	          // Required.
	          getItemAtIndex: function(index) {
	        	  if (vm.maxItems==0 ||  index>vm.maxItems)
	        		  return null;
	        	  if (!vm.infiniteItems.loading_)
	        		  if (index > vm.records.length) {
	        			  this.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 (this.toLoad_ < index) {
	              this.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;

	              
        		  this.listPromise = DistinteBanca.List({start: vm.records.length,size:vm.itemsPerPage},(vm.filteredView? vm.filter: vm.defaultFilter)).$promise;
		              
	              var mod=this;
		              this.listPromise.then(
			              			function(data){
			              				vm.infiniteItems.loading_ = false;
			              				vm.infiniteItems.toLoad_=0;
			              				vm.ricercaInCorso=false;
			              				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;
			              				vm.ricercaInCorso=false;
			              				utilsSvc.handleHttpError(error);
			              			}
			              	)
              
	            }
	          }
	}	


	
	vm.getDistinte = function(){
		if (vm.ricercaInCorso)
			return;
		vm.ricercaInCorso = true;
		vm.defaultFilter.vistaGenerale = vm.filter.vistaGenerale;
		DistinteBanca.Count({},vm.filteredView? vm.filter: vm.defaultFilter).$promise.then(
					function(data){
						vm.ricercaInCorso = false;
						vm.records=[];
						vm.maxItems = data.value;
						vm.infiniteItems.numLoaded_ = 0;
						vm.infiniteItems.toLoad_ = 0;
					
					}
					,function(){
						vm.ricercaInCorso = false;
					}
				);
	}
	
	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.init = function() {
		
		
		vm.getDistinte();
	}	
	
	
	vm.init();

}
)

.controller('comandiDistintaCtrl', function($scope, $mdBottomSheet, distinta, idx, appVariables) {

	$scope.title = 'Comandi distinta';
	
	$scope.items = [
	    { id:0,  name: "Estrai distinta", icon: 'fa-arrows-alt', visible: false },
	    { id:1,  name: "Apri distinta", icon: 'fa-folder-open',visible: true },
	    { id:2,  name: "Stampa distinta", icon: 'fa-print', visible: false },
	    { id:3,  name: "Annulla distinta", icon: 'fa-exclamation-triangle', visible: true },
	    { id:4,  name: "Log stati distinta", icon: 'fa-file-text-o', visible: true },
	    { id:5,  name: "Conto ordinante", icon: 'fa-bank', visible: true },
	    { id:6,  name: "Valuta beneficiario", icon: 'fa-eur', visible: true },
	    { id:7,  name: "Data esecuzione", icon: 'fa-calendar', visible: true },
	    { id:8,  name: "Valida e genera", icon: 'fa-floppy-o', visible: false},
	    { id:9,  name: "Genera flusso", icon: 'fa-floppy-o', visible: false },
	    { id:10, name: "Export dist. TASC", icon: 'fa-file-excel-o', visible: false },
	    { id:11, name: "Riabilita exp. TASC", icon: 'fa-refresh', visible: true },
	    { id:12, name: "Forza stato Inviata", icon: 'fa-paper-plane', visible: true }
		];

	 if (distinta.statoDistinta=='Autorizzata') {
		 $scope.items[8].visible = true;
	 } else if (distinta.statoDistinta=='Validata') {
		 $scope.items[6].visible = false;
		 $scope.items[7].visible = false;
		 if (!distinta.requiresFirmatario)
			 $scope.items[9].visible = true;
		 if (appVariables.profiloLocale == 'DF') {
			 $scope.items[0].visible = false;
			 $scope.items[5].visible = false;
			 $scope.items[3].visible = false;
			 $scope.items[9].visible = false;
		 }
	 } else if (distinta.statoDistinta=='Emessa') {
		 $scope.items[5].visible = false;
		 $scope.items[6].visible = false;
		 $scope.items[7].visible = false;
	 } else if (distinta.statoDistinta=='Disposta') {
		 $scope.items[5].visible = false;
		 $scope.items[6].visible = false;
		 $scope.items[7].visible = false;
	 } else if (distinta.statoDistinta=='Annullata') {
		 $scope.items[5].visible = false;
		 $scope.items[6].visible = false;
		 $scope.items[7].visible = false;
	 } else if (distinta.statoDistinta=='In Generazione') {
		 $scope.items[5].visible = false;
		 $scope.items[6].visible = false;
		 $scope.items[7].visible = false;
	 }

	 if (distinta.tipologia!='BONIFICI' && distinta.tipologia!='RID')
		 $scope.items[5].visible = false;
	 
	 if (distinta.statoDistinta=='Disposta' || distinta.statoDistinta=='Annullata' || distinta.statoDistinta=='In Generazione')
	 	$scope.items[3].visible = false;
	 
	 // Le distinte in stato "Annullata" e non convertite da flusso non hanno
		// disposizioni collegate
	 if (distinta.statoDistinta=='Annullata' && !distinta.flagDanni)
		 $scope.items[1].visible = false;
	 
	 if (distinta.statoDistinta=='In Generazione')
		 $scope.items[1].visible = false;
	 
	 // La modifica della valuta beneficiario è possibile solo per le
		// distinte di BONIFICI e RID
	 if (distinta.tipologia!='BONIFICI' && distinta.tipologia!='RID')
		 $scope.items[6].visible = false;
	 
	 // La modifica della data esecuzione è possibile solo per le distinte di
		// bonifici
	 if (distinta.tipologia!='BONIFICI')
		 $scope.items[7].visible = false;
	 
	 // La riattivazione dell'export distinte -> TASC è possibile solo se la
		// distinte non risulta già esportata
	 $scope.items[11].visible = distinta.flagChiusuraPartitaSep;
	 
	 $scope.items[12].visible = distinta.statoDistinta=='Disposta';
	 
	 if (appVariables.profiloLocale == 'VI') {
		 $scope.items[0].visible = false;
		 $scope.items[3].visible = false;
		 $scope.items[5].visible = false;
		 $scope.items[6].visible = false;
		 $scope.items[7].visible = false;
		 $scope.items[8].visible = false;
		 $scope.items[9].visible = false;
	 }

	 
	  $scope.listItemClick = function($index, $event) {
	    var clickedItem = $scope.items[$index];
	    var result = {cmdIndex: $index, recordIdx: idx, event:$event}
	    $mdBottomSheet.hide(result);
	  };
	  
	  $scope.dismissBottomSheet = function() {
		  $mdBottomSheet.cancel();
	  }
	})
;	