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