Creare un gestionale per strutture ricettive in C# – 17 – Database Prenotazioni

Creare un gestionale per strutture ricettive in C# - #17 - Database Prenotazioni

Creare un gestionale per strutture ricettive in C# – 17 – Database Prenotazioni: Dopo aver inserito gli elementi di base del form Prenotazioni, andiamo a creare il database ad esso associato.

Il database per le prenotazioni degli utenti è molto semplice, ed è composto per la maggior parte da campi di tipo NVARCHAR.

Abbiamo già visto come creare la tabella per le camere e per sconti e costi extra, quello che dovremo fare non è molto diverso.

L’unico problema potrebbe essere rappresentato dal documento d’identità.

Per il documento, che dovrebbe contenere un file (ad esempio jpg o pdf) abbiamo 2 scelte:

  • Creare un tipo di BLOB ed inserire il file all’interno del database
  • Creare una colonna NVARCHAR ed inserire solo il link al file che invece sarà copiato in una cartella

Non c’è un metodo giusto ed uno sbagliato, sono 2 scelte diverse.

Il primo metodo ha a suo vantaggio che il file sarà più protetto, essendo inserito direttamente nel database ed associato all’id della prenotazione.

Tenendolo invece in una cartella è possibile che l’utente possa sbagliare e cancellarlo o sovrascriverlo.

Di contro invece, spesso capita (soprattutto quando il database è online), che ci sia un limite alle dimensioni dello stesso.

Quindi inserire tanti file al suo interno potrebbe portare facilmente a raggiungere la quota limite.

Per questo progetto (anche se il database è locale e quindi non ci sarebbero limiti alle sue dimensioni), ho scelto comunque di creare un campo NVARCHAR e di inserire il file del documento all’esterno del database (cosa che aiuta a tenerlo di piccole dimensioni).

Creare un gestionale per strutture ricettive in C# – 17 – Database Prenotazioni

Andiamo quindi nel database del nostro programma e creiamo una nuova tabella, il codice da usare è:

CREATE TABLE [dbo].[Prenotazioni] (
    [Id]              NVARCHAR (200)  NOT NULL,
    [Nome]            NVARCHAR (200)  NULL,
    [Cognome]         NVARCHAR (200)  NULL,
    [Indirizzo]       NVARCHAR (300)  NULL,
    [Citta]           NVARCHAR (300)  NULL,
    [CAP]             NVARCHAR (10)   NULL,
    [Nazione]         NVARCHAR (200)  NULL,
    [DataNascita]     DATE            NULL,
    [Nazionalita]     NVARCHAR (200)  NULL,
    [Telefono]        NVARCHAR (80)   NULL,
    [Email]           NVARCHAR (300)  NULL,
    [TipoDocumento]   NVARCHAR (100)  NULL,
    [CodiceDocumento] NVARCHAR (50)   NULL,
    [Documento]       NVARCHAR (600)  NULL,
    [DataArrivo]      DATE            NULL,
    [DataPartenza]    DATE            NULL,
    [NumeroNotti]     INT             NULL,
    [NumeroOspiti]    INT             NULL,
    [Camera]          NVARCHAR (200)  NULL,
    [Note]            NVARCHAR (2000) NULL,
    [CostiExtra]      NVARCHAR (2000) NULL,
    [Sconti]          NVARCHAR (2000) NULL,
    [TasseSoggiorno]  INT             NULL,
    [MotivoEsenzione] NVARCHAR (1000) NULL,
    [MetodoPagamento] NVARCHAR (300)  NULL,
    [Totale]          FLOAT (53)      NULL,
    PRIMARY KEY CLUSTERED ([Id] ASC)
);

Dopo aver creato la nuova tabella per le prenotazioni, possiamo tornare al nostro form, e preparare il pannello per l’aggiunta di una nuova prenotazione.

In questo caso quello che faremo è controllare che i campi inseriti non siano vuoti e i valori al loro interno siano corretti.

// CONTROLLO PRESENZA NOME E COGNOME
            if (txtNome.Text.Length < 2 || txtCognome.Text.Length < 2)
            {
                MessageBox.Show("I campi Nome e Cognome non possono contenere meno di 2 caratteri!");
                return;
            }
            // CONTROLLO DATA ARRIVO E DATA PARTENZA
            if (DateTime.Compare(dateArrivo.Value, DateTime.Now) < 0)
            {
                MessageBox.Show("La data di arrivo non può essere antecedente al giorno stesso.");
                return;
            }
            if (DateTime.Compare(datePartenza.Value, dateArrivo.Value) < 0)
            {
                MessageBox.Show("La data di partenza non può essere antecedente alla data di arrivo.");
                return;
            }
            // CONTROLLO NUMERO NOTTI E NUMERO OSPITI
            if (numNotti.Value < 1 || numOspiti.Value < 1)
            {
                MessageBox.Show("I campi Notti ed Ospiti non possono essere inferiori ad 1!");
                return;
            }
            // CONTROLLO CAMERA SCELTA
            if (cmbCamera.Text.Length < 1)
            {
                MessageBox.Show("Non è stata selezionata la camera dell'ospite.");
                return;
            }
            // CONTROLLO TOTALE
            if (txtTotale.Text.Length < 1)
            {
                MessageBox.Show("Non è stato inserito il costo totale della prenotazione.");
                return;
            }
            // CREA ID
            // DATA ARRIVO + NOME + COGNOME (20210423MarioRossi)
            // CONTROLLARE NOME E COGNOME PER EVENTUALE PRESENZA CARATTERI NON CONSENTITI
            string IDCliente = dateArrivo.Value.Year + dateArrivo.Value.Month + dateArrivo.Value.Day + txtNome.Text + txtCognome.Text;
            MessageBox.Show(IDCliente);

Come prima cosa controlliamo che i campi Nome e Cognome abbiano almeno 2 caratteri.

Passando alla data confrontiamo la data di arrivo con il giorno di inserimento, per evitare che possano essere inserite prenotazioni antecedenti.

Poi confrontiamo data di arrivo e data di partenza per assicurarci che la data di partenza sia lo stesso giorno o successiva alla data di arrivo.

Continuiamo verificando che il numero degli ospiti e delle notti sia almeno 1, poi controlliamo che sia stata inserita una camera e che sia presente il prezzo.

Alla fine andiamo a creare l’ID prendendo la data di arrivo ed aggiungendo nome e cognome, in modo da ottenere un ID Del tipo:

  • Data Arrivo: 23/04/2021
  • Nome: Mario
  • Cognome: Rossi
  • ID: 20210424MarioRossi