src/DataStructure/Utility.java
public static float costoIntervetiPerSquadra(int[] listaInterventi,String idSquadra){
		float costoTotale;
		//float minutiGiornataLavorativa=480;
		float minutiLavoroNormale;
		float minutiLavoroStraordinario;
		float costoOrarioNormale= 0;
		float costoOrarioStraordinario= 0;
		float ore;
		//double costoUsuraAutomezzo=0.0;
		
		float consumoAutomezzo=0;
		float distanzaTotale=0;
		float durataSpostamenti=0;
		float durataInterventi=0;
		float consumoCarburanteTotale=0;
		float durataGiornataTotale=0;
		String idImpiantoAttuale = idSedediPartenza;
		String idImpiantoSuccessivo;
		
		//Setting del consumo dell'automezzo
		
		consumoAutomezzo = squadre.get(Integer.valueOf(idSquadra)).getConsumo();
		
		//Per il calco del costo necessito di calcolare la lunghezza degli spostamenti e la durata
		
		//Calcolo la distanza totale per visitare tutti gli impianti della lista di interventi
		for(int i=0;i<listaInterventi.length;i++){
			//CONTROLLARE QUESTA ISTRUZIONE
			int indice = listaInterventi[i]-1; //Controllare
			
			idImpiantoSuccessivo = interventi.get(indice).getIdImpianto();
			
			if(! (idImpiantoAttuale.equals(idImpiantoSuccessivo)) ){
				//AGGIORNO LA DISTANZA TOTALE PERCORSA
				
				distanzaTotale+=getDistanzaSpostamentiImpinatiHash(idImpiantoAttuale, idImpiantoSuccessivo);
				//distanzaTotale+=getDistanzaImpianti(idImpiantoAttuale, idImpiantoSuccessivo);
				
				//AGGIORNO IL TEMPO TOTALE DEGLI SPOSTAMENTI
				//durataSpostamenti+=getDurataSpostamentiImpinati(idImpiantoAttuale, idImpiantoSuccessivo);
				durataSpostamenti+=getDurataSpostamentiImpinatiHash(idImpiantoAttuale, idImpiantoSuccessivo);
				
				//AGGIORNO IL TEMPO TOTALE DI INTERVENTI
				durataInterventi+=interventi.get(indice).getDurata();
				
				//IMPOSTO AGGIORNO L'IMPIANTO ATTUALE
				idImpiantoAttuale = idImpiantoSuccessivo;
			}
			else{
				durataInterventi+=interventi.get(indice).getDurata();
			}
			
		}
		
		//AGGIUNGO ALLA DISTANZA PERCORSA E AL TEMPO DI SPOSTAMENTO IL RITORNO ALLA SEDE DI PARTENZA
		//SE NON SONO GIA' NELLA SEDE DI PARTENZA
		if(! (idImpiantoAttuale.equals(idSedediPartenza)) ){
			
			distanzaTotale+=getDistanzaSpostamentiImpinatiHash(idImpiantoAttuale, idSedediPartenza);
			durataSpostamenti+=getDurataSpostamentiImpinatiHash(idImpiantoAttuale, idSedediPartenza);
			//distanzaTotale+=getDistanzaImpianti(idImpiantoAttuale, idSedediPartenza);
			//durataSpostamenti+=getDurataSpostamentiImpinati(idImpiantoAttuale, idSedediPartenza);
		}
		
		//RICAVO IL CONSUMO DI CARBURANTE & E I MINUTI PER ESEGUIRE INTERVENTI E SPOSTAMENTI
		consumoCarburanteTotale = (consumoAutomezzo * distanzaTotale / 100);
		durataGiornataTotale = durataSpostamenti + durataInterventi;
		
		
		//Ricavo costo in termini di euro
		
		//Determino se e' presente del lavoro da svolgere in tariffa di straordinario
		minutiLavoroStraordinario = durataGiornataTotale - giornataLavorativa;//minutiGiornataLavorativa;
		if(minutiLavoroStraordinario > 0){
			minutiLavoroNormale = giornataLavorativa;//minutiGiornataLavorativa;
		}
		else{
			minutiLavoroNormale = durataGiornataTotale;
		}
		
		//Calcolo il costo del lavoro della squadra in tariffa normale
		costoOrarioNormale =squadre.get(Integer.valueOf(idSquadra)).getCostoOrarioSquadra();
		ore = minutiLavoroNormale / 60;
		costoOrarioNormale *= ore;
		
		float costoConsumo = 0;
		
		//Controllo se la lista di interventi della squadra ha interventi o meno da fare
		// e  in caso positivo calcolo il costo consumo totale dell'automezzo
		
		//CALCOLO IL CONSUMO TOTALE TRA CARBURANTE E COSTO PROPORZIONALE
		//if(listaInterventi.length > 0 && consumoCarburanteTotale != 0){
			if(squadre.get(Integer.valueOf(idSquadra)).getAlimentazioneAutomezzo().equals("Benzina")){
				costoConsumo = (consumoCarburanteTotale * costoBenzina) + (squadre.get(Integer.valueOf(idSquadra)).getCostoProporzionale());
			}
			else{
				costoConsumo = (consumoCarburanteTotale) * costoDiesel + (squadre.get(Integer.valueOf(idSquadra)).getCostoProporzionale());
				
			}
		//}
		//else{
		//	costoConsumo = 0;
		//}
		
		//Calcolo il costo del lavoro della squadra in tariffa straordinaria
		if(minutiLavoroStraordinario>0){
			//Fattore di moltiplicazione per il costo del lavoro straordinario
			costoOrarioStraordinario = (squadre.get(Integer.valueOf(idSquadra)).getCostoOrarioSquadra())*2;
			ore = minutiLavoroStraordinario / 60;
			costoOrarioStraordinario *= ore;
			
			
		}
		//Calcolo il costo totale monetario della squadra
		costoTotale = costoOrarioNormale + costoOrarioStraordinario + costoConsumo;
		
		return costoTotale;
		
	}
