//IDictionary<cor_useraccount, IdentityResult> result = new Dictionary<cor_useraccount, IdentityResult> // { // { user, await _userManager.CreateAsync(user, "Password@1") }, // }; private async Task <IdentityResult> AddUpdateAsUserAsync(cor_staff item, string userId, string username) { IdentityResult result = new IdentityResult(); var staff = _userManager.Users.FirstOrDefault(x => x.StaffId == item.StaffId); var user = new cor_useraccount(); if (staff == null) { user.PhoneNumber = item.PhoneNumber; user.Email = item.Email; user.IsFirstLoginAttempt = true; user.StaffId = item.StaffId; user.LastLoginDate = DateTime.Now; user.Deleted = false; user.CreatedOn = DateTime.Now; user.IsActive = true; user.UserName = username; user.Active = true; return(result = await _userManager.CreateAsync(user, "Password@1")); } var exUser = await _userManager.FindByIdAsync(staff.Id); if (exUser != null) { exUser.PhoneNumber = item.PhoneNumber; exUser.Email = item.Email; exUser.UpdatedOn = DateTime.Now; exUser.UserName = username; result = await _userManager.UpdateAsync(exUser); } return(result); }
public async Task <bool> AddUpdateStaffAsync(cor_staff model) { if (model.StaffId > 0) { var item = await _dataContext.cor_staff.FindAsync(model.StaffId); _dataContext.Entry(item).CurrentValues.SetValues(model); } else { await _dataContext.cor_staff.AddAsync(model); } return(await _dataContext.SaveChangesAsync() > 0); }
public async Task <UserDataResponseObj> FetchLoggedInUserDetailsAsync(string userId) { try { var currentUser = await _userManager?.FindByIdAsync(userId); if (currentUser == null) { return new UserDataResponseObj { Status = new APIResponseStatus { IsSuccessful = true } } } ; cor_staff currentUserStaffDetails = null; cor_companystructure currentUserCompanyStructDetails = null; UserDataResponseObj profile = null; List <string> activities = new List <string>(); var additionalActivityIds = _dataContext.cor_userroleadditionalactivity.Where(x => x.UserId == currentUser.Id).Select(x => x.ActivityId); var userRoleActivityIds = (from a in _dataContext.UserRoles join b in _dataContext.cor_userrole on a.RoleId equals b.Id join c in _dataContext.cor_userroleactivity on b.Id equals c.RoleId where a.UserId == currentUser.Id select c.ActivityId).ToList(); if (userRoleActivityIds.Count() > 0) { activities = _dataContext.cor_activity .Where(x => additionalActivityIds .Contains(x.ActivityId) || userRoleActivityIds .Contains(x.ActivityId)).Select(x => x.ActivityName.ToLower()).ToList(); } var userRoles = await _userManager.GetRolesAsync(currentUser); if (userRoles.Contains(StaticRoles.GODP)) { activities = await _dataContext.cor_activity.Where(x => x.Deleted == false).Select(s => s.ActivityName).ToListAsync(); } if (currentUser.StaffId > 0) { currentUserStaffDetails = await _dataContext.cor_staff.FirstOrDefaultAsync(z => z.StaffId == currentUser.StaffId); currentUserCompanyStructDetails = await _dataContext.cor_companystructure.SingleOrDefaultAsync(m => m.CompanyStructureId == currentUserStaffDetails.StaffOfficeId); if (currentUserCompanyStructDetails != null) { return(profile = new UserDataResponseObj { BranchId = currentUserCompanyStructDetails.CompanyStructureId, StaffId = currentUserStaffDetails.StaffId, BranchName = currentUserCompanyStructDetails.Name, CompanyId = currentUserCompanyStructDetails.CompanyStructureId, CompanyName = currentUserCompanyStructDetails.Name, CountryId = currentUserStaffDetails.CountryId, CustomerName = currentUserStaffDetails.FirstName + " " + currentUserStaffDetails.LastName, StaffName = currentUserStaffDetails.FirstName + " " + currentUserStaffDetails.LastName, LastLoginDate = DateTime.Now, UserId = currentUser.Id, UserName = currentUser.UserName, Roles = await _userManager.GetRolesAsync(currentUser), Activities = activities.Count() < 1 ? null : activities, Email = currentUser.Email, DepartmentId = currentUserStaffDetails.StaffOfficeId ?? 0, Status = new APIResponseStatus { IsSuccessful = true } }); } } profile = new UserDataResponseObj { LastLoginDate = DateTime.Now, UserId = currentUser.Id, UserName = currentUser.UserName, StaffId = currentUser.StaffId, Activities = activities.Count() < 1 ? null : activities, Roles = await _userManager.GetRolesAsync(currentUser), Email = currentUser.Email, Status = new APIResponseStatus { IsSuccessful = true } }; if (profile == null) { return(new UserDataResponseObj { Status = new APIResponseStatus { IsSuccessful = false, Message = new APIResponseMessage { FriendlyMessage = "Unable to fetch user details" } } }); } return(profile); } catch (Exception ex) { #region Log error var errorCode = ErrorID.Generate(4); _logger.Error($"ErrorID : FetchLoggedInUserDetailsAsync{errorCode} Ex : {ex?.Message ?? ex?.InnerException?.Message} ErrorStack : {ex?.StackTrace}"); return(new UserDataResponseObj { Status = new APIResponseStatus { IsSuccessful = false, Message = new APIResponseMessage { FriendlyMessage = "Error occured!! Please tyr again later", MessageId = errorCode, TechnicalMessage = $"ErrorID : FetchLoggedInUserDetailsAsync{errorCode} Ex : {ex?.Message ?? ex?.InnerException?.Message} ErrorStack : {ex?.StackTrace}" } } }); #endregion } }
public async Task <bool> UploadStaffAsync(List <StaffObj> staffs, string createdBy) { try { List <cor_staff> structures = new List <cor_staff>(); if (staffs.Count > 0) { foreach (var item in staffs) { int jobTitleId = 0; int stateId = 0; int countryId = 0; int staffOfficeId = 0; if (item.JobTitleName != null) { jobTitleId = _dataContext.cor_jobtitles.FirstOrDefault(x => x.Name.ToLower().Contains(item.JobTitleName.ToLower())).JobTitleId; if (jobTitleId < 1) { throw new Exception("Invalid Selection", new Exception("Please select a valid Jobtitle")); } } if (item.CountryName != null) { countryId = _dataContext.cor_country.FirstOrDefault(x => x.CountryName.ToLower().Contains(item.CountryName.ToLower())).CountryId; if (countryId < 0) { throw new Exception("Invalid Selection", new Exception("Please select a valid country name")); } } if (item.StateName != null) { stateId = _dataContext.cor_state.FirstOrDefault(x => x.StateName.ToLower().Contains(item.StateName.ToLower())).StateId; if (stateId < 0) { throw new Exception("Invalid Selection", new Exception("Please select a valid state name")); } } if (item.StaffOfficeName != null) { staffOfficeId = _dataContext.cor_companystructure.FirstOrDefault(x => x.Name.ToLower().Contains(item.StaffOfficeName.ToLower())).CompanyStructureId; if (staffOfficeId < 0) { throw new Exception("Invalid Selection", new Exception("Please select a valid office or company")); } } if (!await StaffCodeExistAsync(item.StaffCode)) { var structure = new cor_staff { StaffCode = item.StaffCode, FirstName = item.FirstName, LastName = item.LastName, MiddleName = item.MiddleName, JobTitle = jobTitleId, PhoneNumber = item.PhoneNumber, Email = item.Email, Address = item.Address, DateOfBirth = item.DateOfBirth, Gender = item.Gender == "Male" ? "1" : "2", StateId = stateId, CountryId = countryId, StaffOfficeId = staffOfficeId, AccessLevel = null, StaffLimit = item.StaffLimit, CreatedBy = createdBy, CreatedOn = DateTime.Now, Active = true, Deleted = false, }; structures.Add(structure); } } _dataContext.cor_staff.AddRange(structures); } bool response = false; try { response = _dataContext.SaveChanges() > 0; if (response) { try { foreach (var item in structures) { var staff = _dataContext.cor_staff.Where(x => x.StaffCode == item.StaffCode).FirstOrDefault(); if (staff != null) { var user = new cor_useraccount { UserName = item.FirstName.ToLower(), StaffId = staff.StaffId, Email = item.Email, EmailConfirmed = true, PhoneNumber = item.PhoneNumber, PhoneNumberConfirmed = true, TwoFactorEnabled = false, LockoutEnabled = true, AccessFailedCount = 0, IsFirstLoginAttempt = true, SecurityAnswer = "", NextPasswordChangeDate = DateTime.Now.AddDays(30), IsActive = true, CreatedBy = staff.CreatedBy, CreatedOn = DateTime.Now, Active = true, Deleted = false, }; var created = await _userManager.CreateAsync(user, "Password@1"); } } } catch (Exception ex) { throw new Exception(ex.Message); } } } catch (Exception ex) { throw new Exception(ex.Message); } return(response); } catch (Exception ex) { throw new Exception(ex.Message); } }
public async Task <FileUploadRespObj> Handle(UploadStaffCommand request, CancellationToken cancellationToken) { var response = new FileUploadRespObj { Status = new APIResponseStatus { IsSuccessful = false, Message = new APIResponseMessage() } }; var _StaffFromRepo = await _repo.GetAllStaffAsync(); var _Jobtitles = await _commonRepo.GetAllJobTitleAsync(); var _Countries = await _commonRepo.GetAllCountry(); var _States = await _commonRepo.GetAllStateAsync(); var _CompanyStructures = await _companyRepository.GetAllCompanyStructureAsync(); var loggedInUserId = _httpContextAccessor.HttpContext.User?.FindFirst(x => x.Type == "userId").Value; var loggedInUser = await _userManager.FindByIdAsync(loggedInUserId); List <cor_staff> _StaffObject = new List <cor_staff>(); List <StaffObj> StaffRecord = new List <StaffObj>(); try { var files = _httpContextAccessor.HttpContext.Request.Form.Files; var byteList = new List <byte[]>(); foreach (var fileBit in files) { if (fileBit.Length > 0) { using (var ms = new MemoryStream()) { await fileBit.CopyToAsync(ms); byteList.Add(ms.ToArray()); } } } int ExcelLineNumber = 0; ExcelPackage.LicenseContext = LicenseContext.NonCommercial; if (byteList.Count() > 0) { foreach (var byterow in byteList) { MemoryStream stream = new MemoryStream(byterow); using (ExcelPackage excelPackage = new ExcelPackage(stream)) { try { ExcelWorksheet workSheet = excelPackage.Workbook.Worksheets[0]; int totalRows = workSheet.Dimension.Rows; int totalColumns = workSheet.Dimension.Columns; if (totalColumns != 18) { response.Status.Message.FriendlyMessage = "27 Columns Expected"; return(response); } for (int i = 2; i <= totalRows; i++) { var item = new StaffObj(); item.ExcelLineNumber = i; item.StaffCode = workSheet.Cells[i, 1]?.Value != null ? workSheet.Cells[i, 1]?.Value.ToString() : string.Empty; item.FirstName = workSheet.Cells[i, 2]?.Value != null ? workSheet.Cells[i, 2]?.Value.ToString() : string.Empty; item.LastName = workSheet.Cells[i, 3]?.Value != null ? workSheet.Cells[i, 3]?.Value.ToString() : string.Empty; item.MiddleName = workSheet.Cells[i, 4]?.Value != null ? workSheet.Cells[i, 4]?.Value.ToString() : string.Empty; item.Gender = workSheet.Cells[i, 5]?.Value != null ? workSheet.Cells[i, 5]?.Value.ToString() : string.Empty; item.JobTitleName = workSheet.Cells[i, 6]?.Value != null ? workSheet.Cells[i, 6]?.Value.ToString() : string.Empty; item.StaffOfficeName = workSheet.Cells[i, 7]?.Value != null ? workSheet.Cells[i, 7]?.Value.ToString() : string.Empty; item.PhoneNumber = workSheet.Cells[i, 8]?.Value != null ? workSheet.Cells[i, 8]?.Value.ToString() : string.Empty; item.Email = workSheet.Cells[i, 9]?.Value != null ? workSheet.Cells[i, 9]?.Value.ToString() : string.Empty; item.DateOfBirth = workSheet.Cells[i, 10]?.Value != null?DateTime.Parse(workSheet.Cells[i, 10]?.Value.ToString()) : DateTime.Now; item.Address = workSheet.Cells[i, 11]?.Value != null ? workSheet.Cells[i, 11]?.Value.ToString() : string.Empty; item.CountryName = workSheet.Cells[i, 12]?.Value != null ? workSheet.Cells[i, 12]?.Value.ToString() : string.Empty; item.StateName = workSheet.Cells[i, 13]?.Value != null ? workSheet.Cells[i, 13]?.Value.ToString() : string.Empty; item.StaffLimit = workSheet.Cells[i, 14]?.Value != null?Convert.ToDecimal(workSheet.Cells[i, 14]?.Value.ToString()) : 0; item.AccessNames = workSheet.Cells[i, 15]?.Value != null ? workSheet.Cells[i, 15]?.Value.ToString() : string.Empty; item.UserAccessLevelsNames = workSheet.Cells[i, 16]?.Value != null ? workSheet.Cells[i, 16]?.Value.ToString() : string.Empty; item.ExcelUserRoleNames = workSheet.Cells[i, 17]?.Value != null ? workSheet.Cells[i, 17]?.Value.ToString() : string.Empty; item.UserName = workSheet.Cells[i, 18]?.Value != null ? workSheet.Cells[i, 18]?.Value.ToString() : string.Empty; item.IsHRAdmin = workSheet.Cells[i, 19]?.Value != null?bool.Parse(workSheet.Cells[i, 19]?.Value.ToString()) : false; item.PPEAdmin = workSheet.Cells[i, 20]?.Value != null?bool.Parse(workSheet.Cells[i, 20]?.Value.ToString()) : false; item.IsPandPAdmin = workSheet.Cells[i, 21]?.Value != null?bool.Parse(workSheet.Cells[i, 21]?.Value.ToString()) : false; item.IsCreditAdmin = workSheet.Cells[i, 22]?.Value != null?bool.Parse(workSheet.Cells[i, 22]?.Value.ToString()) : false; item.IsInvestorFundAdmin = workSheet.Cells[i, 23]?.Value != null?bool.Parse(workSheet.Cells[i, 23]?.Value.ToString()) : false; item.IsDepositAdmin = workSheet.Cells[i, 24]?.Value != null?bool.Parse(workSheet.Cells[i, 24]?.Value.ToString()) : false; item.IsTreasuryAdmin = workSheet.Cells[i, 25]?.Value != null?bool.Parse(workSheet.Cells[i, 25]?.Value.ToString()) : false; item.IsExpenseManagementAdmin = workSheet.Cells[i, 26]?.Value != null?bool.Parse(workSheet.Cells[i, 26]?.Value.ToString()) : false; item.IsFinanceAdmin = workSheet.Cells[i, 27]?.Value != null?bool.Parse(workSheet.Cells[i, 27]?.Value.ToString()) : false; StaffRecord.Add(item); } } catch (Exception ex) { throw ex; } finally { excelPackage.Dispose(); } } } } var staffCodeRetry = 1; if (StaffRecord.Count > 0) { foreach (var item in StaffRecord) { staffCodeRetry = staffCodeRetry + 1; int jobTitleId = 0; int stateId = 0; int countryId = 0; int staffOfficeId = 0; var staffCode = string.Empty; var accessLevelIds = new List <int>(); if (!string.IsNullOrEmpty(item.JobTitleName)) { jobTitleId = _Jobtitles.FirstOrDefault(x => x.Name.ToLower().Contains(item.JobTitleName.ToLower())).JobTitleId; if (jobTitleId < 1) { response.Status.Message.FriendlyMessage = $"Invalid Jobtitle {item.JobTitleName} on line {item.ExcelLineNumber}"; return(response); } } else { response.Status.Message.FriendlyMessage = $"Jobtitle cannot be empty on line {item.ExcelLineNumber}"; return(response); } if (!string.IsNullOrEmpty(item.CountryName)) { countryId = _Countries.FirstOrDefault(x => x.CountryName.ToLower().Contains(item.CountryName.ToLower())).CountryId; if (countryId < 0) { response.Status.Message.FriendlyMessage = $"Could not find {item.CountryName} on line {item.ExcelLineNumber}"; return(response); } } else { response.Status.Message.FriendlyMessage = $"Country cannot be empty on line {item.ExcelLineNumber}"; return(response); } if (!string.IsNullOrEmpty(item.StateName)) { stateId = _States.FirstOrDefault(x => x.StateName.ToLower().Contains(item.StateName.ToLower())).StateId; if (stateId < 0) { response.Status.Message.FriendlyMessage = $"Invalid state name {item.StateName} on line {item.ExcelLineNumber}"; return(response); } } else { response.Status.Message.FriendlyMessage = $"State cannot be empty on line {item.ExcelLineNumber}"; return(response); } if (!string.IsNullOrEmpty(item.StaffOfficeName)) { staffOfficeId = _CompanyStructures.FirstOrDefault(x => x.Name.ToLower().Trim() == item.StaffOfficeName.ToLower().Trim())?.CompanyStructureId ?? 0; if (staffOfficeId < 0) { response.Status.Message.FriendlyMessage = $"Invalid office or company on line {item.ExcelLineNumber}"; return(response); } } else { response.Status.Message.FriendlyMessage = $"Office cannot be empty on line {item.ExcelLineNumber}"; return(response); } if (string.IsNullOrEmpty(item.StaffCode)) { staffCode = StaffCode.Generate(_dataContext.cor_staff.Where(s => s.Deleted == false).OrderBy(d => d.StaffId).LastOrDefault().StaffId + staffCodeRetry); } else { staffCode = item.StaffCode; } if (string.IsNullOrEmpty(item.FirstName)) { response.Status.Message.FriendlyMessage = $"Empty cell on First Name Column Detected on line {item.ExcelLineNumber}"; return(response); } if (string.IsNullOrEmpty(item.LastName)) { response.Status.Message.FriendlyMessage = $"Empty cell on LastName Column Detected on line {item.ExcelLineNumber}"; return(response); } if (string.IsNullOrEmpty(item.MiddleName)) { response.Status.Message.FriendlyMessage = $"Empty cell on Middle Name Column Detected on line {item.ExcelLineNumber}"; return(response); } if (string.IsNullOrEmpty(item.PhoneNumber)) { response.Status.Message.FriendlyMessage = $"Empty cell on Phone Number Column Detected on line {item.ExcelLineNumber}"; return(response); } if (string.IsNullOrEmpty(item.Gender)) { response.Status.Message.FriendlyMessage = $"Empty cell on Gender Column Detected on line {item.ExcelLineNumber}"; return(response); } if (string.IsNullOrEmpty(item.Email)) { response.Status.Message.FriendlyMessage = $"Empty cell on Email Column Detected on line {item.ExcelLineNumber}"; return(response); } else { try { MailAddress m = new MailAddress(item.Email); } catch (FormatException) { response.Status.Message.FriendlyMessage = $"Invalid Email Detected on line {item.ExcelLineNumber}"; return(response); } } if (item.DateOfBirth != null) { if (item.DateOfBirth.Value.Year >= DateTime.Today.Year) { response.Status.Message.FriendlyMessage = $"Invalid Date of birth detected on line {item.ExcelLineNumber}"; return(response); } } else { response.Status.Message.FriendlyMessage = $"Empty cell on Date of birth detected on line {item.ExcelLineNumber}"; return(response); } if (string.IsNullOrEmpty(item.Address)) { response.Status.Message.FriendlyMessage = $"Empty cell on Address Column Detected on line {item.ExcelLineNumber}"; return(response); } if (item.StaffLimit < 1) { item.StaffLimit = 0; } if (string.IsNullOrEmpty(item.AccessNames)) { response.Status.Message.FriendlyMessage = $"Empty cell on Access Column Detected on line {item.ExcelLineNumber}"; return(response); } else { var acc = _dataContext.cor_companystructuredefinition.FirstOrDefault(a => a.Definition.Trim().ToLower() == item.AccessNames.Trim().ToLower()); if (acc == null) { response.Status.Message.FriendlyMessage = $"Invalid access detected on column Access on line {item.ExcelLineNumber}"; return(response); } item.AccessLevelId = acc.StructureDefinitionId; } if (string.IsNullOrEmpty(item.UserAccessLevelsNames)) { response.Status.Message.FriendlyMessage = $"Empty cell on Access Levels Column Detected on line {item.ExcelLineNumber}"; return(response); } else { var accessLevels = item.UserAccessLevelsNames.Split(',').ToList(); if (!_dataContext.cor_companystructure.Any(a => accessLevels.Contains(a.Name))) { response.Status.Message.FriendlyMessage = $"Invalid access level detected on column Access Levels on line {item.ExcelLineNumber}"; return(response); } item.UserAccessLevels = _dataContext.cor_companystructure.Where(s => accessLevels.Contains(s.Name)).Select(w => w.CompanyStructureId).ToList(); } if (string.IsNullOrEmpty(item.ExcelUserRoleNames)) { response.Status.Message.FriendlyMessage = $"Empty cell on Roles Column Detected on line {item.ExcelLineNumber}"; return(response); } else { var roleNames = item.ExcelUserRoleNames.Split(',').ToList(); if (!_roleManager.Roles.Any(a => roleNames.Contains(a.Name))) { response.Status.Message.FriendlyMessage = $"Invalid Role name detected on column Roles on line {item.ExcelLineNumber}"; return(response); } item.UserRoleNames = _roleManager.Roles.Where(s => roleNames.Contains(s.Name)).Select(w => w.Name).ToList(); } if (string.IsNullOrEmpty(item.UserName)) { response.Status.Message.FriendlyMessage = $"Empty cell on UserName Column Detected on line {item.ExcelLineNumber}"; return(response); } cor_staff existingStaffDetail = new cor_staff(); existingStaffDetail = _dataContext.cor_staff?.FirstOrDefault(s => s.StaffCode.Trim().ToLower() == staffCode.Trim().ToLower() && s.Email.Trim().ToLower() == item.Email.Trim().ToLower()) ?? new cor_staff(); Console.WriteLine(existingStaffDetail); if (existingStaffDetail.StaffId < 1) { existingStaffDetail = _dataContext.cor_staff.FirstOrDefault(s => s.StaffCode.Trim().ToLower() == staffCode.Trim().ToLower()); } if (existingStaffDetail != null) { existingStaffDetail.StaffCode = staffCode; existingStaffDetail.FirstName = item.FirstName; existingStaffDetail.LastName = item.LastName; existingStaffDetail.MiddleName = item.MiddleName; existingStaffDetail.JobTitle = jobTitleId; existingStaffDetail.PhoneNumber = item.PhoneNumber; existingStaffDetail.Email = item.Email; existingStaffDetail.Address = item.Address; existingStaffDetail.Photo = null; existingStaffDetail.DateOfBirth = item.DateOfBirth; existingStaffDetail.Gender = item.Gender == "Male" ? "1" : "2"; existingStaffDetail.StateId = stateId; existingStaffDetail.CountryId = countryId; existingStaffDetail.StaffOfficeId = staffOfficeId; existingStaffDetail.AccessLevel = item.AccessLevelId; existingStaffDetail.StaffLimit = item.StaffLimit; existingStaffDetail.IsHRAdmin = item.IsHRAdmin; existingStaffDetail.PPEAdmin = item.PPEAdmin; existingStaffDetail.IsPandPAdmin = item.IsPandPAdmin; existingStaffDetail.IsCreditAdmin = item.IsCreditAdmin; existingStaffDetail.IsInvestorFundAdmin = item.IsInvestorFundAdmin; existingStaffDetail.IsDepositAdmin = item.IsDepositAdmin; existingStaffDetail.IsTreasuryAdmin = item.IsTreasuryAdmin; existingStaffDetail.IsExpenseManagementAdmin = item.IsExpenseManagementAdmin; existingStaffDetail.IsFinanceAdmin = item.IsFinanceAdmin; await _repo.AddUpdateStaffAsync(existingStaffDetail); var user = _userManager.Users.FirstOrDefault(s => s.StaffId == existingStaffDetail.StaffId); var createdAsUser = await AddUpdateAsUserAsync(existingStaffDetail, user.Id, item.UserName); if (!createdAsUser.Succeeded) { response.Status.Message.FriendlyMessage = $"{createdAsUser.Errors.FirstOrDefault().Description} on line {item.ExcelLineNumber}"; return(response); } var addUpdateUserRole = await AddUpdateUserRolesAsync(item.UserRoleNames, user); if (!addUpdateUserRole.Succeeded) { response.Status.Message.FriendlyMessage = $"{addUpdateUserRole.Errors.FirstOrDefault().Description} on line {item.ExcelLineNumber}"; return(response); } await AddUpdateAccessLevelsAsync(item.UserAccessLevels, user.Id); } else { var newStaffDetail = new cor_staff(); newStaffDetail.StaffCode = staffCode; newStaffDetail.FirstName = item.FirstName; newStaffDetail.LastName = item.LastName; newStaffDetail.MiddleName = item.MiddleName; newStaffDetail.JobTitle = jobTitleId; newStaffDetail.PhoneNumber = item.PhoneNumber; newStaffDetail.Email = item.Email; newStaffDetail.Address = item.Address; newStaffDetail.Photo = null; newStaffDetail.DateOfBirth = item.DateOfBirth; newStaffDetail.Gender = item.Gender == "Male" ? "1" : "2"; newStaffDetail.StateId = stateId; newStaffDetail.CountryId = countryId; newStaffDetail.StaffOfficeId = staffOfficeId; newStaffDetail.AccessLevel = item.AccessLevelId; newStaffDetail.StaffLimit = item.StaffLimit; newStaffDetail.IsHRAdmin = item.IsHRAdmin; newStaffDetail.PPEAdmin = item.PPEAdmin; newStaffDetail.IsPandPAdmin = item.IsPandPAdmin; newStaffDetail.IsCreditAdmin = item.IsCreditAdmin; newStaffDetail.IsInvestorFundAdmin = item.IsInvestorFundAdmin; newStaffDetail.IsDepositAdmin = item.IsDepositAdmin; newStaffDetail.IsTreasuryAdmin = item.IsTreasuryAdmin; newStaffDetail.IsExpenseManagementAdmin = item.IsExpenseManagementAdmin; newStaffDetail.IsFinanceAdmin = item.IsFinanceAdmin; using (var _trans = await _dataContext.Database.BeginTransactionAsync()) { try { await _repo.AddUpdateStaffAsync(newStaffDetail); var createdAsUser = await AddUpdateAsUserAsync(newStaffDetail, null, item.UserName); if (!createdAsUser.Succeeded) { await _trans.RollbackAsync(); response.Status.Message.FriendlyMessage = createdAsUser.Errors.FirstOrDefault().Description; if (createdAsUser.Errors.Any(s => s.Code == "DuplicateUserName")) { response.Status.Message.FriendlyMessage = $"{createdAsUser.Errors.FirstOrDefault().Description} on line {item.ExcelLineNumber}"; } return(response); } var user = _userManager.Users.Where(s => s.Email.Trim().ToLower() == item.Email.Trim().ToLower()).ToList(); if (user.Count() > 1) { await _trans.RollbackAsync(); response.Status.Message.FriendlyMessage = $"Duplicate Email Detected on line {item.ExcelLineNumber}"; return(response); } var addUpdateUserRole = await AddUpdateUserRolesAsync(item.UserRoleNames, user.FirstOrDefault()); if (!addUpdateUserRole.Succeeded) { await _trans.RollbackAsync(); response.Status.Message.FriendlyMessage = $"{addUpdateUserRole.Errors.FirstOrDefault().Description} on line {item.ExcelLineNumber}"; return(response); } await AddUpdateAccessLevelsAsync(item.UserAccessLevels, user.FirstOrDefault().Id); await _trans.CommitAsync(); } catch (Exception ex) { await _trans.RollbackAsync(); response.Status.Message.FriendlyMessage = $"{ex?.Message ?? ex.InnerException?.Message} on line {item.ExcelLineNumber}"; response.Status.Message.TechnicalMessage = ex.ToString(); return(response); } finally { await _trans.DisposeAsync(); } } } } response.Status.IsSuccessful = true; response.Status.Message.FriendlyMessage = "Successful"; return(response); } } catch (Exception ex) { Console.WriteLine(ex.Message ?? ex.InnerException.Message); response.Status.Message.FriendlyMessage = ex.Message; return(response); } response.Status.IsSuccessful = true; response.Status.Message.FriendlyMessage = "Successful"; return(response); }
public async Task <StaffRegRespObj> Handle(UpdateStaffCommand request, CancellationToken cancellationToken) { var response = new StaffRegRespObj { Status = new APIResponseStatus { IsSuccessful = false, Message = new APIResponseMessage() } }; try { var userFromRepoExist = await _userManager.Users.FirstOrDefaultAsync(x => x.UserName.Trim().ToLower() == request.UserName.Trim().ToLower()); var actionTaken = request.StaffId > 0 ? "updated" : "created"; String tempUserId = String.Empty; if (request.StaffId < 1) { if (userFromRepoExist != null) { response.Status.Message.FriendlyMessage = "Username Already assigned to a staff"; return(response); } } if (request.StaffId < 1) { if (await _userManager.Users.AnyAsync(x => x.Email.Trim().ToLower() == request.Email.Trim().ToLower())) { response.Status.Message.FriendlyMessage = "Staff email already belongs to a user"; return(response); } } IdentityResult AddUpdateAsUser = new IdentityResult(); using (var _transaction = await _dataContext.Database.BeginTransactionAsync()) { var stCode = StaffCode.Generate(_dataContext.cor_staff.Where(s => s.Deleted == false).OrderBy(d => d.StaffId).LastOrDefault()?.StaffId ?? 1); try { var stf = new cor_staff(); stf.AccessLevel = request.AccessLevel; stf.Address = request.Address; stf.CountryId = request.CountryId; stf.PhoneNumber = request.PhoneNumber; stf.Email = request.Email; stf.StateId = request.StateId; stf.DateOfBirth = request.DateOfBirth; stf.FirstName = request.FirstName; stf.MiddleName = request.MiddleName; stf.Gender = request.Gender; stf.JobTitle = request.JobTitle; stf.LastName = request.LastName; stf.Photo = request.Photo ?? null; stf.StaffCode = request.StaffId > 0 ? request.StaffCode : stCode; stf.StaffLimit = request.StaffLimit; stf.StaffOfficeId = request.StaffOfficeId; stf.StaffId = request.StaffId; stf.IsHRAdmin = request.IsHRAdmin; stf.PPEAdmin = request.PPEAdmin; stf.IsPandPAdmin = request.IsPandPAdmin; stf.IsCreditAdmin = request.IsCreditAdmin; stf.IsInvestorFundAdmin = request.IsInvestorFundAdmin; stf.IsDepositAdmin = request.IsDepositAdmin; stf.IsTreasuryAdmin = request.IsTreasuryAdmin; stf.IsExpenseManagementAdmin = request.IsExpenseManagementAdmin; stf.IsFinanceAdmin = request.IsFinanceAdmin; var staffIsCreated = await _adminRepo.AddUpdateStaffAsync(stf); if (staffIsCreated) { var user = new cor_useraccount(); user.PhoneNumber = request.PhoneNumber; user.UserName = request.UserName; user.Email = request.Email; user.IsFirstLoginAttempt = true; user.Active = true; user.Deleted = false; user.CreatedBy = "admin"; user.CreatedOn = DateTime.Now; user.StaffId = stf.StaffId; user.IsActive = request.UserStatus.Trim().ToLower() == "true"? true : false; user.LastLoginDate = DateTime.Now; if (userFromRepoExist == null) { AddUpdateAsUser = await _userManager.CreateAsync(user, "Password@1"); tempUserId = user.Id; if (!AddUpdateAsUser.Succeeded) { await _transaction.RollbackAsync(); response.Status.Message.FriendlyMessage = AddUpdateAsUser.Errors.FirstOrDefault().Description; return(response); } } else { cor_useraccount alreadExistingUser = new cor_useraccount(); alreadExistingUser = await _userManager.FindByNameAsync(userFromRepoExist.UserName); alreadExistingUser.PhoneNumber = request.PhoneNumber; alreadExistingUser.UserName = request.UserName; alreadExistingUser.Email = request.Email; alreadExistingUser.IsFirstLoginAttempt = false; alreadExistingUser.StaffId = stf.StaffId; tempUserId = alreadExistingUser.Id; AddUpdateAsUser = await _userManager.UpdateAsync(alreadExistingUser); if (!AddUpdateAsUser.Succeeded) { await _transaction.RollbackAsync(); response.Status.Message.FriendlyMessage = AddUpdateAsUser.Errors.FirstOrDefault().Description; return(response); } } if (AddUpdateAsUser.Succeeded) { if (request.UserAccessLevels.Length > 0) { List <cor_useraccess> useAccesses = new List <cor_useraccess>(); foreach (var acessLevelId in request.UserAccessLevels) { var access = new cor_useraccess(); access.AccessLevelId = acessLevelId; access.UserId = tempUserId; useAccesses.Add(access); } await _adminRepo.AddUpdateUseraccessAsync(useAccesses); } if (request.UserRoleNames.Length > 0) { if (userFromRepoExist != null) { var removed = await _userManager.RemoveFromRolesAsync(userFromRepoExist, await _userManager.GetRolesAsync(userFromRepoExist)); if (!removed.Succeeded) { await _transaction.RollbackAsync(); response.Status.Message.FriendlyMessage = removed.Errors.FirstOrDefault().Description; return(response); } var updated = await _userManager.AddToRolesAsync(userFromRepoExist, request.UserRoleNames); if (!updated.Succeeded) { await _transaction.RollbackAsync(); response.Status.Message.FriendlyMessage = updated.Errors.FirstOrDefault().Description; return(response); } } else { var UpdateUserRoles = await _userManager.AddToRolesAsync(user, request.UserRoleNames); if (!UpdateUserRoles.Succeeded) { await _transaction.RollbackAsync(); response.Status.Message.FriendlyMessage = UpdateUserRoles.Errors.FirstOrDefault().Description; return(response); } } } await SendStaffAccountDetailMail(request.Email, request.UserName, request.FirstName + " " + request.LastName, actionTaken); await _transaction.CommitAsync(); } } } catch (Exception ex) { await _transaction.RollbackAsync(); #region Log error to file var errorCode = ErrorID.Generate(4); _logger.Error($"ErrorID : {errorCode} Ex : {ex?.Message ?? ex?.InnerException?.Message} ErrorStack : {ex?.StackTrace}"); return(new StaffRegRespObj { Status = new APIResponseStatus { IsSuccessful = false, Message = new APIResponseMessage { FriendlyMessage = ex?.Message, MessageId = errorCode, TechnicalMessage = $"ErrorID : {errorCode} Ex : {ex?.Message ?? ex?.InnerException?.Message} ErrorStack : {ex?.StackTrace}" } } }); #endregion } finally { await _transaction.DisposeAsync(); } return(new StaffRegRespObj { Status = new APIResponseStatus { IsSuccessful = true, Message = new APIResponseMessage { FriendlyMessage = $"Staff Details have successfully been {actionTaken}", } } }); } } catch (Exception ex) { #region Log error to file var errorCode = ErrorID.Generate(4); _logger.Error($"ErrorID : {errorCode} Ex : {ex?.Message ?? ex?.InnerException?.Message} ErrorStack : {ex?.StackTrace}"); return(new StaffRegRespObj { Status = new APIResponseStatus { IsSuccessful = false, Message = new APIResponseMessage { FriendlyMessage = "Error occured!! Unable to process request", MessageId = errorCode, TechnicalMessage = $"ErrorID : {errorCode} Ex : {ex?.Message ?? ex?.InnerException?.Message} ErrorStack : {ex?.StackTrace}" } } }); #endregion } }