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; } } }
private static void CalcularTaxasEntrada(TRegistro_EstDeposito rEstDeposito, TRegistro_CadContratoTaxaDeposito rTaxa, TRegistro_CadContrato vContrato, TRegistro_MovDeposito vMovDep, TList_SaldoCarenciaTaxa lSaldoCarencia, TObjetoBanco banco) { //Converter quantidade que esta entradando para unidade da taxa decimal QTD_Convertida = TCN_CadConvUnidade.ConvertUnid(rEstDeposito.CD_Unidade, rTaxa.Cd_unidadetaxa, rEstDeposito.QTD_Entrada, 3, banco); decimal?vID_LanTaxa = null; //se for uma taxa que somente sera cobrada com classificacao limitada por faixa if (!string.IsNullOrEmpty(rTaxa.Cd_tipoamostra)) { //se for um lancto por balanca/aplicacao testar os limites de classificacao para taxar ou nao if ((rEstDeposito.ID_Ticket > 0) && (!string.IsNullOrEmpty(rEstDeposito.CD_Empresa))) { rEstDeposito.Classif.ForEach(x => { if (rTaxa.Cd_tipoamostra.Trim().Equals(x.Cd_tipoamostra)) { if ((x.Pc_resultado_local >= rTaxa.Pc_result_maiorque) && (x.Pc_resultado_local <= rTaxa.Pc_result_menorque)) { if ((rTaxa.St_gerartxsomente.Trim().ToUpper().Equals("R") ? "E" : "S").Equals(rEstDeposito.Tp_Movimento.Trim().ToUpper())) { 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 = decimal.Zero, 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(QTD_Convertida * rTaxa.Valortaxa / 100, 0) : 0), Vl_Taxa = (rTaxa.Tp_taxa.Trim().ToUpper().Equals("V") ? QTD_Convertida * rTaxa.Valortaxa : 0), Tp_Lancto = "A", D_c = "D" }, banco), "@P_ID_LANTAXA")); } } } }); } } else { if ((rTaxa.St_gerartxsomente.Trim().ToUpper().Equals("R") ? "E" : "S").Equals(rEstDeposito.Tp_Movimento.Trim().ToUpper())) { 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(QTD_Convertida * rTaxa.Valortaxa / 100, 0) : 0), Vl_Taxa = (rTaxa.Tp_taxa.Trim().ToUpper().Equals("V") ? QTD_Convertida * rTaxa.Valortaxa : 0), Tp_Lancto = "A", D_c = "D" }, banco), "@P_ID_LANTAXA")); } } if (!lSaldoCarencia.Exists(q => q.Id_Taxa.Equals(rTaxa.Id_taxa.Value) && q.Id_Movto.Equals(vMovDep.Id_Movto))) { lSaldoCarencia.Add(new TRegistro_SaldoCarenciaTaxa() { Id_Taxa = rTaxa.Id_taxa.Value, Id_Movto = vMovDep.Id_Movto, Id_LanTaxa = vID_LanTaxa, QTD_Lancto = rEstDeposito.QTD_Entrada, DT_Saldo = rEstDeposito.DT_Lancto, ST_Carencia = "N" }); } else if (vID_LanTaxa != null) { if (lSaldoCarencia.Exists(q => q.Id_Taxa.Equals(rTaxa.Id_taxa.Value) && q.Id_Movto.Equals(vMovDep.Id_Movto) && (q.Id_LanTaxa == null))) { lSaldoCarencia.Find(q => q.Id_Taxa.Equals(rTaxa.Id_taxa.Value) && q.Id_Movto.Equals(vMovDep.Id_Movto) && (q.Id_LanTaxa == null)).Id_LanTaxa = vID_LanTaxa; } } }