Esempio n. 1
0
        public ActionResult startHand(ViewModel_StHanEmp data)
        {
            //宣告變數接收傳回值
            string employee_workNumber = Request["employee_WorkNumber"];
            string employee_name       = Request["employee_Name"];
            string factory_Id          = Request["factoryId"];
            int    startId             = data.StartId;
            //用action決定動作 0表示查詢顯示資料
            int action = Convert.ToInt32(Request["action"]);

            try
            {
                //action =1時,新增新資料行
                if (action == 1)
                {
                    //找出年度
                    var query1 = from o in db.StartCheck
                                 where o.Start_id == startId
                                 select o.start_year;
                    int year = query1.FirstOrDefault();
                    //產生流水號
                    var query8 = from o in db.StartHand
                                 where o.startHand_checkId == startId
                                 orderby o.startHand_serialNumber descending
                                 select o.startHand_serialNumber;
                    int    serialNumber       = query8.FirstOrDefault() + 1;
                    string stringSerialNumber = serialNumber.ToString();
                    //找出廠別代碼
                    var query9 = from o in db.Employee
                                 where o.employee_workNumber == employee_workNumber
                                 select o.employee_factoryId;
                    string factoryId = query9.FirstOrDefault();
                    //找出更新者
                    string updateUserWorkNumber = Session["employee_workNumber"].ToString();
                    var    query2 = from o in db.Employee
                                    where o.employee_workNumber == updateUserWorkNumber
                                    select o.employee_name;
                    string updateUserName = query2.FirstOrDefault();

                    StartHand startHand = new StartHand()
                    {
                        startHand_checkId      = startId,
                        startHand_workNumber   = employee_workNumber,
                        startHand_type         = "手動收集",
                        startHand_No           = "RG" + year.ToString() + stringSerialNumber.PadLeft(5, '0') + factoryId.PadLeft(4, '0'),
                        startHand_serialNumber = serialNumber,
                        standHand_updateUser   = updateUserName,
                        startHand_updateTime   = DateTime.Now
                    };
                    //StartHand加入新資料行
                    db.StartHand.Add(startHand);
                    //寫回資料庫
                    db.SaveChanges();
                }
                //action=2,刪除資料表
                if (action == 2)
                {
                    //查詢要刪除的資料行
                    var q2 = (from o in db.StartHand
                              where o.startHand_checkId == startId && o.startHand_workNumber == employee_workNumber
                              select o).FirstOrDefault();
                    //把該筆資料標記為刪除
                    db.StartHand.Remove(q2);
                    //存回資料庫,並刪除該筆
                    db.SaveChanges();
                }
                //try有錯時,拋出錯誤
            }
            catch (Exception ex) { return(Content(ex.ToString())); }
            //假如employee_workNumber為空
            if (string.IsNullOrEmpty(employee_workNumber))
            {
                //把employee_workNumber值設為空字串
                employee_workNumber = "";
            }
            //假如employee_name為空
            if (string.IsNullOrEmpty(employee_name))
            {
                //把employee_name值設為空字串
                employee_name = "";
            }
            //假如factory_Id為空
            if (string.IsNullOrEmpty(factory_Id))
            {
                //把factory_Id值設為空字串
                factory_Id = "";
            }
            //模糊查詢員工編號、員工姓名、廠別代號
            var query = from o in db.Employee
                        where o.employee_workId == 3 &&
                        o.employee_workNumber.Contains(employee_workNumber) &&
                        o.employee_name.Contains(employee_name) &&
                        o.employee_factoryId.Contains(factory_Id)
                        select o;

            //把查詢到的員工資料丟入ViewModel_StHanEmp裡
            data.Employee = query.ToList();
            data.StartId  = data.StartId;
            return(View(data));
        }
