using Microsoft.AspNetCore.Mvc;
using System.Threading.Tasks;
using Microsoft.Extensions.Logging;
using AMESCoreStudio.Web.Models;
using Newtonsoft.Json;
using AMESCoreStudio.WebApi;
using System.Collections.Generic;
using Microsoft.AspNetCore.Mvc.Rendering;
using AMESCoreStudio.WebApi.Models.AMES;
using AMESCoreStudio.WebApi.Models.BAS;
using AMESCoreStudio.CommonTools.Result;

namespace AMESCoreStudio.Web.Controllers
{
    public class WHSController : Controller
    {
        private readonly ILogger<WHSController> _logger;
        public readonly IWHS _whsApi;
        public readonly IBAS _basApi;
        public readonly IPCS _pcsApi;
        public readonly ISYS _sysApi;
        public readonly IPPS _ppsApi;

        public WHSController(ILogger<WHSController> logger, IWHS whsApi,IBAS basApi, IPCS pcsApi, ISYS sysApi, IPPS ppsApi)
        {
            _logger = logger;
            _whsApi = whsApi;
            _basApi = basApi;
            _pcsApi = pcsApi;
            _sysApi = sysApi;
            _ppsApi = ppsApi;
        }

        #region
        private void GetFlagList()
        {

            var FlagList = new List<SelectListItem>();


            FlagList.Add(new SelectListItem("Y", "Y"));
            FlagList.Add(new SelectListItem("N", "N"));

            ViewBag.FlagList = FlagList;
        }
        private async Task GetWorkGroupsList()
        {
            var result = await _whsApi.GetWorkGroups();

            var GroupList = new List<SelectListItem>();
            for (int i = 0; i < result.Count; i++)
            {
                GroupList.Add(new SelectListItem(result[i].GroupName, result[i].GroupID.ToString()));
            }
            ViewBag.GroupList = GroupList;
        }
        private async Task GetWorkClassList()
        {
            var result = await _whsApi.GetWorkClasses();

            var GroupList = new List<SelectListItem>();
            for (int i = 0; i < result.Count; i++)
            {
                GroupList.Add(new SelectListItem(result[i].ClassName, result[i].ClassID.ToString()));
            }
            ViewBag.WClassList = GroupList;
        }
        private async Task GetFactoryUnitsList()
        {
            var result = await _basApi.GetFactoryUnits();

            var UnitItems = new List<SelectListItem>();
            UnitItems.Add(new SelectListItem("全部", "0"));
            for (int i = 0; i < result.Count; i++)
            {
                UnitItems.Add(new SelectListItem(result[i].UnitName, result[i].UnitNo.ToString()));
            }
            ViewBag.FactoryUnit = UnitItems;
        }
        private async Task GetFactoryUnitsList2()
        {
            var result = await _basApi.GetFactoryUnits();

            var UnitItems = new List<SelectListItem>();
            for (int i = 0; i < result.Count; i++)
            {
                UnitItems.Add(new SelectListItem(result[i].UnitName, result[i].UnitNo.ToString()));
            }
            UnitItems.Add(new SelectListItem("其他", "0"));

            ViewBag.FactoryUnit = UnitItems;
        }
        private async Task GetFactoryUnitsList3()
        {
            var result = await _basApi.GetFactoryUnits();

            var UnitItems = new List<SelectListItem>();
            for (int i = 0; i < result.Count; i++)
            {
                UnitItems.Add(new SelectListItem(result[i].UnitName, result[i].UnitNo.ToString()));
            }
            ViewBag.FactoryUnit = UnitItems;
        }
        private async Task GetFactoryList()
        {
            var result = await _basApi.GetFactoryInfoes();

            var FactoryItems = new List<SelectListItem>();
            for (int i = 0; i < result.Count; i++)
            {
                FactoryItems.Add(new SelectListItem(result[i].FactoryNameCh, result[i].FactoryID.ToString()));
            }
            ViewBag.FactoryList = FactoryItems;
        }
        private async Task GetStationList()
        {
            var result = await _basApi.GetStationses();

            var StationItems = new List<SelectListItem>();
            StationItems.Add( new SelectListItem("N/A", "-1"));
            for (int i = 0; i < result.Count; i++)
            {
                StationItems.Add(new SelectListItem(result[i].StationName, result[i].StationID.ToString()));
            }
            ViewBag.StationList = StationItems;
        }
        private async Task GetLineList()
        {
            var result = await _basApi.GetLineInfoes();

            var LineItems = new List<SelectListItem>();
            LineItems.Add( new SelectListItem("N/A", "0"));
            for (int i = 0; i < result.Count; i++)
            {
                LineItems.Add(new SelectListItem(result[i].LineDesc , result[i].LineID.ToString()));
            }
            ViewBag.LineList = LineItems;
        }
        private async Task GetLineList2()
        {
            var result = await _basApi.GetLineInfoes();

            var LineItems = new List<SelectListItem>();
            for (int i = 0; i < result.Count; i++)
            {
                LineItems.Add(new SelectListItem(result[i].LineDesc, result[i].LineID.ToString()));
            }
            ViewBag.LineList = LineItems;
        }
        private async Task GetDeptList()
        {
            var result = await _sysApi.GetDeptInfoes();

            var DeptItems = new List<SelectListItem>();
            DeptItems.Add(new SelectListItem("N/A", "0"));
            for (int i = 0; i < result.Count; i++)
            {
                DeptItems.Add(new SelectListItem(result[i].DeptName, result[i].DeptID.ToString()));
            }
            ViewBag.DeptList = DeptItems;
        }
        private async Task GetDeptList2()
        {
            var result = await _sysApi.GetDeptInfoes();

            var DeptItems = new List<SelectListItem>();
            for (int i = 0; i < result.Count; i++)
            {
                DeptItems.Add(new SelectListItem(result[i].DeptName, result[i].DeptID.ToString()));
            }
            ViewBag.DeptList = DeptItems;
        }
        private void GetSideList()
        {

            var SideItems = new List<SelectListItem>() ;
            SideItems.Add(new SelectListItem("N/A", "N/A"));
            SideItems.Add(new SelectListItem("正面", "正面"));
            SideItems.Add(new SelectListItem("背面", "背面"));

            ViewBag.SideList = SideItems;
        }
        private void GetClassList()
        {

            var ClassItems = new List<SelectListItem>();
            ClassItems.Add(new SelectListItem("白班", "1"));
            ClassItems.Add(new SelectListItem("夜班", "2"));

            ViewBag.ClassList = ClassItems;
        }
        private async Task GetStationListByUnit(string unit)
        {
            var result = await _basApi.GetStationses();

            var StationItems = new List<SelectListItem>();
            StationItems.Add(new SelectListItem("N/A", "0"));
            for (int i = 0; i < result.Count; i++)
            {
                if(result[i].UnitNo==unit)
                    StationItems.Add(new SelectListItem(result[i].StationName, result[i].StationID.ToString()));
            }
            if(StationItems.Count==0)
                StationItems.Add(new SelectListItem("N/A", ""));

            ViewBag.StationList = StationItems;
        }
        private async Task GetExceptionClassesList()
        {
            var result = await _whsApi.GetExceptionClasses();

            var ExceptionClasses = new List<SelectListItem>();
            for (int i = 0; i < result.Count; i++)
            {
                ExceptionClasses.Add(new SelectListItem(result[i].ExceptionClassName, result[i].ExceptionClassNo));
            }

            ViewBag.ExceptionClasses = ExceptionClasses;
        }
        private async Task GetExceptionCodesList()
        {
            var result = await _whsApi.GetExceptionCodes();

            var GetExceptionCodes = new List<SelectListItem>();
            for (int i = 0; i < result.Count; i++)
            {
                GetExceptionCodes.Add(new SelectListItem(result[i].ExceptionDescCH, result[i].ExceptionNo));
            }

            ViewBag.ExceptionCodes = GetExceptionCodes;
        }
        private async Task GetStationList2()
        {
            var result = await _basApi.GetStationses();

            var StationItems = new List<SelectListItem>();
            for (int i = 0; i < result.Count; i++)
            {
                StationItems.Add(new SelectListItem(result[i].StationName, result[i].StationID.ToString()));
            }
            ViewBag.StationList = StationItems;
        }

