Creare un gestionale per strutture ricettive in C# – 20 – Calcolare Totale Prenotazione

Creare un gestionale per strutture ricettive in C# #20 - Calcolare Totale Prenotazione

Creare un gestionale per strutture ricettive in C# – 20 – Calcolare Totale Prenotazione: Proseguendo nello sviluppo del nostro gestionale, andriamo ad aggiungere una funzione che andrà a calcolare il prezzo totale della prenotazione.

Il Form “Prenotazioni” è quasi completo, ed in questa lezione andremo a creare una funzione che andrà a leggere il costo della camera, il numero di notti e di ospiti, eventuali costi extra, sconti e tasse di soggiorno, e mostrerà il valore totale della prenotazione.

Prima di fare ciò abbiamo corretto un bug lasciato scoperto nella precedente lezione.

Infatti in caso di tentativo di rimozione di un costo extra o di uno sconto, se non c’erano elementi o nessun elemento era selezionato il software crashava.

Per risolvere questo errore abbiamo aggiunto un controllo, che verifica la presenza di elementi nella lista e che almeno 1 elemento sia selezionato.

Inoltre abbiamo aggiunto una messagebox che ci chiede conferma prima dell’eliminazione.

 if (lstCosti.Items.Count > 0 && lstCosti.SelectedIndex >= 0)
            {
                if (MessageBox.Show("Sicuro di voler rimuovere: " + lstCosti.Items[lstCosti.SelectedIndex].ToString(), "Rimozione Costo Extra",
                    MessageBoxButtons.YesNo) == DialogResult.Yes)
                {
                    lstCosti.Items.RemoveAt(lstCosti.SelectedIndex);
                }
            }

In questo esermpio verifichiamo che la lista abbia almeno 1 elemento e che sia selezionato, poi chiediamo all’utente se vuole confermare la rimozione dell’elemento selezionato.

In caso di risposta affermativa andiamo a rimuovere l’elemento dalla lista.

Creare un gestionale per strutture ricettive in C# – 20 – Calcolare Totale Prenotazione

Il calcolo del totale della prenotazione prevede 5 fasi:

  • Costo Camera * Numero di Notti
  • Costo degli Extra
  • Costo degli Sconti
  • Costo Tasse di Soggiorno * Notti * Ospiti
  • Somma dei valori

Le 5 fasi le andremo ad inserire all’interno di una funzione che riporterà alla fine il costo totale della prenotazione.

La funzione completa è:

string PrezzoTotale()
        {
            string PrezzoFinale = "";

            //CALCOLO PREZZO CAMERA X NOTTI
            var CameraSelezionata = (ComboBoxItem)cmbCamera.SelectedItem;
            decimal PrezzoCameraTotale = CameraSelezionata.Prezzo() * numNotti.Value;
            //AGGIUNTA COSTO EXTRA
            decimal TotaleCostiExtra = 0;
            if (lstCosti.Items.Count > 0)
            {
                for (int a = 0; a <= lstCosti.Items.Count - 1; a++)
                {
                    decimal CostoExtraOggettoSelezionato = 0;
                    var CostoExtraSelezionato = (ExtraScontiItem)lstCosti.Items[a];
                    if (CostoExtraSelezionato.TipologiaExtra() == 0)
                    {
                        CostoExtraOggettoSelezionato = CostoExtraSelezionato.PrezzoExtra();
                    }
                    else if (CostoExtraSelezionato.TipologiaExtra() == 1)
                    {
                        CostoExtraOggettoSelezionato = PrezzoCameraTotale * CostoExtraSelezionato.PrezzoExtra() / 100;
                    }
                    else
                    {
                        CostoExtraOggettoSelezionato = 0;
                    }
                    TotaleCostiExtra = TotaleCostiExtra + CostoExtraOggettoSelezionato;
                }
            }
            //AGGIUNTA SCONTO EXTRA
            decimal TotaleScontiExtra = 0;
            if (lstSconti.Items.Count > 0)
            {
                for (int a = 0; a <= lstSconti.Items.Count - 1; a++)
                {
                    decimal ScontoExtraOggettoSelezionato = 0;
                    var ScontoExtraSelezionato = (ExtraScontiItem)lstSconti.Items[a];
                    if (ScontoExtraSelezionato.TipologiaExtra() == 0)
                    {
                        ScontoExtraOggettoSelezionato = ScontoExtraSelezionato.PrezzoExtra();
                    }
                    else if (ScontoExtraSelezionato.TipologiaExtra() == 1)
                    {
                        ScontoExtraOggettoSelezionato = PrezzoCameraTotale * ScontoExtraSelezionato.PrezzoExtra() / 100;
                    }
                    else
                    {
                        ScontoExtraOggettoSelezionato = 0;
                    }
                    TotaleScontiExtra = TotaleScontiExtra + ScontoExtraOggettoSelezionato;
                }
            }
            //AGGIUNTA TASSE SOGGIORNO
            decimal TotaleTasseSoggiorno = 0;
            if (chkTasse.Checked == true)
            {
                TotaleTasseSoggiorno = Properties.Settings.Default.TasseDiSoggiorno * numOspiti.Value * numNotti.Value;
            }
            //TOTALE
            PrezzoFinale = Convert.ToString(PrezzoCameraTotale + TotaleCostiExtra - TotaleScontiExtra + TotaleTasseSoggiorno);

            return PrezzoFinale;
        }

