Exemplo n.º 1
0
        public AuthorizationMessages SalvaModello(ModelloListaRegistrazioneContabileDTO dto, bool ricalcoloSpeseEsistenti, int idUtente, LogTransazione logTransazione)
        {
            try
            {
                var logTransazioneModello = logTransazione;
                var logTransazioneDettaglioModello = logTransazione;
                var logTransazioneFornitoreModello = logTransazione;
                var logTransazioneContoModello = logTransazione;

                var fatalMessage = string.Empty;
                var warnMessage = string.Empty;
                ModelloRegistrazioneContabile modello = null;
                if (dto.ID == 0)
                {
                    var condominio = _daoFactory.GetCondominioDao().Find(dto.IdCondominio, false);
                    if (condominio != null)
                    {
                        var descrizione = string.Empty;
                        if (!string.IsNullOrEmpty(dto.Descrizione))
                        {
                            descrizione = dto.Descrizione;
                            if (descrizione.Length > 100)
                                descrizione = descrizione.Substring(0, 100);
                        }

                        var voceFattura = string.Empty;
                        if (!string.IsNullOrEmpty(dto.DescrizioneVoceFattura))
                        {
                            voceFattura = dto.DescrizioneVoceFattura;
                            if (voceFattura.Length > 512)
                                voceFattura = voceFattura.Substring(0, 512);
                        }

                        modello = new ModelloRegistrazioneContabile(condominio, descrizione, logTransazioneModello) { DescrizioneVoceFattura = voceFattura };
                        if (logTransazioneModello != null)
                        {
                            _daoFactory.GetModelloRegistrazioneContabileDao().SaveOrUpdate(modello);
                            logTransazioneContoModello = null;
                            logTransazioneDettaglioModello = null;
                            logTransazioneFornitoreModello = null;
                        }
                    }
                }
                else
                {
                    modello = _daoFactory.GetModelloRegistrazioneContabileDao().Find(dto.ID, false);
                    if(modello != null)
                        modello.Descrizione = dto.Descrizione;
                }

                if (modello != null)
                {
                    modello.DescrizioneVoceFattura = dto.DescrizioneVoceFattura;

                    // --------------------------
                    // Fornitori
                    // --------------------------
                    modello.Fornitori.Clear();
                    foreach (var dtoFornitore in dto.Fornitori)
                    {
                        ModelloContabileFornitore modelloFornitore = null;
                        if (dtoFornitore.ID == 0)
                        {
                            if (dtoFornitore.IdFornitore > 0)
                            {
                                var fornitore = _daoFactory.GetFornitoreDao().Find(dtoFornitore.IdFornitore, false);
                                if (fornitore != null)
                                {
                                    modelloFornitore = new ModelloContabileFornitore(fornitore, modello, logTransazioneFornitoreModello);
                                    if(logTransazioneFornitoreModello != null)
                                        _daoFactory.GetModelloContabileFornitoreDao().SaveOrUpdate(modelloFornitore);
                                }
                                else
                                {
                                    _log.WarnFormat("Fornitore inesistente - {0} - fornitore:{1}", Library.Utility.GetMethodDescription(), dtoFornitore.IdFornitore);
                                }
                            }
                            else
                            {
                                _log.WarnFormat("Fornitore non definito - {0}", Library.Utility.GetMethodDescription());
                            }
                        }
                        else
                        {
                            modelloFornitore = _daoFactory.GetModelloContabileFornitoreDao().Find(dtoFornitore.ID, false);
                            if (modelloFornitore != null)
                                modelloFornitore.Fornitore = _daoFactory.GetFornitoreDao().GetById(dtoFornitore.IdFornitore, false);
                            else
                            {
                                _log.WarnFormat("Modello inesistente - {0} - IdModello:{1}", Library.Utility.GetMethodDescription(), dtoFornitore.IdModello);
                            }
                        }

                        if (modelloFornitore != null)
                            modello.Fornitori.Add(modelloFornitore);
                    }

                    // --------------------------
                    // Conti
                    // --------------------------
                    modello.Conti.Clear();
                    foreach (var dtoConto in dto.Conti)
                    {
                        var conto = _daoFactory.GetContoDao().Find(dtoConto.IdConto, false);
                        var sottoConto = _daoFactory.GetSottoContoDao().Find(dtoConto.IdSottoConto, false);

                        var modelloConto = _daoFactory.GetContiModelloRegistrazioneContabileDao().Find(dtoConto.ID, false);
                        if (modelloConto == null)
                        {
                            modelloConto = new ContiModelloRegistrazioneContabile(modello, conto, sottoConto, dtoConto.PercentualeRipartizione, logTransazioneContoModello);
                            if (logTransazioneContoModello != null)
                            {
                                _daoFactory.GetContiModelloRegistrazioneContabileDao().SaveOrUpdate(modelloConto);
                                logTransazioneDettaglioModello = null;
                            }
                        }
                        else
                        {
                            modelloConto.PercentualeRipartizione = dtoConto.PercentualeRipartizione;

                            if (conto != null)
                                modelloConto.ContoRiferimento = conto;

                            if (sottoConto != null)
                                modelloConto.SottoContoRiferimento = sottoConto;
                        }

                        // --------------------------
                        // Riparto
                        // --------------------------
                        modelloConto.Unita.Clear();
                        foreach (var dtoRiparto in dtoConto.Riparto)
                        {
                            var modelloRiparto = _daoFactory.GetDettaglioModelloRegistrazioneContabileDao().Find(dtoRiparto.ID, false);
                            if (modelloRiparto == null)
                            {
                                modelloRiparto = new DettaglioModelloRegistrazioneContabile(modelloConto, logTransazioneDettaglioModello);
                                if(logTransazioneDettaglioModello != null)
                                    _daoFactory.GetDettaglioModelloRegistrazioneContabileDao().SaveOrUpdate(modelloRiparto);
                            }

                            // Lotto
                            modelloRiparto.LottoRiferimento = dtoRiparto.IdLotto > 0 ? _daoFactory.GetLottoDao().GetById(dtoRiparto.IdLotto.Value, false) : null;

                            // Stabile
                            modelloRiparto.PalazzinaRiferimento = dtoRiparto.IdStabile > 0 ? _daoFactory.GetPalazzinaDao().GetById(dtoRiparto.IdStabile.Value, false) : null;

                            // Gruppo Stabile
                            modelloRiparto.GruppoStabileRiferimento = dtoRiparto.IdGruppoStabile > 0 ? _daoFactory.GetGruppoStabileDao().GetById(dtoRiparto.IdGruppoStabile.Value, false) : null;

                            // Unità Immobiliare
                            modelloRiparto.UnitaRiferimento = dtoRiparto.IdUnita > 0 ? _daoFactory.GetUnitaImmobiliareDao().GetById(dtoRiparto.IdUnita.Value, false) : null;

                            modelloConto.Unita.Add(modelloRiparto);
                        }

                        modello.Conti.Add(modelloConto);
                    }

                    if (ricalcoloSpeseEsistenti)
                    {
                        var authMessage = ReloadRipartizioneByModelloEsercizio(modello.ID, null, null, idUtente, logTransazione);
                        if (!string.IsNullOrEmpty(authMessage.FatalMessage))
                            fatalMessage += authMessage.FatalMessage + Environment.NewLine;
                        if (!string.IsNullOrEmpty(authMessage.WarnMessage))
                            warnMessage += authMessage.WarnMessage + Environment.NewLine;

                    }

                    return new AuthorizationMessages(fatalMessage, warnMessage) {Id = modello.ID};
                }

                return new AuthorizationMessages(fatalMessage, warnMessage);
            }
            catch (Exception ex)
            {
                _log.ErrorFormat("Errore inaspettato durante il salvataggio del modello contabile - {0} - modello:{1} - condominio:{2}", ex, Library.Utility.GetMethodDescription(), dto.ID, dto.IdCondominio);
                throw;
            }
        }