        private async Task GetExceptionReasonList()
        {
            var result = await _whsApi.GetExceptionReasons();

            var GetExceptionReasons = new List<SelectListItem>();
            for (int i = 0; i < result.Count; i++)
            {
                GetExceptionReasons.Add(new SelectListItem(result[i].ReasonDescCH, result[i].ReasonNo));
            }

            ViewBag.ExceptionReasons = GetExceptionReasons;
        }


        private async Task GetUserInfo()
        {
            var result = await _sysApi.GetUserInfoes();

            var UserItems = new List<SelectListItem>();
            foreach (var item in result.Data)
            {
                UserItems.Add(new SelectListItem(item.UserName, item.UserID.ToString()));
            }
            ViewBag.UserList = UserItems;
        }
        #endregion

        #region WHS001工作群組維護相關

        public IActionResult WHS001()
        {
            return View();
        }

        //新增頁面
        public IActionResult WHS001C()
        {
            GetFlagList();
            return View();
        }

        //修改页面
        [HttpGet]
        public async Task<IActionResult> WHS001UAsync(int id)
        {
            GetFlagList();
            var result = await _whsApi.GetWorkGroups(id);

            if (result.Count == 0)
            {
                return View();
            }
            return View(result[0]);
        }

        public async Task<IActionResult> WHS001DAsync(int id)
        {
            var result = await _whsApi.DeleteWorkGroups(id);
            return Json(new Result() { success = true, msg = "" });
        }

        //頁面提交,id=0 添加,id>0 修改
        [HttpPost]
        public async Task<IActionResult> WHS001CSaveAsync(WorkGroup model)
        {
            if (ModelState.IsValid)
            {
                IResultModel result;

                result = await _whsApi.PostWorkGroups(JsonConvert.SerializeObject(model));


                if (result.Success) //yiru modify 2022-09-27
                {
                    var _msg = "添加成功!";
                    return RedirectToAction("Refresh", "Home", new { msg = _msg });
                }
                else
                {
                    if (result.Errors.Count > 0)
                    {
                        ModelState.AddModelError(result.Errors[0].Id, result.Errors[0].Msg);
                    }
                    else
                    {
                        ModelState.AddModelError("error", result.Msg);
                    }
                }
            }
            return View("WHS001C", model);
        }

        public async Task<IActionResult> WHS001USaveAsync(WorkGroup model)
        {
            if (ModelState.IsValid) 
            {
                IResultModel result;

                result = await _whsApi.PutWorkGroups(model.GroupID, JsonConvert.SerializeObject(model));

                if (result.Success)  //yiru modify 2022 - 09 - 27
                {
                    var _msg = "修改成功!";
                    return RedirectToAction("Refresh", "Home", new { msg = _msg });
                }
                else
                {
                    if (result.Errors.Count > 0)
                    {
                        ModelState.AddModelError(result.Errors[0].Id, result.Errors[0].Msg);
                    }
                    else
                    {
                        ModelState.AddModelError("error", result.Msg);
                    }
                }
            }
            return View("WHS001U", model);
        }

        [ResponseCache(Duration = 0)]
        [HttpGet]
        public async Task<IActionResult> GetWorkGroupsAsync()
        {
            var result = await _whsApi.GetWorkGroups();

            if (result.Count > 0)
            {
                return Json(new Table() { code = 0, msg = "", data = result, count = result.Count });
            }

            return Json(new Table() { count = 0, data = null });
        }

        #endregion

        #region WHS002條碼狀態維護相關

        public IActionResult WHS002()
        {
            return View();
        }

        //新增頁面
        public async Task<IActionResult> WHS002C()
        {
            await GetWorkGroupsList();
            return View();
        }

        //修改页面
        [HttpGet]
        public async Task<IActionResult> WHS002UAsync(int id)
        {
            await GetWorkGroupsList();
            var result = await _whsApi.GetWorkClasses(id);

            if (result.Count == 0)
            {
                return View();
            }
            return View(result[0]);
        }

        public async Task<IActionResult> WHS002DAsync(int id)
        {
            var result = await _whsApi.DeleteWorkClass(id);
            return Json(new Result() { success = true, msg = "" });
        }

        //頁面提交,id=0 添加,id>0 修改
        [HttpPost]
        public async Task<IActionResult> WHS002CSaveAsync(WorkClass model)
        {
            if (ModelState.IsValid)   //yiru modify 2022-09-27
            {
                IResultModel result;

                    result = await _whsApi.PostWorkClass(JsonConvert.SerializeObject(model));
               

                if (result.Success) //yiru modify 2022-09-27
                {
                    var _msg = "添加成功!";
                    return RedirectToAction("Refresh", "Home", new { msg = _msg });
                }
                else
                {
                    if (result.Errors.Count > 0)
                    {
                        ModelState.AddModelError(result.Errors[0].Id, result.Errors[0].Msg);
                    }
                    else
                    {
                        ModelState.AddModelError("error", result.Msg);
                    }
                }
            }
            return View("WHS002C", model);
        }

        public async Task<IActionResult> WHS002USaveAsync(WorkClass model)
        {
            if (ModelState.IsValid)
            {
                IResultModel result;

                result = await _whsApi.PutWorkClass(model.ClassID, JsonConvert.SerializeObject(model));

                if (result.Success)  //yiru modify 2022-09-27
                {
                    var _msg = "修改成功!";
                    return RedirectToAction("Refresh", "Home", new { msg = _msg });
                }
                else
                {
                    if (result.Errors.Count > 0)
                    {
                        ModelState.AddModelError(result.Errors[0].Id, result.Errors[0].Msg);
                    }
                    else
                    {
                        ModelState.AddModelError("error", result.Msg);
                    }
                }
            }
            return View("WHS002U", model);
        }

        [ResponseCache(Duration = 0)]
        [HttpGet]
        public async Task<IActionResult> GetWorkClassesAsync()
        {
            var result = await _whsApi.GetWorkClasses();

            if (result.Count > 0)
            {
                return Json(new Table() { code = 0, msg = "", data = result, count = result.Count });
            }

            return Json(new Table() { count = 0, data = null });
        }

        #endregion

        #region WHS003/WHS005標準工時維護相關
        public async Task<IActionResult> WHS003()
        {
            await GetFactoryUnitsList();
            return View();
        }
        //新增頁面
        public async Task<IActionResult> WHS003C(string unit,string lineID)
        {
            await GetStationListByUnit(unit);
            var result = await _basApi.GetFactoryUnit(unit);
            //await GetMFGType();
            ViewBag.LineID = lineID;
            ViewBag.UnitNo = unit;
            ViewBag.FactoryU = result[0].UnitName;
            GetSideList();
            return View();
        }
        //修改页面
        [HttpGet]
        public async Task<IActionResult> WHS003UAsync(int id)
        {
            await GetStationList();
            GetSideList();
            var result = await _whsApi.GetStandardWorkTime(id);

            if (result.Count == 0)
            {
                return View();
            }
            return View(result[0]);
        }
        public async Task<IActionResult> WHS003DAsync(int id)
        {
            var result = await _whsApi.DeleteStandardWorkTime(id);
            return Json(new Result() { success = true, msg = "" });
        }
        [HttpPost]
        public async Task<IActionResult> WHS003CSaveAsync(StandardWorkTime model)
        {
            if (ModelState.IsValid)   //yiru modify 2022-09-27
            {
                IResultModel result;

                result = await _whsApi.PostStandardWorkTime(JsonConvert.SerializeObject(model));

                if (result.Success)
                {
                    var _msg = "添加成功!";
                    return RedirectToAction("Refresh", "Home", new { msg = _msg });
                }
                else
                {

                    ModelState.AddModelError("error", result.Msg);

                }
            }
            return View("WHS003C", model);
        }
        public async Task<IActionResult> WHS003USaveAsync(StandardWorkTime model)
        {
            if (ModelState.IsValid)
            {
                IResultModel result;

                result = await _whsApi.PutStandardWorkTime(model.StandardID, JsonConvert.SerializeObject(model));

                if (result.Success)
                {
                    var _msg = "修改成功!";
                    return RedirectToAction("Refresh", "Home", new { msg = _msg });
                }
                else
                {
                    if (result.Errors.Count > 0)
                    {
                        ModelState.AddModelError(result.Errors[0].Id, result.Errors[0].Msg);
                    }
                    else
                    {
                        ModelState.AddModelError("error", result.Msg);
                    }
                }
            }
            return View("WHS003U", model);
        }

