Пример #1
0
        public DettaglioBollettaUI(string numeroFattura, DateTime dataFattura, int idFornitore, EsercizioDTO esercizio)
        {
            InitializeComponent();

            if (!DesignMode)
            {
                inizializza();
                _bolletta = _utenzaService.GetBollettaByNumeroDataFattura(numeroFattura, dataFattura, idFornitore);
                if (_bolletta == null)
                {
                    CloseForm();
                }
                else
                {
                    _idBolletta = _bolletta.ID;
                    inizializza();
                    BusinessClass = new[] { (BaseDTOOfint)_bolletta };
                    _esercizio = esercizio;

                    _dettaglioBolletta = new DettaglioBollettaUC(_bolletta, _esercizio) { Dock = DockStyle.Fill };
                    _dettaglioBolletta.AfterAddControl += dettaglioBollettaAfterAddControl;
                    _dettaglioBolletta.LoadComplete += dettaglioBollettaLoadComplete;
                    _dettaglioBolletta.Confirm += dettaglioBollettaConfirmed;
                    _dettaglioBolletta.AfterUpdate += dettaglioBollettaAfterUpdate;
                    MainStandardForm_Fill_Panel.Controls.Add(_dettaglioBolletta);
                }
            }
        }
Пример #2
0
 public BollettaMessaggioDTO(BollettaDTO bolletta)
 {
     ID = bolletta.ID;
     IdentificativoArchiviazioneOttica = bolletta.IdentificativoArchiviazioneOttica;
     IdBancaUtenza = bolletta.IdBancaUtenza;
     IdContoPagamento = bolletta.IdContoPagamento;
     TipoDocumento = bolletta.TipoDocumento;
     Descrizione = bolletta.Descrizione;
     NumeroDocumento = bolletta.NumeroDocumento;
     DataDocumento = bolletta.DataDocumento;
     DataRegistrazione = bolletta.DataRegistrazione;
     Importo = bolletta.Importo;
     IsRipartoPersonalizzato = bolletta.IsRipartoPersonalizzato;
     Autorizzata = bolletta.Autorizzata;
     DataInizioCompetenza = bolletta.DataInizioCompetenza;
     DataFineCompetenza = bolletta.DataFineCompetenza;
     DataScadenza = bolletta.DataScadenza;
     IdUtenza = bolletta.IdUtenza;
     IdSottoContoPagamento = bolletta.IdSottoContoPagamento;
     IsAbilitataArchiviazioneOttica = bolletta.IsAbilitataArchiviazioneOttica;
     Note = bolletta.Note;
     IdFornitore = bolletta.IdFornitore;
     DisplayFornitore = bolletta.DisplayFornitore;
     IdEsercizio = bolletta.IdEsercizio;
     StatoSpesa = bolletta.StatoSpesa;
     Dettagli = bolletta.Dettagli;
     Movimenti = bolletta.Movimenti;
 }
Пример #3
0
        public DettaglioBollettaUI(int idBolletta, EsercizioDTO esercizio)
        {
            InitializeComponent();

            if (!DesignMode)
            {
                _idBolletta = idBolletta;
                inizializza();
                _bolletta = _utenzaService.GetBollettaById(idBolletta);
                BusinessClass = new[] { (BaseDTOOfint)_bolletta };
                _esercizio = esercizio;

                _dettaglioBolletta = new DettaglioBollettaUC(_bolletta, _esercizio) {Dock = DockStyle.Fill};
                _dettaglioBolletta.AfterAddControl += dettaglioBollettaAfterAddControl;
                _dettaglioBolletta.LoadComplete += dettaglioBollettaLoadComplete;
                _dettaglioBolletta.Confirm += dettaglioBollettaConfirmed;
                _dettaglioBolletta.AfterUpdate += dettaglioBollettaAfterUpdate;
                MainStandardForm_Fill_Panel.Controls.Add(_dettaglioBolletta);
            }
        }
 public string CreatePagamentiImmediatiBolletta(Spesa spesa, BollettaDTO bolletta, LogTransazione logTransazione)
 {
     if (bolletta.IdContoPagamento > 0)
     {
         var scadenze = new List<ScadenzaFatturaDTO>(spesa.Scadenze.Count);
         scadenze.AddRange(spesa.Scadenze.Select(scadenza => new ScadenzaFatturaDTO
         {
             ID = scadenza.ID,
             DataPagamentoScadenza = scadenza.Scadenza,
             IdContoPagamentoScadenza = bolletta.IdContoPagamento,
             IdSottoContoPagamentoScadenza = bolletta.IdSottoContoPagamento,
             IdSpesa = spesa.ID,
             Importo = scadenza.Importo,
             Scadenza = scadenza.Scadenza,
             Stato = "I",
             StatoScadenza = StatoSpesaEnum.Inserita
         }));
         return CreatePagamentiImmediati(spesa, scadenze, logTransazione);
     }
     return string.Empty;
 }
