public async Task <IActionResult> Create([FromBody] EmployeeDTO dto, CancellationToken cancellationToken = default)
        {
            var store = await _storeRepository.FindByIdAsync(dto.StoreId, cancellationToken);

            if (store == null)
            {
                return(NotFound("No Store Found"));
            }

            var employee = _mapper.Map <Employee>(dto);

            employee.IsDeleted = false; // Just to make sure that the field is false at the point of creating

            var result = await _employeeManager.CreateAsync(employee, dto.PasswordHash);

            if (!result.Succeeded)
            {
                return(StatusCode(500));
            }

            var addtoRoleResullt = await _employeeManager.AddToRoleAsync(employee, "employee");

            if (!addtoRoleResullt.Succeeded)
            {
                return(BadRequest("Fail to add role"));
            }

            return(CreatedAtAction(nameof(GetById), new { employee.Id }, _mapper.Map <EmployeeDTO>(employee)));
        }
        public async Task <ActionResult> CreateEmployee(EmployeeRegisterViewModel model)
        {
            string upgraded = await _adminRepository.GetUserStatusAsync(CurrentUser) ?? "";

            int numberOfEmployees = EmployeeManager.Users.Where(u => u.CompanyId == CurrentCompanyId).Count();

            if (numberOfEmployees >= 5 && !upgraded.Equals("active"))
            {
                return(RedirectToAction("Index", "Admin", new { message = "Please upgrade your account to add more employees." }));
            }

            if (ModelState.IsValid)
            {
                var user = new EmployeeUser
                {
                    UserName     = model.Username,
                    FirstName    = model.FirstName,
                    LastName     = model.LastName,
                    PayRate      = model.Payrate,
                    OverTimeRate = model.OvertimeRate,
                    TaxRate      = model.TaxRate,
                    HireDate     = model.HireDate,
                    PhoneNumber  = model.Phone,
                    Address      = model.Address,
                    PayMethod    = model.PayMethod,

                    CompanyId   = CurrentCompanyId,
                    CompanyName = CurrentCompany,
                    IsAdmin     = false
                };

                var result = await EmployeeManager.CreateAsync(user, model.Password);

                if (result.Succeeded)
                {
                    result = await EmployeeManager.AddToRoleAsync(user.Id, "Employee");
                }

                if (result.Succeeded)
                {
                    return(RedirectToAction("Index", "Admin", new { message = "Employee created successfully." }));
                }

                AddErrors(result);
            }

            // If we got this far, something failed, redisplay form
            return(View(model));
        }