Пример #1
0
        /// <summary>
        /// Funzione per la validazione dei dati
        /// </summary>
        /// <param name="rowData">L'oggetto con i dati da validare</param>
        /// <param name="isProfilationRequired">True se, per configurazione, è obbligatorio profilare il documento</param>
        /// <param name="isRapidClassificationRequired">True se, per configurazione, è obbligatorio classificare il documento</param>
        /// <param name="validationProblems">Lista che conterrà i problemi emersi in fase di validazione dei dati</param>
        /// <returns>True se la validazione va 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;

            // 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;

            // Variabile utilizzata per contare i mittenti nel campo "Codice Corrispondenti"
            int sendersNumInCodCorr;

            #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' obbligatorio.");
                }
                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.");
                }
            }

            primCorrFound = false;
            sendersNum    = 0;
            // Se il campo 'Codice Corrispondenti' è valorizzato ma non contiene #D#,
            // significa che non è stato specificato un destinatario principale.
            // 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 il campo 'Corrispondenti' è valorizzato ma non contiene #D#,
            // significa che non è stato specificato un destinatario principale.
            sendersNumInCodCorr = 0;
            // Se il campo 'Codice Corrispondenti' è valorizzato...
            if (rowData.CorrDesc != null)
            {
                // Per ogni codice corrispondente contenuto nella lista...
                foreach (string corrDesc in rowData.CorrDesc)
                {
                    // ...se contiene #M#, si incrementa il contatore di mittenti
                    if (corrDesc.ToUpper().Contains("#M#"))
                    {
                        sendersNumInCodCorr++;
                    }

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

                // Se sono stati individuati mittenti, errore
                if (sendersNumInCodCorr != 0)
                {
                    validationResult = false;

                    if (rowData is RDEDocumentRowData)
                    {
                        validationProblems.Add("Non è possibile inserire informazioni sui mittenti.");
                    }
                    else
                    {
                        validationProblems.Add("Il campo 'Corrispondenti' non può contenere dati sul mittente.");
                    }
                }
            }

            // Se la validazione dei campi corrispondenti è passata, si procede con
            // la verifica della correttezza dei dati in essi contenuti
            if (corrOk)
            {
                // Se ne sono stati trovati più mittienti, 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(((RDEDocumentRowData)rowData).EmergencyProtocolSignature))
            {
                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 (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.");
                    }
                }
            }

            // Retituzione del risultato di validazione
            return(validationResult);
        }
Пример #2
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);
        }