public string StornoPagamento(int idPagamento, int? idMovimentoBancario, decimal importo, DateTime dataRegistrazione) { var message = string.Empty; try { var pagamento = _daoFactory.GetPagamentoDao().GetById(idPagamento, false); pagamento.Stato = StatoSpesaEnum.Annullata; pagamento.ScadenzaRiferimento.Stato = StatoSpesaEnum.Autorizzata; pagamento.ScadenzaRiferimento.ImportoAutorizzato = pagamento.Importo; if (pagamento.RitenutaAcconto != null) pagamento.RitenutaAcconto.Stato = StatoRitenutaEnum.Stornata; var movimentoPatrimoniale = _movimentiContabilitaService.SetMovimentiStornoPagamento(pagamento, importo, dataRegistrazione); // Evado il movimento contabile if (idMovimentoBancario != null) { var movimentoBancario = _daoFactory.GetMovimentoBancarioDao().GetById(idMovimentoBancario.Value, false); movimentoPatrimoniale.Stato = StatoMovimentoContabileEnum.Evaso; movimentoBancario.Stato = StatoMovimentoBancarioEnum.Contabilizzato; var evasione = new EvasioneBancaria(movimentoPatrimoniale.GetDescrizione(), null); movimentoPatrimoniale.EvasioneBancaria = evasione; movimentoBancario.EvasioneBancaria = evasione; _daoFactory.GetEvasioneBancariaDao().SaveOrUpdate(evasione); } } catch (Exception ex) { _log.ErrorFormat("Errore nell'aggiornamento dei pagamenti - {0} - pagamento:{1} - importo:{2:c} - dataRegistrazione:{3:d}", ex, Utility.GetMethodDescription(), idPagamento, importo, dataRegistrazione); throw; } return message; }
public AuthorizationMessages EvadiMovimento(string descrizione, IList<MovimentoContabile> movimentiContabili, IList<int> idMovimentiBancari, DateTime? dataRegistrazione, LogTransazione logTransazione) { var fatalMessage = string.Empty; var warnMessage = string.Empty; try { MovimentoBancario movimentoBancarioSingolo = null; var aggiornaDataRegistrazione = true; if (idMovimentiBancari.Count == 1) { movimentoBancarioSingolo = _daoFactory.GetMovimentoBancarioDao().GetById(idMovimentiBancari[0], false); if (dataRegistrazione == null) dataRegistrazione = movimentoBancarioSingolo.DataContabile; // ================================================================= // Controllo data registrazione // ================================================================= foreach (var movimentoContabile in movimentiContabili) { try { if (movimentoContabile != null) { var message = IsAllowDataRegistrazione(new List<int> { movimentoContabile.Testata.EsercizioRiferimento.CondominioRiferimento.ID }, movimentoContabile.Testata.EsercizioRiferimento, dataRegistrazione.GetValueOrDefault()); if (message.Count > 0) { aggiornaDataRegistrazione = false; _log.DebugFormat("Data di registrazione non valida - {0} - data:{1} - movimentoContabile:{2} - movimentoBancario:{3} - esercizio:{4}", Utility.GetMethodDescription(), movimentoBancarioSingolo.DataContabile.GetValueOrDefault(), movimentoContabile.ID, movimentoBancarioSingolo.ID, movimentoContabile.Testata.EsercizioRiferimento.ID); warnMessage += string.Format("La data di registrazione del movimento contabile non è stata aggiornata con la data del movimento bancario perchè la data {0:d} non è valida per l'esercizio {1}{2}", movimentoBancarioSingolo.DataContabile.GetValueOrDefault(), movimentoContabile.Testata.EsercizioRiferimento.DisplayName, Environment.NewLine); //warnMessage = message.Aggregate(fatalMessage, (current, mess) => current + (mess + Environment.NewLine)); } } } catch (Exception ex) { _log.ErrorFormat("Errore inaspettato durante il controllo della data di registrazione - {0} - descrizione:{1} - movimento:{2}", ex, Utility.GetMethodDescription(), descrizione, movimentoContabile.ID); fatalMessage = "Errore inaspettato durante la conferma del movimento contabile."; } } if (!string.IsNullOrEmpty(fatalMessage)) return new AuthorizationMessages(fatalMessage, warnMessage); } // ================================================================= // Nuovo oggetto Evasione Bancaria // ================================================================= var evasione = new EvasioneBancaria(descrizione, logTransazione); if (logTransazione == null) _daoFactory.GetEvasioneBancariaDao().SaveOrUpdate(evasione); // ================================================================= // Evasione di tutti i movimenti contabili // ================================================================= foreach (var movimentoContabile in movimentiContabili) { try { if (movimentoContabile != null) { movimentoContabile.EvasioneBancaria = evasione; if (movimentoBancarioSingolo != null) { if (aggiornaDataRegistrazione) { movimentoContabile.Testata.DataRegistrazione = dataRegistrazione; if (movimentoContabile.ID > 0) { // Se è associato un pagamento al movimento aggiorno la data di pagamento var pagamento = _daoFactory.GetPagamentoDao().GetByMovimentoContabile(movimentoContabile); if (pagamento != null) pagamento.Data = movimentoContabile.Testata.DataRegistrazione; // Se è associato un versamento condomino al movimento aggiorno la data di versamento var versamento = _daoFactory.GetVersamentoSoggettoDao().GetByMovimentoContabile(movimentoContabile); if (versamento != null) versamento.Data = movimentoContabile.Testata.DataRegistrazione.GetValueOrDefault(); } } } movimentoContabile.Stato = StatoMovimentoContabileEnum.Evaso; if (movimentoContabile.ID > 0) { var pag = _daoFactory.GetPagamentoDao().GetByMovimentoContabile(movimentoContabile); if (pag != null) { if (pag.TipoCodiceConfermaBonifico == TipoCodiceEsitoDisposizioneBonifico.Undefined) pag.TipoCodiceConfermaBonifico = TipoCodiceEsitoDisposizioneBonifico.MovimentoBancario; pag.Stato = StatoSpesaEnum.Evasa; } } } else { _log.ErrorFormat("Errore inaspettato durante la conferma del movimento contabile. Non è stato trovato il movimento - {0} - descrizione:{1} - movimento:{2}", Utility.GetMethodDescription(), descrizione, movimentoContabile.ID); fatalMessage = "Non è stato trovato il movimento contabile con id: " + movimentoContabile.ID + "." + Environment.NewLine + "Probabilmente è stato eliminato dall'utente in un'altra maschera."; } } catch (Exception ex) { _log.ErrorFormat("Errore inaspettato durante la conferma del movimento contabile - SINGOLO MOVIMENTO CONTABILE - {0} - descrizione:{1} - movimento:{2}", ex, Utility.GetMethodDescription(), descrizione, movimentoContabile.ID); fatalMessage = "Errore inaspettato durante la conferma del movimento contabile."; } } // ================================================================= // Evasione di tutti i movimenti bancari // ================================================================= foreach (var idMovimento in idMovimentiBancari) { try { var movimentoBancario = _daoFactory.GetMovimentoBancarioDao().Find(idMovimento, false); if (movimentoBancario != null) { movimentoBancario.EvasioneBancaria = evasione; movimentoBancario.Stato = StatoMovimentoBancarioEnum.Contabilizzato; } else { _log.ErrorFormat("Errore inaspettato durante la conferma del movimento bancario. Non è stato trovato il movimento - {0} - descrizione:{1} - movimento:{2}", Utility.GetMethodDescription(), descrizione, idMovimento); fatalMessage = "Non è stato trovato il movimento bancario con id: " + idMovimento; } } catch (Exception ex) { _log.ErrorFormat("Errore inaspettato durante la conferma del movimento Bancario - SINGOLO MOVIMENTO BANCARIO - {0} - descrizione:{1} - movimento:{2}", ex, Utility.GetMethodDescription(), descrizione, idMovimento); fatalMessage = "Errore inaspettato durante la conferma del movimento contabile."; } } } catch (Exception ex) { _log.ErrorFormat("Errore inaspettato durante la conferma della evasione bancaria - {0} - descrizione:{1} - movimento:{2}", ex, Utility.GetMethodDescription(), descrizione); fatalMessage = "Errore inaspettato durante la conferma della evasione bancaria."; } return new AuthorizationMessages(fatalMessage, warnMessage); }
public MovimentiBancariDTO SetContabilizzato(MovimentiBancariDTO movimentoDto, int? idMovimentoContabile) { try { var movimento = _daoFactory.GetMovimentoBancarioDao().GetById(movimentoDto.ID, false); movimento.Stato = StatoMovimentoBancarioEnum.Contabilizzato; movimentoDto.StatoMovimento = movimento.Stato; if (idMovimentoContabile != null) { var movimentoPatrimoniale = _daoFactory.GetMovimentoContabileDao().GetById(idMovimentoContabile.Value, false); movimentoPatrimoniale.Stato = StatoMovimentoContabileEnum.Evaso; var evasione = new EvasioneBancaria($"Evasione automatica del {DateTime.Today:d}", null); _daoFactory.GetEvasioneBancariaDao().SaveOrUpdate(evasione); movimentoPatrimoniale.EvasioneBancaria = evasione; movimento.EvasioneBancaria = evasione; } return movimentoDto; } catch (Exception ex) { _log.ErrorFormat("Errore inaspettato durante la contabilizzazione di un singolo movimento bancario - {0} - movimentoBnacario:{1} - movimentoContabile:{2}", ex, Utility.GetMethodDescription(), movimentoDto != null ? movimentoDto.ID.ToString(CultureInfo.InvariantCulture) : "<NULL>", idMovimentoContabile); throw; } }