Example #1
0
        /// <summary>
        /// Funzione per la lettura dei dati relativi ad un documenti di emergenza da importare
        /// </summary>
        /// <param name="dataReader">L'oggetto da cui leggere i dati</param>
        /// <param name="protoType">Il tipo di protocollo di emergenza da importare (I, P, A)</param>
        /// <param name="versionNumber">Numero di versione dell'importer da utilizzare.
        ///     - La versione 1 non contempla i protocolli interni ed i codici per mittenti e destinatari
        ///     - La versione 2 contempla i protocolli interni ed i codici per mittenti e destinatari</param>
        /// <returns>La lista dei dati relativi ai documenti da creare</returns>
        private static List <DocumentRowData> ReadDocumentData(OleDbDataReader dataReader, string protoType, int versionNumber)
        {
            // L'oggetto da restituire
            List <DocumentRowData> toReturn;

            // Oggetto in cui contenere temporaneamente i dati
            RDEDocumentRowData temporaryData;

            // La data di protocollazione
            DateTime protoDate;

            // Creazione della lista da restituire
            toReturn = new List <DocumentRowData>();

            // Estrazione dei dati relativi ai protocollo di emergenza da importare
            while (dataReader.Read())
            {
                // Creazione oggetto temporaneo
                temporaryData = new RDEDocumentRowData();

                // Creazione array codici modelli trasmissione
                temporaryData.TransmissionModelCode = new string[0];

                // Lettura codice amministrazione
                temporaryData.AdminCode = dataReader["Codice Amministrazione"].ToString();

                // Parsing della data di protocollazione
                if (!String.IsNullOrEmpty(dataReader["Data protocollo emergenza"].ToString()))
                {
                    protoDate = DateTime.Parse(dataReader["Data protocollo emergenza"].ToString());
                    temporaryData.EmergencyProtocolDate = protoDate.ToString("dd/MM/yyyy");
                }

                // Parsing dell'ora di protocollazione
                if (!String.IsNullOrEmpty(dataReader["Ora protocollo emergenza"].ToString()))
                {
                    protoDate = ImportUtils.ReadDate(dataReader["Ora protocollo emergenza"].ToString());
                    temporaryData.EmergencyProtocolTime = protoDate.ToString("HH.mm.ss");
                }

                // Lettura del numero del protocollo di emergenza
                temporaryData.OrdinalNumber = dataReader["Numero protocollo emergenza"].ToString();

                // Lettura della segnatura del protocollo di emergenza
                temporaryData.EmergencyProtocolSignature = dataReader["Stringa protocollo emergenza"].ToString();

                // Lettura dell'oggetto del protocollo
                temporaryData.Obj = dataReader["Oggetto"].ToString();

                // Lettura della data del protocollo mittente
                temporaryData.SenderProtocolDate = dataReader["Data protocollo mittente"].ToString();

                // Lettura del numero protocollo mittente
                temporaryData.SenderProtocolNumber = dataReader["Numero protocollo mittente"].ToString();

                // Lettura della data di arrivo se è valorizzato almeno il campo Data arrivo
                if (!String.IsNullOrEmpty(dataReader["Data arrivo"].ToString()))
                {
                    temporaryData.ArrivalDate = DateTime.Parse(dataReader["Data arrivo"].ToString()).ToString("dd/MM/yyyy");

                    // parserizzo l'orario prima di utilizzarlo per verificare la formattazione e sollevare un messaggio di cortesia
                    if (!String.IsNullOrEmpty(dataReader["Ora arrivo"].ToString()))
                    {
                        //DateTime time;
                        //DateTime.TryParse(dataReader["Ora arrivo"].ToString(), out time);

                        TimeSpan time;
                        TimeSpan.TryParse(dataReader["Ora arrivo"].ToString().Replace(".", ":"), out time);

                        if (time != null)
                        {
                            temporaryData.ArrivalTime = time.ToString();
                        }
                    }
                }

                // Lettura del codice di classifica
                if (!String.IsNullOrEmpty(dataReader["Codice classifica"].ToString()))
                {
                    temporaryData.ProjectCodes = dataReader["Codice classifica"].ToString().Split(';');
                }

                // Lettura del codice RF
                temporaryData.RFCode = dataReader["Codice RF"].ToString();

                // Lettura del codice del registro
                temporaryData.RegCode = dataReader["Codice Registro"].ToString();

                // A seconda del tipo di protocollo bisogna trattare in modo differente
                // i campi relativi ai corrispondenti
                switch (protoType.ToUpper())
                {
                case "A":       // Arrivo
                    // In questo caso i campi da prendere in considerazione sono Mittente e
                    // Cod_Mittente
                    if (!String.IsNullOrEmpty(dataReader["Mittente"].ToString()))
                    {
                        temporaryData.CorrDesc = new List <string>(
                            dataReader["Mittente"].ToString().Trim().Split(';'));
                    }

                    if (versionNumber != 1 &&
                        !String.IsNullOrEmpty(dataReader["Cod_Mittente"].ToString()))
                    {
                        temporaryData.CorrCode = new List <string>(
                            dataReader["Cod_Mittente"].ToString().Trim().Split(';'));
                    }

                    break;

                case "P":       // Partenza
                case "I":       // Interno
                    // In questi casi bisogna considerare i campi Mittente, Cod_Mittente,
                    // Destinatari, Cod_Destinari, Destinatari_CC e Cod_Destinatari_CC
                    if (!String.IsNullOrEmpty(dataReader["Mittente"].ToString()) ||
                        !String.IsNullOrEmpty(dataReader["Destinatari"].ToString()) ||
                        !String.IsNullOrEmpty(dataReader["Destinatari_CC"].ToString()))
                    {
                        temporaryData.CorrDesc = new List <string>();
                    }

                    if (versionNumber != 1 && (
                            !String.IsNullOrEmpty(dataReader["Cod_Mittente"].ToString()) ||
                            !String.IsNullOrEmpty(dataReader["Cod_Destinatari"].ToString()) ||
                            !String.IsNullOrEmpty(dataReader["Cod_Destinatari_CC"].ToString())))
                    {
                        temporaryData.CorrCode = new List <string>();
                    }

                    if (!String.IsNullOrEmpty(dataReader["Mittente"].ToString()))
                    {
                        foreach (string mitt in dataReader["Mittente"].ToString().Trim().Split(';'))
                        {
                            temporaryData.CorrDesc.Add(mitt.Trim() + "#M#");
                        }
                    }

                    if (versionNumber != 1 &&
                        !String.IsNullOrEmpty(dataReader["Cod_Mittente"].ToString()))
                    {
                        foreach (string mitt in dataReader["Cod_Mittente"].ToString().Trim().Split(';'))
                        {
                            temporaryData.CorrCode.Add(mitt.Trim() + "#M#");
                        }
                    }

                    if (!String.IsNullOrEmpty(dataReader["Destinatari"].ToString()))
                    {
                        foreach (string mitt in dataReader["Destinatari"].ToString().Trim().Split(';'))
                        {
                            temporaryData.CorrDesc.Add(mitt.Trim() + "#D#");
                        }
                    }

                    if (versionNumber != 1 &&
                        !String.IsNullOrEmpty(dataReader["Cod_Destinatari"].ToString()))
                    {
                        foreach (string mitt in dataReader["Cod_Destinatari"].ToString().Trim().Split(';'))
                        {
                            temporaryData.CorrCode.Add(mitt.Trim() + "#D#");
                        }
                    }

                    if (!String.IsNullOrEmpty(dataReader["Destinatari_CC"].ToString()))
                    {
                        foreach (string mitt in dataReader["Destinatari_CC"].ToString().Trim().Split(';'))
                        {
                            temporaryData.CorrDesc.Add(mitt.Trim() + "#CC#");
                        }
                    }

                    if (versionNumber != 1 &&
                        !String.IsNullOrEmpty(dataReader["Cod_Destinatari_CC"].ToString()))
                    {
                        foreach (string mitt in dataReader["Cod_Destinatari_CC"].ToString().Trim().Split(';'))
                        {
                            temporaryData.CorrCode.Add(mitt.Trim() + "#CC#");
                        }
                    }

                    break;
                }

                // Aggiunta dell'oggetto alla lista degli oggetti da restituire
                toReturn.Add(temporaryData);
            }

            // Restituzione risultato dell'elaborazione
            return(toReturn);
        }
