public ResultCreazioneFile GetModello(int idAzienda, int anno, IList<DatiCertificazioneDTO> datiCertificazione, DateTime dataDichiarazione, bool intermediarioDichiarazioneCondominio, bool aggregatoPerFornitore, bool ordinatoPerFornitore, PersonaDTO firmatarioDichiarazione, PersonaDTO intermediarioDichiarazione, TipoOperazioneFiscale tipoOperazione, TipoStampaModelloCU tipoStampa, long? protocolloComunicazione, int? progressivoInvio) { byte[] bytes = null; var message = string.Empty; var numeroRecordB = 0; var numeroRecordD = 0; var numeroRecordH = 0; StreamWriter sw = null; try { var fileName = Path.GetTempPath() + "\\" + Guid.NewGuid(); if (System.Deployment.Application.ApplicationDeployment.IsNetworkDeployed) fileName = System.Deployment.Application.ApplicationDeployment.CurrentDeployment.DataDirectory + "\\" + Guid.NewGuid(); if (File.Exists(fileName)) File.Delete(fileName); var azienda = _daoFactory.GetAziendaDao().GetById(idAzienda, false); // ----------------------------------------------------------------- // Raggruppamento per condominio // ----------------------------------------------------------------- var datiGroupByCondominio = datiCertificazione.GroupBy(item => item.IdCondominio).ToList(); // ============================================================================================= // Creazione del file // ============================================================================================= using (sw = File.CreateText(fileName)) { var codiceFiscale = azienda.CodiceFiscale; if (intermediarioDichiarazione != null) codiceFiscale = intermediarioDichiarazione.CodiceFiscale; else if (intermediarioDichiarazioneCondominio) { var condominio = _daoFactory.GetCondominioDao().GetById(datiGroupByCondominio.FirstOrDefault().Key, false); codiceFiscale = condominio.CodiceFiscale; } writeTestataA("CUR", codiceFiscale, anno, sw); foreach (var datiPerCondominio in datiGroupByCondominio) { var condominio = _daoFactory.GetCondominioDao().GetById(datiPerCondominio.Key, false); // ----------------------------------------------------------------- // Raggruppamento per fornitore // ----------------------------------------------------------------- var datiPerFornitore = datiPerCondominio.GroupBy(item => item.IdFornitore).ToList(); var numeroCertificazioni = datiPerFornitore.Count(); writeRowB(condominio, dataDichiarazione, numeroCertificazioni, intermediarioDichiarazioneCondominio, firmatarioDichiarazione, intermediarioDichiarazione, tipoOperazione, sw); numeroRecordB++; // Una comunicazione per ogni fornitore var index = 0; foreach (var datiFornitore in datiPerFornitore) { var fornitore = _daoFactory.GetFornitoreDao().GetById(datiFornitore.Key, false); if (aggregatoPerFornitore) { index++; writeRowD(condominio, fornitore, index, dataDichiarazione, tipoOperazione, protocolloComunicazione, progressivoInvio, sw); numeroRecordD++; var datiCertificazioneFornitore = datiFornitore.FirstOrDefault(); if (datiCertificazioneFornitore != null) { if (tipoOperazione != TipoOperazioneFiscale.Annullamento) { writeRowH(condominio, fornitore, anno, datiCertificazioneFornitore.Dettaglio, datiCertificazioneFornitore.EsenteRegimeMinimo, index, 1, sw); numeroRecordH++; } } } else { foreach (var datiCertificazioneDTO in datiFornitore) { foreach (var dettaglioDatiCertificazioneDTO in datiCertificazioneDTO.Dettaglio) { index++; writeRowD(condominio, fornitore, index, dataDichiarazione, tipoOperazione, protocolloComunicazione, progressivoInvio, sw); numeroRecordD++; if (tipoOperazione != TipoOperazioneFiscale.Annullamento) { writeRowH(condominio, fornitore, anno, new List<DettaglioDatiCertificazioneDTO> { dettaglioDatiCertificazioneDTO }, datiCertificazioneDTO.EsenteRegimeMinimo, index, 1, sw); numeroRecordH++; } } } } } } writePiedeZ(numeroRecordB, 0, numeroRecordD, 0, numeroRecordH, sw); } var infile = new FileStream(fileName, FileMode.Open, FileAccess.Read, FileShare.Read); bytes = new byte[infile.Length]; infile.Read(bytes, 0, bytes.Length); return new ResultCreazioneFile(bytes, message); } catch (Exception ex) { _log.ErrorFormat("Errore inaspettato durante la creazione del file per il modello CU - Certificazione Unica - {0} - anno:{1}", ex, Library.Utility.GetMethodDescription(), anno); message = "Si sono verificati problemi inaspettati durante la generazione del modello CU - Certificazione Unica." + Environment.NewLine + "Controllare il log per ulteriori dettagli."; return new ResultCreazioneFile(bytes, message); } finally { if (sw != null) { sw.Close(); sw.Dispose(); } } }
public string GetModelloCertificazioneUnicaPDF(int anno, List<DatiCertificazioneDTO> datiCertificazione, string nomeFile, DateTime dataDichiarazione, bool aggregatoPerFornitore, bool ordinatoPerFornitore, bool intermediarioDichiarazioneCondominio, PersonaDTO firmatarioDichiarazione, PersonaDTO intermediarioDichiarazione, TipoOperazioneFiscale tipoOperazione, TipoStampaModelloCU tipoStampa) { var result = GetServiceClient().GetModelloCertificazioneUnicaPDF(anno, datiCertificazione, dataDichiarazione, aggregatoPerFornitore, ordinatoPerFornitore, intermediarioDichiarazioneCondominio, firmatarioDichiarazione, intermediarioDichiarazione, tipoOperazione, tipoStampa, GetUserInfo()); if (string.IsNullOrEmpty(result.Message)) { var doc = new DocumentInfo { Body = result.FileBody, FileName = nomeFile }; _manageDocumentService.Open(doc, "Modello CU", false, MergeFieldType.Default); } CloseService(); return result.Message; }
public string GetModelloCertificazioneUnica(int anno, List<DatiCertificazioneDTO> datiCertificazione, string nomeFile, DateTime dataDichiarazione, bool aggregatoPerFornitore, bool ordinatoPerFornitore, bool intermediarioDichiarazioneCondominio, PersonaDTO firmatarioDichiarazione, PersonaDTO intermediarioDichiarazione, TipoOperazioneFiscale tipoOperazione, TipoStampaModelloCU tipoStampa, long? protocolloComunicazione, int? progressivoInvio) { var result = GetServiceClient().GetModelloCertificazioneUnica(anno, datiCertificazione, dataDichiarazione, aggregatoPerFornitore, ordinatoPerFornitore, intermediarioDichiarazioneCondominio, firmatarioDichiarazione, intermediarioDichiarazione, tipoOperazione, tipoStampa, protocolloComunicazione, progressivoInvio, GetUserInfo()); if (string.IsNullOrEmpty(result.Message)) { var doc = new DocumentInfo { Body = result.FileBody, FileName = nomeFile }; _manageDocumentService.Save(doc); } CloseService(); return result.Message; }
private List<byte[]> getModuloPages(IList<DatiCertificazioneDTO> datiCertificazione, PersonaDTO firmatarioDichiarazione, PersonaDTO intermediarioDichiarazione, bool aggregatoPerFornitore, bool intermediarioDichiarazioneCondominio, DateTime dataDichiarazione, TipoOperazioneFiscale tipoOperazione, TipoStampaModelloCU tipoStampa, int anno, Azienda azienda, byte[] templateFrontespizio, byte[] templatePercipiente, byte[] templateDatiLavoratoreAutonomo) { var moduloFrontespizio = new Dictionary<int, byte[]>(); var moduloFornitori = new Dictionary<int, IList<byte[]>>(); var datiGroupByCondominio = datiCertificazione.GroupBy(item => item.IdCondominio); foreach (var datiPerCondominio in datiGroupByCondominio) { try { var condominio = _daoFactory.GetCondominioDao().GetById(datiPerCondominio.Key, false); var datiGroupByFornitore = datiPerCondominio.GroupBy(item => item.IdFornitore).ToList(); // ============================================================================================= // Creazione dei moduli // ============================================================================================= byte[] bytes; // ----------------------------------------------------------------------------- // Frontespizio // ----------------------------------------------------------------------------- if (tipoStampa == TipoStampaModelloCU.Completa || tipoOperazione == TipoOperazioneFiscale.Annullamento || tipoOperazione == TipoOperazioneFiscale.Sostituzione) { string codiceFiscaleFirmatario; string nomeFirmatario; string cognomeFirmatario; if (firmatarioDichiarazione != null) { nomeFirmatario = firmatarioDichiarazione.Nome; cognomeFirmatario = firmatarioDichiarazione.Cognome; codiceFiscaleFirmatario = firmatarioDichiarazione.CodiceFiscale; } else { nomeFirmatario = condominio.Azienda.Amministratore.PersonaRiferimento.Nome; cognomeFirmatario = condominio.Azienda.Amministratore.PersonaRiferimento.Cognome; codiceFiscaleFirmatario = condominio.Azienda.Amministratore.PersonaRiferimento.CodiceFiscale; } var numeroCertificazioni = 0; if (!aggregatoPerFornitore) numeroCertificazioni += datiCertificazione.Sum(datiCertificazioneDTO => datiCertificazioneDTO.Dettaglio.Count); else numeroCertificazioni = datiGroupByFornitore.Count; string codiceFiscaleIntermediario; string nominativoIntermediario; if (intermediarioDichiarazione != null) { codiceFiscaleIntermediario = intermediarioDichiarazione.CodiceFiscale; nominativoIntermediario = intermediarioDichiarazione.DisplayName; } else if (intermediarioDichiarazioneCondominio) { codiceFiscaleIntermediario = condominio.CodiceFiscale; nominativoIntermediario = condominio.Descrizione; } else { codiceFiscaleIntermediario = azienda.CodiceFiscale; nominativoIntermediario = azienda.Descrizione; } var datiFrontespizio = new DatiFrontespizioCU { CodiceFiscaleCondominio = condominio.CodiceFiscale, DenominazioneCondominio = condominio.Descrizione, Annullamento = tipoOperazione == TipoOperazioneFiscale.Annullamento ? "1" : string.Empty, Sostituzione = tipoOperazione == TipoOperazioneFiscale.Sostituzione ? "1" : string.Empty, CodiceFiscaleAmministratore = codiceFiscaleFirmatario, CognomeAmministratore = cognomeFirmatario.ToUpper(), NomeAmministratore = nomeFirmatario.ToUpper(), CodiceCarica = "13", CodiceFiscaleIntermediario = codiceFiscaleIntermediario, DataPresentazione = dataDichiarazione.ToShortDateString(), NominativoIntermediario = nominativoIntermediario.ToUpper(), NumeroCertificazioni = numeroCertificazioni.ToString(_cultureInfo), FirmaComunicazione = azienda.Amministratore.PersonaRiferimento.DisplayName, ImpegnoTrasmettereComunicazione = "1" }; bytes = FillForm.FillStream(datiFrontespizio, templateFrontespizio, GestioneFiscaleResources.ModelloCUFrontespizio_FieldMapping, false, true); // Firma if (azienda.FirmaAmministratore != null) { var signature = new Signature(bytes); var firma = _documentService.GetDocument(azienda.FirmaAmministratore.Checksum, azienda.ID, TipoDocumentoArchiviazione.Contratto); if (firma.Body != null) bytes = signature.AddSignature(firma.Body, 1, 470, 460, string.Empty); } moduloFrontespizio.Add(condominio.ID, bytes); } else { moduloFrontespizio.Add(condominio.ID, null); } // ----------------------------------------------------------------------------- // Dati Percipiente - FORNITORE // ----------------------------------------------------------------------------- var listaModuloFornitori = new List<byte[]>(datiGroupByFornitore.Count); foreach (var datiPerFornitore in datiGroupByFornitore) { var progressivoModulo = 0; var fornitore = _daoFactory.GetFornitoreDao().GetById(datiPerFornitore.Key, false); var codiceSedeEntratel = "000"; if (!string.IsNullOrEmpty(azienda.CodiceSedeEntratel)) codiceSedeEntratel = azienda.CodiceSedeEntratel; var datiFornitore = new DatiPercipienteCU { Anno = anno.ToString(_cultureInfo), CodiceFiscaleCondominio = condominio.CodiceFiscale, DenominazioneCondominio = condominio.Descrizione, ComuneCondominio = condominio.Indirizzo.Comune.Descrizione, ProvinciaCondominio = condominio.Indirizzo.Comune.ProvinciaAppartenenza.Codice, CapCondominio = condominio.Indirizzo.Cap, IndirizzoCondominio = condominio.Indirizzo.GetIndirizzoCompleto(), CodiceFiscalePercipiente = fornitore.GetCodiceFiscale(), CognomeRagioneSocialePercipiente = (fornitore.PersonaRiferimento.TipoPersona.GetValueOrDefault() == TipoPersonaEnum.Giuridica) ? fornitore.PersonaRiferimento.RagioneSociale.ToUpper() : fornitore.PersonaRiferimento.Cognome.ToUpper(), NomePercipiente = (fornitore.PersonaRiferimento.TipoPersona.GetValueOrDefault() == TipoPersonaEnum.Giuridica) ? string.Empty : fornitore.PersonaRiferimento.Nome.ToUpper(), ComuneNascitaPercipiente = (fornitore.PersonaRiferimento.TipoPersona.GetValueOrDefault() == TipoPersonaEnum.Fisica) ? fornitore.PersonaRiferimento.ComuneNascita.Descrizione : string.Empty, ProvinciaNascitaPercipiente = (fornitore.PersonaRiferimento.TipoPersona.GetValueOrDefault() == TipoPersonaEnum.Fisica) ? fornitore.PersonaRiferimento.ComuneNascita.ProvinciaAppartenenza.Codice : string.Empty, DataNascitaPercipiente = (fornitore.PersonaRiferimento.TipoPersona.GetValueOrDefault() == TipoPersonaEnum.Fisica) ? fornitore.PersonaRiferimento.DataNascita.GetValueOrDefault().ToShortDateString() : string.Empty, SessoPercipiente = (fornitore.PersonaRiferimento.TipoPersona.GetValueOrDefault() == TipoPersonaEnum.Fisica) ? fornitore.PersonaRiferimento.Sesso.ToString().Substring(0, 1).ToUpper() : string.Empty, ComuneResidenzaPercipiente2014 = fornitore.PersonaRiferimento.IndirizzoResidenza.Comune.Descrizione, ProvinciaResidenzaPercipiente2014 = fornitore.PersonaRiferimento.IndirizzoResidenza.Comune.ProvinciaAppartenenza.Codice, CodiceComuneResidenzaPercipiente2014 = fornitore.PersonaRiferimento.IndirizzoResidenza.Comune.CodiceCatastale, ComuneResidenzaPercipiente2015 = fornitore.PersonaRiferimento.IndirizzoResidenza.Comune.Descrizione, ProvinciaResidenzaPercipiente2015 = fornitore.PersonaRiferimento.IndirizzoResidenza.Comune.ProvinciaAppartenenza.Codice, CodiceComuneResidenzaPercipiente2015 = fornitore.PersonaRiferimento.IndirizzoResidenza.Comune.CodiceCatastale, CodiceAttivita = "970000", CodiceSedeEntratel = codiceSedeEntratel, DataPresentazione = dataDichiarazione.ToShortDateString(), FirmaSostitutoImposta = condominio.Descrizione }; if (fornitore.PersonaRiferimento.TipoPersona.GetValueOrDefault() == TipoPersonaEnum.Fisica && int.Parse(fornitore.PersonaRiferimento.ComuneNascita.Codice) > 999201) datiFornitore.ProvinciaNascitaPercipiente = "EE"; bytes = FillForm.FillStream(datiFornitore, templatePercipiente, GestioneFiscaleResources.ModelloCUPercipiente_FieldMapping, false, true); // Firma if (azienda.FirmaAmministratore != null) { var signature = new Signature(bytes); var firma = _documentService.GetDocument(azienda.FirmaAmministratore.Checksum, azienda.ID, TipoDocumentoArchiviazione.Contratto); if(firma.Body != null) bytes = signature.AddSignature(firma.Body, 1, 470, 350, string.Empty); } listaModuloFornitori.Add(bytes); if (tipoOperazione != TipoOperazioneFiscale.Annullamento) { if (aggregatoPerFornitore) { var datiCertificazioneFornitore = datiPerFornitore.FirstOrDefault(); if (datiCertificazioneFornitore != null) { progressivoModulo++; listaModuloFornitori.Add(getModuloLavoratoreAutonomo(fornitore, datiCertificazioneFornitore.Dettaglio, datiCertificazioneFornitore.EsenteRegimeMinimo, anno, progressivoModulo, templateDatiLavoratoreAutonomo, azienda)); } } else { foreach (var datiCertificazioneDTO in datiPerFornitore) { foreach (var dettaglioDatiCertificazioneDTO in datiCertificazioneDTO.Dettaglio) { progressivoModulo++; listaModuloFornitori.Add(getModuloLavoratoreAutonomo(fornitore, new List<DettaglioDatiCertificazioneDTO> { dettaglioDatiCertificazioneDTO }, datiCertificazioneDTO.EsenteRegimeMinimo, anno, progressivoModulo, templateDatiLavoratoreAutonomo, azienda)); } } } } } moduloFornitori.Add(condominio.ID, listaModuloFornitori); } catch (Exception ex) { _log.ErrorFormat("Errore inaspettato durante la creazione del file per il modello CU - {0} - anno:{1} - azienda:{2}", ex, Library.Utility.GetMethodDescription(), anno, azienda); throw; } } var result = new List<byte[]>(); foreach (var frontespizio in moduloFrontespizio) { // frontespizio if(frontespizio.Value != null) result.Add(frontespizio.Value); // percipiente result.AddRange(moduloFornitori[frontespizio.Key]); } return result; }
public ResultCreazioneFile GetModello(int idAzienda, int anno, IList<DatiCertificazioneDTO> datiCertificazione, DateTime dataDichiarazione, bool intermediarioDichiarazioneCondominio, bool aggregatoPerFornitore, bool ordinatoPerFornitore, PersonaDTO firmatarioDichiarazione, PersonaDTO intermediarioDichiarazione, TipoOperazioneFiscale tipoOperazione, TipoStampaModelloCU tipoStampa, long? protocolloComunicazione, int? progressivoInvio) { byte[] bytes = null; var message = string.Empty; var annoModulo = string.Empty; if (anno > 2009) annoModulo = (anno + 1).ToString(CultureInfo.InvariantCulture); var azienda = _daoFactory.GetAziendaDao().GetById(idAzienda, false); var templateFrontespizio = getTemplate("frontespizio", annoModulo); var templatePercipiente = getTemplate("percipiente", annoModulo); var templateDatiLavoratoreAutonomo = getTemplate("lavoratoreAutonomo", annoModulo); if (templateFrontespizio != null && templatePercipiente != null && templateDatiLavoratoreAutonomo != null) { try { var pageBytes = new List<byte[]>(); if (ordinatoPerFornitore) { var dataSource = datiCertificazione.GroupBy(item => item.IdFornitore).ToList(); foreach (var dataSourcePerFornitore in dataSource) { pageBytes.AddRange(getModuloPages(dataSourcePerFornitore.ToList(), firmatarioDichiarazione, intermediarioDichiarazione, aggregatoPerFornitore, intermediarioDichiarazioneCondominio, dataDichiarazione, tipoOperazione, tipoStampa, anno, azienda, templateFrontespizio, templatePercipiente, templateDatiLavoratoreAutonomo)); } } else pageBytes.AddRange(getModuloPages(datiCertificazione, firmatarioDichiarazione, intermediarioDichiarazione, aggregatoPerFornitore, intermediarioDichiarazioneCondominio, dataDichiarazione, tipoOperazione, tipoStampa, anno, azienda, templateFrontespizio, templatePercipiente, templateDatiLavoratoreAutonomo)); // ============================================================================================= // Merge dei moduli // ============================================================================================= var stream = new MemoryStream(); var doc = new PdfMerge(); foreach (var pageByte in pageBytes) { doc.AddDocument(pageByte); } doc.Merge(stream, true); bytes = new byte[stream.Length]; stream.Seek(0, SeekOrigin.Begin); stream.Read(bytes, 0, bytes.Length); stream.Close(); return new ResultCreazioneFile(bytes, message); } catch (Exception ex) { _log.ErrorFormat("Errore inaspettato durante la creazione del file per il modello CU - {0} - anno:{1} - azienda:{2}", ex, Library.Utility.GetMethodDescription(), anno, azienda); message = "Si sono verificati problemi inaspettati durante la generazione del modello CU." + Environment.NewLine + "Controllare il log per ulteriori dettagli."; return new ResultCreazioneFile(bytes, message); } } return new ResultCreazioneFile(null, $"Il modulo per l'anno {annoModulo} non è ancora disponibile"); }
public ResultCreazioneFile GetModelloCertificazioneUnicaPDF(int anno, IList<DatiCertificazioneDTO> datiCertificazione, DateTime dataDichiarazione, bool aggregatoPerFornitore, bool ordinatoPerFornitore, bool intermediarioDichiarazioneCondominio, PersonaDTO firmatarioDichiarazione, PersonaDTO intermediarioDichiarazione, TipoOperazioneFiscale tipoOperazione, TipoStampaModelloCU tipoStampa, UserInfo userinfo) { var windsorRep = new WindsorConfigRepository(); try { windsorRep.BeginTransaction(userinfo); var service = windsorRep.GetContainer(userinfo.Azienda).Resolve<IGestioneFiscaleModelloCUService>("gestionefiscalemodellocu.pdf"); var item = service.GetModello(userinfo.Azienda, anno, datiCertificazione, dataDichiarazione, intermediarioDichiarazioneCondominio, aggregatoPerFornitore, ordinatoPerFornitore, firmatarioDichiarazione, intermediarioDichiarazione, tipoOperazione, tipoStampa, null, null); windsorRep.Commit(); return item; } catch (Exception ex) { _log.ErrorFormat("Errore durante la generazione del modello CU - Certificazione Unica PDF - {0} - anno:{1} - dataDichiarazione:{2}", ex, Utility.GetMethodDescription(), anno, dataDichiarazione.ToShortDateString()); windsorRep.Rollback(); throw; } }