/* private decimal getImportoDataPagare(ScadenzaFattura scadenza) { decimal importo = scadenza.SpesaRiferimento.ImportoLordo - scadenza.SpesaRiferimento.ImportoRitenuta.GetValueOrDefault() + scadenza.SpesaRiferimento.AltreSpeseEsenti.GetValueOrDefault(); return scadenza.Pagamenti.Aggregate(importo, (current, pagamento) => current - pagamento.Importo.GetValueOrDefault()); } */ public ResultPagamento CreatePagamenti(IList<DisposizionePagamentoDTO> lista, string descrizione, TipoPagamentoFatturaEnum tipo, bool invio, string tipoConto, int? idModello, bool testataPerCondominio, bool mittenteCondominio, int idAzienda) { // ================================ // Controllo Pagamenti // ================================ var message = string.Empty; foreach (var dto in lista) { var scadenza = _daoFactory.GetScadenzaFatturaDao().Find(dto.IdScadenza.GetValueOrDefault(), false); if (scadenza != null) { decimal importoRitenutaDaPagare = 0; if (scadenza.SpesaRiferimento.Detrazione > 0) importoRitenutaDaPagare = scadenza.ImportoRitenuta.GetValueOrDefault(); if (dto.ImportoPagamento > (scadenza.Importo.GetValueOrDefault() + importoRitenutaDaPagare) - scadenza.ImportoPagato) message += string.Format("Per la spesa: {0} l'importo del pagamento è superiore al residuo da pagare", _archiviazioneOtticaService.GetIdentificativoArchiviazione(scadenza.SpesaRiferimento)); } } // ================================ // Esecuzione Pagamenti // ================================ if (string.IsNullOrEmpty(message)) { DateTime? dataDisposizione = DateTime.Today; var tipoDataPagamento = DataPagamentoEnum.Today; if (tipo == TipoPagamentoFatturaEnum.Manuale) { tipoDataPagamento = DataPagamentoEnum.Custom; if (lista.Count > 0) dataDisposizione = lista[0].DataPagamento; } var disposizione = new Disposizione(descrizione, dataDisposizione, _daoFactory.GetAziendaDao().GetById(idAzienda, false), null); _daoFactory.GetDisposizioneDao().SaveOrUpdate(disposizione); createPagamenti(disposizione, lista, StatoSpesaEnum.Pagata, tipoDataPagamento, tipo, null); var result = new ResultPagamento(null, new DocumentInfo(), null); if (invio) result = _esecuzionePagamento.EsecuzionePagamenti(disposizione, false, idModello, testataPerCondominio, mittenteCondominio); if ((result.DocumentInfo.Body != null && string.IsNullOrEmpty(result.Message)) || !_esecuzionePagamento.IsNecessaryFile || !invio) { _movimentiContabilitaService.SetMovimentiPagamenti(disposizione, tipoConto, null); return result; } _persistenceContext.RollbackAndCloseSession(Security.Login.Instance.CurrentLogin().LoginName); _persistenceContext.BeginTransaction(Security.Login.Instance.CurrentLogin().LoginName, IsolationLevel.ReadUncommitted); return new ResultPagamento(result.Message, new DocumentInfo(), null); } _persistenceContext.RollbackAndCloseSession(Security.Login.Instance.CurrentLogin().LoginName); _persistenceContext.BeginTransaction(Security.Login.Instance.CurrentLogin().LoginName, IsolationLevel.ReadUncommitted); return new ResultPagamento(message, new DocumentInfo(), null); }
public ResultPagamento CreatePagamenti(BindingList<DisposizionePagamentoDTO> pagamenti, string descrizione, TipoBonificoEnum tipoBonifico, bool invio, string tipoConto, int? idModello, bool testataPerCondominio, bool mittenteCondominio, UserInfo userinfo) { var retryCount = 5; var success = false; var windsorRep = new WindsorConfigRepository(); var item = new ResultPagamento(); while (retryCount >= 0 && !success) { try { windsorRep.BeginTransaction(userinfo); IPagamentoService pagamentoService = null; TipoPagamentoFatturaEnum tipo = TipoPagamentoFatturaEnum.Undefined; if (tipoBonifico == TipoBonificoEnum.CBI) { pagamentoService = windsorRep.GetContainer(userinfo.Azienda).Resolve<IPagamentoService>("pagamentoService.CBI"); tipo = TipoPagamentoFatturaEnum.CBI; tipoConto = "B"; invio = true; } else if (tipoBonifico == TipoBonificoEnum.SEPA) { pagamentoService = windsorRep.GetContainer(userinfo.Azienda).Resolve<IPagamentoService>("pagamentoService.SEPA"); tipo = TipoPagamentoFatturaEnum.SEPA; tipoConto = "B"; invio = true; } else if (tipoBonifico == TipoBonificoEnum.Manuale) { pagamentoService = windsorRep.GetContainer(userinfo.Azienda).Resolve<IPagamentoService>("pagamentoService.Manuale"); tipo = TipoPagamentoFatturaEnum.Manuale; } if (pagamentoService != null) { item = pagamentoService.CreatePagamenti(pagamenti, descrizione, tipo, invio, tipoConto, idModello, testataPerCondominio, mittenteCondominio, userinfo.Azienda); windsorRep.Commit(); } success = true; } catch (Exception ex) { _log.ErrorFormat("Errore nella creazione dei pagamenti - TENTATIVO:{0} - {1} - descrizione:{2} - azienda:{3}", ex, (6 - retryCount), Utility.GetMethodDescription(), descrizione, userinfo.Azienda + " - number:" + getExceptionId(ex), ex); windsorRep.Rollback(); if (!isRetryException(ex)) throw; // Add delay here if you wish. System.Threading.Thread.Sleep(1000 * (6 - retryCount)); retryCount--; _log.InfoFormat("Creazione dei pagamenti - INIZIO TENTATIVO:{0} - {1} - descrizione:{2} - azienda:{3}", (6 - retryCount), Utility.GetMethodDescription(), descrizione, userinfo.Azienda); } } if (!success) windsorRep.Rollback(); return item; }