Exemplo n.º 1
0
        public RipartizioneMovimentoUC(RipartizioneSpeseDTO ripartizione, string key, MovimentoContabileDTO movimentoContabileDTO, EsercizioDTO esercizioDTO, decimal importo, bool readOnly)
        {
            InitializeComponent();

            _ripartizione = ripartizione;
            _key = key;
            _movimentoContabileDTO = movimentoContabileDTO;
            _esercizioDTO = esercizioDTO;
            _importo = importo;
            _readOnly = readOnly;

            inizializza();
        }
Exemplo n.º 2
0
        public RipartizioneMovimentoUI(RipartizioneSpeseDTO ripartizione, string key, MovimentoContabileDTO movimentoContabileDTO, EsercizioDTO esercizioDTO, decimal importo, bool readOnly)
        {
            InitializeComponent();

            if(ripartizione == null)
                Close();

            _control = new RipartizioneMovimentoUC(ripartizione, key, movimentoContabileDTO, esercizioDTO, importo, readOnly) { Dock = DockStyle.Fill };
            tableLayoutPanel1.Controls.Add(_control, 0, 0);

            if (readOnly)
                btnConferma.Enabled = false;

            persistWindowComponent1.UserName = Security.Login.Instance.CurrentLogin().LoginName;
        }
        public MovimentoContabileDTO[] GetAll()
        {
            try
            {
                var daoFactory = _windsorConfigRepository.GetContainer(_info.Azienda).Resolve<IDaoFactory>();
                var lista = daoFactory.GetMovimentoContabileDao().GetAll();
                var movimenti = new MovimentoContabileDTO[lista.Count];

                var index = 0;
                foreach (var movimento in lista)
                {
                    movimenti[index] = setDto(movimento, false, false);
                    index++;
                }

                return movimenti;
            }
            catch (Exception ex)
            {
                
                _log.Error("Errore nel caricamento dei movimenti: " + Utility.GetMethodDescription(), ex);
                throw;
            }
        }
Exemplo n.º 4
0
        public SpesaDTO GetNew(SpesaDTO spesaOriginale, CondominioDTO condominio)
        {
            try
            {
                var aziendaDTO = _aziendaService.GetAzienda();
                var spesa = new SpesaDTO
                {
                    Autorizzata = !aziendaDTO.AutorizzazioneScadenze,
                    IsAbilitataArchiviazioneOttica = _condominioService.GetById(condominio.ID, true).IsAbilitataArchiviazioneOtticaPassivi,
                    Dettagli = new List<DettaglioSpesaDTO>()
                };

                if (spesaOriginale != null)
                {
                    spesa.AliquotaRitenuta = spesaOriginale.AliquotaRitenuta;
                    spesa.Detrazione = spesaOriginale.Detrazione;
                    spesa.DisplayFornitore = spesaOriginale.DisplayFornitore;
                    spesa.DisplayName = spesaOriginale.DisplayName;
                    spesa.IdEsercizio = spesaOriginale.IdEsercizio;
                    spesa.IdFornitore = spesaOriginale.IdFornitore;
                    spesa.TipoDocumento = spesaOriginale.TipoDocumento;
                    spesa.Contestata = spesaOriginale.Contestata;
                    spesa.Sinistro = spesaOriginale.Sinistro;

                    foreach (var dettaglio in spesaOriginale.Dettagli)
                    {
                        var dettaglioNew = new DettaglioSpesaDTO
                        {
                            AliquotaIva = dettaglio.AliquotaIva,
                            Descrizione = dettaglio.Descrizione,
                            DisplayName = dettaglio.DisplayName,
                            ID = 0,
                            IdModelloRipartizione = dettaglio.IdModelloRipartizione,
                            Note = dettaglio.Note,
                            NumeroRiga = dettaglio.NumeroRiga,
                            SoggettoRitenutaAcconto = dettaglio.SoggettoRitenutaAcconto,
                            Movimenti = new List<MovimentoContabileDTO>()
                        };

                        foreach (var movimento in dettaglio.Movimenti)
                        {
                            var movimentoNew = new MovimentoContabileDTO
                            {
                                Causale = movimento.Causale,
                                Descrizione = movimento.Descrizione,
                                DisplayName = movimento.DisplayName,
                                ID = 0,
                                IdCondomino = movimento.IdCondomino,
                                IdConto = movimento.IdConto,
                                IdFornitore = movimento.IdFornitore,
                                NumeroRiga = movimento.NumeroRiga,
                                IdNumeroRigaMovimentoMultiIvaPrincipale = movimento.NumeroRiga,
                                IdSottoConto = movimento.IdSottoConto
                            };
                            dettaglioNew.Movimenti.Add(movimentoNew);
                        }

                        spesa.Dettagli.Add(dettaglioNew);
                    }
                }
                else
                    spesa.TipoDocumento = "FATTURA";

                spesa.Scadenze = new List<ScadenzaFatturaDTO>();
                spesa.StatoSpesa = StatoSpesaEnum.Inserita;

                return spesa;
            }
            catch (Exception ex)
            {
                _log.ErrorFormat("Errore nella lettura della nuova spesa - {0} - spesa:{1} - condominio:{2}", ex, Gipasoft.Library.Utility.GetMethodDescription(), spesaOriginale != null ? spesaOriginale.ID.ToString() : "<NULL>", condominio != null ? condominio.ID.ToString() : "<NULL>");
                throw;
            }
        }
        private void clearAllFields()
        {
            try
            {
                clearDettaglioFields();
                _dataContabile = null;
                _causale = null;
                _ripartizione = null;
                movimentoContabileBindingSource.DataSource = _movimentiDare = new List<MovimentoContabileDTO>();
                _movimentoAvere = new MovimentoContabileDTO();
                salvaModello.Checked = false;
                salvaModello.Enabled = true;

                sottoContoDTOBindingSource.DataSource = new List<SottoContoDTO>();
                sottoContoPatrimoniale.Value = null;
            }
            catch (Exception ex)
            {
                _log.ErrorFormat("Errore non previsto nella CLEAR della videata - {0} - movimento:{1}", ex, Utility.GetMethodDescription(), _movimentoAvere.ID);
                throw;
            }
        }
        public MovimentoContabileDTO ConvertRipartizioneToMovimento(RipartizioneSpesaDTO ripartizioneSpesaDTO)
        {
            var movimentoContabileDTO = new MovimentoContabileDTO
            {
                ID = ripartizioneSpesaDTO.ID,
                IdConto = ripartizioneSpesaDTO.IdConto,
                IdSottoConto = ripartizioneSpesaDTO.IdSottoConto,
                Stato = ripartizioneSpesaDTO.Stato,
                Descrizione = ripartizioneSpesaDTO.Descrizione,
            };

            return movimentoContabileDTO;
        }
        private string insert(MovimentoContabileDTO dto, out MovimentoContabile item)
        {
            var message = string.Empty;

            item = null;
            try
            {
                var daoFactory = _windsorConfigRepository.GetContainer(_info.Azienda).Resolve<IDaoFactory>();

                CausaleContabile causale = null;
                if(dto.Causale != null)
                    causale = daoFactory.GetCausaleContabileDao().Find(dto.Causale.ID, false);
                if (causale == null)
                {
                    var idCausale = "<NULL>";
                    if (dto.Causale != null)
                        idCausale = dto.Causale.ID.ToString(CultureInfo.InvariantCulture);

                    _log.WarnFormat("Non è definito la causale per un movimento da inserire - {0}  - causale:{1} - azienda:{2}", Utility.GetMethodDescription(), idCausale, _info.Azienda);
                    return "Non è definita la causale";
                }

                if (dto.NumeroRiga == null)
                    dto.NumeroRiga = 1;

                DettaglioSpesa dettaglio = null;
                var importo = Math.Round(dto.Importo.GetValueOrDefault(), 2);
                var segno = dto.Segno;
                if (importo < 0)
                {
                    segno = invertiSegno(segno);
                    importo = importo*-1;
                }

                var conto = daoFactory.GetContoDao().Find(dto.IdConto.GetValueOrDefault(), false);
                if (conto == null)
                {
                    _log.WarnFormat("Non è definito il conto per un movimento da inserire - {0}  - conto:{1} - azienda:{2}", Utility.GetMethodDescription(), dto.IdConto.GetValueOrDefault(), _info.Azienda);
                    return "Non è definito il conto economico";
                }

                if (dto.IdDettaglio != null)
                {
                    dettaglio = daoFactory.GetDettaglioSpesaDao().GetById(dto.IdDettaglio.GetValueOrDefault(), false);
                    item = new MovimentoContabile(_testata, dettaglio, causale, dto.NumeroRiga, conto, importo, segno);
                }
                else
                    item = new MovimentoContabile(_testata, causale, dto.NumeroRiga, conto, importo, segno);
                item.PercentualeProprieta = dto.PercentualeProprieta;

                setSottoConto(dto, item, daoFactory);

                if (dto.IdFornitore != null)
                    item.FornitoreRiferimento = daoFactory.GetFornitoreDao().GetById(dto.IdFornitore.Value, false);
                item.Descrizione = dto.Descrizione;
                item.NumeroAssegno = dto.NumeroAssegno;
                item.Note = dto.Note;

                item.GruppiAddebito = dto.GruppiAddebito;
                item.LottiAddebito = dto.LottiAddebito;
                item.StabiliAddebito = dto.StabiliAddebito;

                if (dto.IsMovimentoEconomico != null)
                    item.IsMovimentoEconomico = dto.IsMovimentoEconomico.GetValueOrDefault();

                if(dto.IdMovimentoStorno > 0)
                {
                    var movimentoStorno = daoFactory.GetMovimentoContabileDao().Find(dto.IdMovimentoStorno.GetValueOrDefault(), false);
                    if(movimentoStorno != null)
                    {
                        movimentoStorno.LottiAddebito = item.LottiAddebito;
                        movimentoStorno.StabiliAddebito = item.StabiliAddebito;
                        movimentoStorno.GruppiAddebito = item.GruppiAddebito;
                        movimentoStorno.FornitoreRiferimento = item.FornitoreRiferimento;
                        movimentoStorno.ContoRiferimento = item.ContoRiferimento;
                        movimentoStorno.SottoContoRiferimento = item.SottoContoRiferimento;
                        item.MovimentoStorno = movimentoStorno;
                    }
                }

                // TODO: La valorizzazione del NumeroRegistrazione deve essere spostata nel Domain Model
                if (dto.NumeroRegistrazione != null)
                    item.NumeroRegistrazione = dto.NumeroRegistrazione;
                else
                {
                    try
                    {
                        if(dettaglio != null)
                        {
                            var esercizio = daoFactory.GetEsercizioDao().GetById(dettaglio.SpesaRiferimento.EsercizioRiferimento.ID, true);
                            var numeroRegistrazione = esercizio.ProgressivoRegistrazioneContabile;
                            numeroRegistrazione++;
                            item.NumeroRegistrazione = numeroRegistrazione;
                            esercizio.ProgressivoRegistrazioneContabile = numeroRegistrazione;
                        }
                    }
                    catch (Exception ex)
                    {
                        message = ex.ToString().StartsWith("NHibernate.StaleObjectStateException") ? "Un altro utente ha confermato un movimento." : "Errore inaspettato nell'attribuzione del numero di registrazione, probabilmente determinato da un conflitto di aggiornamento";
                        
                        _log.Error("Errore inaspettato nel salvataggio (UPDATE) del numero di registrazione - " + Utility.GetMethodDescription(), ex);

                        var persistenceContext = _windsorConfigRepository.GetContainer(_info.Azienda).Resolve<IPersistenceContext>();
                        persistenceContext.RollbackAndCloseSession(Login.Instance.CurrentLogin().LoginName);
                        persistenceContext.BeginTransaction(Login.Instance.CurrentLogin().LoginName, IsolationLevel.ReadUncommitted);

                        return message;
                    }
                }

                if (dto.IdEvasione != null)
                    item.EvasioneBancaria = daoFactory.GetEvasioneBancariaDao().Find(dto.IdEvasione.GetValueOrDefault(), false);

                // ===========================================================================================
                // BUGID#2159 - COMMENTATO: Con la nuova funzione di riparto aggregato gli oggetti SpeseUnita 
                //              dovono essere usati SOLO per le spese personali o quando sono usate ripartizioni
                //              personalizzate
                // ===========================================================================================
                //if (dto.DettaglioRipartizione != null)
                try
                {
                    if (item.ContoRiferimento == null)
                    {
                        message = "Non è stato definito il conto di addebito";

                        _log.ErrorFormat("Conto a NULL - {0}", Utility.GetMethodDescription());

                        var persistenceContext = _windsorConfigRepository.GetContainer(_info.Azienda).Resolve<IPersistenceContext>();
                        persistenceContext.RollbackAndCloseSession(Login.Instance.CurrentLogin().LoginName);
                        persistenceContext.BeginTransaction(Login.Instance.CurrentLogin().LoginName, IsolationLevel.ReadUncommitted);

                        return message;
                    }

                    if ((item.ContoRiferimento.IsSpesePersonali || dto.IsRipartoPersonalizzato) && dto.DettaglioRipartizione != null)
                    {
                        var rep = new SpeseUnitaRepository(item, _info, _windsorConfigRepository);
                        foreach (var t in dto.DettaglioRipartizione)
                        {
                            if (t != null)
                            {
                                try
                                {
                                    rep.ManageDomainEntity(t);
                                }
                                catch (Exception ex)
                                {

                                    _log.Error("Errore nell'inserimento della testata del movimento: " + Utility.GetMethodDescription() + " - 1", ex);
                                    throw;
                                }
                            }
                        }
                    }

                }
                catch (Exception ex)
                {
                    _log.ErrorFormat("Errore nel salvataggio del movimento - (ManageDomainEntity) - {0}  - azienda:{1}", ex, Utility.GetMethodDescription(), _info.Azienda);
                    throw;
                }

                item.IsRipartoPersonalizzato = dto.IsRipartoPersonalizzato;

                daoFactory.GetMovimentoContabileDao().SaveOrUpdate(item);
            }
            catch(Exception ex)
            {
                _log.Error("Errore nel salvataggio del movimento: " + Utility.GetMethodDescription(), ex);
                throw;
            }
            return message;
        }
 private void setSottoConto(MovimentoContabileDTO dto, MovimentoContabile item, IDaoFactory daoFactory)
 {
     if (dto.IdSottoConto != null)
     {
         if (dto.IdSottoConto > 0)
             item.SottoContoRiferimento = daoFactory.GetSottoContoDao().GetById(dto.IdSottoConto.Value, false);
         else if (dto.IdSottoConto < 0)
         {
             if (item.ContoRiferimento.Codice == getPianoContiService().GetCodiceContoBancario())
             {
                 var banca = daoFactory.GetDatiBancariCondominiDao().Find(dto.IdSottoConto.Value * -1, false);
                 if (banca != null)
                     item.ContoCorrenteBancario = banca;
             }
             else if (item.ContoRiferimento.Codice == getPianoContiService().GetCodiceContoFornitori())
             {
                 var fornitore = daoFactory.GetFornitoreDao().Find(dto.IdSottoConto.Value * -1, false);
                 if (fornitore != null)
                     item.FornitoreRiferimento = fornitore;
             }
             else if (item.ContoRiferimento.Codice == getPianoContiService().GetCodiceContoVersamentiCondomini() || item.ContoRiferimento.Codice == _pianoContiService.GetCodiceContoRateCondomini())
             {
                 var soggetto = daoFactory.GetSoggettoCondominioDao().Find(dto.IdSottoConto.Value * -1, false);
                 if (soggetto != null)
                     item.CondominoRiferimento = soggetto;
             }
         }
     }
 }
 public ResultMovimentoContabile ManageDomainEntity(MovimentoContabileDTO movimentoDto)
 {
     try
     {
         return manageMovimento(movimentoDto);
     }
     catch (Exception ex)
     {
         _log.ErrorFormat("Errore nella gestione dei movimenti contabili - {0} - movimento:{1}", ex, Utility.GetMethodDescription(), movimentoDto.ID);
         throw;
     }
 }
 public Form GetRegistrazioneMovimento(RipartizioneSpeseDTO ripartizione, string key, MovimentoContabileDTO movimentoContabileDTO, EsercizioDTO esercizioDTO, decimal importo, bool readOnly)
 {
     _form = new RipartizioneMovimentoUI(ripartizione, key, movimentoContabileDTO, esercizioDTO, importo, readOnly);
     return _form;
 }
