public async Task <IHttpActionResult> UpdateUser(UserViewModel model)
        {
            if (model == null)
            {
                return(Ok(new { status = false, data = "", message = "Invalid data model." }));
            }

            if (model.UserType == UserType.SiteAdmin)
            {
                var admin           = model.SiteAdmin;
                var adminController = new AdministratorController();
                using (var appointmetntDb = _dbAppointment.Database.BeginTransaction())
                {
                    try
                    {
                        var updateAdmin = adminController.UpdateAdmin(admin);
                        if (updateAdmin.Status)
                        {
                            var user = await UserManager.FindByEmailAsync(admin.Email);

                            var response = await UserManager.ChangePasswordAsync(user.Id, admin.OldPassword, admin.Password);

                            if (response.Succeeded)
                            {
                                appointmetntDb.Commit();
                                return(Ok(new { status = true, data = updateAdmin.Data, message = "update successfully." }));
                            }
                            else
                            {
                                appointmetntDb.Rollback();
                                return(Ok(new { status = false, data = updateAdmin.Data, message = "update failed. ex:" + response.Errors }));
                            }
                        }
                        else
                        {
                            appointmetntDb.Rollback();
                            return(Ok(new { status = false, data = updateAdmin.Data, message = "There was problem. Please try again later." }));
                        }
                    }
                    catch
                    {
                        appointmetntDb.Rollback();
                        return(Ok(new { status = false, data = "", message = "There was a problem Please try again later." }));
                    }
                }
            }
            else if (model.UserType == UserType.BusinessAdmin || model.UserType == UserType.BusinessEmployee)
            {
                var employe = model.BusinessEmployee;
                var businessEmployeeController = new BusinessEmployeeController();
                using (var appointmetntDb = _dbAppointment.Database.BeginTransaction())
                {
                    try
                    {
                        var updateAdmin = businessEmployeeController.UpdateEmployee(employe);
                        if (updateAdmin.Status)
                        {
                            var user = await UserManager.FindByEmailAsync(employe.Email);

                            var response = await UserManager.ChangePasswordAsync(user.Id, employe.OldPassword, employe.Password);

                            if (response.Succeeded)
                            {
                                appointmetntDb.Commit();
                                return(Ok(new { status = true, data = updateAdmin.Data, message = "changed successfully." }));
                            }
                            else
                            {
                                appointmetntDb.Rollback();
                                return(Ok(new { status = false, data = updateAdmin.Data, message = "change failed. ex:" + response.Errors }));
                            }
                        }
                        else
                        {
                            appointmetntDb.Rollback();
                            return(Ok(new { status = false, data = updateAdmin.Data, message = "There was problem. Please try again later." }));
                        }
                    }
                    catch
                    {
                        appointmetntDb.Rollback();
                        return(Ok(new { status = false, data = "", message = "There was a problem Please try again later." }));
                    }
                }
            }
            else if (model.UserType == UserType.BusinessCustomer)
            {
                return(Ok(new { status = false, data = "", message = "Invalid user." }));
            }
            else
            {
                return(Ok(new { status = false, data = "", message = "Invalid user." }));
            }
        }
        public async Task <IHttpActionResult> DeleteUser(UserViewModel model)
        {
            if (model == null)
            {
                return(Ok(new { status = false, data = "", message = "Invalid data model." }));
            }

            if (model.UserType == UserType.BusinessEmployee)
            {
                var employe = model.BusinessEmployee;
                var businessEmployeeController = new BusinessEmployeeController();
                using (var appointmetntDb = _dbAppointment.Database.BeginTransaction())
                {
                    try
                    {
                        var deleteEmploye = businessEmployeeController.DeleteEmployee(employe.Id);
                        if (deleteEmploye.Status)
                        {
                            var user = await UserManager.FindByEmailAsync(deleteEmploye.Data.Email);

                            var response = await UserManager.DeleteAsync(user);

                            if (response.Succeeded)
                            {
                                return(Ok(new { status = true, data = deleteEmploye.Data, message = "deleted successfully." }));
                            }
                            else
                            {
                                appointmetntDb.Rollback();
                                return(Ok(new { status = false, data = deleteEmploye.Data, message = "deletion failed. ex:" + response.Errors }));
                            }
                        }
                        else
                        {
                            appointmetntDb.Rollback();
                            return(Ok(new { status = false, data = "", message = "There was problem. Please try again later." }));
                        }
                    }
                    catch
                    {
                        appointmetntDb.Rollback();
                        return(Ok(new { status = false, data = "", message = "There was a problem Please try again later." }));
                    }
                }
            }
            else if (model.UserType == UserType.BusinessCustomer)
            {
                var customer = model.BusinessCustomer;
                var businessCustomerController = new BusinessCustomerController();
                using (var appointmetntDb = _dbAppointment.Database.BeginTransaction())
                {
                    try
                    {
                        var deleteCustomer = businessCustomerController.DeleteCustomer(customer.Id);
                        if (deleteCustomer.Status)
                        {
                            var user = await UserManager.FindByEmailAsync(deleteCustomer.Data.Email);

                            var response = await UserManager.DeleteAsync(user);

                            if (response.Succeeded)
                            {
                                return(Ok(new { status = true, data = deleteCustomer.Data, message = "deleted successfully." }));
                            }
                            else
                            {
                                appointmetntDb.Rollback();
                                return(Ok(new { status = false, data = deleteCustomer.Data, message = "deletion failed. ex:" + response.Errors }));
                            }
                        }
                        else
                        {
                            appointmetntDb.Rollback();
                            return(Ok(new { status = false, data = "", message = "There was problem. Please try again later." }));
                        }
                    }
                    catch
                    {
                        appointmetntDb.Rollback();
                        return(Ok(new { status = false, data = "", message = "There was a problem Please try again later." }));
                    }
                }
            }
            else
            {
                return(Ok(new { status = false, data = "", message = "Invalid user." }));
            }
        }
        public async Task <IHttpActionResult> Register(UserViewModel model)
        {
            //var result = new ResponseViewModel<tblAdministrator>();

            if (model == null)
            {
                return(Ok(new { status = false, data = "", message = "Invalid data model." }));
            }

            if (model.UserType == UserType.SiteAdmin)
            {
                var admin           = model.SiteAdmin;
                var adminController = new AdministratorController();
                using (var appointmetntDb = _dbAppointment.Database.BeginTransaction())
                {
                    try
                    {
                        var registerViewModel = adminController.RegisterAdmin(admin);
                        if (registerViewModel.Status)
                        {
                            var user = new ApplicationUser()
                            {
                                UserName = admin.Email, Email = admin.Email
                            };
                            var password = HttpContext.Current.Server.UrlDecode(admin.Password);
                            var response = await UserManager.CreateAsync(user, password);

                            if (response.Succeeded)
                            {
                                appointmetntDb.Commit();
                                return(Ok(new { status = true, data = registerViewModel, message = "Registeration successfully." }));
                            }
                            else
                            {
                                appointmetntDb.Rollback();
                                return(Ok(new { status = false, data = registerViewModel, message = "Registeration failed. ex:" + response.Errors }));
                            }
                        }
                        else
                        {
                            appointmetntDb.Rollback();
                            return(Ok(new { status = false, data = "", message = registerViewModel.Message }));
                        }
                    }
                    catch
                    {
                        appointmetntDb.Rollback();
                        var user = UserManager.FindByEmail(model.SiteAdmin.Email);
                        if (user != null)
                        {
                            UserManager.Delete(user);
                        }
                        return(Ok(new { status = false, data = "", message = "There was a problem to register account, Please try again later." }));
                    }
                }
            }
            else if (model.UserType == UserType.BusinessAdmin)
            {
                var businessAdmin      = model.BusinessAdmin;
                var businessController = new BusinessController();
                using (var appointmetntDb = _dbAppointment.Database.BeginTransaction())
                {
                    try
                    {
                        var registerViewModel = businessController.Register(businessAdmin);
                        if (registerViewModel.Status)
                        {
                            var user = new ApplicationUser()
                            {
                                UserName = businessAdmin.Employee.Email, Email = businessAdmin.Employee.Email
                            };
                            var password = HttpContext.Current.Server.UrlDecode(businessAdmin.Employee.Password);
                            var response = await UserManager.CreateAsync(user, password);

                            if (response.Succeeded)
                            {
                                appointmetntDb.Commit();
                                return(Ok(new { status = true, data = registerViewModel, message = "Registeration successfully." }));
                            }
                            else
                            {
                                appointmetntDb.Rollback();
                                return(Ok(new { status = false, data = registerViewModel, message = "Registeration failed. ex:" + response.Errors }));
                            }
                        }
                        else
                        {
                            appointmetntDb.Rollback();
                            return(Ok(new { status = false, data = registerViewModel, message = "There was problem. Please try again later." }));
                        }
                    }
                    catch
                    {
                        appointmetntDb.Rollback();
                        var user = UserManager.FindByEmail(businessAdmin.Employee.Email);
                        if (user != null)
                        {
                            UserManager.Delete(user);
                        }
                        return(Ok(new { status = false, data = "", message = "There was a problem to register account, Please try again later." }));
                    }
                }
            }
            else if (model.UserType == UserType.BusinessEmployee)
            {
                var businessEmployee           = model.BusinessEmployee;
                var businessEmployeeController = new BusinessEmployeeController();
                using (var appointmetntDb = _dbAppointment.Database.BeginTransaction())
                {
                    try
                    {
                        var registerViewModel = businessEmployeeController.Register(businessEmployee);
                        if (registerViewModel.Status)
                        {
                            var user = new ApplicationUser()
                            {
                                UserName = businessEmployee.Email, Email = businessEmployee.Email
                            };
                            var password = HttpContext.Current.Server.UrlDecode(businessEmployee.Password);
                            var response = await UserManager.CreateAsync(user, password);

                            if (response.Succeeded)
                            {
                                appointmetntDb.Commit();
                                return(Ok(new { status = true, data = registerViewModel.Data, message = "Registeration successfully." }));
                            }
                            else
                            {
                                appointmetntDb.Rollback();
                                return(Ok(new { status = false, data = registerViewModel.Data, message = "Registeration failed. ex:" + response.Errors }));
                            }
                        }
                        else
                        {
                            appointmetntDb.Rollback();
                            return(Ok(new { status = false, data = "", message = "There was problem. Please try again later." }));
                        }
                    }
                    catch
                    {
                        appointmetntDb.Rollback();
                        var user = UserManager.FindByEmail(businessEmployee.Email);
                        if (user != null)
                        {
                            UserManager.Delete(user);
                        }
                        return(Ok(new { status = false, data = "", message = "There was a problem to register account, Please try again later." }));
                    }
                }
            }
            else if (model.UserType == UserType.BusinessCustomer)
            {
                var businessCustomer           = model.BusinessCustomer;
                var businessCustomerController = new BusinessCustomerController();
                using (var appointmetntDb = _dbAppointment.Database.BeginTransaction())
                {
                    try
                    {
                        var registerViewModel = businessCustomerController.Register(businessCustomer);
                        if (registerViewModel.Status)
                        {
                            var user = new ApplicationUser()
                            {
                                UserName = businessCustomer.Email, Email = businessCustomer.Email
                            };
                            var password = HttpContext.Current.Server.UrlDecode(businessCustomer.Password);
                            var response = await UserManager.CreateAsync(user, password);

                            if (response.Succeeded)
                            {
                                appointmetntDb.Commit();
                                return(Ok(new { status = true, data = registerViewModel.Data, message = "Registeration successfully." }));
                            }
                            else
                            {
                                appointmetntDb.Rollback();
                                return(Ok(new { status = false, data = registerViewModel.Data, message = "Registeration failed. ex:" + response.Errors }));
                            }
                        }
                        else
                        {
                            appointmetntDb.Rollback();
                            return(Ok(new { status = false, data = "", message = "There was problem. Please try again later." }));
                        }
                    }
                    catch
                    {
                        appointmetntDb.Rollback();
                        var user = UserManager.FindByEmail(businessCustomer.Email);
                        if (user != null)
                        {
                            UserManager.Delete(user);
                        }
                        return(Ok(new { status = false, data = "", message = "There was a problem to register account, Please try again later." }));
                    }
                }
            }
            else
            {
                return(Ok(new { status = false, data = "", message = "Invalid user." }));
            }
        }