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; using Newtonsoft.Json; using Newtonsoft.Json.Linq; using Microsoft.AspNetCore.Mvc.RazorPages; namespace BMA.EHR.DisciplineDisciplinary.Service.Controllers { [Route("api/v{version:apiVersion}/discipline/disciplinary")] [ApiVersion("1.0")] [ApiController] [Produces("application/json")] [Authorize] [SwaggerTag("ระบบวินัยเรื่องสอบสวน")] public class DisciplineDisciplinaryController : BaseController { private readonly DisciplineDbContext _context; private readonly MinIODisciplineService _documentService; private readonly IHttpContextAccessor _httpContextAccessor; private readonly NotificationRepository _repositoryNoti; private readonly PermissionRepository _permission; public DisciplineDisciplinaryController(DisciplineDbContext context, MinIODisciplineService documentService, NotificationRepository repositoryNoti, IHttpContextAccessor httpContextAccessor, PermissionRepository permission) { // _repository = repository; _context = context; _documentService = documentService; _httpContextAccessor = httpContextAccessor; _repositoryNoti = repositoryNoti; _permission = permission; } #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> GetDisciplineDisciplinary(int page = 1, int pageSize = 25, string keyword = "", string status = "") { var getPermission = await _permission.GetPermissionAPIAsync("LIST", "SYS_DISCIPLINE_INTERROGATE"); var jsonData = JsonConvert.DeserializeObject(getPermission); if (jsonData["status"]?.ToString() != "200") { return Error(jsonData["message"]?.ToString(), StatusCodes.Status403Forbidden); } 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) x.DisciplinaryFaultLevel.Contains(keyword) || x.DisciplinaryCaseFault.Contains(keyword) select x).ToList(); if (status.Trim().ToUpper() != "ALL") data_search = data_search.Where(x => x.Status.Contains(status.Trim().ToUpper())).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,//วันที่สร้างเรื่องสอบสวน DisciplinaryDateStart = x.DisciplinaryDateStart,// DisciplinaryDateEnd = x.DisciplinaryDateEnd,// }) .OrderByDescending(x => x.DisciplinaryDateStart) .Skip((page - 1) * pageSize) .Take(pageSize) .ToList(); return Success(new { data, total = data_search.Count() }); } /// /// list รายการวินัยเรื่องสอบสวน (ค้นหาขั้นสูง) /// /// /// /// ค่าตัวแปรที่ส่งมาไม่ถูกต้อง /// ไม่ได้ Login เข้าระบบ /// เมื่อเกิดข้อผิดพลาดในการทำงาน [HttpPost("advance-search")] public async Task> GetAdvanceSearcDisciplineDisciplinary([FromBody] DisciplineDisciplinaryAdvanceSearcRequest req) { var getPermission = await _permission.GetPermissionAPIAsync("LIST", "SYS_DISCIPLINE_INTERROGATE"); var jsonData = JsonConvert.DeserializeObject(getPermission); if (jsonData["status"]?.ToString() != "200") { return Error(jsonData["message"]?.ToString(), StatusCodes.Status403Forbidden); } var page = req.page <= 0 ? 1 : req.page; var pageSize = req.pageSize <= 0 ? 25 : req.pageSize; var keyword = string.IsNullOrEmpty(req.keyword) ? string.Empty : req.keyword; var status = string.IsNullOrEmpty(req.status) ? string.Empty : req.status; var data_search = (from x in _context.DisciplineDisciplinarys where x.Title.Contains(keyword) || x.DisciplinaryFaultLevel.Contains(keyword) || x.DisciplinaryCaseFault.Contains(keyword) select x).ToList(); if (status.Trim().ToUpper() != "ALL") data_search = data_search.Where(x => x.Status.Contains(status.Trim().ToUpper())).ToList(); if ( (req.disciplinaryDateStart.HasValue && req.disciplinaryDateEnd.HasValue) || (req.dateReceivedStart.HasValue && req.dateReceivedEnd.HasValue) || (!string.IsNullOrEmpty(req.respondentType)) || (!string.IsNullOrEmpty(req.offenseDetails)) || (!string.IsNullOrEmpty(req.disciplinaryFaultLevel)) || (!string.IsNullOrEmpty(req.disciplinaryCaseFault)) ) { data_search = data_search .Where(x => //วันที่รับเรือง (!req.dateReceivedStart.HasValue || !req.dateReceivedEnd.HasValue || (x.DateReceived.HasValue && x.DateReceived.Value.Date <= req.dateReceivedStart.Value.Date && x.DateReceived.Value.Date >= req.dateReceivedEnd.Value.Date)) && //วันที่สอบสวน (!req.disciplinaryDateStart.HasValue || !req.disciplinaryDateEnd.HasValue || (x.DisciplinaryDateStart.HasValue && x.DisciplinaryDateEnd.HasValue && x.DisciplinaryDateStart.Value.Date <= req.disciplinaryDateStart.Value.Date && x.DisciplinaryDateEnd.Value.Date >= req.disciplinaryDateEnd.Value.Date)) && (string.IsNullOrEmpty(req.respondentType) || x.RespondentType == req.respondentType) && (string.IsNullOrEmpty(req.offenseDetails) || x.OffenseDetails == req.offenseDetails) && (string.IsNullOrEmpty(req.disciplinaryFaultLevel) || x.DisciplinaryFaultLevel == req.disciplinaryFaultLevel) && (string.IsNullOrEmpty(req.disciplinaryCaseFault) || (x.DisciplinaryCaseFault?.Contains(req.disciplinaryCaseFault) ?? false)) ) .ToList(); } var query = 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,//สถานะหรือผลการสอบสวน DateReceived = x.DateReceived, //วันที่รับเรื่อง CreatedAt = x.CreatedAt,//วันที่สร้างเรื่องสอบสวน DisciplinaryDateStart = x.DisciplinaryDateStart, //วันที่เริ่มการสอบสวน DisciplinaryDateEnd = x.DisciplinaryDateEnd, //วันที่สิ้นสุดการสอบสวน }); bool desc = req.descending ?? false; if (!string.IsNullOrEmpty(req.sortBy)) { switch (req.sortBy) { case "title": query = desc ? query.OrderByDescending(x => x.Title) : query.OrderBy(x => x.Title); break; case "respondentType": query = desc ? query.OrderByDescending(x => x.RespondentType) : query.OrderBy(x => x.RespondentType); break; case "offenseDetails": query = desc ? query.OrderByDescending(x => x.OffenseDetails) : query.OrderBy(x => x.OffenseDetails); break; case "disciplinaryFaultLevel": query = desc ? query.OrderByDescending(x => x.DisciplinaryFaultLevel) : query.OrderBy(x => x.DisciplinaryFaultLevel); break; case "disciplinaryCaseFault": query = desc ? query.OrderByDescending(x => x.DisciplinaryCaseFault) : query.OrderBy(x => x.DisciplinaryCaseFault); break; case "status": query = desc ? query.OrderByDescending(x => x.Status) : query.OrderBy(x => x.Status); break; case "dateReceived": query = desc ? query.OrderByDescending(x => x.DateReceived) : query.OrderBy(x => x.DateReceived); break; case "createdAt": query = desc ? query.OrderByDescending(x => x.CreatedAt) : query.OrderBy(x => x.CreatedAt); break; case "disciplinaryDateStart": query = desc ? query.OrderByDescending(x => x.DisciplinaryDateStart) : query.OrderBy(x => x.DisciplinaryDateStart); break; case "disciplinaryDateEnd": query = desc ? query.OrderByDescending(x => x.DisciplinaryDateEnd) : query.OrderBy(x => x.DisciplinaryDateEnd); break; default: query = query.OrderByDescending(x => x.DisciplinaryDateStart); break; } } var data = query .Skip((page - 1) * pageSize) .Take(pageSize) .ToList(); return Success(new { data, total = data_search.Count() }); } /// /// get รายการวินัยเรื่องสอบสวน /// /// /// /// ค่าตัวแปรที่ส่งมาไม่ถูกต้อง /// ไม่ได้ Login เข้าระบบ /// เมื่อเกิดข้อผิดพลาดในการทำงาน [HttpGet("{page}/{id:guid}")] public async Task> GetByDisciplineDisciplinary(string page, Guid id) { page = page.Trim().ToUpper(); string getPermission; if (page == "MAIN") { getPermission = await _permission.GetPermissionAPIAsync("GET", "SYS_DISCIPLINE_INTERROGATE"); } else if (page == "RESULT") { getPermission = await _permission.GetPermissionAPIAsync("GET", "SYS_DISCIPLINE_RESULT"); } else { getPermission = await _permission.GetPermissionAPIAsync("GET", "SYS_DISCIPLINE_INTERROGATE"); } var jsonData = JsonConvert.DeserializeObject(getPermission); if (jsonData["status"]?.ToString() != "200") { return Error(jsonData["message"]?.ToString(), StatusCodes.Status403Forbidden); } var _data = await _context.DisciplineDisciplinarys .Select(x => new { Id = x.Id,//id ข้อมูลเรื่องสอบสวน IdInvestigate = x.DisciplineInvestigate.Id,//id ข้อมูลเรื่องสืบสวน IdComplaint = x.DisciplineInvestigate.DisciplineComplaint.Id,//id ข้อมูลเรื่องร้องเรียน DisciplinaryWitnesses = x.DisciplinaryWitnesses, DisciplinaryRecordAccuser = x.DisciplinaryRecordAccuser, DisciplinarySummaryEvidence = x.DisciplinarySummaryEvidence, DisciplinaryRefLaw = x.DisciplinaryRefLaw, DisciplinaryFaultLevel = x.DisciplinaryFaultLevel, DisciplinaryInvestigateAt = x.DisciplinaryInvestigateAt, DisciplinaryCaseFault = x.DisciplinaryCaseFault, DisciplinaryDateEvident = x.DisciplinaryDateEvident, DisciplinaryDateAllegation = x.DisciplinaryDateAllegation, DisciplinaryDateStart = x.DisciplinaryDateStart, DisciplinaryDateEnd = x.DisciplinaryDateEnd, DaysExtend = x.DisciplinaryDaysExtend, ExtendStatus = x.DisciplinaryExtendStatus, DisciplinaryDateInvestigation = x.DisciplinaryDateInvestigation, DisciplinaryDateResult = x.DisciplinaryDateResult, DisciplinaryStatusResult = x.DisciplinaryStatusResult, DisciplinaryCauseText = x.DisciplinaryCauseText, DisciplinaryResult = x.DisciplinaryResult, DisciplinaryExtendHistory = x.DisciplineDisciplinaryExtends.Select(e => new { Name = e.Name, Num = e.Num, DaysExtend = e.DaysExtend, DateStart = e.DateStart, DateEnd = e.DateEnd, }), Status = x.Status, Result = x.Result, Director = x.DisciplineDisciplinary_DirectorInvestigates.Select(d => new { Id = d.Id, DirectorId = d.DisciplineDirector.Id, Prefix = d.DisciplineDirector.Prefix, FirstName = d.DisciplineDirector.FirstName, LastName = d.DisciplineDirector.LastName, Position = d.DisciplineDirector.Position, Email = d.DisciplineDirector.Email, Duty = d.Duty, CommandNo = d.CommandNo, Phone = d.DisciplineDirector.Phone, // Total = d.DisciplineDirector.DisciplineDisciplinary_DirectorInvestigates.Count(), }).ToList(), RespondentType = x.RespondentType,//ผู้ถูกสืบสวน Persons = x.DisciplineDisciplinary_ProfileComplaintInvestigates .OrderByDescending(p => p.profileType) .ThenByDescending(p => p.CreatedAt) .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, IsAncestorDNA = p.IsAncestorDNA, Salary = p.Salary, PersonId = p.PersonId, PosNo = p.PosNo, Organization = p.Organization, root = p.root, rootId = p.rootId, rootDnaId = p.rootDnaId, rootShortName = p.rootShortName, child1 = p.child1, child1Id = p.child1Id, child1DnaId = p.child1DnaId, child1ShortName = p.child1ShortName, child2 = p.child2, child2Id = p.child2Id, child2DnaId = p.child2DnaId, child2ShortName = p.child2ShortName, child3 = p.child3, child3Id = p.child3Id, child3DnaId = p.child3DnaId, child3ShortName = p.child3ShortName, child4 = p.child4, child4Id = p.child4Id, child4DnaId = p.child4DnaId, child4ShortName = p.child4ShortName, posMasterNo = p.posMasterNo, posTypeId = p.posTypeId, posTypeName = p.posTypeName, posLevelId = p.posLevelId, posLevelName = p.posLevelName, IsSend = p.IsReport, IsSuspend = p.IsSuspend, Status = p.Status, StatusDiscard = p.StatusDiscard, profileType = p.profileType, CreatedAt = p.CreatedAt, // Report = p.DisciplineReport_Profiles.Count() > 0 ? true : false, }),//รายการข้อมูลบุคลผู้ถูกสืบสวน Organization = x.Organization,//id หน่วยงานกรณี type เป็นหน่วยงาน OrganizationId = x.OrganizationId,//id หน่วยงานกรณี type เป็นหน่วยงาน DisciplinaryFaultLevelOther = x.DisciplinaryFaultLevelOther, DisciplineDisciplinary_DocRelevants = x.DisciplineDisciplinary_DocRelevants.Where(d => d.Document != null).Select(d => new { d.Document.Id, d.Document.FileName }), DisciplineDisciplinary_DocSummaryEvidences = x.DisciplineDisciplinary_DocSummaryEvidences.Where(d => d.Document != null).Select(d => new { d.Document.Id, d.Document.FileName }), DisciplineDisciplinary_DocRecordAccusers = x.DisciplineDisciplinary_DocRecordAccusers.Where(d => d.Document != null).Select(d => new { d.Document.Id, d.Document.FileName }), DisciplineDisciplinary_DocWitnessess = x.DisciplineDisciplinary_DocWitnessess.Where(d => d.Document != null).Select(d => new { d.Document.Id, d.Document.FileName }), DisciplineDisciplinary_DocOthers = x.DisciplineDisciplinary_DocOthers.Where(d => d.Document != null).Select(d => new { d.Document.Id, d.Document.FileName }), }) .Where(x => x.Id == id) .FirstOrDefaultAsync(); if (_data == null) return Error(new Exception(GlobalMessages.DataNotFound), (int)StatusCodes.Status404NotFound); var disciplineDisciplinary_DocRelevants = new List(); foreach (var doc in _data.DisciplineDisciplinary_DocRelevants) { var _doc = new { doc.Id, doc.FileName, PathName = await _documentService.ImagesPath(doc.Id) }; disciplineDisciplinary_DocRelevants.Add(_doc); } var disciplineDisciplinary_DocSummaryEvidences = new List(); foreach (var doc in _data.DisciplineDisciplinary_DocSummaryEvidences) { var _doc = new { doc.Id, doc.FileName, PathName = await _documentService.ImagesPath(doc.Id) }; disciplineDisciplinary_DocSummaryEvidences.Add(_doc); } var disciplineDisciplinary_DocRecordAccusers = new List(); foreach (var doc in _data.DisciplineDisciplinary_DocRecordAccusers) { var _doc = new { doc.Id, doc.FileName, PathName = await _documentService.ImagesPath(doc.Id) }; disciplineDisciplinary_DocRecordAccusers.Add(_doc); } var disciplineDisciplinary_DocWitnessess = new List(); foreach (var doc in _data.DisciplineDisciplinary_DocWitnessess) { var _doc = new { doc.Id, doc.FileName, PathName = await _documentService.ImagesPath(doc.Id) }; disciplineDisciplinary_DocWitnessess.Add(_doc); } var disciplineDisciplinary_DocOthers = new List(); foreach (var doc in _data.DisciplineDisciplinary_DocOthers) { var _doc = new { doc.Id, doc.FileName, PathName = await _documentService.ImagesPath(doc.Id) }; disciplineDisciplinary_DocOthers.Add(_doc); } var data = new { _data.Id, _data.IdInvestigate, _data.IdComplaint, _data.DisciplinaryWitnesses, _data.DisciplinaryRecordAccuser, _data.DisciplinarySummaryEvidence, _data.DisciplinaryRefLaw, _data.DisciplinaryFaultLevel, _data.DisciplinaryInvestigateAt, _data.DisciplinaryCaseFault, _data.DisciplinaryDateEvident, _data.DisciplinaryDateAllegation, _data.DisciplinaryDateStart, _data.DisciplinaryDateEnd, _data.DaysExtend, _data.ExtendStatus, _data.DisciplinaryDateInvestigation, _data.DisciplinaryDateResult, _data.DisciplinaryStatusResult, _data.DisciplinaryCauseText, _data.DisciplinaryResult, _data.DisciplinaryExtendHistory, _data.Status, _data.Result, _data.Director, _data.RespondentType, _data.Persons, _data.Organization, _data.OrganizationId, _data.DisciplinaryFaultLevelOther, disciplineDisciplinary_DocRelevants, disciplineDisciplinary_DocSummaryEvidences, disciplineDisciplinary_DocRecordAccusers, disciplineDisciplinary_DocWitnessess, disciplineDisciplinary_DocOthers, }; return Success(data); } /// /// แก้ไขรายการวินัยเรื่องสอบสวน /// /// /// /// ค่าตัวแปรที่ส่งมาไม่ถูกต้อง /// ไม่ได้ Login เข้าระบบ /// เมื่อเกิดข้อผิดพลาดในการทำงาน [HttpPut("{id:guid}")] public async Task> UpdateDisciplineDisciplinary([FromBody] DisciplineDisciplinaryRequest req, Guid id) { var getPermission = await _permission.GetPermissionAPIAsync("UPDATE", "SYS_DISCIPLINE_INTERROGATE"); var jsonData = JsonConvert.DeserializeObject(getPermission); if (jsonData["status"]?.ToString() != "200") { return Error(jsonData["message"]?.ToString(), StatusCodes.Status403Forbidden); } var data = await _context.DisciplineDisciplinarys .Include(x => x.DisciplineDisciplinary_DirectorInvestigates) .ThenInclude(x => x.DisciplineDirector) .Include(x => x.DisciplineDisciplinary_ProfileComplaintInvestigates) .Include(x => x.DisciplineDisciplinaryExtends) .Where(x => x.Id == id) .FirstOrDefaultAsync(); if (data == null) return Error(new Exception(GlobalMessages.DataNotFound), (int)StatusCodes.Status404NotFound); if (data.Status.Trim().ToUpper() != "NEW") return Error(new Exception("ไม่สามารถแก้ไขข้อมูลนี้ได้"), (int)StatusCodes.Status500InternalServerError); var editExtend = false; if (data.DisciplinaryDateEnd != req.DisciplinaryDateEnd) editExtend = true; data.DisciplinaryWitnesses = req.DisciplinaryWitnesses; data.DisciplinaryRecordAccuser = req.DisciplinaryRecordAccuser; data.DisciplinarySummaryEvidence = req.DisciplinarySummaryEvidence; data.DisciplinaryRefLaw = req.DisciplinaryRefLaw; data.DisciplinaryFaultLevel = req.DisciplinaryFaultLevel; data.DisciplinaryInvestigateAt = req.DisciplinaryInvestigateAt; data.DisciplinaryCaseFault = req.DisciplinaryCaseFault; data.DisciplinaryDateEvident = req.DisciplinaryDateEvident; data.DisciplinaryDateAllegation = req.DisciplinaryDateAllegation; data.DisciplinaryDateStart = req.DisciplinaryDateStart; data.DisciplinaryDateEnd = req.DisciplinaryDateEnd; data.DisciplinaryDaysExtend = req.DaysExtend; data.DisciplinaryExtendStatus = req.ExtendStatus; data.DisciplinaryDateInvestigation = req.DisciplinaryDateInvestigation; data.DisciplinaryDateResult = req.DisciplinaryDateResult; data.DisciplinaryStatusResult = req.DisciplinaryStatusResult; data.DisciplinaryCauseText = req.DisciplinaryCauseText; data.DisciplinaryResult = req.DisciplinaryResult; data.DisciplinaryFaultLevelOther = req.DisciplinaryFaultLevelOther; data.Result = req.Result; data.LastUpdateFullName = FullName ?? "System Administrator"; data.LastUpdateUserId = UserId ?? ""; data.LastUpdatedAt = DateTime.Now; if (editExtend == true) { var sumExtend = data.DisciplineDisciplinaryExtends.Count(); data.DisciplineDisciplinaryExtends.Add( new DisciplineDisciplinaryExtend { Name = sumExtend > 0 ? "ขยายครั้งที่ " + sumExtend : "วันที่สอบสวน", Num = sumExtend, DaysExtend = data.DisciplinaryDaysExtend, DateStart = sumExtend > 0 && data.DisciplinaryDateEnd != null ? data.DisciplinaryDateEnd.Value.AddDays(data.DisciplinaryDaysExtend == null ? 0 : -(double)data.DisciplinaryDaysExtend + 1) : data.DisciplinaryDateStart, DateEnd = data.DisciplinaryDateEnd, CreatedFullName = FullName ?? "System Administrator", CreatedUserId = UserId ?? "", CreatedAt = DateTime.Now, LastUpdateFullName = FullName ?? "System Administrator", LastUpdateUserId = UserId ?? "", LastUpdatedAt = DateTime.Now, }); } var hisDirector = data.DisciplineDisciplinary_DirectorInvestigates; _context.DisciplineDisciplinary_DirectorInvestigates.RemoveRange(data.DisciplineDisciplinary_DirectorInvestigates); foreach (var item in req.directors) { var director = await _context.DisciplineDirectors.AsQueryable() .FirstOrDefaultAsync(x => x.Id == item); if (director != null) { var isDirector = hisDirector.Where(x => x.DisciplineDirector.Id == director.Id).FirstOrDefault(); data.DisciplineDisciplinary_DirectorInvestigates.Add( new DisciplineDisciplinary_DirectorInvestigate { DisciplineDirector = director, Duty = isDirector == null ? null : isDirector.Duty, CommandNo = isDirector == null ? null : isDirector.CommandNo, CreatedFullName = FullName ?? "System Administrator", CreatedUserId = UserId ?? "", CreatedAt = DateTime.Now, LastUpdateFullName = FullName ?? "System Administrator", LastUpdateUserId = UserId ?? "", LastUpdatedAt = DateTime.Now, } ); } } data.Organization = req.organization; data.OrganizationId = req.organizationId; data.RespondentType = req.respondentType; var hisprofile = data.DisciplineDisciplinary_ProfileComplaintInvestigates; _context.DisciplineDisciplinary_ProfileComplaintInvestigates.RemoveRange(data.DisciplineDisciplinary_ProfileComplaintInvestigates); if (data.RespondentType.Trim().ToUpper() == "PERSON") { foreach (var item in req.persons) { var isReport = hisprofile.Where(x => x.PersonId == item.personId).FirstOrDefault(); var disciplineDisciplinary_ProfileComplaintInvestigate = new DisciplineDisciplinary_ProfileComplaintInvestigate { CitizenId = item.idcard, Prefix = item.prefix, FirstName = item.firstName, LastName = item.lastName, Organization = item.organization, Position = item.position, // PositionLevel = item.positionLevel, IsAncestorDNA = isReport == null ? false : isReport.IsAncestorDNA, Salary = item.salary, PersonId = item.personId, root = item.root, rootId = item.rootId, rootDnaId = item.rootDnaId, rootShortName = item.rootShortName, child1 = item.child1, child1Id = item.child1Id, child1DnaId = item.child1DnaId, child1ShortName = item.child1ShortName, child2 = item.child2, child2Id = item.child2Id, child2DnaId = item.child2DnaId, child2ShortName = item.child2ShortName, child3 = item.child3, child3Id = item.child3Id, child3DnaId = item.child3DnaId, child3ShortName = item.child3ShortName, child4 = item.child4, child4Id = item.child4Id, child4DnaId = item.child4DnaId, child4ShortName = item.child4ShortName, posMasterNo = item.posMasterNo, posTypeId = item.posTypeId, posTypeName = item.posTypeName, posLevelId = item.posLevelId, posLevelName = item.posLevelName, profileType = item.profileType, PosNo = item.posNo, Status = isReport == null ? "NEW" : isReport.Status, StatusDiscard = isReport == null ? "NEW" : isReport.StatusDiscard, IsReport = isReport == null ? "NEW" : isReport.IsReport, IsSuspend = isReport == null ? "NEW" : isReport.IsSuspend, CreatedFullName = FullName ?? "System Administrator", CreatedUserId = UserId ?? "", CreatedAt = DateTime.Now, LastUpdateFullName = FullName ?? "System Administrator", LastUpdateUserId = UserId ?? "", LastUpdatedAt = DateTime.Now, }; data.DisciplineDisciplinary_ProfileComplaintInvestigates.Add(disciplineDisciplinary_ProfileComplaintInvestigate); } } await _context.SaveChangesAsync(); return Success(data.Id); } /// /// ยุติเรื่อง /// /// /// /// ค่าตัวแปรที่ส่งมาไม่ถูกต้อง /// ไม่ได้ Login เข้าระบบ /// เมื่อเกิดข้อผิดพลาดในการทำงาน [HttpGet("reject/{id:guid}")] public async Task> RejectDisciplineDisciplinary(Guid id) { var getWorkflow = await _permission.GetPermissionAPIWorkflowAsync(id.ToString(), "SYS_DISCIPLINE_INTERROGATE"); if (getWorkflow == false) { var getPermission = await _permission.GetPermissionAPIAsync("GET", "SYS_DISCIPLINE_INTERROGATE"); var jsonData = JsonConvert.DeserializeObject(getPermission); if (jsonData["status"]?.ToString() != "200") { return Error(jsonData["message"]?.ToString(), StatusCodes.Status403Forbidden); } } var data = await _context.DisciplineDisciplinarys .Where(x => x.Id == id) .FirstOrDefaultAsync(); if (data == null) return Error(new Exception(GlobalMessages.DataNotFound), (int)StatusCodes.Status404NotFound); if (data.Status.Trim().ToUpper() != "NEW") return Error(new Exception("ไม่สามารถยุติเรื่องได้"), (int)StatusCodes.Status500InternalServerError); if (data.DisciplinaryStatusResult == null || data.DisciplinaryStatusResult.Trim().ToUpper() != "NO_CAUSE") return Error(new Exception("ไม่สามารถยุติเรื่องได้ จะสามารถยุติเรื่องได้ในกรณีผลการสืบสวนไม่มีมูล"), (int)StatusCodes.Status500InternalServerError); data.Status = "STOP"; await _context.SaveChangesAsync(); return Success(); } /// /// ส่งเรื่องสอบสวน /// /// /// /// ค่าตัวแปรที่ส่งมาไม่ถูกต้อง /// ไม่ได้ Login เข้าระบบ /// เมื่อเกิดข้อผิดพลาดในการทำงาน [HttpGet("approve/{id:guid}")] public async Task> ApproveDisciplineDisciplinary(Guid id) { var getWorkflow = await _permission.GetPermissionAPIWorkflowAsync(id.ToString(), "SYS_DISCIPLINE_INTERROGATE"); if (getWorkflow == false) { var getPermission = await _permission.GetPermissionAPIAsync("GET", "SYS_DISCIPLINE_INTERROGATE"); var jsonData = JsonConvert.DeserializeObject(getPermission); if (jsonData["status"]?.ToString() != "200") { return Error(jsonData["message"]?.ToString(), StatusCodes.Status403Forbidden); } } var data = await _context.DisciplineDisciplinarys .Where(x => x.Id == id) .FirstOrDefaultAsync(); if (data == null) return Error(new Exception(GlobalMessages.DataNotFound), (int)StatusCodes.Status404NotFound); if (data.Status.Trim().ToUpper() != "NEW") return Error(new Exception("ไม่สามารถเสร็จสิ้นสอบสวนได้"), (int)StatusCodes.Status500InternalServerError); data.Status = "DONE"; await _context.SaveChangesAsync(); return Success(); } /// /// ยกเลิกการยุติเรื่อง /// /// /// /// ค่าตัวแปรที่ส่งมาไม่ถูกต้อง /// ไม่ได้ Login เข้าระบบ /// เมื่อเกิดข้อผิดพลาดในการทำงาน [HttpGet("resume/{id:guid}")] public async Task> ResumeDisciplineDisciplinary(Guid id) { var getWorkflow = await _permission.GetPermissionAPIWorkflowAsync(id.ToString(), "SYS_DISCIPLINE_INTERROGATE"); if (getWorkflow == false) { var getPermission = await _permission.GetPermissionAPIAsync("GET", "SYS_DISCIPLINE_INTERROGATE"); var jsonData = JsonConvert.DeserializeObject(getPermission); if (jsonData["status"]?.ToString() != "200") { return Error(jsonData["message"]?.ToString(), StatusCodes.Status403Forbidden); } } var data = await _context.DisciplineDisciplinarys .Where(x => x.Id == id) .FirstOrDefaultAsync(); if (data == null) return Error(new Exception(GlobalMessages.DataNotFound), (int)StatusCodes.Status404NotFound); if (data.Status.Trim().ToUpper() != "STOP") return Error(new Exception("รายการนี้ยังไม่ถูกยุติเรื่อง"), (int)StatusCodes.Status500InternalServerError); data.Status = "NEW"; await _context.SaveChangesAsync(); return Success(); } /// /// อัพไฟล์เอกสารสืบสวนวินัย /// /// /// /// ค่าตัวแปรที่ส่งมาไม่ถูกต้อง /// ไม่ได้ Login เข้าระบบ /// เมื่อเกิดข้อผิดพลาดในการทำงาน [HttpPut("file/{id:guid}")] public async Task> UploadFileDisciplineDisciplinaryInvestigate([FromForm] DisciplineFileRequest 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); if (data.Status.Trim().ToUpper() != "NEW") return Error(new Exception("ไม่สามารถแก้ไขข้อมูลนี้ได้"), (int)StatusCodes.Status500InternalServerError); 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 disciplineDisciplinary_DocInvestigate = new DisciplineDisciplinary_DocInvestigate { DisciplineDisciplinary = data, Document = _doc, CreatedFullName = FullName ?? "System Administrator", CreatedUserId = UserId ?? "", CreatedAt = DateTime.Now, LastUpdateFullName = FullName ?? "System Administrator", LastUpdateUserId = UserId ?? "", LastUpdatedAt = DateTime.Now, }; await _context.DisciplineDisciplinary_DocInvestigates.AddAsync(disciplineDisciplinary_DocInvestigate); } } } await _context.SaveChangesAsync(); return Success(); } /// /// ลบไฟล์เอกสารสืบสวนวินัย /// /// /// /// ค่าตัวแปรที่ส่งมาไม่ถูกต้อง /// ไม่ได้ Login เข้าระบบ /// เมื่อเกิดข้อผิดพลาดในการทำงาน [HttpDelete("file/{id:guid}/{docId:guid}")] public async Task> DeleteFileDisciplineDisciplinaryInvestigate(Guid id, Guid docId) { var data = await _context.DisciplineDisciplinarys .Include(x => x.DisciplineDisciplinary_DocInvestigates) .ThenInclude(x => x.Document) .Include(x => x.DisciplineInvestigate) .ThenInclude(x => x.DisciplineInvestigate_Docs) .ThenInclude(x => x.Document) .Where(x => x.Id == id) .FirstOrDefaultAsync(); if (data == null) return Error(new Exception(GlobalMessages.DataNotFound), (int)StatusCodes.Status404NotFound); if (data.Status.Trim().ToUpper() != "NEW") return Error(new Exception("ไม่สามารถแก้ไขข้อมูลนี้ได้"), (int)StatusCodes.Status500InternalServerError); var dataDoc = data.DisciplineDisciplinary_DocInvestigates.Where(x => x.Document.Id == docId).FirstOrDefault(); if (dataDoc != null) { _context.DisciplineDisciplinary_DocInvestigates.Remove(dataDoc); await _context.SaveChangesAsync(); var dataDocComplaint = data.DisciplineInvestigate.DisciplineInvestigate_Docs.Where(x => x.Document.Id == docId).FirstOrDefault(); if (dataDocComplaint == null) { await _documentService.DeleteFileAsync(docId); await _context.SaveChangesAsync(); } return Success(); } else { return Error(new Exception("ไม่พบไฟล์นี้ในระบบ"), (int)StatusCodes.Status404NotFound); } } /// /// อัพไฟล์เอกสารร้องเรียนวินัย /// /// /// /// ค่าตัวแปรที่ส่งมาไม่ถูกต้อง /// ไม่ได้ Login เข้าระบบ /// เมื่อเกิดข้อผิดพลาดในการทำงาน [HttpPut("complaint/file/{id:guid}")] public async Task> UploadFileDisciplineDisciplinaryComplaint([FromForm] DisciplineFileRequest 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); if (data.Status.Trim().ToUpper() != "NEW") return Error(new Exception("ไม่สามารถแก้ไขข้อมูลนี้ได้"), (int)StatusCodes.Status500InternalServerError); 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 disciplineDisciplinary_DocComplaintInvestigate = new DisciplineDisciplinary_DocComplaintInvestigate { DisciplineDisciplinary = data, Document = _doc, CreatedFullName = FullName ?? "System Administrator", CreatedUserId = UserId ?? "", CreatedAt = DateTime.Now, LastUpdateFullName = FullName ?? "System Administrator", LastUpdateUserId = UserId ?? "", LastUpdatedAt = DateTime.Now, }; await _context.DisciplineDisciplinary_DocComplaintInvestigates.AddAsync(disciplineDisciplinary_DocComplaintInvestigate); } } } await _context.SaveChangesAsync(); return Success(); } /// /// ลบไฟล์เอกสารร้องเรียนวินัย /// /// /// /// ค่าตัวแปรที่ส่งมาไม่ถูกต้อง /// ไม่ได้ Login เข้าระบบ /// เมื่อเกิดข้อผิดพลาดในการทำงาน [HttpDelete("complaint/file/{id:guid}/{docId:guid}")] public async Task> DeleteFileDisciplineDisciplinaryComplaint(Guid id, Guid docId) { var data = await _context.DisciplineDisciplinarys .Include(x => x.DisciplineDisciplinary_DocComplaintInvestigates) .ThenInclude(x => x.Document) .Include(x => x.DisciplineInvestigate) .ThenInclude(x => x.DisciplineComplaint) .ThenInclude(x => x.DisciplineComplaint_Docs) .ThenInclude(x => x.Document) .Where(x => x.Id == id) .FirstOrDefaultAsync(); if (data == null) return Error(new Exception(GlobalMessages.DataNotFound), (int)StatusCodes.Status404NotFound); if (data.Status.Trim().ToUpper() != "NEW") return Error(new Exception("ไม่สามารถแก้ไขข้อมูลนี้ได้"), (int)StatusCodes.Status500InternalServerError); var dataDoc = data.DisciplineDisciplinary_DocComplaintInvestigates.Where(x => x.Document.Id == docId).FirstOrDefault(); if (dataDoc != null) { _context.DisciplineDisciplinary_DocComplaintInvestigates.Remove(dataDoc); await _context.SaveChangesAsync(); var dataDocComplaint = data.DisciplineInvestigate.DisciplineComplaint.DisciplineComplaint_Docs.Where(x => x.Document.Id == docId).FirstOrDefault(); if (dataDocComplaint == null) { await _documentService.DeleteFileAsync(docId); await _context.SaveChangesAsync(); } return Success(); } else { return Error(new Exception("ไม่พบไฟล์นี้ในระบบ"), (int)StatusCodes.Status404NotFound); } } /// /// อัพไฟล์เอกสารเกี่ยวข้องสืบสวนวินัย /// /// /// /// ค่าตัวแปรที่ส่งมาไม่ถูกต้อง /// ไม่ได้ Login เข้าระบบ /// เมื่อเกิดข้อผิดพลาดในการทำงาน [HttpPut("investigate/relevant/file/{id:guid}")] public async Task> UploadFileDisciplineDisciplinaryInvestigateRelevant([FromForm] DisciplineFileRequest 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); if (data.Status.Trim().ToUpper() != "NEW") return Error(new Exception("ไม่สามารถแก้ไขข้อมูลนี้ได้"), (int)StatusCodes.Status500InternalServerError); 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 disciplineDisciplinary_DocInvestigateRelevant = new DisciplineDisciplinary_DocInvestigateRelevant { DisciplineDisciplinary = data, Document = _doc, CreatedFullName = FullName ?? "System Administrator", CreatedUserId = UserId ?? "", CreatedAt = DateTime.Now, LastUpdateFullName = FullName ?? "System Administrator", LastUpdateUserId = UserId ?? "", LastUpdatedAt = DateTime.Now, }; await _context.DisciplineDisciplinary_DocInvestigateRelevants.AddAsync(disciplineDisciplinary_DocInvestigateRelevant); } } } await _context.SaveChangesAsync(); return Success(); } /// /// ลบไฟล์เอกสารเกี่ยวข้องสืบสวนวินัย /// /// /// /// ค่าตัวแปรที่ส่งมาไม่ถูกต้อง /// ไม่ได้ Login เข้าระบบ /// เมื่อเกิดข้อผิดพลาดในการทำงาน [HttpDelete("investigate/relevant/file/{id:guid}/{docId:guid}")] public async Task> DeleteFileDisciplineDisciplinaryInvestigateRelevant(Guid id, Guid docId) { var data = await _context.DisciplineDisciplinarys .Include(x => x.DisciplineDisciplinary_DocInvestigateRelevants) .ThenInclude(x => x.Document) .Include(x => x.DisciplineInvestigate) .ThenInclude(x => x.DisciplineInvestigateRelevant_Docs) .ThenInclude(x => x.Document) .Where(x => x.Id == id) .FirstOrDefaultAsync(); if (data == null) return Error(new Exception(GlobalMessages.DataNotFound), (int)StatusCodes.Status404NotFound); if (data.Status.Trim().ToUpper() != "NEW") return Error(new Exception("ไม่สามารถแก้ไขข้อมูลนี้ได้"), (int)StatusCodes.Status500InternalServerError); var dataDoc = data.DisciplineDisciplinary_DocInvestigateRelevants.Where(x => x.Document.Id == docId).FirstOrDefault(); if (dataDoc != null) { _context.DisciplineDisciplinary_DocInvestigateRelevants.Remove(dataDoc); await _context.SaveChangesAsync(); var dataDocComplaint = data.DisciplineInvestigate.DisciplineInvestigateRelevant_Docs.Where(x => x.Document.Id == docId).FirstOrDefault(); if (dataDocComplaint == null) { await _documentService.DeleteFileAsync(docId); await _context.SaveChangesAsync(); } return Success(); } else { return Error(new Exception("ไม่พบไฟล์นี้ในระบบ"), (int)StatusCodes.Status404NotFound); } } /// /// อัพไฟล์เอกสารที่เกี่ยวข้องกับการสอบสวน /// /// /// /// ค่าตัวแปรที่ส่งมาไม่ถูกต้อง /// ไม่ได้ Login เข้าระบบ /// เมื่อเกิดข้อผิดพลาดในการทำงาน [HttpPut("relevant/file/{id:guid}")] public async Task> UploadFileDisciplineDisciplinaryRelevants([FromForm] DisciplineFileRequest 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); if (data.Status.Trim().ToUpper() != "NEW") return Error(new Exception("ไม่สามารถแก้ไขข้อมูลนี้ได้"), (int)StatusCodes.Status500InternalServerError); 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 disciplineDisciplinary_DocRelevant = new DisciplineDisciplinary_DocRelevant { DisciplineDisciplinary = data, Document = _doc, CreatedFullName = FullName ?? "System Administrator", CreatedUserId = UserId ?? "", CreatedAt = DateTime.Now, LastUpdateFullName = FullName ?? "System Administrator", LastUpdateUserId = UserId ?? "", LastUpdatedAt = DateTime.Now, }; await _context.DisciplineDisciplinary_DocRelevants.AddAsync(disciplineDisciplinary_DocRelevant); } } } await _context.SaveChangesAsync(); return Success(); } /// /// ลบเอกสารที่เกี่ยวข้องกับการสอบสวน /// /// /// /// ค่าตัวแปรที่ส่งมาไม่ถูกต้อง /// ไม่ได้ Login เข้าระบบ /// เมื่อเกิดข้อผิดพลาดในการทำงาน [HttpDelete("relevant/file/{id:guid}/{docId:guid}")] public async Task> DeleteFileDisciplineDisciplinaryRelevants(Guid id, Guid docId) { var data = await _context.DisciplineDisciplinarys .Include(x => x.DisciplineDisciplinary_DocRelevants) .ThenInclude(x => x.Document) .Where(x => x.Id == id) .FirstOrDefaultAsync(); if (data == null) return Error(new Exception(GlobalMessages.DataNotFound), (int)StatusCodes.Status404NotFound); if (data.Status.Trim().ToUpper() != "NEW") return Error(new Exception("ไม่สามารถแก้ไขข้อมูลนี้ได้"), (int)StatusCodes.Status500InternalServerError); var dataDoc = data.DisciplineDisciplinary_DocRelevants.Where(x => x.Document.Id == docId).FirstOrDefault(); if (dataDoc != null) { _context.DisciplineDisciplinary_DocRelevants.Remove(dataDoc); await _context.SaveChangesAsync(); await _documentService.DeleteFileAsync(docId); await _context.SaveChangesAsync(); return Success(); } else { return Error(new Exception("ไม่พบไฟล์นี้ในระบบ"), (int)StatusCodes.Status404NotFound); } } /// /// อัพไฟล์หลักฐานสนับสนุนข้อกล่าวหา /// /// /// /// ค่าตัวแปรที่ส่งมาไม่ถูกต้อง /// ไม่ได้ Login เข้าระบบ /// เมื่อเกิดข้อผิดพลาดในการทำงาน [HttpPut("summaryEvidence/file/{id:guid}")] public async Task> UploadFileDisciplineDisciplinarySummaryEvidences([FromForm] DisciplineFileRequest 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); if (data.Status.Trim().ToUpper() != "NEW") return Error(new Exception("ไม่สามารถแก้ไขข้อมูลนี้ได้"), (int)StatusCodes.Status500InternalServerError); 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 disciplineDisciplinary_DocSummaryEvidence = new DisciplineDisciplinary_DocSummaryEvidence { DisciplineDisciplinary = data, Document = _doc, CreatedFullName = FullName ?? "System Administrator", CreatedUserId = UserId ?? "", CreatedAt = DateTime.Now, LastUpdateFullName = FullName ?? "System Administrator", LastUpdateUserId = UserId ?? "", LastUpdatedAt = DateTime.Now, }; await _context.DisciplineDisciplinary_DocSummaryEvidences.AddAsync(disciplineDisciplinary_DocSummaryEvidence); } } } await _context.SaveChangesAsync(); return Success(); } /// /// ลบหลักฐานสนับสนุนข้อกล่าวหา /// /// /// /// ค่าตัวแปรที่ส่งมาไม่ถูกต้อง /// ไม่ได้ Login เข้าระบบ /// เมื่อเกิดข้อผิดพลาดในการทำงาน [HttpDelete("summaryEvidence/file/{id:guid}/{docId:guid}")] public async Task> DeleteFileDisciplineDisciplinarySummaryEvidences(Guid id, Guid docId) { var data = await _context.DisciplineDisciplinarys .Include(x => x.DisciplineDisciplinary_DocSummaryEvidences) .ThenInclude(x => x.Document) .Where(x => x.Id == id) .FirstOrDefaultAsync(); if (data == null) return Error(new Exception(GlobalMessages.DataNotFound), (int)StatusCodes.Status404NotFound); if (data.Status.Trim().ToUpper() != "NEW") return Error(new Exception("ไม่สามารถแก้ไขข้อมูลนี้ได้"), (int)StatusCodes.Status500InternalServerError); var dataDoc = data.DisciplineDisciplinary_DocSummaryEvidences.Where(x => x.Document.Id == docId).FirstOrDefault(); if (dataDoc != null) { _context.DisciplineDisciplinary_DocSummaryEvidences.Remove(dataDoc); await _context.SaveChangesAsync(); await _documentService.DeleteFileAsync(docId); await _context.SaveChangesAsync(); return Success(); } else { return Error(new Exception("ไม่พบไฟล์นี้ในระบบ"), (int)StatusCodes.Status404NotFound); } } /// /// อัพไฟล์บันทึกถ้อยคำของผู้กล่าวหา /// /// /// /// ค่าตัวแปรที่ส่งมาไม่ถูกต้อง /// ไม่ได้ Login เข้าระบบ /// เมื่อเกิดข้อผิดพลาดในการทำงาน [HttpPut("recordAccuser/file/{id:guid}")] public async Task> UploadFileDisciplineDisciplinaryRecordAccusers([FromForm] DisciplineFileRequest 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); if (data.Status.Trim().ToUpper() != "NEW") return Error(new Exception("ไม่สามารถแก้ไขข้อมูลนี้ได้"), (int)StatusCodes.Status500InternalServerError); 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 disciplineDisciplinary_DocRecordAccuser = new DisciplineDisciplinary_DocRecordAccuser { DisciplineDisciplinary = data, Document = _doc, CreatedFullName = FullName ?? "System Administrator", CreatedUserId = UserId ?? "", CreatedAt = DateTime.Now, LastUpdateFullName = FullName ?? "System Administrator", LastUpdateUserId = UserId ?? "", LastUpdatedAt = DateTime.Now, }; await _context.DisciplineDisciplinary_DocRecordAccusers.AddAsync(disciplineDisciplinary_DocRecordAccuser); } } } await _context.SaveChangesAsync(); return Success(); } /// /// ลบไฟล์บันทึกถ้อยคำของผู้กล่าวหา /// /// /// /// ค่าตัวแปรที่ส่งมาไม่ถูกต้อง /// ไม่ได้ Login เข้าระบบ /// เมื่อเกิดข้อผิดพลาดในการทำงาน [HttpDelete("recordAccuser/file/{id:guid}/{docId:guid}")] public async Task> DeleteFileDisciplineDisciplinaryRecordAccusers(Guid id, Guid docId) { var data = await _context.DisciplineDisciplinarys .Include(x => x.DisciplineDisciplinary_DocRecordAccusers) .ThenInclude(x => x.Document) .Where(x => x.Id == id) .FirstOrDefaultAsync(); if (data == null) return Error(new Exception(GlobalMessages.DataNotFound), (int)StatusCodes.Status404NotFound); if (data.Status.Trim().ToUpper() != "NEW") return Error(new Exception("ไม่สามารถแก้ไขข้อมูลนี้ได้"), (int)StatusCodes.Status500InternalServerError); var dataDoc = data.DisciplineDisciplinary_DocRecordAccusers.Where(x => x.Document.Id == docId).FirstOrDefault(); if (dataDoc != null) { _context.DisciplineDisciplinary_DocRecordAccusers.Remove(dataDoc); await _context.SaveChangesAsync(); await _documentService.DeleteFileAsync(docId); await _context.SaveChangesAsync(); return Success(); } else { return Error(new Exception("ไม่พบไฟล์นี้ในระบบ"), (int)StatusCodes.Status404NotFound); } } /// /// อัพไฟล์พยานและการบันทึกถ้อยคำ /// /// /// /// ค่าตัวแปรที่ส่งมาไม่ถูกต้อง /// ไม่ได้ Login เข้าระบบ /// เมื่อเกิดข้อผิดพลาดในการทำงาน [HttpPut("witnesses/file/{id:guid}")] public async Task> UploadFileDisciplineDisciplinaryWitnessess([FromForm] DisciplineFileRequest 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); if (data.Status.Trim().ToUpper() != "NEW") return Error(new Exception("ไม่สามารถแก้ไขข้อมูลนี้ได้"), (int)StatusCodes.Status500InternalServerError); 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 disciplineDisciplinary_DocWitnesses = new DisciplineDisciplinary_DocWitnesses { DisciplineDisciplinary = data, Document = _doc, CreatedFullName = FullName ?? "System Administrator", CreatedUserId = UserId ?? "", CreatedAt = DateTime.Now, LastUpdateFullName = FullName ?? "System Administrator", LastUpdateUserId = UserId ?? "", LastUpdatedAt = DateTime.Now, }; await _context.DisciplineDisciplinary_DocWitnessess.AddAsync(disciplineDisciplinary_DocWitnesses); } } } await _context.SaveChangesAsync(); return Success(); } /// /// ลบไฟล์พยานและการบันทึกถ้อยคำ /// /// /// /// ค่าตัวแปรที่ส่งมาไม่ถูกต้อง /// ไม่ได้ Login เข้าระบบ /// เมื่อเกิดข้อผิดพลาดในการทำงาน [HttpDelete("witnesses/file/{id:guid}/{docId:guid}")] public async Task> DeleteFileDisciplineDisciplinaryWitnessess(Guid id, Guid docId) { var data = await _context.DisciplineDisciplinarys .Include(x => x.DisciplineDisciplinary_DocWitnessess) .ThenInclude(x => x.Document) .Where(x => x.Id == id) .FirstOrDefaultAsync(); if (data == null) return Error(new Exception(GlobalMessages.DataNotFound), (int)StatusCodes.Status404NotFound); if (data.Status.Trim().ToUpper() != "NEW") return Error(new Exception("ไม่สามารถแก้ไขข้อมูลนี้ได้"), (int)StatusCodes.Status500InternalServerError); var dataDoc = data.DisciplineDisciplinary_DocWitnessess.Where(x => x.Document.Id == docId).FirstOrDefault(); if (dataDoc != null) { _context.DisciplineDisciplinary_DocWitnessess.Remove(dataDoc); await _context.SaveChangesAsync(); await _documentService.DeleteFileAsync(docId); await _context.SaveChangesAsync(); return Success(); } else { return Error(new Exception("ไม่พบไฟล์นี้ในระบบ"), (int)StatusCodes.Status404NotFound); } } /// /// อัพไฟล์เอกสารหลักฐานอื่น ๆ /// /// /// /// ค่าตัวแปรที่ส่งมาไม่ถูกต้อง /// ไม่ได้ Login เข้าระบบ /// เมื่อเกิดข้อผิดพลาดในการทำงาน [HttpPut("other/file/{id:guid}")] public async Task> UploadFileDisciplineDisciplinaryOther([FromForm] DisciplineFileRequest 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); if (data.Status.Trim().ToUpper() != "NEW") return Error(new Exception("ไม่สามารถแก้ไขข้อมูลนี้ได้"), (int)StatusCodes.Status500InternalServerError); 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 disciplineDisciplinary_DocOther = new DisciplineDisciplinary_DocOther { DisciplineDisciplinary = data, Document = _doc, CreatedFullName = FullName ?? "System Administrator", CreatedUserId = UserId ?? "", CreatedAt = DateTime.Now, LastUpdateFullName = FullName ?? "System Administrator", LastUpdateUserId = UserId ?? "", LastUpdatedAt = DateTime.Now, }; await _context.DisciplineDisciplinary_DocOthers.AddAsync(disciplineDisciplinary_DocOther); } } } await _context.SaveChangesAsync(); return Success(); } /// /// ลบไฟล์เอกสารหลักฐานอื่น ๆ /// /// /// /// ค่าตัวแปรที่ส่งมาไม่ถูกต้อง /// ไม่ได้ Login เข้าระบบ /// เมื่อเกิดข้อผิดพลาดในการทำงาน [HttpDelete("other/file/{id:guid}/{docId:guid}")] public async Task> DeleteFileDisciplineDisciplinaryOther(Guid id, Guid docId) { var data = await _context.DisciplineDisciplinarys .Include(x => x.DisciplineDisciplinary_DocOthers) .ThenInclude(x => x.Document) .Where(x => x.Id == id) .FirstOrDefaultAsync(); if (data == null) return Error(new Exception(GlobalMessages.DataNotFound), (int)StatusCodes.Status404NotFound); if (data.Status.Trim().ToUpper() != "NEW") return Error(new Exception("ไม่สามารถแก้ไขข้อมูลนี้ได้"), (int)StatusCodes.Status500InternalServerError); var dataDoc = data.DisciplineDisciplinary_DocOthers.Where(x => x.Document.Id == docId).FirstOrDefault(); if (dataDoc != null) { _context.DisciplineDisciplinary_DocOthers.Remove(dataDoc); await _context.SaveChangesAsync(); await _documentService.DeleteFileAsync(docId); await _context.SaveChangesAsync(); return Success(); } else { return Error(new Exception("ไม่พบไฟล์นี้ในระบบ"), (int)StatusCodes.Status404NotFound); } } /// /// สั่งรายชื่อไปออกคำสั่งให้ออกจากราชการไว้ก่อน /// /// /// /// ค่าตัวแปรที่ส่งมาไม่ถูกต้อง /// ไม่ได้ Login เข้าระบบ /// เมื่อเกิดข้อผิดพลาดในการทำงาน [HttpPut("suspend/{id:length(36)}/{commandTypeId:length(36)}")] public async Task> PostToSuspend([FromBody] DisciplinePersonIdRequest req, Guid id, Guid commandTypeId) { var getPermission = await _permission.GetPermissionAPIAsync("UPDATE", "SYS_DISCIPLINE_INTERROGATE"); var jsonData = JsonConvert.DeserializeObject(getPermission); if (jsonData["status"]?.ToString() != "200") { return Error(jsonData["message"]?.ToString(), StatusCodes.Status403Forbidden); } var data = await _context.DisciplineDisciplinarys .Include(x => x.DisciplineDisciplinary_ProfileComplaintInvestigates) .Where(x => x.Id == id) .FirstOrDefaultAsync(); if (data == null) return Error(new Exception(GlobalMessages.DataNotFound), StatusCodes.Status404NotFound); var persons = data.DisciplineDisciplinary_ProfileComplaintInvestigates.Where(x => req.persons.Contains(x.Id)).ToList(); foreach (var item in persons) { var personIdDupicate = data.DisciplineDisciplinary_ProfileComplaintInvestigates.Where(x => x.PersonId == item.PersonId && x.Status == "NEW").FirstOrDefault(); if (personIdDupicate == null) continue; // if (personIdDupicate.DisciplineReport_Profiles.Count() > 0) // continue; // personIdDupicate.DisciplineReport_Profiles.Add( // new DisciplineReport_Profile // { // PersonId = item.PersonId, // CitizenId = item.CitizenId, // Prefix = item.Prefix, // FirstName = item.FirstName, // LastName = item.LastName, // Organization = item.Organization, // Salary = item.Salary, // PosNo = item.PosNo, // Position = item.Position, // PositionLevel = item.PositionLevel, // Status = "PENDING", // CreatedFullName = FullName ?? "System Administrator", // CreatedUserId = UserId ?? "", // CreatedAt = DateTime.Now, // LastUpdateFullName = FullName ?? "System Administrator", // LastUpdateUserId = UserId ?? "", // LastUpdatedAt = DateTime.Now, // }); item.CommandTypeId = commandTypeId; item.Status = "REPORT"; item.LastUpdateFullName = FullName ?? "System Administrator"; item.LastUpdateUserId = UserId ?? ""; item.LastUpdatedAt = DateTime.Now; } await _context.SaveChangesAsync(); return Success(); } /// /// สั่งรายชื่อไปออกคำสั่งงดโทษ /// /// /// /// ค่าตัวแปรที่ส่งมาไม่ถูกต้อง /// ไม่ได้ Login เข้าระบบ /// เมื่อเกิดข้อผิดพลาดในการทำงาน [HttpPut("discard/{id:length(36)}/{commandTypeId:length(36)}")] public async Task> PostToDiscard([FromBody] DisciplinePersonIdRequest req, Guid id, Guid commandTypeId) { var data = await _context.DisciplineDisciplinarys .Include(x => x.DisciplineDisciplinary_ProfileComplaintInvestigates) .Where(x => x.Id == id) .FirstOrDefaultAsync(); if (data == null) return Error(new Exception(GlobalMessages.DataNotFound), StatusCodes.Status404NotFound); var persons = data.DisciplineDisciplinary_ProfileComplaintInvestigates.Where(x => req.persons.Contains(x.Id)).ToList(); foreach (var item in persons) { var personIdDupicate = data.DisciplineDisciplinary_ProfileComplaintInvestigates.Where(x => x.PersonId == item.PersonId && x.Status == "REPORT" && x.StatusDiscard == "NEW").FirstOrDefault(); if (personIdDupicate == null) continue; // if (personIdDupicate.DisciplineReport_Profiles.Count() > 0) // continue; // personIdDupicate.DisciplineReport_Profiles.Add( // new DisciplineReport_Profile // { // PersonId = item.PersonId, // CitizenId = item.CitizenId, // Prefix = item.Prefix, // FirstName = item.FirstName, // LastName = item.LastName, // Organization = item.Organization, // Salary = item.Salary, // PosNo = item.PosNo, // Position = item.Position, // PositionLevel = item.PositionLevel, // Status = "PENDING", // CreatedFullName = FullName ?? "System Administrator", // CreatedUserId = UserId ?? "", // CreatedAt = DateTime.Now, // LastUpdateFullName = FullName ?? "System Administrator", // LastUpdateUserId = UserId ?? "", // LastUpdatedAt = DateTime.Now, // }); item.CommandTypeDiscardId = commandTypeId; item.StatusDiscard = "REPORT"; item.LastUpdateFullName = FullName ?? "System Administrator"; item.LastUpdateUserId = UserId ?? ""; item.LastUpdatedAt = DateTime.Now; } await _context.SaveChangesAsync(); return Success(); } /// /// สั่งรายชื่อไปพักราชการ /// /// /// /// ค่าตัวแปรที่ส่งมาไม่ถูกต้อง /// ไม่ได้ Login เข้าระบบ /// เมื่อเกิดข้อผิดพลาดในการทำงาน [HttpPut("suspend/{id:length(36)}")] public async Task> PostToSuspendGovernment([FromBody] DisciplinePersonIdRequest req, Guid id) { var data = await _context.DisciplineDisciplinarys .Include(x => x.DisciplineDisciplinary_ProfileComplaintInvestigates) .Where(x => x.Id == id) .FirstOrDefaultAsync(); if (data == null) return Error(new Exception(GlobalMessages.DataNotFound), StatusCodes.Status404NotFound); var persons = data.DisciplineDisciplinary_ProfileComplaintInvestigates.Where(x => req.persons.Contains(x.Id)).ToList(); foreach (var item in persons) { var personIdDupicate = data.DisciplineDisciplinary_ProfileComplaintInvestigates.Where(x => x.PersonId == item.PersonId && x.Status == "NEW").FirstOrDefault(); if (personIdDupicate == null) continue; await _context.DisciplineReport_Profiles.AddAsync( new DisciplineReport_Profile { PersonId = item.PersonId, CitizenId = item.CitizenId, Prefix = item.Prefix, FirstName = item.FirstName, LastName = item.LastName, //Organization = item.Organization, Organization = (item.Position == null ? "" : item.Position + "\n") + (item.child4 == null ? "" : item.child4 + "\n") + (item.child3 == null ? "" : item.child3 + "\n") + (item.child2 == null ? "" : item.child2 + "\n") + (item.child1 == null ? "" : item.child1 + "\n") + (item.root == null ? "" : item.root), root = item.root, rootId = item.rootId, rootDnaId = item.rootDnaId, rootShortName = item.rootShortName, child1 = item.child1, child1Id = item.child1Id, child1DnaId = item.child1DnaId, child1ShortName = item.child1ShortName, child2 = item.child2, child2Id = item.child2Id, child2DnaId = item.child2DnaId, child2ShortName = item.child2ShortName, child3 = item.child3, child3Id = item.child3Id, child3DnaId = item.child3DnaId, child3ShortName = item.child3ShortName, child4 = item.child4, child4Id = item.child4Id, child4DnaId = item.child4DnaId, child4ShortName = item.child4ShortName, posMasterNo = item.posMasterNo, posTypeId = item.posTypeId, posTypeName = item.posTypeName, posLevelId = item.posLevelId, posLevelName = item.posLevelName, profileType = item.profileType, Salary = item.Salary, PosNo = item.PosNo, Position = item.Position, PositionLevel = item.posLevelName, PositionType = item.posTypeName, Title = data.Title, OffenseDetails = data.OffenseDetails, DisciplinaryCaseFault = data.DisciplinaryCaseFault, DisciplinaryFaultLevel = data.DisciplinaryFaultLevel, DisciplineDisciplinary = data, Status = "PENDING", CreatedFullName = FullName ?? "System Administrator", CreatedUserId = UserId ?? "", CreatedAt = DateTime.Now, LastUpdateFullName = FullName ?? "System Administrator", LastUpdateUserId = UserId ?? "", LastUpdatedAt = DateTime.Now, }); item.IsSuspend = "REPORT"; item.LastUpdateFullName = FullName ?? "System Administrator"; item.LastUpdateUserId = UserId ?? ""; item.LastUpdatedAt = DateTime.Now; } await _context.SaveChangesAsync(); return Success(); } /// /// ปฏิทินรายการวินัยเรื่องสอบสวน /// /// /// /// ค่าตัวแปรที่ส่งมาไม่ถูกต้อง /// ไม่ได้ Login เข้าระบบ /// เมื่อเกิดข้อผิดพลาดในการทำงาน [HttpPost("calendar")] public async Task> GetCalendarDisciplineDisciplinary([FromBody] DisciplineCalendarRequest req) { var data = await _context.DisciplineDisciplinarys .Where(x => x.DisciplinaryDateStart != null) .Where(x => x.DisciplinaryDateEnd != null) .Where(x => x.DisciplinaryDateStart.Value.Year == req.year || x.DisciplinaryDateEnd.Value.Year == req.year || x.DisciplinaryDateStart.Value.Month == req.month || x.DisciplinaryDateEnd.Value.Month == req.month) .Select(x => new { Id = x.Id,//id ข้อมูลเรื่องสอบสวน Title = x.Title,//ชื่อเรื่อง DisciplinaryDateStart = x.DisciplinaryDateStart,// DisciplinaryDateEnd = x.DisciplinaryDateEnd,// }) .OrderBy(d => d.DisciplinaryDateStart.Value.Date) .ToListAsync(); return Success(data); } /// /// สั่งรายชื่อไปออกคำสั่งยุตื /// /// /// /// ค่าตัวแปรที่ส่งมาไม่ถูกต้อง /// ไม่ได้ Login เข้าระบบ /// เมื่อเกิดข้อผิดพลาดในการทำงาน [HttpPost("report")] // [HttpPut("report/{commandTypeId:length(36)}")] public async Task> PostToReport([FromBody] DisciplineProfileRequest req) { var getPermission = await _permission.GetPermissionAPIAsync("LIST", "SYS_DISCIPLINE_INTERROGATE"); var jsonData = JsonConvert.DeserializeObject(getPermission); if (jsonData["status"]?.ToString() != "200") { return Error(jsonData["message"]?.ToString(), StatusCodes.Status403Forbidden); } 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.IsReport = "REPORT"; uppdated.LastUpdateFullName = FullName ?? "System Administrator"; uppdated.LastUpdateUserId = UserId ?? ""; uppdated.LastUpdatedAt = DateTime.Now; } await _context.SaveChangesAsync(); return Success(); } /// /// ระบุหน้าที่กรรมการ /// /// /// /// ค่าตัวแปรที่ส่งมาไม่ถูกต้อง /// ไม่ได้ Login เข้าระบบ /// เมื่อเกิดข้อผิดพลาดในการทำงาน [HttpPut("director/{disciplineId:guid}/{id:guid}")] public async Task> AddDutyDisciplineDisciplinary([FromBody] DisciplineDutyRequest req, Guid disciplineId, Guid id) { var data = await _context.DisciplineDisciplinarys .Include(x => x.DisciplineDisciplinary_DirectorInvestigates) .Where(x => x.Id == disciplineId) .FirstOrDefaultAsync(); if (data == null) return Error(new Exception(GlobalMessages.DataNotFound), StatusCodes.Status404NotFound); var director = data.DisciplineDisciplinary_DirectorInvestigates.FirstOrDefault(x => x.Id == id); if (director == null) return Error(new Exception(GlobalMessages.DataNotFound), StatusCodes.Status404NotFound); director.Duty = req.duty; director.CommandNo = req.commandNo; director.LastUpdateFullName = FullName ?? "System Administrator"; director.LastUpdateUserId = UserId ?? ""; director.LastUpdatedAt = DateTime.Now; await _context.SaveChangesAsync(); return Success(); } } }