Exemplo n.º 11
0
 private void ripartizioneDettaglioMouseUp(object sender, MouseEventArgs e)
 {
     _movimentoClick = null;
     if (e.Button == MouseButtons.Right)
     {
         _movimentoClick = DataGridHelper.GetCellEvent<MovimentoContabileDTO>(ripartizioneDettaglio, e);
         if (_movimentoClick != null)
             contextMenuRipartizioneDettaglio.Show(ripartizioneDettaglio, e.X, e.Y);
     }
 }
Exemplo n.º 12
0
        public TipoFiltro GetTipoFiltroAttivo(MovimentoContabileDTO movimento, RipartizioneSpeseDTO ripartizione)
        {
            try
            {
                if (ripartizione != null)
                {
                    if (movimento != null)
                    {
                        if (movimento.IdConto > 0)
                        {
                            int? idEsercizio = null;
                            if (ripartizione.Testata != null && ripartizione.Testata.IdEsercizio != null)
                                idEsercizio = ripartizione.Testata.IdEsercizio;

                            var conto = _pianoContiService.GetById(movimento.IdConto.GetValueOrDefault(), idEsercizio);
                            if (conto.IsSpesePersonali)
                                return TipoFiltro.UnitaImmobiliare;
                        }
                    }

                    if (movimento != null)
                    {
                        var key = GetKey(movimento);
                        if (ripartizione.Lotti.ContainsKey(key) && ripartizione.Lotti[key].Any(item => !item.Selezionato))
                            return TipoFiltro.Lotto;

                        if (ripartizione.Stabili.ContainsKey(key) && ripartizione.Stabili[key].Any(item => !item.Selezionato))
                            return TipoFiltro.Stabile;

                        if (ripartizione.Gruppi.ContainsKey(key) && ripartizione.Gruppi[key].Any(item => !item.Selezionato))
                            return TipoFiltro.Scala;

                        if (ripartizione.UnitaImmobiliari.ContainsKey(key) && ripartizione.UnitaImmobiliari[key].Any(item => !item.Selezionato))
                            return TipoFiltro.UnitaImmobiliare;
                    }

                }

                return TipoFiltro.Scala;
            }
            catch (Exception ex)
            {
                var log = LogManager.GetLogger("Sfera");
                log.WarnFormat("Errore inaspettato nella lettura del filtro attivo - {0} - movimento:{1} - azienda:{2}", ex, Utility.GetMethodDescription(), movimento != null ? movimento.ID.ToString(CultureInfo.InvariantCulture) : "<NULL>", Login.Instance.CurrentLogin().Azienda);

                return TipoFiltro.Scala;
            }
        }
Exemplo n.º 13
0
        public string GetKey(MovimentoContabileDTO movimento)
        {
            var key = string.Empty;
            //if (movimento.NumeroRigaDettaglio != null)
            //    key += movimento.NumeroRigaDettaglio + "_";

            key += movimento.NumeroRiga.ToString();

            return key;
        }
Exemplo n.º 14
0
 public string GetKey(MovimentoContabileDTO movimento)
 {
     if (movimento != null)
         return movimento.Stato == "RIPARTIZIONE" ? string.Empty : movimento.NumeroRiga.GetValueOrDefault().ToString(CultureInfo.InvariantCulture);
     return string.Empty;
 }