        [ResponseCache(Duration = 0)]
        [HttpGet]
        public async Task<IActionResult> GetStandardWorkTimesAsync()
        {
            var result = await _whsApi.GetStandardWorkTimes();

            if (result.Count > 0)
            {
                return Json(new Table() { code = 0, msg = "", data = result, count = result.Count });
            }

            return Json(new Table() { count = 0, data = null });
        }

        [ResponseCache(Duration = 0)]
        [HttpGet]
        public async Task<IActionResult> GetStandardWorkTimes2Async(string u,int l,string i) 
        {
            if (l == 0)  //yiru modify 2022-10-04
                l = -99;
        //        return Json(new Table() { count = 0, data = null });
            if (string.IsNullOrEmpty(i)) //若沒輸入料號查詢 就不帶出資料
                return Json(new Table() { count = 0, data = null });
            //i = "Null";
            if (string.IsNullOrEmpty(u))
                u = "Null";
            if (u=="0")
                u = "Null";

            var result = await _whsApi.GetStandardWorkTimes003(u,l,i);
            if (result.Count > 0)
            {
                return Json(new Table() { code = 0, msg = "", data = result, count = result.Count });
            }

            return Json(new Table() { count = 0, data = null });
        }
        public async Task<IActionResult> WHS005()
        {
            await GetFactoryUnitsList();
            return View();
        }
        public async Task<IActionResult> GetStandardWorkTimes005Async(string u, string l, string i)
        {
            if (string.IsNullOrEmpty(l))
                return Json(new Table() { count = 0, data = null });
            if (string.IsNullOrEmpty(i))
                i = "Null";
            if (string.IsNullOrEmpty(u) || u=="0")
                u = "Null";

            var result = await _whsApi.GetStandardWorkTimes005(u, l, i);
            if (result.Count > 0)
            {
                return Json(new Table() { code = 0, msg = "", data = result, count = result.Count });
            }

            return Json(new Table() { count = 0, data = null });
        }

        #endregion

        #region WHS006每日工時資料維護相關

        public async Task<IActionResult> WHS006()
        {
            //廠別
            await GetFactoryList();
            //製程單位
            await GetFactoryUnitsList3();
            //線別
            await GetLineList2();
            //站別
            await GetStationList();
            //班別
            GetClassList();
            //部門
            await GetDeptList2();

            return View();
        }

        //新增頁面
        public async Task<IActionResult> WHS006C()
        {

            //廠別
            await GetFactoryList();
            //製程單位
            await GetFactoryUnitsList3();
            //線別
            //await GetLineList2();
            //站別
            //await GetStationList();
            //班別
            GetClassList();

            return View();
        }

        //修改页面
        [HttpGet]
        public async Task<IActionResult> WHS006UAsync(int id)
        {
            //廠別
            await GetFactoryList();
            //製程單位
            await GetFactoryUnitsList3();
            //線別
            await GetLineList2();
            //站別
            await GetStationList();
            //班別
            GetClassList();
            var result = await _whsApi.GetWorkManPower(id);

            if (result.Count == 0)
            {
                return View();
            }
            return View(result[0]);
        }

        public async Task<IActionResult> WHS006DAsync(int id)
        {
            var result = await _whsApi.DeleteWorkManPower(id);
            return Json(new Result() { success = true, msg = "" });
        }

        //頁面提交,id=0 添加,id>0 修改
        [HttpPost]
        public async Task<IActionResult> WHS006CSaveAsync(WorkManPower model)
        {
            if (ModelState.IsValid)
            {
                IResultModel result;

                result = await _whsApi.PostWorkManPower(JsonConvert.SerializeObject(model));


                if (result.Success)
                {
                    var _msg = "添加成功!";
                    return RedirectToAction("Refresh", "Home", new { msg = _msg });
                }
                else
                {
                    if (result.Errors.Count > 0)
                    {
                        ModelState.AddModelError(result.Errors[0].Id, result.Errors[0].Msg);
                    }
                    else
                    {
                        ModelState.AddModelError("error", result.Msg);
                    }
                }
            }
            return View("WHS006C", model);
        }

        public async Task<IActionResult> WHS006USaveAsync(WorkManPower model)
        {
            if (ModelState.IsValid)
            {
                IResultModel result;

                result = await _whsApi.PutWorkManPower(model.PowerID, JsonConvert.SerializeObject(model));

                if (result.Success)
                {
                    var _msg = "修改成功!";
                    return RedirectToAction("Refresh", "Home", new { msg = _msg });
                }
                else
                {
                    if (result.Errors.Count > 0)
                    {
                        ModelState.AddModelError(result.Errors[0].Id, result.Errors[0].Msg);
                    }
                    else
                    {
                        ModelState.AddModelError("error", result.Msg);
                    }
                }
            }
            return View("WHS006U", model);
        }

        [ResponseCache(Duration = 0)]
        [HttpGet]
        public async Task<IActionResult> GetWorkManPowersByQueryAsync(string fid, string uid, string lid, string cID, string sID, string uNo, string dID, string sd, string ed)
        {
            if (fid == null)
            {
                fid = "*";
            }
            if (uid == null)
            {
                uid = "*";
            }
            if (lid == null)
            {
                lid = "*";
            }
            if (cID == null)
            {
                cID = "*";
            }
            if (sID == null)
            {
                sID = "*";
            }
            if (uNo == null)
            {
                uNo = "*";
            }
            if (dID == null)
            {
                dID = "*";
            }
            if (sd == null)
            {
                sd = System.DateTime.Now.AddDays(-1).ToString();
            }
            if (ed == null )
            {
                ed = System.DateTime.Now.ToString();
            }

            //var result = await _whsApi.GetWorkManPowersByQuery( factoryid,  unitid,  lineid, classID, stationID, userNo,  sdate,  edate);
            var result = await _whsApi.GetWorkManPowersByQuery(fid, uid, lid, cID, sID, uNo , dID, sd, ed);
            if (result.Count > 0)
            {
                return Json(new Table() { code = 0, msg = "", data = result, count = result.Count });
            }

            return Json(new Table() { count = 0, data = null });
        }

        #endregion

        #region WHS008工時援入/外維護相關

