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