Exemplo n.º 15
0
        public Dictionary<DettaglioSpesaDTO, RipartizioneSpeseDTO> Delete(Dictionary<DettaglioSpesaDTO, RipartizioneSpeseDTO> ripartizione, DettaglioSpesaDTO dettaglio, MovimentoContabileDTO movimento, SpesaDTO spesa)
        {
            dettaglio.Movimenti.Remove(movimento);
            var key = GetKey(movimento);

            if (ripartizione.ContainsKey(dettaglio) && ripartizione[dettaglio] != null)
            {
                ripartizione[dettaglio].UnitaImmobiliari.Remove(key);
                ripartizione[dettaglio].Gruppi.Remove(key);
                ripartizione[dettaglio].Stabili.Remove(key);
                ripartizione[dettaglio].Lotti.Remove(key);

                ripartizione[dettaglio].Testata.Movimenti.Remove(movimento);
            }

            return ripartizione;
        }
Exemplo n.º 16
0
        public SpesaInfoDTO Salva(RipartizioneSpeseDTO ripartizione, MovimentoContabileDTO movimentoAvere, List<MovimentoContabileDTO> movimentiDare, int? idMovimentoBancario)
        {
            if (ripartizione.Testata.ID > 0)
                ripartizione.Testata.Stato = "U";

            if (ripartizione.Testata.ID > 0 && ripartizione.UnitaImmobiliari != null)
            {
                foreach (var movimento in movimentiDare)
                {
                    var key = GetKey(movimento);
                    if (movimento.DettaglioRipartizione != null && ripartizione.UnitaImmobiliari.ContainsKey(key))
                    {
                        movimento.DettaglioRipartizione.Clear();
                        foreach (var itemRipartizione in ripartizione.UnitaImmobiliari[key])
                        {
                            if (itemRipartizione.Selezionato)
                            {
                                movimento.DettaglioRipartizione.Add(new SpeseUnitaDTO
                                {
                                    ID = 0,
                                    IdMovimentoRiferimento = movimento.ID,
                                    IdUnitaRiferimento = itemRipartizione.ID,
                                    Importo = itemRipartizione.Importo
                                });
                            }
                        }
                    }
                }
            }

            SpesaInfoDTO result;
            try
            {
                result = GetServiceClient().SalvaMovimento(ripartizione, movimentoAvere, movimentiDare, idMovimentoBancario, GetUserInfo());
            }
            catch (Exception ex)
            {
                var log = LogManager.GetLogger("Sfera");
                log.ErrorFormat("Errore inaspettato nella funzione - {0} - movimentoAvere:{1} - azienda:{2}", ex, Utility.GetMethodDescription(), movimentoAvere.ID, Login.Instance.CurrentLogin().Azienda);

                throw;
            }

            if (result.StampaEtichettaArchiviazione)
            {
                var workerStampaEtichetta = new BackgroundWorker();
                workerStampaEtichetta.DoWork += workerStampaEtichettaDoWork;
                workerStampaEtichetta.RunWorkerAsync(new object[] { result.IdentificativoArchiviazione, result.TrayEtichettatriceAttivazioneOttica });
            }

            CloseService();
            return result;
        }
Exemplo n.º 17
0
        public void SetSelezioneItemRiparto(TipoFiltro tipo, RipartizioneSpeseDTO ripart, BusinessInstanceSelectedDTO item, MovimentoContabileDTO movimento, Dictionary<DettaglioSpesaDTO, RipartizioneSpeseDTO> ripartizione)
        {
            try
            {
                if (movimento != null && ripart != null)
                {
                    var key = GetKey(movimento);

                    // Se key è null o vuota vuol dire che il metdo è stato richiamato nell'evento cell update di una riga nuova: non deve essere fatto nulla
                    if (!string.IsNullOrEmpty(key))
                    {
                        if (item != null)
                            item.Stato = "U";

                        // Imposto come selezionati tutti gli altri filtri
                        switch (tipo)
                        {
                            case TipoFiltro.Scala:
                                if(ripart.Lotti != null && ripart.Lotti.ContainsKey(key))
                                    resetItemFiltro(ripart.Lotti[key]);
                                if (ripart.Stabili != null && ripart.Stabili.ContainsKey(key))
                                    resetItemFiltro(ripart.Stabili[key]);
                                break;
                            case TipoFiltro.Stabile:
                                if (ripart.Lotti != null && ripart.Lotti.ContainsKey(key))
                                    resetItemFiltro(ripart.Lotti[key]);
                                if (ripart.Gruppi != null && ripart.Gruppi.ContainsKey(key))
                                    resetItemFiltro(ripart.Gruppi[key]);
                                break;
                            case TipoFiltro.Lotto:
                                if (ripart.Stabili != null && ripart.Stabili.ContainsKey(key))
                                    resetItemFiltro(ripart.Stabili[key]);
                                if (ripart.Gruppi != null && ripart.Gruppi.ContainsKey(key))
                                    resetItemFiltro(ripart.Gruppi[key]);
                                break;
                        }

                        // Se multispesa tutti i filtri devono corrispondere
                        try
                        {
                            if (_isMultiSpesa && ripartizione != null)
                            {
                                foreach (var kvp in ripartizione)
                                {
                                    try
                                    {
                                        kvp.Value.Gruppi = ripart.Gruppi;
                                        kvp.Value.Lotti = ripart.Lotti;
                                        kvp.Value.Stabili = ripart.Stabili;
                                        kvp.Value.UnitaImmobiliari = ripart.UnitaImmobiliari;
                                    }
                                    catch (Exception ex)
                                    {
                                        var log = LogManager.GetLogger("Sfera");
                                        log.Error("Errore inaspettato nella  - MULTISPESA SINGOLO - " + Utility.GetMethodDescription() + " - tipo:" + tipo + " - azienda:" + Login.Instance.CurrentLogin().Azienda, ex);
                                        throw;
                                    }
                                }
                            }
                        }
                        catch (Exception ex)
                        {
                            var log = LogManager.GetLogger("Sfera");
                            log.Error("Errore inaspettato nella  - MULTISPESA - " + Utility.GetMethodDescription() + " - tipo:" + tipo + " - azienda:" + Login.Instance.CurrentLogin().Azienda, ex);
                            throw;
                        }
                    }
                }
            }
            catch (Exception ex)
            {
                var log = LogManager.GetLogger("Sfera");
                log.Error("Errore inaspettato nella funzione - " + Utility.GetMethodDescription() + " - tipo:" + tipo + " - azienda:" + Login.Instance.CurrentLogin().Azienda, ex);
            }
        }
Exemplo n.º 18
0
        public Dictionary<DettaglioSpesaDTO, RipartizioneSpeseDTO> SetRipartizioneByMovimento(DettaglioSpesaDTO dettaglio, MovimentoContabileDTO movimento, EsercizioDTO esercizio, RipartizioneSpeseDTO ripartizioneDettaglio, Dictionary<DettaglioSpesaDTO, RipartizioneSpeseDTO> ripartizione)
        {
            var ripartizioneDettaglioNew = GetRipartizioneByMovimento(movimento, esercizio, ripartizioneDettaglio);
            ripartizione[dettaglio] = ripartizioneDettaglioNew;

            //if (_isMultiSpesa)
            //{
            //    Dictionary<DettaglioSpesaDTO, RipartizioneSpeseDTO> newRipartizione = new Dictionary<DettaglioSpesaDTO, RipartizioneSpeseDTO>(ripartizione.Count);
            //    foreach (KeyValuePair<DettaglioSpesaDTO, RipartizioneSpeseDTO> kvp in ripartizione)
            //    {
            //        RipartizioneSpeseDTO riparto = ripartizioneDettaglioNew;
            //        if (kvp.Key != dettaglio)
            //        {
            //            // Duplico il flag di selezione
            //            if (kvp.Value != null)
            //            {
            //                string key = GetKey(movimento);
            //                if (kvp.Value.UnitaImmobiliari.ContainsKey(key))
            //                {
            //                    List<UnitaImmobiliareSelectedDTO> listaUnita = kvp.Value.UnitaImmobiliari[key];
            //                    foreach (UnitaImmobiliareSelectedDTO unita in listaUnita)
            //                    {
            //                        unita.Selezionato = getSelezionatoUnita(ripartizioneDettaglioNew.UnitaImmobiliari[key], unita.ID);
            //                        unita.Stato = "U";
            //                    }
            //                }
            //            }

            //            // Calcolo la ripartizione
            //            MovimentoContabileDTO movimentoClone = cloneMovimento(movimento, dettaglio.ImportoLordo.Value, kvp.Key.ImportoLordo.Value);
            //            if (movimentoClone.IdConto > 0)
            //            {
            //                riparto = GetRipartizioneByMovimento(movimentoClone, esercizio, kvp.Value);
            //                if (kvp.Value != null)
            //                {
            //                    foreach (MovimentoContabileDTO movimentoDto in riparto.Testata.Movimenti)
            //                    {
            //                        if (isEqualMovimento(movimento, movimentoDto))
            //                        {
            //                            movimentoDto.Importo = movimentoClone.Importo;
            //                            movimentoDto.IdConto = movimentoClone.IdConto;
            //                            movimentoDto.IdSottoConto = movimentoClone.IdSottoConto;
            //                        }
            //                    }
            //                }
            //            }
            //            else
            //            {
            //                ILog _log = LogManager.GetLogger("Sfera");
            //                log4net.MDC.Set("user", Gipasoft.Security.Login.Instance.CurrentLogin().LoginName);
            //                log.Warn("ATTENZIONE: Trovato movimento senza conti definito - " + Gipasoft.Library.Utility.GetMethodDescription() + " - dettaglio:" + dettaglio.ID + " - esercizio:" + esercizio.ID);
            //            }
            //        }

            //        newRipartizione.Add(kvp.Key, riparto);
            //        kvp.Key.Movimenti = riparto.Testata.Movimenti;
            //    }
            //    ripartizione = newRipartizione;
            //}

            return ripartizione;
        }
