public static void RecalculaParc(TList_PreVenda_DT_Vencto lParc, TRegistro_PreVenda val, int index) { if (lParc != null) { if (lParc.Sum(p => p.Vl_parcela) != (val.Vl_prevenda - val.Vl_devcred)) { decimal vl_parc = val.Vl_prevenda - val.Vl_devcred - lParc.Sum(p => p.Vl_parcela); decimal nParcelas = (lParc.Count - (index + 1)); if (nParcelas.Equals(0)) { nParcelas = 1; } vl_parc = (vl_parc / nParcelas); for (int i = ++index; i < lParc.Count; i++) { lParc[i].Vl_parcela += vl_parc; } lParc[lParc.Count - 1].Vl_parcela += val.Vl_prevenda - val.Vl_devcred - lParc.Sum(p => p.Vl_parcela); //Recalcular Parcelas se valor informado for maior que valor a faturar decimal somaParcAnt = SomaParcelasAnt(lParc, index); if ((somaParcAnt) > val.Vl_prevenda - val.Vl_devcred) { lParc[index - 1].Vl_parcela = (val.Vl_prevenda - val.Vl_devcred - (somaParcAnt - lParc[index - 1].Vl_parcela) - nParcelas); for (int i = index; i < lParc.Count; i++) { lParc[i].Vl_parcela = 1; } } } } }
public static TList_PreVenda_DT_Vencto ReCalcula_VlParcela(TRegistro_PreVenda val, bool St_calcular) { //Recalcular vl.parcela quando for faturar prevenda com duplicata TList_PreVenda_DT_Vencto retorno = new TList_PreVenda_DT_Vencto(); if (((val.Vl_prevenda - val.Vl_devcred) > 0) && (!string.IsNullOrEmpty(val.Cd_condPgto)) && (val.QTD_Parcelas > 0) && (St_calcular)) { decimal vl_parcela = Math.Round((val.Vl_prevenda - val.Vl_devcred) / val.QTD_Parcelas, 2); int cont = 1; val.DT_Vencto.ForEach(p => { retorno.Add(new CamadaDados.Faturamento.PDV.TRegistro_PreVenda_DT_Vencto() { DiasVencto = p.DiasVencto, Vl_parcela = vl_parcela, id_parcela = cont++ }); }); if (retorno.Count > 0) { retorno[retorno.Count - 1].Vl_parcela += val.Vl_prevenda - val.Vl_devcred - retorno.Sum(p => p.Vl_parcela); } } return(retorno); }