public bool Conferma() { var result = true; btnConferma.Focus(); setValidators(true); spesaValidationSummary.Validate(); if (spesaValidationSummary.IsValid) { // -------------------------------------------- // Controllo Data Registrazione // -------------------------------------------- var messageDataList = getMovimentoContabileService().IsAllowDataRegistrazione(new List<int>(1) {_condominio.ID}, _esercizio.ID, dataRegistrazione.DateTime); if(messageDataList.Count > 0) { var messageData = "La data di registrazione " + dataRegistrazione.DateTime + " non è ammessa:" + Environment.NewLine; messageData = messageDataList.Aggregate(messageData, (current, mess) => current + (mess + Environment.NewLine)); CommonMessages.DisplayWarning(messageData); return false; } // -------------------------------------------- // Controllo Data Scadenza se pagamento immediato // -------------------------------------------- if (_pagamentoImmediato) { var messaggiDataPagamento = new List<string>(); foreach (var scadenzaFatturaDTO in _spesa.Scadenze) { if (scadenzaFatturaDTO != null) { var messageData = getMovimentoContabileService().IsAllowDataPagamento(_condominio.ID, scadenzaFatturaDTO.Scadenza.GetValueOrDefault()); if (!string.IsNullOrEmpty(messageData)) messaggiDataPagamento.Add(messageData); } } if (messaggiDataPagamento.Count > 0) { var messageDataStr = messaggiDataPagamento.Aggregate(string.Empty, (current, mess) => current + (mess + Environment.NewLine)); CommonMessages.DisplayWarning(messageDataStr); return false; } } // -------------------------------------------- // Controllo sul numero fattura // -------------------------------------------- var messageAuth = _fatturaService.IsAllowNumeroFattura(_spesa); if (string.IsNullOrEmpty(messageAuth.FatalMessage)) { var resultNumeroFattura = DialogResult.Yes; if (!string.IsNullOrEmpty(messageAuth.WarnMessage)) resultNumeroFattura = CommonMessages.DisplayConfirm("ATTENZIONE il controllo sul numero fattura ha dato i seguenti risultati:" + Environment.NewLine + Environment.NewLine + messageAuth.WarnMessage + Environment.NewLine + Environment.NewLine + "Vuoi confermare l'inserimento della spesa?"); if (resultNumeroFattura == DialogResult.Yes) { RipartizioneSpeseDTO ripartizione; if (importoDettaglioSpesa.Value != 0) { _spesa.AltreSpese = altreSpeseDettaglio.Value; _spesa.AltreSpeseEsenti = altreSpeseEsenti.Value; _spesa.SpeseEsentiRitenuta = speseEsentiRitenuta.Value; _spesa.AliquotaRitenuta = (decimal?)aliquotaRitenuta.Value; _spesa.AliquotaCassaProfessionisti = (decimal?)cassaProfessionistiDettaglio.Value; _spesa.IsRitenutaCalcoloImponibile = ritenutaCalcolataImponibile.Checked; ripartizione = getCurrentRipartizione(); if (_isInserimento && modelloRipartizione.Value == null && ripartizioneDettaglio.Rows.Count > 1 && (ripartizione == null || string.IsNullOrEmpty(getCurrentRipartizione().NomeModello))) { var form = new SalvataggioModelloRegistrazioneContabile((List<ModelloRegistrazioneContabileDTO>)modelliContabiliBindingSource.DataSource, modelloRipartizione.Text, descrizioneDettaglio.Text); if (form.ShowDialog() != DialogResult.Cancel) { if (ripartizione == null) { ripartizione = new RipartizioneSpeseDTO { Testata = new TestataMovimentoContabileDTO {IdEsercizio = _esercizio.ID} }; setCurrentRipartizione(ripartizione); } ripartizione.NomeModello = form.Nome; ripartizione.DescrizioneVoceSpesa = form.DescrizioneVoceSpesa; ripartizione.AssociatoFornitore = form.AssociatoFornitore; } form.Dispose(); } // Se non sono ancora state caricate creo le scadenze if (scadenze.Rows.Count == 0) loadScadenzeTab(); } // Salvo i valori a video nell'oggetto DTO setDettaglioDataSource((DettaglioSpesaDTO)dettagliSpesa.ActiveTab.Tag, null); _spesa.IdFornitore = sceltaFornitore.SelectedFornitore.ID; _spesa.TipoDocumento = tipoDocumento.SelectedItem.DataValue.ToString(); _spesa.DataRegistrazione = dataRegistrazione.DateTime; if (_spesaRiferimento != null) _spesa.IdSpesaRiferimento = _spesaRiferimento.ID; SpesaInfoDTO spesaInfo =null; try { if (_spesa != null) { //spesaInfo = _fatturaService.Salva(_spesa, _ripartizione, getMovimentoContabileService().IsMultiSpesa); var form = new ExecuteLoadDataObjectAsync<SpesaInfoDTO>("Salvataggio della fattura in corso ....." + Environment.NewLine + "Si prega di attendere."); Func<SpesaInfoDTO> loadDati = () => _fatturaService.Salva(_spesa, _ripartizione, getMovimentoContabileService().IsMultiSpesa); form.LoadData(loadDati); form.ShowDialog(); spesaInfo = form.DataSourceObject; form.Dispose(); } } catch (Exception ex) { _log.Error("Errore non previsto nell'inserimento della spesa - " + Utility.GetMethodDescription() + " - spesa:" + getIdSpesa().GetValueOrDefault(), ex); spesaInfo = new SpesaInfoDTO { Message = "Errore imprevisto nell'inserimento della spesa" }; } if (spesaInfo != null && string.IsNullOrEmpty(spesaInfo.Message)) { _spesa.ID = spesaInfo.Id; _spesa.DisplayName = _spesa.Dettagli[0].Descrizione; if (_speseAccorpate && _isFirstSpesa && _spesaRiferimento == null) { _spesaRiferimento = _spesa; _isFirstSpesa = false; _fatturaService.SetSpesaRiferimento(_spesaRiferimento.ID, _spesaRiferimento.ID); } if (modelloFornitore.Checked) getModelloContabileService().AssociaFornitore((ModelloRegistrazioneContabileDTO)modelloRipartizione.SelectedItem.ListObject, sceltaFornitore.SelectedFornitore); // Se è stato richiesto il salvataggio del modello devo ricaricare la cache dei modelli if (importoDettaglioSpesa.Value != 0) { ripartizione = getCurrentRipartizione(); if (!string.IsNullOrEmpty(ripartizione?.NomeModello)) getModelloContabileService().Reload(_esercizio); } if (_isInserimento) CommonMessages.DisplayComplete("La spesa è stata correttamente inserita." + Environment.NewLine + "Sul documento deve essere riportato: " + spesaInfo.IdentificativoArchiviazione); else CommonMessages.DisplayComplete("La spesa è stata correttamente aggiornata." + Environment.NewLine + "Sul documento deve essere riportato: " + spesaInfo.IdentificativoArchiviazione); Dirty = false; OnConfirm(new ConfirmArgs(_spesa)); if (_formGestione == null || !_formGestione.IsDisposed) { if (_isInserimento) Reload(_condominio, _esercizio); Dirty = false; } } else { if (spesaInfo != null) CommonMessages.DisplayWarning("Si sono verificati dei problemi nell'aggiornamento della spesa:" + Environment.NewLine + spesaInfo.Message + Environment.NewLine + "Si prega di riprovare."); result = false; } } } else { CommonMessages.DisplayWarning("Si sono verificati i seguenti errori nel controllo del numero di fattura:" + Environment.NewLine + messageAuth.FatalMessage + Environment.NewLine + "Si prega di riprovare."); return false; } } else { spesaValidationSummary.ShowErrorSummary(); result = false; } setValidators(false); return result; }
public int? ConfermaMovimento() { int? result = null; if (_movimentoAvere != null) { try { movimentoValidationSummary.Validate(); if (movimentoValidationSummary.IsValid) { if (salvaModello.Checked) { try { var form = new SalvataggioModelloRegistrazioneContabile((List<ModelloRegistrazioneContabileDTO>)modelliContabiliBindingSource.DataSource, modelloRipartizione.Text); if (form.ShowDialog() == DialogResult.Cancel) return null; if (_ripartizione == null) _ripartizione = getRipartizione(); _ripartizione.NomeModello = form.Nome; form.Dispose(); } catch (Exception ex) { _log.ErrorFormat("Errore non previsto nel salvataggio del modello - {0} - movimento:{1}", ex, Utility.GetMethodDescription(), _movimentoAvere.ID); } } _movimentoAvere.Importo = getImportoMovimento(); try { if (causale.SelectedItem != null && causale.SelectedItem.ListObject != null) _movimentoAvere.Causale = (CausaleContabileDTO)causale.SelectedItem.ListObject; else { _log.ErrorFormat("Causale non presente - {0} - movimento:{1}", Utility.GetMethodDescription(), _movimentoAvere.ID); return null; } } catch (Exception ex) { _log.ErrorFormat("Errore non previsto nella impostazione della causale - {0} - movimento:{1}", ex, Utility.GetMethodDescription(), _movimentoAvere.ID); throw; } try { if (contoPatrimoniale.Value != null) _movimentoAvere.IdConto = (int)contoPatrimoniale.Value; else { _log.ErrorFormat("Conto non presente - {0} - movimento:{1}", Utility.GetMethodDescription(), _movimentoAvere.ID); return null; } } catch (Exception ex) { _log.ErrorFormat("Errore non previsto nella impostazione del conto patrimoniale - {0} - movimento:{1}", ex, Utility.GetMethodDescription(), _movimentoAvere.ID); throw; } if (sottoContoPatrimoniale.Value != null) _movimentoAvere.IdSottoConto = (int) sottoContoPatrimoniale.Value; if (_ripartizione == null) _ripartizione = getRipartizione(); if (_ripartizione.Testata != null) { try { var idEsercizio = esercizi.Value as int?; var condominio = sceltaCondominioCombo1.CondominioSelected; if (condominio.Esercizi.Any(item => item.ID == idEsercizio.GetValueOrDefault())) { _ripartizione.Testata.IsAbilitataArchiviazioneOttica = archiviazioneOttica.Checked; _ripartizione.Testata.DataRegistrazione = dataRegistrazione.DateTime; _ripartizione.Testata.Note = noteDettaglio.Text; _ripartizione.Testata.IdEsercizio = esercizi.Value as int?; if (modelloRipartizione.Value != null) _ripartizione.Testata.IdModelloRipartizione = (int)modelloRipartizione.Value; _ripartizione.Testata.DataInizioCompetenza = null; _ripartizione.Testata.DataFineCompetenza = null; if (dataInizioCompetenza.Value != null) _ripartizione.Testata.DataInizioCompetenza = dataInizioCompetenza.DateTime; if (dataFineCompetenza.Value != null) _ripartizione.Testata.DataFineCompetenza = dataFineCompetenza.DateTime; } else { _log.FatalFormat("ATTENZIONE: Esercizio del movimento contabile non presente nel condominio selezionato - {0} - movimento:{1} - esercizio:{2} - condominio:{3} - azienda:{4}", Utility.GetMethodDescription(), _movimentoAvere?.ID.ToString(), idEsercizio, sceltaCondominioCombo1.CondominioSelected.ID, Login.Instance.CurrentLogin().Azienda); CommonMessages.DisplayWarning("Il movimento non può essere aggiornato, si prega di riprovare"); ParentForm?.Close(); return null; } } catch (Exception ex) { _log.ErrorFormat("Errore non previsto nella impostazione dei dati di testata - {0} - movimento:{1}", ex, Utility.GetMethodDescription(), _movimentoAvere.ID); throw; } } else { _log.ErrorFormat("TESTATA non presente - {0} - movimento:{1}", Utility.GetMethodDescription(), _movimentoAvere.ID); return null; } _ripartizione.Descrizione = descrizioneDettaglio.Text; try { if (sceltaFornitoreCombo1.Visible && sceltaFornitoreCombo1.SelectedFornitore != null) _movimentoAvere.IdFornitore = sceltaFornitoreCombo1.SelectedFornitore.ID; else if (sceltaFornitoreSottocontoCombo.Visible && sceltaFornitoreSottocontoCombo.SelectedFornitore != null) _movimentoAvere.IdFornitore = sceltaFornitoreSottocontoCombo.SelectedFornitore.ID; else _movimentoAvere.IdFornitore = null; foreach (var movimento in _movimentiDare) movimento.IdFornitore = _movimentoAvere.IdFornitore; } catch (Exception ex) { _log.ErrorFormat("Errore non previsto nella impostazione dei dati del fornitore - {0} - movimento:{1}", ex, Utility.GetMethodDescription(), _movimentoAvere.ID); throw; } SpesaInfoDTO info; try { // Controllo aggiuntivo per bugid#8602 if ((_ripartizione.Testata.ID == 0 || _ripartizione.Testata.Stato == "I") && !_isInserimento) { _log.FatalFormat("ATTENZIONE: Possibilità di movimento doppio - {0} - movimento:{1} - azienda:{2}", Utility.GetMethodDescription(), _movimentoAvere?.ID.ToString() ?? "<NULL>", Login.Instance.CurrentLogin().Azienda); CommonMessages.DisplayWarning("Il movimento non può essere aggiornato, si prega di riprovare"); ParentForm?.Close(); return null; } else { info = getMovimentoContabileService().Salva(_ripartizione, _movimentoAvere, _movimentiDare, _idMovimentoBancario); } } catch (Exception ex) { _log.ErrorFormat("Errore non previsto nell'inserimento del movimento economico - {0} - movimento:{1}", ex, Utility.GetMethodDescription(), _movimentoAvere.ID); info = new SpesaInfoDTO {Message = "Errore imprevisto nell'inserimento del movimento"}; } if (string.IsNullOrEmpty(info.Message)) { try { _movimentoAvere.ID = info.Id; result = info.Id; CommonMessages.DisplayComplete("Il movimento contabile è stato correttamente inserito." + Environment.NewLine + "Sul documento deve essere riportato: " + info.IdentificativoArchiviazione); OnAfterUpdate(_ripartizione.Testata != null ? new AfterUpdateArgs(_ripartizione.Testata.ID) : new AfterUpdateArgs(0)); _movimentoResult = _movimentoAvere; if (salvaModello.Checked) { try { getModelloContabileService().Reload(_esercizio); modelliContabiliBindingSource.DataSource = getModelloContabileService().GetByEsercizio(_esercizio); } catch (Exception ex) { _log.ErrorFormat("Errore non previsto nel CARICAMENTO DEL DATASOURCE DEL MODELLO - {0} - movimento:{1}", ex, Utility.GetMethodDescription(), _movimentoAvere.ID); } } } catch (Exception ex) { _log.ErrorFormat("Errore non previsto nel FEEDBACK della conferma del movimento - {0} - movimento:{1}", ex, Utility.GetMethodDescription(), _movimentoAvere.ID); throw; } clearAllFields(); } else CommonMessages.DisplayWarning("Si sono verificati dei problemi nell'aggiornamento del movimento:" + Environment.NewLine + info.Message + Environment.NewLine + "Si prega di riprovare."); } else movimentoValidationSummary.ShowErrorSummary(); } catch (Exception ex) { _log.ErrorFormat("Errore non previsto nella conferma del movimento - {0} - movimento:{1}", ex, Utility.GetMethodDescription(), _movimentoAvere.ID); } } return result; }
public SpesaInfoDTO InserimentoNotaAccredito(NotaAccreditoDTO nota, IList<StornoScadenzaDTO> scadenze, UserInfo userinfo) { var retryCount = 10; var success = false; var windsorRep = new WindsorConfigRepository(); var item = new SpesaInfoDTO(); while (retryCount >= 0 && !success) { try { windsorRep.BeginTransaction(userinfo); var service = windsorRep.GetContainer(userinfo.Azienda).Resolve<IPagamentoService>(); item = service.InserimentoNotaAccredito(nota, scadenze); windsorRep.Commit(); success = true; } catch (InvalidDataException ex) { return new SpesaInfoDTO { Message = ex.Message }; } catch (Exception ex) { _log.ErrorFormat("Errore nell'inserimento di una nota di accredito - TENTATIVO:{0} - nota:{1} - azienda:{2} - number:{3}", ex, (11 - retryCount), Utility.GetMethodDescription(), nota.ID, userinfo.Azienda, getExceptionId(ex)); windsorRep.Rollback(); if (!isRetryException(ex)) throw; // Add delay here if you wish. System.Threading.Thread.Sleep(1000 * (11 - retryCount)); retryCount--; _log.InfoFormat("Inserimento di una nota di accredito - TENTATIVO:{0} - nota:{1} - azienda:{2}", (11 - retryCount), Utility.GetMethodDescription(), nota.ID, userinfo.Azienda); } } if (!success) windsorRep.Rollback(); return item; }
public SpesaInfoDTO SalvaFiscale(SpesaFiscaleDTO dto) { try { var message = string.Empty; var fornitore = _daoFactory.GetFornitoreDao().GetById(dto.IdFornitore, false); var esercizio = _daoFactory.GetEsercizioDao().Find(dto.IdEsercizio, false); if (esercizio == null) throw new InvalidDataException("L'esercizio selezionato non è più presente in archivio."); GestioneCondomini.Domain.Spesa spesa; if (dto.ID == 0) { spesa = new GestioneCondomini.Domain.Spesa(fornitore, esercizio, null); var protocollo = _protocolloService.GetProgressivo(TipoProtocollo.Fattura, esercizio.DataApertura.GetValueOrDefault().Year, esercizio.CondominioRiferimento); if (protocollo.Progressivo != null) { spesa.NumeroProtocollo = protocollo.Progressivo; _daoFactory.GetSpesaDao().SaveOrUpdate(spesa); } else message = protocollo.Message + Environment.NewLine; } else { spesa = _daoFactory.GetSpesaDao().GetById(dto.ID, false); spesa.FornitoreRiferimento = fornitore; spesa.EsercizioRiferimento = esercizio; } var info = new SpesaInfoDTO(); if (string.IsNullOrEmpty(message)) { spesa.ImportoRitenuta = dto.Scadenze.Sum(item => item.ImportoRitenuta); spesa.AltreSpese = dto.AltreSpese; spesa.AltreSpeseEsenti = dto.SpeseEsenti; spesa.SpeseEsentiRitenuta = dto.SpeseEsentiRitenuta; spesa.CassaProfessionisti = dto.CassaProfessionisti; spesa.DataDocumento = dto.DataDocumento; spesa.NumeroDocumento = dto.NumeroDocumento; spesa.AliquotaRitenuta = dto.AliquotaRitenuta; spesa.IsAbilitataArchiviazioneOttica = dto.IsAbilitataArchiviazioneOttica; spesa.IsRitenutaCalcoloImponibile = dto.IsRitenutaCalcoloImponibile; spesa.Stato = StatoSpesaEnum.Pagata; spesa.TipoDocumento = dto.TipoDocumento; spesa.Detrazione = dto.Detrazione; spesa.EsenteRegimeMinimo = dto.EsenteRegimeMinimo; // ---------------------------------------------------- // Dettagli // ---------------------------------------------------- spesa.Dettagli.Clear(); var index = 0; foreach (var dtoDettaglio in dto.Dettagli) { index++; DettaglioSpesa dettaglio; if (dtoDettaglio.ID == 0) dettaglio = new DettaglioSpesa(spesa, index); else { dettaglio = _daoFactory.GetDettaglioSpesaDao().GetById(dtoDettaglio.ID, false); dettaglio.NumeroRiga = index; spesa.Dettagli.Add(dettaglio); } dettaglio.AliquotaIva = dtoDettaglio.AliquotaIva; dettaglio.Descrizione = dtoDettaglio.Descrizione; dettaglio.ImportoIva = dtoDettaglio.ImportoIva; dettaglio.ImportoLordo = dtoDettaglio.ImportoLordo; dettaglio.SoggettoRitenutaAcconto = dtoDettaglio.SoggettoRitenutaAcconto; } // ---------------------------------------------------- // Scadenze / Pagamenti // ---------------------------------------------------- // Pulizia movimenti, scadenze e pagamenti presenti foreach (var scadenza in spesa.Scadenze) { foreach (var pagamento in scadenza.Pagamenti) _daoFactory.GetPagamentoDao().Delete(pagamento); _daoFactory.GetScadenzaFatturaDao().Delete(scadenza); } spesa.Scadenze.Clear(); foreach (var scadenzaDto in dto.Scadenze) { var scadenzaNew = new ScadenzaFattura(spesa, scadenzaDto.DataPagamento, scadenzaDto.Importo) { Stato = StatoSpesaEnum.Pagata }; var pagamentoNew = new Pagamento(scadenzaNew, null, scadenzaNew.Importo, scadenzaNew.Scadenza, TipoPagamentoFatturaEnum.Immediato) { Stato = StatoSpesaEnum.Pagata }; scadenzaNew.Pagamenti.Add(pagamentoNew); _daoFactory.GetScadenzaFatturaDao().SaveOrUpdate(scadenzaNew); // ----------------------------------------------------- // Ritenuta // ----------------------------------------------------- // ritenuta PAGATA dal vecchio amministratore i dati, compresi interessi e sanzioni servono per il modello 770 var ritenuta = new Ritenuta(scadenzaDto.ImportoRitenuta); if (!scadenzaDto.RitenutaNONPagata) { ritenuta.Stato = StatoRitenutaEnum.PagataAltroAmministratore; ritenuta.DataPagamentoRitenuta = scadenzaDto.DataPagamentoRitenuta; ritenuta.ImportoInteressi = scadenzaDto.ImportoInteressi; ritenuta.ImportoSanzione = scadenzaDto.ImportoSanzioni; } // ritenuta NON Pagata inserita come da pagare else { ritenuta.Stato = StatoRitenutaEnum.Inserita; ritenuta.DataPagamentoRitenuta = null; _daoFactory.GetSpesaDao().SaveOrUpdate(spesa); _movimentoContabileService.SetMovimentiRitenutaPagataAltroAmministratore(spesa, scadenzaDto.DataPagamento.GetValueOrDefault()); } pagamentoNew.RitenutaAcconto = ritenuta; } info = new SpesaInfoDTO { Id = spesa.ID, NumeroProtocollo = spesa.NumeroProtocollo.GetValueOrDefault(), }; if (spesa.IsAbilitataArchiviazioneOttica) { var impostazioni = _daoFactory.GetImpostazioniAziendaDao().GetByAzienda(spesa.EsercizioRiferimento.CondominioRiferimento.Azienda.ID); info.IdentificativoArchiviazione = _archiviazioneService.GetIdentificativoArchiviazione(spesa); info.StampaEtichettaArchiviazione = impostazioni.UtilizzoEtichettatriceArchiviazioneOtticaFatture && spesa.EsercizioRiferimento.CondominioRiferimento.IsAbilitataArchiviazioneOtticaPassivi.GetValueOrDefault(); info.EtichettatriceArchiviazione = impostazioni.EtichettatriceArchiviazioneOttica; info.TipoEtichettaArchiviazione = impostazioni.TipoEtichettaArchiviazioneOttica; } spesa.Stato = StatoSpesaEnum.PagataAltroAmministratore; } else info.Message = message; return info; } catch (Exception ex) { _log.Fatal("Errore inaspettato nel salvataggio della spesa FISCALE - " + Utility.GetMethodDescription() + " - spesa:" + dto.ID, ex); throw; } }
public SpesaInfoDTO SalvaSpesaFiscale(SpesaFiscaleDTO spesa, UserInfo userinfo) { var retryCount = 10; var success = false; var windsorRep = new WindsorConfigRepository(); var item = new SpesaInfoDTO { Id = 0, Message = "Un altro utente ha confermato un movimento.", StampaEtichettaArchiviazione = false, IdentificativoArchiviazione = null, NumeroProtocollo = 0 }; while (retryCount >= 0 && !success) { try { windsorRep.BeginTransaction(userinfo); var service = windsorRep.GetContainer(userinfo.Azienda).Resolve<ISpesaService>(); item = service.SalvaFiscale(spesa); windsorRep.Commit(); success = true; } catch (InvalidDataException ex) { windsorRep.Rollback(); return new SpesaInfoDTO { Message = ex.Message }; } catch (Exception ex) { windsorRep.Rollback(); if (!isRetryException(ex)) { _log.ErrorFormat("Errore nel salvataggio della spesa fiscale - TENTATIVO:{0} - {1} - id:{2} - azienda:{3} - number:{4}", ex, (11 - retryCount), Utility.GetMethodDescription(), spesa.ID, userinfo.Azienda, getExceptionId(ex)); throw; } // Add delay here if you wish. System.Threading.Thread.Sleep(1000 * (11 - retryCount)); retryCount--; _log.ErrorFormat("Salvataggio della spesa fiscale - INIZIO TENTATIVO:{0} - {1} - id:{2} - azienda:{3}", (11 - retryCount), Utility.GetMethodDescription(), spesa.ID, userinfo.Azienda); } } if (!success) windsorRep.Rollback(); return item; }