Exemplo n.º 19
0
 private void addMovimento(MovimentoContabileDTO movimento)
 {
     // TODO: Verificare se possibile spostarle sul server
     getMovimentoContabileService().AddMovimento(_spesa, _causale, movimento, getCurrentRipartizione(), _ripartizione, _isInserimento);
 }
Exemplo n.º 20
0
        public RipartizioneSpeseDTO GetRipartizioneByMovimento(MovimentoContabileDTO movimento, int idEsercizio, RipartizioneSpeseDTO ripartizione)
        {
            var daoFactory = _windsorRepository.GetDaoFactory(_info.Azienda);
            var esercizio = daoFactory.GetEsercizioDao().Find(idEsercizio, false);
            if(esercizio == null)
                return new RipartizioneSpeseDTO();

            var ripartizioneSpeseService = _windsorRepository.GetContainer(_info.Azienda).Resolve<IRipartizioneSpeseService>();

            try
            {
                var key = ripartizioneSpeseService.GetKey(movimento);

                string listaModificata;
                var defaultSelezionato = true;
                if (ripartizione != null)
                {
                    listaModificata = getInstanceModificata(ripartizione, key);
                    clearFlag(ripartizione, key);

                    switch (listaModificata)
                    {
                        case "L":
                            ripartizioneSpeseService.SetLottiDataSource(key, ripartizione.Lotti[key]);
                            defaultSelezionato = false;
                            break;

                        case "S":
                            ripartizioneSpeseService.SetStabiliDataSource(key, ripartizione.Stabili[key]);
                            defaultSelezionato = false;
                            break;

                        case "G":
                            ripartizioneSpeseService.SetGruppiDataSource(key, ripartizione.Gruppi[key]);
                            defaultSelezionato = false;
                            break;

                        case "U":
                            ripartizioneSpeseService.SetUnitaDataSource(key, ripartizione.UnitaImmobiliari[key]);
                            defaultSelezionato = true;
                            break;

                        default:
                            if(ripartizione.UnitaImmobiliari.ContainsKey(key))
                                ripartizioneSpeseService.SetUnitaDataSource(key, ripartizione.UnitaImmobiliari[key]);
                            break;
                    }
                }
                else
                {
                    ripartizione = new RipartizioneSpeseDTO
                    {
                        Testata = new TestataMovimentoContabileDTO
                        {
                            DataRegistrazione = DateTime.Today,
                            IdEsercizio = idEsercizio,
                            IsAbilitataArchiviazioneOttica = false
                        }
                    };
                    ripartizione.Testata.IsAbilitataArchiviazioneOttica = esercizio.CondominioRiferimento.IsAbilitataArchiviazioneOtticaPassivi ?? esercizio.CondominioRiferimento.Azienda.IsAbilitataArchiviazioneOtticaPassivi;

                    listaModificata = "X";
                }

                if (!ripartizione.UnitaImmobiliari.ContainsKey(key) || listaModificata != string.Empty)
                {
                    if (movimento.IdConto == null)
                    {
                        _log.WarnFormat("ATTENZIONE: Trovato movimento con conto a null - {0} - movimento:{1} - esercizio:{2}", Library.Utility.GetMethodDescription(), movimento.ID, idEsercizio);
                    }
                    else
                    {
                        ripartizione.UnitaImmobiliari[key] = getListaUnitaDto(ripartizioneSpeseService.GetUnitaDataSource(key, movimento.IdConto, esercizio.CondominioRiferimento.ID, defaultSelezionato, esercizio, true), daoFactory.GetContoDao().GetById(movimento.IdConto.Value, false));
                        ripartizione.Lotti[key] = getListaDto(ripartizioneSpeseService.GetLottiDataSource(key, movimento.IdConto, esercizio.CondominioRiferimento.ID, null, defaultSelezionato));
                        ripartizione.Stabili[key] = getListaDto(ripartizioneSpeseService.GetStabiliDataSource(key, movimento.IdConto, esercizio.CondominioRiferimento.ID, null, defaultSelezionato));
                        ripartizione.Gruppi[key] = getListaDto(ripartizioneSpeseService.GetGruppiDataSource(key, movimento.IdConto, esercizio.CondominioRiferimento.ID, null, defaultSelezionato));
                    }
                }
 
                return ripartizione;
            }
            catch (Exception ex)
            {
                _log.ErrorFormat("Errore nel caricamento delle ripartizioni spese - {0} - movimento:{1} - esercizio:{2}", ex, Library.Utility.GetMethodDescription(), movimento.ID, idEsercizio);
                throw;
            }
        }
Exemplo n.º 21
0
        public RipartizioneSpeseDTO GetRipartizioneByMovimentoEsistente(MovimentoContabileDTO movimentoDto, int idEsercizio, RipartizioneSpeseDTO ripartizione, int? idContoDetrazione = null)
        {
            var daoFactory = _windsorRepository.GetDaoFactory(_info.Azienda);
            var esercizio = daoFactory.GetEsercizioDao().GetById(idEsercizio, false);
            var ripartizioneSpeseService = _windsorRepository.GetContainer(_info.Azienda).Resolve<IRipartizioneSpeseService>();
            var repTestata = new TestataMovimentoContabileRepository(_info, _windsorRepository, null);

            IRipartizioneSpesa movimento = null;
            if (movimentoDto.Stato == "RIPARTIZIONE")
                movimento = daoFactory.GetRipartizioneSpesaDao().Find(movimentoDto.ID, false); 
            else
                movimento = daoFactory.GetMovimentoContabileDao().Find(movimentoDto.ID, false);
            
            var movimentoContabile = movimento as MovimentoContabile;
            if(movimento != null)
            {
                try
                {
                    var key = ripartizioneSpeseService.GetKey(movimentoDto);

                    if (ripartizione == null)
                        ripartizione = new RipartizioneSpeseDTO();

                    if (movimentoContabile != null)
                    {
                        key = ripartizioneSpeseService.GetKey(movimentoContabile);
                        if (movimentoContabile.Testata != null)
                            ripartizione.Testata = repTestata.GetByDomainEntity(movimentoContabile.Testata);
                    }
                    else if (movimentoDto.Stato != "RIPARTIZIONE")
                    {
                        _log.ErrorFormat("Trovato movimento contabile senza testata associata - {0} - id:{1}", Library.Utility.GetMethodDescription(), movimento.ID);
                    }

                    // -----------------------------------------------
                    // Recupero eventuali filtri di selezione
                    // -----------------------------------------------
                    // Gruppi
                    int[] gruppiSelezionati = null;
                    if (!string.IsNullOrEmpty(movimento.GruppiAddebito))
                    {
                        var gruppiAddebito = movimento.GruppiAddebito.Split('&');
                        gruppiSelezionati = new int[gruppiAddebito.Length];
                        for (var i = 0; i < gruppiAddebito.Length; i++)
                        {
                            if (!string.IsNullOrEmpty(gruppiAddebito[i]))
                                gruppiSelezionati[i] = int.Parse(gruppiAddebito[i]);
                        }
                    }

                    // Lotti
                    int[] lottiSelezionati = null;
                    if (!string.IsNullOrEmpty(movimento.LottiAddebito))
                    {
                        string[] lottiAddebito = movimento.LottiAddebito.Split('&');
                        lottiSelezionati = new int[lottiAddebito.Length];
                        for (var i = 0; i < lottiAddebito.Length; i++)
                        {
                            if (!string.IsNullOrEmpty(lottiAddebito[i]))
                                lottiSelezionati[i] = int.Parse(lottiAddebito[i]);
                        }
                    }

                    // Stabili
                    int[] stabiliSelezionati = null;
                    if (!string.IsNullOrEmpty(movimento.StabiliAddebito))
                    {
                        var stabiliAddebito = movimento.StabiliAddebito.Split('&');
                        stabiliSelezionati = new int[stabiliAddebito.Length];
                        for (var i = 0; i < stabiliAddebito.Length; i++)
                        {
                            if (!string.IsNullOrEmpty(stabiliAddebito[i]))
                                stabiliSelezionati[i] = int.Parse(stabiliAddebito[i]);
                        }
                    }

                    if (movimentoContabile == null || movimentoContabile.Testata != null)
                    {
                        var conto = daoFactory.GetContoDao().Find(movimentoDto.IdConto.GetValueOrDefault(), false);
                        if (conto != null)
                        {
                            Conto contoDetrazione = null;
                            if (idContoDetrazione != null)
                            {
                                contoDetrazione = daoFactory.GetContoDao().Find(idContoDetrazione.GetValueOrDefault(), false);
                                conto = contoDetrazione;
                            }

                            ripartizione.UnitaImmobiliari[key] = getListaUnitaDto(ripartizioneSpeseService.GetUnitaDataSourceByMovimento(key, movimento, contoDetrazione), conto);
                            ripartizione.Lotti[key] = getListaDto(ripartizioneSpeseService.GetLottiDataSource(key, movimentoDto.IdConto, esercizio.CondominioRiferimento.ID, lottiSelezionati));
                            ripartizione.Stabili[key] = getListaDto(ripartizioneSpeseService.GetStabiliDataSource(key, movimentoDto.IdConto, esercizio.CondominioRiferimento.ID, stabiliSelezionati));
                            ripartizione.Gruppi[key] = getListaDto(ripartizioneSpeseService.GetGruppiDataSource(key, movimentoDto.IdConto, esercizio.CondominioRiferimento.ID, gruppiSelezionati));
                        }
                    }

                    return ripartizione;
                }
                catch (Exception ex)
                {
                    _log.ErrorFormat("Errore nel caricamento delle ripartizioni spese - {0}", ex, Library.Utility.GetMethodDescription());
                    throw;
                }                
            }

            return ripartizione;
        }
