
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.
Rispondi