public async Task <ValueDeadlineFreight> CalculateFreight(string cepDestiny, string typeFreight, List <Package> packages) { List <ValueDeadlineFreight> valueOfPackages = new List <ValueDeadlineFreight>(); foreach (var package in packages) { var result = await CalculateValueDeadLineFreight(cepDestiny, typeFreight, package); if (result != null) { valueOfPackages.Add(result); } } if (valueOfPackages.Count > 0) { ValueDeadlineFreight valuesOfFreights = valueOfPackages.GroupBy(a => a.TypeFreight).Select(list => new ValueDeadlineFreight { TypeFreight = list.First().TypeFreight, ServiceCode = list.First().ServiceCode, Deadline = list.Max(c => c.Deadline), Value = list.Sum(c => c.Value) }).ToList().First(); return(valuesOfFreights); } return(null); }
public async Task <IActionResult> CalculateFreight(int cepDestiny) { try { //Verify if exists at freight the calculate for same CEP and products Freight freight = _cookieFreight.Consult().Where(a => a.CEP == cepDestiny && a.ShoppingCartCode == GenerateHashAndSerialize(_cookieShoppingCart.Consult())).FirstOrDefault(); if (freight != null) { return(Ok(freight)); } else { List <ProductItem> products = LoadProductDb(); List <Package> packages = _calculatePackage.CalculatingPackage(products); ValueDeadlineFreight valuesPAC = await _wSCorreiosCalculateFreight.CalculateFreight(cepDestiny.ToString(), TypeFreightConstant.PAC, packages); ValueDeadlineFreight valuesSEDEX = await _wSCorreiosCalculateFreight.CalculateFreight(cepDestiny.ToString(), TypeFreightConstant.SEDEX, packages); ValueDeadlineFreight valuesSEDEX10 = await _wSCorreiosCalculateFreight.CalculateFreight(cepDestiny.ToString(), TypeFreightConstant.SEDEX10, packages); List <ValueDeadlineFreight> list = new List <ValueDeadlineFreight>(); if (valuesPAC != null) { list.Add(valuesPAC); } if (valuesSEDEX != null) { list.Add(valuesSEDEX); } if (valuesSEDEX10 != null) { list.Add(valuesSEDEX10); } freight = new Freight() { CEP = cepDestiny, ShoppingCartCode = GenerateHashAndSerialize(_cookieShoppingCart.Consult()), ListValues = list }; _cookieFreight.Register(freight); return(Ok(freight)); } } catch (Exception e) { return(BadRequest(e)); } }