Пример #5
0
 public List<DocumentoDTO> GetByBolletta(BollettaDTO bolletta)
 {
     var result = GetServiceClient().GetDocumentiBySpesa(bolletta.ID, GetUserInfo());
     CloseService();
     return result;
 }
        public BollettaDTO GetBollettaById(int id)
        {
            const string hql = "FROM Spesa SPE LEFT JOIN FETCH SPE.TestateMovimenti TESSPE LEFT JOIN FETCH SPE.FornitoreRiferimento FOR LEFT JOIN FETCH FOR.PersonaRiferimento PERS LEFT JOIN FETCH SPE.EsercizioRiferimento ESE LEFT JOIN FETCH ESE.CondominioRiferimento COND LEFT JOIN FETCH COND.Azienda AZI LEFT JOIN FETCH SPE.Scadenze SCA LEFT JOIN FETCH SCA.Pagamenti PAG LEFT JOIN FETCH PAG.MovimentoContabile MOVPAG LEFT JOIN FETCH PAG.Conto CONTO LEFT JOIN FETCH SPE.Utenza UTE LEFT JOIN FETCH UTE.CoordinateBancarie BANCA WHERE SPE.ID = :spesa";
            var spese = _daoFactory.GetSpesaDao().GetByQuery(hql, new[] { new QueryParam("spesa", id) });
            Spesa spesa = null;
            if(spese.Count > 0)
                spesa = spese[0];

            var bolletta = new BollettaDTO();
            if (spesa != null)
            {
                bolletta = new BollettaDTO
                {
                    ID = id,
                    DataDocumento = spesa.DataDocumento,
                    NumeroDocumento = spesa.NumeroDocumento,
                    DisplayFornitore = spesa.FornitoreRiferimento.DisplayName,
                    IdFornitore = spesa.FornitoreRiferimento.ID,
                    Importo = spesa.ImportoBolletta.GetValueOrDefault(),
                    IdentificativoArchiviazioneOttica = _archiviazioneService.GetIdentificativoArchiviazione(spesa),
                    IdEsercizio = spesa.EsercizioRiferimento.ID,
                    StatoSpesa = spesa.Stato,
                    DataInizioCompetenza = spesa.DataInizioCompetenza,
                    DataFineCompetenza = spesa.DataFineCompetenza,
                    DataScadenza = Library.IesiGenericCollections<ScadenzaFattura>.GetByIndex(spesa.Scadenze, 0).Scadenza.GetValueOrDefault(),
                    Note = spesa.Note,
                    TipoDocumento = spesa.TipoDocumento,
                    IsAbilitataArchiviazioneOttica = spesa.IsAbilitataArchiviazioneOttica,
                    Rid = spesa.RidAutomatica,
                    Autorizzata = spesa.Autorizzata,
                    IsDeleteAllow = true
                };

                if (spesa.Utenza != null)
                {
                    bolletta.IdUtenza = spesa.Utenza.ID;
                    if(spesa.Utenza.CoordinateBancarie != null)
                        bolletta.IdBancaUtenza = spesa.Utenza.CoordinateBancarie.ID;
                }

                if (spesa.Pagamenti.Count > 0)
                {
                    var pagamento = Library.IesiGenericCollections<Pagamento>.GetByIndex(spesa.Pagamenti, 0);
                    if(pagamento.Conto != null)
                        bolletta.IdContoPagamento = pagamento.Conto.ID;

                    if (pagamento.MovimentoContabile != null)
                    {
                        if (pagamento.MovimentoContabile.SottoContoRiferimento != null)
                            bolletta.IdSottoContoPagamento = pagamento.MovimentoContabile.SottoContoRiferimento.ID;
                        else if (pagamento.MovimentoContabile.ContoCorrenteBancario != null)
                            bolletta.IdSottoContoPagamento = pagamento.MovimentoContabile.ContoCorrenteBancario.ID * -1;
                    }
                }

                if (spesa.TestateMovimenti.Count > 0)
                {
                    var testata = spesa.TestateMovimenti.FirstOrDefault();
                    if(testata != null)
                    {
                        bolletta.Descrizione = testata.Descrizione;
                        bolletta.DataRegistrazione = testata.DataRegistrazione.GetValueOrDefault();
                    }
                }

                // Per ora NON sono previsti dettagli
                //foreach (DettaglioSpesa dettaglioSpesa in spesa.Dettagli)
                //{
                //    DettaglioBollettaDTO dettaglioBolletta = new DettaglioBollettaDTO()
                //    {
                //        AliquotaIva = dettaglioSpesa.AliquotaIva,
                //        Descrizione = dettaglioSpesa.Descrizione,
                //        ID = dettaglioSpesa.ID,
                //        IdBollettaRiferimento = bolletta.ID,
                //        Imponibile = dettaglioSpesa.Imponibile,
                //        ImportoIva = dettaglioSpesa.ImportoIva,
                //        ImportoLordo = dettaglioSpesa.ImportoLordo,
                //        IsDeleteAllow = dettaglioSpesa.IsDeleteAllow(),
                //        Note = dettaglioSpesa.Note,
                //        NumeroRiga = dettaglioSpesa.NumeroRiga,
                //        Quantita = dettaglioSpesa.Quantita,
                //        TipoEnum = dettaglioSpesa.Tipo,
                //        Tipo = dettaglioSpesa.Tipo.ToString()
                //    };

                //    bolletta.Dettagli.Add(dettaglioBolletta);
                //}

                //List<MovimentoContabileBollettaDTO> movimenti = new List<MovimentoContabileBollettaDTO>();
                //foreach (MovimentoContabile movimento in Gipasoft.Library.IesiGenericCollections<DettaglioSpesa>.GetByIndex(spesa.Dettagli, 0).Movimenti)
                //{
                //    MovimentoContabileBollettaDTO movimentoDto = new MovimentoContabileBollettaDTO()
                //    {
                //        Descrizione = movimento.Descrizione,
                //        ID = movimento.ID,
                //        IdConto = movimento.ContoRiferimento.ID,
                //        Importo = movimento.Importo,
                //        IsDeleteAllow = movimento.IsDeleteAllow()
                //    };
                //    if(movimento.SottoContoRiferimento != null)
                //        movimentoDto.IdSottoConto = movimento.SottoContoRiferimento.ID;

                //    bolletta.Movimenti.Add(movimentoDto);
                //}

            }

            return bolletta;
        }
        public BollettaDTO GetNewBolletta(int? idUtenza, int idEsercizio)
        {
            var bolletta = new BollettaDTO();

            var esercizio = _daoFactory.GetEsercizioDao().GetById(idEsercizio, false);
            var contoBancario = _pianoContiService.GetContoBancario(esercizio);
            bolletta.IdEsercizio = idEsercizio;
            bolletta.DataRegistrazione = DateTime.Today;
            bolletta.DataScadenza = DateTime.Today;

            if (idUtenza != null)
            {
                var utenza = _daoFactory.GetUtenzaDao().GetById(idUtenza.Value, false);
                bolletta.DisplayFornitore = utenza.Fornitore.DisplayName;
                bolletta.IdFornitore = utenza.Fornitore.ID;
                bolletta.IdUtenza = idUtenza.Value;
                bolletta.Rid = utenza.RidAutomatica;

                if(utenza.CoordinateBancarie != null)
                    bolletta.IdBancaUtenza = utenza.CoordinateBancarie.ID;

                if(utenza.ModelloRegistrazione != null)
                    bolletta.Descrizione = utenza.ModelloRegistrazione.DescrizioneVoceFattura;
            }

            var impostazioniAzienda = esercizio.CondominioRiferimento.Azienda.Impostazioni.FirstOrDefault();
            if (impostazioniAzienda != null)
                bolletta.Autorizzata = !impostazioniAzienda.AutorizzazioneScadenze;

            bolletta.Importo = 0;

            bolletta.IdContoPagamento = contoBancario.ID;
            if (contoBancario.SottoConti.Count == 1)
                bolletta.IdSottoContoPagamento = contoBancario.SottoConti[0].ID;

            bolletta.IsAbilitataArchiviazioneOttica = esercizio.CondominioRiferimento.IsAbilitataArchiviazioneOtticaPassivi.GetValueOrDefault();
            bolletta.IsDeleteAllow = true;

            bolletta.Dettagli = new List<DettaglioBollettaDTO>();

            return bolletta;

            #region NON ESEGUIBILE

            //===========================================================
            // PER ORA NON SONO GESTITI DETTAGLI
            //===========================================================

            //// --------------------------------
            //// Dettagli
            //// --------------------------------
            //// Consumo
            //bolletta.Dettagli.Add(new DettaglioBollettaDTO()
            //{
            //    ID = 0,
            //    IdBollettaRiferimento = 0,
            //    NumeroRiga = 1,
            //    AliquotaIva = "20",
            //    Tipo = TipoDettaglioBollettaEnum.Consumo.ToString()
            //});

            //// Fognatura
            //bolletta.Dettagli.Add(new DettaglioBollettaDTO()
            //{
            //    ID = 0,
            //    IdBollettaRiferimento = 0,
            //    NumeroRiga = 2,
            //    AliquotaIva = "20",
            //    Tipo = TipoDettaglioBollettaEnum.Fognatura.ToString()
            //});

            //// Depurazione
            //bolletta.Dettagli.Add(new DettaglioBollettaDTO()
            //{
            //    ID = 0,
            //    IdBollettaRiferimento = 0,
            //    NumeroRiga = 3,
            //    AliquotaIva = "20",
            //    Tipo = TipoDettaglioBollettaEnum.Depurazione.ToString()
            //});

            //// Quota Fissa
            //bolletta.Dettagli.Add(new DettaglioBollettaDTO()
            //{
            //    ID = 0,
            //    IdBollettaRiferimento = 0,
            //    NumeroRiga = 4,
            //    AliquotaIva = "20",
            //    Tipo = TipoDettaglioBollettaEnum.QuotaFissa.ToString()
            //});

            //return bolletta;

            #endregion NON ESEGUIBILE
        }
        public ResultBolletta SalvaBolletta(BollettaDTO dto, bool controlloDataRegistrazione)
        {
            try
            {
                var message = string.Empty;

                if (dto.IdFornitore > 0 && dto.IdEsercizio > 0)
                {
                    foreach (var dettaglioDto in dto.Dettagli)
                    {
                        try
                        {
                            if (string.IsNullOrEmpty(dettaglioDto.AliquotaIva))
                                dettaglioDto.ImportoLordo = dettaglioDto.Imponibile;
                            else
                            {
                                var aliquotaIva = new decimal(Library.Decodifica.Instance.GetElement("CodiceIva", dettaglioDto.AliquotaIva).ValoreNumerico);
                                dettaglioDto.ImportoIva = dettaglioDto.Imponibile * aliquotaIva;
                                dettaglioDto.ImportoLordo = dettaglioDto.Imponibile + dettaglioDto.ImportoIva;
                            }
                        }
                        catch (Exception ex)
                        {
                            _log.ErrorFormat("Errore durante il salvataggio di una bolletta (Singolo Dettaglio) - {0} - dettaglio:{1} - idBolletta:{2} - pagata:{3}", ex, Library.Utility.GetMethodDescription(), dettaglioDto.ID, dto.ID, dto.Rid);
                            throw;
                        }
                    }

                    if (dto.Rid && (dto.IdContoPagamento == 0 || dto.IdSottoContoPagamento == 0))
                    {
                        return new ResultBolletta(dto, "Se è selezionato il pagamento automatico tramite rid occorre selezionare un conto corrente di pagamento");
                    }

                    var spesa = _daoFactory.GetSpesaDao().Find(dto.ID, false);
                    var esercizio = _daoFactory.GetEsercizioDao().GetById(dto.IdEsercizio.GetValueOrDefault(), false);
                    if (spesa != null)
                    {
                        spesa.Autorizzata = dto.Autorizzata;
                        if(!dto.Rid && spesa.Pagamenti.Count > 0)
                            return new ResultBolletta(dto, "Non è possibile aggiornare la registrazione perchè sono presenti dei pagamenti");

                        var messageAnnullamentoPagamenti = _pagamentoService.IsAllowAnnullamentoPagamentiSpesa(spesa.ID);
                        if(!string.IsNullOrEmpty(messageAnnullamentoPagamenti.FatalMessage))
                            return new ResultBolletta(dto, "Non è possibile aggiornare la registrazione perchè sono presenti dei pagamenti non annullabili." + Environment.NewLine + messageAnnullamentoPagamenti.FatalMessage);

                        spesa.FornitoreRiferimento = _daoFactory.GetFornitoreDao().GetById(dto.IdFornitore.GetValueOrDefault(), false);
                        spesa.EsercizioRiferimento = esercizio;

                        var scadenza = spesa.Scadenze.FirstOrDefault();
                        if (scadenza != null)
                        {
                            scadenza.Scadenza = dto.DataScadenza;
                            scadenza.Importo = dto.Importo;

                            // Annullo i pagamenti preesistenti
                            var messageAnnullaPagamenti = _pagamentoService.AnnullamentoPagamentiSpesa(spesa.ID);
                            if (!string.IsNullOrEmpty(messageAnnullaPagamenti))
                            {
                                var utente = _daoFactory.GetUtenteDao().Find(dto.IdUtente, false);
                                var username = "******";
                                if (utente != null)
                                    username = utente.Username;
                                else
                                    _log.ErrorFormat("Non trovato idUtente - {0} - azienda:{1} - bolletta:{2}", Library.Utility.GetMethodDescription(), Security.Login.Instance.CurrentLogin().Azienda, dto.ID);

                                _persistenceContext.RollbackAndCloseSession(username);
                                message += Environment.NewLine + messageAnnullaPagamenti + Environment.NewLine;
                                return new ResultBolletta(dto, message);
                            }
                        }
                    }
                    else
                    {
                        spesa = new Spesa(_daoFactory.GetFornitoreDao().GetById(dto.IdFornitore.GetValueOrDefault(), false), esercizio) { Autorizzata = dto.Autorizzata };
                        var protocollo = _protocolloService.GetProgressivo(TipoProtocollo.Fattura, esercizio.DataApertura.GetValueOrDefault().Year, spesa.EsercizioRiferimento.CondominioRiferimento);
                        if (protocollo.Progressivo != null)
                        {
                            spesa.NumeroProtocollo = protocollo.Progressivo;
                            spesa.AnnoArchiviazioneOttica = esercizio.DataApertura.GetValueOrDefault().Year;
                        }
                        else
                        {
                            message += protocollo.Message + Environment.NewLine;
                            return new ResultBolletta(null, message);
                        }

                        spesa.Scadenze.Add(new ScadenzaFattura(spesa, dto.DataScadenza, dto.Importo));
                    }

                    spesa.RidAutomatica = dto.Rid;
                    spesa.IsRipartita = false;
                    spesa.TipoDocumento = "BOLLETTA";
                    spesa.DataDocumento = dto.DataDocumento;
                    spesa.NumeroDocumento = dto.NumeroDocumento;
                    spesa.ImportoBolletta = dto.Importo;
                    spesa.DataInizioCompetenza = dto.DataInizioCompetenza;
                    spesa.DataFineCompetenza = dto.DataFineCompetenza;
                    spesa.IsRipartoPersonalizzato = dto.IsRipartoPersonalizzato;
                    spesa.IsAbilitataArchiviazioneOttica = dto.IsAbilitataArchiviazioneOttica;

                    spesa.Utenza = _daoFactory.GetUtenzaDao().GetById(dto.IdUtenza, false);

                    _daoFactory.GetSpesaDao().SaveOrUpdate(spesa);

                    // ---------------------------
                    // Dettagli
                    // ---------------------------
                    spesa.Dettagli.Clear();
                    const int index = 0;
                    foreach (var dettaglioDto in dto.Dettagli)
                    {
                        var dettaglio = new DettaglioSpesa(spesa, index)
                        {
                            AliquotaIva = dettaglioDto.AliquotaIva,
                            Descrizione = dettaglioDto.Descrizione,
                            ID = dettaglioDto.ID,
                            Note = dettaglioDto.Note,
                            Tipo = (TipoDettaglioBollettaEnum)Enum.Parse(typeof (TipoDettaglioBollettaEnum), dettaglioDto.Tipo),
                            Quantita = dettaglioDto.Quantita
                        };

                        if (string.IsNullOrEmpty(dettaglioDto.AliquotaIva))
                            dettaglio.ImportoLordo = dettaglioDto.Imponibile;
                        else
                        {
                            var aliquotaIva = new decimal(Library.Decodifica.Instance.GetElement("CodiceIva", dettaglioDto.AliquotaIva).ValoreNumerico);
                            dettaglio.ImportoIva = dettaglioDto.Imponibile * aliquotaIva;
                            dettaglio.ImportoLordo = dettaglioDto.Imponibile + dettaglio.ImportoIva;
                        }

                        spesa.Dettagli.Add(dettaglio);
                    }

                    // ---------------------------
                    // Movimenti
                    // ---------------------------
                    _movimentoContabileService.SetMovimentoBolletta(dto, spesa, null, controlloDataRegistrazione);

                    // ==========================================================================================================================================
                    // BUGID#2159 - COMMENTATO: Con la nuova funzione di riparto aggregato NON devono
                    //  più essere usati gli oggetti SpeseUnita NON deve quindi essere ripartito lo specifico
                    //  movimento
                    //  Sostuitita con calcolo degli addebiti specifici per Lotto, Stabile e Scala.

                    // ---------------------------
                    // Ripartizione
                    // ---------------------------
                    foreach (var movimentoDto in dto.Movimenti)
                    {
                        var movimento = _daoFactory.GetMovimentoContabileDao().Find(movimentoDto.ID, false);
                        if (movimento == null)
                        {
                            
                            _log.Error("Errore durante il salvataggio di una bolletta - MOVIMENTO NON PIù ESISTENTE " + Library.Utility.GetMethodDescription() + " - movimento:" + movimentoDto.ID + " - idBolletta:" + dto.ID + " - pagata:" + dto.Rid);
                            return new ResultBolletta(null, "E' stato cancellato in un'altra finestra il movimento di contabilità");
                        }

                        if (!string.IsNullOrEmpty(movimentoDto.RipartoAggiornato))
                        {
                            movimento.LottiAddebito = null;
                            movimento.GruppiAddebito = null;
                            movimento.StabiliAddebito = null;
                        }

                        switch (movimentoDto.RipartoAggiornato)
                        {
                            case "U":
                                break;
                            case "G":
                                if (movimentoDto.Ripartizione.Gruppi != null && movimentoDto.Ripartizione.Gruppi.Count > 0)
                                {
                                    var lista = movimentoDto.Ripartizione.Gruppi;
                                    foreach (var item in lista)
                                    {
                                        if (item.Selezionato)
                                            movimento.GruppiAddebito += item.ID + "&";
                                    }

                                    // Se sono stati selezionati tutti i gruppi NON salvo l'elenco dei gruppi
                                    if (movimento.GruppiAddebito == spesa.EsercizioRiferimento.CondominioRiferimento.GetGruppiKey())
                                        movimento.GruppiAddebito = string.Empty;

                                    if (!string.IsNullOrEmpty(movimento.GruppiAddebito) && movimento.GruppiAddebito.EndsWith("&"))
                                        movimento.GruppiAddebito = movimento.GruppiAddebito.Substring(0, movimento.GruppiAddebito.Length - 1);
                                }
                                break;
                            case "S":
                                if (movimentoDto.Ripartizione.Stabili != null && movimentoDto.Ripartizione.Stabili.Count > 0)
                                {
                                    var lista = movimentoDto.Ripartizione.Stabili;
                                    foreach (var item in lista)
                                    {
                                        if (item.Selezionato)
                                            movimento.StabiliAddebito += item.ID + "&";
                                    }

                                    // Se sono stati selezionati tutti gli stabili NON salvo l'elenco degli stabili
                                    if (movimento.StabiliAddebito == spesa.EsercizioRiferimento.CondominioRiferimento.GetStabiliKey())
                                        movimento.StabiliAddebito = string.Empty;

                                    if (!string.IsNullOrEmpty(movimento.StabiliAddebito) && movimento.StabiliAddebito.EndsWith("&"))
                                        movimento.StabiliAddebito = movimento.StabiliAddebito.Substring(0, movimento.StabiliAddebito.Length - 1);
                                }
                                break;
                            case "L":
                                if (movimentoDto.Ripartizione.Lotti != null && movimentoDto.Ripartizione.Lotti.Count > 0)
                                {
                                    var lista = movimentoDto.Ripartizione.Lotti;
                                    foreach (var item in lista)
                                    {
                                        if (item.Selezionato)
                                            movimento.LottiAddebito += item.ID + "&";
                                    }

                                    // Se sono stati selezionati tutti i lotti NON salvo l'elenco dei lotti
                                    if (movimento.LottiAddebito == spesa.EsercizioRiferimento.CondominioRiferimento.GetLottiKey())
                                        movimento.LottiAddebito = string.Empty;

                                    if (!string.IsNullOrEmpty(movimento.LottiAddebito) && movimento.LottiAddebito.EndsWith("&"))
                                        movimento.LottiAddebito = movimento.LottiAddebito.Substring(0, movimento.LottiAddebito.Length - 1);
                                }
                                break;
                        }
                    }

                    //foreach (var movimentoDto in dto.Movimenti)
                    //{
                    //    var movimento = _daoFactory.GetMovimentoContabileDao().Find(movimentoDto.ID, false);
                    //    if (movimento == null)
                    //    {
                    //        
                    //        _log.Error("Errore durante il salvataggio di una bolletta - MOVIMENTO NON PIù ESISTENTE " + Library.Utility.GetMethodDescription() + " - movimento:" + movimentoDto.ID + " - idBolletta:" + dto.ID + " - pagata:" + pagata);
                    //        return new ResultBolletta(null, "E' stato cancellato in un'altra finestra il movimento di contabilità");
                    //    }

                    //    foreach (var dettaglioRipartizione in movimento.DettaglioRipartizione)
                    //    {
                    //        dettaglioRipartizione.MovimentoRiferimento = null;
                    //        dettaglioRipartizione.UnitaRiferimento = null;
                    //        _daoFactory.GetSpeseUnitaDao().Delete(dettaglioRipartizione);
                    //    }

                    //    movimento.DettaglioRipartizione.Clear();
                    //    if (!string.IsNullOrEmpty(movimentoDto.RipartoAggiornato))
                    //    {
                    //        movimento.LottiAddebito = null;
                    //        movimento.GruppiAddebito = null;
                    //        movimento.StabiliAddebito = null;
                    //    }

                    //    switch (movimentoDto.RipartoAggiornato)
                    //    {
                    //        case "U":
                    //            if (movimentoDto.Ripartizione.UnitaImmobiliari != null && movimentoDto.Ripartizione.UnitaImmobiliari.Count > 0)
                    //            {
                    //                var lista = movimentoDto.Ripartizione.UnitaImmobiliari;
                    //                foreach (var item in lista)
                    //                {
                    //                    if (item.Selezionato)
                    //                    {
                    //                        var dettaglioRipartizione = new SpeseUnita(null, _daoFactory.GetUnitaImmobiliareDao().GetById(item.ID, false), movimento);
                    //                        _daoFactory.GetSpeseUnitaDao().SaveOrUpdate(dettaglioRipartizione);
                    //                    }
                    //                }
                    //            }
                    //            break;
                    //        case "G":
                    //            if (movimentoDto.Ripartizione.Gruppi != null && movimentoDto.Ripartizione.Gruppi.Count > 0)
                    //            {
                    //                var lista = movimentoDto.Ripartizione.Gruppi;
                    //                foreach (var item in lista)
                    //                {
                    //                    if (item.Selezionato)
                    //                    {
                    //                        var gruppo = _daoFactory.GetGruppoStabileDao().GetById(item.ID, false);
                    //                        movimento.GruppiAddebito += gruppo.ID + "&";
                    //                        foreach (var unita in gruppo.UnitaImmobiliari)
                    //                        {
                    //                            var dettaglioRipartizione = new SpeseUnita(null, unita, movimento);
                    //                            _daoFactory.GetSpeseUnitaDao().SaveOrUpdate(dettaglioRipartizione);
                    //                        }
                    //                    }
                    //                }

                    //                // Se sono stati selezionati tutti i gruppi NON salvo l'elenco dei gruppi
                    //                if (movimento.GruppiAddebito == spesa.EsercizioRiferimento.CondominioRiferimento.GetGruppiKey())
                    //                    movimento.GruppiAddebito = string.Empty;

                    //                if (!string.IsNullOrEmpty(movimento.GruppiAddebito) && movimento.GruppiAddebito.EndsWith("&"))
                    //                    movimento.GruppiAddebito = movimento.GruppiAddebito.Substring(0, movimento.GruppiAddebito.Length - 1);
                    //            }
                    //            break;
                    //        case "S":
                    //            if (movimentoDto.Ripartizione.Stabili != null && movimentoDto.Ripartizione.Stabili.Count > 0)
                    //            {
                    //                var lista = movimentoDto.Ripartizione.Stabili;
                    //                foreach (var item in lista)
                    //                {
                    //                    if (item.Selezionato)
                    //                    {
                    //                        var stabile = _daoFactory.GetPalazzinaDao().GetById(item.ID, false);
                    //                        movimento.StabiliAddebito += stabile.ID + "&";
                    //                        foreach (var dettaglioRipartizione in stabile.GruppiStabile.SelectMany(gruppo => gruppo.UnitaImmobiliari.Select(unita => new SpeseUnita(null, unita, movimento))))
                    //                        {
                    //                            _daoFactory.GetSpeseUnitaDao().SaveOrUpdate(dettaglioRipartizione);
                    //                        }
                    //                    }
                    //                }

                    //                // Se sono stati selezionati tutti gli stabili NON salvo l'elenco degli stabili
                    //                if (movimento.StabiliAddebito == spesa.EsercizioRiferimento.CondominioRiferimento.GetStabiliKey())
                    //                    movimento.StabiliAddebito = string.Empty;

                    //                if (!string.IsNullOrEmpty(movimento.StabiliAddebito) && movimento.StabiliAddebito.EndsWith("&"))
                    //                    movimento.StabiliAddebito = movimento.StabiliAddebito.Substring(0, movimento.StabiliAddebito.Length - 1);
                    //            }
                    //            break;
                    //        case "L":
                    //            if (movimentoDto.Ripartizione.Lotti != null && movimentoDto.Ripartizione.Lotti.Count > 0)
                    //            {
                    //                var lista = movimentoDto.Ripartizione.Lotti;
                    //                foreach (var item in lista)
                    //                {
                    //                    if (item.Selezionato)
                    //                    {
                    //                        var stabili = _daoFactory.GetPalazzinaDao().GetByLotto(_daoFactory.GetLottoDao().GetById(item.ID, false));
                    //                        movimento.LottiAddebito += item.ID + "&";
                    //                        foreach (var dettaglioRipartizione in stabili.SelectMany(stabile => stabile.GruppiStabile.SelectMany(gruppo => gruppo.UnitaImmobiliari.Select(unita => new SpeseUnita(null, unita, movimento)))))
                    //                        {
                    //                            _daoFactory.GetSpeseUnitaDao().SaveOrUpdate(dettaglioRipartizione);
                    //                        }
                    //                    }
                    //                }

                    //                // Se sono stati selezionati tutti i lotti NON salvo l'elenco dei lotti
                    //                if (movimento.LottiAddebito == spesa.EsercizioRiferimento.CondominioRiferimento.GetLottiKey())
                    //                    movimento.LottiAddebito = string.Empty;

                    //                if (!string.IsNullOrEmpty(movimento.LottiAddebito) && movimento.LottiAddebito.EndsWith("&"))
                    //                    movimento.LottiAddebito = movimento.LottiAddebito.Substring(0, movimento.LottiAddebito.Length - 1);
                    //            }
                    //            break;
                    //    }
                    //}
                    // ==========================================================================================================================================

                    // ---------------------------
                    // Pagamenti
                    // ---------------------------
                    if (dto.Rid)
                    {
                        if (spesa.ImportoBolletta > 0)
                            _pagamentoService.CreatePagamentiImmediatiBolletta(spesa, dto);
                        else // nota accredito
                        {
                            var riscossioni = new List<RiscossioneNotaAccreditoDTO>
                            {
                                new RiscossioneNotaAccreditoDTO
                                    {
                                        IdNotaAccredito = spesa.ID,
                                        IdConto = dto.IdContoPagamento,
                                        IdSottoConto = dto.IdSottoContoPagamento,
                                        Importo = dto.Importo
                                    }
                            };
                            _pagamentoService.RiscossioneNoteAccredito(riscossioni, dto.DataScadenza);
                        }
                    }

                    //====================================================================
                    // Se il tipo utenza non è acqua la bolletta viene subito ripartita
                    //====================================================================
                    // Aggiorno il selected sul DTO, necessario in caso di inserimento
                    foreach (var movimentoDto in dto.Movimenti)
                    {
                        var movimento = _daoFactory.GetMovimentoContabileDao().GetById(movimentoDto.ID, false);
                        if (movimentoDto.Ripartizione != null)
                        {
                            foreach (var itemDto in movimentoDto.Ripartizione.UnitaImmobiliari)
                                itemDto.Selezionato = movimento.DettaglioRipartizione.Any(item => item.UnitaRiferimento.ID == itemDto.ID);
                        }
                    }

                    if (spesa.Utenza != null && !spesa.Utenza.RipartoLetture)
                    {
                        foreach (var movimento in spesa.MovimentiBollette)
                            _ripartizioneSpeseService.RicalcoloRipartizioneByMovimento(movimento);
                        spesa.IsRipartita = true;
                    }

                    spesa.IsRipartoPersonalizzato = dto.IsRipartoPersonalizzato;

                    dto.IdentificativoArchiviazioneOttica = _archiviazioneService.GetIdentificativoArchiviazione(spesa);

                    spesa.SetStato();
                    dto.StatoSpesa = spesa.Stato;
                }
                else
                {
                    _log.Warn("ATTENZIONE: Per la bolletta non è definito il fornitore o l'esercizio - " + Library.Utility.GetMethodDescription() + " - fornitore:" + dto.IdFornitore.GetValueOrDefault() + " - esercizio:" + dto.IdEsercizio.GetValueOrDefault() + " - idBolletta:" + dto.ID + " - pagata:" + dto.Rid);

                    if (!(dto.IdFornitore > 0))
                        message += "Per la bolletta non è definito il FORNITORE" + Environment.NewLine;
                    if (!(dto.IdEsercizio > 0))
                        message += "Per la bolletta non è definito l'ESERCIZIO" + Environment.NewLine;
                }

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

                return new ResultBolletta(dto, message);

            }
            catch (Exception ex)
            {
                _log.ErrorFormat("Errore durante il salvataggio di una bolletta - {0} - idBolletta:{1} - pagata:{2}", ex, Library.Utility.GetMethodDescription(), dto.ID, dto.Rid);
                throw;
            }
        }