/**
	 * Metodo per la determinazione del costo CONSIDERANDO l'ordine di esecuzione di una lista di interventi 
	 * affidati a una squadra
	 * 
	 * @param listaInterventi array di interi rappresentati gli id degli interventi
	 * @param idSquadra String rappresentante l'id della squadra
	 * @return costo di esecuzione
	 */
Metodo per la determinazione del costo CONSIDERANDO l'ordine di esecuzione di una lista di interventi
affidati a una squadra

@param listaInterventi array di interi rappresentati gli id degli interventi
@param idSquadra String rappresentante l'id della squadra
@return costo di esecuzione
Metodo per la determinazione del costo CONSIDERANDO l ' ordine di esecuzione di una lista di interventi affidati a una squadra @param listaInterventi array di interi rappresentati gli id degli interventi @param idSquadra String rappresentante l ' id della squadra @return costo di esecuzione
public static float costoIntervetiPerSquadra(int[] listaInterventi,String idSquadra){
		float costoTotale;
		float minutiLavoroNormale;
		float minutiLavoroStraordinario;
		float costoOrarioNormale= 0;
		float costoOrarioStraordinario= 0;
		float ore;
		float consumoAutomezzo=0;
		float distanzaTotale=0;
		float durataSpostamenti=0;
		float durataInterventi=0;
		float consumoCarburanteTotale=0;
		float durataGiornataTotale=0;
		String idImpiantoAttuale = idSedediPartenza;
		String idImpiantoSuccessivo;
		consumoAutomezzo = squadre.get(Integer.valueOf(idSquadra)).getConsumo();
		for(int i=0;i<listaInterventi.length;i++){
			int indice = listaInterventi[i]-1; 
			idImpiantoSuccessivo = interventi.get(indice).getIdImpianto();
			if(! (idImpiantoAttuale.equals(idImpiantoSuccessivo)) ){
				distanzaTotale+=getDistanzaSpostamentiImpinatiHash(idImpiantoAttuale, idImpiantoSuccessivo);
				durataSpostamenti+=getDurataSpostamentiImpinatiHash(idImpiantoAttuale, idImpiantoSuccessivo);
				durataInterventi+=interventi.get(indice).getDurata();
				idImpiantoAttuale = idImpiantoSuccessivo;
			}
			else{
				durataInterventi+=interventi.get(indice).getDurata();
			}
		}
		if(! (idImpiantoAttuale.equals(idSedediPartenza)) ){
			distanzaTotale+=getDistanzaSpostamentiImpinatiHash(idImpiantoAttuale, idSedediPartenza);
			durataSpostamenti+=getDurataSpostamentiImpinatiHash(idImpiantoAttuale, idSedediPartenza);
		}
		consumoCarburanteTotale = (consumoAutomezzo * distanzaTotale / 100);
		durataGiornataTotale = durataSpostamenti + durataInterventi;
		minutiLavoroStraordinario = durataGiornataTotale - giornataLavorativa;
		if(minutiLavoroStraordinario > 0){
			minutiLavoroNormale = giornataLavorativa;
		}
		else{
			minutiLavoroNormale = durataGiornataTotale;
		}
		costoOrarioNormale =squadre.get(Integer.valueOf(idSquadra)).getCostoOrarioSquadra();
		ore = minutiLavoroNormale / 60;
		costoOrarioNormale *= ore;
		float costoConsumo = 0;
			if(squadre.get(Integer.valueOf(idSquadra)).getAlimentazioneAutomezzo().equals("Benzina")){
				costoConsumo = (consumoCarburanteTotale * costoBenzina) + (squadre.get(Integer.valueOf(idSquadra)).getCostoProporzionale());
			}
			else{
				costoConsumo = (consumoCarburanteTotale) * costoDiesel + (squadre.get(Integer.valueOf(idSquadra)).getCostoProporzionale());
			}
		if(minutiLavoroStraordinario>0){
			costoOrarioStraordinario = (squadre.get(Integer.valueOf(idSquadra)).getCostoOrarioSquadra())*2;
			ore = minutiLavoroStraordinario / 60;
			costoOrarioStraordinario *= ore;
		}
		costoTotale = costoOrarioNormale + costoOrarioStraordinario + costoConsumo;
		return costoTotale;
	}
