app.controller('dettaglioEstrattoreCtrl', 
function ($scope,$mdDialog,utilsSvc, PianiEstrazioneDistinte, FunzioniOrdinanti, locals) {
	
	$scope.piano = locals.piano;
	$scope.istruzioni=[];
	$scope.istruzioniCancellate = [];
	$scope.selectedIndex=-1;
	
	if ($scope.piano.id!=null && $scope.piano.id!=0)
		PianiEstrazioneDistinte.Istruzioni({id: $scope.piano.id})
		.$promise.then(function(data){
				$scope.istruzioni = data;
			});
	
	
	if ($scope.piano.startTime!=null) {
		var dt = new Date($scope.piano.startTime);
		if ($scope.piano.startTime==null)
			dt.setHours(0);
		$scope.piano.startTime = dt;
	}
	
	if ($scope.piano.cutOffDataCreazioneDisposizione!=null) {
		var dt = new Date($scope.piano.cutOffDataCreazioneDisposizione);
		if ($scope.piano.cutOffDataCreazioneDisposizione==null)
			dt.setHours(0);
		$scope.piano.cutOffDataCreazioneDisposizione = dt;
	}

	$scope.eseguiPiano = function() {
		utilsSvc.showConfirm("Conferma","Confermi l'esecuzione del piano di estrazione?")
			.then(function(res){
				PianiEstrazioneDistinte.Exec({id: $scope.piano.id})
				.$promise.then(function(data){
					if (data.value == "0")
						utilsSvc.showMessage("Esecuzione piano di estrazione effettuata.");
					else {
						utils.show("Si è verificato un errore in fase di esecuzione del piano, errore: " + data.value);
					}
				})
			})
	}

	$scope.decodeSearchBanca=function(data) {
		switch (data){
		case "1": return "IBAN";
		case "2": return "Provincia";
		case "3": return "Funzione";
		case "4": return "Default 1";
		case "5": return "Default 2";
		default: return "";
		}
	}

	$scope.decodeTipoDisposizione=function(data){
		switch(data) {
		case "BON": return "Bonifici Bancari";
		case "CIR": return "Assegni circolari";
		case "CIT": return "Assegni circolari trasf.";
		case "ATR": return "Assegni di traenza";
		case "DOM": return "Bonifici domiciliati";
		case "VID": return "Assegni vidimati";
		case "VIT": return "Assegni vidimati trasf.";
		case "CAS": return "Assegni per cassa";
		default: return "";
		}
	}
	
	
	$scope.nuovaIstruzione = function(event) {
		PianiEstrazioneDistinte.NewIstruzione({id: $scope.piano.id})
			.$promise.then(function(data){
				data.rowNumber = $scope.istruzioni.length+1;
				$scope.istruzioni.push(data);
				$scope.editIstruzione($scope.istruzioni.length-1, event);
		})

	}
	
	$scope.opzioniPiano = function(ev) {
		$mdDialog.show({
    		targetEvent:ev,
            templateUrl: 'templates/opzioniPianoEstrazione.html',
            controller: 'opzioniPianoEstrazioneCtrl',
            locals: {id: $scope.piano.id},
            multiple: true
        }).then(function(){

        });	
	}
	
	$scope.assegnaContoDefault = function(qualeConto, ev) {
		var idConto=$scope.piano.idcontoDefault1
		if (qualeConto==2)
			idConto = $scope.piano.idcontoDefault2;
	
		if (idConto==null)
			utilsSvc.showMessage("Conto non assegnato");
		
    	var options={};
		options.inFunzioneOrdinante = "TUTTICONTI";
		options.inBancaAllineamento = false;
		options.inEstrattoreDistinteBanca = true;
		options.abilitaCancellaConto = true;
    	$mdDialog.show({
    		targetEvent:ev,
            templateUrl: 'templates/ricercaConti.html',
            controller: 'ricercaContiCtrl',
            locals: options,
            multiple: true
        }).then(function(conto){
        	// aggiorna i campi
        	if (qualeConto==1)
        		$scope.piano.idcontoDefault1 = conto.id;
        	else
        		$scope.piano.idcontoDefault2 = conto.id;
        	
        	utilsSvc.showMessage("Conto assegnato");
        },function() {
        	if (qualeConto==1)
        		$scope.piano.idcontoDefault1 = null;
        	else
        		$scope.piano.idcontoDefault2 = null;
        	utilsSvc.showMessage("Conto rimosso");
        });		
	}
	
	$scope.deleteIstruzione = function(idx) {
		utilsSvc.showConfirm("Conferma", "Confermi la cancellazione dell'istruzione?")
		.then(function(res){
			if ($scope.istruzioni[idx].id!=null && $scope.istruzioni[idx].id!=0)
				$scope.istruzioniCancellate.push($scope.istruzioni[idx].id);
			$scope.istruzioni.splice(idx,1);
			$scope.rinumeraIstruzioni();
		})
	}
	
	$scope.editIstruzione = function(idx, $event) {
		$scope.selectedIndex = idx;
		$mdDialog.show({
    		targetEvent:event,
            templateUrl: 'templates/istruzioneEstrattore.html',
            controller: 'istruzioneEstrattoreCtrl',
            locals: {
            	dialogTitle:'Istruzione estrattore',
            	istruzione: $scope.istruzioni[idx],
				idxIstruzione: idx
            },
            multiple: true
        }).then(function(istruzione){
        		$scope.rinumeraIstruzioni();
        		$scope.istruzioni[idx] = istruzione;
        });
	}
	
	$scope.rinumeraIstruzioni=function(){
		for(var i=0;i<$scope.istruzioni.length;i++)
			$scope.istruzioni[i].rowNumber=i+1;
	}
	
	
	$scope.cancelDialog = function(ev){
		if ($scope.form.$dirty)
			utilsSvc.showConfirm('Conferma',"Confermi l'annullamento delle modifiche?",ev)
				.then(function(res){
					$mdDialog.cancel();
				});
		else
			$mdDialog.cancel();
	}
	
	$scope.confirmDialog = function(){
		if (!$scope.checkTime())
			return;
		var closeDialog = !($scope.piano.id==null || $scope.piano.id==0); 
		PianiEstrazioneDistinte.Save({pianoEstrazione: $scope.piano, istruzioni: $scope.istruzioni, istruzioniCancellate:$scope.istruzioniCancellate})
			.$promise.then(function(res){
				if (closeDialog)
					$mdDialog.hide($scope.piano);
				else
					$scope.piano.id = res.value;
			},
			function(err){
				utilsSvc.handleHttpError(err);
			})
	}
	
	$scope.saveStartTime = function() {
		var dt = new Date($scope.piano.startTime);
		dt.setTime($scope.startTime);
		$scope.piano.startTime = dt;
	}
	
	$scope.checkTime = function() {
		if ($scope.piano.startTime != null && $scope.piano.startTime.getMinutes() % 15!=0) {
			document.getElementById("startTime").focus();
			utilsSvc.showMessage("L'orario di avvio deve essere inserito con i minuti impostati a 0, 15, 30 o 45");
			return false;
		}
		if ($scope.piano.cutOffDataCreazioneDisposizione!=null && $scope.piano.cutOffDataCreazioneDisposizione.getMinutes() % 15!=0) {
			document.getElementById("oraCutoff").focus();
			utilsSvc.showMessage("L'orario di cutoff deve essere inserito con i minuti impostati a 0, 15, 30 o 45");
			return false;
		}
		return true;
	}
})
.controller('istruzioneEstrattoreCtrl', function($scope, $mdDialog, FunzioniOrdinanti, locals) {
	$scope.istruzione = angular.copy(locals.istruzione);
	$scope.idxIstruzione = locals.idxIstruzione;
	$scope.dialogTitle = locals.dialogTitle;
	
//	if (!$scope.istruzione.rangeImportoDa)
//		$scope.istruzione.rangeImportoDa=0;
//	if (!$scope.istruzione.rangeImportoA)
//		$scope.istruzione.rangeImportoA = 0;
//	if (!$scope.istruzione.importoLimiteDistinta)
//		$scope.istruzione.importoLimiteDistinta=0;
	
	if ($scope.istruzione.rangeImportoDa)
		$scope.rangeImportoDa=$scope.istruzione.rangeImportoDa.formatAsCurrency();
	if ($scope.istruzione.rangeImportoA)
		$scope.rangeImportoA=$scope.istruzione.rangeImportoA.formatAsCurrency();
	if ($scope.istruzione.importoLimiteDistinta)
		$scope.importoLimiteDistinta=$scope.istruzione.importoLimiteDistinta.formatAsCurrency();
	
	$scope.funzioniOrdinanti = [];
	
	FunzioniOrdinanti.ListAllForUser({start:0,length:99999,orderBy:'funzioneOrdinante'}).$promise.then(function(data){
		$scope.funzioniOrdinanti = data;
	});
	
	$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.checkInteger=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 dataField = $event.target;
		var fieldName = dataField.getAttribute("ng-model");
		fieldName = fieldName.substring(fieldName.indexOf(".") + 1);
		
		var importo = $scope.$eval( dataField.getAttribute("ng-model"));
		if (importo==null) {
			$event.target.value ='';
			 return;
		} else {
			$event.target.value =  importo.toCurrency().formatAsCurrency(); 
		}
			
	}
	$scope.confirmDialog = function() {
		
		if ($scope.rangeImportoDa && $scope.rangeImportoDa!='')
			$scope.istruzione.rangeImportoDa=$scope.rangeImportoDa.toCurrency();
		if ($scope.rangeImportoA && $scope.rangeImportoA!='')
			$scope.istruzione.rangeImportoA=$scope.rangeImportoA.toCurrency();
		if ($scope.importoLimiteDistinta && $scope.importoLimiteDistinta!='')
			$scope.istruzione.importoLimiteDistinta=$scope.importoLimiteDistinta.toCurrency();
		$mdDialog.hide($scope.istruzione);
	}
	
	$scope.cancelDialog = function() {
    	$mdDialog.cancel();
    }
});