Exemplo n.º 22
0
        public SpesaInfoDTO SalvaMovimento(RipartizioneSpeseDTO ripartizione, MovimentoContabileDTO movimentoAvere, List<MovimentoContabileDTO> movimentiDare, int? idMovimentoBancario)
        {
            var daoFactory = _windsorRepository.GetDaoFactory(_info.Azienda);
            var movimentoContabileService = _windsorRepository.GetContainer(_info.Azienda).Resolve<IMovimentiContabiliService>();
            var ripartizioneSpeseService = _windsorRepository.GetContainer(_info.Azienda).Resolve<IRipartizioneSpeseService>();
            var protocolloService = _windsorRepository.GetContainer(_info.Azienda).Resolve<IProtocolloService>();
            var archiviazioneService = _windsorRepository.GetContainer(_info.Azienda).Resolve<IArchiviazioneOtticaService>();
            var persistenceContextService = _windsorRepository.GetContainer(_info.Azienda).Resolve<Data.IPersistenceContext>();

            var index = 0;
            movimentoAvere.NumeroRiga = index+1;
            movimentoAvere.Descrizione = ripartizione.Descrizione;

            if (movimentoAvere.Importo > 0)
                movimentoAvere.Segno = "A";
            else
            {
                movimentoAvere.Segno = "D";
                movimentoAvere.Importo = movimentoAvere.Importo * -1;
            }

            int? idEsercizio = null;
            try
            {
                var esercizio = daoFactory.GetEsercizioDao().GetById(ripartizione.Testata.IdEsercizio.GetValueOrDefault(), true);

                if (esercizio.Stato == StatoEsercizioEnum.Aperto)
                {
                    idEsercizio = esercizio.ID;
                    var numeroRegistrazione = esercizio.ProgressivoRegistrazioneContabile;
                    ripartizione.Testata.Movimenti = new MovimentoContabileDTO[movimentiDare.Count + 1];
                    ripartizione.Testata.Movimenti[0] = movimentoAvere;
                    numeroRegistrazione++;
                    movimentoAvere.NumeroRegistrazione = numeroRegistrazione;

                    // Salvo eventuali valori del movimento patrimoniale originale
                    if(movimentoAvere.ID > 0)
                    {
                        var movimento = daoFactory.GetMovimentoContabileDao().Find(movimentoAvere.ID, false);
                        if (movimento?.EvasioneBancaria != null)
                            movimentoAvere.IdEvasione = movimento.EvasioneBancaria.ID;
                    }

                    if (!(ripartizione.Testata.IdModelloRipartizione > 0))
                    {
                        foreach (var movimentoEconomico in movimentiDare)
                        {
                            index++;
                            numeroRegistrazione++;

                            if (movimentoEconomico.Importo < 0)
                            {
                                movimentoEconomico.Importo = movimentoEconomico.Importo*-1;
                                movimentoEconomico.Segno = "A";
                            }
                            else
                                movimentoEconomico.Segno = "D";

                            movimentoEconomico.IsMovimentoEconomico = true;
                            movimentoEconomico.NumeroRegistrazione = numeroRegistrazione;
                            movimentoEconomico.Causale = movimentoAvere.Causale;
                            movimentoEconomico.IdFornitore = movimentoAvere.IdFornitore;
                            if (string.IsNullOrEmpty(movimentoEconomico.Descrizione) && !esercizio.CondominioRiferimento.DescrizioneSpeseAutomatica)
                                movimentoEconomico.Descrizione = ripartizione.Descrizione;
                            movimentoEconomico.IdTestata = ripartizione.Testata.ID;
                            ripartizione.Testata.Movimenti[index] = movimentoEconomico;

                            // ---------------------------------------------------------------------
                            // Aggiorno addebiti per lotto, stabile o scala
                            // ---------------------------------------------------------------------
                            var spesePersonali = false;
                            if (movimentoEconomico.ID > 0)
                            {
                                var movimento = daoFactory.GetMovimentoContabileDao().Find(movimentoEconomico.ID, false);
                                if (movimento != null)
                                {
                                    movimentoEconomico.LottiAddebito = movimento.LottiAddebito;
                                    movimentoEconomico.StabiliAddebito = movimento.StabiliAddebito;
                                    movimentoEconomico.GruppiAddebito = movimento.GruppiAddebito;
                                    spesePersonali = movimento.ContoRiferimento.IsSpesePersonali;
                                }
                            }

                            // ---------------------------------------------------------------------
                            //  Verifico se è stata eseguita una ripartizione personalizzata
                            // ---------------------------------------------------------------------
                            var key = ripartizioneSpeseService.GetKey(movimentoEconomico);

                            movimentoEconomico.IsRipartoPersonalizzato = false;

                            // Lasciare la valorizzazione di NumeroRiga DOPO il GetKey altrimenti la chiave NON viene trovata per i movimenti con più di 1 conto economico
                            movimentoEconomico.NumeroRiga = index + 1;

                            if (ripartizione.UnitaImmobiliari != null && ripartizione.UnitaImmobiliari.ContainsKey(key))
                            {
                                movimentoEconomico.LottiAddebito = getLottiAddebito(ripartizione, key);
                                movimentoEconomico.StabiliAddebito = getStabiliAddebito(ripartizione, key);
                                movimentoEconomico.GruppiAddebito = getGruppiAddebito(ripartizione, key);

                                var unita = ripartizione.UnitaImmobiliari[key];
                                var isPersonalizzato = unita.Count(item => item.Selezionato) < unita.Length;

                                // Considero il movimento come ripartito personalmente se non sono presenti specifici riparti per lotto, stabile o scala e non si tratta di un conto di spese personali
                                if (isPersonalizzato && !spesePersonali && string.IsNullOrEmpty(movimentoEconomico.LottiAddebito) && string.IsNullOrEmpty(movimentoEconomico.StabiliAddebito) && string.IsNullOrEmpty(movimentoEconomico.GruppiAddebito))
                                    movimentoEconomico.IsRipartoPersonalizzato = true;
      
                                var conto = daoFactory.GetContoDao().GetById(movimentoEconomico.IdConto.Value, false);
                                if (conto.IsSpesePersonali || movimentoEconomico.IsRipartoPersonalizzato)
                                {
                                    movimentoEconomico.DettaglioRipartizione = new SpeseUnitaDTO[unita.Length];

                                    // -----------------------------------------------------------
                                    // Per le unità ricalcolo gli importi
                                    // -----------------------------------------------------------
                                    var instanceModificata = getInstanceModificata(ripartizione, key);
                                    if (!string.IsNullOrEmpty(instanceModificata) && instanceModificata != "U")
                                        GetRipartizioneByMovimento(movimentoEconomico, esercizio.ID, ripartizione);
                                    else
                                    {
                                        movimentoEconomico.DettaglioRipartizione = new SpeseUnitaDTO[movimentoEconomico.DettaglioRipartizione.Length];
                                        var unitaSelected = ripartizione.UnitaImmobiliari[key];
                                        for (var i = 0; i < unitaSelected.Length; i++)
                                        {
                                            if (unitaSelected[i].Selezionato)
                                            {
                                                var spesaUnitaDto = new SpeseUnitaDTO { ID = 0, IdMovimentoRiferimento = movimentoEconomico.ID, Importo = unitaSelected[i].Importo };
                                                if (unitaSelected[i].IdSoggettoCondominio > 0)
                                                    spesaUnitaDto.IdSoggetto = unitaSelected[i].IdSoggettoCondominio;
                                                else
                                                    spesaUnitaDto.IdUnitaRiferimento = unitaSelected[i].ID;
                                                movimentoEconomico.DettaglioRipartizione[i] = spesaUnitaDto;
                                            }
                                        }
                                    }
                                }
                            }
                        }
                    }

                    // -------------------------------------------
                    // Elimino vecchia testata
                    // -------------------------------------------
                    int? oldProtocollo = null;
                    int? oldAnnoArchiviazione = null;
                    var oldTipoTestata = TipoTestataMovimentoContabileEnum.Undefined;
                    AddebitoCompetenza addebito = null;
                    var testataOld = daoFactory.GetTestataMovimentoContabileDao().Find(ripartizione.Testata.ID, false);
                    if (testataOld != null)
                    {
                        if (testataOld.AddebitoCompetenze.Count > 0)
                            addebito = Library.IesiGenericCollections<AddebitoCompetenza>.GetByIndex(testataOld.AddebitoCompetenze, 0);

                        oldProtocollo = testataOld.NumeroProtocollo;
                        oldAnnoArchiviazione = testataOld.AnnoArchiviazioneOttica;
                        testataOld.EsercizioRiferimento = null;

                        // ------------------------------------------------------------------------
                        //  Nel caso si tratti di un movimento generato automaticamente dalla procedura solleciti
                        //  elimino la relazione tra sollecito e movimento contabile.
                        //  Solo per le vecchie versioni di addebito competenze solleciti
                        // ------------------------------------------------------------------------
                        if (testataOld.Tipo == TipoTestataMovimentoContabileEnum.Automatica)
                        {
                            oldTipoTestata = testataOld.Tipo;

                            // per impostare correttamente la descrizione della testata
                            movimentoAvere.Descrizione = testataOld.Descrizione;

                            var solleciti = daoFactory.GetSollecitoDao().GetByTestataMovimentoContabile(testataOld.ID);
                            foreach (var sollecito in solleciti)
                                sollecito.MovimentoEconomico = null;

                            ripartizione.Testata.Tipo = testataOld.Tipo;
                        }

                        daoFactory.GetTestataMovimentoContabileDao().Delete(testataOld);

                        ripartizione.Testata.ID = 0;
                        foreach (var movDto in ripartizione.Testata.Movimenti)
                        {
                            if (movDto != null)
                                movDto.ID = 0;
                        }
                    }

                    // -------------------------------------------
                    // Creo nuova testata
                    // -------------------------------------------
                    var rep = new TestataMovimentoContabileRepository(_info, _windsorRepository, null);
                    var testata = rep.ManageDomainEntity(ripartizione.Testata);
                    if (testata == null || movimentoAvere == null)
                    {
                        if (testata == null)
                        {
                            _log.ErrorFormat("Errore inaspettato nel salvataggio (UPDATE) del movimento - TESTATA NULL - {0} - esercizio:{1} - azienda:{2}", Library.Utility.GetMethodDescription(), idEsercizio.GetValueOrDefault(), _info.Azienda);
                            persistenceContextService.RollbackAndCloseSession(Security.Login.Instance.CurrentLogin().LoginName);
                            persistenceContextService.BeginTransaction(Security.Login.Instance.CurrentLogin().LoginName, IsolationLevel.ReadUncommitted);
                            return new SpesaInfoDTO { Id = 0, NumeroProtocollo = 0, IdentificativoArchiviazione = null, StampaEtichettaArchiviazione = false, Message = "Errore inaspettato nel salvataggio del movimento, si prega di riprovare." };
                        }

                        if (movimentoAvere == null)
                        {
                            _log.ErrorFormat("Errore inaspettato nel salvataggio (UPDATE) del movimento - MOVIMENTO AVERE NULL - {0} - esercizio:{1} - azienda:{2}", Library.Utility.GetMethodDescription(), idEsercizio.GetValueOrDefault(), _info.Azienda);
                            persistenceContextService.RollbackAndCloseSession(Security.Login.Instance.CurrentLogin().LoginName);
                            persistenceContextService.BeginTransaction(Security.Login.Instance.CurrentLogin().LoginName, IsolationLevel.ReadUncommitted);
                            return new SpesaInfoDTO { Id = 0, NumeroProtocollo = 0, IdentificativoArchiviazione = null, StampaEtichettaArchiviazione = false, Message = "Errore inaspettato nel salvataggio del movimento, si prega di riprovare." };
                        }
                    }

                    testata.Descrizione = movimentoAvere.Descrizione;
                    if (oldProtocollo != null)
                        testata.NumeroProtocollo = oldProtocollo;
                    if (oldAnnoArchiviazione != null)
                        testata.AnnoArchiviazioneOttica = oldAnnoArchiviazione;
                    if (oldTipoTestata != TipoTestataMovimentoContabileEnum.Undefined)
                        testata.Tipo = oldTipoTestata;

                    // Aggiorno eventuali addebiti di competenze esistenti
                    if (addebito != null)
                    {
                        addebito.TestataMovimento = testata;
                        IList<MovimentoContabile> movimentiEconomici = testata.Movimenti.Where(item => item.IsEconomico()).ToList();
                        IList<DettaglioAddebitoCompetenza> dettagliAddebito = addebito.Dettaglio.ToList();
                        if (movimentiEconomici.Count == dettagliAddebito.Count)
                        {
                            for (var i = 0; i < dettagliAddebito.Count; i++)
                                dettagliAddebito[i].MovimentoContabile = movimentiEconomici[i];
                        }
                        else
                        {
                            throw new InvalidDataException("Non è possibile aggiornare direttamente un movimento contabile generato da un addebito di competenze");
                            //foreach (var dettaglioAddebito in addebito.Dettaglio)
                            //    dettaglioAddebito.MovimentoContabile = null;
                        }
                    }

                    // ======================================================================================
                    //  Evasione Movimenti
                    // ======================================================================================
                    if (idMovimentoBancario != null)
                    {
                        IList<MovimentoContabile> movimentiContabili = (from movimento in testata.Movimenti where !movimento.IsEconomico() select movimento).ToList();
                        IList<int> idMovimentiBancari = new List<int> {idMovimentoBancario.GetValueOrDefault()};
                        movimentoContabileService.EvadiMovimento($"Evasione automatica registrazione movimento contabile del {ripartizione.Testata.DataRegistrazione.GetValueOrDefault():d}", movimentiContabili, idMovimentiBancari, null, null);
                    }

                    // =====================================================================================================
                    //  Se presente applico il modello di ripartizione, altrimenti ricalcolo valori o l'intera ripartizione
                    // =====================================================================================================
                    if (ripartizione.Testata.IdModelloRipartizione > 0)
                    {
                        var tipo = TipoMovimentoEnum.Spesa;
                        if (movimentoAvere.Segno == "D")
                            tipo = TipoMovimentoEnum.Accredito;

                        // NON VIENE PIù RICALCOLATA LE RIPARTIZIONE, SARA' CALCOLATA IN FASE DI BILANCIO
                        ripartizioneSpeseService.ApplyModello(testata, ripartizione.Testata.IdModelloRipartizione.Value, movimentoAvere.Importo.Value, tipo, false);

                        // Ripristino le descrizioni precedenti se presenti
                        foreach (var dto in movimentiDare)
                        {
                            if (!string.IsNullOrEmpty(dto.Descrizione))
                            {
                                var movimento = (from item in testata.Movimenti
                                                 where item.NumeroRiga == dto.NumeroRiga
                                                 select item).SingleOrDefault();
                                if (movimento != null)
                                    movimento.Descrizione = dto.Descrizione;
                            }
                        }
                    }
                    else
                    {
                        // Salvataggio modello
                        testata.ModelloRipartizione = SalvaModelloRipartizioneContabile(ripartizione, testata, movimentiDare, movimentoAvere.Importo.Value);
                    }

                    // =====================================================================================================
                    // Salvataggio progressivo registrazione
                    // =====================================================================================================
                    esercizio.ProgressivoRegistrazioneContabile = numeroRegistrazione;

                    // =====================================================================================================
                    // Registrazione dell'eventuale arrotondamento
                    // =====================================================================================================
                    if (testata.Movimenti.FirstOrDefault() != null)
                        movimentoContabileService.SetMovimentoArrotondamento(null, testata, testata.Movimenti.FirstOrDefault().Causale, null);

                    // ======================================================================================
                    //  Recupero il numero di protocollo e l'identificativo di archiviazione
                    // ======================================================================================
                    int protocollo;
                    if (testata.NumeroProtocollo.GetValueOrDefault() == 0)
                    {
                        {
                            var progressivo = protocolloService.GetProgressivo(TipoProtocollo.Fattura,
                                esercizio.DataApertura.GetValueOrDefault().Year,
                                testata.EsercizioRiferimento.CondominioRiferimento);
                            if (progressivo.Progressivo != null)
                            {
                                protocollo = progressivo.Progressivo.Value;
                                testata.NumeroProtocollo = protocollo;
                                testata.AnnoArchiviazioneOttica = esercizio.DataApertura.GetValueOrDefault().Year;
                            }
                            else
                                return new SpesaInfoDTO
                                {
                                    Id = 0,
                                    IdentificativoArchiviazione = null,
                                    NumeroProtocollo = 0,
                                    StampaEtichettaArchiviazione = false,
                                    Message = progressivo.Message
                                };
                        }
                    }
                    else
                    {
                        protocollo = testata.NumeroProtocollo.Value;
                    }

                    var identificativoArchiviazione = archiviazioneService.GetIdentificativoArchiviazione(testata);

                    var movimentoPatrimoniale = (from item in testata.Movimenti
                                                 where item.NumeroRiga == movimentoAvere.NumeroRiga
                                                 select item).FirstOrDefault();
                    var idMovimentoPatrimoniale = 0;
                    if (movimentoPatrimoniale != null)
                        idMovimentoPatrimoniale = movimentoPatrimoniale.ID;

                    var impostazioni = daoFactory.GetImpostazioniAziendaDao().GetByAzienda(esercizio.CondominioRiferimento.Azienda.ID);
                    if (impostazioni == null)
                    {
                        impostazioni = new ImpostazioniAzienda(daoFactory.GetAziendaDao().GetById(esercizio.CondominioRiferimento.Azienda.ID, false));
                        daoFactory.GetImpostazioniAziendaDao().SaveOrUpdate(impostazioni);
                    }

                    var stampaEtichetta = false;
                    var etichettatrice = string.Empty;
                    var tipoEichetta = "Testo";
                    int? trayEtichettatriceAttivazioneOttica = null;
                    if (impostazioni != null)
                    {
                        stampaEtichetta = impostazioni.UtilizzoEtichettatriceArchiviazioneOtticaMovimenti && testata.IsAbilitataArchiviazioneOttica;
                        etichettatrice = impostazioni.EtichettatriceArchiviazioneOttica;
                        tipoEichetta = impostazioni.TipoEtichettaArchiviazioneOttica;
                        trayEtichettatriceAttivazioneOttica = impostazioni.TrayEtichettatriceAttivazioneOttica;
                    }

                    return new SpesaInfoDTO
                    {
                        Id = idMovimentoPatrimoniale,
                        NumeroProtocollo = testata.NumeroProtocollo.Value,
                        IdentificativoArchiviazione = identificativoArchiviazione,
                        StampaEtichettaArchiviazione = stampaEtichetta,
                        EtichettatriceArchiviazione = etichettatrice,
                        TipoEtichettaArchiviazione = tipoEichetta,
                        TrayEtichettatriceAttivazioneOttica = trayEtichettatriceAttivazioneOttica
                    };
                }
                return new SpesaInfoDTO
                {
                    Id = 0,
                    NumeroProtocollo = 0,
                    IdentificativoArchiviazione = null,
                    StampaEtichettaArchiviazione = false,
                    Message = "La registrazione non è possibile perchè relativo ad un esercizio chiuso."
                };
            }
            catch (Exception ex)
            {
                var message = ex.ToString().StartsWith("NHibernate.StaleObjectStateException") ? "Un altro utente ha confermato un movimento." : "Errore inaspettato nell'attribuzione del numero di registrazione, probabilmente determinato da un conflitto di aggiornamento";
                
                _log.ErrorFormat("Errore inaspettato nel salvataggio (UPDATE) del movimento - {0} - idMovimentoAvere:{1} - esercizio:{2} - azienda:{3}", ex, Library.Utility.GetMethodDescription(), movimentoAvere.ID, idEsercizio.GetValueOrDefault(), _info.Azienda);
                persistenceContextService.RollbackAndCloseSession(Security.Login.Instance.CurrentLogin().LoginName);
                persistenceContextService.BeginTransaction(Security.Login.Instance.CurrentLogin().LoginName, IsolationLevel.ReadUncommitted);
                return new SpesaInfoDTO { Id = 0, NumeroProtocollo = 0, IdentificativoArchiviazione = null, StampaEtichettaArchiviazione = false, Message = message };
            }

        }