        public async Task<IActionResult> WHS008()
        {
            await GetFactoryUnitsList2();
            await GetFactoryList();
            return View();
        }
        //新增頁面
        public async Task<IActionResult> WHS008C()
        {
            //製程單位
            await GetFactoryUnitsList2();
            //廠別
            await GetFactoryList();
            //線別
            await GetLineList();
           //站別
           await GetStationList();
            //班別
            GetClassList();
            //其他部門
            await GetDeptList();
            return View();
        }
        //修改页面
        [HttpGet]
        public async Task<IActionResult> WHS008UAsync(int id,string type)
        {
            //製程單位
            await GetFactoryUnitsList2();
            //廠別
            await GetFactoryList();
            //線別
            await GetLineList();
            //站別
            await GetStationList();
            //班別
            GetClassList();
            //其他部門
            await GetDeptList();
            ViewBag.type = type;

            var result = await _whsApi.GetSupportUser(id);

            if (result.Count == 0)
            {
                return View();
            }
            return View(result[0]);
        }
        public async Task<IActionResult> WHS008DAsync(int id)
        {
            var result = await _whsApi.DeleteSupportUser(id);
            return Json(new Result() { success = true, msg = "" });
        }
        [HttpPost]
        public async Task<IActionResult> WHS008CSaveAsync(SupportUser model)
        {
            if (ModelState.IsValid)
            {
                var Msg = string.Empty;
                if (model.UnitNoI != "0")
                {
                    if (model.StationIDI == -1)
                    {
                        Msg += "請選擇援入站別\r\n";
                    }
                    if (model.LineIDI == 0)
                    {
                        Msg += "請選擇援入線別\r\n";
                    }

                }
                else
                {
                    if (model.OtherDeptI == "0")
                    {
                        Msg += "請選擇援入其他部門\r\n";
                    }

                }

                if (model.UnitNoO != "0")
                {
                    if (model.StationIDO == -1)
                    {
                        Msg += "請選擇援出站別\r\n";
                    }
                    if (model.LineIDO == 0)
                    {
                        Msg += "請選擇援出線別\r\n";
                    }

                }
                else
                {
                    if (model.OtherDeptO == "0")
                    {
                        Msg += "請選擇援出其他部門\r\n";
                    }
                }

                if (Msg != null)
                {
                    ModelState.AddModelError("error", Msg);
                }
                else
                { 
                    IResultModel result;
                    result = await _whsApi.PostSupportUser(JsonConvert.SerializeObject(model));


                    if (result.Success)
                    {
                        var _msg = "添加成功!";
                        return RedirectToAction("Refresh", "Home", new { msg = _msg });
                    }
                    else
                    {
                        if (result.Errors.Count > 0)
                        {
                            ModelState.AddModelError(result.Errors[0].Id, result.Errors[0].Msg);
                        }
                        else
                        {
                            ModelState.AddModelError("error", result.Msg);
                        }
                    }
            }
        }
            return View("WHS008C", model);
        }
        public async Task<IActionResult> WHS008USaveAsync(SupportUser model)
        {
            if (ModelState.IsValid)
            {
                IResultModel result;

                result = await _whsApi.PutSupportUser(model.SupportID, JsonConvert.SerializeObject(model));

                if (result.Success)
                {
                    var _msg = "修改成功!";
                    return RedirectToAction("Refresh", "Home", new { msg = _msg });
                }
                else
                {
                    if (result.Errors.Count > 0)
                    {
                        ModelState.AddModelError(result.Errors[0].Id, result.Errors[0].Msg);
                    }
                    else
                    {
                        ModelState.AddModelError("error", result.Msg);
                    }
                }
            }
            return View("WHS008U", model);
        }
        [ResponseCache(Duration = 0)]
        [HttpGet]
        public async Task<IActionResult> GetSupportUsersAsync()
        {
            var result = await _whsApi.GetSupportUsers();

            if (result.Count > 0)
            {
                return Json(new Table() { code = 0, msg = "", data = result, count = result.Count });
            }

            return Json(new Table() { count = 0, data = null });
        }
        public async Task<IActionResult> GetSupportUser2Async(string f, string type, string unit, string sd, string ed)
        {

            var result = await _whsApi.GetSupportUserByQuery( f,type, unit, sd, ed);

            if (result.Count > 0)
            {
                return Json(new Table() { code = 0, msg = "", data = result, count = result.Count });
            }

            return Json(new Table() { count = 0, data = null });
        }

        #endregion

        #region WHS009異常工時維護相關

        public async Task<IActionResult> WHS009()
        {
            var tt = Request.Cookies["UserID"];
            //製程單位
            await GetFactoryUnitsList3();
            //廠別
            await GetFactoryList();
            //線別
            await GetLineList2();
            //判定單位
            await GetDeptList2();

            return View();
        }
        //新增頁面
        public async Task<IActionResult> WHS009C()
        {
            var tt = Request.Cookies["UserID"];
            //製程單位
            await GetFactoryUnitsList2();
            //廠別
            await GetFactoryList();
            //線別
            await GetLineList();
            //站別
            await GetStationList();
            //班別
            GetClassList();
            //判定單位部門
            await GetDeptList();
            //負責人
            //內部/外部
            //EXCEPTION_Class
            //EXCEPTION_CODE
            await GetExceptionReasonList();

            return View();
        }
        //修改页面
        [HttpGet]
        public async Task<IActionResult> WHS009UAsync(string id)
        {
            //製程單位
            await GetFactoryUnitsList2();
            //廠別
            await GetFactoryList();
            //線別
            await GetLineList();
            //站別
            await GetStationList();
            //班別
            GetClassList();
            //其他部門
            await GetDeptList();

            await GetExceptionClassesList();

            await GetExceptionCodesList();

            await GetExceptionReasonList();

            await GetUserInfo();


            var result = await _whsApi.GetExceptionWorktime(id);
            var result2 = await _whsApi.GetExceptionCode(result[0].ExceptionNo);
            ViewBag.ClassNo = result2[0].ExceptionClassNo;
            var result3 = await _whsApi.GetExceptionClass(result2[0].ExceptionClassNo);
            ViewBag.GroupNo = result3[0].ExceptionGroupNo;



            if (result.Count == 0)
            {
                return View();
            }
            return View(result[0]);
        }
        public async Task<IActionResult> WHS009DAsync(int id)
        {
            var result = await _whsApi.DeleteSupportUser(id);
            return Json(new Result() { success = true, msg = "" });
        }
        [HttpPost]
        public async Task<IActionResult> WHS009CSaveAsync(ExceptionWorktime model)
        {
            if (ModelState.IsValid)
            {
                IResultModel result;
                if (model.PersonNo != null)
                {
                    var Reasons = await _whsApi.GetExceptionReason(model.PersonNo);
                    model.ReasonNameCh = Reasons[0].ReasonDescCH;
                }
                if (model.Measure != null)
                {
                    model.MeasureDate = System.DateTime.Now;
                }
          

                result = await _whsApi.PostExceptionWorktime(JsonConvert.SerializeObject(model)); //yiru modify 2022-10-04


                if (result.Success)
                {
                    var _msg = "添加成功!";
                    return RedirectToAction("Refresh", "Home", new { msg = _msg });
                }
                else
                {
                    if (result.Errors.Count > 0)
                    {
                        ModelState.AddModelError(result.Errors[0].Id, result.Errors[0].Msg);
                    }
                    else
                    {
                        ModelState.AddModelError("error", result.Msg);
                    }
                }
            }
            return View("WHS009C", model);
        }
        public async Task<IActionResult> WHS009USaveAsync(ExceptionWorktime model)
        {
            if (ModelState.IsValid)
            {
                IResultModel result;

                result = await _whsApi.PutExceptionWorktime(model.ExceptionID, JsonConvert.SerializeObject(model));

                if (result.Success)
                {
                    var _msg = "修改成功!";
                    return RedirectToAction("Refresh", "Home", new { msg = _msg });
                }
                else
                {
                    await GetExceptionClassesList();

                    await GetExceptionCodesList();

                    var result2 = await _whsApi.GetExceptionCode(model.ExceptionNo);
                    ViewBag.ClassNo = result2[0].ExceptionClassNo;
                    var result3 = await _whsApi.GetExceptionClass(result2[0].ExceptionClassNo);
                    ViewBag.GroupNo = result3[0].ExceptionGroupNo;

                    ModelState.AddModelError("error", result.Msg);

                }
            }
            return View("WHS009U", model);
        }

