public async Task <ActionResult> Create([FromBody] SaveDeliveryRequest entity) { try { RemoveZeroLineItems(entity); var delivery = mapper.Map <Delivery>(entity); await context.Deliveries.AddAsync(delivery); // Update the order line item for quantity returned await orderService.ProcessDeliveries(delivery.LineItems, AdjustmentType.Add); await context.SaveChangesAsync(); return(StatusCode(StatusCodes.Status201Created)); } catch (QuantityDeliveredException dEx) { logger.LogError(dEx.Message); ModelState.AddModelError(Constants.ErrorMessage, dEx.Message); return(BadRequest(ModelState)); } catch (Exception e) { logger.LogError(e.Message); return(StatusCode(StatusCodes.Status500InternalServerError)); } }
public async Task <ActionResult> Update(long id, [FromBody] SaveDeliveryRequest entity) { try { var delivery = await context.Deliveries .Include(c => c.LineItems) .AsNoTracking() .SingleOrDefaultAsync(a => a.Id == id); if (delivery == null) { return(NotFound()); } // Process the deliveries await orderService.ProcessDeliveries(delivery.LineItems, AdjustmentType.Deduct); await orderService.ProcessDeliveries(entity.LineItems, AdjustmentType.Add); // Process deleted line items RemoveZeroLineItems(entity); entityListHelpers.CheckItemsForDeletion(delivery.LineItems, entity.LineItems); delivery = mapper.Map <Delivery>(entity); context.Update(delivery); await context.SaveChangesAsync(); return(StatusCode(StatusCodes.Status204NoContent)); } catch (QuantityDeliveredException dEx) { logger.LogError(dEx.Message); ModelState.AddModelError(Constants.ErrorMessage, dEx.Message); return(BadRequest(ModelState)); } catch (DbUpdateConcurrencyException concurrencyEx) { logger.LogError(concurrencyEx.Message); return(StatusCode(StatusCodes.Status409Conflict, Constants.ErrorMessages.ConcurrencyErrorMessage)); } catch (Exception ex) { logger.LogError(ex.Message); return(StatusCode(StatusCodes.Status500InternalServerError)); } }
private SaveDeliveryRequest RemoveZeroLineItems(SaveDeliveryRequest request) { request.LineItems = request.LineItems.Where(a => a.Quantity != 0); return(request); }