public ScadenzaFatturaDTO[] GetAllAperteByFornitoreCondominio(int idFornitore, int idCondominio)
        {
            try
            {
                var daoFactory = _windsorRepository.GetDaoFactory(_info.Azienda);
                var lista = daoFactory.GetScadenzaFatturaDao().GetAperteByFornitoreCondominio(idFornitore, idCondominio);
                var listaDto = new ScadenzaFatturaDTO[lista.Count];

                int index = 0;
                foreach (ScadenzaFattura item in lista)
                {
                    listaDto[index] = setDto(item);
                    index++;
                }

                return listaDto;
            }
            catch (Exception ex)
            {
                
                _log.Error("Errore nel caricamento delle scadenze delle fatture: " + Library.Utility.GetMethodDescription() + " - id:" + idFornitore, ex);
                throw;
            }
        }
        private ScadenzaFattura manage(ScadenzaFatturaDTO dto)
        {
            ScadenzaFattura item = null;
            bool result;

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

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

                    if (!result)
                        throw new Exception("Impossibile scrivere sul database");
                    break;
            }
            return item;
        }
        private bool update(ScadenzaFatturaDTO dto, out ScadenzaFattura item)
        {
            var result = false;
            var daoFactory = _windsorRepository.GetDaoFactory(_info.Azienda);

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

                // Solo se la scadenza non è stata pagata, oppure se l'importo da pagare è superiore a quello pagato, oppure l'importo pagato è uguale ma l'importo della ritenuta è diverso e la ritenuta non è stata ancora versata
                if (item.Stato == StatoSpesaEnum.Inserita || item.Stato == StatoSpesaEnum.Autorizzata || dto.Importo > item.Importo || (dto.Importo == item.Importo && dto.ImportoRitenuta != item.ImportoRitenuta && !item.Pagamenti.Any(pag => pag.RitenutaAcconto.Stato == StatoRitenutaEnum.Pagata)))
                {
                    item.Importo = dto.Importo;
                    item.ImportoRitenuta = dto.ImportoRitenuta;
                    item.Scadenza = dto.Scadenza;
                    item.SetStato();

                    result = true;
                }
                else
                    result = true;
            }
            catch (Exception ex)
            {
                
                _log.Error("Errore nel salvataggio della scadenza Fattura/Spesa: " + Library.Utility.GetMethodDescription() + " - id:" + dto.ID.ToString(), ex);
                throw;
            }

            return result;
        }
        private bool insert(ScadenzaFatturaDTO dto, out ScadenzaFattura item)
        {
            var daoFactory = _windsorRepository.GetDaoFactory(_info.Azienda);

            item = null;

            try
            {
                item = new ScadenzaFattura(daoFactory.GetSpesaDao().GetById(dto.IdSpesa, false), dto.Scadenza, dto.Importo) {ImportoRitenuta = dto.ImportoRitenuta};
                daoFactory.GetScadenzaFatturaDao().SaveOrUpdate(item);
            }
            catch (Exception ex)
            {
                _log.ErrorFormat("Errore nel salvataggio scadenza Fattura/Spesa - {0} - id:{1}", ex, Library.Utility.GetMethodDescription(), dto.ID);
                throw;
            }

            return true;
        }
        private ScadenzaFatturaDTO setDto(ScadenzaFattura item)
        {
            var dto = new ScadenzaFatturaDTO
            {
                ID = item.ID,
                IdSpesa = item.SpesaRiferimento.ID,
                Importo = item.Importo,
                ImportoPagato = item.ImportoPagato,
                ImportoRitenuta = item.ImportoRitenuta,
                IdEsercizio = item.SpesaRiferimento.EsercizioRiferimento.ID,
                Esercizio = item.SpesaRiferimento.EsercizioRiferimento.DisplayName,
                IdCondominio = item.SpesaRiferimento.EsercizioRiferimento.CondominioRiferimento.ID,
                Condominio = item.SpesaRiferimento.EsercizioRiferimento.CondominioRiferimento.DisplayName
            };
            dto.ImportoResiduoRitenuta = Common.ContabilitaHelper.GetImportoRitenuta(item.ID, dto.Importo.GetValueOrDefault() - dto.ImportoPagato.GetValueOrDefault(), _windsorRepository.GetContainer(_info.Azienda));
            dto.Scadenza = item.Scadenza;
            
            dto.DisplayFornitore = item.SpesaRiferimento.FornitoreRiferimento.DisplayName;
            dto.DisplayDataDocumento = item.SpesaRiferimento.DataDocumento;
            dto.DisplayNumeroDocumento = item.SpesaRiferimento.NumeroDocumento;
            dto.DisplayTipoDocumento = item.SpesaRiferimento.TipoDocumento;

            var pagamenti = item.Pagamenti.Where(pag => pag.Stato != StatoSpesaEnum.Autorizzata).ToList();
            if (pagamenti.Any())
            { 
                var pag = pagamenti.FirstOrDefault();
                if (pag != null)
                {
                    if (pag.RitenutaAcconto != null && pag.RitenutaAcconto.TestataRiferimento != null && pag.RitenutaAcconto.TestataRiferimento.Data != null)
                        dto.DataPagamentoRitenuta = pag.RitenutaAcconto.TestataRiferimento.Data;
                    if (pag.Conto != null)
                        dto.IdContoPagamentoScadenza = pag.Conto.ID;
                    if (pag.MovimentoContabile != null)
                    {
                        if (pag.MovimentoContabile.SottoContoRiferimento != null)
                            dto.IdSottoContoPagamentoScadenza = pag.MovimentoContabile.SottoContoRiferimento.ID;
                        else if (pag.MovimentoContabile.ContoCorrenteBancario != null)
                            dto.IdSottoContoPagamentoScadenza = pag.MovimentoContabile.ContoCorrenteBancario.ID * -1;
                    }
                }
            }

            dto.StatoScadenza = item.Stato;
            dto.Version = item.Version;

            // Pagamenti
            var rep = getPagamentoFatturaRepository();
            var pagamentiDTO = new List<PagamentoDTO>(pagamenti.Count);
            pagamentiDTO.AddRange(from pagamento in pagamenti select rep.GetByDomainEntity(pagamento));
            dto.Pagamenti = pagamentiDTO;

            return dto;
        }
 public int? ManageDomainEntity(ScadenzaFatturaDTO dto)
 {
     try
     {
         return manage(dto).ID;
     }
     catch (Exception ex)
     {
         
         _log.Error("Errore nella gestione delle scadenze delle fatture: " + Library.Utility.GetMethodDescription() + " - id:" + dto.ID.ToString(), ex);
         throw;
     }
 }
