diff --git a/.claude/settings.local.json b/.claude/settings.local.json
deleted file mode 100644
index a8da82e..0000000
--- a/.claude/settings.local.json
+++ /dev/null
@@ -1,11 +0,0 @@
-{
- "permissions": {
- "allow": [
- "Bash(dotnet build:*)",
- "WebSearch",
- "Bash(dotnet add:*)"
- ],
- "deny": [],
- "ask": []
- }
-}
diff --git a/.gitignore b/.gitignore
index 890ce3e..154e127 100644
--- a/.gitignore
+++ b/.gitignore
@@ -475,5 +475,3 @@ $RECYCLE.BIN/
# Windows shortcuts
*.lnk
-
-.claude
\ No newline at end of file
diff --git a/.idea/.idea.BMA.EHR.Recruit.Service/.idea/.gitignore b/.idea/.idea.BMA.EHR.Recruit.Service/.idea/.gitignore
deleted file mode 100644
index 889a0d6..0000000
--- a/.idea/.idea.BMA.EHR.Recruit.Service/.idea/.gitignore
+++ /dev/null
@@ -1,13 +0,0 @@
-# Default ignored files
-/shelf/
-/workspace.xml
-# Rider ignored files
-/contentModel.xml
-/projectSettingsUpdater.xml
-/modules.xml
-/.idea.BMA.EHR.Recruit.Service.iml
-# Editor-based HTTP Client requests
-/httpRequests/
-# Datasource local storage ignored files
-/dataSources/
-/dataSources.local.xml
diff --git a/.idea/.idea.BMA.EHR.Recruit.Service/.idea/.name b/.idea/.idea.BMA.EHR.Recruit.Service/.idea/.name
deleted file mode 100644
index aaf1117..0000000
--- a/.idea/.idea.BMA.EHR.Recruit.Service/.idea/.name
+++ /dev/null
@@ -1 +0,0 @@
-BMA.EHR.Recruit.Service
\ No newline at end of file
diff --git a/.idea/.idea.BMA.EHR.Recruit.Service/.idea/encodings.xml b/.idea/.idea.BMA.EHR.Recruit.Service/.idea/encodings.xml
deleted file mode 100644
index df87cf9..0000000
--- a/.idea/.idea.BMA.EHR.Recruit.Service/.idea/encodings.xml
+++ /dev/null
@@ -1,4 +0,0 @@
-
-
-
-
\ No newline at end of file
diff --git a/.idea/.idea.BMA.EHR.Recruit.Service/.idea/indexLayout.xml b/.idea/.idea.BMA.EHR.Recruit.Service/.idea/indexLayout.xml
deleted file mode 100644
index 7b08163..0000000
--- a/.idea/.idea.BMA.EHR.Recruit.Service/.idea/indexLayout.xml
+++ /dev/null
@@ -1,8 +0,0 @@
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/.idea/.idea.BMA.EHR.Recruit.Service/.idea/vcs.xml b/.idea/.idea.BMA.EHR.Recruit.Service/.idea/vcs.xml
deleted file mode 100644
index 35eb1dd..0000000
--- a/.idea/.idea.BMA.EHR.Recruit.Service/.idea/vcs.xml
+++ /dev/null
@@ -1,6 +0,0 @@
-
-
-
-
-
-
\ No newline at end of file
diff --git a/BMA.EHR.Recruit.csproj b/BMA.EHR.Recruit.Service.csproj
similarity index 95%
rename from BMA.EHR.Recruit.csproj
rename to BMA.EHR.Recruit.Service.csproj
index c148fa1..4f3c513 100644
--- a/BMA.EHR.Recruit.csproj
+++ b/BMA.EHR.Recruit.Service.csproj
@@ -7,6 +7,7 @@
d45c95ce-6b9d-4aa7-aaaf-62fe8b792934
Linux
True
+ BMA.EHR.Recruit.Service
@@ -22,10 +23,7 @@
-
-
-
diff --git a/BMA.EHR.Recruit.Service.csproj.user b/BMA.EHR.Recruit.Service.csproj.user
new file mode 100644
index 0000000..96e63d6
--- /dev/null
+++ b/BMA.EHR.Recruit.Service.csproj.user
@@ -0,0 +1,9 @@
+
+
+
+ https
+
+
+ ProjectDebugger
+
+
\ No newline at end of file
diff --git a/BMA.EHR.Recruit.Service.sln b/BMA.EHR.Recruit.Service.sln
index 65a413c..95679a8 100644
--- a/BMA.EHR.Recruit.Service.sln
+++ b/BMA.EHR.Recruit.Service.sln
@@ -3,7 +3,7 @@ Microsoft Visual Studio Solution File, Format Version 12.00
# Visual Studio Version 17
VisualStudioVersion = 17.5.33424.131
MinimumVisualStudioVersion = 10.0.40219.1
-Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "BMA.EHR.Recruit", "BMA.EHR.Recruit.csproj", "{3FBBE410-D10A-4FF6-9BEE-F663381CCA22}"
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "BMA.EHR.Recruit.Service", "BMA.EHR.Recruit.Service.csproj", "{3FBBE410-D10A-4FF6-9BEE-F663381CCA22}"
EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
diff --git a/CLAUDE.md b/CLAUDE.md
deleted file mode 100644
index 273523d..0000000
--- a/CLAUDE.md
+++ /dev/null
@@ -1,76 +0,0 @@
-# CLAUDE.md
-
-This file provides guidance to Claude Code (claude.ai/code) when working with code in this repository.
-
-## Build & Run
-
-```bash
-dotnet build BMA.EHR.Recruit.Service.sln
-dotnet build BMA.EHR.Recruit.Service.sln -c Release
-dotnet publish -c Release -o /app/publish /p:UseAppHost=false
-```
-
-No test projects exist in this solution.
-
-## Architecture
-
-**Stack:** ASP.NET Core 7.0 Web API / EF Core 7.0 / MySQL (Pomelo) / MinIO (S3) / Keycloak (JWT)
-
-**Pattern:** Controllers → Services → EF Core DbContext (no repository layer for main data)
-
-### Multiple DbContexts
-Three separate MySQL databases, each with its own `DbContext`:
-- `ApplicationDbContext` — Recruitment data (Recruits, Scores, Imports)
-- `OrgDbContext` — Organization data
-- `MetadataDbContext` — Metadata
-
-All registered as `Transient` lifetime. Auto-migration runs on startup.
-
-### Controllers
-- `BaseController` provides standardized `Success()` / `Error()` response methods returning `ResponseObject` (Status, Message, Result)
-- `RecruitController` is the sole business controller (route: `api/v{version}/recruit`)
-- API versioning enabled via `Microsoft.AspNetCore.Mvc.Versioning`
-
-### Background Import System
-Excel file imports run asynchronously through a Channel-based queue:
-- `ImportBackgroundService` (BackgroundService) — dequeues and processes jobs
-- `ImportJobQueue` — bounded Channel (capacity 100)
-- `ImportJobTracker` — in-memory ConcurrentDictionary tracking
-
-Four import types: `CandidateFile`, `CandidateFileById`, `ScoreFile`, `ResultFile`
-
-All imports use `EFCore.BulkExtensions.MySql` (v6.7.16) for bulk operations to handle 50,000+ rows without memory issues. Pattern:
-1. Insert parent/history entities via `SaveChangesAsync` (small operations)
-2. `ChangeTracker.Clear()` to release references
-3. Collect entities into separate `List` per table
-4. `BulkInsertAsync` with `SetOutputIdentity = true` for parent entities
-5. Assign generated Ids to child entities
-6. `BulkInsertAsync` for each child entity table separately
-7. Batch size: 500
-
-### Entity Models
-All entities inherit from `EntityBase` (Guid `Id` PK, audit fields: `CreatedAt`, `CreatedUserId`, `LastUpdatedAt`, etc.). Models are in `Models/` with subdirectories: `Recruits/`, `Documents/`, `HR/`, `MetaData/`, `Placement/`.
-
-Key relationships use navigation properties without explicit FK properties (EF shadow properties). Configured via fluent API in `OnModelCreating`.
-
-### External Services
-- **Authentication:** Keycloak JWT Bearer (`hrmsbkk-id.case-collection.com/realms/hrms`)
-- **File Storage:** MinIO via `MinIOService` (AWS S3 SDK)
-- **Search/Logging:** Elasticsearch (NEST client)
-- **Excel:** EPPlus for reading import files
-
-## Key Files
-
-- `Program.cs` — Service registration, middleware pipeline, auto-migration
-- `Data/ApplicationDbContext.cs` — EF Core fluent API relationship configuration
-- `Services/ImportBackgroundService.cs` — All bulk import logic (4 import methods)
-- `Services/RecruitService.cs` — Core business logic
-- `Controllers/BaseController.cs` — Standard response helpers
-- `Responses/ResponseObject.cs` — Standard API response envelope
-
-## Conventions
-
-- Language: C# with nullable reference types enabled
-- Naming: PascalCase properties, `_camelCase` parameters in service methods
-- API responses: Always wrapped in `ResponseObject`
-- Authorization: `[Authorize]` on controllers, user context from JWT claims
diff --git a/ConfigureSwaggerOptions.cs b/ConfigureSwaggerOptions.cs
index 7284102..17da340 100644
--- a/ConfigureSwaggerOptions.cs
+++ b/ConfigureSwaggerOptions.cs
@@ -4,7 +4,7 @@ using Microsoft.OpenApi.Models;
using Swashbuckle.AspNetCore.SwaggerGen;
using System.Reflection;
-namespace BMA.EHR.Recruit
+namespace BMA.EHR.Recruit.Service
{
public class ConfigureSwaggerOptions : IConfigureNamedOptions
{
diff --git a/Controllers/BaseController.cs b/Controllers/BaseController.cs
index 033134e..89d5494 100644
--- a/Controllers/BaseController.cs
+++ b/Controllers/BaseController.cs
@@ -1,12 +1,11 @@
// using BMA.EHR.Core;
-
-using BMA.EHR.Recruit.Services;
+using BMA.EHR.Recruit.Service.Responses;
+using BMA.EHR.Recruit.Service.Services;
using Microsoft.AspNetCore.Http;
using Microsoft.AspNetCore.Mvc;
using System.Net;
-using BMA.EHR.Recruit.Responses;
-namespace BMA.EHR.Recruit.Controllers
+namespace BMA.EHR.Recruit.Service.Controllers
{
public class BaseController : ControllerBase
{
diff --git a/Controllers/RecruitController.cs b/Controllers/RecruitController.cs
index f88a564..d9fcbd0 100644
--- a/Controllers/RecruitController.cs
+++ b/Controllers/RecruitController.cs
@@ -1,6 +1,13 @@
using Amazon.S3.Model;
using BMA.EHR.MetaData.Service.Models;
using BMA.EHR.Profile.Service.Models.HR;
+using BMA.EHR.Recruit.Service.Core;
+using BMA.EHR.Recruit.Service.Data;
+using BMA.EHR.Recruit.Service.Extensions;
+using BMA.EHR.Recruit.Service.Models.Recruits;
+using BMA.EHR.Recruit.Service.Requests.Recruits;
+using BMA.EHR.Recruit.Service.Responses;
+using BMA.EHR.Recruit.Service.Services;
using BMA.EHR.Recurit.Service.Data;
using Microsoft.AspNetCore.Authorization;
using Microsoft.AspNetCore.Mvc;
@@ -24,15 +31,8 @@ using System.Globalization;
using OfficeOpenXml.Style;
using System.Drawing;
using System.Linq;
-using BMA.EHR.Recruit.Core;
-using BMA.EHR.Recruit.Data;
-using BMA.EHR.Recruit.Extensions;
-using BMA.EHR.Recruit.Models.Recruits;
-using BMA.EHR.Recruit.Requests.Recruits;
-using BMA.EHR.Recruit.Responses;
-using BMA.EHR.Recruit.Services;
-namespace BMA.EHR.Recruit.Controllers
+namespace BMA.EHR.Recruit.Service.Controllers
{
[Route("api/v{version:apiVersion}/recruit")]
[ApiVersion("1.0")]
@@ -53,8 +53,6 @@ namespace BMA.EHR.Recruit.Controllers
private readonly IHttpContextAccessor _httpContextAccessor;
private readonly ILogger _logger;
private readonly IConfiguration _configuration;
- private readonly ImportJobQueue _importJobQueue;
- private readonly ImportJobTracker _importJobTracker;
//private readonly DateTimeExtension;
#endregion
@@ -69,9 +67,7 @@ namespace BMA.EHR.Recruit.Controllers
IHttpContextAccessor httpContextAccessor,
ILogger logger,
IConfiguration configuration,
- PermissionRepository permission,
- ImportJobQueue importJobQueue,
- ImportJobTracker importJobTracker
+ PermissionRepository permission
//DateTimeExtension extensions
)
{
@@ -84,8 +80,6 @@ namespace BMA.EHR.Recruit.Controllers
_configuration = configuration;
_logger = logger;
_permission = permission;
- _importJobQueue = importJobQueue;
- _importJobTracker = importJobTracker;
//_extensions = extensions;
}
@@ -96,9 +90,6 @@ namespace BMA.EHR.Recruit.Controllers
private string? UserId => _httpContextAccessor?.HttpContext?.User?.FindFirst(ClaimTypes.NameIdentifier)?.Value;
private string? FullName => _httpContextAccessor?.HttpContext?.User?.FindFirst("name")?.Value;
-
- private string? RootDnaId => _httpContextAccessor?.HttpContext?.User?.FindFirst("orgRootDnaId")?.Value;
-
private string? token => _httpContextAccessor.HttpContext.Request.Headers["Authorization"];
#endregion
@@ -380,7 +371,6 @@ namespace BMA.EHR.Recruit.Controllers
try
{
var data = await _context.RecruitImports.AsQueryable()
- .AsNoTracking()
.Include(x => x.RecruitImages)
.ThenInclude(x => x.Document)
.Include(x => x.RecruitDocuments)
@@ -480,21 +470,16 @@ namespace BMA.EHR.Recruit.Controllers
PaymentEndDate = req.PaymentEndDate,
Note = req.Note,
AnnouncementDate = req.AnnouncementDate,
- ScoreExpireDate = req.ScoreExpireDate,
- OrganizationId = req.rootDnaId,
CreatedAt = DateTime.Now,
CreatedUserId = UserId ?? "",
CreatedFullName = FullName ?? "System Administrator",
- LastUpdatedAt = DateTime.Now,
- LastUpdateUserId = UserId ?? "",
- LastUpdateFullName = FullName ?? "System Administrator",
};
var apiUrl = $"{_configuration["API"]}/org/find/head/officer";
using (var client = new HttpClient())
{
client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", token.Replace("Bearer ", ""));
- client.DefaultRequestHeaders.Add("api-key", _configuration["API_KEY"]);
+ client.DefaultRequestHeaders.Add("api_key", _configuration["API_KEY"]);
var _req = new HttpRequestMessage(HttpMethod.Get, apiUrl);
var _res = await client.SendAsync(_req);
var _result = await _res.Content.ReadAsStringAsync();
@@ -562,11 +547,6 @@ namespace BMA.EHR.Recruit.Controllers
data.ExamDate = req.ExamDate;
data.Note = req.Note;
data.AnnouncementDate = req.AnnouncementDate;
- if (req.ScoreExpireDate.HasValue)
- data.ScoreExpireDate = req.ScoreExpireDate;
- data.LastUpdatedAt = DateTime.Now;
- data.LastUpdateUserId = UserId ?? "";
- data.LastUpdateFullName = FullName ?? "System Administrator";
await _context.SaveChangesAsync();
@@ -657,14 +637,7 @@ namespace BMA.EHR.Recruit.Controllers
{
return Error(jsonData["message"]?.ToString(), StatusCodes.Status403Forbidden);
}
- string role = jsonData["result"]?.ToString() ?? string.Empty;
- string rootDnaId = string.Empty;
- if (role != "OWNER")
- {
- rootDnaId = RootDnaId?.ToString() ?? "";
- }
var data = await _context.RecruitImports.AsQueryable()
- .Where(x => string.IsNullOrEmpty(rootDnaId) || x.OrganizationId == Guid.Parse(rootDnaId))
.Include(x => x.ImportFile)
.Include(x => x.Recruits)
.Include(x => x.ScoreImport)
@@ -689,7 +662,7 @@ namespace BMA.EHR.Recruit.Controllers
ImportYear = x.ScoreImport.Year,
ImportDate = x.CreatedAt.Date.ToThaiShortDate(),
ScoreCount = x.ScoreImport.Scores.Count(),
- ResultCount = x.ScoreImport.Scores.Count(x => x.ExamStatus == "ผ่าน" && !string.IsNullOrEmpty(x.Number))
+ ResultCount = x.ScoreImport.Scores.Count(x => !string.IsNullOrEmpty(x.Number))
},
x.CreatedUserId,
})
@@ -726,6 +699,7 @@ namespace BMA.EHR.Recruit.Controllers
Directory.CreateDirectory(tmpDir);
var importFile = Path.Combine(tmpDir, $"c_{DateTime.Now.ToString("ddMMyyyyHHmmss")}.xlsx");
+ var import_doc_id = "";
try
{
@@ -736,15 +710,11 @@ namespace BMA.EHR.Recruit.Controllers
var file = Request.Form.Files[0];
var doc = await _minioService.UploadFileAsync(file);
- var import_doc_id = doc.Id.ToString("D");
+ import_doc_id = doc.Id.ToString("D");
- // Write file to disk directly from IFormFile instead of downloading back from MinIO
- using (var stream = new FileStream(importFile, FileMode.Create))
- {
- await file.CopyToAsync(stream);
- }
+ var fileContent = (await _minioService.DownloadFileAsync(doc.Id)).FileContent;
- // สร้างรอบการบรรจุ
+ // สร้างรอบการบรรจุ โดยเอาเข้ามูลมาใส่จาก Request
var imported = new RecruitImport
{
Year = req.Year,
@@ -767,28 +737,151 @@ namespace BMA.EHR.Recruit.Controllers
};
await _context.RecruitImports.AddAsync(imported);
- await _context.SaveChangesAsync();
- // Enqueue background job
- var job = _importJobTracker.CreateJob(new ImportJobInfo
+ // import datafile
+ System.IO.File.WriteAllBytes(importFile, fileContent);
+
+ using (var c_package = new ExcelPackage(new FileInfo(importFile)))
{
- JobType = ImportJobType.CandidateFile,
- ImportFile = importFile,
- RecruitImportId = imported.Id,
- ImportDocId = import_doc_id,
- UserId = UserId,
- FullName = FullName,
- Token = token,
- Request = req,
- });
- await _importJobQueue.EnqueueAsync(job);
+ // loop from sheet2 to end
+
+ for (int i = 0; i < c_package.Workbook.Worksheets.Count; i++)
+ {
+ var workSheet = c_package.Workbook.Worksheets[i];
+ var totalRows = workSheet.Dimension.Rows;
+ var cols = workSheet.GetHeaderColumns();
+
+ int row = 2;
+
+ while (row <= totalRows)
+ {
+ var cell1 = workSheet?.Cells[row, 1]?.GetValue();
+ if (cell1 == "" || cell1 == null) break;
+
+ var r = new Models.Recruits.Recruit();
+ r.ExamId = workSheet?.Cells[row, GetColumnIndex(cols, CandidateFileHeader.ExamID)]?.GetValue();
+ r.CitizenId = workSheet?.Cells[row, GetColumnIndex(cols, CandidateFileHeader.PersonalID)]?.GetValue();
+ r.Prefix = workSheet?.Cells[row, GetColumnIndex(cols, CandidateFileHeader.Prefix)]?.GetValue();
+ r.FirstName = workSheet?.Cells[row, GetColumnIndex(cols, CandidateFileHeader.FirstName)]?.GetValue();
+ r.LastName = workSheet?.Cells[row, GetColumnIndex(cols, CandidateFileHeader.LastName)]?.GetValue();
+ r.Gendor = workSheet?.Cells[row, GetColumnIndex(cols, CandidateFileHeader.Gender)]?.GetValue();
+ r.National = workSheet?.Cells[row, GetColumnIndex(cols, CandidateFileHeader.National)]?.GetValue().IsNull("");
+ r.Race = workSheet?.Cells[row, GetColumnIndex(cols, CandidateFileHeader.Race)]?.GetValue().IsNull("");
+ r.Religion = workSheet?.Cells[row, GetColumnIndex(cols, CandidateFileHeader.Religion)]?.GetValue().IsNull("");
+ r.DateOfBirth = Convert.ToDateTime(workSheet?.Cells[row, GetColumnIndex(cols, CandidateFileHeader.DateOfBirth)]?.GetValue().ToDateTime(DateTimeFormat.Ymd, "-"));
+ r.Marry = workSheet?.Cells[row, GetColumnIndex(cols, CandidateFileHeader.Marry)]?.GetValue();
+ r.Isspecial = "N";
+ r.CitizenCardIssuer = workSheet?.Cells[row, GetColumnIndex(cols, CandidateFileHeader.PersonalCardIssue)]?.GetValue();
+ r.CitizenCardExpireDate = Convert.ToDateTime(workSheet?.Cells[row, GetColumnIndex(cols, CandidateFileHeader.PersonalCardExpireDate)]?.GetValue().ToDateTime(DateTimeFormat.Ymd, "-"));
+ r.ApplyDate = (DateTime)workSheet?.Cells[row, GetColumnIndex(cols, CandidateFileHeader.ApplyDate)]?.GetValue();
+ r.PositionName = workSheet?.Cells[row, GetColumnIndex(cols, CandidateFileHeader.PositionName)]?.GetValue().IsNull("");
+ r.PositionType = workSheet?.Cells[row, GetColumnIndex(cols, CandidateFileHeader.PositionType)]?.GetValue().IsNull("");
+ r.PositionLevel = workSheet?.Cells[row, GetColumnIndex(cols, CandidateFileHeader.PositionLevel)]?.GetValue().IsNull("");
+
+
+ // address
+ r.Addresses.Add(new RecruitAddress()
+ {
+ Address = workSheet?.Cells[row, GetColumnIndex(cols, CandidateFileHeader.Address)]?.GetValue() ?? "",
+ Moo = workSheet?.Cells[row, GetColumnIndex(cols, CandidateFileHeader.Moo)]?.GetValue() ?? "",
+ Soi = workSheet?.Cells[row, GetColumnIndex(cols, CandidateFileHeader.Soi)]?.GetValue() ?? "",
+ Road = workSheet?.Cells[row, GetColumnIndex(cols, CandidateFileHeader.Road)]?.GetValue() ?? "",
+ District = workSheet?.Cells[row, GetColumnIndex(cols, CandidateFileHeader.District)]?.GetValue() ?? "",
+ Amphur = workSheet?.Cells[row, GetColumnIndex(cols, CandidateFileHeader.Amphur)]?.GetValue() ?? "",
+ Province = workSheet?.Cells[row, GetColumnIndex(cols, CandidateFileHeader.Province)]?.GetValue() ?? "",
+ ZipCode = workSheet?.Cells[row, GetColumnIndex(cols, CandidateFileHeader.ZipCode)]?.GetValue() ?? "",
+ Telephone = workSheet?.Cells[row, GetColumnIndex(cols, CandidateFileHeader.Telephone)]?.GetValue() ?? "",
+ Mobile = workSheet?.Cells[row, GetColumnIndex(cols, CandidateFileHeader.Mobile)]?.GetValue() ?? "",
+ Address1 = workSheet?.Cells[row, GetColumnIndex(cols, CandidateFileHeader.Address1)]?.GetValue() ?? "",
+ Moo1 = workSheet?.Cells[row, GetColumnIndex(cols, CandidateFileHeader.Moo1)]?.GetValue() ?? "",
+ Soi1 = workSheet?.Cells[row, GetColumnIndex(cols, CandidateFileHeader.Soi1)]?.GetValue() ?? "",
+ Road1 = workSheet?.Cells[row, GetColumnIndex(cols, CandidateFileHeader.Road1)]?.GetValue() ?? "",
+ District1 = workSheet?.Cells[row, GetColumnIndex(cols, CandidateFileHeader.District1)]?.GetValue() ?? "",
+ Amphur1 = workSheet?.Cells[row, GetColumnIndex(cols, CandidateFileHeader.Amphur1)]?.GetValue() ?? "",
+ Province1 = workSheet?.Cells[row, GetColumnIndex(cols, CandidateFileHeader.Province1)]?.GetValue() ?? "",
+ ZipCode1 = workSheet?.Cells[row, GetColumnIndex(cols, CandidateFileHeader.ZipCode1)]?.GetValue() ?? "",
+ });
+
+ // payment
+ r.Payments.Add(new RecruitPayment()
+ {
+ PaymentId = workSheet?.Cells[row, GetColumnIndex(cols, CandidateFileHeader.PaymentID)]?.GetValue() ?? "",
+ CompanyCode = workSheet?.Cells[row, GetColumnIndex(cols, CandidateFileHeader.CompanyCode)]?.GetValue() ?? "",
+ TextFile = workSheet?.Cells[row, GetColumnIndex(cols, CandidateFileHeader.TextFile)]?.GetValue() ?? "",
+ BankCode = workSheet?.Cells[row, GetColumnIndex(cols, CandidateFileHeader.BankCode)]?.GetValue() ?? "",
+ AccountNumber = workSheet?.Cells[row, GetColumnIndex(cols, CandidateFileHeader.AccouontNumer)]?.GetValue() ?? "",
+ TransDate = workSheet?.Cells[row, GetColumnIndex(cols, CandidateFileHeader.TransDate)]?.GetValue() ?? "",
+ TransTime = workSheet?.Cells[row, GetColumnIndex(cols, CandidateFileHeader.TransTime)]?.GetValue() ?? "",
+ CustomerName = workSheet?.Cells[row, GetColumnIndex(cols, CandidateFileHeader.CustomerName)]?.GetValue() ?? "",
+ RefNo1 = workSheet?.Cells[row, GetColumnIndex(cols, CandidateFileHeader.RefNo1)]?.GetValue() ?? "",
+ TermBranch = workSheet?.Cells[row, GetColumnIndex(cols, CandidateFileHeader.TermBranch)]?.GetValue() ?? "",
+ TellerId = workSheet?.Cells[row, GetColumnIndex(cols, CandidateFileHeader.TellerID)]?.GetValue() ?? "",
+ CreditDebit = workSheet?.Cells[row, GetColumnIndex(cols, CandidateFileHeader.CreditDebit)]?.GetValue() ?? "",
+ PaymentType = workSheet?.Cells[row, GetColumnIndex(cols, CandidateFileHeader.Type)]?.GetValue(),
+ ChequeNo = workSheet?.Cells[row, GetColumnIndex(cols, CandidateFileHeader.ChequeNo)]?.GetValue() ?? "",
+ Amount = (decimal)workSheet?.Cells[row, GetColumnIndex(cols, CandidateFileHeader.Amount)]?.GetValue(),
+ ChqueBankCode = workSheet?.Cells[row, GetColumnIndex(cols, CandidateFileHeader.ChqBankCode)]?.GetValue() ?? ""
+ });
+
+ // occupation
+ r.Occupations.Add(new RecruitOccupation()
+ {
+ Occupation = workSheet?.Cells[row, GetColumnIndex(cols, CandidateFileHeader.Occupation)]?.GetValue() ?? "",
+ Position = workSheet?.Cells[row, GetColumnIndex(cols, CandidateFileHeader.Position)]?.GetValue() ?? "",
+ Workplace = workSheet?.Cells[row, GetColumnIndex(cols, CandidateFileHeader.Workplace)]?.GetValue() ?? "",
+ Telephone = workSheet?.Cells[row, GetColumnIndex(cols, CandidateFileHeader.WorkplaceTelephone)]?.GetValue() ?? "",
+ WorkAge = workSheet?.Cells[row, GetColumnIndex(cols, CandidateFileHeader.WorkAge)]?.GetValue() ?? "",
+ });
+
+ // certificate
+ r.Certificates.Add(new RecruitCertificate()
+ {
+ CertificateNo = workSheet?.Cells[row, GetColumnIndex(cols, CandidateFileHeader.CertificateNo)]?.GetValue() ?? "",
+ Description = workSheet?.Cells[row, GetColumnIndex(cols, CandidateFileHeader.CertificateDesc)]?.GetValue() ?? "",
+ IssueDate = Convert.ToDateTime(workSheet?.Cells[row, GetColumnIndex(cols, CandidateFileHeader.CertificateIssueDate)]?.GetValue().ToDateTime(DateTimeFormat.Ymd, "-")),
+ ExpiredDate = Convert.ToDateTime(workSheet?.Cells[row, GetColumnIndex(cols, CandidateFileHeader.CertificateExpireDate)]?.GetValue().ToDateTime(DateTimeFormat.Ymd, "-"))
+ });
+
+ r.Educations.Add(new RecruitEducation()
+ {
+ Degree = workSheet?.Cells[row, GetColumnIndex(cols, CandidateFileHeader.Degree)]?.GetValue() ?? "",
+ Major = workSheet?.Cells[row, GetColumnIndex(cols, CandidateFileHeader.Major)]?.GetValue() ?? "",
+ MajorGroupId = workSheet?.Cells[row, GetColumnIndex(cols, CandidateFileHeader.MajorGroupID)]?.GetValue() ?? "",
+ MajorGroupName = workSheet?.Cells[row, GetColumnIndex(cols, CandidateFileHeader.MajorGroupName)]?.GetValue() ?? "",
+ University = workSheet?.Cells[row, GetColumnIndex(cols, CandidateFileHeader.University)]?.GetValue() ?? "",
+ GPA = (double)workSheet?.Cells[row, GetColumnIndex(cols, CandidateFileHeader.GPA)]?.GetValue(),
+ Specialist = workSheet?.Cells[row, GetColumnIndex(cols, CandidateFileHeader.SpecialList)]?.GetValue() ?? "",
+ HighDegree = workSheet?.Cells[row, GetColumnIndex(cols, CandidateFileHeader.HighDegree)]?.GetValue() ?? "",
+ BachelorDate = Convert.ToDateTime(workSheet?.Cells[row, GetColumnIndex(cols, CandidateFileHeader.BachelorDate)]?.GetValue().ToDateTime(DateTimeFormat.Ymd, "-"))
+ });
+
+ r.RecruitImport = imported;
+ _context.Recruits.Add(r);
+
+ //imported.Recruits.Add(r);
+ row++;
+
+ }
+ }
+ }
+
+ // finally save to database
+
+ _context.SaveChanges();
+
+ return Success();
- return Success(new { jobId = job.JobId, status = "queued" });
}
catch (Exception ex)
{
+ await _minioService.DeleteFileAsync(Guid.Parse(import_doc_id));
return Error(ex);
}
+ finally
+ {
+ if (System.IO.File.Exists(importFile))
+ System.IO.File.Delete(importFile);
+ }
}
///
@@ -927,6 +1020,7 @@ namespace BMA.EHR.Recruit.Controllers
Directory.CreateDirectory(tmpDir);
var importFile = Path.Combine(tmpDir, $"c_{DateTime.Now.ToString("ddMMyyyyHHmmss")}.xlsx");
+ var import_doc_id = "";
try
{
@@ -939,6 +1033,16 @@ namespace BMA.EHR.Recruit.Controllers
.Include(x => x.ImportHostories)
.Include(x => x.ImportFile)
.Include(x => x.Recruits)
+ .ThenInclude(x => x.Addresses)
+ .Include(x => x.Recruits)
+ .ThenInclude(x => x.Occupations)
+ .Include(x => x.Recruits)
+ .ThenInclude(x => x.Certificates)
+ .Include(x => x.Recruits)
+ .ThenInclude(x => x.Educations)
+ .Include(x => x.Recruits)
+ .ThenInclude(x => x.Payments)
+ .Include(x => x.Recruits)
.FirstOrDefaultAsync(x => x.Id == id);
if (imported == null)
@@ -946,39 +1050,213 @@ namespace BMA.EHR.Recruit.Controllers
if (imported.Recruits != null)
{
+ // remove old score data
_context.Recruits.RemoveRange(imported.Recruits);
await _context.SaveChangesAsync();
}
var file = Request.Form.Files[0];
var doc = await _minioService.UploadFileAsync(file);
- var import_doc_id = doc.Id.ToString("D");
+ import_doc_id = doc.Id.ToString("D");
- // Write file to disk directly from IFormFile instead of downloading back from MinIO
- using (var stream = new FileStream(importFile, FileMode.Create))
+ var fileContent = (await _minioService.DownloadFileAsync(doc.Id)).FileContent;
+
+ // สร้างรอบการบรรจุ โดยเอาเข้ามูลมาใส่จาก Request
+ imported.ImportHostories.Add(new RecruitImportHistory
{
- await file.CopyToAsync(stream);
+ Description = "นำเข้าข้อมูลผู้สมัครสอบแข่งขัน",
+ CreatedAt = DateTime.Now,
+ CreatedUserId = UserId ?? "",
+ CreatedFullName = FullName ?? "System Administrator",
+ LastUpdatedAt = DateTime.Now,
+ LastUpdateUserId = UserId ?? "",
+ LastUpdateFullName = FullName ?? "System Administrator",
+ });
+
+ //await _context.RecruitImports.AddAsync(imported);
+
+ // import datafile
+ System.IO.File.WriteAllBytes(importFile, fileContent);
+
+ using (var c_package = new ExcelPackage(new FileInfo(importFile)))
+ {
+ // loop from sheet2 to end
+
+ for (int i = 0; i < c_package.Workbook.Worksheets.Count; i++)
+ {
+ var workSheet = c_package.Workbook.Worksheets[i];
+ var totalRows = workSheet.Dimension.Rows;
+ var cols = workSheet.GetHeaderColumns();
+
+ int row = 2;
+
+ while (row <= totalRows)
+ {
+ var cell1 = workSheet?.Cells[row, 1]?.GetValue();
+ if (cell1 == "" || cell1 == null) break;
+
+ var r = new Models.Recruits.Recruit();
+ r.ExamId = workSheet?.Cells[row, 1]?.GetValue() ?? "";
+ r.PositionName = workSheet?.Cells[row, 3]?.GetValue() ?? "";
+ r.HddPosition = workSheet?.Cells[row, 4]?.GetValue() ?? "";
+ r.Prefix = workSheet?.Cells[row, 5]?.GetValue() == "อื่น ๆ" ? workSheet?.Cells[row, 6]?.GetValue() ?? "" : workSheet?.Cells[row, 5]?.GetValue() ?? "";
+ r.FirstName = workSheet?.Cells[row, 7]?.GetValue() ?? "";
+ r.LastName = workSheet?.Cells[row, 8]?.GetValue() ?? "";
+ r.Gendor = workSheet?.Cells[row, 98]?.GetValue() ?? "";
+ r.National = workSheet?.Cells[row, 9]?.GetValue() ?? "";
+ r.Race = "";
+ r.Religion = workSheet?.Cells[row, 10]?.GetValue() ?? "";
+ r.DateOfBirth = !string.IsNullOrWhiteSpace(workSheet?.Cells[row, 11]?.GetValue()) ? _recruitService.CheckDateTime(workSheet?.Cells[row, 11]?.GetValue() ?? "", "dd/MM/yyyy") : null;
+ r.CitizenId = workSheet?.Cells[row, 12]?.GetValue() ?? "";
+ r.typeTest = workSheet?.Cells[row, 13]?.GetValue() ?? "";
+ r.Marry = "";
+ r.Isspecial = "N";
+ r.CitizenCardExpireDate = null;
+ r.ModifiedDate = null;
+ r.ApplyDate = !string.IsNullOrWhiteSpace(workSheet?.Cells[row, 87]?.GetValue()) ? _recruitService.CheckDateTime(workSheet?.Cells[row, 87]?.GetValue() ?? "", "dd/MM/yyyy") : null;
+ r.PositionType = "";
+ r.PositionLevel = "";
+ r.CreatedAt = DateTime.Now;
+ r.CreatedUserId = UserId ?? "";
+ r.CreatedFullName = FullName ?? "System Administrator";
+ r.LastUpdatedAt = DateTime.Now;
+ r.LastUpdateUserId = UserId ?? "";
+ r.LastUpdateFullName = FullName ?? "System Administrator";
+
+ // education
+ r.Educations.Add(new RecruitEducation()
+ {
+ Degree = workSheet?.Cells[row, 18]?.GetValue() ?? "",
+ Major = workSheet?.Cells[row, 19]?.GetValue() == "อื่น ๆ" ? workSheet?.Cells[row, 20]?.GetValue() ?? "" : workSheet?.Cells[row, 19]?.GetValue() ?? "",
+ MajorGroupId = "",
+ MajorGroupName = "",
+ University = workSheet?.Cells[row, 21]?.GetValue() == "อื่น ๆ" ? workSheet?.Cells[row, 22]?.GetValue() ?? "" : workSheet?.Cells[row, 21]?.GetValue() ?? "",
+ GPA = (double)workSheet?.Cells[row, 26]?.GetValue(),
+ Specialist = "",
+ HighDegree = workSheet?.Cells[row, 27]?.GetValue() ?? "",
+ BachelorDate = !string.IsNullOrWhiteSpace(workSheet?.Cells[row, 25]?.GetValue()) ? _recruitService.CheckDateTime(workSheet?.Cells[row, 25]?.GetValue() ?? "", "dd/MM/yyyy") : null,
+ CreatedAt = DateTime.Now,
+ CreatedUserId = UserId ?? "",
+ CreatedFullName = FullName ?? "System Administrator",
+ LastUpdatedAt = DateTime.Now,
+ LastUpdateUserId = UserId ?? "",
+ LastUpdateFullName = FullName ?? "System Administrator"
+ });
+
+ // occupation
+ r.Occupations.Add(new RecruitOccupation()
+ {
+ Occupation = workSheet?.Cells[row, 33]?.GetValue() == "อื่น ๆ" ? workSheet?.Cells[row, 34]?.GetValue() ?? "" : workSheet?.Cells[row, 33]?.GetValue() ?? "",
+ Position = workSheet?.Cells[row, 37]?.GetValue() ?? "",
+ Workplace = $"{(workSheet?.Cells[row, 36]?.GetValue() ?? "")} {(workSheet?.Cells[row, 35]?.GetValue() ?? "")}",
+ Telephone = workSheet?.Cells[row, 9999]?.GetValue() ?? "",
+ WorkAge = workSheet?.Cells[row, 9999]?.GetValue() ?? "",
+ CreatedAt = DateTime.Now,
+ CreatedUserId = UserId ?? "",
+ CreatedFullName = FullName ?? "System Administrator",
+ LastUpdatedAt = DateTime.Now,
+ LastUpdateUserId = UserId ?? "",
+ LastUpdateFullName = FullName ?? "System Administrator"
+ });
+
+ // address
+ r.Addresses.Add(new RecruitAddress()
+ {
+ Address = $"{(workSheet?.Cells[row, 49]?.GetValue() ?? "")} {(workSheet?.Cells[row, 50]?.GetValue() ?? "")}",
+ Moo = workSheet?.Cells[row, 51]?.GetValue() ?? "",
+ Soi = workSheet?.Cells[row, 52]?.GetValue() ?? "",
+ Road = workSheet?.Cells[row, 53]?.GetValue() ?? "",
+ District = workSheet?.Cells[row, 54]?.GetValue() ?? "",
+ Amphur = workSheet?.Cells[row, 55]?.GetValue() ?? "",
+ Province = workSheet?.Cells[row, 56]?.GetValue() ?? "",
+ ZipCode = workSheet?.Cells[row, 57]?.GetValue() ?? "",
+ Telephone = workSheet?.Cells[row, 58]?.GetValue() ?? "",
+ Mobile = "",
+ Address1 = $"{(workSheet?.Cells[row, 61]?.GetValue() ?? "")} {(workSheet?.Cells[row, 62]?.GetValue() ?? "")}",
+ Moo1 = workSheet?.Cells[row, 63]?.GetValue() ?? "",
+ Soi1 = workSheet?.Cells[row, 64]?.GetValue() ?? "",
+ Road1 = workSheet?.Cells[row, 65]?.GetValue() ?? "",
+ District1 = workSheet?.Cells[row, 66]?.GetValue() ?? "",
+ Amphur1 = workSheet?.Cells[row, 67]?.GetValue() ?? "",
+ Province1 = workSheet?.Cells[row, 68]?.GetValue() ?? "",
+ ZipCode1 = workSheet?.Cells[row, 69]?.GetValue() ?? "",
+ CreatedAt = DateTime.Now,
+ CreatedUserId = UserId ?? "",
+ CreatedFullName = FullName ?? "System Administrator",
+ LastUpdatedAt = DateTime.Now,
+ LastUpdateUserId = UserId ?? "",
+ LastUpdateFullName = FullName ?? "System Administrator"
+ });
+
+ // payment
+ r.Payments.Add(new RecruitPayment()
+ {
+ PaymentId = workSheet?.Cells[row, 104]?.GetValue() ?? "",
+ CompanyCode = workSheet?.Cells[row, 105]?.GetValue() ?? "",
+ TextFile = workSheet?.Cells[row, 106]?.GetValue() ?? "",
+ BankCode = workSheet?.Cells[row, 107]?.GetValue() ?? "",
+ AccountNumber = workSheet?.Cells[row, 108]?.GetValue() ?? "",
+ TransDate = workSheet?.Cells[row, 109]?.GetValue() ?? "",
+ TransTime = workSheet?.Cells[row, 110]?.GetValue() ?? "",
+ CustomerName = workSheet?.Cells[row, 111]?.GetValue() ?? "",
+ RefNo1 = workSheet?.Cells[row, 112]?.GetValue() ?? "",
+ TermBranch = workSheet?.Cells[row, 113]?.GetValue() ?? "",
+ TellerId = workSheet?.Cells[row, 114]?.GetValue() ?? "",
+ CreditDebit = workSheet?.Cells[row, 115]?.GetValue() ?? "",
+ PaymentType = workSheet?.Cells[row, 116]?.GetValue(),
+ ChequeNo = workSheet?.Cells[row, 117]?.GetValue() ?? "",
+ Amount = (decimal)workSheet?.Cells[row, 118]?.GetValue(),
+ ChqueBankCode = workSheet?.Cells[row, 119]?.GetValue() ?? "",
+ CreatedAt = DateTime.Now,
+ CreatedUserId = UserId ?? "",
+ CreatedFullName = FullName ?? "System Administrator",
+ LastUpdatedAt = DateTime.Now,
+ LastUpdateUserId = UserId ?? "",
+ LastUpdateFullName = FullName ?? "System Administrator"
+ });
+ /*Comment ข้อมูลใบประกอบวิชาชีพ เพราะในไฟล์นำเข้ายังไม่มีคอลัมน์ที่ระบุข้อมูลส่วนนี้*/
+ //// certificate
+ //r.Certificates.Add(new RecruitCertificate()
+ //{
+ // CertificateNo = workSheet?.Cells[row, 9999]?.GetValue() ?? "",
+ // Description = workSheet?.Cells[row, 9999]?.GetValue() ?? "",
+ // IssueDate = Convert.ToDateTime(workSheet?.Cells[row, 9999]?.GetValue().ToDateTime(DateTimeFormat.Ymd, "-")),
+ // ExpiredDate = Convert.ToDateTime(workSheet?.Cells[row, 9999]?.GetValue().ToDateTime(DateTimeFormat.Ymd, "-")),
+ // CreatedAt = DateTime.Now,
+ // CreatedUserId = UserId ?? "",
+ // CreatedFullName = FullName ?? "System Administrator",
+ // LastUpdatedAt = DateTime.Now,
+ // LastUpdateUserId = UserId ?? "",
+ // LastUpdateFullName = FullName ?? "System Administrator"
+ //});
+
+ r.RecruitImport = imported;
+ _context.Recruits.Add(r);
+
+ //imported.Recruits.Add(r);
+ row++;
+
+ }
+ }
}
- // Enqueue background job
- var job = _importJobTracker.CreateJob(new ImportJobInfo
- {
- JobType = ImportJobType.CandidateFileById,
- ImportFile = importFile,
- RecruitImportId = id,
- ImportDocId = import_doc_id,
- UserId = UserId,
- FullName = FullName,
- Token = token,
- });
- await _importJobQueue.EnqueueAsync(job);
+ // finally save to database
+
+ _context.SaveChanges();
+
+ return Success();
- return Success(new { jobId = job.JobId, status = "queued" });
}
catch (Exception ex)
{
+ await _minioService.DeleteFileAsync(Guid.Parse(import_doc_id));
return Error(ex);
}
+ finally
+ {
+ if (System.IO.File.Exists(importFile))
+ System.IO.File.Delete(importFile);
+ }
}
#endregion
@@ -1021,35 +1299,190 @@ namespace BMA.EHR.Recruit.Controllers
}
var rec_import = await _context.RecruitImports.AsQueryable()
+ .Include(x => x.ScoreImport)
+ .ThenInclude(x => x.Scores)
+ .Include(x => x.ImportHostories)
.FirstOrDefaultAsync(x => x.Id == id);
if (rec_import == null)
return Error(GlobalMessages.DataNotFound, StatusCodes.Status404NotFound);
- var file = Request.Form.Files[0];
- using (var stream = new FileStream(importFile, FileMode.Create))
+ if (rec_import.ScoreImport != null)
{
- await file.CopyToAsync(stream);
+ // remove old score data
+ if (rec_import.ScoreImport.Scores != null)
+ {
+ _context.RecruitScores.RemoveRange(rec_import.ScoreImport.Scores);
+ await _context.SaveChangesAsync();
+ }
}
- var job = _importJobTracker.CreateJob(new ImportJobInfo
- {
- JobType = ImportJobType.ScoreFile,
- ImportFile = importFile,
- RecruitImportId = id,
- ImportDocId = import_doc_id,
- UserId = UserId,
- FullName = FullName,
- Token = token,
- });
- await _importJobQueue.EnqueueAsync(job);
+ var file = Request.Form.Files[0];
+ var doc = await _minioService.UploadFileAsync(file);
+ import_doc_id = doc.Id.ToString("D");
+
+ Console.WriteLine($"file id = {import_doc_id}");
+
+ var fileContent = (await _minioService.DownloadFileAsync(doc.Id)).FileContent;
+
+ // create import history
+ rec_import.ImportHostories.Add(new RecruitImportHistory
+ {
+ Description = "นำเข้าข้อมูลผลคะแนนสอบ",
+ CreatedAt = DateTime.Now,
+ CreatedUserId = UserId ?? "",
+ CreatedFullName = FullName ?? "System Administrator",
+ LastUpdatedAt = DateTime.Now,
+ LastUpdateUserId = UserId ?? "",
+ LastUpdateFullName = FullName ?? "System Administrator",
+ });
+
+ // create new file import
+ var imported = new ScoreImport
+ {
+ Year = rec_import.Year,
+ ImportFile = doc,
+ CreatedAt = DateTime.Now,
+ CreatedUserId = UserId ?? "",
+ CreatedFullName = FullName ?? "System Administrator",
+ LastUpdatedAt = DateTime.Now,
+ LastUpdateUserId = UserId ?? "",
+ LastUpdateFullName = FullName ?? "System Administrator",
+ Scores = new List()
+ };
+
+ // preload recruits ทั้งหมดของครั้งเดียว และ Group ExamId เอาเฉพาะ key ที่ไม่ซ้ำ
+ var recruitsDict = await _context.Recruits
+ .Where(x => x.RecruitImport.Id == rec_import.Id)
+ .GroupBy(x => x.ExamId)
+ .Where(g => g.Count() == 1)
+ .Select(g => g.First())
+ .ToDictionaryAsync(x => x.ExamId, x => x);
+
+ // import datafile
+ System.IO.File.WriteAllBytes(importFile, fileContent);
+
+ using (var c_package = new ExcelPackage(new FileInfo(importFile)))
+ {
+ for (int i = 0; i < c_package.Workbook.Worksheets.Count; i++)
+ {
+ var workSheet = c_package.Workbook.Worksheets[i];
+ //var totalRows = workSheet.Dimension.Rows;
+ var cols = workSheet.GetHeaderColumns();
+
+ int row = 8;
+ var endRow = workSheet.Dimension.End.Row; // แถวสุดท้ายที่มีข้อมูล
+ while (row <= endRow)
+ {
+ var cell1 = workSheet?.Cells[row, 1]?.GetValue();
+ if (cell1 == "" || cell1 == null) break;
+
+ var r = new RecruitScore();
+
+ #region นำเข้าผลคะแนนสอบแข่งขัน old
+
+ //r.ExamId = workSheet?.Cells[row, 2]?.GetValue();
+
+ //r.FullA = (int)workSheet?.Cells[7, 7]?.GetValue().Replace("(", "").Replace(")", "").Replace("คะแนน", "").Trim().ToInteger();
+ //r.SumA = workSheet?.Cells[row, 7]?.GetValue() == "ขส." ? 0.00 : (double)workSheet?.Cells[row, 7]?.GetValue();
+ //r.PercentageA = workSheet?.Cells[row, 8]?.GetValue() == "ขส." ? 0.0 : (double)workSheet?.Cells[row, 8]?.GetValue();
+ //r.AStatus = workSheet?.Cells[row, 9]?.GetValue();
+
+ //r.FullB = (int)workSheet?.Cells[7, 12]?.GetValue().Replace("(", "").Replace(")", "").Replace("คะแนน", "").Trim().ToInteger();
+ //r.SumB = workSheet?.Cells[row, 12]?.GetValue() == "ขส." ? 0.00 : (double)workSheet?.Cells[row, 12]?.GetValue();
+ //r.PercentageB = workSheet?.Cells[row, 13]?.GetValue() == "ขส." ? 0.0 : (double)workSheet?.Cells[row, 13]?.GetValue();
+ //r.BStatus = workSheet?.Cells[row, 14]?.GetValue();
+
+ //r.SumAB = workSheet?.Cells[row, 15]?.GetValue() == "ขส." ? 0.00 : (double)workSheet?.Cells[row, 15]?.GetValue();
+ //r.ABStatus = workSheet?.Cells[row, 17]?.GetValue();
+
+ //r.FullC = (int)workSheet?.Cells[7, 20]?.GetValue().Replace("(", "").Replace(")", "").Replace("คะแนน", "").Trim().ToInteger();
+ //r.SumC = workSheet?.Cells[row, 20]?.GetValue() == "ขส." ? 0.00 : (double)workSheet?.Cells[row, 20]?.GetValue();
+ //r.PercentageC = workSheet?.Cells[row, 21]?.GetValue() == "ขส." ? 0.0 : (double)workSheet?.Cells[row, 21]?.GetValue();
+ //r.CStatus = workSheet?.Cells[row, 22]?.GetValue();
+
+ //r.ExamStatus = workSheet?.Cells[row, 24]?.GetValue();
+ //r.Number = workSheet?.Cells[row, 25]?.GetValue() ?? ""; // ตัดนำเข้า ลำดับที่สอบได้ เพราะจะแยกเป็นอีกส่วน #1787
+
+ //r.Major = workSheet.Name;
+
+ #endregion
+
+ r.ExamId = workSheet?.Cells[row, 2]?.GetValue();
+
+ // ใช้ dictionary lookup แทน query DB ทีละรอบ
+ if (!string.IsNullOrEmpty(r.ExamId) && recruitsDict.TryGetValue(r.ExamId, out var recruit))
+ {
+ r.CitizenId = workSheet?.Cells[row, 3]?.GetValue()?.Trim();
+
+ // ภาคความรู้ความสามารถที่ใช้เฉพาะตำแหน่ง
+ r.FullA = 200;
+ r.SumA = string.IsNullOrWhiteSpace(workSheet?.Cells[row, 5]?.GetValue()) ? 0.00 : Math.Round(workSheet.Cells[row, 5].GetValue(), 2);
+ r.PercentageA = string.IsNullOrWhiteSpace(workSheet?.Cells[row, 6]?.GetValue()) ? 0.00 : Math.Round(workSheet.Cells[row, 6].GetValue(), 2);
+ r.AStatus = string.IsNullOrWhiteSpace(workSheet?.Cells[row, 7]?.GetValue()) ? "" : workSheet?.Cells[row, 7]?.GetValue();
+ r.SumAB = string.IsNullOrWhiteSpace(workSheet?.Cells[row, 5]?.GetValue()) ? 0.00 : Math.Round(workSheet.Cells[row, 5].GetValue(), 2);
+ r.ABStatus = string.IsNullOrWhiteSpace(workSheet?.Cells[row, 7]?.GetValue()) ? "" : workSheet?.Cells[row, 7]?.GetValue();
+
+ // ภาคความเหมาะสมกับตำแหน่ง
+ r.FullC = 50;
+ r.SumC = string.IsNullOrWhiteSpace(workSheet?.Cells[row, 8]?.GetValue()) ? 0.00 : Math.Round(workSheet.Cells[row, 8].GetValue(), 2);
+ r.FullD = 50;
+ r.SumD = string.IsNullOrWhiteSpace(workSheet?.Cells[row, 9]?.GetValue()) ? 0.00 : Math.Round(workSheet.Cells[row, 9].GetValue(), 2);
+ r.SumCD = string.IsNullOrWhiteSpace(workSheet?.Cells[row, 10]?.GetValue()) ? 0.00 : Math.Round(workSheet.Cells[row, 10].GetValue(), 2);
+ r.PercentageC = string.IsNullOrWhiteSpace(workSheet?.Cells[row, 11]?.GetValue()) ? 0.00 : Math.Round(workSheet.Cells[row, 11].GetValue(), 2);
+ r.CStatus = string.IsNullOrWhiteSpace(workSheet?.Cells[row, 12]?.GetValue()) ? "" : workSheet?.Cells[row, 12]?.GetValue();
+ r.FullScore = 300;
+ r.TotalScore = string.IsNullOrWhiteSpace(workSheet?.Cells[row, 13]?.GetValue()) ? 0.00 : Math.Round(workSheet.Cells[row, 13].GetValue(), 2);
+
+ var examStatusCol7 = workSheet?.Cells[row, 7]?.GetValue()?.Trim();
+ var examStatusCol14 = workSheet?.Cells[row, 14]?.GetValue()?.Trim();
+ r.ExamStatus =
+ examStatusCol7 == "ขาดสอบ" ? "ขส." :
+ examStatusCol14 == "ได้" ? "ผ่าน" :
+ examStatusCol14 == "ตก" ? "ไม่ผ่าน" : "-";
+
+ r.RemarkScore = string.IsNullOrWhiteSpace(workSheet?.Cells[row, 15]?.GetValue()) ? string.Empty : workSheet?.Cells[row, 15]?.GetValue();
+
+ var examAttr = workSheet?.Cells[row, 16]?.GetValue()?.Trim();
+ r.ExamAttribute =
+ examAttr == "ผ่าน" ? "มีคุณสมบัติ" :
+ examAttr == "ไม่ผ่าน" ? "ไม่มีคุณสมบัติ" : "";
+
+ r.Major = workSheet.Name;
+
+ r.CreatedAt = DateTime.Now;
+ r.CreatedUserId = UserId ?? "";
+ r.CreatedFullName = FullName ?? "System Administrator";
+ r.LastUpdatedAt = DateTime.Now;
+ r.LastUpdateUserId = UserId ?? "";
+ r.LastUpdateFullName = FullName ?? "System Administrator";
+
+ imported.Scores.Add(r);
+ }
+
+ row++;
+
+ } // end of sheet loop
+ } // end of all file loop
+ }
+
+ // finally save to database
+ rec_import.ScoreImport = imported;
+ await _context.SaveChangesAsync();
+
+ return Success();
- return Success(new { jobId = job.JobId, status = "queued" });
}
catch (Exception ex)
{
+ //await _minioService.DeleteFileAsync(Guid.Parse(import_doc_id));
return Error(ex);
}
+ finally
+ {
+ if (System.IO.File.Exists(importFile))
+ System.IO.File.Delete(importFile);
+ }
}
#endregion
@@ -1078,12 +1511,6 @@ namespace BMA.EHR.Recruit.Controllers
return Error(jsonData["message"]?.ToString(), StatusCodes.Status403Forbidden);
}
- var tmpDir = Path.Combine(_webHostEnvironment.ContentRootPath, "tmp");
- if (!Directory.Exists(tmpDir))
- Directory.CreateDirectory(tmpDir);
-
- var importFile = Path.Combine(tmpDir, $"r_{DateTime.Now.ToString("ddMMyyyyHHmmss")}.xlsx");
-
try
{
if (Request.Form.Files == null || Request.Form.Files.Count == 0)
@@ -1092,29 +1519,89 @@ namespace BMA.EHR.Recruit.Controllers
}
var rec_import = await _context.RecruitImports.AsQueryable()
+ .Include(x => x.ScoreImport)
+ .ThenInclude(x => x.Scores)
.FirstOrDefaultAsync(x => x.Id == id);
if (rec_import == null)
return Error(GlobalMessages.DataNotFound, StatusCodes.Status404NotFound);
- var file = Request.Form.Files[0];
- using (var stream = new FileStream(importFile, FileMode.Create))
+ // update ฟิลด์ลำดับที่สอบได้และหมายเหตุจากลำดับที่สอบได้อันเก่าก่อน
+ if (rec_import.ScoreImport != null && rec_import.ScoreImport.Scores != null)
{
- await file.CopyToAsync(stream);
+ var _oldScores = rec_import.ScoreImport.Scores
+ .Where(x => !string.IsNullOrEmpty(x.Number))
+ .ToList();
+ if (_oldScores.Count > 0)
+ {
+ foreach (var x in _oldScores)
+ {
+ x.Number = string.Empty;
+ x.RemarkExamOrder = string.Empty;
+ }
+ await _context.SaveChangesAsync();
+ }
}
- var job = _importJobTracker.CreateJob(new ImportJobInfo
+ // create import history
+ rec_import.ImportHostories.Add(new RecruitImportHistory
{
- JobType = ImportJobType.ResultFile,
- ImportFile = importFile,
- RecruitImportId = id,
- UserId = UserId,
- FullName = FullName,
- Token = token,
+ Description = "นำเข้าข้อมูลผลการสอบ",
+ CreatedAt = DateTime.Now,
+ CreatedUserId = UserId ?? "",
+ CreatedFullName = FullName ?? "System Administrator",
+ LastUpdatedAt = DateTime.Now,
+ LastUpdateUserId = UserId ?? "",
+ LastUpdateFullName = FullName ?? "System Administrator",
});
- await _importJobQueue.EnqueueAsync(job);
- return Success(new { jobId = job.JobId, status = "queued" });
+ // preload score
+ var score = rec_import.ScoreImport.Scores
+ .Where(s => !string.IsNullOrEmpty(s.ExamId))
+ .GroupBy(x => x.ExamId)
+ .Where(g => g.Count() == 1)
+ .Select(g => g.First())
+ .ToDictionary(s => s.ExamId, s => s);
+
+ // ถ้าไม่มีผลคะแนนสอบแข่งขันให้จบการทำงาน
+ if (score.Count == 0) return Success();
+
+ var file = Request.Form.Files[0];
+ using (var stream = file.OpenReadStream())
+ using (var c_package = new ExcelPackage(stream))
+ {
+ foreach (var workSheet in c_package.Workbook.Worksheets)
+ {
+ //var totalRows = workSheet.Dimension.Rows;
+ int row = 7; // เริ่มที่ row 7 ตามตัวอย่างไฟล์
+ var endRow = workSheet.Dimension.End.Row; // แถวสุดท้ายที่มีข้อมูล
+
+ while (row <= endRow)
+ {
+ var examId = workSheet?.Cells[row, 2]?.GetValue();
+ if (string.IsNullOrWhiteSpace(examId))
+ {
+ row++;
+ continue;
+ }
+
+ if (score.TryGetValue(examId, out var existingScore))
+ {
+ existingScore.Number = workSheet?.Cells[row, 1]?.GetValue();
+ existingScore.RemarkExamOrder = workSheet?.Cells[row, 4]?.GetValue() ?? string.Empty;
+ existingScore.LastUpdatedAt = DateTime.Now;
+ existingScore.LastUpdateUserId = UserId ?? "";
+ existingScore.LastUpdateFullName = FullName ?? "System Administrator";
+ }
+
+ row++;
+ }
+ }
+ }
+
+ await _context.SaveChangesAsync();
+ return Success();
+
}
catch (Exception ex)
{
@@ -1124,37 +1611,6 @@ namespace BMA.EHR.Recruit.Controllers
#endregion
- #region " Import Status "
-
- ///
- /// ตรวจสอบสถานะการนำเข้าข้อมูล
- ///
- /// รหัสงานนำเข้า
- ///
- [HttpGet("import/status/{jobId}")]
- [ProducesResponseType(StatusCodes.Status200OK)]
- [ProducesResponseType(StatusCodes.Status404NotFound)]
- public ActionResult GetImportStatus(string jobId)
- {
- var job = _importJobTracker.GetJob(jobId);
- if (job == null)
- return Error(GlobalMessages.DataNotFound, StatusCodes.Status404NotFound);
-
- return Success(new
- {
- jobId = job.JobId,
- jobType = job.JobType.ToString(),
- status = job.Status.ToString(),
- processedCount = job.ProcessedCount,
- totalCount = job.TotalCount,
- errorMessage = job.ErrorMessage,
- createdAt = job.CreatedAt,
- completedAt = job.CompletedAt,
- });
- }
-
- #endregion
-
#region " Exam Information "
///
@@ -1540,9 +1996,6 @@ namespace BMA.EHR.Recruit.Controllers
case "notpass":
queryWithScores = queryWithScores.Where(x => x.score != null && x.score.ExamStatus == "ไม่ผ่าน");
break;
- case "other":
- queryWithScores = queryWithScores.Where(x => x.score != null && !new[] { "ขส.", "ผ่าน", "ไม่ผ่าน" }.Contains(x.score.ExamStatus));
- break;
}
}
@@ -1682,183 +2135,89 @@ namespace BMA.EHR.Recruit.Controllers
{
try
{
- #region old
- // var data = await _context.Recruits.AsQueryable()
- // .Include(x => x.RecruitImport)
- // .Include(x => x.Documents)
- // .ThenInclude(x => x.DocumentFile)
- // .Where(x => x.RecruitImport!.Id == id)
- // .Where(x => x.ExamId == examId)
- // .Join(_context.RecruitScores.AsQueryable()
- // .Include(x => x.ScoreImport),
- // rc => new { rc.RecruitImport!.Id, rc.ExamId },
- // sc => new { Id = sc.ScoreImport!.RecruitImportId, sc.ExamId },
- // (p, sr) => new
- // {
- // ExamID = p.ExamId,
- // ProfileID = p.CitizenId,
- // p.Prefix,
- // FullName = $"{p.FirstName} {p.LastName}",
- // DateOfBirth = p.DateOfBirth.HasValue && p.DateOfBirth.Value != DateTime.MinValue
- // ? p.DateOfBirth.Value.ToThaiShortDate()
- // : "",
- // Gender = p.Gendor,
- // Degree = p.Educations.First().Degree,
- // Major = p.Educations.First().Major,
- // CertificateNo = p.Certificates.Count > 0
- // ? p.Certificates.First().CertificateNo ?? ""
- // : "",
- // CertificateIssueDate = p.Certificates.Count > 0
- // ? p.Certificates.First().IssueDate != DateTime.MinValue
- // ? p.Certificates.First().IssueDate.ToThaiShortDate()
- // : ""
- // : "",
- // ExamResult = sr == null ? "" : sr.ExamStatus,
- // // ExamAttribute = p.Certificates.Count > 0 ?
- // // _recruitService.CheckValidCertificate(p.Certificates.First().IssueDate, 5)
- // // ? "มีคุณสมบัติ"
- // // : "ไม่มีคุณสมบัติ"
- // // : "ไม่มีคุณสมบัติ",
- //
- // ExamAttribute = sr != null && !string.IsNullOrEmpty(sr.ExamAttribute) &&
- // (sr.ExamAttribute == "มีคุณสมบัติ" || sr.ExamAttribute == "ไม่มีคุณสมบัติ")
- // ? sr.ExamAttribute : "",
- //
- // IsSpecial = p.Isspecial,
- // Remark = p.Remark,
- // University = p.Educations.First().University,
- // PositionName = p.PositionName,
- // PositionType = p.PositionType,
- // PositionLevel = p.PositionLevel,
- // ExamName = p.RecruitImport!.Name,
- // ExamOrder = p.RecruitImport.Order,
- // ExamYear = p.RecruitImport.Year.ToThaiYear(),
- // Score = sr == null ? 0.0 : sr.TotalScore,
- // Number = sr == null ? "" : sr.Number,
- // ExamCount = _recruitService.GetExamCount(p.CitizenId),
- // ScoreExpire = p.RecruitImport.AnnouncementDate == null
- // ? ""
- // : p.RecruitImport.AnnouncementDate != DateTime.MinValue
- // ? p.RecruitImport.AnnouncementDate.Value.AddYears(2).ToThaiShortDate()
- // : "",
- // typeTest = p.typeTest,
- // ScoreResult = sr == null ? null : new
- // {
- // ScoreAFull = sr.FullA,
- // ScoreA = sr.SumA,
- // ScoreBFull = sr.FullB,
- // ScoreB = sr.SumB,
- // ScoreAB = sr.SumAB,
- // ScoreCFull = sr.FullC,
- // ScoreC = sr.SumC,
- // ScoreDFull = sr.FullD,
- // ScoreD = sr.SumD,
- // ScoreCD = sr.SumCD,
- // ScoreSumFull = sr.FullScore,
- // ScoreSum = sr.TotalScore,
- // ExamResult = sr.ExamStatus
- // },
- // Attachments = p.Documents.Select(a => new
- // {
- // FileName = a.DocumentFile.FileName,
- // DocumentId = a.DocumentFile.Id
- // })
- // })
- // .FirstOrDefaultAsync();
- #endregion
-
- // Step 1: Query ข้อมูลผู้สอบ
- var recruit = await _context.Recruits.AsQueryable()
+ var data = await _context.Recruits.AsQueryable()
.Include(x => x.RecruitImport)
.Include(x => x.Documents)
.ThenInclude(x => x.DocumentFile)
- .Include(x => x.Educations)
- .Include(x => x.Certificates)
.Where(x => x.RecruitImport!.Id == id)
.Where(x => x.ExamId == examId)
+ .Join(_context.RecruitScores.AsQueryable()
+ .Include(x => x.ScoreImport),
+ rc => new { rc.RecruitImport!.Id, rc.ExamId },
+ sc => new { Id = sc.ScoreImport!.RecruitImportId, sc.ExamId },
+ (p, sr) => new
+ {
+ ExamID = p.ExamId,
+ ProfileID = p.CitizenId,
+ p.Prefix,
+ FullName = $"{p.FirstName} {p.LastName}",
+ DateOfBirth = p.DateOfBirth.HasValue && p.DateOfBirth.Value != DateTime.MinValue
+ ? p.DateOfBirth.Value.ToThaiShortDate()
+ : "",
+ Gender = p.Gendor,
+ Degree = p.Educations.First().Degree,
+ Major = p.Educations.First().Major,
+ CertificateNo = p.Certificates.Count > 0
+ ? p.Certificates.First().CertificateNo ?? ""
+ : "",
+ CertificateIssueDate = p.Certificates.Count > 0
+ ? p.Certificates.First().IssueDate != DateTime.MinValue
+ ? p.Certificates.First().IssueDate.ToThaiShortDate()
+ : ""
+ : "",
+ ExamResult = sr == null ? "" : sr.ExamStatus,
+ // ExamAttribute = p.Certificates.Count > 0 ?
+ // _recruitService.CheckValidCertificate(p.Certificates.First().IssueDate, 5)
+ // ? "มีคุณสมบัติ"
+ // : "ไม่มีคุณสมบัติ"
+ // : "ไม่มีคุณสมบัติ",
+
+ ExamAttribute = sr != null && !string.IsNullOrEmpty(sr.ExamAttribute) &&
+ (sr.ExamAttribute == "มีคุณสมบัติ" || sr.ExamAttribute == "ไม่มีคุณสมบัติ")
+ ? sr.ExamAttribute : "",
+
+ IsSpecial = p.Isspecial,
+ Remark = p.Remark,
+ University = p.Educations.First().University,
+ PositionName = p.PositionName,
+ PositionType = p.PositionType,
+ PositionLevel = p.PositionLevel,
+ ExamName = p.RecruitImport!.Name,
+ ExamOrder = p.RecruitImport.Order,
+ ExamYear = p.RecruitImport.Year.ToThaiYear(),
+ Score = sr == null ? 0.0 : sr.TotalScore,
+ Number = sr == null ? "" : sr.Number,
+ ExamCount = _recruitService.GetExamCount(p.CitizenId),
+ ScoreExpire = p.RecruitImport.AnnouncementDate == null
+ ? ""
+ : p.RecruitImport.AnnouncementDate != DateTime.MinValue
+ ? p.RecruitImport.AnnouncementDate.Value.AddYears(2).ToThaiShortDate()
+ : "",
+ typeTest = p.typeTest,
+ ScoreResult = sr == null ? null : new
+ {
+ ScoreAFull = sr.FullA,
+ ScoreA = sr.SumA,
+ ScoreBFull = sr.FullB,
+ ScoreB = sr.SumB,
+ ScoreAB = sr.SumAB,
+ ScoreCFull = sr.FullC,
+ ScoreC = sr.SumC,
+ ScoreDFull = sr.FullD,
+ ScoreD = sr.SumD,
+ ScoreCD = sr.SumCD,
+ ScoreSumFull = sr.FullScore,
+ ScoreSum = sr.TotalScore,
+ ExamResult = sr.ExamStatus
+ },
+ Attachments = p.Documents.Select(a => new
+ {
+ FileName = a.DocumentFile.FileName,
+ DocumentId = a.DocumentFile.Id
+ })
+ })
.FirstOrDefaultAsync();
- if (recruit == null)
- return Success();
-
- // Step 2: Query ข้อมูลคะแนน — แยกต่างหาก ไม่มีก็ผ่าน
- var score = await _context.RecruitScores.AsQueryable()
- .Include(x => x.ScoreImport)
- .Where(x => x.ScoreImport != null)
- .Where(x => x.ScoreImport.RecruitImportId == id)
- .Where(x => x.ExamId == examId)
- .FirstOrDefaultAsync();
-
- // Step 3: รวมผลลัพธ์ — score เป็น null ก็ได้ข้อมูลผู้สอบ
- var data = new
- {
- ExamID = recruit.ExamId,
- ProfileID = recruit.CitizenId,
- recruit.Prefix,
- FullName = $"{recruit.FirstName} {recruit.LastName}",
- DateOfBirth = recruit.DateOfBirth.HasValue && recruit.DateOfBirth.Value != DateTime.MinValue
- ? recruit.DateOfBirth.Value.ToThaiShortDate()
- : "",
- Gender = recruit.Gendor,
- Degree = recruit.Educations.Count > 0 ? recruit.Educations.First().Degree : "",
- Major = recruit.Educations.Count > 0 ? recruit.Educations.First().Major : "",
- CertificateNo = recruit.Certificates.Count > 0
- ? recruit.Certificates.First().CertificateNo ?? ""
- : "",
- CertificateIssueDate = recruit.Certificates.Count > 0
- ? recruit.Certificates.First().IssueDate != DateTime.MinValue
- ? recruit.Certificates.First().IssueDate.ToThaiShortDate()
- : ""
- : "",
- ExamResult = score == null ? "" : score.ExamStatus,
- ExamAttribute = score != null && !string.IsNullOrEmpty(score.ExamAttribute) &&
- (score.ExamAttribute == "มีคุณสมบัติ" || score.ExamAttribute == "ไม่มีคุณสมบัติ")
- ? score.ExamAttribute : "",
- IsSpecial = recruit.Isspecial,
- Remark = recruit.Remark,
- University = recruit.Educations.Count > 0 ? recruit.Educations.First().University : "",
- PositionName = recruit.PositionName,
- PositionType = recruit.PositionType,
- PositionLevel = recruit.PositionLevel,
- ExamName = recruit.RecruitImport!.Name,
- ExamOrder = recruit.RecruitImport.Order,
- ExamYear = recruit.RecruitImport.Year.ToThaiYear(),
- Score = score == null ? 0.0 : score.TotalScore,
- Number = score == null ? "" : score.Number,
- ExamCount = _recruitService.GetExamCount(recruit.CitizenId),
- // เดิมคำนวณวันหมดอายุจาก AnnouncementDate + 2 ปี (เก็บไว้สำหรับอ้างอิงข้อมูลเก่า)
- //ScoreExpire = recruit.RecruitImport.AnnouncementDate == null
- // ? ""
- // : recruit.RecruitImport.AnnouncementDate != DateTime.MinValue
- // ? recruit.RecruitImport.AnnouncementDate.Value.AddYears(2).ToThaiShortDate()
- // : "",
- ScoreExpire = recruit.RecruitImport.ScoreExpireDate == null
- ? ""
- : recruit.RecruitImport.ScoreExpireDate.Value.ToThaiShortDate(),
- typeTest = recruit.typeTest,
- ScoreResult = score == null ? null : new
- {
- ScoreAFull = score.FullA,
- ScoreA = score.SumA,
- ScoreBFull = score.FullB,
- ScoreB = score.SumB,
- ScoreAB = score.SumAB,
- ScoreCFull = score.FullC,
- ScoreC = score.SumC,
- ScoreDFull = score.FullD,
- ScoreD = score.SumD,
- ScoreCD = score.SumCD,
- ScoreSumFull = score.FullScore,
- ScoreSum = score.TotalScore,
- ExamResult = score.ExamStatus
- },
- Attachments = recruit.Documents.Select(a => new
- {
- FileName = a.DocumentFile.FileName,
- DocumentId = a.DocumentFile.Id
- })
- };
-
return Success(data);
}
catch (Exception ex)
@@ -2127,7 +2486,6 @@ namespace BMA.EHR.Recruit.Controllers
public async Task> ExportExamAsync(Guid id)
{
var data = await _context.RecruitImports.AsQueryable()
- .AsNoTracking()
.Include(x => x.Recruits)
.FirstOrDefaultAsync(x => x.Id == id);
@@ -2571,107 +2929,48 @@ namespace BMA.EHR.Recruit.Controllers
{
try
{
- #region old
- // var data = await _context.Recruits.AsQueryable()
- // .Include(x => x.RecruitImport)
- // .Where(x => x.RecruitImport!.Id == id)
- // .Where(x => x.ExamId == examId)
- // .Join(_context.RecruitScores.AsQueryable()
- // .Include(x => x.ScoreImport),
- // rc => new { rc.RecruitImport!.Id, rc.ExamId },
- // sc => new { Id = sc.ScoreImport!.RecruitImportId, sc.ExamId },
- // (p, sr) => new
- // {
- // ExamID = p.ExamId != null ? p.ExamId.ToThaiNumber() : "",
- // CitizenId = p.CitizenId != null ? p.CitizenId.ToThaiNumber() : "",
- // FullName = $"{p.Prefix}{p.FirstName} {p.LastName}",
- // DateOfBirth = p.DateOfBirth.HasValue && p.DateOfBirth.Value != DateTime.MinValue
- // ? p.DateOfBirth.Value.ToThaiShortDate().ToThaiNumber()
- // : "",
- // Gender = p.Gendor,
- // Degree = p.Educations.First().Degree,
- // Major = p.Educations.First().Major,
- // University = p.Educations.First().University,
- // PositionName = p.PositionName,
- // ExamName = $"{p.RecruitImport!.Name} ครั้งที่ {p.RecruitImport.Order}/{p.RecruitImport.Year.ToThaiYear()}".ToThaiNumber(),
- // ExamCount = _recruitService.GetExamCount(p.CitizenId).ToString().ToThaiNumber(),
- // type = p.typeTest == "bangkok" ? "กทม." : p.typeTest == "ocsc" ? "ก.พ." : "",
- // FA = sr.FullA != null ? sr.FullA.ToString().ToThaiNumber() : "",
- // SA = sr.SumA != null ? sr.SumA.ToString().ToThaiNumber() : "",
- // FC = sr.FullC != null ? sr.FullC.ToString().ToThaiNumber() : "",
- // SC = sr.SumC != null ? sr.SumC.ToString().ToThaiNumber() : "",
- // FD = sr.FullD != null ? sr.FullD.ToString().ToThaiNumber() : "",
- // SD = sr.SumD != null ? sr.SumD.ToString().ToThaiNumber() : "",
- // F = sr.FullScore != null ? sr.FullScore.ToString().ToThaiNumber() : "",
- // T = sr.TotalScore != null ? sr.TotalScore.ToString().ToThaiNumber() : "",
- // Result = sr.ExamStatus,
- // Number = sr.Number != null ? sr.Number.ToString().ToThaiNumber() : "",
- // Expire = p.RecruitImport.AnnouncementDate == null
- // ? ""
- // : p.RecruitImport.AnnouncementDate != DateTime.MinValue
- // ? p.RecruitImport.AnnouncementDate.Value.AddYears(2).ToThaiShortDate().ToString().ToThaiNumber()
- // : "",
- // })
- // .FirstOrDefaultAsync();
- #endregion
-
- // Step 1: Query ข้อมูลผู้สอบ
- var recruit = await _context.Recruits.AsQueryable()
+ var data = await _context.Recruits.AsQueryable()
.Include(x => x.RecruitImport)
- .Include(x => x.Educations)
.Where(x => x.RecruitImport!.Id == id)
.Where(x => x.ExamId == examId)
+ .Join(_context.RecruitScores.AsQueryable()
+ .Include(x => x.ScoreImport),
+ rc => new { rc.RecruitImport!.Id, rc.ExamId },
+ sc => new { Id = sc.ScoreImport!.RecruitImportId, sc.ExamId },
+ (p, sr) => new
+ {
+ ExamID = p.ExamId != null ? p.ExamId.ToThaiNumber() : "",
+ CitizenId = p.CitizenId != null ? p.CitizenId.ToThaiNumber() : "",
+ FullName = $"{p.Prefix}{p.FirstName} {p.LastName}",
+ DateOfBirth = p.DateOfBirth.HasValue && p.DateOfBirth.Value != DateTime.MinValue
+ ? p.DateOfBirth.Value.ToThaiShortDate().ToThaiNumber()
+ : "",
+ Gender = p.Gendor,
+ Degree = p.Educations.First().Degree,
+ Major = p.Educations.First().Major,
+ University = p.Educations.First().University,
+ PositionName = p.PositionName,
+ ExamName = $"{p.RecruitImport!.Name} ครั้งที่ {p.RecruitImport.Order}/{p.RecruitImport.Year.ToThaiYear()}".ToThaiNumber(),
+ ExamCount = _recruitService.GetExamCount(p.CitizenId).ToString().ToThaiNumber(),
+ type = p.typeTest == "bangkok" ? "กทม." : p.typeTest == "ocsc" ? "ก.พ." : "",
+ FA = sr.FullA != null ? sr.FullA.ToString().ToThaiNumber() : "",
+ SA = sr.SumA != null ? sr.SumA.ToString().ToThaiNumber() : "",
+ FC = sr.FullC != null ? sr.FullC.ToString().ToThaiNumber() : "",
+ SC = sr.SumC != null ? sr.SumC.ToString().ToThaiNumber() : "",
+ FD = sr.FullD != null ? sr.FullD.ToString().ToThaiNumber() : "",
+ SD = sr.SumD != null ? sr.SumD.ToString().ToThaiNumber() : "",
+ F = sr.FullScore != null ? sr.FullScore.ToString().ToThaiNumber() : "",
+ T = sr.TotalScore != null ? sr.TotalScore.ToString().ToThaiNumber() : "",
+ Result = sr.ExamStatus,
+ Number = sr.Number != null ? sr.Number.ToString().ToThaiNumber() : "",
+ Expire = p.RecruitImport.AnnouncementDate == null
+ ? ""
+ : p.RecruitImport.AnnouncementDate != DateTime.MinValue
+ ? p.RecruitImport.AnnouncementDate.Value.AddYears(2).ToThaiShortDate().ToString().ToThaiNumber()
+ : "",
+ })
.FirstOrDefaultAsync();
- if (recruit == null)
- return Success();
-
- // Step 2: Query ข้อมูลคะแนน — แยกต่างหาก ไม่มีก็ผ่าน
- var score = await _context.RecruitScores.AsQueryable()
- .Include(x => x.ScoreImport)
- .Where(x => x.ScoreImport != null)
- .Where(x => x.ScoreImport.RecruitImportId == id)
- .Where(x => x.ExamId == examId)
- .FirstOrDefaultAsync();
-
- // Step 3: รวมผลลัพธ์ — score เป็น null ก็ได้ข้อมูลผู้สอบ
- var data = new
- {
- ExamID = recruit.ExamId != null ? recruit.ExamId.ToThaiNumber() : "",
- CitizenId = recruit.CitizenId != null ? recruit.CitizenId.ToThaiNumber() : "",
- FullName = $"{recruit.Prefix}{recruit.FirstName} {recruit.LastName}",
- DateOfBirth = recruit.DateOfBirth.HasValue && recruit.DateOfBirth.Value != DateTime.MinValue
- ? recruit.DateOfBirth.Value.ToThaiShortDate().ToThaiNumber()
- : "",
- Gender = recruit.Gendor,
- Degree = recruit.Educations.Count > 0 ? recruit.Educations.First().Degree : "",
- Major = recruit.Educations.Count > 0 ? recruit.Educations.First().Major : "",
- University = recruit.Educations.Count > 0 ? recruit.Educations.First().University : "",
- PositionName = recruit.PositionName,
- ExamName = $"{recruit.RecruitImport!.Name} ครั้งที่ {recruit.RecruitImport.Order}/{recruit.RecruitImport.Year.ToThaiYear()}".ToThaiNumber(),
- ExamCount = _recruitService.GetExamCount(recruit.CitizenId).ToString().ToThaiNumber(),
- type = recruit.typeTest == "bangkok" ? "กทม." : recruit.typeTest == "ocsc" ? "ก.พ." : "",
- FA = score != null && score.FullA != null ? score.FullA.ToString().ToThaiNumber() : "",
- SA = score != null && score.SumA != null ? score.SumA.ToString().ToThaiNumber() : "",
- FC = score != null && score.FullC != null ? score.FullC.ToString().ToThaiNumber() : "",
- SC = score != null && score.SumC != null ? score.SumC.ToString().ToThaiNumber() : "",
- FD = score != null && score.FullD != null ? score.FullD.ToString().ToThaiNumber() : "",
- SD = score != null && score.SumD != null ? score.SumD.ToString().ToThaiNumber() : "",
- F = score != null && score.FullScore != null ? score.FullScore.ToString().ToThaiNumber() : "",
- T = score != null && score.TotalScore != null ? score.TotalScore.ToString().ToThaiNumber() : "",
- Result = score == null ? "" : score.ExamStatus,
- Number = score != null && score.Number != null ? score.Number.ToString().ToThaiNumber() : "",
- // เดิมคำนวณวันหมดอายุจาก AnnouncementDate + 2 ปี (เก็บไว้สำหรับอ้างอิงข้อมูลเก่า)
- //Expire = recruit.RecruitImport.AnnouncementDate == null
- // ? ""
- // : recruit.RecruitImport.AnnouncementDate != DateTime.MinValue
- // ? recruit.RecruitImport.AnnouncementDate.Value.AddYears(2).ToThaiShortDate().ToString().ToThaiNumber()
- // : "",
- Expire = recruit.RecruitImport.ScoreExpireDate == null
- ? ""
- : recruit.RecruitImport.ScoreExpireDate.Value.ToThaiShortDate().ToString().ToThaiNumber(),
- };
-
var result = new
{
template = "recruit-exam",
@@ -2695,7 +2994,6 @@ namespace BMA.EHR.Recruit.Controllers
public async Task GetCandidateNewListReportAsync(Guid id)
{
var data = await _context.Recruits.AsQueryable()
- .AsNoTracking()
.Include(x => x.RecruitImport)
.Where(x => x.RecruitImport.Id == id)
.OrderBy(x => x.ExamId)
diff --git a/Core/DateTimeFixConverter.cs b/Core/DateTimeFixConverter.cs
index b52dd56..60c8af6 100644
--- a/Core/DateTimeFixConverter.cs
+++ b/Core/DateTimeFixConverter.cs
@@ -1,7 +1,7 @@
using System.Text.Json;
using System.Text.Json.Serialization;
-namespace BMA.EHR.Recruit.Core
+namespace BMA.EHR.Recruit.Service.Core
{
public class DateTimeFixConverter : JsonConverter
{
diff --git a/Core/GlobalMessages.cs b/Core/GlobalMessages.cs
index aa496da..b37b5e8 100644
--- a/Core/GlobalMessages.cs
+++ b/Core/GlobalMessages.cs
@@ -1,4 +1,4 @@
-namespace BMA.EHR.Recruit.Core
+namespace BMA.EHR.Recruit.Service.Core
{
public class GlobalMessages
{
diff --git a/Core/RequestLoggingMiddleware.cs b/Core/RequestLoggingMiddleware.cs
index 27013fd..8ffc72f 100644
--- a/Core/RequestLoggingMiddleware.cs
+++ b/Core/RequestLoggingMiddleware.cs
@@ -8,7 +8,7 @@ using System.Text.Encodings.Web;
using System.Text.Json;
using JsonSerializer = System.Text.Json.JsonSerializer;
-namespace BMA.EHR.Recruit.Core
+namespace BMA.EHR.Recruit.Service.Core
{
public class RequestLoggingMiddleware
{
diff --git a/Data/ApplicationDbContext.cs b/Data/ApplicationDbContext.cs
index d386d19..2c64fb6 100644
--- a/Data/ApplicationDbContext.cs
+++ b/Data/ApplicationDbContext.cs
@@ -1,8 +1,8 @@
-using BMA.EHR.Recruit.Models.Documents;
-using BMA.EHR.Recruit.Models.Recruits;
+using BMA.EHR.Recruit.Service.Models.Documents;
+using BMA.EHR.Recruit.Service.Models.Recruits;
using Microsoft.EntityFrameworkCore;
-namespace BMA.EHR.Recruit.Data
+namespace BMA.EHR.Recruit.Service.Data
{
public class ApplicationDbContext : DbContext
{
@@ -20,7 +20,6 @@ namespace BMA.EHR.Recruit.Data
modelBuilder.Entity().HasMany(x => x.Addresses).WithOne(x => x.Recruit).OnDelete(DeleteBehavior.Cascade);
modelBuilder.Entity().HasMany(x => x.Certificates).WithOne(x => x.Recruit).OnDelete(DeleteBehavior.Cascade);
modelBuilder.Entity().HasMany(x => x.Payments).WithOne(x => x.Recruit).OnDelete(DeleteBehavior.Cascade);
- modelBuilder.Entity().HasMany(x => x.Scores).WithOne(x => x.ScoreImport).HasForeignKey(x => x.ScoreImportId).OnDelete(DeleteBehavior.Cascade);
}
public DbSet Documents { get; set; }
diff --git a/Dockerfile b/Dockerfile
index 0ee996f..e45a6f8 100644
--- a/Dockerfile
+++ b/Dockerfile
@@ -8,21 +8,16 @@ EXPOSE 443
FROM mcr.microsoft.com/dotnet/sdk:7.0 AS build
WORKDIR /src
COPY ["nuget.config", "."]
-COPY ["BMA.EHR.Recruit.csproj", "."]
-RUN dotnet restore "./BMA.EHR.Recruit.csproj"
+COPY ["BMA.EHR.Recruit.Service.csproj", "."]
+RUN dotnet restore "./BMA.EHR.Recruit.Service.csproj"
COPY . .
WORKDIR "/src/."
-RUN dotnet build "BMA.EHR.Recruit.csproj" -c Release -o /app/build
+RUN dotnet build "BMA.EHR.Recruit.Service.csproj" -c Release -o /app/build
FROM build AS publish
-RUN dotnet publish "BMA.EHR.Recruit.csproj" -c Release -o /app/publish /p:UseAppHost=false
+RUN dotnet publish "BMA.EHR.Recruit.Service.csproj" -c Release -o /app/publish /p:UseAppHost=false
FROM base AS final
WORKDIR /app
COPY --from=publish /app/publish .
-
-# GC configuration for better memory management in containers
-#ENV DOTNET_GCHeapHardLimit=1073741824
-#ENV DOTNET_GCConserveMemory=9
-
-ENTRYPOINT ["dotnet", "BMA.EHR.Recruit.dll"]
\ No newline at end of file
+ENTRYPOINT ["dotnet", "BMA.EHR.Recruit.Service.dll"]
\ No newline at end of file
diff --git a/Extensions/DataReaderExtension.cs b/Extensions/DataReaderExtension.cs
index 5b8d194..4768e5a 100644
--- a/Extensions/DataReaderExtension.cs
+++ b/Extensions/DataReaderExtension.cs
@@ -1,6 +1,6 @@
using System.Data.Common;
-namespace BMA.EHR.Recruit.Extensions
+namespace BMA.EHR.Recruit.Service.Extensions
{
public static class DataReaderExtension
{
diff --git a/Extensions/DateTimeExtension.cs b/Extensions/DateTimeExtension.cs
index a5b524a..df6379d 100644
--- a/Extensions/DateTimeExtension.cs
+++ b/Extensions/DateTimeExtension.cs
@@ -2,7 +2,7 @@ using System;
using System.Globalization;
using System.Text;
-namespace BMA.EHR.Recruit.Extensions
+namespace BMA.EHR.Recruit.Service.Extensions
{
public static class DateTimeExtension
{
diff --git a/Extensions/DoubleExtension.cs b/Extensions/DoubleExtension.cs
index 255bb66..0483704 100644
--- a/Extensions/DoubleExtension.cs
+++ b/Extensions/DoubleExtension.cs
@@ -1,7 +1,7 @@
using System;
using System.Text;
-namespace BMA.EHR.Recruit.Extensions
+namespace BMA.EHR.Recruit.Service.Extensions
{
public static class DoubleExtension
{
diff --git a/Extensions/ExcelWorksheetExtension.cs b/Extensions/ExcelWorksheetExtension.cs
index fcd6524..4d30d04 100644
--- a/Extensions/ExcelWorksheetExtension.cs
+++ b/Extensions/ExcelWorksheetExtension.cs
@@ -2,7 +2,7 @@
using System;
using System.Collections.Generic;
-namespace BMA.EHR.Recruit.Extensions
+namespace BMA.EHR.Recruit.Service.Extensions
{
public static class ExcelWorksheetExtension
{
diff --git a/Extensions/IntegerExtension.cs b/Extensions/IntegerExtension.cs
index 2a465a1..555eb68 100644
--- a/Extensions/IntegerExtension.cs
+++ b/Extensions/IntegerExtension.cs
@@ -1,7 +1,7 @@
using System.Text;
// using GreatFriends.ThaiBahtText;
-namespace BMA.EHR.Recruit.Extensions
+namespace BMA.EHR.Recruit.Service.Extensions
{
public static class IntegerExtension
{
diff --git a/Extensions/ListExtension.cs b/Extensions/ListExtension.cs
index 3ca9307..d8b8f95 100644
--- a/Extensions/ListExtension.cs
+++ b/Extensions/ListExtension.cs
@@ -3,7 +3,7 @@ using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
-namespace BMA.EHR.Recruit.Extensions
+namespace BMA.EHR.Recruit.Service.Extensions
{
public static class ListExtension
{
diff --git a/Extensions/ObjectExtension.cs b/Extensions/ObjectExtension.cs
index 7f51c6e..f1285d4 100644
--- a/Extensions/ObjectExtension.cs
+++ b/Extensions/ObjectExtension.cs
@@ -4,7 +4,7 @@ using System.Linq;
using System.Text;
using System.Threading.Tasks;
-namespace BMA.EHR.Recruit.Extensions
+namespace BMA.EHR.Recruit.Service.Extensions
{
public static class ObjectExtension
{
diff --git a/Extensions/StreamExtension.cs b/Extensions/StreamExtension.cs
index 1eecba9..dbdd563 100644
--- a/Extensions/StreamExtension.cs
+++ b/Extensions/StreamExtension.cs
@@ -1,7 +1,7 @@
using System;
using System.IO;
-namespace BMA.EHR.Recruit.Extensions
+namespace BMA.EHR.Recruit.Service.Extensions
{
public static class StreamExtension
{
diff --git a/Extensions/StringExtension.cs b/Extensions/StringExtension.cs
index 68b1515..f1c1f0d 100644
--- a/Extensions/StringExtension.cs
+++ b/Extensions/StringExtension.cs
@@ -3,7 +3,7 @@ using System.Globalization;
using System.IO;
using System.Text.RegularExpressions;
-namespace BMA.EHR.Recruit.Extensions
+namespace BMA.EHR.Recruit.Service.Extensions
{
public enum DateTimeFormat
{
diff --git a/Extensions/TimeSpanExtension.cs b/Extensions/TimeSpanExtension.cs
index 7a9eaae..63d74de 100644
--- a/Extensions/TimeSpanExtension.cs
+++ b/Extensions/TimeSpanExtension.cs
@@ -1,6 +1,6 @@
using System;
-namespace BMA.EHR.Recruit.Extensions
+namespace BMA.EHR.Recruit.Service.Extensions
{
public static class TimeSpanExtension
{
diff --git a/Migrations/20230313045824_Initial Project.Designer.cs b/Migrations/20230313045824_Initial Project.Designer.cs
index 26dbe61..79b2984 100644
--- a/Migrations/20230313045824_Initial Project.Designer.cs
+++ b/Migrations/20230313045824_Initial Project.Designer.cs
@@ -1,6 +1,6 @@
//
using System;
-using BMA.EHR.Recruit.Data;
+using BMA.EHR.Recruit.Service.Data;
using Microsoft.EntityFrameworkCore;
using Microsoft.EntityFrameworkCore.Infrastructure;
using Microsoft.EntityFrameworkCore.Migrations;
@@ -8,7 +8,7 @@ using Microsoft.EntityFrameworkCore.Storage.ValueConversion;
#nullable disable
-namespace BMA.EHR.Recruit.Migrations
+namespace BMA.EHR.Recruit.Service.Migrations
{
[DbContext(typeof(ApplicationDbContext))]
[Migration("20230313045824_Initial Project")]
@@ -22,7 +22,7 @@ namespace BMA.EHR.Recruit.Migrations
.HasAnnotation("ProductVersion", "7.0.3")
.HasAnnotation("Relational:MaxIdentifierLength", 64);
- modelBuilder.Entity("BMA.EHR.Recruit.Models.Documents.Document", b =>
+ modelBuilder.Entity("BMA.EHR.Recruit.Service.Models.Documents.Document", b =>
{
b.Property("Id")
.ValueGeneratedOnAdd()
@@ -58,7 +58,7 @@ namespace BMA.EHR.Recruit.Migrations
b.ToTable("Documents");
});
- modelBuilder.Entity("BMA.EHR.Recruit.Models.Recruits.Recruit", b =>
+ modelBuilder.Entity("BMA.EHR.Recruit.Service.Models.Recruits.Recruit", b =>
{
b.Property("Id")
.ValueGeneratedOnAdd()
@@ -197,7 +197,7 @@ namespace BMA.EHR.Recruit.Migrations
b.ToTable("Recruits");
});
- modelBuilder.Entity("BMA.EHR.Recruit.Models.Recruits.RecruitAddress", b =>
+ modelBuilder.Entity("BMA.EHR.Recruit.Service.Models.Recruits.RecruitAddress", b =>
{
b.Property("Id")
.ValueGeneratedOnAdd()
@@ -344,7 +344,7 @@ namespace BMA.EHR.Recruit.Migrations
b.ToTable("RecruitAddresses");
});
- modelBuilder.Entity("BMA.EHR.Recruit.Models.Recruits.RecruitCertificate", b =>
+ modelBuilder.Entity("BMA.EHR.Recruit.Service.Models.Recruits.RecruitCertificate", b =>
{
b.Property("Id")
.ValueGeneratedOnAdd()
@@ -417,7 +417,7 @@ namespace BMA.EHR.Recruit.Migrations
b.ToTable("RecruitCertificates");
});
- modelBuilder.Entity("BMA.EHR.Recruit.Models.Recruits.RecruitDocument", b =>
+ modelBuilder.Entity("BMA.EHR.Recruit.Service.Models.Recruits.RecruitDocument", b =>
{
b.Property("Id")
.ValueGeneratedOnAdd()
@@ -482,7 +482,7 @@ namespace BMA.EHR.Recruit.Migrations
b.ToTable("RecruitDocuments");
});
- modelBuilder.Entity("BMA.EHR.Recruit.Models.Recruits.RecruitEducation", b =>
+ modelBuilder.Entity("BMA.EHR.Recruit.Service.Models.Recruits.RecruitEducation", b =>
{
b.Property("Id")
.ValueGeneratedOnAdd()
@@ -580,7 +580,7 @@ namespace BMA.EHR.Recruit.Migrations
b.ToTable("RecruitEducations");
});
- modelBuilder.Entity("BMA.EHR.Recruit.Models.Recruits.RecruitImport", b =>
+ modelBuilder.Entity("BMA.EHR.Recruit.Service.Models.Recruits.RecruitImport", b =>
{
b.Property("Id")
.ValueGeneratedOnAdd()
@@ -672,7 +672,7 @@ namespace BMA.EHR.Recruit.Migrations
b.ToTable("RecruitImports");
});
- modelBuilder.Entity("BMA.EHR.Recruit.Models.Recruits.RecruitOccupation", b =>
+ modelBuilder.Entity("BMA.EHR.Recruit.Service.Models.Recruits.RecruitOccupation", b =>
{
b.Property("Id")
.ValueGeneratedOnAdd()
@@ -754,7 +754,7 @@ namespace BMA.EHR.Recruit.Migrations
b.ToTable("RecruitOccupations");
});
- modelBuilder.Entity("BMA.EHR.Recruit.Models.Recruits.RecruitPayment", b =>
+ modelBuilder.Entity("BMA.EHR.Recruit.Service.Models.Recruits.RecruitPayment", b =>
{
b.Property("Id")
.ValueGeneratedOnAdd()
@@ -889,7 +889,7 @@ namespace BMA.EHR.Recruit.Migrations
b.ToTable("RecruitPayments");
});
- modelBuilder.Entity("BMA.EHR.Recruit.Models.Recruits.RecruitScore", b =>
+ modelBuilder.Entity("BMA.EHR.Recruit.Service.Models.Recruits.RecruitScore", b =>
{
b.Property("Id")
.ValueGeneratedOnAdd()
@@ -996,7 +996,7 @@ namespace BMA.EHR.Recruit.Migrations
b.ToTable("RecruitScores");
});
- modelBuilder.Entity("BMA.EHR.Recruit.Models.Recruits.ScoreImport", b =>
+ modelBuilder.Entity("BMA.EHR.Recruit.Service.Models.Recruits.ScoreImport", b =>
{
b.Property("Id")
.ValueGeneratedOnAdd()
@@ -1056,9 +1056,9 @@ namespace BMA.EHR.Recruit.Migrations
b.ToTable("ScoreImports");
});
- modelBuilder.Entity("BMA.EHR.Recruit.Models.Recruits.Recruit", b =>
+ modelBuilder.Entity("BMA.EHR.Recruit.Service.Models.Recruits.Recruit", b =>
{
- b.HasOne("BMA.EHR.Recruit.Models.Recruits.RecruitImport", "RecruitImport")
+ b.HasOne("BMA.EHR.Recruit.Service.Models.Recruits.RecruitImport", "RecruitImport")
.WithMany("Recruits")
.HasForeignKey("RecruitImportId")
.OnDelete(DeleteBehavior.Cascade);
@@ -1066,9 +1066,9 @@ namespace BMA.EHR.Recruit.Migrations
b.Navigation("RecruitImport");
});
- modelBuilder.Entity("BMA.EHR.Recruit.Models.Recruits.RecruitAddress", b =>
+ modelBuilder.Entity("BMA.EHR.Recruit.Service.Models.Recruits.RecruitAddress", b =>
{
- b.HasOne("BMA.EHR.Recruit.Models.Recruits.Recruit", "Recruit")
+ b.HasOne("BMA.EHR.Recruit.Service.Models.Recruits.Recruit", "Recruit")
.WithMany("Addresses")
.HasForeignKey("RecruitId")
.OnDelete(DeleteBehavior.Cascade)
@@ -1077,9 +1077,9 @@ namespace BMA.EHR.Recruit.Migrations
b.Navigation("Recruit");
});
- modelBuilder.Entity("BMA.EHR.Recruit.Models.Recruits.RecruitCertificate", b =>
+ modelBuilder.Entity("BMA.EHR.Recruit.Service.Models.Recruits.RecruitCertificate", b =>
{
- b.HasOne("BMA.EHR.Recruit.Models.Recruits.Recruit", "Recruit")
+ b.HasOne("BMA.EHR.Recruit.Service.Models.Recruits.Recruit", "Recruit")
.WithMany("Certificates")
.HasForeignKey("RecruitId")
.OnDelete(DeleteBehavior.Cascade)
@@ -1088,15 +1088,15 @@ namespace BMA.EHR.Recruit.Migrations
b.Navigation("Recruit");
});
- modelBuilder.Entity("BMA.EHR.Recruit.Models.Recruits.RecruitDocument", b =>
+ modelBuilder.Entity("BMA.EHR.Recruit.Service.Models.Recruits.RecruitDocument", b =>
{
- b.HasOne("BMA.EHR.Recruit.Models.Documents.Document", "DocumentFile")
+ b.HasOne("BMA.EHR.Recruit.Service.Models.Documents.Document", "DocumentFile")
.WithMany()
.HasForeignKey("DocumentFileId")
.OnDelete(DeleteBehavior.Cascade)
.IsRequired();
- b.HasOne("BMA.EHR.Recruit.Models.Recruits.Recruit", "Recruit")
+ b.HasOne("BMA.EHR.Recruit.Service.Models.Recruits.Recruit", "Recruit")
.WithMany("Documents")
.HasForeignKey("RecruitId")
.OnDelete(DeleteBehavior.Cascade)
@@ -1107,9 +1107,9 @@ namespace BMA.EHR.Recruit.Migrations
b.Navigation("Recruit");
});
- modelBuilder.Entity("BMA.EHR.Recruit.Models.Recruits.RecruitEducation", b =>
+ modelBuilder.Entity("BMA.EHR.Recruit.Service.Models.Recruits.RecruitEducation", b =>
{
- b.HasOne("BMA.EHR.Recruit.Models.Recruits.Recruit", "Recruit")
+ b.HasOne("BMA.EHR.Recruit.Service.Models.Recruits.Recruit", "Recruit")
.WithMany("Educations")
.HasForeignKey("RecruitId")
.OnDelete(DeleteBehavior.Cascade)
@@ -1118,9 +1118,9 @@ namespace BMA.EHR.Recruit.Migrations
b.Navigation("Recruit");
});
- modelBuilder.Entity("BMA.EHR.Recruit.Models.Recruits.RecruitImport", b =>
+ modelBuilder.Entity("BMA.EHR.Recruit.Service.Models.Recruits.RecruitImport", b =>
{
- b.HasOne("BMA.EHR.Recruit.Models.Documents.Document", "ImportFile")
+ b.HasOne("BMA.EHR.Recruit.Service.Models.Documents.Document", "ImportFile")
.WithMany()
.HasForeignKey("ImportFileId")
.OnDelete(DeleteBehavior.Cascade)
@@ -1129,9 +1129,9 @@ namespace BMA.EHR.Recruit.Migrations
b.Navigation("ImportFile");
});
- modelBuilder.Entity("BMA.EHR.Recruit.Models.Recruits.RecruitOccupation", b =>
+ modelBuilder.Entity("BMA.EHR.Recruit.Service.Models.Recruits.RecruitOccupation", b =>
{
- b.HasOne("BMA.EHR.Recruit.Models.Recruits.Recruit", "Recruit")
+ b.HasOne("BMA.EHR.Recruit.Service.Models.Recruits.Recruit", "Recruit")
.WithMany("Occupations")
.HasForeignKey("RecruitId")
.OnDelete(DeleteBehavior.Cascade)
@@ -1140,9 +1140,9 @@ namespace BMA.EHR.Recruit.Migrations
b.Navigation("Recruit");
});
- modelBuilder.Entity("BMA.EHR.Recruit.Models.Recruits.RecruitPayment", b =>
+ modelBuilder.Entity("BMA.EHR.Recruit.Service.Models.Recruits.RecruitPayment", b =>
{
- b.HasOne("BMA.EHR.Recruit.Models.Recruits.Recruit", "Recruit")
+ b.HasOne("BMA.EHR.Recruit.Service.Models.Recruits.Recruit", "Recruit")
.WithMany("Payments")
.HasForeignKey("RecruitId")
.OnDelete(DeleteBehavior.Cascade)
@@ -1151,9 +1151,9 @@ namespace BMA.EHR.Recruit.Migrations
b.Navigation("Recruit");
});
- modelBuilder.Entity("BMA.EHR.Recruit.Models.Recruits.RecruitScore", b =>
+ modelBuilder.Entity("BMA.EHR.Recruit.Service.Models.Recruits.RecruitScore", b =>
{
- b.HasOne("BMA.EHR.Recruit.Models.Recruits.ScoreImport", "ScoreImport")
+ b.HasOne("BMA.EHR.Recruit.Service.Models.Recruits.ScoreImport", "ScoreImport")
.WithMany("Scores")
.HasForeignKey("ScoreImportId")
.OnDelete(DeleteBehavior.Cascade)
@@ -1162,9 +1162,9 @@ namespace BMA.EHR.Recruit.Migrations
b.Navigation("ScoreImport");
});
- modelBuilder.Entity("BMA.EHR.Recruit.Models.Recruits.ScoreImport", b =>
+ modelBuilder.Entity("BMA.EHR.Recruit.Service.Models.Recruits.ScoreImport", b =>
{
- b.HasOne("BMA.EHR.Recruit.Models.Documents.Document", "ImportFile")
+ b.HasOne("BMA.EHR.Recruit.Service.Models.Documents.Document", "ImportFile")
.WithMany()
.HasForeignKey("ImportFileId")
.OnDelete(DeleteBehavior.Cascade)
@@ -1173,7 +1173,7 @@ namespace BMA.EHR.Recruit.Migrations
b.Navigation("ImportFile");
});
- modelBuilder.Entity("BMA.EHR.Recruit.Models.Recruits.Recruit", b =>
+ modelBuilder.Entity("BMA.EHR.Recruit.Service.Models.Recruits.Recruit", b =>
{
b.Navigation("Addresses");
@@ -1188,12 +1188,12 @@ namespace BMA.EHR.Recruit.Migrations
b.Navigation("Payments");
});
- modelBuilder.Entity("BMA.EHR.Recruit.Models.Recruits.RecruitImport", b =>
+ modelBuilder.Entity("BMA.EHR.Recruit.Service.Models.Recruits.RecruitImport", b =>
{
b.Navigation("Recruits");
});
- modelBuilder.Entity("BMA.EHR.Recruit.Models.Recruits.ScoreImport", b =>
+ modelBuilder.Entity("BMA.EHR.Recruit.Service.Models.Recruits.ScoreImport", b =>
{
b.Navigation("Scores");
});
diff --git a/Migrations/20230313045824_Initial Project.cs b/Migrations/20230313045824_Initial Project.cs
index 8a8f221..6a24dbe 100644
--- a/Migrations/20230313045824_Initial Project.cs
+++ b/Migrations/20230313045824_Initial Project.cs
@@ -3,7 +3,7 @@ using Microsoft.EntityFrameworkCore.Migrations;
#nullable disable
-namespace BMA.EHR.Recruit.Migrations
+namespace BMA.EHR.Recruit.Service.Migrations
{
///
public partial class InitialProject : Migration
diff --git a/Migrations/20230323020854_Update recruit import table.Designer.cs b/Migrations/20230323020854_Update recruit import table.Designer.cs
index 9d3858a..1f7b02b 100644
--- a/Migrations/20230323020854_Update recruit import table.Designer.cs
+++ b/Migrations/20230323020854_Update recruit import table.Designer.cs
@@ -1,6 +1,6 @@
//
using System;
-using BMA.EHR.Recruit.Data;
+using BMA.EHR.Recruit.Service.Data;
using Microsoft.EntityFrameworkCore;
using Microsoft.EntityFrameworkCore.Infrastructure;
using Microsoft.EntityFrameworkCore.Migrations;
@@ -8,7 +8,7 @@ using Microsoft.EntityFrameworkCore.Storage.ValueConversion;
#nullable disable
-namespace BMA.EHR.Recruit.Migrations
+namespace BMA.EHR.Recruit.Service.Migrations
{
[DbContext(typeof(ApplicationDbContext))]
[Migration("20230323020854_Update recruit import table")]
@@ -22,7 +22,7 @@ namespace BMA.EHR.Recruit.Migrations
.HasAnnotation("ProductVersion", "7.0.3")
.HasAnnotation("Relational:MaxIdentifierLength", 64);
- modelBuilder.Entity("BMA.EHR.Recruit.Models.Documents.Document", b =>
+ modelBuilder.Entity("BMA.EHR.Recruit.Service.Models.Documents.Document", b =>
{
b.Property("Id")
.ValueGeneratedOnAdd()
@@ -58,7 +58,7 @@ namespace BMA.EHR.Recruit.Migrations
b.ToTable("Documents");
});
- modelBuilder.Entity("BMA.EHR.Recruit.Models.Recruits.Recruit", b =>
+ modelBuilder.Entity("BMA.EHR.Recruit.Service.Models.Recruits.Recruit", b =>
{
b.Property("Id")
.ValueGeneratedOnAdd()
@@ -197,7 +197,7 @@ namespace BMA.EHR.Recruit.Migrations
b.ToTable("Recruits");
});
- modelBuilder.Entity("BMA.EHR.Recruit.Models.Recruits.RecruitAddress", b =>
+ modelBuilder.Entity("BMA.EHR.Recruit.Service.Models.Recruits.RecruitAddress", b =>
{
b.Property("Id")
.ValueGeneratedOnAdd()
@@ -344,7 +344,7 @@ namespace BMA.EHR.Recruit.Migrations
b.ToTable("RecruitAddresses");
});
- modelBuilder.Entity("BMA.EHR.Recruit.Models.Recruits.RecruitCertificate", b =>
+ modelBuilder.Entity("BMA.EHR.Recruit.Service.Models.Recruits.RecruitCertificate", b =>
{
b.Property("Id")
.ValueGeneratedOnAdd()
@@ -417,7 +417,7 @@ namespace BMA.EHR.Recruit.Migrations
b.ToTable("RecruitCertificates");
});
- modelBuilder.Entity("BMA.EHR.Recruit.Models.Recruits.RecruitDocument", b =>
+ modelBuilder.Entity("BMA.EHR.Recruit.Service.Models.Recruits.RecruitDocument", b =>
{
b.Property("Id")
.ValueGeneratedOnAdd()
@@ -482,7 +482,7 @@ namespace BMA.EHR.Recruit.Migrations
b.ToTable("RecruitDocuments");
});
- modelBuilder.Entity("BMA.EHR.Recruit.Models.Recruits.RecruitEducation", b =>
+ modelBuilder.Entity("BMA.EHR.Recruit.Service.Models.Recruits.RecruitEducation", b =>
{
b.Property("Id")
.ValueGeneratedOnAdd()
@@ -580,7 +580,7 @@ namespace BMA.EHR.Recruit.Migrations
b.ToTable("RecruitEducations");
});
- modelBuilder.Entity("BMA.EHR.Recruit.Models.Recruits.RecruitImport", b =>
+ modelBuilder.Entity("BMA.EHR.Recruit.Service.Models.Recruits.RecruitImport", b =>
{
b.Property("Id")
.ValueGeneratedOnAdd()
@@ -654,7 +654,7 @@ namespace BMA.EHR.Recruit.Migrations
b.ToTable("RecruitImports");
});
- modelBuilder.Entity("BMA.EHR.Recruit.Models.Recruits.RecruitOccupation", b =>
+ modelBuilder.Entity("BMA.EHR.Recruit.Service.Models.Recruits.RecruitOccupation", b =>
{
b.Property("Id")
.ValueGeneratedOnAdd()
@@ -736,7 +736,7 @@ namespace BMA.EHR.Recruit.Migrations
b.ToTable("RecruitOccupations");
});
- modelBuilder.Entity("BMA.EHR.Recruit.Models.Recruits.RecruitPayment", b =>
+ modelBuilder.Entity("BMA.EHR.Recruit.Service.Models.Recruits.RecruitPayment", b =>
{
b.Property("Id")
.ValueGeneratedOnAdd()
@@ -871,7 +871,7 @@ namespace BMA.EHR.Recruit.Migrations
b.ToTable("RecruitPayments");
});
- modelBuilder.Entity("BMA.EHR.Recruit.Models.Recruits.RecruitScore", b =>
+ modelBuilder.Entity("BMA.EHR.Recruit.Service.Models.Recruits.RecruitScore", b =>
{
b.Property("Id")
.ValueGeneratedOnAdd()
@@ -978,7 +978,7 @@ namespace BMA.EHR.Recruit.Migrations
b.ToTable("RecruitScores");
});
- modelBuilder.Entity("BMA.EHR.Recruit.Models.Recruits.ScoreImport", b =>
+ modelBuilder.Entity("BMA.EHR.Recruit.Service.Models.Recruits.ScoreImport", b =>
{
b.Property("Id")
.ValueGeneratedOnAdd()
@@ -1038,9 +1038,9 @@ namespace BMA.EHR.Recruit.Migrations
b.ToTable("ScoreImports");
});
- modelBuilder.Entity("BMA.EHR.Recruit.Models.Recruits.Recruit", b =>
+ modelBuilder.Entity("BMA.EHR.Recruit.Service.Models.Recruits.Recruit", b =>
{
- b.HasOne("BMA.EHR.Recruit.Models.Recruits.RecruitImport", "RecruitImport")
+ b.HasOne("BMA.EHR.Recruit.Service.Models.Recruits.RecruitImport", "RecruitImport")
.WithMany("Recruits")
.HasForeignKey("RecruitImportId")
.OnDelete(DeleteBehavior.Cascade);
@@ -1048,9 +1048,9 @@ namespace BMA.EHR.Recruit.Migrations
b.Navigation("RecruitImport");
});
- modelBuilder.Entity("BMA.EHR.Recruit.Models.Recruits.RecruitAddress", b =>
+ modelBuilder.Entity("BMA.EHR.Recruit.Service.Models.Recruits.RecruitAddress", b =>
{
- b.HasOne("BMA.EHR.Recruit.Models.Recruits.Recruit", "Recruit")
+ b.HasOne("BMA.EHR.Recruit.Service.Models.Recruits.Recruit", "Recruit")
.WithMany("Addresses")
.HasForeignKey("RecruitId")
.OnDelete(DeleteBehavior.Cascade)
@@ -1059,9 +1059,9 @@ namespace BMA.EHR.Recruit.Migrations
b.Navigation("Recruit");
});
- modelBuilder.Entity("BMA.EHR.Recruit.Models.Recruits.RecruitCertificate", b =>
+ modelBuilder.Entity("BMA.EHR.Recruit.Service.Models.Recruits.RecruitCertificate", b =>
{
- b.HasOne("BMA.EHR.Recruit.Models.Recruits.Recruit", "Recruit")
+ b.HasOne("BMA.EHR.Recruit.Service.Models.Recruits.Recruit", "Recruit")
.WithMany("Certificates")
.HasForeignKey("RecruitId")
.OnDelete(DeleteBehavior.Cascade)
@@ -1070,15 +1070,15 @@ namespace BMA.EHR.Recruit.Migrations
b.Navigation("Recruit");
});
- modelBuilder.Entity("BMA.EHR.Recruit.Models.Recruits.RecruitDocument", b =>
+ modelBuilder.Entity("BMA.EHR.Recruit.Service.Models.Recruits.RecruitDocument", b =>
{
- b.HasOne("BMA.EHR.Recruit.Models.Documents.Document", "DocumentFile")
+ b.HasOne("BMA.EHR.Recruit.Service.Models.Documents.Document", "DocumentFile")
.WithMany()
.HasForeignKey("DocumentFileId")
.OnDelete(DeleteBehavior.Cascade)
.IsRequired();
- b.HasOne("BMA.EHR.Recruit.Models.Recruits.Recruit", "Recruit")
+ b.HasOne("BMA.EHR.Recruit.Service.Models.Recruits.Recruit", "Recruit")
.WithMany("Documents")
.HasForeignKey("RecruitId")
.OnDelete(DeleteBehavior.Cascade)
@@ -1089,9 +1089,9 @@ namespace BMA.EHR.Recruit.Migrations
b.Navigation("Recruit");
});
- modelBuilder.Entity("BMA.EHR.Recruit.Models.Recruits.RecruitEducation", b =>
+ modelBuilder.Entity("BMA.EHR.Recruit.Service.Models.Recruits.RecruitEducation", b =>
{
- b.HasOne("BMA.EHR.Recruit.Models.Recruits.Recruit", "Recruit")
+ b.HasOne("BMA.EHR.Recruit.Service.Models.Recruits.Recruit", "Recruit")
.WithMany("Educations")
.HasForeignKey("RecruitId")
.OnDelete(DeleteBehavior.Cascade)
@@ -1100,9 +1100,9 @@ namespace BMA.EHR.Recruit.Migrations
b.Navigation("Recruit");
});
- modelBuilder.Entity("BMA.EHR.Recruit.Models.Recruits.RecruitImport", b =>
+ modelBuilder.Entity("BMA.EHR.Recruit.Service.Models.Recruits.RecruitImport", b =>
{
- b.HasOne("BMA.EHR.Recruit.Models.Documents.Document", "ImportFile")
+ b.HasOne("BMA.EHR.Recruit.Service.Models.Documents.Document", "ImportFile")
.WithMany()
.HasForeignKey("ImportFileId")
.OnDelete(DeleteBehavior.Cascade)
@@ -1111,9 +1111,9 @@ namespace BMA.EHR.Recruit.Migrations
b.Navigation("ImportFile");
});
- modelBuilder.Entity("BMA.EHR.Recruit.Models.Recruits.RecruitOccupation", b =>
+ modelBuilder.Entity("BMA.EHR.Recruit.Service.Models.Recruits.RecruitOccupation", b =>
{
- b.HasOne("BMA.EHR.Recruit.Models.Recruits.Recruit", "Recruit")
+ b.HasOne("BMA.EHR.Recruit.Service.Models.Recruits.Recruit", "Recruit")
.WithMany("Occupations")
.HasForeignKey("RecruitId")
.OnDelete(DeleteBehavior.Cascade)
@@ -1122,9 +1122,9 @@ namespace BMA.EHR.Recruit.Migrations
b.Navigation("Recruit");
});
- modelBuilder.Entity("BMA.EHR.Recruit.Models.Recruits.RecruitPayment", b =>
+ modelBuilder.Entity("BMA.EHR.Recruit.Service.Models.Recruits.RecruitPayment", b =>
{
- b.HasOne("BMA.EHR.Recruit.Models.Recruits.Recruit", "Recruit")
+ b.HasOne("BMA.EHR.Recruit.Service.Models.Recruits.Recruit", "Recruit")
.WithMany("Payments")
.HasForeignKey("RecruitId")
.OnDelete(DeleteBehavior.Cascade)
@@ -1133,9 +1133,9 @@ namespace BMA.EHR.Recruit.Migrations
b.Navigation("Recruit");
});
- modelBuilder.Entity("BMA.EHR.Recruit.Models.Recruits.RecruitScore", b =>
+ modelBuilder.Entity("BMA.EHR.Recruit.Service.Models.Recruits.RecruitScore", b =>
{
- b.HasOne("BMA.EHR.Recruit.Models.Recruits.ScoreImport", "ScoreImport")
+ b.HasOne("BMA.EHR.Recruit.Service.Models.Recruits.ScoreImport", "ScoreImport")
.WithMany("Scores")
.HasForeignKey("ScoreImportId")
.OnDelete(DeleteBehavior.Cascade)
@@ -1144,9 +1144,9 @@ namespace BMA.EHR.Recruit.Migrations
b.Navigation("ScoreImport");
});
- modelBuilder.Entity("BMA.EHR.Recruit.Models.Recruits.ScoreImport", b =>
+ modelBuilder.Entity("BMA.EHR.Recruit.Service.Models.Recruits.ScoreImport", b =>
{
- b.HasOne("BMA.EHR.Recruit.Models.Documents.Document", "ImportFile")
+ b.HasOne("BMA.EHR.Recruit.Service.Models.Documents.Document", "ImportFile")
.WithMany()
.HasForeignKey("ImportFileId")
.OnDelete(DeleteBehavior.Cascade)
@@ -1155,7 +1155,7 @@ namespace BMA.EHR.Recruit.Migrations
b.Navigation("ImportFile");
});
- modelBuilder.Entity("BMA.EHR.Recruit.Models.Recruits.Recruit", b =>
+ modelBuilder.Entity("BMA.EHR.Recruit.Service.Models.Recruits.Recruit", b =>
{
b.Navigation("Addresses");
@@ -1170,12 +1170,12 @@ namespace BMA.EHR.Recruit.Migrations
b.Navigation("Payments");
});
- modelBuilder.Entity("BMA.EHR.Recruit.Models.Recruits.RecruitImport", b =>
+ modelBuilder.Entity("BMA.EHR.Recruit.Service.Models.Recruits.RecruitImport", b =>
{
b.Navigation("Recruits");
});
- modelBuilder.Entity("BMA.EHR.Recruit.Models.Recruits.ScoreImport", b =>
+ modelBuilder.Entity("BMA.EHR.Recruit.Service.Models.Recruits.ScoreImport", b =>
{
b.Navigation("Scores");
});
diff --git a/Migrations/20230323020854_Update recruit import table.cs b/Migrations/20230323020854_Update recruit import table.cs
index 01c9a51..4e59f97 100644
--- a/Migrations/20230323020854_Update recruit import table.cs
+++ b/Migrations/20230323020854_Update recruit import table.cs
@@ -3,7 +3,7 @@ using Microsoft.EntityFrameworkCore.Migrations;
#nullable disable
-namespace BMA.EHR.Recruit.Migrations
+namespace BMA.EHR.Recruit.Service.Migrations
{
///
public partial class Updaterecruitimporttable : Migration
diff --git a/Migrations/20230325122648_Change Document Table Def.Designer.cs b/Migrations/20230325122648_Change Document Table Def.Designer.cs
index 0684b96..edbd39c 100644
--- a/Migrations/20230325122648_Change Document Table Def.Designer.cs
+++ b/Migrations/20230325122648_Change Document Table Def.Designer.cs
@@ -1,6 +1,6 @@
//
using System;
-using BMA.EHR.Recruit.Data;
+using BMA.EHR.Recruit.Service.Data;
using Microsoft.EntityFrameworkCore;
using Microsoft.EntityFrameworkCore.Infrastructure;
using Microsoft.EntityFrameworkCore.Migrations;
@@ -8,7 +8,7 @@ using Microsoft.EntityFrameworkCore.Storage.ValueConversion;
#nullable disable
-namespace BMA.EHR.Recruit.Migrations
+namespace BMA.EHR.Recruit.Service.Migrations
{
[DbContext(typeof(ApplicationDbContext))]
[Migration("20230325122648_Change Document Table Def")]
@@ -22,7 +22,7 @@ namespace BMA.EHR.Recruit.Migrations
.HasAnnotation("ProductVersion", "7.0.3")
.HasAnnotation("Relational:MaxIdentifierLength", 64);
- modelBuilder.Entity("BMA.EHR.Recruit.Models.Documents.Document", b =>
+ modelBuilder.Entity("BMA.EHR.Recruit.Service.Models.Documents.Document", b =>
{
b.Property("Id")
.ValueGeneratedOnAdd()
@@ -56,7 +56,7 @@ namespace BMA.EHR.Recruit.Migrations
b.ToTable("Documents");
});
- modelBuilder.Entity("BMA.EHR.Recruit.Models.Recruits.Recruit", b =>
+ modelBuilder.Entity("BMA.EHR.Recruit.Service.Models.Recruits.Recruit", b =>
{
b.Property("Id")
.ValueGeneratedOnAdd()
@@ -195,7 +195,7 @@ namespace BMA.EHR.Recruit.Migrations
b.ToTable("Recruits");
});
- modelBuilder.Entity("BMA.EHR.Recruit.Models.Recruits.RecruitAddress", b =>
+ modelBuilder.Entity("BMA.EHR.Recruit.Service.Models.Recruits.RecruitAddress", b =>
{
b.Property("Id")
.ValueGeneratedOnAdd()
@@ -342,7 +342,7 @@ namespace BMA.EHR.Recruit.Migrations
b.ToTable("RecruitAddresses");
});
- modelBuilder.Entity("BMA.EHR.Recruit.Models.Recruits.RecruitCertificate", b =>
+ modelBuilder.Entity("BMA.EHR.Recruit.Service.Models.Recruits.RecruitCertificate", b =>
{
b.Property("Id")
.ValueGeneratedOnAdd()
@@ -415,7 +415,7 @@ namespace BMA.EHR.Recruit.Migrations
b.ToTable("RecruitCertificates");
});
- modelBuilder.Entity("BMA.EHR.Recruit.Models.Recruits.RecruitDocument", b =>
+ modelBuilder.Entity("BMA.EHR.Recruit.Service.Models.Recruits.RecruitDocument", b =>
{
b.Property("Id")
.ValueGeneratedOnAdd()
@@ -480,7 +480,7 @@ namespace BMA.EHR.Recruit.Migrations
b.ToTable("RecruitDocuments");
});
- modelBuilder.Entity("BMA.EHR.Recruit.Models.Recruits.RecruitEducation", b =>
+ modelBuilder.Entity("BMA.EHR.Recruit.Service.Models.Recruits.RecruitEducation", b =>
{
b.Property("Id")
.ValueGeneratedOnAdd()
@@ -578,7 +578,7 @@ namespace BMA.EHR.Recruit.Migrations
b.ToTable("RecruitEducations");
});
- modelBuilder.Entity("BMA.EHR.Recruit.Models.Recruits.RecruitImport", b =>
+ modelBuilder.Entity("BMA.EHR.Recruit.Service.Models.Recruits.RecruitImport", b =>
{
b.Property("Id")
.ValueGeneratedOnAdd()
@@ -652,7 +652,7 @@ namespace BMA.EHR.Recruit.Migrations
b.ToTable("RecruitImports");
});
- modelBuilder.Entity("BMA.EHR.Recruit.Models.Recruits.RecruitOccupation", b =>
+ modelBuilder.Entity("BMA.EHR.Recruit.Service.Models.Recruits.RecruitOccupation", b =>
{
b.Property("Id")
.ValueGeneratedOnAdd()
@@ -734,7 +734,7 @@ namespace BMA.EHR.Recruit.Migrations
b.ToTable("RecruitOccupations");
});
- modelBuilder.Entity("BMA.EHR.Recruit.Models.Recruits.RecruitPayment", b =>
+ modelBuilder.Entity("BMA.EHR.Recruit.Service.Models.Recruits.RecruitPayment", b =>
{
b.Property("Id")
.ValueGeneratedOnAdd()
@@ -869,7 +869,7 @@ namespace BMA.EHR.Recruit.Migrations
b.ToTable("RecruitPayments");
});
- modelBuilder.Entity("BMA.EHR.Recruit.Models.Recruits.RecruitScore", b =>
+ modelBuilder.Entity("BMA.EHR.Recruit.Service.Models.Recruits.RecruitScore", b =>
{
b.Property("Id")
.ValueGeneratedOnAdd()
@@ -976,7 +976,7 @@ namespace BMA.EHR.Recruit.Migrations
b.ToTable("RecruitScores");
});
- modelBuilder.Entity("BMA.EHR.Recruit.Models.Recruits.ScoreImport", b =>
+ modelBuilder.Entity("BMA.EHR.Recruit.Service.Models.Recruits.ScoreImport", b =>
{
b.Property("Id")
.ValueGeneratedOnAdd()
@@ -1036,9 +1036,9 @@ namespace BMA.EHR.Recruit.Migrations
b.ToTable("ScoreImports");
});
- modelBuilder.Entity("BMA.EHR.Recruit.Models.Recruits.Recruit", b =>
+ modelBuilder.Entity("BMA.EHR.Recruit.Service.Models.Recruits.Recruit", b =>
{
- b.HasOne("BMA.EHR.Recruit.Models.Recruits.RecruitImport", "RecruitImport")
+ b.HasOne("BMA.EHR.Recruit.Service.Models.Recruits.RecruitImport", "RecruitImport")
.WithMany("Recruits")
.HasForeignKey("RecruitImportId")
.OnDelete(DeleteBehavior.Cascade);
@@ -1046,9 +1046,9 @@ namespace BMA.EHR.Recruit.Migrations
b.Navigation("RecruitImport");
});
- modelBuilder.Entity("BMA.EHR.Recruit.Models.Recruits.RecruitAddress", b =>
+ modelBuilder.Entity("BMA.EHR.Recruit.Service.Models.Recruits.RecruitAddress", b =>
{
- b.HasOne("BMA.EHR.Recruit.Models.Recruits.Recruit", "Recruit")
+ b.HasOne("BMA.EHR.Recruit.Service.Models.Recruits.Recruit", "Recruit")
.WithMany("Addresses")
.HasForeignKey("RecruitId")
.OnDelete(DeleteBehavior.Cascade)
@@ -1057,9 +1057,9 @@ namespace BMA.EHR.Recruit.Migrations
b.Navigation("Recruit");
});
- modelBuilder.Entity("BMA.EHR.Recruit.Models.Recruits.RecruitCertificate", b =>
+ modelBuilder.Entity("BMA.EHR.Recruit.Service.Models.Recruits.RecruitCertificate", b =>
{
- b.HasOne("BMA.EHR.Recruit.Models.Recruits.Recruit", "Recruit")
+ b.HasOne("BMA.EHR.Recruit.Service.Models.Recruits.Recruit", "Recruit")
.WithMany("Certificates")
.HasForeignKey("RecruitId")
.OnDelete(DeleteBehavior.Cascade)
@@ -1068,15 +1068,15 @@ namespace BMA.EHR.Recruit.Migrations
b.Navigation("Recruit");
});
- modelBuilder.Entity("BMA.EHR.Recruit.Models.Recruits.RecruitDocument", b =>
+ modelBuilder.Entity("BMA.EHR.Recruit.Service.Models.Recruits.RecruitDocument", b =>
{
- b.HasOne("BMA.EHR.Recruit.Models.Documents.Document", "DocumentFile")
+ b.HasOne("BMA.EHR.Recruit.Service.Models.Documents.Document", "DocumentFile")
.WithMany()
.HasForeignKey("DocumentFileId")
.OnDelete(DeleteBehavior.Cascade)
.IsRequired();
- b.HasOne("BMA.EHR.Recruit.Models.Recruits.Recruit", "Recruit")
+ b.HasOne("BMA.EHR.Recruit.Service.Models.Recruits.Recruit", "Recruit")
.WithMany("Documents")
.HasForeignKey("RecruitId")
.OnDelete(DeleteBehavior.Cascade)
@@ -1087,9 +1087,9 @@ namespace BMA.EHR.Recruit.Migrations
b.Navigation("Recruit");
});
- modelBuilder.Entity("BMA.EHR.Recruit.Models.Recruits.RecruitEducation", b =>
+ modelBuilder.Entity("BMA.EHR.Recruit.Service.Models.Recruits.RecruitEducation", b =>
{
- b.HasOne("BMA.EHR.Recruit.Models.Recruits.Recruit", "Recruit")
+ b.HasOne("BMA.EHR.Recruit.Service.Models.Recruits.Recruit", "Recruit")
.WithMany("Educations")
.HasForeignKey("RecruitId")
.OnDelete(DeleteBehavior.Cascade)
@@ -1098,9 +1098,9 @@ namespace BMA.EHR.Recruit.Migrations
b.Navigation("Recruit");
});
- modelBuilder.Entity("BMA.EHR.Recruit.Models.Recruits.RecruitImport", b =>
+ modelBuilder.Entity("BMA.EHR.Recruit.Service.Models.Recruits.RecruitImport", b =>
{
- b.HasOne("BMA.EHR.Recruit.Models.Documents.Document", "ImportFile")
+ b.HasOne("BMA.EHR.Recruit.Service.Models.Documents.Document", "ImportFile")
.WithMany()
.HasForeignKey("ImportFileId")
.OnDelete(DeleteBehavior.Cascade)
@@ -1109,9 +1109,9 @@ namespace BMA.EHR.Recruit.Migrations
b.Navigation("ImportFile");
});
- modelBuilder.Entity("BMA.EHR.Recruit.Models.Recruits.RecruitOccupation", b =>
+ modelBuilder.Entity("BMA.EHR.Recruit.Service.Models.Recruits.RecruitOccupation", b =>
{
- b.HasOne("BMA.EHR.Recruit.Models.Recruits.Recruit", "Recruit")
+ b.HasOne("BMA.EHR.Recruit.Service.Models.Recruits.Recruit", "Recruit")
.WithMany("Occupations")
.HasForeignKey("RecruitId")
.OnDelete(DeleteBehavior.Cascade)
@@ -1120,9 +1120,9 @@ namespace BMA.EHR.Recruit.Migrations
b.Navigation("Recruit");
});
- modelBuilder.Entity("BMA.EHR.Recruit.Models.Recruits.RecruitPayment", b =>
+ modelBuilder.Entity("BMA.EHR.Recruit.Service.Models.Recruits.RecruitPayment", b =>
{
- b.HasOne("BMA.EHR.Recruit.Models.Recruits.Recruit", "Recruit")
+ b.HasOne("BMA.EHR.Recruit.Service.Models.Recruits.Recruit", "Recruit")
.WithMany("Payments")
.HasForeignKey("RecruitId")
.OnDelete(DeleteBehavior.Cascade)
@@ -1131,9 +1131,9 @@ namespace BMA.EHR.Recruit.Migrations
b.Navigation("Recruit");
});
- modelBuilder.Entity("BMA.EHR.Recruit.Models.Recruits.RecruitScore", b =>
+ modelBuilder.Entity("BMA.EHR.Recruit.Service.Models.Recruits.RecruitScore", b =>
{
- b.HasOne("BMA.EHR.Recruit.Models.Recruits.ScoreImport", "ScoreImport")
+ b.HasOne("BMA.EHR.Recruit.Service.Models.Recruits.ScoreImport", "ScoreImport")
.WithMany("Scores")
.HasForeignKey("ScoreImportId")
.OnDelete(DeleteBehavior.Cascade)
@@ -1142,9 +1142,9 @@ namespace BMA.EHR.Recruit.Migrations
b.Navigation("ScoreImport");
});
- modelBuilder.Entity("BMA.EHR.Recruit.Models.Recruits.ScoreImport", b =>
+ modelBuilder.Entity("BMA.EHR.Recruit.Service.Models.Recruits.ScoreImport", b =>
{
- b.HasOne("BMA.EHR.Recruit.Models.Documents.Document", "ImportFile")
+ b.HasOne("BMA.EHR.Recruit.Service.Models.Documents.Document", "ImportFile")
.WithMany()
.HasForeignKey("ImportFileId")
.OnDelete(DeleteBehavior.Cascade)
@@ -1153,7 +1153,7 @@ namespace BMA.EHR.Recruit.Migrations
b.Navigation("ImportFile");
});
- modelBuilder.Entity("BMA.EHR.Recruit.Models.Recruits.Recruit", b =>
+ modelBuilder.Entity("BMA.EHR.Recruit.Service.Models.Recruits.Recruit", b =>
{
b.Navigation("Addresses");
@@ -1168,12 +1168,12 @@ namespace BMA.EHR.Recruit.Migrations
b.Navigation("Payments");
});
- modelBuilder.Entity("BMA.EHR.Recruit.Models.Recruits.RecruitImport", b =>
+ modelBuilder.Entity("BMA.EHR.Recruit.Service.Models.Recruits.RecruitImport", b =>
{
b.Navigation("Recruits");
});
- modelBuilder.Entity("BMA.EHR.Recruit.Models.Recruits.ScoreImport", b =>
+ modelBuilder.Entity("BMA.EHR.Recruit.Service.Models.Recruits.ScoreImport", b =>
{
b.Navigation("Scores");
});
diff --git a/Migrations/20230325122648_Change Document Table Def.cs b/Migrations/20230325122648_Change Document Table Def.cs
index c3418ca..3aa3729 100644
--- a/Migrations/20230325122648_Change Document Table Def.cs
+++ b/Migrations/20230325122648_Change Document Table Def.cs
@@ -3,7 +3,7 @@ using Microsoft.EntityFrameworkCore.Migrations;
#nullable disable
-namespace BMA.EHR.Recruit.Migrations
+namespace BMA.EHR.Recruit.Service.Migrations
{
///
public partial class ChangeDocumentTableDef : Migration
diff --git a/Migrations/20230403104559_Update Recruit Score Relationship.Designer.cs b/Migrations/20230403104559_Update Recruit Score Relationship.Designer.cs
index 1cfa351..a596d94 100644
--- a/Migrations/20230403104559_Update Recruit Score Relationship.Designer.cs
+++ b/Migrations/20230403104559_Update Recruit Score Relationship.Designer.cs
@@ -1,6 +1,6 @@
//
using System;
-using BMA.EHR.Recruit.Data;
+using BMA.EHR.Recruit.Service.Data;
using Microsoft.EntityFrameworkCore;
using Microsoft.EntityFrameworkCore.Infrastructure;
using Microsoft.EntityFrameworkCore.Migrations;
@@ -8,7 +8,7 @@ using Microsoft.EntityFrameworkCore.Storage.ValueConversion;
#nullable disable
-namespace BMA.EHR.Recruit.Migrations
+namespace BMA.EHR.Recruit.Service.Migrations
{
[DbContext(typeof(ApplicationDbContext))]
[Migration("20230403104559_Update Recruit Score Relationship")]
@@ -22,7 +22,7 @@ namespace BMA.EHR.Recruit.Migrations
.HasAnnotation("ProductVersion", "7.0.3")
.HasAnnotation("Relational:MaxIdentifierLength", 64);
- modelBuilder.Entity("BMA.EHR.Recruit.Models.Documents.Document", b =>
+ modelBuilder.Entity("BMA.EHR.Recruit.Service.Models.Documents.Document", b =>
{
b.Property("Id")
.ValueGeneratedOnAdd()
@@ -56,7 +56,7 @@ namespace BMA.EHR.Recruit.Migrations
b.ToTable("Documents");
});
- modelBuilder.Entity("BMA.EHR.Recruit.Models.Recruits.Recruit", b =>
+ modelBuilder.Entity("BMA.EHR.Recruit.Service.Models.Recruits.Recruit", b =>
{
b.Property