예제 #1
0
        public TestataMovimentoContabile SetMovimentiContatoreCondominiale(Esercizio esercizio, IList<ImportoMovimento> importiAccredito, IList<ImportiDTO> addebitiContatoriDivisionali, DateTime dataRegistrazione, Conto contoAddebito, SottoConto sottoContoAddebito, string descrizione)
        {
            // controllo data registrazione
            var message = IsAllowDataRegistrazione(new List<int> { esercizio.CondominioRiferimento.ID }, esercizio, dataRegistrazione);
            if (message.Count > 0)
            {
                var ex = new InvalidDataException(string.Format("La data di registrazione {0} non è valida", dataRegistrazione));
                _log.FatalFormat("Data di registrazione non valida - {0} - data:{1} - esercizio:{2}", ex, Utility.GetMethodDescription(), dataRegistrazione, esercizio.ID);
                throw ex;
            }

            var testata = new TestataMovimentoContabile(esercizio, dataRegistrazione, TipoTestataMovimentoContabileEnum.Automatica, null)
            {
                Descrizione = descrizione,
                IsAbilitataArchiviazioneOttica = false,
                IsAllowUpdate = true
            };
            _daoFactory.GetTestataMovimentoContabileDao().SaveOrUpdate(testata);

            var causale = _daoFactory.GetCausaleContabileDao().GetByCodice("SC");

            // -------------------------------------------------
            // Calcolo Importo
            // ------------------------------------------------
            var importo = importiAccredito.Sum(item => item.Importo);

            // -------------------------------------------------
            // Segno Movimento
            // ------------------------------------------------
            var segnoContoEconomico = "D";
            if (importo < 0)
            {
                segnoContoEconomico = "A";
                importo = importo * -1;
            }

            // ------------------------------------------------
            // Conto economico da addebitare
            // ------------------------------------------------
            var movimentoContoEconomicoAddebito = new MovimentoContabile(testata, causale, 1, contoAddebito, importo, segnoContoEconomico)
            {
                SottoContoRiferimento = sottoContoAddebito,
                Descrizione = descrizione,
                IsRipartoPersonalizzato = true
            };
            _daoFactory.GetMovimentoContabileDao().SaveOrUpdate(movimentoContoEconomicoAddebito);

            // ------------------------------------------------
            // Conto economico da accreditare
            // ------------------------------------------------
            foreach (var item in importiAccredito)
            {
                var movimentoContoEconomicoAccredito = new MovimentoContabile(testata, causale, 2, _daoFactory.GetContoDao().GetById(item.IdConto, false), item.Importo, invertiSegno(segnoContoEconomico)) { Descrizione = descrizione, IsRipartoPersonalizzato = true };
                if(item.IdSottoConto > 0)
                    movimentoContoEconomicoAccredito.SottoContoRiferimento = _daoFactory.GetSottoContoDao().GetById(item.IdSottoConto.GetValueOrDefault(), false);
                _daoFactory.GetMovimentoContabileDao().SaveOrUpdate(movimentoContoEconomicoAccredito);

                // Ripartizione tra le unità immobiliari
                var totaleMillesimi = addebitiContatoriDivisionali.Sum(mill => mill.Importo);
                foreach (var importiDTO in addebitiContatoriDivisionali)
                {
                    var unita = _daoFactory.GetUnitaImmobiliareDao().GetById(importiDTO.Id, false);
                    var importoUnita = (movimentoContoEconomicoAccredito.GetImportoConSegno() * importiDTO.Importo) / totaleMillesimi;
                    var spesaUnita = new SpeseUnita(importoUnita, unita, null, movimentoContoEconomicoAccredito);
                    _daoFactory.GetSpeseUnitaDao().SaveOrUpdate(spesaUnita);

                }
            }

            return testata;
        }
        private MovimentoContabileListaDTO setListaDto(MovimentoContabile item, bool importiNegativi, IArchiviazioneOtticaService archiviazioneService)
        {
            try
            {
                var dto = new MovimentoContabileListaDTO
                {
                    ID = item.ID,
                    IdTestata = item.Testata.ID,
                    Data = item.Testata.DataRegistrazione.GetValueOrDefault(),
                    Causale = item.Causale.DescrizioneCompleta,
                    IdCondominio = item.Testata.EsercizioRiferimento.CondominioRiferimento.ID,
                    Condominio = item.Testata.EsercizioRiferimento.CondominioRiferimento.DisplayName,
                    IdEsercizio = item.Testata.EsercizioRiferimento.ID,
                    Esercizio = item.Testata.EsercizioRiferimento.DisplayName,
                    IdConto = item.ContoRiferimento.ID,
                    Conto = item.ContoRiferimento.Descrizione,
                    TipoConto = item.ContoRiferimento.Tipo.ToString(),
                    Descrizione = item.GetDescrizione(),
                    Importo = !importiNegativi ? item.GetImportoSenzaSegno() : item.GetImportoConSegno(),
                    ImportoResiduoEvasione = item.GetImportoSenzaSegno(),
                    Stato = item.Stato
                };

                if(item.ImportoEvasioneTransitorio != null)
                    dto.ImportoResiduoEvasione -= item.ImportoEvasioneTransitorio;

                dto.Segno = item.Segno;

                dto.Note = item.Note;
                dto.NumeroRegistrazione = item.NumeroRegistrazione;
                dto.NumeroAssegno = item.NumeroAssegno;
                dto.NumeroRiga = item.NumeroRiga;

                if (item.EvasioneBancaria != null)
                    dto.IdEvasioneBancaria = item.EvasioneBancaria.ID;

                if (item.FornitoreRiferimento != null)
                {
                    dto.IdFornitore = item.FornitoreRiferimento.ID;
                    dto.Nominativo = item.FornitoreRiferimento.DisplayName;
                }

                if (item.CondominoRiferimento != null)
                {
                    dto.IdCondomino = item.CondominoRiferimento.ID;
                    dto.Nominativo = item.CondominoRiferimento.Persona.DisplayName;
                }

                if(item.DettaglioRiferimento != null)
                    dto.IdDettaglio = item.DettaglioRiferimento.ID;
                if (item.SottoContoRiferimento != null)
                {
                    dto.IdSottoConto = item.SottoContoRiferimento.ID;
                    dto.SottoConto = item.SottoContoRiferimento.GetDescrizione(item.Testata.EsercizioRiferimento, null, item);
                }
                else if (item.ContoRiferimento.Codice == getPianoContiService().GetCodiceContoBancario() && item.ContoCorrenteBancario != null)
                {
                    dto.IdSottoConto = item.ContoCorrenteBancario.ID * -1;
                    dto.SottoConto = item.ContoCorrenteBancario.DisplayName;
                }
                else if (item.ContoRiferimento.Codice == getPianoContiService().GetCodiceContoFornitori() && item.FornitoreRiferimento != null)
                {
                    dto.IdSottoConto = item.FornitoreRiferimento.ID * -1;
                    dto.SottoConto = item.FornitoreRiferimento.DisplayName;
                }

                var spesaRiferimento = item.Testata.SpesaRiferimento;
                if (spesaRiferimento == null && item.DettaglioRiferimento != null)
                    spesaRiferimento = item.DettaglioRiferimento.SpesaRiferimento;

                // =============================================================================================
                //  Commentato rendeva troppo lenta la ricerca dei movimenti - bugid#2967
                // =============================================================================================
                //if(spesaRiferimento == null)
                //{
                //    Pagamento pagamento = null;
                //    if(pagamenti == null)
                //        pagamento = daoFactory.GetPagamentoDao().GetByMovimentoContabile(item);
                //    else
                //        pagamento = pagamenti.FirstOrDefault(itemPagamento => itemPagamento.MovimentoContabile != null && itemPagamento.MovimentoContabile.ID == item.ID);
                //    if (pagamento != null)
                //        spesaRiferimento = pagamento.ScadenzaRiferimento.SpesaRiferimento;
                //}
                // =============================================================================================

                if (spesaRiferimento != null)
                {
                    dto.IdSpesa = spesaRiferimento.ID;
                    dto.NumeroProtocollo = spesaRiferimento.NumeroProtocollo;
                    dto.IdentificativoArchiviazioneOttica = archiviazioneService.GetIdentificativoArchiviazione(spesaRiferimento, true);
                    dto.StatoSpesa = spesaRiferimento.Stato;
                    dto.TipoDocumentoSpesa = spesaRiferimento.TipoDocumento;
                }
                else
                {
                    dto.NumeroProtocollo = item.Testata.NumeroProtocollo;
                    if (dto.NumeroProtocollo > 0)
                        dto.IdentificativoArchiviazioneOttica = archiviazioneService.GetIdentificativoArchiviazione(item.Testata);
                    else if (item.DettaglioRiferimento != null && item.DettaglioRiferimento.SpesaRiferimento != null)
                        dto.IdentificativoArchiviazioneOttica = archiviazioneService.GetIdentificativoArchiviazione(item.DettaglioRiferimento.SpesaRiferimento, true);
                }
                
                dto.IsAllowOpenDettaglio = item.Testata.NumeroProtocollo > 0 || dto.IdSpesa > 0;

                return dto;
            }
            catch (Exception ex)
            {
                if (item != null)
                {
                    
                    _log.Error("Errore nel caricamento del Movimento Contabile: " + Utility.GetMethodDescription() + " - id:" + item.ID, ex);
                }
                else
                {
                    
                    _log.Error("Errore nel caricamento del Movimento Contabile: " + Utility.GetMethodDescription() + " - Movimento --> null", ex);
                }
                throw;
            }
        }
