public async Task <Dal.Entities.Delivery> UpdateDelivery(Dal.Entities.Delivery delivery) { var currentDelivery = await GetDeliveryById(delivery.Id); if (currentDelivery.DeliveryStatus != DeliveryStatus.Pending) { throw new ServiceException(new ErrorMessage[] { new ErrorMessage() { Message = "Unable update the delivery" } }); } var mapper = ServiceMapper.GetMapper(); mapper.Map(delivery, currentDelivery); currentDelivery.DeliveryDate = delivery.DeliveryDate.Date; currentDelivery.Updated = DateTimeOffset.UtcNow; await _unitOfWork.SaveChanges(); return(currentDelivery); }
public async Task <Dal.Entities.Delivery> CreateDelivery(Dal.Entities.Delivery delivery) { delivery.DeliveryStatus = DeliveryStatus.Pending; delivery.Created = DateTimeOffset.UtcNow; delivery.DeliveryDate = delivery.DeliveryDate.Date; _unitOfWork.DeliveryRepository.Insert(delivery); await _unitOfWork.SaveChanges(); return(delivery); }
public async Task <Dal.Entities.Delivery> MapDeliveryProduct(Dal.Entities.Delivery delivery) { var currentDelivery = await GetDeliveryById(delivery.Id); var updatedDeliveryTrackingItems = delivery.DeliveryTrackings.SelectMany(t => t.DeliveryTrackingItems).ToList(); foreach (var currentDeliveryDeliveryItem in currentDelivery.DeliveryItems) { if (currentDeliveryDeliveryItem.Quantity != updatedDeliveryTrackingItems.Where(i => i.ProductId == currentDeliveryDeliveryItem.ProductId) .Sum(i => i.Quantity)) { var product = await _productService.GetProductById(currentDeliveryDeliveryItem.ProductId); throw new ServiceException(new ErrorMessage[] { new ErrorMessage() { Message = $"{product.Name} quantity is invalid for mapping products to tracking numbers" } }); } } currentDelivery.DeliveryTrackings.SelectMany(t => t.DeliveryTrackingItems).ToList() .ForEach(deliveryTrackingItem => { var updatedDeliveryTrackingItem = updatedDeliveryTrackingItems.FirstOrDefault(i => i.Id == deliveryTrackingItem.Id); if (updatedDeliveryTrackingItem != null) { deliveryTrackingItem.Quantity = updatedDeliveryTrackingItem.Quantity; } }); await _unitOfWork.SaveChanges(); return(currentDelivery); }