ContractManagementController.cs 5.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173
  1. using System;
  2. using System.Linq;
  3. using System.Threading.Tasks;
  4. using FMSAdmin.Data;
  5. using FMSAdmin.Models;
  6. using FMSAdmin.Entities;
  7. using FMSApp.Services;
  8. using Microsoft.AspNetCore.Mvc;
  9. using Microsoft.Extensions.Logging;
  10. using Microsoft.AspNetCore.Authorization;
  11. using FMSAdmin.Helpers;
  12. using System.Data;
  13. using System.IO;
  14. using OfficeOpenXml;
  15. namespace FMSApp.Controllers {
  16. [Authorize]
  17. [ApiController]
  18. [ApiVersion("1")]
  19. [Route("api/app/[controller]")]
  20. public class ContractManagementController : Controller {
  21. private readonly ILogger<ContractManagementController> _logger;
  22. private readonly FMSContext _context;
  23. private readonly ContractManagementService _service;
  24. private readonly StorageHelper _storage;
  25. public ContractManagementController(
  26. ILogger<ContractManagementController> logger,
  27. FMSContext context,
  28. ContractManagementService service,
  29. StorageHelper storage
  30. ) {
  31. _logger = logger;
  32. _context = context;
  33. _service = service;
  34. _storage = storage;
  35. }
  36. /// <summary>
  37. /// 목록
  38. /// </summary>
  39. [HttpGet]
  40. public IActionResult List([FromQuery] PagingRequest req, [FromQuery] string siteId) {
  41. var query = _FilterAndSort(req);
  42. if (!string.IsNullOrEmpty(siteId)) {
  43. query = query.Where(x => x.SiteId == Util.ToInt(siteId));
  44. }
  45. var list = _ListSelect(query);
  46. var paging = PagingList.Pagination(list, req.page, req.limit);
  47. return Ok(paging);
  48. }
  49. [HttpGet("[action]")]
  50. public IActionResult Get([FromQuery] int siteId, [FromQuery] int contractId) {
  51. var data = _service.Gets(contractId, siteId);
  52. if (data.Count() == 0) {
  53. return NotFound("정보를 찾을 수 없습니다.");
  54. }
  55. var item = data.Select(x => new {
  56. x.PartnerId,
  57. PartnerName = x.CmPartner.Name,
  58. x.PartnerTypeId,
  59. PartnerTypeName = x.PartnerType.Name,
  60. x.SiteId,
  61. x.Name,
  62. x.ContractDate,
  63. x.StartDate,
  64. x.EndDate,
  65. x.OwnerShipName,
  66. x.OwnerShipPhoneNo,
  67. x.CommitmentMan,
  68. x.ContractClassId,
  69. ContractClassName = x.FmsContractClass.Name,
  70. x.PaymentTypeId,
  71. PaymentTypeName = x.FmsPaymentType.Name,
  72. x.ContractTypeId,
  73. ContractTypeName = x.FmsContractType.Name,
  74. x.ContractMethodId,
  75. ContractMethodName = x.FmsContractMethod.Name,
  76. x.Comment,
  77. x.ContractAmountText,
  78. x.ContractExeGuaranteeRate,
  79. x.DefectGuaranteeRate,
  80. x.DefectGuaranteePeriodText,
  81. CmFile = _storage.ParseFile(x.CmFile)
  82. // x.RepresentativeName,
  83. // x.SalesName,
  84. // x.PhoneNo,
  85. // x.SalesPhoneNo,
  86. // x.FaxNo,
  87. // x.RegistrationNo,
  88. // x.HomepageUri,
  89. // x.Address1,
  90. // x.Adderss2,
  91. // x.AddressZip1,
  92. // x.AddressZip2,
  93. // x.Note,
  94. // x.IsUse,
  95. }).FirstOrDefault();
  96. return Ok(item);
  97. }
  98. /// <summary>
  99. /// 저장
  100. /// </summary>
  101. /// <param name="data"></param>
  102. /// <returns></returns>
  103. [HttpPost("[action]")]
  104. public IActionResult Save([FromBody] FmsContract data) {
  105. if (ModelState.IsValid) {
  106. _service.Save(data);
  107. } else {
  108. return BadRequest(ModelState);
  109. }
  110. return Ok();
  111. }
  112. /// <summary>
  113. /// 삭제
  114. /// </summary>
  115. /// <param name="siteId"></param>
  116. /// <param name="id"></param>
  117. /// <returns></returns>
  118. [HttpDelete("{siteId}/{id}")]
  119. public IActionResult Delete(int siteId, int id) {
  120. _service.Delete(id, siteId);
  121. return Ok();
  122. }
  123. // 셀렉트 공통
  124. private dynamic _ListSelect(IQueryable<FmsContract> query) {
  125. var list = query.Select(x => new {
  126. x.PartnerId,
  127. x.PartnerTypeId,
  128. PartnerTypeName = x.PartnerType.Name,
  129. PartnerName = x.CmPartner.Name,
  130. x.SiteId,
  131. x.Name,
  132. x.ContractId,
  133. Dates = new {
  134. StartDate = x.StartDate == null ? null : ((DateTime)x.StartDate).ToString("yyyy.MM.dd"),
  135. EndDate = x.EndDate == null ? null : ((DateTime)x.EndDate).ToString("yyyy.MM.dd"),
  136. },
  137. x.ContractAmountText
  138. });
  139. return list;
  140. }
  141. // 검색 & 정렬 공통
  142. private IQueryable<FmsContract> _FilterAndSort(PagingRequest req) {
  143. var query = _service.GetAll();
  144. // 기본 Entity 검색
  145. query = query.Filter(req.conditions);
  146. if (req.siteId != null) {
  147. query = query.Where(x => x.SiteId == Util.ToInt(req.siteId));
  148. }
  149. // 기본 Entity 정렬
  150. query = query.Sort(req.sort);
  151. return query;
  152. }
  153. }
  154. }