public IActionResult UpdateOrder([FromBody] OrderDto orderDto) { try { var order = _mapper.Map <Order>(orderDto); if (order == null || orderDto.ProductsId == null) { throw new AppException("Неверный данные!"); } //order.Date = TimeZoneInfo.ConvertTimeBySystemTimeZoneId(DateTime.Parse(orderDto.Date.ToString()), "Pacific Standard Time", "UTC"); var userId = Convert.ToInt32(User.Claims.SingleOrDefault(c => c.Type == ClaimTypes.NameIdentifier)?.Value); if (order.UserId != userId) { throw new AppException("Вам нельзя обновить услугу!"); } OrderPrepayment op = null; _logger.LogInformation($"User #{userId}, UpdateOrder #{order.Id}"); if (orderDto.Prepay != 0) { op = new OrderPrepayment { Total = orderDto.Prepay, Date = orderDto.DatePrepay//TimeZoneInfo.ConvertTimeBySystemTimeZoneId(DateTime.Parse(orderDto.DatePrepay.ToString()), "Pacific Standard Time", "UTC") }; //order.Prepayment = op; } if (order.DiscountId == 0) { order.DiscountId = null; } _orderService.Update(order, op, orderDto.ProductsId); return(Ok(new { Message = "Заказ обновлен!" })); } catch (AppException ex) { return(BadRequest(ex.Message)); } catch (Exception ex) { _logger.LogCritical($"{ex}"); return(BadRequest("Service error!")); } }
/// <summary> /// Updating Order data /// </summary> /// <param name="order">Order</param> public void Update(Order order, OrderPrepayment op, IList <int> productsId) { //_repositoryPrepayment = _unitOfWork.EfRepository<OrderPrepayment>(); _repository.Update(order); var toUpdate = _repository.Query(o => o.Id == order.Id) .Include(p => p.Prepayment) .Include(oi => oi.Items) .ThenInclude(i => i.ProductInfo) .SingleOrDefault(); var newItems = new List <OrderItem>(); //var duplicate = toUpdate.Items.Select(i => i.Id).Intersect(productsId); //var haveItems = toUpdate.Items.Where(oi => productsId.Contains(oi.Id)); //var haveNot = haveItems.Select(oi => !productsId.Contains(oi.Id)); //foreach (var item in toUpdate.Items) //{ // if (duplicate.Contains(item.Id)) // continue; // else // toUpdate.Items //} foreach (var id in productsId) { //if(toUpdate.Items.cou) newItems.Add(new OrderItem { ProductId = id }); } toUpdate.Items = newItems; //var prepayment = _repositoryPrepayment.Find(p=>p.OrderId == order.Id); if (toUpdate.Prepayment == null) { toUpdate.Prepayment = op; //_repositoryPrepayment.Add(op); } else { toUpdate.Prepayment.Total = op.Total; toUpdate.Prepayment.Date = op.Date; } _repository.Save(); }