Creare un gestionale per strutture ricettive in C# – 22 – Correzione Query

Creare un gestionale per strutture ricettive in C# #22 - Correzione Query

Creare un gestionale per strutture ricettive in C# – 22 – Correzione Query: Correzione dei problemi della query e del form per le prenotazioni.

In questa lezione andremo a correggere i problemi lasciati in sospeso nella precedente lezione.

Andremo quindi ad inserire correttamente le date, il prezzo finale e l’apostrofo.

Correggeremo inoltre il caricamento delle camere ad ogni apertura della scheda Dati Prenotazione, e l’errato calcolo del prezzo totale che in alcuni casi mostrava 4 numeri decimali invece di 2.

Creare un gestionale per strutture ricettive in C# – 22 – Correzione Query

Iniziamo dal bug del caricamento delle camere, che non è strettamente collegato alla query.

Infatti questo bug si presenta quando apriamo la scheda “Dati Prenotazione” selezioniamo la camera, poi cambiando scheda ritorniamo alla scheda “Dati Prenotazione” e la camera selezionata viene resettata.

Questo succede perchè abbiamo impostato il caricamento dell’elenco delle camere all’apertura della scheda.

Per risolverlo possiamo scegliere una di queste 2 soluzioni:

  • Spostare il caricamento delle camere al click del tasto “Aggiungi Prenotazione”
  • Aggiungere un If che verifica che siano già presenti delle camere nell’elenco

La scelta che ho adottato è la seconda, quindi il codice dell’evento Enter della scheda Dati Prenotazione diventa:

if (cmbCamera.Items.Count == 0)
            {
                CaricaDatabaseCamere();
            }

In questo modo vengono ricaricate le camere solo se non ci sono elementi presenti nella Combobox.

Fix bug delle date

Passiamo ora al bug delle date, per risolvere questo bug andremo a creare una nuova funzione che prendendo in Input anno, mese e giorno, andrà a creare una stringa preformattata per il database.

String ConvertiData(int AnnoInput, int MeseInput, int GiornoInput)
        {
            String DataFinale = AnnoInput + "/" + MeseInput + "/" + GiornoInput;
            return DataFinale;
        }

Basterà poi scrivere:

ConvertiData(datePartenza.Value.Year, datePartenza.Value.Month, datePartenza.Value.Day);

Per inviare i dati corretti alla funzione.

Fix bug apostrofo

Il problema dell’uso dell’apostrofo è un dei più comuni quando si inviano dei dati ad un database.

Infatti il simbolo del singolo apice viene utilizzato per delimitare le stringhe, e inserendolo all’interno di una stringa va a spezzarne il contenuto.

Per questo motivo dovremo andare a creare una funzione che, trovando un singolo apice all’interno di una stringa lo converte in due singoli apici.

E’ importante ricordare che la conversione deve essere fatta in 2 singoli apici ” e non in un doppio apice “.

La funzione quindi sarà:

String CorreggiApici(string StringaDaControllare)
        {
            string StringaCorretta = StringaDaControllare.Replace("'", "''");
            StringaCorretta = StringaCorretta.Trim();
            return StringaCorretta;
        }

Ho aggiunto alla funzione anche il comando Trim, che rimuove eventuali spazi ad inizio e fine stringa.

Fix bug prezzo

Il bug del prezzo è quello che richiede maggiori modifiche.

Infatti prima di preparare il prezzo per il caricamento nel database, dovremo assicurarci che venga visualizzato correttamente nella TextBox.

Non dovranno essere presenti 4 valori decimali ma solo 2.

Quindi la prima correzione da fare riguarda il tasto “Aggiorna Prezzo”, la parte finale diventerà:

//TOTALE
            decimal PrezzoFinaleDecimale = PrezzoCameraTotale + TotaleCostiExtra - TotaleScontiExtra + TotaleTasseSoggiorno;
            PrezzoFinaleDecimale = Decimal.Round(PrezzoFinaleDecimale, 2);
            PrezzoFinale = Convert.ToString(PrezzoFinaleDecimale);

            return PrezzoFinale;

Andremo quindi ad arrotondare il prezzo finale con 2 numeri decimali e poi lo convertiremo in stringa per mostrarlo nella TextBox.

Fatto ciò, possiamo creare la funzione che andrà a verificare il contenuto della TextBox per inviarlo alla query.

string ConvertiPrezzoFinale(TextBox TextInput)
        {
            if (System.Text.RegularExpressions.Regex.Match(TextInput.Text, @"^[0-9,.€]*$").Success is true)
            {
                if (TextInput.Text.Contains("€"))
                {
                    TextInput.Text = TextInput.Text.Replace("€", "");
                }
                if (TextInput.Text.Contains(","))
                {
                    TextInput.Text = TextInput.Text.Replace(",", ".");
                }
            }
            string PrezzoFinale = TextInput.Text;
            return PrezzoFinale;
        }

Andiamo a rimuovere un eventuale simbolo dell’euro e andiamo a convertire la virgola in punto.

In seguito a queste modifiche la query finale sarà:

string sqlQuery = "";
            if (btnAggiungi.Tag.ToString() == "aggiungi")
            {
                sqlQuery = "INSERT INTO [Prenotazioni] ([Id], [Nome], [Cognome], [Indirizzo], [Citta], [CAP], [Nazione], [DataNascita],"+
                    "[Nazionalita], [Telefono], [Email], [TipoDocumento], [CodiceDocumento], [Documento],"+
                    " [DataArrivo], [DataPartenza], [NumeroNotti], [NumeroOspiti], [Camera], [Note], [CostiExtra], [Sconti],"+
                    "[TasseSoggiorno], [MotivoEsenzione], [MetodoPagamento], [Totale]) VALUES ('" + IdCliente
                    + "', '" + CorreggiApici(txtNome.Text) + "', '" + CorreggiApici(txtCognome.Text) + "','" + CorreggiApici(txtIndirizzo.Text) + "','" + CorreggiApici(txtCitta.Text)
                    + "','" + txtCap.Text + "','" + CorreggiApici(cmbNazione.Text) + "','" + ConvertiData(dateNascita.Value.Year, dateNascita.Value.Month, dateNascita.Value.Day) + "','" + CorreggiApici(cmbNazionalita.Text) +
                     "','" + txtTelefono.Text + "','" + txtEmail.Text + "','" + CorreggiApici(cmbTipoDocumento.Text) + "','" + 
                     txtCodiceDocumento.Text + "','" + txtCaricaDocumento.Text + "','" + ConvertiData(dateArrivo.Value.Year, dateArrivo.Value.Month, dateArrivo.Value.Day) + "','" +
                     ConvertiData(datePartenza.Value.Year, datePartenza.Value.Month, datePartenza.Value.Day) + "','" + numNotti.Value + "','" + numOspiti.Value + "','" + CorreggiApici(cmbCamera.Text) + "','" + CorreggiApici(txtNote.Text) +
                     "','" + CorreggiApici(StringaCostiExtra) + "','" + CorreggiApici(StringaScontiExtra) + "','" + SwitchTasseSoggiorno + "','" + CorreggiApici(txtMotivoEsenzione.Text) +
                     "','" + cmbMetodoPagamento.Text + "','" + ConvertiPrezzoFinale(txtTotale) + "')";
            }

Nel seguente video il tutorial completo.