public bool deleteSignature(Int64 codeUser, int userRole, int hrID)
        {
            try
            {
                CooperationRequestDAO dao = new DAO.University.CooperationRequest.CooperationRequestDAO();
                bool signatureExist       = false;

                DataTable dtSignature = getSignature(hrID, userRole);
                if (dtSignature.Rows.Count != 1)
                {
                    return(false);
                }
                signatureExist = dtSignature.Rows[0]["signature"] != DBNull.Value;

                if (signatureExist)
                {
                    return(dao.deleteSignature(codeUser, userRole));
                }
            }
            catch (Exception ex)
            {
                return(false);
            }
            return(false);
        }
        public DataTable getAllAgreement_Status()
        {
            DataTable             dt  = new DataTable();
            CooperationRequestDAO dao = new DAO.University.CooperationRequest.CooperationRequestDAO();

            dt = dao.getAllAgreementsStatus();
            return(dt);
        }
        public DataTable getSignature_Status()
        {
            DataTable             dt  = new DataTable();
            CooperationRequestDAO dao = new DAO.University.CooperationRequest.CooperationRequestDAO();

            dt = dao.getSignaturesStatus();
            return(dt);
        }
        /// <summary>
        ///
        /// </summary>
        /// <param name="codeUser">کد کاربر یا کد استاد در سیدا</param>
        /// <param name="userRole">برای استاد 1 و برای کاربر کد نقش</param>
        /// <param name="signaturePath"></param>
        /// <param name="hrID">برای کاربر برابر 0</param>
        /// <returns></returns>
        public bool UpdateOrInsertSignature(int codeUser, int userRole, string signaturePath, int hrID)
        {
            try
            {
                CooperationRequestDAO dao = new DAO.University.CooperationRequest.CooperationRequestDAO();
                bool signatureExist       = false;

                DataTable dtSignature = getSignature(hrID, userRole);
                if (dtSignature.Rows.Count != 1)
                {
                    return(false);
                }
                signatureExist = dtSignature.Rows[0]["signature"] != DBNull.Value;

                switch (signatureExist)
                {
                case true:    //Update
                    #region
                    switch (userRole)
                    {
                    case 1:
                        return(dao.updateTeacherSignature(hrID, signaturePath));

                    case (int)DTO.RoleEnums.سرپرست_واحد:                  //سرپرست دانشگاه
                    case (int)DTO.RoleEnums.مدیر_امور_کارگزینی_هیئت_علمی: //پاراف سمت راست
                    case (int)DTO.RoleEnums.مسئول_حق_التدریس:             //پاراف سمت چپ
                    case (int)DTO.RoleEnums.مسئول_کارگزینی_هیات_علمی:     //پاراف سمت چپ
                        return(dao.updateUserSignature(codeUser, signaturePath, userRole));
                    }
                    #endregion
                    break;

                case false:    //Insert
                    #region
                    switch (userRole)
                    {
                    case 1:
                        return(dao.InsertTeacherSignature(codeUser, signaturePath, hrID));

                    case (int)DTO.RoleEnums.سرپرست_واحد:                  //سرپرست دانشگاه
                    case (int)DTO.RoleEnums.مدیر_امور_کارگزینی_هیئت_علمی: //پاراف سمت راست
                    case (int)DTO.RoleEnums.مسئول_حق_التدریس:             //پاراف سمت چپ
                    case (int)DTO.RoleEnums.مسئول_کارگزینی_هیات_علمی:     //پاراف سمت چپ
                        return(dao.InsertUserSignature(codeUser, signaturePath, userRole));
                    }
                    #endregion
                    break;
                }
            }
            catch (Exception ex)
            {
                return(false);
            }
            return(false);
        }
        public bool rejectTeacherContract(int codeOstad, string descriptionOfReject, string term = "this")
        {
            CooperationRequestDAO dao        = new DAO.University.CooperationRequest.CooperationRequestDAO();
            DataTable             dtContract = getContractOfTeacher(codeOstad, term);

            if (dtContract.Rows.Count == 1)
            {
                if (dtContract.Rows[0]["contractFile"] != DBNull.Value)
                {
                    return(dao.updateTeacherContractStatus(term, codeOstad, 4, dtContract.Rows[0]["contractFile"].ToString(), descriptionOfReject));
                }
            }
            return(false);
        }
        public bool insertTeacherContract(int codeOstad, string contractFile, int hrID, string term, out int contractId)
        {
            CooperationRequestDAO dao           = new DAO.University.CooperationRequest.CooperationRequestDAO();
            DataTable             dtGetContract = getContractByStatus(4, term);

            DataRow[] dr = dtGetContract.Select("hrID=" + hrID);
            if (dr.Length == 0)
            {
                return(dao.insertTeacherContract(codeOstad, contractFile, hrID, term, out contractId));
            }
            else
            {
                return(UpdateTeacherContractAfterReject(hrID, contractFile, term, out contractId));
            }
        }
        public DataTable getAllContracts_Status(string term = "this")
        {
            DataTable             dt  = new DataTable();
            CooperationRequestDAO dao = new DAO.University.CooperationRequest.CooperationRequestDAO();

            if (term.Length > 4 || term == "this")
            {
                dt = dao.getAllContractStatus(term);
            }
            else
            {
                dt = dao.getAllContractStatus_HOD(term);
            }
            return(dt);
        }
        public bool rejectTeacherAgreement(Int64 codeOstad, string descriptionOfReject, out int agreementID)
        {
            agreementID = 0;
            CooperationRequestDAO dao         = new DAO.University.CooperationRequest.CooperationRequestDAO();
            DataTable             dtAgreement = getAgreementOfTeacher(codeOstad);

            if (dtAgreement.Rows.Count == 1)
            {
                if (dtAgreement.Rows[0]["agreementFile"] != DBNull.Value)
                {
                    return(dao.updateTeacherAgreementStatus(codeOstad, 3, dtAgreement.Rows[0]["AgreementFile"].ToString(), out agreementID, descriptionOfReject));
                }
            }
            return(false);
        }
        public bool insertTeacherAgreement(int codeOstad, string agreementFile, int hrID, out int agreementID)
        {
            CooperationRequestDAO dao            = new DAO.University.CooperationRequest.CooperationRequestDAO();
            DataTable             dtGetAgreement = getAgreementByStatus(3);

            DataRow[] dr = dtGetAgreement.Select("hrID=" + hrID);
            if (dr.Length == 0)
            {
                return(dao.insertTeacherAgreement(codeOstad, agreementFile, hrID, out agreementID));
            }
            else
            {
                return(UpdateTeacherAgreementAfterReject(hrID, agreementFile, out agreementID));
            }
        }
        public bool ChangeContractStatusToLastStep(int codeOstad, int userRole, string term = "this")
        {
            CooperationRequestDAO dao        = new DAO.University.CooperationRequest.CooperationRequestDAO();
            DataTable             dtContract = getContractOfTeacher(codeOstad, term);

            if (dtContract.Rows.Count == 1)
            {
                if (dtContract.Rows[0]["contractFile"] != DBNull.Value)
                {
                    switch (userRole)
                    {
                    case (int)DTO.RoleEnums.مدیر_امور_کارگزینی_هیئت_علمی:
                        return(dao.updateTeacherContractStatus(term, codeOstad, 0, dtContract.Rows[0]["contractFile"].ToString()));
                    }
                }
            }
            return(true);
        }
        /// <summary>
        ///
        /// </summary>
        /// <param name="hrID">استاد: کد اچ آر  -   کاربر: هر عددی</param>
        /// <param name="userLevel">استاد:1  -  سرپرست دانشگاه:77  - مسئول کارگزینی:11 -  کارشناس کارگزینی:12</param>
        /// <returns></returns>
        public DataTable getSignature(int hrID, int userRole)
        {
            CooperationRequestDAO dao = new DAO.University.CooperationRequest.CooperationRequestDAO();
            DataTable             dt  = new DataTable();

            switch (userRole)
            {
            case 1:
                dt = dao.getTeacherSignature(hrID);
                //get Teacher signature
                break;

            case (int)DTO.RoleEnums.سرپرست_واحد:                  //سرپرست دانشگاه
            case (int)DTO.RoleEnums.مدیر_امور_کارگزینی_هیئت_علمی: //پاراف سمت راست
            case (int)DTO.RoleEnums.مسئول_کارگزینی_هیات_علمی:     //پاراف سمت چپ
            case (int)DTO.RoleEnums.مسئول_حق_التدریس:             //پاراف سمت چپ
                dt = dao.getUserSignature(userRole);
                //get user signature
                break;
            }
            return(dt);
        }
        public DataTable getTerm_Contract(string term = "this")
        {
            CooperationRequestDAO dao = new DAO.University.CooperationRequest.CooperationRequestDAO();
            DataTable             dt  = new DataTable();

            dt.Columns.Add("term");
            dt.Columns.Add("nimSal");
            dt.Columns.Add("Sal");
            DataRow dr = dt.NewRow();

            dr[0] = dao.getTerm_Contract(term);

            if (dr[0].ToString().Contains("-"))
            {
                string[] termArr = dr[0].ToString().Split('-');
                if (termArr.Length == 3)
                {
                    dr[2] = string.Format("{0}-{1}", termArr[0], termArr[1]);
                    dr[1] = termArr[2] == "1" ? "اول" : (termArr[2] == "2" ? "دوم" : (termArr[2] == "3" ? "تابستان" : ""));
                }
            }
            dt.Rows.Add(dr);
            return(dt);
        }
        public DataTable getBlacklistTeachers()
        {
            CooperationRequestDAO dao = new DAO.University.CooperationRequest.CooperationRequestDAO();

            return(dao.getBlacklistTeachers());
        }
        public int updateBlacklistTeacher(string idd_meli, bool inblacklist = true)
        {
            CooperationRequestDAO dao = new DAO.University.CooperationRequest.CooperationRequestDAO();

            return(dao.updateBlacklistTeacher(idd_meli, inblacklist));
        }
        public DataTable getAgreementOfTeacher(Int64 codeOstad)
        {
            CooperationRequestDAO dao = new DAO.University.CooperationRequest.CooperationRequestDAO();

            return(dao.getTeacherAgreement(codeOstad));
        }
        public DataTable getContractOfTeacher(int codeOstad_Hr, string term = "this")
        {
            CooperationRequestDAO dao = new DAO.University.CooperationRequest.CooperationRequestDAO();

            return(dao.getTeacherContract(codeOstad_Hr, term));
        }
        public DataTable getContractByStatus(int status, string term = "this")
        {
            CooperationRequestDAO dao = new DAO.University.CooperationRequest.CooperationRequestDAO();

            return(dao.getContractByStatus(term, status));
        }
        public DataTable getAgreementByStatus(int status)
        {
            CooperationRequestDAO dao = new DAO.University.CooperationRequest.CooperationRequestDAO();

            return(dao.getAgreementByStatus(status));
        }
        public bool updateTeacherAgreementStatus(int codeOstad, int userCode, string contractFile, out int AgreementID)
        {
            CooperationRequestDAO dao = new DAO.University.CooperationRequest.CooperationRequestDAO();

            return(dao.updateTeacherAgreementStatus(codeOstad, getNewAgreementStatus(userCode), contractFile, out AgreementID));
        }
        public bool updateTeacherContractStatus(int codeOstad, int userCode, string contractFile, string term = "this")
        {
            CooperationRequestDAO dao = new DAO.University.CooperationRequest.CooperationRequestDAO();

            return(dao.updateTeacherContractStatus(term, codeOstad, getNewContractStatus(userCode), contractFile));
        }
        private bool UpdateTeacherAgreementAfterReject(int hrID, string contractFile, out int contractId)
        {
            CooperationRequestDAO dao = new DAO.University.CooperationRequest.CooperationRequestDAO();

            return(dao.UpdateTeacherAgreementAfterReject(contractFile, hrID, out contractId));
        }