public static float costoIntervetiPerSquadra ( int [ ] listaInterventi , String idSquadra ) { float costoTotale ; float minutiLavoroNormale ; float minutiLavoroStraordinario ; float costoOrarioNormale = 0 ; float costoOrarioStraordinario = 0 ; float ore ; float consumoAutomezzo = 0 ; float distanzaTotale = 0 ; float durataSpostamenti = 0 ; float durataInterventi = 0 ; float consumoCarburanteTotale = 0 ; float durataGiornataTotale = 0 ; String idImpiantoAttuale = idSedediPartenza ; String idImpiantoSuccessivo ; consumoAutomezzo = squadre . get ( Integer . valueOf ( idSquadra ) ) . getConsumo ( ) ; for ( int i = 0 ; i < listaInterventi . length ; i ++ ) { int indice = listaInterventi [ i ] - 1 ; idImpiantoSuccessivo = interventi . get ( indice ) . getIdImpianto ( ) ; if ( ! ( idImpiantoAttuale . equals ( idImpiantoSuccessivo ) ) ) { distanzaTotale += getDistanzaSpostamentiImpinatiHash ( idImpiantoAttuale , idImpiantoSuccessivo ) ; durataSpostamenti += getDurataSpostamentiImpinatiHash ( idImpiantoAttuale , idImpiantoSuccessivo ) ; durataInterventi += interventi . get ( indice ) . getDurata ( ) ; idImpiantoAttuale = idImpiantoSuccessivo ; } else { durataInterventi += interventi . get ( indice ) . getDurata ( ) ; } } if ( ! ( idImpiantoAttuale . equals ( idSedediPartenza ) ) ) { distanzaTotale += getDistanzaSpostamentiImpinatiHash ( idImpiantoAttuale , idSedediPartenza ) ; durataSpostamenti += getDurataSpostamentiImpinatiHash ( idImpiantoAttuale , idSedediPartenza ) ; } consumoCarburanteTotale = ( consumoAutomezzo * distanzaTotale / 100 ) ; durataGiornataTotale = durataSpostamenti + durataInterventi ; minutiLavoroStraordinario = durataGiornataTotale - giornataLavorativa ; if ( minutiLavoroStraordinario > 0 ) { minutiLavoroNormale = giornataLavorativa ; } else { minutiLavoroNormale = durataGiornataTotale ; } costoOrarioNormale = squadre . get ( Integer . valueOf ( idSquadra ) ) . getCostoOrarioSquadra ( ) ; ore = minutiLavoroNormale / 60 ; costoOrarioNormale *= ore ; float costoConsumo = 0 ; if ( squadre . get ( Integer . valueOf ( idSquadra ) ) . getAlimentazioneAutomezzo ( ) . equals ( "Benzina" ) ) { costoConsumo = ( consumoCarburanteTotale * costoBenzina ) + ( squadre . get ( Integer . valueOf ( idSquadra ) ) . getCostoProporzionale ( ) ) ; } else { costoConsumo = ( consumoCarburanteTotale ) * costoDiesel + ( squadre . get ( Integer . valueOf ( idSquadra ) ) . getCostoProporzionale ( ) ) ; } if ( minutiLavoroStraordinario > 0 ) { costoOrarioStraordinario = ( squadre . get ( Integer . valueOf ( idSquadra ) ) . getCostoOrarioSquadra ( ) ) * 2 ; ore = minutiLavoroStraordinario / 60 ; costoOrarioStraordinario *= ore ; } costoTotale = costoOrarioNormale + costoOrarioStraordinario + costoConsumo ; return costoTotale ; }
Metodo per la determinazione del costo CONSIDERANDO l'ordine di esecuzione di una lista di interventi
 affidati a una squadra
