public string RimozioneAutorizzazione(DisposizionePagamentoDTO pagamento) { if (pagamento.IdPagamento > 0 || pagamento.IdScadenza > 0) { var result = GetServiceClient().RimozioneAutorizzazionePagamentoFattura(pagamento.IdPagamento, pagamento.IdScadenza.GetValueOrDefault(), GetUserInfo()); CloseService(); return result; } return string.Empty; }
private void listaMouseUp(object sender, MouseEventArgs e) { _pagamentoClick = null; if (e.Button == MouseButtons.Right) { _pagamentoClick = DataGridHelper.GetCellEvent<DisposizionePagamentoDTO>(lista, e); if (_pagamentoClick != null) contextMenuStrip1.Show(lista, e.X, e.Y); } }
private void apriSpesa(DisposizionePagamentoDTO item) { if (item != null) { if (item.IdSpesa > 0) { CondominioDTO condominio = getCondominioService().GetById(item.IdCondominio, true); EsercizioDTO esercizio = getEsercizioService().GetById(item.IdEsercizio); if (item.StatoSpesa == Sfera.Enums.StatoSpesaEnum.PagataAltroAmministratore) { var form = getDettaglioSpesaService().GetFormDettaglioFiscale(item.IdSpesa.GetValueOrDefault()); var parentForm = ParentForm; if (parentForm != null) form.MdiParent = parentForm.MdiParent; form.Show(); } else if (item.TipoDocumento.ToUpper() == Decodifica.Instance.GetElement("TipoDocumentoContabile", "BOLLETTA").Descrizione.ToUpper()) { var service = ResolveComponent<IDettaglioBollettaUI>(); Form form = service.GetFormDettaglio(item.IdSpesa.GetValueOrDefault(), condominio, esercizio); if (!form.IsDisposed) { var parentForm = ParentForm; if (parentForm != null) form.MdiParent = parentForm.MdiParent; form.Show(); } } else if (item.TipoDocumento.ToUpper() == Decodifica.Instance.GetElement("TipoDocumentoContabile", "FATBILAPP").Descrizione.ToUpper()) { var service = ResolveComponent<IBilancioAperturaUI>(); var form = service.GetFormDettaglio(condominio, esercizio); var parentForm = ParentForm; if (parentForm != null) form.MdiParent = parentForm.MdiParent; form.Show(); } else if (item.TipoDocumento.ToUpper() == Decodifica.Instance.GetElement("TipoDocumentoContabile", "NOTACC").Descrizione.ToUpper() && item.StatoSpesa == Sfera.Enums.StatoSpesaEnum.Stornata) { Form form = getDettaglioSpesaService().GetFormNotaAccredito(item.IdSpesa.GetValueOrDefault(), condominio, esercizio); var parentForm = ParentForm; if (parentForm != null) form.MdiParent = parentForm.MdiParent; form.Show(); } else { Form form = getDettaglioSpesaService().GetFormDettaglio(item.IdSpesa.GetValueOrDefault()); var parentForm = ParentForm; if (parentForm != null) form.MdiParent = parentForm.MdiParent; form.Show(); } } } }
private void apriSpesa(DisposizionePagamentoDTO item) { try { if (item?.IdSpesa > 0) { var condominio = getCondominioService().GetById(item.IdCondominio, true); var esercizio = getEsercizioService().GetById(item.IdEsercizio); if (item.StatoSpesa == StatoSpesaEnum.PagataAltroAmministratore) { var form = getDettaglioSpesaService().GetFormDettaglioFiscale(item.IdSpesa.GetValueOrDefault()); if (ParentForm != null) form.MdiParent = ParentForm.MdiParent; form.Show(); } else if (item.TipoDocumento.ToUpper() == Decodifica.Instance.GetElement("TipoDocumentoContabile", "BOLLETTA").Descrizione.ToUpper()) { var service = ResolveComponent<IDettaglioBollettaUI>(); var form = service.GetFormDettaglio(item.IdSpesa.GetValueOrDefault(), condominio, esercizio); if (ParentForm != null) form.MdiParent = ParentForm.MdiParent; form.Show(); } else if (item.TipoDocumento.ToUpper() == Decodifica.Instance.GetElement("TipoDocumentoContabile", "FATBILAPP").Descrizione.ToUpper()) { var service = ResolveComponent<IBilancioAperturaUI>(); var form = service.GetFormDettaglio(condominio, esercizio); if (ParentForm != null) form.MdiParent = ParentForm.MdiParent; form.Show(); } else if (item.TipoDocumento.ToUpper() == Decodifica.Instance.GetElement("TipoDocumentoContabile", "NOTACC").Descrizione.ToUpper() && item.StatoSpesa == StatoSpesaEnum.Stornata) { var form = getDettaglioSpesaService().GetFormNotaAccredito(item.IdSpesa.GetValueOrDefault(), condominio, esercizio); if (ParentForm != null) form.MdiParent = ParentForm.MdiParent; form.Show(); } else { var form = getDettaglioSpesaService().GetFormDettaglio(item.IdSpesa.GetValueOrDefault()); if (!form.IsDisposed) { if (ParentForm != null) form.MdiParent = ParentForm.MdiParent; form.Show(); } } } } catch (Exception ex) { _log.ErrorFormat("Errore nell'apertura del pagamento - {0} - pagamento:{1} - azienda:{2}", ex, Utility.GetMethodDescription(), item?.IdPagamento.ToString() ?? "<NULL>", Security.Login.Instance.CurrentLogin().Azienda); throw; } }
public string CreatePagamentiImmediati(Spesa spesa, IList<ScadenzaFatturaDTO> scadenze, LogTransazione logTransazione) { try { var anomalie = string.Empty; var scadenzePagate = (scadenze.Where(scad => scad.IdContoPagamentoScadenza != null && !string.IsNullOrEmpty(scad.Stato))).ToList(); // ============================================================ // Controllo Pagamenti // ============================================================ anomalie = (from dto in scadenzePagate let scadenza = _daoFactory.GetScadenzaFatturaDao().Find(dto.ID, false) where scadenza != null where dto.Importo > scadenza.Importo.GetValueOrDefault() - scadenza.ImportoPagato select scadenza).Aggregate(anomalie, (current, scadenza) => current + ("Per la spesa: " + _archiviazioneOtticaService.GetIdentificativoArchiviazione(scadenza.SpesaRiferimento) + " l'importo del pagamento è superiore al residuo da pagare")); // ============================================================ // Esecuzione Pagamenti // ============================================================ if (string.IsNullOrEmpty(anomalie) && scadenzePagate.Any()) { AnnullamentoPagamentiSpesa(spesa.ID); var descrizione = "Pagamento Immediato"; if (spesa.NumeroDocumento != null) descrizione += $" Fatt. n. {spesa.NumeroDocumento}"; if (spesa.DataDocumento != null) descrizione += $" del {spesa.DataDocumento.Value:d}"; // Per avere un cascade corretto dell'oggetto ScadenzaFattura la disposizione di pagamento viene collegata allo stesso // logtransazione del file d'importazione diverso dal log di transazione della spesa var logTransazioneDisposizione = logTransazione; if (spesa.FileImportazione != null && spesa.FileImportazione.LogTransazione != null) logTransazioneDisposizione = spesa.FileImportazione.LogTransazione; var disposizione = new Disposizione(descrizione, DateTime.Now, spesa.EsercizioRiferimento.CondominioRiferimento.Azienda, logTransazioneDisposizione); if (logTransazione == null) _daoFactory.GetDisposizioneDao().SaveOrUpdate(disposizione); var lista = new List<DisposizionePagamentoDTO>(spesa.Scadenze.Count); var index = 0; foreach (var scadenzaDto in scadenzePagate) { try { var scadenza = _daoFactory.GetScadenzaFatturaDao().Find(scadenzaDto.ID, false); // Per le scadenze create dall'importazione bollette l'ID della scadenza è valorizzato solo alla fine if (scadenza == null) { if (spesa.FileImportazione != null && scadenzePagate.Count == spesa.Scadenze.Count) scadenza = spesa.Scadenze.ToList()[index]; } if (scadenza != null && scadenza.SpesaRiferimento != null && scadenza.SpesaRiferimento.EsercizioRiferimento != null && scadenza.SpesaRiferimento.EsercizioRiferimento.CondominioRiferimento != null) { var dto = new DisposizionePagamentoDTO { DataDocumento = spesa.DataDocumento, DataScadenza = scadenza.Scadenza, Detrazione = spesa.Detrazione, IdScadenza = scadenza.ID, ImportoAutorizzato = scadenza.Importo, ImportoPagamento = scadenza.Importo.GetValueOrDefault(), ImportoPagato = 0, ImportoRitenuta = scadenza.ImportoRitenuta, ImportoScadenza = scadenza.Importo, IdSpesa = scadenza.SpesaRiferimento.ID, NumeroDocumento = spesa.NumeroDocumento, Selezionabile = true, Valuta = scadenza.Scadenza, IdConto = scadenzaDto.IdContoPagamentoScadenza, IdSottoConto = scadenzaDto.IdSottoContoPagamentoScadenza, DataPagamentoRitenuta = scadenzaDto.DataPagamentoRitenuta, IdEsercizio = scadenza.SpesaRiferimento.EsercizioRiferimento.ID, IdCondominio = scadenza.SpesaRiferimento.EsercizioRiferimento.CondominioRiferimento.ID, ImponibileSpesa = scadenza.SpesaRiferimento.Imponibile, IdentificativoArchiviazioneOttica = _archiviazioneOtticaService.GetIdentificativoArchiviazione(scadenza.SpesaRiferimento, true), StatoSpesa = scadenza.SpesaRiferimento.Stato }; if (scadenza.SpesaRiferimento.EsercizioRiferimento.CondominioRiferimento.DatiBancariPrincipale != null) { dto.Abi = scadenza.SpesaRiferimento.EsercizioRiferimento.CondominioRiferimento.DatiBancariPrincipale.Abi; dto.Cab = scadenza.SpesaRiferimento.EsercizioRiferimento.CondominioRiferimento.DatiBancariPrincipale.Cab; } if (scadenza.SpesaRiferimento.EsercizioRiferimento.CondominioRiferimento.Responsabile != null) dto.ResponsabileCondominio = scadenza.SpesaRiferimento.EsercizioRiferimento.CondominioRiferimento.Responsabile.DisplayName; if (scadenza.SpesaRiferimento.EsercizioRiferimento.CondominioRiferimento.ResponsabileContabilita != null) dto.ResponsabileContabilita = scadenza.SpesaRiferimento.EsercizioRiferimento.CondominioRiferimento.ResponsabileContabilita.DisplayName; dto.Contestata = scadenza.SpesaRiferimento.Contestata; if (scadenza.SpesaRiferimento.Sinistro > 0) dto.Sinistro = true; lista.Add(dto); } else _log.WarnFormat("ATTENZIONE: Anomalia nel tentativo di creare i pagamenti immediati - {0} - scadenza:{1} - spesa:{2}", Utility.GetMethodDescription(), scadenza != null ? scadenza.ID.ToString() : "<NULL>", spesa.ID); index++; } catch (Exception ex) { _log.ErrorFormat("Errore nella creazione dei pagamenti immediati - SINGOLA SCADENZA - {0} - data:{1} - importo:{2:c} - conto:{3} - sottoconto:{4}", ex, Utility.GetMethodDescription(), scadenzaDto.ID, scadenzaDto.IdContoPagamentoScadenza, scadenzaDto.IdSottoContoPagamentoScadenza); throw; } } createPagamenti(disposizione, lista, StatoSpesaEnum.Pagata, DataPagamentoEnum.Scadenza, TipoPagamentoFatturaEnum.Immediato, spesa.Scadenze.ToList()); // Movimenti Contabili _movimentiContabilitaService.SetMovimentiPagamenti(disposizione, null, logTransazione); } return anomalie; } catch (Exception ex) { _log.ErrorFormat("Errore nella creazione dei pagamenti immediati - {0} - spesa:{1}", ex, Utility.GetMethodDescription(), spesa.ID); throw; } }
private List<DisposizionePagamentoDTO> convertScadenzeToDto(IEnumerable<ScadenzaFattura> scadenze, bool detraibile, bool daAutorizzare) { // TODO: Per migliorare le prestazioni utilizzare un NHIbernate Projection: http://elegantcode.com/2007/11/06/dtos-presentation-model-and-icriteria/ try { var lista = new List<DisposizionePagamentoDTO>(); foreach (var scadenza in scadenze) { try { if (daAutorizzare || scadenza.ImportoAutorizzato > 0) { var dispPag = new DisposizionePagamentoDTO { IdSpesa = scadenza.SpesaRiferimento.ID, DataDocumento = scadenza.SpesaRiferimento.DataDocumento, DataScadenza = scadenza.Scadenza, Detrazione = scadenza.SpesaRiferimento.Detrazione, IdCondominio = scadenza.SpesaRiferimento.EsercizioRiferimento.CondominioRiferimento.ID, Condominio = scadenza.SpesaRiferimento.EsercizioRiferimento.CondominioRiferimento.DisplayName, IdEsercizio = scadenza.SpesaRiferimento.EsercizioRiferimento.ID, Esercizio = scadenza.SpesaRiferimento.EsercizioRiferimento.DisplayName, Fornitore = scadenza.SpesaRiferimento.FornitoreRiferimento.DisplayName, IdScadenza = scadenza.ID, ImportoPagato = scadenza.ImportoPagato, ImportoAutorizzato = scadenza.ImportoAutorizzato, NumeroDocumento = scadenza.SpesaRiferimento.NumeroDocumento, TipoDocumento = Decodifica.Instance.GetElement("TipoDocumentoContabile", scadenza.SpesaRiferimento.TipoDocumento).Descrizione, Stato = Decodifica.Instance.GetElement("StatoSpesa", scadenza.Stato.ToString()).Descrizione, Valuta = DateTime.Today, IdentificativoArchiviazioneOttica = _archiviazioneOtticaService.GetIdentificativoArchiviazione(scadenza.SpesaRiferimento, true), Contestata = scadenza.SpesaRiferimento.Contestata, StatoSpesa = scadenza.SpesaRiferimento.Stato, ImponibileSpesa = scadenza.SpesaRiferimento.Imponibile }; // ----------------------------------------------------------------------------------------------------------- // Se la spesa è soggetta a ritenuta deve essere versato al fornitore l'importo comprensivo di ritenuta // Se per la scadenza è previsto il versamento della ritenuta totale al primo pagamento occorre sempre // proporre l'importo residuo della ritenuta. // ----------------------------------------------------------------------------------------------------------- var importoRitenuta = scadenza.PagamentoCompletoRitenuta ? scadenza.GetImportoRitenutaResiduo() : Common.ContabilitaHelper.GetImportoRitenuta(scadenza.SpesaRiferimento, dispPag.ImportoAutorizzato).GetValueOrDefault(); var importoDaPagare = scadenza.Importo - scadenza.ImportoPagato; if (scadenza.SpesaRiferimento.Detrazione.GetValueOrDefault() == 0) { dispPag.ImportoScadenza = scadenza.Importo; dispPag.ImportoDaPagare = importoDaPagare; dispPag.ImportoRitenuta = importoRitenuta; } else { importoRitenuta = Common.ContabilitaHelper.GetImportoRitenuta(scadenza.SpesaRiferimento, importoDaPagare).GetValueOrDefault(); dispPag.ImportoScadenza = scadenza.Importo + importoRitenuta; dispPag.ImportoDaPagare = scadenza.Importo + importoRitenuta - scadenza.ImportoPagato; } if (scadenza.SpesaRiferimento.EsercizioRiferimento.CondominioRiferimento.DatiBancariPrincipale != null) { dispPag.Abi = scadenza.SpesaRiferimento.EsercizioRiferimento.CondominioRiferimento.DatiBancariPrincipale.Abi; dispPag.Cab = scadenza.SpesaRiferimento.EsercizioRiferimento.CondominioRiferimento.DatiBancariPrincipale.Cab; } if (scadenza.SpesaRiferimento.EsercizioRiferimento.CondominioRiferimento.Responsabile != null) dispPag.ResponsabileCondominio = scadenza.SpesaRiferimento.EsercizioRiferimento.CondominioRiferimento.Responsabile.DisplayName; if (scadenza.SpesaRiferimento.EsercizioRiferimento.CondominioRiferimento.ResponsabileContabilita != null) dispPag.ResponsabileContabilita = scadenza.SpesaRiferimento.EsercizioRiferimento.CondominioRiferimento.ResponsabileContabilita.DisplayName; if (scadenza.SpesaRiferimento.Sinistro > 0) dispPag.Sinistro = true; if (scadenza.SpesaRiferimento.FornitoreRiferimento.ModalitaPagamento != null) dispPag.IdModalitaPagamento = scadenza.SpesaRiferimento.FornitoreRiferimento.ModalitaPagamento.ID; var pagAutorizzato = scadenza.Pagamenti.FirstOrDefault(pag => pag.Stato == StatoSpesaEnum.Autorizzata); if (pagAutorizzato != null) { dispPag.IdPagamento = pagAutorizzato.ID; dispPag.ImportoPagamento = pagAutorizzato.Importo.Value; dispPag.DataPagamento = pagAutorizzato.Data; if (pagAutorizzato.ModalitaPagamento != null) dispPag.IdModalitaPagamento = pagAutorizzato.ModalitaPagamento.ID; if (pagAutorizzato.RitenutaAcconto != null) dispPag.ImportoRitenuta = scadenza.PagamentoCompletoRitenuta ? scadenza.GetImportoRitenutaResiduo() : Common.ContabilitaHelper.GetImportoRitenuta(scadenza.SpesaRiferimento, dispPag.ImportoPagamento); } // ============================================= // Validazioni // ============================================= dispPag.Selezionabile = true; if (scadenza.SpesaRiferimento.Contestata) { dispPag.Selezionabile = false; dispPag.ErroreNonSelezionabile = "La fattura " + scadenza.SpesaRiferimento.NumeroDocumento + " del " + scadenza.SpesaRiferimento.DataDocumento.GetValueOrDefault().ToShortDateString() + " è CONTESTATA"; } if (!daAutorizzare && !detraibile && !(!detraibile && (dispPag.Detrazione == null || dispPag.Detrazione == 0))) { dispPag.Selezionabile = false; dispPag.ErroreNonSelezionabile = "La fattura " + scadenza.SpesaRiferimento.NumeroDocumento + " del " + scadenza.SpesaRiferimento.DataDocumento.GetValueOrDefault().ToShortDateString() + " è DETRAIBILE con detrazione del " + dispPag.Detrazione.GetValueOrDefault() + "%"; } // ------------------------------------------ // Solo per bonifici tramite CBI // ------------------------------------------ if (!detraibile && !daAutorizzare) { if (scadenza.SpesaRiferimento.EsercizioRiferimento.CondominioRiferimento.DatiBancariPrincipale == null) { dispPag.Selezionabile = false; dispPag.ErroreNonSelezionabile = "Per il condominio '" + scadenza.SpesaRiferimento.EsercizioRiferimento.CondominioRiferimento.DisplayName + "' non è presente nessuna banca principale"; } // Deve essere presente o l'IBAN o tutti i singoli campi che definiscono il conto corrente if (string.IsNullOrEmpty(scadenza.SpesaRiferimento.FornitoreRiferimento.PersonaRiferimento.Iban)) { if (string.IsNullOrEmpty(scadenza.SpesaRiferimento.FornitoreRiferimento.PersonaRiferimento.Abi)) { dispPag.Selezionabile = false; dispPag.ErroreNonSelezionabile = "Per il fornitore '" + scadenza.SpesaRiferimento.FornitoreRiferimento.DisplayName + "' non è presente il codice ABI."; } else if (scadenza.SpesaRiferimento.FornitoreRiferimento.PersonaRiferimento.Abi.Length > 5) { dispPag.Selezionabile = false; dispPag.ErroreNonSelezionabile = "Per il fornitore '" + scadenza.SpesaRiferimento.FornitoreRiferimento.DisplayName + "' il codice ABI non è corretto è più lungo di 5 caratteri."; } if (string.IsNullOrEmpty(scadenza.SpesaRiferimento.FornitoreRiferimento.PersonaRiferimento.Cab)) { dispPag.Selezionabile = false; dispPag.ErroreNonSelezionabile = "Per il fornitore '" + scadenza.SpesaRiferimento.FornitoreRiferimento.DisplayName + "' non è presente il codice CAB."; } else if (scadenza.SpesaRiferimento.FornitoreRiferimento.PersonaRiferimento.Cab.Length > 5) { dispPag.Selezionabile = false; dispPag.ErroreNonSelezionabile = "Per il fornitore '" + scadenza.SpesaRiferimento.FornitoreRiferimento.DisplayName + "' il codice CAB non è corretto è più lungo di 5 caratteri."; } if (string.IsNullOrEmpty(scadenza.SpesaRiferimento.FornitoreRiferimento.PersonaRiferimento.ContoCorrente)) { dispPag.Selezionabile = false; dispPag.ErroreNonSelezionabile = "Per il fornitore '" + scadenza.SpesaRiferimento.FornitoreRiferimento.DisplayName + "' non è presente il CONTO CORRENTE."; } else if (scadenza.SpesaRiferimento.FornitoreRiferimento.PersonaRiferimento.ContoCorrente.Length > 12) { dispPag.Selezionabile = false; dispPag.ErroreNonSelezionabile = "Per il fornitore '" + scadenza.SpesaRiferimento.FornitoreRiferimento.DisplayName + "' il CONTO CORRENTE non è corretto è più lungo di 12 caratteri."; } if (string.IsNullOrEmpty(scadenza.SpesaRiferimento.FornitoreRiferimento.PersonaRiferimento.Cin)) { dispPag.Selezionabile = false; dispPag.ErroreNonSelezionabile = "Per il fornitore '" + scadenza.SpesaRiferimento.FornitoreRiferimento.DisplayName + "' non è presente il codice CIN."; } else if (scadenza.SpesaRiferimento.FornitoreRiferimento.PersonaRiferimento.Cin.Length > 1) { dispPag.Selezionabile = false; dispPag.ErroreNonSelezionabile = "Per il fornitore '" + scadenza.SpesaRiferimento.FornitoreRiferimento.DisplayName + "' il codice CIN non è corretto è più lungo di 1 carattere."; } } else { var coord = new Library.BusinessData.CoordinateBancarie(); coord.SetIBAN(scadenza.SpesaRiferimento.FornitoreRiferimento.PersonaRiferimento.Iban); scadenza.SpesaRiferimento.FornitoreRiferimento.PersonaRiferimento.Abi = coord.Abi; scadenza.SpesaRiferimento.FornitoreRiferimento.PersonaRiferimento.Cab = coord.Cab; scadenza.SpesaRiferimento.FornitoreRiferimento.PersonaRiferimento.ContoCorrente = coord.ContoCorrente; scadenza.SpesaRiferimento.FornitoreRiferimento.PersonaRiferimento.Cin = coord.Cin; } } lista.Add(dispPag); } } catch (Exception ex) { _log.ErrorFormat("Errore nel recupero delle scadenze da autorizzazione di eliminazione di un pagamento - SINGOLA SCADENZA - {0} - scadenza:{1} - detraibile:{2} - daAutorizzare:{3}", ex, Utility.GetMethodDescription(), scadenza.ID, detraibile, daAutorizzare); throw; } } return lista; } catch (Exception ex) { _log.ErrorFormat("Errore nel recupero delle scadenze da autorizzazione di eliminazione di un pagamento - {0} - detraibile:{1} - daAutorizzare:{2}", ex, Utility.GetMethodDescription(), detraibile, daAutorizzare); throw; } }