        [ResponseCache(Duration = 0)]
        [HttpGet]
        public async Task<IActionResult> GetExceptionWorktimeByQueryAsync(string factoryNo, string unitNo, string lineID, string deptID, string sdate, string edate)
        {
            if (factoryNo == null)
            {
                //factoryNo = "*";
                return Json(new Table() { count = 0, data = null });
            }
            if (unitNo == null)
            {
                unitNo = "*";
            }
            if (lineID == null)
            {
                lineID = "*";
            }
            if (deptID == null)
            {
                deptID = "*";
            }
            if (sdate == null || edate == null)
            {
                sdate = "*";
                edate = "*";
            }



            var result = await _whsApi.GetExceptionWorktimeByQuery(factoryNo, unitNo, lineID, deptID, sdate, edate);


            if (result.Count > 0)
            {
                return Json(new Table() { code = 0, msg = "", data = result, count = result.Count });
            }

            return Json(new Table() { count = 0, data = null });
        }
        public async Task<IActionResult> GetWipAttAsync(string id)
        {

            var result = await _pcsApi.GetWipAtt(id);


            if (result != null)
            {
                return Json(new Table() { code = 0, msg = "", data = result, count = 1 });
            }

            return Json(new Table() { count = 0, data = null });
        }
        public async Task<IActionResult> GetCountTimesAsync(string id)
        {
            string sTime, eTime;
            var timeArr = id.Split("%");
            sTime = timeArr[0];
            eTime = timeArr[1];
            sTime = sTime.Replace("T", " ");
            eTime = eTime.Replace("T", " ");
            System.DateTime dateValue1, dateValue2;
            var result = 0.0;
            if (System.DateTime.TryParse(sTime, out dateValue1) && System.DateTime.TryParse(eTime, out dateValue2))
            {
                if (dateValue2 < dateValue1)
                {
                    return Json(new Table() { count = 0, msg = "起始時間大於結束時間!!!", data = null });
                }
                else
                {
                    result = new System.TimeSpan(dateValue2.Ticks - dateValue1.Ticks).TotalMinutes;
                    return Json(new Table() { code = 0, msg = "", data = result, count = 1 });
                }
            }
            else
            {
                return Json(new Table() { count = 0, msg = "時間格是有誤!!", data = null });

            }

            #region old
            //var timeArr = id.Split(":");
            //sHour = timeArr[0];
            //sMin = timeArr[1];
            //eHour = timeArr[2];
            //eMin = timeArr[3];

            //string sHour, sMin, eHour, eMin;
            //var timeArr = id.Split(":");
            //sHour = timeArr[0];
            //sMin = timeArr[1];
            //eHour = timeArr[2];
            //eMin = timeArr[3];


            // int dateValue,hour=0,min=0;

            // if (int.TryParse(sHour, out dateValue) && int.TryParse(eHour, out dateValue) && int.TryParse(sMin, out dateValue) && int.TryParse(eMin, out dateValue))
            // {
            //     if (int.Parse(eHour) > int.Parse(sHour))
            //     {
            //         hour = int.Parse(eHour) - int.Parse(sHour) - 1;

            //         min = (60 - int.Parse(sMin)) + int.Parse(eMin);

            //     }
            //     else if (int.Parse(eHour) == int.Parse(sHour))
            //     {
            //         hour = 0;
            //         if (int.Parse(sMin) >= int.Parse(sHour))
            //         {
            //             return Json(new Table() { count = 0, data = null });
            //         }
            //         else
            //         {
            //             min = (60 - int.Parse(sMin)) + int.Parse(eMin);
            //         }
            //     }
            //     else
            //     {
            //         return Json(new Table() { count = 0, data = null });
            //     }
            // }
            // else {

            //     return Json(new Table() { count = 0, data = null });
            // }

            // var result =hour*60+min;

            //return Json(new Table() { code = 0, msg = "", data = result, count = 1 });
            #endregion

        }


        public async Task<IActionResult> GetExceptionReasonsByExceptionNoAsync(string id)
        {
            var result = await _whsApi.GetExceptionReason(id);

            if (result.Count > 0)
            {
                return Json(new Table() { code = 0, msg = "", data = result, count = result.Count });
            }

            return Json(new Table() { count = 0, data = null });
        }
        #endregion

        #region WHS011重工標準工時維護相關

        public async Task<IActionResult> WHS011()
        {
            //站別
            await GetStationList();
            return View();
        }

        //新增頁面
        public async Task<IActionResult> WHS011C()
        {

            //站別
            await GetStationList();

            return View();
        }

        //修改页面
        [HttpGet]
        public async Task<IActionResult> WHS011UAsync(int id)
        {
            //站別
            await GetStationList();

            var result = await _whsApi.GetStandardWorkTimeRework(id);

            if (result.Count == 0)
            {
                return View();
            }
            return View(result[0]);
        }

        public async Task<IActionResult> WHS011DAsync(int id)
        {
            var result = await _whsApi.DeleteStandardWorkTimeRework(id);
            return Json(new Result() { success = true, msg = "" });
        }

        //頁面提交,id=0 添加,id>0 修改
        [HttpPost]
        public async Task<IActionResult> WHS011CSaveAsync(StandardWorkTimeRework model)
        {
            if (ModelState.IsValid)
            {
                IResultModel result;

                result = await _whsApi.PostStandardWorkTimeRework(JsonConvert.SerializeObject(model));


                if (result.Success)
                {
                    var _msg = "添加成功!";
                    return RedirectToAction("Refresh", "Home", new { msg = _msg });
                }
                else
                {
                    if (result.Errors.Count > 0)
                    {
                        ModelState.AddModelError(result.Errors[0].Id, result.Errors[0].Msg);
                    }
                    else
                    {
                        ModelState.AddModelError("error", result.Msg);
                    }
                }
            }
            return View("WHS011C", model);
        }

        public async Task<IActionResult> WHS011USaveAsync(StandardWorkTimeRework model)
        {
            if (ModelState.IsValid)
            {
                IResultModel result;

                result = await _whsApi.PutStandardWorkTimeRework(model.ReworkStandardID, JsonConvert.SerializeObject(model));

                if (result.Success)
                {
                    var _msg = "修改成功!";
                    return RedirectToAction("Refresh", "Home", new { msg = _msg });
                }
                else
                {
                    if (result.Errors.Count > 0)
                    {
                        ModelState.AddModelError(result.Errors[0].Id, result.Errors[0].Msg);
                    }
                    else
                    {
                        ModelState.AddModelError("error", result.Msg);
                    }
                }
            }
            return View("WHS011U", model);
        }

        [ResponseCache(Duration = 0)]
        [HttpGet]
        public async Task<IActionResult> GetStandardWorkTimeReworkByQueryAsync(string wipno, int sid)
        {
            if (wipno == null || wipno == "0")
            {
                wipno = "*";
            }

            var result = await _whsApi.GetStandardWorkTimeReworkByQuery(wipno, sid);

            if (result.Count > 0)
            {
                return Json(new Table() { code = 0, msg = "", data = result, count = result.Count });
            }

            return Json(new Table() { count = 0, data = null });
        }

        #endregion

        #region WHS013線上無效工時查詢

        public async Task<IActionResult> WHS013()
        {
            //製程單位
            await GetFactoryUnitsList3();
            //廠別
            await GetFactoryList();
            //線別
            await GetLineList2();
            //判定單位
            await GetDeptList2();

            return View();
        }

        [ResponseCache(Duration = 0)]
        [HttpGet]
        public async Task<IActionResult> GetExceptionWorktimeOlineByQueryAsync(string factoryid, string unitid, string lineid, string deptid, string sdate, string edate)
        {
            if (factoryid == null )
            {
                factoryid = "*";
            }
            if (unitid == null)
            {
                unitid = "*";
            }
            if (lineid == null)
            {
                lineid = "*";
            }
            if (deptid == null)
            {
                deptid = "*";
            }
            if (sdate == null || edate == null)
            {
                sdate = "*";
                edate = "*";
            }



            var result = await _whsApi.GetExceptionWorktimeOlineByQuery(factoryid, unitid, lineid, deptid, sdate, edate);


            if (result.Count > 0)
            {
                return Json(new Table() { code = 0, msg = "", data = result, count = result.Count });
            }

            return Json(new Table() { count = 0, data = null });
        }

        #endregion


        #region WHS014 異常工時類別維護相關

        public IActionResult WHS014()
        {
            return View();
        }

        //新增頁面
        public IActionResult WHS014C()
        {
            return View();
        }

        //修改页面
        [HttpGet]
        public async Task<IActionResult> WHS014UAsync(string id)
        {
            var result = await _whsApi.GetExceptionClass(id);

            if (result.Count == 0)
            {
                return View();
            }
            return View(result[0]);
        }

        public async Task<IActionResult> WHS014DAsync(string id)
        {
            var result = await _whsApi.DeleteExceptionClass(id);
            return Json(new Result() { success = true, msg = "" });
        }

        //頁面提交,id=0 添加,id>0 修改
        [HttpPost]
        public async Task<IActionResult> WHS014CSaveAsync(ExceptionClass model)
        {
            if (ModelState.IsValid)
            {
                IResultModel result;

                result = await _whsApi.PostExceptionClass(JsonConvert.SerializeObject(model));


                if (result.Success)
                {
                    var _msg = "添加成功!";
                    return RedirectToAction("Refresh", "Home", new { msg = _msg });
                }
                else
                {
                    if (result.Errors.Count > 0)
                    {
                        ModelState.AddModelError(result.Errors[0].Id, result.Errors[0].Msg);
                    }
                    else
                    {
                        ModelState.AddModelError("error", result.Msg);
                    }
                }
            }
            return View("WHS014C", model);
        }