Esempio n. 7
0
        private void calcolaImportiRiepilogo()
        {
            try
            {
                var tbIva = new DataTable("RiepilogoIva");
                var dcId = new DataColumn("AliquotaIva", typeof(decimal));
                tbIva.Columns.Add(dcId);
                tbIva.PrimaryKey = new[] { dcId };
                var dc = new DataColumn("ImportoTotale", typeof(decimal));
                tbIva.Columns.Add(dc);
                dc = new DataColumn("Imponibile", typeof(decimal));
                tbIva.Columns.Add(dc);
                dc = new DataColumn("ImportoIva", typeof(decimal));
                tbIva.Columns.Add(dc);

                decimal imponibileDocumento = 0;
                decimal imponibileRitenuta = 0;

                if (dettagliSpesa.ActiveTab?.Tag != null)
                    setDettaglioDataSource((DettaglioSpesaDTO)dettagliSpesa.ActiveTab.Tag, null);

                var index = 0;
                foreach (var dettaglio in _spesa.Dettagli)
                {
                    try
                    {
                        if (dettaglio != null)
                        {
                            // TODO: Da verificare perchè dettaglio.Imponibile è sempre = null
                            decimal? importoImponibile = null;
                            if (dettaglio.ImportoLordo != null && dettaglio.ImportoIva != null)
                                importoImponibile = dettaglio.ImportoLordo - dettaglio.ImportoIva;
                            else if (dettaglio.ImportoLordo != null)
                                importoImponibile = dettaglio.ImportoLordo;
                            if (index == 0)
                            {
                                if (_spesa.AltreSpese != null)
                                {
                                    importoImponibile -= _spesa.AltreSpese.Value;
                                    altreSpese.Text = _spesa.AltreSpese.Value.ToString("c");
                                    altreSpese.Tag = _spesa.AltreSpese.Value;
                                }
                                else
                                {
                                    altreSpese.Text = string.Empty;
                                    altreSpese.Tag = null;
                                }
                                if (_spesa.AltreSpeseEsenti != null)
                                {
                                    altreSpeseEsentiRiepilogo.Text = _spesa.AltreSpeseEsenti.Value.ToString("c");
                                    altreSpeseEsentiRiepilogo.Tag = _spesa.AltreSpeseEsenti.Value;
                                }
                                else
                                {
                                    altreSpeseEsentiRiepilogo.Text = string.Empty;
                                    altreSpeseEsentiRiepilogo.Tag = null;
                                }
                                if (_spesa.CassaProfessionisti != null)
                                {
                                    importoImponibile -= _spesa.CassaProfessionisti.Value;
                                    cassaProfessionisti.Text = _spesa.CassaProfessionisti.Value.ToString("c");
                                    cassaProfessionisti.Tag = _spesa.CassaProfessionisti.Value;
                                }
                                else
                                {
                                    cassaProfessionisti.Text = string.Empty;
                                    cassaProfessionisti.Tag = null;
                                }

                                imponibileRitenuta -= speseEsentiRitenuta.Value;
                                if (_spesa.IsRitenutaCalcoloImponibile)
                                    imponibileRitenuta += _spesa.CassaProfessionisti.GetValueOrDefault();
                            }

                            if (dettaglio.AliquotaIva != null)
                            {
                                var row = tbIva.Rows.Find(Convert.ToDecimal(Decodifica.Instance.GetElement("CodiceIva", dettaglio.AliquotaIva).ValoreNumerico) * 100);
                                if (row == null)
                                {
                                    row = tbIva.NewRow();
                                    row["AliquotaIva"] = Convert.ToDecimal(Decodifica.Instance.GetElement("CodiceIva", dettaglio.AliquotaIva).ValoreNumerico) * 100;
                                    row["ImportoTotale"] = dettaglio.ImportoLordo.GetValueOrDefault();
                                    row["Imponibile"] = importoImponibile.GetValueOrDefault();
                                    if (index == 0 && _spesa.CassaProfessionisti != null)
                                        row["Imponibile"] = (decimal)row["Imponibile"] + _spesa.CassaProfessionisti;
                                    row["ImportoIva"] = dettaglio.ImportoIva.GetValueOrDefault();
                                    tbIva.Rows.Add(row);
                                }
                                else
                                {
                                    row["ImportoTotale"] = (decimal)row["ImportoTotale"] + dettaglio.ImportoLordo.GetValueOrDefault();
                                    row["Imponibile"] = (decimal)row["Imponibile"] + importoImponibile.GetValueOrDefault();
                                    row["ImportoIva"] = (decimal)row["ImportoIva"] + dettaglio.ImportoIva.GetValueOrDefault();
                                }
                            }

                            if (dettaglio.SoggettoRitenutaAcconto != null && dettaglio.SoggettoRitenutaAcconto.Value && imponibile != null)
                                imponibileRitenuta += importoImponibile.Value;

                            if (importoImponibile != null)
                                imponibileDocumento += importoImponibile.Value;

                            index++;
                        }
                    }
                    catch (Exception ex)
                    {
                        _log.WarnFormat("Errore nel caricamento delle scadenze - SINGOLO DETTAGLIO - {0} - dettaglio:{1} - sepsa:{2} - esercizio:{3}", ex, Utility.GetMethodDescription(), dettaglio.ID, _spesa.ID, _esercizio.ID);
                        throw;
                    }
                }

                riepilogoIva.DataSource = tbIva;
                imponibile.Text = imponibileDocumento.ToString("c");
                imponibile.Tag = imponibileDocumento;

                decimal importoRitenuta = 0;
                try
                {
                    if (sceltaFornitore.SelectedFornitore != null)
                        importoRitenuta = Math.Round(imponibileRitenuta * ((decimal?)aliquotaRitenuta.Value).GetValueOrDefault(), 2, MidpointRounding.AwayFromZero);
                }
                catch (Exception ex)
                {
                    var aliquota = "<NULL>";
                    if (aliquotaRitenuta.Value != null)
                        aliquota = aliquotaRitenuta.Value.ToString();
                    _log.ErrorFormat("Calcolo della ritenuta - {0} - aliquota:{1} - spesa:{2} - esercizio:{3}", ex, Utility.GetMethodDescription(), aliquota, _spesa.ID, _esercizio.ID);                    
                    throw;
                }
                ritenutaAcconto.Text = importoRitenuta.ToString("c");
                ritenutaAcconto.Tag = importoRitenuta;
                _spesa.ImportoRitenuta = importoRitenuta;

                if (imponibile.Tag != null && riepilogoIva.DataSource != null)
                {
                    decimal importoPagatoTotale;
                    try
                    {
                        var importoImponibile = imponibile.Tag as decimal?;
                        var totaleDocumento = importoImponibile.GetValueOrDefault();
                        var tb = (DataTable)riepilogoIva.DataSource;
                        var importoIva = tb.Rows.Cast<DataRow>().Sum(row => (decimal)row["ImportoIva"]);
                        ivaTotale.Text = importoIva.ToString("c");
                        totaleDocumento += importoIva;

                        if (cassaProfessionisti.Tag != null)
                            totaleDocumento += (decimal)cassaProfessionisti.Tag;
                        if (altreSpese.Tag != null)
                            totaleDocumento += (decimal)altreSpese.Tag;

                        imponibileTotale.Text = cassaProfessionisti.Tag == null ? importoImponibile.GetValueOrDefault().ToString("c") : (importoImponibile.GetValueOrDefault() + (decimal)cassaProfessionisti.Tag).ToString("c");
                        totaleImporto.Text = totaleDocumento.ToString("c");

                        importoPagatoTotale = totaleDocumento;
                        if (altreSpeseEsentiRiepilogo.Tag != null)
                            importoPagatoTotale += (decimal)altreSpeseEsentiRiepilogo.Tag;
                        if (ritenutaAcconto.Tag != null)
                            importoPagatoTotale -= (decimal)ritenutaAcconto.Tag;
                        importoPagato.Text = importoPagatoTotale.ToString("c");
                        importoPagato.Tag = importoPagatoTotale;

                    }
                    catch (Exception ex)
                    {
                        _log.ErrorFormat("Calcola Importi - {0} - spesa:{1} - esercizio:{2}", ex, Utility.GetMethodDescription(), _spesa.ID, _esercizio.ID);
                        throw;
                    }

                    if (isEditing && dettagliSpesa.ActiveTab != null)
                    {
                        setDettaglioDataSource((DettaglioSpesaDTO)dettagliSpesa.ActiveTab.Tag, null);
                        try
                        {
                            _spesa.ImportoLordo = 0;
                            _spesa.ImportoIva = 0;
                            _spesa.Imponibile = 0;
                            foreach (var dettaglio in _spesa.Dettagli)
                            {
                                if (dettaglio != null)
                                {
                                    _spesa.ImportoLordo += dettaglio.ImportoLordo;
                                    _spesa.ImportoIva += dettaglio.ImportoIva;
                                    _spesa.Imponibile += dettaglio.ImportoLordo - dettaglio.ImportoIva;
                                }
                            }
                        }
                        catch (Exception ex)
                        {
                            _log.ErrorFormat("Elabora dettagli - {0} - spesa:{1} - esercizio:{2}", ex, Utility.GetMethodDescription(), _spesa.ID, _esercizio.ID);
                            throw;
                        }

                        // Aggiorno default scadenze
                        if (_spesa.TipoDocumento != "Nota di accredito" && _isInserimento || (_spesa.Scadenze.Count == 1 && (_spesa.Scadenze[0].StatoScadenza == StatoSpesaEnum.Autorizzata || _spesa.Scadenze[0].StatoScadenza == StatoSpesaEnum.Inserita) && _spesa.Scadenze[0].Importo != importoPagatoTotale))
                        {
                            try
                            {
                                var idScadenza = 0;
                                var version = 0;
                                DateTime? dataScadenza = DateTime.Today;
                                DateTime? dataRitenuta = null;
                                int? idConto = null;
                                int? idSottoConto = null;
                                List<PagamentoDTO> pagamenti = null;

                                if (_spesa.Scadenze.Count == 1)
                                {
                                    idScadenza = _spesa.Scadenze[0].ID;
                                    dataScadenza = _spesa.Scadenze[0].Scadenza;
                                    dataRitenuta = _spesa.Scadenze[0].DataPagamentoRitenuta;
                                    idConto = _spesa.Scadenze[0].IdContoPagamentoScadenza;
                                    idSottoConto = _spesa.Scadenze[0].IdSottoContoPagamentoScadenza;
                                    version = _spesa.Scadenze[0].Version;
                                    pagamenti = _spesa.Scadenze[0].Pagamenti;
                                }
                                _spesa.Scadenze.Clear();
                                var scadenza = new ScadenzaFatturaDTO
                                {
                                    ID = idScadenza,
                                    Version = version,
                                    Stato = "U",
                                    Scadenza = dataScadenza,
                                    IdContoPagamentoScadenza = idConto,
                                    IdSottoContoPagamentoScadenza = idSottoConto,
                                    Importo = importoPagatoTotale,
                                    IdSpesa = _spesa.ID,
                                    StatoScadenza = StatoSpesaEnum.Inserita
                                };
                                scadenza.ImportoRitenuta = _fatturaService.GetImportoRitenuta(_spesa, scadenza.Importo, 0);
                                scadenza.DataPagamentoRitenuta = dataRitenuta;
                                scadenza.Pagamenti = pagamenti;
                                _spesa.Scadenze.Add(scadenza);
                                scadenze.DataBind();
                            }
                            catch (Exception ex)
                            {
                                _log.ErrorFormat("Aggiorna scadenze - {0} - spesa:{1} - esercizio:{2}", ex, Utility.GetMethodDescription(), _spesa.ID, _esercizio.ID);
                                throw;
                             }
                        }
                    }
                }
            }
            catch (Exception ex)
            {
                _log.WarnFormat("Errore nel calcolo degli importi di riepilogo - {0} - spesa:{1} - esercizio:{2}", ex, Utility.GetMethodDescription(), _spesa.ID, _esercizio.ID);
                throw;
            }
        }
