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;
        }
Exemple #3
0
		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;
		}
Exemple #4
0
        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;
            }        
        }
Exemple #5
0
		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;
		}