ย้ายคนจากสรรหาไปบรรจุ

This commit is contained in:
Kittapath 2023-07-25 23:45:35 +07:00
parent afd9994783
commit 9a53f34107
15 changed files with 846 additions and 260 deletions

View file

@ -1,5 +1,6 @@
using System.Security.Claims;
using System.Text.Json;
using BMA.EHR.Domain.Models.Placement;
using BMA.EHR.Extensions;
using BMA.EHR.Recurit.Exam.Service.Core;
using BMA.EHR.Recurit.Exam.Service.Data;
@ -11,6 +12,7 @@ using BMA.EHR.Recurit.Exam.Service.Responses.Document;
using Microsoft.EntityFrameworkCore;
using Newtonsoft.Json.Linq;
using OfficeOpenXml;
using BMA.EHR.Domain.Models.Placement;
namespace BMA.EHR.Recurit.Exam.Service.Services
{
@ -1829,6 +1831,138 @@ namespace BMA.EHR.Recurit.Exam.Service.Services
stream.Position = 0;
return stream;
}
public async Task UpdateAsyncCandidateToPlacement(Guid examId)
{
var periodExam = await _context.PeriodExams.AsQueryable()
.Include(x => x.Candidate)
.ThenInclude(x => x.Educations)
.Include(x => x.Candidate)
.ThenInclude(x => x.PositionExam)
.FirstOrDefaultAsync(x => x.Id == examId);
if (periodExam == null)
throw new Exception(GlobalMessages.ExamNotFound);
var _placement = await _contextMetadata.Placements.AsQueryable()
.FirstOrDefaultAsync(x => x.Name == periodExam.Name && x.Year == ((int)(periodExam.Year == null ? 0 : periodExam.Year)));
if (_placement != null)
throw new Exception("รอบการสอบนี้ได้ทำการบรรจุไปแล้ว");
var placement = new Placement
{
Name = periodExam.Name,
Round = periodExam.Round == null ? "" : periodExam.Round.ToString(),
Year = (int)(periodExam.Year == null ? 0 : periodExam.Year),
Number = periodExam.Candidate.Where(x => x.Status.Contains("done")).Count(),
PlacementType = await _contextMetadata.PlacementTypes.FirstOrDefaultAsync(x => x.Name.Trim().ToUpper().Contains("คัดเลือก")) == null ? await _contextMetadata.PlacementTypes.FirstOrDefaultAsync() : await _contextMetadata.PlacementTypes.FirstOrDefaultAsync(x => x.Name.Trim().ToUpper().Contains("คัดเลือก")),
StartDate = DateTime.Now,
EndDate = DateTime.Now.AddYears(2).AddDays(-1),
CreatedAt = DateTime.Now,
CreatedUserId = UserId ?? "",
CreatedFullName = FullName ?? "",
LastUpdatedAt = DateTime.Now,
LastUpdateUserId = UserId ?? "",
LastUpdateFullName = FullName ?? "",
};
await _contextMetadata.Placements.AddAsync(placement);
foreach (var candidate in periodExam.Candidate)
{
var placementProfile = new PlacementProfile
{
Placement = placement,
PositionCandidate = await _contextMetadata.PositionPaths.FirstOrDefaultAsync(x => x.Id == (candidate.PositionExam == null ? Guid.Parse("00000000-0000-0000-0000-000000000000") : candidate.PositionExam.PositionId)),
Prefix = await _contextMetadata.Prefixes.FirstOrDefaultAsync(x => x.Id == candidate.PrefixId),
Firstname = candidate.FirstName,
Lastname = candidate.LastName,
Nationality = candidate.Nationality,
DateOfBirth = candidate.DateOfBirth,
Relationship = await _contextMetadata.Relationships.FirstOrDefaultAsync(x => x.Id == candidate.RelationshipId),
Email = candidate.Email,
CitizenId = candidate.CitizenId,
CitizenDistrict = await _contextMetadata.Districts.FirstOrDefaultAsync(x => x.Id == candidate.CitizenDistrictId),
CitizenProvince = await _contextMetadata.Provinces.FirstOrDefaultAsync(x => x.Id == candidate.CitizenProvinceId),
CitizenDate = candidate.CitizenDate,
Telephone = candidate.Telephone,
MobilePhone = candidate.MobilePhone,
Knowledge = candidate.Knowledge,
RegistAddress = candidate.RegistAddress,
RegistProvince = await _contextMetadata.Provinces.FirstOrDefaultAsync(x => x.Id == candidate.RegistProvinceId),
RegistDistrict = await _contextMetadata.Districts.FirstOrDefaultAsync(x => x.Id == candidate.RegistDistrictId),
RegistSubDistrict = await _contextMetadata.SubDistricts.FirstOrDefaultAsync(x => x.Id == candidate.RegistSubDistrictId),
RegistZipCode = candidate.RegistZipCode,
RegistSame = candidate.RegistSame,
CurrentAddress = candidate.CurrentAddress,
CurrentProvince = await _contextMetadata.Provinces.FirstOrDefaultAsync(x => x.Id == candidate.CurrentProvinceId),
CurrentDistrict = await _contextMetadata.Districts.FirstOrDefaultAsync(x => x.Id == candidate.CurrentDistrictId),
CurrentSubDistrict = await _contextMetadata.SubDistricts.FirstOrDefaultAsync(x => x.Id == candidate.CurrentSubDistrictId),
CurrentZipCode = candidate.CurrentZipCode,
Marry = candidate.Marry,
MarryPrefix = await _contextMetadata.Prefixes.FirstOrDefaultAsync(x => x.Id == candidate.MarryPrefixId),
MarryFirstName = candidate.MarryFirstName,
MarryLastName = candidate.MarryLastName,
MarryOccupation = candidate.MarryOccupation,
MarryNationality = candidate.MarryNationality,
FatherPrefix = await _contextMetadata.Prefixes.FirstOrDefaultAsync(x => x.Id == candidate.FatherPrefixId),
FatherFirstName = candidate.FatherFirstName,
FatherLastName = candidate.FatherLastName,
FatherOccupation = candidate.FatherOccupation,
FatherNationality = candidate.FatherNationality,
MotherPrefix = await _contextMetadata.Prefixes.FirstOrDefaultAsync(x => x.Id == candidate.MotherPrefixId),
MotherFirstName = candidate.MotherFirstName,
MotherLastName = candidate.MotherLastName,
MotherOccupation = candidate.MotherOccupation,
MotherNationality = candidate.MotherNationality,
OccupationType = candidate.OccupationType,
OccupationCompany = candidate.OccupationCompany,
OccupationDepartment = candidate.OccupationDepartment,
OccupationEmail = candidate.OccupationEmail,
OccupationTelephone = candidate.OccupationTelephone,
OccupationPosition = candidate.OccupationPosition,
PointTotalA = Convert.ToDouble(candidate.PointTotalA),
PointA = Convert.ToDouble(candidate.PointA),
PointTotalB = Convert.ToDouble(candidate.PointTotalB),
PointB = Convert.ToDouble(candidate.PointB),
PointTotalC = Convert.ToDouble(candidate.PointTotalC),
PointC = Convert.ToDouble(candidate.PointC),
ExamNumber = Convert.ToInt32(candidate.Number),
ExamRound = 1,
IsRelief = false,
PlacementStatus = "UN-CONTAIN",
Pass = candidate.Pass,
CreatedAt = DateTime.Now,
CreatedUserId = UserId ?? "",
CreatedFullName = FullName ?? "",
LastUpdatedAt = DateTime.Now,
LastUpdateUserId = UserId ?? "",
LastUpdateFullName = FullName ?? "",
};
await _contextMetadata.PlacementProfiles.AddAsync(placementProfile);
foreach (var education in candidate.Educations)
{
var placementEducation = new PlacementEducation
{
PlacementProfile = placementProfile,
EducationLevel = await _contextMetadata.EducationLevels.FirstOrDefaultAsync(x => x.Id == education.EducationLevelId),
Field = education.Major,
Gpa = education.Scores.ToString(),
Institute = education.Name,
IsDate = true,
StartDate = education.DurationStart,
EndDate = education.DurationEnd,
CreatedAt = DateTime.Now,
CreatedUserId = UserId ?? "",
LastUpdatedAt = DateTime.Now,
LastUpdateUserId = UserId ?? "",
CreatedFullName = FullName ?? "",
LastUpdateFullName = FullName ?? "",
};
await _contextMetadata.PlacementEducations.AddAsync(placementEducation);
}
}
await _contextMetadata.SaveChangesAsync();
}
#endregion
}
}