/// <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);
        }
Пример #2
0
        /// <summary>
        /// Save User Details
        /// </summary>
        /// <param name="userViewModel"></param>
        /// <param name="userAddressViewModel"></param>
        /// <returns></returns>
        public IResult SaveUserDetails(UserViewModel userViewModel, UserAddressViewModel userAddressViewModel)
        {
            userViewModel.UserId = null;
            var result = new Result
            {
                Operation = Operation.Create,
                Status    = Status.Success
            };

            try
            {
                UserDetailForOrder userDetail = null;
                User        user        = null;
                UserAddress userAddress = null;
                if (userViewModel != null)
                {
                    user = _userRepository.GetOne(x => x.MailId.Equals(userViewModel.MailId) || x.MobNo.Equals(userViewModel.MobNo));
                    if (user == null)
                    {
                        user = new User();
                        user.MapFromViewModel(userViewModel);
                        user.UserAddress = new List <UserAddress>();
                        _userRepository.InsertOne(user);
                    }
                    else
                    {
                        var updateDefinition = Builders <User> .Update
                                               .Set(x => x.Name, userViewModel.Name)
                                               .Set(x => x.MobNo, userViewModel.MobNo)
                                               .Set(x => x.MailId, userViewModel.MailId);

                        _userRepository.UpdateOne(t => t.UserId == user.UserId, updateDefinition);
                    }

                    userDetail.UserId = user.UserId.ToString();
                    userDetail.MailId = user.MailId;
                    userDetail.MobNo  = user.MobNo;


                    if (userAddressViewModel != null)
                    {
                        if (string.IsNullOrEmpty(userAddressViewModel.AddressId))
                        {
                            userAddress = new UserAddress();
                            userAddress.MapFromViewModel(userAddressViewModel);
                            userAddress.AddressId = ObjectId.GenerateNewId();
                            userDetail.AddressId  = userAddress.AddressId.ToString();
                            var updateDefinition = Builders <User> .Update.AddToSet(x => x.UserAddress, userAddress);

                            _userRepository.UpdateOne(t => t.UserId == user.UserId, updateDefinition);
                        }
                        else
                        {
                            userDetail.AddressId = userAddressViewModel.AddressId.ToString();
                        }
                    }
                    result.Body    = userDetail;
                    result.Message = UserNotification.Saved;
                }
                else
                {
                    result.Message = UserNotification.UserDetailsNotProvided;
                }
            }
            catch (Exception e)
            {
                result.Message = e.Message;
                result.Status  = Status.Fail;
            }
            return(result);
        }