EquipmentHistoryService.cs 6.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using FMSAdmin.Data;
  5. using FMSAdmin.Helpers;
  6. using FMSAdmin.Entities;
  7. using Microsoft.Extensions.Logging;
  8. using FMSAdmin.Models;
  9. namespace FMSAdmin.Services {
  10. public class EquipmentHistoryService {
  11. private readonly ILogger<EquipmentHistoryService> _logger;
  12. private readonly FMSContext _context;
  13. public EquipmentHistoryService(
  14. ILogger<EquipmentHistoryService> logger,
  15. FMSContext context,
  16. StorageHelper storage) {
  17. _logger = logger;
  18. _context = context;
  19. }
  20. public void Create(FmsEquipmentHistory data) {
  21. using (var transaction = _context.Database.BeginTransaction()) {
  22. var persist = _context.FmsEquipmentHistory.OrderByDescending(x => x.EquipmentHistoryId)
  23. .Where(x => x.EquipmentId == data.EquipmentId && x.SiteId == data.SiteId).FirstOrDefault();
  24. if (persist == null) {
  25. throw new ServiceException("정보를 찾을 수 없습니다.");
  26. }
  27. data.TotalStockCount = persist.TotalStockCount + data.StoredCount;
  28. data.CurrentStockCount = persist.CurrentStockCount + data.StoredCount;
  29. data.ReturnCount = 0;
  30. data.AddDate = DateTime.Now;
  31. data.UpdateDate = DateTime.Now;
  32. data.IsReturnApproval = false;
  33. _context.FmsEquipmentHistory.Add(data);
  34. _context.SaveChanges();
  35. if (!_context.SiteConfig.Single().UseEquipmentRent) {
  36. var rentInfo = new FmsEquipmentRentInfo {
  37. SiteId = data.SiteId,
  38. RegisterUserId = persist.FmsEquipment.RegisterUserId,
  39. RentUserId = persist.FmsEquipment.RegisterUserId,
  40. RentDate = DateTime.Now,
  41. EquipmentStateTypeId = 2,
  42. Comment = "입고",
  43. Title = "입고",
  44. };
  45. var rentHistory = new FmsEquipmentHistory {
  46. EquipmentId = data.EquipmentId,
  47. SiteId = data.SiteId,
  48. TotalStockCount = data.TotalStockCount,
  49. CurrentStockCount = 0,
  50. RentCount = data.StoredCount,
  51. CurrentRentCount = data.StoredCount,
  52. ReturnCount = 0,
  53. LossCount = 0,
  54. StoredCount = 0,
  55. EquipmentStateTypeId = 2,
  56. IsReturned = false,
  57. AddDate = DateTime.Now,
  58. UpdateDate = DateTime.Now,
  59. IsReturnApproval = false
  60. };
  61. rentInfo.FmsEquipmentHistory.Add(rentHistory);
  62. _context.FmsEquipmentRentInfo.Add(rentInfo);
  63. _context.SaveChanges();
  64. }
  65. transaction.Commit();
  66. }
  67. }
  68. public void Edit(int id, int siteId, FmsEquipmentHistory data) {
  69. }
  70. public IQueryable<FmsEquipmentHistory> GetAll() {
  71. var query = from p in _context.FmsEquipmentHistory
  72. select p;
  73. return query;
  74. }
  75. public FmsEquipmentHistory Get(int id, int siteId) {
  76. var data = _context.FmsEquipmentHistory.Single(x => x.EquipmentHistoryId == id && x.SiteId == siteId);
  77. return data;
  78. }
  79. public IQueryable<FmsEquipmentHistory> Gets(int id, int siteId) {
  80. var data = _context.FmsEquipmentHistory.Where(x => x.EquipmentHistoryId == id && x.SiteId == siteId);
  81. return data;
  82. }
  83. public void Delete(int id, int siteId) {
  84. using (var transaction = _context.Database.BeginTransaction()) {
  85. var data = _context.FmsEquipmentHistory.First(x => x.EquipmentHistoryId == id && x.SiteId == siteId);
  86. var rentInfo = _context.FmsEquipmentRentInfo.First(x => x.SiteId == siteId && x.EquipmentRentId == data.EquipmentRentId);
  87. if (data.EquipmentStateTypeId != 2) {
  88. //이미 승인된경우 삭제 안됨
  89. if (data.IsReturnApproval)
  90. throw new ServiceException("이미 승인된 이력입니다.");
  91. foreach (var history in rentInfo.FmsEquipmentHistory.Where(x => x.EquipmentId == data.EquipmentId && x.EquipmentHistoryId > data.EquipmentHistoryId)) {
  92. history.TotalStockCount += data.LossCount.GetValueOrDefault();
  93. history.CurrentStockCount -= data.ReturnCount.GetValueOrDefault();
  94. history.CurrentRentCount += data.LossCount.GetValueOrDefault() + data.ReturnCount.GetValueOrDefault();
  95. }
  96. rentInfo.FmsEquipmentHistory.Where(x => x.EquipmentId == data.EquipmentId && x.EquipmentHistoryId != data.EquipmentHistoryId)
  97. .OrderByDescending(x => x.EquipmentHistoryId).FirstOrDefault().IsReturned = false;
  98. rentInfo.ReturnFixDate = null;
  99. rentInfo.FmsEquipmentHistory.Remove(data);
  100. rentInfo.EquipmentStateTypeId = 2;
  101. _context.FmsEquipmentRentInfo.Update(rentInfo);
  102. _context.SaveChanges();
  103. } else {
  104. _context.FmsEquipmentRentInfo.Remove(rentInfo);
  105. _context.SaveChanges();
  106. }
  107. transaction.Commit();
  108. }
  109. }
  110. public IQueryable<FmsEquipmentHistory> GetHistory() {
  111. var query = _context.FmsEquipmentHistory;
  112. return query;
  113. }
  114. public void ReturnApproval(int siteId, int id, string userId) {
  115. var persist = _context.FmsEquipmentHistory.First(x => x.SiteId == siteId && x.EquipmentHistoryId == id);
  116. if (persist.IsReturnApproval) throw new ServiceException("이미 승인된 이력입니다.");
  117. persist.IsReturnApproval = true;
  118. persist.ReturnApprovalDate = DateTime.Now;
  119. persist.ReturnApprovalUserId = userId;
  120. _context.FmsEquipmentHistory.Update(persist);
  121. _context.SaveChanges();
  122. }
  123. }
  124. }