Пример #1
0
        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
            }
        }
Пример #2
0
        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);
            }
        }