Example #2
0
        /// <summary>
        /// Funzione per la validazione dei dati letti da un foglio excel
        /// </summary>
        /// <param name="rowData">L'oggetto con i dati da validare</param>
        /// <param name="isProfilationRequired">True se è obbligatoria la profilazione del documento</param>
        /// <param name="isRapidClassificationRequired">True se è richiesta la classificazione rapida</param>
        /// <param name="validationProblems">La lista dei problemi rilevati in fase di verifica dati</param>
        /// <returns>True se la validazione passa</returns>
        protected override bool CheckDataValidity(DocumentRowData rowData, bool isProfilationRequired, bool isRapidClassificationRequired, out List <string> validationProblems)
        {
            #region Dichiarazione variabili

            // Il risultato della validazione
            bool validationResult = true;

            // L'oggetto a cui richiedere le informaizoni sull'amministrazione
            DocsPaDB.Query_DocsPAWS.Amministrazione administrationManager = null;

            // Valore booleano che indica se è obbligatorio specificare l'RF
            bool rfRequired = false;

            // L'id dell'amministrazione
            string administrationSyd = String.Empty;

            // Valore booleano utilizzato per verificare se solo uno dei due campi
            // Codice Corrispondenti e Corrispondenti è valorizzata
            bool corrOk = true;

            // Valore utilizzato per indicare se è stato trovato un destinatario
            // principale
            bool primCorrFound;

            // Variabile utilizzata per contare il numero di mittenti specificati
            int sendersNum;

            #endregion

            // Creazione della lista dei problemi
            validationProblems = new List <string>();

            // L'ordinale è obbligatorio
            if (String.IsNullOrEmpty(rowData.OrdinalNumber))
            {
                validationResult = false;

                if (rowData is RDEDocumentRowData)
                {
                    validationProblems.Add("Campo 'Numero protocollo emergenza.");
                }
                else
                {
                    validationProblems.Add("Campo 'Ordinale' obbligatorio.");
                }
            }

            // Il codice amministrazione è obbligatorio
            if (String.IsNullOrEmpty(rowData.AdminCode))
            {
                validationResult = false;
                validationProblems.Add("Campo 'Codice amministrazione' obbligatorio.");
            }

            // Il codice registro è obbligatorio
            if (String.IsNullOrEmpty(rowData.RegCode))
            {
                validationResult = false;
                validationProblems.Add("Campo 'Codice Registro' obbligatorio.");
            }

            // Il codice RF deve essere obbligatorio se richiesto dalla segnatura
            // Creazione dell'oggetto a cui richiedere le informazioni sull'amministrazione
            administrationManager = new DocsPaDB.Query_DocsPAWS.Amministrazione();

            try
            {
                administrationSyd = ImportUtils.GetAdministrationId(rowData.AdminCode);
            }
            catch (Exception e)
            {
                validationResult = false;
                validationProblems.Add(String.Format(
                                           "Impossibile recuperare le informazioni sull'amministrazione {0}",
                                           rowData.AdminCode));
            }

            // Se non è stato possibile ricavare l'id dell'amministrazione, problema
            if (!String.IsNullOrEmpty(administrationSyd))
            {
                // Si procede con la verifica
                // Verifica dell'obbligatorietà della specifica dell'RF
                rfRequired = administrationManager.AmmGetListAmministrazioni().Where(
                    e => e.IDAmm == administrationSyd).FirstOrDefault().
                             Segnatura.Contains("COD_RF_PROT");

                // Se l'RF è richiesto ma non è specificato, la validazione non passa
                if (rfRequired && String.IsNullOrEmpty(rowData.RFCode))
                {
                    validationResult = false;
                    validationProblems.Add("Campo 'Codice RF' obbligatorio in quanto richiesto dalla segnatura.");
                }
            }

            // Se entrambi i campi 'Oggetto' e 'Codice Oggetto' non
            // sono valorizzati, la validazione non passa
            if (String.IsNullOrEmpty(rowData.ObjCode) &&
                String.IsNullOrEmpty(rowData.Obj))
            {
                validationResult = false;

                if (rowData is RDEDocumentRowData)
                {
                    validationProblems.Add("Il campo 'Oggetto' è obbligatorio.");
                }
                else
                {
                    validationProblems.Add("Non risultano valorizzati nè il campo 'Codice Oggetto' nè il campo 'Oggetto'.  Valorizzare uno dei due.");
                }
            }

            // Se entrambi i campi 'Oggetto' e 'Codice oggetto' sono valorizzati, errore
            if (!String.IsNullOrEmpty(rowData.ObjCode) &&
                !String.IsNullOrEmpty(rowData.Obj))
            {
                validationResult = false;
                validationProblems.Add("Risultano valorizzati entrambi i campi 'Codice Oggetto' e 'Oggetto'. Valorizzare solamente uno.");
            }

            primCorrFound = false;
            sendersNum    = 0;
            // Se il campo 'Codice Corrispondenti' è valorizzato ma non contiene #D#,
            // significa che non è stato specificato un destinatario principale e di
            // conseguenza la validazione non passa.
            // Se contine più di un #M#, significa che sono stati specificati più mittenti
            // e di conseguenza la validazione non passa.
            // Se il campo 'Codice Corrispondenti' è valorizzato...
            if (rowData.CorrCode != null)
            {
                // Per ogni codice corrispondente contenuto nella lista...
                foreach (string corrCode in rowData.CorrCode)
                {
                    // ...se contiene #M#, si incrementa il contatore di mittenti
                    if (corrCode.ToUpper().Contains("#M#"))
                    {
                        sendersNum++;
                    }

                    // ...se contiene #D#, significa che esiste almeno un corrispondente
                    // principale
                    if (corrCode.ToUpper().Contains("#D#") &&
                        corrCode.Trim().Length > 3)
                    {
                        primCorrFound = true;
                    }
                }
            }

            // Se la validazione dei campi corrispondenti è passata, si procede con
            // la verifica della correttezza dei dati in essi contenuti
            if (corrOk)
            {
                // Se non sono stati individuati mittenti, errore
                if (sendersNum == 0)
                {
                    validationResult = false;
                    validationProblems.Add(
                        "Il campo 'Codice Corrispondenti' non contiene codici per i mittenti. Specificarne uno.");
                }

                // Se sono stati trovati più mittenti, la validazione non passa
                if (sendersNum > 1)
                {
                    validationResult = false;
                    validationProblems.Add(String.Format(
                                               "Il campo 'Codice Corrispondenti' contiene {0} mittenti. Specificarne solo uno.",
                                               sendersNum));
                }

                // Se non è stato individuato alcun destinatario primario, errore
                if (!primCorrFound)
                {
                    validationResult = false;
                    validationProblems.Add("Nessun destinatario primario specificato nel campo 'Codice Corrispondenti'.");
                }
            }

            // Se il campo 'Codice Fascicolo' del foglio excel è valorizzato, ed
            // è valorizzata anche la profilazione del fascicolo, errore in quanto non è possibile
            // valorizzarli entrambi
            if (rowData.ProjectCodes != null && rowData.ProjectCodes.Length > 0 &&
                (!String.IsNullOrEmpty(rowData.ProjectDescription) ||
                 !String.IsNullOrEmpty(rowData.FolderDescrition) ||
                 !String.IsNullOrEmpty(rowData.NodeCode) ||
                 !String.IsNullOrEmpty(rowData.ProjectTipology)))
            {
                validationResult = false;
                validationProblems.Add("Risultano valorizzati sia i campi 'Codice Fascicolo' che i campi riguardanti la specifica del fascicolo. Non è possibile specificarli entambi.");
            }

            // Se è richiesta profilazione del documento obbligatoria
            // ma non è valorizzato il campo 'Tipologia Documento', la validazione
            // non deve passare
            if (isProfilationRequired && String.IsNullOrEmpty(rowData.DocumentTipology) && !(rowData is RDEDocumentRowData))
            {
                validationResult = false;
                validationProblems.Add("La profilazione del documento è obbligatoria ma non risulta valorizzato il campo 'Tipologia Documento'");
            }

            // Se è richiesta fascicolazione rapida obbligatoria ma non sono specificati
            // dati in 'Codice Fascicolo' o nei campi dedicati al fascicolo
            if (isRapidClassificationRequired &&
                rowData.ProjectCodes == null &&
                String.IsNullOrEmpty(rowData.ProjectDescription) &&
                String.IsNullOrEmpty(rowData.FolderDescrition) &&
                String.IsNullOrEmpty(rowData.NodeCode) &&
                String.IsNullOrEmpty(rowData.ProjectTipology))
            {
                validationResult = false;

                if (rowData is RDEDocumentRowData)
                {
                    validationProblems.Add("Campo 'Codice Classifica' obbligatorio.");
                }
                else
                {
                    validationProblems.Add("La classificazione è obbligatoria ma non risultano valorizzati nè il campo 'Codice Fascicolo' nè i campi dedicati alla classificazione.");
                }
            }

            // Se il campo Stringa protocollo emergenza non è valorizzato, non si può procedere
            // (Solo nel caso di RDE)
            if (rowData is RDEDocumentRowData && String.IsNullOrEmpty("Stringa protocollo emergenza"))
            {
                validationResult = false;
                validationProblems.Add("Campo 'Stringa protocollo emergenza' obbligatorio.");
            }

            // Se il campo Data protocollo emergenza non è valorizzato, non si può procedere
            // (Solo nel caso di RDE)
            if (rowData is RDEDocumentRowData &&
                String.IsNullOrEmpty(((RDEDocumentRowData)rowData).EmergencyProtocolDate))
            {
                validationResult = false;
                validationProblems.Add("Campo 'Data protocollo emergenza' obbligatorio.");
            }

            // Se il campo Data protocollo emergenza non è valorizzato, non si può procedere
            // (Solo nel caso di RDE)
            if (rowData is RDEDocumentRowData &&
                String.IsNullOrEmpty(((RDEDocumentRowData)rowData).EmergencyProtocolTime))
            {
                validationResult = false;
                validationProblems.Add("Campo 'Ora protocollo emergenza' obbligatorio.");
            }

            if (rowData is RDEDocumentRowData)
            {
                RDEDocumentRowData converted = rowData as RDEDocumentRowData;

                // Il campo Data protocollo emergenza deve essere minore della data di protocollazione, che
                // si suppone uguale alla data odierna. visto che il protocolla in giallo è stata dismessa
                // nel senso che non la usa più nessuno.
                if (!String.IsNullOrEmpty(converted.EmergencyProtocolDate) &&
                    !String.IsNullOrEmpty(converted.EmergencyProtocolTime))
                {
                    //l'excel è formattato un modo tale che la data e l'ora possono solo arrivare nel formato valido.
                    string   dataEmerg = converted.EmergencyProtocolDate + " " + converted.EmergencyProtocolTime;
                    DateTime dataEmergOut;

                    if (isDate(dataEmerg))
                    {
                        dataEmergOut = DateTime.ParseExact(dataEmerg, formati, ci.DateTimeFormat, DateTimeStyles.AllowWhiteSpaces);
                        if (dataEmergOut > System.DateTime.Now)
                        {
                            validationResult = false;
                            validationProblems.Add("Campo 'Data protocollo emergenza' deve essere minore della data di protocollazione.");
                        }
                    }
                    else
                    {
                        validationResult = false;
                        validationProblems.Add("Il campo data o il campo ora emergenza non contiengo un formato valido.");
                    }
                }
            }

            // Retituzione del risultato di validazione
            return(validationResult);
        }
