public async Task <bool> AddUpdateWorkflowLevelStaffAsync(cor_workflowlevelstaff model)
        {
            if (model.WorkflowLevelStaffId > 0)
            {
                var item = await _dataContext.cor_workflowlevelstaff.FindAsync(model.WorkflowLevelStaffId);

                _dataContext.Entry(item).CurrentValues.SetValues(model);
            }
            else
            {
                await _dataContext.cor_workflowlevelstaff.AddAsync(model);
            }
            return(await _dataContext.SaveChangesAsync() > 0);
        }
Esempio n. 2
0
        public async Task <WorkflowlevelStaffRegRespObj> Handle(AddUpdateWorkflowLevelStaffCommand request, CancellationToken cancellationToken)
        {
            try
            {
                var currentUserId = _httpContextAccessor.HttpContext.User?.FindFirst(x => x.Type == "userId").Value;
                var user          = await _userManger.FindByIdAsync(currentUserId);

                var WKFlevelStaff = new cor_workflowlevelstaff
                {
                    StaffId              = request.StaffId,
                    Active               = request.Active,
                    CreatedBy            = request.CreatedBy,
                    CreatedOn            = DateTime.Now,
                    Deleted              = false,
                    WorkflowLevelId      = request.WorkflowLevelId,
                    UpdatedBy            = user.UserName,
                    UpdatedOn            = request.UpdatedOn,
                    WorkflowGroupId      = request.WorkflowGroupId,
                    WorkflowLevelStaffId = request.WorkflowLevelStaffId,
                };
                if (request.WorkflowLevelStaffId > 0)
                {
                    WKFlevelStaff.WorkflowLevelStaffId = request.WorkflowLevelStaffId;
                    WKFlevelStaff.UpdatedOn            = DateTime.Now;
                }
                await _repo.AddUpdateWorkflowLevelStaffAsync(WKFlevelStaff);

                var actionTaken = request.WorkflowGroupId > 0 ? "updated" : "added";
                return(new WorkflowlevelStaffRegRespObj
                {
                    WorkflowLevelStaffId = WKFlevelStaff.WorkflowLevelStaffId,
                    Status = new APIResponseStatus
                    {
                        IsSuccessful = true,
                        Message = new APIResponseMessage
                        {
                            FriendlyMessage = $"Successfully {actionTaken}",
                        }
                    }
                });
            }
            catch (Exception ex)
            {
                #region Log error to file
                var errorCode = ErrorID.Generate(4);
                _logger.Error($"ErrorID : AddUpdateWorkflowLevelStaffCommandHandler{errorCode} Ex : {ex?.Message ?? ex?.InnerException?.Message} ErrorStack : {ex?.StackTrace}");
                return(new WorkflowlevelStaffRegRespObj
                {
                    Status = new APIResponseStatus
                    {
                        IsSuccessful = false,
                        Message = new APIResponseMessage
                        {
                            FriendlyMessage = "Error occured!! Unable to process item",
                            MessageId = errorCode,
                            TechnicalMessage = $"ErrorID : AddUpdateWorkflowLevelStaffCommandHandler{errorCode} Ex : {ex?.Message ?? ex?.InnerException?.Message} ErrorStack : {ex?.StackTrace}"
                        }
                    }
                });

                #endregion
            }
        }
            public async Task <FileUploadRespObj> Handle(UploadWorkflowStaffCommand request, CancellationToken cancellationToken)
            {
                var apiResponse = new FileUploadRespObj {
                    Status = new APIResponseStatus {
                        IsSuccessful = false, Message = new APIResponseMessage()
                    }
                };

                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());
                            }
                        }
                    }

                    var uploadedRecord = new List <WorkflowlevelStaffObj>();
                    ExcelPackage.LicenseContext = LicenseContext.NonCommercial;

                    if (byteList.Count() > 0)
                    {
                        foreach (var byteItem in byteList)
                        {
                            using (MemoryStream stream = new MemoryStream(byteItem))
                                using (ExcelPackage excelPackage = new ExcelPackage(stream))
                                {
                                    //Use first sheet by default
                                    ExcelWorksheet workSheet    = excelPackage.Workbook.Worksheets[0];
                                    int            totalRows    = workSheet.Dimension.Rows;
                                    int            totalColumns = workSheet.Dimension.Columns;
                                    if (totalColumns != 5)
                                    {
                                        apiResponse.Status.Message.FriendlyMessage = $"Three (5) Column Expected";
                                        return(apiResponse);
                                    }
                                    //First row is considered as the header
                                    for (int i = 2; i <= totalRows; i++)
                                    {
                                        var lkp = new WorkflowlevelStaffObj
                                        {
                                            ExcelLineNumber   = i,
                                            WorkflowGroupName = workSheet.Cells[i, 1]?.Value != null ? workSheet.Cells[i, 1]?.Value.ToString() : string.Empty,
                                            WorkflowLevelName = workSheet.Cells[i, 2]?.Value != null ? workSheet.Cells[i, 2]?.Value.ToString() : string.Empty,
                                            StaffName         = workSheet.Cells[i, 3]?.Value != null ? workSheet.Cells[i, 3]?.Value.ToString() : string.Empty,
                                            AccessLevel       = workSheet.Cells[i, 4]?.Value != null ? workSheet.Cells[i, 4]?.Value.ToString() : string.Empty,
                                            StaffCode         = workSheet.Cells[i, 5]?.Value != null ? workSheet.Cells[i, 5]?.Value.ToString() : string.Empty,
                                        };
                                        uploadedRecord.Add(lkp);
                                    }
                                }
                        }
                    }

                    var _DomainList = await _repo.GetAllWorkflowLevelStaffAsync();

                    var _StaffList = await _admin.GetAllStaffAsync();

                    var _Group = await _repo.GetAllWorkflowGroupAsync();

                    var _Level = await _repo.GetAllWorkflowLevelAsync();

                    var _CompStructure = await _comprepository.GetAllCompanyStructureDefinitionAsync();

                    if (uploadedRecord.Count > 0)
                    {
                        foreach (var row in uploadedRecord)
                        {
                            if (string.IsNullOrEmpty(row.StaffCode))
                            {
                                apiResponse.Status.Message.FriendlyMessage = $"Staff Code can not be empty detected on line {row.ExcelLineNumber}";
                                return(apiResponse);
                            }
                            if (string.IsNullOrEmpty(row.WorkflowGroupName))
                            {
                                apiResponse.Status.Message.FriendlyMessage = $"Workflow group Name can not be empty detected on line {row.ExcelLineNumber}";
                                return(apiResponse);
                            }
                            else
                            {
                                var group = _Group.FirstOrDefault(a => a.WorkflowGroupName.Trim().ToLower() == row.WorkflowGroupName.Trim().ToLower());
                                if (group == null)
                                {
                                    apiResponse.Status.Message.FriendlyMessage = $"Unidentified Workflow group detected on line {row.ExcelLineNumber}";
                                    return(apiResponse);
                                }
                                row.WorkflowGroupId = group.WorkflowGroupId;
                            }
                            if (string.IsNullOrEmpty(row.WorkflowLevelName))
                            {
                                apiResponse.Status.Message.FriendlyMessage = $"Workflow Level Name can not be empty detected on line {row.ExcelLineNumber}";
                                return(apiResponse);
                            }
                            else
                            {
                                var level = _Level.FirstOrDefault(a => a.WorkflowLevelName.Trim().ToLower() == row.WorkflowLevelName.Trim().ToLower());
                                if (level == null)
                                {
                                    apiResponse.Status.Message.FriendlyMessage = $"Unidentified Workflow Level detected on line {row.ExcelLineNumber}";
                                    return(apiResponse);
                                }
                                row.WorkflowLevelId = level.WorkflowLevelId;
                            }
                            if (string.IsNullOrEmpty(row.StaffName))
                            {
                                apiResponse.Status.Message.FriendlyMessage = $"Staff Name can not be empty detected on line {row.ExcelLineNumber}";
                                return(apiResponse);
                            }
                            else
                            {
                                var firstname = row.StaffName.Split(" ")[0];
                                var lastname  = row.StaffName.Split(" ")[1];
                                var level     = _StaffList.FirstOrDefault(a => a.FirstName.Trim().ToLower() == firstname.Trim().ToLower() &&
                                                                          a.LastName.Trim().ToLower() == lastname.Trim().ToLower() && a.StaffCode.Trim().ToLower() == row.StaffCode.Trim().ToLower());
                                if (level == null)
                                {
                                    apiResponse.Status.Message.FriendlyMessage = $"Unidentified Staff Detected on line {row.ExcelLineNumber}";
                                    return(apiResponse);
                                }
                                row.StaffId   = level.StaffId;
                                row.StaffCode = row.StaffCode;
                            }


                            var currentItem = _DomainList.FirstOrDefault(s => s.WorkflowLevelId == row.WorkflowLevelId &&
                                                                         s.Deleted == false && s.StaffId == row.StaffId &&
                                                                         s.WorkflowGroupId == row.WorkflowGroupId);

                            if (currentItem != null)
                            {
                                currentItem.WorkflowGroupId = row.WorkflowGroupId;
                                currentItem.WorkflowLevelId = row.WorkflowLevelId;
                                currentItem.StaffId         = row.StaffId;
                                await _repo.AddUpdateWorkflowLevelStaffAsync(currentItem);
                            }
                            else
                            {
                                var newItem = new cor_workflowlevelstaff();
                                newItem.WorkflowGroupId = row.WorkflowGroupId;
                                newItem.WorkflowLevelId = row.WorkflowLevelId;
                                newItem.StaffId         = row.StaffId;
                                await _repo.AddUpdateWorkflowLevelStaffAsync(newItem);
                            }
                        }
                    }
                    apiResponse.Status.IsSuccessful            = true;
                    apiResponse.Status.Message.FriendlyMessage = "Successful";
                    return(apiResponse);
                }
                catch (Exception ex)
                {
                    apiResponse.Status.Message.FriendlyMessage = ex?.Message;
                    return(apiResponse);
                }
            }
        public async Task <bool> UploadWorkflowLevelStaffAsync(byte[] record, string createdBy)
        {
            try
            {
                if (record == null)
                {
                    return(false);
                }
                List <WorkflowlevelStaffObj> uploadedRecord = new List <WorkflowlevelStaffObj>();
                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 WorkflowlevelStaffObj
                            {
                                WorkflowLevelName = workSheet.Cells[i, 1].Value.ToString(),
                                WorkflowGroupName = workSheet.Cells[i, 2].Value.ToString(),
                                StaffCode         = workSheet.Cells[i, 3].Value.ToString(),
                            });
                        }
                    }
                if (uploadedRecord.Count > 0)
                {
                    foreach (var entity in uploadedRecord)
                    {
                        var workflowGroup = _dataContext.cor_workflowgroup.Where(x => x.WorkflowGroupName == entity.WorkflowGroupName).FirstOrDefault();
                        var workflowLevel = _dataContext.cor_workflowlevel.Where(x => x.WorkflowLevelName == entity.WorkflowLevelName).FirstOrDefault();
                        var staff         = _dataContext.cor_staff.Where(x => x.StaffCode == entity.StaffCode).FirstOrDefault();
                        if (workflowGroup == null)
                        {
                            throw new Exception("Please upload a valid workflowGroup name");
                        }
                        if (workflowLevel == null)
                        {
                            throw new Exception("Please upload a valid workflowLevel name");
                        }
                        if (staff == null)
                        {
                            throw new Exception("Please upload a valid staffcode");
                        }

                        var accountTypeExist = _dataContext.cor_workflowlevelstaff.Find(entity.WorkflowLevelStaffId);
                        if (accountTypeExist != null)
                        {
                            accountTypeExist.WorkflowLevelStaffId = entity.WorkflowLevelStaffId;
                            accountTypeExist.WorkflowLevelId      = workflowLevel.WorkflowLevelId;
                            accountTypeExist.WorkflowGroupId      = workflowGroup.WorkflowGroupId;
                            accountTypeExist.StaffId   = staff.StaffId;
                            accountTypeExist.Active    = true;
                            accountTypeExist.Deleted   = false;
                            accountTypeExist.UpdatedBy = entity.CreatedBy;
                            accountTypeExist.UpdatedOn = DateTime.Now;
                        }
                        else
                        {
                            var accountType = new cor_workflowlevelstaff
                            {
                                WorkflowLevelStaffId = entity.WorkflowLevelStaffId,
                                WorkflowLevelId      = workflowLevel.WorkflowLevelId,
                                WorkflowGroupId      = workflowGroup.WorkflowGroupId,
                                StaffId   = staff.StaffId,
                                Active    = true,
                                Deleted   = false,
                                CreatedBy = entity.CreatedBy,
                                CreatedOn = DateTime.Now,
                            };
                            _dataContext.cor_workflowlevelstaff.Add(accountType);
                        }
                    }
                }
                var response = await _dataContext.SaveChangesAsync() > 0;

                return(response);
            }
            catch (Exception ex)
            {
                throw new Exception(ex.Message);
            }
        }