public Task <ActionResult <OrderGroup> > Patch(int id, [FromBody] OrderGroupsUpdateRequest request)
 {
     if (request != null && request.DplNote != null && _authData.GetUserRole() == UserRole.DplEmployee)
     {
         request.DplNote.UserId = _authData.GetUserId();
     }
     return(this._orderGroupsService.Update(id, request).Convert(this));
 }
Exemplo n.º 2
0
 public static bool CheckUpdatedProperties(this OrderGroupsUpdateRequest request, Olma.Order order)
 {
     if (order.LoadCarrierId != request.LoadCarrierId ||
         order.LoadingLocationId != request.LoadingLocationId ||
         order.LatestFulfillmentDateTime != request.LatestFulfillmentDateTime ||
         order.EarliestFulfillmentDateTime != request.EarliestFulfillmentDateTime ||
         order.BaseLoadCarrierId != request.BaseLoadCarrierId ||
         order.QuantityType != request.QuantityType ||
         order.StackHeightMax != request.StackHeightMax ||
         order.StackHeightMin != request.StackHeightMin ||
         order.SupportsJumboVehicles != request.SupportsJumboVehicles ||
         order.SupportsRearLoading != request.SupportsRearLoading ||
         order.SupportsSideLoading != request.SupportsSideLoading)
     {
         return(true);
     }
     return(false);
 }
        public async Task <IWrappedResponse <OrderGroup> > Update(int id, OrderGroupsUpdateRequest request)
        {
            #region security

            // TODO add security

            #endregion

            var orderGroup = _olmaOrderGroupRepo.FindByCondition(og => og.Id == id)
                             .Include(o => o.Orders).ThenInclude((i => i.DplNotes))
                             .FirstOrDefault();

            if (orderGroup == null || orderGroup.Orders.Count == 0)
            {
                return new WrappedResponse <OrderGroup>
                       {
                           ResultType = ResultType.NotFound,
                           Data       = null,
                           Errors     = new[] { "Orders not found" }
                       }
            }
            ;

            var openedOrders = orderGroup.Orders
                               .Where(o => o.Status == OrderStatus.Pending)
                               .ToList();

            if (openedOrders.Count > 0 &&
                openedOrders.Count != orderGroup.Orders.Count &&
                request.CheckUpdatedProperties(orderGroup.Orders.First()))
            {
                Olma.OrderGroup newOrderGroup = Mapper.Map <OrderGroupsUpdateRequest, Olma.OrderGroup>(request);

                _olmaOrderGroupRepo.Create(newOrderGroup);

                foreach (var order in openedOrders)
                {
                    Mapper.Map(request, order);
                    order.Group = newOrderGroup;
                }

                _olmaOrderGroupRepo.Save();

                var newOrderGroupData = Mapper.Map <Olma.OrderGroup, OrderGroup>(newOrderGroup);

                return(new WrappedResponse <OrderGroup>
                {
                    ResultType = ResultType.Updated,
                    Data = newOrderGroupData
                });
            }

            var  numberOfOrders = orderGroup.Orders.Count;
            bool updated        = false;
            if (orderGroup.Orders.Count < request.NumberOfLoads)
            {
                for (int i = 0; i < request.NumberOfLoads - numberOfOrders; i++)
                {
                    orderGroup.Orders.Add(Mapper.Map <OrderGroupsUpdateRequest, Olma.Order>(request));
                }

                updated = true;
            }
            else
            {
                if (numberOfOrders > request.NumberOfLoads &&
                    numberOfOrders - request.NumberOfLoads <= openedOrders.Count)
                {
                    var ordersToDelete = orderGroup.Orders.Where(o => o.Status == OrderStatus.Pending)
                                         .Take(orderGroup.Orders.Count - request.NumberOfLoads);
                    foreach (var order in ordersToDelete)
                    {
                        orderGroup.Orders.Remove(order);
                    }

                    updated = true;
                }
            }

            if (request.CheckUpdatedProperties(orderGroup.Orders.First()))
            {
                Mapper.Map(request, orderGroup);

                foreach (var order in orderGroup.Orders)
                {
                    Mapper.Map(request, order);
                }

                updated = true;
            }

            if (!updated)
            {
                return(new WrappedResponse <OrderGroup>
                {
                    ResultType = ResultType.BadRequest,
                    Data = null,
                    Errors = new[] { string.Empty }
                });
            }

            var result = Mapper.Map <Olma.OrderGroup, OrderGroup>(orderGroup);

            return(new WrappedResponse <OrderGroup>
            {
                ResultType = ResultType.Updated,
                Data = result
            });
        }