Beispiel #1
0
        // GET: UserAddress
        public async Task <ActionResult> Index()
        {
            var address = await _userAddress.GetAddressAsync(User.Identity.GetUserId());

            if (address == null)
            {
                UserAddressViewModel addressNotGiven = new UserAddressViewModel
                {
                    IsAddressGiven = false
                };
                return(View(addressNotGiven));
            }

            UserAddressViewModel addressGiven = new UserAddressViewModel
            {
                IsAddressGiven = true,
                Address1       = address.Address1,
                Address2       = address.Address2,
                City           = address.City,
                ZipCode        = address.ZipCode,
                State          = address.State,
                Country        = address.Country
            };

            return(View(addressGiven));
        }
Beispiel #2
0
        public IActionResult OnGetLoadDefaultAddress()
        {
            //var useraddress = _userAddressRepository.GetByUserId(_userManager.GetUserAsync(HttpContext.User).Result.Id);
            var address = _addressRepository.GetSome(x => x.CustomerId == _userManager.GetUserAsync(HttpContext.User).Result.Id&& x.IsDeleted == false);
            var user    = _userManager.GetUserAsync(HttpContext.User).Result;

            if (user != null)
            {
                var defaultAddress = _defaultAddressRepository.GetSome(x => x.CustomerId == user.Id && x.IsDeleted == false).FirstOrDefault();
                if (defaultAddress != null)
                {
                    DefaultAddress = new UserAddressViewModel
                    {
                        AddressId     = defaultAddress.Address.Id,
                        CustomerId    = defaultAddress.Address.CustomerId,
                        PhoneNumber   = defaultAddress.Address.PhoneNumber,
                        RecipientName = defaultAddress.Address.RecipientName,
                        Province      = defaultAddress.Address.Province,
                        District      = defaultAddress.Address.District,
                        Ward          = defaultAddress.Address.Ward,
                        Detail        = defaultAddress.Address.Detail
                    };
                }
            }
            return(new OkObjectResult(DefaultAddress));
        }
        public async Task <IActionResult> EditAddress(int?id, UserAddressViewModel viewModel)
        {
            //var user = await _userManager.GetUserAsync(User);
            viewModel.SelectedAddress = _context.UserAddress.Where(i => i.UserAddressId == id).Select(n => n.Address).FirstOrDefault();

            return(View(viewModel));
        }
Beispiel #4
0
 public ActionResult EditAddress(Guid id)
 {
     using (ApplicationDbContext db = new ApplicationDbContext())
     {
         UserAddress userAddress = db.UserAddresses.Find(id);
         if (userAddress == null)
         {
             return(HttpNotFound());
         }
         UserAddressViewModel viewModel = new UserAddressViewModel();
         viewModel.Id                = Guid.NewGuid();
         viewModel.FirstName         = userAddress.FirstName;
         viewModel.LastName          = userAddress.LastName;
         viewModel.AddressLine1      = userAddress.AddressLine1;
         viewModel.AddressLine2      = userAddress.AddressLine2;
         viewModel.NearestLandMark   = userAddress.NearestLandMark;
         viewModel.Mobile            = userAddress.Mobile;
         viewModel.City              = userAddress.City;
         viewModel.State             = userAddress.State;
         viewModel.Country           = userAddress.Country;
         viewModel.ZipCode           = userAddress.ZipCode;
         viewModel.AddressTitle      = userAddress.AddressTitle;
         viewModel.ApplicationUserId = User.Identity.Name;
         return(View(viewModel));
     }
 }
