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