Esempio n. 1
0
        /// <summary>
        /// Permette di aggiungere gli optional ad una persona in una determinata escursione
        /// </summary>
        /// <returns>Se riesce a farlo ritorna una stringa con il prezzo aggioranto, altrimenti un errore</returns>
        // Possibile modifica degli optional da parte di un utente
        static public string AggiuntaOptional(string codiceFiscale, string optional, int codiceEsursione)
        {
            Escursione escursione = RicercaEscursione(codiceEsursione);

            foreach (Persona persona in escursione.PersoneIscritteEscursione)
            {
                if (persona.CodiceFiscale == codiceFiscale) // Cerco l'utente usando il suo codice fiscale
                {
                    int indicePersona = escursione.PersoneIscritteEscursione.IndexOf(persona);
                    escursione.OptionalPerPartecipante[indicePersona] += "," + escursione.VerificaOptional(optional); // Aggiungo gli optional verificandoli con il metodo VerificaOptional
                    double costo = escursione.CalcoloCostoEscursione(escursione.OptionalPerPartecipante[indicePersona]);
                    return($"Optional aggiunto prezzo aggiornato per `{codiceFiscale}`: {costo} €");
                }
            }
            return($"`{codiceFiscale}` non trovato!".Pastel("#FF0000"));
        }
Esempio n. 2
0
        /// <summary>
        /// Permette di cancellare la prenotazione di una persona ad una data escursione
        /// </summary>
        /// <returns>Ritorna una stringa con l'esito della eliminazione</returns>
        //Metodo con il quale si annulla l'iscrizione di un utente ad una escursione
        static public string CancellazionePrenotazione(int numeroEscursione, string codiceFiscale)
        {
            Escursione escursione = RicercaEscursione(numeroEscursione);

            foreach (Persona persona in escursione.PersoneIscritteEscursione)
            {
                if (persona.CodiceFiscale == codiceFiscale)
                {
                    int indicePersona = escursione.PersoneIscritteEscursione.IndexOf(persona);
                    escursione.PersoneIscritteEscursione.RemoveAt(indicePersona); // Rimuovo la persona dalla lista di persone dell'escursione scelta
                    escursione.OptionalPerPartecipante.RemoveAt(indicePersona);   //Rimuovo gli optional scleti dal partecipante
                    escursione.CostoPerPartecipante.RemoveAt(indicePersona);      //Rimuovo il costo dell'escursione per il partecipante
                    return($"La prenotazione di `{persona.Cognome} {persona.Nome}` all'escursione n°{escursione.Numero} è stata cancellata con successo!".Pastel("#00ff00"));
                }
            }
            return($"La prenotazione di `{codiceFiscale}` all'escursione n°{escursione.Numero} non è stata trovata!".Pastel("#FF0000"));
        }
Esempio n. 3
0
        /// <summary>
        /// Permette di modificare l'escursione in tutti i suoi aspetti
        /// </summary>
        /// <returns>Una string che riassume le modifiche fatte con l'esito (riuscita/non riuscita)</returns>
        //Metodo che consente di modificare alcune propietà di una escursione già presente
        static public string ModificaEscursione(int numeroEscursione, double?costo = null, string descrizione = "", string tipologia = "", string optional = "")
        {
            Escursione escursione = RicercaEscursione(numeroEscursione); //Ricerco l'escursione cercata

            StringBuilder sb = new StringBuilder();

            sb.AppendLine($"Modifica escursione n°{numeroEscursione}"); // `intestazione` output

            //in caso i parametri opzionali siano diversi dai parametri di default richiamo i metodi appositi della classe Escursione
            if (costo != null)
            {
                sb.Append("Modifica costo:");
                if (escursione.ModificaCosto((double)costo))
                {
                    sb.AppendLine(" riuscita!\n".Pastel("#00FF00"));
                }
                else
                {
                    sb.AppendLine(" non riuscita!\n".Pastel("#FF0000"));
                }
            }

            if (descrizione != "")
            {
                sb.Append("Modifica descrizione:");
                if (escursione.ModificaDescrizione(descrizione))
                {
                    sb.Append(" riuscita!\n".Pastel("#00FF00"));
                }
                else
                {
                    sb.Append(" non riuscita!\n".Pastel("#FF0000"));
                }
            }

            if (tipologia != "")
            {
                sb.Append("Modifica tipologia:");
                if (escursione.ModificaTipo(tipologia))
                {
                    sb.Append(" riuscita!\n".Pastel("#00FF00"));
                }
                else
                {
                    sb.Append(" non riuscita!\n".Pastel("#FF0000"));
                }
            }

            if (optional != "")
            {
                sb.Append("Modifica optional:");
                if (escursione.ModificaOptional(optional))
                {
                    sb.Append(" riuscita!\n".Pastel("#00FF00"));
                }
                else
                {
                    sb.Append(" non riuscita!\n".Pastel("#FF0000"));
                }
            }

            return(sb.ToString());
        }
