/// <summary> /// Save Order Details. /// </summary> /// <param name="orderDetailViewModel"></param> /// <param name="cartItemList"></param> /// <param name="userDetail"></param> /// <returns></returns> public IResult SaveOrderDetails(OrderDetailViewModel orderDetailViewModel, List <CartItemViewModel> cartItemList, UserDetailForOrder userDetail) { orderDetailViewModel.OrderId = null; var result = new Result { Operation = Operation.Create, Status = Status.Success }; try { OrderDetail orderDetail = null; if (orderDetailViewModel != null) { orderDetail = new OrderDetail(); orderDetail.MapFromViewModel(orderDetailViewModel); if (userDetail != null) { orderDetail.UserId = ObjectId.Parse(userDetail.UserId); orderDetail.AddressId = ObjectId.Parse(userDetail.AddressId); } else { result.Message = UserNotification.NoUser; } orderDetail.CartItems = new List <CartItem>(); _orderDetailRepository.InsertOne(orderDetail); if (cartItemList != null && cartItemList.Any()) { var cartItems = new List <CartItem>(); cartItemList.ForEach(x => { var cartItem = new CartItem(); cartItem.MapFromViewModel(x); cartItems.Add(cartItem); }); var updateDefinition = Builders <OrderDetail> .Update.AddToSetEach(x => x.CartItems, cartItems); _orderDetailRepository.UpdateOne(t => t.OrderId == orderDetail.OrderId, updateDefinition); } else { result.Message = OrderNotification.NoCartItems; } orderDetailViewModel.MapFromModel(orderDetail); orderDetailViewModel.cartItems = cartItemList; result.Body = orderDetailViewModel; result.Message = OrderNotification.Saved; } else { result.Message = OrderNotification.OrderDetailsNotProvided; } } catch (Exception e) { result.Message = e.Message; result.Status = Status.Fail; } return(result); }