Example #1
0
        public static TList_TaxaDeposito CalcularTaxasExpedicaoPendentes(string Cd_empresa,
                                                                         string Nr_contrato,
                                                                         string Cd_produto,
                                                                         DateTime Dt_calctaxa,
                                                                         string Id_taxa)
        {
            //Buscar lista de taxas de expedicao configurada para o contrato
            TList_CadContratoTaxaDeposito lTaxasContrato = new TCD_CadContratoTaxaDeposito().Select(
                new TpBusca[]
            {
                new TpBusca()
                {
                    vNM_Campo = "a.nr_contrato",
                    vOperador = "=",
                    vVL_Busca = Nr_contrato
                },
                new TpBusca()
                {
                    vNM_Campo = "a.st_gerartxsomente",
                    vOperador = "=",
                    vVL_Busca = "'E'"
                },
                new TpBusca()
                {
                    vNM_Campo = "a.id_taxa",
                    vOperador = "=",
                    vVL_Busca = string.IsNullOrEmpty(Id_taxa) ? "a.id_taxa" : Id_taxa
                }
            }, 0, string.Empty);
            TList_TaxaDeposito lTaxaDeposito = new TList_TaxaDeposito();

            lTaxasContrato.ForEach(p =>
            {
                //Para cada taxa buscar saldo carencia
                List <TRegistro_ViewSaldoCarencia> SaldoCarencia =
                    new TCD_SaldoCarenciaTaxa().BuscarSaldoCarencia(Cd_empresa,
                                                                    p.Id_taxastr,
                                                                    p.Nr_contratostr,
                                                                    Cd_produto);
                decimal tmpTotDiasExpirado = decimal.Zero;
                SaldoCarencia.ForEach(v =>
                {
                    tmpTotDiasExpirado = Dt_calctaxa.Subtract(v.DT_Saldo.Date).Subtract(TimeSpan.FromDays(Convert.ToDouble(p.Periodocarencia.ToString()))).Days;
                    if (tmpTotDiasExpirado > 0)
                    {
                        //Buscar unidade do estoque
                        object obj = new CamadaDados.Estoque.Cadastros.TCD_CadProduto().BuscarEscalar(
                            new TpBusca[]
                        {
                            new TpBusca()
                            {
                                vNM_Campo = "a.cd_produto",
                                vOperador = "=",
                                vVL_Busca = "'" + Cd_produto.Trim() + "'"
                            }
                        }, "a.cd_unidade");
                        if (obj == null)
                        {
                            throw new Exception("Produto " + Cd_produto.Trim() + " sem unidade cadastrada.");
                        }
                        decimal QTD_Convertida = TCN_CadConvUnidade.ConvertUnid(obj.ToString(), p.Cd_unidadetaxa, v.Tot_Saldo, 3, null);
                        decimal m = ((tmpTotDiasExpirado % p.Frequencia) > 0 ? 1 : 0);
                        decimal t = (Math.Floor(tmpTotDiasExpirado / p.Frequencia) + m);
                        decimal k = (p.Frequencia > 0 ? t : 1);

                        lTaxaDeposito.Add(new TRegistro_TaxaDeposito()
                        {
                            Id_LanTaxa    = 0,
                            Nr_Contrato   = p.Nr_contrato.Value,
                            Cd_produto    = Cd_produto,
                            Id_Reg        = p.Id_reg,
                            Id_Taxa       = p.Id_taxa.Value,
                            Ds_taxa       = p.Ds_taxa,
                            Sigla_produto = p.Sg_unidadetaxa,
                            DT_Lancto     = v.DT_Saldo,
                            Ps_Taxa       = (p.Tp_taxa.Trim().ToUpper().Equals("P") ? Math.Round(v.Tot_Saldo * p.Valortaxa * k / 100, 0) : 0),
                            Vl_Taxa       = (p.Tp_taxa.Trim().ToUpper().Equals("V") ? QTD_Convertida * p.Valortaxa * k : 0),
                            Tp_Lancto     = "A",
                            D_c           = "D"
                        });
                    }
                });
            });
            List <TRegistro_TaxaDeposito> lTaxa = lTaxaDeposito.OrderBy(p => p.DT_Lancto).ToList();

            lTaxaDeposito.Clear();
            lTaxa.ForEach(p => lTaxaDeposito.Add(p));
            return(lTaxaDeposito);
        }