Esempio n. 4
0
        /// <summary>
        /// Permette la rimozione degli optional di una persona che partecipa ad una determinata escursione
        /// </summary>
        /// <returns>Se tutto va bene, ritorna una stringa con il prezzo aggiornato, altrimenti stampa un errore</returns>
        //Metodo che consente ad un utente di rimuovere aventuali optional scelti durante l'iscrizione all'escursione
        //Una volta rimossi gli optional il metodo rieseguirà anche il calcolo del costo dell'escursione per il partecipante
        static public string RimozioneOptional(int numeroEscursione, string optional, string codiceFiscale)
        {
            Escursione escursione = RicercaEscursione(numeroEscursione);

            foreach (Persona persona in escursione.PersoneIscritteEscursione)
            {
                if (persona.CodiceFiscale == codiceFiscale)
                {
                    int      indicePersonaTrovata         = escursione.PersoneIscritteEscursione.IndexOf(persona);
                    string   updatedOptional              = "";
                    string[] splittedOptionalPartecipante = escursione.OptionalPerPartecipante[indicePersonaTrovata].Trim().Split(',');
                    string[] splittedOptionalScelto       = optional.Trim().Split(',');

                    if (splittedOptionalScelto.Length == 1) // Se l'optional da cercare è solo uno
                    {
                        // Cerco se tra quelle stringhe c'è l'optional da rimuovere
                        foreach (string s in splittedOptionalPartecipante)
                        {
                            if (s == optional)
                            {
                                splittedOptionalPartecipante[Array.IndexOf(splittedOptionalPartecipante, s)] = string.Empty;
                            }
                        }

                        // Ricompongo la stringa
                        for (int i = 0; i < splittedOptionalPartecipante.Length; i++)
                        {
                            if (i != splittedOptionalPartecipante.Length - 1 && i != 0)
                            {
                                updatedOptional += splittedOptionalPartecipante[i] + ",";
                            }
                            else
                            {
                                updatedOptional += splittedOptionalPartecipante[i];
                            }
                        }
                    }
                    else
                    {
                        // Li cerco, se li trovo li sostituisco con una stringa vuota
                        for (int i = 0; i < splittedOptionalScelto.Length; i++)
                        {
                            for (int j = 0; j < splittedOptionalPartecipante.Length; j++)
                            {
                                if (splittedOptionalScelto[i] == splittedOptionalPartecipante[j])
                                {
                                    splittedOptionalPartecipante[Array.IndexOf(splittedOptionalPartecipante, splittedOptionalPartecipante[j])] = string.Empty;
                                }
                            }
                        }

                        // Ricompongo la stringa
                        for (int i = 0; i < splittedOptionalPartecipante.Length; i++)
                        {
                            if (splittedOptionalPartecipante[i] != "" && i != splittedOptionalPartecipante.Length - 1 && i != 0)
                            {
                                updatedOptional += splittedOptionalPartecipante[i] + ",";
                            }
                            else
                            {
                                updatedOptional += splittedOptionalPartecipante[i];
                            }
                        }
                    }

                    // Assegno gli optional aggiornati alla persona
                    escursione.OptionalPerPartecipante[indicePersonaTrovata] = updatedOptional;

                    // Ricalcolo del prezzo
                    double newPrezzo = escursione.CalcoloCostoEscursione(updatedOptional);
                    escursione.CostoPerPartecipante[indicePersonaTrovata] = newPrezzo;
                    return($"Optional rimosso prezzo aggiornato per `{codiceFiscale}`: {newPrezzo} €");
                }
                else
                {
                    return($"`{codiceFiscale}` non trovato!".Pastel("#FF0000"));
                }
            }

            return($"Escursione n° {numeroEscursione} non trovata!".Pastel("#FF0000"));
        }