예제 #3
0
        private void setRipartizione(MovimentoContabile movimento)
        {
            if (movimento.ContoRiferimento.Ripartizione && !movimento.ContoRiferimento.IsSpesePersonali)
            {
                if ((!movimento.IsRipartoPersonalizzato || !string.IsNullOrEmpty(movimento.GruppiAddebito)))
                {
                    movimento.DettaglioRipartizione.Clear();

                    List<int> idScale = null;
                    if (!string.IsNullOrEmpty(movimento.GruppiAddebito))
                    {
                        var scale = movimento.GruppiAddebito.Split('&');
                        idScale = new List<int>(scale.Length);
                        idScale.AddRange(scale.Select(int.Parse));
                    }

                    var millesimi = _millesimiService.GetByConto(movimento.ContoRiferimento, null, idScale, movimento.Testata.EsercizioRiferimento);
                    foreach (var millesimo in millesimi)
                    {
                        var unita = _daoFactory.GetUnitaImmobiliareDao().GetById(millesimo.IdUnitaRiferimento, false);
                        var valoreMillesimo = _millesimiService.GetRipartoImporto(unita, movimento.ContoRiferimento, movimento.GetImportoConSegno().GetValueOrDefault(), millesimi, movimento.Testata.EsercizioRiferimento, null);
                        if (valoreMillesimo != null)
                        {
                            var riparto = new SpeseUnita(valoreMillesimo, unita, null, movimento);
                            movimento.DettaglioRipartizione.Add(riparto);
                        }
                    }
                }
                else
                    RicalcoloRipartizioneByMovimento(movimento);
            }
            else
                RicalcoloRipartizioneByMovimento(movimento);
        }
