public async Task <EmployeeProfileAC> GetUserProfile(long userId)
        {
            EmployeeProfileAC responseAc = new EmployeeProfileAC();

            try
            {
                MstEmployee emp = await _dbTeleBilling_V01Context.MstEmployee.FindAsync(userId);

                EmployeeProfileDetailAC userProfile     = new EmployeeProfileDetailAC();
                EmployeeProfileDetailSP userProfileData = new EmployeeProfileDetailSP();

                SortedList sl = new SortedList();
                sl.Add("userId", userId);

                DataSet ds = _objDalmysql.GetDataSet("uspGetUserProfile", sl);
                if (ds != null)
                {
                    if (ds.Tables[0].Rows.Count > 0 && ds.Tables[0] != null)
                    {
                        userProfileData = _objDal.ConvertDataTableToGenericList <EmployeeProfileDetailSP>(ds.Tables[0]).FirstOrDefault();
                    }
                    if (ds.Tables.Count > 1 && ds.Tables[1].Rows.Count > 0 && ds.Tables[1] != null)
                    {
                        userProfileData.employeeTelephoneDetails = _objDal.ConvertDataTableToGenericList <EmployeeTelephoneDetailsAC>(ds.Tables[1]);
                    }
                }

                if (userProfileData.UserId > 0)
                {
                    userProfile = _mapper.Map <EmployeeProfileDetailAC>(userProfileData);

                    responseAc.Message         = _iStringConstant.DataFound;
                    responseAc.StatusCode      = Convert.ToInt16(EnumList.ResponseType.Success);
                    responseAc.UserProfileData = userProfile;
                    return(responseAc);
                }
                else
                {
                    responseAc.Message    = _iStringConstant.DataNotFound;
                    responseAc.StatusCode = Convert.ToInt16(EnumList.ResponseType.NotFound);
                    return(responseAc);
                }
            }
            catch (Exception e)
            {
                responseAc.Message    = "Error :" + e.Message;
                responseAc.StatusCode = Convert.ToInt16(EnumList.ResponseType.Error);
                return(responseAc);
            }
        }
        public async Task <ResponseAC> AddEmployee(MstEmployeeAC employee, long userId, string loginUserName)
        {
            ResponseAC responeAC = new ResponseAC();

            try
            {
                if (employee != null)
                {
                    string pfNumber = employee.EmpPFNumber;
                    if (!await checkPFNumberUnique(pfNumber, 0))
                    {
                        MstEmployee mstEmployee = new MstEmployee();
                        mstEmployee.FullName        = employee.FullName;
                        mstEmployee.ExtensionNumber = employee.ExtensionNumber;
                        mstEmployee.EmpPfnumber     = employee.EmpPFNumber;
                        mstEmployee.EmailId         = employee.EmailId;

                        string randomPassword = "******";
                        string randomPadding  = CreatePassword(4);
                        mstEmployee.Password     = randomPassword + randomPadding;
                        mstEmployee.RoleId       = employee.RoleId;
                        mstEmployee.IsActive     = true;
                        mstEmployee.IsSystemUser = true;

                        mstEmployee.DepartmentId      = employee.DepartmentId;
                        mstEmployee.Designation       = employee.Designation;
                        mstEmployee.Description       = employee.Description;
                        mstEmployee.BusinessUnitId    = employee.BusinessUnitId;
                        mstEmployee.CostCenterId      = employee.CostCenterId;
                        mstEmployee.CountryId         = employee.CountryId;
                        mstEmployee.IsPresidentOffice = employee.IsPresidentOffice;
                        if (employee.ManagerEmployee != null)
                        {
                            if (employee.ManagerEmployee.UserId > 0)
                            {
                                mstEmployee.LineManagerId = employee.ManagerEmployee.UserId;
                            }
                        }

                        if (mstEmployee.LineManagerId == 0)
                        {
                            responeAC.Message    = "Line Manager is not valid !";
                            responeAC.StatusCode = Convert.ToInt16(EnumList.ResponseType.Error);
                            return(responeAC);
                        }



                        mstEmployee.CreatedBy     = userId;
                        mstEmployee.CreatedDate   = DateTime.Now;
                        mstEmployee.TransactionId = _iLogManagement.GenerateTeleBillingTransctionID();

                        await _dbTeleBilling_V01Context.AddAsync(mstEmployee);

                        await _dbTeleBilling_V01Context.SaveChangesAsync();

                        responeAC.Message    = "Employee Added Successfully !";
                        responeAC.StatusCode = Convert.ToInt16(EnumList.ResponseType.Success);
                        await _iLogManagement.SaveAuditActionLog((int)EnumList.AuditLogActionType.AddEmployee, loginUserName, userId, "Employee(" + mstEmployee.FullName + ")", (int)EnumList.ActionTemplateTypes.Add, mstEmployee.UserId);

                        #region Send Email for Registration Confirmation
                        EmployeeProfileAC empDetail = new EmployeeProfileAC();
                        try
                        {
                            empDetail = await GetUserProfile(mstEmployee.UserId);

                            if (empDetail != null)
                            {
                                if (empDetail.UserProfileData.UserId > 0)
                                {
                                    Dictionary <string, string> replacement = new Dictionary <string, string>();
                                    replacement.Add("{newEmpName}", empDetail.UserProfileData.FullName);
                                    replacement.Add("{PFNumber}", empDetail.UserProfileData.EmpPFNumber);
                                    replacement.Add("{Email}", empDetail.UserProfileData.EmailId);
                                    replacement.Add("{Password}", empDetail.UserProfileData.Password);

                                    replacement.Add("{EmpDesignation}", empDetail.UserProfileData.Designation);
                                    replacement.Add("{Emplocation}", empDetail.UserProfileData.Country);
                                    replacement.Add("{lineManagerDepartment}", empDetail.UserProfileData.LineManager);
                                    replacement.Add("{EmpDepartment}", empDetail.UserProfileData.Department);
                                    replacement.Add("{EmpCostCenter}", empDetail.UserProfileData.CostCenter);
                                    replacement.Add("{EmpBusinessUnit}", empDetail.UserProfileData.BusinessUnit);
                                    bool   issent  = false;
                                    string EmailId = empDetail.UserProfileData.EmailId;

                                    if (!(string.IsNullOrEmpty(empDetail.UserProfileData.EmailId) || empDetail.UserProfileData.EmailId == "n/a"))
                                    {
                                        issent = await _iEmailSender.SendEmail(Convert.ToInt64(EnumList.EmailTemplateType.NewRegistrationConfirmation), replacement, employee.EmailId);
                                    }
                                    else
                                    {// get line manager email
                                        string linemanagerEmail = await _dbTeleBilling_V01Context.MstEmployee.Where(x => x.UserId == mstEmployee.LineManagerId).Select(x => x.EmailId).FirstOrDefaultAsync();

                                        issent = await _iEmailSender.SendEmail(Convert.ToInt64(EnumList.EmailTemplateType.NewRegistrationInYourTeam), replacement, linemanagerEmail);
                                    }

                                    if (!issent)
                                    {
                                        responeAC.StatusCode = Convert.ToInt32(EnumList.ResponseType.Success);
                                        responeAC.Message    = "Employee Added Successfully! We Could Not Sent Mail Confirmation.";
                                    }
                                }
                            }
                        }
                        catch (Exception e)
                        {
                            responeAC.StatusCode = Convert.ToInt32(EnumList.ResponseType.Success);
                            responeAC.Message    = "Employee Added Successfully! Error :" + e.Message + " We Could Not Sent Mail Confirmation.";
                        }

                        #endregion

                        return(responeAC);
                    }
                    else
                    {
                        responeAC.Message    = "PFNumber is already exists!";
                        responeAC.StatusCode = Convert.ToInt16(EnumList.ResponseType.Error);
                        return(responeAC);
                    }
                }
                else
                {
                    responeAC.Message    = _iStringConstant.DataNotFound;
                    responeAC.StatusCode = Convert.ToInt16(EnumList.ResponseType.Error);
                    return(responeAC);
                }
            }
            catch (Exception e)
            {
                responeAC.Message    = "Error : " + e.Message;
                responeAC.StatusCode = Convert.ToInt16(EnumList.ResponseType.Error);
                return(responeAC);
            }
        }