365 lines
16 KiB
C#
365 lines
16 KiB
C#
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<PrefixService>();
|
|
var insertedPrefix = new List<Prefix>();
|
|
|
|
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<string>();
|
|
if (cell1 == "" || cell1 == null) break;
|
|
|
|
var prefix = insertedPrefix.Where(x => x.Name == (workSheet?.Cells[row, 1]?.GetValue<string>() ?? "")).FirstOrDefault();
|
|
if (prefix == null)
|
|
{
|
|
var inserted = new Prefix
|
|
{
|
|
Id = Guid.NewGuid(),
|
|
Name = workSheet?.Cells[row, 1]?.GetValue<string>() ?? "",
|
|
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<ReligionService>();
|
|
var insertedReligion = new List<Religion>();
|
|
|
|
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<string>();
|
|
if (cell1 == "" || cell1 == null) break;
|
|
|
|
var religion = insertedReligion.Where(x => x.Name == (workSheet?.Cells[row, 1]?.GetValue<string>() ?? "")).FirstOrDefault();
|
|
if (religion == null)
|
|
{
|
|
var inserted = new Religion
|
|
{
|
|
Id = Guid.NewGuid(),
|
|
Name = workSheet?.Cells[row, 1]?.GetValue<string>() ?? "",
|
|
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<RelationshipService>();
|
|
var insertedRelationship = new List<Relationship>();
|
|
|
|
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<string>();
|
|
if (cell1 == "" || cell1 == null) break;
|
|
|
|
var relationship = insertedRelationship.Where(x => x.Name == (workSheet?.Cells[row, 1]?.GetValue<string>() ?? "")).FirstOrDefault();
|
|
if (relationship == null)
|
|
{
|
|
var inserted = new Relationship
|
|
{
|
|
Id = Guid.NewGuid(),
|
|
Name = workSheet?.Cells[row, 1]?.GetValue<string>() ?? "",
|
|
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<EducationLevelService>();
|
|
var insertedEducationLevel = new List<EducationLevel>();
|
|
|
|
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<string>();
|
|
if (cell1 == "" || cell1 == null) break;
|
|
|
|
var educationLevel = insertedEducationLevel.Where(x => x.Name == (workSheet?.Cells[row, 1]?.GetValue<string>() ?? "")).FirstOrDefault();
|
|
if (educationLevel == null)
|
|
{
|
|
var inserted = new EducationLevel
|
|
{
|
|
Id = Guid.NewGuid(),
|
|
Name = workSheet?.Cells[row, 1]?.GetValue<string>() ?? "",
|
|
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<ProvinceService>();
|
|
var districtService = scope.ServiceProvider.GetRequiredService<DistrictService>();
|
|
var subDistrictService = scope.ServiceProvider.GetRequiredService<SubDistrictService>();
|
|
|
|
var serializeOption = new JsonSerializerSettings { ReferenceLoopHandling = ReferenceLoopHandling.Ignore };
|
|
|
|
var insertedProvince = new List<Province>();
|
|
|
|
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<string>();
|
|
if (cell1 == "" || cell1 == null) break;
|
|
|
|
var inserted = new Province
|
|
{
|
|
Id = Guid.NewGuid(),
|
|
Name = workSheet?.Cells[row, 1]?.GetValue<string>() ?? "",
|
|
IsActive = true,
|
|
CreatedFullName = "System Administrator",
|
|
CreatedAt = DateTime.Now,
|
|
Districts = new List<District>()
|
|
};
|
|
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<string>();
|
|
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<string>() ?? "",
|
|
IsActive = true,
|
|
CreatedFullName = "System Administrator",
|
|
CreatedAt = DateTime.Now,
|
|
SubDistricts = new List<SubDistrict>()
|
|
};
|
|
|
|
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<string>();
|
|
|
|
while (s_row <= s_totalRows)
|
|
{
|
|
var cell1 = s_workSheet?.Cells[s_row, 1]?.GetValue<string>();
|
|
var cell2 = s_workSheet?.Cells[s_row, 2]?.GetValue<string>();
|
|
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<string>() ?? "",
|
|
ZipCode = s_workSheet?.Cells[s_row, 4]?.GetValue<string>() ?? "",
|
|
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<PeriodExamService>();
|
|
|
|
var insertedPeriodExam = new List<PeriodExam>();
|
|
|
|
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<string>();
|
|
if (cell1 == "" || cell1 == null) break;
|
|
|
|
var PeriodExam = insertedPeriodExam.Where(x => x.Name == (workSheet?.Cells[row, 1]?.GetValue<string>() ?? "")).FirstOrDefault();
|
|
if (PeriodExam == null)
|
|
{
|
|
|
|
var inserted = new PeriodExam
|
|
{
|
|
Id = Guid.NewGuid(),
|
|
Name = workSheet?.Cells[row, 1]?.GetValue<string>() ?? "",
|
|
Round = workSheet?.Cells[row, 2]?.GetValue<int>() ?? 0,
|
|
Fee = workSheet?.Cells[row, 3]?.GetValue<float>() ?? 0,
|
|
StartDate = workSheet?.Cells[row, 4]?.GetValue<DateTime>() ?? DateTime.Now.Date,
|
|
EndDate = workSheet?.Cells[row, 5]?.GetValue<DateTime>() ?? DateTime.Now.Date,
|
|
Year = workSheet?.Cells[row, 6]?.GetValue<int>() ?? 0,
|
|
AnnounceDate = workSheet?.Cells[row, 7]?.GetValue<DateTime>() ?? DateTime.Now.Date,
|
|
IsActive = true,
|
|
CreatedFullName = "System Administrator",
|
|
CreatedAt = DateTime.Now
|
|
};
|
|
insertedPeriodExam.Add(inserted);
|
|
|
|
await service.CreateAsync(inserted);
|
|
}
|
|
row++;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
#endregion
|
|
}
|
|
}
|