/// <summary> /// Crea un dettaglio di Spedizione per Archiviazione Ottica valido /// </summary> public SpedizioneArchiviazioneOtticaDettaglio(SpedizioneArchiviazioneOttica testata, Documento documentoRiferimento) { Testata = testata; DocumentoRiferimento = documentoRiferimento; if (Testata != null) Testata.Dettaglio.Add(this); }
/// <summary> /// Crea un dettaglio di Spedizione per Archiviazione Ottica valido /// </summary> public SpedizioneArchiviazioneOtticaDettaglio(SpedizioneArchiviazioneOttica testata, TestataMovimentoContabile testataMovimentoRiferimento) { Testata = testata; TestataMovimentoRiferimento = testataMovimentoRiferimento; if (Testata != null) Testata.Dettaglio.Add(this); }
/// <summary> /// Crea un dettaglio di Spedizione per Archiviazione Ottica valido /// </summary> public SpedizioneArchiviazioneOtticaDettaglio(SpedizioneArchiviazioneOttica testata, Spesa spesaRiferimento) { Testata = testata; SpesaRiferimento = spesaRiferimento; if (Testata != null) Testata.Dettaglio.Add(this); }
private SpedizioneArchiviazioneOtticaDTO setDto(SpedizioneArchiviazioneOttica item) { var dettaglio = item.Dettaglio; var dto = new SpedizioneArchiviazioneOtticaDTO { ID = item.ID, Tipo = item.Tipo, Data = item.Data, Descrizione = item.Descrizione, NumeroFatture = dettaglio.Count(dett => dett.SpesaRiferimento != null), NumeroMovimenti = dettaglio.Count(dett => dett.TestataMovimentoRiferimento != null), NumeroDocumenti = dettaglio.Count(dett => dett.DocumentoRiferimento != null), Version = item.Version }; return dto; }
// TODO: Quando possibile rivedere tutta la funzione interfaccia utente compresa public string CreateSpedizione(TipoDocumentoArchiviazione tipo, int idAzienda, IList<int> idCondomini, bool automatedEmail, bool returnFileText) { var file = new StringBuilder(); var message = string.Empty; if (idCondomini != null && idCondomini.Count > 0) { var azienda = _daoFactory.GetAziendaDao().GetById(idAzienda, false); try { // ============================================================ // Fatture Passive // ============================================================ // ------------------------------------------------------------ // Creazione File // ============================================================ if (tipo == TipoDocumentoArchiviazione.FatturaPassiva) { // -------------------------------------------- // Spese / Fatture // -------------------------------------------- var speseDaArchiviare = getSpeseDaArchiviare(idAzienda, idCondomini); if (speseDaArchiviare.Any()) { file.AppendLine("IdentificativoUnivoco;TipoDocumento;RagioneSocialeFornitore;IndirizzoFornitore;CapFornitore;ComuneFornitore;ProvinciaFornitore;NumeroDocumento;DataDocumento;PartitaIvaFornitore;CodiceFiscaleFornitore;ImportoTotaleDocumento;CodiceCondominio;AnnoRegistrazione;NumeroProtocollo;CodiceFiscaleCondominio;CodiceStudio;IdentificativoSfera"); foreach (var spesa in speseDaArchiviare) { try { var linea = new StringBuilder(); decimal importo; if ((spesa.ImportoLordo >= 0 || spesa.ImportoBolletta >= 0) && spesa.TipoDocumento != "NOTACC") { importo = spesa.TipoDocumento == "BOLLETTA" ? spesa.ImportoBolletta.GetValueOrDefault() : spesa.ImportoLordo; linea.Append(getIdentificativoArchiviazione(spesa, false) + ";F;"); } else { linea.Append(getIdentificativoArchiviazione(spesa, false) + ";N;"); importo = spesa.ImportoLordo*-1; } linea.Append(spesa.FornitoreRiferimento.DisplayName.Replace(';', ',').Trim() + ";"); if (spesa.FornitoreRiferimento.PersonaRiferimento.IndirizzoResidenza != null) { linea.Append(spesa.FornitoreRiferimento.PersonaRiferimento.IndirizzoResidenza.Indirizzo.Replace(';', ',').Trim() + ";"); linea.Append(spesa.FornitoreRiferimento.PersonaRiferimento.IndirizzoResidenza.Cap.Replace(';', ',').Trim() + ";"); if (spesa.FornitoreRiferimento.PersonaRiferimento.IndirizzoResidenza.Comune != null) { linea.Append(spesa.FornitoreRiferimento.PersonaRiferimento.IndirizzoResidenza.Comune.Descrizione.Replace(';', ',').Trim() + ";"); linea.Append(spesa.FornitoreRiferimento.PersonaRiferimento.IndirizzoResidenza.Comune.ProvinciaAppartenenza.Codice.Replace(';', ',').Trim() + ";"); } else linea.Append(";;"); } else linea.Append(";;;;"); linea.Append(spesa.NumeroDocumento.Replace(';', ',').Trim() + ";"); linea.Append(spesa.DataDocumento.GetValueOrDefault().ToShortDateString() + ";"); if (!string.IsNullOrEmpty(spesa.FornitoreRiferimento.PersonaRiferimento.PartitaIva)) linea.Append(spesa.FornitoreRiferimento.PersonaRiferimento.PartitaIva.Replace(';', ',').Trim() + ";"); else linea.Append(";"); if (!string.IsNullOrEmpty(spesa.FornitoreRiferimento.PersonaRiferimento.CodiceFiscale)) linea.Append(spesa.FornitoreRiferimento.PersonaRiferimento.CodiceFiscale.Replace(';', ',').Trim() + ";"); else linea.Append(";"); linea.Append(importo.ToString().Replace(';', ',').Trim() + ";"); linea.Append(spesa.EsercizioRiferimento.CondominioRiferimento.Codice.Replace(';', ',').Trim().PadLeft(5, '0') + ";"); linea.Append(spesa.DataDocumento.GetValueOrDefault().Year + ";"); linea.Append(spesa.NumeroProtocollo.GetValueOrDefault() + ";"); if (!string.IsNullOrEmpty(spesa.EsercizioRiferimento.CondominioRiferimento.CodiceFiscale)) linea.Append(spesa.EsercizioRiferimento.CondominioRiferimento.CodiceFiscale.Replace(';', ',').Trim() + ";"); else linea.Append(";"); if (!string.IsNullOrEmpty(spesa.EsercizioRiferimento.CondominioRiferimento.Azienda.Codice)) linea.Append(spesa.EsercizioRiferimento.CondominioRiferimento.Azienda.Codice.Replace(';', ',').Trim().PadLeft(4, '0') + ";"); else linea.Append(";"); linea.Append(spesa.ID.ToString()); file.Append(linea + Environment.NewLine); } catch (Exception ex) { _log.Error("Errore inaspettato durante la creazione del file CSV per l'archiviazione ottica sostitutiva, singola spesa - " + Utility.GetMethodDescription() + " - idSpesa: " + spesa.ID + " - idAzienda:" + idAzienda, ex); throw; } } } // -------------------------------------------- // Movimenti contabili // -------------------------------------------- var testateMovimentiDaArchiviare = getMovimentiDaArchiviare(idAzienda, idCondomini); if (testateMovimentiDaArchiviare.Count > 0) { foreach (var testata in testateMovimentiDaArchiviare) { try { var linea = new StringBuilder(); linea.Append(getIdentificativoArchiviazione(testata, false) + ";M;"); linea.Append(";;;;;;;;;"); decimal? importo = testata.GetImportoSpesa(); if (importo != null) linea.Append(importo.Value.ToString().Replace(';', ',').Trim() + ";"); else linea.Append(";;"); linea.Append(testata.EsercizioRiferimento.CondominioRiferimento.Codice.Replace(';', ',').Trim().PadLeft(5, '0') + ";"); linea.Append(testata.DataRegistrazione.GetValueOrDefault().Year + ";"); linea.Append(testata.NumeroProtocollo.GetValueOrDefault() + ";"); if (!string.IsNullOrEmpty(testata.EsercizioRiferimento.CondominioRiferimento.CodiceFiscale)) linea.Append(testata.EsercizioRiferimento.CondominioRiferimento.CodiceFiscale.Replace(';', ',').Trim() + ";"); else linea.Append(";"); if (!string.IsNullOrEmpty(testata.EsercizioRiferimento.CondominioRiferimento.Azienda.Codice)) linea.Append(testata.EsercizioRiferimento.CondominioRiferimento.Azienda.Codice.Replace(';', ',').Trim().PadLeft(4, '0') + ";"); else linea.Append(";"); linea.Append(testata.ID.ToString()); file.Append(linea + Environment.NewLine); } catch (Exception ex) { _log.ErrorFormat("Errore inaspettato durante la creazione del file CSV per l'archiviazione ottica sostitutiva, singola testata di movimento contabile - {0} - spesa:{1} - azienda:{2}", ex, Utility.GetMethodDescription(), testata.ID, idAzienda); throw; } } } // ------------------------------------------------------------ // Creazione spedizione // ============================================================ if (speseDaArchiviare != null && (speseDaArchiviare.Any() || testateMovimentiDaArchiviare.Any())) { var spedizione = new SpedizioneArchiviazioneOttica(tipo, "Fatture spedite il:" + DateTime.Today.ToShortDateString(), file.ToString(), DateTime.Today, azienda); foreach (var spesa in speseDaArchiviare) spedizione.Dettaglio.Add(new SpedizioneArchiviazioneOtticaDettaglio(spedizione, spesa)); foreach (var testata in testateMovimentiDaArchiviare) spedizione.Dettaglio.Add(new SpedizioneArchiviazioneOtticaDettaglio(spedizione, testata)); _daoFactory.GetSpedizioneArchiviazioneOtticaDao().SaveOrUpdate(spedizione); } } // ============================================================ // Documenti // ============================================================ // ------------------------------------------------------------ // Creazione File // ============================================================ if (tipo == TipoDocumentoArchiviazione.Contratto) { // -------------------------------------------- // Documenti // -------------------------------------------- var documenti = getDocumentiDaArchiviare(idAzienda, idCondomini); if (documenti.Count > 0) { file.AppendLine("IdentificativoUnivoco;TipoDocumento;CodiceStudio;CodiceCondominio;NumeroProtocollo;TipologiaContratto;Data;Fornitore;IdentificativoSfera"); foreach (var documento in documenti) { try { var condominio = documento.GetCondominioRiferimento(); if (condominio != null) { var fascicolo = IesiGenericCollections<FascicoloCondominio>.GetByIndex(documento.Fascicoli, 0); if (fascicolo != null) { var linea = new StringBuilder(); var identificativoArchiviazione = getIdentificativoArchiviazione(documento, condominio, false); linea.Append(identificativoArchiviazione + ";F" + fascicolo.DettaglioFascicolo.Codice + ";"); documento.IdentificativoArchiviazioneOttica = identificativoArchiviazione; linea.Append(condominio.Azienda.Codice.Replace(';', ',').Trim() + ";"); linea.Append(condominio.Codice.Replace(';', ',').Trim().PadLeft(5, '0') + ";"); linea.Append(documento.NumeroProtocollo.GetValueOrDefault() + ";"); if (documento.ContrattoRiferimento != null) { if(documento.ContrattoRiferimento.Tipo != null) linea.Append(documento.ContrattoRiferimento.Tipo.Descrizione + ";"); else linea.Append(documento.Tipo + ";"); } else linea.Append(";"); if (documento.Data != null) linea.Append(documento.Data.GetValueOrDefault().ToShortDateString() + ";"); else linea.Append(";"); if (documento.FornitoreRiferimento != null) linea.Append(documento.FornitoreRiferimento.DisplayName.Replace(';', ',').Trim() + ";"); else linea.Append(";"); linea.Append(documento.ID.ToString()); file.Append(linea + Environment.NewLine); } else { message += string.Format(" - Il documento '{0}' del condominio '{1}' non può essere inviato perchè non è presente il fascicolo condominio.{2}", documento.Descrizione, condominio.DisplayName, Environment.NewLine); } } } catch (Exception ex) { _log.ErrorFormat("Errore inaspettato durante la creazione del file CSV per l'archiviazione ottica sostitutiva, singola spesa - {0} - documento:{1} - azienda:{2}", ex, Utility.GetMethodDescription(), documento.ID, idAzienda); throw; } } } // ------------------------------------------------------------ // Creazione spedizione // ============================================================ if (documenti.Count > 0) { if (string.IsNullOrEmpty(message)) { var spedizione = new SpedizioneArchiviazioneOttica(tipo, "Documenti spediti il:" + DateTime.Today.ToShortDateString(), file.ToString(), DateTime.Today, azienda); foreach (var documento in documenti) spedizione.Dettaglio.Add(new SpedizioneArchiviazioneOtticaDettaglio(spedizione, documento)); _daoFactory.GetSpedizioneArchiviazioneOtticaDao().SaveOrUpdate(spedizione); _log.InfoFormat("Creato il file per archiviazione ottica - {0} - id:{1}", Utility.GetMethodDescription(), spedizione.ID); } else { _log.ErrorFormat("Errore nella creazione del file indice - {0} - messaggio:{1} - azienda:{2}", Utility.GetMethodDescription(), message, idAzienda); } } } } catch (Exception ex) { _log.ErrorFormat("Errore inaspettato durante la creazione del file CSV per l'archiviazione ottica sostitutiva - {0} - azienda:{1}", ex, Utility.GetMethodDescription(), idAzienda); throw; } if (!string.IsNullOrEmpty(file.ToString()) && string.IsNullOrEmpty(message)) message = "OK"; if (automatedEmail && !string.IsNullOrEmpty(file.ToString()) && message == "OK") { string fileName; switch (tipo) { case TipoDocumentoArchiviazione.Contratto: fileName = azienda.NomeCompatto + "_Contratti.csv"; break; case TipoDocumentoArchiviazione.FatturaPassiva: fileName = azienda.NomeCompatto + "_FattureFornitori.csv"; break; default: fileName = azienda.NomeCompatto + "_FattureFornitori.csv"; break; } var allegati = new List<DocumentInfo> {new DocumentInfo {FileName = fileName, FileExtension = ".csv", Body = Conversione.ToByteArray(file.ToString())}}; var emailAddresses = ConfigurationManager.AppSettings["emailAddressArchiviazioneOttica"].Split(','); var destinatari = new List<string>(emailAddresses.Length); destinatari.AddRange(emailAddresses.Select(t => t.Trim())); _messageService.InvioMessaggio(idAzienda, null, null, null, null, null, null, MotivoMessaggio.FileIndiceArchiviazione, "File indice per Archiva", "Allego il file indice per i documenti che abbiamo inviato." + Environment.NewLine + Environment.NewLine + "Cordiali saluti" + Environment.NewLine + "Nadir s.r.l.", destinatari, "*****@*****.**", "*****@*****.**", allegati, new ParametriInvioLettera { Asincrono = true }); } } else message = "Non è stata effettuata nessuna selezione"; // Ritorno il corpo del file, oppure KO se si è verificato un errore, OK se è tutto a posto if (returnFileText && !string.IsNullOrEmpty(file.ToString()) && message == "OK") return file.ToString(); if (message == "OK") return message; return "KO$" + message; }