Esempio n. 5
0
        /// <summary>
        /// Permette di aggiungere dei partecipanti ad una data escursione con i loro optional
        /// </summary>
        /// <returns>Ritorna una stringa con il prezzo da pagare per ogni persona aggiunta, ed eventualmente un messaggio di attenzione in caso venga superato il numero massimo di partecipanti</returns>
        static public string RegistrazionePartecipanti(int numeroEscursione, List <Persona> personeIscritte, List <string> optionalPersoneIscritte)
        {
            /*
             * Moltiplicatore per il prezzo del biglietto in base al numero di persone che si iscrivono contemporaneamente alla gita
             */
            Escursione escursione     = RicercaEscursione(numeroEscursione);
            int        numMax         = escursione.NumeroMassimoPartecipanti;
            int        numeroIscritti = personeIscritte.Count;

            double incrementoCostoBiglietto = 0.2; // di default se l'incremento è impostate a 0.2

            if (numeroIscritti > 0 && numeroIscritti <= numMax / 2)
            {
                incrementoCostoBiglietto = (double)numeroIscritti / (double)10;
            }
            else if (numeroIscritti > numMax / 2 && numeroIscritti < numMax)
            {
                incrementoCostoBiglietto = (double)numeroIscritti / (double)10;
            }

            bool isValid = false;
            int  index   = -1;

            if (personeIscritte.Count <= numMax)
            {
                //Controllo se le persone aggiunte non siano gia stata iscritte altre volte in modo da evitare di inserire una persona più volte
                for (int i = 0; i < personeIscritte.Count; i++)
                {
                    if (_persone.Count == 0) //in caso l'archivio _persone sia vuoto inserisco la prima persona in quanto non vi è bisogno di alcun controllo non potendoci essere persone doppie
                    {
                        _persone.Add(personeIscritte[i]);
                    }
                    else //se l'archivio presente al suo interno altre persone eseguo uj controllo per accertarmi che non vengano inserite persone già presenti in esso
                    {
                        for (int j = 0; j < _persone.Count; j++)
                        {
                            if (!Equals(personeIscritte[i], _persone[j])) //tramite il metodo Equals verifico se le due persone sono ugauali tra loro
                            {
                                isValid = true;
                                index   = i; //in caso ciò non sia vero mi segno la posizione della persona
                            }
                            else
                            {
                                isValid = false;
                                break;
                            }
                        }
                        if (isValid)
                        {
                            _persone.Add(personeIscritte[index]);          //per poi inserirla nell'archivio
                        }
                    }
                }

                // Controllo che dentro l'escursione non ci sia gia stato inserito una stessa persona per evitare ridondanze
                //basandomi sullo stesso principio del controllo precendente
                isValid = false;
                index   = -1;
                for (int i = 0; i < personeIscritte.Count; i++)
                {
                    if (escursione.PersoneIscritteEscursione.Count == 0)
                    {
                        escursione.PersoneIscritteEscursione.Add(personeIscritte[0]);
                    }
                    else
                    {
                        for (int j = 0; j < escursione.PersoneIscritteEscursione.Count; j++)
                        {
                            if (!Equals(personeIscritte[i], escursione.PersoneIscritteEscursione[j]))
                            {
                                isValid = true;
                                index   = i;
                            }
                            else
                            {
                                isValid = false;
                                break;
                            }
                        }
                        if (isValid)
                        {
                            escursione.PersoneIscritteEscursione.Add(personeIscritte[index]);
                        }
                    }
                }

                //Inserisco gli optional per ogni persona dentro la lista
                for (int i = 0; i < optionalPersoneIscritte.Count; i++)
                {
                    //uso il metodo VerificaOptional per assicurarmi che gli optional scelti dal partecipante siano conformi con quelli offerti dall'escursione
                    escursione.OptionalPerPartecipante.Add(escursione.VerificaOptional(optionalPersoneIscritte[i]));
                }

                // Calcolo il prezzo dell'escursione per ogni partecipante e lo aggiungo alla lista costoPerPartecipante dell'istanza della classe Escursione
                // Inoltre creo una stringa con la quale comunicherò i prezzi a seconda dei partecipanti
                StringBuilder sb = new StringBuilder();
                foreach (Persona persona in personeIscritte)
                {
                    int indexPersona = escursione.PersoneIscritteEscursione.IndexOf(persona);
                    if (indexPersona != -1)
                    {
                        double costoEscursione = escursione.CalcoloCostoEscursione(escursione.OptionalPerPartecipante[indexPersona]);
                        costoEscursione += costoEscursione * incrementoCostoBiglietto; // calcolo il prezzo del biglietto compreso del 'moltiplicatore'
                        escursione.CostoPerPartecipante.Add(costoEscursione);
                        sb.AppendLine($"{persona.Cognome} {persona.Nome} dovrà pagare: {costoEscursione} €".Pastel("#00FF00"));
                    }
                }
                return(sb.ToString());
            }
            else
            {
                //Controllo se le persone aggiunte non siano gia stata iscritte altre volte in modo da evitare di inserire una persona più volte
                isValid = false;
                index   = -1;
                for (int i = 0; i < numMax; i++) //controllo solo all'interno delle persone massime inseribili
                {
                    if (_persone.Count == 0)     //in caso l'archivio _persone sia vuoto inserisco la prima persona in quanto non vi è bisogno di alcun controllo non potendoci essere persone doppie
                    {
                        _persone.Add(personeIscritte[i]);
                    }
                    for (int j = 0; j < _persone.Count; j++)
                    {
                        if (!Equals(personeIscritte[i], _persone[j])) //tramite il metodo Equals verifico se le due persone sono ugauali tra loro
                        {
                            isValid = true;
                            index   = i;//in caso ciò non sia vero mi segno la posizione della persona
                        }
                        else
                        {
                            isValid = false;
                            break;
                        }
                    }
                    if (isValid)
                    {
                        _persone.Add(personeIscritte[index]);          //per poi inserirla all'interno dell'archivio
                    }
                }


                // Aggiungo le prime 10 persone della lista di iscritti controllando che non vi siano al suo interno due persone uguali
                isValid = false;
                index   = -1;
                for (int i = 0; i < numMax; i++)
                {
                    for (int j = 0; j < escursione.PersoneIscritteEscursione.Count; j++)
                    {
                        if (!Equals(personeIscritte[i], escursione.PersoneIscritteEscursione[j]))
                        {
                            isValid = true;
                            index   = i;
                        }
                        else
                        {
                            isValid = false;
                            break;
                        }
                    }
                    if (isValid)
                    {
                        escursione.PersoneIscritteEscursione.Add(personeIscritte[index]);
                    }
                }

                for (int i = 0; i < numMax; i++)
                {
                    //Aggiungo gli optional per ogni paretcipante
                    escursione.OptionalPerPartecipante.Add(escursione.VerificaOptional(optionalPersoneIscritte[i]));
                }

                //Infine calcolo il costo dell'escursione di ogni partecipante e lo salvo nella lista CostoPerPartecipante presente nella classe escursione
                //inoltre mi creo una stringa che potrà venire utilizzata in caso si voglia comunicare i costi all'utente
                StringBuilder sb = new StringBuilder();
                for (int i = 0; i < numMax; i++)
                {
                    Persona persona         = personeIscritte[i];
                    int     indexPersona    = escursione.PersoneIscritteEscursione.IndexOf(persona);
                    double  costoEscursione = escursione.CalcoloCostoEscursione(escursione.OptionalPerPartecipante[indexPersona]);
                    costoEscursione += costoEscursione * incrementoCostoBiglietto; // Calcolo il prezzo comprensivo dell'incremento del biglietto
                    escursione.CostoPerPartecipante.Add(costoEscursione);
                    sb.AppendLine($"{persona.Cognome} {persona.Nome} dovrà pagare:\t{costoEscursione} €".Pastel("#00FF00"));
                }
                return($"Sono stati selezionati solo le prime {numMax} persone, il numero di partecipanti era superiore a quello limite {numMax}!".Pastel("#FFFF00"));
            }
        }