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); }
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; } } }