แก้สมัครสอบ

This commit is contained in:
kittapath 2025-01-05 21:59:00 +07:00
parent 0412128380
commit 2d65213eee
56 changed files with 4297 additions and 1392 deletions

View file

@ -51,7 +51,7 @@ namespace BMA.EHR.Recruit.Service.Controllers
private readonly IHttpContextAccessor _httpContextAccessor;
private readonly ILogger<RecruitController> _logger;
//private readonly DateTimeExtension;
#endregion
#region " Constructor and Destructor "
@ -64,7 +64,7 @@ namespace BMA.EHR.Recruit.Service.Controllers
IHttpContextAccessor httpContextAccessor,
ILogger<RecruitController> logger,
PermissionRepository permission
//DateTimeExtension extensions
//DateTimeExtension extensions
)
{
_context = context;
@ -172,36 +172,12 @@ namespace BMA.EHR.Recruit.Service.Controllers
throw;
}
}
private List<Guid?> GetAllIdByRoot(Guid id)
{
try
{
var ret = new List<Guid?>();
var oc = _contextMetadata.Organizations.FirstOrDefault(x => x.Id == id && x.IsActive);
if (oc != null)
ret.Add(oc.Id);
var child = _contextMetadata.Organizations.AsQueryable().Where(x => x.ParentId == id && x.IsActive).ToList();
if (child.Any())
{
foreach (var item in child)
{
ret.AddRange(GetAllIdByRoot(item.Id));
}
}
return ret;
}
catch
{
throw;
}
}
private class ExamInfo
{
public string PositionName { get; set; }
public string PositionLevel { get; set; }
public string PositionType { get; set; }
public string Gender { get; set; }
public int Age { get; set; }
public string Degree { get; set; }
@ -667,45 +643,10 @@ namespace BMA.EHR.Recruit.Service.Controllers
x.CreatedUserId,
})
.ToListAsync();
var profileOrganizations = await _contextMetadata.ProfileOrganizations.AsQueryable()
.ToListAsync();
var _periodExams = (from x in data
join po in profileOrganizations on Guid.Parse(x.CreatedUserId) equals po?.UserId into poGroup
from po in poGroup.DefaultIfEmpty()
select new
{
x.Id,
x.Year,
x.Name,
x.Order,
x.ImportDate,
x.ExamCount,
x.Score,
x.CreatedUserId,
OcId = po == null ? null : po.OrganizationId,
}).AsQueryable()
.ToList();
var roles = _httpContextAccessor?.HttpContext?.User?.FindAll(ClaimTypes.Role)?.Select(c => c.Value).ToList();
// if (!roles.Contains("head"))
// {
// var criteria = new List<Guid?>();
// var profileOrganization = await _contextMetadata.ProfileOrganizations.AsQueryable()
// .FirstOrDefaultAsync(x => x.UserId == Guid.Parse(UserId));
// if (profileOrganization == null)
// return Success(new List<dynamic>());
// var ocId = _contextMetadata.Organizations.AsQueryable()
// .FirstOrDefault(x => x.Id == profileOrganization.OrganizationId);
// if (ocId == null)
// return Success(new List<dynamic>());
// criteria = GetAllIdByRoot(ocId.Id);
// if (criteria.Any())
// _periodExams = _periodExams.Where(x => x.CreatedUserId == UserId || criteria.Contains(x.OcId == null ? Guid.Parse("00000000-0000-0000-0000-000000000000") : x.OcId)).ToList();
// }
return Success(_periodExams);
return Success(data);
}
catch (Exception ex)
{
@ -810,6 +751,8 @@ namespace BMA.EHR.Recruit.Service.Controllers
r.CitizenCardExpireDate = Convert.ToDateTime(workSheet?.Cells[row, GetColumnIndex(cols, CandidateFileHeader.PersonalCardExpireDate)]?.GetValue<string>().ToDateTime(DateTimeFormat.Ymd, "-"));
r.ApplyDate = (DateTime)workSheet?.Cells[row, GetColumnIndex(cols, CandidateFileHeader.ApplyDate)]?.GetValue<DateTime>();
r.PositionName = workSheet?.Cells[row, GetColumnIndex(cols, CandidateFileHeader.PositionName)]?.GetValue<string>().IsNull("");
r.PositionType = workSheet?.Cells[row, GetColumnIndex(cols, CandidateFileHeader.PositionType)]?.GetValue<string>().IsNull("");
r.PositionLevel = workSheet?.Cells[row, GetColumnIndex(cols, CandidateFileHeader.PositionLevel)]?.GetValue<string>().IsNull("");
// address
@ -1142,6 +1085,8 @@ namespace BMA.EHR.Recruit.Service.Controllers
r.CitizenCardExpireDate = Convert.ToDateTime(workSheet?.Cells[row, GetColumnIndex(cols, CandidateFileHeader.PersonalCardExpireDate)]?.GetValue<string>().ToDateTime(DateTimeFormat.Ymd, "-"));
r.ApplyDate = (DateTime)workSheet?.Cells[row, GetColumnIndex(cols, CandidateFileHeader.ApplyDate)]?.GetValue<DateTime>();
r.PositionName = workSheet?.Cells[row, GetColumnIndex(cols, CandidateFileHeader.PositionName)]?.GetValue<string>().IsNull("");
r.PositionType = workSheet?.Cells[row, GetColumnIndex(cols, CandidateFileHeader.PositionType)]?.GetValue<string>().IsNull("");
r.PositionLevel = workSheet?.Cells[row, GetColumnIndex(cols, CandidateFileHeader.PositionLevel)]?.GetValue<string>().IsNull("");
// address
r.Addresses.Add(new RecruitAddress()
@ -1492,6 +1437,8 @@ namespace BMA.EHR.Recruit.Service.Controllers
applyDate = dr["applydate"] == null ? "" : Convert.ToDateTime(dr["applydate"]).ToThaiShortDate(),
university = dr["university"].ToString(),
position_name = dr["position_name"].ToString(),
position_level = dr["position_level"].ToString(),
position_type = dr["position_type"].ToString(),
exam_name = dr["exam_name"].ToString(),
exam_order = dr["exam_order"].ToString(),
score_year = Convert.ToInt32(dr["score_year"]).ToThaiYear().ToString(),
@ -1595,6 +1542,8 @@ namespace BMA.EHR.Recruit.Service.Controllers
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(),
@ -1833,69 +1782,30 @@ namespace BMA.EHR.Recruit.Service.Controllers
var header = $"{data.Name} ครั้งที่ {data.Order}/{data.Year.ToThaiYear()}";
var template_dir = Path.Combine(_webHostEnvironment.ContentRootPath, "Templates");
var template_file = Path.Combine(template_dir, "ExamList.xlsx");
var tmpDir = Path.Combine(_webHostEnvironment.ContentRootPath, "tmp");
if (!Directory.Exists(tmpDir))
Directory.CreateDirectory(tmpDir);
var exportFile = Path.Combine(tmpDir, $"ExamList_{DateTime.Now.ToString("yyyyMMddHHmmss")}.xlsx");
try
{
// copy template
System.IO.File.Copy(template_file, exportFile);
using (var excel = new ExcelPackage(new FileInfo(exportFile)))
var recruits = data.Recruits
.OrderBy(x => x.ExamId)
.Select(x => new
{
var workSheet = excel.Workbook.Worksheets[0];
ExamId = x.ExamId,
CitizenId = x.CitizenId,
Fullname = $"{x.Prefix}{x.FirstName} {x.LastName}",
PositionName = x.PositionName,
PositionType = x.PositionType,
PositionLevel = x.PositionLevel
})
.ToList();
workSheet.Cells[1, 2].Value = header;
var recruits = data.Recruits.OrderBy(x => x.ExamId).ToList();
var row = 4; // start at row 4
foreach (var item in recruits)
{
workSheet.Cells[row, 1].Value = item.ExamId;
workSheet.Cells[row, 2].Value = item.CitizenId;
workSheet.Cells[row, 3].Value = $"{item.Prefix}{item.FirstName} {item.LastName}";
workSheet.Cells[row, 4].Value = item.PositionName;
row++;
}
excel.Save();
using (FileStream fs = new FileStream(exportFile, FileMode.Open, FileAccess.Read))
{
byte[] bytes = System.IO.File.ReadAllBytes(exportFile);
fs.Read(bytes, 0, System.Convert.ToInt32(fs.Length));
fs.Close();
var fname = Path.GetFileName(exportFile);
Response.Headers["Content-Disposition"] = $"inline; filename={fname}";
var ret = new FileContentResult(bytes, "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet")
{
FileDownloadName = fname
};
return ret;
}
var _data = new
{
template = "ExamList",
reportName = $"ExamList_{DateTime.Now.ToString("yyyyMMddHHmmss")}",
data = new
{
header = header,
data = recruits
}
}
catch (Exception ex)
{
return Error(ex, "ไม่สามารถส่งออกรายชื่อผู้มีสิทธิ์สอบได้!!");
}
finally
{
if (System.IO.File.Exists(exportFile))
System.IO.File.Delete(exportFile);
}
};
return Success(_data);
}
[HttpGet("export/pass-exam/{id:length(36)}")]
@ -1920,89 +1830,30 @@ namespace BMA.EHR.Recruit.Service.Controllers
return Error(GlobalMessages.InvalidExamScore, StatusCodes.Status404NotFound);
var header = $"{data.Name} ครั้งที่ {data.Order}/{data.Year.ToThaiYear()}";
var result = (from r in data.Recruits.ToList()
join s in data_pass.ScoreImport.Scores.Where(x => x.AStatus == "ผ่าน").ToList() on r.ExamId equals s.ExamId
orderby s.SumA descending
select new
{
r.ExamId,
r.CitizenId,
Fullname = $"{r.Prefix}{r.FirstName} {r.LastName}",
s.FullA,
s.SumA,
s.AStatus,
var template_dir = Path.Combine(_webHostEnvironment.ContentRootPath, "Templates");
var template_file = Path.Combine(template_dir, "PassAExamList.xlsx");
var tmpDir = Path.Combine(_webHostEnvironment.ContentRootPath, "tmp");
if (!Directory.Exists(tmpDir))
Directory.CreateDirectory(tmpDir);
var exportFile = Path.Combine(tmpDir, $"PassExamList_{DateTime.Now.ToString("yyyyMMddHHmmss")}.xlsx");
try
}).ToList();
var _data = new
{
var result = (from r in data.Recruits.ToList()
join s in data_pass.ScoreImport.Scores.Where(x => x.AStatus == "ผ่าน").ToList() on r.ExamId equals s.ExamId
orderby s.SumA descending
select new
{
r.ExamId,
r.CitizenId,
r.Prefix,
r.FirstName,
r.LastName,
s.FullA,
s.SumA,
s.AStatus,
}).ToList();
// copy template
System.IO.File.Copy(template_file, exportFile);
using (var excel = new ExcelPackage(new FileInfo(exportFile)))
template = "PassAExamList",
reportName = $"PassAExamList_{DateTime.Now.ToString("yyyyMMddHHmmss")}",
data = new
{
var workSheet = excel.Workbook.Worksheets[0];
workSheet.Cells[1, 2].Value = header;
var recruits = data.Recruits.OrderBy(x => x.ExamId).ToList();
var row = 4; // start at row 4
foreach (var item in result)
{
workSheet.Cells[row, 1].Value = item.ExamId;
workSheet.Cells[row, 2].Value = item.CitizenId;
workSheet.Cells[row, 3].Value = $"{item.Prefix}{item.FirstName} {item.LastName}";
workSheet.Cells[row, 4].Value = item.FullA;
workSheet.Cells[row, 5].Value = item.SumA;
workSheet.Cells[row, 6].Value = item.AStatus;
row++;
}
excel.Save();
using (FileStream fs = new FileStream(exportFile, FileMode.Open, FileAccess.Read))
{
byte[] bytes = System.IO.File.ReadAllBytes(exportFile);
fs.Read(bytes, 0, System.Convert.ToInt32(fs.Length));
fs.Close();
var fname = Path.GetFileName(exportFile);
Response.Headers["Content-Disposition"] = $"inline; filename={fname}";
var ret = new FileContentResult(bytes, "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet")
{
FileDownloadName = fname
};
return ret;
}
header = header,
data = result
}
}
catch (Exception ex)
{
return Error(ex, "ไม่สามารถส่งออกรายชื่อผู้สอบผ่านได้!!");
}
finally
{
if (System.IO.File.Exists(exportFile))
System.IO.File.Delete(exportFile);
}
};
return Success(_data);
}
[HttpGet("export/pass/{id:length(36)}")]
@ -2023,98 +1874,36 @@ namespace BMA.EHR.Recruit.Service.Controllers
if (data_pass == null)
return Error(GlobalMessages.DataNotFound, StatusCodes.Status404NotFound);
if (data_pass!.ScoreImport == null)
return Error(GlobalMessages.InvalidExamScore, StatusCodes.Status404NotFound);
var header = $"{data.Name} ครั้งที่ {data.Order}/{data.Year.ToThaiYear()}";
var template_dir = Path.Combine(_webHostEnvironment.ContentRootPath, "Templates");
var template_file = Path.Combine(template_dir, "PassExamList.xlsx");
var tmpDir = Path.Combine(_webHostEnvironment.ContentRootPath, "tmp");
if (!Directory.Exists(tmpDir))
Directory.CreateDirectory(tmpDir);
var exportFile = Path.Combine(tmpDir, $"PassExamList_{DateTime.Now.ToString("yyyyMMddHHmmss")}.xlsx");
try
var result = (from r in data.Recruits.ToList()
join s in data_pass.ScoreImport.Scores.Where(x => x.ExamStatus == "ผ่าน").ToList() on r.ExamId equals s.ExamId
select new
{
r.ExamId,
r.CitizenId,
Fullname = $"{r.Prefix}{r.FirstName} {r.LastName}",
Full = s.FullA + s.FullB + s.FullC,
Sum = s.SumA + s.SumB + s.SumC,
Status = s.ExamStatus,
r.PositionName,
r.PositionType,
r.PositionLevel,
s.Number
}).ToList()
.OrderBy(x => x.PositionName)
.ThenByDescending(x => x.Sum)
.ToList();
var _data = new
{
var result = (from r in data.Recruits.ToList()
join s in data_pass.ScoreImport.Scores.Where(x => x.ExamStatus == "ผ่าน").ToList() on r.ExamId equals s.ExamId
select new
{
r.ExamId,
r.CitizenId,
r.Prefix,
r.FirstName,
r.LastName,
Full = s.FullA + s.FullB + s.FullC,
Sum = s.SumA + s.SumB + s.SumC,
Status = s.ExamStatus,
r.PositionName,
s.Number
}).ToList()
.OrderBy(x => x.PositionName)
.ThenByDescending(x => x.Sum)
.ToList();
// copy template
System.IO.File.Copy(template_file, exportFile);
using (var excel = new ExcelPackage(new FileInfo(exportFile)))
template = "PassExamList",
reportName = $"PassExamList_{DateTime.Now.ToString("yyyyMMddHHmmss")}",
data = new
{
var workSheet = excel.Workbook.Worksheets[0];
workSheet.Cells[1, 2].Value = header;
var recruits = data.Recruits.OrderBy(x => x.ExamId).ToList();
var row = 4; // start at row 4
foreach (var item in result)
{
workSheet.Cells[row, 1].Value = item.ExamId;
workSheet.Cells[row, 2].Value = item.CitizenId;
workSheet.Cells[row, 3].Value = $"{item.Prefix}{item.FirstName} {item.LastName}";
workSheet.Cells[row, 4].Value = item.Full;
workSheet.Cells[row, 5].Value = item.Sum;
workSheet.Cells[row, 6].Value = item.Status;
workSheet.Cells[row, 7].Value = item.Number;
workSheet.Cells[row, 8].Value = item.PositionName;
row++;
}
excel.Save();
using (FileStream fs = new FileStream(exportFile, FileMode.Open, FileAccess.Read))
{
byte[] bytes = System.IO.File.ReadAllBytes(exportFile);
fs.Read(bytes, 0, System.Convert.ToInt32(fs.Length));
fs.Close();
var fname = Path.GetFileName(exportFile);
Response.Headers["Content-Disposition"] = $"inline; filename={fname}";
var ret = new FileContentResult(bytes, "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet")
{
FileDownloadName = fname
};
return ret;
}
header = header,
data = result
}
}
catch (Exception ex)
{
return Error(ex, "ไม่สามารถส่งออกรายชื่อผู้สอบผ่านได้!!");
}
finally
{
if (System.IO.File.Exists(exportFile))
System.IO.File.Delete(exportFile);
}
};
return Success(_data);
}
#endregion
@ -2258,6 +2047,8 @@ namespace BMA.EHR.Recruit.Service.Controllers
var examInfo = new ExamInfo
{
PositionName = reader["Position_name"].ToString(),
PositionLevel = reader["position_level"].ToString(),
PositionType = reader["position_type"].ToString(),
Gender = reader["Gender"].ToString(),
Age = DateTimeExtension.CalculateAge(Convert.ToDateTime(reader["Dateofbirth"]), 0, 0),
Degree = reader["Degree"].ToString(),
@ -2273,6 +2064,8 @@ namespace BMA.EHR.Recruit.Service.Controllers
.GroupBy(x => new
{
x.PositionName,
x.PositionLevel,
x.PositionType,
x.Gender,
x.Age,
x.Degree
@ -2280,6 +2073,8 @@ namespace BMA.EHR.Recruit.Service.Controllers
.Select(group => new
{
positionName = group.Key.PositionName,
positionLevel = group.Key.PositionLevel,
positionType = group.Key.PositionType,
gender = group.Key.Gender,
age = group.Key.Age.ToString().ToThaiNumber(),
degree = group.Key.Degree,
@ -2291,16 +2086,17 @@ namespace BMA.EHR.Recruit.Service.Controllers
{
template = "recruit-officer-pre",
reportName = "xlsx-report",
data = new {
data = new
{
year = year.ToString().ToThaiNumber(),
date = DateTime.Now.ToThaiShortDateWithPrefix().ToThaiNumber(),
list = groupedResult
list = groupedResult
}
};
return Success(result);
}
catch (Exception ex)
{
@ -2347,6 +2143,8 @@ namespace BMA.EHR.Recruit.Service.Controllers
var examInfo = new ExamInfo
{
PositionName = reader["Position_name"].ToString(),
PositionLevel = reader["position_level"].ToString(),
PositionType = reader["position_type"].ToString(),
Gender = reader["Gender"].ToString(),
Age = DateTimeExtension.CalculateAge(Convert.ToDateTime(reader["Dateofbirth"]), 0, 0),
Degree = reader["Degree"].ToString(),
@ -2362,6 +2160,8 @@ namespace BMA.EHR.Recruit.Service.Controllers
.GroupBy(x => new
{
x.PositionName,
x.PositionLevel,
x.PositionType,
x.Gender,
x.Age,
x.Degree,
@ -2370,6 +2170,8 @@ namespace BMA.EHR.Recruit.Service.Controllers
.Select(group => new
{
positionName = group.Key.PositionName,
positionLevel = group.Key.PositionLevel,
positionType = group.Key.PositionType,
gender = group.Key.Gender,
age = group.Key.Age.ToString().ToThaiNumber(),
degree = group.Key.Degree,
@ -2382,14 +2184,15 @@ namespace BMA.EHR.Recruit.Service.Controllers
{
template = "recruit-officer-pass",
reportName = "xlsx-report",
data = new {
data = new
{
year = year.ToString().ToThaiNumber(),
date = DateTime.Now.ToThaiShortDateWithPrefix().ToThaiNumber(),
list = groupedResult
}
};
return Success(result);
}
catch (Exception ex)
{