private void btnGenera_Click(object sender, RoutedEventArgs e)
        {
            
            if (datePickerFrom.SelectedDate > datePickerTo.SelectedDate)
            {
                MessageBox.Show("La data iniziale deve precedere quella finale", "Errore nella selezione del periodo", MessageBoxButton.OK, MessageBoxImage.Error);
                return;
            }

            //controlla se ci sono soggiorni senza schedine associate nel periodo selezionato
            var slist = dag.cercaSoggiorniNonCheckedInForIstat((DateTime)datePickerFrom.SelectedDate, (DateTime)datePickerTo.SelectedDate);
            if (slist.Count > 0)
            {
                var result = MessageBox.Show("Ci sono soggiorni senza schede di notifica nel periodo selezionato." + Environment.NewLine + "Li vuoi modificare prima di generare il file?",
                    "Schede di notifica mancanti", MessageBoxButton.YesNo, MessageBoxImage.Question);

                if (result == MessageBoxResult.Yes)
                {
                    soggiorniNonCheckedIn = new ObservableCollection<Soggiorno>(slist);
                    dataGridSoggiorni.DataContext = soggiorniNonCheckedIn;
                    return;
                }
            }

            //raccolgo i dati sulle provenienze dei clienti con scheda di notifica associata ad un soggiorno 
            //dentro il range selezionato 
            //(solo soggiorni con IsCheckedIn = true...non servirebbe ma per sicurezza lo faccio lo stesso)
            List<SchedaNotifica> schedeNotif = dag.cercaSchedeNotificaPerIstat((DateTime)datePickerFrom.SelectedDate, (DateTime)datePickerTo.SelectedDate);

            if (schedeNotif.Count == 0)
            {
                MessageBox.Show("Non ci sono schede di notifica registrate nel periodo selezionato", "Nessuna scheda di notifica presente", MessageBoxButton.OK, MessageBoxImage.Information);
                return;
            }

            //generazione file per ricestat ISTAT
            pfg = new PresenzeFileGenerator(schedeNotif);

            var savefiledlg = new SaveFileDialog();
            savefiledlg.DefaultExt = "txt";
            savefiledlg.FileName = "presenze_" +
                ((DateTime)datePickerFrom.SelectedDate).ToString("dd-MM-yyyy") + "_" +
                ((DateTime)datePickerTo.SelectedDate).ToString("dd-MM-yyyy");
            savefiledlg.Filter = "File di testo (.txt)|*.txt";

            Nullable<bool> dlgresult = savefiledlg.ShowDialog();
            if (dlgresult == true)
            {
                //faccio i calcoli solo se spingo salva nella finestra di dialogo
                System.IO.File.WriteAllText(savefiledlg.FileName, 
                    pfg.getTxtFileText((DateTime)datePickerFrom.SelectedDate,
                                        (DateTime)datePickerTo.SelectedDate)
                );
                this.DialogResult = true;
            }
        }
        private void btnGenera_Click(object sender, RoutedEventArgs e)
        {
            int anno = 0;
            try
            {
                anno = int.Parse(txtboxAnno.Text);
            }
            catch (FormatException ex)
            {
                MessageBox.Show("L'anno dev'essere un numero intero", "Formato anno errato", MessageBoxButton.OK, MessageBoxImage.Error);
                return;
            }

            int mese = mesi[cbxMese.Text];
            DateTime arrivoDa = new DateTime(anno, mese, 1);
            DateTime arrivoA = arrivoDa.AddMonths(1).AddDays(-1);
            //controlla se ci sono soggiorni senza schedine associate nel periodo selezionato
            var slist = dag.cercaSoggiorniNonCheckedInForIstat(arrivoDa, arrivoA);
            if (slist.Count > 0)
            {
                var result = MessageBox.Show("Ci sono soggiorni senza schede di notifica nel mese selezionato." + Environment.NewLine + "Li vuoi modificare prima di generare il file?",
                    "Schede di notifica mancanti", MessageBoxButton.YesNo, MessageBoxImage.Question);

                if (result == MessageBoxResult.Yes)
                {
                    soggiorniNonCheckedIn = new ObservableCollection<Soggiorno>(slist);
                    dataGridSoggiorni.DataContext = soggiorniNonCheckedIn;
                    return;
                }
            }

            //raccolgo i dati sulle provenienze dei clienti con scheda di notifica associata ad un soggiorno 
            //dentro il range selezionato 
            //(solo soggiorni con IsCheckedIn = true...non servirebbe ma per sicurezza lo faccio lo stesso)
            List<SchedaNotifica> schedeNotif = dag.cercaSchedeNotificaPerIstat(arrivoDa, arrivoA);

            if (schedeNotif.Count == 0)
            {
                MessageBox.Show("Non ci sono schede di notifica registrate nel periodo selezionato", "Nessuna scheda di notifica presente", MessageBoxButton.OK, MessageBoxImage.Information);
                return;
            }

            //generazione file per ricestat ISTAT
            pfg = new PresenzeFileGenerator(mese, anno, schedeNotif);
            
            var savefiledlg = new SaveFileDialog();
            savefiledlg.DefaultExt = "xml";
            savefiledlg.FileName = "presenze_" + cbxMese.Text + "_" + anno.ToString();
            savefiledlg.Filter = "File XML (.xml)|*.xml";

            Nullable<bool> dlgresult = savefiledlg.ShowDialog();
            if (dlgresult == true)
            {
                //faccio i calcoli solo se spingo salva nella finestra di dialogo
                System.IO.File.WriteAllText(savefiledlg.FileName, pfg.getXmlFileText());
                this.DialogResult = true;
            }
        }