Ma andiamo ad analizzare nel dettaglio le 5 fasi:

Costo Camera * Numero di Notti

//CALCOLO PREZZO CAMERA X NOTTI
            var CameraSelezionata = (ComboBoxItem)cmbCamera.SelectedItem;
            decimal PrezzoCameraTotale = CameraSelezionata.Prezzo() * numNotti.Value;

In questa prima parte andiamo semplicemente a recuperare il costo della camera e lo moltiplichiamo per il numero di notti.

Costo degli Extra

//AGGIUNTA COSTO EXTRA
            decimal TotaleCostiExtra = 0;
            if (lstCosti.Items.Count > 0)
            {
                for (int a = 0; a <= lstCosti.Items.Count - 1; a++)
                {
                    decimal CostoExtraOggettoSelezionato = 0;
                    var CostoExtraSelezionato = (ExtraScontiItem)lstCosti.Items[a];
                    if (CostoExtraSelezionato.TipologiaExtra() == 0)
                    {
                        CostoExtraOggettoSelezionato = CostoExtraSelezionato.PrezzoExtra();
                    }
                    else if (CostoExtraSelezionato.TipologiaExtra() == 1)
                    {
                        CostoExtraOggettoSelezionato = PrezzoCameraTotale * CostoExtraSelezionato.PrezzoExtra() / 100;
                    }
                    else
                    {
                        CostoExtraOggettoSelezionato = 0;
                    }
                    TotaleCostiExtra = TotaleCostiExtra + CostoExtraOggettoSelezionato;
                }
            }

In questa seconda fase controlliamo che siano presenti dei costi extra nella lista.

Nel caso in cui fossero presenti dei costi extra andiamo ad analizzare se il costo è segnato con una valota o in percentuale.

Per i costi espressi direttamente con la valuta, andiamo ad assegnare il suo valore ad una variabile temporanea.

Per quelli espressi in percentuale invece moltiplichiamo il prezzo della camera per la percentuale e quindi lo dividiamo per 100 ed assegniamo il valore alla variabile temporanea.

Alla fine del ciclo sommiamo tutti gli extra in una variabile.

Costo degli Sconti

//AGGIUNTA SCONTO EXTRA
            decimal TotaleScontiExtra = 0;
            if (lstSconti.Items.Count > 0)
            {
                for (int a = 0; a <= lstSconti.Items.Count - 1; a++)
                {
                    decimal ScontoExtraOggettoSelezionato = 0;
                    var ScontoExtraSelezionato = (ExtraScontiItem)lstSconti.Items[a];
                    if (ScontoExtraSelezionato.TipologiaExtra() == 0)
                    {
                        ScontoExtraOggettoSelezionato = ScontoExtraSelezionato.PrezzoExtra();
                    }
                    else if (ScontoExtraSelezionato.TipologiaExtra() == 1)
                    {
                        ScontoExtraOggettoSelezionato = PrezzoCameraTotale * ScontoExtraSelezionato.PrezzoExtra() / 100;
                    }
                    else
                    {
                        ScontoExtraOggettoSelezionato = 0;
                    }
                    TotaleScontiExtra = TotaleScontiExtra + ScontoExtraOggettoSelezionato;
                }
            }

Il calcolo degli sconti è identico a quello degli extra, solo che viene realizzato sull’elenco sconti e non su quello degli extra.

Costo Tasse di Soggiorno * Notti * Ospiti

//AGGIUNTA TASSE SOGGIORNO
            decimal TotaleTasseSoggiorno = 0;
            if (chkTasse.Checked == true)
            {
                TotaleTasseSoggiorno = Properties.Settings.Default.TasseDiSoggiorno * numOspiti.Value * numNotti.Value;
            }

Il totale delle tasse di soggiorno viene calcolato caricando il valore delle tasse di soggiorno inserito nelle impostazioni e moltiplicato per il numero degli ospiti e quindi per il numero di notti.

NOTA: Il gestionale non prevede il calcolo delle tasse di soggiorno separato per ogni ospite, ma è possibile creare uno sconto da applicare per rimuovere le tasse di soggiorno per un singolo ospite o per una singola notte.

Somma dei valori

//TOTALE
            PrezzoFinale = Convert.ToString(PrezzoCameraTotale + TotaleCostiExtra - TotaleScontiExtra + TotaleTasseSoggiorno);

            return PrezzoFinale;

L’ultima parte prevede semplicemente la somma di tutti i valori e la sottrazione degli sconti.

Il totale poi verrà inviato in output.