Пример #9
0
 public List<DocumentoDTO> GetDocumenti(BollettaDTO bolletta)
 {
     return _documentoService.GetByBolletta(bolletta);
 }
Пример #10
0
        public List<MovimentoContabileBollettaDTO> GetRipartizioneByBolletta(BollettaDTO bolletta)
        {
            try
            {
                var result = GetServiceClient().GetRipartizioneByBolletta(bolletta.ID, GetUserInfo());
                CloseService();
                return result;
            }
            catch (CommunicationObjectAbortedException ex)
            {
                _log.DebugFormat("Errore nella chiamata al servizio - {0} - azienda:{1}", ex, Utility.GetMethodDescription(), Login.Instance.CurrentLogin().Azienda);
            }
            catch (CommunicationObjectFaultedException ex)
            {
                _log.DebugFormat("Errore nella chiamata al servizio - {0} - azienda:{1}", ex, Utility.GetMethodDescription(), Login.Instance.CurrentLogin().Azienda);
            }
            catch (CommunicationException ex)
            {
                _log.DebugFormat("Errore nella chiamata al servizio - {0} - azienda:{1}", ex, Utility.GetMethodDescription(), Login.Instance.CurrentLogin().Azienda);
            }
            catch (IOException ex)
            {
                _log.DebugFormat("Errore nella chiamata al servizio - {0} - azienda:{1}", ex, Utility.GetMethodDescription(), Login.Instance.CurrentLogin().Azienda);
            }
            catch (ObjectDisposedException ex)
            {
                _log.DebugFormat("Errore nella chiamata al servizio - {0} - azienda:{1}", ex, Utility.GetMethodDescription(), Login.Instance.CurrentLogin().Azienda);
            }
            catch (Exception ex)
            {
                _log.ErrorFormat("Errore nella chiamata al servizio - {0} - azienda:{1}", ex, Utility.GetMethodDescription(), Login.Instance.CurrentLogin().Azienda);
                throw;
            } 

            return new List<MovimentoContabileBollettaDTO>();
        }
