public decimal TotaleImportoNoBigliettone() { decimal totale = 0; foreach (ProfiloCliente profiloCliente in ElencoProfili) { SoluzioneIngressi soluzione = profiloCliente.SoluzionePreferitaNoBigliettone; if (soluzione != null) { totale += soluzione.ImportoTotale; } } return(totale); }
private void Tentativo(ProfiloCliente cliente, List <SoluzioneIngressiItem> elencoPercorso, decimal importoPercorso, int indice, List <Ingresso> dafare) { if (dafare.Count == 0) { // valida soluzione per bigliettone if (SoluzioneValidaPerBigliettone(elencoPercorso)) { decimal importoTotale = 0; decimal importoUnitario = 0; // ho trovato una soluzione foreach (SoluzioneIngressiItem item in elencoPercorso) { importoTotale += item.PrezzoTotale; importoUnitario += item.PrezzoUnitario; } List <Ingresso> visitati = new List <Ingresso>(); foreach (SoluzioneIngressiItem variante1 in elencoPercorso) { foreach (Ingresso item in variante1.Variante.Biglietto.Percorso.Ingressi) { if (!visitati.Contains(item)) { visitati.Add(item); } } } SoluzioneIngressi sol = new SoluzioneIngressi(); sol.Elenco = new List <SoluzioneIngressiItem>(); sol.Elenco.AddRange(elencoPercorso); sol.NumeroIngressi = visitati.Count; sol.NumeroPercorsi = elencoPercorso.Count; sol.ImportoTotale = importoTotale; sol.ImportoUnitario = importoUnitario; sol.NumeroPersone = cliente.NumeroPersone; cliente.ElencoSoluzioni.AggiungiSoluzioneSeNonDuplicata(sol); } } else { if (cliente.OttimizzaCalcolo && cliente.ElencoSoluzioni.SogliaImporto >= 0) { // inutile proseguire ulteriormente if (importoPercorso > cliente.ElencoSoluzioni.SogliaImporto) { return; } } for (int newIndice = indice + 1; newIndice < m_TutteLeVarianti.Count; newIndice++) { Titolo titolo = null; Variante variante = m_TutteLeVarianti[newIndice]; if (variante.TipologiaTre == EnumTipologiaTre.CardMyFE) { // CARD MY-FE con prezzo sdoppiato -C] if (variante.ComprendeAlmenoUno(dafare) && variante.GiorniCardMyFe() == m_GestoreProfili.TipologiaMyFe && variante.Note.Contains("-C]")) { List <Ingresso> davisitare = new List <Ingresso>(dafare); foreach (Ingresso ingresso in variante.Biglietto.Percorso.Ingressi) { davisitare.Remove(ingresso); } decimal prezzo = 0; SoluzioneIngressiItem tentativo = null; SoluzioneIngressiItem tentativoSecondario = null; tentativo = new SoluzioneIngressiItem(variante, null, cliente.NumeroPersone); prezzo = tentativo.PrezzoTotale; tentativoSecondario = new SoluzioneIngressiItem(variante.PrezzoAttuale.PrezzoRidotto, null, cliente.NumeroPersone); prezzo += tentativoSecondario.PrezzoTotale; elencoPercorso.Add(tentativo); elencoPercorso.Add(tentativoSecondario); Tentativo(cliente, elencoPercorso, importoPercorso + prezzo, newIndice, davisitare); elencoPercorso.Remove(tentativoSecondario); elencoPercorso.Remove(tentativo); } // campo note che finisce con -B è solo COMUNE if (variante.ComprendeAlmenoUno(dafare) && variante.GiorniCardMyFe() == m_GestoreProfili.TipologiaMyFe && variante.Note.Contains("-B]")) { List <Ingresso> davisitare = new List <Ingresso>(dafare); foreach (Ingresso ingresso in variante.Biglietto.Percorso.Ingressi) { davisitare.Remove(ingresso); } decimal prezzo = 0; SoluzioneIngressiItem tentativo = null; //SoluzioneIngressiItem tentativoSecondario = null; tentativo = new SoluzioneIngressiItem(variante, null, cliente.NumeroPersone); prezzo = tentativo.PrezzoTotale; //tentativoSecondario = new SoluzioneIngressiItem(variante.PrezzoAttuale.PrezzoRidotto, null, cliente.NumeroPersone); //prezzo += tentativoSecondario.PrezzoTotale; elencoPercorso.Add(tentativo); //elencoPercorso.Add(tentativoSecondario); Tentativo(cliente, elencoPercorso, importoPercorso + prezzo, newIndice, davisitare); //elencoPercorso.Remove(tentativoSecondario); elencoPercorso.Remove(tentativo); } } else { if (variante.HoTitoloPerComprarlo(cliente.ElencoTitoli, cliente.ElencoCodiciSconto, cliente.NumeroPersone, cliente.Scuola, out titolo)) { if (variante.ComprendeAlmenoUno(dafare)) { List <Ingresso> davisitare = new List <Ingresso>(dafare); foreach (Ingresso ingresso in variante.Biglietto.Percorso.Ingressi) { davisitare.Remove(ingresso); } decimal prezzo = 0; SoluzioneIngressiItem tentativo = null; SoluzioneIngressiItem tentativoSecondario = null; if (titolo != null && titolo.TitoloPrincipale != null && titolo.TitoloSecondario != null) { // GESTIONE TITOLI SECONDARI (solo il primo e' titolare, gli altri accompagnatori) tentativo = new SoluzioneIngressiItem(variante, titolo.TitoloPrincipale, 1); prezzo = tentativo.PrezzoTotale; if (cliente.NumeroPersone > 1) { tentativoSecondario = new SoluzioneIngressiItem(variante, titolo.TitoloSecondario, cliente.NumeroPersone - 1); prezzo += tentativoSecondario.PrezzoTotale; } } else { if (variante.PrezzoAttuale.UnaRiduzioneOgni > 0 && variante.PrezzoAttuale.PrezzoRidotto != null) { int numRidotti = cliente.NumeroPersone / variante.PrezzoAttuale.UnaRiduzioneOgni; int numInteri = cliente.NumeroPersone - numRidotti; tentativo = new SoluzioneIngressiItem(variante, titolo, numInteri); prezzo = tentativo.PrezzoTotale; if (numRidotti > 0) { tentativoSecondario = new SoluzioneIngressiItem(variante.PrezzoAttuale.PrezzoRidotto, titolo, numRidotti); prezzo += tentativoSecondario.PrezzoTotale; } } else { tentativo = new SoluzioneIngressiItem(variante, titolo, cliente.NumeroPersone); prezzo = tentativo.PrezzoTotale; } } elencoPercorso.Add(tentativo); if (tentativoSecondario != null) { elencoPercorso.Add(tentativoSecondario); foreach (Ingresso ingresso in tentativoSecondario.Variante.Biglietto.Percorso.Ingressi) { davisitare.Remove(ingresso); } } Tentativo(cliente, elencoPercorso, importoPercorso + prezzo, newIndice, davisitare); if (tentativoSecondario != null) { elencoPercorso.Remove(tentativoSecondario); } elencoPercorso.Remove(tentativo); } } } } } }