        public async Task<IActionResult> WHS014USaveAsync(ExceptionClass model)
        {
            if (ModelState.IsValid)
            {
                IResultModel result;

                result = await _whsApi.PutExceptionClass(model.ExceptionClassNo, JsonConvert.SerializeObject(model));

                if (result.Success)
                {
                    var _msg = "修改成功!";
                    return RedirectToAction("Refresh", "Home", new { msg = _msg });
                }
                else
                {
                    if (result.Errors.Count > 0)
                    {
                        ModelState.AddModelError(result.Errors[0].Id, result.Errors[0].Msg);
                    }
                    else
                    {
                        ModelState.AddModelError("error", result.Msg);
                    }
                }
            }
            return View("WHS014U", model);
        }

        [ResponseCache(Duration = 0)]
        [HttpGet]
        public async Task<IActionResult> GetExceptionClassesAsync()
        {
            var result = await _whsApi.GetExceptionClasses();

            if (result.Count > 0)
            {
                return Json(new Table() { code = 0, msg = "", data = result, count = result.Count });
            }

            return Json(new Table() { count = 0, data = null });
        }

        [ResponseCache(Duration = 0)]
        [HttpGet]
        public async Task<IActionResult> GetExceptionClassesByQureyAsync(string id)
        {
            var result = await _whsApi.GetExceptionClassesByGroup(id);

            if (result.Count > 0)
            {
                return Json(new Table() { code = 0, msg = "", data = result, count = result.Count });
            }

            return Json(new Table() { count = 0, data = null });
        }

        #endregion

        #region WHS015 異常工時代碼維護相關

        public IActionResult WHS015()
        {
            return View();
        }

        //新增頁面
        public async Task<IActionResult> WHS015C()
        {

            await GetExceptionClassesList();
            return View();
        }

        //修改页面
        [HttpGet]
        public async Task<IActionResult> WHS015UAsync(string id)
        {
            var result = await _whsApi.GetExceptionCode(id);
            var result2 = await _whsApi.GetExceptionClass(result[0].ExceptionClassNo);
            await GetExceptionClassesList();
            ViewBag.ExceptionGroupNo = result2[0].ExceptionGroupNo;
            if (result.Count == 0)
            {
                return View();
            }
            return View(result[0]);
        }

        public async Task<IActionResult> WHS015DAsync(string id)
        {
            var result = await _whsApi.DeleteExceptionCode(id);
            return Json(new Result() { success = true, msg = "" });
        }

        //頁面提交,id=0 添加,id>0 修改
        [HttpPost]
        public async Task<IActionResult> WHS015CSaveAsync(ExceptionCode model)
        {
            if (ModelState.IsValid)
            {
                IResultModel result;

                result = await _whsApi.PostExceptionCode(JsonConvert.SerializeObject(model));


                if (result.Success)
                {
                    var _msg = "添加成功!";
                    return RedirectToAction("Refresh", "Home", new { msg = _msg });
                }
                else
                {
                    if (result.Errors.Count > 0)
                    {
                        ModelState.AddModelError(result.Errors[0].Id, result.Errors[0].Msg);
                    }
                    else
                    {
                        ModelState.AddModelError("error", result.Msg);
                    }
                }
            }
            return View("WHS015C", model);
        }

        public async Task<IActionResult> WHS015USaveAsync(ExceptionCode model)
        {
            var value = ViewBag.ExceptionGroupNo;
            await GetExceptionClassesList();

            if (ModelState.IsValid)
            {
                IResultModel result;

                result = await _whsApi.PutExceptionCode(model.ExceptionNo, JsonConvert.SerializeObject(model));

                if (result.Success)
                {
                    var _msg = "修改成功!";
                    return RedirectToAction("Refresh", "Home", new { msg = _msg });
                }
                else
                {

                    ViewBag.ExceptionGroupNo = value;
                    ModelState.AddModelError("error", result.Msg);

                }
            }
            return View("WHS015U", model);
        }

        [ResponseCache(Duration = 0)]
        [HttpGet]
        public async Task<IActionResult> GetExceptionCodesAsync()
        {
            var result = await _whsApi.GetExceptionCodes();

            if (result.Count > 0)
            {
                return Json(new Table() { code = 0, msg = "", data = result, count = result.Count });
            }

            return Json(new Table() { count = 0, data = null });
        }

        [ResponseCache(Duration = 0)]
        [HttpGet]
        public async Task<IActionResult> GetExceptionCodesByQureyAsync(string id)
        {
            var result = await _whsApi.GetExceptionCodesByQuery(id);

            if (result.Count > 0)
            {
                return Json(new Table() { code = 0, msg = "", data = result, count = result.Count });
            }

            return Json(new Table() { count = 0, data = null });
        }


        #endregion

        #region WHS016 異常工時原因維護相關

        public IActionResult WHS016()
        {
            return View();
        }

        //新增頁面
        public IActionResult WHS016C()
        {
            return View();
        }

        //修改页面
        [HttpGet]
        public async Task<IActionResult> WHS016UAsync(string id)
        {
            await GetExceptionClassesList();
            await GetExceptionCodesList();
            var result = await _whsApi.GetExceptionReason(id);
            var result2 = await _whsApi.GetExceptionCode(result[0].ExceptionNo);
            ViewBag.ClassNo = result2[0].ExceptionClassNo;
            var result3 = await _whsApi.GetExceptionClass(result2[0].ExceptionClassNo);
            ViewBag.GroupNo = result3[0].ExceptionGroupNo;

            if (result.Count == 0)
            {
                return View();
            }
            return View(result[0]);
        }

        public async Task<IActionResult> WHS016DAsync(string id)
        {
            var result = await _whsApi.DeleteExceptionReason(id);
            return Json(new Result() { success = true, msg = "" });
        }

        //頁面提交,id=0 添加,id>0 修改
        [HttpPost]
        public async Task<IActionResult> WHS016CSaveAsync(ExceptionReason model)
        {
            if (ModelState.IsValid)
            {
                IResultModel result;

                result = await _whsApi.PostExceptionReason(JsonConvert.SerializeObject(model));


                if (result.Success)
                {
                    var _msg = "添加成功!";
                    return RedirectToAction("Refresh", "Home", new { msg = _msg });
                }
                else
                {

                    await GetExceptionClassesList();
                    await GetExceptionCodesList();
                    ModelState.AddModelError("error", result.Msg);

                }
            }
            return View("WHS016C", model);
        }

        public async Task<IActionResult> WHS016USaveAsync(ExceptionReason model)
        {

            if (ModelState.IsValid)
            {
                IResultModel result;

                result = await _whsApi.PutExceptionReason(model.ReasonNo, JsonConvert.SerializeObject(model));

                if (result.Success)
                {
                    var _msg = "修改成功!";
                    return RedirectToAction("Refresh", "Home", new { msg = _msg });
                }
                else
                {

                    await GetExceptionClassesList();
                    await GetExceptionCodesList();
                    var result1 = await _whsApi.GetExceptionReason(model.ReasonNo);
                    var result2 = await _whsApi.GetExceptionCode(result1[0].ExceptionNo);
                    ViewBag.ClassNo = result2[0].ExceptionClassNo;
                    var result3 = await _whsApi.GetExceptionClass(result2[0].ExceptionClassNo);
                    ViewBag.GroupNo = result3[0].ExceptionGroupNo;


                    ModelState.AddModelError("error", result.Msg);

                }
            }
            return View("WHS016U", model);
        }

        [ResponseCache(Duration = 0)]
        [HttpGet]
        public async Task<IActionResult> GetExceptionReasonsAsync()
        {
            var result = await _whsApi.GetExceptionReasons();

            if (result.Count > 0)
            {
                return Json(new Table() { code = 0, msg = "", data = result, count = result.Count });
            }

            return Json(new Table() { count = 0, data = null });
        }

        [ResponseCache(Duration = 0)]
        [HttpGet]
        public async Task<IActionResult> GetExceptionReasonsByQueryAsync(string id)
        {
            var result = await _whsApi.GetExceptionReasonsByQuery(id);

            if (result.Count > 0)
            {
                return Json(new Table() { code = 0, msg = "", data = result, count = result.Count });
            }

            return Json(new Table() { count = 0, data = null });
        }

        #endregion

