private void buttonComando_Click(object sender, RoutedEventArgs e)
        {
            checkdatecorreto = false;

            //controllo selezione clienti
            if (cmbClienti.SelectedIndex == -1)
            {
                MessageBox.Show("selezionare un cliente");
                return;
            }

            MasterFile mf = MasterFile.Create();
            Utilities  u  = new Utilities();

            int IDCliente = Convert.ToInt32(htClienti[cmbClienti.SelectedIndex].ToString());

            IDPianificazioniVerifica = App.MasterFile_NewID;

            try
            {
                IDPianificazioniVerifica = Convert.ToInt32(htDate[cmbData.SelectedIndex].ToString());
            }
            catch (Exception ex)
            {
                cBusinessObjects.logger.Error(ex, "wSchedaPianificazioneVerifica.buttonComando_Click1 exception");
                string log = ex.Message;
            }

            if (TipologiaAttivita == App.TipoAttivitaScheda.Delete && IDPianificazioniVerifica == -1)
            {
                MessageBox.Show("selezionare una sessione");
                return;
            }

            App.TipoAttivitaScheda oldTipo = TipologiaAttivita;
            if (TipologiaAttivita == App.TipoAttivitaScheda.New)
            {
                stackPanel1.IsEnabled = false;
                gridButtons.IsEnabled = false;
                loading.Visibility    = Visibility;
                Application.Current.Dispatcher.Invoke(DispatcherPriority.Background, new Action(delegate { }));
                //cBusinessObjects.show_workinprogress("Prima creazione dell'albero in corso...");
            }

            switch (TipologiaAttivita)
            {
            //Nuovo e salva
            case App.TipoAttivitaScheda.New:
            case App.TipoAttivitaScheda.Edit:
                //convalida dati
                //Campi Obbligatorio
                if (!u.ConvalidaDatiInterfaccia(dtpDataInizio, "Data Inizio periodo mancante."))
                {
                    cBusinessObjects.hide_workinprogress();
                    return;
                }


                if (!u.ConvalidaDatiInterfaccia(dtpDataFine, "Data Fine periodo mancante."))
                {
                    cBusinessObjects.hide_workinprogress();
                    return;
                }


                DateTime dtinizio = new DateTime();
                DateTime dtfine   = new DateTime();

                try
                {
                    dtinizio = Convert.ToDateTime(dtpDataInizio.SelectedDate.Value.ToShortDateString());
                }
                catch (Exception ex)
                {
                    cBusinessObjects.logger.Error(ex, "wSchedaPianificazioneVerifica.buttonComando_Click2 exception");
                    string log = ex.Message;
                    cBusinessObjects.hide_workinprogress();
                    MessageBox.Show("Attenzione data inizio inserita non valida");
                    return;
                }

                try
                {
                    dtfine = Convert.ToDateTime(dtpDataFine.SelectedDate.Value.ToShortDateString());
                }
                catch (Exception ex)
                {
                    cBusinessObjects.logger.Error(ex, "wSchedaPianificazioneVerifica.buttonComando_Click3 exception");
                    string log = ex.Message;
                    cBusinessObjects.hide_workinprogress();
                    MessageBox.Show("Attenzione data fine inserita non valida");
                    return;
                }

                if (dtinizio.CompareTo(dtfine) > 0)
                {
                    cBusinessObjects.hide_workinprogress();
                    MessageBox.Show("Attenzione data fine precedente a data inizio");
                    return;
                }

                //Controllo che questa data non sia già stata presa
                if (!mf.CheckDoppio_PianificazioniVerifica(IDPianificazioniVerifica, IDCliente, dtpDataInizio.SelectedDate.Value.ToShortDateString(), dtpDataFine.SelectedDate.Value.ToShortDateString()))
                {
                    cBusinessObjects.hide_workinprogress();
                    MessageBox.Show("Data già pianificata");
                    return;
                }

                Hashtable htSelected = mf.GetPianificazioniVerifica(IDPianificazioniVerifica.ToString());

                if (htSelected.Count != 0)
                {
                    string    firstdata   = "";
                    string    lastData    = "";
                    DataTable datiTestata = cBusinessObjects.GetData(100013, typeof(PianificazioneVerificheTestata), IDCliente, IDPianificazioniVerifica, 26);
                    foreach (DataRow item in datiTestata.Rows)
                    {
                        DateTime datehere = new DateTime();

                        try
                        {
                            datehere = Convert.ToDateTime(item["Data"].ToString());
                        }
                        catch (Exception ex)
                        {
                            cBusinessObjects.logger.Error(ex, "wSchedaPianificazioneVerifica.buttonComando_Click4 exception");
                            string log = ex.Message;
                            continue;
                        }

                        if (firstdata == "")
                        {
                            firstdata = item["Data"].ToString();
                        }

                        if (lastData == "")
                        {
                            lastData = item["Data"].ToString();
                        }

                        if (datehere.CompareTo(Convert.ToDateTime(firstdata)) < 0)
                        {
                            firstdata = item["Data"].ToString();
                        }

                        if (datehere.CompareTo(Convert.ToDateTime(lastData)) > 0)
                        {
                            lastData = item["Data"].ToString();
                        }
                    }

                    if (firstdata != "")
                    {
                        if (dtinizio.CompareTo(Convert.ToDateTime(firstdata)) > 0)
                        {
                            cBusinessObjects.hide_workinprogress();
                            MessageBox.Show("Attenzione data inizio successiva alla prima data pianificata.");
                            return;
                        }

                        if (dtfine.CompareTo(Convert.ToDateTime(lastData)) < 0)
                        {
                            cBusinessObjects.hide_workinprogress();
                            MessageBox.Show("Attenzione data fine precedente all ultima data pianificata");
                            return;
                        }
                    }
                }

                checkdatecorreto = true;

                //setto dati
                Hashtable ht = new Hashtable();
                ht.Add("Cliente", IDCliente);
                ht.Add("DataInizio", dtpDataInizio.SelectedDate.Value.ToShortDateString());
                ht.Add("DataFine", ((dtpDataFine.SelectedDate != null) ? dtpDataFine.SelectedDate.Value.ToShortDateString() : dtpDataInizio.SelectedDate.Value.ToShortDateString()));

                IDPianificazioniVerifica = mf.SetPianificazioniVerifica(ht, IDPianificazioniVerifica, IDCliente);

                RegistrazioneEffettuata = true;

                if (TipologiaAttivita == App.TipoAttivitaScheda.New)
                {
                    if (IDClienteImport != "-1")
                    {
                        cBusinessObjects.hide_workinprogress();
                        this.Close();
                    }

                    //Process wait - START
                    //ProgressWindow pw = new ProgressWindow();
                    cBusinessObjects.SessioneIsNew = true;
                    TipologiaAttivita = App.TipoAttivitaScheda.Edit;
                    mf.SetAnafraficaStato(Convert.ToInt32(IDCliente), App.TipoAnagraficaStato.Disponibile);

                    ConfiguraMaschera();

                    foreach (DictionaryEntry item in htClienti)
                    {
                        if (Convert.ToInt32(item.Value.ToString()) == IDCliente)
                        {
                            cmbClienti.SelectedIndex = Convert.ToInt32(item.Key.ToString());
                        }
                    }

                    functionCmbClientiChanged(cmbClienti);

                    cmbData.IsEnabled = true;

                    foreach (DictionaryEntry item in htDate)
                    {
                        if (Convert.ToInt32(item.Value.ToString()) == IDPianificazioniVerifica)
                        {
                            cmbData.SelectedIndex = Convert.ToInt32(item.Key.ToString());
                        }
                    }

                    functionCmbDataChanged(cmbData);
                    cBusinessObjects.AddSessione("PianificazioniVerifica", cmbData.SelectedValue.ToString(), IDPianificazioniVerifica, IDCliente);

                    //Process wait - STOP
                    //pw.Close();
                }
                _DatiCambiati = false;
                break;

            case App.TipoAttivitaScheda.Delete:
                //richiesta conferma
                if (MessageBoxResult.No == u.ConfermaCancellazione())
                {
                    return;
                }
                //cancellazione
                mf.DeletePianificazioniVerifica(IDPianificazioniVerifica, IDCliente.ToString());
                RegistrazioneEffettuata = true;
                base.Close();
                break;

            case App.TipoAttivitaScheda.Export:
                break;
            }

            //apro tree appena creato
            if (oldTipo == App.TipoAttivitaScheda.New)
            {
                //MessageBox.Show("apro tree appena creato");
                AccediVerifica_Click(IDPianificazioniVerifica.ToString(), false);
            }

            //chiudo maschera
            if (TipologiaAttivita != App.TipoAttivitaScheda.Edit)
            {
                base.Close();
            }
        }