Пример #11
0
 public AuthorizationMessages IsAllowNumeroFattura(BollettaDTO bolletta)
 {
     var message = GetServiceClient().IsAllowNumeroFattura(bolletta.NumeroDocumento, bolletta.DataDocumento.GetValueOrDefault(), bolletta.IdFornitore.GetValueOrDefault(), bolletta.ID, GetUserInfo());
     CloseService();
     return message;
 }
Пример #12
0
 public ResultBolletta SalvaBolletta(BollettaDTO bolletta)
 {
     var result = GetServiceClient().SalvaBolletta(bolletta, GetUserInfo());
     CloseService();
     return result;
 }
Пример #13
0
 public string ShowDocumento(BollettaDTO bolletta)
 {
     if (bolletta != null)
     {
         var esercizio = _esercizioService.GetById(bolletta.IdEsercizio.GetValueOrDefault());
         if(esercizio != null)
             return _archiviazioneService.ShowDocumento(null, TipoDocumento.FatturaPassiva, esercizio.DataApertura.GetValueOrDefault().Year, bolletta.IdentificativoArchiviazioneOttica);
     }
     return null;
 }
Пример #14
0
        public IList<MovimentoContabile> SetMovimentoBolletta(BollettaDTO bolletta, Spesa spesa, TestataMovimentoContabile testata, LogTransazione logTransazione, bool controlloDataRegistrazione)
        {
            try
            {
                IList<MovimentoContabile> movimentiEconomici = new List<MovimentoContabile>();

                CausaleContabile causale;
                if (spesa.Utenza != null && spesa.Utenza.RipartoLetture)
                    causale = _daoFactory.GetCausaleContabileDao().GetByCodice("IA");
                else
                    causale = _daoFactory.GetCausaleContabileDao().GetByCodice("IF");

                if (testata == null && spesa.TestateMovimenti.Count > 0)
                {
                    testata = spesa.TestateMovimenti.FirstOrDefault();
                    if (testata != null)
                    {
                        testata.EsercizioRiferimento = spesa.EsercizioRiferimento;
                        testata.DataRegistrazione = bolletta.DataRegistrazione;
                    }
                }

                var dataRegistrazione = DateTime.Today;
                if (bolletta.DataRegistrazione != null)
                    dataRegistrazione = bolletta.DataRegistrazione.GetValueOrDefault();

                if (testata == null)
                {
                    testata = new TestataMovimentoContabile(spesa.EsercizioRiferimento, dataRegistrazione, TipoTestataMovimentoContabileEnum.Automatica, null) { SpesaRiferimento = spesa };
                    spesa.TestateMovimenti.Add(testata);
                    testata.IsAllowUpdate = false;
                    if(logTransazione == null)
                        _daoFactory.GetTestataMovimentoContabileDao().SaveOrUpdate(testata);
                    else
                        testata.LogTransazione = logTransazione;
                }

                // controllo data registrazione
                IList<string> message = new List<string>();
                if(controlloDataRegistrazione)
                    message = IsAllowDataRegistrazione(new List<int> { spesa.EsercizioRiferimento.CondominioRiferimento.ID }, spesa.EsercizioRiferimento, testata.DataRegistrazione.GetValueOrDefault());
                if (message.Count > 0)
                {
                    var ex = new InvalidDataException(string.Format("La data di registrazione {0} non è valida", testata.DataRegistrazione.GetValueOrDefault()));
                    _log.ErrorFormat("Data di registrazione non valida - {0} - data:{1} - spesa:{2} - esercizio:{3}", ex, Utility.GetMethodDescription(), testata.DataRegistrazione.GetValueOrDefault(), spesa.ID, spesa.EsercizioRiferimento.ID);
                    throw ex;
                }

                testata.Descrizione = bolletta.Descrizione;
                testata.DataRegistrazione = dataRegistrazione;

                // -------------------------------------------
                // Elimino movimenti cancellati
                // -------------------------------------------
                foreach (var mov in testata.Movimenti.Where(item => item.NumeroRiga > 1).ToList())
                    DeleteSingoloMovimento(mov);

                // -------------------------------------------
                // Movimenti Economici
                // -------------------------------------------
                var numeroRiga = 1;
                var importoEconomico = 0m;
                foreach (var movimentoDto in bolletta.Movimenti)
                {
                    if (movimentoDto.IdConto != null)
                    {
                        var importo = Math.Round(movimentoDto.Importo.GetValueOrDefault(), 2);
                        importoEconomico += importo;

                        var segno = "D";
                        if (importo < 0)
                        {
                            segno = "A";
                            importo = importo * -1;
                        }

                        var movimento = _daoFactory.GetMovimentoContabileDao().Find(movimentoDto.ID, false);
                        numeroRiga++;
                        if (movimento != null)
                        {
                            movimento.ContoRiferimento = _daoFactory.GetContoDao().GetById(movimentoDto.IdConto.Value, false);
                            movimento.Segno = segno;
                            movimento.Importo = importo;
                            movimento.Causale = causale;
                        }
                        else
                        {
                            movimento = new MovimentoContabile(testata, spesa, causale, testata.Movimenti.Count + 1, _daoFactory.GetContoDao().GetById(movimentoDto.IdConto.Value, false), importo, segno);
                            if(logTransazione == null)
                                _daoFactory.GetMovimentoContabileDao().SaveOrUpdate(movimento);
                        }

                        movimento.IsMovimentoEconomico = true;
                        movimento.NumeroRiga = numeroRiga;
                        movimento.Descrizione = movimentoDto.Descrizione;
                        if (movimentoDto.IdSottoConto != null && movimentoDto.IdSottoConto > 0)
                            movimento.SottoContoRiferimento = _daoFactory.GetSottoContoDao().GetById(movimentoDto.IdSottoConto.Value, false);

                        movimentoDto.ID = movimento.ID;
                        movimentiEconomici.Add(movimento);
                    }
                    else
                    {
                        _log.ErrorFormat("Movimento senza conto associato - {0} - bolletta:{1}", Utility.GetMethodDescription(), bolletta.ID);
                        throw (new Exception("Movimento senza conto associato - " + Utility.GetMethodDescription() + " - idBolletta:" + bolletta.ID));
                    }
                }

                // ------------------------------------------------
                // Debiti VS Fornitori
                // ------------------------------------------------
                var causalePatrimoniale = _daoFactory.GetCausaleContabileDao().GetByCodice("IF");
                var importoTotale = spesa.ImportoBolletta.GetValueOrDefault();
                var importoPatrimoniale = importoTotale;

                var segnoPatrimoniale = "A";
                if (importoTotale < 0)
                {
                    segnoPatrimoniale = "D";
                    importoTotale = importoTotale * -1;
                }

                var movimentoPatrimoniale = (testata.Movimenti.Where(item => !item.IsMovimentoEconomico && !item.ContoRiferimento.IsArrotondamento)).FirstOrDefault();
                if (movimentoPatrimoniale == null)
                {
                    movimentoPatrimoniale = new MovimentoContabile(testata, spesa.FornitoreRiferimento, causalePatrimoniale, 1, _daoFactory.GetContoDao().GetByCodice(spesa.EsercizioRiferimento.ID, spesa.EsercizioRiferimento.CondominioRiferimento.ID, _pianoContiService.GetCodiceContoFornitori()), importoTotale, segnoPatrimoniale);
                    if(logTransazione == null)
                        _daoFactory.GetMovimentoContabileDao().SaveOrUpdate(movimentoPatrimoniale);
                }
                else
                {
                    movimentoPatrimoniale.NumeroRiga = 1;
                    movimentoPatrimoniale.Importo = importoTotale;
                    movimentoPatrimoniale.Segno = segnoPatrimoniale;
                }

                movimentoPatrimoniale.Descrizione = $"Fatt. n. {spesa.NumeroDocumento} del {spesa.DataDocumento.GetValueOrDefault():d}";

                // ------------------------------------------------
                // Eventuale arrotondamento
                // ------------------------------------------------
                setMovimentoArrotondamento(importoPatrimoniale, importoEconomico, numeroRiga, spesa, testata, causale, logTransazione);

                return movimentiEconomici;
            }
            catch (Exception ex)
            {
                _log.ErrorFormat("Errore inaspettato nella creazione del movimento di registrazione delle bollette - {0} - bolletta:{1}", ex, Utility.GetMethodDescription(), bolletta.ID);
                throw;
            }
        }
 public ResultBolletta SalvaBolletta(BollettaDTO dto)
 {
     return SalvaBolletta(dto, true);
 }
