using System.Security.Claims; using BMA.EHR.Application.Repositories; using BMA.EHR.Domain.Common; using BMA.EHR.Domain.Shared; using BMA.EHR.Domain.Models.OrganizationEmployee; using BMA.EHR.Infrastructure.Persistence; using BMA.EHR.OrganizationEmployee.Service.Requests; using Microsoft.AspNetCore.Authorization; using Microsoft.AspNetCore.Mvc; using Swashbuckle.AspNetCore.Annotations; using BMA.EHR.Domain.Models.MetaData; using Microsoft.EntityFrameworkCore; namespace BMA.EHR.OrganizationEmployee.Service.Controllers { [Route("api/v{version:apiVersion}/organization-employee")] [ApiVersion("1.0")] [ApiController] [Produces("application/json")] [Authorize] [SwaggerTag("โครงสร้างตำแหน่งลูกจ้าง")] public class OrganizationEmployeeController : BaseController { private readonly ApplicationDBContext _context; private readonly MinIOService _documentService; private readonly IHttpContextAccessor _httpContextAccessor; public OrganizationEmployeeController(ApplicationDBContext context, MinIOService documentService, IHttpContextAccessor httpContextAccessor) { _context = context; _documentService = documentService; _httpContextAccessor = httpContextAccessor; } #region " Properties " private string? UserId => _httpContextAccessor?.HttpContext?.User?.FindFirst(ClaimTypes.NameIdentifier)?.Value; private string? FullName => _httpContextAccessor?.HttpContext?.User?.FindFirst("name")?.Value; #endregion [HttpGet()] public async Task> Get() { var data = await _context.OrganizationEmployees.Select(x => new { Id = x.Id, Agency = x.Agency, ConditionNote = x.ConditionNote, Department = x.Department, Government = x.Government, IsActive = x.IsActive, IsCondition = x.IsCondition, IsDirector = x.IsDirector, OrganizationUserNote = x.OrganizationUserNote, Qualification = x.Qualification, Pile = x.Pile, PosNo = x.PosNo, PositionCondition = x.PositionCondition, PositionMasterUserNote = x.PositionMasterUserNote, OrganizationOrder = x.OrganizationOrder, OrganizationId = x.Organization == null ? Guid.Parse("00000000-0000-0000-0000-000000000000") : x.Organization.Id, OrganizationFaxId = x.OrganizationFax == null ? Guid.Parse("00000000-0000-0000-0000-000000000000") : x.OrganizationFax.Id, OrganizationLevelId = x.OrganizationLevel == null ? Guid.Parse("00000000-0000-0000-0000-000000000000") : x.OrganizationLevel.Id, OrganizationOrganizationId = x.OrganizationOrganization == null ? Guid.Parse("00000000-0000-0000-0000-000000000000") : x.OrganizationOrganization.Id, OrganizationTelExternalId = x.OrganizationTelExternal == null ? Guid.Parse("00000000-0000-0000-0000-000000000000") : x.OrganizationTelExternal.Id, OrganizationTelInternalId = x.OrganizationTelInternal == null ? Guid.Parse("00000000-0000-0000-0000-000000000000") : x.OrganizationTelInternal.Id, OrganizationTypeId = x.OrganizationType == null ? Guid.Parse("00000000-0000-0000-0000-000000000000") : x.OrganizationType.Id, PositionEmployeeStatusId = x.PositionEmployeeStatus == null ? Guid.Parse("00000000-0000-0000-0000-000000000000") : x.PositionEmployeeStatus.Id, PositionEmployeeLineId = x.PositionEmployeeLine == null ? Guid.Parse("00000000-0000-0000-0000-000000000000") : x.PositionEmployeeLine.Id, PositionEmployeePositionId = x.PositionEmployeePosition == null ? Guid.Parse("00000000-0000-0000-0000-000000000000") : x.PositionEmployeePosition.Id, OrganizationAgencyId = x.OrganizationAgency == null ? Guid.Parse("00000000-0000-0000-0000-000000000000") : x.OrganizationAgency.Id, OrganizationGovernmentAgencyId = x.OrganizationGovernmentAgency == null ? Guid.Parse("00000000-0000-0000-0000-000000000000") : x.OrganizationGovernmentAgency.Id, OrganizationShortNameId = x.OrganizationShortName == null ? Guid.Parse("00000000-0000-0000-0000-000000000000") : x.OrganizationShortName.Id, OrganizationFax = x.OrganizationFax == null ? null : x.OrganizationFax.Name, OrganizationLevel = x.OrganizationLevel == null ? null : x.OrganizationLevel.Name, OrganizationOrganization = x.OrganizationOrganization == null ? null : x.OrganizationOrganization.Name, OrganizationTelExternal = x.OrganizationTelExternal == null ? null : x.OrganizationTelExternal.Name, OrganizationTelInternal = x.OrganizationTelInternal == null ? null : x.OrganizationTelInternal.Name, OrganizationType = x.OrganizationType == null ? null : x.OrganizationType.Name, PositionEmployeeStatus = x.PositionEmployeeStatus == null ? null : x.PositionEmployeeStatus.Name, PositionEmployeeLine = x.PositionEmployeeLine == null ? null : x.PositionEmployeeLine.Name, PositionEmployeePosition = x.PositionEmployeePosition == null ? null : x.PositionEmployeePosition.Name, OrganizationAgencyCode = x.OrganizationShortName == null ? null : x.OrganizationShortName.AgencyCode, OrganizationGovernmentAgencyCode = x.OrganizationShortName == null ? null : x.OrganizationShortName.GovernmentCode, // OrganizationAgency = x.OrganizationAgency == null ? null : x.OrganizationAgency.Name, // OrganizationGovernmentAgency = x.OrganizationGovernmentAgency == null ? null : x.OrganizationGovernmentAgency.Name, OrganizationShortName = x.OrganizationShortName == null ? null : x.OrganizationShortName.Name, PositionEmployeeLevels = x.OrganizationPositionEmployeeLevels.Select(y => new { Id = y.PositionEmployeeLevel == null ? Guid.Parse("00000000-0000-0000-0000-000000000000") : y.PositionEmployeeLevel.Id, Name = y.PositionEmployeeLevel == null ? null : y.PositionEmployeeLevel.Name, }), PositionEmployeePositionSides = x.OrganizationPositionEmployeePositionSides.Select(y => new { Id = y.PositionEmployeePositionSide == null ? Guid.Parse("00000000-0000-0000-0000-000000000000") : y.PositionEmployeePositionSide.Id, Name = y.PositionEmployeePositionSide == null ? null : y.PositionEmployeePositionSide.Name, }), }).ToListAsync(); return Success(data); } [HttpGet("{orgEmployeeId:length(36)}")] public async Task> GetById(Guid orgEmployeeId) { var data = await _context.OrganizationEmployees.Select(x => new { Id = x.Id, Agency = x.Agency, ConditionNote = x.ConditionNote, Department = x.Department, Government = x.Government, IsActive = x.IsActive, IsCondition = x.IsCondition, IsDirector = x.IsDirector, OrganizationUserNote = x.OrganizationUserNote, Qualification = x.Qualification, Pile = x.Pile, PosNo = x.PosNo, PositionCondition = x.PositionCondition, PositionMasterUserNote = x.PositionMasterUserNote, OrganizationOrder = x.OrganizationOrder, OrganizationId = x.Organization == null ? Guid.Parse("00000000-0000-0000-0000-000000000000") : x.Organization.Id, OrganizationFaxId = x.OrganizationFax == null ? Guid.Parse("00000000-0000-0000-0000-000000000000") : x.OrganizationFax.Id, OrganizationLevelId = x.OrganizationLevel == null ? Guid.Parse("00000000-0000-0000-0000-000000000000") : x.OrganizationLevel.Id, OrganizationOrganizationId = x.OrganizationOrganization == null ? Guid.Parse("00000000-0000-0000-0000-000000000000") : x.OrganizationOrganization.Id, OrganizationTelExternalId = x.OrganizationTelExternal == null ? Guid.Parse("00000000-0000-0000-0000-000000000000") : x.OrganizationTelExternal.Id, OrganizationTelInternalId = x.OrganizationTelInternal == null ? Guid.Parse("00000000-0000-0000-0000-000000000000") : x.OrganizationTelInternal.Id, OrganizationTypeId = x.OrganizationType == null ? Guid.Parse("00000000-0000-0000-0000-000000000000") : x.OrganizationType.Id, PositionEmployeeStatusId = x.PositionEmployeeStatus == null ? Guid.Parse("00000000-0000-0000-0000-000000000000") : x.PositionEmployeeStatus.Id, PositionEmployeeLineId = x.PositionEmployeeLine == null ? Guid.Parse("00000000-0000-0000-0000-000000000000") : x.PositionEmployeeLine.Id, PositionEmployeePositionId = x.PositionEmployeePosition == null ? Guid.Parse("00000000-0000-0000-0000-000000000000") : x.PositionEmployeePosition.Id, OrganizationAgencyId = x.OrganizationAgency == null ? Guid.Parse("00000000-0000-0000-0000-000000000000") : x.OrganizationAgency.Id, OrganizationGovernmentAgencyId = x.OrganizationGovernmentAgency == null ? Guid.Parse("00000000-0000-0000-0000-000000000000") : x.OrganizationGovernmentAgency.Id, OrganizationShortNameId = x.OrganizationShortName == null ? Guid.Parse("00000000-0000-0000-0000-000000000000") : x.OrganizationShortName.Id, OrganizationFaxName = x.OrganizationFax == null ? null : x.OrganizationFax.Name, OrganizationLevelName = x.OrganizationLevel == null ? null : x.OrganizationLevel.Name, OrganizationOrganizationName = x.OrganizationOrganization == null ? null : x.OrganizationOrganization.Name, OrganizationTelExternalName = x.OrganizationTelExternal == null ? null : x.OrganizationTelExternal.Name, OrganizationTelInternalName = x.OrganizationTelInternal == null ? null : x.OrganizationTelInternal.Name, OrganizationTypeName = x.OrganizationType == null ? null : x.OrganizationType.Name, PositionEmployeeStatusName = x.PositionEmployeeStatus == null ? null : x.PositionEmployeeStatus.Name, PositionEmployeeLineName = x.PositionEmployeeLine == null ? null : x.PositionEmployeeLine.Name, PositionEmployeePositionName = x.PositionEmployeePosition == null ? null : x.PositionEmployeePosition.Name, OrganizationAgencyName = x.OrganizationShortName == null ? null : x.OrganizationShortName.AgencyCode, OrganizationGovernmentAgencyName = x.OrganizationShortName == null ? null : x.OrganizationShortName.GovernmentCode, // OrganizationAgencyName = x.OrganizationAgency == null ? null : x.OrganizationAgency.Name, // OrganizationGovernmentAgencyName = x.OrganizationGovernmentAgency == null ? null : x.OrganizationGovernmentAgency.Name, OrganizationShortNameName = x.OrganizationShortName == null ? null : x.OrganizationShortName.Name, PositionEmployeeLevels = x.OrganizationPositionEmployeeLevels.Select(y => new { Id = y.PositionEmployeeLevel == null ? Guid.Parse("00000000-0000-0000-0000-000000000000") : y.PositionEmployeeLevel.Id, Name = y.PositionEmployeeLevel == null ? null : y.PositionEmployeeLevel.Name, }), PositionEmployeePositionSides = x.OrganizationPositionEmployeePositionSides.Select(y => new { Id = y.PositionEmployeePositionSide == null ? Guid.Parse("00000000-0000-0000-0000-000000000000") : y.PositionEmployeePositionSide.Id, Name = y.PositionEmployeePositionSide == null ? null : y.PositionEmployeePositionSide.Name, }), }).FirstOrDefaultAsync(x => x.Id == orgEmployeeId); if (data == null) return Error(GlobalMessages.OrganizationEmployeeNotFound, 404); return Success(data); } [HttpPost()] public async Task> Post([FromBody] PersonAddressRequest req) { var positionEmployeeLevel = new List(); foreach (var p in req.PositionEmployeeLevelsId) { var _data = new OrganizationPositionEmployeeLevel { PositionEmployeeLevel = await _context.PositionEmployeeLevels.FindAsync(p), CreatedFullName = FullName ?? "System Administrator", CreatedUserId = UserId ?? "", CreatedAt = DateTime.Now, LastUpdateFullName = FullName ?? "System Administrator", LastUpdateUserId = UserId ?? "", LastUpdatedAt = DateTime.Now, }; positionEmployeeLevel.Add(_data); } var positionEmployeePositionSide = new List(); foreach (var p in req.PositionEmployeePositionSidesId) { var _data = new OrganizationPositionEmployeePositionSide { PositionEmployeePositionSide = await _context.PositionEmployeePositionSides.FindAsync(p), CreatedFullName = FullName ?? "System Administrator", CreatedUserId = UserId ?? "", CreatedAt = DateTime.Now, LastUpdateFullName = FullName ?? "System Administrator", LastUpdateUserId = UserId ?? "", LastUpdatedAt = DateTime.Now, }; positionEmployeePositionSide.Add(_data); } var data = new OrgEmployee { Agency = req.Agency, ConditionNote = req.ConditionNote, Department = req.Department, Government = req.Government, IsActive = req.IsActive, IsCondition = req.IsCondition, IsDirector = req.IsDirector, OrganizationUserNote = req.OrganizationUserNote, Qualification = req.Qualification, Pile = req.Pile, PosNo = req.PosNo, PositionCondition = req.PositionCondition, PositionMasterUserNote = req.PositionMasterUserNote, OrganizationOrder = req.OrganizationOrder, Organization = await _context.Organizations.FindAsync(req.OrganizationId), OrganizationFax = await _context.OrganizationFaxs.FindAsync(req.OrganizationFaxId), OrganizationLevel = await _context.OrganizationLevels.FindAsync(req.OrganizationLevelId), OrganizationOrganization = await _context.OrganizationOrganizations.FindAsync(req.OrganizationOrganizationId), OrganizationTelExternal = await _context.OrganizationTelExternals.FindAsync(req.OrganizationTelExternalId), OrganizationTelInternal = await _context.OrganizationTelInternals.FindAsync(req.OrganizationTelInternalId), OrganizationType = await _context.OrganizationTypes.FindAsync(req.OrganizationTypeId), PositionEmployeeStatus = await _context.PositionEmployeeStatuses.FindAsync(req.PositionEmployeeStatusId), PositionEmployeeLine = await _context.PositionEmployeeLines.FindAsync(req.PositionEmployeeLineId), PositionEmployeePosition = await _context.PositionEmployeePositions.FindAsync(req.PositionEmployeePositionId), OrganizationAgency = await _context.Organizations.FindAsync(req.OrganizationAgencyId), OrganizationGovernmentAgency = await _context.Organizations.FindAsync(req.OrganizationGovernmentAgencyId), OrganizationShortName = await _context.OrganizationShortNames.FindAsync(req.OrganizationShortNameId), OrganizationPositionEmployeeLevels = positionEmployeeLevel, OrganizationPositionEmployeePositionSides = positionEmployeePositionSide, CreatedFullName = FullName ?? "System Administrator", CreatedUserId = UserId ?? "", CreatedAt = DateTime.Now, LastUpdateFullName = FullName ?? "System Administrator", LastUpdateUserId = UserId ?? "", LastUpdatedAt = DateTime.Now, }; await _context.OrganizationEmployees.AddAsync(data); _context.SaveChanges(); return Success("placement"); } [HttpPut("{orgEmployeeId:length(36)}")] public async Task> Put([FromBody] PersonAddressRequest req, Guid orgEmployeeId) { var organizationEmployee = await _context.OrganizationEmployees .Include(x => x.OrganizationPositionEmployeeLevels) .Include(x => x.OrganizationPositionEmployeePositionSides) .FirstOrDefaultAsync(x => x.Id == orgEmployeeId); if (organizationEmployee == null) return Error(GlobalMessages.OrganizationEmployeeNotFound, 404); _context.OrganizationPositionEmployeeLevels.RemoveRange(organizationEmployee.OrganizationPositionEmployeeLevels); _context.OrganizationPositionEmployeePositionSides.RemoveRange(organizationEmployee.OrganizationPositionEmployeePositionSides); var positionEmployeeLevel = new List(); foreach (var p in req.PositionEmployeeLevelsId) { var _data = new OrganizationPositionEmployeeLevel { PositionEmployeeLevel = await _context.PositionEmployeeLevels.FindAsync(p), CreatedFullName = FullName ?? "System Administrator", CreatedUserId = UserId ?? "", CreatedAt = DateTime.Now, LastUpdateFullName = FullName ?? "System Administrator", LastUpdateUserId = UserId ?? "", LastUpdatedAt = DateTime.Now, }; positionEmployeeLevel.Add(_data); } var positionEmployeePositionSide = new List(); foreach (var p in req.PositionEmployeePositionSidesId) { var _data = new OrganizationPositionEmployeePositionSide { PositionEmployeePositionSide = await _context.PositionEmployeePositionSides.FindAsync(p), CreatedFullName = FullName ?? "System Administrator", CreatedUserId = UserId ?? "", CreatedAt = DateTime.Now, LastUpdateFullName = FullName ?? "System Administrator", LastUpdateUserId = UserId ?? "", LastUpdatedAt = DateTime.Now, }; positionEmployeePositionSide.Add(_data); } organizationEmployee.Agency = req.Agency; organizationEmployee.ConditionNote = req.ConditionNote; organizationEmployee.Department = req.Department; organizationEmployee.Government = req.Government; organizationEmployee.IsActive = req.IsActive; organizationEmployee.IsCondition = req.IsCondition; organizationEmployee.IsDirector = req.IsDirector; organizationEmployee.OrganizationUserNote = req.OrganizationUserNote; organizationEmployee.Qualification = req.Qualification; organizationEmployee.Pile = req.Pile; organizationEmployee.PosNo = req.PosNo; organizationEmployee.PositionCondition = req.PositionCondition; organizationEmployee.PositionMasterUserNote = req.PositionMasterUserNote; organizationEmployee.OrganizationOrder = req.OrganizationOrder; organizationEmployee.Organization = await _context.Organizations.FindAsync(req.OrganizationId); organizationEmployee.OrganizationFax = await _context.OrganizationFaxs.FindAsync(req.OrganizationFaxId); organizationEmployee.OrganizationLevel = await _context.OrganizationLevels.FindAsync(req.OrganizationLevelId); organizationEmployee.OrganizationOrganization = await _context.OrganizationOrganizations.FindAsync(req.OrganizationOrganizationId); organizationEmployee.OrganizationTelExternal = await _context.OrganizationTelExternals.FindAsync(req.OrganizationTelExternalId); organizationEmployee.OrganizationTelInternal = await _context.OrganizationTelInternals.FindAsync(req.OrganizationTelInternalId); organizationEmployee.OrganizationType = await _context.OrganizationTypes.FindAsync(req.OrganizationTypeId); organizationEmployee.PositionEmployeeStatus = await _context.PositionEmployeeStatuses.FindAsync(req.PositionEmployeeStatusId); organizationEmployee.PositionEmployeeLine = await _context.PositionEmployeeLines.FindAsync(req.PositionEmployeeLineId); organizationEmployee.PositionEmployeePosition = await _context.PositionEmployeePositions.FindAsync(req.PositionEmployeePositionId); organizationEmployee.OrganizationAgency = await _context.Organizations.FindAsync(req.OrganizationAgencyId); organizationEmployee.OrganizationGovernmentAgency = await _context.Organizations.FindAsync(req.OrganizationGovernmentAgencyId); organizationEmployee.OrganizationShortName = await _context.OrganizationShortNames.FindAsync(req.OrganizationShortNameId); organizationEmployee.OrganizationPositionEmployeeLevels = positionEmployeeLevel; organizationEmployee.OrganizationPositionEmployeePositionSides = positionEmployeePositionSide; organizationEmployee.LastUpdateFullName = FullName ?? "System Administrator"; organizationEmployee.LastUpdateUserId = UserId ?? ""; organizationEmployee.LastUpdatedAt = DateTime.Now; _context.SaveChanges(); return Success("placement"); } [HttpDelete("{orgEmployeeId:length(36)}")] public async Task> Delete(Guid orgEmployeeId) { var organizationEmployee = await _context.OrganizationEmployees .Include(x => x.OrganizationPositionEmployeeLevels) .Include(x => x.OrganizationPositionEmployeePositionSides) .FirstOrDefaultAsync(x => x.Id == orgEmployeeId); if (organizationEmployee == null) return Error(GlobalMessages.OrganizationEmployeeNotFound, 404); _context.OrganizationPositionEmployeeLevels.RemoveRange(organizationEmployee.OrganizationPositionEmployeeLevels); _context.OrganizationPositionEmployeePositionSides.RemoveRange(organizationEmployee.OrganizationPositionEmployeePositionSides); _context.OrganizationEmployees.Remove(organizationEmployee); _context.SaveChanges(); return Success(); } [HttpGet("position/{profileId:length(36)}")] public async Task> GetPositionEmployee(Guid profileId) { var profile = await _context.Profiles.FindAsync(profileId); if (profile == null) return Error(GlobalMessages.DataNotFound, 404); var organizationEmployee = await _context.OrganizationEmployees .Where(x => x.OrganizationEmployeeProfiles.Count() == 0 || (x.OrganizationEmployeeProfiles.Count() > 0 && x.OrganizationEmployeeProfiles.FirstOrDefault().Profile == profile)) .Select(x => new { Id = x.Id, Use = x.OrganizationEmployeeProfiles.Count() == 0 ? false : (x.OrganizationEmployeeProfiles.FirstOrDefault().Profile == profile ? true : false), Agency = x.Agency, ConditionNote = x.ConditionNote, Department = x.Department, Government = x.Government, IsActive = x.IsActive, IsCondition = x.IsCondition, IsDirector = x.IsDirector, OrganizationUserNote = x.OrganizationUserNote, Qualification = x.Qualification, Pile = x.Pile, PosNo = x.PosNo, PositionCondition = x.PositionCondition, PositionMasterUserNote = x.PositionMasterUserNote, OrganizationOrder = x.OrganizationOrder, OrganizationId = x.Organization == null ? Guid.Parse("00000000-0000-0000-0000-000000000000") : x.Organization.Id, OrganizationFaxId = x.OrganizationFax == null ? Guid.Parse("00000000-0000-0000-0000-000000000000") : x.OrganizationFax.Id, OrganizationLevelId = x.OrganizationLevel == null ? Guid.Parse("00000000-0000-0000-0000-000000000000") : x.OrganizationLevel.Id, OrganizationOrganizationId = x.OrganizationOrganization == null ? Guid.Parse("00000000-0000-0000-0000-000000000000") : x.OrganizationOrganization.Id, OrganizationTelExternalId = x.OrganizationTelExternal == null ? Guid.Parse("00000000-0000-0000-0000-000000000000") : x.OrganizationTelExternal.Id, OrganizationTelInternalId = x.OrganizationTelInternal == null ? Guid.Parse("00000000-0000-0000-0000-000000000000") : x.OrganizationTelInternal.Id, OrganizationTypeId = x.OrganizationType == null ? Guid.Parse("00000000-0000-0000-0000-000000000000") : x.OrganizationType.Id, PositionEmployeeStatusId = x.PositionEmployeeStatus == null ? Guid.Parse("00000000-0000-0000-0000-000000000000") : x.PositionEmployeeStatus.Id, PositionEmployeeLineId = x.PositionEmployeeLine == null ? Guid.Parse("00000000-0000-0000-0000-000000000000") : x.PositionEmployeeLine.Id, PositionEmployeePositionId = x.PositionEmployeePosition == null ? Guid.Parse("00000000-0000-0000-0000-000000000000") : x.PositionEmployeePosition.Id, OrganizationAgencyId = x.OrganizationAgency == null ? Guid.Parse("00000000-0000-0000-0000-000000000000") : x.OrganizationAgency.Id, OrganizationGovernmentAgencyId = x.OrganizationGovernmentAgency == null ? Guid.Parse("00000000-0000-0000-0000-000000000000") : x.OrganizationGovernmentAgency.Id, OrganizationShortNameId = x.OrganizationShortName == null ? Guid.Parse("00000000-0000-0000-0000-000000000000") : x.OrganizationShortName.Id, OrganizationFaxName = x.OrganizationFax == null ? null : x.OrganizationFax.Name, OrganizationLevelName = x.OrganizationLevel == null ? null : x.OrganizationLevel.Name, OrganizationOrganizationName = x.OrganizationOrganization == null ? null : x.OrganizationOrganization.Name, OrganizationTelExternalName = x.OrganizationTelExternal == null ? null : x.OrganizationTelExternal.Name, OrganizationTelInternalName = x.OrganizationTelInternal == null ? null : x.OrganizationTelInternal.Name, OrganizationTypeName = x.OrganizationType == null ? null : x.OrganizationType.Name, PositionEmployeeStatusName = x.PositionEmployeeStatus == null ? null : x.PositionEmployeeStatus.Name, PositionEmployeeLineName = x.PositionEmployeeLine == null ? null : x.PositionEmployeeLine.Name, PositionEmployeePositionName = x.PositionEmployeePosition == null ? null : x.PositionEmployeePosition.Name, OrganizationAgencyName = x.OrganizationShortName == null ? null : x.OrganizationShortName.AgencyCode, OrganizationGovernmentAgencyName = x.OrganizationShortName == null ? null : x.OrganizationShortName.GovernmentCode, // OrganizationAgencyName = x.OrganizationAgency == null ? null : x.OrganizationAgency.Name, // OrganizationGovernmentAgencyName = x.OrganizationGovernmentAgency == null ? null : x.OrganizationGovernmentAgency.Name, OrganizationShortNameName = x.OrganizationShortName == null ? null : x.OrganizationShortName.Name, PositionEmployeeLevels = x.OrganizationPositionEmployeeLevels.Select(y => new { Id = y.PositionEmployeeLevel == null ? Guid.Parse("00000000-0000-0000-0000-000000000000") : y.PositionEmployeeLevel.Id, Name = y.PositionEmployeeLevel == null ? null : y.PositionEmployeeLevel.Name, }), PositionEmployeePositionSides = x.OrganizationPositionEmployeePositionSides.Select(y => new { Id = y.PositionEmployeePositionSide == null ? Guid.Parse("00000000-0000-0000-0000-000000000000") : y.PositionEmployeePositionSide.Id, Name = y.PositionEmployeePositionSide == null ? null : y.PositionEmployeePositionSide.Name, }), }) .ToListAsync(); return Success(organizationEmployee); } [HttpPut("position/{profileId:length(36)}")] public async Task> PutPositionEmployee([FromBody] PositionOrgEmployee req, Guid profileId) { var profile = await _context.Profiles.FindAsync(profileId); if (profile == null) return Error(GlobalMessages.DataNotFound, 404); var organizationEmployee = await _context.OrganizationEmployees .Include(x => x.Profile) .FirstOrDefaultAsync(x => x.Id == req.OrganizationEmployeeId); if (organizationEmployee == null) return Error(GlobalMessages.OrganizationEmployeeNotFound, 404); // var organizationEmployeeProfile = await _context.OrganizationEmployees // .Include(x => x.Profile) // .FirstOrDefaultAsync(x => x.Profile == profile); // if (organizationEmployeeProfile != null) // organizationEmployeeProfile.Profile = null; var organizationEmployeeProfileDup = await _context.OrganizationEmployeeProfiles .FirstOrDefaultAsync(x => x.Profile != profile && x.OrgEmployee == organizationEmployee); if (organizationEmployeeProfileDup != null) return Error(GlobalMessages.OrganizationEmployeeDupicate); var organizationEmployeeProfile = await _context.OrganizationEmployeeProfiles .FirstOrDefaultAsync(x => x.Profile == profile); if (organizationEmployeeProfile == null) { var data = new OrganizationEmployeeProfile { OrgEmployee = organizationEmployee, Profile = profile, Status = "PENDING", CreatedFullName = FullName ?? "System Administrator", CreatedUserId = UserId ?? "", CreatedAt = DateTime.Now, LastUpdateFullName = FullName ?? "System Administrator", LastUpdateUserId = UserId ?? "", LastUpdatedAt = DateTime.Now, }; await _context.OrganizationEmployeeProfiles.AddAsync(data); } else { organizationEmployeeProfile.OrgEmployee = organizationEmployee; organizationEmployeeProfile.Status = "PENDING"; organizationEmployeeProfile.CreatedFullName = FullName ?? "System Administrator"; organizationEmployeeProfile.CreatedUserId = UserId ?? ""; organizationEmployeeProfile.CreatedAt = DateTime.Now; organizationEmployeeProfile.LastUpdateFullName = FullName ?? "System Administrator"; organizationEmployeeProfile.LastUpdateUserId = UserId ?? ""; organizationEmployeeProfile.LastUpdatedAt = DateTime.Now; } // organizationEmployee.Profile = profile; // organizationEmployee.IsPublic = false; await _context.SaveChangesAsync(); return Success(); } [HttpGet("position/profile/{profileId:length(36)}")] public async Task> GetPositionEmployeeByProfile(Guid profileId) { var profile = await _context.Profiles.FindAsync(profileId); if (profile == null) return Error(GlobalMessages.DataNotFound, 404); var organizationEmployee = await _context.OrganizationEmployees .Include(x => x.Profile) .Where(x => x.Profile == profile) .Select(x => new { Id = x.Id, Agency = x.Agency, ConditionNote = x.ConditionNote, Department = x.Department, Government = x.Government, IsActive = x.IsActive, IsCondition = x.IsCondition, IsDirector = x.IsDirector, OrganizationUserNote = x.OrganizationUserNote, Qualification = x.Qualification, Pile = x.Pile, PosNo = x.PosNo, PositionCondition = x.PositionCondition, PositionMasterUserNote = x.PositionMasterUserNote, OrganizationOrder = x.OrganizationOrder, OrganizationId = x.Organization == null ? Guid.Parse("00000000-0000-0000-0000-000000000000") : x.Organization.Id, OrganizationFaxId = x.OrganizationFax == null ? Guid.Parse("00000000-0000-0000-0000-000000000000") : x.OrganizationFax.Id, OrganizationLevelId = x.OrganizationLevel == null ? Guid.Parse("00000000-0000-0000-0000-000000000000") : x.OrganizationLevel.Id, OrganizationOrganizationId = x.OrganizationOrganization == null ? Guid.Parse("00000000-0000-0000-0000-000000000000") : x.OrganizationOrganization.Id, OrganizationTelExternalId = x.OrganizationTelExternal == null ? Guid.Parse("00000000-0000-0000-0000-000000000000") : x.OrganizationTelExternal.Id, OrganizationTelInternalId = x.OrganizationTelInternal == null ? Guid.Parse("00000000-0000-0000-0000-000000000000") : x.OrganizationTelInternal.Id, OrganizationTypeId = x.OrganizationType == null ? Guid.Parse("00000000-0000-0000-0000-000000000000") : x.OrganizationType.Id, PositionEmployeeStatusId = x.PositionEmployeeStatus == null ? Guid.Parse("00000000-0000-0000-0000-000000000000") : x.PositionEmployeeStatus.Id, PositionEmployeeLineId = x.PositionEmployeeLine == null ? Guid.Parse("00000000-0000-0000-0000-000000000000") : x.PositionEmployeeLine.Id, PositionEmployeePositionId = x.PositionEmployeePosition == null ? Guid.Parse("00000000-0000-0000-0000-000000000000") : x.PositionEmployeePosition.Id, OrganizationAgencyId = x.OrganizationAgency == null ? Guid.Parse("00000000-0000-0000-0000-000000000000") : x.OrganizationAgency.Id, OrganizationGovernmentAgencyId = x.OrganizationGovernmentAgency == null ? Guid.Parse("00000000-0000-0000-0000-000000000000") : x.OrganizationGovernmentAgency.Id, OrganizationShortNameId = x.OrganizationShortName == null ? Guid.Parse("00000000-0000-0000-0000-000000000000") : x.OrganizationShortName.Id, OrganizationFaxName = x.OrganizationFax == null ? null : x.OrganizationFax.Name, OrganizationLevelName = x.OrganizationLevel == null ? null : x.OrganizationLevel.Name, OrganizationOrganizationName = x.OrganizationOrganization == null ? null : x.OrganizationOrganization.Name, OrganizationTelExternalName = x.OrganizationTelExternal == null ? null : x.OrganizationTelExternal.Name, OrganizationTelInternalName = x.OrganizationTelInternal == null ? null : x.OrganizationTelInternal.Name, OrganizationTypeName = x.OrganizationType == null ? null : x.OrganizationType.Name, PositionEmployeeStatusName = x.PositionEmployeeStatus == null ? null : x.PositionEmployeeStatus.Name, PositionEmployeeLineName = x.PositionEmployeeLine == null ? null : x.PositionEmployeeLine.Name, PositionEmployeePositionName = x.PositionEmployeePosition == null ? null : x.PositionEmployeePosition.Name, OrganizationAgencyName = x.OrganizationShortName == null ? null : x.OrganizationShortName.AgencyCode, OrganizationGovernmentAgencyName = x.OrganizationShortName == null ? null : x.OrganizationShortName.GovernmentCode, // OrganizationAgencyName = x.OrganizationAgency == null ? null : x.OrganizationAgency.Name, // OrganizationGovernmentAgencyName = x.OrganizationGovernmentAgency == null ? null : x.OrganizationGovernmentAgency.Name, OrganizationShortNameName = x.OrganizationShortName == null ? null : x.OrganizationShortName.Name, PositionEmployeeLevels = x.OrganizationPositionEmployeeLevels.Select(y => new { Id = y.PositionEmployeeLevel == null ? Guid.Parse("00000000-0000-0000-0000-000000000000") : y.PositionEmployeeLevel.Id, Name = y.PositionEmployeeLevel == null ? null : y.PositionEmployeeLevel.Name, }), PositionEmployeePositionSides = x.OrganizationPositionEmployeePositionSides.Select(y => new { Id = y.PositionEmployeePositionSide == null ? Guid.Parse("00000000-0000-0000-0000-000000000000") : y.PositionEmployeePositionSide.Id, Name = y.PositionEmployeePositionSide == null ? null : y.PositionEmployeePositionSide.Name, }), }) .FirstOrDefaultAsync(); if (organizationEmployee == null) return Error(GlobalMessages.OrganizationEmployeeNotFound, 404); return Success(organizationEmployee); } /// /// สั่งรายชื่อไปออกคำสั่ง /// /// /// /// ค่าตัวแปรที่ส่งมาไม่ถูกต้อง /// ไม่ได้ Login เข้าระบบ /// เมื่อเกิดข้อผิดพลาดในการทำงาน [HttpPost("report")] public async Task> PostToReport([FromBody] OrganizationEmployeeProfileRequest req) { foreach (var item in req.Id) { var uppdated = await _context.OrganizationEmployeeProfiles .FirstOrDefaultAsync(x => x.Profile.Id == item); if (uppdated == null) continue; uppdated.Status = "REPORT"; uppdated.LastUpdateFullName = FullName ?? "System Administrator"; uppdated.LastUpdateUserId = UserId ?? ""; uppdated.LastUpdatedAt = DateTime.Now; } await _context.SaveChangesAsync(); return Success(); } } }