using Microsoft.AspNetCore.Http; using Microsoft.AspNetCore.Mvc; using System; using System.Collections.Generic; using System.Linq; using System.Threading.Tasks; using Microsoft.EntityFrameworkCore; using AMESCoreStudio.WebApi.Models.AMES; using AMESCoreStudio.CommonTools.Result; using AMESCoreStudio.WebApi.DTO.AMES; using AMESCoreStudio.WebApi.Enum; // For more information on enabling Web API for empty projects, visit https://go.microsoft.com/fwlink/?LinkID=397860 namespace AMESCoreStudio.WebApi.Controllers.AMES { [Route("api/[controller]")] [ApiController] public class MaterialSopController : ControllerBase { private readonly AMESContext _context; /// <summary> /// /// </summary> /// <param name="context"></param> public MaterialSopController(AMESContext context) { _context = context; } /// <summary> /// SOPFile資料查詢 /// </summary> /// <returns></returns> [HttpGet] public async Task<ActionResult<IEnumerable<MaterialSop>>> GetMaterialSop() { IQueryable<MaterialSop> q = _context.MaterialSops; q = q.OrderBy(p => p.MaterialSopID); var materialSops = await q.ToListAsync(); return materialSops; } /// <summary> /// SOPFile資料查詢 by ID /// </summary> /// <param name="id"></param> /// <returns></returns> [HttpGet("{id}")] public async Task<ActionResult<MaterialSop>> GetMaterialSop(int id) { IQueryable<MaterialSop> q = _context.MaterialSops; var materialSop = await q.Where(p => p.MaterialSopID == id).FirstOrDefaultAsync(); //if (wipSop == null) //{ // return NotFound(); //} return materialSop; } /// <summary> /// 料號SOP資料檔 to ItemID /// </summary> /// <param name="id">ItemID</param> /// <returns></returns> [HttpGet("ByItemNo/{id}")] public async Task<IEnumerable<MaterialSop>> GetMaterialSopByItemNo(string id) { IQueryable<MaterialSop> q = _context.MaterialSops; var result = await q.Where(p => p.ItemNo == id).ToListAsync(); return result; } /// <summary> /// SOP文件查詢 /// </summary> /// <param name="itemNo">料號</param> /// <param name="unitNo">生產單位</param> /// <param name="sopName">檔案名稱</param> /// <param name="sopType">SOP類型</param> /// <param name="date_str">建立日期起</param> /// <param name="date_end">建立日期迄</param> /// <returns></returns> [Route("[action]")] [HttpGet] public async Task<ResultModel<MaterialSopDto>> GetMaterialSopQuery(string itemNo = null, string unitNo = null , string sopName = null, string sopType = null, string date_str = null, string date_end = null) { IQueryable<MaterialSop> q = _context.MaterialSops; if (!string.IsNullOrWhiteSpace(itemNo)) q = q.Where(w => w.ItemNo == itemNo); if (!string.IsNullOrWhiteSpace(unitNo)) q = q.Where(w => w.UnitNo == unitNo); if (!string.IsNullOrWhiteSpace(sopName)) q = q.Where(w => w.SopType.Contains(sopName)); if (!string.IsNullOrWhiteSpace(sopType)) q = q.Where(w => w.SopType == sopType); if (DateTime.TryParse(date_str, out _)) { q = q.Where(w => w.CreateDate >= DateTime.Parse(date_str)); } if (DateTime.TryParse(date_end, out _)) { q = q.Where(w => w.CreateDate <= DateTime.Parse(date_end)); } ResultModel<MaterialSopDto> result = new ResultModel<MaterialSopDto>(); result.Data = await q.Select(s => new MaterialSopDto { MaterialSopID = s.MaterialSopID, ItemNo = s.ItemNo, UnitName = s.FactoryUnit.UnitName, SopName = s.SopName, SopPath = s.SopPath, SopType = s.SopType, CreateDate = s.CreateDate, CreateUserID = s.CreateUserID, UpdateDate = s.UpdateDate, UpdateUserID = s.UpdateUserID //SopTypeName = Enums.GetDisplayName((Enums.EnumWipSopType)Enum.Parse(typeof(Enums.EnumWipSopType), s.SopType)) }).ToListAsync(); result.Data.Select(s => s.SopTypeName = EnumPCS.GetDisplayName((EnumPCS.EnumWipSopType)System.Enum.Parse(typeof(EnumPCS.EnumWipSopType), s.SopType))).ToList(); return result; } [HttpPost] public async Task<ResultModel<MaterialSop>> PostMaterialSop([FromBody] MaterialSop materialSop) { ResultModel<MaterialSop> result = new ResultModel<MaterialSop>(); Helper helper = new Helper(_context); materialSop.MaterialSopID = helper.GetIDKey("MATERIAL_SOP_ID").Result; //wipLog.WipSopID = wipLog.WipID == 0 ? helper.GetIDKeyNoPost("WIP_ID").Result : wipLog.WipID; _context.MaterialSops.Add(materialSop); try { await _context.SaveChangesAsync(); result.Success = true; result.Msg = "OK"; } catch (Exception ex) { result.Success = false; result.Msg = ex.InnerException.Message; } return result; } [HttpPut] public async Task<ResultModel<MaterialSop>> PutMaterialSop(MaterialSop materialSop) { ResultModel<MaterialSop> result = new ResultModel<MaterialSop>(); _context.Entry(materialSop).State = EntityState.Modified; materialSop.UpdateDate = DateTime.Now; materialSop.UpdateUserID = 0; // 指定不更新某個欄位 _context.Entry<MaterialSop>(materialSop).Property("CreateDate").IsModified = false; _context.Entry<MaterialSop>(materialSop).Property("CreateUserID").IsModified = false; try { await _context.SaveChangesAsync(); result.Success = true; result.Msg = "OK"; } catch (Exception ex) { result.Success = false; result.Msg = ex.InnerException.Message; } return result; } /// <summary> /// 刪除 /// </summary> /// <param name="id">D</param> /// <returns></returns> [HttpDelete("{id}")] public async Task<ResultModel<string>> DeleteMaterialSop(int id) { ResultModel<string> result = new ResultModel<string>(); var materialSop = await _context.MaterialSops.FindAsync(id); try { if (materialSop == null) { result.Success = false; result.Msg = "找不到要刪除資料"; } else { _context.MaterialSops.Remove(materialSop); await _context.SaveChangesAsync(); result.Success = true; result.Msg = "OK"; } } catch (Exception ex) { result.Success = false; result.Msg = ex.InnerException.Message; } return result; } } }