Пример #16
0
 public ResultBolletta(BollettaDTO bolletta, string message)
 {
     Bolletta = bolletta;
     Message = message;
 }
Пример #17
0
		public ResultBolletta SalvaBolletta(BollettaDTO bolletta, UserInfo userinfo)
		{
            var retryCount = 5;
            var success = false;
            var windsorRep = new WindsorConfigRepository();
            var item = new ResultBolletta(null, string.Empty);
		    bolletta.IdUtente = userinfo.Utente;
            while (retryCount >= 0 && !success)
            {
                try
                {
                    windsorRep.BeginTransaction(userinfo);
                    var utenzaService = windsorRep.GetContainer(userinfo.Azienda).Resolve<IUtenzaService>();
                    item = utenzaService.SalvaBolletta(bolletta, null, null);
                    windsorRep.Commit();
                    success = true;
                }
                catch (InvalidDataException ex)
                {
                    return new ResultBolletta(bolletta, ex.Message);
                }
                catch (Exception ex)
                {
                    _log.ErrorFormat("Errore durante il salvataggio di una bolletta - TENTATIVO:{0} - {1} - bolletta:{2} - azienda:{3} - number:{4}", ex, (6 - retryCount), Utility.GetMethodDescription(), bolletta.ID, userinfo.Azienda, getExceptionId(ex));

                    windsorRep.Rollback();
                    if (!isRetryException(ex))
                        throw;

                    // Add delay here if you wish. 
                    System.Threading.Thread.Sleep(1000 * (6 - retryCount));
                    retryCount--;
                    _log.InfoFormat("Salvataggio di una bolletta - INIZIO TENTATIVO:{0} - {1} - bolletta:{2} - azienda:{3}", (6 - retryCount), Utility.GetMethodDescription(), bolletta.ID, userinfo.Azienda);
                }
            }

            if (!success)
                windsorRep.Rollback();

            return item;
		}