MaterialPurchaseRequestService.cs 12 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251
  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 FMSAdmin.Services {
  16. public class MaterialPurchaseRequestService {
  17. private readonly ILogger<MaterialPurchaseRequestService> _logger;
  18. private readonly FMSContext _context;
  19. private readonly StorageHelper _storage;
  20. public MaterialPurchaseRequestService(
  21. ILogger<MaterialPurchaseRequestService> logger,
  22. FMSContext context,
  23. StorageHelper storage) {
  24. _logger = logger;
  25. _context = context;
  26. _storage = storage;
  27. }
  28. public void Create(FmsMaterialPurchaseRequest data) {
  29. using (var transaction = _context.Database.BeginTransaction()) {
  30. if (_context.SiteConfig.Single().UseMaterialBuyAutoApproval) {
  31. data.ProgressId = 2; //신청승인
  32. data.ApprovalDate = DateTime.Now;
  33. } else {
  34. data.ProgressId = 1; //구매신청
  35. data.ApprovalDate = null;
  36. data.ApprovalUserId = null;
  37. }
  38. data.BSameOrder = false;
  39. _context.FmsMaterialPurchaseRequest.Add(data);
  40. _context.SaveChanges();
  41. if (_context.SiteConfig.Single().UseMaterialPurchaseOrder && data.ProgressId == 2) {
  42. //발주등록 모듈화
  43. FmsMaterialPurchaseOrder pOrder = new FmsMaterialPurchaseOrder {
  44. SiteId = data.SiteId,
  45. BusinessFieldId = data.BusinessFieldId,
  46. OrderDate = data.RequestDate,
  47. OrderUserId = data.RequestUserId,
  48. Title = data.Title + " 발주",
  49. FmsMaterialPurchaseRequest = data
  50. };
  51. pOrder.FmsMaterialPurchaseRequest.ProgressId = 3; //발주요청
  52. pOrder.FmsMaterialPurchaseRequest.BSameOrder = true; //구매신청 발주요청 자재비교
  53. //자재등록
  54. pOrder.FmsMaterialPurchaseOrderMaterial.Clear();
  55. foreach (var item in data.FmsMaterialPurchaseRequestMaterial) {
  56. var dMateril = _context.FmsMaterial.Where(x => x.SiteId == item.SiteId && x.MaterialId == item.MaterialId).FirstOrDefault();
  57. pOrder.FmsMaterialPurchaseOrderMaterial.Add(new FmsMaterialPurchaseOrderMaterial() {
  58. SiteId = item.SiteId,
  59. BusinessFieldId = item.BusinessFieldId,
  60. PurchaseOrderId = pOrder.PurchaseOrderId,
  61. MaterialId = item.MaterialId,
  62. MaterialCount = item.MaterialCount,
  63. UnitCost = Util.ToInt(dMateril.FinalPrice)
  64. });
  65. }
  66. _context.FmsMaterialPurchaseOrder.Add(pOrder);
  67. _context.SaveChanges();
  68. }
  69. transaction.Commit();
  70. }
  71. }
  72. public void Edit(int id, int siteId, int businessFieldId, FmsMaterialPurchaseRequest data) {
  73. var persist = _context.FmsMaterialPurchaseRequest
  74. .Where(x => x.PurchaseRequestId == id && x.SiteId == siteId && x.BusinessFieldId == businessFieldId).FirstOrDefault();
  75. if (persist == null) {
  76. throw new ServiceException("정보를 찾을 수 없습니다.");
  77. }
  78. using (var transaction = _context.Database.BeginTransaction()) {
  79. persist.SiteId = data.SiteId;
  80. persist.BusinessFieldId = data.BusinessFieldId;
  81. persist.PurchaseRequestId = data.PurchaseRequestId;
  82. persist.PurchaseTypeId = data.PurchaseTypeId;
  83. persist.RequestDate = data.RequestDate;
  84. persist.RequestUserId = data.RequestUserId;
  85. persist.PurchaseHopeDate = data.PurchaseHopeDate;
  86. persist.Title = data.Title;
  87. persist.Reason = (data.Reason != null) ? data.Reason : "";
  88. if (_context.SiteConfig.Single().UseMaterialBuyAutoApproval) {
  89. persist.ProgressId = 2; //신청승인
  90. persist.ApprovalDate = DateTime.Now;
  91. persist.ApprovalUserId = data.ApprovalUserId;
  92. } else {
  93. persist.ProgressId = 1; //구매신청
  94. persist.ApprovalDate = null;
  95. persist.ApprovalUserId = null;
  96. }
  97. persist.BSameOrder = data.BSameOrder;
  98. //자재등록
  99. persist.FmsMaterialPurchaseRequestMaterial.Clear();
  100. foreach (var item in data.FmsMaterialPurchaseRequestMaterial) {
  101. persist.FmsMaterialPurchaseRequestMaterial.Add(new FmsMaterialPurchaseRequestMaterial() {
  102. SiteId = persist.SiteId,
  103. BusinessFieldId = persist.BusinessFieldId,
  104. PurchaseRequestId = persist.PurchaseRequestId,
  105. MaterialId = item.MaterialId,
  106. MaterialCount = item.MaterialCount,
  107. });
  108. }
  109. _context.FmsMaterialPurchaseRequest.Update(persist);
  110. _context.SaveChanges();
  111. if (_context.SiteConfig.Single().UseMaterialPurchaseOrder && persist.ProgressId == 2) {
  112. //발주등록 모듈화
  113. var persist2 = _context.FmsMaterialPurchaseOrder.Where(x => x.PurchaseRequestId == id && x.SiteId == siteId).FirstOrDefault();
  114. if (persist2 == null) {
  115. throw new ServiceException("정보를 찾을 수 없습니다.");
  116. }
  117. persist2.SiteId = data.SiteId;
  118. persist2.BusinessFieldId = data.BusinessFieldId;
  119. persist2.OrderDate = data.RequestDate;
  120. persist2.OrderUserId = data.RequestUserId;
  121. persist2.Title = data.Title + " 발주";
  122. persist2.FmsMaterialPurchaseRequest = data;
  123. persist2.FmsMaterialPurchaseRequest.ProgressId = 3; //발주요청
  124. persist2.FmsMaterialPurchaseRequest.BSameOrder = true; //구매신청 발주요청 자재비교
  125. //자재등록
  126. persist2.FmsMaterialPurchaseOrderMaterial.Clear();
  127. foreach (var item in data.FmsMaterialPurchaseRequestMaterial) {
  128. var dMateril = _context.FmsMaterial.Where(x => x.SiteId == item.SiteId && x.MaterialId == item.MaterialId).FirstOrDefault();
  129. persist2.FmsMaterialPurchaseOrderMaterial.Add(new FmsMaterialPurchaseOrderMaterial() {
  130. SiteId = item.SiteId,
  131. BusinessFieldId = item.BusinessFieldId,
  132. PurchaseOrderId = persist2.PurchaseOrderId,
  133. MaterialId = item.MaterialId,
  134. MaterialCount = item.MaterialCount,
  135. UnitCost = Util.ToInt(dMateril.FinalPrice)
  136. });
  137. }
  138. _context.FmsMaterialPurchaseOrder.Update(persist2);
  139. _context.SaveChanges();
  140. }
  141. transaction.Commit();
  142. }
  143. }
  144. public IQueryable<FmsMaterialPurchaseRequest> GetAll() {
  145. var query = _context.FmsMaterialPurchaseRequest/*.AsNoTracking()*/;
  146. return query;
  147. }
  148. public FmsMaterialPurchaseRequest Get(int id, int siteId, int businessFieldId) {
  149. var data = _context.FmsMaterialPurchaseRequest.Single(x => x.PurchaseRequestId == id && x.SiteId == siteId && x.BusinessFieldId == businessFieldId);
  150. return data;
  151. }
  152. public IQueryable<FmsMaterialPurchaseRequest> Gets(int id, int siteId, int businessFieldId) {
  153. var data = _context.FmsMaterialPurchaseRequest.Where(x => x.PurchaseRequestId == id && x.SiteId == siteId && x.BusinessFieldId == businessFieldId);
  154. return data;
  155. }
  156. public void Delete(int id, int siteId) {
  157. var data = _context.FmsMaterialPurchaseRequest.First(x => x.PurchaseRequestId == id && x.SiteId == siteId);
  158. var pOrder = _context.FmsMaterialPurchaseOrder.Where(x => x.PurchaseRequestId == id && x.SiteId == siteId).ToList();
  159. using (var transaction = _context.Database.BeginTransaction()) {
  160. if (_context.SiteConfig.Single().UseMaterialPurchaseOrder) {
  161. //발주등록 모듈화
  162. foreach (var item in pOrder) {
  163. var pStored = _context.FmsMaterialStored.Where(x => x.PurchaseOrderId == item.PurchaseOrderId && x.SiteId == siteId).FirstOrDefault();
  164. if (pStored != null) {
  165. throw new ServiceException("입고등록된 내역이 있으므로 삭제할 수 없습니다.");
  166. }
  167. }
  168. _context.FmsMaterialPurchaseOrder.RemoveRange(pOrder);
  169. _context.SaveChanges();
  170. } else if (_context.SiteConfig.Single().UseMaterialBuyAutoApproval) {
  171. //구매신청승인 모듈화
  172. if (pOrder != null) {
  173. throw new ServiceException("발주등록된 내역이 있으므로 삭제할 수 없습니다.");
  174. }
  175. } else {
  176. if (data.ProgressId > 1) {
  177. throw new ServiceException("신청승인된 내역이 있으므로 삭제할 수 없습니다.");
  178. }
  179. }
  180. _context.FmsMaterialPurchaseRequest.Remove(data);
  181. _context.SaveChanges();
  182. transaction.Commit();
  183. }
  184. }
  185. public void Approval(string userId, ICollection<FmsMaterialPurchaseRequest> data) {
  186. using (var transaction = _context.Database.BeginTransaction()) {
  187. foreach (var item in data) {
  188. if (item.ApprovalDate != null) continue;
  189. var persist = _context.FmsMaterialPurchaseRequest
  190. .Where(x => x.PurchaseRequestId == item.PurchaseRequestId && x.SiteId == item.SiteId).FirstOrDefault();
  191. if (persist == null) {
  192. throw new ServiceException("정보를 찾을 수 없습니다.");
  193. }
  194. if (persist.ProgressId == 2) {
  195. throw new ServiceException("승인 할 구매신청 항목이 없습니다. 이미 승인되었거나 선택된 항목이 없습니다.");
  196. }
  197. persist.ProgressId = 2; //신청승인
  198. persist.ApprovalDate = DateTime.Now;
  199. persist.ApprovalUserId = userId;
  200. _context.FmsMaterialPurchaseRequest.Update(persist);
  201. }
  202. _context.SaveChanges();
  203. transaction.Commit();
  204. }
  205. }
  206. public void ApprovalEach(int siteId, int id, string userId) {
  207. var persist = _context.FmsMaterialPurchaseRequest
  208. .Where(x => x.PurchaseRequestId == id && x.SiteId == siteId).FirstOrDefault();
  209. if (persist == null) {
  210. throw new ServiceException("정보를 찾을 수 없습니다.");
  211. }
  212. using (var transaction = _context.Database.BeginTransaction()) {
  213. persist.ProgressId = 2; //신청승인
  214. persist.ApprovalDate = DateTime.Now;
  215. persist.ApprovalUserId = userId;
  216. _context.FmsMaterialPurchaseRequest.Update(persist);
  217. _context.SaveChanges();
  218. transaction.Commit();
  219. }
  220. }
  221. }
  222. }