Exemplo n.º 23
0
        private ResultMovimentoContabile manageMovimento(MovimentoContabileDTO dto)
        {
            string message = string.Empty;
            MovimentoContabile item = null;

            // Controllo sullo stato U, D, I
            switch (dto.Stato.ToUpper())
            {
                case "U":
                    bool result = update(dto, out item);

                    if (!result)
                        throw new Exception("Il dato sul database è più recente di quello utilizzato");
                    break;
                case "I":
                    message = insert(dto, out item);
                    break;
            }

            if (!string.IsNullOrEmpty(message))
                item = null;

            return new ResultMovimentoContabile(item, message);
        }
Exemplo n.º 24
0
        public MovimentoContabileEconomicoUC(TestataMovimentoContabileDTO testata, EsercizioDTO esercizio, UpdatableStandardForm formGestione)
        {
            try
            {
                InitializeComponent();

                _esercizio = esercizio;
                _testata = testata;
                _formGestione = formGestione;

                inizializza();

                if (_esercizio == null && testata.IdEsercizio != null && testata.IdEsercizio > 0)
                    _esercizio = getEsercizioService().GetById(testata.IdEsercizio.Value);

                _movimentiDare = getMovimentoContabileService().GetMovimentiLista(_testata);

                if (testata.Tipo == TipoTestataMovimentoContabileEnum.Automatica)
                {
                    groupDettaglioMovimento.Visible = false;
                    groupDettaglioMovimento.Enabled = false;
                    if (!_confirmByParent)
                        btnConferma.Visible = true;
                    btnRicevuta.Visible = true;
                }
                else
                {
                    groupDettaglioMovimento.Visible = true;
                    groupDettaglioMovimento.Enabled = true;
                }

                _movimentoAvere = getMovimentoContabileService().GetMovimentoSingolo(_testata);
                if (_movimentoAvere != null)
                {
                    _causale = _movimentoAvere.Causale;

                    int? idEsercizio = null;
                    if (_esercizio != null)
                        idEsercizio = _esercizio.ID;
                    _conto = getPianoContiService().GetById(_movimentoAvere.IdConto.GetValueOrDefault(), idEsercizio);

                    // Se il sottoconto è presente ed ha valore negativo trattasi di conto corrente bancario bugid#3754
                    if (_movimentoAvere.IdSottoConto != null)
                    {
                        if (_movimentoAvere.IdSottoConto.GetValueOrDefault() < 0)
                            _idContoBancario = _movimentoAvere.IdSottoConto.GetValueOrDefault()*-1;
                    }
                    
                    _importo = _movimentoAvere.Importo.GetValueOrDefault();
                    descrizioneDettaglio.Value = _movimentoAvere.Descrizione;
                    noteDettaglio.Value = _testata.Note;
                }

                numeroProtocollo.Value = testata.NumeroProtocollo;
                archiviazioneOttica.Checked = testata.IsAbilitataArchiviazioneOttica;
                dataRegistrazione.DateTime = testata.DataRegistrazione.GetValueOrDefault();

                dataInizioCompetenza.Value = null;
                dataFineCompetenza.Value = null;
                if (testata.DataInizioCompetenza != null)
                    dataInizioCompetenza.DateTime = testata.DataInizioCompetenza.GetValueOrDefault();
                if (testata.DataFineCompetenza != null)
                    dataFineCompetenza.DateTime = testata.DataFineCompetenza.GetValueOrDefault();

                sceltaEsercizioGroupBox.Enabled = false;
                sceltaCondominioCombo1.Enabled = false;
                esercizi.Enabled = false;

                btnRiparto.Enabled = false;
                btnConferma.Enabled = false;
                backgroundWorkerLoadDati.RunWorkerAsync(_movimentiDare);
            }
            catch (Exception ex)
            {
                var idStr = "<NULL>";
                if (testata != null)
                    idStr = testata.ID.ToString();

                var idEsercizioStr = "<NULL>";
                if (esercizio != null)
                    idEsercizioStr = esercizio.ID.ToString();

                var nomeForm = "<NULL>";
                if (formGestione != null)
                    nomeForm = formGestione.Name;

                _log.ErrorFormat("Errore insaspettato nel costruttore - {0} - testata:{1} - esercizio:{2} - formGestione:{3}", ex, Utility.GetMethodDescription(), idStr, idEsercizioStr, nomeForm);
                throw;
            }
        }
