DailyReportService.cs 8.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191
  1. using System;
  2. using System.Collections.Generic;
  3. using System.IdentityModel.Tokens.Jwt;
  4. using System.Linq;
  5. using System.Security.Claims;
  6. using System.Text;
  7. using FMSAdmin.Data;
  8. using FMSAdmin.Helpers;
  9. using FMSAdmin.Entities;
  10. using Microsoft.EntityFrameworkCore;
  11. using Microsoft.Extensions.Logging;
  12. using Microsoft.Extensions.Options;
  13. using Microsoft.IdentityModel.Tokens;
  14. using FMSAdmin.Models;
  15. namespace FMSApp.Services {
  16. public class DailyReportService {
  17. private readonly ILogger<DailyReportService> _logger;
  18. private readonly FMSContext _context;
  19. private readonly AppSettings _appSettings;
  20. private readonly StorageHelper _storage;
  21. public DailyReportService(
  22. ILogger<DailyReportService> logger,
  23. FMSContext context,
  24. IOptions<AppSettings> appSettings,
  25. StorageHelper storage
  26. ) {
  27. _logger = logger;
  28. _context = context;
  29. _appSettings = appSettings.Value;
  30. _storage = storage;
  31. }
  32. public IQueryable<FmsDailyReport> GetAll() {
  33. var query = _context.FmsDailyReport;
  34. return query;
  35. }
  36. public int GetWorkStatusByWorkTypeId(int siteId, int workTypeId, DateTime addDate) {
  37. return (from x in _context.FmsWorkOrder
  38. let y = from y in _context.FmsWorkRequest
  39. where y.SiteId == siteId && // 2019.07.12
  40. y.WorkTypeId == workTypeId
  41. select y.WorkRequestId
  42. where x.SiteId == siteId &&
  43. x.OrderDate.Year == addDate.Year &&
  44. x.OrderDate.Month == addDate.Month &&
  45. x.OrderDate.Day == addDate.Day &&
  46. y.Contains(x.WorkRequestId)
  47. select x
  48. ).Count();
  49. }
  50. public int GetWorkStatusByWorkProgressId(int siteId, int workProgressId, DateTime addDate) {
  51. return (from x in _context.FmsWorkOrder
  52. let y = from y in _context.FmsWorkRequest
  53. where y.SiteId == siteId && //2019.07.12
  54. y.WorkProgressId == (int)workProgressId &&
  55. y.StartWorkDate <= addDate.Date
  56. select y.WorkRequestId
  57. where x.SiteId == siteId &&
  58. y.Contains(x.WorkRequestId)
  59. select x
  60. ).Count();
  61. }
  62. public int GetFmsWorkResultComplete(int siteId, int workProgressId, DateTime addDate) {
  63. return (from x in _context.FmsWorkResult
  64. let y = from y in _context.FmsWorkRequest
  65. where y.SiteId == siteId && //2019.07.12
  66. y.WorkProgressId == (int)workProgressId &&
  67. y.StartWorkDate <= addDate.Date
  68. select y.WorkRequestId
  69. where x.SiteId == siteId &&
  70. y.Contains(x.WorkRequestId)
  71. select x
  72. ).Count();
  73. }
  74. public int GetFmsWorkResultApproval(int siteId, int workProgressId, DateTime addDate) {
  75. return (from x in _context.FmsWorkResult
  76. let y = from y in _context.FmsWorkRequest
  77. where y.SiteId == siteId && //2019.07.12
  78. y.WorkProgressId == (int)workProgressId
  79. select y.WorkRequestId
  80. where x.SiteId == siteId &&
  81. y.Contains(x.WorkRequestId) &&
  82. x.ConfirmedDate.Value.Year == addDate.Year &&
  83. x.ConfirmedDate.Value.Month == addDate.Month &&
  84. x.ConfirmedDate.Value.Day == addDate.Day
  85. select x
  86. ).Count();
  87. }
  88. public void Approve(int siteId, string approverUserId, DateTime addDate, int businessFieldId) {
  89. var persist = _context.FmsDailyReport.FirstOrDefault(
  90. x => x.SiteId == siteId
  91. && x.AddDate == addDate.Date
  92. // && x.BusinessFieldId == businessFieldId 20200625 요청
  93. );
  94. if (persist == null) throw new ServiceException("해당일자의 일간보고서가 존재하지 않습니다.");
  95. if (string.IsNullOrEmpty(persist.ApproverUserId)) {
  96. persist.ApproverUserId = approverUserId;
  97. persist.ApproveDate = DateTime.Now;
  98. } else if (string.IsNullOrEmpty(persist.ApproverUserId2)) {
  99. persist.ApproverUserId2 = approverUserId;
  100. persist.ApproveDate2 = DateTime.Now;
  101. } else if (string.IsNullOrEmpty(persist.ApproverUserId3)) {
  102. persist.ApproverUserId3 = approverUserId;
  103. persist.ApproveDate3 = DateTime.Now;
  104. } else if (string.IsNullOrEmpty(persist.ApproverUserId4)) {
  105. persist.ApproverUserId4 = approverUserId;
  106. persist.ApproveDate4 = DateTime.Now;
  107. } else if (string.IsNullOrEmpty(persist.ApproverUserId5)) {
  108. persist.ApproverUserId5 = approverUserId;
  109. persist.ApproveDate5 = DateTime.Now;
  110. } else {
  111. throw new ServiceException("결재 한도를 초과하였습니다.");
  112. }
  113. _context.FmsDailyReport.Update(persist);
  114. _context.SaveChanges();
  115. }
  116. public void Delete(int siteId, DateTime addDate, int businessFieldId) {
  117. var persist = _context.FmsDailyReport.FirstOrDefault(
  118. x => x.SiteId == siteId
  119. && x.AddDate == addDate.Date
  120. && x.BusinessFieldId == businessFieldId
  121. );
  122. if (persist == null) throw new ServiceException("해당일자의 일간보고서가 존재하지 않습니다.");
  123. _context.FmsDailyReport.Remove(persist);
  124. _context.SaveChanges();
  125. }
  126. public void Save(FmsDailyReport data, bool isCreate) {
  127. if (data.CmFile != null && data.CmFile.IsUpload) {
  128. data.CmFile.SiteId = data.SiteId;
  129. var category = _context.CmFileCategory.First(x => x.Name == "dailyReport");
  130. data.CmFile.FileCategory = category;
  131. data.CmFile.CreatedDate = DateTime.Now;
  132. } else {
  133. data.CmFile = null;
  134. }
  135. var persist = _context.FmsDailyReport.FirstOrDefault(
  136. x => x.SiteId == data.SiteId
  137. && x.AddDate == data.AddDate);
  138. if (persist == null) {
  139. data.RegisterDate = DateTime.Now;
  140. _context.FmsDailyReport.Add(data);
  141. _context.SaveChanges();
  142. if (data.CmFile != null && data.CmFile.IsUpload) {
  143. _storage.CopyEntity(data.CmFile.Path, data.CmFile);
  144. }
  145. } else {
  146. if (isCreate) throw new ServiceException("해당일자의 보고서가 이미 등록되어있습니다.");
  147. persist.Name = data.Name;
  148. persist.Contents = data.Contents;
  149. persist.Datas = data.Datas;
  150. if (data.CmFile != null && data.CmFile.IsUpload) {
  151. persist.CmFile = data.CmFile;
  152. }
  153. _context.FmsDailyReport.Update(persist);
  154. _context.SaveChanges();
  155. if (data.CmFile != null && data.CmFile.IsUpload) {
  156. _storage.CopyEntity(data.CmFile.Path, persist.CmFile);
  157. }
  158. }
  159. }
  160. public void Delete(int siteId, DateTime addData) {
  161. try {
  162. var data = _context.FmsDailyReport.First(x => x.SiteId == siteId && x.AddDate == addData);
  163. _context.FmsDailyReport.Remove(data);
  164. //data.IsUse = false;
  165. _context.SaveChanges();
  166. } catch {
  167. throw new ServiceException("이미 다른 화면에서 사용중이므로 삭제할 수 없습니다.");
  168. }
  169. }
  170. }
  171. }