public async Task <IActionResult> UploadImage(NewImageView formData)
        {
            try
            {
                if (ModelState.IsValid)
                {
                    var img = await Base64StringHandler.GetFormFileBase64StringAsync(formData.Img);

                    await _employeeServices.UpdateEmployeeAsync(new Employee
                    {
                        Id            = formData.EmployeeID,
                        EmployeeImage = img,
                        UserAccount   = User.Identity.Name
                    });

                    TempData["Message"] = "Employee image successfully uploaded";
                    _logger.LogInformation($"Successfully updated employee image; user={@User.Identity.Name.Substring(4)}");
                    return(RedirectToAction("UploadImage"));
                }
            }

            catch (ApplicationException error)
            {
                _logger.LogError(
                    error,
                    $"FAIL: failed to update employee image. Internal Application Error.; user={@User.Identity.Name.Substring(4)}");
                ModelState.AddModelError("Employee", $"Failed to update employee image. Contact IT ServiceDesk for support thank you.");
            }
            await LoadSelectListsAsync();

            return(View(formData));
        }
        public async Task <IActionResult> Add(NewEmployeeViewModel formData)
        {
            try
            {
                if (DateTime.Parse(formData.DateOfBirth) >= DateTimeOffset.Now)
                {
                    ModelState.AddModelError("Employees", $"Employee Date of Birth {formData.DateOfBirth} can't be greater or now, Please enter a valid birth date.");
                }
                else if (DateTimeOffset.Now.Date.Year - DateTime.Parse(formData.DateOfBirth).Year <= 17)
                {
                    int years = DateTimeOffset.Now.Date.Year - DateTime.Parse(formData.DateOfBirth).Year;
                    ModelState.AddModelError("Employees", $"Employee aged {years} years is below the required working age, Please enter a valid birth date in range of 18 - 54.");
                }
                else if (DateTimeOffset.Now.Date.Year - DateTime.Parse(formData.DateOfBirth).Year >= 55)
                {
                    int years = DateTimeOffset.Now.Date.Year - DateTime.Parse(formData.DateOfBirth).Year;
                    ModelState.AddModelError("Employees", $"Employee aged {years} years is at the retirement level, Please enter a valid birth date in range of 18 - 54.");
                }
                else if ((formData.SpouseDateOfBirth != null) && DateTime.Parse(formData.SpouseDateOfBirth) >= DateTimeOffset.Now)
                {
                    ModelState.AddModelError("Employees", $"Employee Spouse Date of Birth {formData.SpouseDateOfBirth} can't be greater or now, Please enter a valid birth date.");
                }
                else if ((formData.SpouseDateOfBirth != null) && DateTimeOffset.Now.Date.Year - DateTime.Parse(formData.SpouseDateOfBirth).Year <= 17)
                {
                    int years = DateTimeOffset.Now.Date.Year - DateTime.Parse(formData.SpouseDateOfBirth).Year;
                    ModelState.AddModelError("Employees", $"Employee Spouse aged {years} years is below the required required age, Please enter a valid birth date in range of 18 - 54.");
                }
                else
                {
                    var img = await Base64StringHandler.GetFormFileBase64StringAsync(formData.Img);

                    //var image = await Base64StringHandler.GetFormFileBase64StringAsync(formData.EmployeeBirthCertificate);
                    if (ModelState.IsValid)
                    {
                        bool bIfExist = false;
                        var  emp      = from c in _db.Employees
                                        where c.PersonnelFileNumber == formData.PFNumber ||
                                        c.TINNumber == formData.TINNumber ||
                                        c.NSSFNumber == formData.NSSFNumber ||
                                        c.NationalIDNumber == formData.NINNumber ||
                                        c.ContactPerson == formData.ContactPerson ||
                                        c.ContactPersonTelphone == formData.ContactPersonTelephone ||
                                        c.BankAccountNumber == formData.BankAccountNumber ||

                                        c.WorkMobileNumber == formData.WorkMobileNumber ||
                                        c.PersonalMobileNumber == formData.PersonalMobileNumber ||
                                        c.AlternativeMobileNumber == formData.AlternativeMobileNumber ||
                                        c.EmployeeImage == img

                                        select c;

                        try
                        {
                            emp.ToList()[0].PersonnelFileNumber.ToString();
                            emp.ToList()[0].TINNumber.ToString();
                            emp.ToList()[0].NSSFNumber.ToString();
                            emp.ToList()[0].NationalIDNumber.ToString();
                            emp.ToList()[0].ContactPerson.ToString();
                            emp.ToList()[0].ContactPersonTelphone.ToString();
                            emp.ToList()[0].BankAccountNumber.ToString();
                            emp.ToList()[0].PersonalMobileNumber.ToString();
                            emp.ToList()[0].AlternativeMobileNumber.ToString();
                            emp.ToList()[0].WorkMobileNumber.ToString();
                            emp.ToList()[0].EmployeeImage.ToString();
                            bIfExist = true;
                        }
                        catch { }
                        if (bIfExist == true)
                        {
                            ModelState.AddModelError("Employees", $"Employee PFNumber, TIN, NSSF, NIN Number already exists, PF, TIN, NSSF and NIN Number must be Unique");
                        }
                        else
                        {
                            var SpouseDate = "";
                            if (formData.SpouseDateOfBirth != null)
                            {
                                SpouseDate = formData.SpouseDateOfBirth;
                            }
                            else
                            {
                                SpouseDate = DateTime.Now.ToString();
                            }

                            //var img1 = await Base64StringHandler.GetFormFileBase64StringAsync(formData.EmployeeImg);
                            await _employeeServices.AddEmployeeAsync(new Employee
                            {
                                PersonnelFileNumber = formData.PFNumber,
                                Salutation          = formData.Salutation,
                                FirstName           = formData.FirstName,
                                MiddleName          = formData.MiddleName,
                                MaidenName          = formData.MaidenName,
                                LastName            = formData.LastName,
                                DateOfBirth         = DateTime.Parse(formData.DateOfBirth),
                                Gender                = formData.Gender,
                                NationalityId         = formData.NationalityId,
                                Religion              = formData.Religion,
                                MaritalStatus         = formData.MaritalStatus,
                                Address               = formData.Address,
                                NationalIDNumber      = formData.NINNumber,
                                TINNumber             = formData.TINNumber,
                                NSSFNumber            = formData.NSSFNumber,
                                DistrictBirthId       = formData.DistrictBirthId,
                                DistrictResidenceId   = formData.DistrictResidenceId,
                                SupervisorId          = formData.SupervisorId,
                                JobTitle              = formData.JobTitle,
                                ContactPerson         = formData.ContactPerson,
                                ContactPersonTelphone = formData.ContactPersonTelephone,
                                IsActive              = formData.IsActive,
                                DepartmentId          = formData.DepartmentId,
                                BankId                = formData.BankId,
                                BankBranch            = formData.BankBranch,
                                BankAccountNumber     = formData.BankAccountNumber,
                                // BeneficiaryName = formData.BeneficiaryName,
                                //BeneficiaryContact = formData.BeneficiaryContact,
                                //RelationshipId = formData.RelationshipId,
                                PersonalMobileNumber    = formData.PersonalMobileNumber,
                                AlternativeMobileNumber = formData.AlternativeMobileNumber,
                                WorkMobileNumber        = formData.WorkMobileNumber,
                                DateTimeAdded           = DateTimeOffset.Now,
                                DateTimeModified        = DateTimeOffset.Now,
                                UserAccount             = User.Identity.Name,
                                SpouseName           = formData.SpouseName,
                                SpouseContactAddress = formData.SpouseContactAddress,
                                SpouseDateOfBirth    = DateTime.Parse(SpouseDate),
                                SpouseTelephone      = formData.SpouseTelephone,
                                EmployeeImage        = await Base64StringHandler.GetFormFileBase64StringAsync(formData.Img),
                                OtherReligion        = formData.OtherReligion,
                                OtherMaritialStatus  = formData.MaritalStatusOthers,
                                JoinDate             = DateTime.Parse(formData.DateOfJoin)

                                                       //SpouseBirthCertificateImage = await Base64StringHandler.GetFormFileBase64StringAsync(formData.SpouseBirthCertificate),
                                                       // EmployeeBirthCertificateImage = await Base64StringHandler.GetFormFileBase64StringAsync(formData.EmployeeBirthCertificate)
                            });

                            _logger.LogInformation($"Successfully add new employee record with PFNumber: {formData.PFNumber}; user={@User.Identity.Name.Substring(4)}");
                            TempData["Message"] = "Employee added successfully";
                            return(RedirectToAction("add"));
                        }
                    }
                }
            }
            catch (ApplicationException error)
            {
                _logger.LogError(
                    error,
                    $"FAIL: failed to register employee {formData.FirstName + ' ' + formData.LastName}. Internal Application Error.; user={@User.Identity.Name.Substring(4)}");
                ModelState.AddModelError("Employee", $"Failed to register employee {formData.FirstName + ' ' + formData.LastName}. Contact IT ServiceDesk for support thank you.");
            }
            await LoadSelectListsAsync();

            return(View(formData));
        }