Exemplo n.º 25
0
        private MovimentoContabileDTO setDto(MovimentoContabile item, bool includeDettaglioMovimenti, bool isEconomici, bool detrazione = false)
        {
            if (item != null)
            {
                if (item.ContoRiferimento == null)
                {
                    _log.ErrorFormat("Non trovato conto per movimento contabile - {0} - movimento:{1}", Utility.GetMethodDescription(), item.ID);
                    return new MovimentoContabileDTO();
                }

                try
                {
                    var daoFactory = _windsorConfigRepository.GetContainer(_info.Azienda).Resolve<IDaoFactory>();
                    var dto = new MovimentoContabileDTO
                    {
                        ID = item.ID,
                        Causale = getContabilitaRepostory().GetCausaleByDomainEntity(item.Causale),
                        Note = item.Note,
                        NumeroRiga = item.NumeroRiga,
                        NumeroRegistrazione = item.NumeroRegistrazione,
                        NumeroAssegno = item.NumeroAssegno,
                        Importo = item.GetImportoPerSpesa(isEconomici),
                        Segno = item.Segno,
                        PercentualeProprieta = item.PercentualeProprieta,
                        Descrizione = item.Descrizione,
                        IsRipartoPersonalizzato = item.IsRipartoPersonalizzato,
                        IdConto = item.ContoRiferimento.ID
                    };

                    if (item.SottoContoRiferimento != null)
                        dto.IdSottoConto = item.SottoContoRiferimento.ID;
                    else if (item.ContoCorrenteBancario != null)
                        dto.IdSottoConto = item.ContoCorrenteBancario.ID * -1;

                    if (item.Testata != null)
                        dto.IdTestata = item.Testata.ID;
                    else
                        _log.ErrorFormat("Trovato movimento contabile senza testata associata {0} - id:{1}", Utility.GetMethodDescription(), item.ID);

                    var speseUnita = new SpeseUnitaDTO[0];
                    if (includeDettaglioMovimenti)
                    {
                        speseUnita = new SpeseUnitaDTO[item.DettaglioRipartizione.Count];
                        var index = 0;
                        foreach (var spesa in item.DettaglioRipartizione)
                        {
                            speseUnita[index] = getSpeseUnitaRepository().GetByDomainEntity(spesa);
                            index++;
                        }
                    }
                    dto.DettaglioRipartizione = speseUnita;

                    if (item.FornitoreRiferimento != null)
                        dto.IdFornitore = item.FornitoreRiferimento.ID;
                    if (item.CondominoRiferimento != null)
                        dto.IdCondomino = item.CondominoRiferimento.ID;

                    // --------------------------
                    // Scale addebito
                    // --------------------------
                    if (!string.IsNullOrEmpty(item.GruppiAddebito))
                    {
                        var scaleAddebito = string.Empty;
                        var scale = item.GruppiAddebito.Split('&');
                        foreach (var idScala in scale)
                        {
                            try
                            {
                                var scala = daoFactory.GetGruppoStabileDao().Find(int.Parse(idScala), false);
                                if (scala != null)
                                {
                                    if (!string.IsNullOrEmpty(scaleAddebito))
                                    {
                                        if (!scaleAddebito.Contains("<br/>"))
                                            scaleAddebito = "<b>" + scaleAddebito + "</b><br/>";
                                        else
                                            scaleAddebito += "<br/>";
                                    }
                                    scaleAddebito += scala.Descrizione;
                                }
                            }
                            catch (Exception ex)
                            {
                                _log.ErrorFormat("Errore nel calcolo dell'addebito scale - SINGOLA SCALA - {0} - scala:{1}", ex, Utility.GetMethodDescription(), idScala);
                                throw;
                            }

                        }

                        dto.Scale = scaleAddebito;
                    }

                    // --------------------------
                    // Stabili addebito
                    // --------------------------
                    if (!string.IsNullOrEmpty(item.StabiliAddebito))
                    {
                        var stabiliAddebito = string.Empty;
                        var stabili = item.StabiliAddebito.Split('&');
                        foreach (var idStabile in stabili)
                        {
                            try
                            {
                                var scala = daoFactory.GetPalazzinaDao().Find(int.Parse(idStabile), false);
                                if (scala != null)
                                {
                                    if (!string.IsNullOrEmpty(stabiliAddebito))
                                    {
                                        if (!stabiliAddebito.Contains("<br/>"))
                                            stabiliAddebito = "<b>" + stabiliAddebito + "</b><br/>";
                                        else
                                            stabiliAddebito += "<br/>";
                                    }
                                    stabiliAddebito += scala.Descrizione;
                                }
                            }
                            catch (Exception ex)
                            {
                                _log.ErrorFormat("Errore nel calcolo dell'addebito stabili - SINGOLO STABILE - {0} - stabile:{1}", ex, Utility.GetMethodDescription(), idStabile);
                                throw;
                            }

                        }

                        dto.Stabili = stabiliAddebito;
                    }

                    // ---------------------------------------------
                    // Nominativo Spesa Personale
                    // ---------------------------------------------
                    var nominativoSpesaPersonale = string.Empty;
                    var personeElaborate = new List<string>();
                    foreach (var spesaUnita in item.DettaglioRipartizione)
                    {
                        if (spesaUnita.Importo.GetValueOrDefault() != 0)
                        {
                            if (!string.IsNullOrEmpty(nominativoSpesaPersonale))
                            {
                                if (!nominativoSpesaPersonale.Contains("<br/>"))
                                    nominativoSpesaPersonale = "<b>" + nominativoSpesaPersonale.Replace('&', 'e') + "</b><br/>";
                                else if (!nominativoSpesaPersonale.EndsWith("<br/>"))
                                    nominativoSpesaPersonale += "<br/>";
                            }

                            // -------------------------------------------------
                            // Dettaglio riferito ad una unità immobiliare
                            // -------------------------------------------------
                            if (spesaUnita.UnitaRiferimento != null)
                            {
                                Spesa spesa = null;
                                if (item.DettaglioRiferimento != null && item.DettaglioRiferimento.SpesaRiferimento != null)
                                    spesa = item.DettaglioRiferimento.SpesaRiferimento;

                                if (spesa != null)
                                {
                                    if (item.ContoRiferimento.PercentualeProprieta == 1)
                                    {
                                        var nominativo = spesaUnita.UnitaRiferimento.GetProprietarioPrincipale(spesa.EsercizioRiferimento.DataChiusura).DisplayName;
                                        if (!personeElaborate.Contains(nominativo))
                                        {
                                            nominativoSpesaPersonale += nominativo;
                                            personeElaborate.Add(nominativo);
                                        }
                                    }
                                    else
                                    {
                                        var conduttore = spesaUnita.UnitaRiferimento.GetConduttorePrincipale(spesa.EsercizioRiferimento.DataChiusura);
                                        var nominativo = conduttore != null ? conduttore.DisplayName : spesaUnita.UnitaRiferimento.GetProprietarioPrincipale(spesa.EsercizioRiferimento.DataChiusura).DisplayName;
                                        if (!string.IsNullOrEmpty(nominativo) && !personeElaborate.Contains(nominativo))
                                        {
                                            nominativoSpesaPersonale += nominativo;
                                            personeElaborate.Add(nominativo);
                                        }
                                    }
                                }
                            }

                            // -------------------------------------------------
                            // Dettaglio riferito direttamente ad un condomino
                            // -------------------------------------------------
                            if (spesaUnita.SoggettoCondominio != null)
                            {
                                var nominativo = spesaUnita.SoggettoCondominio.DisplayName;
                                if (!personeElaborate.Contains(nominativo))
                                {
                                    nominativoSpesaPersonale += nominativo;
                                    personeElaborate.Add(nominativo);
                                }
                            }
                        }
                    }

                    dto.NominativoSpesaPersonale = nominativoSpesaPersonale;

                    return dto;
                }
                catch (Exception ex)
                {
                    _log.ErrorFormat("Errore nel caricamento del Movimento Contabile - {0} - id:{1}", ex, Utility.GetMethodDescription(), item != null ? item.ID.ToString(CultureInfo.InvariantCulture) : "<NULL>");
                    throw;
                }

            }

            return new MovimentoContabileDTO();
        }