Esempio n. 2
0
        public ActionResult checkCollect(int StartID, int startYear, int saveSignal)   //收集作業
        {
            Session["checkCollectStartID"]   = StartID;
            Session["checkCollectstartYear"] = startYear;
            healthSystemCheckCollect data = new healthSystemCheckCollect();

            data.StartID = StartID;//把StartID存到ViewModel給手動收集的新增人員使用

            //列出目前的廠別
            var query = from o in db.StartPlace
                        where o.startplace_startId == StartID
                        select o;

            data.startPlace = query.ToList();

            //列出待驗的人員
            var query1 = from o in db.StartPlace  //先查出這個健檢計畫的受檢廠別有哪些
                         where o.startplace_startId == StartID
                         select o.startPlace_factoryId;
            List <string> factoryID = query1.ToList();               //把廠別存成List

            List <string> allWorkNumber       = new List <string>(); //存放此健檢計畫受檢單位的一般員工
            List <int>    allWorkNumberAge    = new List <int>();    //存放此健檢計畫受檢單位的一般員工的年齡
            List <string> startHandWorkNumber = new List <string>(); //存放挑選過後該去健檢的員工(存入startHand時使用)
            List <string> startHandFactoryID  = new List <string>(); //存放挑選過後該去健檢的員工的廠別代號(存入startHand時使用)

            List <Employee> employeeList = new List <Employee>();    //創造一個List類別為Employee,物件名稱為employeeList

            foreach (var ID in factoryID)                            //把查到的廠別依序取出來查詢所屬此廠別的員工
            {
                var query2 = from o in db.Employee
                             where o.employee_factoryId == ID && o.employee_workId == 3 //o.employee_workId == 3:找出身分為一般員工的人員
                             select o.employee_workNumber;
                allWorkNumber.AddRange(query2.ToList());                                //存入allWorkNumber
            }

            foreach (var number in allWorkNumber) //查詢allWorkNumber裡面員工的年齡
            {
                var query4 = from o in db.Employee
                             where o.employee_workNumber == number
                             select o.employee_age;
                allWorkNumberAge.AddRange(query4.ToList());
            }
            //allWorkNumber和allWorkNumberAge兩個List存放的資料
            // List<string> allWorkNumber  |  List<int> allWorkNumberAge
            // 員工工號A                   |  員工編號A的年齡            編號第0筆
            // 員工工號B                   |  員工編號B的年齡            編號第1筆
            // 員工工號C                   |  員工編號C的年齡            編號第2筆
            // 員工工號D                   |  員工編號D的年齡            編號第3筆
            // 員工工號E                   |  員工編號E的年齡            編號第4筆

            //用for迴圈去繞出編號第0筆的員工工號與年齡,即可對應
            for (int i = 0; i <= allWorkNumber.Count() - 1; i++)
            {
                //檢查年齡確定級距
                int level = 0;
                if (allWorkNumberAge[i] < 40)
                {
                    level = 5; //40歲以下的級距為每5年一次
                }
                if (40 <= allWorkNumberAge[i] && allWorkNumberAge[i] < 65)
                {
                    level = 3; //40歲以上未滿65歲的級距為每3年一次
                }
                if (65 <= allWorkNumberAge[i])
                {
                    level = 1; //65歲以上的級距為每5年一次
                }
                //查詢ReportCheckItem查出 編號第i筆 最近一次健檢的年度,存到lastcheckYear
                string stringAllWorkNumber = allWorkNumber[i];
                var    query5 = from o in db.ReportCheckItem
                                where o.ReportCheckItem_employee_workNumber == stringAllWorkNumber
                                orderby o.ReportCheckItem_checkYear descending
                                select o.ReportCheckItem_checkYear;

                int lastcheckYear = query5.First(); //存入

                //最近健檢的年度(newcheckYear)加上他的級距(level)即為他應該健檢的年度
                //如果跟這次啟動作業的年度一樣的話表示他就是今年要去健檢
                if (lastcheckYear + level == startYear)
                {
                    //查出這人在Employee的資料存入employeeList
                    var query6 = from o in db.Employee
                                 where o.employee_workNumber == stringAllWorkNumber
                                 select o;
                    employeeList.AddRange(query6.ToList());
                    //查出這人在Employee的員工編號
                    var query7 = from o in db.Employee
                                 where o.employee_workNumber == stringAllWorkNumber
                                 select o.employee_workNumber;
                    startHandWorkNumber.AddRange(query7.ToList());
                    //查出這人在Employee的廠別代號
                    var query8 = from o in db.Employee
                                 where o.employee_workNumber == stringAllWorkNumber
                                 select o.employee_factoryId;
                    startHandFactoryID.AddRange(query8.ToList());
                }
            }//for繞完後就已經篩選出應該要去健檢的人


            data.employee = employeeList; //存入ViewModel的employee做顯示


            //儲存被按下後將系統收集的人員存入
            if (saveSignal == 0)
            {
                foreach (var workNumber in startHandWorkNumber)
                {
                    //產生流水號
                    var query8 = from o in db.StartHand
                                 where o.startHand_checkId == StartID
                                 orderby o.startHand_serialNumber descending
                                 select o.startHand_serialNumber;
                    int    serialNumber       = query8.FirstOrDefault() + 1;
                    string stringSerialNumber = serialNumber.ToString();
                    //找出廠別代碼
                    var query9 = from o in db.Employee
                                 where o.employee_workNumber == workNumber
                                 select o.employee_factoryId;
                    string factoryId = query9.FirstOrDefault();
                    //將系統收集的資料存入startHand裡面
                    StartHand newStartHand = new StartHand()
                    {
                        startHand_checkId      = StartID,
                        startHand_workNumber   = workNumber,
                        startHand_type         = "系統收集",
                        startHand_No           = "RG" + startYear.ToString() + stringSerialNumber.PadLeft(5, '0') + factoryId.PadLeft(4, '0'),
                        startHand_serialNumber = serialNumber,
                        startHand_updateTime   = DateTime.Now
                    };
                    db.StartHand.Add(newStartHand);
                    db.SaveChanges();
                }
            }
            //列出startHand人員(以儲存人員)
            var query3 = from o in db.StartHand
                         where o.startHand_checkId == StartID
                         select o;

            data.startHand = query3.ToList();

            return(View(data));
        }