diff --git a/AMESCoreStudio.Web/Controllers/PCBController.cs b/AMESCoreStudio.Web/Controllers/PCBController.cs index 1f9348f..d51cbd8 100644 --- a/AMESCoreStudio.Web/Controllers/PCBController.cs +++ b/AMESCoreStudio.Web/Controllers/PCBController.cs @@ -421,10 +421,25 @@ namespace AMESCoreStudio.Web.Controllers // 新增 if (model.SolderPasteID == 0) { - // 錫膏編號自動編碼 if (numbergeneration == "A") { + // 加入規格維護判斷 + var solderPasteSerials = await _pcbApi.GetSolderPasteSerial(); + var currentSpec = solderPasteSerials.FirstOrDefault(x => x.Description.Trim().ToUpper() == model.Description.Trim().ToUpper()); + + if (currentSpec == null) + { + msg = "找不到規格對應的維護資料,請先至【錫膏規格維護】頁面新增"; + return Json(new { msg = msg, success = false }); + } + + if (currentSpec.StatusNo != "A") + { + msg = $"規格【{model.Description}】目前為停用狀態,無法維護"; + return Json(new { msg = msg, success = false }); + } + // 用規格帶出流水碼 model.SolderPasteNo = await _pcbApi.GetSolderPasteSerialByAutoSerialNo(model.Description.Trim()); if (string.IsNullOrWhiteSpace(model.SolderPasteNo)) @@ -443,30 +458,35 @@ namespace AMESCoreStudio.Web.Controllers { ModelState.AddModelError("error", msg); return Json(new { msg = msg, success = false }); - //return View("PCB014C", model); } } // 人工手動給予 else if (numbergeneration == "M") { - if (string.IsNullOrWhiteSpace(model.SolderPasteNo)) + { msg = "請輸入錫膏編號"; + } + else if (model.SolderPasteNo.Length != 7) + { + msg = "錫膏編號必須為7碼"; + } else { List solderPasteSerials = await _pcbApi.GetSolderPasteSerial(); - // 目前有設定的代號 - var serialNo = solderPasteSerials.Select(s => s.SerialNo).ToList(); + var serialNos = solderPasteSerials.Select(s => s.SerialNo.ToUpper()).ToList(); + string prefix = model.SolderPasteNo.Substring(0, 2).ToUpper(); - if (serialNo.Any(code => model.SolderPasteNo.StartsWith(code))) + if (serialNos.Contains(prefix)) { - msg = "不可以輸入系統指定代碼"; + msg = $"不可以輸入系統指定代碼前綴【{prefix}】"; + } + else + { + var query = await _pcbApi.GetSolderPasteInfoQuery(solderPasteNo: model.SolderPasteNo); + if (query.DataTotal != 0) + msg = "該錫膏編號已建立過"; } - - var query = await _pcbApi.GetSolderPasteInfoQuery(solderPasteNo: model.SolderPasteNo); - // 錫膏編號重複 - if (query.DataTotal != 0) - msg = "該錫膏編號已建立過"; } // 有錯誤訊息 @@ -474,11 +494,9 @@ namespace AMESCoreStudio.Web.Controllers { ModelState.AddModelError("error", msg); return Json(new { msg = msg, success = false }); - //return View("PCB014C", model); } } - model.CreateUserID = GetLogInUserID(); model.CreateDate = DateTime.Now; model.UpdateUserID = GetLogInUserID(); @@ -523,7 +541,6 @@ namespace AMESCoreStudio.Web.Controllers if (model.SolderPasteID == 0) { return Json(new { msg = msg, success = false }); - //return View("PCB014C", model); } return View("PCB014U", model); } @@ -845,7 +862,7 @@ namespace AMESCoreStudio.Web.Controllers #endregion - #region PCB015連板綁定作業 + #region PCB015 連板綁定作業 public async Task PCB015() { @@ -871,7 +888,6 @@ namespace AMESCoreStudio.Web.Controllers return View("PCB015V", model); } - public async Task PCB015GetGroupAsync(string id, string groupID = null, int page = 0, int limit = 10) { var result = await _pcbApi.GetBarcodeGroupsByWipNO(id: id, groupID: groupID, page: page, limit: limit); @@ -920,7 +936,6 @@ namespace AMESCoreStudio.Web.Controllers return Json(new Result() { success = true, msg = "刪除成功" }); } - public async Task CheckBarcodeNOandGroupAsync(string BarcodeNo, string WipNo, int WipID, int Boards, string PlanQTY) { //生產序號不在工單區間 @@ -1027,8 +1042,6 @@ namespace AMESCoreStudio.Web.Controllers } - - /// /// PCBGroup 綁定Excel匯入 /// @@ -1037,14 +1050,14 @@ namespace AMESCoreStudio.Web.Controllers [HttpPost] public async Task PCB015ExcelUpload(IFormFile Uploader) { - + //通過上傳檔案流初始化Mapper using (var workbook = new XLWorkbook(Uploader.OpenReadStream())) { try { List barcodeGroup = new List(); - + string Msg = string.Empty; var worksheet = workbook.Worksheet(1); // 定義資料起始/結束 Cell @@ -1064,7 +1077,7 @@ namespace AMESCoreStudio.Web.Controllers if (!isNumeric) { return Json(new Result() { success = false, msg = "Group順序" + seq + "請輸入數字", data = null }); - + } barcodeGroup.Add(new BarcodeGroupDto @@ -1079,7 +1092,7 @@ namespace AMESCoreStudio.Web.Controllers var WipBarcode = await _pcbApi.GetWipBarcodesCheckInRange(data.Cell(i, 1).Value.ToString(), data.Cell(i, 3).Value.ToString()); if (WipBarcode.Count == 0) { - return Json(new Result() { success = false, msg = "生產序號" + data.Cell(i, 3).Value.ToString() + "不在工單"+ data.Cell(i, 1).Value.ToString() + "區間內", data = null }); + return Json(new Result() { success = false, msg = "生產序號" + data.Cell(i, 3).Value.ToString() + "不在工單" + data.Cell(i, 1).Value.ToString() + "區間內", data = null }); } #endregion @@ -1090,18 +1103,18 @@ namespace AMESCoreStudio.Web.Controllers if (duplicateBarcodeNos.Any()) { - return Json(new Result() { success = false, msg = "Excel檔案內的生產序號"+ string.Join(", ", duplicateBarcodeNos) + "重覆", data = null }); + return Json(new Result() { success = false, msg = "Excel檔案內的生產序號" + string.Join(", ", duplicateBarcodeNos) + "重覆", data = null }); } - #endregion - #region 判斷序號是否已綁定群組 + #endregion + #region 判斷序號是否已綁定群組 - var BarCodeinto = await _pcsApi.GetBarcodeInfoesByNo(data.Cell(i, 3).Value.ToString()); + var BarCodeinto = await _pcsApi.GetBarcodeInfoesByNo(data.Cell(i, 3).Value.ToString()); if (BarCodeinto.Count() > 0) { var BarcodeGroup = await _pcsApi.GetBarcodeGroupByBarCodeID(BarCodeinto.Select(s => s.BarcodeID).FirstOrDefault()); if (BarcodeGroup.Count() > 0) { - return Json(new Result() { success = false, msg = "生產序號" + data.Cell(i, 3).Value.ToString()+ "已綁定群組" + BarcodeGroup.Select(s => s.GroupID).FirstOrDefault() + ",不可重覆綁定", data = null }); + return Json(new Result() { success = false, msg = "生產序號" + data.Cell(i, 3).Value.ToString() + "已綁定群組" + BarcodeGroup.Select(s => s.GroupID).FirstOrDefault() + ",不可重覆綁定", data = null }); } } @@ -1118,7 +1131,7 @@ namespace AMESCoreStudio.Web.Controllers - foreach (var item in barcodeGroup.Select(s =>s.Sequence).Distinct()) + foreach (var item in barcodeGroup.Select(s => s.Sequence).Distinct()) { foreach (var item1 in barcodeGroup.Where(w => w.Sequence == item)) { @@ -1141,27 +1154,27 @@ namespace AMESCoreStudio.Web.Controllers #endregion } - #region 綁定Group + #region 綁定Group - var barcodeinfo = await _pcbApi.PostDapperByListBarcodeNO(JsonConvert.SerializeObject(barcodeGroup.Where(w => w.Sequence == item).Select(s=>s.BarcodeNo))); - int UserID = GetLogInUserID(); + var barcodeinfo = await _pcbApi.PostDapperByListBarcodeNO(JsonConvert.SerializeObject(barcodeGroup.Where(w => w.Sequence == item).Select(s => s.BarcodeNo))); + int UserID = GetLogInUserID(); - List barcodeGroups = barcodeinfo - .Select((b, index) => new BarcodeGroup - { - BarcodeID = b.BarcodeID, - GroupID = 0, - Sequence = item, - CreateUserID = UserID, - WipNo = barcodeGroup.Select(s=>s.WipNo).FirstOrDefault() - }) - .ToList(); + List barcodeGroups = barcodeinfo + .Select((b, index) => new BarcodeGroup + { + BarcodeID = b.BarcodeID, + GroupID = 0, + Sequence = item, + CreateUserID = UserID, + WipNo = barcodeGroup.Select(s => s.WipNo).FirstOrDefault() + }) + .ToList(); - var BarCodeGroup = await _pcbApi.PostBarcodeGroupList(JsonConvert.SerializeObject(barcodeGroups)); + var BarCodeGroup = await _pcbApi.PostBarcodeGroupList(JsonConvert.SerializeObject(barcodeGroups)); + + + #endregion - - #endregion - } @@ -1175,16 +1188,145 @@ namespace AMESCoreStudio.Web.Controllers } } - - //将資料Json化并传到前台视图 - return Json(new { data = "", success = true }); - - } + //将資料Json化并传到前台视图 + return Json(new { data = "", success = true }); + + } #endregion + #region PCB020 錫膏規格維護 + + public ActionResult PCB020() + { + return View(); + } + + + public async Task PCB020QueryAsync(string serialNo, string description, string vendor) + { + IResultModel result = await _pcbApi.GetSolderPasteSerialQuery(serialNo: serialNo, + description: description, vendor: vendor); + + if (result.Data.Count() != 0) + { + return Json(new Table() { code = 0, msg = "", data = result.Data, count = result.DataTotal }); + } + return Json(new Table() { count = 0, data = null }); + } + + //新增頁面 + public IActionResult PCB020C() + { + return View(); + } + + //修改頁面 + [HttpGet] + public async Task PCB020U(string id) + { + var result = await _pcbApi.GetSolderPasteSerial(id); + return View(result); + } + + /// + /// 頁面提交 + /// + /// + /// + [HttpPost] + public async Task PCB020Async(SolderPasteSerial model) + { + string actionType = Request.Form["ActionType"]; + + if (ModelState.IsValid) + { + // 1. 檢查所有必填欄位 + if (string.IsNullOrWhiteSpace(model.SerialNo) || string.IsNullOrWhiteSpace(model.Description) || + string.IsNullOrWhiteSpace(model.Alloy) || string.IsNullOrWhiteSpace(model.Vendor) || + string.IsNullOrWhiteSpace(model.Type)) + { + return Json(new { msg = "請填寫所有必填欄位", success = false }); + } + + // 2. 判斷是新增還是修改 + var exist = await _pcbApi.GetSolderPasteSerial(model.SerialNo); + + IResultModel result; + if (actionType == "Add") // 新增模式 + { + if (exist != null) + { + return Json(new { msg = $"錫膏代碼【{model.SerialNo}】已存在,不可重複新增", success = false }); + } + + var allSerials = await _pcbApi.GetSolderPasteSerial(); + if (allSerials.Any(x => x.Description.Trim().ToUpper() == model.Description.Trim().ToUpper())) + { + return Json(new { msg = $"錫膏規格【{model.Description}】已存在,不可重複新增", success = false }); + } + + if (model.SerialNo.Length != 2) + { + return Json(new { msg = "錫膏代碼必須為2碼", success = false }); + } + + model.CreateUserID = GetLogInUserID(); + model.CreateDate = DateTime.Now; + model.UpdateUserID = GetLogInUserID(); + model.UpdateDate = DateTime.Now; + result = await _pcbApi.PostSolderPasteSerial(JsonConvert.SerializeObject(model)); + } + else // 修改模式 (ActionType == "Edit") + { + if (exist == null) + { + return Json(new { msg = "找不到要修改的資料", success = false }); + } + + exist.Alloy = model.Alloy; // 只更新合金 + exist.UpdateUserID = GetLogInUserID(); + exist.UpdateDate = DateTime.Now; + + result = await _pcbApi.PutSolderPasteSerial(JsonConvert.SerializeObject(exist)); + } + + if (result.Success) + { + return Json(new { msg = "儲存成功!", success = true }); + } + else + { + return Json(new { msg = result.Msg, success = false }); + } + } + return Json(new { msg = "資料格式錯誤", success = false }); + } + + /// + /// PCB020S 錫膏規格 狀態更新 + /// + /// 代碼 + /// 狀態 + /// + [HttpPost] + public async Task PCB020S(string id, string status) + { + var model = new SolderPasteSerial { SerialNo = id, StatusNo = status }; + model.UpdateUserID = GetLogInUserID(); + model.UpdateDate = DateTime.Now; + + IResultModel result = await _pcbApi.PutSolderPasteSerialStatus(JsonConvert.SerializeObject(model)); + + if (result.Success) + return Json(new Result() { success = true, msg = "狀態更新成功" }); + else + return Json(new Result() { success = false, msg = result.Msg }); + } + + #endregion /// /// 登入UserID diff --git a/AMESCoreStudio.Web/Controllers/PCSController.cs b/AMESCoreStudio.Web/Controllers/PCSController.cs index 6437d9b..f4293a4 100644 --- a/AMESCoreStudio.Web/Controllers/PCSController.cs +++ b/AMESCoreStudio.Web/Controllers/PCSController.cs @@ -38,6 +38,7 @@ namespace AMESCoreStudio.Web.Controllers public readonly IFQC _fqcApi; public readonly IKCS _kcsApi; public readonly IBLL _bllApi; + public readonly IPCB _pcbApi; public readonly IFileServerProvider _fileServerProvider; private readonly IWebHostEnvironment _env; private readonly IStringLocalizer _sharedLocalizer; @@ -50,7 +51,7 @@ namespace AMESCoreStudio.Web.Controllers public PCSController(ILogger logger, ILogger log, ISYS sysApi, IPCS pcsApi, IBAS basApi, IPPS ppsApi, IFQC fqcApi , IFileServerProvider fileServerProvider, IWebHostEnvironment env, IKCS kcsApi, IStringLocalizerFactory factory - , IConfiguration configuration, IBLL bllApi) + , IConfiguration configuration, IBLL bllApi, IPCB pcbApi) { _logger = logger; _log = log; @@ -65,6 +66,7 @@ namespace AMESCoreStudio.Web.Controllers _sharedLocalizer = factory.Create("Controllers.PCS", "AMESCoreStudio.Web"); _configuration = configuration; _bllApi = bllApi; + _pcbApi = pcbApi; } #region Funcion BLL @@ -693,19 +695,30 @@ namespace AMESCoreStudio.Web.Controllers /// 工單資訊 板卡資訊 錫膏 /// /// - private void GetSolderPasteSelect(string SelectedValue = null) + /// + private async Task GetSolderPasteSelect(string SelectedValue = null, bool isReview = false) { - List values = new List(); - if (SelectedValue != null) + var solderPasteSerials = await _pcbApi.GetSolderPasteSerial(); + var q = solderPasteSerials.Where(x => isReview || x.StatusNo == "A") + .Select(s => new SelectListItem + { + Text = $"{s.Vendor}{s.Type}({s.Description})", + Value = s.SerialNo, + Selected = s.SerialNo == SelectedValue + }).ToList(); + + var otherItem = new SelectListItem { Text = "其他", Value = "N" }; + + if (!isReview && !string.IsNullOrEmpty(SelectedValue)) { - values = SelectedValue.Split(',').ToList(); + var isCurrentActive = solderPasteSerials.Any(x => x.SerialNo == SelectedValue && x.StatusNo == "A"); + if (!isCurrentActive) + { + otherItem.Selected = true; + } } - var q = Enum.GetValues(typeof(EnumPCS.EnumWipBoardSolderPasteType)).Cast() - .Select(s => new SelectListItem - { - Text = EnumPCS.GetDisplayName(s).ToString(), - Value = s.ToString() - }).ToList(); + + q.Add(otherItem); ViewBag.GetSolderPasteSelect = q; } @@ -2170,7 +2183,7 @@ namespace AMESCoreStudio.Web.Controllers model.itemNoCT1 = standardWorkTimes.Sum(m => m.TotalCT).ToString(); } - await WipDataSelectAll(model.wipAtt.WipNO, model.wipAtt.ItemNO, model.wipInfo.UnitNO); + await WipDataSelectAll(model.wipAtt.WipNO, model.wipAtt.ItemNO, model.wipInfo.UnitNO, model.wipBoard?.SolderPaste, true); GetCheckboxApproveLogo(model.wipLabel != null ? model.wipLabel.ApproveLogo : null); GetCheckboxCompanyLogo(model.wipLabel != null ? model.wipLabel.CompanyLogo : null); @@ -2327,7 +2340,7 @@ namespace AMESCoreStudio.Web.Controllers } - await WipDataSelectAll(model.wipAtt.WipNO, model.wipAtt.ItemNO, model.wipInfo.UnitNO); + await WipDataSelectAll(model.wipAtt.WipNO, model.wipAtt.ItemNO, model.wipInfo.UnitNO, model.wipBoard?.SolderPaste, false); GetCheckboxApproveLogo(model.wipLabel != null ? model.wipLabel.ApproveLogo : null); GetCheckboxCompanyLogo(model.wipLabel != null ? model.wipLabel.CompanyLogo : null); @@ -2505,7 +2518,7 @@ namespace AMESCoreStudio.Web.Controllers } - await WipDataSelectAll(model.wipAtt.WipNO, model.wipAtt.ItemNO, model.wipInfo.UnitNO); + await WipDataSelectAll(model.wipAtt.WipNO, model.wipAtt.ItemNO, model.wipInfo.UnitNO, model.wipBoard?.SolderPaste, false); GetCheckboxApproveLogo(model.wipLabel != null ? model.wipLabel.ApproveLogo : null); GetCheckboxCompanyLogo(model.wipLabel != null ? model.wipLabel.CompanyLogo : null); @@ -2542,7 +2555,7 @@ namespace AMESCoreStudio.Web.Controllers var UserID = GetLogInUserID(); #region 選單 - await WipDataSelectAll(model.wipInfo.WipNO, model.wipAtt.ItemNO, model.wipInfo.UnitNO); + await WipDataSelectAll(model.wipInfo.WipNO, model.wipAtt.ItemNO, model.wipInfo.UnitNO, model.wipBoard?.SolderPaste, false); GetCheckboxApproveLogo(model.wipLabel != null ? model.wipLabel.ApproveLogo : null); GetCheckboxCompanyLogo(model.wipLabel != null ? model.wipLabel.CompanyLogo : null); GetCheckboxPrintMode(model.wipLabel != null ? model.wipLabel.PrintMode : null); @@ -2864,7 +2877,7 @@ namespace AMESCoreStudio.Web.Controllers } - await WipDataSelectAll(model.wipAtt.WipNO, model.wipAtt.ItemNO, model.wipInfo.UnitNO); + await WipDataSelectAll(model.wipAtt.WipNO, model.wipAtt.ItemNO, model.wipInfo.UnitNO, model.wipBoard?.SolderPaste, false); GetCheckboxApproveLogo(model.wipLabel != null ? model.wipLabel.ApproveLogo : null); GetCheckboxCompanyLogo(model.wipLabel != null ? model.wipLabel.CompanyLogo : null); @@ -2885,7 +2898,7 @@ namespace AMESCoreStudio.Web.Controllers var UserID = GetLogInUserID(); #region 選單 - await WipDataSelectAll(model.wipInfo.WipNO, model.wipAtt.ItemNO, model.wipInfo.UnitNO); + await WipDataSelectAll(model.wipInfo.WipNO, model.wipAtt.ItemNO, model.wipInfo.UnitNO, model.wipBoard?.SolderPaste, false); GetCheckboxApproveLogo(model.wipLabel != null ? model.wipLabel.ApproveLogo : null); GetCheckboxCompanyLogo(model.wipLabel != null ? model.wipLabel.CompanyLogo : null); GetCheckboxPrintMode(model.wipLabel != null ? model.wipLabel.PrintMode : null); @@ -3090,8 +3103,10 @@ namespace AMESCoreStudio.Web.Controllers /// 工單號碼 /// 工單料號 /// 生產單位 + /// 錫膏 + /// 是否為檢視模式 /// - public async Task WipDataSelectAll(string WipNo = null, string ItemNo = "X", string UnitNo = "X") + public async Task WipDataSelectAll(string WipNo = null, string ItemNo = "X", string UnitNo = "X", string SolderPaste = null, bool isReview = false) { // KP Items await GetItemsList(); @@ -3128,7 +3143,7 @@ namespace AMESCoreStudio.Web.Controllers // 板卡資訊 PCB加工 GetPCBProcessingTypeSelect(); // 板卡資訊 錫膏 - GetSolderPasteSelect(); + await GetSolderPasteSelect(SolderPaste, isReview); // 工單狀態 標準 重工 GetWipType(); // 工程資訊 軟體料號Type diff --git a/AMESCoreStudio.Web/HttpApis/AMES/IPCB.cs b/AMESCoreStudio.Web/HttpApis/AMES/IPCB.cs index c3c94f8..17e9dc8 100644 --- a/AMESCoreStudio.Web/HttpApis/AMES/IPCB.cs +++ b/AMESCoreStudio.Web/HttpApis/AMES/IPCB.cs @@ -735,6 +735,48 @@ namespace AMESCoreStudio.Web + #endregion + + #region PCB020 錫膏規格維護 + + /// + /// 查詢錫膏規格資料 ID + /// + /// + [WebApiClient.Attributes.HttpGet("api/SolderPasteSerial/{id}")] + ITask GetSolderPasteSerial(string id); + + /// + /// 錫膏規格資料查詢 + /// + /// 錫膏編號 + /// 規格 + /// 廠商 + /// + [WebApiClient.Attributes.HttpGet("api/SolderPasteSerial/SolderPasteSerialQuery")] + ITask> GetSolderPasteSerialQuery(string serialNo = null, string description = null, string vendor = null); + + /// + /// 新增錫膏規格資料 + /// + /// + [WebApiClient.Attributes.HttpPost("api/SolderPasteSerial")] + ITask> PostSolderPasteSerial([FromBody, RawJsonContent] string model); + + /// + /// 更新錫膏規格資料 + /// + /// + [WebApiClient.Attributes.HttpPut("api/SolderPasteSerial")] + ITask> PutSolderPasteSerial([FromBody, RawJsonContent] string model); + + /// + /// 更新錫膏規格 -狀態 + /// + /// + [WebApiClient.Attributes.HttpPut("api/SolderPasteSerial/UpdateStatus")] + ITask> PutSolderPasteSerialStatus([FromBody, RawJsonContent] string model); + #endregion } } diff --git a/AMESCoreStudio.Web/Views/PCB/PCB020.cshtml b/AMESCoreStudio.Web/Views/PCB/PCB020.cshtml new file mode 100644 index 0000000..fd2b8b3 --- /dev/null +++ b/AMESCoreStudio.Web/Views/PCB/PCB020.cshtml @@ -0,0 +1,132 @@ +@{ + ViewData["Title"] = "錫膏規格維護"; + Layout = "~/Views/Shared/_AMESLayout.cshtml"; +} + +
+
+
+
+
@ViewBag.Title
+
+
+
+
+
+
+
+
+
+ +
+ +
+
+
+
+
+ +
+ +
+
+
+
+
+ +
+ +
+
+
+
+
+ +
+
+
+
+
+
+
+
+ +@section Scripts{ + +} + diff --git a/AMESCoreStudio.Web/Views/PCB/PCB020C.cshtml b/AMESCoreStudio.Web/Views/PCB/PCB020C.cshtml new file mode 100644 index 0000000..8796840 --- /dev/null +++ b/AMESCoreStudio.Web/Views/PCB/PCB020C.cshtml @@ -0,0 +1,92 @@ +@model AMESCoreStudio.WebApi.Models.AMES.SolderPasteSerial + +@{ + Layout = "~/Views/Shared/_AMESLayout.cshtml"; +} + +
+
+
+
+
+ +
+ +
+ +
+ +
+
+
+ +
+ +
+
+
+ +
+ +
+
+
+ +
+ +
+
+
+ +
+ +
+
+
+
+ +
+
+
+
+
+
+
+ +@section Scripts { + @{ + await Html.RenderPartialAsync("_ValidationScriptsPartial"); + } + +} + diff --git a/AMESCoreStudio.Web/Views/PCB/PCB020U.cshtml b/AMESCoreStudio.Web/Views/PCB/PCB020U.cshtml new file mode 100644 index 0000000..2977d04 --- /dev/null +++ b/AMESCoreStudio.Web/Views/PCB/PCB020U.cshtml @@ -0,0 +1,94 @@ +@model AMESCoreStudio.WebApi.Models.AMES.SolderPasteSerial + +@{ + Layout = "~/Views/Shared/_AMESLayout.cshtml"; +} + +
+
+
+
+
+ +
+ + +
+ +
+ +
+
+
+ +
+ +
+
+
+ +
+ +
+
+
+ +
+ +
+
+
+ +
+ +
+
+
+
+ +
+
+
+
+
+
+
+@section Scripts { + @{ + await Html.RenderPartialAsync("_ValidationScriptsPartial"); + } + +} diff --git a/AMESCoreStudio.Web/Views/PCS/PCS003.cshtml b/AMESCoreStudio.Web/Views/PCS/PCS003.cshtml index f2f8ed0..d22692d 100644 --- a/AMESCoreStudio.Web/Views/PCS/PCS003.cshtml +++ b/AMESCoreStudio.Web/Views/PCS/PCS003.cshtml @@ -1322,16 +1322,16 @@ } // DIV keyPartsExcel - @if (Model.wipInfo.WipNO.StartsWith("981")) - { - $("#keyPartExcel").show(); - } - else - { - $("#keyPartExcel").hide(); - } + @if (Model.wipInfo.WipNO.StartsWith("981")) + { + $("#keyPartExcel").show(); + } + else + { + $("#keyPartExcel").hide(); + } - getLineInfoList($("#unit").val()); + getLineInfoList($("#unit").val()); // 產生條碼 $('#GetBarCode').click(function () { @@ -1354,6 +1354,19 @@ function PrefixInteger(num, length) { return (Array(length).join('0') + num).slice(-length); }; + + // 調整錫膏選單顯示 + var $solderPasteSelect = $('select[name="wipBoard.SolderPaste"]'); + var originalValue = "@Model.wipBoard?.SolderPaste"; // 取得後端傳過來的原始值 + + // 檢查下拉選單中是否存在該原始值的 option + var exists = $solderPasteSelect.find('option[value="' + originalValue + '"]').length > 0; + + // 如果原始值不在選單中,且不是檢視模式(如果是修改模式) + if (!exists && originalValue !== "") { + $solderPasteSelect.val('N'); // 強制選到「其他」 + layui.form.render('select'); // 如果有使用 layui,記得重新渲染 + } }); layui.config({ diff --git a/AMESCoreStudio.Web/Views/PCS/PCS034.cshtml b/AMESCoreStudio.Web/Views/PCS/PCS034.cshtml index 236310c..a8c8378 100644 --- a/AMESCoreStudio.Web/Views/PCS/PCS034.cshtml +++ b/AMESCoreStudio.Web/Views/PCS/PCS034.cshtml @@ -1292,6 +1292,19 @@ function PrefixInteger(num, length) { return (Array(length).join('0') + num).slice(-length); }; + + // 調整錫膏選單顯示 + var $solderPasteSelect = $('select[name="wipBoard.SolderPaste"]'); + var originalValue = "@Model.wipBoard?.SolderPaste"; // 取得後端傳過來的原始值 + + // 檢查下拉選單中是否存在該原始值的 option + var exists = $solderPasteSelect.find('option[value="' + originalValue + '"]').length > 0; + + // 如果原始值不在選單中,且不是檢視模式(如果是修改模式) + if (!exists && originalValue !== "") { + $solderPasteSelect.val('N'); // 強制選到「其他」 + layui.form.render('select'); // 如果有使用 layui,記得重新渲染 + } }); layui.config({ diff --git a/AMESCoreStudio.WebApi/Controllers/AMES/SolderPasteSerialController.cs b/AMESCoreStudio.WebApi/Controllers/AMES/SolderPasteSerialController.cs index 87e177c..67535db 100644 --- a/AMESCoreStudio.WebApi/Controllers/AMES/SolderPasteSerialController.cs +++ b/AMESCoreStudio.WebApi/Controllers/AMES/SolderPasteSerialController.cs @@ -9,6 +9,9 @@ using AMESCoreStudio.WebApi; using AMESCoreStudio.WebApi.Models.AMES; using AMESCoreStudio.WebApi.DTO.AMES; using AMESCoreStudio.CommonTools.Result; +using AMESCoreStudio.WebApi.Enum; +using Dapper; +using AMESCoreStudio.WebApi.Extensions; namespace AMESCoreStudio.WebApi.Controllers.AMES { @@ -32,7 +35,6 @@ namespace AMESCoreStudio.WebApi.Controllers.AMES return await _context.SolderPasteSerials.ToListAsync(); } - [HttpGet("{id}")] public async Task> GetSolderPasteSerial(string id) { @@ -40,6 +42,42 @@ namespace AMESCoreStudio.WebApi.Controllers.AMES return solderPasteSerial; } + /// + /// 錫膏規格維護資料查詢 + /// + /// 錫膏代號 + /// 規格 + /// 廠商 + /// + [HttpGet("SolderPasteSerialQuery")] + public async Task> SolderPasteSerial(string serialNo, string description, string vendor) + { + var q = await _context.SolderPasteSerials.ToListAsync(); + + if (!string.IsNullOrWhiteSpace(serialNo)) + { + q = q.Where(w => w.SerialNo.ToUpper() == serialNo.Trim().ToUpper()).ToList(); + } + + if (!string.IsNullOrWhiteSpace(description)) + { + q = q.Where(w => w.Description.Contains(description.Trim())).ToList(); + } + + if (!string.IsNullOrWhiteSpace(vendor)) + { + q = q.Where(w => w.Vendor.Contains(vendor.Trim())).ToList(); + } + + ResultModel result = new ResultModel(); + + // 紀錄筆數 + result.DataTotal = q.Count(); + result.Data = q; + + return result; + } + /// /// 自動取得編號 /// @@ -71,7 +109,7 @@ namespace AMESCoreStudio.WebApi.Controllers.AMES } /// - /// 更新錫膏規格流水碼表 + /// 更新錫膏規格 /// /// /// @@ -96,7 +134,7 @@ namespace AMESCoreStudio.WebApi.Controllers.AMES } /// - /// 更新錫膏規格流水碼表 + /// 更新錫膏規格 By流水碼表 /// /// 規格 /// @@ -123,6 +161,34 @@ namespace AMESCoreStudio.WebApi.Controllers.AMES return result; } + /// + /// 更新錫膏規格-狀態 + /// + /// + [HttpPut("UpdateStatus")] + public async Task> PutSolderPasteSerialStatus(SolderPasteSerial solderPasteSerial) + { + ResultModel result = new ResultModel(); + try + { + var query = @" UPDATE JHAMES.SOLDER_PASTE_SERIAL SET + STATUS_NO = :StatusNo , + UPDATE_DATE = sysdate , + UPDATE_USERID = :UpdateUserID + WHERE SERIAL_NO = :SerialNo "; + + await _context.Database.DapperExecuteAsync(query, solderPasteSerial); + result.Success = true; + result.Msg = "OK"; + } + catch (Exception ex) + { + result.Success = false; + result.Msg = ex.InnerException?.Message ?? ex.Message; + } + return result; + } + /// /// 新增錫膏規格流水碼表 /// @@ -148,10 +214,10 @@ namespace AMESCoreStudio.WebApi.Controllers.AMES } // DELETE: api/SolderPasteSerial/5 - [HttpDelete("{id}")] - public async Task> DeleteSolderPasteSerial(string id) + [HttpDelete("{no}")] + public async Task> DeleteSolderPasteSerial(string no) { - var solderPasteSerial = await _context.SolderPasteSerials.FindAsync(id); + var solderPasteSerial = await _context.SolderPasteSerials.FindAsync(no); if (solderPasteSerial == null) { return NotFound(); diff --git a/AMESCoreStudio.WebApi/Models/AMES/SolderPasteSerial.cs b/AMESCoreStudio.WebApi/Models/AMES/SolderPasteSerial.cs index bf5927e..28eccb5 100644 --- a/AMESCoreStudio.WebApi/Models/AMES/SolderPasteSerial.cs +++ b/AMESCoreStudio.WebApi/Models/AMES/SolderPasteSerial.cs @@ -54,5 +54,51 @@ namespace AMESCoreStudio.WebApi.Models.AMES [DataMember] public string Vendor { get; set; } + /// + /// 種類 + /// + [Required] + [Column("TYPE")] + [DataMember] + public string Type { get; set; } + + /// + /// 狀態 + /// + [Required] + [Column("STATUS_NO")] + [DataMember] + public string StatusNo { get; set; } = "A"; + + /// + /// 建立UserID + /// + [Column("CREATE_USERID")] + [Required] + [DataMember] + public int CreateUserID { get; set; } = 0; + + /// + /// 建立日期 + /// + [Required] + [Column("CREATE_DATE")] + [DataMember] + public DateTime CreateDate { get; set; } = DateTime.Now; + + /// + /// 更新UserID + /// + [Column("UPDATE_USERID")] + [DataMember] + public int UpdateUserID { get; set; } = 0; + + /// + /// 更新日期 + /// + [Column("UPDATE_DATE")] + [DataMember] + public DateTime? UpdateDate { get; set; } = DateTime.Now; + } } diff --git a/AMESCoreStudio.WebApi/Models/AMESContext.cs b/AMESCoreStudio.WebApi/Models/AMESContext.cs index f2c8809..379efd1 100644 --- a/AMESCoreStudio.WebApi/Models/AMESContext.cs +++ b/AMESCoreStudio.WebApi/Models/AMESContext.cs @@ -1001,10 +1001,10 @@ namespace AMESCoreStudio.WebApi /// public virtual DbSet AUSBarcodeInfos { get; set; } - /// - /// 錫膏固定編碼流水碼表 - /// - public virtual DbSet SolderPasteSerials { get; set; } + /// + /// 錫膏規格維護資料檔表 + /// + public virtual DbSet SolderPasteSerials { get; set; } /// ///報工生產單位別