Exemplo n.º 2
0
        public SpesaInfoDTO Salva(SpesaDTO spesaDto, IDictionary<DettaglioSpesaDTO, RipartizioneSpeseDTO> listaRipartizione, bool isMultiIva)
        {
            try
            {
                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 ripartizioneSpesa = new RipartizioneSpeseRepository(_info, _windsorRepository);

                // ------------------------------------------------------------
                // Verifico se il fornitore è presente
                // ------------------------------------------------------------
                var fornitore = daoFactory.GetFornitoreDao().Find(spesaDto.IdFornitore.GetValueOrDefault(), false);
                if (fornitore == null)
                {
                    return new SpesaInfoDTO { Id = 0, IdentificativoArchiviazione = null, NumeroProtocollo = 0, StampaEtichettaArchiviazione = false, Message = "Il fornitore non è più presente in archivio." };
                }

                // ------------------------------------------------------------
                // Prima di ogni modifica recupero i movimenti secondari
                // ------------------------------------------------------------
                IList<MovimentoContabile> movimentiSecondari = null;
                if (spesaDto.ID > 0)
                {
                    var spesa = daoFactory.GetSpesaDao().Find(spesaDto.ID, false);
                    if(spesa != null)
                        movimentiSecondari = ripartizioneSpeseService.GetMovimentiSecondari(spesa);
                }

                // ------------------------------------------------------------
                // Creo la ripartizione per ogni movimento
                // ------------------------------------------------------------
                foreach (var dettaglioDto in spesaDto.Dettagli)
                {
                    RipartizioneSpeseDTO ripartizione = null;
                    var dettaglio = ripartizioneSpesa.GetDettaglioDto(listaRipartizione, dettaglioDto.NumeroRiga.GetValueOrDefault());
                    if (dettaglio != null)
                    {
                        if (listaRipartizione.ContainsKey(dettaglio))
                            ripartizione = listaRipartizione[dettaglio];
                    }
                    if (ripartizione == null || ripartizione.UnitaImmobiliari == null)
                    {
                        var oldRipartizione = ripartizione;
                        ripartizione = new RipartizioneSpeseDTO();
                        if(oldRipartizione != null)
                        {
                            ripartizione.Descrizione = oldRipartizione.Descrizione;
                            ripartizione.DescrizioneVoceSpesa = oldRipartizione.DescrizioneVoceSpesa;
                            ripartizione.NomeModello = oldRipartizione.NomeModello;
                        }
                    }
                    foreach (var movimentoDto in dettaglioDto.Movimenti)
                    {
                        if (movimentoDto.ID > 0)
                        {
                            var movimento = daoFactory.GetMovimentoContabileDao().Find(movimentoDto.ID, false);
                            if (movimento?.MovimentoStorno != null)
                            {
                                try
                                {
                                    movimentoDto.IdMovimentoStorno = movimento.MovimentoStorno.ID;
                                }
                                catch (Exception ex)
                                {
                                    _log.ErrorFormat("Errore nella lettura dell'id del movimento di storno - {0} - spesa:{1} - movimento:{2}", ex, Utility.GetMethodDescription(), spesaDto.ID, movimento.ID);
                                }
                                finally
                                {
                                    movimento.MovimentoStorno = null;
                                }
                            }
                        }

                        movimentoDto.ID = 0;
                        if(dettaglioDto.IdModelloRipartizione == null)
                            ripartizioneSpesa.GetRipartizioneByMovimento(movimentoDto, spesaDto.IdEsercizio.GetValueOrDefault(), ripartizione);
                    }

                }

                // --------------------------------
                // Aggiungo le ripartizioni tra le diverse unità immobiliari
                // --------------------------------
                ripartizioneSpesa.AddMovimentiRipartizione(listaRipartizione, spesaDto);

                // --------------------------------
                // Salvataggio della spesa
                // --------------------------------
                if(spesaDto.StatoSpesa == StatoSpesaEnum.Undefined)
                    spesaDto.StatoSpesa = StatoSpesaEnum.Inserita;
                
                var resultSpesa = ManageDomainEntity(spesaDto, isMultiIva);
                if (resultSpesa.Spesa != null)
                {
                    var spesa = resultSpesa.Spesa;

                    // ripartizione di default
                    // TODO: Dato che la ripartizione ora viene ricalcolata quando serve (stampa riparto bilancio ecc....) 
                    // probabilmente NON è più necessaria la chiamata a questo metodo
                    //ripartizioneSpesa.AddDefaultRipartizione(listaRipartizione, spesa);

                    // --------------------------------
                    // Movimenti contabili secondari
                    // --------------------------------
                    // Eliminazione della vecchia testata
                    if (spesaDto.IdTestata > 0)
                    {
                        var testata = daoFactory.GetTestataMovimentoContabileDao().Find(spesaDto.IdTestata, false);

                        // bugid#4168
                        if(testata != null)
                            deleteTestata(testata, daoFactory);
                    }

                    // Creazione dei nuovi movimenti contabili
                    movimentoContabileService.SetMovimentiInserimentoSpesa(spesa, null, spesaDto.DataRegistrazione);

                    // --------------------------------
                    // Modello registrazione contabile
                    // --------------------------------
                    if (listaRipartizione.Count > 0)
                    {
                        foreach (var dettaglio in spesa.Dettagli)
                        {
                            var kvpRipartizione = getDettaglioDto(listaRipartizione, dettaglio.NumeroRiga.GetValueOrDefault());
                            if (kvpRipartizione != null)
                            {
                                var listaMovimenti = new List<MovimentoContabileDTO>(kvpRipartizione.GetValueOrDefault().Key.Movimenti.Length);
                                listaMovimenti.AddRange(kvpRipartizione.GetValueOrDefault().Key.Movimenti);

                                var modello = ripartizioneSpesa.SalvaModelloRipartizioneContabile(kvpRipartizione.GetValueOrDefault().Value, dettaglio, listaMovimenti, dettaglio.ImportoLordo.GetValueOrDefault());
                                if (modello != null)
                                {
                                    if (kvpRipartizione.GetValueOrDefault().Value.AssociatoFornitore)
                                    {
                                        var modelloContabileFornitore = new ModelloContabileFornitore(spesa.FornitoreRiferimento, modello, null);
                                        daoFactory.GetModelloContabileFornitoreDao().SaveOrUpdate(modelloContabileFornitore);
                                    }

                                    dettaglio.ModelloRipartizione = modello;
                                }
                            }
                        }
                    }

                    // ----------------------------------------------------------------------------------------------------------------------------------------------------------------
                    // Aggiorno eventuali movimenti secondari collegati.
                    // ----------------------------------------------------------------------------------------------------------------------------------------------------------------
                    if (movimentiSecondari != null)
                        ripartizioneSpeseService.UpdateMovimentiSecondari(spesa, movimentiSecondari);
                    // ----------------------------------------------------------------------------------------------------------------------------------------------------------------

                    // ----------------------------------------------------------------------------------------------------------------------------------------------------------------
                    // Aggiorno i documenti
                    // ----------------------------------------------------------------------------------------------------------------------------------------------------------------
                    if (spesaDto.IdDocumenti.Count > 0)
                    {
                        foreach (var idDoc in spesaDto.IdDocumenti)
                        {
                            var documento = daoFactory.GetDocumentoDao().Find(idDoc, false);
                            if(documento != null)
                                documento.SpesaRiferimento = spesa;
                        }
                    }

                    // ======================================================================================
                    //  Registro gli eventuali pagamenti immediati
                    // ======================================================================================
                    var pagamentoService = _windsorRepository.GetContainer(_info.Azienda).Resolve<IPagamentoService>();
                    pagamentoService.CreatePagamentiImmediati(spesa.ID, spesaDto.Scadenze, null);

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

                    var identificativoArchiviazione = getArchiviazioneOtticaService().GetIdentificativoArchiviazione(spesa);

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

                    var stampaEtichetta = impostazioni.UtilizzoEtichettatriceArchiviazioneOtticaFatture && spesa.IsAbilitataArchiviazioneOttica && spesaDto.ID == 0;
                    var etichettatrice = impostazioni.EtichettatriceArchiviazioneOttica;
                    var tipoEtichetta = impostazioni.TipoEtichettaArchiviazioneOttica;
                    var trayEtichettatriceAttivazioneOttica = impostazioni.TrayEtichettatriceAttivazioneOttica;

                    // ======================================================================================
                    //  Aggiorno eventuali movimenti per interessi e sanzioni pagati in ritardo
                    // ======================================================================================
                    movimentoContabileService.SetMovimentiInteressiSanzioni(spesa);

                    return new SpesaInfoDTO { Id = spesa.ID, NumeroProtocollo = spesa.NumeroProtocollo.GetValueOrDefault(), IdentificativoArchiviazione = identificativoArchiviazione, StampaEtichettaArchiviazione = stampaEtichetta, EtichettatriceArchiviazione = etichettatrice, TipoEtichettaArchiviazione = tipoEtichetta, TrayEtichettatriceAttivazioneOttica = trayEtichettatriceAttivazioneOttica };
                }

                return new SpesaInfoDTO { Id = 0, NumeroProtocollo = 0, IdentificativoArchiviazione = null, StampaEtichettaArchiviazione = false, EtichettatriceArchiviazione = string.Empty, TipoEtichettaArchiviazione = "Testo", Message = resultSpesa.Message };
            }
            catch (Exception ex)
            {
                _log.ErrorFormat("Errore nel salvataggio della spesa - {0} - numeroDocumento:{1} - dataDocumento:{2} - dataRegistrazione:{3}", ex, Utility.GetMethodDescription(), spesaDto.NumeroDocumento, spesaDto.DataDocumento, spesaDto.DataRegistrazione);
                throw;
            }
        }
Exemplo n.º 3
0
        public string SetModelloContabileFornitore(int idModello, int idFornitore)
        {
            string message = string.Empty;
            if (idFornitore > 0 && idModello > 0)
            {
                var daoFactory = _windsorRepository.GetDaoFactory(_info.Azienda);
                var modello = daoFactory.GetModelloRegistrazioneContabileDao().GetById(idModello, false);
                var modelloFornitore = daoFactory.GetModelloContabileFornitoreDao().GetByFornitoreCondominio(idFornitore, modello.CondominioRiferimento.ID);
                if (modelloFornitore == null)
                {
                    modelloFornitore = new ModelloContabileFornitore(daoFactory.GetFornitoreDao().GetById(idFornitore, false), modello, null);
                    daoFactory.GetModelloContabileFornitoreDao().SaveOrUpdate(modelloFornitore);
                }
            }
            else
            {
                message = idFornitore == 0 ? "Non è definito il fornitore" : "Non è definito il modello";
                _log.ErrorFormat("{0}:{1}", message, Utility.GetMethodDescription());
            }

            return message;
        }