Example #3
0
        /// <summary>
        /// Funzione per la vadazione dei dati contenuti nell'oggetto RowData
        /// </summary>
        /// <param name="rowData">L'oggetto con i dati da validare</param>
        /// <param name="isProfilationRequired">True se, per configurazione, è richiesta la profilazione obbligatoria</param>
        /// <param name="isRapidClassificationRequired">True se, per configurazione, è richiesta la classificazione rapida</param>
        /// <param name="validationProblems">Questo parametro verrà impostato con la lista dei problemi riscontrati durante la procedura di validazione</param>
        /// <returns>True se la procedura và a buon fine</returns>
        protected override bool CheckDataValidity(DocumentRowData rowData, bool isProfilationRequired, bool isRapidClassificationRequired, out List <string> validationProblems)
        {
            #region Dichiarazione variabili

            // Il risultato della validazione
            bool validationResult = true;

            // L'oggetto a cui richiedere le informaizoni sull'amministrazione
            DocsPaDB.Query_DocsPAWS.Amministrazione administrationManager = null;

            // Valore booleano che indica se è obbligatorio specificare l'RF
            bool rfRequired = false;

            // L'id dell'amministrazione
            string administrationSyd = String.Empty;

            #endregion

            // Creazione della lista dei problemi
            validationProblems = new List <string>();

            // L'ordinale è obbligatorio
            if (String.IsNullOrEmpty(rowData.OrdinalNumber))
            {
                validationResult = false;

                if (rowData is RDEDocumentRowData)
                {
                    validationProblems.Add("Campo 'Numero protocollo emergenza' obbligatorios.");
                }
                else
                {
                    validationProblems.Add("Campo 'Ordinale' obbligatorio.");
                }
            }

            // Il codice amministrazione è obbligatorio
            if (String.IsNullOrEmpty(rowData.AdminCode))
            {
                validationResult = false;
                validationProblems.Add("Campo 'Codice amministrazione' obbligatorio.");
            }

            // Il codice registro è obbligatorio
            if (String.IsNullOrEmpty(rowData.RegCode))
            {
                validationResult = false;
                validationProblems.Add("Campo 'Codice Registro' obbligatorio.");
            }

            // Il codice RF deve essere obbligatorio se richiesto dalla segnatura
            // Creazione dell'oggetto a cui richiedere le informazioni sull'amministrazione
            administrationManager = new DocsPaDB.Query_DocsPAWS.Amministrazione();

            try
            {
                administrationSyd = ImportUtils.GetAdministrationId(rowData.AdminCode);
            }
            catch (Exception e)
            {
                validationResult = false;
                validationProblems.Add(String.Format(
                                           "Impossibile recuperare le informazioni sull'amministrazione {0}",
                                           rowData.AdminCode));
            }

            // Se non è stato possibile ricavare l'id dell'amministrazione, problema
            if (!String.IsNullOrEmpty(administrationSyd))
            {
                // Si procede con la verifica
                // Verifica dell'obbligatorietà della specifica dell'RF
                rfRequired = administrationManager.AmmGetListAmministrazioni().Where(
                    e => e.IDAmm == administrationSyd).FirstOrDefault().
                             Segnatura.Contains("COD_RF_PROT");

                // Se l'RF è richiesto ma non è specificato, la validazione non passa
                if (rfRequired && String.IsNullOrEmpty(rowData.RFCode))
                {
                    validationResult = false;
                    validationProblems.Add("Campo 'Codice RF' obbligatorio in quanto richiesto dalla segnatura.");
                }
            }

            // Se entrambi i campi 'Oggetto' e 'Codice Oggetto' non
            // sono valorizzati, la validazione non passa
            if (String.IsNullOrEmpty(rowData.ObjCode) &&
                String.IsNullOrEmpty(rowData.Obj))
            {
                validationResult = false;

                if (rowData is RDEDocumentRowData)
                {
                    validationProblems.Add("Il campo 'Oggetto' è obbligatorio.");
                }
                else
                {
                    validationProblems.Add("Non risultano valorizzati nè il campo 'Codice Oggetto' nè il campo 'Oggetto'.  Valorizzare uno dei due.");
                }
            }

            // Se entrambi i campi 'Oggetto' e 'Codice oggetto' sono valorizzati, errore
            if (!String.IsNullOrEmpty(rowData.ObjCode) &&
                !String.IsNullOrEmpty(rowData.Obj))
            {
                validationResult = false;
                validationProblems.Add("Risultano valorizzati entrambi i campi 'Codice Oggetto' e 'Oggetto'. Valorizzare solamente uno.");
            }

            // Se entrambi i campi 'Codice Corrispondente' e 'Corrispondente' non
            // sono valorizzati, la validazione non passa
            if (rowData.CorrCode == null &&
                rowData.CorrDesc == null)
            {
                validationResult = false;

                if (rowData is RDEDocumentRowData)
                {
                    validationProblems.Add("Non sono state trovate informazioni sui corrispondenti. Controllare i relativi campi.");
                }
                else
                {
                    validationProblems.Add("Non risultano valorizzati nè il campo 'Codice Corrispondente' nè il campo 'Corrispondente'. Valorizzarne uno.");
                }
            }

            // Se il campo 'Codice Fascicolo' del foglio excel è valorizzato, ed
            // è valorizzata anche la profilazione del fascicolo, errore in quanto non è possibile
            // valorizzarli entrambi
            if (rowData.ProjectCodes != null && rowData.ProjectCodes.Length > 0 &&
                (!String.IsNullOrEmpty(rowData.ProjectDescription) ||
                 !String.IsNullOrEmpty(rowData.FolderDescrition) ||
                 !String.IsNullOrEmpty(rowData.NodeCode) ||
                 !String.IsNullOrEmpty(rowData.ProjectTipology)))
            {
                validationResult = false;

                validationProblems.Add("Risultano valorizzati sia i campi 'Codice Fascicolo' che i campi riguardanti la specifica del fascicolo. Non è possibile specificarli entambi.");
            }

            // Se è richiesta profilazione del documento obbligatoria
            // ma non è valorizzato il campo 'Tipologia Documento', la validazione
            // non deve passare
            if (isProfilationRequired && String.IsNullOrEmpty(rowData.DocumentTipology) && !(rowData is RDEDocumentRowData))
            {
                validationResult = false;
                validationProblems.Add("La profilazione del documento è obbligatoria ma non risulta valorizzato il campo 'Tipologia Documento'");
            }

            // Se è richiesta fascicolazione rapida obbligatoria ma non sono specificati
            // dati in 'Codice Fascicolo' o nei campi dedicati al fascicolo
            if (isRapidClassificationRequired &&
                rowData.ProjectCodes == null &&
                String.IsNullOrEmpty(rowData.ProjectDescription) &&
                String.IsNullOrEmpty(rowData.FolderDescrition) &&
                String.IsNullOrEmpty(rowData.NodeCode) &&
                String.IsNullOrEmpty(rowData.ProjectTipology))
            {
                validationResult = false;

                if (rowData is RDEDocumentRowData)
                {
                    validationProblems.Add("Campo 'Codice Classifica' obbligatorio.");
                }
                else
                {
                    validationProblems.Add("La classificazione è obbligatoria ma non risultano valorizzati nè il campo 'Codice Fascicolo' nè i campi dedicati alla classificazione.");
                }
            }

            // Se la riga è una riga di RDE, vengono effettuati ulteriori controlli
            if (rowData is RDEDocumentRowData)
            {
                RDEDocumentRowData converted = rowData as RDEDocumentRowData;

                // Campo Stringa protocollo emergenza obbligatorio
                if (String.IsNullOrEmpty(converted.EmergencyProtocolSignature))
                {
                    validationResult = false;
                    validationProblems.Add("Campo 'Stringa protocollo emergenza' obbligatorio.");
                }

                // Se il campo Data protocollo emergenza non è valorizzato, non si può procedere
                if (String.IsNullOrEmpty(converted.EmergencyProtocolDate))
                {
                    validationResult = false;
                    validationProblems.Add("Campo 'Data protocollo emergenza' obbligatorio.");
                }

                // Se il campo Data protocollo emergenza non è valorizzato, non si può procedere
                if (String.IsNullOrEmpty(converted.EmergencyProtocolTime))
                {
                    validationResult = false;
                    validationProblems.Add("Campo 'Ora protocollo emergenza' obbligatorio.");
                }


                // Il campo Data protocollo emergenza deve essere minore della data di protocollazione, che
                // si suppone uguale alla data odierna. visto che il protocolla in giallo è stata dismessa
                // nel senso che non la usa più nessuno.
                if (!String.IsNullOrEmpty(converted.EmergencyProtocolDate) &&
                    !String.IsNullOrEmpty(converted.EmergencyProtocolTime))
                {
                    //l'excel è formattato un modo tale che la data e l'ora possono solo arrivare nel formato valido.
                    string   dataEmerg = converted.EmergencyProtocolDate + " " + converted.EmergencyProtocolTime;
                    DateTime dataEmergOut;

                    if (ImportUtils.IsDate(dataEmerg))
                    {
                        dataEmergOut = ImportUtils.ReadDate(dataEmerg);
                        if (dataEmergOut > System.DateTime.Now)
                        {
                            validationResult = false;
                            validationProblems.Add("Campo 'Data protocollo emergenza' deve essere minore della data di protocollazione.");
                        }
                    }
                    else
                    {
                        validationResult = false;
                        validationProblems.Add("Il campo data o il campo ora emergenza non sono espressi in un formato valido.");
                    }
                }

                // Se almeno uno fra i due campi "Data arrivo" e "Ora Arrivo", è valorizzato,
                // viene controllato che antrambi lo siano.
                if ((!String.IsNullOrEmpty(converted.ArrivalTime) && String.IsNullOrEmpty(converted.ArrivalDate)) ||
                    (!String.IsNullOrEmpty(converted.ArrivalDate) && String.IsNullOrEmpty(converted.ArrivalTime)))
                {
                    validationResult = false;
                    validationProblems.Add("Solo uno dei due campi \"Data arrivo\" e \"Ora Arrivo\" risulta valorizzato. Valorizzarli entrambi o nessuno dei due.");
                }

                // La data di protocollo mittente deve essere minore della
                // data attuale e minore della data di arrivo
                if (!String.IsNullOrEmpty(converted.SenderProtocolDate) &&
                    DateTime.Parse(converted.SenderProtocolDate) > DateTime.Now)
                {
                    validationProblems.Add("La data di protocollo mittente non può essere maggiore della data attuale.");
                    validationResult = false;
                }

                //controllo sulla validità del formato della data arrivo
                // Se non è una data, errore
                if (!string.IsNullOrEmpty(converted.ArrivalDate))
                {
                    if (!ImportUtils.IsDate(converted.ArrivalDate))
                    {
                        validationProblems.Add("Il campo data o il campo ora arrivo non sono espressi in un formato valido.");
                        validationResult = false;
                    }
                    else
                    {
                        DateTime arrivalDate = ImportUtils.ReadDate(converted.ArrivalDate);

                        // La data di arrivo deve essere minore della
                        // data attuale
                        if (arrivalDate > DateTime.Now)
                        {
                            validationProblems.Add("La data di arrivo non può essere maggiore della data di protocollo.");
                            validationResult = false;
                        }

                        if (!String.IsNullOrEmpty(converted.SenderProtocolDate) &&
                            !String.IsNullOrEmpty(converted.ArrivalDate) &&
                            DateTime.Parse(converted.SenderProtocolDate) > arrivalDate)
                        {
                            validationResult = false;
                            validationProblems.Add("La data di protocollo mittente deve essere minore della data di arrivo.");
                        }
                    }
                }
            }

            // Retituzione del risultato di validazione
            return(validationResult);
        }