예제 #1
0
        public TestataMovimentoContabileGestioneDTO GetBilancioApertura(int codiceCondominio, int idEsercizio)
        {
            try
            {
                const string hql = "FROM TestataMovimentoContabile TES LEFT JOIN FETCH TES.Movimenti MOV LEFT JOIN FETCH MOV.DettaglioRiferimento DETTSPE LEFT JOIN FETCH DETTSPE.SpesaRiferimento SPE LEFT JOIN FETCH SPE.Scadenze SCA LEFT JOIN FETCH SCA.Pagamenti PAG LEFT JOIN FETCH MOV.ContoRiferimento CON LEFT JOIN FETCH MOV.SottoContoRiferimento SOTCON LEFT JOIN FETCH MOV.CondominoRiferimento SOGGCOND LEFT JOIN FETCH MOV.ContoCorrenteBancario BANCA WHERE TES.AperturaBilancio = 1 AND TES.EsercizioRiferimento.CondominioRiferimento.ID = :codiceCondominio";
                var testate = _daoFactory.GetTestataMovimentoContabileDao().GetByQuery(hql, new[] { new QueryParam("codiceCondominio", codiceCondominio) });
                var contoVersamentiCondomini = _daoFactory.GetContoDao().GetByCodice(idEsercizio, codiceCondominio, _pianoContiService.GetCodiceContoVersamentiCondomini());

                // ============================================================================================
                //  Non è possibile sia presente più di una apertura di bilancio - Loggo errore e ritorno null
                // ============================================================================================
                if (testate.Count > 1)
                {
                    _log.Error("E' stata trovata più di una apertura di bilancio - " + Utility.GetMethodDescription() + " - condominio:" + codiceCondominio);
                    return null;
                }

                // ============================================================================================
                //  Correttamente presente una apertura di bilancio
                // ============================================================================================
                if (testate.Count == 1)
                {
                    var testataDto = new TestataMovimentoContabileGestioneDTO
                    {
                        ID = testate[0].ID,
                        CodiceEsercizio = testate[0].EsercizioRiferimento.ID,
                        DataRegistrazione = testate[0].DataRegistrazione,
                        Descrizione = testate[0].Descrizione,
                        NumeroProtocollo = testate[0].NumeroProtocollo
                    };

                    foreach (var movimento in testate[0].Movimenti)
                    {
                        if (movimento.ContoRiferimento.ID == contoVersamentiCondomini.ID)
                        {
                            var movimentoSaldoCondomini = testataDto.Movimenti.SingleOrDefault(item => item.IdConto == contoVersamentiCondomini.ID);
                            if (movimentoSaldoCondomini != null)
                            {
                                var importo = movimentoSaldoCondomini.ImportoAvere.GetValueOrDefault() - movimentoSaldoCondomini.ImportoDare.GetValueOrDefault();
                                importo += movimento.GetImportoConSegno().GetValueOrDefault();
                                movimentoSaldoCondomini.ImportoDare = null;
                                movimentoSaldoCondomini.ImportoAvere = null;
                                if (importo < 0)
                                    movimentoSaldoCondomini.ImportoDare = Math.Abs(importo);
                                else
                                    movimentoSaldoCondomini.ImportoAvere = Math.Abs(importo);

                                continue;
                            }
                        }

                        var movDto = new MovimentoContabileGestioneDTO
                        {
                            ID = movimento.ID,
                            Descrizione = movimento.Descrizione,
                            DescrizioneCausale = movimento.Causale.Descrizione,
                            DescrizioneConto = movimento.ContoRiferimento.Descrizione,
                            IdCausale = movimento.Causale.ID,
                            IdConto = movimento.ContoRiferimento.ID,
                            IdTestata = testate[0].ID,
                            Note = movimento.Note,
                            NumeroRiga = movimento.NumeroRiga,
                            Segno = movimento.Segno,
                            NumeroRegistrazione = movimento.NumeroRegistrazione
                        };

                        switch (movimento.Segno)
                        {
                            case "D":
                                movDto.ImportoDare = movimento.GetImportoSenzaSegno();
                                break;
                            case "A":
                                movDto.ImportoAvere = movimento.GetImportoSenzaSegno();
                                break;
                        }

                        if (movimento.SottoContoRiferimento != null)
                        {
                            movDto.IdSottoConto = movimento.SottoContoRiferimento.ID;
                            movDto.DescrizioneSottoConto = movimento.SottoContoRiferimento.GetDescrizione(movimento.Testata.EsercizioRiferimento, null, movimento);
                        }
                        else if (movimento.ContoCorrenteBancario != null)
                        {
                            movDto.IdSottoConto = movimento.ContoCorrenteBancario.ID * -1;
                            movDto.DescrizioneSottoConto = movimento.ContoCorrenteBancario.DisplayName;
                        }
                        else if (movimento.CondominoRiferimento != null)
                        {
                            movDto.IdSottoConto = movimento.CondominoRiferimento.ID * -1;
                            movDto.DescrizioneSottoConto = movimento.CondominoRiferimento.DisplayName;
                        }

                        if (movimento.FornitoreRiferimento != null)
                        {
                            movDto.IdFornitore = movimento.FornitoreRiferimento.ID;
                            movDto.NominativoFornitore = movimento.FornitoreRiferimento.DisplayName;
                        }
                        if (movimento.DettaglioRiferimento != null && movimento.DettaglioRiferimento.SpesaRiferimento != null)
                        {
                            movDto.NumeroDocumento = movimento.DettaglioRiferimento.SpesaRiferimento.NumeroDocumento;
                            movDto.DataDocumento = movimento.DettaglioRiferimento.SpesaRiferimento.DataDocumento;
                            movDto.ImportoRitenuta = movimento.DettaglioRiferimento.SpesaRiferimento.ImportoRitenuta;
                            movDto.AliquotaRitenuta = movimento.DettaglioRiferimento.SpesaRiferimento.AliquotaRitenuta * 100;
                            movDto.ImportoIva = movimento.DettaglioRiferimento.ImportoIva;

                            var scadenza = movimento.DettaglioRiferimento.SpesaRiferimento.Scadenze.FirstOrDefault();
                            if (scadenza != null && scadenza.Pagamenti.Count == 1)
                                movDto.DataPagamento = IesiGenericCollections<Pagamento>.GetByIndex(scadenza.Pagamenti, 0).Data;
                        }
                        if (movimento.Spesa != null)
                        {
                            movDto.IdSpesa = movimento.Spesa.ID;
                            movDto.NumeroDocumento = movimento.Spesa.NumeroDocumento;
                            movDto.DataDocumento = movimento.Spesa.DataDocumento;
                            movDto.ImportoRitenuta = movimento.Spesa.ImportoRitenuta;
                            movDto.AltreSpese = movimento.Spesa.AltreSpese;
                            movDto.AltreSpeseEsenti = movimento.Spesa.AltreSpeseEsenti;

                            var scadenza = movimento.Spesa.Scadenze.FirstOrDefault();
                            if(scadenza != null)
                            {
                                if (scadenza.Pagamenti.Count == 1)
                                {
                                    var pagamento = scadenza.Pagamenti.FirstOrDefault();
                                    if (pagamento != null)
                                    {
                                        movDto.DataPagamento = pagamento.Data;
                                        if (pagamento.RitenutaAcconto != null)
                                        {
                                            movDto.DataVersamentoRitenuta = pagamento.RitenutaAcconto.GetDataVersamento();
                                            movDto.InteressiRitenuta = pagamento.RitenutaAcconto.ImportoInteressi;
                                            movDto.SanzioniRitenuta = pagamento.RitenutaAcconto.ImportoSanzione;
                                        }
                                    }
                                }
                            }

                            if(movimento.Spesa.Dettagli.Count > 0)
                                movDto.ImportoFattura = IesiGenericCollections<DettaglioSpesa>.GetByIndex(movimento.Spesa.Dettagli, 0).ImportoLordo + movimento.Spesa.AltreSpese.GetValueOrDefault();
                        }

                        testataDto.Movimenti.Add(movDto);
                    }

                    return testataDto;
                }

                // ============================================================================================
                //  Nessuna apertura di bilancio presente - Ritorno un oggetto vuoto in data di oggi
                // ============================================================================================
                return new TestataMovimentoContabileGestioneDTO
                {
                    CodiceEsercizio = idEsercizio,
                    Descrizione = "Apertura di Bilancio",
                    DataRegistrazione = DateTime.Today
                };
            }
            catch (Exception ex)
            {
                
                _log.Fatal("Errore inaspettato durante la lettura del bilancio di apertura - " + Utility.GetMethodDescription() + " - condominio:" + codiceCondominio, ex);
                throw;
            }
        }
