/// <summary>
        /// Cập nhật một bản ghi được gửi lên từ phía client
        /// </summary>
        public JsonResult Update(EXAMHALL_OBJ obj)
        {
            ArrayList arrList     = UpdateExamHall(obj);
            var       ret         = arrList[1];
            var       pagecount   = arrList[2];
            var       currentpage = arrList[3];

            //some thing like that
            return(Json(new { ret, pagecount, currentpage }, JsonRequestBehavior.AllowGet));
        }
        /// <summary>
        /// khi update bản ghi: hàm này được gọi trong hàm update
        /// </summary>
        /// <param name="obj"></param>
        /// <returns></returns>
        public ArrayList UpdateExamHall(EXAMHALL_OBJ obj)
        {
            ArrayList    arrList = new ArrayList();
            EXAMHALL_BUS bus     = new EXAMHALL_BUS();
            int          ret     = 0;
            int          add     = 0;
            //kiểm tra tồn tại cho trường hợp sửa
            var objTemp = !string.IsNullOrEmpty(obj.CODE) ? bus.GetByID(new EXAMHALL_OBJ.BusinessObjectID(obj.CODE)) : new EXAMHALL_OBJ();

            if (ret < 0)
            {
                //đóng kết nối trước khi trả về
                bus.CloseConnection();
                //ban ghi sửa đã bị xóa
                return(arrList);
            }
            //hết kiểm tra tồn tại bản ghi
            objTemp.EDITTIME = DateTime.Now;   //Thời điểm sủa bản ghi
            objTemp.EDITUSER = _ses.loginCode; //Người sửa bản ghi
            objTemp.CODEVIEW = obj.CODEVIEW;
            objTemp.NAME     = obj.NAME;
            objTemp.NOTE     = obj.NOTE;
            objTemp.LOCK     = obj.LOCK;
            //Kiểm tra tình trạng sửa hay là thêm mới
            if (string.IsNullOrEmpty(obj.CODE))
            {
                //Thêm mới
                add = 1;
                //Sinh mã
                objTemp.CODE = bus.genNextCode(obj);
                //    objTemp.CODEVIEW = objTemp.CODE;
                objTemp.LOCKDATE = DateTime.Now;
            }
            objTemp.EXAMTIMECODE      = obj.EXAMTIMECODE;
            objTemp.BAGGROUP          = obj.BAGGROUP;
            objTemp.HALLNUMBER        = obj.HALLNUMBER;
            objTemp.MAXSTUDENT        = obj.MAXSTUDENT;
            objTemp.STUDENTAMOUNT     = obj.STUDENTAMOUNT;
            objTemp.EXAMSTUDENTAMOUNT = obj.EXAMSTUDENTAMOUNT;
            objTemp.PAPERAMOUNT       = obj.PAPERAMOUNT;
            objTemp.BEGINTIME         = obj.BEGINTIME;
            objTemp.ENDTIME           = obj.ENDTIME;
            objTemp.UNIVERSITYCODE    = _ses.gUNIVERSITYCODE;
            if (add == 1)
            {
                ret = bus.insert(objTemp);
            }
            else
            {
                //gán _ID để xác định bản ghi sẽ được cập nhật
                objTemp._ID.CODE = obj.CODE;
                ret = bus.update(objTemp);
                if (ret >= 0)
                {
                    // update lại realbegintime và realendtime cho các sinh viên trong phòng này
                    EXAMHALLSTUDENT_BUS stdBus = new EXAMHALLSTUDENT_BUS();
                    var examHallStd            = stdBus.getAllBy2("CODE", new fieldpara("UNIVERSITYCODE", _ses.gUNIVERSITYCODE, 0),
                                                                  new fieldpara("EXAMHALLCODE", objTemp.CODE, 0));
                    if (examHallStd != null)
                    {
                        foreach (var item in examHallStd)
                        {
                            item.REALBEGINTIME = objTemp.BEGINTIME;
                            item.REALENDTIME   = objTemp.ENDTIME;
                            item.FINALENDTIME  = objTemp.ENDTIME;

                            ret = new ExamHallStudentController().Update(item);
                        }
                    }
                    stdBus.CloseConnection();
                }
            }
            int pagecount   = 0;
            int currentpage = 0;

            if (ret >= 0)
            {
                List <fieldpara> lipa = new List <fieldpara> {
                    new fieldpara("UNIVERSITYCODE", _ses.gUNIVERSITYCODE, 0)
                };
                objTemp._ID.CODE = objTemp.CODE;
                ret = bus.checkPage(objTemp._ID, "CODE", AppConfig.item4page(), out pagecount, out currentpage, lipa);
            }
            bus.CloseConnection();
            arrList.Add(objTemp.CODE);
            arrList.Add(ret);
            arrList.Add(pagecount);
            arrList.Add(currentpage);
            return(arrList);
        }
 /// <summary>
 /// tạo phòng thi cho sinh viên
 /// </summary>
 /// <param name="examTimeCode">mã đợt thi</param>
 /// <returns></returns>
 public int CreateExamHallStudent(string examTimeCode)
 {
     var ret = 0;
     // delete all examhall by examtimecode
     ExamHallController examhallstudens = new ExamHallController();
     ret = examhallstudens.DeleteAll(examTimeCode);
     if (ret >= 0)
     {
         // get examtime
         EXAMTIME_BUS examTimeBus = new EXAMTIME_BUS();
         EXAMTIME_OBJ examtime = examTimeBus.GetByID(new EXAMTIME_OBJ.BusinessObjectID(examTimeCode));
         int studentAmountHall = examtime.STUDENTAMOUNTHALL;
         //get all student by examtime
         EXAMHALLSTUDENT_BUS bus = new EXAMHALLSTUDENT_BUS();
         List<fieldpara> lipa = new List<fieldpara>
     {
         new fieldpara("EXAMTIMECODE", examTimeCode, 0),
         new fieldpara("UNIVERSITYCODE", _ses.gUNIVERSITYCODE, 0)
     };
         //order by code
         var liStudent = bus.getAllBy2("CODE", lipa.ToArray()); // list ExamHallStudent
         EXAMHALLSTUDENT_OBJ examhallstudent = new EXAMHALLSTUDENT_OBJ();
         string examhallcode = "";
         int counthall = 0; // số phòng
         // gán mã phòng cho sinh viên
         for (int i = 0; i < liStudent.Count; i++)
         {
             // ví dụ: từ sinh viên 1 -> count - 1
             if (i % studentAmountHall != 0)
             {
                 examhallstudent.CODE = liStudent[i].CODE;
                 examhallstudent.EXAMHALLCODE = examhallcode;
                 ret = Update(examhallstudent);
                 if (ret < 0)
                 {
                     bus.CloseConnection();
                     examTimeBus.CloseConnection();
                     return ret;
                 }
             }
             else
             {
                 counthall++;
                 // các sinh viên đầu phòng
                 // create examhall
                 EXAMHALL_OBJ examhall = new EXAMHALL_OBJ
                 {
                     NAME = examtime.NAME + " - "+ counthall,
                     EXAMTIMECODE = examTimeCode,
                     UNIVERSITYCODE = _ses.gUNIVERSITYCODE
                 };
                 ArrayList result = new ExamHallController().UpdateExamHall(examhall);
                 examhallcode = (string)result[0]; // examhallcode
                                                   // update examhallcode
                 examhallstudent.CODE = liStudent[i].CODE;
                 examhallstudent.EXAMHALLCODE = examhallcode;
                 ret = Update(examhallstudent);
                 if (ret < 0)
                 {
                     bus.CloseConnection();
                     examTimeBus.CloseConnection();
                     return ret;
                 }
             }
         }
         bus.CloseConnection();
         examTimeBus.CloseConnection();
     }
    
     return ret;
 }