/// <summary> /// Assign new prices to current doclin /// </summary> /// <param name="artPrecos">List or artPrecos previously filtered by NumPreco</param> private void RecalculatePrice(List <AP> artPrecos) { Preco = artPrecos.Where(x => x.Tam == -1 && x.Cor == -1).FirstOrDefault()?.Preco; if (TamsCor != null && TamsCor.Any()) { foreach (IVgDocLinTamCor tamCor in TamsCor) { tamCor.Preco = artPrecos.Where(x => x.Tam == tamCor.Tam && x.Cor == tamCor.Cor).FirstOrDefault()?.Preco; } } }
/// <summary> /// Recalcula valores de linha /// </summary> /// <param name="tipoDoc">TipoDoc relativo ao documento a ser processado</param> public void Recalculate(IVgTipoDoc tipoDoc, List <AP> artPrecos = null) { if (artPrecos != null && artPrecos.Any()) { RecalculatePrice(artPrecos); } if (TamsCor != null && TamsCor.Any()) { // assign artigo from lin to all it's tam cor TamsCor.Select(c => { c.Artigo = Artigo; return(c); }).ToList(); Quantidade = TamsCor.Sum(x => x.Quantidade); Preco = TamsCor.Average(x => (x.Preco == null ? 0 : x.Preco)); //* x.Quantidade if (Quantidade > 0) { Peso = TamsCor.Sum(x => (x.Peso == null ? 0 : x.Peso) * x.Quantidade) / Quantidade; } else { Peso = 0; } } // calculo de valor bruto para não estar sempre a calcular o mesmo double?valBruto = Quantidade * Preco; ValMercadoria = valBruto; if (tipoDoc.TemIVA == true) { ValMercadoria = valBruto / (1 + (TaxIVA / 100)); } ValDesconto = getValDesconto(ValMercadoria, Desconto); ValSujeito = ValMercadoria - ValDesconto; // Calculo do valor do IVA ValIVA = (TaxIVA / 100) * ValSujeito; // arredondar a casas decimais ValMercadoria = Math.Round((double)ValMercadoria, 2); ValDesconto = Math.Round((double)ValDesconto, 2); ValSujeito = Math.Round((double)ValSujeito, 2); ValIVA = Math.Round((double)ValIVA, 2); // calculo de valor total ValTotal = ValSujeito + ValIVA; ValTotal = Math.Round((double)ValTotal, 2); }