예제 #2
0
        private string getNewSpesa(Fornitore fornitore, Esercizio esercizio, TestataMovimentoContabileGestioneDTO testata, MovimentoContabileGestioneDTO movimento, out GestioneCondomini.Domain.Spesa spesa)
        {
            var message = string.Empty;
            spesa = new GestioneCondomini.Domain.Spesa(fornitore, esercizio, null);
            try
            {
                if (_protocolloService == null)
                {
                    _log.ErrorFormat("Errore di inizializzazione del protocollo service - {0} - documento:{1} - movimento:{2} - esercizio:{3} - testata:{4}", Utility.GetMethodDescription(), movimento.NumeroDocumento, movimento.ID, testata.CodiceEsercizio, testata.ID);
                    message = "Errore di inizializzazione del protocollo service.";
                    return message;
                }

                if (movimento.DataDocumento == null)
                {
                    _log.ErrorFormat("La data del documento è null - {0} - documento:{1} - movimento:{2} - esercizio:{3} - testata:{4}", Utility.GetMethodDescription(), movimento.NumeroDocumento, movimento.ID, testata.CodiceEsercizio, testata.ID);
                    message = "La data del documento è null.";
                }

                if (esercizio.CondominioRiferimento == null)
                {
                    _log.ErrorFormat("Il Condominio è null - {0} - documento:{1} - movimento:{2} - esercizio:{3} - testata:{4}", Utility.GetMethodDescription(), movimento.NumeroDocumento, movimento.ID, testata.CodiceEsercizio, testata.ID);
                    message = "Il Condominio è null.";
                }

                var protocollo = _protocolloService.GetProgressivo(TipoProtocollo.Fattura, esercizio.DataApertura.GetValueOrDefault().Year, esercizio.CondominioRiferimento);
                if (protocollo.Progressivo != null)
                    spesa.NumeroProtocollo = protocollo.Progressivo;
                else
                    return protocollo.Message;
            }
            catch (Exception ex)
            {
                var idCondominio = "<NULL>";
                if (esercizio?.CondominioRiferimento != null)
                    idCondominio = esercizio.CondominioRiferimento.ID.ToString(CultureInfo.InvariantCulture);
                
                _log.ErrorFormat("Errore inaspettato nel recuperare il progressivo - {0} - data:{1:d} - condominio:{2} - movimento:{3} - esercizio:{4} - testata:{5}", ex, Utility.GetMethodDescription(), movimento.DataDocumento.GetValueOrDefault(), idCondominio, movimento.ID, testata.CodiceEsercizio, testata.ID);
                message = "Errore inaspettato nel recuperare il progressivo.";
            }

            _daoFactory.GetSpesaDao().SaveOrUpdate(spesa);

            return message;
        }