Example #2
0
        private static void CalcularTaxasExpedicao(TRegistro_EstDeposito rEstDeposito,
                                                   TRegistro_CadContratoTaxaDeposito rTaxa,
                                                   TRegistro_CadContrato vContrato,
                                                   TRegistro_MovDeposito vMovDep,
                                                   TList_SaldoCarenciaTaxa lSaldoCarencia,
                                                   TObjetoBanco banco)
        {
            decimal?vID_LanTaxa = null;
            List <TRegistro_ViewSaldoCarencia> SaldoCarencia =
                new TCD_SaldoCarenciaTaxa(banco).BuscarSaldoCarencia(vMovDep.CD_Empresa,
                                                                     rTaxa.Id_taxastr,
                                                                     rTaxa.Nr_contratostr,
                                                                     vMovDep.CD_Produto);

            decimal tmpSaldoExp        = rEstDeposito.QTD_Saida;
            decimal tmpSaldoLan        = decimal.Zero;
            decimal tmpTotDiasExpirado = decimal.Zero;

            foreach (TRegistro_ViewSaldoCarencia rSaldoCarencia in SaldoCarencia)
            {
                if (tmpSaldoExp > 0)
                {
                    if (rSaldoCarencia.Tot_Saldo >= tmpSaldoExp)
                    {
                        tmpSaldoLan = tmpSaldoExp;
                    }
                    else
                    {
                        tmpSaldoLan = rSaldoCarencia.Tot_Saldo;
                    }
                    tmpTotDiasExpirado = rEstDeposito.DT_Lancto.Subtract(rSaldoCarencia.DT_Saldo.Date).Subtract(TimeSpan.FromDays(Convert.ToDouble(rTaxa.Periodocarencia.ToString()))).Days;

                    decimal QTD_Convertida = TCN_CadConvUnidade.ConvertUnid(rEstDeposito.CD_Unidade, rTaxa.Cd_unidadetaxa, tmpSaldoLan, 3, banco);
                    if ((tmpTotDiasExpirado > 0) && (rTaxa.St_gerartxsomente.Trim().ToUpper().Equals("R") ? "E" : "S").Equals(rEstDeposito.Tp_Movimento.Trim().ToUpper()))
                    {
                        decimal m = ((tmpTotDiasExpirado % rTaxa.Frequencia) > 0 ? 1 : 0);
                        decimal t = (Math.Floor(tmpTotDiasExpirado / rTaxa.Frequencia) + m);
                        decimal k = (rTaxa.Frequencia > 0 ? t : 1);

                        vID_LanTaxa = Convert.ToDecimal(CamadaDados.TDataQuery.getPubVariavel(
                                                            TCN_LanTaxas_Deposito.Gravar(new TRegistro_TaxaDeposito()
                        {
                            Cd_empresa  = rEstDeposito.CD_Empresa,
                            Id_ticket   = rEstDeposito.ID_Ticket,
                            Tp_pesagem  = rEstDeposito.Tp_Pesagem,
                            Id_LanTaxa  = 0,
                            Nr_Contrato = rTaxa.Nr_contrato.Value,
                            Cd_produto  = vContrato.Cd_produto,
                            Id_Reg      = rTaxa.Id_reg,
                            Id_Taxa     = rTaxa.Id_taxa.Value,
                            DT_Lancto   = rEstDeposito.DT_Lancto,
                            Ps_Taxa     = (rTaxa.Tp_taxa.Trim().ToUpper().Equals("P") ? Math.Round(tmpSaldoLan * rTaxa.Valortaxa * k / 100, 0) : 0),
                            Vl_Taxa     = (rTaxa.Tp_taxa.Trim().ToUpper().Equals("V") ? QTD_Convertida * rTaxa.Valortaxa * k : 0),
                            Tp_Lancto   = "A",
                            D_c         = "D"
                        }, banco), "@P_ID_LANTAXA"));
                    }
                    //Controlar saldo
                    tmpSaldoExp -= tmpSaldoLan;
                    rSaldoCarencia.Tot_Saldo -= tmpSaldoLan;
                    lSaldoCarencia.Add(new TRegistro_SaldoCarenciaTaxa()
                    {
                        Id_Taxa     = rTaxa.Id_taxa.Value,
                        Id_Movto    = vMovDep.Id_Movto,
                        Id_LanTaxa  = vID_LanTaxa,
                        QTD_Lancto  = tmpSaldoLan,
                        DT_Saldo    = rSaldoCarencia.DT_Saldo,
                        ST_Carencia = "N"
                    });
                    vID_LanTaxa = null;
                }
                else
                {
                    break;
                }
            }
        }