Beispiel #5
0
        public List <UserAddressViewModel> GetAddressList(string userEmail)
        {
            List <UserAddressViewModel> addressesList = new List <UserAddressViewModel>();

            using (ApplicationDbContext db = new ApplicationDbContext())
            {
                var addresses = db.UserAddresses.Where(a => a.ApplicationUserEmail == userEmail);
                foreach (var address in addresses)
                {
                    UserAddressViewModel viewModel = new UserAddressViewModel();
                    viewModel.Id                = address.Id;
                    viewModel.FirstName         = address.FirstName;
                    viewModel.LastName          = address.LastName;
                    viewModel.AddressLine1      = address.AddressLine1;
                    viewModel.AddressLine2      = address.AddressLine2;
                    viewModel.NearestLandMark   = address.NearestLandMark;
                    viewModel.Mobile            = address.Mobile;
                    viewModel.City              = address.City;
                    viewModel.State             = address.State;
                    viewModel.Country           = address.Country;
                    viewModel.ZipCode           = address.ZipCode;
                    viewModel.AddressTitle      = address.AddressTitle;
                    viewModel.ApplicationUserId = userEmail;
                    addressesList.Add(viewModel);
                }
            }
            return(addressesList);
        }
        public async Task <UserAddressViewModel> GetUserAddress(string userId)
        {
            var userAddress = await _context.UserAddresses.Where(x => x.UserId == userId).FirstOrDefaultAsync();

            UserAddressViewModel userAddressView = _mapper.Map <UserAddressViewModel>(userAddress);

            return(userAddressView);
        }
        public async Task <IActionResult> EditAddress(UserAddressViewModel model)
        {
            if (ModelState.IsValid)
            {
                model.UserId = GetUserSession().Id;

                var apiService = RestServiceExtension <IUserAPI> .For(_enforcerApi.Url, GetUserSession().Token);

                var result = await apiService.GetAddressByIdUser(model.UserId);

                var address = GetData <UserAddressViewModel>(result);

                if (address == null)
                {
                    var subResult = await apiService.CreateAddress(model);

                    ModelStateMessage <BasicResponse>(subResult);
                }
                else
                {
                    model.Id = address.Id;
                    var subResult = await apiService.UpdateAddress(model);

                    ModelStateMessage <BasicResponse>(subResult);
                }


                //var address = apiService.GetAddressByIdUser(model.UserId).Result.Content.Data;
                //if (address == null)
                //{
                //    var resultService = await apiService.CreateAddress(model);
                //    if (resultService.IsSuccessStatusCode)
                //    {
                //        TempDataMessages(new string[] { "Editción Completa." }, TagHelperStatusEnum.Success.ToString());
                //    }
                //    else
                //    {
                //        var error = JsonConvert.DeserializeObject<BasicResponse<UserViewModel>>(resultService.Error.Content);
                //        TempDataMessages(error.Errors, TagHelperStatusEnum.Error.ToString());
                //    }
                //}
                //else
                //{
                //    model.Id = address.Id;
                //    var resultService = await apiService.UpdateAddress(model);
                //    if (resultService.IsSuccessStatusCode)
                //    {
                //        TempDataMessages(new string[] { "Editción Completa." }, TagHelperStatusEnum.Success.ToString());
                //    }
                //    else
                //    {
                //        var error = JsonConvert.DeserializeObject<BasicResponse<UserViewModel>>(resultService.Error.Content);
                //        TempDataMessages(error.Errors, TagHelperStatusEnum.Error.ToString());
                //    }
                //}
            }
            return(View());
        }
        public async Task <ActionResult <UserAddressViewModel> > getUserAddress()
        {
            string UserId = "b3601766-eb7e-42dc-8711-1926aa3232d9";

            var userAddress = await _context.UserAddresses.Where(x => x.UserId == UserId).FirstOrDefaultAsync();

            UserAddressViewModel userAddressView = _mapper.Map <UserAddressViewModel>(userAddress);

            return(userAddressView);
        }
        public HttpResponseMessage SaveAddress(HttpRequestMessage request, UserAddressViewModel address)
        {
            var newAddress = address.ReverseMap();

            _studentApi.SaveAddress(newAddress);

            var response = request.CreateResponse(HttpStatusCode.Created);

            return(response);
        }
Beispiel #10
0
        public HttpResponseMessage GetAddresses(HttpRequestMessage request, int userId)
        {
            var addresses = _studentApi.GetAddressofUser(userId);

            var addressVm = UserAddressViewModel.MapMultipleAddresses(addresses);

            var response = request.CreateResponse(HttpStatusCode.OK, addressVm);

            return(response);
        }
        public async Task <IActionResult> DisplayAddress(UserAddressViewModel viewModel)
        {
            var user = await _userManager.GetUserAsync(User);

            UserAddress userAddress = new UserAddress();

            userAddress.ApplicationUserId = user.Id;
            userAddress.Address           = viewModel.NewAddress;

            _context.Add(userAddress);
            await _context.SaveChangesAsync();

            return(RedirectToAction(nameof(DisplayAddress)));
        }
Beispiel #12
0
 public ActionResult Register(UserAddressViewModel model)
 {
     if (ModelState.IsValid)
     {
         var temp = model.user;
         temp.Password    = temp.Password.Encrypt();
         temp.Status      = StatusTypeUser.Active;
         temp.Roles       = "user";
         temp.DateOfBirth = model.user.DateOfBirth.ToMiladiDate();
         temp.Addresses.Add(model.address);
         db.Users.Add(temp);
         db.SaveChanges();
         return(View());
     }
     return(View(model));
 }
