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;
using Microsoft.AspNetCore.Http;
using System.IO;
using Microsoft.AspNetCore.Hosting;

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;
        private readonly IWebHostEnvironment _env;

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

        #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++)
            {
                if (result[i].StatusNo == "A") //yiru add 2022-10-11
                    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()
        {
          //  await GetStationListByUnit(unit);
            await GetFactoryUnitsList();
           // var result = await _basApi.GetFactoryUnit(unit);
            //await GetMFGType();
          //  ViewBag.LineID = lineID;
           // ViewBag.UnitNo = unit;
           // ViewBag.FactoryU = result[0].UnitName;
            GetSideList();
            await GetStation4WHS019C();

            return View();
        }
        //修改页面
        [HttpGet]
        public async Task<IActionResult> WHS003UAsync(int id)
        {
            //await GetStationList();
            await GetStation4WHS019C();
            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 });
            */
            if (string.IsNullOrEmpty(i))
            {
                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();

            var user_id = Request.Cookies["UserID"];
            var user_info = await _sysApi.GetUserInfo(int.Parse(user_id));

            SupportUser model = new SupportUser();
            model.UserNo = user_info[0].UserNo;
            model.UserNane = user_info[0].UserName;

            return View(model);
        }
        //修改页面
        [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)
        {
            //製程單位
            await GetFactoryUnitsList2();
            //廠別
            await GetFactoryList();
            //線別
            await GetLineList();
            //站別
            await GetStationList();
            //班別
            GetClassList();
            //其他部門
            await GetDeptList();


            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 (!string.IsNullOrEmpty(Msg))
                {

                   

                    ModelState.AddModelError("error", Msg);
                    return View("WHS008C",model);
                }
                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();
            await GetStation4WHS019C();

            //班別
            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();
            await GetStation4WHS019C();
            //班別
            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);
        }


        public async Task<IActionResult> WHS009R(int id)
        {
            ViewBag.ExceptionWorktimeID = id;
         
            return View();
        }


        public async Task<IActionResult> WHS009RSaveAsync(ExceptionWorktimeBlob model, IFormFile formFile)
        {
            IResultModel result;
            var userID = "";
            HttpContext.Request.Cookies.TryGetValue("UserID", out userID);
            int user_id = 0;
            if (userID != null)
            {
                if (int.Parse(userID.ToString()) >= 0)
                {
                    user_id = int.Parse(userID.ToString());
                }
            }
            model.CreateUserID = user_id;
            model.CreateDate = System.DateTime.Now;
            model.UpdateUserID = user_id;
            model.UpdateDate = System.DateTime.Now;
            string FileName = string.Empty;
            string NewName = string.Empty;
            string FilePath = string.Empty;


            if (formFile != null)
            {
                if (formFile.Length > 0)
                {
                    //取得使用者上傳檔案的原始檔名
                    FileName = Path.GetFileName(formFile.FileName);
                    //取原始檔名中的副檔名
                    var fileExt = Path.GetExtension(FileName);
                    //為避免使用者上傳的檔案名稱發生重複,重新給一個亂數名稱
                    NewName = Path.GetRandomFileName() + fileExt;
                    //指定要寫入的路徑、檔名和副檔名
                    FilePath = $"\\WHSFile\\";//本機目錄
                   
                    if (!System.IO.Directory.Exists(_env.WebRootPath + FilePath))
                    {
                        System.IO.Directory.CreateDirectory(_env.WebRootPath + FilePath);
                    }

                    using (var stream = new FileStream(_env.WebRootPath + FilePath + NewName, FileMode.Create))
                    {
                        await formFile.CopyToAsync(stream);
                    }

                    //var fileProvider = _fileServerProvider.GetProvider("/aa");
                    //var fileInfo = fileProvider.GetFileInfo(formFile.FileName);
                    //fileInfo = fileProvider.GetFileInfo(formFile.FileName);
                    ////遠端目錄
                    //using (var stream = new FileStream(fileInfo.PhysicalPath, FileMode.Create))
                    //{
                    //    await formFile.CopyToAsync(stream);

                    model.ImageName = NewName;
                 
                    model.FilePath = FilePath;// fileInfo.PhysicalPath;

                    result = await _whsApi.PostExceptionWorktimeBlobs(JsonConvert.SerializeObject(model));
                    if (result.Success)
                    {
                        //var _msg = "上傳成功!";
                        ViewBag.ExceptionWorktimeID = model.ExceptionWorktimeID;
                       
                        return View("WHS009R");
                    }
                    else
                    {
                        ModelState.AddModelError("error", result.Msg);
                    }
                }
            }
            else
            {
                ModelState.AddModelError("error", "請選擇要上傳檔案");
            }


            ViewBag.ExceptionWorktimeID = model.ExceptionWorktimeID;
      

            return View("WHS009R");
        }


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

            var result = await _whsApi.GetExceptionWorktimeBlobs(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 });
        }

        [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.GetExceptionWorktimeByQueryWHS009(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> GetExceptionWorktimeByQueryAndBlobAsync(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.GetExceptionWorktimeByQueryWHS009(factoryNo, unitNo, lineID, deptID, sdate, edate);

            if (result.Count > 0)
            {
                foreach (var item in result)
                {
                    var Bolbresult = await _whsApi.GetExceptionWorktimeBlobs(item.ExceptionID );
                    item.StationID = Bolbresult.Count;
                  
                }
                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();
            await GetStation4WHS019C2();

            return View();
        }

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

            //站別
            //await GetStationList();
            await GetStation4WHS019C2();

            return View();
        }

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

            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生產工時報工相關

        private async Task GetFactoryUnitsByUser(string unitNo)
        {
            var result = await _basApi.GetFactoryUnit(unitNo);

            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 GetLineListByUnit(string unitNo)
        {
            var result = await _basApi.GetLineInfoByUnit(unitNo);

            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 GetStation4WHS019()
        {
            var result = await _whsApi.GetStationWorkingHours();

            var StationItems = new List<SelectListItem>();
            foreach (StationWorkingHour stationWorkingHour in result.Data)
            {
                StationItems.Add(new SelectListItem(stationWorkingHour.StationWHName, stationWorkingHour.StationWHID.ToString()));
            }

            ViewBag.StationList = StationItems;
        }



        private async Task GetStation4WHS019C2()
        {
            var result = await _whsApi.GetStationWorkingHours();

            var StationItems = new List<SelectListItem>();
            StationItems.Add(new SelectListItem("N/A", "-1"));
            foreach (StationWorkingHour stationWorkingHour in result.Data)
            {
                if (stationWorkingHour.TypeNo == "正常站")
                {
                    StationItems.Add(new SelectListItem(stationWorkingHour.StationWHName, stationWorkingHour.StationWHID.ToString()));
                }
            }

            ViewBag.StationList = StationItems;
        }

        [ResponseCache(Duration = 0)]
        [HttpGet]
        public async Task<IActionResult> GetStationses4WHS019Async(string unit_no)
        {
            List<StationWorkingHour> result = await _whsApi.GetStationWorkingHour2(unit_no);

            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> GetClassInfoJsonAsync(string unit_no)
        {
            var result = await _basApi.GetClassInfoByUnit(unit_no);

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

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

        private async Task GetStation4WHS019C()
        {
            var result = await _whsApi.GetStationWorkingHours();

            var StationItems = new List<SelectListItem>();
            foreach (StationWorkingHour stationWorkingHour in result.Data)
            {
                if (stationWorkingHour.TypeNo == "正常站")
                {
                    StationItems.Add(new SelectListItem(stationWorkingHour.StationWHName, stationWorkingHour.StationWHID.ToString()));
                }
            }

            ViewBag.StationList = StationItems;
        }

        public async Task<IActionResult> WHS019()
        {
            var user_id = Request.Cookies["UserID"];

            var user_info = await _sysApi.GetUserInfo(int.Parse(user_id));
            
            //製程單位
            await GetFactoryUnitsByUser(user_info[0].UnitNo);

            //線別
            //await GetLineList2();
            await GetLineListByUnit(user_info[0].UnitNo);

            //站別
            //await GetStationList2();
            await GetStation4WHS019();

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

            var user_info = await _sysApi.GetUserInfo(int.Parse(user_id));


            //製程單位
            //await GetFactoryUnitsByUser(user_info[0].UnitNo);
            await GetFactoryUnitsByUser(null);

            var unit_no = user_info[0].UnitNo;
            if (unit_no == null || unit_no == "")
            {
                var unit_Info = await _basApi.GetFactoryUnit(null);
                unit_no = unit_Info[0].UnitNo;
            }
            
            //班別
            await GetClassInfoList(unit_no);

            var class_info = await _basApi.GetClassInfoByUnit(unit_no);
            int class_id = -1;
            int class_time = int.Parse(System.DateTime.Now.ToString("HHmm"));
            for (int i = 0; i < class_info.Count; i++)
            {
                if (class_time <= 2359)
                {
                    if (int.Parse(class_info[i].BeginTime.Replace(":", "")) <= class_time && int.Parse(class_info[i].EndTime.Replace(":", "")) >= class_time)
                    {
                        class_id = class_info[i].ClassID;
                    }
                    else if (int.Parse(class_info[i].BeginTime.Replace(":", "")) <= class_time && int.Parse(class_info[i].EndTime.Replace(":", "")) <= int.Parse(class_info[i].BeginTime.Replace(":", "")))
                    {
                        class_id = class_info[i].ClassID;
                    }
                }
                else
                {
                    if (int.Parse(class_info[i].BeginTime.Replace(":", "")) >= class_time && int.Parse(class_info[i].EndTime.Replace(":", "")) >= class_time)
                    {
                        class_id = class_info[i].ClassID;
                    }
                }
            }

            //廠別
            await GetFactoryList();
            //線別
            //await GetLineList2();
            await GetLineListByUnit(unit_no);
            //站別
            //await GetStationList();
            await GetStation4WHS019C();
            
            
            WorkingHoursCollection model = new WorkingHoursCollection();
            model.OpenTime = System.DateTime.Now;
            model.UnitNo = unit_no;
            model.ClassID = class_id;

            //return View();
            return View(model);
        }
        //修改页面
        [HttpGet]
        public async Task<IActionResult> WHS019UAsync(string id)
        {
            var user_id = Request.Cookies["UserID"];
            ViewBag.UserID = user_id;
            //製程單位
            //await GetFactoryUnitsList2();
            var user_info = await _sysApi.GetUserInfo(int.Parse(user_id));

            //製程單位
            await GetFactoryUnitsByUser(user_info[0].UnitNo);
            //廠別
            await GetFactoryList();
            //線別
            //await GetLineList2();
            await GetLineListByUnit(user_info[0].UnitNo);
            //站別
            //await GetStationList();
            await GetStation4WHS019C();

            //班別
            await GetClassInfoList(user_info[0].UnitNo);

            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();
            await GetStation4WHS019C();
            //班別
            GetClassList();
            //判定單位部門
            await GetDeptList();

            var user_info = await _sysApi.GetUserInfo(int.Parse(user_id));
            //班別
            await GetClassInfoList(user_info[0].UnitNo);

            var result = await _whsApi.GetWorkingHoursCollection(id);


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

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

            var user_info = await _sysApi.GetUserInfo(int.Parse(user_id));
            //班別
            await GetClassInfoList(user_info[0].UnitNo);

            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 = "*";
            }
            else
            {
                itemno = itemno.ToUpper();
            }

            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

        [HttpPost]
        public async Task<JsonResult> GetStationSide(int station_id)
        {
            //var station = await _basApi.GetStations(station_id);
            var result = await _whsApi.GetStationWorkingHour(station_id);
            //将資料Json化并传到前台视图
            if (result == null)
            {
                return Json(new { data = "" });
            }
            else if (result.Count == 0)
            {
                return Json(new { data = "" });
            }
            else
            {
                return Json(new { data = result[0].Side });
            }
        }

        #region WHS020報工站別維護相關

        private async Task GetClassInfoList(string unitNo)
        {
            var result = await _basApi.GetClassInfoByUnit(unitNo);

            var ClassItems = new List<SelectListItem>();
            for (int i = 0; i < result.Count; i++)
            {
                ClassItems.Add(new SelectListItem(result[i].ClassDesc, result[i].ClassID.ToString()));
            }
            ViewBag.ClassInfoList = ClassItems;
        }

        private void GetSideTypeList()
        {
            var SideTypeList = new List<SelectListItem>();

            SideTypeList.Add(new SelectListItem("A面", "A面"));
            SideTypeList.Add(new SelectListItem("B面", "B面"));

            ViewBag.SideTypeList = SideTypeList;
        }

        private async Task GetStationNameList()
        {
            var result = await _basApi.GetStationses();

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

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

        //新增頁面
        public async Task<IActionResult> WHS020C()
        {
            GetSideTypeList();
            await GetFactoryUnitsList3();
            return View();
        }

        //修改页面
        [HttpGet]
        public async Task<IActionResult> WHS020UAsync(int id)
        {
            GetSideTypeList();
            await GetFactoryUnitsList3();

            var result = await _whsApi.GetStationWorkingHour(id);

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

        public async Task<IActionResult> WHS020DAsync(int id)
        {
            var result = await _whsApi.DeleteStationWorkingHour(id);

            return Json(new Result() { success = true, msg = "" });
        }

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

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


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

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

                result = await _whsApi.PutStationWorkingHour(model.StationWHID, JsonConvert.SerializeObject(model));

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

        [ResponseCache(Duration = 0)]
        [HttpGet]
        public async Task<IActionResult> GetStationWorkingHoursAsync(int page = 0, int limit = 10)
        {
            var result = await _whsApi.GetStationWorkingHours(page,limit);

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

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

        #endregion

        public async Task<IActionResult> WHS021()
        {
            var user_id = Request.Cookies["UserID"];

            var user_info = await _sysApi.GetUserInfo(int.Parse(user_id));

            //製程單位
            await GetFactoryUnitsByUser(user_info[0].UnitNo);

            //線別
            //await GetLineList2();
            await GetLineListByUnit(user_info[0].UnitNo);

            //站別
            await GetStation4WHS019();

            return View();
        }
    }
}