MaterialPurchaseOrderService.cs 6.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157
  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 MaterialPurchaseOrderService {
  17. private readonly ILogger<MaterialPurchaseOrderService> _logger;
  18. private readonly FMSContext _context;
  19. private readonly StorageHelper _storage;
  20. public MaterialPurchaseOrderService(
  21. ILogger<MaterialPurchaseOrderService> logger,
  22. FMSContext context,
  23. StorageHelper storage) {
  24. _logger = logger;
  25. _context = context;
  26. _storage = storage;
  27. }
  28. public void Create(FmsMaterialPurchaseOrder data) {
  29. using (var transaction = _context.Database.BeginTransaction()) {
  30. var persist = _context.FmsMaterialPurchaseRequest
  31. .Where(x => x.PurchaseRequestId == data.PurchaseRequestId && x.SiteId == data.SiteId).FirstOrDefault();
  32. data.FmsMaterialPurchaseRequest = persist;
  33. data.FmsMaterialPurchaseRequest.ProgressId = 3; //발주요청
  34. _context.FmsMaterialPurchaseOrder.Add(data);
  35. _context.SaveChanges();
  36. //자재 정보 최종가격 업데이트
  37. MaterialPriceUpdate(data.SiteId, data.PurchaseOrderId);
  38. //구매신청, 발주신청 자재 비교
  39. MaterialCompare(data.SiteId, data.PurchaseOrderId, data.PurchaseRequestId);
  40. transaction.Commit();
  41. }
  42. }
  43. public void Edit(int id, int siteId, FmsMaterialPurchaseOrder data) {
  44. var persist = _context.FmsMaterialPurchaseOrder
  45. .Where(x => x.PurchaseOrderId == id && x.SiteId == siteId).FirstOrDefault();
  46. if (persist == null) {
  47. throw new ServiceException("정보를 찾을 수 없습니다.");
  48. }
  49. using (var transaction = _context.Database.BeginTransaction()) {
  50. persist.SiteId = data.SiteId;
  51. persist.BusinessFieldId = data.BusinessFieldId;
  52. persist.PurchaseOrderId = id;
  53. persist.PurchaseRequestId = data.PurchaseRequestId;
  54. persist.TradeCompanyId = data.TradeCompanyId;
  55. persist.OrderDate = data.OrderDate;
  56. persist.OrderUserId = data.OrderUserId;
  57. persist.Title = data.Title;
  58. persist.Reason = (data.Reason != null) ? data.Reason : "";
  59. persist.StoredDueDate = data.StoredDueDate;
  60. persist.FmsMaterialPurchaseRequest.ProgressId = 3; //발주요청
  61. //자재등록
  62. persist.FmsMaterialPurchaseOrderMaterial.Clear();
  63. foreach (var item in data.FmsMaterialPurchaseOrderMaterial) {
  64. persist.FmsMaterialPurchaseOrderMaterial.Add(new FmsMaterialPurchaseOrderMaterial() {
  65. SiteId = persist.SiteId,
  66. BusinessFieldId = persist.BusinessFieldId,
  67. PurchaseOrderId = persist.PurchaseOrderId,
  68. MaterialId = item.MaterialId,
  69. MaterialCount = item.MaterialCount,
  70. UnitCost = item.UnitCost,
  71. });
  72. }
  73. _context.FmsMaterialPurchaseOrder.Update(persist);
  74. _context.SaveChanges();
  75. //자재 정보 최종가격 업데이트
  76. MaterialPriceUpdate(persist.SiteId, persist.PurchaseOrderId);
  77. //구매신청, 발주신청 자재 비교
  78. MaterialCompare(data.SiteId, data.PurchaseOrderId, data.PurchaseRequestId);
  79. transaction.Commit();
  80. }
  81. }
  82. public IQueryable<FmsMaterialPurchaseOrder> GetAll() {
  83. var query = _context.FmsMaterialPurchaseOrder/*.AsNoTracking()*/;
  84. return query;
  85. }
  86. public FmsMaterialPurchaseOrder Get(int id, int siteId) {
  87. var data = _context.FmsMaterialPurchaseOrder.Single(x => x.PurchaseOrderId == id && x.SiteId == siteId);
  88. return data;
  89. }
  90. public IQueryable<FmsMaterialPurchaseOrder> Gets(int id, int siteId) {
  91. var data = _context.FmsMaterialPurchaseOrder.Where(x => x.PurchaseOrderId == id && x.SiteId == siteId);
  92. return data;
  93. }
  94. public void Delete(int id, int siteId) {
  95. var data = _context.FmsMaterialPurchaseOrder.First(x => x.PurchaseOrderId == id && x.SiteId == siteId);
  96. _context.FmsMaterialPurchaseOrder.Remove(data);
  97. _context.SaveChanges();
  98. }
  99. public void MaterialCompare(int siteId, int purchaseOrderId, int purchaseRequestId) {
  100. //구매신청, 발주신청 자재 비교
  101. var query = _context.FmsMaterialPurchaseRequestMaterial.Where(x => x.SiteId == siteId && x.PurchaseRequestId == purchaseRequestId).ToList();
  102. var query2 = _context.FmsMaterialPurchaseOrderMaterial.Where(x => x.SiteId == siteId && x.PurchaseOrderId == purchaseOrderId).ToList();
  103. bool bSame = false;
  104. if (query.Count() == query2.Count()) {
  105. foreach (var r in query) {
  106. var fM = query2.SingleOrDefault(x => x.MaterialId == r.MaterialId && x.MaterialCount == r.MaterialCount);
  107. if (fM == null) {
  108. bSame = false;
  109. break;
  110. } else {
  111. bSame = true;
  112. }
  113. }
  114. } else {
  115. bSame = false;
  116. }
  117. var persist = _context.FmsMaterialPurchaseRequest.Where(x => x.SiteId == siteId && x.PurchaseRequestId == purchaseRequestId).FirstOrDefault();
  118. if (persist != null) {
  119. persist.BSameOrder = bSame;
  120. _context.FmsMaterialPurchaseRequest.Update(persist);
  121. _context.SaveChanges();
  122. }
  123. }
  124. public void MaterialPriceUpdate(int siteId, int orderId) {
  125. var data_b = _context.FmsMaterialPurchaseOrderMaterial.Where(x => x.SiteId == siteId && x.PurchaseOrderId == orderId).ToList();
  126. var d_material = _context.FmsMaterial.Where(x => x.SiteId == siteId);
  127. foreach (FmsMaterialPurchaseOrderMaterial m in data_b) {
  128. m.FmsMaterial = d_material.Where(f => f.MaterialId == m.MaterialId).FirstOrDefault();
  129. m.FmsMaterial.FinalPrice = (m.FmsMaterial.FinalPrice != m.UnitCost) ? m.UnitCost : m.FmsMaterial.FinalPrice;
  130. _context.FmsMaterialPurchaseOrderMaterial.Update(m);
  131. }
  132. _context.SaveChanges();
  133. }
  134. }
  135. }