Beispiel #13
0
        public async Task <IActionResult> UpdateAddress(UserAddressViewModel _model)
        {
            try
            {
                if (ModelState.IsValid)
                {
                    //get userid from access token
                    string userId = User.Claims.First(c => c.Type == "UserID").Value;
                    var    user   = await _userManager.FindByIdAsync(userId);

                    var userstatus = user.UserStatus;
                    if (user != null && userstatus)
                    {
                        BussinessDetailViewModel _bussinessmodel = new BussinessDetailViewModel();
                        _bussinessmodel.IdentityId = userId;
                        _bussinessmodel.Address1   = _model.Address1;
                        _bussinessmodel.Address2   = _model.Address2;
                        _bussinessmodel.CountryId  = _model.CountryId;
                        _bussinessmodel.StateId    = _model.StateId;
                        _bussinessmodel.City       = _model.City;
                        _bussinessmodel.Postalcode = _model.Postalcode;
                        bool result = await _bussinessService.UpdateBussinessProfile(_bussinessmodel);

                        if (result)
                        {
                            return(Ok(new { status = StatusCodes.Status200OK, success = true, message = "address" + ResponseMessages.msgUpdationSuccess, userstatus }));
                        }
                        else
                        {
                            return(Ok(new { status = StatusCodes.Status400BadRequest, success = false, message = ResponseMessages.msgDbConnectionError, userstatus = false }));
                        }
                    }
                    else
                    {
                        return(Ok(new { status = StatusCodes.Status404NotFound, success = false, message = ResponseMessages.msgCouldNotFoundAssociatedUser, userstatus = false }));
                    }
                }
                else
                {
                    return(Ok(new { status = StatusCodes.Status406NotAcceptable, success = false, message = ResponseMessages.msgParametersNotCorrect, userstatus = false }));
                }
            }
            catch (Exception ex)
            {
                return(Ok(new { status = StatusCodes.Status500InternalServerError, success = false, message = ResponseMessages.msgSomethingWentWrong + ex.Message, userstatus = false }));
            }
        }
Beispiel #14
0
        public async Task <ActionResult> AddOrderWithAddress(UserAddressViewModel userAddressViewModel)
        {
            string UserId         = User.FindFirst(ClaimTypes.NameIdentifier)?.Value;
            string orderSummaryId = string.Empty;

            try
            {
                string userTableName = await _singleton.userRepository.GetUserOrdersTableName(UserId);

                await _singleton.userRepository.AddOrderWithAddress(userAddressViewModel, UserId, userTableName, out orderSummaryId);
            }
            catch (DbUpdateException e)
            {
                throw;
            }
            return(Ok(new { orderSummaryId }));
        }
        public async Task <IActionResult> DisplayAddress()
        {
            var user = await _userManager.GetUserAsync(User);

            var address = _context.UserAddress.Where(i => i.ApplicationUserId == user.Id).ToList();

            var model = new UserAddressViewModel
            {
                UserAddressList = address
                                  //Username = user.UserName,
                                  //Email = user.Email,
                                  //PhoneNumber = user.PhoneNumber,
                                  //IsEmailConfirmed = user.EmailConfirmed,
                                  //StatusMessage = StatusMessage
            };

            return(View(model));
        }
        public async Task <IActionResult> EditAddress(int id, UserAddressViewModel viewModel)
        {
            var userAddress = _context.UserAddress.Where(i => i.UserAddressId == id).FirstOrDefault();

            //if (userAddress == null)
            //{
            //    throw new ApplicationException($"Address cannot be empty.");
            //}
            //else
            //{
            userAddress.Address = viewModel.SelectedAddress;

            _context.Update(userAddress);
            await _context.SaveChangesAsync();

            //}

            return(RedirectToAction(nameof(DisplayAddress)));
        }
Beispiel #17
0
        public async Task <ActionResult> EditUserAddress(UserAddressViewModel model)
        {
            if (ModelState.IsValid)
            {
                var userToEdit = new UserAddressDTO
                {
                    UserAddressId = User.Identity.GetUserId(),
                    Address1      = model.Address1,
                    Address2      = model.Address2,
                    City          = model.City,
                    ZipCode       = model.ZipCode,
                    State         = model.State,
                    Country       = model.Country
                };
                await _userAddress.UpdateAdressAsync(userToEdit);

                return(RedirectToAction("Index", "UserAddress"));
            }
            return(View());
        }