        public async Task<IActionResult> WHS017()
        {
            var tt = Request.Cookies["UserID"];
            //製程單位
            await GetFactoryUnitsList3();
            //廠別
            await GetFactoryList();
            //線別
            await GetLineList2();
            //判定單位
            await GetDeptList2();

            return View();
        }


        #region WHS018生產工時維護相關

        public async Task<IActionResult> WHS018()
        {
            var tt = Request.Cookies["UserID"];
            //製程單位
            await GetFactoryUnitsList3();
            //線別
            await GetLineList2();
            //站別
            await GetStationList2();

            return View();
        }
        //新增頁面
        public async Task<IActionResult> WHS018C()
        {
            var tt = Request.Cookies["UserID"];
            ViewBag.UserID = tt;
            //製程單位
            await GetFactoryUnitsList2();
            //廠別
            await GetFactoryList();
            //線別
            await GetLineList2();
            //站別
            await GetStationList();


            return View();
        }
        //修改页面
        [HttpGet]
        public async Task<IActionResult> WHS018UAsync(string id)
        {
            var tt = Request.Cookies["UserID"];
            ViewBag.UserID = tt;
            //製程單位
            await GetFactoryUnitsList2();
            //廠別
            await GetFactoryList();
            //線別
            await GetLineList2();
            //站別
            await GetStationList();

            var result = await _whsApi.GetWorkingHoursCollection(id);

            if (result.Count == 0)
            {
                return View();
            }
            return View(result[0]);
        }
        //完工页面
        [HttpGet]
        public async Task<IActionResult> WHS018FAsync(string id)
        {
            var tt = Request.Cookies["UserID"];
            ViewBag.UserID = tt;
            //製程單位
            await GetFactoryUnitsList2();
            //廠別
            await GetFactoryList();
            //線別
            await GetLineList2();
            //站別
            await GetStationList();
            //班別
            GetClassList();
            //判定單位部門
            await GetDeptList();

            var result = await _whsApi.GetWorkingHoursCollection(id);


            if (result.Count == 0)
            {
                return View();
            }
            return View(result[0]);
        }
        public async Task<IActionResult> WHS018DAsync(int id)
        {
            var result = await _whsApi.DeleteSupportUser(id);
            return Json(new Result() { success = true, msg = "" });
        }
        [HttpPost]
        public async Task<IActionResult> WHS018CSaveAsync(WorkingHoursCollection model)
        {
            if (ModelState.IsValid)
            {
                IResultModel result;

                result = await _whsApi.PostWorkingHoursCollection(JsonConvert.SerializeObject(model));

                if (result.Success)
                {
                    var _msg = "添加成功!";
                    return RedirectToAction("Refresh", "Home", new { msg = _msg });
                }
                else
                {
                    if (result.Errors.Count > 0)
                    {
                        ModelState.AddModelError(result.Errors[0].Id, result.Errors[0].Msg);
                    }
                    else
                    {
                        ModelState.AddModelError("error", result.Msg);
                    }
                }
            }
            return View("WHS018C", model);
        }
        public async Task<IActionResult> WHS018USaveAsync(WorkingHoursCollection model)
        {
            if (ModelState.IsValid)
            {
                IResultModel result;

                result = await _whsApi.PutWorkingHoursCollection(model.TimeSheetID, JsonConvert.SerializeObject(model));

                if (result.Success)
                {
                    var _msg = "修改成功!";
                    return RedirectToAction("Refresh", "Home", new { msg = _msg });
                }
                else
                {
                    var tt = Request.Cookies["UserID"];
                    ViewBag.UserID = tt;
                    //製程單位
                    await GetFactoryUnitsList2();
                    //廠別
                    await GetFactoryList();
                    //線別
                    await GetLineList2();
                    //站別
                    await GetStationList();
                    //班別
                    GetClassList();
                    //判定單位部門
                    await GetDeptList();

                    ModelState.AddModelError("error", result.Msg);

                }
            }
            return View("WHS018U", model);
        }
        public async Task<IActionResult> WHS018FSaveAsync(WorkingHoursCollection model)
        {
            if (ModelState.IsValid)
            {
                IResultModel result;


                result = await _whsApi.PutWorkingHoursCollection(model.TimeSheetID, JsonConvert.SerializeObject(model));

                if (result.Success)
                {
                    var _msg = "修改成功!";
                    return RedirectToAction("Refresh", "Home", new { msg = _msg });
                }
                else
                {
                    var tt = Request.Cookies["UserID"];
                    ViewBag.UserID = tt;
                    //製程單位
                    await GetFactoryUnitsList2();
                    //廠別
                    await GetFactoryList();
                    //線別
                    await GetLineList2();
                    //站別
                    await GetStationList();
                    //班別
                    GetClassList();
                    //判定單位部門
                    await GetDeptList();


                    ModelState.AddModelError("error", result.Msg);

                }
            }
            return View("WHS018F", model);
        }

        [ResponseCache(Duration = 0)]
        [HttpGet]
        public async Task<IActionResult> GetWorkingHoursCollectionByQueryAsync(string unitNo, string lineid, string stationid, string wipno, string itemno, string user, string sdate, string edate)
        {
            if (unitNo == null)
            {
                unitNo = "*";
            }
            if (lineid == null)
            {
                lineid = "*";
            }
            if (stationid == null)
            {
                stationid = "*";
            }
            if (itemno == null)
            {
                itemno = "*";
            }
            if (user == null)
            {
                user = "*";
            }
            if (sdate == null || edate == null)
            {
                sdate = "*";
                edate = "*";
            }

            var result = await _whsApi.GetWorkingHoursCollectionByQuery( unitNo,  lineid,  stationid,  wipno,  itemno,  user,  sdate,  edate);


            if (result.Count > 0)
            {
                //List < AMESCoreStudio.WebApi.DTO.AMES.WorkingHoursCollectionDto > workingHoursCollectionDto = new List<AMESCoreStudio.WebApi.DTO.AMES.WorkingHoursCollectionDto>();

                //foreach (var data in result)
                //{
                //    var dd = _context.StandardWorkTimes.Where(w => w.ItemNo == data.ItemNo);
                //    var d1 = dd.Where(w => w.UnitNo == data.UnitNo);
                //    var d2 = d1.Where(w => w.LineID == data.LineID);
                //    var d3 = d2.Where(w => w.StationID == data.StationID).FirstOrDefault();
                //    data.RuleCNT = d3.OPCNT;
                //    data.RuleTime = d3.TotalCT;
                //    var p1 = _context.UserInfoes.Where(w => w.UserID == data.CreateUserID).FirstOrDefault();
                //    data.CreateUser = p1.UserName;
                //    if (data.UpdateUserID != null)
                //    {
                //        var p2 = _context.UserInfoes.Where(w => w.UserID == data.UpdateUserID).FirstOrDefault();
                //        data.UpdateUser = p2.UserName;
                //    }
                //    if (data.TotalCT != null)
                //    {
                //        data.Effective = (data.RuleCNT * data.RuleTime) / (data.TotalCT * data.OPCNT); //標準工時 * 人數 / 該筆資料的實際標工(TOTAL_CT) * 人數 * 100 %
                //    }
                //
                //}


                return Json(new Table() { code = 0, msg = "", data = result, count = result.Count });
            }

            return Json(new Table() { count = 0, data = null });
        }

        public async Task<IActionResult> GetWorkingHoursCollectionDtoByQueryAsync(string unitNo, string lineid, string stationid, string wipno, string itemno, string user, string sdate, string edate)
        {
            if (unitNo == null)
            {
                unitNo = "*";
            }
            if (lineid == null)
            {
                lineid = "*";
            }
            if (stationid == null)
            {
                stationid = "*";
            }
            if (itemno == null)
            {
                itemno = "*";
            }
            if (wipno == null)
            {
                wipno = "*";
            }
            
            if (user == null)
            {
                user = "*";
            }
            if (sdate == null || edate == null)
            {
                sdate = "*";
                edate = "*";
            }

            var result = await _whsApi.GetWorkingHoursCollectionDtoByQuery(unitNo, lineid, stationid, wipno, itemno, user, sdate, edate);


            if (result.Count > 0)
            {
                return Json(new Table() { code = 0, msg = "", data = result, count = result.Count });
            }

            return Json(new Table() { count = 0, data = null });
        }


