private void setImporto(string keyTributo, decimal importo, int progressivoTributo, DatiModelloF24 dati) { var tributo = keyTributo.Split('¥'); switch (progressivoTributo) { case 1: dati.ImportoADebito01 = importo.ToString("#0.00"); dati.CodiceTributo01 = tributo[0]; dati.PeriodoRiferimento01 = tributo[1].Substring(4, 2).PadLeft(4, '0'); dati.AnnoRiferimento01 = tributo[1].Substring(0, 4); break; case 2: dati.ImportoADebito02 = importo.ToString("#0.00"); dati.CodiceTributo02 = tributo[0]; dati.PeriodoRiferimento02 = tributo[1].Substring(4, 2).PadLeft(4, '0'); dati.AnnoRiferimento02 = tributo[1].Substring(0, 4); break; case 3: dati.ImportoADebito03 = importo.ToString("#0.00"); dati.CodiceTributo03 = tributo[0]; dati.PeriodoRiferimento03 = tributo[1].Substring(4, 2).PadLeft(4, '0'); dati.AnnoRiferimento03 = tributo[1].Substring(0, 4); break; case 4: dati.ImportoADebito04 = importo.ToString("#0.00"); dati.CodiceTributo04 = tributo[0]; dati.PeriodoRiferimento04 = tributo[1].Substring(4, 2).PadLeft(4, '0'); dati.AnnoRiferimento04 = tributo[1].Substring(0, 4); break; case 5: dati.ImportoADebito05 = importo.ToString("#0.00"); dati.CodiceTributo05 = tributo[0]; dati.PeriodoRiferimento05 = tributo[1].Substring(4, 2).PadLeft(4, '0'); dati.AnnoRiferimento05 = tributo[1].Substring(0, 4); break; case 6: dati.ImportoADebito06 = importo.ToString("#0.00"); dati.CodiceTributo06 = tributo[0]; dati.PeriodoRiferimento06 = tributo[1].Substring(4, 2).PadLeft(4, '0'); dati.AnnoRiferimento06 = tributo[1].Substring(0, 4); break; } }
public byte[] EsecuzionePagamenti(PagamentoRitenuta ritenuta, bool testataPerCondominio, bool mittenteCondominio, DateTime dataVersamento) { _testata = ritenuta; byte[] bytes = null; try { // ============================================================================================= // Compilo il modulo PDF // ============================================================================================= var modulo = RitenutaModuloPDFResources.ResourceManager.GetObject("F24_" + dataVersamento.Year); if (modulo != null) { var listaPagamenti = ordinaDisposizioni(new List<Pagamento>(_testata.Pagamenti)); // Per ogni condominio creo un modulo var moduliCondomini = new List<byte[]>(); foreach (var condominio in listaPagamenti.Keys) { var iban = condominio.DatiBancariPrincipale.Iban; if (!string.IsNullOrEmpty(iban) && iban.StartsWith("IT")) iban = iban.Substring(2); // Intestazione var datiF24 = new DatiModelloF24 { CodiceFiscaleCondominio = condominio.CodiceFiscale, ComuneCondominio = condominio.Indirizzo.Comune.Descrizione, IbanCondominio = iban, IndirizzoCondominio = condominio.Indirizzo.Indirizzo + condominio.Indirizzo.Civico, ProvinciaCondominio = condominio.Indirizzo.Comune.ProvinciaAppartenenza.Codice, DataVersamento = dataVersamento.ToShortDateString() }; if (dataVersamento.Year == 2014) datiF24.IbanCondominio = datiF24.IbanCondominio.Substring(2); var nomeCondominio = condominio.Descrizione; if (nomeCondominio.Length > 70) { datiF24.NomeCondominio = nomeCondominio.Substring(0, 70); datiF24.NomeCondominio2 = nomeCondominio.Substring(71); } else datiF24.NomeCondominio = nomeCondominio; // Dati Banca var banca = _daoFactory.GetAbiCabDao().GetByAbiCab(condominio.DatiBancariPrincipale.Abi, condominio.DatiBancariPrincipale.Cab); datiF24.NomeBancaDelega = banca.DescrizioneAbi; datiF24.NomeAgenziaDelega = banca.DescrizioneCab; datiF24.ProvinciaAgenziaDelega = banca.Provincia; var progressivoTributo = 0; var totaleDebito = 0m; var totaleCredito = 0m; foreach (var kvp in listaPagamenti[condominio]) { progressivoTributo++; decimal? importoADebito = (from pag in kvp.Value where pag.RitenutaAcconto.Importo != null && pag.RitenutaAcconto.Importo > 0 select pag).Sum(pag => Math.Round(pag.RitenutaAcconto.ImportoConInteressi, 2)); setImporto(kvp.Key, importoADebito.GetValueOrDefault(), progressivoTributo, datiF24); // Eventuali sanzioni var importoSanzione = kvp.Value.Sum(pag => Math.Round(pag.RitenutaAcconto.ImportoSanzione.GetValueOrDefault(), 2)); if (importoSanzione > 0) { progressivoTributo++; setImporto("8906¥" + kvp.Key.Split('¥')[1], importoSanzione, progressivoTributo, datiF24); } totaleDebito += importoADebito.GetValueOrDefault() + importoSanzione; } datiF24.TotaleImportoADebito = totaleDebito.ToString("#0.00"); datiF24.TotaleImporto = datiF24.TotaleImportoADebito; var xmlMappingFile = RitenutaModuloPDFResources.ResourceManager.GetObject(string.Format("F24_FieldMapping_{0}", dataVersamento.Year)); if (xmlMappingFile == null) xmlMappingFile = RitenutaModuloPDFResources.ResourceManager.GetObject("F24_FieldMapping"); moduliCondomini.Add(FillForm.FillStream(datiF24, (byte[])modulo, Library.Conversione.ToString(xmlMappingFile), false, true)); } // Merge di tutte le pagine if (moduliCondomini.Count > 0) { try { var pdfmerge = new PdfMerge(); bytes = pdfmerge.Merge(moduliCondomini, true); } catch (Exception ex) { _log.ErrorFormat("Errore nel merge dei moduli - {0} - ritenuta:{1} - azienda:{2}", ex, Library.Utility.GetMethodDescription(), ritenuta.ID, ritenuta.AziendaID); throw; } } } return bytes; } catch (Exception ex) { _log.ErrorFormat("Errore inaspettato durante la creazione del file CBI delle ritenute - F24. - {0} - ritenuta:{1}", ex, Library.Utility.GetMethodDescription(), ritenuta.ID); _notifier.Notify("Si sono verificati problemi inaspettati durante la creazione del file CBI delle ritenute - F24." + Environment.NewLine + "Controllare il log per ulteriori dettagli."); return bytes; } }