/// <summary>
        /// Metodo per salvare la descrizione.
        /// </summary>
        /// <param name="obj"></param>
        private void OnSaveDescrizione(object obj)
        {
            AppDbContext        ctx     = new AppDbContext();
            QdcDbDataRepository repoQdc = new QdcDbDataRepository(ctx);

            // ricavo l'ultimo Qdc inserito.
            int i = repoQdc.Get().Where(q1 => q1.Id == q1.Id).Max(q1 => q1.Id);

            Qdcs = new ObservableCollection <Qdc>(repoQdc.Get().Where(q1 => q1.Id == i));
            Qdc q = Qdcs[0];

            if (!string.IsNullOrEmpty(Descrizione))
            {
                // eseguo l'update della descrizione.
                q.Descrizione = Descrizione;
                repoQdc.Update(q);

                SaveInFile(q);

                OnRequisitoList(obj);
            }
            else
            {
                MessageBox.Show("Inserisci una descrizione");
            }
        }
        /// <summary>
        /// Metodo per salvare i dati sul database e sul file Word.
        /// </summary>
        /// <param name="obj"></param>
        private void OnVisualizzaClick(object obj)
        {
            // controllo che siano stati scelti tutti i requisiti.
            if (controllo[0] == 1 && controllo[1] == 1 &&
                controllo[2] == 1 && controllo[3] == 1 &&
                controllo[4] == 1 && controllo[5] == 1 && controllo[6] == 1)
            {
                AppDbContext ctx = new AppDbContext();
                AssegnazioneDbDataRepository repoAss = new AssegnazioneDbDataRepository(ctx);

                // ricavo l'ultimo Qdc creato (quello al quale assegnare i Qdc).
                QdcDbDataRepository repoQdc = new QdcDbDataRepository(ctx);
                int ind = repoQdc.Get().Where(q1 => q1.Id == q1.Id).Max(q1 => q1.Id);
                Qdcs = new ObservableCollection <Qdc>(repoQdc.Get().Where(q1 => q1.Id == ind));
                Qdc q = Qdcs[0];

                // inserisco tutti i requisiti standard.
                for (int i = 0; i < codici.Length; i++)
                {
                    repoAss.Insert(new Assegnazione(codici[i], q, i + 1));
                }

                // inserisco i requisiti scelti dall'utente.
                repoAss.Insert(new Assegnazione(Cod14, q, Id14));
                repoAss.Insert(new Assegnazione(Cod15, q, Id15));
                repoAss.Insert(new Assegnazione(Cod16, q, Id16));
                repoAss.Insert(new Assegnazione(Cod17, q, Id17));
                repoAss.Insert(new Assegnazione(Cod18, q, Id18));
                repoAss.Insert(new Assegnazione(Cod19, q, Id19));
                repoAss.Insert(new Assegnazione(Cod20, q, Id20));

                // metodo per il salvataggio su Word.
                SaveInFile(q);

                // mi sposto in VisualizzaView.
                Messenger.Default.Send <BindableBase>(new VisualizzaViewModel());
            }
            else
            {
                MessageBox.Show("Inserisci tutti i requisiti");
            }
        }
        /// <summary>
        /// Metodo per visualizzare il file Qdc appena creato.
        /// </summary>
        /// <param name="obj"></param>
        private void OnVisualizzaClick(object obj)
        {
            // ricavo l'ultimo Qdc creato.
            int ind = repoQdc.Get().Where(q1 => q1.Id == q1.Id).Max(q1 => q1.Id);

            Qdcs = new ObservableCollection <Qdc>(repoQdc.Get().Where(q1 => q1.Id == ind));
            Qdc q = Qdcs[0];

            try
            {
                // apro il file.
                Application application = new Application();
                application.Visible = true;
                Document file = application.Documents.Open(q.PathSave);
                //application.Quit();
            }
            catch (System.Runtime.InteropServices.COMException e)
            {
                System.Windows.MessageBox.Show("Errore con l'apertura del file");
            }
        }
        /// <summary>
        /// Metodo per salvare i dati sul file Word.
        /// </summary>
        /// <param name="q">Qdc contenente il percorso del file</param>
        private void SaveInFile(Qdc q)
        {
            // percorsi dei file.
            var pathTemplate = q.PathTemplate;
            var pathSave     = q.PathSave;

            // pattern da modificare.
            var a14Key   = "<a14>";
            var a15Key   = "<a15>";
            var a16Key   = "<a16>";
            var a17Key   = "<a17>";
            var a18Key   = "<a18>";
            var a19Key   = "<a19>";
            var a20Key   = "<a20>";
            var req14Key = "<Req14>";
            var req15Key = "<Req15>";
            var req16Key = "<Req16>";
            var req17Key = "<Req17>";
            var req18Key = "<Req18>";
            var req19Key = "<Req19>";
            var req20Key = "<Req20>";

            try
            {
                object missing = Missing.Value;
                // crea l'oggetto che contiene l'istanza di Word
                Word.Application wordApp = new Word.Application();
                //  crea l'oggetto che contiene il documento
                Word.Document aDoc = null;
                // oggetto che definisce il file copiato (e da modificare)
                object filename = pathSave;
                // Se il file esiste
                if (File.Exists((string)filename))
                {
                    object readOnly  = false;
                    object isVisible = false;
                    wordApp.Visible = false;
                    // apertura del file copiato
                    aDoc = wordApp.Documents.Open(ref filename, ref missing,
                                                  ref readOnly, ref missing, ref missing, ref missing,
                                                  ref missing, ref missing, ref missing, ref missing,
                                                  ref missing, ref isVisible, ref missing, ref missing,
                                                  ref missing, ref missing);
                    aDoc.Activate();
                    // richiama la funzione FindAndReplace passandogli due parametri,
                    // il testo da sostituire e con cosa sostituirlo
                    this.FindAndReplace(wordApp, a14Key, Cod14);
                    this.FindAndReplace(wordApp, a15Key, Cod15);
                    this.FindAndReplace(wordApp, a16Key, Cod16);
                    this.FindAndReplace(wordApp, a17Key, Cod17);
                    this.FindAndReplace(wordApp, a18Key, Cod18);
                    this.FindAndReplace(wordApp, a19Key, Cod19);
                    this.FindAndReplace(wordApp, a20Key, Cod20);
                    this.FindAndReplace(wordApp, req14Key, Titolo14);
                    this.FindAndReplace(wordApp, req15Key, Titolo15);
                    this.FindAndReplace(wordApp, req16Key, Titolo16);
                    this.FindAndReplace(wordApp, req17Key, Titolo17);
                    this.FindAndReplace(wordApp, req18Key, Titolo18);
                    this.FindAndReplace(wordApp, req19Key, Titolo19);
                    this.FindAndReplace(wordApp, req20Key, Titolo20);

                    //  salva il file
                    aDoc.Save();
                    ////////////////// IMPORTANTE, CHIUDERE IL PROCESSO ///////////////////////////////////////////////
                    wordApp.Quit();
                }
                else
                {
                    MessageBox.Show("File does not exist.", "No File", MessageBoxButton.OK);
                }
            }
            catch (Exception)
            {
                MessageBox.Show("Errore, inserisci un percorso valido dei file", "Internal Error", MessageBoxButton.OK);
            }
        }
        /// <summary>
        /// Metodo per salvare i dati sul file Word.
        /// </summary>
        /// <param name="q">Qdc contenente il percorso del file</param>
        private void SaveInFile(Qdc q)
        {
            // percorsi dei file.
            var pathTemplate = q.PathTemplate;
            var pathSave     = q.PathSave;

            // pattern da modificare.
            var titoloKey           = "<Titolo>";
            var nomeFormatoreKey    = "<NomeFormatore>";
            var cognomeFormatoreKey = "<CognomeFormatore>";
            var nomePeritoKey       = "<NomePerito>";
            var cognomePeritoKey    = "<CognomePerito>";
            var nomePerito2Key      = "<NomePerito2>";
            var cognomePerito2Key   = "<CognomePerito2>";
            var mailFormatoreKey    = "<EmailFormatore>";
            var mailPeritoKey       = "<EmailPerito>";
            var dataInizioKey       = "<DataInizio>";
            var dataConsegnaKey     = "<DataConsegna>";
            var oraInizioKey        = "<OraInizio>";
            var oraFineKey          = "<OraFine>";
            var numeroOreKey        = "<NumeroOre>";
            var descrizioneKey      = "<Descrizione>";

            DateTime OraInizioAdj = DateTime.Parse(q.OraInizio.ToString());

            OraInizioAdj.ToString("HH:mm");
            DateTime OraFineAdj = DateTime.Parse(q.OraFine.ToString());

            OraFineAdj.ToString("HH:mm");

            try
            {
                // copia del file
                //File.Copy(pathTemplate, pathSave, true);
                // valori predefiniti per l'apertura del file
                object missing = Missing.Value;
                // crea l'oggetto che contiene l'istanza di Word
                Word.Application wordApp = new Word.Application();
                //  crea l'oggetto che contiene il documento
                Word.Document aDoc = null;
                // oggetto che definisce il file copiato (e da modificare)
                object filename = pathSave;
                // Se il file esiste
                if (File.Exists((string)filename))
                {
                    object readOnly  = false;
                    object isVisible = false;
                    wordApp.Visible = false;
                    //  apertura del file copiato
                    aDoc = wordApp.Documents.Open(ref filename, ref missing,
                                                  ref readOnly, ref missing, ref missing, ref missing,
                                                  ref missing, ref missing, ref missing, ref missing,
                                                  ref missing, ref isVisible, ref missing, ref missing,
                                                  ref missing, ref missing);
                    aDoc.Activate();
                    // richiama la funzione FindAndReplace passandogli due parametri,
                    // il testo da sostituire e con cosa sostituirlo
                    this.FindAndReplace(wordApp, titoloKey, q.Titolo);
                    this.FindAndReplace(wordApp, nomeFormatoreKey, q.NomeFormatore);
                    this.FindAndReplace(wordApp, cognomeFormatoreKey, q.CognomeFormatore);
                    this.FindAndReplace(wordApp, nomePeritoKey, q.NomePerito1);
                    this.FindAndReplace(wordApp, cognomePeritoKey, q.CognomePerito1);
                    this.FindAndReplace(wordApp, nomePerito2Key, q.NomePerito2);
                    this.FindAndReplace(wordApp, cognomePerito2Key, q.CognomePerito2);
                    this.FindAndReplace(wordApp, mailPeritoKey, q.MailPerito1);
                    this.FindAndReplace(wordApp, mailFormatoreKey, q.MailFormatore);
                    this.FindAndReplace(wordApp, dataInizioKey, q.DataInizio);
                    this.FindAndReplace(wordApp, dataConsegnaKey, q.DataConsegna);
                    this.FindAndReplace(wordApp, oraInizioKey, OraInizioAdj);
                    this.FindAndReplace(wordApp, oraFineKey, OraFineAdj);
                    this.FindAndReplace(wordApp, numeroOreKey, q.NumeroOre);
                    this.FindAndReplace(wordApp, descrizioneKey, q.Descrizione);

                    //  salva il file
                    aDoc.Save();
                    ////////////////// IMPORTANTE, CHIUDERE IL PROCESSO ///////////////////////////////////////////////
                    wordApp.Quit();
                }
                else
                {
                    MessageBox.Show("File does not exist.", "No File", MessageBoxButton.OK);
                }
            }
            catch (Exception)
            {
                MessageBox.Show("Errore, inserisci un percorso valido dei file", "Internal Error", MessageBoxButton.OK);
            }
        }