/BC.Intercompany.Api/BC.Intercompany.Domain/DomainManager/UserManagementDomainManager.cs
C# | 448 lines | 314 code | 105 blank | 29 comment | 22 complexity | 0999bb0e825df01e1e6a26bbfe829428 MD5 | raw file
- using BC.Intercompany.Domain.DataManager;
- using BC.Intercompany.Models;
- using System;
- using System.IO;
- using System.Collections.Generic;
- using System.Linq;
- using System.Text;
- using System.Threading.Tasks;
- using Newtonsoft.Json;
- using Newtonsoft.Json.Linq;
- using System.Linq;
- using System.Xml;
- using System.Xml.Linq;
- using BC.Intercompany.Domain.Enums;
- using System.Runtime.Caching;
- using System.Configuration;
- namespace BC.Intercompany.Domain.DomainManager
- {
- public class UserManagementDomainManager : IUserManagementDomainManager
- {
- private readonly IUserManagementDataManager _userDataManager;
- private readonly ICommonDomainManager _commonDomainManager;
- private readonly ICompanyCodeDomainManager _companyCodeDomainManager;
- public UserManagementDomainManager(IUserManagementDataManager userDataManager,
- ICommonDomainManager commonDomainManager, ICompanyCodeDomainManager companyCodeDomainManager)
- {
- this._userDataManager = userDataManager;
- this._commonDomainManager = commonDomainManager;
- this._companyCodeDomainManager = companyCodeDomainManager;
- }
- public async Task<IEnumerable<MenuModel>> GetAllMenusByRoleId(int roleId)
- {
- return await this._userDataManager.GetAllMenusByRoleId(roleId);
- }
- public async Task<UserManagementModel> FindUserAsync(string userName, string password)
- {
- //Call GetUser1
- //Call IsAuthenticated
- //If authentical and not present in DB, insert into DB, else pick data from db
- var userManagementModel = new UserManagementModel();
- userManagementModel = this._userDataManager.GetUser1(userName, password);
- if (!this._userDataManager.IsAuthenticated(userName, password))
- {
- //The user does not exist in AD, login not possible
- return userManagementModel;
- }
- else
- {
- //The user exists in AD, check if user available in DB
- var userModel = new UserManagementModel();
- try
- {
- userModel = await this._userDataManager.FindUserOnlyAsync(userName, password);
- }
- catch (Exception ex)
- {
- }
- if (String.IsNullOrEmpty(userModel.UserName))
- {
- //User not available in DB; Insert the user with guest role.
- userModel = _userDataManager.LoadADUsersByEmailId(userManagementModel.Email);
- _userDataManager.AddNewUserToDatabase(userModel);
- }
- }
- return await this._userDataManager.FindUserAsync(userName, password);
- }
- public async Task<IEnumerable<AuthoriserDetailsModel>> GetAllLimitsForAuthorisers(long UserId)
- {
- return await this._userDataManager.GetAllLimitsForAuthorisers(UserId);
- }
- public async Task<bool> AddADUer(UserManagementModel newUser)
- {
- return await this._userDataManager.AddADUer(newUser);
- }
- public async Task<ResultModel> SaveAuthoriserImportMessage(string Type, string Message)
- {
- return await this._userDataManager.SaveAuthoriserImportMessage(Type, Message);
- }
- public ResultModel SaveAuthoriserErrorMessage(string Type, string Message)
- {
- return this._userDataManager.SaveAuthoriserErrorMessage(Type, Message);
- }
- public async Task<ResultModel> AddUserLoginRecord(UserManagementModel userModel)
- {
- return await this._userDataManager.AddUserLoginRecord(userModel);
- }
- public async Task<IEnumerable<UserManagementModel>> SearchADUser(string SearchUsername)
- {
- return await this._userDataManager.SearchADUser(SearchUsername);
- }
- public async Task<UserManagementModel> LoadBlankUserDetails()
- {
- UserManagementModel objUserManagement = new UserManagementModel();
- objUserManagement.UserRolesList = await this._commonDomainManager.GetAllRoles();
- objUserManagement.CountryList = await this._commonDomainManager.GetAllCountries();
- return objUserManagement;
- }
- public bool CheckUserEmail_Exists(string email)
- {
- return _userDataManager.CheckUserEmail_Exists(email);
- }
- public async Task<ResultModel> CreateUser(UserManagementModel userModel)
- {
- ResultModel resultModel = new ResultModel();
- bool isClientEmailExists = this.CheckUserEmail_Exists(userModel.Email);
- if (isClientEmailExists)
- {
- resultModel.IsSuccessful = false;
- resultModel.ResponseMessage =
- "User with this email already exists into the system. User details not saved.";
- // This messages should be come from some constants file or some xml file.. we will do it later..
- return resultModel;
- }
- else
- {
- return await this._userDataManager.CreateUser(userModel);
- }
- }
- public async Task<ResultModel> UpdateAuthoriser(string xmlStream)
- {
- ResultModel resultModel = new ResultModel();
- List<UserManagementModel> sapUserList = new List<UserManagementModel>();
- sapUserList = await this.GetUserListFromSAPStram(xmlStream);
- resultModel = await this._userDataManager.SAVESAPAuthorisers(sapUserList);
- int batchjobid = resultModel.Id;
- if (batchjobid > 0)
- {
- resultModel = await this._userDataManager.MarkBatchJobDataInvalid(batchjobid);
- resultModel = await this.UpdateAuthoriserUsersFromSAP(batchjobid);
- }
- return resultModel;
- }
- private async Task<ResultModel> UpdateAuthoriserUsersFromSAP(int BatchjobMainId)
- {
- ResultModel resultModel = new ResultModel();
- IEnumerable<UserManagementModel> BatchJobListData = new List<UserManagementModel>();
- IEnumerable<UserManagementModel> AuthotisrList = new List<UserManagementModel>();
- BatchJobListData = await this._commonDomainManager.GetAllValidAuthoriserImportDataByMainId(BatchjobMainId);
- foreach (var batJobData in BatchJobListData)
- {
- UserManagementModel objModel = new UserManagementModel();
- objModel = await this.IsUserDataAlreadyExists(batJobData.SAP_USER_ID, batJobData.COMPANY_CODE, batJobData.RELEASE_ROLE, batJobData.EMAIL_ID);
- if (objModel == null)
- {
- resultModel = await this._userDataManager.InsertDataForAuthoriser(batJobData.BatchJobId);
- }
- else if (!String.IsNullOrEmpty(objModel.COMPANY_CODE))
- {
- //SAP returns status as string. We have stored status as boolean in table. Either active or in active..
- objModel.USER_STATUS = objModel.USER_STATUS == "Active" ? "Active" : "Inactive";
- if (objModel.VALID_TO_DATE != batJobData.VALID_TO_DATE || objModel.USER_STATUS.ToUpper() != batJobData.USER_STATUS.ToUpper())
- {
-
- resultModel = await this._userDataManager.UpdateAuthoriserDetailsFromSAP(objModel.AuthoriserLimitId, batJobData.BatchJobId);
- }
- }
- }
- AuthotisrList = await this._userDataManager.GetAllAuthoriserDataForBatchJobProcess();
- foreach (var objAuthoriserData in AuthotisrList)
- {
- UserManagementModel objModel = new UserManagementModel();
- resultModel = await this._userDataManager.DeleteAuthorisersFromSAP(objAuthoriserData.AuthoriserLimitId, BatchjobMainId);
-
- }
-
- return resultModel;
- }
- private async Task<UserManagementModel> IsUserDataAlreadyExists(string SAPUserName, string CompanyCode, string Release_Role, string Email)
- {
- UserManagementModel objUserManageModel = new UserManagementModel();
- return await this._userDataManager.IsAuthoriserDataExists(SAPUserName, CompanyCode, Release_Role, Email);
- }
- private async Task<List<UserManagementModel>> GetUserListFromSAPStram(string xmlStream)
- {
- List<UserManagementModel> userModelList = new List<UserManagementModel>();
- ResultModel resultModel = new ResultModel();
- XmlDocument xmlDoc = new XmlDocument();
- xmlDoc.LoadXml(xmlStream);
- XmlNodeList nodeList = xmlDoc.DocumentElement.SelectNodes("LIST_OF_PO_APPROVERS/ITEM");
- foreach (XmlNode node in nodeList)
- {
- UserManagementModel sapUserModel = new UserManagementModel();
- sapUserModel.USER_FIRST_NAME = node.SelectSingleNode("USER_FIRST_NAME").InnerText;
- sapUserModel.USER_LAST_NAME = node.SelectSingleNode("USER_LAST_NAME").InnerText;
- sapUserModel.COMPANY_CODE = node.SelectSingleNode("COMPANY_CODE").InnerText;
- sapUserModel.RELEASE_ROLE = node.SelectSingleNode("RELEASE_ROLE").InnerText;
- sapUserModel.USER_STATUS = node.SelectSingleNode("USER_STATUS").InnerText;
- sapUserModel.EMAIL_ID = node.SelectSingleNode("EMAIL_ID").InnerText;
- sapUserModel.SAP_USER_ID = node.SelectSingleNode("SAP_USER_ID").InnerText;
- if (!string.IsNullOrEmpty(node.SelectSingleNode("VALID_TO_DATE").InnerText.ToString()))
- sapUserModel.VALID_TO_DATE = Convert.ToDateTime(node.SelectSingleNode("VALID_TO_DATE").InnerText);
- sapUserModel.ALIAS = node.SelectSingleNode("ALIAS").InnerText;
- userModelList.Add(sapUserModel);
- }
- return userModelList;
- }
- public static string StreamToString(Stream str)
- {
- using (BinaryReader rdr = new BinaryReader(str))
- {
- using (MemoryStream mem = new MemoryStream())
- {
- byte[] buf = new byte[256];
- int bt;
- int bts = 0;
- while ((bt = rdr.Read(buf, 0, 256)) > 0)
- {
- mem.Write(buf, 0, bt);
- bts += bt;
- }
- mem.Position = 0;
- byte[] bytes = new byte[bts];
- mem.Read(bytes, 0, bytes.Length);
- return Encoding.ASCII.GetString(bytes);
- }
- }
- }
- public async Task<UserDetailsModel> LoadCurrentUserDetails(long userId)
- {
- return await this._userDataManager.LoadCurrentUserDetails(userId);
- }
- /*
- //This code will be used once we integrate import of authorisers from SAP, I am keeping it commented for future use..- Shailesh Gaikwad
- public async Task<UserDetailsModel> SearchDbForUserByEmail(string email)
- {
-
- // If exists, return User details from Db
- return await _userDataManager.SearchDbForUserByEmail(email);
- }
- */
- public async Task<UserDetailsModel> SearchDbForUserByEmail(string email)
- {
- // Check if User exists in Db
- if (_userDataManager.IsUserFoundInDb(email))
- {
- // If exists, return User details from Db
- return await _userDataManager.SearchDbForUserByEmail(email);
- }
- // If User doesn't exist in Db
- else
- {
- // Check if User exists in AD
- if (_userDataManager.IsUserFoundInAd(email))
- {
- // If exists in AD, find the user and store in DB
- try
- {
- // load user model from AD
- var userManagementModel = _userDataManager.LoadADUsersByEmailId(email);
- // Add User to Db
- _userDataManager.AddNewUserToDatabase(userManagementModel);
- // return User details from Db
- return await _userDataManager.SearchDbForUserByEmail(email);
- }
- catch (Exception ex)
- {
- return new UserDetailsModel();
- }
- }
- // If User does not exist in AD
- else
- {
- // Return empty User details object
- return new UserDetailsModel();
- }
- }
- }
- //
- public async Task<ResultModel> ToggleUser(string guid, bool status, long ModifiedBy)
- {
- return await this._userDataManager.ToggleUser(guid, status, ModifiedBy);
- }
- public async Task<UserManagementModel> GetUserDetailsFromDB(string guid)
- {
- return await this._userDataManager.GetUserDetailsFromDB(guid);
- }
- public async Task<IEnumerable<AuthoriserDetailsModel>> GetAllAuthorizers()
- {
- IEnumerable<AuthoriserDetailsModel> AuthoriserList;
- MemoryCache memoryCache = MemoryCache.Default;
- var res = memoryCache.Get("AuthoriserList");
- if (res != null)
- {
- return (IEnumerable<AuthoriserDetailsModel>)res;
- }
- else
- {
- AuthoriserList = await _userDataManager.GetAllAuthorizers();
- memoryCache.Add("AuthoriserList", AuthoriserList, DateTimeOffset.UtcNow.AddMinutes(60));
- return AuthoriserList;
- }
- }
- public async Task<IEnumerable<AuthoriserDetailsModel>> GetAllAuthorizersBySearchString(String SearchString)
- {
- return await _userDataManager.GetAllAuthorizersBySearchString(SearchString);
- }
- public async Task<IEnumerable<UserSelectModel>> GetAllUsersForHomePageSearch()
- {
- return await _userDataManager.GetAllUsersForHomePageSearch();
- }
- public async Task<IEnumerable<AuthoriserDetailsModel>> GetSpecificAuthorizersList(long AuthoriserId)
- {
- var Authorizers = await this._userDataManager.GetSpecificAuthorizersList(AuthoriserId);
- return Authorizers;
- }
- public async Task<IEnumerable<UserManagementModel>> GetAllUsers(int userId)
- {
- return await this._userDataManager.GetAllUsers(userId);
- }
- public async Task<UserManagementModel> GetUserDetails(string guid)
- {
- UserManagementModel objUser = new UserManagementModel();
- if (!string.IsNullOrEmpty(guid.Trim()))
- objUser = await this._userDataManager.GetUserDetails(guid);
- objUser.UserRolesList = await this.GetUserRolesWithoutAuthorizerAndRequestor();
- objUser.CountryList = await this._commonDomainManager.GetAllCountries();
- return objUser;
- }
- private async Task<IEnumerable<UserRoleModel>> GetUserRolesWithoutAuthorizerAndRequestor()
- {
- List<UserRoleModel> userRoles = await this._commonDomainManager.GetAllRoles() as List<UserRoleModel>;
- // userRoles.RemoveAll(x => x.RoleId == (int)Roles.AUTHORISER);
- userRoles.RemoveAll(x => x.RoleId == (int)Roles.GUEST);
- userRoles.RemoveAll(x => x.RoleId == (int)Roles.ADMIN);
- return userRoles;
- }
- public async Task<ResultModel> EditUser(UserManagementModel userModel)
- {
- var result = new ResultModel();
- try
- {
- return await this._userDataManager.EditUser(userModel);
- }
- catch (Exception ex)
- {
- result.IsSuccessful = false;
- result.ResponseMessage = ex.Message;
- return result;
- }
- }
- public async Task<ResultModel> DeleteUser(Guid guid)
- {
- return await this._userDataManager.DeleteUser(guid);
- }
- }
- }