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.

Claudio Masci

Sono innanzitutto un appassionato di informatica e tecnologia in generale. Lavoro in ambito informatico da circa 16 anni, spaziando in diversi campi, andando dalla programmazione web, allo sviluppo di software, dalla grafica alla modellazione 3d ed al video editing, ho sempre voluto approfondire ogni aspetto e questo mi ha permesso di lavorare in diversi ambiti informatici.

Rispondi