예제 #4
0
        public void CloneRipartizioneByMovimento(MovimentoContabile movimentoNew, MovimentoContabile movimentoOld)
        {
            IList<MillesimoDTO> millesimi = new List<MillesimoDTO>();
            if(!movimentoOld.ContoRiferimento.IsSpesePersonali)
                millesimi = (from item in _millesimiService.GetByConto(movimentoOld.ContoRiferimento, null , null, movimentoOld.Testata.EsercizioRiferimento)
                             where
                             (
                                 from item2 in movimentoOld.DettaglioRipartizione
                                 where item2?.UnitaRiferimento != null
                                 select item2.UnitaRiferimento.ID
                             ).Contains(item.IdUnitaRiferimento)
                             select item).ToList();

            var count = movimentoOld.DettaglioRipartizione.Count;
            foreach (var spesaUnita in movimentoOld.DettaglioRipartizione)
            {
                decimal? importo = 0;
                if (movimentoOld.ContoRiferimento.IsSpesePersonali)
                    importo = movimentoNew.GetImportoConSegno() / count;
                else if(spesaUnita.UnitaRiferimento != null)
                    importo = _millesimiService.GetRipartoImporto(spesaUnita.UnitaRiferimento, movimentoOld.ContoRiferimento, movimentoNew.GetImportoConSegno().GetValueOrDefault(), millesimi, movimentoOld.Testata.EsercizioRiferimento, null);
                else
                    _log.WarnFormat("ATTENZIONE: trovato movimento NON di spese personali con dettaglio ripartizione senza unità definita - {0} - idSpesaUnita:{1} - idMovimentoInteressi:{2} - idMovimentoBase:{3}", Utility.GetMethodDescription(), spesaUnita.ID, movimentoNew.ID, movimentoOld.ID);

                if (importo > 0)
                {
                    var spesaNew = new SpeseUnita(importo, spesaUnita.UnitaRiferimento, spesaUnita.SoggettoCondominio, movimentoNew);
                    _daoFactory.GetSpeseUnitaDao().SaveOrUpdate(spesaNew);
                }
            }

            if (movimentoNew.Importo != movimentoNew.DettaglioRipartizione.Sum(item => item.Importo))
                _log.WarnFormat("ATTENZIONE: l'importo degli interessi/sanzione non corrisponde con con l'importo della ripartizione - {0} - idMovimentoInteressi:{1} - idMovimentoBase:{2} - importoInteressi:{3} - importoRipartizione:{4}", Utility.GetMethodDescription(), movimentoNew.ID, movimentoOld.ID, movimentoNew.Importo.GetValueOrDefault(), movimentoNew.DettaglioRipartizione.Sum(item => item.Importo).GetValueOrDefault());

        }
