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 } }