Metodo per la determinazione del costo CONSIDERANDO l ' ordine di esecuzione di una lista di interventi affidati a una squadra
//float minutiGiornataLavorativa=480; //double costoUsuraAutomezzo=0.0; //Setting del consumo dell'automezzo //Per il calco del costo necessito di calcolare la lunghezza degli spostamenti e la durata //Calcolo la distanza totale per visitare tutti gli impianti della lista di interventi //CONTROLLARE QUESTA ISTRUZIONE //Controllare //AGGIORNO LA DISTANZA TOTALE PERCORSA //distanzaTotale+=getDistanzaImpianti(idImpiantoAttuale, idImpiantoSuccessivo); //AGGIORNO IL TEMPO TOTALE DEGLI SPOSTAMENTI //durataSpostamenti+=getDurataSpostamentiImpinati(idImpiantoAttuale, idImpiantoSuccessivo); //AGGIORNO IL TEMPO TOTALE DI INTERVENTI //IMPOSTO AGGIORNO L'IMPIANTO ATTUALE //AGGIUNGO ALLA DISTANZA PERCORSA E AL TEMPO DI SPOSTAMENTO IL RITORNO ALLA SEDE DI PARTENZA //SE NON SONO GIA' NELLA SEDE DI PARTENZA //distanzaTotale+=getDistanzaImpianti(idImpiantoAttuale, idSedediPartenza); //durataSpostamenti+=getDurataSpostamentiImpinati(idImpiantoAttuale, idSedediPartenza); //RICAVO IL CONSUMO DI CARBURANTE & E I MINUTI PER ESEGUIRE INTERVENTI E SPOSTAMENTI //Ricavo costo in termini di euro //Determino se e' presente del lavoro da svolgere in tariffa di straordinario //minutiGiornataLavorativa; //minutiGiornataLavorativa; //Calcolo il costo del lavoro della squadra in tariffa normale //Controllo se la lista di interventi della squadra ha interventi o meno da fare // e  in caso positivo calcolo il costo consumo totale dell'automezzo //CALCOLO IL CONSUMO TOTALE TRA CARBURANTE E COSTO PROPORZIONALE //if(listaInterventi.length > 0 && consumoCarburanteTotale != 0){ //} //else{ //	costoConsumo = 0; //} //Calcolo il costo del lavoro della squadra in tariffa straordinaria //Fattore di moltiplicazione per il costo del lavoro straordinario //Calcolo il costo totale monetario della squadra