public async Task <bool> AddUpdateWorkflowLevelAsync(cor_workflowlevel model) { if (model.WorkflowLevelId > 0) { var item = await _dataContext.cor_workflowlevel.FindAsync(model.WorkflowLevelId); _dataContext.Entry(item).CurrentValues.SetValues(model); } else { await _dataContext.cor_workflowlevel.AddAsync(model); } return(await _dataContext.SaveChangesAsync() > 0); }
public async Task <bool> UploadWorkflowLevelAsync(byte[] record, string createdBy) { try { if (record == null) { return(false); } List <WorkflowLevelObj> uploadedRecord = new List <WorkflowLevelObj>(); using (MemoryStream stream = new MemoryStream(record)) using (ExcelPackage excelPackage = new ExcelPackage(stream)) { //Use first sheet by default ExcelWorksheet workSheet = excelPackage.Workbook.Worksheets[1]; int totalRows = workSheet.Dimension.Rows; //First row is considered as the header for (int i = 2; i <= totalRows; i++) { uploadedRecord.Add(new WorkflowLevelObj { WorkflowLevelName = workSheet.Cells[i, 1].Value.ToString(), WorkflowGroupName = workSheet.Cells[i, 2].Value.ToString(), Position = int.Parse(workSheet.Cells[i, 3].Value.ToString()), RequiredLimit = bool.Parse(workSheet.Cells[i, 4].Value.ToString()), LimitAmount = decimal.Parse(workSheet.Cells[i, 5].Value.ToString()), CanModify = bool.Parse(workSheet.Cells[i, 6].Value.ToString()) }); } } if (uploadedRecord.Count > 0) { foreach (var entity in uploadedRecord) { var workflowLevel = _dataContext.cor_workflowlevel.Where(x => x.WorkflowLevelName == entity.WorkflowLevelName).FirstOrDefault(); var workflowGroup = _dataContext.cor_workflowgroup.Where(x => x.WorkflowGroupName == entity.WorkflowGroupName).FirstOrDefault(); if (workflowLevel == null) { entity.WorkflowLevelId = 0; } else { entity.WorkflowLevelId = workflowLevel.WorkflowLevelId; } if (workflowGroup == null) { throw new Exception("Please upload a valid workflowgroup name"); } var accountTypeExist = _dataContext.cor_workflowlevel.Find(entity.WorkflowLevelId); if (accountTypeExist != null) { accountTypeExist.WorkflowLevelId = workflowLevel.WorkflowLevelId; accountTypeExist.WorkflowLevelName = entity.WorkflowLevelName; accountTypeExist.WorkflowGroupId = workflowGroup.WorkflowGroupId; accountTypeExist.Position = entity.Position; accountTypeExist.RequiredLimit = entity.RequiredLimit; accountTypeExist.LimitAmount = entity.LimitAmount; accountTypeExist.RoleId = entity.JobTitleId; accountTypeExist.CanModify = entity.CanModify; accountTypeExist.Active = true; accountTypeExist.Deleted = false; accountTypeExist.UpdatedBy = entity.CreatedBy; accountTypeExist.UpdatedOn = DateTime.Now; } else { var accountType = new cor_workflowlevel { CreatedBy = entity.WorkflowGroupName, //WorkflowLevelId = workflowLevel.WorkflowLevelId, WorkflowLevelName = entity.WorkflowLevelName, WorkflowGroupId = workflowGroup.WorkflowGroupId, Position = entity.Position, RequiredLimit = entity.RequiredLimit, LimitAmount = entity.LimitAmount, RoleId = entity.JobTitleId, CanModify = entity.CanModify, Active = true, Deleted = false, UpdatedBy = entity.CreatedBy, UpdatedOn = DateTime.Now, }; await _dataContext.cor_workflowlevel.AddAsync(accountType); } } } var response = _dataContext.SaveChanges() > 0; return(response); } catch (Exception ex) { throw new Exception(ex.Message); } }
public async Task <WorkflowLevelRegRespObj> Handle(AddUpdateWorkflowLevelCommand request, CancellationToken cancellationToken) { var response = new WorkflowLevelRegRespObj { Status = new APIResponseStatus { IsSuccessful = false, Message = new APIResponseMessage() } }; try { var currentUserId = _httpContextAccessor.HttpContext.User?.FindFirst(x => x.Type == "userId")?.Value ?? string.Empty; var user = await _userManger.FindByIdAsync(currentUserId); if (request.WorkflowLevelId < 1) { var wkItem = await _repo.GetWorkflowLevelAsync(request.WorkflowLevelId); if (wkItem != null) { if (wkItem.WorkflowGroupId == request.WorkflowGroupId && wkItem.WorkflowLevelName == request.WorkflowLevelName && wkItem.Position == request.Position) { response.Status.Message.FriendlyMessage = "Workflow Level with same group and position already exist"; return(response); } if (wkItem.WorkflowLevelName.Trim().ToLower() == request.WorkflowLevelName.Trim().ToLower()) { response.Status.Message.FriendlyMessage = $"Workflow Level {request.WorkflowLevelName} already exist"; return(response); } } } var item = new cor_workflowlevel { WorkflowGroupId = request.WorkflowGroupId, Active = request.Active, CanModify = request.CanModify, RequiredLimit = request.RequiredLimit, CreatedBy = user.UserName, Deleted = false, LimitAmount = Convert.ToDecimal(request.LimitAmount), Position = request.Position, RoleId = request.RoleId, WorkflowLevelName = request.WorkflowLevelName, UpdatedBy = user.UserName, CreatedOn = DateTime.Now, }; if (request.WorkflowLevelId > 0) { item.CreatedOn = request.CreatedOn; item.UpdatedOn = DateTime.Now; item.WorkflowLevelId = request.WorkflowLevelId; } await _repo.AddUpdateWorkflowLevelAsync(item); var actionTaken = request.WorkflowGroupId > 0 ? "updated" : "added"; response.Status.IsSuccessful = true; response.Status.Message.FriendlyMessage = $"Successfuly {actionTaken}"; return(response); } 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 WorkflowLevelRegRespObj { Status = new APIResponseStatus { IsSuccessful = false, Message = new APIResponseMessage { FriendlyMessage = "Error occured!! Unable to process item", MessageId = errorCode, TechnicalMessage = $"ErrorID : {errorCode} Ex : {ex?.Message ?? ex?.InnerException?.Message} ErrorStack : {ex?.StackTrace}" } } }); #endregion } }
public async Task <WorkflowLevelRegRespObj> Handle(UploadWorkflowLevelCommand request, CancellationToken cancellationToken) { var response = new WorkflowLevelRegRespObj { Status = new APIResponseStatus { IsSuccessful = false, Message = new APIResponseMessage() } }; var files = _accessor.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()); } } } try { List <WorkflowLevelObj> uploadedRecord = new List <WorkflowLevelObj>(); ExcelPackage.LicenseContext = LicenseContext.NonCommercial; if (byteList.Count() > 0) { foreach (var byterow in byteList) { using (MemoryStream stream = new MemoryStream(byterow)) using (ExcelPackage excelPackage = new ExcelPackage(stream)) { ExcelWorksheet workSheet = excelPackage.Workbook.Worksheets[0]; int totalRows = workSheet.Dimension.Rows; int totalColumns = workSheet.Dimension.Columns; if (totalColumns != 7) { response.Status.Message.FriendlyMessage = $"Seven (7) Column Expected"; return(response); } for (int i = 2; i <= totalRows; i++) { uploadedRecord.Add(new WorkflowLevelObj { ExcelLineNumber = i, WorkflowLevelName = workSheet.Cells[i, 1]?.Value != null ? workSheet.Cells[i, 1]?.Value.ToString() : string.Empty, WorkflowGroupName = workSheet.Cells[i, 2]?.Value != null ? workSheet.Cells[i, 2]?.Value.ToString() : string.Empty, Position = workSheet.Cells[i, 3]?.Value != null ? Convert.ToInt32(workSheet.Cells[i, 3]?.Value.ToString()) : 0, JobTitleName = workSheet.Cells[i, 4]?.Value != null ? workSheet.Cells[i, 4]?.Value.ToString() : string.Empty, RequiredLimit = workSheet.Cells[i, 5]?.Value != null ? Convert.ToBoolean(workSheet.Cells[i, 5]?.Value.ToString()) : false, LimitAmount = workSheet.Cells[i, 6]?.Value != null ? Convert.ToDecimal(workSheet.Cells[i, 6]?.Value.ToString()) : 0, CanModify = workSheet.Cells[i, 7]?.Value != null ? Convert.ToBoolean(workSheet.Cells[i, 7]?.Value.ToString()) : false, }); } } } } var _DomainList = await _repo.GetAllWorkflowLevelAsync(); var _WorkflowGroupList = await _repo.GetAllWorkflowGroupAsync(); var _Jobtitles = await _commonRepo.GetAllJobTitleAsync(); if (uploadedRecord.Count > 0) { foreach (var row in uploadedRecord) { if (string.IsNullOrEmpty(row.WorkflowLevelName)) { response.Status.Message.FriendlyMessage = $"Workflow Level Name can not be empty detected on line {row.ExcelLineNumber}"; return(response); } if (string.IsNullOrEmpty(row.WorkflowGroupName)) { response.Status.Message.FriendlyMessage = $"Workflow group can not be empty detected on line {row.ExcelLineNumber}"; return(response); } else { var wkgroup = _WorkflowGroupList.FirstOrDefault(a => a.WorkflowGroupName.Trim().ToLower() == row.WorkflowGroupName.Trim().ToLower()); if (wkgroup == null) { response.Status.Message.FriendlyMessage = $" Unidentified Workflow group detected on line {row.ExcelLineNumber}"; return(response); } row.WorkflowGroupId = wkgroup.WorkflowGroupId; } if (row.Position < 1) { response.Status.Message.FriendlyMessage = $"Position can not be empty detected on line {row.ExcelLineNumber}"; return(response); } if (string.IsNullOrEmpty(row.JobTitleName)) { response.Status.Message.FriendlyMessage = $"Job Title Name can not be empty detected on line {row.ExcelLineNumber}"; return(response); } else { var jobtitle = _Jobtitles.FirstOrDefault(a => a.Name.Trim().ToLower() == row.JobTitleName.Trim().ToLower()); if (jobtitle == null) { response.Status.Message.FriendlyMessage = $"Unidentified jobtitle detected on line {row.ExcelLineNumber}"; return(response); } row.JobTitleId = Convert.ToString(jobtitle.JobTitleId); } if (row.LimitAmount < 1) { response.Status.Message.FriendlyMessage = $"Limit amount can not be empty detected on line {row.ExcelLineNumber}"; return(response); } if (!row.RequiredLimit && row.RequiredLimit) { response.Status.Message.FriendlyMessage = $"Invalid required amount detected on line {row.ExcelLineNumber}"; return(response); } if (!(bool)row.CanModify && (bool)row.CanModify) { response.Status.Message.FriendlyMessage = $"Invalid CanModify value detected on line {row.ExcelLineNumber}"; return(response); } var currentItem = _DomainList.FirstOrDefault(x => x.WorkflowLevelName.Trim().ToLower() == row.WorkflowLevelName.Trim().ToLower() && x.WorkflowGroupId == row.WorkflowGroupId && x.Position == row.Position); if (currentItem == null) { var newItem = new cor_workflowlevel(); newItem.WorkflowGroupId = row.WorkflowGroupId; newItem.CanModify = row.CanModify; newItem.LimitAmount = row.LimitAmount; newItem.RoleId = row.JobTitleId; newItem.RequiredLimit = row.RequiredLimit; newItem.WorkflowLevelName = row.WorkflowLevelName; newItem.Position = row.Position; await _repo.AddUpdateWorkflowLevelAsync(newItem); } else { currentItem.WorkflowGroupId = row.WorkflowGroupId; currentItem.CanModify = row.CanModify; currentItem.LimitAmount = row.LimitAmount; currentItem.RoleId = row.JobTitleId; currentItem.RequiredLimit = row.RequiredLimit; currentItem.WorkflowLevelName = row.WorkflowLevelName; currentItem.Position = row.Position; await _repo.AddUpdateWorkflowLevelAsync(currentItem); } } } response.Status.IsSuccessful = true; response.Status.Message.FriendlyMessage = "Successful"; return(response); } catch (Exception ex) { response.Status.Message.FriendlyMessage = ex?.Message; return(response); } }