hrms-api-exam/Services/DisableService.cs

156 lines
No EOL
5 KiB
C#

using Microsoft.EntityFrameworkCore;
using BMA.EHR.Recurit.Exam.Service.Data;
using System.Data;
using System.Globalization;
namespace BMA.EHR.Recurit.Exam.Service.Services
{
public class DisableService
{
private readonly ApplicationDbContext _context;
private readonly IConfiguration _configuration;
private readonly IWebHostEnvironment _webHostEnvironment;
public DisableService(ApplicationDbContext context,
IConfiguration configuration,
IWebHostEnvironment webHostEnvironment)
{
_context = context;
_configuration = configuration;
_webHostEnvironment = webHostEnvironment;
}
public int GetExamCount(string citizenId)
{
try
{
var count = _context.Candidates.AsQueryable()
.Where(x => x.CitizenId == citizenId)
.Count();
return count;
}
catch
{
throw;
}
}
public async Task<string> GetExamAttributeAsync(Guid period, Guid exam)
{
try
{
var payment = await _context.DisablePayments.AsQueryable()
.Include(x => x.Disable)
.ThenInclude(x => x.PeriodExam)
.Where(x => x.Disable.Id == exam)
.Where(x => x.Disable.PeriodExam.Id == period)
.FirstOrDefaultAsync();
return payment != null ? "มีคุณสมบัติ" : "ไม่มีคุณสมบัติ";
}
catch
{
throw;
}
}
public bool CheckValidCertificate(DateTime certDate, int nextYear = 5)
{
var valid = true;
if (DateTime.Now.Date > certDate.Date.AddYears(nextYear))
valid = false;
return valid;
}
public DateTime CheckDateTime(string Date, string Formate)
{
// ตอนนี้ทำไว้ให้รองรับแค่ "dd/MM/yyyy", "yyyy-MM-dd"
Date = Date.Trim();
if (string.IsNullOrWhiteSpace(Date))
return DateTime.MinValue;
// จะเข้าเฉพาะกรณีที่ string เป็นตัวเลข เช่น "35635", "44561.5"
if (double.TryParse(Date, out double oaDate))
{
try
{
Date = DateTime.FromOADate(oaDate).ToString(Formate);
}
catch
{
Date = DateTime.MinValue.ToString(Formate);
}
}
string[] parts = Date.Trim().Replace("-", "/").Split("/");
if (parts.Length != 3)
return DateTime.MinValue;
int year;
int month;
int day;
switch (Formate)
{
case "dd/MM/yyyy":
if (int.TryParse(parts[2], out year) && year > 2500)
{
year -= 543;
}
else if (!int.TryParse(parts[2], out year))
{
return DateTime.MinValue;
}
if (!int.TryParse(parts[1], out month))
return DateTime.MinValue;
if (!int.TryParse(parts[0], out day))
return DateTime.MinValue;
break;
case "yyyy-MM-dd":
if (int.TryParse(parts[0], out year) && year > 2500)
{
year -= 543;
}
else if (!int.TryParse(parts[0], out year))
{
return DateTime.MinValue;
}
if (!int.TryParse(parts[1], out month))
return DateTime.MinValue;
if (!int.TryParse(parts[2], out day))
return DateTime.MinValue;
break;
default:
return DateTime.MinValue;
}
if (month < 1 || month > 12)
month = 1;
int maxDay = DateTime.DaysInMonth(year, month);
if (day < 1)
day = 1;
else if (day > maxDay)
day = maxDay;
var normalDate = $"{day}/{(month >= 1 && month <= 9 ? $"0{month}" : month)}/{year}";
if (DateTime.TryParseExact(normalDate, "dd/MM/yyyy", CultureInfo.InvariantCulture, DateTimeStyles.None, out DateTime parsedDate))
{
return parsedDate;
}
return DateTime.MinValue;
}
}
}