        #endregion

        #region WHS019生產工時報工相關

        public async Task<IActionResult> WHS019()
        {
            var user_id = Request.Cookies["UserID"];
            //製程單位
            await GetFactoryUnitsList3();
            //線別
            await GetLineList2();
            //站別
            await GetStationList2();

            return View();
        }
        //新增頁面
        public async Task<IActionResult> WHS019C()
        {
            var user_id = Request.Cookies["UserID"];
            ViewBag.UserID = user_id;
            //製程單位
            await GetFactoryUnitsList2();
            //廠別
            await GetFactoryList();
            //線別
            await GetLineList2();
            //站別
            await GetStationList();


            return View();
        }
        //修改页面
        [HttpGet]
        public async Task<IActionResult> WHS019UAsync(string id)
        {
            var user_id = Request.Cookies["UserID"];
            ViewBag.UserID = user_id;
            //製程單位
            await GetFactoryUnitsList2();
            //廠別
            await GetFactoryList();
            //線別
            await GetLineList2();
            //站別
            await GetStationList();

            var result = await _whsApi.GetWorkingHoursCollection(id);

            if (result.Count == 0)
            {
                return View();
            }
            return View(result[0]);
        }

        //完工页面
        [HttpGet]
        public async Task<IActionResult> WHS019EAsync(string id)
        {
            var user_id = Request.Cookies["UserID"];
            ViewBag.UserID = user_id;
            //製程單位
            await GetFactoryUnitsList2();
            //廠別
            await GetFactoryList();
            //線別
            await GetLineList2();
            //站別
            await GetStationList();
            //班別
            GetClassList();
            //判定單位部門
            await GetDeptList();

            var result = await _whsApi.GetWorkingHoursCollection(id);


            if (result.Count == 0)
            {
                return View();
            }
            return View(result[0]);
        }
        public async Task<IActionResult> WHS019DAsync(int id)
        {
            var result = await _whsApi.DeleteSupportUser(id);
            return Json(new Result() { success = true, msg = "" });
        }
        [HttpPost]
        public async Task<IActionResult> WHS019CSaveAsync(WorkingHoursCollection model)
        {
            if (ModelState.IsValid)
            {
                IResultModel result;

                result = await _whsApi.PostWorkingHoursCollection(JsonConvert.SerializeObject(model));

                if (result.Success)
                {
                    var _msg = "添加成功!";
                    return RedirectToAction("Refresh", "Home", new { msg = _msg });
                }
                else
                {
                    if (result.Errors.Count > 0)
                    {
                        ModelState.AddModelError(result.Errors[0].Id, result.Errors[0].Msg);
                    }
                    else
                    {
                        ModelState.AddModelError("error", result.Msg);
                    }
                }
            }
            return View("WHS019C", model);
        }
        public async Task<IActionResult> WHS019USaveAsync(WorkingHoursCollection model)
        {
            if (ModelState.IsValid)
            {
                IResultModel result;

                result = await _whsApi.PutWorkingHoursCollection(model.TimeSheetID, JsonConvert.SerializeObject(model));

                if (result.Success)
                {
                    var _msg = "修改成功!";
                    return RedirectToAction("Refresh", "Home", new { msg = _msg });
                }
                else
                {
                    var user_id = Request.Cookies["UserID"];
                    ViewBag.UserID = user_id;
                    //製程單位
                    await GetFactoryUnitsList2();
                    //廠別
                    await GetFactoryList();
                    //線別
                    await GetLineList2();
                    //站別
                    await GetStationList();
                    //班別
                    GetClassList();
                    //判定單位部門
                    await GetDeptList();

                    ModelState.AddModelError("error", result.Msg);

                }
            }
            return View("WHS019U", model);
        }
        public async Task<IActionResult> WHS019ESaveAsync(WorkingHoursCollection model)
        {
            if (ModelState.IsValid)
            {
                IResultModel result;


                result = await _whsApi.PutWorkingHoursCollection(model.TimeSheetID, JsonConvert.SerializeObject(model));

                if (result.Success)
                {
                    var _msg = "修改成功!";
                    return RedirectToAction("Refresh", "Home", new { msg = _msg });
                }
                else
                {
                    var tt = Request.Cookies["UserID"];
                    ViewBag.UserID = tt;
                    //製程單位
                    await GetFactoryUnitsList2();
                    //廠別
                    await GetFactoryList();
                    //線別
                    await GetLineList2();
                    //站別
                    await GetStationList();
                    //班別
                    GetClassList();
                    //判定單位部門
                    await GetDeptList();


                    ModelState.AddModelError("error", result.Msg);

                }
            }
            return View("WHS019E", model);
        }


        [ResponseCache(Duration = 0)]
        [HttpGet]
        public async Task<IActionResult> GetWorkingHoursCollectionByQuery4WHS019Async(string unitNo, string lineid, string stationid, string wipno, string itemno, string user, string sdate, string edate)
        {
            if (unitNo == null)
            {
                unitNo = "*";
            }
            if (lineid == null || lineid == "0")
            {
                lineid = "*";
            }
            if (stationid == null || stationid == "0")
            {
                stationid = "*";
            }
            if (itemno == null)
            {
                itemno = "*";
            }
            if (user == null)
            {
                user = "*";
            }
            if (sdate == null || edate == null)
            {
                sdate = "*";
                edate = "*";
            }

            var result = await _whsApi.GetWorkingHoursCollectionByQuery(unitNo, lineid, stationid, wipno, itemno, user, sdate, edate);


            if (result.Count > 0)
            {
                //List < AMESCoreStudio.WebApi.DTO.AMES.WorkingHoursCollectionDto > workingHoursCollectionDto = new List<AMESCoreStudio.WebApi.DTO.AMES.WorkingHoursCollectionDto>();

                //foreach (var data in result)
                //{
                //    var dd = _context.StandardWorkTimes.Where(w => w.ItemNo == data.ItemNo);
                //    var d1 = dd.Where(w => w.UnitNo == data.UnitNo);
                //    var d2 = d1.Where(w => w.LineID == data.LineID);
                //    var d3 = d2.Where(w => w.StationID == data.StationID).FirstOrDefault();
                //    data.RuleCNT = d3.OPCNT;
                //    data.RuleTime = d3.TotalCT;
                //    var p1 = _context.UserInfoes.Where(w => w.UserID == data.CreateUserID).FirstOrDefault();
                //    data.CreateUser = p1.UserName;
                //    if (data.UpdateUserID != null)
                //    {
                //        var p2 = _context.UserInfoes.Where(w => w.UserID == data.UpdateUserID).FirstOrDefault();
                //        data.UpdateUser = p2.UserName;
                //    }
                //    if (data.TotalCT != null)
                //    {
                //        data.Effective = (data.RuleCNT * data.RuleTime) / (data.TotalCT * data.OPCNT); //標準工時 * 人數 / 該筆資料的實際標工(TOTAL_CT) * 人數 * 100 %
                //    }
                //
                //}


                return Json(new Table() { code = 0, msg = "", data = result, count = result.Count });
            }

            return Json(new Table() { count = 0, data = null });
        }

        public async Task<IActionResult> GetWorkingHoursCollectionDtoByQuery4WHS019Async(string unitNo, string lineid, string stationid, string wipno, string itemno, string user, string sdate, string edate)
        {
            if (unitNo == null)
            {
                unitNo = "*";
            }
            if (lineid == null || lineid == "0")
            {
                lineid = "*";
            }
            if (stationid == null || stationid == "0")
            {
                stationid = "*";
            }
            if (itemno == null)
            {
                itemno = "*";
            }
            if (wipno == null)
            {
                wipno = "*";
            }

            if (user == null)
            {
                user = "*";
            }
            if (sdate == null || edate == null)
            {
                sdate = "*";
                edate = "*";
            }

            var result = await _whsApi.GetWorkingHoursCollectionDtoByQuery(unitNo, lineid, stationid, wipno, itemno, user, sdate, edate);


            if (result.Count > 0)
            {
                return Json(new Table() { code = 0, msg = "", data = result, count = result.Count });
            }

            return Json(new Table() { count = 0, data = null });
        }


        #endregion
    }
}