hrms-api-backend/BMA.EHR.Placement.Service/Controllers/PlacementController.cs
harid db99630e0d
All checks were successful
Build & Deploy Placement Service / build (push) Successful in 1m59s
fix #2430
2026-04-17 15:18:30 +07:00

3662 lines
212 KiB
C#

using BMA.EHR.Application.Repositories;
using BMA.EHR.Application.Repositories.MessageQueue;
using BMA.EHR.Domain.Common;
using BMA.EHR.Domain.Extensions;
using BMA.EHR.Domain.Models.Placement;
using BMA.EHR.Domain.Shared;
using BMA.EHR.Infrastructure.Persistence;
using BMA.EHR.Placement.Service.Requests;
using Microsoft.AspNetCore.Authorization;
using Microsoft.AspNetCore.Mvc;
using Microsoft.EntityFrameworkCore;
using Swashbuckle.AspNetCore.Annotations;
using System.Security.Claims;
using System.Net.Http.Headers;
using Newtonsoft.Json;
using Newtonsoft.Json.Linq;
using static Microsoft.EntityFrameworkCore.DbLoggerCategory;
using BMA.EHR.Application.Repositories.Reports;
using System.Text.RegularExpressions;
namespace BMA.EHR.Placement.Service.Controllers
{
[Route("api/v{version:apiVersion}/placement")]
[ApiVersion("1.0")]
[ApiController]
[Produces("application/json")]
[Authorize]
[SwaggerTag("ระบบบรรจุ")]
public class PlacementController : BaseController
{
private readonly PlacementRepository _repository;
private readonly NotificationRepository _repositoryNoti;
private readonly ApplicationDBContext _context;
private readonly MinIOService _documentService;
private readonly IHttpContextAccessor _httpContextAccessor;
private readonly IConfiguration _configuration;
private readonly PermissionRepository _permission;
private readonly CandidateReportRepository _service;
private readonly MinIOExamService _minIOExamService;
public PlacementController(PlacementRepository repository,
NotificationRepository repositoryNoti,
ApplicationDBContext context,
MinIOService documentService,
IHttpContextAccessor httpContextAccessor,
IConfiguration configuration,
PermissionRepository permission,
CandidateReportRepository service,
MinIOExamService minIOExamService)
{
_repository = repository;
_repositoryNoti = repositoryNoti;
_context = context;
_documentService = documentService;
_httpContextAccessor = httpContextAccessor;
_configuration = configuration;
_permission = permission;
_service = service;
_minIOExamService = minIOExamService;
}
#region " Properties "
private string? UserId => _httpContextAccessor?.HttpContext?.User?.FindFirst(ClaimTypes.NameIdentifier)?.Value;
private string? FullName => _httpContextAccessor?.HttpContext?.User?.FindFirst("name")?.Value;
private string? token => _httpContextAccessor.HttpContext.Request.Headers["Authorization"];
//private bool isSuperAdmin => _httpContextAccessor?.HttpContext?.User?.IsInRole("SUPER_ADMIN") ?? false;
#endregion
[HttpGet]
public async Task<ActionResult<ResponseObject>> Get()
{
var data = await _repository.GetAllAsync();
return Success(data);
}
[HttpGet("fiscal")]
public async Task<ActionResult<ResponseObject>> GetFiscal()
{
var data = await _repository.GetAllAsync();
if (data != null)
{
var _data = data.GroupBy(x => x.Year).Select(x => new
{
Id = x.FirstOrDefault().Year,
Name = x.FirstOrDefault().Year + 543,
}).OrderByDescending(x => x.Id).ToList();
return Success(_data);
}
return Success(data);
}
[HttpGet("exam/{year}")]
public async Task<ActionResult<ResponseObject>> GetExam(int year)
// public async Task<ActionResult<ResponseObject>> GetExam(int year, int page = 1, int pageSize = 10, string keyword = "")
{
var getPermission = await _permission.GetPermissionAPIAsync("LIST", "SYS_PLACEMENT_PASS");
var jsonData = JsonConvert.DeserializeObject<JObject>(getPermission);
if (jsonData["status"]?.ToString() != "200")
{
return Error(jsonData["message"]?.ToString(), StatusCodes.Status403Forbidden);
}
var data = await _context.Placements.Where(x => year > 0 ? (x.Year == year) : (x.Year > 0))
.OrderByDescending(x => x.CreatedAt)
.Select(x => new
{
Id = x.Id,
ExamRound = x.Name,
ExamOrder = x.Round,
FiscalYear = x.Year + 543,
NumberOfCandidates = x.PlacementProfiles.Count(),
ExamTypeValue = x.PlacementType.Id,
ExamTypeName = x.PlacementType.Name,
AccountStartDate = x.StartDate,
AccountEndDate = x.EndDate,
AccountExpirationDate = x.EndDate,
IsExpired = x.EndDate.Date < DateTime.Now.Date,
CreatedAt = x.CreatedAt,
}).ToListAsync();
// if (keyword != "")
// {
// var data_ = data.Where(x =>
// (x.ExamRound != null && x.ExamRound.Contains(keyword)) ||
// (x.ExamOrder != null && x.ExamOrder.Contains(keyword)) ||
// (x.NumberOfCandidates != null && x.NumberOfCandidates.ToString().Contains(keyword)))
// .OrderByDescending(x => x.CreatedAt)
// .Skip((page - 1) * pageSize)
// .Take(pageSize)
// .ToList();
// data = data_;
// }
return Success(data);
}
[HttpGet("pass/{examId:length(36)}")]
public async Task<ActionResult<ResponseObject>> GetExamByPlacement(Guid examId)
{
var getWorkflow = await _permission.GetPermissionAPIWorkflowAsync(examId.ToString(), "SYS_PLACEMENT_PASS");
var role = string.Empty;
if (getWorkflow == false)
{
var getPermission = await _permission.GetPermissionAPIAsync("GET", "SYS_PLACEMENT_PASS");
var jsonData = JsonConvert.DeserializeObject<JObject>(getPermission);
if (jsonData["status"]?.ToString() != "200")
{
return Error(jsonData["message"]?.ToString(), StatusCodes.Status403Forbidden);
}
role = jsonData["result"]?.ToString();
}
var rootId = "";
var child1Id = "";
var child2Id = "";
var child3Id = "";
var child4Id = "";
var rootDnaId = "";
var apiUrl = $"{_configuration["API"]}/org/profile/keycloak/position-act";
using (var client = new HttpClient())
{
client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", token.Replace("Bearer ", ""));
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();
if (_res.IsSuccessStatusCode)
{
var org = JsonConvert.DeserializeObject<OrgRequestAct>(_result);
if (org.result.isOfficer == false && role?.Trim().ToUpper() != "OWNER")
{
rootId = org.result.rootId == null ? "" : org.result.rootId;
// child1Id = org.result.child1Id == null ? "" : org.result.child1Id;
// child2Id = org.result.child2Id == null ? "" : org.result.child2Id;
// child3Id = org.result.child3Id == null ? "" : org.result.child3Id;
// child4Id = org.result.child4Id == null ? "" : org.result.child4Id;
rootDnaId = org.result.rootDnaId == null ? "" : org.result.rootDnaId;
var data1 = await _context.PlacementProfiles
.Where(x => x.Placement.Id == examId)
.Where(x => x.Draft == true)
.Where(x => x.PlacementStatus != "UN-CONTAIN")
.Where(x => rootDnaId == "" ? true : (child1Id == "" ? x.rootDnaId == rootDnaId : (child2Id == "" ? x.child1Id == child1Id : (child3Id == "" ? x.child2Id == child2Id : (child4Id == "" ? x.child3Id == child3Id : x.child4Id == child4Id)))))
.Select(x => new
{
Id = x.Id,
PersonalId = x.Id,
x.profileId,
Avatar = x.ProfileImg == null ? Guid.Parse("00000000-0000-0000-0000-000000000000") : x.ProfileImg.Id,
FullName = $"{x.Prefix}{x.Firstname} {x.Lastname}",
Prefix = x.Prefix,
Firstname = x.Firstname,
Lastname = x.Lastname,
IdCard = x.CitizenId,
CitizenId = x.CitizenId,
ExamNumber = x.ExamNumber,
posmasterId = x.posmasterId,
rootIdOld = x.rootIdOld,
root = x.root,
rootId = x.rootId,
rootShortName = x.rootShortName,
child1 = x.child1,
child1Id = x.child1Id,
child1ShortName = x.child1ShortName,
child2 = x.child2,
child2Id = x.child2Id,
child2ShortName = x.child2ShortName,
child3 = x.child3,
child3Id = x.child3Id,
child3ShortName = x.child3ShortName,
child4 = x.child4,
child4Id = x.child4Id,
child4ShortName = x.child4ShortName,
orgRevisionId = x.orgRevisionId,
positionId = x.positionId,
posMasterNo = x.posMasterNo,
positionName = x.positionName,
positionField = x.positionField,
posTypeId = x.posTypeId,
posTypeName = x.posTypeName,
posLevelId = x.posLevelId,
posLevelName = x.posLevelName,
ReportingDate = x.ReportingDate,
StatusId = x.PlacementStatus,
Draft = x.Draft,
typeCommand = x.typeCommand,
IsOfficer = x.IsOfficer,
IsRelief = x.IsRelief,
posLevelCandidate = x.PositionLevel,
posTypeCandidate = x.PositionType,
positionCandidate = x.PositionCandidate,
x.commandId,
x.refCommandCode,
x.refCommandDate,
x.refCommandName,
x.refCommandNo,
x.templateDoc,
}).OrderBy(x => x.ExamNumber).ToListAsync();
var result1 = new List<dynamic>();
foreach (var p in data1)
{
var _data1 = new
{
p.Id,
p.PersonalId,
Avatar = p.Avatar == Guid.Parse("00000000-0000-0000-0000-000000000000") ? null : await _documentService.ImagesPath(p.Avatar),
p.FullName,
p.Prefix,
p.Firstname,
p.Lastname,
p.IdCard,
p.CitizenId,
p.profileId,
p.ExamNumber,
p.posmasterId,
p.rootIdOld,
p.root,
p.rootId,
p.rootShortName,
p.child1,
p.child1Id,
p.child1ShortName,
p.child2,
p.child2Id,
p.child2ShortName,
p.child3,
p.child3Id,
p.child3ShortName,
p.child4,
p.child4Id,
p.child4ShortName,
node = p.root == null ? (int?)null : (p.child1 == null ? 0 : (p.child2 == null ? 1 : (p.child3 == null ? 2 : (p.child4 == null ? 3 : 4)))),
nodeName = p.root == null ? null : (p.child1 == null ? p.root : (p.child2 == null ? p.child1 : (p.child3 == null ? p.child2 : (p.child4 == null ? p.child3 : p.child4)))),
nodeId = p.rootId == null ? null : (p.child1Id == null ? p.rootId : (p.child2Id == null ? p.child1Id : (p.child3Id == null ? p.child2Id : (p.child4Id == null ? p.child3Id : p.child4Id)))),
nodeShortName = p.rootShortName == null ? null : (p.child1ShortName == null ? p.rootShortName : (p.child2ShortName == null ? p.child1ShortName : (p.child3ShortName == null ? p.child2ShortName : (p.child4ShortName == null ? p.child3ShortName : p.child4ShortName)))),
p.orgRevisionId,
p.positionId,
p.posMasterNo,
p.positionName,
p.positionField,
p.posTypeId,
p.posTypeName,
p.posLevelId,
p.posLevelName,
p.ReportingDate,
BmaOfficer = p.IsOfficer == true ? "OFFICER" : null,
p.StatusId,
p.Draft,
p.typeCommand,
p.IsRelief,
p.posLevelCandidate,
p.posTypeCandidate,
p.positionCandidate,
p.commandId,
p.refCommandCode,
p.refCommandDate,
p.refCommandName,
p.refCommandNo,
p.templateDoc,
};
result1.Add(_data1);
}
return Success(result1);
}
if (org.result.isOfficer == true || role?.Trim().ToUpper() == "OWNER")
{
var data = await _context.PlacementProfiles.Where(x => x.Placement.Id == examId).Select(x => new
{
Id = x.Id,
PersonalId = x.Id,
x.profileId,
Avatar = x.ProfileImg == null ? Guid.Parse("00000000-0000-0000-0000-000000000000") : x.ProfileImg.Id,
FullName = $"{x.Prefix}{x.Firstname} {x.Lastname}",
Prefix = x.Prefix,
Firstname = x.Firstname,
Lastname = x.Lastname,
IdCard = x.CitizenId,
CitizenId = x.CitizenId,
ExamNumber = x.ExamNumber,
posmasterId = x.posmasterId,
rootIdOld = x.rootIdOld,
root = x.root,
rootId = x.rootId,
rootShortName = x.rootShortName,
child1 = x.child1,
child1Id = x.child1Id,
child1ShortName = x.child1ShortName,
child2 = x.child2,
child2Id = x.child2Id,
child2ShortName = x.child2ShortName,
child3 = x.child3,
child3Id = x.child3Id,
child3ShortName = x.child3ShortName,
child4 = x.child4,
child4Id = x.child4Id,
child4ShortName = x.child4ShortName,
orgRevisionId = x.orgRevisionId,
positionId = x.positionId,
posMasterNo = x.posMasterNo,
positionName = x.positionName,
positionField = x.positionField,
posTypeId = x.posTypeId,
posTypeName = x.posTypeName,
posLevelId = x.posLevelId,
posLevelName = x.posLevelName,
ReportingDate = x.ReportingDate,
StatusId = x.PlacementStatus,
Draft = x.Draft,
typeCommand = x.typeCommand,
IsOfficer = x.IsOfficer,
IsRelief = x.IsRelief,
posLevelCandidate = x.PositionLevel,
posTypeCandidate = x.PositionType,
positionCandidate = x.PositionCandidate,
x.commandId,
x.refCommandCode,
x.refCommandDate,
x.refCommandName,
x.refCommandNo,
x.templateDoc,
}).OrderBy(x => x.ExamNumber).ToListAsync();
var result = new List<dynamic>();
foreach (var p in data)
{
var _data = new
{
p.Id,
p.PersonalId,
Avatar = p.Avatar == Guid.Parse("00000000-0000-0000-0000-000000000000") ? null : await _documentService.ImagesPath(p.Avatar),
p.FullName,
p.Prefix,
p.Firstname,
p.Lastname,
p.IdCard,
p.CitizenId,
p.profileId,
p.ExamNumber,
p.posmasterId,
p.rootIdOld,
p.root,
p.rootId,
p.rootShortName,
p.child1,
p.child1Id,
p.child1ShortName,
p.child2,
p.child2Id,
p.child2ShortName,
p.child3,
p.child3Id,
p.child3ShortName,
p.child4,
p.child4Id,
p.child4ShortName,
node = p.root == null ? (int?)null : (p.child1 == null ? 0 : (p.child2 == null ? 1 : (p.child3 == null ? 2 : (p.child4 == null ? 3 : 4)))),
nodeName = p.root == null ? null : (p.child1 == null ? p.root : (p.child2 == null ? p.child1 : (p.child3 == null ? p.child2 : (p.child4 == null ? p.child3 : p.child4)))),
nodeId = p.rootId == null ? null : (p.child1Id == null ? p.rootId : (p.child2Id == null ? p.child1Id : (p.child3Id == null ? p.child2Id : (p.child4Id == null ? p.child3Id : p.child4Id)))),
nodeShortName = p.rootShortName == null ? null : (p.child1ShortName == null ? p.rootShortName : (p.child2ShortName == null ? p.child1ShortName : (p.child3ShortName == null ? p.child2ShortName : (p.child4ShortName == null ? p.child3ShortName : p.child4ShortName)))),
p.orgRevisionId,
p.positionId,
p.posMasterNo,
p.positionName,
p.positionField,
p.posTypeId,
p.posTypeName,
p.posLevelId,
p.posLevelName,
p.ReportingDate,
BmaOfficer = p.IsOfficer == true ? "OFFICER" : null,
p.StatusId,
p.Draft,
p.typeCommand,
p.IsRelief,
p.posLevelCandidate,
p.posTypeCandidate,
p.positionCandidate,
p.commandId,
p.refCommandCode,
p.refCommandDate,
p.refCommandName,
p.refCommandNo,
p.templateDoc,
};
result.Add(_data);
}
return Success(result);
}
}
}
return Success(new List<dynamic>());
}
[HttpGet("exam-probation/{citizenId:length(13)}")]
public async Task<ActionResult<ResponseObject>> GetDataExamByPlacement(string citizenId)
{
var dateAppoint = string.Empty;
var apiUrl = $"{_configuration["API"]}/org/profile/citizenid/position/{citizenId}";
using (var client = new HttpClient())
{
client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", token.Replace("Bearer ", ""));
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();
if (_res.IsSuccessStatusCode)
{
var json = JObject.Parse(_result);
var dateAppointToken = json["result"]?["dateAppoint"];
if (dateAppointToken != null)
{
dateAppoint = dateAppointToken.ToString();
}
}
}
var placementProfile = await _context.PlacementProfiles
.Include(x => x.Placement)
.Select(x => new
{
fullName = $"{x.Prefix}{x.Firstname} {x.Lastname}",
citizenId = x.CitizenId,
examName = x.Placement.Name,
})
.Where(x => x.citizenId == citizenId.ToString())
.FirstOrDefaultAsync();
var data = new
{
fullName = placementProfile != null ? placementProfile.fullName : "",
citizenId = placementProfile != null ? placementProfile.citizenId : "",
examName = placementProfile != null ? placementProfile.examName : "",
dateAppoint = dateAppoint
};
return Success(data);
}
[HttpGet("personal/{personalId:length(36)}")]
public async Task<ActionResult<ResponseObject>> GetProfileByUser(Guid personalId)
{
var person = await _context.PlacementProfiles.FindAsync(personalId);
if (person == null)
return Error(GlobalMessages.DataNotFound, 404);
if (person.IsProperty == null || Newtonsoft.Json.JsonConvert.DeserializeObject<List<PersonPropertyRequest>>(person.IsProperty).Count() == 0)
{
var isProperty = await _context.PlacementIsProperties.Select(x => new PersonPropertyRequest
{
Name = x.Name,
Value = false,
}).ToListAsync();
person.IsProperty = Newtonsoft.Json.JsonConvert.SerializeObject(isProperty);
person.LastUpdateFullName = FullName ?? "System Administrator";
person.LastUpdateUserId = UserId ?? "";
person.LastUpdatedAt = DateTime.Now;
await _context.SaveChangesAsync();
}
var data = await _context.PlacementProfiles.Select(x => new
{
PersonalId = x.Id,
IdCard = x.CitizenId,
Prefix = x.Prefix,
FullName = $"{x.Prefix}{x.Firstname} {x.Lastname}",
Firstname = x.Firstname,
Lastname = x.Lastname,
Nationality = x.Nationality,
Draft = x.Draft,
Race = x.Race,
DateOfBirth = x.DateOfBirth,
Age = x.DateOfBirth == null ? null : x.DateOfBirth.Value.CalculateAgeStrV2(0, 0),
Telephone = x.Telephone,
PositionCandidate = x.PositionCandidate,
Gender = x.Gender,
Relationship = x.Relationship,
BloodGroup = x.BloodGroup,
Religion = x.Religion,
// Address = $"{x.RegistAddress}" +
// (x.RegistSubDistrict == null ? null : " แขวง") + (x.RegistSubDistrict == null ? null : x.RegistSubDistrict.Name) +
// (x.RegistDistrict == null ? null : " เขต") + (x.RegistDistrict == null ? null : x.RegistDistrict.Name) +
// (x.RegistProvince == null ? null : " จังหวัด") + (x.RegistProvince == null ? null : x.RegistProvince.Name) +
// (x.RegistSubDistrict == null ? null : " ") + (x.RegistSubDistrict == null ? null : x.RegistSubDistrict.ZipCode),
Education = x.PlacementEducations.Select(p => new
{
Id = p.Id,
EducationLevel = p.EducationLevelName,
EducationLevelId = p.EducationLevelId,
Institute = p.Institute,
Degree = p.Degree,
Field = p.Field,
Gpa = p.Gpa,
Country = p.Country,
Duration = p.Duration,
Other = p.Other,
FundName = p.FundName,
DurationYear = p.DurationYear,
FinishDate = p.FinishDate,
IsDate = p.IsDate,
StartDate = p.StartDate,
EndDate = p.EndDate,
PositionPath = p.PositionPath == null ? null : p.PositionPath.Name,
PositionPathId = p.PositionPath == null ? Guid.Parse("00000000-0000-0000-0000-000000000000") : p.PositionPath.Id,
IsEducation = p.IsEducation,
}),
RegistAddress = x.RegistAddress,
RegistSubDistrictId = x.RegistSubDistrictId,
RegistZipCode = x.RegistZipCode,
RegistDistrictId = x.RegistDistrictId,
RegistProvinceId = x.RegistProvinceId,
CurrentAddress = x.CurrentAddress,
CurrentSubDistrictId = x.CurrentSubDistrictId,
CurrentZipCode = x.CurrentZipCode,
CurrentDistrictId = x.CurrentDistrictId,
CurrentProvinceId = x.CurrentProvinceId,
RegistSame = x.RegistSame,
MarryPrefix = x.MarryPrefix,
Couple = x.Marry,
MarryFirstName = x.MarryFirstName,
MarryLastName = x.MarryLastName,
MarryOccupation = x.MarryOccupation,
FatherPrefix = x.FatherPrefix,
FatherFirstName = x.FatherFirstName,
FatherLastName = x.FatherLastName,
FatherOccupation = x.FatherOccupation,
MotherPrefix = x.MotherPrefix,
MotherFirstName = x.MotherFirstName,
MotherLastName = x.MotherLastName,
MotherOccupation = x.MotherOccupation,
Certificates = x.PlacementCertificates.Select(p => new
{
Id = p.Id,
CertificateNo = p.CertificateNo,
Issuer = p.Issuer,
IssueDate = p.IssueDate,
ExpireDate = p.ExpireDate,
CertificateType = p.CertificateType,
}),
PointA = x.PointA,
PointB = x.PointB,
PointC = x.PointC,
PointTotalA = x.PointTotalA,
PointTotalB = x.PointTotalB,
PointTotalC = x.PointTotalC,
Point = x.PointA + x.PointB + x.PointC,
PointTotal = x.PointTotalA + x.PointTotalB + x.PointTotalC,
ExamNumber = x.ExamNumber,
ExamRound = x.ExamRound,
Pass = x.Pass,
IsRelief = x.IsRelief,
IsProperty = x.IsProperty == null ? null : Newtonsoft.Json.JsonConvert.DeserializeObject<List<PersonPropertyRequest>>(x.IsProperty),
BmaOfficer = x.IsOfficer == true ? "OFFICER" : null,
PlacementProfileDocs = x.PlacementProfileDocs.Where(d => d.Document != null).Select(d => new { d.Document.Id, d.Document.FileName }),
}).FirstOrDefaultAsync(x => x.PersonalId == personalId);
if (data == null)
return Error(GlobalMessages.DataNotFound, 404);
var placementProfileDocs = new List<dynamic>();
foreach (var doc in data.PlacementProfileDocs)
{
var _doc = new
{
doc.FileName,
PathName = await _documentService.ImagesPath(doc.Id),
docId = doc.Id,
};
placementProfileDocs.Add(_doc);
}
var _data = new
{
data.PersonalId,
data.IdCard,
data.Prefix,
data.FullName,
data.Firstname,
data.Lastname,
data.Draft,
data.Nationality,
data.Race,
data.DateOfBirth,
data.Age,
data.Telephone,
data.PositionCandidate,
data.Gender,
data.Relationship,
data.BloodGroup,
data.Religion,
// data.Address,
data.Education,
data.RegistAddress,
data.RegistSubDistrictId,
data.RegistZipCode,
data.RegistDistrictId,
data.RegistProvinceId,
data.CurrentAddress,
data.CurrentSubDistrictId,
data.CurrentZipCode,
data.CurrentDistrictId,
data.CurrentProvinceId,
data.RegistSame,
data.MarryPrefix,
data.Couple,
data.MarryFirstName,
data.MarryLastName,
data.MarryOccupation,
data.FatherPrefix,
data.FatherFirstName,
data.FatherLastName,
data.FatherOccupation,
data.MotherPrefix,
data.MotherFirstName,
data.MotherLastName,
data.MotherOccupation,
data.Certificates,
data.PointA,
data.PointB,
data.PointC,
data.PointTotalA,
data.PointTotalB,
data.PointTotalC,
data.Point,
data.PointTotal,
data.ExamNumber,
data.ExamRound,
data.Pass,
data.IsProperty,
data.IsRelief,
BmaOfficer = data.BmaOfficer,
Docs = placementProfileDocs,
};
return Success(_data);
}
[HttpPut("property/{personalId:length(36)}")]
public async Task<ActionResult<ResponseObject>> UpdatePropertyByUser([FromBody] List<PersonPropertyRequest> req, Guid personalId)
{
var person = await _context.PlacementProfiles.FindAsync(personalId);
if (person == null)
return Error(GlobalMessages.DataNotFound, 404);
person.IsProperty = Newtonsoft.Json.JsonConvert.SerializeObject(req);
person.LastUpdateFullName = FullName ?? "System Administrator";
person.LastUpdateUserId = UserId ?? "";
person.LastUpdatedAt = DateTime.Now;
await _context.SaveChangesAsync();
return Success();
}
[HttpGet("pass/stat/{examId:length(36)}")]
public async Task<ActionResult<ResponseObject>> GetDashboardByPlacement(Guid examId)
{
var role = string.Empty;
var getPermission = await _permission.GetPermissionAPIAsync("GET", "SYS_PLACEMENT_PASS");
var jsonData = JsonConvert.DeserializeObject<JObject>(getPermission);
if (jsonData["status"]?.ToString() == "200")
{
role = jsonData["result"]?.ToString();
}
var rootId = "";
var child1Id = "";
var child2Id = "";
var child3Id = "";
var child4Id = "";
var rootDnaId = "";
var apiUrl = $"{_configuration["API"]}/org/profile/keycloak/position-act";
using (var client = new HttpClient())
{
client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", token.Replace("Bearer ", ""));
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();
if (_res.IsSuccessStatusCode)
{
var org = JsonConvert.DeserializeObject<OrgRequestAct>(_result);
if (org.result.isOfficer == false && role?.Trim().ToUpper() != "OWNER")
{
rootId = org.result.rootId == null ? "" : org.result.rootId;
// child1Id = org.result.child1Id == null ? "" : org.result.child1Id;
// child2Id = org.result.child2Id == null ? "" : org.result.child2Id;
// child3Id = org.result.child3Id == null ? "" : org.result.child3Id;
// child4Id = org.result.child4Id == null ? "" : org.result.child4Id;
rootDnaId = org.result.rootDnaId == null ? "" : org.result.rootDnaId;
var placement = await _context.Placements
.Where(x => x.Id == examId)
.Select(x => new
{
Total = x.PlacementProfiles.Where(x => x.Draft == true).Where(x => rootDnaId == "" ? true : (child1Id == "" ? x.rootDnaId == rootDnaId : (child2Id == "" ? x.child1Id == child1Id : (child3Id == "" ? x.child2Id == child2Id : (child4Id == "" ? x.child3Id == child3Id : x.child4Id == child4Id))))).Count(),
UnContain = x.PlacementProfiles.Where(x => x.Draft == true).Where(x => rootDnaId == "" ? true : (child1Id == "" ? x.rootDnaId == rootDnaId : (child2Id == "" ? x.child1Id == child1Id : (child3Id == "" ? x.child2Id == child2Id : (child4Id == "" ? x.child3Id == child3Id : x.child4Id == child4Id))))).Where(p => p.PlacementStatus.Trim().ToUpper() == "UN-CONTAIN").Count(),
PrepareContain = x.PlacementProfiles.Where(x => x.Draft == true).Where(x => rootDnaId == "" ? true : (child1Id == "" ? x.rootDnaId == rootDnaId : (child2Id == "" ? x.child1Id == child1Id : (child3Id == "" ? x.child2Id == child2Id : (child4Id == "" ? x.child3Id == child3Id : x.child4Id == child4Id))))).Where(p => p.PlacementStatus.Trim().ToUpper() == "PREPARE-CONTAIN").Count(),
Report = x.PlacementProfiles.Where(x => x.Draft == true).Where(x => rootDnaId == "" ? true : (child1Id == "" ? x.rootDnaId == rootDnaId : (child2Id == "" ? x.child1Id == child1Id : (child3Id == "" ? x.child2Id == child2Id : (child4Id == "" ? x.child3Id == child3Id : x.child4Id == child4Id))))).Where(p => p.PlacementStatus.Trim().ToUpper() == "REPORT").Count(),
Done = x.PlacementProfiles.Where(x => x.Draft == true).Where(x => rootDnaId == "" ? true : (child1Id == "" ? x.rootDnaId == rootDnaId : (child2Id == "" ? x.child1Id == child1Id : (child3Id == "" ? x.child2Id == child2Id : (child4Id == "" ? x.child3Id == child3Id : x.child4Id == child4Id))))).Where(p => p.PlacementStatus.Trim().ToUpper() == "DONE").Count(),
Disclaim = x.PlacementProfiles.Where(x => x.Draft == true).Where(x => rootDnaId == "" ? true : (child1Id == "" ? x.rootDnaId == rootDnaId : (child2Id == "" ? x.child1Id == child1Id : (child3Id == "" ? x.child2Id == child2Id : (child4Id == "" ? x.child3Id == child3Id : x.child4Id == child4Id))))).Where(p => p.PlacementStatus.Trim().ToUpper() == "DISCLAIM").Count(),
}).FirstOrDefaultAsync();
if (placement == null)
return Error(GlobalMessages.DataNotFound, 404);
return Success(placement);
}
if (org.result.isOfficer == true || role?.Trim().ToUpper() == "OWNER")
{
var placement = await _context.Placements
.Where(x => x.Id == examId)
.Select(x => new
{
Total = x.PlacementProfiles.Count(),
UnContain = x.PlacementProfiles.Where(p => p.PlacementStatus.Trim().ToUpper() == "UN-CONTAIN").Count(),
PrepareContain = x.PlacementProfiles.Where(p => p.PlacementStatus.Trim().ToUpper() == "PREPARE-CONTAIN").Count(),
Report = x.PlacementProfiles.Where(p => p.PlacementStatus.Trim().ToUpper() == "REPORT").Count(),
Done = x.PlacementProfiles.Where(p => p.PlacementStatus.Trim().ToUpper() == "DONE").Count(),
Disclaim = x.PlacementProfiles.Where(p => p.PlacementStatus.Trim().ToUpper() == "DISCLAIM").Count(),
}).FirstOrDefaultAsync();
if (placement == null)
return Error(GlobalMessages.DataNotFound, 404);
return Success(placement);
}
}
}
return Success(new List<dynamic>());
}
[HttpPost("pass/deferment"), DisableRequestSizeLimit]
public async Task<ActionResult<ResponseObject>> UpdatePersonDeferment([FromForm] PersonDefermentRequest req)
{
var getPermission = await _permission.GetPermissionAPIAsync("CREATE", "SYS_PLACEMENT_PASS");
var jsonData = JsonConvert.DeserializeObject<JObject>(getPermission);
if (jsonData["status"]?.ToString() != "200")
{
return Error(jsonData["message"]?.ToString(), StatusCodes.Status403Forbidden);
}
var person = await _context.PlacementProfiles.FindAsync(Request.Form.ContainsKey("personalId") ? Guid.Parse(Request.Form["personalId"]) : Guid.Parse("00000000-0000-0000-0000-000000000000"));
if (person == null)
return Error(GlobalMessages.DataNotFound, 404);
person.IsRelief = true;
person.ReliefReason = Request.Form.ContainsKey("note") ? Request.Form["note"] : "";
person.PlacementStatus = "PREPARE-CONTAIN";
if (Request.Form.Files != null && Request.Form.Files.Count != 0)
{
var file = Request.Form.Files[0];
var fileExtension = Path.GetExtension(file.FileName);
var doc = await _documentService.UploadFileAsync(file, file.FileName);
person.ReliefDoc = doc;
}
person.LastUpdateFullName = FullName ?? "System Administrator";
person.LastUpdateUserId = UserId ?? "";
person.LastUpdatedAt = DateTime.Now;
await _context.SaveChangesAsync();
return Success();
}
[HttpPost("pass/disclaim")]
public async Task<ActionResult<ResponseObject>> UpdatePersonDisclaim([FromBody] PersonDisclaimRequest req)
{
var getPermission = await _permission.GetPermissionAPIAsync("CREATE", "SYS_PLACEMENT_PASS");
var jsonData = JsonConvert.DeserializeObject<JObject>(getPermission);
if (jsonData["status"]?.ToString() != "200")
{
return Error(jsonData["message"]?.ToString(), StatusCodes.Status403Forbidden);
}
var person = await _context.PlacementProfiles
.FirstOrDefaultAsync(x => x.Id == req.PersonalId);
if (person == null)
return Error(GlobalMessages.DataNotFound, 404);
bool? _nullBool = null;
//person.PositionLevel = null;
//person.PositionType = null;
//person.Amount = null;
//person.MouthSalaryAmount = null;
//person.PositionSalaryAmount = null;
//person.RecruitDate = null;
//person.ReportingDate = null;
person.RejectReason = req.Note;
person.PlacementStatus = "DISCLAIM";
person.LastUpdateFullName = FullName ?? "System Administrator";
person.LastUpdateUserId = UserId ?? "";
person.LastUpdatedAt = DateTime.Now;
//person.root = null;
//person.rootId = null;
//person.rootDnaId = null;
//person.rootShortName = null;
//person.child1 = null;
//person.child1Id = null;
//person.child1DnaId = null;
//person.child1ShortName = null;
//person.child2 = null;
//person.child2Id = null;
//person.child2Id = null;
//person.child2ShortName = null;
//person.child3 = null;
//person.child3Id = null;
//person.child3DnaId = null;
//person.child3ShortName = null;
//person.child4 = null;
//person.child4Id = null;
//person.child4DnaId = null;
//person.child4ShortName = null;
//person.orgRevisionId = null;
//person.posMasterNo = null;
//person.positionName = null;
//person.positionField = null;
//person.posTypeId = null;
//person.posTypeName = null;
//person.posLevelId = null;
//person.posLevelName = null;
//person.node = null;
//person.nodeId = null;
//person.posmasterId = null;
//person.positionId = null;
//person.Draft = _nullBool;
//person.typeCommand = null;
await _context.SaveChangesAsync();
return Success();
}
/// <summary>
/// API อัพเดทสถานะเป็นบรรจุ
/// </summary>
/// <returns></returns>
/// <response code="200"></response>
/// <response code="400">ค่าตัวแปรที่ส่งมาไม่ถูกต้อง</response>
/// <response code="401">ไม่ได้ Login เข้าระบบ</response>
/// <response code="500">เมื่อเกิดข้อผิดพลาดในการทำงาน</response>
[HttpPost("pass/update-status")]
[ProducesResponseType(StatusCodes.Status200OK)]
[ProducesResponseType(StatusCodes.Status400BadRequest)]
[ProducesResponseType(StatusCodes.Status401Unauthorized)]
[ProducesResponseType(StatusCodes.Status500InternalServerError)]
public async Task<ActionResult<ResponseObject>> PersonUpdateStatus([FromBody] PersonUpdateStatusRequest req)
{
var getPermission = await _permission.GetPermissionAPIAsync("UPDATE", "SYS_PLACEMENT_PASS");
var jsonData = JsonConvert.DeserializeObject<JObject>(getPermission);
if (jsonData["status"]?.ToString() != "200")
{
return Error(jsonData["message"]?.ToString(), StatusCodes.Status403Forbidden);
}
string role = jsonData["result"]?.ToString();
if (role != "OWNER")
{
return Error(jsonData["message"]?.ToString(), StatusCodes.Status403Forbidden);
}
var person = await _context.PlacementProfiles
.FirstOrDefaultAsync(x => x.Id == req.PersonalId);
if (person == null)
return Error(GlobalMessages.DataNotFound, 404);
person.PlacementStatus = "DONE";
person.LastUpdateFullName = FullName ?? "System Administrator";
person.LastUpdateUserId = UserId ?? "";
person.LastUpdatedAt = DateTime.Now;
await _context.SaveChangesAsync();
return Success();
}
/// <summary>
/// API สำหรับยกเลิกการส่งตัว
/// </summary>
/// <returns></returns>
/// <response code="200"></response>
/// <response code="400">ค่าตัวแปรที่ส่งมาไม่ถูกต้อง</response>
/// <response code="401">ไม่ได้ Login เข้าระบบ</response>
/// <response code="500">เมื่อเกิดข้อผิดพลาดในการทำงาน</response>
[HttpPost("update/draft-status")]
[ProducesResponseType(StatusCodes.Status200OK)]
[ProducesResponseType(StatusCodes.Status400BadRequest)]
[ProducesResponseType(StatusCodes.Status401Unauthorized)]
[ProducesResponseType(StatusCodes.Status500InternalServerError)]
public async Task<ActionResult<ResponseObject>> PersonUpdateDraftStatus([FromBody] PersonUpdateStatusRequest req)
{
var getPermission = await _permission.GetPermissionAPIAsync("UPDATE", "SYS_PLACEMENT_PASS");
var jsonData = JsonConvert.DeserializeObject<JObject>(getPermission);
if (jsonData["status"]?.ToString() != "200")
return Error(jsonData["message"]?.ToString(), StatusCodes.Status403Forbidden);
string role = jsonData["result"]?.ToString();
if (role != "OWNER")
return Error(jsonData["message"]?.ToString(), StatusCodes.Status403Forbidden);
var person = await _context.PlacementProfiles
.FirstOrDefaultAsync(x => x.Id == req.PersonalId);
if (person == null)
return Error(GlobalMessages.DataNotFound, 404);
if (person.PlacementStatus == "REPORT")
return Error("ไม่สามารถยกเลิกการส่งตัวได้ เนื่องจากส่งไปออกคำสั่งแล้ว");
if (person.PlacementStatus == "DONE")
return Error("ไม่สามารถยกเลิกการส่งตัวได้ เนื่องจากบรรจุไปแล้ว");
person.Draft = false;
person.LastUpdateFullName = FullName ?? "System Administrator";
person.LastUpdateUserId = UserId ?? "";
person.LastUpdatedAt = DateTime.Now;
await _context.SaveChangesAsync();
return Success();
}
[HttpGet("pass/deferment/{personalId:length(36)}")]
public async Task<ActionResult<ResponseObject>> GetPersonDeferment(Guid personalId)
{
var getWorkflow = await _permission.GetPermissionAPIWorkflowAsync(personalId.ToString(), "SYS_PLACEMENT_PASS");
if (getWorkflow == false)
{
var getPermission = await _permission.GetPermissionAPIAsync("GET", "SYS_PLACEMENT_PASS");
var jsonData = JsonConvert.DeserializeObject<JObject>(getPermission);
if (jsonData["status"]?.ToString() != "200")
{
return Error(jsonData["message"]?.ToString(), StatusCodes.Status403Forbidden);
}
}
var person = await _context.PlacementProfiles.Include(x => x.ReliefDoc).FirstOrDefaultAsync(x => x.Id == personalId);
if (person == null)
return Error(GlobalMessages.DataNotFound, 404);
var data = new
{
ReliefReason = person.ReliefReason,
ReliefDoc = person.ReliefDoc == null ? null : await _documentService.ImagesPath(person.ReliefDoc.Id),
};
return Success(data);
}
[HttpGet("pass/disclaim/{personalId:length(36)}")]
public async Task<ActionResult<ResponseObject>> GetPersonDisclaim(Guid personalId)
{
var getWorkflow = await _permission.GetPermissionAPIWorkflowAsync(personalId.ToString(), "SYS_PLACEMENT_PASS");
if (getWorkflow == false)
{
var getPermission = await _permission.GetPermissionAPIAsync("GET", "SYS_PLACEMENT_PASS");
var jsonData = JsonConvert.DeserializeObject<JObject>(getPermission);
if (jsonData["status"]?.ToString() != "200")
{
return Error(jsonData["message"]?.ToString(), StatusCodes.Status403Forbidden);
}
}
var person = await _context.PlacementProfiles.FindAsync(personalId);
if (person == null)
return Error(GlobalMessages.DataNotFound, 404);
var data = new
{
RejectReason = person.RejectReason,
};
return Success(data);
}
[HttpPost("pass")]
public async Task<ActionResult<ResponseObject>> UpdatePositionByPerson([FromBody] PersonSelectPositionRequest req)
{
var person = await _context.PlacementProfiles.FindAsync(req.personalId);
if (person == null)
return Error(GlobalMessages.DataNotFound, 404);
if (person.Draft == true)
return Error("ไม่สามารถแก้ไขข้อมูลนี้ได้เนื่องจากเผยแพร่ไปแล้ว");
var apiUrl = $"{_configuration["API"]}/org/find/all";
using (var client = new HttpClient())
{
client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", token.Replace("Bearer ", ""));
client.DefaultRequestHeaders.Add("api-key", _configuration["API_KEY"]);
var _req = new HttpRequestMessage(HttpMethod.Post, apiUrl);
var _res = await client.PostAsJsonAsync(apiUrl, new
{
node = req.node,
nodeId = req.nodeId,
});
var _result = await _res.Content.ReadAsStringAsync();
var org = JsonConvert.DeserializeObject<OrgRequest>(_result);
if (org == null || org.result == null)
return Error("ไม่พบหน่วยงานนี้ในระบบ", 404);
person.root = org.result.root;
person.rootId = org.result.rootId;
person.rootDnaId = org.result.rootDnaId;
person.rootShortName = org.result.rootShortName;
person.child1 = req.node <= 0 ? null : org.result.child1;
person.child1Id = req.node <= 0 ? null : org.result.child1Id;
person.child1DnaId = req.node <= 0 ? null : org.result.child1DnaId;
person.child1ShortName = req.node <= 0 ? null : org.result.child1ShortName;
person.child2 = req.node <= 1 ? null : org.result.child2;
person.child2Id = req.node <= 1 ? null : org.result.child2Id;
person.child2DnaId = req.node <= 1 ? null : org.result.child2DnaId;
person.child2ShortName = req.node <= 1 ? null : org.result.child2ShortName;
person.child3 = req.node <= 2 ? null : org.result.child3;
person.child3Id = req.node <= 2 ? null : org.result.child3Id;
person.child3DnaId = req.node <= 2 ? null : org.result.child3DnaId;
person.child3ShortName = req.node <= 2 ? null : org.result.child3ShortName;
person.child4 = req.node <= 3 ? null : org.result.child4;
person.child4Id = req.node <= 3 ? null : org.result.child4Id;
person.child4DnaId = req.node <= 3 ? null : org.result.child4DnaId;
person.child4ShortName = req.node <= 3 ? null : org.result.child4ShortName;
}
var apiUrlUpdate = $"{_configuration["API"]}/org/pos/officer/master/book";
using (var client = new HttpClient())
{
client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", token.Replace("Bearer ", ""));
client.DefaultRequestHeaders.Add("api-key", _configuration["API_KEY"]);
var _resUpdate = await client.PostAsJsonAsync(apiUrlUpdate, new
{
posMasterId = req.posmasterId,
profileId = person.profileId,
});
}
person.Draft = false;
person.typeCommand = req.typeCommand == null ? null : req.typeCommand.Trim().ToUpper();
person.ReportingDate = req.reportingDate;
person.posmasterId = req.posmasterId;
person.node = req.node;
person.nodeId = req.nodeId;
person.orgRevisionId = req.orgRevisionId;
person.positionId = req.positionId;
person.posMasterNo = req.posMasterNo;
person.positionName = req.positionName;
person.PositionExecutive = req.posExecutiveName;
person.positionExecutiveField = req.positionExecutiveField;
person.positionArea = req.positionArea;
person.positionField = req.positionField;
person.posTypeId = req.posTypeId;
person.posTypeName = req.posTypeName;
person.posLevelId = req.posLevelId;
person.posLevelName = req.posLevelName;
if (person.profileId != null && person.profileId != "")
{
apiUrl = $"{_configuration["API"]}/org/profile/profileid/position/{person.profileId}";
using (var client = new HttpClient())
{
client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", token.Replace("Bearer ", ""));
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();
var org = JsonConvert.DeserializeObject<OrgRequest>(_result);
if (org == null || org.result == null)
{
person.IsOld = false;
}
else
{
person.nodeOld = org.result.node;
person.nodeIdOld = org.result.nodeId;
person.rootOld = org.result.root;
person.rootIdOld = org.result.rootId;
person.rootShortNameOld = org.result.rootShortName;
person.child1Old = org.result.child1;
person.child1IdOld = org.result.child1Id;
person.child1ShortNameOld = org.result.child1ShortName;
person.child2Old = org.result.child2;
person.child2IdOld = org.result.child2Id;
person.child2ShortNameOld = org.result.child2ShortName;
person.child3Old = org.result.child3;
person.child3IdOld = org.result.child3Id;
person.child3ShortNameOld = org.result.child3ShortName;
person.child4Old = org.result.child4;
person.child4IdOld = org.result.child4Id;
person.child4ShortNameOld = org.result.child4ShortName;
person.posMasterNoOld = org.result.posMasterNo;
person.positionNameOld = org.result.position;
person.posTypeIdOld = org.result.posTypeId;
person.posTypeNameOld = org.result.posTypeName;
person.posLevelIdOld = org.result.posLevelId;
person.posLevelNameOld = org.result.posLevelName;
}
}
}
person.PlacementStatus = "PREPARE-CONTAIN";
person.LastUpdateFullName = FullName ?? "System Administrator";
person.LastUpdateUserId = UserId ?? "";
person.LastUpdatedAt = DateTime.Now;
_context.SaveChanges();
return Success();
}
[HttpPut("information/{personalId:length(36)}")]
public async Task<ActionResult<ResponseObject>> UpdateInformation([FromBody] PersonInformationRequest req, Guid personalId)
{
var person = await _context.PlacementProfiles.FindAsync(personalId);
if (person == null)
return Error(GlobalMessages.DataNotFound, 404);
person.Prefix = req.Prefix;
person.Gender = req.Gender;
person.Relationship = req.Relationship;
person.BloodGroup = req.BloodGroup;
person.Religion = req.Religion;
person.CitizenId = req.CitizenId;
person.Firstname = req.FirstName;
person.Lastname = req.LastName;
person.Nationality = req.Nationality;
person.Race = req.Race;
person.DateOfBirth = req.BirthDate;
person.Telephone = req.TelephoneNumber;
person.LastUpdateFullName = FullName ?? "System Administrator";
person.LastUpdateUserId = UserId ?? "";
person.LastUpdatedAt = DateTime.Now;
_context.SaveChanges();
return Success();
}
[HttpPut("address/{personalId:length(36)}")]
public async Task<ActionResult<ResponseObject>> UpdateAddress([FromBody] PersonAddressRequest req, Guid personalId)
{
var person = await _context.PlacementProfiles.FindAsync(personalId);
if (person == null)
return Error(GlobalMessages.DataNotFound, 404);
person.RegistSubDistrictId = req.RegistrationSubDistrictId;
person.RegistZipCode = req.RegistrationZipCode;
person.RegistDistrictId = req.RegistrationDistrictId;
person.RegistProvinceId = req.RegistrationProvinceId;
person.CurrentSubDistrictId = req.CurrentSubDistrictId;
person.CurrentZipCode = req.CurrentZipCode;
person.CurrentDistrictId = req.CurrentDistrictId;
person.CurrentProvinceId = req.CurrentProvinceId;
person.CurrentAddress = req.CurrentAddress;
person.RegistAddress = req.RegistrationAddress;
person.RegistSame = req.RegistrationSame;
person.LastUpdateFullName = FullName ?? "System Administrator";
person.LastUpdateUserId = UserId ?? "";
person.LastUpdatedAt = DateTime.Now;
_context.SaveChanges();
return Success();
}
[HttpPut("family/{personalId:length(36)}")]
public async Task<ActionResult<ResponseObject>> UpdateFamily([FromBody] PersonFamilyRequest req, Guid personalId)
{
var person = await _context.PlacementProfiles.FindAsync(personalId);
if (person == null)
return Error(GlobalMessages.DataNotFound, 404);
person.MotherPrefix = req.MotherPrefix;
person.FatherPrefix = req.FatherPrefix;
person.MarryPrefix = req.CouplePrefix;
person.Marry = req.Couple;
person.MarryFirstName = req.CoupleFirstName;
person.MarryLastName = req.CoupleLastName;
// person.MarryLastNameOld = req.CoupleLastNameOld;
person.MarryOccupation = req.CoupleCareer;
// person.MarryCitizenId = req.CoupleCitizenId;
// person.MarryLive = req.CoupleLive;
person.FatherFirstName = req.FatherFirstName;
person.FatherLastName = req.FatherLastName;
person.FatherOccupation = req.FatherCareer;
// person.FatherCitizenId = req.FatherCitizenId;
// person.FatherLive = req.FatherLive;
person.MotherFirstName = req.MotherFirstName;
person.MotherLastName = req.MotherLastName;
person.MotherOccupation = req.MotherCareer;
// person.MotherCitizenId = req.MotherCitizenId;
// person.MotherLive = req.MotherLive;
person.LastUpdateFullName = FullName ?? "System Administrator";
person.LastUpdateUserId = UserId ?? "";
person.LastUpdatedAt = DateTime.Now;
_context.SaveChanges();
return Success();
}
[HttpPost("certificate/{personalId:length(36)}")]
public async Task<ActionResult<ResponseObject>> CreateCertificate([FromBody] PersonCertificateRequest req, Guid personalId)
{
var person = await _context.PlacementProfiles
.Include(x => x.PlacementCertificates)
.FirstOrDefaultAsync(x => x.Id == personalId);
if (person == null)
return Error(GlobalMessages.DataNotFound, 404);
var data = new PlacementCertificate
{
PlacementProfile = person,
CertificateNo = req.CertificateNo,
Issuer = req.Issuer,
IssueDate = req.IssueDate,
ExpireDate = req.ExpireDate,
CertificateType = req.CertificateType,
CreatedFullName = FullName ?? "System Administrator",
CreatedUserId = UserId ?? "",
CreatedAt = DateTime.Now,
LastUpdateFullName = FullName ?? "System Administrator",
LastUpdateUserId = UserId ?? "",
LastUpdatedAt = DateTime.Now,
};
await _context.PlacementCertificates.AddAsync(data);
_context.SaveChanges();
return Success();
}
[HttpPut("certificate/{personalId:length(36)}")]
public async Task<ActionResult<ResponseObject>> UpdateCertificate([FromBody] PersonCertificateRequest req, Guid personalId)
{
var person = await _context.PlacementProfiles
.Include(x => x.PlacementCertificates)
.FirstOrDefaultAsync(x => x.Id == personalId);
if (person == null)
return Error(GlobalMessages.DataNotFound, 404);
var certificate = person.PlacementCertificates.FirstOrDefault(x => x.Id == req.Id);
if (certificate == null)
return Error(GlobalMessages.CertificateNotFound, 404);
certificate.CertificateNo = req.CertificateNo;
certificate.Issuer = req.Issuer;
certificate.IssueDate = req.IssueDate;
certificate.ExpireDate = req.ExpireDate;
certificate.CertificateType = req.CertificateType;
certificate.LastUpdateFullName = FullName ?? "System Administrator";
certificate.LastUpdateUserId = UserId ?? "";
certificate.LastUpdatedAt = DateTime.Now;
_context.SaveChanges();
return Success();
}
[HttpDelete("certificate/{personalId:length(36)}/{certificateId:length(36)}")]
public async Task<ActionResult<ResponseObject>> DeleteCertificate(Guid personalId, Guid certificateId)
{
var person = await _context.PlacementProfiles
.Include(x => x.PlacementCertificates)
.FirstOrDefaultAsync(x => x.Id == personalId);
if (person == null)
return Error(GlobalMessages.DataNotFound, 404);
var certificate = person.PlacementCertificates.FirstOrDefault(x => x.Id == certificateId);
if (certificate == null)
return Error(GlobalMessages.CertificateNotFound, 404);
_context.PlacementCertificates.Remove(certificate);
_context.SaveChanges();
return Success();
}
[HttpPost("education/{personalId:length(36)}")]
public async Task<ActionResult<ResponseObject>> CreateEducation([FromBody] PersonEducationRequest req, Guid personalId)
{
var profile = await _context.PlacementProfiles.FirstOrDefaultAsync(x => x.Id == personalId);
if (profile == null)
return Error(GlobalMessages.DataNotFound, 404);
var positionPath = await _context.PositionPaths.FirstOrDefaultAsync(x => x.Id == req.PositionPathId);
if (positionPath == null && req.PositionPathId != null)
return Error(GlobalMessages.DataNotFound, 404);
var data = new PlacementEducation
{
PlacementProfile = profile,
EducationLevelId = req.EducationLevelId,
EducationLevelName = req.EducationLevelName,
PositionPath = positionPath,
Institute = req.Institute,
Degree = req.Degree,
Field = req.Field,
Gpa = req.Gpa,
Country = req.Country,
Duration = req.Duration,
DurationYear = req.DurationYear,
Other = req.Other,
FundName = req.FundName,
IsDate = req.IsDate,
FinishDate = req.FinishDate,
StartDate = req.StartDate,
EndDate = req.EndDate,
CreatedFullName = FullName ?? "System Administrator",
CreatedUserId = UserId ?? "",
CreatedAt = DateTime.Now,
LastUpdateFullName = FullName ?? "System Administrator",
LastUpdateUserId = UserId ?? "",
LastUpdatedAt = DateTime.Now,
};
await _context.PlacementEducations.AddAsync(data);
await _context.SaveChangesAsync();
return Success();
}
[HttpPut("education/{personalId:length(36)}")]
public async Task<ActionResult<ResponseObject>> UpdateEducation([FromBody] PersonEducationRequest req, Guid personalId)
{
var profile = await _context.PlacementProfiles.FirstOrDefaultAsync(x => x.Id == personalId);
if (profile == null)
return Error(GlobalMessages.DataNotFound, 404);
var positionPath = await _context.PositionPaths.FirstOrDefaultAsync(x => x.Id == req.PositionPathId);
if (positionPath == null && req.PositionPathId != null)
return Error(GlobalMessages.DataNotFound, 404);
var education = await _context.PlacementEducations.FirstOrDefaultAsync(x => x.Id == req.Id);
if (education == null)
return Error(GlobalMessages.EducationNotFound, 404);
education.EducationLevelId = req.EducationLevelId;
education.EducationLevelName = req.EducationLevelName;
education.PositionPath = positionPath;
education.Institute = req.Institute;
education.Degree = req.Degree;
education.Field = req.Field;
education.Gpa = req.Gpa;
education.Country = req.Country;
education.Duration = req.Duration;
education.DurationYear = req.DurationYear;
education.Other = req.Other;
education.FundName = req.FundName;
education.IsDate = req.IsDate;
education.FinishDate = req.FinishDate;
education.StartDate = req.StartDate;
education.EndDate = req.EndDate;
education.LastUpdateFullName = FullName ?? "System Administrator";
education.LastUpdateUserId = UserId ?? "";
education.LastUpdatedAt = DateTime.Now;
await _context.SaveChangesAsync();
return Success();
}
[HttpDelete("education/{educationId:length(36)}")]
public async Task<ActionResult<ResponseObject>> DeleteEducation(Guid educationId)
{
var education = await _context.PlacementEducations.FirstOrDefaultAsync(x => x.Id == educationId);
if (education == null)
return Error(GlobalMessages.EducationNotFound, 404);
_context.PlacementEducations.Remove(education);
_context.SaveChanges();
return Success();
}
[HttpPut("position/{personalId:length(36)}")]
public async Task<ActionResult<ResponseObject>> UpdatePositionDraft([FromBody] List<Guid> items, Guid personalId)
{
var getPermission = await _permission.GetPermissionAPIAsync("UPDATE", "SYS_PLACEMENT_PASS");
var jsonData = JsonConvert.DeserializeObject<JObject>(getPermission);
if (jsonData["status"]?.ToString() != "200")
{
return Error(jsonData["message"]?.ToString(), StatusCodes.Status403Forbidden);
}
var placement = await _context.Placements
.FirstOrDefaultAsync(x => x.Id == personalId);
if (placement == null)
return Error(GlobalMessages.DataNotFound, 404);
foreach (var item in items)
{
var profile = await _context.PlacementProfiles
.FirstOrDefaultAsync(x => x.Id == item);
if (profile != null)
profile.Draft = true;
}
_context.SaveChanges();
return Success();
}
[HttpPost("position/clear/{personalId:length(36)}")]
public async Task<ActionResult<ResponseObject>> UpdatePositionDraft(Guid personalId)
{
var profile = await _context.PlacementProfiles
.FirstOrDefaultAsync(x => x.Id == personalId);
if (profile == null)
return Error(GlobalMessages.DataNotFound, 404);
var apiUrlUpdate = $"{_configuration["API"]}/org/pos/officer/master/clear";
using (var client = new HttpClient())
{
client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", token.Replace("Bearer ", ""));
client.DefaultRequestHeaders.Add("api-key", _configuration["API_KEY"]);
var _resUpdate = await client.PostAsJsonAsync(apiUrlUpdate, new
{
posMasterId = profile.posmasterId,
});
}
profile.root = null;
profile.rootId = null;
profile.rootDnaId = null;
profile.rootShortName = null;
profile.child1 = null;
profile.child1Id = null;
profile.child1DnaId = null;
profile.child1ShortName = null;
profile.child2 = null;
profile.child2Id = null;
profile.child2DnaId = null;
profile.child2ShortName = null;
profile.child3 = null;
profile.child3Id = null;
profile.child3DnaId = null;
profile.child3ShortName = null;
profile.child4 = null;
profile.child4Id = null;
profile.child4DnaId = null;
profile.child4ShortName = null;
profile.orgRevisionId = null;
profile.posMasterNo = null;
profile.positionName = null;
profile.positionField = null;
profile.posTypeId = null;
profile.posTypeName = null;
profile.posLevelId = null;
profile.posLevelName = null;
// profile.PositionLevel = null;
// profile.PositionType = null;
// profile.Amount = null;
// profile.MouthSalaryAmount = null;
// profile.PositionSalaryAmount = null;
profile.RecruitDate = null;
profile.ReportingDate = null;
profile.node = null;
profile.nodeId = null;
profile.posmasterId = null;
profile.positionId = null;
profile.Draft = null;
profile.typeCommand = null;
profile.PlacementStatus = "UN-CONTAIN";
_context.SaveChanges();
return Success();
}
[HttpPut("date/update/{personalId:length(36)}")]
public async Task<ActionResult<ResponseObject>> UpdateDateDraft([FromBody] PersonDateRequest req, Guid personalId)
{
var getPermission = await _permission.GetPermissionAPIAsync("UPDATE", "SYS_PLACEMENT_PASS");
var jsonData = JsonConvert.DeserializeObject<JObject>(getPermission);
if (jsonData["status"]?.ToString() != "200")
{
return Error(jsonData["message"]?.ToString(), StatusCodes.Status403Forbidden);
}
var profile = await _context.PlacementProfiles
.FirstOrDefaultAsync(x => x.Id == personalId);
if (profile == null)
return Error(GlobalMessages.DataNotFound, 404);
profile.ReportingDate = req.Date;
_context.SaveChanges();
return Success();
}
[HttpGet("user/{personalId:length(36)}")]
public async Task<ActionResult<ResponseObject>> GetUserByOrganization(Guid personalId)
{
var profile = await _context.Profiles
.FirstOrDefaultAsync(x => x.Id == personalId);
if (profile == null)
return Error(GlobalMessages.DataNotFound, 404);
var organization = await _context.Organizations
.Include(x => x.Parent)
.FirstOrDefaultAsync(x => x.Id == profile.OcId);
if (organization == null)
return Error(GlobalMessages.OrganizationNotFound, 404);
var profilePosition = await _context.ProfilePositions
.Where(x => x.Profile != null)
.Where(x => x.OrganizationPosition != null)
.Where(x => x.OrganizationPosition.PositionMaster != null)
.Where(x => x.Profile != profile)
.Where(x => x.OrganizationPosition.Organization == organization)
.Select(x => new
{
Id = x.Profile.Id,
Prefix = x.Profile.Prefix == null ? null : x.Profile.Prefix.Name,
FirstName = x.Profile.FirstName,
LastName = x.Profile.LastName,
CitizenId = x.Profile.CitizenId,
Position = x.OrganizationPosition.PositionMaster.PositionPath == null ? "-" : x.OrganizationPosition.PositionMaster.PositionPath.Name,
PositionLevel = x.Profile.PositionLevel == null ? "-" : x.Profile.PositionLevel.Name,
IsDirector = x.OrganizationPosition.PositionMaster.IsDirector,
})
.ToListAsync();
var caregiver = profilePosition.Where(x => x.IsDirector == false).ToList();
var commander = profilePosition.Where(x => x.IsDirector == true).ToList();
if (organization.Parent != null)
{
var profilePositionHigh = await _context.ProfilePositions
.Where(x => x.Profile != null)
.Where(x => x.OrganizationPosition != null)
.Where(x => x.OrganizationPosition.PositionMaster != null)
.Where(x => x.Profile != profile)
.Where(x => x.OrganizationPosition.Organization == organization.Parent)
.Select(x => new
{
Id = x.Profile.Id,
Prefix = x.Profile.Prefix == null ? null : x.Profile.Prefix.Name,
FirstName = x.Profile.FirstName,
LastName = x.Profile.LastName,
CitizenId = x.Profile.CitizenId,
Position = x.Profile.Position == null ? "-" : x.Profile.Position.Name,
PositionLevel = x.Profile.PositionLevel == null ? "-" : x.Profile.PositionLevel.Name,
IsDirector = x.OrganizationPosition.PositionMaster.IsDirector,
})
.ToListAsync();
var chairman = profilePositionHigh.Where(x => x.IsDirector == true).ToList();
return Success(new { caregiver, commander, chairman });
}
return Success(new { caregiver, commander, chairman = new List<dynamic>() });
}
[HttpGet("file/{docId:length(36)}")]
public async Task<ActionResult<ResponseObject>> GetPathFile(Guid docId)
{
if (docId == Guid.Parse("00000000-0000-0000-0000-000000000000"))
return Error(GlobalMessages.DataNotFound, 404);
var path = await _documentService.ImagesPath(docId);
return Success(path);
}
[HttpPut("doc/{personalId:length(36)}")]
public async Task<ActionResult<ResponseObject>> UpdateDoc([FromForm] PlacementFileRequest req, Guid personalId)
{
var placementProfile = await _context.PlacementProfiles
.Include(x => x.PlacementCertificates)
.FirstOrDefaultAsync(x => x.Id == personalId);
if (placementProfile == null)
return Error(GlobalMessages.DataNotFound, 404);
if (Request.Form.Files != null && Request.Form.Files.Count != 0)
{
foreach (var file in Request.Form.Files)
{
var fileExtension = Path.GetExtension(file.FileName);
var doc = await _documentService.UploadFileAsync(file, file.FileName);
var _doc = await _context.Documents.AsQueryable()
.FirstOrDefaultAsync(x => x.Id == doc.Id);
if (_doc != null)
{
var placementProfileDoc = new PlacementProfileDoc
{
PlacementProfile = placementProfile,
Document = _doc,
CreatedFullName = FullName ?? "System Administrator",
CreatedUserId = UserId ?? "",
CreatedAt = DateTime.Now,
LastUpdateFullName = FullName ?? "System Administrator",
LastUpdateUserId = UserId ?? "",
LastUpdatedAt = DateTime.Now,
};
await _context.PlacementProfileDocs.AddAsync(placementProfileDoc);
}
}
}
_context.SaveChanges();
return Success();
}
[HttpDelete("doc/{personalId:length(36)}/{docId:length(36)}")]
public async Task<ActionResult<ResponseObject>> DeleteDoc(Guid personalId, Guid docId)
{
var person = await _context.PlacementProfiles
.Include(x => x.PlacementProfileDocs)
.ThenInclude(x => x.Document)
.FirstOrDefaultAsync(x => x.Id == personalId);
if (person == null)
return Error(GlobalMessages.DataNotFound, 404);
var profileDoc = person.PlacementProfileDocs.FirstOrDefault(x => x.Document.Id == docId);
if (profileDoc == null)
return Error(GlobalMessages.FileNotFoundOnServer, 404);
_context.PlacementProfileDocs.RemoveRange(profileDoc);
var _docId = profileDoc.Document.Id;
await _context.SaveChangesAsync();
await _documentService.DeleteFileAsync(_docId);
await _context.SaveChangesAsync();
return Success();
}
/// <summary>
/// หน่วยงานที่ถูกเลือกไปแล้ว
/// </summary>
/// <returns></returns>
/// <response code="200"></response>
/// <response code="400">ค่าตัวแปรที่ส่งมาไม่ถูกต้อง</response>
/// <response code="401">ไม่ได้ Login เข้าระบบ</response>
/// <response code="500">เมื่อเกิดข้อผิดพลาดในการทำงาน</response>
[HttpGet("use")]
public async Task<ActionResult<ResponseObject>> GetPositionUse()
{
var position = await _context.PlacementProfiles
.Where(x => x.posmasterId != null)
.Where(x => x.PlacementStatus != "DONE" && x.PlacementStatus != "REPORT")
.Select(x => x.posmasterId)
.ToListAsync();
return Success(position);
}
/// <summary>
/// ส่งรายชื่อออกคำสั่ง C-PM-01
/// </summary>
/// <returns></returns>
/// <response code="200"></response>
/// <response code="400">ค่าตัวแปรที่ส่งมาไม่ถูกต้อง</response>
/// <response code="401">ไม่ได้ Login เข้าระบบ</response>
/// <response code="500">เมื่อเกิดข้อผิดพลาดในการทำงาน</response>
[HttpPost("recruit/report")]
public async Task<ActionResult<ResponseObject>> PostReportRecruit([FromBody] ReportPersonRequest req)
{
var placementProfiles = await _context.PlacementProfiles
// .Include(x => x.Placement)
// .ThenInclude(x => x.PlacementType)
.Where(x => req.refIds.Contains(x.Id.ToString()))
// .Where(x => x.Placement!.PlacementType!.Name != "สอบแข่งขัน")
// .Where(x => x.typeCommand.Trim().ToUpper() == "APPOINT")
.ToListAsync();
placementProfiles.ForEach(profile =>
{
profile.PlacementStatus = req.status.Trim().ToUpper();
profile.typeCommand = "APPOINT";
});
await _context.SaveChangesAsync();
return Success();
}
/// <summary>
/// ลบรายชื่อออกคำสั่ง C-PM-01
/// </summary>
/// <returns></returns>
/// <response code="200"></response>
/// <response code="400">ค่าตัวแปรที่ส่งมาไม่ถูกต้อง</response>
/// <response code="401">ไม่ได้ Login เข้าระบบ</response>
/// <response code="500">เมื่อเกิดข้อผิดพลาดในการทำงาน</response>
[HttpPost("recruit/report/delete")]
public async Task<ActionResult<ResponseObject>> PostReportDeleteRecruit([FromBody] ReportPersonRequest req)
{
var placementProfiles = await _context.PlacementProfiles
.Where(x => req.refIds.Contains(x.Id.ToString()))
// .Where(x => x.PlacementStatus.ToUpper() == "REPORT")
.ToListAsync();
placementProfiles.ForEach(profile => profile.PlacementStatus = "PREPARE-CONTAIN");
await _context.SaveChangesAsync();
return Success();
}
/// <summary>
/// เอกสารแนบท้าย C-PM-01
/// </summary>
/// <param name="id">Record Id ของคำสั่ง</param>
/// <param name="exportType">pdf, docx หรือ xlsx</param>
/// <returns></returns>
/// <response code="200">เมื่อทำการอ่านข้อมูลจาก Relational Database สำเร็จ</response>
/// <response code="401">ไม่ได้ Login เข้าระบบ</response>
/// <response code="500">เมื่อเกิดข้อผิดพลาดในการทำงาน</response>
[HttpPost("recruit/report/attachment")]
[AllowAnonymous]
[ProducesResponseType(StatusCodes.Status200OK)]
[ProducesResponseType(StatusCodes.Status401Unauthorized)]
[ProducesResponseType(StatusCodes.Status500InternalServerError)]
public async Task<ActionResult<ResponseObject>> PostReportRecruitAttachment([FromBody] ReportAttachmentRequest req)
{
try
{
var report_data = (from p in _context.PlacementProfiles
.Include(x => x.Placement)
.Include(x => x.PlacementEducations)
// .ThenInclude(x => x.PlacementType)
.Where(x => req.refIds.Select(x => x.refId).Contains(x.Id.ToString()))
// .Where(x => x.Placement!.PlacementType!.Name != "สอบแข่งขัน")
// .Where(x => x.typeCommand.Trim().ToUpper() == "APPOINT")
.ToList()
join r in req.refIds
on p.Id.ToString() equals r.refId
orderby r.Sequence
select new
{
No = r.Sequence.ToString().ToThaiNumber(),
FullName = $"{r.Prefix}{r.FirstName} {r.LastName}",
Education = p.PlacementEducations == null || p.PlacementEducations.Count == 0 ? "-" :
$"{p.PlacementEducations.FirstOrDefault().Degree} {p.PlacementEducations.FirstOrDefault().Field}",
PositionName = p.positionName == null ? "-" : p.positionName,
ExamNumber = p.ExamNumber == null ? "-" : p.ExamNumber.Value.ToString().ToThaiNumber(),
PlacementName = $"{p.Placement.Name.ToThaiNumber()} ครั้งที่ {p.Placement.Round.ToThaiNumber()} {p.Placement.Year.ToThaiYear().ToString().ToThaiNumber()}",
Oc = (p.positionName == null ? "" : $"{p.positionName}\n") +
(p.PositionExecutive == null ? "" : (p.positionExecutiveField == null ? $"{p.PositionExecutive}\n" : $"{p.PositionExecutive}({p.positionExecutiveField})\n")) +
(p.child4 == null ? "" : $"{p.child4}\n") +
(p.child3 == null ? "" : $"{p.child3}\n") +
(p.child2 == null ? "" : $"{p.child2}\n") +
(p.child1 == null ? "" : $"{p.child1}\n") +
(p.root == null ? "" : $"{p.root}"),
PositionType = p.posTypeName == null ? "-" : p.posTypeName,
PositionLevel = p.posLevelName == null ? "-" : p.posLevelName,
PositionNumber = p.posMasterNo == null ? "-" :
p.node == 4 ? $"{p.child4ShortName} {p.posMasterNo}".ToThaiNumber() :
p.node == 3 ? $"{p.child3ShortName} {p.posMasterNo}".ToThaiNumber() :
p.node == 2 ? $"{p.child2ShortName} {p.posMasterNo}".ToThaiNumber() :
p.node == 1 ? $"{p.child1ShortName} {p.posMasterNo}".ToThaiNumber() :
p.node == 0 ? $"{p.rootShortName} {p.posMasterNo}".ToThaiNumber() : "-",
Salary = r.Amount == null ? "-" : r.Amount.Value.ToNumericNoDecimalText().ToThaiNumber().ToThaiNumber(),
AppointDate = p.ReportingDate == null ? "-" : p.ReportingDate.Value.ToThaiShortDate2().ToThaiNumber(),
CommandExcecuteDate = string.IsNullOrEmpty(r.CommandExcecuteDate.ToString()) ? "-" : r.CommandExcecuteDate.Value.ToThaiShortDate2().ToThaiNumber(),
OccupationPosition = p.OccupationPosition == null ? "-" : p.OccupationPosition, //ตำแหน่งเก่าก่อนสอบ
PositionCandidate = p.PositionCandidate, //ตำแหน่งที่สอบแข่งขัน
OcCandidate = (p.positionName == null ? "" : $"{p.positionName}\n") +
(p.child4 == null ? "" : $"{p.child4}\n") +
(p.child3 == null ? "" : $"{p.child3}\n") +
(p.child2 == null ? "" : $"{p.child2}\n") +
(p.child1 == null ? "" : $"{p.child1}\n") +
(p.root == null ? "" : $"{p.root}"),
RemarkHorizontal = r.RemarkHorizontal == null ? "-" : r.RemarkHorizontal.ToThaiNumber(),
RemarkVertical = r.RemarkVertical == null ? "-" : r.RemarkVertical.ToThaiNumber()
}).ToList();
var result = new List<dynamic>();
foreach (var r in report_data)
{
result.Add(r);
string? _null = null;
if (r.RemarkHorizontal != null && r.RemarkHorizontal != "")
{
result.Add(new
{
No = _null,
FullName = r.RemarkHorizontal,
Education = _null,
PositionName = _null,
ExamNumber = _null,
PlacementName = _null,
Oc = _null,
PositionType = _null,
PositionLevel = _null,
PositionNumber = _null,
Salary = _null,
AppointDate = _null,
CommandExcecuteDate = _null,
OccupationPosition = _null,
PositionCandidate = _null,
OcCandidate = _null,
RemarkHorizontal = _null,
RemarkVertical = _null,
});
}
}
return Success(result);
}
catch
{
throw;
}
}
/// <summary>
/// ออกคำสั่ง C-PM-01 บรรจุและแต่งตั้งผู้สอบแข่งขันได้
/// </summary>
/// <returns></returns>
/// <response code="200"></response>
/// <response code="400">ค่าตัวแปรที่ส่งมาไม่ถูกต้อง</response>
/// <response code="401">ไม่ได้ Login เข้าระบบ</response>
/// <response code="500">เมื่อเกิดข้อผิดพลาดในการทำงาน</response>
[HttpPost("recruit/report/excecute")]
public async Task<ActionResult<ResponseObject>> PostReportExecuteRecruit([FromBody] ReportExecuteRequest req)
{
try
{
var placementProfile = await _context.PlacementProfiles
.Include(x => x.PlacementCertificates)
.Include(x => x.PlacementEducations)
.Where(x => req.refIds.Select(x => x.refId).Contains(x.Id.ToString()))
.ToListAsync();
if (placementProfile == null)
return NotFound();
var resultData = (from p in placementProfile
join r in req.refIds
on p.Id.ToString() equals r.refId
select new
{
bodyProfile = new
{
rank = string.Empty,
prefix = p.Prefix == null ? string.Empty : p.Prefix,
firstName = p.Firstname == null ? string.Empty : p.Firstname,
lastName = p.Lastname == null ? string.Empty : p.Lastname,
citizenId = p.CitizenId == null ? string.Empty : p.CitizenId,
position = p.positionName == null ? string.Empty : p.positionName,
posLevelId = p.posLevelId == null ? string.Empty : p.posLevelId,
posTypeId = p.posTypeId == null ? string.Empty : p.posTypeId,
email = p.Email == null ? string.Empty : p.Email,
phone = p.MobilePhone == null ? string.Empty : Regex.Replace(p.MobilePhone, @"\D", ""),
keycloak = string.Empty,
isProbation = true,
isLeave = false,
dateRetire = (DateTime?)null,
dateAppoint = r.commandDateAffect,
dateStart = p.ReportingDate,
govAgeAbsent = 0,
govAgePlus = 0,
birthDate = (p.DateOfBirth == null || p.DateOfBirth == DateTime.MinValue) ? (DateTime?)null : p.DateOfBirth,
reasonSameDate = (DateTime?)null,
ethnicity = p.Race == null ? string.Empty : p.Race,
telephoneNumber = p.Telephone == null ? string.Empty : Regex.Replace(p.Telephone, @"\D", ""),
nationality = p.Nationality == null ? string.Empty : p.Nationality,
gender = p.Gender == null ? string.Empty : p.Gender,
relationship = p.Relationship == null ? string.Empty : p.Relationship,
religion = p.Religion == null ? string.Empty : p.Religion,
bloodGroup = string.Empty,
registrationAddress = string.IsNullOrWhiteSpace(p.RegistAddress) ? string.Empty : p.RegistAddress,
registrationProvinceId = p.RegistProvinceId ?? null,
registrationDistrictId = p.RegistDistrictId ?? null,
registrationSubDistrictId = p.RegistSubDistrictId ?? null,
registrationZipCode = p.RegistZipCode == null ? null : p.RegistZipCode,
currentAddress = string.IsNullOrWhiteSpace(p.CurrentAddress) ? string.Empty : p.CurrentAddress,
currentProvinceId = p.CurrentProvinceId ?? null,
currentDistrictId = p.CurrentDistrictId ?? null,
currentSubDistrictId = p.CurrentSubDistrictId ?? null,
currentZipCode = p.CurrentZipCode == null ? null : p.CurrentZipCode,
amount = r.amount,
amountSpecial = r.amountSpecial,
},
bodyEducations = p.PlacementEducations.Select(e => new
{
profileId = string.Empty,
country = e.Country ?? string.Empty,
degree = e.Degree ?? string.Empty,
duration = e.Duration ?? string.Empty,
durationYear = e.DurationYear ?? null,
field = e.Field ?? string.Empty,
finishDate = (e.FinishDate == null || e.FinishDate == DateTime.MinValue) ? (DateTime?)null : e.FinishDate,
fundName = e.FundName ?? string.Empty,
gpa = e.Gpa ?? string.Empty,
institute = e.Institute ?? string.Empty,
other = e.Other ?? string.Empty,
startDate = (e.StartDate == null || e.StartDate == DateTime.MinValue) ? (DateTime?)null : e.StartDate,
endDate = (e.EndDate == null || e.EndDate == DateTime.MinValue) ? (DateTime?)null : e.EndDate,
educationLevel = e.EducationLevelName,
educationLevelId = e.EducationLevelId,
positionPath = e.PositionPath?.Name ?? string.Empty,
positionPathId = e.PositionPath?.Id.ToString() ?? string.Empty,
isDate = e.IsDate ?? false,
isEducation = e.IsEducation ?? false,
note = e.Other ?? string.Empty
}).ToList(),
bodyCertificates = p.PlacementCertificates.Select(e => new
{
profileId = string.Empty,
expireDate = (e.ExpireDate == null || e.ExpireDate == DateTime.MinValue) ? (DateTime?)null : e.ExpireDate,
issueDate = (e.IssueDate == null || e.IssueDate == DateTime.MinValue) ? (DateTime?)null : e.IssueDate,
certificateNo = e.CertificateNo ?? string.Empty,
certificateType = e.CertificateType ?? string.Empty,
issuer = e.Issuer ?? string.Empty
}).ToList(),
bodySalarys = new
{
profileId = p.profileId,
amount = r.amount,
amountSpecial = r.amountSpecial,
positionSalaryAmount = r.positionSalaryAmount,
mouthSalaryAmount = r.mouthSalaryAmount,
positionExecutive = p.PositionExecutive,
positionExecutiveField = p.positionExecutiveField,
positionArea = p.positionArea,
positionType = p.posTypeName,
positionLevel = p.posLevelName,
commandId = r.commandId,
orgRoot = p.root,
orgChild1 = p.child1,
orgChild2 = p.child2,
orgChild3 = p.child3,
orgChild4 = p.child4,
commandNo = r.commandNo,
commandYear = r.commandYear,
posNo = p.posMasterNo?.ToString(),
posNoAbb = p.node == 4 ? $"{p.child4ShortName}" :
p.node == 3 ? $"{p.child3ShortName}" :
p.node == 2 ? $"{p.child2ShortName}" :
p.node == 1 ? $"{p.child1ShortName}" :
p.node == 0 ? $"{p.rootShortName}" : "",
commandDateAffect = r.commandDateAffect,
commandDateSign = r.commandDateSign,
positionName = p.positionName,
commandCode = r.commandCode,
commandName = r.commandName,
remark = r.remark,
},
bodyPosition = new
{
posmasterId = p.posmasterId,
positionId = p.positionId
},
bodyMarry = new
{
marry = p.Marry,
marryPrefix = p.MarryPrefix,
marryFirstName = p.MarryFirstName,
marryLastName = p.MarryLastName,
marryOccupation = p.MarryOccupation,
marryNationality = p.MarryNationality,
},
bodyFather = new
{
fatherPrefix = p.FatherPrefix,
fatherFirstName = p.FatherFirstName,
fatherLastName = p.FatherLastName,
fatherOccupation = p.FatherOccupation,
fatherNationality = p.FatherNationality,
},
bodyMother = new
{
motherPrefix = p.MotherPrefix,
motherFirstName = p.MotherFirstName,
motherLastName = p.MotherLastName,
motherOccupation = p.MotherOccupation,
motherNationality = p.MotherNationality,
},
}).ToList();
var apiUrl = $"{_configuration["API"]}/org/command/excexute/create-officer-profile";
using (var client = new HttpClient())
{
client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", token.Replace("Bearer ", ""));
client.DefaultRequestHeaders.Add("api-key", _configuration["API_KEY"]);
var _req = new HttpRequestMessage(HttpMethod.Post, apiUrl);
var _res = await client.PostAsJsonAsync(apiUrl, new
{
data = resultData
});
var _result = await _res.Content.ReadAsStringAsync();
if (_res.IsSuccessStatusCode)
{
placementProfile.ForEach(profile =>
{
profile.PlacementStatus = "DONE";
if (req.refIds.Length > 0)
{
profile.commandId = req.refIds[0].commandId;
profile.refCommandCode = req.refIds[0].commandCode;
profile.refCommandDate = req.refIds[0].commandDateAffect;
profile.refCommandName = req.refIds[0].commandName;
profile.refCommandNo = $"{req.refIds[0].commandNo}/{req.refIds[0].commandYear.ToThaiYear()}";
profile.templateDoc = req.refIds[0].remark;
}
});
await _context.SaveChangesAsync();
}
}
return Success();
}
catch
{
throw;
}
}
/// <summary>
/// ส่งรายชื่อออกคำสั่ง C-PM-02
/// </summary>
/// <returns></returns>
/// <response code="200"></response>
/// <response code="400">ค่าตัวแปรที่ส่งมาไม่ถูกต้อง</response>
/// <response code="401">ไม่ได้ Login เข้าระบบ</response>
/// <response code="500">เมื่อเกิดข้อผิดพลาดในการทำงาน</response>
[HttpPost("candidate/report")]
public async Task<ActionResult<ResponseObject>> PostReportCandidate([FromBody] ReportPersonRequest req)
{
var placementProfiles = await _context.PlacementProfiles
// .Include(x => x.Placement)
// .ThenInclude(x => x.PlacementType)
.Where(x => req.refIds.Contains(x.Id.ToString()))
// .Where(x => x.Placement!.PlacementType!.Name != "สอบคัดเลือก")
// .Where(x => x.typeCommand.Trim().ToUpper() == "APPOINT")
.ToListAsync();
placementProfiles.ForEach(profile =>
{
profile.PlacementStatus = req.status.Trim().ToUpper();
profile.typeCommand = "APPOINT";
});
await _context.SaveChangesAsync();
return Success();
}
/// <summary>
/// ลบรายชื่อออกคำสั่ง C-PM-02
/// </summary>
/// <returns></returns>
/// <response code="200"></response>
/// <response code="400">ค่าตัวแปรที่ส่งมาไม่ถูกต้อง</response>
/// <response code="401">ไม่ได้ Login เข้าระบบ</response>
/// <response code="500">เมื่อเกิดข้อผิดพลาดในการทำงาน</response>
[HttpPost("candidate/report/delete")]
public async Task<ActionResult<ResponseObject>> PostReportDeleteCandidate([FromBody] ReportPersonRequest req)
{
var placementProfiles = await _context.PlacementProfiles
.Where(x => req.refIds.Contains(x.Id.ToString()))
// .Where(x => x.PlacementStatus.ToUpper() == "REPORT")
.ToListAsync();
placementProfiles.ForEach(profile => profile.PlacementStatus = "PREPARE-CONTAIN");
await _context.SaveChangesAsync();
return Success();
}
/// <summary>
/// เอกสารแนบท้าย C-PM-02
/// </summary>
/// <param name="id">Record Id ของคำสั่ง</param>
/// <param name="exportType">pdf, docx หรือ xlsx</param>
/// <returns></returns>
/// <response code="200">เมื่อทำการอ่านข้อมูลจาก Relational Database สำเร็จ</response>
/// <response code="401">ไม่ได้ Login เข้าระบบ</response>
/// <response code="500">เมื่อเกิดข้อผิดพลาดในการทำงาน</response>
[HttpPost("candidate/report/attachment")]
[AllowAnonymous]
[ProducesResponseType(StatusCodes.Status200OK)]
[ProducesResponseType(StatusCodes.Status401Unauthorized)]
[ProducesResponseType(StatusCodes.Status500InternalServerError)]
public async Task<ActionResult<ResponseObject>> PostReportCandidateAttachment([FromBody] ReportAttachmentRequest req)
{
try
{
var report_data = (from p in _context.PlacementProfiles
.Include(x => x.Placement)
.Include(x => x.PlacementEducations)
// .ThenInclude(x => x.PlacementType)
.Where(x => req.refIds.Select(x => x.refId).Contains(x.Id.ToString()))
// .Where(x => x.Placement!.PlacementType!.Name != "สอบแข่งขัน")
// .Where(x => x.typeCommand.Trim().ToUpper() == "APPOINT")
.ToList()
join r in req.refIds
on p.Id.ToString() equals r.refId
orderby r.Sequence
select new
{
No = r.Sequence.ToString().ToThaiNumber(),
FullName = $"{r.Prefix}{r.FirstName} {r.LastName}",
Education = p.PlacementEducations == null || p.PlacementEducations.Count == 0 ? "-" :
$"{p.PlacementEducations.FirstOrDefault().Degree} {p.PlacementEducations.FirstOrDefault().Field}",
PositionName = p.positionName == null ? "-" : p.positionName,
ExamNumber = p.ExamNumber == null ? "-" : p.ExamNumber.Value.ToString().ToThaiNumber(),
PlacementName = $"{p.Placement.Name.ToThaiNumber()} ครั้งที่ {p.Placement.Round.ToThaiNumber()} {p.Placement.Year.ToThaiYear().ToString().ToThaiNumber()}",
Oc = (p.positionName == null ? "" : $"{p.positionName}\n") +
(p.PositionExecutive == null ? "" : (p.positionExecutiveField == null ? $"{p.PositionExecutive}\n" : $"{p.PositionExecutive}({p.positionExecutiveField})\n")) +
(p.child4 == null ? "" : $"{p.child4}\n") +
(p.child3 == null ? "" : $"{p.child3}\n") +
(p.child2 == null ? "" : $"{p.child2}\n") +
(p.child1 == null ? "" : $"{p.child1}\n") +
(p.root == null ? "" : $"{p.root}"),
PositionType = p.posTypeName == null ? "-" : p.posTypeName,
PositionLevel = p.posLevelName == null ? "-" : p.posLevelName,
PositionNumber = p.posMasterNo == null ? "-" :
p.node == 4 ? $"{p.child4ShortName} {p.posMasterNo}".ToThaiNumber() :
p.node == 3 ? $"{p.child3ShortName} {p.posMasterNo}".ToThaiNumber() :
p.node == 2 ? $"{p.child2ShortName} {p.posMasterNo}".ToThaiNumber() :
p.node == 1 ? $"{p.child1ShortName} {p.posMasterNo}".ToThaiNumber() :
p.node == 0 ? $"{p.rootShortName} {p.posMasterNo}".ToThaiNumber() : "-",
Salary = r.Amount == null ? "-" : r.Amount.Value.ToNumericNoDecimalText().ToThaiNumber().ToThaiNumber(),
AppointDate = p.ReportingDate == null ? "-" : p.ReportingDate.Value.ToThaiShortDate2().ToThaiNumber(),
CommandExcecuteDate = string.IsNullOrEmpty(r.CommandExcecuteDate.ToString()) ? "-" : r.CommandExcecuteDate.Value.ToThaiShortDate2().ToThaiNumber(),
PositionCandidate = p.PositionCandidate,
RemarkHorizontal = r.RemarkHorizontal == null ? "-" : r.RemarkHorizontal.ToThaiNumber(),
RemarkVertical = r.RemarkVertical == null ? "-" : r.RemarkVertical.ToThaiNumber()
}).ToList();
var result = new List<dynamic>();
foreach (var r in report_data)
{
result.Add(r);
string? _null = null;
if (r.RemarkHorizontal != null && r.RemarkHorizontal != "")
{
result.Add(new
{
No = _null,
FullName = r.RemarkHorizontal,
Education = _null,
PositionName = _null,
ExamNumber = _null,
PlacementName = _null,
Oc = _null,
PositionType = _null,
PositionLevel = _null,
PositionNumber = _null,
Salary = _null,
AppointDate = _null,
CommandExcecuteDate = _null,
OccupationPosition = _null,
PositionCandidate = _null,
RemarkHorizontal = _null,
RemarkVertical = _null,
});
}
}
return Success(result);
}
catch
{
throw;
}
}
/// <summary>
/// ออกคำสั่ง C-PM-02 บรรจุและแต่งตั้งผู้ได้รับคัดเลือก
/// </summary>
/// <returns></returns>
/// <response code="200"></response>
/// <response code="400">ค่าตัวแปรที่ส่งมาไม่ถูกต้อง</response>
/// <response code="401">ไม่ได้ Login เข้าระบบ</response>
/// <response code="500">เมื่อเกิดข้อผิดพลาดในการทำงาน</response>
[HttpPost("candidate/report/excecute")]
public async Task<ActionResult<ResponseObject>> PostReportExecuteCandidate([FromBody] ReportExecuteRequest req)
{
try
{
var placementProfile = await _context.PlacementProfiles
.Include(x => x.PlacementCertificates)
.Include(x => x.PlacementEducations)
.Include(x => x.ProfileImg)
.Where(x => req.refIds.Select(x => x.refId).Contains(x.Id.ToString()))
.ToListAsync();
if (placementProfile == null)
return NotFound();
var resultData = (from p in placementProfile
join r in req.refIds
on p.Id.ToString() equals r.refId
select new
{
bodyProfile = new
{
rank = string.Empty,
prefix = p.Prefix == null ? string.Empty : p.Prefix,
firstName = p.Firstname == null ? string.Empty : p.Firstname,
lastName = p.Lastname == null ? string.Empty : p.Lastname,
citizenId = p.CitizenId == null ? string.Empty : p.CitizenId,
position = p.positionName == null ? string.Empty : p.positionName,
posLevelId = p.posLevelId == null ? string.Empty : p.posLevelId,
posTypeId = p.posTypeId == null ? string.Empty : p.posTypeId,
email = p.Email == null ? string.Empty : p.Email,
phone = p.Telephone == null ? string.Empty : p.Telephone,
keycloak = string.Empty,
isProbation = true,
isLeave = false,
dateRetire = (DateTime?)null,
dateAppoint = r.commandDateAffect,
dateStart = r.commandDateAffect,
govAgeAbsent = 0,
govAgePlus = 0,
birthDate = (p.DateOfBirth == null || p.DateOfBirth == DateTime.MinValue) ? (DateTime?)null : p.DateOfBirth,
reasonSameDate = (DateTime?)null,
ethnicity = p.Race == null ? string.Empty : p.Race,
telephoneNumber = p.Telephone == null ? string.Empty : p.Telephone,
nationality = p.Nationality == null ? string.Empty : p.Nationality,
gender = p.Gender == null ? string.Empty : p.Gender,
relationship = p.Relationship == null ? string.Empty : p.Relationship,
religion = p.Religion == null ? string.Empty : p.Religion,
bloodGroup = p.BloodGroup,
registrationAddress = string.IsNullOrWhiteSpace(p.RegistAddress) ? string.Empty : p.RegistAddress,
registrationProvinceId = p.RegistProvinceId ?? null,
registrationDistrictId = p.RegistDistrictId ?? null,
registrationSubDistrictId = p.RegistSubDistrictId ?? null,
registrationZipCode = p.RegistZipCode == null ? null : p.RegistZipCode,
currentAddress = p.RegistSame == true
? (string.IsNullOrWhiteSpace(p.RegistAddress) ? string.Empty : p.RegistAddress)
: (string.IsNullOrWhiteSpace(p.CurrentAddress) ? string.Empty : p.CurrentAddress),
currentProvinceId = p.RegistSame == true ? p.RegistProvinceId : p.CurrentProvinceId,
currentDistrictId = p.RegistSame == true ? p.RegistDistrictId : p.CurrentDistrictId,
currentSubDistrictId = p.RegistSame == true ? p.RegistSubDistrictId : p.CurrentSubDistrictId,
currentZipCode = p.RegistSame == true
? p.RegistZipCode == null ? null : p.RegistZipCode
: p.CurrentZipCode == null ? null : p.CurrentZipCode,
amount = r.amount,
amountSpecial = r.amountSpecial,
objectRefId = p.ProfileImg != null && p.ProfileImg?.ObjectRefId != null ? p.ProfileImg?.ObjectRefId.ToString("D") : null,
},
bodyEducations = p.PlacementEducations.Select(e => new
{
profileId = string.Empty,
country = e.Country ?? string.Empty,
degree = e.Degree ?? string.Empty,
duration = e.Duration ?? string.Empty,
durationYear = e.DurationYear ?? null,
field = e.Field ?? string.Empty,
finishDate = e.FinishDate ?? null,
fundName = e.FundName ?? string.Empty,
gpa = e.Gpa ?? string.Empty,
institute = e.Institute ?? string.Empty,
other = e.Other ?? string.Empty,
startDate = e.StartDate ?? null,
endDate = e.EndDate ?? null,
educationLevel = e.EducationLevelName,
educationLevelId = e.EducationLevelId,
positionPath = e.PositionPath?.Name ?? string.Empty,
positionPathId = e.PositionPath?.Id.ToString() ?? string.Empty,
isDate = e.IsDate ?? false,
isEducation = e.IsEducation ?? false,
note = e.Other ?? string.Empty
}).ToList(),
bodyCertificates = p.PlacementCertificates.Select(e => new
{
profileId = string.Empty,
expireDate = e.ExpireDate ?? null,
issueDate = e.IssueDate ?? null,
certificateNo = e.CertificateNo ?? string.Empty,
certificateType = e.CertificateType ?? string.Empty,
issuer = e.Issuer ?? string.Empty
}).ToList(),
bodySalarys = new
{
profileId = p.profileId,
amount = r.amount,
amountSpecial = r.amountSpecial,
positionSalaryAmount = r.positionSalaryAmount,
mouthSalaryAmount = r.mouthSalaryAmount,
positionExecutive = p.PositionExecutive,
positionExecutiveField = p.positionExecutiveField,
positionArea = p.positionArea,
positionType = p.posTypeName,
positionLevel = p.posLevelName,
commandId = r.commandId,
orgRoot = p.root,
orgChild1 = p.child1,
orgChild2 = p.child2,
orgChild3 = p.child3,
orgChild4 = p.child4,
commandNo = r.commandNo,
commandYear = r.commandYear,
posNo = p.posMasterNo?.ToString(),
posNoAbb = p.node == 4 ? $"{p.child4ShortName}" :
p.node == 3 ? $"{p.child3ShortName}" :
p.node == 2 ? $"{p.child2ShortName}" :
p.node == 1 ? $"{p.child1ShortName}" :
p.node == 0 ? $"{p.rootShortName}" : "",
commandDateAffect = r.commandDateAffect,
commandDateSign = r.commandDateSign,
positionName = p.positionName,
commandCode = r.commandCode,
commandName = r.commandName,
remark = r.remark,
},
bodyPosition = new
{
posmasterId = p.posmasterId,
positionId = p.positionId
},
bodyMarry = new
{
marry = p.Marry,
marryPrefix = p.MarryPrefix,
marryFirstName = p.MarryFirstName,
marryLastName = p.MarryLastName,
marryOccupation = p.MarryOccupation,
marryNationality = p.MarryNationality,
},
bodyFather = new
{
fatherPrefix = p.FatherPrefix,
fatherFirstName = p.FatherFirstName,
fatherLastName = p.FatherLastName,
fatherOccupation = p.FatherOccupation,
fatherNationality = p.FatherNationality,
},
bodyMother = new
{
motherPrefix = p.MotherPrefix,
motherFirstName = p.MotherFirstName,
motherLastName = p.MotherLastName,
motherOccupation = p.MotherOccupation,
motherNationality = p.MotherNationality,
},
}).ToList();
var apiUrl = $"{_configuration["API"]}/org/command/excexute/create-officer-profile";
using (var client = new HttpClient())
{
client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", token.Replace("Bearer ", ""));
client.DefaultRequestHeaders.Add("api-key", _configuration["API_KEY"]);
var _req = new HttpRequestMessage(HttpMethod.Post, apiUrl);
var _res = await client.PostAsJsonAsync(apiUrl, new
{
data = resultData
});
var _result = await _res.Content.ReadAsStringAsync();
if (_res.IsSuccessStatusCode)
{
placementProfile.ForEach(profile =>
{
profile.PlacementStatus = "DONE";
if (req.refIds.Length > 0)
{
profile.commandId = req.refIds[0].commandId;
profile.refCommandCode = req.refIds[0].commandCode;
profile.refCommandDate = req.refIds[0].commandDateAffect;
profile.refCommandName = req.refIds[0].commandName;
profile.refCommandNo = $"{req.refIds[0].commandNo}/{req.refIds[0].commandYear.ToThaiYear()}";
profile.templateDoc = req.refIds[0].remark;
}
});
await _context.SaveChangesAsync();
}
}
// // update placementstatus
// placementProfile.ForEach(profile => profile.PlacementStatus = "DONE");
// await _context.SaveChangesAsync();
return Success();
}
catch
{
throw;
}
}
/// <summary>
/// ส่งรายชื่อออกคำสั่ง C-PM-03
/// </summary>
/// <returns></returns>
/// <response code="200"></response>
/// <response code="400">ค่าตัวแปรที่ส่งมาไม่ถูกต้อง</response>
/// <response code="401">ไม่ได้ Login เข้าระบบ</response>
/// <response code="500">เมื่อเกิดข้อผิดพลาดในการทำงาน</response>
[HttpPost("appoint/report")]
public async Task<ActionResult<ResponseObject>> PostReportAppoint([FromBody] ReportPersonRequest req)
{
var placementProfiles = await _context.PlacementProfiles
// .Include(x => x.Placement)
// .ThenInclude(x => x.PlacementType)
.Where(x => req.refIds.Contains(x.Id.ToString()))
// .Where(x => x.Placement!.PlacementType!.Name == "แต่งตั้งข้าราชการ")
// .Where(x => x.typeCommand.Trim().ToUpper() == "APPOIN")
.ToListAsync();
placementProfiles.ForEach(profile => profile.PlacementStatus = req.status.Trim().ToUpper());
placementProfiles.ForEach(profile =>
{
profile.PlacementStatus = req.status.Trim().ToUpper();
profile.typeCommand = "APPOIN";
});
await _context.SaveChangesAsync();
return Success();
}
/// <summary>
/// ลบรายชื่อออกคำสั่ง C-PM-03
/// </summary>
/// <returns></returns>
/// <response code="200"></response>
/// <response code="400">ค่าตัวแปรที่ส่งมาไม่ถูกต้อง</response>
/// <response code="401">ไม่ได้ Login เข้าระบบ</response>
/// <response code="500">เมื่อเกิดข้อผิดพลาดในการทำงาน</response>
[HttpPost("appoint/report/delete")]
public async Task<ActionResult<ResponseObject>> PostReportDeleteAppoint([FromBody] ReportPersonRequest req)
{
var placementProfiles = await _context.PlacementProfiles
.Where(x => req.refIds.Contains(x.Id.ToString()))
// .Where(x => x.PlacementStatus.ToUpper() == "REPORT")
.ToListAsync();
placementProfiles.ForEach(profile => profile.PlacementStatus = "PREPARE-CONTAIN");
await _context.SaveChangesAsync();
return Success();
}
/// <summary>
/// เอกสารแนบท้าย C-PM-03
/// </summary>
/// <param name="id">Record Id ของคำสั่ง</param>
/// <param name="exportType">pdf, docx หรือ xlsx</param>
/// <returns></returns>
/// <response code="200">เมื่อทำการอ่านข้อมูลจาก Relational Database สำเร็จ</response>
/// <response code="401">ไม่ได้ Login เข้าระบบ</response>
/// <response code="500">เมื่อเกิดข้อผิดพลาดในการทำงาน</response>
[HttpPost("appoint/report/attachment")]
[AllowAnonymous]
[ProducesResponseType(StatusCodes.Status200OK)]
[ProducesResponseType(StatusCodes.Status401Unauthorized)]
[ProducesResponseType(StatusCodes.Status500InternalServerError)]
public async Task<ActionResult<ResponseObject>> PostReportAppointAttachment([FromBody] ReportAttachmentRequest req)
{
try
{
var report_data = (from p in _context.PlacementProfiles
.Include(x => x.PlacementEducations)
// .ThenInclude(x => x.PlacementType)
.Where(x => req.refIds.Select(x => x.refId).Contains(x.Id.ToString()))
// .Where(x => x.Placement!.PlacementType!.Name == "แต่งตั้งข้าราชการ")
// .Where(x => x.typeCommand.Trim().ToUpper() == "APPOIN")
.ToList()
join r in req.refIds
on p.Id.ToString() equals r.refId
orderby r.Sequence
select new
{
No = r.Sequence.ToString().ToThaiNumber(),
FullName = $"{r.Prefix}{r.FirstName} {r.LastName}",
// Education = p.PlacementEducations == null || p.PlacementEducations.Count == 0 ? "-" :
// p.PlacementEducations.FirstOrDefault().Degree,
Education = p.PlacementEducations == null || p.PlacementEducations.Count == 0 ? "-" :
$"{p.PlacementEducations.FirstOrDefault().Degree} {p.PlacementEducations.FirstOrDefault().Field}",
OldOc = (p.positionNameOld == null ? "" : $"{p.positionNameOld}\n") +
(p.PositionExecutiveOld == null ? "" : (p.positionExecutiveFieldOld == null ? $"{p.PositionExecutiveOld}\n" : $"{p.PositionExecutiveOld}({p.positionExecutiveFieldOld})\n")) +
(p.child4Old == null ? "" : $"{p.child4Old}\n") +
(p.child3Old == null ? "" : $"{p.child3Old}\n") +
(p.child2Old == null ? "" : $"{p.child2Old}\n") +
(p.child1Old == null ? "" : $"{p.child1Old}\n") +
(p.rootOld == null ? "" : $"{p.rootOld}"),
OldPositionType = p.posTypeNameOld == null ? "-" : p.posTypeNameOld,
OldPositionLevel = p.posLevelNameOld == null ? "-" : p.posLevelNameOld,
OldPositionNumber = p.posMasterNoOld == null ? "-" :
p.nodeOld == "4" ? $"{p.child4ShortNameOld} {p.posMasterNoOld}".ToThaiNumber() :
p.nodeOld == "3" ? $"{p.child3ShortNameOld} {p.posMasterNoOld}".ToThaiNumber() :
p.nodeOld == "2" ? $"{p.child2ShortNameOld} {p.posMasterNoOld}".ToThaiNumber() :
p.nodeOld == "1" ? $"{p.child1ShortNameOld} {p.posMasterNoOld}".ToThaiNumber() :
p.nodeOld == "0" ? $"{p.rootShortNameOld} {p.posMasterNoOld}".ToThaiNumber() : "-",
OldSalary = p.AmountOld == null ? "-" : p.AmountOld.Value.ToNumericNoDecimalText().ToThaiNumber(),
OldPosition = p.positionNameOld == null ? "-" : p.positionNameOld,
NewOc = (p.positionName == null ? "" : $"{p.positionName}\n") +
(p.PositionExecutive == null ? "" : (p.positionExecutiveField == null ? $"{p.PositionExecutive}\n" : $"{p.PositionExecutive}({p.positionExecutiveField})\n")) +
(p.child4 == null ? "" : $"{p.child4}\n") +
(p.child3 == null ? "" : $"{p.child3}\n") +
(p.child2 == null ? "" : $"{p.child2}\n") +
(p.child1 == null ? "" : $"{p.child1}\n") +
(p.root == null ? "" : $"{p.root}"),
NewPosition = p.positionName == null ? "-" : p.positionName,
NewPositionType = p.posTypeName == null ? "-" : p.posTypeName,
NewPositionLevel = p.posLevelName == null ? "-" : p.posLevelName,
NewPositionNumber = p.posMasterNo == null ? "-" :
p.node == 4 ? $"{p.child4ShortName} {p.posMasterNo}".ToThaiNumber() :
p.node == 3 ? $"{p.child3ShortName} {p.posMasterNo}".ToThaiNumber() :
p.node == 2 ? $"{p.child2ShortName} {p.posMasterNo}".ToThaiNumber() :
p.node == 1 ? $"{p.child1ShortName} {p.posMasterNo}".ToThaiNumber() :
p.node == 0 ? $"{p.rootShortName} {p.posMasterNo}".ToThaiNumber() : "-",
NewSalary = r.Amount == null ? "-" : r.Amount.Value.ToNumericNoDecimalText().ToThaiNumber(),
AppointDate = p.ReportingDate == null ? "-" : p.ReportingDate.Value.ToThaiShortDate2().ToThaiNumber(),
CommandExcecuteDate = string.IsNullOrEmpty(r.CommandExcecuteDate.ToString()) ? "-" : r.CommandExcecuteDate.Value.ToThaiShortDate2().ToThaiNumber(),
RemarkHorizontal = r.RemarkHorizontal == null ? "-" : r.RemarkHorizontal.ToThaiNumber(),
RemarkVertical = r.RemarkVertical == null ? "-" : r.RemarkVertical.ToThaiNumber()
}).ToList();
var result = new List<dynamic>();
foreach (var r in report_data)
{
result.Add(r);
string? _null = null;
if (r.RemarkHorizontal != null && r.RemarkHorizontal != "")
{
result.Add(new
{
No = _null,
FullName = r.RemarkHorizontal,
Education = _null,
OldOc = _null,
OldPositionType = _null,
OldPositionLevel = _null,
OldPositionNumber = _null,
OldSalary = _null,
OldPosition = _null,
NewOc = _null,
NewPosition = _null,
NewPositionType = _null,
NewPositionLevel = _null,
NewPositionNumber = _null,
NewSalary = _null,
AppointDate = _null,
CommandExcecuteDate = _null,
RemarkHorizontal = _null,
RemarkVertical = _null,
});
}
}
return Success(result);
}
catch
{
throw;
}
}
/// <summary>
/// ออกคำสั่ง C-PM-03 แต่งตั้งข้าราชการ
/// </summary>
/// <returns></returns>
/// <response code="200"></response>
/// <response code="400">ค่าตัวแปรที่ส่งมาไม่ถูกต้อง</response>
/// <response code="401">ไม่ได้ Login เข้าระบบ</response>
/// <response code="500">เมื่อเกิดข้อผิดพลาดในการทำงาน</response>
[HttpPost("appoint/report/excecute")]
public async Task<ActionResult<ResponseObject>> PostReportExecuteAppoint([FromBody] ReportExecuteRequest req)
{
var data = await _context.PlacementProfiles
.Where(x => req.refIds.Select(x => x.refId).Contains(x.Id.ToString()))
.ToListAsync();
var resultData = (from p in data
join r in req.refIds
on p.Id.ToString() equals r.refId
select new
{
profileId = p.profileId,
amount = r.amount,
amountSpecial = r.amountSpecial,
positionSalaryAmount = r.positionSalaryAmount,
mouthSalaryAmount = r.mouthSalaryAmount,
positionExecutive = p.PositionExecutive,
positionExecutiveField = p.positionExecutiveField,
positionArea = p.positionArea,
positionType = p.posTypeName,
positionLevel = p.posLevelName,
posmasterId = p.posmasterId,
positionId = p.positionId,
commandId = r.commandId,
orgRoot = p.root,
orgChild1 = p.child1,
orgChild2 = p.child2,
orgChild3 = p.child3,
orgChild4 = p.child4,
commandNo = r.commandNo,
commandYear = r.commandYear,
posNo = p.posMasterNo?.ToString(),
posNoAbb = p.node == 4 ? $"{p.child4ShortName}" :
p.node == 3 ? $"{p.child3ShortName}" :
p.node == 2 ? $"{p.child2ShortName}" :
p.node == 1 ? $"{p.child1ShortName}" :
p.node == 0 ? $"{p.rootShortName}" : "",
commandDateAffect = r.commandDateAffect,
commandDateSign = r.commandDateSign,
positionName = p.positionName,
commandCode = r.commandCode,
commandName = r.commandName,
remark = r.remark,
}).ToList();
var baseAPIOrg = _configuration["API"];
var apiUrlOrg = $"{baseAPIOrg}/org/command/excexute/salary-current";
using (var client = new HttpClient())
{
client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", token.Replace("Bearer ", ""));
client.DefaultRequestHeaders.Add("api-key", _configuration["API_KEY"]);
var _res = await client.PostAsJsonAsync(apiUrlOrg, new
{
data = resultData,
});
var _result = await _res.Content.ReadAsStringAsync();
if (_res.IsSuccessStatusCode)
{
data.ForEach(profile => profile.PlacementStatus = "DONE");
await _context.SaveChangesAsync();
}
}
return Success();
}
/// <summary>
/// ส่งรายชื่อออกคำสั่ง C-PM-04
/// </summary>
/// <returns></returns>
/// <response code="200"></response>
/// <response code="400">ค่าตัวแปรที่ส่งมาไม่ถูกต้อง</response>
/// <response code="401">ไม่ได้ Login เข้าระบบ</response>
/// <response code="500">เมื่อเกิดข้อผิดพลาดในการทำงาน</response>
[HttpPost("move/report")]
public async Task<ActionResult<ResponseObject>> PostReportMove([FromBody] ReportPersonRequest req)
{
var placementProfiles = await _context.PlacementProfiles
// .Include(x => x.Placement)
// .ThenInclude(x => x.PlacementType)
.Where(x => req.refIds.Contains(x.Id.ToString()))
// .Where(x => x.Placement!.PlacementType!.Name == "ย้ายข้าราชการ")
// .Where(x => x.typeCommand.Trim().ToUpper() == "MOVE")
.ToListAsync();
placementProfiles.ForEach(profile =>
{
profile.PlacementStatus = req.status.Trim().ToUpper();
profile.typeCommand = "MOVE";
});
await _context.SaveChangesAsync();
return Success();
}
/// <summary>
/// ลบรายชื่อออกคำสั่ง C-PM-04
/// </summary>
/// <returns></returns>
/// <response code="200"></response>
/// <response code="400">ค่าตัวแปรที่ส่งมาไม่ถูกต้อง</response>
/// <response code="401">ไม่ได้ Login เข้าระบบ</response>
/// <response code="500">เมื่อเกิดข้อผิดพลาดในการทำงาน</response>
[HttpPost("move/report/delete")]
public async Task<ActionResult<ResponseObject>> PostReportDeleteMove([FromBody] ReportPersonRequest req)
{
var placementProfiles = await _context.PlacementProfiles
.Where(x => req.refIds.Contains(x.Id.ToString()))
// .Where(x => x.PlacementStatus.ToUpper() == "REPORT")
.ToListAsync();
placementProfiles.ForEach(profile => profile.PlacementStatus = "PREPARE-CONTAIN");
await _context.SaveChangesAsync();
return Success();
}
/// <summary>
/// เอกสารแนบท้าย C-PM-04
/// </summary>
/// <param name="id">Record Id ของคำสั่ง</param>
/// <param name="exportType">pdf, docx หรือ xlsx</param>
/// <returns></returns>
/// <response code="200">เมื่อทำการอ่านข้อมูลจาก Relational Database สำเร็จ</response>
/// <response code="401">ไม่ได้ Login เข้าระบบ</response>
/// <response code="500">เมื่อเกิดข้อผิดพลาดในการทำงาน</response>
[HttpPost("move/report/attachment")]
[AllowAnonymous]
[ProducesResponseType(StatusCodes.Status200OK)]
[ProducesResponseType(StatusCodes.Status401Unauthorized)]
[ProducesResponseType(StatusCodes.Status500InternalServerError)]
public async Task<ActionResult<ResponseObject>> PostReportMoveAttachment([FromBody] ReportAttachmentRequest req)
{
try
{
var report_data = (from p in _context.PlacementProfiles
.Include(x => x.PlacementEducations)
// .ThenInclude(x => x.PlacementType)
.Where(x => req.refIds.Select(x => x.refId).Contains(x.Id.ToString()))
// .Where(x => x.Placement!.PlacementType!.Name == "แต่งตั้งข้าราชการ")
// .Where(x => x.typeCommand.Trim().ToUpper() == "APPOIN")
.ToList()
join r in req.refIds
on p.Id.ToString() equals r.refId
orderby r.Sequence
select new
{
No = r.Sequence.ToString().ToThaiNumber(),
FullName = $"{r.Prefix}{r.FirstName} {r.LastName}",
// Education = p.PlacementEducations == null || p.PlacementEducations.Count == 0 ? "-" :
// p.PlacementEducations.FirstOrDefault().Degree,
Education = p.PlacementEducations == null || p.PlacementEducations.Count == 0 ? "-" :
$"{p.PlacementEducations.FirstOrDefault().Degree} {p.PlacementEducations.FirstOrDefault().Field}",
OldOc = (p.positionNameOld == null ? "" : $"{p.positionNameOld}\n") +
(p.PositionExecutiveOld == null ? "" : (p.positionExecutiveFieldOld == null ? $"{p.PositionExecutiveOld}\n" : $"{p.PositionExecutiveOld}({p.positionExecutiveFieldOld})\n")) +
(p.child4Old == null ? "" : $"{p.child4Old}\n") +
(p.child3Old == null ? "" : $"{p.child3Old}\n") +
(p.child2Old == null ? "" : $"{p.child2Old}\n") +
(p.child1Old == null ? "" : $"{p.child1Old}\n") +
(p.rootOld == null ? "" : $"{p.rootOld}"),
OldPosition = p.positionNameOld == null ? "-" : p.positionNameOld,
OldPositionType = p.posTypeNameOld == null ? "-" : p.posTypeNameOld,
OldPositionLevel = p.posLevelNameOld == null ? "-" : p.posLevelNameOld,
OldPositionNumber = p.posMasterNoOld == null ? "-" :
p.nodeOld == "4" ? $"{p.child4ShortNameOld} {p.posMasterNoOld}".ToThaiNumber() :
p.nodeOld == "3" ? $"{p.child3ShortNameOld} {p.posMasterNoOld}".ToThaiNumber() :
p.nodeOld == "2" ? $"{p.child2ShortNameOld} {p.posMasterNoOld}".ToThaiNumber() :
p.nodeOld == "1" ? $"{p.child1ShortNameOld} {p.posMasterNoOld}".ToThaiNumber() :
p.nodeOld == "0" ? $"{p.rootShortNameOld} {p.posMasterNoOld}".ToThaiNumber() : "-",
OldSalary = p.AmountOld == null ? "-" : p.AmountOld.Value.ToNumericNoDecimalText().ToThaiNumber(),
NewOc = (p.positionName == null ? "" : $"{p.positionName}\n") +
(p.PositionExecutive == null ? "" : (p.positionExecutiveField == null ? $"{p.PositionExecutive}\n" : $"{p.PositionExecutive}({p.positionExecutiveField})\n")) +
(p.child4 == null ? "" : $"{p.child4}\n") +
(p.child3 == null ? "" : $"{p.child3}\n") +
(p.child2 == null ? "" : $"{p.child2}\n") +
(p.child1 == null ? "" : $"{p.child1}\n") +
(p.root == null ? "" : $"{p.root}"),
NewPosition = p.positionName == null ? "-" : p.positionName,
NewPositionType = p.posTypeName == null ? "-" : p.posTypeName,
NewPositionLevel = p.posLevelName == null ? "-" : p.posLevelName,
NewPositionNumber = p.posMasterNo == null ? "-" :
p.node == 4 ? $"{p.child4ShortName} {p.posMasterNo}".ToThaiNumber() :
p.node == 3 ? $"{p.child3ShortName} {p.posMasterNo}".ToThaiNumber() :
p.node == 2 ? $"{p.child2ShortName} {p.posMasterNo}".ToThaiNumber() :
p.node == 1 ? $"{p.child1ShortName} {p.posMasterNo}".ToThaiNumber() :
p.node == 0 ? $"{p.rootShortName} {p.posMasterNo}".ToThaiNumber() : "-",
NewSalary = r.Amount == null ? "-" : r.Amount.Value.ToNumericNoDecimalText().ToThaiNumber(),
AppointDate = p.ReportingDate == null ? "-" : p.ReportingDate.Value.ToThaiShortDate2().ToThaiNumber(),
CommandExcecuteDate = string.IsNullOrEmpty(r.CommandExcecuteDate.ToString()) ? "-" : r.CommandExcecuteDate.Value.ToThaiShortDate2().ToThaiNumber(),
RemarkHorizontal = r.RemarkHorizontal == null ? "-" : r.RemarkHorizontal.ToThaiNumber(),
RemarkVertical = r.RemarkVertical == null ? "-" : r.RemarkVertical.ToThaiNumber()
}).ToList();
var result = new List<dynamic>();
foreach (var r in report_data)
{
result.Add(r);
string? _null = null;
if (r.RemarkHorizontal != null && r.RemarkHorizontal != "")
{
result.Add(new
{
No = _null,
FullName = r.RemarkHorizontal,
Education = _null,
OldOc = _null,
OldPosition = _null,
OldPositionType = _null,
OldPositionLevel = _null,
OldPositionNumber = _null,
OldSalary = _null,
NewOc = _null,
NewPosition = _null,
NewPositionType = _null,
NewPositionLevel = _null,
NewPositionNumber = _null,
NewSalary = _null,
AppointDate = _null,
CommandExcecuteDate = _null,
RemarkHorizontal = _null,
RemarkVertical = _null,
});
}
}
return Success(result);
}
catch
{
throw;
}
}
/// <summary>
/// ออกคำสั่ง C-PM-04 ย้ายข้าราชการ
/// </summary>
/// <returns></returns>
/// <response code="200"></response>
/// <response code="400">ค่าตัวแปรที่ส่งมาไม่ถูกต้อง</response>
/// <response code="401">ไม่ได้ Login เข้าระบบ</response>
/// <response code="500">เมื่อเกิดข้อผิดพลาดในการทำงาน</response>
[HttpPost("move/report/excecute")]
public async Task<ActionResult<ResponseObject>> PostReportExecuteMove([FromBody] ReportExecuteRequest req)
{
var data = await _context.PlacementProfiles
.Where(x => req.refIds.Select(x => x.refId).Contains(x.Id.ToString()))
.ToListAsync();
var resultData = (from p in data
join r in req.refIds
on p.Id.ToString() equals r.refId
select new
{
profileId = p.profileId,
amount = r.amount,
amountSpecial = r.amountSpecial,
positionSalaryAmount = r.positionSalaryAmount,
mouthSalaryAmount = r.mouthSalaryAmount,
positionExecutive = p.PositionExecutive,
positionExecutiveField = p.positionExecutiveField,
positionArea = p.positionArea,
positionType = p.posTypeName,
positionLevel = p.posLevelName,
posmasterId = p.posmasterId,
positionId = p.positionId,
commandId = r.commandId,
orgRoot = p.root,
orgChild1 = p.child1,
orgChild2 = p.child2,
orgChild3 = p.child3,
orgChild4 = p.child4,
commandNo = r.commandNo,
commandYear = r.commandYear,
posNo = p.posMasterNo?.ToString(),
posNoAbb = p.node == 4 ? $"{p.child4ShortName}" :
p.node == 3 ? $"{p.child3ShortName}" :
p.node == 2 ? $"{p.child2ShortName}" :
p.node == 1 ? $"{p.child1ShortName}" :
p.node == 0 ? $"{p.rootShortName}" : "",
commandDateAffect = r.commandDateAffect,
commandDateSign = r.commandDateSign,
positionName = p.positionName,
commandCode = r.commandCode,
commandName = r.commandName,
remark = r.remark,
}).ToList();
var baseAPIOrg = _configuration["API"];
var apiUrlOrg = $"{baseAPIOrg}/org/command/excexute/salary-current";
using (var client = new HttpClient())
{
client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", token.Replace("Bearer ", ""));
client.DefaultRequestHeaders.Add("api-key", _configuration["API_KEY"]);
var _res = await client.PostAsJsonAsync(apiUrlOrg, new
{
data = resultData,
});
var _result = await _res.Content.ReadAsStringAsync();
if (_res.IsSuccessStatusCode)
{
data.ForEach(profile => profile.PlacementStatus = "DONE");
await _context.SaveChangesAsync();
}
}
return Success();
}
/// <summary>
/// ส่งรายชื่อออกคำสั่ง C-PM-06
/// </summary>
/// <returns></returns>
/// <response code="200"></response>
/// <response code="400">ค่าตัวแปรที่ส่งมาไม่ถูกต้อง</response>
/// <response code="401">ไม่ได้ Login เข้าระบบ</response>
/// <response code="500">เมื่อเกิดข้อผิดพลาดในการทำงาน</response>
[HttpPost("slip/report")]
public async Task<ActionResult<ResponseObject>> PostReportSlip([FromBody] ReportPersonRequest req)
{
var placementProfiles = await _context.PlacementProfiles
.Where(x => req.refIds.Contains(x.Id.ToString()))
.ToListAsync();
placementProfiles.ForEach(profile => profile.PlacementStatus = req.status.Trim().ToUpper());
await _context.SaveChangesAsync();
return Success();
}
/// <summary>
/// ลบรายชื่อออกคำสั่ง C-PM-06
/// </summary>
/// <returns></returns>
/// <response code="200"></response>
/// <response code="400">ค่าตัวแปรที่ส่งมาไม่ถูกต้อง</response>
/// <response code="401">ไม่ได้ Login เข้าระบบ</response>
/// <response code="500">เมื่อเกิดข้อผิดพลาดในการทำงาน</response>
[HttpPost("slip/report/delete")]
public async Task<ActionResult<ResponseObject>> PostReportDeleteSlip([FromBody] ReportPersonRequest req)
{
var placementProfiles = await _context.PlacementProfiles
.Where(x => req.refIds.Contains(x.Id.ToString()))
// .Where(x => x.Status.ToUpper() == "REPORT")
.ToListAsync();
placementProfiles.ForEach(profile => profile.PlacementStatus = "PENDING");
await _context.SaveChangesAsync();
return Success();
}
/// <summary>
/// เอกสารแนบท้าย C-PM-06
/// </summary>
/// <param name="id">Record Id ของคำสั่ง</param>
/// <param name="exportType">pdf, docx หรือ xlsx</param>
/// <returns></returns>
/// <response code="200">เมื่อทำการอ่านข้อมูลจาก Relational Database สำเร็จ</response>
/// <response code="401">ไม่ได้ Login เข้าระบบ</response>
/// <response code="500">เมื่อเกิดข้อผิดพลาดในการทำงาน</response>
[HttpPost("slip/report/attachment")]
[AllowAnonymous]
[ProducesResponseType(StatusCodes.Status200OK)]
[ProducesResponseType(StatusCodes.Status401Unauthorized)]
[ProducesResponseType(StatusCodes.Status500InternalServerError)]
public async Task<ActionResult<ResponseObject>> PostReporSlipAttachment([FromBody] ReportAttachmentRequest req)
{
try
{
var report_data = (from p in _context.PlacementProfiles
.Include(x => x.PlacementEducations)
.Where(x => req.refIds.Select(x => x.refId).Contains(x.Id.ToString()))
.ToList()
join r in req.refIds
on p.Id.ToString() equals r.refId
orderby r.Sequence
select new
{
No = r.Sequence.ToString().ToThaiNumber(),
FullName = $"{r.Prefix}{r.FirstName} {r.LastName}",
// Education = p.PlacementEducations == null || p.PlacementEducations.Count == 0 ? "-" :
// p.PlacementEducations.FirstOrDefault().Degree,
Education = p.PlacementEducations == null || p.PlacementEducations.Count == 0 ? "-" :
$"{p.PlacementEducations.FirstOrDefault().Degree} {p.PlacementEducations.FirstOrDefault().Field}",
OldOc = (p.positionNameOld == null ? "" : $"{p.positionNameOld}\n") +
(p.PositionExecutiveOld == null ? "" : (p.positionExecutiveFieldOld == null ? $"{p.PositionExecutiveOld}\n" : $"{p.PositionExecutiveOld}({p.positionExecutiveFieldOld})\n")) +
(p.child4Old == null ? "" : $"{p.child4Old}\n") +
(p.child3Old == null ? "" : $"{p.child3Old}\n") +
(p.child2Old == null ? "" : $"{p.child2Old}\n") +
(p.child1Old == null ? "" : $"{p.child1Old}\n") +
(p.rootOld == null ? "" : $"{p.rootOld}"),
OldPositionType = p.posTypeNameOld == null ? "-" : p.posTypeNameOld,
OldPositionLevel = p.posLevelNameOld == null ? "-" : p.posLevelNameOld,
OldPositionNumber = p.posMasterNoOld == null ? "-" :
p.nodeOld == "4" ? $"{p.child4ShortNameOld} {p.posMasterNoOld}".ToThaiNumber() :
p.nodeOld == "3" ? $"{p.child3ShortNameOld} {p.posMasterNoOld}".ToThaiNumber() :
p.nodeOld == "2" ? $"{p.child2ShortNameOld} {p.posMasterNoOld}".ToThaiNumber() :
p.nodeOld == "1" ? $"{p.child1ShortNameOld} {p.posMasterNoOld}".ToThaiNumber() :
p.nodeOld == "0" ? $"{p.rootShortNameOld} {p.posMasterNoOld}".ToThaiNumber() : "-",
OldSalary = p.Amount == null ? "-" : p.Amount.Value.ToNumericNoDecimalText().ToThaiNumber(),
LeaveDate = "-",
NewOc = (p.positionName == null ? "" : $"{p.positionName}\n") +
(p.PositionExecutive == null ? "" : (p.positionExecutiveField == null ? $"{p.PositionExecutive}\n" : $"{p.PositionExecutive}({p.positionExecutiveField})\n")) +
(p.child4 == null ? "" : $"{p.child4}\n") +
(p.child3 == null ? "" : $"{p.child3}\n") +
(p.child2 == null ? "" : $"{p.child2}\n") +
(p.child1 == null ? "" : $"{p.child1}\n") +
(p.root == null ? "" : $"{p.root}"),
NewPositionType = p.posTypeName == null ? "-" : p.posTypeName,
NewPositionLevel = p.posLevelName == null ? "-" : p.posLevelName,
NewPositionNumber = p.posMasterNo == null ? "-" :
p.node == 4 ? $"{p.child4ShortName} {p.posMasterNo}".ToThaiNumber() :
p.node == 3 ? $"{p.child3ShortName} {p.posMasterNo}".ToThaiNumber() :
p.node == 2 ? $"{p.child2ShortName} {p.posMasterNo}".ToThaiNumber() :
p.node == 1 ? $"{p.child1ShortName} {p.posMasterNo}".ToThaiNumber() :
p.node == 0 ? $"{p.rootShortName} {p.posMasterNo}".ToThaiNumber() : "-",
NewSalary = r.Amount == null ? "-" : r.Amount.Value.ToNumericNoDecimalText().ToThaiNumber(),
AppointDate = p.ReportingDate == null ? "-" : p.ReportingDate.Value.ToThaiShortDate2().ToThaiNumber(),
RemarkHorizontal = r.RemarkHorizontal == null ? "-" : r.RemarkHorizontal.ToThaiNumber(),
RemarkVertical = r.RemarkVertical == null ? "-" : r.RemarkVertical.ToThaiNumber()
}).ToList();
var result = new List<dynamic>();
foreach (var r in report_data)
{
result.Add(r);
string? _null = null;
if (r.RemarkHorizontal != null && r.RemarkHorizontal != "")
{
result.Add(new
{
No = _null,
FullName = r.RemarkHorizontal,
Education = _null,
OldOc = _null,
OldPositionType = _null,
OldPositionLevel = _null,
OldPositionNumber = _null,
OldSalary = _null,
LeaveDate = _null,
NewOc = _null,
NewPositionType = _null,
NewPositionLevel = _null,
NewPositionNumber = _null,
NewSalary = _null,
AppointDate = _null,
RemarkHorizontal = _null,
RemarkVertical = _null,
});
}
}
return Success(result);
}
catch
{
throw;
}
}
/// <summary>
/// ออกคำสั่ง C-PM-06 เลื่อนข้าราชการ
/// </summary>
/// <returns></returns>
/// <response code="200"></response>
/// <response code="400">ค่าตัวแปรที่ส่งมาไม่ถูกต้อง</response>
/// <response code="401">ไม่ได้ Login เข้าระบบ</response>
/// <response code="500">เมื่อเกิดข้อผิดพลาดในการทำงาน</response>
[HttpPost("slip/report/excecute")]
public async Task<ActionResult<ResponseObject>> PostReportExecuteSlip([FromBody] ReportExecuteRequest req)
{
var data = await _context.PlacementProfiles
.Where(x => req.refIds.Select(x => x.refId).Contains(x.Id.ToString()))
.ToListAsync();
var resultData = (from p in data
join r in req.refIds
on p.Id.ToString() equals r.refId
select new
{
profileId = p.profileId,
amount = r.amount,
amountSpecial = r.amountSpecial,
positionSalaryAmount = r.positionSalaryAmount,
mouthSalaryAmount = r.mouthSalaryAmount,
positionExecutive = p.PositionExecutive,
positionExecutiveField = p.positionExecutiveField,
positionArea = p.positionArea,
positionType = p.posTypeName,
positionLevel = p.posLevelName,
posmasterId = p.posmasterId,
positionId = p.positionId,
commandId = r.commandId,
orgRoot = p.root,
orgChild1 = p.child1,
orgChild2 = p.child2,
orgChild3 = p.child3,
orgChild4 = p.child4,
commandNo = r.commandNo,
commandYear = r.commandYear,
posNo = p.posMasterNo?.ToString(),
posNoAbb = p.node == 4 ? $"{p.child4ShortName}" :
p.node == 3 ? $"{p.child3ShortName}" :
p.node == 2 ? $"{p.child2ShortName}" :
p.node == 1 ? $"{p.child1ShortName}" :
p.node == 0 ? $"{p.rootShortName}" : "",
commandDateAffect = r.commandDateAffect,
commandDateSign = r.commandDateSign,
positionName = p.positionName,
commandCode = r.commandCode,
commandName = r.commandName,
remark = r.remark,
}).ToList();
var baseAPIOrg = _configuration["API"];
var apiUrlOrg = $"{baseAPIOrg}/org/command/excexute/salary-current";
using (var client = new HttpClient())
{
client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", token.Replace("Bearer ", ""));
client.DefaultRequestHeaders.Add("api-key", _configuration["API_KEY"]);
var _res = await client.PostAsJsonAsync(apiUrlOrg, new
{
data = resultData,
});
var _result = await _res.Content.ReadAsStringAsync();
if (_res.IsSuccessStatusCode)
{
data.ForEach(profile => profile.PlacementStatus = "DONE");
await _context.SaveChangesAsync();
}
}
return Success();
}
/// <summary>
/// report1
/// </summary>
/// <returns></returns>
/// <response code="200"></response>
/// <response code="400">ค่าตัวแปรที่ส่งมาไม่ถูกต้อง</response>
/// <response code="401">ไม่ได้ Login เข้าระบบ</response>
/// <response code="500">เมื่อเกิดข้อผิดพลาดในการทำงาน</response>
[HttpGet("report1")]
public async Task<ActionResult<ResponseObject>> report1(string nodeId = "", int? node = null, DateTime? startDate = null, DateTime? endDate = null)
{
var apiUrl = $"{_configuration["API"]}/org/find/node-all";
var data = new object();
var data1 = new List<dynamic>();
var data2 = new List<dynamic>();
using (var client = new HttpClient())
{
client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", token.Replace("Bearer ", ""));
var _req = new HttpRequestMessage(HttpMethod.Post, apiUrl);
var _res = await client.PostAsJsonAsync(apiUrl, new
{
node,
nodeId,
});
var _result = await _res.Content.ReadAsStringAsync();
var orgs = JsonConvert.DeserializeObject<NodeAllRequest>(_result);
if (orgs == null || orgs.result == null)
return Error("ไม่พบหน่วยงานนี้ในระบบ", 404);
int no = 1;
foreach (var item in orgs.result.isRootTrue)
{
var placementProfiles = _context.PlacementProfiles
.Where(x =>
x.CreatedAt.Date >= startDate &&
x.CreatedAt.Date <= endDate &&
(node == 0 ? x.rootDnaId.Contains(item.rootDnaId) : true) &&
(node == 1 ? x.child1DnaId.Contains(item.child1DnaId) : true) &&
(node == 2 ? x.child2DnaId.Contains(item.child2DnaId) : true) &&
(node == 3 ? x.child3DnaId.Contains(item.child3DnaId) : true) &&
(node == 4 ? x.child4DnaId.Contains(item.child4DnaId) : true) &&
x.PlacementStatus.Trim().ToUpper() == "DONE")
.GroupBy(x => x.typeCommand.Trim().ToUpper())
.Select(g => new
{
TypeCommand = g.Key,
Count = g.Count()
})
.ToList();
var placementAppointments = _context.PlacementAppointments
.Where(x =>
x.CreatedAt.Date >= startDate &&
x.CreatedAt.Date <= endDate &&
(node == 0 ? x.rootDnaId.Contains(item.rootDnaId) : true) &&
(node == 1 ? x.child1DnaId.Contains(item.child1DnaId) : true) &&
(node == 2 ? x.child2DnaId.Contains(item.child2DnaId) : true) &&
(node == 3 ? x.child3DnaId.Contains(item.child3DnaId) : true) &&
(node == 4 ? x.child4DnaId.Contains(item.child4DnaId) : true) &&
x.Status.Trim().ToUpper() == "DONE" &&
x.type.Trim().ToUpper() == "OFFICER")
.GroupBy(x => x.typeCommand.Trim().ToUpper())
.Select(g => new
{
TypeCommand = g.Key,
Count = g.Count()
})
.ToList();
var pt_count = _context.PlacementTransfers
.Where(x =>
x.CreatedAt.Date >= startDate &&
x.CreatedAt.Date <= endDate &&
(node == 0 ? x.rootDnaOldId.Contains(item.rootDnaId) : true) &&
(node == 1 ? x.child1DnaOldId.Contains(item.child1DnaId) : true) &&
(node == 2 ? x.child2DnaOldId.Contains(item.child2DnaId) : true) &&
(node == 3 ? x.child3DnaOldId.Contains(item.child3DnaId) : true) &&
(node == 4 ? x.child4DnaOldId.Contains(item.child4DnaId) : true) &&
x.Status.Trim().ToUpper() == "DONE")
.Count();
var pr_count = _context.PlacementReceives
.Where(x =>
x.CreatedAt.Date >= startDate &&
x.CreatedAt.Date <= endDate &&
(node == 0 ? x.rootDnaId.Contains(item.rootDnaId) : true) &&
(node == 1 ? x.child1DnaId.Contains(item.child1DnaId) : true) &&
(node == 2 ? x.child2DnaId.Contains(item.child2DnaId) : true) &&
(node == 3 ? x.child3DnaId.Contains(item.child3DnaId) : true) &&
(node == 4 ? x.child4DnaId.Contains(item.child4DnaId) : true) &&
x.Status.Trim().ToUpper() == "DONE")
.Count();
var po_count = _context.PlacementOfficers
.Where(x =>
x.CreatedAt.Date >= startDate &&
x.CreatedAt.Date <= endDate &&
(node == 0 ? x.rootDnaOldId.Contains(item.rootDnaId) : true) &&
(node == 1 ? x.child1DnaOldId.Contains(item.child1DnaId) : true) &&
(node == 2 ? x.child2DnaOldId.Contains(item.child2DnaId) : true) &&
(node == 3 ? x.child3DnaOldId.Contains(item.child3DnaId) : true) &&
(node == 4 ? x.child4DnaOldId.Contains(item.child4DnaId) : true) &&
x.Status.Trim().ToUpper() == "DONE")
.Count();
var prp_count = _context.PlacementRepatriations
.Where(x =>
x.CreatedAt.Date >= startDate &&
x.CreatedAt.Date <= endDate &&
(node == 0 ? x.rootDnaOldId.Contains(item.rootDnaId) : true) &&
(node == 1 ? x.child1DnaOldId.Contains(item.child1DnaId) : true) &&
(node == 2 ? x.child2DnaOldId.Contains(item.child2DnaId) : true) &&
(node == 3 ? x.child3DnaOldId.Contains(item.child3DnaId) : true) &&
(node == 4 ? x.child4DnaOldId.Contains(item.child4DnaId) : true) &&
x.Status.Trim().ToUpper() == "DONE")
.Count();
var ro_count = _context.RetirementOthers
.Where(x =>
x.CreatedAt.Date >= startDate &&
x.CreatedAt.Date <= endDate &&
(node == 0 ? x.rootDnaOldId.Contains(item.rootDnaId) : true) &&
(node == 1 ? x.child1DnaOldId.Contains(item.child1DnaId) : true) &&
(node == 2 ? x.child2DnaOldId.Contains(item.child2DnaId) : true) &&
(node == 3 ? x.child3DnaOldId.Contains(item.child3DnaId) : true) &&
(node == 4 ? x.child4DnaOldId.Contains(item.child4DnaId) : true) &&
x.Status.Trim().ToUpper() == "DONE")
.Count();
var pp_appoint = placementProfiles.FirstOrDefault(x => x.TypeCommand == "APPOINT")?.Count ?? 0;
var pp_slip = placementProfiles.FirstOrDefault(x => x.TypeCommand == "SLIP")?.Count ?? 0;
var pp_move = placementProfiles.FirstOrDefault(x => x.TypeCommand == "MOVE")?.Count ?? 0;
var pa_appoint = placementAppointments.FirstOrDefault(x => x.TypeCommand == "APPOINT")?.Count ?? 0;
var pa_slip = placementAppointments.FirstOrDefault(x => x.TypeCommand == "SLIP")?.Count ?? 0;
var pa_move = placementAppointments.FirstOrDefault(x => x.TypeCommand == "MOVE")?.Count ?? 0;
data1.Add(new
{
no = no,
rootName = item.name,
pp_appoint = pp_appoint,
pp_slip = pp_slip,
pp_move = pp_move,
pa_appoint = pa_appoint,
pa_slip = pa_slip,
pa_move = pa_move,
pt_count = pt_count,
pr_count = pr_count,
po_count = po_count,
prp_count = prp_count,
ro_count = ro_count,
total = (pp_appoint + pp_slip + pp_move + pa_appoint + pa_slip + pa_move + pt_count + pr_count + po_count + prp_count + ro_count)
});
no++;
}
no = 1;
foreach (var item in orgs.result.isRootFalse)
{
var placementProfiles = _context.PlacementProfiles
.Where(x =>
x.CreatedAt.Date >= startDate &&
x.CreatedAt.Date <= endDate &&
(node == 0 ? x.rootDnaId.Contains(item.rootDnaId) : true) &&
(node == 1 ? x.child1DnaId.Contains(item.child1DnaId) : true) &&
(node == 2 ? x.child2DnaId.Contains(item.child2DnaId) : true) &&
(node == 3 ? x.child3DnaId.Contains(item.child3DnaId) : true) &&
(node == 4 ? x.child4DnaId.Contains(item.child4DnaId) : true) &&
x.PlacementStatus.Trim().ToUpper() == "DONE")
.GroupBy(x => x.typeCommand.Trim().ToUpper())
.Select(g => new
{
TypeCommand = g.Key,
Count = g.Count()
})
.ToList();
var placementAppointments = _context.PlacementAppointments
.Where(x =>
x.CreatedAt.Date >= startDate &&
x.CreatedAt.Date <= endDate &&
(node == 0 ? x.rootDnaId.Contains(item.rootDnaId) : true) &&
(node == 1 ? x.child1DnaId.Contains(item.child1DnaId) : true) &&
(node == 2 ? x.child2DnaId.Contains(item.child2DnaId) : true) &&
(node == 3 ? x.child3DnaId.Contains(item.child3DnaId) : true) &&
(node == 4 ? x.child4DnaId.Contains(item.child4DnaId) : true) &&
x.Status.Trim().ToUpper() == "DONE" &&
x.type.Trim().ToUpper() == "OFFICER")
.GroupBy(x => x.typeCommand.Trim().ToUpper())
.Select(g => new
{
TypeCommand = g.Key,
Count = g.Count()
})
.ToList();
var pt_count = _context.PlacementTransfers
.Where(x =>
x.CreatedAt.Date >= startDate &&
x.CreatedAt.Date <= endDate &&
(node == 0 ? x.rootDnaOldId.Contains(item.rootDnaId) : true) &&
(node == 1 ? x.child1DnaOldId.Contains(item.child1DnaId) : true) &&
(node == 2 ? x.child2DnaOldId.Contains(item.child2DnaId) : true) &&
(node == 3 ? x.child3DnaOldId.Contains(item.child3DnaId) : true) &&
(node == 4 ? x.child4DnaOldId.Contains(item.child4DnaId) : true) &&
x.Status.Trim().ToUpper() == "DONE")
.Count();
var pr_count = _context.PlacementReceives
.Where(x =>
x.CreatedAt.Date >= startDate &&
x.CreatedAt.Date <= endDate &&
(node == 0 ? x.rootDnaId.Contains(item.rootDnaId) : true) &&
(node == 1 ? x.child1DnaId.Contains(item.child1DnaId) : true) &&
(node == 2 ? x.child2DnaId.Contains(item.child2DnaId) : true) &&
(node == 3 ? x.child3DnaId.Contains(item.child3DnaId) : true) &&
(node == 4 ? x.child4DnaId.Contains(item.child4DnaId) : true) &&
x.Status.Trim().ToUpper() == "DONE")
.Count();
var po_count = _context.PlacementOfficers
.Where(x =>
x.CreatedAt.Date >= startDate &&
x.CreatedAt.Date <= endDate &&
(node == 0 ? x.rootDnaOldId.Contains(item.rootDnaId) : true) &&
(node == 1 ? x.child1DnaOldId.Contains(item.child1DnaId) : true) &&
(node == 2 ? x.child2DnaOldId.Contains(item.child2DnaId) : true) &&
(node == 3 ? x.child3DnaOldId.Contains(item.child3DnaId) : true) &&
(node == 4 ? x.child4DnaOldId.Contains(item.child4DnaId) : true) &&
x.Status.Trim().ToUpper() == "DONE")
.Count();
var prp_count = _context.PlacementRepatriations
.Where(x =>
x.CreatedAt.Date >= startDate &&
x.CreatedAt.Date <= endDate &&
(node == 0 ? x.rootDnaOldId.Contains(item.rootDnaId) : true) &&
(node == 1 ? x.child1DnaOldId.Contains(item.child1DnaId) : true) &&
(node == 2 ? x.child2DnaOldId.Contains(item.child2DnaId) : true) &&
(node == 3 ? x.child3DnaOldId.Contains(item.child3DnaId) : true) &&
(node == 4 ? x.child4DnaOldId.Contains(item.child4DnaId) : true) &&
x.Status.Trim().ToUpper() == "DONE")
.Count();
var ro_count = _context.RetirementOthers
.Where(x =>
x.CreatedAt.Date >= startDate &&
x.CreatedAt.Date <= endDate &&
(node == 0 ? x.rootDnaOldId.Contains(item.rootDnaId) : true) &&
(node == 1 ? x.child1DnaOldId.Contains(item.child1DnaId) : true) &&
(node == 2 ? x.child2DnaOldId.Contains(item.child2DnaId) : true) &&
(node == 3 ? x.child3DnaOldId.Contains(item.child3DnaId) : true) &&
(node == 4 ? x.child4DnaOldId.Contains(item.child4DnaId) : true) &&
x.Status.Trim().ToUpper() == "DONE")
.Count();
var pp_appoint = placementProfiles.FirstOrDefault(x => x.TypeCommand == "APPOINT")?.Count ?? 0;
var pp_slip = placementProfiles.FirstOrDefault(x => x.TypeCommand == "APPOIN")?.Count ?? 0;
var pp_move = placementProfiles.FirstOrDefault(x => x.TypeCommand == "MOVE")?.Count ?? 0;
var pa_appoint = placementAppointments.FirstOrDefault(x => x.TypeCommand == "APPOINT")?.Count ?? 0;
var pa_slip = placementAppointments.FirstOrDefault(x => x.TypeCommand == "SLIP")?.Count ?? 0;
var pa_move = placementAppointments.FirstOrDefault(x => x.TypeCommand == "MOVE")?.Count ?? 0;
data2.Add(new
{
no = no,
rootName = item.name,
pp_appoint = pp_appoint,
pp_slip = pp_slip,
pp_move = pp_move,
pa_appoint = pa_appoint,
pa_slip = pa_slip,
pa_move = pa_move,
pt_count = pt_count,
pr_count = pr_count,
po_count = po_count,
prp_count = prp_count,
ro_count = ro_count,
total = (pp_appoint + pp_slip + pp_move + pa_appoint + pa_slip + pa_move + pt_count + pr_count + po_count + prp_count + ro_count)
});
no++;
}
}
data = new
{
template = "reportPlacement01All",
reportName = "xlsx-report",
data = new
{
date = $"ตั้งแต่วันที่ {startDate.Value.Date.ToThaiShortDate().ToThaiNumber()} ถึง {endDate.Value.Date.ToThaiShortDate().ToThaiNumber()}",
dateCurrent = $"ณ วันที่ {DateTime.Now.Date.ToThaiShortDate().ToThaiNumber()}",
data1,
data1Count = new
{
pp_appoint = data1.Where(x => x.pp_appoint > 0).Sum(x => x.pp_appoint),
pp_slip = data1.Where(x => x.pp_slip > 0).Sum(x => x.pp_slip),
pp_move = data1.Where(x => x.pp_move > 0).Sum(x => x.pp_move),
pa_appoint = data1.Where(x => x.pa_appoint > 0).Sum(x => x.pa_appoint),
pa_slip = data1.Where(x => x.pa_slip > 0).Sum(x => x.pa_slip),
pa_move = data1.Where(x => x.pa_move > 0).Sum(x => x.pa_move),
pt_count = data1.Where(x => x.pt_count > 0).Sum(x => x.pt_count),
pr_count = data1.Where(x => x.pr_count > 0).Sum(x => x.pr_count),
po_count = data1.Where(x => x.po_count > 0).Sum(x => x.po_count),
prp_count = data1.Where(x => x.prp_count > 0).Sum(x => x.prp_count),
ro_count = data1.Where(x => x.ro_count > 0).Sum(x => x.ro_count),
total = data1.Where(x => x.total > 0).Sum(x => x.total)
},
data2,
data2Count = new
{
pp_appoint = data2.Where(x => x.pp_appoint > 0).Sum(x => x.pp_appoint),
pp_slip = data2.Where(x => x.pp_slip > 0).Sum(x => x.pp_slip),
pp_move = data2.Where(x => x.pp_move > 0).Sum(x => x.pp_move),
pa_appoint = data2.Where(x => x.pa_appoint > 0).Sum(x => x.pa_appoint),
pa_slip = data2.Where(x => x.pa_slip > 0).Sum(x => x.pa_slip),
pa_move = data2.Where(x => x.pa_move > 0).Sum(x => x.pa_move),
pt_count = data2.Where(x => x.pt_count > 0).Sum(x => x.pt_count),
pr_count = data2.Where(x => x.pr_count > 0).Sum(x => x.pr_count),
po_count = data2.Where(x => x.po_count > 0).Sum(x => x.po_count),
prp_count = data2.Where(x => x.prp_count > 0).Sum(x => x.prp_count),
ro_count = data2.Where(x => x.ro_count > 0).Sum(x => x.ro_count),
total = data2.Where(x => x.total > 0).Sum(x => x.total)
},
sum = new
{
pp_appoint = data1.Where(x => x.pp_appoint > 0).Sum(x => x.pp_appoint) + data2.Where(x => x.pp_appoint > 0).Sum(x => x.pp_appoint),
pp_slip = data1.Where(x => x.pp_slip > 0).Sum(x => x.pp_slip) + data2.Where(x => x.pp_slip > 0).Sum(x => x.pp_slip),
pp_move = data1.Where(x => x.pp_move > 0).Sum(x => x.pp_move) + data2.Where(x => x.pp_move > 0).Sum(x => x.pp_move),
pa_appoint = data1.Where(x => x.pa_appoint > 0).Sum(x => x.pa_appoint) + data2.Where(x => x.pa_appoint > 0).Sum(x => x.pa_appoint),
pa_slip = data1.Where(x => x.pa_slip > 0).Sum(x => x.pa_slip) + data2.Where(x => x.pa_slip > 0).Sum(x => x.pa_slip),
pa_move = data1.Where(x => x.pa_move > 0).Sum(x => x.pa_move) + data2.Where(x => x.pa_move > 0).Sum(x => x.pa_move),
pt_count = data1.Where(x => x.pt_count > 0).Sum(x => x.pt_count) + data2.Where(x => x.pt_count > 0).Sum(x => x.pt_count),
pr_count = data1.Where(x => x.pr_count > 0).Sum(x => x.pr_count) + data2.Where(x => x.pr_count > 0).Sum(x => x.pr_count),
po_count = data1.Where(x => x.po_count > 0).Sum(x => x.po_count) + data2.Where(x => x.po_count > 0).Sum(x => x.po_count),
prp_count = data1.Where(x => x.prp_count > 0).Sum(x => x.prp_count) + data2.Where(x => x.prp_count > 0).Sum(x => x.prp_count),
ro_count = data1.Where(x => x.ro_count > 0).Sum(x => x.ro_count) + data2.Where(x => x.ro_count > 0).Sum(x => x.ro_count),
total = data1.Where(x => x.total > 0).Sum(x => x.total) + data2.Where(x => x.total > 0).Sum(x => x.total)
}
}
};
return Success(data);
}
/// <summary>
/// report2
/// </summary>
/// <returns></returns>
/// <response code="200"></response>
/// <response code="400">ค่าตัวแปรที่ส่งมาไม่ถูกต้อง</response>
/// <response code="401">ไม่ได้ Login เข้าระบบ</response>
/// <response code="500">เมื่อเกิดข้อผิดพลาดในการทำงาน</response>
[HttpGet("report2")]
public async Task<ActionResult<ResponseObject>> report2(string nodeId = "", int? node = null, DateTime? startDate = null, DateTime? endDate = null)
{
var apiUrl = $"{_configuration["API"]}/org/find/node-all";
var data = new object();
var data1 = new List<dynamic>();
var data2 = new List<dynamic>();
using (var client = new HttpClient())
{
client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", token.Replace("Bearer ", ""));
var _req = new HttpRequestMessage(HttpMethod.Post, apiUrl);
var _res = await client.PostAsJsonAsync(apiUrl, new
{
node,
nodeId,
});
var _result = await _res.Content.ReadAsStringAsync();
var orgs = JsonConvert.DeserializeObject<NodeAllRequest>(_result);
if (orgs == null || orgs.result == null)
return Error("ไม่พบหน่วยงานนี้ในระบบ", 404);
int no = 1;
foreach (var item in orgs.result.isRootTrue)
{
var placementAppointments = _context.PlacementAppointments
.Where(x =>
x.CreatedAt.Date >= startDate &&
x.CreatedAt.Date <= endDate &&
(node == 0 ? x.rootDnaId.Contains(item.rootDnaId) : true) &&
(node == 1 ? x.child1DnaId.Contains(item.child1DnaId) : true) &&
(node == 2 ? x.child2DnaId.Contains(item.child2DnaId) : true) &&
(node == 3 ? x.child3DnaId.Contains(item.child3DnaId) : true) &&
(node == 4 ? x.child4DnaId.Contains(item.child4DnaId) : true) &&
x.Status.Trim().ToUpper() == "DONE" &&
x.type.Trim().ToUpper() == "EMPLOYEE")
.GroupBy(x => x.typeCommand.Trim().ToUpper())
.Select(g => new
{
TypeCommand = g.Key,
Count = g.Count()
})
.ToList();
var pae_count = _context.PlacementAppointmentEmployee
.Where(x =>
x.CreatedAt.Date >= startDate &&
x.CreatedAt.Date <= endDate &&
(node == 0 ? x.rootDnaId.Contains(item.rootDnaId) : true) &&
(node == 1 ? x.child1DnaId.Contains(item.child1DnaId) : true) &&
(node == 2 ? x.child2DnaId.Contains(item.child2DnaId) : true) &&
(node == 3 ? x.child3DnaId.Contains(item.child3DnaId) : true) &&
(node == 4 ? x.child4DnaId.Contains(item.child4DnaId) : true))
.Count();
//var pa_appoint = placementAppointments.FirstOrDefault(x => x.TypeCommand == "APPOINT")?.Count ?? 0;
var pa_appoint = pae_count;
var pa_slip = placementAppointments.FirstOrDefault(x => x.TypeCommand == "SLIP")?.Count ?? 0;
var pa_move = placementAppointments.FirstOrDefault(x => x.TypeCommand == "MOVE")?.Count ?? 0;
data1.Add(new
{
no = no,
rootName = item.name,
pa_appoint = pa_appoint,
pa_slip = pa_slip,
pa_move = pa_move,
total = (pa_appoint + pa_slip + pa_move)
});
no++;
}
no = 1;
foreach (var item in orgs.result.isRootFalse)
{
var placementAppointments = _context.PlacementAppointments
.Where(x =>
x.CreatedAt.Date >= startDate &&
x.CreatedAt.Date <= endDate &&
(node == 0 ? x.rootDnaId.Contains(item.rootDnaId) : true) &&
(node == 1 ? x.child1DnaId.Contains(item.child1DnaId) : true) &&
(node == 2 ? x.child2DnaId.Contains(item.child2DnaId) : true) &&
(node == 3 ? x.child3DnaId.Contains(item.child3DnaId) : true) &&
(node == 4 ? x.child4DnaId.Contains(item.child4DnaId) : true) &&
x.Status.Trim().ToUpper() == "DONE" &&
x.type.Trim().ToUpper() == "EMPLOYEE")
.GroupBy(x => x.typeCommand.Trim().ToUpper())
.Select(g => new
{
TypeCommand = g.Key,
Count = g.Count()
})
.ToList();
var pae_count = _context.PlacementAppointmentEmployee
.Where(x =>
x.CreatedAt.Date >= startDate &&
x.CreatedAt.Date <= endDate &&
(node == 0 ? x.rootDnaId.Contains(item.rootDnaId) : true) &&
(node == 1 ? x.child1DnaId.Contains(item.child1DnaId) : true) &&
(node == 2 ? x.child2DnaId.Contains(item.child2DnaId) : true) &&
(node == 3 ? x.child3DnaId.Contains(item.child3DnaId) : true) &&
(node == 4 ? x.child4DnaId.Contains(item.child4DnaId) : true))
.Count();
//var pa_appoint = placementAppointments.FirstOrDefault(x => x.TypeCommand == "APPOINT")?.Count ?? 0;
var pa_appoint = pae_count;
var pa_slip = placementAppointments.FirstOrDefault(x => x.TypeCommand == "SLIP")?.Count ?? 0;
var pa_move = placementAppointments.FirstOrDefault(x => x.TypeCommand == "MOVE")?.Count ?? 0;
data2.Add(new
{
no = no,
rootName = item.name,
pa_appoint = pa_appoint,
pa_slip = pa_slip,
pa_move = pa_move,
total = (pa_appoint + pa_slip + pa_move)
});
no++;
}
}
data = new
{
template = "reportPlacement02All",
reportName = "xlsx-report",
data = new
{
date = $"ตั้งแต่วันที่ {startDate.Value.Date.ToThaiShortDate().ToThaiNumber()} ถึง {endDate.Value.Date.ToThaiShortDate().ToThaiNumber()}",
dateCurrent = $"ณ วันที่ {DateTime.Now.Date.ToThaiShortDate().ToThaiNumber()}",
data1,
data1Count = new
{
pa_appoint = data1.Where(x => x.pa_appoint > 0).Sum(x => x.pa_appoint),
pa_slip = data1.Where(x => x.pa_slip > 0).Sum(x => x.pa_slip),
pa_move = data1.Where(x => x.pa_move > 0).Sum(x => x.pa_move),
total = data1.Where(x => x.total > 0).Sum(x => x.total)
},
data2,
data2Count = new
{
pa_appoint = data2.Where(x => x.pa_appoint > 0).Sum(x => x.pa_appoint),
pa_slip = data2.Where(x => x.pa_slip > 0).Sum(x => x.pa_slip),
pa_move = data2.Where(x => x.pa_move > 0).Sum(x => x.pa_move),
total = data2.Where(x => x.total > 0).Sum(x => x.total)
},
sum = new
{
pa_appoint = data1.Where(x => x.pa_appoint > 0).Sum(x => x.pa_appoint) + data2.Where(x => x.pa_appoint > 0).Sum(x => x.pa_appoint),
pa_slip = data1.Where(x => x.pa_slip > 0).Sum(x => x.pa_slip) + data2.Where(x => x.pa_slip > 0).Sum(x => x.pa_slip),
pa_move = data1.Where(x => x.pa_move > 0).Sum(x => x.pa_move) + data2.Where(x => x.pa_move > 0).Sum(x => x.pa_move),
total = data1.Where(x => x.total > 0).Sum(x => x.total) + data2.Where(x => x.total > 0).Sum(x => x.total)
}
}
};
return Success(data);
}
#region
/// <summary>
/// ใบสมัคร
/// </summary>
/// <param name="Id">Id ผู้สมัคร</param>
/// <param name="exportType">pdf, docx หรือ xlsx</param>
/// <returns></returns>
/// <response code="200">เมื่อทำการอ่านข้อมูลจาก Relational Database สำเร็จ</response>
/// <response code="401">ไม่ได้ Login เข้าระบบ</response>
/// <response code="500">เมื่อเกิดข้อผิดพลาดในการทำงาน</response>
[HttpGet("candidate/{exportType}/{Id}")]
[AllowAnonymous]
public async Task<ActionResult<ResponseObject>> GetExamCandidate([FromRoute] Guid Id, string exportType = "pdf")
{
var candidate = await _service.GetExamCandidateAsync(Id);
var careers = await _service.GetExamCareerCandidateAsync(Id);
var avatar = await _service.GetExamAvatarCandidateAsync(Id);
if (candidate != null)
{
var picContent = avatar == null ? null : await _minIOExamService.ImagesPath(avatar);
var mapData = new
{
Id = candidate.GetType().GetProperty("Id").GetValue(candidate),
AvatarId = candidate.GetType().GetProperty("AvatarId").GetValue(candidate),
PeriodExamName = candidate.GetType().GetProperty("PeriodExamName").GetValue(candidate),
PeriodExamRound = candidate.GetType().GetProperty("PeriodExamRound").GetValue(candidate),
PeriodExamYear = candidate.GetType().GetProperty("PeriodExamYear").GetValue(candidate),
PositionName = candidate.GetType().GetProperty("PositionName").GetValue(candidate),
PositionLevelName = candidate.GetType().GetProperty("PositionLevelName").GetValue(candidate),
FullName = candidate.GetType().GetProperty("FullName").GetValue(candidate),
Nationality = candidate.GetType().GetProperty("Nationality").GetValue(candidate),
Religion = candidate.GetType().GetProperty("Religion").GetValue(candidate),
CitizenId = candidate.GetType().GetProperty("CitizenId").GetValue(candidate),
DateOfBirth = candidate.GetType().GetProperty("DateOfBirth").GetValue(candidate),
Age = candidate.GetType().GetProperty("Age").GetValue(candidate),
EducationLevelExamName = candidate.GetType().GetProperty("EducationLevelExamName").GetValue(candidate),
EducationName = candidate.GetType().GetProperty("EducationName").GetValue(candidate),
EducationMajor = candidate.GetType().GetProperty("EducationMajor").GetValue(candidate),
EducationLocation = candidate.GetType().GetProperty("EducationLocation").GetValue(candidate),
EducationEndDate = candidate.GetType().GetProperty("EducationEndDate").GetValue(candidate),
EducationScores = candidate.GetType().GetProperty("EducationScores").GetValue(candidate),
EducationType = candidate.GetType().GetProperty("EducationType").GetValue(candidate),
EducationLevelHighName = candidate.GetType().GetProperty("EducationLevelHighName").GetValue(candidate),
ExamIdenNumber = candidate.GetType().GetProperty("ExamIdenNumber").GetValue(candidate),
OccupationPositionType = candidate.GetType().GetProperty("OccupationPositionType").GetValue(candidate),
OccupationPosition = candidate.GetType().GetProperty("OccupationPosition").GetValue(candidate),
OccupationSalary = candidate.GetType().GetProperty("OccupationSalary").GetValue(candidate),
OccupationGroup = candidate.GetType().GetProperty("OccupationGroup").GetValue(candidate),
OccupationPile = candidate.GetType().GetProperty("OccupationPile").GetValue(candidate),
OccupationOrg = candidate.GetType().GetProperty("OccupationOrg").GetValue(candidate),
OccupationTelephone = candidate.GetType().GetProperty("OccupationTelephone").GetValue(candidate),
CareersTotal = candidate.GetType().GetProperty("CareersTotal").GetValue(candidate),
RegistAddress = candidate.GetType().GetProperty("RegistAddress").GetValue(candidate),
RegistProvinceName = candidate.GetType().GetProperty("RegistProvinceName").GetValue(candidate),
RegistDistrictName = candidate.GetType().GetProperty("RegistDistrictName").GetValue(candidate),
RegistSubDistrictName = candidate.GetType().GetProperty("RegistSubDistrictName").GetValue(candidate),
RegistZipCode = candidate.GetType().GetProperty("RegistZipCode").GetValue(candidate),
CurrentAddress = candidate.GetType().GetProperty("CurrentAddress").GetValue(candidate),
CurrentProvinceName = candidate.GetType().GetProperty("CurrentProvinceName").GetValue(candidate),
CurrentDistrictName = candidate.GetType().GetProperty("CurrentDistrictName").GetValue(candidate),
CurrentSubDistrictName = candidate.GetType().GetProperty("CurrentSubDistrictName").GetValue(candidate),
CurrentZipCode = candidate.GetType().GetProperty("CurrentZipCode").GetValue(candidate),
Telephone = candidate.GetType().GetProperty("Telephone").GetValue(candidate),
Email = candidate.GetType().GetProperty("Email").GetValue(candidate),
ContactFullName = candidate.GetType().GetProperty("ContactFullName").GetValue(candidate),
ContactRelations = candidate.GetType().GetProperty("ContactRelations").GetValue(candidate),
ContactTel = candidate.GetType().GetProperty("ContactTel").GetValue(candidate),
RegisterDate = candidate.GetType().GetProperty("RegisterDate").GetValue(candidate),
Url = picContent ?? "https://bma-ehr.frappet.synology.me/assets/avatar_user-89f22423.jpg",
Careers = careers,
IsBachelors = candidate.GetType().GetProperty("IsBachelors").GetValue(candidate),
EditorConfirms = candidate.GetType().GetProperty("EditorConfirms").GetValue(candidate)
};
var data = new
{
template = "ผลสอบคัดเลือกรายบุคคล",
reportName = "docx-report",
data = mapData
};
return Success(data);
}
else
{
return NotFound();
}
}
#endregion
}
}