app.controller('dettaglioDisposizioneSedaCtrl', 
function ($scope,$mdDialog,UserManager,ComboManager,DisposizioniAea,utilsSvc,userService,formChangeLoggerSvc, DelegheSepa, LogModifiche, locals) {
	
	$scope.disposizione = angular.copy(locals.disposizione);
	$scope.disposizioneOriginale = angular.copy($scope.disposizione);
	$scope.appVariables = locals.appVariables;
	$scope.bloccaConvalidaDisposizione = true;
	$scope.filter = userService.getFiltroIncassiSDD();
	$scope.label='SEDA'; 

	$scope.initVisibilita = function() {
		$scope.frameAnnotazioniLibere = true;
		$scope.frameAutorizzazioneAddebito = true;
		$scope.frameBancaAddebito = true;
		$scope.frameBeneficiario = true;
		$scope.frameCoordinateAzienda = true;
		$scope.frameDate = true;
		$scope.frameDatiContabili = true;
		$scope.frameDatiDispositivi = true;
		$scope.frameDatiRendicontazione = true;
		$scope.frameOpzioni = true;
		$scope.frameOrdinante = true;
		$scope.frameStornoComunicazione = true;
		$scope.frameStornoCoordinate = true;
		$scope.btnConferma = true;
		$scope.btnLogStati = true;
		$scope.btnLogVariazioni = true;
		$scope.btnRicerca = true;
		
		$scope.valorizzaImportoDbGrid(); 
	}

	$scope.filterDeleghe = {
			tipo:'0',
			statoDelega: '-1',
			cbDaDataApertura: false,
			daDataApertura: null,
			cbADataApertura: false,
			aDataApertura: null,
			cbDaDataChiusura: false,
			daDataChiusura: null,
			cbDaDataChiusura: false,
			aDataChiusura: null,
			codiceDelega: '',
			aggregazioneABI: false,
			codiceAbi: '',
			codiceClienteDebitore: $scope.disposizione.codiceClienteDebitore,
			idOrdinante: -1
	}
	
	$scope.largeScreen = function(){
		return utilsSvc.largeScreen();
	}

	$scope.getFontSize=function(){
		if (utilsSvc.smallScreen()){
			return {"font-size": "10px"};
		}
	}

	$scope.cancelDialog = function() {
    	$mdDialog.cancel();
    }

	$scope.getColor = function(field) {
		if (field)
			if ($scope.disposizione.statoConvalida==2)
				return 'field-warn';
			else
				return 'field-ko';
	}

	$scope.errors = function(tab) {
		return ($('#'+tab + ' .field-ko').length>0);
		
		if ($('#'+tab + ' .field-ko').length>0)
			return "field-ko";
		if ($('#'+tab + ' .field-warn').length>0)
			return "field-warn";
			
	}
	
	
	
	$scope.confirmDialog = function() {
		if (!$scope.form.$valid && $scope.disposizione.statoDisposizione!='Cancellata') {
			utilsSvc.showMessage('Alcuni campi contengono dati non validi');
		} else {
			DisposizioniAea.save ($scope.disposizione)
				.$promise.then(function(res) {
					$scope.disposizione = res;
					
					var changes = formChangeLoggerSvc.getChanges();
					LogModifiche.save({idDisposizione: $scope.disposizione.iddisposizione},changes)
						.$promise.then(function(data){
						},
						function (httpError){
						}
						)
									
					utilsSvc.showMessage('Salvataggio modifiche effettuato');
					$mdDialog.hide($scope.disposizione);
				}, function(error){
					if (error.data=='4') {
						utilsSvc.show('I dati della disposizione sono stati modificati o cancellati da un altro utente');
						$mdDialog.hide();
					}else if (error.data=='1') {
						utilsSvc.show('La disposizione è stata cancellata da un altro utente');
						$mdDialog.hide();
					}
					else
						utilsSvc.handleHttpError(error);

				})
		}
	} 
	
	$scope.enterField = function(event) {
		formChangeLoggerSvc.onFocus($scope, event);
	}
	
	$scope.exitField = function(event) {
		formChangeLoggerSvc.onBlur($scope, event);
	}
	
	$scope.enterCompoundField = function(field) {
		var event=document.getElementById(field);
		formChangeLoggerSvc.onFocus($scope, event);
	}
	
	$scope.exitCompoundField = function(field) {
		var event=document.getElementById(field);
		formChangeLoggerSvc.onBlur($scope, event);
	}

    $scope.mostraLogStati = function(){
    	DisposizioniAea.LogStati({id: $scope.disposizione.iddisposizione})
		.$promise.then(function(data){
			if (data.length==0) {
				utilsSvc.showMessage("Nessuno stato presente");
			} else {
				$scope.showLog(data, "Log stati disposizione " + $scope.disposizione.iddisposizione);
			}
		})
    }
    
    $scope.delegaSEDA = function(){
    	DelegheSepa.Count({}, $scope.filterDeleghe)
		.$promise.then(function(data){
			if (data.value==0)
				utilsSvc.showMessage('Nessuna disposizione collegata alla delega');
			else {
		    	$mdDialog.show({
		            templateUrl: 'templates/delegheSeda.html',
		            controller: 'delegheSedaCtrl',
		            locals: {disposizione: $scope.disposizione, tipo:'SEDA'},
		            multiple: true
		        })	

			}
		});
    }
    
    $scope.mostraLogVariazioni = function(){
    	DisposizioniAea.LogVariazioni({id: $scope.disposizione.iddisposizione})
		.$promise.then(function(data){
			if (data.length==0) {
				utilsSvc.showMessage("Nessuna variazione effettuata");
			} else {
				$scope.showLogVariazioni(data, "Log variazioni disposizione " + $scope.disposizione.iddisposizione);
			}
		})
    }
	
    $scope.showLog = function(log, title) {
		$mdDialog.show({
            templateUrl: 'templates/logStati.html',
            controller: 'logStatiCtrl',
            locals: {log:log, dialogTitle: title},
            multiple: true
        })

    }
    
    $scope.showLogVariazioni = function(log, title) {
		$mdDialog.show({
            templateUrl: 'templates/logVariazioni.html',
            controller: 'logStatiCtrl',
            locals: {log:log, dialogTitle: title},
            multiple: true
        })

    }
    
    $scope.piazzatura = function(ev) {
    	$mdDialog.show({
    		targetEvent: ev,
            templateUrl: 'templates/ricercaFiliali.html',
            controller: 'ricercaFilialiCtrl',
            locals: {abi: $scope.disposizione.codiceAbiDestinatario,  cab:$scope.disposizione.cabDestinatario,
            		istituto:$scope.disposizione.bancaSportelloDomic},
            multiple: true
        }).then(function(filiale){
        	// non cambiare le info
        })	
    }
    
    
    $scope.assegnaConto = function(ev) {
    	var options={};
    	if ($scope.appVariables.profiloLocale=="TO"||$scope.appVariables.profiloLocale=="TR"){
    		options.inFunzioneOrdinante = "TUTTICONTI";
    		options.inBancaAllineamento = true;
    		options.inEstrattoreDistinteBanca = false;
    		options.inOnlyContiCassa = false;
    		options.inOnlyContiBancoPosta = false;
    	} else {
    		options.inFunzioneOrdinante = $scope.disposizione.funzioneOrdinante;
    		options.inBancaAllineamento = true;
    		options.inEstrattoreDistinteBanca = false;
    	}
    	$mdDialog.show({
    		targetEvent:ev,
            templateUrl: 'templates/ricercaConti.html',
            controller: 'ricercaContiCtrl',
            locals: options,
            multiple: true
        }).then(function(conto){
        	// aggiorna i campi
        	$scope.disposizione.codiceAbiOrdinante = conto.abi;
        	$scope.disposizione.cabOrdinante = conto.cab;
        	$scope.disposizione.contoOrdinante = conto.conto;
        	$scope.disposizione.divisaContoOrdinante = conto.divisa;
        	$scope.disposizione.coordinateIbanordinante = conto.coordinateIban//.replace(/ /g, '');
        	$scope.disposizione.descrizioneConto = conto.descrizioneConto;
        	$scope.disposizione.contoPerCassa = conto.contoPerCassa;
        	
        })		
    }
    
	$scope.cercaDenominazione = function() {
	}
	
	$scope.isPresentazioneSepaEnabled = function() {
		return true;
	}
	
	
	$scope.logStati = function(){
		DisposizioniRid.LogVariazioni({id: $scope.disposizione.iddisposizione})
		.$promise.then(function(data){
			if (data.length==0) {
				utilsSvc.showMessage("Nessuno stato presente");
			} else {
				
			}
		})
    }
    
    $scope.logVariazioni = function(){
		DisposizioniRid.LogVariazioni({id: $scope.disposizione.iddisposizione})
		.$promise.then(function(data){
			if (data.length==0) {
				utilsSvc.showMessage("Nessuna variazione effettuata");
			} else {
				
			}
		})
    }
	
	$scope.valorizzaImportoDbGrid = function(){
		$scope.disposizione.importoDbgrid =$scope.disposizione.importo;
	}
    
	$scope.getStatoDisposizioneEditabile = function() {
		var flg = ($scope.disposizioneOriginale.statoConvalida==-1 ||$scope.disposizioneOriginale.statoConvalida==2)	||
			$scope.disposizioneOriginale.statoDisposizione=="Cancellata" ||
			($scope.disposizioneOriginale.statoDisposizione=="Cancellata" && 
					($scope.appVariables.profiloLocale=="TO"||$scope.appVariables.profiloLocale=="TR")
			);
		
		return flg;
	}
	
    $scope.checkAutorizzazioniUtente = function() {
    	$scope.initVisibilita();
    	$scope.bloccaConvalidaDisposizione = false;
    	var disabilitaFrame = true;
    	if ($scope.disposizioneOriginale.statoDisposizione=='Disposta') {
    		disabilitaFrame = true;
    		$scope.btnConferma = false;
    	} else if ($scope.disposizioneOriginale.statoDisposizione=='Esitata') {
    		disabilitaFrame = true;
    		$scope.btnConferma = false;
    	} else if ($scope.disposizioneOriginale.statoDisposizione=='Cancellata') {
    		disabilitaFrame = true;
    		$scope.btnConferma = false;
    	} else if ($scope.disposizioneOriginale.statoDisposizione=='Archiviata') {
    		disabilitaFrame = true;
    		$scope.btnConferma = false;
    	} else if ($scope.disposizioneOriginale.statoDisposizione=='Approvata') {
    		//disabilitaFrame=false;
    		$scope.frameBancaAddebito=true;
    		$scope.frameNoteDisposizione=true;
    	} else if ($scope.disposizioneOriginale.statoDisposizione=='Confermata') {
    		//disabilitaFrame=false;
    		$scope.frameBancaAddebito=true;
    		$scope.frameNoteDisposizione=true;
    	} else if ($scope.disposizioneOriginale.statoDisposizione=='Predisposta') {
    		$scope.bloccaConvalidaDisposizione=true;
    		disabilitaFrame=true;
    	} else if ($scope.disposizioneOriginale.statoDisposizione=='Validata') {
    		$scope.btnConferma=false;
    		disabilitaFrame=true;
    		
    	}

		if ($scope.appVariables.profiloLocale=="VI") {
			disabilitaFrame = true;
			$scope.btnConferma = false;
		}
    	
    	if (disabilitaFrame) {
    		$scope.frameAutorizzazioneAddebito = false;
    		$scope.frameBancaAddebito = false;
    		$scope.frameBeneficiario = false;
    		$scope.frameCoordinateAzienda = false;
    		$scope.frameDate = false;
    		$scope.frameDatiContabili = false;
    		$scope.frameDatiDispositivi = false;
    		$scope.frameDatiRendicontazione = false;
    		$scope.frameOpzioni = false;
    		$scope.frameOrdinante = false;
    		$scope.frameStornoComunicazione = false;
    		$scope.frameStornoCoordinate = false;
    	}
    	
    	
    	$scope.bloccaConvalidaDisposizione = !$scope.btnConferma;
    	$scope.btnConferma = true;
    	
    	if ($scope.appVariables.bloccoModificaDisposizioni || $scope.filter.tipoChiamata=='FiltroDisposizioniReadOnly') {
    		$scope.btnConferma= false;
    		if ($scope.appVariables.profiloLocale!='VI'){
    			$scope.btnLogStati = false;
				$scope.btnLogVariazioni = false;
    		}
    		$scope.btnRicerca = false;
    		$scope.frameAutorizzazioneAddebito = false;
    		$scope.frameBancaAddebito = false;
    		$scope.frameBeneficiario = false;
    		$scope.frameCoordinateAzienda = false;
    		$scope.frameDate = false;
    		$scope.frameDatiContabili = false;
    		$scope.frameDatiDispositivi = false;
    		$scope.frameDatiRendicontazione = false;
    		$scope.frameOpzioni = false;
    		$scope.frameOrdinante = false;
    		$scope.frameStornoComunicazione = false;
    		$scope.frameStornoCoordinate = false;
    		$scope.bloccaConvalidaDisposizione=false;
    	}
    	
    	// Eccezioni
    	$scope.frameOrdinante = false;

    }
    
    $scope.getStatiDisposizione = function() {
    	$scope.checkAutorizzazioniUtente();
		var items = [];
		if ($scope.appVariables.profiloLocale!="VI") {
			if ($scope.disposizioneOriginale.statoDisposizione=='Disposta') {
				items.push('Disposta');
			} else if ($scope.disposizioneOriginale.statoDisposizione=='Esitata') { 
				items.push('Esitata');
			} else if ($scope.disposizioneOriginale.statoDisposizione=='Cancellata') {
				items.push('Cancellata');
			} else if ($scope.disposizioneOriginale.statoDisposizione=='Archiviata') {
				items.push('Archiviata');
			} else if ($scope.disposizioneOriginale.statoDisposizione=='Approvata') {
				if ($scope.disposizioneOriginale.tipoFlussoInput =='') {
					items.push('Approvata');
					items.push('Confermata');
					items.push('Cancellata');
				} else {
					items.push('Confermata');
					items.push('Cancellata');
				}
			} else if ($scope.disposizioneOriginale.statoDisposizione=='Confermata') {
				if ($scope.disposizioneOriginale.tipoFlussoInput =='') {
					items.push('Approvata');
					items.push('Confermata');
					items.push('Cancellata');
				} else {
					items.push('Confermata');
					items.push('Cancellata');
				}
			} else if ($scope.disposizioneOriginale.statoDisposizione=='Predisposta') {
					items.push('Predisposta');
					items.push('Confermata');
					items.push('Cancellata');				
			} else if ($scope.disposizioneOriginale.statoDisposizione=='Validata') {
				items.push('Validata');
			}
		}
		if (items.indexOf($scope.disposizioneOriginale.statoDisposizione)<0)
			items.push($scope.disposizioneOriginale.statoDisposizione);
		return items;
    }
    
    $scope.checkDigit=function(event, len){
		if (event.key=="Backspace" || event.key=="ArrowLeft" || event.key=="ArrowRight" || event.key=="Tab")
			return;
		if ("0123456789,.".indexOf(event.key)==-1 || event.target.value.length>=len)
			event.preventDefault();
	}

    $scope.checkIntegerDigit=function(event, len){
		if (event.key=="Backspace" || event.key=="ArrowLeft" || event.key=="ArrowRight" || event.key=="Tab")
			return;
		if ("0123456789".indexOf(event.key)==-1 || event.target.value.length>=len)
			event.preventDefault();
	}

	$scope.checkImporto = function($event) {		
		var importo = $scope.disposizione.importoMassimoRata.toCurrency();
		if (importo==null) {
			utilsSvc.showMessage('Importo non valido');
			 $scope.disposizione.importoMassimoRata='';
			 return;
		} else {
			$scope.disposizione.importoMassimoRata =  importo.formatAsCurrency(); 
		}
			
		$scope.exitField($event);
	}
    
	$scope.init = function(){
		UserManager.AppVariables().$promise.then(function(data) {
			$scope.appVariables = data;
			$scope.checkAutorizzazioniUtente();
		});
		
		UserManager.AppVariables().$promise.then(function(data) {
			$scope.appVariables = data;
			//$scope.checkAutorizzazioniUtente();
		});
		
		ComboManager.List({type: 'Causale', tipologia:'AEA'})
			.$promise.then(
				function(data){
					$scope.causali = data;
				},
				function(error) {
					//utilsSvc.handleHttpError(error);
				}
		);

		ComboManager.List({type: 'TipoCodice', tipologia:'AEA'})
		.$promise.then(
			function(data){
				$scope.tipoCodice = data;
			},
			function(error) {
				//utilsSvc.handleHttpError(error);
			}
		);

		ComboManager.List({type: 'FacoltaStorno', tipologia:'AEA'})
		.$promise.then(
			function(data){
				$scope.facoltaStorno = data;
			},
			function(error) {
				//utilsSvc.handleHttpError(error);
			}
		);
	
		ComboManager.List({type: 'StatoAllineamento', tipologia:'AEA'})
		.$promise.then(
			function(data){
				$scope.statoAllineamento = data;
			},
			function(error) {
				//utilsSvc.handleHttpError(error);
			}
		);
		
		ComboManager.List({type: 'Esito', tipologia:'AEA'})
		.$promise.then(
			function(data){
			    $scope.esiti = data;
			},
			function(error){
				//utilsSvc.handleHttpError(error);	
			}
		);

		ComboManager.List({type: 'TipoIncassoAEA', tipologia:'AEA'})
		.$promise.then(
			function(data){
				$scope.tipoIncasso = data;
			},
			function(error) {
				//utilsSvc.handleHttpError(error);
			}
		);
		
		ComboManager.List({type: 'TipoMandatoAEA', tipologia:'AEA'})
		.$promise.then(
			function(data){
				$scope.tipoMandato = data;
			},
			function(error) {
				//utilsSvc.handleHttpError(error);
			}
		);

		ComboManager.List({type: 'ClassificazioneConto', tipologia:'AEA'})
		.$promise.then(
			function(data){
				$scope.classificazioniConto = data;
			},
			function(error) {
				//utilsSvc.handleHttpError(error);
			}
		);
	
		
		ComboManager.List({type: 'EsitoSepaRsnCode', tipologia:'AEA'})
		.$promise.then(
			function(data){
				$scope.esitoSepaRsnCode = data;
			},
			function(error) {
				//utilsSvc.handleHttpError(error);
			}
		);
		ComboManager.List({type: 'EsitoCBIDecodificato', tipologia:'AEA'})
		.$promise.then(
			function(data){
				$scope.esitoCBIDecodificato = data;
			},
			function(error) {
				//utilsSvc.handleHttpError(error);
			}
		);
		
	}
    
	$scope.init();

});