WorkRequestController.cs 28 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755
  1. using System;
  2. using System.Linq;
  3. using System.Threading.Tasks;
  4. using System.Collections.Generic;
  5. using FMSAdmin.Data;
  6. using FMSAdmin.Models;
  7. using FMSAdmin.Entities;
  8. using FMSApp.Services;
  9. using FMSAdmin.Services;
  10. using Microsoft.AspNetCore.Mvc;
  11. using Microsoft.Extensions.Logging;
  12. using Microsoft.AspNetCore.Authorization;
  13. using FMSAdmin.Helpers;
  14. using System.Data;
  15. using System.IO;
  16. using OfficeOpenXml;
  17. namespace FMSAdmin.Controllers {
  18. [Authorize]
  19. [ApiController]
  20. [ApiVersion("1")]
  21. [Route("api/[controller]")]
  22. public class WorkRequestController : Controller {
  23. private readonly ILogger<WorkRequestController> _logger;
  24. private readonly FMSContext _context;
  25. private readonly WorkRequestService _service;
  26. private readonly HolidayService _service_2;
  27. private readonly MonthWorkService _monthWorkService;
  28. private readonly StorageHelper _storage;
  29. public WorkRequestController(
  30. ILogger<WorkRequestController> logger,
  31. FMSContext context,
  32. WorkRequestService service,
  33. HolidayService service_2,
  34. MonthWorkService monthWorkService,
  35. StorageHelper storage
  36. ) {
  37. _logger = logger;
  38. _context = context;
  39. _service = service;
  40. _service_2 = service_2;
  41. _storage = storage;
  42. _monthWorkService = monthWorkService;
  43. }
  44. /// <summary>
  45. /// 정기점검 계획 목록
  46. /// </summary>
  47. [HttpGet("[action]")]
  48. public IActionResult RegularList([FromQuery] PagingRequest req) {
  49. return List(req, new int[] { 1 });
  50. }
  51. /// <summary>
  52. /// 정기점검 계획 목록 Excel
  53. /// </summary>
  54. [AllowAnonymous]
  55. [HttpGet("[action]")]
  56. public IActionResult RegularExcel([FromQuery] PagingRequest req, string filename) {
  57. return ExportExcel(req, new int[] { 1 }, filename);
  58. }
  59. /// <summary>
  60. /// 법정검사, 교육 계획 목록
  61. /// </summary>
  62. [HttpGet("[action]")]
  63. public IActionResult LegalList([FromQuery] PagingRequest req) {
  64. return List(req, new int[] { 2, 7 });
  65. }
  66. /// <summary>
  67. /// 법정검사, 교육 계획 목록 Excel
  68. /// </summary>
  69. [AllowAnonymous]
  70. [HttpGet("[action]")]
  71. public IActionResult LegalExcel([FromQuery] PagingRequest req, string filename) {
  72. return ExportExcel(req, new int[] { 2, 7 }, filename);
  73. }
  74. /// <summary>
  75. /// 수시점검 계획 목록
  76. /// </summary>
  77. [HttpGet("[action]")]
  78. public IActionResult AnyList([FromQuery] PagingRequest req) {
  79. return List(req, new int[] { 5 });
  80. }
  81. /// <summary>
  82. /// 수시점검 계획 목록 Excel
  83. /// </summary>
  84. [AllowAnonymous]
  85. [HttpGet("[action]")]
  86. public IActionResult AnyExcel([FromQuery] PagingRequest req, string filename) {
  87. return ExportExcel(req, new int[] { 5 }, filename);
  88. }
  89. /// <summary>
  90. /// 공사작업 계획 목록
  91. /// </summary>
  92. [HttpGet("[action]")]
  93. public IActionResult ConstructionList([FromQuery] PagingRequest req) {
  94. return List(req, new int[] { 6 });
  95. }
  96. /// <summary>
  97. /// 공사작업 계획 목록Excel
  98. /// </summary>
  99. [AllowAnonymous]
  100. [HttpGet("[action]")]
  101. public IActionResult ConstructionExcel([FromQuery] PagingRequest req, string filename) {
  102. return ExportExcel(req, new int[] { 6 }, filename);
  103. }
  104. [HttpGet("{siteId}")]
  105. public IActionResult Calendar([FromQuery] PagingRequest req, [FromQuery] string siteId, string type, bool businessAuth) {
  106. var query = _FilterAndSort(req);
  107. query = BusinessFieldHelper.Apply<FmsWorkRequest>(_context, User, businessAuth, query);
  108. query = query.Where(
  109. x => x.SiteId == Util.ToInt(siteId)
  110. && x.WorkProgressId == 1 // 작업계획
  111. && (x.FmsWorkSchedule == null || (x.FmsWorkSchedule != null && x.FmsWorkSchedule.IsUse == true))
  112. //&& ((x.FmsWorkSchedule != null && x.FmsWorkSchedule.IsUse == true) || !(new int[] { 1, 2, 7 }).Contains(x.WorkTypeId))
  113. );
  114. // if (!string.IsNullOrEmpty(workTypeId)) {
  115. // query = query.Where(
  116. // x => x.WorkTypeId == Util.ToInt(workTypeId)
  117. // );
  118. // }
  119. if (type == "S") {
  120. var list = query.Select(x => new {
  121. x.SiteId,
  122. x.WorkRequestId,
  123. id = x.SiteId.ToString() + "-" + x.WorkRequestId.ToString(),
  124. groupId = x.WorkTypeId,
  125. WorkType = new {
  126. x.WorkType.Name
  127. },
  128. title = x.Title,
  129. color = "",
  130. start = x.StartWorkDate.ToString("yyyy-MM-dd"),
  131. end = x.StartWorkDate.ToString("yyyy-MM-dd"),
  132. });
  133. return Ok(list);
  134. } else if (type == "H") {
  135. var data = _service_2.GetAll(Util.ToInt(siteId));
  136. var sYear = DateTime.Today.Year.ToString();
  137. var list = data.Select(x => new {
  138. id = "H-" + x.SiteId + "-" + x.HolidayMonth.ToString() + "-" + x.HolidayDay.ToString(),
  139. type = "H",
  140. groupId = "H",
  141. x.SiteId,
  142. //x.HolidayMonth,
  143. //x.HolidayDay,
  144. //x.IsLunar,
  145. start = sYear + '-' + x.HolidayMonth.ToString().PadLeft(2, '0') + '-' + x.HolidayDay.ToString().PadLeft(2, '0'),
  146. end = sYear + '-' + x.HolidayMonth.ToString().PadLeft(2, '0') + '-' + x.HolidayDay.ToString().PadLeft(2, '0'),
  147. title = x.Name,
  148. durationEditable = true,
  149. borderColor = "#396",
  150. });
  151. return Ok(list);
  152. } else if (type == "C") {
  153. var data = _service_2.CustomGetAll(Util.ToInt(siteId));
  154. var sYear = DateTime.Today.Year.ToString();
  155. var list = data.Select(x => new {
  156. id = "C-" + x.SiteId + "-" + x.HolidayDate.ToString("yyyyMMdd"),
  157. type = "C",
  158. groupId = "C",
  159. x.SiteId,
  160. start = x.HolidayDate.ToString("yyyy-MM-dd"),
  161. end = x.HolidayDate.ToString("yyyy-MM-dd"),
  162. title = x.Name,
  163. color = "#FFE400",
  164. borderColor = "#396",
  165. });
  166. return Ok(list);
  167. } else {
  168. var data = _service_2.WeekendGetAll(Util.ToInt(siteId));
  169. var sYear = DateTime.Today.Year.ToString();
  170. var list = data.Select(x => new {
  171. id = "W-" + x.SiteId,
  172. x.SiteId,
  173. x.Saturday,
  174. x.Sunday,
  175. color = "red",
  176. borderColor = "#396",
  177. });
  178. return Ok(list);
  179. }
  180. }
  181. /// <summary>
  182. /// 목록
  183. /// </summary>
  184. [HttpGet]
  185. public IActionResult List([FromQuery] PagingRequest req, int[] workType) {
  186. var query = _WorkTypeFilter(req, workType);
  187. var list = _ListSelect(query);
  188. var paging = PagingList.Pagination(list, req.page, req.limit);
  189. return Ok(paging);
  190. }
  191. /// <summary>
  192. /// 목록
  193. /// </summary>
  194. [HttpGet]
  195. private dynamic _ListSelect(IQueryable<FmsWorkRequest> query) {
  196. var list = query.Select(x => new {
  197. x.SiteId,
  198. Site = x.Site.Name,
  199. x.BusinessFieldId,
  200. BusinessField = x.CmBusinessField.Name,
  201. x.WorkTypeId,
  202. WorkType = x.WorkType.Name,
  203. x.WorkDetailTypeId,
  204. WorkDetailType = x.WorkDetailType.Name,
  205. x.WorkRequestId,
  206. x.Title,
  207. StartWorkDate = x.StartWorkDate.ToString("yyyy-MM-dd"),
  208. EndWorkDate = x.WorkEndDate != null ? x.WorkEndDate.Value.ToString("yyyy-MM-dd") : "",
  209. CmUserNavigation = x.CmUserNavigation.Name,
  210. x.WorkScheduleId,
  211. x.WorkProgressId,
  212. WorkProgress = x.WorkProgress.Name,
  213. x.Content,
  214. x.RequestUserId,
  215. x.RequestDate,
  216. x.RejectUserId,
  217. x.RejectDate,
  218. x.RejectReason,
  219. x.InspectionAgencyId,
  220. InspectionAgency = x.CmPartner.Name,
  221. WorkPartnerName = x.WorkPartner.Name,
  222. x.WorkPrice,
  223. WorkCodeHolidayWorkType = x.FmsWorkSchedule.FmsWorkCodeHolidayWorkType.Name,
  224. Cycle = x.FmsWorkSchedule.CycleSize.ToString() + x.FmsWorkSchedule.FmsWorkCodeCycleUnit.Name
  225. });
  226. return list;
  227. }
  228. [HttpGet("[action]")]
  229. public IActionResult Get([FromQuery] string siteId, [FromQuery] string workRequestId) {
  230. var query = _service.GetAll()
  231. .Where(x => x.SiteId == Util.ToInt(siteId) && x.WorkRequestId == Util.ToInt(workRequestId));
  232. var item = query.Select(x => new {
  233. x.SiteId,
  234. CmSite = new {
  235. x.Site.Name,
  236. },
  237. x.WorkRequestId,
  238. x.WorkTypeId,
  239. WorkType = new {
  240. x.WorkType.Name
  241. },
  242. x.WorkDetailTypeId,
  243. WorkDetailType = new {
  244. x.WorkDetailType.Name,
  245. x.WorkDetailType.Code,
  246. },
  247. x.BusinessFieldId,
  248. BusinessField = new {
  249. x.CmBusinessField.Name
  250. },
  251. x.WorkScheduleId,
  252. x.WorkProgressId,
  253. WorkProgress = new {
  254. x.WorkProgress.Name
  255. },
  256. x.Title,
  257. x.Content,
  258. x.RequestUserId,
  259. RequestUserName = new { x.CmUser.Name },
  260. UserName = new {
  261. x.CmUserNavigation.Name,
  262. },
  263. x.RequestDate,
  264. x.StartWorkDate,
  265. x.RejectUserId,
  266. x.RejectDate,
  267. x.RejectReason,
  268. x.InspectionAgencyId,
  269. InspectionAgency = new {
  270. x.CmPartner.Name
  271. },
  272. WorkPartner = new {
  273. x.WorkPartner.Name,
  274. x.WorkPartner.PartnerId
  275. },
  276. WorkCodeHolidayWorkType = x.FmsWorkSchedule.FmsWorkCodeHolidayWorkType.Name,
  277. Cycle = x.FmsWorkSchedule.CycleSize.ToString() + x.FmsWorkSchedule.FmsWorkCodeCycleUnit.Name,
  278. x.WorkPrice,
  279. x.WorkItem,
  280. x.WorkEndDate,
  281. CmFile = _storage.ParseFile(x.CmFile),
  282. FmsWorkOrder = new {
  283. x.FmsWorkOrder.SiteId,
  284. x.FmsWorkOrder.WorkRequestId,
  285. x.FmsWorkOrder.OrderUserId,
  286. x.FmsWorkOrder.Content
  287. },
  288. FmsWorkRequestToFacility = x.FmsWorkRequestToFacility.Select(f => new {
  289. f.SiteId,
  290. f.WorkRequestId,
  291. f.FacilityCode,
  292. //CmFacility = new {
  293. FacilityName = f.CmFacility.Name,
  294. f.CmFacility.BuildingId,
  295. CmBuilding = new {
  296. f.CmFacility.CmBuilding.Name,
  297. },
  298. f.CmFacility.FloorId,
  299. CmFloor = new {
  300. f.CmFacility.CmFloor.Name,
  301. },
  302. f.CmFacility.FirstClassId,
  303. FirstClassName = f.CmFacility.FmsFacilityCodeClass.Name,
  304. f.CmFacility.SecondClassId,
  305. SecondClassName = f.CmFacility.FmsFacilityCodeClass1.Name,
  306. f.CmFacility.ThirdClassId,
  307. ThirdClassName = f.CmFacility.FmsFacilityCodeClass2.Name,
  308. }).ToList(),
  309. FmsWorkRequestToAccident = x.FmsWorkRequestToAccident.Select(f => new {
  310. f.SiteId,
  311. f.WorkRequestId,
  312. f.AccidentId,
  313. Name = f.FmsAccident.Name,
  314. f.FmsAccident.AccidentTypeId,
  315. AccidentTypeName = f.FmsAccident.FmsAccidentCodeType.Name,
  316. StartDate = f.FmsAccident.StartDate == null ? null : ((DateTime)f.FmsAccident.StartDate).ToString("yyyy.MM.dd"),
  317. EndDate = f.FmsAccident.EndDate == null ? null : ((DateTime)f.FmsAccident.EndDate).ToString("yyyy.MM.dd"),
  318. f.FmsAccident.DepartmentId,
  319. DepartmentName = f.FmsAccident.CmDepartment.Name,
  320. f.FmsAccident.AccidentLocation,
  321. }).ToList(),
  322. FmsWorkRequestToComplaint = x.FmsWorkRequestToComplaint.Select(f => new {
  323. f.SiteId,
  324. f.WorkRequestId,
  325. f.ComplaintId,
  326. Name = f.FmsComplaints.Name,
  327. f.FmsComplaints.CompanyId,
  328. ComplaintTypeName = f.FmsComplaints.FmsComplaintCodeType.Name,
  329. StartDate = f.FmsComplaints.StartDate == null ? null : ((DateTime)f.FmsComplaints.StartDate).ToString("yyyy.MM.dd"),
  330. EndDate = f.FmsComplaints.EndDate == null ? null : ((DateTime)f.FmsComplaints.EndDate).ToString("yyyy.MM.dd"),
  331. f.FmsComplaints.DepartmentId,
  332. DepartmentName = f.FmsComplaints.CmDepartment.Name,
  333. f.FmsComplaints.ComplaintLocation,
  334. }).ToList()
  335. }).FirstOrDefault();
  336. return Ok(item);
  337. }
  338. /// <summary>
  339. /// 저장
  340. /// </summary>
  341. /// <param name="data"></param>
  342. /// <returns></returns>
  343. [HttpPost("[action]")]
  344. public IActionResult Save([FromBody] FmsWorkRequest data) {
  345. _logger.LogInformation("Save");
  346. //_logger.LogInformation(data.Dump());
  347. ModelState.RemoveStartOf("CmFile");
  348. // ModelState.RemoveStartOf("FmsWorkRequestToFacility");
  349. // ModelState.RemoveStartOf("FmsWorkRequestToAccident");
  350. // ModelState.RemoveStartOf("FmsWorkRequestToComplaint");
  351. // ModelState.RemoveStartOf("FmsWorkOrder");
  352. // ModelState.RemoveStartOf("WorkDetailType");
  353. if (ModelState.IsValid) {
  354. _service.SaveBeforeAddHistory(data);
  355. } else {
  356. return BadRequest(ModelState);
  357. }
  358. return Ok();
  359. }
  360. /// <summary>
  361. /// 사고내역 저장
  362. /// </summary>
  363. /// <param name="data"></param>
  364. /// <returns></returns>
  365. [HttpPost("[action]")]
  366. public IActionResult SaveAccidents([FromBody] FmsWorkRequest data) {
  367. ModelState.Remove("Title");
  368. ModelState.RemoveStartOf("FmsWorkRequestToFacility");
  369. ModelState.RemoveStartOf("FmsWorkRequestToAccident");
  370. ModelState.RemoveStartOf("FmsWorkRequestToComplaint");
  371. if (ModelState.IsValid) {
  372. _service.SaveAccidents(data);
  373. } else {
  374. return BadRequest(ModelState);
  375. }
  376. return Ok();
  377. }
  378. /// <summary>
  379. /// 민원내역 저장
  380. /// </summary>
  381. /// <param name="data"></param>
  382. /// <returns></returns>
  383. [HttpPost("[action]")]
  384. public IActionResult SaveComplaints([FromBody] FmsWorkRequest data) {
  385. ModelState.Remove("Title");
  386. ModelState.RemoveStartOf("FmsWorkRequestToFacility");
  387. ModelState.RemoveStartOf("FmsWorkRequestToAccident");
  388. ModelState.RemoveStartOf("FmsWorkRequestToComplaint");
  389. if (ModelState.IsValid) {
  390. _service.SaveComplaints(data);
  391. } else {
  392. return BadRequest(ModelState);
  393. }
  394. return Ok();
  395. }
  396. [HttpPost("[action]")]
  397. public IActionResult Reject([FromBody] FmsWorkRequest data, [FromQuery] bool useSchedule, [FromQuery] DateTime? confirmDate) {
  398. _service.Reject(data, useSchedule, confirmDate);
  399. return Ok();
  400. }
  401. [HttpPost("[action]")]
  402. public IActionResult Order([FromBody] FmsWorkOrder data) {
  403. _service.Order(data);
  404. return Ok();
  405. }
  406. // 사고 ACCIDENT 코드 확인
  407. [HttpGet("[action]")]
  408. public IActionResult CodeGet([FromQuery] int code) {
  409. var list = _context.FmsWorkCodeDetailType.Where(x => x.WorkDetailTypeId == code).Select(x => new { x.Code }).FirstOrDefault();
  410. return Ok(list);
  411. }
  412. private IQueryable<FmsWorkRequest> _WorkTypeFilter([FromQuery] PagingRequest req, int[] workType) {
  413. var query = _FilterAndSort(req);
  414. //if (workType != null) {
  415. query = query.Where(x => x.WorkProgressId == 1);
  416. if (workType.Length > 0)
  417. query = query.Where(x => workType.Contains(x.WorkTypeId));
  418. // } else {
  419. // query = query.Where(
  420. // x => x.WorkProgressId == 1 // 작업계획
  421. // //&& (x.FmsWorkSchedule != null && x.FmsWorkSchedule.IsUse == true && (x.WorkTypeId == 1 || x.WorkTypeId == 2 || x.WorkTypeId == 5 || x.WorkTypeId == 6))
  422. // //&& ((x.FmsWorkSchedule != null && x.FmsWorkSchedule.IsUse == true) || x.WorkTypeId > 2)
  423. // && (x.FmsWorkSchedule == null || (x.FmsWorkSchedule != null && x.FmsWorkSchedule.IsUse == true))
  424. // );
  425. // }
  426. return query;
  427. }
  428. // 검색 & 정렬 공통
  429. private IQueryable<FmsWorkRequest> _FilterAndSort(PagingRequest req) {
  430. var query = _service.GetAll();
  431. // 기본 Entity 검색
  432. query = query.Filter(req.conditions);
  433. if (req.siteId != null) {
  434. query = query.Where(x => x.SiteId == Util.ToInt(req.siteId));
  435. }
  436. if (req.siteIds != null && req.siteIds.Length > 0) {
  437. query = query.Where(x => req.siteIds.Contains(x.SiteId));
  438. }
  439. if (req.businessFieldId != null) {
  440. query = query.Where(x => x.SiteId == req.siteId);
  441. query = query.Where(x => x.BusinessFieldId == req.businessFieldId || x.CmBusinessField.Name == "공통");
  442. }
  443. // 기본 Entity 정렬
  444. //query = query.Sort(req.sort);
  445. //정렬(최근 작업시작일자, 업무명, 사옥 준공)
  446. if (req.sort != null) {
  447. if (req.sort.field == "Custom") {
  448. query = query.OrderByDescending(x => x.StartWorkDate).ThenBy(x => x.Title).ThenBy(x => x.Site.SortOrderNo);
  449. } else {
  450. query = query.Sort(req.sort);
  451. }
  452. }
  453. return query;
  454. }
  455. /// <summary>
  456. /// 엑셀파일 익스포트
  457. /// </summary>
  458. /// <param name="req"></param>
  459. /// <returns></returns>
  460. public IActionResult ExportExcel([FromQuery] PagingRequest req, int[] workType, string filename) {
  461. req.page = 1;
  462. req.limit = 0;
  463. var query = _WorkTypeFilter(req, workType);
  464. var list = _ListSelect(query);
  465. var stream = new MemoryStream();
  466. using (var package = new ExcelPackage(stream)) {
  467. var workSheet = package.Workbook.Worksheets.Add("Sheet1");
  468. workSheet.Cells.LoadFromCollection(list, true);
  469. if (req.columns != null && req.columns.Length > 0) {
  470. workSheet.AddStyle(req.columns, req.sort?.order?.ToLower() == "asc", filename);
  471. }
  472. package.Save();
  473. }
  474. stream.Position = 0;
  475. string excelName = $"excel-{DateTime.Now.ToString("yyyyMMddHHmmssfff")}.xlsx";
  476. return File(stream, "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet", excelName);
  477. }
  478. /**
  479. * 작업 달력 현황
  480. */
  481. [HttpGet("[action]")]
  482. public IActionResult WorkCalendar(int siteId, int? year, int? month) {
  483. //var siteId = User.GetSiteId();
  484. DateTime selectMonth;
  485. if (year == null || month == null) {
  486. selectMonth = new DateTime(DateTime.Now.Year, DateTime.Now.Month, 1);
  487. } else {
  488. selectMonth = new DateTime(year.Value, month.Value, 1);
  489. }
  490. var startDate = selectMonth.AddDays(-7);
  491. var endDate = selectMonth.AddDays(37);
  492. // 작업예정
  493. var requestList = _GetRequestEventList(siteId, startDate, endDate);
  494. // 작업완료
  495. //var resultList = _GetResultEventList(siteId, startDate, endDate);
  496. if (siteId == 0) siteId = 100;
  497. // 휴일
  498. var holidayList = _GetHolidayList(siteId, selectMonth.Year, selectMonth.Month, startDate, endDate);
  499. // 주말
  500. var weekend = _context.CmHolidayWeekend.Where(
  501. x => x.SiteId == siteId
  502. && x.IsUse == true
  503. ).FirstOrDefault();
  504. // 집중업무
  505. var workName = _monthWorkService.GetKeyWork(siteId, selectMonth.Month);
  506. if (weekend != null) {
  507. }
  508. var result = new {
  509. Year = selectMonth.Year,
  510. Month = selectMonth.Month,
  511. Theme = workName,
  512. StartDate = startDate.ToString("yyyy-MM-dd"),
  513. EndDate = endDate.ToString("yyyy-MM-dd"),
  514. RequestList = requestList,
  515. //ResultList = resultList,
  516. HolidayList = holidayList,
  517. Saturday = weekend?.Saturday ?? false,
  518. Sunday = weekend?.Sunday ?? false,
  519. };
  520. return Ok(result);
  521. }
  522. private IQueryable<CalendarEvent> _GetRequestEventList(int? siteId, DateTime startDate, DateTime endDate) {
  523. var events = _context.FmsWorkRequest.Select(x => x);
  524. if (siteId != null && siteId != 0) {
  525. events = events.Where(x => x.SiteId == siteId.Value);
  526. }
  527. var query = from x in events
  528. where x.FmsWorkResult == null
  529. where x.StartWorkDate.Date >= startDate.Date && x.StartWorkDate.Date <= endDate.Date
  530. && x.WorkProgressId == 1 // 작업계획
  531. && (x.FmsWorkSchedule == null || (x.FmsWorkSchedule != null && x.FmsWorkSchedule.IsUse == true))
  532. select x;
  533. var list = query.Select(x => new CalendarEvent {
  534. Title = x.Title,
  535. Start = x.StartWorkDate.ToString("yyyy-MM-dd"),
  536. End = x.StartWorkDate.ToString("yyyy-MM-dd"),
  537. WorkType = x.WorkType.Name,
  538. Id = x.SiteId.ToString() + "-" + x.WorkRequestId.ToString(),
  539. GroupId = x.WorkTypeId,
  540. Type = "예정",
  541. WorkRequestId = x.WorkRequestId,
  542. });
  543. return list;
  544. }
  545. private IQueryable<CalendarEvent> _GetResultEventList(int? siteId, DateTime startDate, DateTime endDate) {
  546. var events = _context.FmsWorkResult.Select(x => x);
  547. if (siteId != null) {
  548. events = events.Where(x => x.SiteId == siteId.Value);
  549. }
  550. var query = from x in events
  551. where x.StartDate.Date >= startDate.Date && x.StartDate <= endDate.Date
  552. select x;
  553. var list = query.Select(x => new CalendarEvent {
  554. Title = x.FmsWorkRequest.Title,
  555. Start = x.StartDate.ToString("yyyy-MM-dd"),
  556. End = x.EndDate.ToString("yyyy-MM-dd"),
  557. WorkType = x.FmsWorkRequest.WorkType.Name,
  558. Type = "진행",
  559. WorkRequestId = x.WorkRequestId,
  560. });
  561. return list;
  562. }
  563. private IList<CalendarBackground> _GetHolidayList(int siteId, int year, int month, DateTime startDate, DateTime endDate) {
  564. var list = new List<CalendarBackground>();
  565. var holidays = _context.CmHoliday.Where(
  566. x => x.SiteId == siteId
  567. && x.IsUse == true
  568. );
  569. foreach (var item in holidays) {
  570. if (item.IsLunar) {
  571. var solar = LunarSolarConverter.LunarToSolar(new Lunar() {
  572. lunarYear = year,
  573. lunarMonth = item.HolidayMonth,
  574. lunarDay = item.HolidayDay
  575. });
  576. list.Add(new CalendarBackground {
  577. Title = item.Name + "(음력)",
  578. Date = new DateTime(solar.solarYear, solar.solarMonth, solar.solarDay).ToString("yyyy-MM-dd"),
  579. Type = "공휴일",
  580. });
  581. } else {
  582. list.Add(new CalendarBackground {
  583. Title = item.Name,
  584. Date = new DateTime(year, item.HolidayMonth, item.HolidayDay).ToString("yyyy-MM-dd"),
  585. Type = "공휴일",
  586. });
  587. }
  588. }
  589. var query = from x in _context.CmHolidayCustom
  590. where x.SiteId == siteId
  591. where x.HolidayDate.Date >= startDate.Date && x.HolidayDate >= endDate.Date
  592. select x;
  593. var customs = query.Select(x => new CalendarBackground {
  594. Title = x.Name,
  595. Date = x.HolidayDate.ToString("yyyy-MM-dd"),
  596. Type = "휴일",
  597. });
  598. return list;
  599. }
  600. [HttpDelete("{siteId}/{workRequestId}")]
  601. public IActionResult Delete(int siteId, int workRequestId) {
  602. _service.Delete(siteId, workRequestId);
  603. return Ok();
  604. }
  605. //작업승인 달력 상세(리스트)
  606. [HttpGet("[action]")]
  607. public IActionResult CustomList([FromQuery] PagingRequest req, DateTime dates) {
  608. DateTime selectMonth;
  609. selectMonth = new DateTime(dates.Year, dates.Month, dates.Day);
  610. var startDate = selectMonth;
  611. var endDate = selectMonth.AddDays(1).AddSeconds(-1);
  612. var list = _service.GetAll()
  613. .Where(x => x.StartWorkDate.Date >= startDate.Date && x.StartWorkDate.Date <= endDate.Date)
  614. //query.Where(x=>x.FmsWorkResult == null );
  615. .Select(x => new { Title = "[" + x.Site.Name + "]" + x.Title, x.SiteId, x.WorkRequestId, x.WorkTypeId, WorkScheduleId = x.FmsWorkSchedule.WorkScheduleId });
  616. var paging = PagingList.Pagination(list, req.page, req.limit);
  617. return Ok(paging);
  618. }
  619. //작업승인 달력 상세(리스트)
  620. [HttpGet("[action]")]
  621. public IActionResult CustomListSite([FromQuery] PagingRequest req, int siteId, DateTime dates) {
  622. DateTime selectMonth;
  623. selectMonth = new DateTime(dates.Year, dates.Month, dates.Day);
  624. var startDate = selectMonth;
  625. var endDate = selectMonth.AddDays(1).AddSeconds(-1);
  626. var list = _service.GetAll()
  627. .Where(x => x.SiteId == siteId && x.StartWorkDate.Date >= startDate.Date && x.StartWorkDate.Date <= endDate.Date)
  628. .Select(x => new {
  629. x.Title,
  630. x.SiteId,
  631. x.WorkRequestId,
  632. x.WorkTypeId,
  633. WorkScheduleId = x.FmsWorkSchedule.WorkScheduleId,
  634. x.WorkProgressId,
  635. WorkProgressName = x.WorkProgress.Name
  636. });
  637. var paging = PagingList.Pagination(list, req.page, req.limit);
  638. return Ok(paging);
  639. }
  640. }
  641. }