MaterialBaseStockService.cs 5.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124
  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 MaterialBaseStockService {
  17. private readonly ILogger<MaterialBaseStockService> _logger;
  18. private readonly FMSContext _context;
  19. public MaterialBaseStockService(
  20. ILogger<MaterialBaseStockService> logger,
  21. FMSContext context) {
  22. _logger = logger;
  23. _context = context;
  24. }
  25. public IQueryable<FmsMaterial> GetAll() {
  26. var query = _context.FmsMaterial;
  27. return query;
  28. }
  29. public void ImportExcel(IList<MaterialBaseStock> list, string userId) {
  30. using (var transaction = _context.Database.BeginTransaction()) {
  31. var groupList = list.GroupBy(x => new { x.SiteId, x.BusinessFieldId, x.Warehouse.WarehouseId }).Select(x => new { x.Key.SiteId, x.Key.BusinessFieldId, x.Key.WarehouseId }).ToList();
  32. foreach (var item in groupList) {
  33. var listItem = list.Where(x => x.SiteId == item.SiteId && x.BusinessFieldId == item.BusinessFieldId && x.Warehouse.WarehouseId == item.WarehouseId).ToList();
  34. //구매신청
  35. var requestItem = new FmsMaterialPurchaseRequest {
  36. SiteId = item.SiteId,
  37. BusinessFieldId = item.BusinessFieldId,
  38. PurchaseTypeId = 4, //기타
  39. RequestDate = DateTime.Now,
  40. RequestUserId = userId,
  41. PurchaseHopeDate = DateTime.Now,
  42. Title = "기초재고등록",
  43. Reason = "기초재고등록",
  44. ProgressId = 5,
  45. ApprovalDate = DateTime.Now,
  46. ApprovalUserId = userId,
  47. BSameOrder = true
  48. };
  49. foreach (var req in listItem) {
  50. requestItem.FmsMaterialPurchaseRequestMaterial.Add(new FmsMaterialPurchaseRequestMaterial() {
  51. SiteId = req.SiteId,
  52. BusinessFieldId = req.BusinessFieldId,
  53. MaterialId = req.Material.MaterialId,
  54. MaterialCount = req.StockCount
  55. });
  56. }
  57. _context.FmsMaterialPurchaseRequest.Add(requestItem);
  58. _context.SaveChanges();
  59. //발주
  60. var orderItem = new FmsMaterialPurchaseOrder {
  61. SiteId = item.SiteId,
  62. BusinessFieldId = item.BusinessFieldId,
  63. PurchaseRequestId = requestItem.PurchaseRequestId,
  64. OrderDate = DateTime.Now,
  65. OrderUserId = userId,
  66. Title = "기초재고등록",
  67. StoredDueDate = DateTime.Now
  68. };
  69. foreach (var req in listItem) {
  70. orderItem.FmsMaterialPurchaseOrderMaterial.Add(new FmsMaterialPurchaseOrderMaterial() {
  71. SiteId = req.SiteId,
  72. BusinessFieldId = req.BusinessFieldId,
  73. MaterialId = req.Material.MaterialId,
  74. MaterialCount = req.StockCount,
  75. UnitCost = Util.ToInt(req.Material.FinalPrice)
  76. });
  77. }
  78. _context.FmsMaterialPurchaseOrder.Add(orderItem);
  79. _context.SaveChanges();
  80. foreach (var req in listItem) {
  81. //입고
  82. var storedItem = new FmsMaterialStored {
  83. SiteId = item.SiteId,
  84. BusinessFieldId = item.BusinessFieldId,
  85. StoredDate = DateTime.Now,
  86. PurchaseOrderId = orderItem.PurchaseOrderId,
  87. WarehouseId = req.Warehouse.WarehouseId,
  88. MaterialId = req.Material.MaterialId,
  89. StoredCount = req.StockCount,
  90. RemainStoredCount = req.StockCount,
  91. UnitCost = Util.ToInt(req.Material.FinalPrice),
  92. StoredUserId = userId,
  93. ApprovalDate = DateTime.Now,
  94. ApprovalUserId = userId,
  95. IsApproval = true,
  96. };
  97. //해당 material 의 최신 입고 정보
  98. var lastStoredItem = _context.FmsMaterialStored.Where(x => x.SiteId == storedItem.SiteId && x.MaterialId == storedItem.MaterialId).OrderByDescending(x => x.MaterialStoredId).FirstOrDefault();
  99. //재고정보 업데이트
  100. if (lastStoredItem != null) {
  101. storedItem.StockCount += (lastStoredItem.StockCount + req.StockCount);
  102. } else {
  103. storedItem.StockCount = req.StockCount;
  104. }
  105. _context.FmsMaterialStored.Add(storedItem);
  106. _context.SaveChanges();
  107. }
  108. }
  109. transaction.Commit();
  110. }
  111. }
  112. }
  113. }