Exemplo n.º 26
0
        private void setRipartizioneMovimento(MovimentoContabileDTO movimento)
        {
            try
            {
                if (movimento != null)
                {
                    var key = getMovimentoContabileService().GetKey(movimento);
                    if (_ripartizione == null || !_ripartizione.UnitaImmobiliari.ContainsKey(key))
                    {
                        var form = new ExecuteLoadDataObjectAsync<RipartizioneSpeseDTO>("La funzione è in corso di esecuzione ....." + Environment.NewLine + "Si prega di attendere.");
                        Func<RipartizioneSpeseDTO> loadDati;
                        if (movimento.ID == 0)
                            loadDati = () => getMovimentoContabileService().GetRipartizioneByMovimento(movimento, _esercizio, _ripartizione);
                        else
                            loadDati = () => getMovimentoContabileService().GetRipartizioneByMovimentoEsistente(movimento, _esercizio, _ripartizione, null);

                        form.LoadData(loadDati);
                        form.ShowDialog();
                        _ripartizione = form.DataSourceObject;
                        form.Dispose();
                        if (_testata != null && _ripartizione != null)
                            _ripartizione.Testata.ID = _testata.ID;
                        else
                        {
                            if(_ripartizione == null)
                                _log.WarnFormat("DataSourceObject a NULL - {0} - movimento:{1}", Utility.GetMethodDescription(), movimento.ID);
                        }
                    }
                }
            }
            catch (Exception ex)
            {
                var idMovimento = string.Empty;
                if (movimento != null)
                    idMovimento = movimento.ID.ToString();
                
                _log.ErrorFormat("Errore inaspettato nel set della ripartizione - {0} - movimento:{1}", ex, Utility.GetMethodDescription(), idMovimento);
            }
        }
Exemplo n.º 27
0
        private bool update(MovimentoContabileDTO dto, out MovimentoContabile item)
        {
            var result = false;
            item = null;
            var daoFactory = _windsorConfigRepository.GetContainer(_info.Azienda).Resolve<IDaoFactory>();

            try
            {
                item = daoFactory.GetMovimentoContabileDao().GetById(dto.ID, false);

                // Condizione necessaria per il controllo del fatto che sul DB ho una versione uguale o più vecchia
                if (dto.Version <= item.Version)
                {
                    item.Causale = daoFactory.GetCausaleContabileDao().GetById(dto.Causale.ID, false);
                    item.ContoRiferimento = daoFactory.GetContoDao().GetById(dto.IdConto.GetValueOrDefault(), false);
                    
                    setSottoConto(dto, item, daoFactory);

                    if (dto.IdFornitore != null && dto.IdFornitore > 0)
                        item.FornitoreRiferimento = daoFactory.GetFornitoreDao().GetById(dto.IdFornitore.Value, false);
                    else
                        item.FornitoreRiferimento = null;
                    
                    item.Importo = dto.Importo;
                    item.Note = dto.Note;
                    item.NumeroRiga = dto.NumeroRiga;
                    item.Descrizione = dto.Descrizione;
                    item.Segno = dto.Segno;
                    item.PercentualeProprieta = dto.PercentualeProprieta;
                    item.NumeroRegistrazione = dto.NumeroRegistrazione;
                    item.NumeroAssegno = dto.NumeroAssegno;

                    item.GruppiAddebito = dto.GruppiAddebito;
                    item.LottiAddebito = dto.LottiAddebito;
                    item.StabiliAddebito = dto.StabiliAddebito;

                    if (dto.IsMovimentoEconomico != null)
                        item.IsMovimentoEconomico = dto.IsMovimentoEconomico.GetValueOrDefault();

                    // ------------------------------------------
                    // Dettaglio Ripartizione
                    // ------------------------------------------
                    var rep = new SpeseUnitaRepository(item, _info, _windsorConfigRepository);
                    item.DettaglioRipartizione.Clear();

                    foreach (SpeseUnitaDTO t in dto.DettaglioRipartizione)
                    {
                        try
                        {
                            if (t != null && t.Importo != 0)
                            {
                                t.IdMovimentoRiferimento = item.ID;

                                int? id = t.ID;
                                if ((t.Stato == "U") || (t.Stato == "I"))
                                    id = rep.ManageDomainEntity(t);

                                var spesaUnita = daoFactory.GetSpeseUnitaDao().GetById(id.Value, false);
                                item.DettaglioRipartizione.Add(spesaUnita);
                                spesaUnita.MovimentoRiferimento = item;
                            }
                        }
                        catch (Exception ex)
                        {
                            _log.ErrorFormat("Errore nel salvataggio dek movimenti - DETTAGLIO RIPARTIZIONE - {0} - id:{1}", Utility.GetMethodDescription(), ex);
                            throw;
                        }
                    }

                    if (dto.IdEvasione != null)
                       item.EvasioneBancaria = daoFactory.GetEvasioneBancariaDao().Find(dto.IdEvasione.GetValueOrDefault(), false);

                    result = true;
                }
                else
                {
                    // Eccezione: Sul db c'è qualche cosa di più nuovo.
                    _log.ErrorFormat("Errore nel salvataggio del movimento id:{0} - il dato sul db è più recente di quello che si vuole salvare", dto.ID);
                }
            }
            catch (Exception ex)
            {
                _log.ErrorFormat("Errore nel salvataggio del movimento - {0} - id:{1}", ex, Utility.GetMethodDescription(), dto.ID);
                throw;
            }

            return result;
        }
Exemplo n.º 28
0
        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;
        }
Exemplo n.º 29
0
        public MovimentoContabileDTO[] GetByDettaglio(int id)
        {
            try
            {
                if (id > 0)
                {
                    var daoFactory = _windsorConfigRepository.GetContainer(_info.Azienda).Resolve<IDaoFactory>();
                    var lista = daoFactory.GetDettaglioSpesaDao().GetById(id, false).Movimenti;
                    var movimenti = new MovimentoContabileDTO[lista.Count];

                    var index = 0;
                    foreach (var movimento in lista)
                    {
                        movimenti[index] = setDto(movimento, false, true);
                        index++;
                    }

                    return movimenti;
                }
                return new MovimentoContabileDTO[0];
            }
            catch (Exception ex)
            {
                _log.ErrorFormat("Errore nel caricamento dei movimenti - {0} - id:{1}", ex, Utility.GetMethodDescription(), id);
                throw;
            }
        }
Exemplo n.º 30
0
 public RipartizioneSpeseDTO GetRipartizioneByMovimento(MovimentoContabileDTO movimento, EsercizioDTO esercizio, RipartizioneSpeseDTO ripartizioneDettaglio)
 {
     try
     {
         if (movimento.IdConto > 0 && esercizio != null)
         {
             var result = GetServiceClient().GetRipartizioneByMovimento(movimento, esercizio.ID, ripartizioneDettaglio, GetUserInfo());
             CloseService();
             return result;
         }
         return null;
     }
     catch (Exception ex)
     {
         _log.ErrorFormat("Errore nella lettura della ripartizione per movimento - {0} - movimento:{1} - esercizio:{2}", ex, Utility.GetMethodDescription(), movimento != null ? movimento.ID.ToString(CultureInfo.InvariantCulture) : "<NULL>", esercizio != null ? esercizio.ID.ToString(CultureInfo.InvariantCulture) : "<NULL>");
         throw;
     }
 }