public async Task <IActionResult> AddDriverMasterAsync([FromBody] AddDriverMasterManagementAc addDriverMaster)
        {
            var user = await _userManager.FindByNameAsync(User.Identity.Name);

            return(Ok(await _driverMasterManagementRepository.AddDriverMasterAsync(addDriverMaster, user)));
        }
        /// <summary>
        /// Method to add driver - SS
        /// </summary>
        /// <param name="addDriverMaster">driver detail</param>
        /// <param name="loggedInUser">logged in user</param>
        /// <returns>response</returns>
        public async Task <DriverMasterManagementResponse> AddDriverMasterAsync(AddDriverMasterManagementAc addDriverMaster,
                                                                                ApplicationUser loggedInUser)
        {
            if (string.IsNullOrEmpty(addDriverMaster.Name) && string.IsNullOrEmpty(addDriverMaster.Name.Trim()))
            {
                return new DriverMasterManagementResponse()
                       {
                           HasError = true, Message = "Name can't be empty", ErrorType = DriverMasterManagementResponseType.Name
                       }
            }
            ;
            else if (string.IsNullOrEmpty(addDriverMaster.MobileNumber) && string.IsNullOrEmpty(addDriverMaster.MobileNumber.Trim()))
            {
                return new DriverMasterManagementResponse()
                       {
                           HasError = true, Message = "Mobile number can't be empty", ErrorType = DriverMasterManagementResponseType.MobileNumber
                       }
            }
            ;
            else if (string.IsNullOrEmpty(addDriverMaster.LicenseNumber) && string.IsNullOrEmpty(addDriverMaster.LicenseNumber.Trim()))
            {
                return new DriverMasterManagementResponse()
                       {
                           HasError = true, Message = "License number can't be empty", ErrorType = DriverMasterManagementResponseType.LicenseNumber
                       }
            }
            ;
            else if (string.IsNullOrEmpty(addDriverMaster.LicenseType) && string.IsNullOrEmpty(addDriverMaster.LicenseType.Trim()))
            {
                return new DriverMasterManagementResponse()
                       {
                           HasError = true, Message = "License type can't be empty", ErrorType = DriverMasterManagementResponseType.LicenseType
                       }
            }
            ;
            else if (string.IsNullOrEmpty(addDriverMaster.PlaceOfIssue) && string.IsNullOrEmpty(addDriverMaster.PlaceOfIssue.Trim()))
            {
                return new DriverMasterManagementResponse()
                       {
                           HasError = true, Message = "Place of issue can't be empty", ErrorType = DriverMasterManagementResponseType.PlaceOfIssue
                       }
            }
            ;
            else if (string.IsNullOrEmpty(addDriverMaster.IssuingAuthority) && string.IsNullOrEmpty(addDriverMaster.IssuingAuthority.Trim()))
            {
                return new DriverMasterManagementResponse()
                       {
                           HasError = true, Message = "Issuing authority can't be empty", ErrorType = DriverMasterManagementResponseType.IssuingAuthority
                       }
            }
            ;
            else
            {
                var user = await _userManager.FindByNameAsync(addDriverMaster.MobileNumber);

                var instituteId = await _instituteUserMappingHelperService.GetUserCurrentSelectedInstituteIdAsync(loggedInUser.Id, true);

                bool isUserExist = false;
                if (user != null)
                {
                    isUserExist = await _iMSDbContext.DriverMasters.AnyAsync(x => x.UserId == user.Id && x.InstituteId == instituteId);
                }
                if (isUserExist)
                {
                    return new DriverMasterManagementResponse()
                           {
                               HasError = true, Message = "Driver with this mobile number already exist", ErrorType = DriverMasterManagementResponseType.MobileNumber
                           }
                }
                ;
                else
                {
                    #region Add User
                    if (user == null)
                    {
                        var password = "******";
                        user = new ApplicationUser()
                        {
                            CreatedBy = loggedInUser.Id,
                            CreatedOn = DateTime.UtcNow,
                            UserName  = addDriverMaster.MobileNumber,
                            Name      = addDriverMaster.Name,
                            UpdatedOn = DateTime.UtcNow,
                            UpdatedBy = loggedInUser.Id
                        };
                        await _userManager.CreateAsync(user, password);
                    }
                    else
                    {
                        if (await _iMSDbContext.Institutes.AnyAsync(x => x.Id == instituteId && x.AdminId == user.Id))
                        {
                            return new DriverMasterManagementResponse()
                                   {
                                       HasError = true, ErrorType = DriverMasterManagementResponseType.MobileNumber, Message = "Monile number is already linked up with admin. Admin can't be driver"
                                   }
                        }
                        ;
                    }
                    _iMSDbContext.UserInstituteMappings.Add(new UserInstituteMapping()
                    {
                        CreatedOn   = DateTime.UtcNow,
                        InstituteId = instituteId,
                        IsActive    = false,
                        UserId      = user.Id
                    });

                    await _iMSDbContext.SaveChangesAsync();

                    #endregion

                    #region Add Driver
                    var driver = new DriverMaster()
                    {
                        Address          = addDriverMaster.Address,
                        CreatedOn        = DateTime.UtcNow,
                        DateOfBirth      = addDriverMaster.DateOfBirth,
                        DateOfIssue      = addDriverMaster.DateOfIssue,
                        InstituteId      = await _instituteUserMappingHelperService.GetUserCurrentSelectedInstituteIdAsync(loggedInUser.Id, true),
                        IsDriver         = addDriverMaster.IsDriver,
                        IssuingAuthority = addDriverMaster.IssuingAuthority,
                        LicenseNumber    = addDriverMaster.LicenseNumber,
                        LicenseType      = addDriverMaster.LicenseType,
                        MobileNumber     = addDriverMaster.MobileNumber,
                        Name             = addDriverMaster.Name,
                        PlaceOfIssue     = addDriverMaster.PlaceOfIssue,
                        Salary           = addDriverMaster.Salary,
                        UpdatedById      = loggedInUser.Id,
                        UpdatedOn        = DateTime.UtcNow,
                        ValidityTill     = addDriverMaster.ValidityTill,
                        UserId           = user.Id
                    };
                    _iMSDbContext.DriverMasters.Add(driver);
                    await _iMSDbContext.SaveChangesAsync();

                    #endregion
                    return(new DriverMasterManagementResponse()
                    {
                        HasError = false, Message = "Driver added successfully", Data = new { Id = driver.Id }
                    });
                }
            }
        }