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.

author avatar
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.