Beispiel #18
0
        public async Task <JsonResult> ShowUserAddress()
        {
            try
            {
                //to get userid from access token
                string Id = User.Claims.First(c => c.Type == "UserID").Value;
                UserAddressViewModel _userDetails = new UserAddressViewModel();
                var user = await _userManager.FindByIdAsync(Id);

                var userstatus = user.UserStatus;
                if (user != null)
                {
                    var bussiness = new BussinessDetailViewModel();
                    if (User.IsInRole(Constants.isSubAdmin))
                    {
                        //get bussiness details of parent admin if role is subadmin
                        bussiness = await _bussinessService.GetBussinessDetailsById(user.ParentUserId);
                    }
                    else
                    {
                        //get bussiness details of admin by id
                        bussiness = await _bussinessService.GetBussinessDetailsById(user.Id);
                    }

                    _userDetails.Address1    = (!string.IsNullOrEmpty(bussiness.Address1))? bussiness.Address1 :"";
                    _userDetails.Address2    = (!string.IsNullOrEmpty(bussiness.Address2)) ? bussiness.Address2 : "";
                    _userDetails.CountryId   = bussiness.CountryId;
                    _userDetails.CountryName = (!string.IsNullOrEmpty(bussiness.CountryName)) ? bussiness.CountryName : "";
                    _userDetails.StateId     = bussiness.StateId;
                    _userDetails.StateName   = (!string.IsNullOrEmpty(bussiness.StateName)) ? bussiness.StateName : "";
                    _userDetails.City        = (!string.IsNullOrEmpty(bussiness.City)) ? bussiness.City : "";
                    _userDetails.Postalcode  = (!string.IsNullOrEmpty(bussiness.Postalcode)) ? bussiness.Postalcode : "";
                    return(new JsonResult(new { status = StatusCodes.Status200OK, success = true, message = "user address" + ResponseMessages.msgShownSuccess, userstatus, user_info = _userDetails }));
                }
                return(new JsonResult(new { status = StatusCodes.Status404NotFound, success = false, message = ResponseMessages.msgNotFound + "user address.", userstatus = false }));
            }
            catch (Exception ex)
            {
                return(new JsonResult(new { status = StatusCodes.Status500InternalServerError, success = false, message = ResponseMessages.msgSomethingWentWrong + ex.Message, userstatus = false }));
            }
        }
Beispiel #19
0
        public IActionResult OnGetLoadAddress(int?availableAddressId)
        {
            //var useraddress = _userAddressRepository.GetByUserId(_userManager.GetUserAsync(HttpContext.User).Result.Id);
            var customer = _userManager.GetUserAsync(HttpContext.User).Result;

            if (customer != null)
            {
                //var defaultAddress = _defaultAddressRepository.GetSome(x => x.CustomerId == customer.Id);
                var address = _addressRepository.GetSome(x => x.CustomerId == customer.Id && x.IsDeleted == false && x.ShowRoomAddressId == null);
                if (address != null && address.Count() > 0)
                {
                    UserAddresses = new List <UserAddressViewModel>();

                    foreach (var item in address)
                    {
                        var userAddress = new UserAddressViewModel
                        {
                            AddressId      = item.Id,
                            CustomerId     = item.CustomerId,
                            PhoneNumber    = item.PhoneNumber,
                            RecipientName  = item.RecipientName,
                            Province       = item.Province,
                            District       = item.District,
                            Ward           = item.Ward,
                            Detail         = item.Detail,
                            DefaultChecked = availableAddressId != null && availableAddressId > 0 && availableAddressId == item.Id ? "checked" : ""
                                             //DefaultChecked = item.Id == defaultAddress?.First().AddressId ? "checked" : ""
                        };
                        //if (defaultAddress != null)
                        //{
                        //    if (userAddress.AddressId == defaultAddress.AddressId)
                        //    {
                        //        userAddress.DefaultChecked = "checked";
                        //    }
                        //}
                        UserAddresses.Add(userAddress);
                    }
                }
            }
            return(new OkObjectResult(UserAddresses));
        }