예제 #5
0
        public void RicalcoloRipartizioneByMovimento(MovimentoContabile movimento)
        {
            if (!movimento.ContoRiferimento.IsSpesePersonali && movimento.ContoRiferimento.Ripartizione)
            {
                IList<MillesimoDTO> millesimi = (from item in _millesimiService.GetByConto(movimento.ContoRiferimento, null, null, movimento.Testata.EsercizioRiferimento)
                                              where
                                              (
                                                 from item2 in movimento.DettaglioRipartizione
                                                 select item2.UnitaRiferimento.ID
                                              ).Contains(item.IdUnitaRiferimento)
                                              select item).ToList();

                if (millesimi.Count > 0 && movimento.Causale.Codice != "IA")
                {
                    foreach (var spesaUnita in movimento.DettaglioRipartizione)
                        spesaUnita.Importo = _millesimiService.GetRipartoImporto(spesaUnita.UnitaRiferimento, movimento.ContoRiferimento, movimento.GetImportoConSegno().GetValueOrDefault(), millesimi, movimento.Testata.EsercizioRiferimento, null);
                }
            }
        }
예제 #6
0
        public bool IsRipartizionePersonalizzata(MovimentoContabile movimento)
        {
            var result = false;

            if ((movimento.DettaglioRiferimento?.ModelloRipartizione == null) && movimento.DettaglioRipartizione.Count > 0)
            {
                List<int> idGruppi = null;
                if (!string.IsNullOrEmpty(movimento.GruppiAddebito))
                {
                    var idGruppiStr = movimento.GruppiAddebito.Split('&');
                    idGruppi = new List<int>(idGruppiStr.Length);
                    idGruppi.AddRange(idGruppiStr.Select(int.Parse));
                }

                var millesimi = _millesimiService.GetByConto(movimento.ContoRiferimento, null, idGruppi, movimento.Testata.EsercizioRiferimento);
                foreach (var riparto in movimento.DettaglioRipartizione)
                {
                    var importoOriginale = _millesimiService.GetRipartoImporto(riparto.UnitaRiferimento, movimento.ContoRiferimento, movimento.GetImportoConSegno().GetValueOrDefault(), millesimi, movimento.Testata.EsercizioRiferimento, null);
                    if (Math.Round(importoOriginale.GetValueOrDefault(), 2) != Math.Round(riparto.Importo.GetValueOrDefault(), 2))
                        result = true;
                }
            }

            return result;
        }