using BMA.EHR.Application.Repositories; using BMA.EHR.Application.Repositories.MessageQueue; using BMA.EHR.Discipline.Service.Requests; using BMA.EHR.Domain.Common; using BMA.EHR.Domain.Models.Discipline; 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; namespace BMA.EHR.DisciplineResult.Service.Controllers { [Route("api/v{version:apiVersion}/discipline/result")] [ApiVersion("1.0")] [ApiController] [Produces("application/json")] [Authorize] [SwaggerTag("ระบบวินัยเรื่องผลการพิจารณาทางวินัย")] public class DisciplineResultController : BaseController { private readonly DisciplineDbContext _context; private readonly MinIODisciplineService _documentService; private readonly IHttpContextAccessor _httpContextAccessor; public DisciplineResultController(DisciplineDbContext context, MinIODisciplineService documentService, IHttpContextAccessor httpContextAccessor) { // _repository = repository; _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 /// /// list รายการสรุปผลการพิจารณาทางวินัย /// /// /// /// ค่าตัวแปรที่ส่งมาไม่ถูกต้อง /// ไม่ได้ Login เข้าระบบ /// เมื่อเกิดข้อผิดพลาดในการทำงาน [HttpGet()] public async Task> GetDisciplineResult(int page = 1, int pageSize = 25, string keyword = "") { var data_search = (from x in _context.DisciplineDisciplinarys where x.Title.Contains(keyword) // x.DisciplinaryFaultLevel == null ? false : x.DisciplinaryFaultLevel.Contains(keyword) || // x.DisciplinaryCaseFault == null ? false : x.DisciplinaryCaseFault.Contains(keyword) || select x).ToList(); var data = data_search .Select(x => new { Id = x.Id,//id ข้อมูลเรื่องสอบสวน Title = x.Title,//ชื่อเรื่อง RespondentType = x.RespondentType,//ผู้ถูกสืบสวน OffenseDetails = x.OffenseDetails,//ลักษณะความผิด DisciplinaryFaultLevel = x.DisciplinaryFaultLevel,//ระดับโทษความผิด DisciplinaryCaseFault = x.DisciplinaryCaseFault,//กรณีความผิด Status = x.Status,//สถานะหรือผลการสอบสวน CreatedAt = x.CreatedAt,//วันที่สร้างเรื่องสอบสวน }) .Where(x => x.Status == "DONE" || x.Status == "REPORT") .OrderByDescending(x => x.CreatedAt) .Skip((page - 1) * pageSize) .Take(pageSize) .ToList(); return Success(new { data, total = data_search.Count() }); } /// /// get รายการสรุปผลการพิจารณาทางวินัย /// /// /// /// ค่าตัวแปรที่ส่งมาไม่ถูกต้อง /// ไม่ได้ Login เข้าระบบ /// เมื่อเกิดข้อผิดพลาดในการทำงาน [HttpGet("{id:guid}")] public async Task> GetByDisciplineResult(Guid id) { var _data = await _context.DisciplineDisciplinarys .Select(x => new { Id = x.Id,//id ข้อมูลเรื่องสอบสวน IdInvestigate = x.DisciplineInvestigate.Id,//id ข้อมูลเรื่องสืบสวน IdComplaint = x.DisciplineInvestigate.DisciplineComplaint.Id,//id ข้อมูลเรื่องร้องเรียน RespondentType = x.RespondentType,//ผู้ถูกสืบสวน Persons = x.DisciplineDisciplinary_ProfileComplaintInvestigates.Select(p => new { Id = p.Id, Idcard = p.CitizenId, Name = $"{p.Prefix}{p.FirstName} {p.LastName}", Prefix = p.Prefix, FirstName = p.FirstName, LastName = p.LastName, Position = p.Position, PositionLevel = p.PositionLevel, Salary = p.Salary, PersonId = p.PersonId, PosNo = p.PosNo, Organization = p.Organization, Status = p.Status, }),//รายการข้อมูลบุคลผู้ถูกสืบสวน OrganizationId = x.Organization,//id หน่วยงานกรณี type เป็นหน่วยงาน ResultDescription = x.ResultDescription,//สรุปผลการพิจารณา Status = x.Status,//สถานะหรือผลการสอบสวน }) .Where(x => x.Id == id) .FirstOrDefaultAsync(); if (_data == null) return Error(new Exception(GlobalMessages.DataNotFound), (int)StatusCodes.Status404NotFound); return Success(_data); } /// /// แก้ไขรายการสรุปผลการพิจารณาทางวินัย /// /// /// /// ค่าตัวแปรที่ส่งมาไม่ถูกต้อง /// ไม่ได้ Login เข้าระบบ /// เมื่อเกิดข้อผิดพลาดในการทำงาน [HttpPut("{id:guid}")] public async Task> UpdateDisciplineResult([FromBody] DisciplineResultRequest req, Guid id) { var data = await _context.DisciplineDisciplinarys.Where(x => x.Id == id).FirstOrDefaultAsync(); if (data == null) return Error(new Exception(GlobalMessages.DataNotFound), (int)StatusCodes.Status404NotFound); data.ResultDescription = req.resultDescription; data.LastUpdateFullName = FullName ?? "System Administrator"; data.LastUpdateUserId = UserId ?? ""; data.LastUpdatedAt = DateTime.Now; await _context.SaveChangesAsync(); return Success(data.Id); } /// /// สั่งรายชื่อไปออกคำสั่งให้ออกจากราชการไว้ก่อน /// /// /// /// ค่าตัวแปรที่ส่งมาไม่ถูกต้อง /// ไม่ได้ Login เข้าระบบ /// เมื่อเกิดข้อผิดพลาดในการทำงาน [HttpPut("report/{commandTypeId:length(36)}")] public async Task> PostToReport([FromBody] DisciplineProfileRequest req, Guid commandTypeId) { foreach (var item in req.Id) { var uppdated = await _context.DisciplineDisciplinary_ProfileComplaintInvestigates .FirstOrDefaultAsync(x => x.Id == item); if (uppdated == null) continue; uppdated.CommandTypeId = commandTypeId; uppdated.Status = "REPORT"; uppdated.LastUpdateFullName = FullName ?? "System Administrator"; uppdated.LastUpdateUserId = UserId ?? ""; uppdated.LastUpdatedAt = DateTime.Now; } await _context.SaveChangesAsync(); return Success(); } } }