Beispiel #20
0
        public async Task <ActionResult> AddNewAddress(UserAddressViewModel viewModel)
        {
            if (!ModelState.IsValid)
            {
                return(View(viewModel));
            }
            try
            {
                ApplicationUser user = await UserManager.FindByEmailAsync(User.Identity.Name);

                using (ApplicationDbContext db = new ApplicationDbContext())
                {
                    UserAddress userAddress = new UserAddress();
                    userAddress.Id                   = Guid.NewGuid();
                    userAddress.FirstName            = viewModel.FirstName;
                    userAddress.LastName             = viewModel.LastName;
                    userAddress.Company              = viewModel.Company;
                    userAddress.AddressLine1         = viewModel.AddressLine1;
                    userAddress.AddressLine2         = viewModel.AddressLine2;
                    userAddress.NearestLandMark      = viewModel.NearestLandMark;
                    userAddress.Mobile               = viewModel.Mobile;
                    userAddress.City                 = viewModel.City;
                    userAddress.State                = viewModel.State;
                    userAddress.Country              = viewModel.Country;
                    userAddress.ZipCode              = viewModel.ZipCode;
                    userAddress.AddressTitle         = viewModel.AddressTitle;
                    userAddress.ApplicationUserEmail = User.Identity.Name;
                    db.UserAddresses.Add(userAddress);
                    db.SaveChanges();
                    return(RedirectToAction("MyAddress"));
                }
            }
            catch (Exception ex)
            {
                ModelState.AddModelError("", ex.Message);
            }

            return(View(viewModel));
        }
Beispiel #21
0
        public IActionResult OnPostSaveAddress([FromBody] UserAddressViewModel model)
        {
            if (!ModelState.IsValid)
            {
                IEnumerable <ModelError> allErrors = ModelState.Values.SelectMany(v => v.Errors);
                return(new BadRequestObjectResult(allErrors));
            }
            var user = _userManager.GetUserAsync(HttpContext.User).Result;

            if (model.AddressId > 0)
            {
                var existAddress = _addressRepository.Find(model.AddressId);
                existAddress.PhoneNumber   = model.PhoneNumber;
                existAddress.RecipientName = model.RecipientName;
                existAddress.Ward          = model.Ward;
                existAddress.District      = model.District;
                existAddress.Province      = model.Province;
                existAddress.Detail        = model.Detail;
                existAddress.DateModified  = DateTime.Now;
                _addressRepository.Update(existAddress);
                return(new OkObjectResult(existAddress));
            }
            var newAddress = new Address
            {
                PhoneNumber   = model.PhoneNumber,
                RecipientName = model.RecipientName,
                Ward          = model.Ward,
                District      = model.District,
                Province      = model.Province,
                Detail        = model.Detail,
                DateCreated   = DateTime.Now,
                DateModified  = DateTime.Now,
                CustomerId    = _userManager.GetUserAsync(HttpContext.User).Result.Id
            };

            _addressRepository.Add(newAddress);
            return(new OkObjectResult(newAddress));
        }
        public IActionResult SignUp(UserAddressViewModel modelData)
        {
            if (ModelState.IsValid)
            {
                User user = DBContext.Users.FirstOrDefault(u => u.Email == modelData.NewUser.Email);
                if (user != null)
                {
                    ModelState.AddModelError("NewUser.Email", "There is already an account linked to this email.");
                    return(View());
                }

                DBContext.Addresses.Add(modelData.Address);
                DBContext.SaveChanges();

                user           = modelData.NewUser;
                user.AddressID = DBContext.Addresses.LastOrDefault().AddressID;
                PasswordHasher <User> hasher = new PasswordHasher <User>();
                user.Password = hasher.HashPassword(user, user.Password);
                DBContext.Users.Add(user);
                DBContext.SaveChanges();

                user = DBContext.Users.FirstOrDefault(u => u.Email == user.Email);
                HttpContext.Session.SetInt32("UserID", user.UserID);
                HttpContext.Session.SetInt32("LoggedIn", 1);
                return(RedirectToAction("Profile", "Home"));
            }

            string validationErrors = string.Join(",",
                                                  ModelState.Values.Where(E => E.Errors.Count > 0)
                                                  .SelectMany(E => E.Errors)
                                                  .Select(E => E.ErrorMessage)
                                                  .ToArray());

            Console.WriteLine($"********** {ModelState.ErrorCount} **********");
            Console.WriteLine($"********** {validationErrors} **********");
            return(View());
        }
