public DtoOrder CheckOrder(DtoOrder order) { try { EnsureArg.IsNotNull(order, nameof(order)); } catch (Exception ex) { throw new BadRequest(ex); } if (order.Id == 0) { OrderQueries.Create(ref order); } if (order.AddressToShip == null) { order.AddressToShip = order.Client?.Addresses?.FirstOrDefault(); OrderQueries.Update(ref order); } if (order.RequestedStores == null) { order.RequestedStores = StoreDomain.GetNearStore(order.AddressToShip); } if (order.SkusRequesteds?.Count() > 0) { foreach (var sku in order.SkusRequesteds) { sku.ProductReference = ProductDomain.GetProductBySku(sku.Id); } } return(order); // TODO Delivery //if (order.AddressToShip != null && order.RequestedStores?.Count() > 0) //{ // foreach (var store in order.RequestedStores) // { // var clientLocation = new GeoCoordinate(order.AddressToShip.Latitude.Value, order.AddressToShip.Longitude.Value); // var storeLocation = new GeoCoordinate(store.Address.Latitude.Value, store.Address.Longitude.Value); // store.Proximity = clientLocation.GetDistanceTo(storeLocation); // if (store.AvaibleDeliveries?.Count > 0) // { // var maxdistance = store.AvaibleDeliveries.Max(i => i.MaxDistance); // var safeDelivery = store.AvaibleDeliveries.Where(i => i.MaxDistance == maxdistance).FirstOrDefault(); // var removeDeliverys = new List<DtoDelivery>(); // foreach (var delivery in store.AvaibleDeliveries) // { // if (store.Proximity > delivery.MaxDistance) // removeDeliverys.Add(delivery); // } // var deliveryMethod = store.AvaibleDeliveries // .Where(i => !removeDeliverys.Contains(i)) // .OrderBy(i => i.MaxDistance).FirstOrDefault(); // if (deliveryMethod == null) // store.Delivery = safeDelivery; // else // store.Delivery = deliveryMethod; // } // } //} }