Creare un gestionale per strutture ricettive in C# – 24 – Modifica costi e sconti: La registrazione degli ospiti è quasi completata, in questo tutorial andiamo a modificare il caricamento di costi extra e sconti.
Creare un gestionale per strutture ricettive in C# – 24 – Modifica costi e sconti
Il codice che avevamo creato nei precedenti tutorial ci ha permesso di reimportare i dati dalla DataGridView ai campi per la modifica.
Erano rimasti fuori da questa azione però Costi Extra e Sconti.
Questo perchè per questi 2 campi non è sufficiente copiare ed incollare il contenuto, ma vanno elaborati.
Infatti per inserire i dati avevamo unito tutte le voci degli sconti e dei costi in un unico campo separato da un punto e virgola.
In questo modo però quando reimportiamo tutto non è possibile separare automaticamente le voci.
Abbiamo quindi la necessità di creare una funzione che separi le varie voci e che vada poi ad assegnare nuovamente i relativi valori di prezzo e sconto.
Query di Aggiornamento Database
La prima modifica di questo tutorial è la creazione della query che va a modificare i valori presenti nel database, per farlo abbiamo scritto:
sqlQuery = "UPDATE [Prenotazioni] SET [Id] = '" + IdPrenotazione + "', [Nome] = '" + CorreggiApici(txtNome.Text) + "', [Cognome] = '"
+ CorreggiApici(txtCognome.Text) + "', [Indirizzo] = '" + CorreggiApici(txtIndirizzo.Text) + "', [Citta] = '"
+ CorreggiApici(txtCitta.Text) + "', [CAP] = '" + txtCap.Text + "', [Nazione] = '" + CorreggiApici(cmbNazione.Text)
+ "', [DataNascita] = '" + ConvertiData(dateNascita.Value.Year, dateNascita.Value.Month, dateNascita.Value.Day)
+ "', [Nazionalita] = '" + CorreggiApici(cmbNazionalita.Text) + "', [Telefono] = '" + txtTelefono.Text
+ "', [Email] = '" + txtEmail.Text + "', [TipoDocumento] = '" + CorreggiApici(cmbTipoDocumento.Text)
+ "', [CodiceDocumento] = '" + txtCodiceDocumento.Text + "', [Documento] = '" + txtCaricaDocumento.Text
+ "', [DataArrivo] = '" + ConvertiData(dateArrivo.Value.Year, dateArrivo.Value.Month, dateArrivo.Value.Day)
+ "', [DataPartenza] = '" + ConvertiData(datePartenza.Value.Year, datePartenza.Value.Month, datePartenza.Value.Day)
+ "', [NumeroNotti] = '" + numNotti.Value + "', [NumeroOspiti] = '" + "', [Camera] = '" + CorreggiApici(cmbCamera.Text)
+ "', [Note] = '" + txtNote.Text + "', [CostiExtra] = '" + CorreggiApici(StringaCostiExtra) + "', [Sconti]"
+ CorreggiApici(StringaScontiExtra) + "', [TasseSoggiorno] = '" + SwitchTasseSoggiorno + "', [MotivoEsenzione] = '"
+ CorreggiApici(txtMotivoEsenzione.Text) + "', [MetodoPagamento] = '" + cmbMetodoPagamento.Text
+ "', [Totale] = '" + ConvertiPrezzoFinale(txtTotale) + "WHERE [Id] = '" + IdPrenotazione + "';";
Questa query va a prendere l’id dalla variabile creata e lo utilizza per modificare i campi nel database.
Modifica della visualizzazione di Sconti e Costi Extra
Per permettere il riconoscimento univoco di uno sconto o di un costo, abbiamo la necessità di accedere al suo Id.
Per questo motivo andremo ad aggiungere l’id al testo visualizzato.
Per farlo modifichiamo la stringa associata al tasto Aggiunti degli sconti e degli extra da:
while (DatiTabellaScontiExtra.Read())
{
cmbExtra.Items.Add(new ExtraScontiItem(DatiTabellaScontiExtra.GetString(1), DatiTabellaScontiExtra.GetDecimal(2), DatiTabellaScontiExtra.GetInt32(3)));
}
a:
while (DatiTabellaScontiExtra.Read())
{
cmbExtra.Items.Add(new ExtraScontiItem(DatiTabellaScontiExtra.GetInt32(0) + ":" + DatiTabellaScontiExtra.GetString(1), DatiTabellaScontiExtra.GetDecimal(2), DatiTabellaScontiExtra.GetInt32(3)));
}
Funzione di modifica della stringa costi e sconti
La seguente funzione analizza la stringa con l’elenco d icosti e sconti e la scompone per l’utilizzo.
Il primo passaggio è quello di scomporre la stringa in diversi elementi, e per farlo creiamo un array.
Per ogni elemento inserito nell’array andiamo a verificare se è presente il simbolo : se fosse presente controlliamo che prima ci siano dei numeri.
In questo modo possiamo sapere se quel campo fa parte del nuovo metodo di inserimento o del vecchio.
Andiamo poi a confrontare il testo dell’array con quello della combobox per trovare il valore corrispondente ed inserirlo quindi nella listview.
void ModificaCostiSconti(string TipoExtra, string ElencoExtra)
{
string[] ArrayExtra = ElencoExtra.Split(';');
for (int a = 0; a < ArrayExtra.Length; a++)
{
if (ArrayExtra[a].Contains(":"))
{
string CaratteriIniziali = ArrayExtra[a].Remove(ArrayExtra[a].IndexOf(":"));
bool IndiceNumerico = int.TryParse(CaratteriIniziali, out _);
if (IndiceNumerico == true)
{
//NUOVO METODO
CaricaDatabaseCostiSconti();
for (int b = 0; b < cmbExtra.Items.Count; b++)
{
if (ArrayExtra[a] == cmbExtra.GetItemText(cmbExtra.SelectedIndex))
{
var ExtraSelezionato = (ExtraScontiItem)cmbExtra.SelectedItem;
if (TipoExtra == "costo")
{
lstCosti.Items.Add(new ExtraScontiItem(ExtraSelezionato.ToString(), ExtraSelezionato.PrezzoExtra(), ExtraSelezionato.TipologiaExtra()));
}
else
{
lstSconti.Items.Add(new ExtraScontiItem(ExtraSelezionato.ToString(), ExtraSelezionato.PrezzoExtra(), ExtraSelezionato.TipologiaExtra()));
}
}
}
}
else
{
// VECCHIO METODO
CaricaDatabaseCostiSconti();
for (int b = 0; b < cmbExtra.Items.Count; b++)
{
string ElementoDaControllare = cmbExtra.GetItemText(cmbExtra.SelectedIndex);
if (ArrayExtra[a] == ElementoDaControllare.Substring(ElementoDaControllare.IndexOf(":")))
{
var ExtraSelezionato = (ExtraScontiItem)cmbExtra.SelectedItem;
if (TipoExtra == "costo")
{
lstCosti.Items.Add(new ExtraScontiItem(ExtraSelezionato.ToString(), ExtraSelezionato.PrezzoExtra(), ExtraSelezionato.TipologiaExtra()));
}
else
{
lstSconti.Items.Add(new ExtraScontiItem(ExtraSelezionato.ToString(), ExtraSelezionato.PrezzoExtra(), ExtraSelezionato.TipologiaExtra()));
}
}
}
}
}
}
}