using BMA.EHR.Core; using BMA.EHR.Extensions; using BMA.EHR.Recurit.Exam.Service.Models; using BMA.EHR.Recurit.Exam.Service.Services; using Newtonsoft.Json; using OfficeOpenXml; using System.Linq; namespace BMA.EHR.Recurit.Exam.Service.Data { public static class DatabaseSeeder { #region " Seed Metadata " public static async Task SeedPrefixAsync(WebApplication app) { using var scope = app.Services.CreateScope(); var service = scope.ServiceProvider.GetRequiredService(); var insertedPrefix = new List(); if ((await service.GetsAsync()).Count() == 0) { // read excels into object var excelFile = "SeedPerson.xlsx"; using (var excel = new ExcelPackage(new FileInfo(excelFile))) { // 1. Seed PrefixAsync var workSheet = excel.Workbook.Worksheets.FirstOrDefault(x => x.Name.ToLower() == "prefix"); var totalRows = workSheet?.Dimension.Rows; int row = 1; while (row <= totalRows) { var cell1 = workSheet?.Cells[row, 1]?.GetValue(); if (cell1 == "" || cell1 == null) break; var prefix = insertedPrefix.Where(x => x.Name == (workSheet?.Cells[row, 1]?.GetValue() ?? "")).FirstOrDefault(); if (prefix == null) { var inserted = new Prefix { Id = Guid.NewGuid(), Name = workSheet?.Cells[row, 1]?.GetValue() ?? "", IsActive = true, CreatedFullName = "System Administrator", CreatedAt = DateTime.Now }; insertedPrefix.Add(inserted); await service.CreateAsync(inserted); } row++; } } } } public static async Task SeedReligionAsync(WebApplication app) { using var scope = app.Services.CreateScope(); var service = scope.ServiceProvider.GetRequiredService(); var insertedReligion = new List(); if ((await service.GetsAsync()).Count() == 0) { // read excels into object var excelFile = "SeedPerson.xlsx"; using (var excel = new ExcelPackage(new FileInfo(excelFile))) { // 1. Seed Religion var workSheet = excel.Workbook.Worksheets.FirstOrDefault(x => x.Name.ToLower() == "religion"); var totalRows = workSheet?.Dimension.Rows; int row = 1; while (row <= totalRows) { var cell1 = workSheet?.Cells[row, 1]?.GetValue(); if (cell1 == "" || cell1 == null) break; var religion = insertedReligion.Where(x => x.Name == (workSheet?.Cells[row, 1]?.GetValue() ?? "")).FirstOrDefault(); if (religion == null) { var inserted = new Religion { Id = Guid.NewGuid(), Name = workSheet?.Cells[row, 1]?.GetValue() ?? "", IsActive = true, CreatedFullName = "System Administrator", CreatedAt = DateTime.Now }; insertedReligion.Add(inserted); await service.CreateAsync(inserted); } row++; } } } } public static async Task SeedRelationshipAsync(WebApplication app) { using var scope = app.Services.CreateScope(); var service = scope.ServiceProvider.GetRequiredService(); var insertedRelationship = new List(); if ((await service.GetsAsync()).Count() == 0) { // read excels into object var excelFile = "SeedPerson.xlsx"; using (var excel = new ExcelPackage(new FileInfo(excelFile))) { // 1. Seed Relationship var workSheet = excel.Workbook.Worksheets.FirstOrDefault(x => x.Name.ToLower() == "relationship"); var totalRows = workSheet?.Dimension.Rows; int row = 1; while (row <= totalRows) { var cell1 = workSheet?.Cells[row, 1]?.GetValue(); if (cell1 == "" || cell1 == null) break; var relationship = insertedRelationship.Where(x => x.Name == (workSheet?.Cells[row, 1]?.GetValue() ?? "")).FirstOrDefault(); if (relationship == null) { var inserted = new Relationship { Id = Guid.NewGuid(), Name = workSheet?.Cells[row, 1]?.GetValue() ?? "", IsActive = true, CreatedFullName = "System Administrator", CreatedAt = DateTime.Now }; insertedRelationship.Add(inserted); await service.CreateAsync(inserted); } row++; } } } } public static async Task SeedEducationLevelAsync(WebApplication app) { using var scope = app.Services.CreateScope(); var service = scope.ServiceProvider.GetRequiredService(); var insertedEducationLevel = new List(); if ((await service.GetsAsync()).Count() == 0) { // read excels into object var excelFile = "SeedPerson.xlsx"; using (var excel = new ExcelPackage(new FileInfo(excelFile))) { // 1. Seed EducationLevel var workSheet = excel.Workbook.Worksheets.FirstOrDefault(x => x.Name.ToLower() == "educationlevel"); var totalRows = workSheet?.Dimension.Rows; int row = 1; while (row <= totalRows) { var cell1 = workSheet?.Cells[row, 1]?.GetValue(); if (cell1 == "" || cell1 == null) break; var educationLevel = insertedEducationLevel.Where(x => x.Name == (workSheet?.Cells[row, 1]?.GetValue() ?? "")).FirstOrDefault(); if (educationLevel == null) { var inserted = new EducationLevel { Id = Guid.NewGuid(), Name = workSheet?.Cells[row, 1]?.GetValue() ?? "", IsActive = true, CreatedFullName = "System Administrator", CreatedAt = DateTime.Now }; insertedEducationLevel.Add(inserted); await service.CreateAsync(inserted); } row++; } } } } public static async Task SeedProvinceAsync(WebApplication app) { using var scope = app.Services.CreateScope(); var service = scope.ServiceProvider.GetRequiredService(); var districtService = scope.ServiceProvider.GetRequiredService(); var subDistrictService = scope.ServiceProvider.GetRequiredService(); var serializeOption = new JsonSerializerSettings { ReferenceLoopHandling = ReferenceLoopHandling.Ignore }; var insertedProvince = new List(); if ((await service.GetsAsync()).Count() == 0) { // read excels into object var excelFile = "SeedPerson.xlsx"; using (var excel = new ExcelPackage(new FileInfo(excelFile))) { // 1. Seed Province var workSheet = excel.Workbook.Worksheets.FirstOrDefault(x => x.Name.ToLower() == "province"); var totalRows = workSheet?.Dimension.Rows; int row = 2; while (row <= totalRows) { var cell1 = workSheet?.Cells[row, 1]?.GetValue(); if (cell1 == "" || cell1 == null) break; var inserted = new Province { Id = Guid.NewGuid(), Name = workSheet?.Cells[row, 1]?.GetValue() ?? "", IsActive = true, CreatedFullName = "System Administrator", CreatedAt = DateTime.Now, Districts = new List() }; insertedProvince.Add(inserted); await service.CreateAsync(inserted); row++; } // 2. Seed District var d_workSheet = excel.Workbook.Worksheets.FirstOrDefault(x => x.Name.ToLower() == "district"); var d_totalRows = d_workSheet?.Dimension.Rows; int d_row = 2; while (d_row <= d_totalRows) { var cell1 = d_workSheet?.Cells[d_row, 1]?.GetValue(); if (cell1 == "" || cell1 == null) break; var province = insertedProvince.Where(x => x.Name == cell1).FirstOrDefault(); var inserted = new District { Id = Guid.NewGuid(), Name = d_workSheet?.Cells[d_row, 2]?.GetValue() ?? "", IsActive = true, CreatedFullName = "System Administrator", CreatedAt = DateTime.Now, SubDistricts = new List() }; province?.Districts.Add(inserted); var provinceId = province == null ? Guid.NewGuid() : province.Id; var jsonString = JsonConvert.SerializeObject(inserted, serializeOption); await districtService.CreateAsync(inserted, provinceId.ToString("D")); d_row++; } // 3. Seed SubDistrict var s_workSheet = excel.Workbook.Worksheets.FirstOrDefault(x => x.Name.ToLower() == "subdistrict"); var s_totalRows = s_workSheet?.Dimension.Rows; int s_row = 2; var zipcodes = new List(); while (s_row <= s_totalRows) { var cell1 = s_workSheet?.Cells[s_row, 1]?.GetValue(); var cell2 = s_workSheet?.Cells[s_row, 2]?.GetValue(); if (cell1 == "" || cell1 == null) break; var province = insertedProvince.Where(x => x.Name == cell1).FirstOrDefault(); var district = province?.Districts.Where(x => x.Name == cell2).FirstOrDefault(); var inserted = new SubDistrict { Id = Guid.NewGuid(), Name = s_workSheet?.Cells[s_row, 3]?.GetValue() ?? "", ZipCode = s_workSheet?.Cells[s_row, 4]?.GetValue() ?? "", IsActive = true, CreatedFullName = "System Administrator", CreatedAt = DateTime.Now, }; if (!zipcodes.Contains(inserted.ZipCode)) zipcodes.Add(inserted.ZipCode); district?.SubDistricts.Add(inserted); var districtId = district == null ? Guid.NewGuid() : district.Id; var jsonString = JsonConvert.SerializeObject(inserted, serializeOption); await subDistrictService.CreateAsync(inserted, districtId.ToString("D")); s_row++; } } } } public static async Task SeedPeriodExamAsync(WebApplication app) { using var scope = app.Services.CreateScope(); var service = scope.ServiceProvider.GetRequiredService(); var insertedPeriodExam = new List(); if ((await service.GetsAsync()).Count() == 0) { // read excels into object var excelFile = "SeedPeriodExam.xlsx"; using (var excel = new ExcelPackage(new FileInfo(excelFile))) { // 1. Seed PeriodExam var workSheet = excel.Workbook.Worksheets.FirstOrDefault(x => x.Name.ToLower() == "periodexam"); var totalRows = workSheet?.Dimension.Rows; int row = 2; while (row <= totalRows) { var cell1 = workSheet?.Cells[row, 1]?.GetValue(); if (cell1 == "" || cell1 == null) break; var PeriodExam = insertedPeriodExam.Where(x => x.Name == (workSheet?.Cells[row, 1]?.GetValue() ?? "")).FirstOrDefault(); if (PeriodExam == null) { var inserted = new PeriodExam { Id = Guid.NewGuid(), Name = workSheet?.Cells[row, 1]?.GetValue() ?? "", Round = workSheet?.Cells[row, 2]?.GetValue() ?? 0, Fee = workSheet?.Cells[row, 3]?.GetValue() ?? 0, StartDate = workSheet?.Cells[row, 4]?.GetValue() ?? DateTime.Now.Date, EndDate = workSheet?.Cells[row, 5]?.GetValue() ?? DateTime.Now.Date, Year = workSheet?.Cells[row, 6]?.GetValue() ?? 0, AnnounceDate = workSheet?.Cells[row, 7]?.GetValue() ?? DateTime.Now.Date, IsActive = true, CreatedFullName = "System Administrator", CreatedAt = DateTime.Now }; insertedPeriodExam.Add(inserted); await service.CreateAsync(inserted); } row++; } } } } #endregion } }