public CBIEnvelPaymentRequest() { CBIPaymentRequest = new CBIPaymentRequest000400(); }
/// <summary> /// Crea il file per la disposizione dei bonifici in formato SEPA SCT /// Nel caso in cui siano presenti più debitori (Condomini) viene creato un file zip contenente tutte le disposizioni di bonifico /// </summary> /// <param name="disposizione">Oggetto contenente tutti i metadati dei bonifici</param> /// <param name="accorpate">Usato solo per i bonifici CBI</param> /// <param name="idModello">Usato solo per i pagamenti manuali</param> /// <param name="testataPerCondominio">Usato solo per i bonifici CBI</param> /// <param name="mittenteCondominio">Usato solo per i bonifici CBI</param> /// <returns></returns> public ResultPagamento EsecuzionePagamenti(Disposizione disposizione, bool accorpate, int? idModello, bool testataPerCondominio, bool mittenteCondominio) { string message; try { var documentInfo = new DocumentInfo(); message = IsAllowPagamento(disposizione.Pagamenti.Select(item => item.ScadenzaRiferimento.ID).ToList(), true); if (string.IsNullOrEmpty(message)) { var pagamenti = disposizione.Pagamenti.GroupBy(item => item.ScadenzaRiferimento.SpesaRiferimento.EsercizioRiferimento.CondominioRiferimento).ToList(); var stream = new MemoryStream(); ZipFile zipFile = null; var singleFileName = string.Empty; if (pagamenti.Count > 1) zipFile = new ZipFile(); foreach (var pagamentiGroupByCondominio in pagamenti) { try { var sepa = new CBIPaymentRequest000400 { PaymentInfo = getPaymentInfo(pagamentiGroupByCondominio.Key, pagamentiGroupByCondominio.ToList()), GroupHeader = getGroupHeader(pagamentiGroupByCondominio.ToList(), pagamentiGroupByCondominio.Key) }; var envelop = new CBIBdyPaymentRequest000400 { CBIEnvelPaymentRequest = { CBIPaymentRequest = sepa } }; var streamContent = Library.XML.SerializerHelper<CBIBdyPaymentRequest000400>.Serialize(envelop, new List<string> { "urn:CBI:xsd:CBIBdyPaymentRequest.00.04.00", "urn:CBI:xsd:CBIPaymentRequest.00.04.00" }); var fileName = ContabilitaHelper.GetFileName("Pagamenti", pagamentiGroupByCondominio.Key); if (zipFile != null) { streamContent.Seek(0, SeekOrigin.Begin); zipFile.AddEntry($"{fileName}.xml", streamContent); } else { stream = (MemoryStream)streamContent; singleFileName = fileName; } } catch (Exception ex) { _log.ErrorFormat("Errore inaspettato durante la creazione del file CBI dei bonifici - SINGOLO CONDOMINIO - {0} - condominio:{1} - modello:{2} - disposizione:{3} - azienda:{4}", ex, Library.Utility.GetMethodDescription(), pagamentiGroupByCondominio.Key.ID, idModello, disposizione.ID, disposizione.Azienda.ID); throw; } } if (zipFile != null) { documentInfo.FileName = ContabilitaHelper.GetFileName("Pagamenti", null); documentInfo.FileExtension = ".zip"; zipFile.Save(stream); var documentMessages = _documentService.SaveDocument(stream.ToArray(), documentInfo.FileName, documentInfo.FileExtension, null, disposizione.Azienda.ID); var documento = new Documento(documentMessages.Documento.Checksum, documentInfo.FileName, documentInfo.FileExtension, "DisposizioneBonifico", false, disposizione.Azienda); _daoFactory.GetDocumentoDao().Save(documento); disposizione.Documento = documento; documentInfo.Body = stream.ToArray(); zipFile.Dispose(); } else { documentInfo.Body = stream.ToArray(); documentInfo.FileName = singleFileName; documentInfo.FileExtension = ".xml"; disposizione.ContenutoFile = Library.Conversione.ToString(documentInfo.Body); } stream.Close(); stream.Dispose(); } return new ResultPagamento(message, documentInfo, null); } catch (Exception ex) { _log.ErrorFormat("Errore inaspettato durante la creazione del file CBI dei bonifici - {0} - modello:{1} - disposizione:{2} - azienda:{3}", ex, Library.Utility.GetMethodDescription(), idModello, disposizione.ID, disposizione.Azienda.ID); message = "Si sono verificati problemi inaspettati durante la creazione del file CBI dei bonifici." + Environment.NewLine + "Controllare il log per ulteriori dettagli."; return new ResultPagamento(message, new DocumentInfo(), null); } }