91 lines
5.3 KiB
C#
91 lines
5.3 KiB
C#
using Indotalent.ConfigBackEnd.Extensions;
|
|
using Indotalent.Data.Entities;
|
|
using Microsoft.EntityFrameworkCore;
|
|
|
|
namespace Indotalent.Infrastructure.Database.Demo;
|
|
|
|
public static class EmployeeSeeder
|
|
{
|
|
public static async Task GenerateDataAsync(AppDbContext context)
|
|
{
|
|
if (await context.Employee.AnyAsync()) return;
|
|
|
|
var categories = await context.EmployeeCategory.ToListAsync();
|
|
var groups = await context.EmployeeGroup.ToListAsync();
|
|
|
|
if (!categories.Any() || !groups.Any()) return;
|
|
|
|
var streets = new string[] { "Main St", "Broadway", "Oak Avenue", "Maple Drive", "Park Avenue", "Washington Blvd", "Lakeview Dr", "Sunset Blvd" };
|
|
var cities = new string[] { "New York", "Los Angeles", "Chicago", "Miami", "Seattle" };
|
|
var states = new string[] { "NY", "CA", "IL", "FL", "WA" };
|
|
var zipCodes = new string[] { "10001", "90210", "60601", "33101", "98101" };
|
|
|
|
var random = new Random();
|
|
var entityName = nameof(Employee);
|
|
|
|
var employeeData = new List<(string Name, string Title, string GroupName, string CategoryName, decimal Commission)>
|
|
{
|
|
("Dr. Robert Sterling", "Chief Medical Officer", "Medical Doctors & Specialists", "Medical & Clinical Professionals", 0.00m),
|
|
("Dr. Jennifer Adams", "General Practitioner", "Medical Doctors & Specialists", "Medical & Clinical Professionals", 0.15m),
|
|
("Dr. David Miller", "Orthopedic Surgeon", "Medical Doctors & Specialists", "Medical & Clinical Professionals", 0.20m),
|
|
("Sarah Mitchell", "Head Nurse", "Registered Nurses & Care Staff", "Nursing & Clinical Support", 0.00m),
|
|
("Jessica Taylor", "ER Triage Nurse", "Registered Nurses & Care Staff", "Nursing & Clinical Support", 0.00m),
|
|
("Michael Vance", "Senior Pharmacist", "Pharmacy & Dispensing Team", "Allied Health & Diagnostics", 0.00m),
|
|
("Amanda Williams", "Pharmacy Technician", "Pharmacy & Dispensing Team", "Allied Health & Diagnostics", 0.00m),
|
|
("Christopher Moore", "Lead Phlebotomist", "Laboratory & Diagnostic Technicians", "Allied Health & Diagnostics", 0.00m),
|
|
("Kevin Anderson", "Clinical Lab Scientist", "Laboratory & Diagnostic Technicians", "Allied Health & Diagnostics", 0.00m),
|
|
("Samantha White", "MRI Technologist", "Radiology & Imaging Technicians", "Allied Health & Diagnostics", 0.00m),
|
|
("Dr. Ashley Johnson", "Chief Dentist", "Dental & Allied Health Professionals", "Medical & Clinical Professionals", 0.15m),
|
|
("Matthew Davis", "Dental Hygienist", "Dental & Allied Health Professionals", "Allied Health & Diagnostics", 0.05m),
|
|
("Lauren Martinez", "Receptionist Lead", "Patient Reception & Front Desk", "Administrative & Management", 0.00m),
|
|
("Jonathan Wilson", "Admissions Coordinator", "Patient Reception & Front Desk", "Administrative & Management", 0.00m),
|
|
("Stephanie Rodriguez", "Billing Specialist", "Medical Billing & Insurance", "Administrative & Management", 0.00m),
|
|
("Nicholas Thomas", "Insurance Coordinator", "Medical Billing & Insurance", "Administrative & Management", 0.00m),
|
|
("Jason Hernandez", "Clinic Administrator", "Clinic Administration & Management", "Administrative & Management", 0.00m),
|
|
("Olivia Jackson", "HR Manager", "Clinic Administration & Management", "Administrative & Management", 0.00m),
|
|
("Alexander Smith", "Facility Supervisor", "Facility Maintenance & Security", "Operations & Facility Support", 0.00m),
|
|
("Elizabeth Brown", "Security Lead", "Facility Maintenance & Security", "Operations & Facility Support", 0.00m)
|
|
};
|
|
|
|
foreach (var data in employeeData)
|
|
{
|
|
var group = groups.FirstOrDefault(x => x.Name == data.GroupName);
|
|
var category = categories.FirstOrDefault(x => x.Name == data.CategoryName);
|
|
|
|
var autoNo = await context.GenerateAutoNumberAsync(
|
|
entityName: entityName,
|
|
prefixTemplate: $"EMP-{{Year}}-"
|
|
);
|
|
|
|
var emailPrefix = data.Name.Replace("Dr. ", "").Replace(" ", ".").ToLower();
|
|
|
|
var employee = new Employee
|
|
{
|
|
Name = data.Name,
|
|
AutoNumber = autoNo,
|
|
EmployeeNumber = $"ID-{random.Next(1000, 9999)}",
|
|
JobTitle = data.Title,
|
|
CommissionRate = data.Commission,
|
|
EmployeeGroupId = group?.Id,
|
|
EmployeeCategoryId = category?.Id,
|
|
Street = $"{random.Next(100, 999)} {GetRandomString(streets, random)}",
|
|
City = GetRandomString(cities, random),
|
|
State = GetRandomString(states, random),
|
|
ZipCode = GetRandomString(zipCodes, random),
|
|
Country = "United States",
|
|
PhoneNumber = $"+1-{random.Next(200, 999)}-{random.Next(100, 999)}-{random.Next(1000, 9999)}",
|
|
EmailAddress = $"{emailPrefix}@med-clinic.us",
|
|
Description = $"Professional {data.Title} based in the {data.CategoryName} division."
|
|
};
|
|
|
|
await context.Employee.AddAsync(employee);
|
|
}
|
|
|
|
await context.SaveChangesAsync();
|
|
}
|
|
|
|
private static string GetRandomString(string[] array, Random random)
|
|
{
|
|
return array[random.Next(array.Length)];
|
|
}
|
|
} |