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);
            }
        }
Esempio n. 3
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
            }
        }
Esempio n. 4
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);
            }
        }