Esempio n. 1
0
        public async Task <ActionResult> Import(IFormFile file)
        {
            if (!ModelState.IsValid)
            {
                throw new BindException(ModelState);
            }
            RoleFilter RoleFilter = new RoleFilter
            {
                Skip    = 0,
                Take    = int.MaxValue,
                Selects = RoleSelect.ALL
            };
            List <Role> Roles = await RoleService.List(RoleFilter);

            WorkflowDefinitionFilter WorkflowDefinitionFilter = new WorkflowDefinitionFilter
            {
                Skip    = 0,
                Take    = int.MaxValue,
                Selects = WorkflowDefinitionSelect.ALL
            };
            List <WorkflowDefinition> WorkflowDefinitions = await WorkflowDefinitionService.List(WorkflowDefinitionFilter);

            List <WorkflowStep> WorkflowSteps = new List <WorkflowStep>();

            using (ExcelPackage excelPackage = new ExcelPackage(file.OpenReadStream()))
            {
                ExcelWorksheet worksheet = excelPackage.Workbook.Worksheets.FirstOrDefault();
                if (worksheet == null)
                {
                    return(Ok(WorkflowSteps));
                }
                int StartColumn = 1;
                int StartRow    = 1;
                int IdColumn    = 0 + StartColumn;
                int WorkflowDefinitionIdColumn = 1 + StartColumn;
                int NameColumn   = 2 + StartColumn;
                int RoleIdColumn = 3 + StartColumn;
                int SubjectMailForRejectColumn = 4 + StartColumn;
                int BodyMailForRejectColumn    = 5 + StartColumn;

                for (int i = StartRow; i <= worksheet.Dimension.End.Row; i++)
                {
                    if (string.IsNullOrEmpty(worksheet.Cells[i + StartRow, StartColumn].Value?.ToString()))
                    {
                        break;
                    }
                    string IdValue = worksheet.Cells[i + StartRow, IdColumn].Value?.ToString();
                    string WorkflowDefinitionIdValue = worksheet.Cells[i + StartRow, WorkflowDefinitionIdColumn].Value?.ToString();
                    string NameValue   = worksheet.Cells[i + StartRow, NameColumn].Value?.ToString();
                    string RoleIdValue = worksheet.Cells[i + StartRow, RoleIdColumn].Value?.ToString();
                    string SubjectMailForRejectValue = worksheet.Cells[i + StartRow, SubjectMailForRejectColumn].Value?.ToString();
                    string BodyMailForRejectValue    = worksheet.Cells[i + StartRow, BodyMailForRejectColumn].Value?.ToString();

                    WorkflowStep WorkflowStep = new WorkflowStep();
                    WorkflowStep.Name = NameValue;
                    WorkflowStep.SubjectMailForReject = SubjectMailForRejectValue;
                    WorkflowStep.BodyMailForReject    = BodyMailForRejectValue;
                    Role Role = Roles.Where(x => x.Id.ToString() == RoleIdValue).FirstOrDefault();
                    WorkflowStep.RoleId = Role == null ? 0 : Role.Id;
                    WorkflowStep.Role   = Role;
                    WorkflowDefinition WorkflowDefinition = WorkflowDefinitions.Where(x => x.Id.ToString() == WorkflowDefinitionIdValue).FirstOrDefault();
                    WorkflowStep.WorkflowDefinitionId = WorkflowDefinition == null ? 0 : WorkflowDefinition.Id;
                    WorkflowStep.WorkflowDefinition   = WorkflowDefinition;

                    WorkflowSteps.Add(WorkflowStep);
                }
            }
            WorkflowSteps = await WorkflowStepService.Import(WorkflowSteps);

            if (WorkflowSteps.All(x => x.IsValidated))
            {
                return(Ok(true));
            }
            else
            {
                List <string> Errors = new List <string>();
                for (int i = 0; i < WorkflowSteps.Count; i++)
                {
                    WorkflowStep WorkflowStep = WorkflowSteps[i];
                    if (!WorkflowStep.IsValidated)
                    {
                        string Error = $"Dòng {i + 2} có lỗi:";
                        if (WorkflowStep.Errors.ContainsKey(nameof(WorkflowStep.Id)))
                        {
                            Error += WorkflowStep.Errors[nameof(WorkflowStep.Id)];
                        }
                        if (WorkflowStep.Errors.ContainsKey(nameof(WorkflowStep.WorkflowDefinitionId)))
                        {
                            Error += WorkflowStep.Errors[nameof(WorkflowStep.WorkflowDefinitionId)];
                        }
                        if (WorkflowStep.Errors.ContainsKey(nameof(WorkflowStep.Name)))
                        {
                            Error += WorkflowStep.Errors[nameof(WorkflowStep.Name)];
                        }
                        if (WorkflowStep.Errors.ContainsKey(nameof(WorkflowStep.RoleId)))
                        {
                            Error += WorkflowStep.Errors[nameof(WorkflowStep.RoleId)];
                        }
                        if (WorkflowStep.Errors.ContainsKey(nameof(WorkflowStep.SubjectMailForReject)))
                        {
                            Error += WorkflowStep.Errors[nameof(WorkflowStep.SubjectMailForReject)];
                        }
                        if (WorkflowStep.Errors.ContainsKey(nameof(WorkflowStep.BodyMailForReject)))
                        {
                            Error += WorkflowStep.Errors[nameof(WorkflowStep.BodyMailForReject)];
                        }
                        Errors.Add(Error);
                    }
                }
                return(BadRequest(Errors));
            }
        }
        public async Task <FileResult> Export([FromBody] WorkflowDirection_WorkflowDirectionFilterDTO WorkflowDirection_WorkflowDirectionFilterDTO)
        {
            if (!ModelState.IsValid)
            {
                throw new BindException(ModelState);
            }

            MemoryStream memoryStream = new MemoryStream();

            using (ExcelPackage excel = new ExcelPackage(memoryStream))
            {
                #region WorkflowDirection
                var WorkflowDirectionFilter = ConvertFilterDTOToFilterEntity(WorkflowDirection_WorkflowDirectionFilterDTO);
                WorkflowDirectionFilter.Skip = 0;
                WorkflowDirectionFilter.Take = int.MaxValue;
                WorkflowDirectionFilter      = WorkflowDirectionService.ToFilter(WorkflowDirectionFilter);
                List <WorkflowDirection> WorkflowDirections = await WorkflowDirectionService.List(WorkflowDirectionFilter);

                var WorkflowDirectionHeaders = new List <string[]>()
                {
                    new string[] {
                        "Id",
                        "WorkflowDefinitionId",
                        "FromStepId",
                        "ToStepId",
                        "SubjectMailForCreator",
                        "SubjectMailForNextStep",
                        "BodyMailForCreator",
                        "BodyMailForNextStep",
                    }
                };
                List <object[]> WorkflowDirectionData = new List <object[]>();
                for (int i = 0; i < WorkflowDirections.Count; i++)
                {
                    var WorkflowDirection = WorkflowDirections[i];
                    WorkflowDirectionData.Add(new Object[]
                    {
                        WorkflowDirection.Id,
                        WorkflowDirection.WorkflowDefinitionId,
                        WorkflowDirection.FromStepId,
                        WorkflowDirection.ToStepId,
                        WorkflowDirection.SubjectMailForCreator,
                        WorkflowDirection.SubjectMailForNextStep,
                        WorkflowDirection.BodyMailForCreator,
                        WorkflowDirection.BodyMailForNextStep,
                    });
                }
                excel.GenerateWorksheet("WorkflowDirection", WorkflowDirectionHeaders, WorkflowDirectionData);
                #endregion

                #region WorkflowStep
                var WorkflowStepFilter = new WorkflowStepFilter();
                WorkflowStepFilter.Selects   = WorkflowStepSelect.ALL;
                WorkflowStepFilter.OrderBy   = WorkflowStepOrder.Id;
                WorkflowStepFilter.OrderType = OrderType.ASC;
                WorkflowStepFilter.Skip      = 0;
                WorkflowStepFilter.Take      = int.MaxValue;
                List <WorkflowStep> WorkflowSteps = await WorkflowStepService.List(WorkflowStepFilter);

                var WorkflowStepHeaders = new List <string[]>()
                {
                    new string[] {
                        "Id",
                        "WorkflowDefinitionId",
                        "Name",
                        "RoleId",
                        "SubjectMailForReject",
                        "BodyMailForReject",
                    }
                };
                List <object[]> WorkflowStepData = new List <object[]>();
                for (int i = 0; i < WorkflowSteps.Count; i++)
                {
                    var WorkflowStep = WorkflowSteps[i];
                    WorkflowStepData.Add(new Object[]
                    {
                        WorkflowStep.Id,
                        WorkflowStep.WorkflowDefinitionId,
                        WorkflowStep.Name,
                        WorkflowStep.RoleId,
                        WorkflowStep.SubjectMailForReject,
                        WorkflowStep.BodyMailForReject,
                    });
                }
                excel.GenerateWorksheet("WorkflowStep", WorkflowStepHeaders, WorkflowStepData);
                #endregion
                #region WorkflowDefinition
                var WorkflowDefinitionFilter = new WorkflowDefinitionFilter();
                WorkflowDefinitionFilter.Selects   = WorkflowDefinitionSelect.ALL;
                WorkflowDefinitionFilter.OrderBy   = WorkflowDefinitionOrder.Id;
                WorkflowDefinitionFilter.OrderType = OrderType.ASC;
                WorkflowDefinitionFilter.Skip      = 0;
                WorkflowDefinitionFilter.Take      = int.MaxValue;
                List <WorkflowDefinition> WorkflowDefinitions = await WorkflowDefinitionService.List(WorkflowDefinitionFilter);

                var WorkflowDefinitionHeaders = new List <string[]>()
                {
                    new string[] {
                        "Id",
                        "Name",
                        "WorkflowTypeId",
                        "StartDate",
                        "EndDate",
                        "StatusId",
                    }
                };
                List <object[]> WorkflowDefinitionData = new List <object[]>();
                for (int i = 0; i < WorkflowDefinitions.Count; i++)
                {
                    var WorkflowDefinition = WorkflowDefinitions[i];
                    WorkflowDefinitionData.Add(new Object[]
                    {
                        WorkflowDefinition.Id,
                        WorkflowDefinition.Name,
                        WorkflowDefinition.WorkflowTypeId,
                        WorkflowDefinition.StartDate,
                        WorkflowDefinition.EndDate,
                        WorkflowDefinition.StatusId,
                    });
                }
                excel.GenerateWorksheet("WorkflowDefinition", WorkflowDefinitionHeaders, WorkflowDefinitionData);
                #endregion
                excel.Save();
            }
            return(File(memoryStream.ToArray(), "application/octet-stream", "WorkflowDirection.xlsx"));
        }