ส่งออกข้อมูลผู้มิสิทธื์สอบ
ส่งออกข้อมูลผู้สอบผ่านภาค ก.
This commit is contained in:
Suphonchai Phoonsawat 2023-04-25 13:13:27 +07:00
parent b8109e80ac
commit b1f8c78ced
34 changed files with 5935 additions and 8 deletions

View file

@ -17,6 +17,7 @@ using Sentry;
using Swashbuckle.AspNetCore.Annotations;
using System.Data;
using System.Net;
using System.Net.WebSockets;
using System.Security.Claims;
using System.Text;
@ -396,6 +397,7 @@ namespace BMA.EHR.Recruit.Service.Controllers
PaymentStartDate = req.PaymentStartDate,
PaymentEndDate = req.PaymentEndDate,
Note = req.Note,
AnnouncementDate = req.AnnouncementDate,
});
await _context.SaveChangesAsync();
@ -445,6 +447,7 @@ namespace BMA.EHR.Recruit.Service.Controllers
data.PaymentStartDate = req.PaymentStartDate;
data.ExamDate = req.ExamDate;
data.Note = req.Note;
data.AnnouncementDate = req.AnnouncementDate;
await _context.SaveChangesAsync();
@ -662,6 +665,7 @@ namespace BMA.EHR.Recruit.Service.Controllers
r.CitizenCardIssuer = workSheet?.Cells[row, GetColumnIndex(cols, CandidateFileHeader.PersonalCardIssue)]?.GetValue<string>();
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("");
// address
@ -936,7 +940,7 @@ namespace BMA.EHR.Recruit.Service.Controllers
CreatedUserId = UserId ?? "",
CreatedFullName = FullName ?? "System Administrator",
});
//await _context.RecruitImports.AddAsync(imported);
// import datafile
@ -975,7 +979,7 @@ namespace BMA.EHR.Recruit.Service.Controllers
r.CitizenCardIssuer = workSheet?.Cells[row, GetColumnIndex(cols, CandidateFileHeader.PersonalCardIssue)]?.GetValue<string>();
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("");
// address
r.Addresses.Add(new RecruitAddress()
@ -1169,10 +1173,12 @@ namespace BMA.EHR.Recruit.Service.Controllers
r.FullA = (int)workSheet?.Cells[7, 7]?.GetValue<string>().Replace("(", "").Replace(")", "").Replace("คะแนน", "").Trim().ToInteger();
r.SumA = workSheet?.Cells[row, 7]?.GetValue<string>() == "ขส." ? 0 : (int)workSheet?.Cells[row, 7]?.GetValue<string>().Replace(".00", "").ToInteger();
r.PercentageA = workSheet?.Cells[row, 8]?.GetValue<string>() == "ขส." ? 0.0 : (double)workSheet?.Cells[row, 8]?.GetValue<double>();
r.AStatus = workSheet?.Cells[row, 9]?.GetValue<string>();
r.FullB = (int)workSheet?.Cells[7, 12]?.GetValue<string>().Replace("(", "").Replace(")", "").Replace("คะแนน", "").Trim().ToInteger();
r.SumB = workSheet?.Cells[row, 12]?.GetValue<string>() == "ขส." ? 0 : (int)workSheet?.Cells[row, 12]?.GetValue<string>().Replace(".00", "").ToInteger();
r.PercentageB = workSheet?.Cells[row, 13]?.GetValue<string>() == "ขส." ? 0.0 : (double)workSheet?.Cells[row, 13]?.GetValue<double>();
r.BStatus = workSheet?.Cells[row, 14]?.GetValue<string>();
r.SumAB = workSheet?.Cells[row, 15]?.GetValue<string>() == "ขส." ? 0 : (int)workSheet?.Cells[row, 15]?.GetValue<string>().Replace(".00", "").ToInteger();
r.ABStatus = workSheet?.Cells[row, 17]?.GetValue<string>();
@ -1180,6 +1186,7 @@ namespace BMA.EHR.Recruit.Service.Controllers
r.FullC = (int)workSheet?.Cells[7, 20]?.GetValue<string>().Replace("(", "").Replace(")", "").Replace("คะแนน", "").Trim().ToInteger();
r.SumC = workSheet?.Cells[row, 20]?.GetValue<string>() == "ขส." ? 0 : (int)workSheet?.Cells[row, 20]?.GetValue<string>().Replace(".00", "").ToInteger();
r.PercentageC = workSheet?.Cells[row, 21]?.GetValue<string>() == "ขส." ? 0.0 : (double)workSheet?.Cells[row, 21]?.GetValue<double>();
r.CStatus = workSheet?.Cells[row, 22]?.GetValue<string>();
r.ExamStatus = workSheet?.Cells[row, 24]?.GetValue<string>();
r.Major = workSheet.Name;
@ -1434,6 +1441,226 @@ namespace BMA.EHR.Recruit.Service.Controllers
#endregion
#region " For CMS "
[HttpGet("competitive")]
[AllowAnonymous]
public IActionResult GetPeriodForCMS()
{
try
{
var periods = _context.RecruitImports.AsQueryable()
.Select(r => new
{
id = r.Id,
title = $"{r.Name} ครั้งที่ {r.Order}/{r.Year.ToThaiYear()}",
category = "สำนักงาน ก.ก.",
category_id = 1,
announcement_startDate = r.AnnouncementStartDate == null ? "" : r.AnnouncementStartDate.Value.ToString("yyyy-mm-dd"),
announcement_endDate = r.AnnouncementEndDate == null ? "" : r.AnnouncementEndDate.Value.ToString("yyyy-MM-dd"),
announcementExam = true,
register_startDate = r.RegisterStartDate == null ? "" : r.RegisterStartDate.Value.ToString("yyyy-MM-dd"),
register_endDate = r.RegisterEndDate == null ? "" : r.RegisterEndDate.Value.ToString("yyyy-MM-dd"),
payment_startDate = r.PaymentStartDate == null ? "" : r.PaymentStartDate.Value.ToString("yyyy-MM-dd"),
payment_endDate = r.PaymentEndDate == null ? "" : r.PaymentEndDate.Value.ToString("yyyy-MM-dd"),
exam_date = r.ExamDate == null ? "" : r.ExamDate.Value.ToString("yyyy-MM-dd")
})
.ToList();
return Ok(periods);
}
catch (Exception ex)
{
return StatusCode(500, ex.Message);
}
}
#endregion
#region " Export Excel "
[HttpGet("export/exam/{id:length(36)}")]
public async Task<ActionResult<ResponseObject>> ExportExamAsync(Guid id)
{
var data = await _context.RecruitImports.AsQueryable()
.Include(x => x.Recruits)
.FirstOrDefaultAsync(x => x.Id == id);
if (data == null)
return Error(GlobalMessages.DataNotFound, 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, "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 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 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;
}
}
}
catch (Exception ex)
{
return Error(ex, "ไม่สามารถส่งออกรายชื่อผู้มีสิทธิ์สอบได้!!");
}
finally
{
if (System.IO.File.Exists(exportFile))
System.IO.File.Delete(exportFile);
}
}
[HttpGet("export/pass-exam/{id:length(36)}")]
public async Task<ActionResult<ResponseObject>> ExportPassExamAsync(Guid id)
{
var data = await _context.RecruitImports.AsQueryable()
.Include(x => x.Recruits)
.FirstOrDefaultAsync(x => x.Id == id);
var data_pass = await _context.RecruitImports.AsQueryable()
.Include(x => x.ScoreImport)
.ThenInclude(x => x.Scores)
.FirstOrDefaultAsync(x => x.Id == id);
if (data == null)
return Error(GlobalMessages.DataNotFound, StatusCodes.Status404NotFound);
if(data_pass == null)
return Error(GlobalMessages.DataNotFound, 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, "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
{
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
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)))
{
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 = "";
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;
}
}
}
catch (Exception ex)
{
return Error(ex, "ไม่สามารถส่งออกรายชื่อผู้สอบผ่านได้!!");
}
finally
{
if (System.IO.File.Exists(exportFile))
System.IO.File.Delete(exportFile);
}
}
#endregion
#endregion
}
}