Esempio n. 8
0
 private bool isScadenzaPagata(ScadenzaFatturaDTO scadenza)
 {
     if ((scadenza.StatoScadenza != StatoSpesaEnum.Undefined && scadenza.StatoScadenza != StatoSpesaEnum.Inserita && scadenza.StatoScadenza != StatoSpesaEnum.Autorizzata) || (scadenza.Pagamenti != null && scadenza.Pagamenti.Count > 0))
         return true;
     return false;
 }
        private ScadenzaFatturaDTO setScadenzaDto(ScadenzaFattura item)
        {
            var dto = new ScadenzaFatturaDTO
            {
                ID = item.ID,
                IdSpesa = item.SpesaRiferimento.ID,
                Importo = item.Importo,
                ImportoPagato = item.ImportoPagato,
                ImportoRitenuta = item.ImportoRitenuta
            };
            dto.ImportoResiduoRitenuta = Common.ContabilitaHelper.GetImportoRitenuta(item.SpesaRiferimento, dto.Importo.GetValueOrDefault() - dto.ImportoPagato.GetValueOrDefault());
            dto.Scadenza = item.Scadenza;

            dto.DisplayFornitore = item.SpesaRiferimento.FornitoreRiferimento.DisplayName;
            dto.DisplayDataDocumento = item.SpesaRiferimento.DataDocumento;
            dto.DisplayNumeroDocumento = item.SpesaRiferimento.NumeroDocumento;
            dto.DisplayTipoDocumento = item.SpesaRiferimento.TipoDocumento;

            if (item.Pagamenti.Count == 1)
            {
                var pag = IesiGenericCollections<Pagamento>.GetByIndex(item.Pagamenti, 0);
                if (pag.RitenutaAcconto != null && pag.RitenutaAcconto.TestataRiferimento != null && pag.RitenutaAcconto.TestataRiferimento.Data != null)
                    dto.DataPagamentoRitenuta = pag.RitenutaAcconto.TestataRiferimento.Data;
                if (pag.Conto != null)
                    dto.IdContoPagamentoScadenza = pag.Conto.ID;
                if (pag.MovimentoContabile != null)
                {
                    if (pag.MovimentoContabile.SottoContoRiferimento != null)
                        dto.IdSottoContoPagamentoScadenza = pag.MovimentoContabile.SottoContoRiferimento.ID;
                    else if (pag.MovimentoContabile.ContoCorrenteBancario != null)
                        dto.IdSottoContoPagamentoScadenza = pag.MovimentoContabile.ContoCorrenteBancario.ID * -1;
                }
            }

            dto.StatoScadenza = StatoSpesaEnum.Stornata;
            dto.Version = item.Version;

            return dto;
        }