Beispiel #23
0
        public HttpResponseMessage SaveSponsor(HttpRequestMessage request, SponsorViewModel sponsor)
        {
            if (!ModelState.IsValid)
            {
            }
            _sponsorApi.SaveSponsor(sponsor.ReverseMap());

            int userId = sponsor.ID;

            string[] location = sponsor.Location.Split(',');

            var address = new UserAddressViewModel();

            address.BursifyUserId = userId;
            address.City          = location[1];
            address.Province      = location[0];
            address.AddressType   = "Company";

            _studentApi.SaveAddress(address.ReverseMap());

            var response = request.CreateResponse(HttpStatusCode.Created);

            return(response);
        }
        /// <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);
        }
        public async Task <IActionResult> DeleteAddress(int?id, UserAddressViewModel viewModel)
        {
            viewModel.SelectedAddress = _context.UserAddress.Where(i => i.UserAddressId == id).Select(n => n.Address).FirstOrDefault();

            return(View(viewModel));
        }
        public async Task <ActionResult> AddOrderWithAddress(UserAddressViewModel userAddressViewModel)
        {
            string       UserId       = "b3601766-eb7e-42dc-8711-1926aa3232d9";
            OrderSummary orderSummary = new OrderSummary();

            try
            {
                decimal TotalSellingPrice = 0;

                string ipAddress = "";
                if (Dns.GetHostAddresses(Dns.GetHostName()).Length > 0)
                {
                    ipAddress = Dns.GetHostAddresses(Dns.GetHostName())[0].ToString();
                }
                orderSummary.IP = ipAddress;
                orderSummary.Id = Guid.NewGuid().ToString();
                orderSummary.UpdatedDateTime = DateTime.Now;
                orderSummary.CreatedDateTime = DateTime.Now;
                orderSummary.OrderStatus     = "Completed";
                orderSummary.UserId          = UserId;
                orderSummary.InvoiceNo       = "PK" + (_context.OrderSummaries.Count() + 1).ToString("000000");
                //Add or Update userAddress
                var         updateUserAddress = _context.UserAddresses.Where(x => x.UserId == UserId).FirstOrDefault();
                UserAddress userAddress       = _mapper.Map <UserAddress>(userAddressViewModel);
                userAddress.UserId = UserId;

                if (updateUserAddress != null)
                {
                    var updatedEntity = _mapper.Map(userAddressViewModel, updateUserAddress);
                    updatedEntity.Id     = updateUserAddress.Id;
                    updatedEntity.UserId = UserId;
                    userAddress.Id       = updateUserAddress.Id;
                    var entity = _context.Update(updatedEntity);
                }
                else
                {
                    userAddress.Id = Guid.NewGuid().ToString();
                    _context.UserAddresses.Add(userAddress);
                }
                orderSummary.UserAddressId = userAddress.Id;
                List <string> ppid = new List <string>();
                ppid = userAddressViewModel.cartIds.Select(x => x.id).ToList();
                var result = await _context.ProductPrices.Where(x => ppid.Contains(x.Id) && x.IsActive == true).Include(p => p.Product).Include(p => p.Unit).ToListAsync();

                List <Order> orders = new List <Order>();
                foreach (var item in result)
                {
                    var   quantity = userAddressViewModel.cartIds.Where(x => x.id == item.Id).FirstOrDefault();
                    Order order    = new Order();
                    order = _mapper.Map <Order>(item);
                    order.ProductPriceId = order.Id;
                    order.ProductId      = item.ProductId;
                    order.Quantity       = quantity.count;
                    order.Id             = Guid.NewGuid().ToString();
                    order.OrderSummaryId = orderSummary.Id;

                    orderSummary.TotalAmount = Convert.ToDecimal(orderSummary.TotalAmount) + item.SellingPrice * Convert.ToInt32(quantity.count);
                    TotalSellingPrice        = Convert.ToDecimal(TotalSellingPrice) + item.MRPPrice * Convert.ToInt32(quantity.count);
                    orders.Add(order);
                }
                orderSummary.Discount = TotalSellingPrice - orderSummary.TotalAmount;
                orderSummary.Delivery = 10;

                _context.OrderSummaries.Add(orderSummary);
                _context.Orders.AddRange(orders);
                await _context.SaveChangesAsync();
            }
            catch (DbUpdateException e)
            {
                throw;
            }
            return(Ok(new { orderSummary.Id }));
        }
        public Task <bool> AddOrderWithAddress(UserAddressViewModel userAddressViewModel, string userId, string userTableName, out string orderSummaryId)
        {
            string ipAddress = "";

            if (Dns.GetHostAddresses(Dns.GetHostName()).Length > 0)
            {
                ipAddress = Dns.GetHostAddresses(Dns.GetHostName())[0].ToString();
            }
            var jsonSerializerSettings = new JsonSerializerSettings
            {
                ContractResolver = new CamelCasePropertyNamesContractResolver()
            };

            #region Add or Update userAddress
            var         updateUserAddress = _context.UserAddresses.Where(x => x.UserId == userId).FirstOrDefault();
            UserAddress userAddress       = _mapper.Map <UserAddress>(userAddressViewModel);
            userAddress.UserId = userId;

            if (updateUserAddress != null)
            {
                var updatedEntity = _mapper.Map(userAddressViewModel, updateUserAddress);
                updatedEntity.UserId = userId;
                userAddress.Id       = updateUserAddress.Id;
                var entity = _context.Update(updatedEntity);
            }
            else
            {
                userAddress.Id = Guid.NewGuid().ToString();
                _context.UserAddresses.Add(userAddress);
            }
            #endregion
            AddressViewModel userAddressModel = _mapper.Map <AddressViewModel>(userAddress);
            OrderSummary     orderSummary     = new OrderSummary()
            {
                IP = ipAddress,
                Id = Guid.NewGuid().ToString(),
                UpdatedDateTime    = DateTime.Now,
                CreatedDateTime    = DateTime.Now,
                OrderStatusId      = (int)EnumOrderStatus.UnderPreparing,
                UserId             = userId,
                InvoiceNo          = "IN" + (_context.OrderSummaries.Count() + 1).ToString("000000"),
                UserAddressDetails = Newtonsoft.Json.JsonConvert.SerializeObject(userAddressModel, jsonSerializerSettings),
                IsActive           = true,
                PromoCode          = "",
                ModifyBy           = userId,
                PaymentStatus      = "",
                ShopId             = userAddressViewModel.CartProducts[0].ShopId
            };
            if (userAddressViewModel.CartProducts.Length > 0)
            {
                StringBuilder stringBuilder = new StringBuilder();
                foreach (var item in userAddressViewModel.CartProducts)
                {
                    stringBuilder.Append("'");
                    stringBuilder.Append(item.ProductId);
                    stringBuilder.Append("',");
                }
                stringBuilder.Remove(stringBuilder.Length - 1, 1);
                string whereClose = $" where v.IsActive = true and v.IsOutStock= false and v.id in({stringBuilder})";

                var shop = _context.Shops.Where(x => x.Id == userAddressViewModel.CartProducts[0].ShopId).FirstOrDefault();
                if (shop == null)
                {
                    orderSummaryId = "";
                    return(null);
                }

                AddressViewModel shopAddressModel = _mapper.Map <AddressViewModel>(shop);
                var shopAddressJson = Newtonsoft.Json.JsonConvert.SerializeObject(shopAddressModel, jsonSerializerSettings);


                var result = _context.VendorProducts.FromSqlRaw($"select v.Id,v.IsOutStock,v.ProductId,v.ProductName,v.ProductUrl,v.Selling,v.MRP,v.Discount,u.UnitType,v.Description, '{shop.CurrencyType}' as CurrencyType " +
                                                                $"from VendorProduct.Vendor{shop.tableName}Products v join Unit u on v.UnitId = u.Id {whereClose};")
                             .Select(x => new VendorProductViewModel
                {
                    Id           = x.Id,
                    ProductId    = x.ProductId,
                    ProductName  = x.ProductName,
                    Description  = x.Description,
                    Discount     = x.Discount,
                    IsOutStock   = x.IsOutStock,
                    MRP          = x.MRP,
                    ProductUrl   = _documentStorage.GetProductThumbnailUri(x.ProductUrl).Result,
                    Selling      = x.Selling,
                    UnitType     = x.UnitType,
                    CurrencyType = x.CurrencyType
                }).AsQueryable().ToList();
                var products = (from x in result
                                join p in userAddressViewModel.CartProducts on x.Id equals p.ProductId
                                select new VendorProductViewModel
                {
                    ProductName = x.ProductName,
                    Description = x.Description,
                    Discount = x.Discount,
                    IsOutStock = x.IsOutStock,
                    MRP = x.MRP,
                    ProductUrl = x.ProductUrl,
                    Selling = x.Selling,
                    UnitType = x.UnitType,
                    ItemCount = p.ItemCount,
                    SubTotalOnSelling = p.ItemCount * x.Selling,
                    SubTotalOnMRP = p.ItemCount * x.MRP,
                    CurrencyType = x.CurrencyType
                }).ToList();
                orderSummary.OrdersDetails      = Newtonsoft.Json.JsonConvert.SerializeObject(products, jsonSerializerSettings);
                orderSummary.DeliveryCost       = shop.DeliveryCost == null?0:shop.DeliveryCost;
                orderSummary.Discount           = products.Sum(x => x.SubTotalOnMRP) - products.Sum(x => x.SubTotalOnSelling);
                orderSummary.TotalAmount        = products.Sum(x => x.SubTotalOnSelling);
                orderSummary.ItemCount          = products.Sum(x => x.ItemCount.Value);
                orderSummary.CurrencyType       = shop.CurrencyType;
                orderSummary.ShopId             = shop.Id;
                orderSummary.OrderStatusId      = shop.IsPriceVisible == false ? (int)EnumOrderStatus.PriceHiddenByShopper : (int)EnumOrderStatus.UnderPreparing;
                orderSummary.ShopAddressDetails = shopAddressJson;
                using (var scope = _context.Database.BeginTransaction())
                {
                    try
                    {
                        var vendorOrder = $"insert into VendorOrder.Vendor{shop.tableName}Orders(Id,IP,IsActive,CreatedDateTime,UpdatedDateTime,ModifyBy,OrderStatusId,ItemCount,DeliveryCost,TotalAmount," +
                                          $"Discount,PromoCode,DeliveryStatus,DeliveryDate,InvoiceNo,PaymentStatus,UserId,UserAddressDetails,ShopAddressDetails,OrdersDetails,CurrencyType,ShopId)" +
                                          $" values('{orderSummary.Id}','{orderSummary.IP}','{orderSummary.IsActive}','{orderSummary.CreatedDateTime}','{orderSummary.UpdatedDateTime}','{orderSummary.ModifyBy}','{orderSummary.OrderStatusId}',{orderSummary.ItemCount},{orderSummary.DeliveryCost},{orderSummary.TotalAmount}," +
                                          $"{orderSummary.Discount},'{orderSummary.PromoCode}','{orderSummary.DeliveryStatus}',null,'{orderSummary.InvoiceNo}','{orderSummary.PaymentStatus}','{orderSummary.UserId}','{orderSummary.UserAddressDetails}','{shopAddressJson}','{orderSummary.OrdersDetails}','{shop.CurrencyType}','{shop.Id}')";

                        var userOrder = $"insert into UserOrders.User{userTableName}Orders(Id,IP,IsActive,CreatedDateTime,UpdatedDateTime,ModifyBy,OrderStatusId,ItemCount,DeliveryCost,TotalAmount," +
                                        $"Discount,PromoCode,DeliveryStatus,DeliveryDate,InvoiceNo,PaymentStatus,UserId,UserAddressDetails,ShopAddressDetails,OrdersDetails,CurrencyType,ShopId)" +
                                        $" values('{orderSummary.Id}','{orderSummary.IP}','{orderSummary.IsActive}','{orderSummary.CreatedDateTime}','{orderSummary.UpdatedDateTime}','{orderSummary.ModifyBy}','{orderSummary.OrderStatusId}',{orderSummary.ItemCount},{orderSummary.DeliveryCost},{orderSummary.TotalAmount}," +
                                        $"{orderSummary.Discount},'{orderSummary.PromoCode}','{orderSummary.DeliveryStatus}',null,'{orderSummary.InvoiceNo}','{orderSummary.PaymentStatus}','{orderSummary.UserId}','{orderSummary.UserAddressDetails}','{shopAddressJson}','{orderSummary.OrdersDetails}',N'{shop.CurrencyType}','{shop.Id}')";
                        using (var command = _context.Database.GetDbConnection().CreateCommand())
                        {
                            command.CommandText = vendorOrder + ";" + userOrder;
                            _context.Database.OpenConnection();
                            command.Transaction = _context.Database.CurrentTransaction.GetDbTransaction();
                            command.ExecuteNonQuery();
                        }
                        _context.OrderSummaries.Add(orderSummary);
                        _context.SaveChanges();
                        scope.Commit();
                    }
                    catch (Exception ex)
                    {
                        scope.Rollback();
                        throw;
                        int?i;
                    }
                }

                //var myDictionary = new Dictionary<string, Func<DbContext, IQueryable>>()
                //	{
                //		{ "TblStudents", ( DbContext context ) => context.Set<OrderSummary>() }
                //	};

                //var dbSet = myDictionary["TblStudents"].Invoke(_context);
            }
            orderSummaryId = orderSummary.Id;
            return(Task.FromResult(true));
        }