示例#1
0
    def add_update(self):
        method = ['POST', 'PATCH'][self.ids['btn_positive'].text == 'Update']
        data = dict()
        data['mat_no'] = self.ids.mat_no.text
        data['surname'] = self.ids.surname.text.upper()
        data['othernames'] = ' '.join([self.ids.fname.text.capitalize(), self.ids.mname.text.capitalize()])
        try:
            data['mode_of_entry'] = MODES_OF_ENTRY.index(self.ids.mode_of_entry.text) + 1
        except ValueError:
            self.show_input_error()
            return
        data['session_admitted'] = int(self.ids.session_admit.text)
        data['level'] = int(self.ids.level.text)
        data['transfer'] = int(self.ids.transfer.text == 'Yes')
        data['sex'] = ['M', 'F'][self.ids.sex.text != 'Male']
        data['date_of_birth'] = self.ids.dob.text
        data['state_of_origin'] = self.ids.state_of_origin.text
        data['lga'] = self.ids.lga_of_origin.text
        data['phone_no'] = self.ids.phone_no.text
        data['email_address'] = self.ids.email.text
        data['sponsor_phone_no'] = self.ids.s_phone_no.text
        data['sponsor_email_address'] = self.ids.s_email.text
        data['grad_status'] = int(self.ids.grad.text == 'YES')

        url = urlTo('personal_info')
        params = {'superuser': True} if root.sm.is_admin else None
        AsyncRequest(url, method=method, data=data, params=params, on_success=self.record_added, on_failure=self.show_add_error)
示例#2
0
 def _remove(self):
     params = {
         'code': self.course_code,
         'action': self.action
     }
     url = urlTo('course_details')
     AsyncRequest(url, method='DELETE', params=params, on_success=self.success)
示例#3
0
 def get(self):
     url = urlTo('level_gpa_cards')
     params = {'level': int(self.ids['level'].text)}
     AsyncRequest(url,
                  params=params,
                  on_success=self.show_gpa_cards,
                  on_failure=self.show_error)
示例#4
0
 def create(self):
     if not self.ids['cbox'].active and self.ids['pwd'].text != self.ids[
             'rpwd'].text:
         self.highlight_textinput(self.ids['pwd'])
         self.highlight_textinput(self.ids['rpwd'])
         return
     if ':' in self.ids['username'].text:
         ErrorPopup(message='Username contains ":"')
         self.highlight_textinput(self.ids['username'])
         return
     elif ':' in self.ids['pwd'].text:
         ErrorPopup(message='Password contains ":"')
         self.highlight_textinput(self.ids['pwd'])
         return
     if self.ids['cbox'].active:
         self.ids['pwd'].text = ''.join(
             choices(list(alphanumeric_chars), k=10))
     data = {
         'permissions':
         titles_perm[self.ids['title'].text] % self.ids['username'].text
     }
     data[
         'fullname'] = self.ids['fname'].text + ' ' + self.ids['lname'].text
     data['email'] = self.ids['email'].text
     data['username'] = self.ids['username'].text
     data['title'] = self.ids['title'].text
     data['password'] = tokenize(self.ids['pwd'].text)
     url = urlTo('accounts')
     AsyncRequest(url, method='POST', data=data, on_success=self.success)
示例#5
0
 def reset(self):
     if not self.ids['cbox'].active and self.ids['pwd'].text != self.ids[
             'rpwd'].text:
         self.highlight_textinput(self.ids['pwd'])
         self.highlight_textinput(self.ids['rpwd'])
         return
     if ':' in self.ids['pwd'].text:
         ErrorPopup(message='Password contains ":"')
         self.highlight_textinput(self.ids['pwd'])
         return
     if self.ids['cbox'].active:
         self.ids['pwd'].text = ''.join(
             choices(list(alphanumeric_chars), k=10))
     username = self.ids['username'].text
     self.selected_acct = self.get_user(username)
     if not self.selected_acct:
         ErrorPopup(username + ' not found')
         return
     self.selected_acct['password'] = tokenize(self.ids['pwd'].text)
     url = urlTo('accounts')
     params = {'superuser': True} if root.sm.is_admin else None
     AsyncRequest(url,
                  method='PATCH',
                  data=self.selected_acct,
                  params=params,
                  on_success=self.success)
示例#6
0
 def remove(self):
     params = {'username': self.ids['username'].text}
     url = urlTo('accounts')
     AsyncRequest(url,
                  method='DELETE',
                  params=params,
                  on_success=self.success)
 def search(self):
     acad_session = int(self.ids.reg_session.text)
     url = urlTo('course_reg')
     param = {'mat_no': self.ids.mat_no.text, 'acad_session': acad_session}
     AsyncRequest(url,
                  on_success=self.populate_fields_for_old_reg,
                  on_failure=self.check_query_session,
                  params=param)
示例#8
0
 def delete_backup(self):
     url = urlTo('backups')
     params = {'backup_name': self.backup_name}
     AsyncRequest(url,
                  method='DELETE',
                  params=params,
                  on_success=self.delete_success,
                  on_failure=self.show_error)
示例#9
0
 def set_results_edit(self):
     switch = self.ids['result_switch']
     url = urlTo('results_edit')
     data = {'state': int(not switch.active)}
     AsyncRequest(url,
                  method='POST',
                  data=data,
                  on_success=self.set_res_switch_state)
示例#10
0
 def backup(self):
     url = urlTo('backups')
     data = {'tag': self.ids['tag'].text}
     AsyncRequest(url,
                  method='POST',
                  data=data,
                  on_success=self.success,
                  on_failure=self.show_error)
示例#11
0
 def download_backup(self):
     url = urlTo('backup_download')
     params = {'backup_name': self.backup_name}
     AsyncRequest(url,
                  method='GET',
                  params=params,
                  on_success=self._download_backup,
                  on_failure=self.show_error)
示例#12
0
 def get_course_details(self):
     if not self.ids['lvl_spinner'].text:
         return
     url = urlTo('course_details')
     course_level = int(self.ids['lvl_spinner'].text[:3])
     use_curr_session = self.ids['session_spinner'].text == 'Current session'
     params = {'level': course_level, 'use_curr_session': use_curr_session}
     AsyncRequest(url, method='GET', params=params, on_success=self.populate_dv)
示例#13
0
 def search(self, *args):
     url = urlTo('student_summary')
     mat_no = self.ids.mat_no.text
     surname = self.ids.surname_.text
     if mat_no:
         param = {'mat_no': mat_no}
         AsyncRequest(url, on_success=self.populate_personal_info, on_failure=self.show_error, params=param)
     else:
         self.show_error("Feature not implemented yet")
示例#14
0
 def query_users(self):
     url = urlTo('accounts')
     params = {}
     if root.sm.is_admin == 1:
         AsyncRequest(url,
                      params=params,
                      method='GET',
                      on_success=self.update_users)
     else:
         self.update_users(bypass=True)
示例#15
0
 def search(self):
     url = urlTo('results_stats_multiple')
     if self.validate_inputs():
         session = int(self.ids['session'].text)
         level = int(self.ids['level'].text)
         self.query_params = {'acad_session': session, 'level': level}
         AsyncRequest(url,
                      params=self.query_params,
                      on_success=self.populate_fields)
     else:
         ErrorPopup('Fields can\'t be empty')
示例#16
0
 def check_query_session(self, resp):
     acad_session = int(self.ids.reg_session.text)
     if acad_session == get_current_session():
         url = urlTo('course_reg_new')
         param = {'mat_no': self.ids.mat_no.text}
         AsyncRequest(url,
                      on_success=self.populate_fields,
                      on_failure=self.show_error,
                      params=param)
     else:
         self.show_error(resp)
示例#17
0
 def search(self, *args):
     url = urlTo('senate_version')
     try:
         acad_session = int(self.ids['acad_session'].text)
         level = int(self.ids['level'].text)
     except ValueError:
         ErrorPopup('Field cannot be empty')
         return
     params = {'acad_session': acad_session, 'level': level}
     AsyncRequest(url,
                  params=params,
                  on_success=self.generate_senate_version)
示例#18
0
 def restore(self):
     url = urlTo('backups')
     data = {
         'backup_name': self.backup_name,
         'include_accounts': self.ids['include_accounts'].text == 'Yes',
         'backup_current': self.ids['backup_current'].text == 'Yes',
     }
     AsyncRequest(url,
                  method='PATCH',
                  data=data,
                  on_success=self.success,
                  on_failure=self.show_error)
示例#19
0
 def search(self, *args):
     course_code = self.ids['code'].text
     if not course_code:
         ErrorPopup('Input can\'t be empty')
         return
     course_code = course_code[:3].upper() + course_code[3:]
     params = {'course_code': course_code}
     url = urlTo('course_details')
     AsyncRequest(url,
                  params=params,
                  on_success=self.populate_fields,
                  on_failure=self.show_error)
示例#20
0
 def search(self, *args):
     url = urlTo('broad_sheet')
     try:
         acad_session = int(self.ids['acad_session'].text)
         level = int(self.ids['level'].text)
         raw_score = self.ids['raw_score'].text == 'Yes'
         semester = self.ids['semester'].text == 'First Only'
     except ValueError:
         ErrorPopup('Field cannot be empty')
         return
     params = {'acad_session': acad_session, 'level': level, 'first_sem_only': semester, 'raw_score': raw_score}
     AsyncRequest(url, params=params, on_success=self.generate_broadsheet, on_failure=self.show_error)
示例#21
0
 def search(self):
     url = urlTo('results')
     session = get_current_session(
     ) if not self.ids['session'].text else int(self.ids['session'].text)
     params = {
         'mat_no': self.ids['mat_no'].text,
         'acad_session': session,
         'include_reg': True
     }
     AsyncRequest(url,
                  method='GET',
                  params=params,
                  on_success=self.get_grading_rules)
示例#22
0
 def search(self, *args):
     url = urlTo('result_update')
     mat_no = self.ids['mat_no'].text
     raw_score = self.ids['raw_score'].text == 'Yes'
     clearance = self.ids['clearance'].text == 'Yes'
     params = {
         'mat_no': mat_no,
         'raw_score': raw_score,
         'clearance': clearance
     }
     AsyncRequest(url,
                  params=params,
                  on_success=self.generate_result_update)
示例#23
0
def session_timer(url, params):
    global last_request_timestamp, logged_in
    curr_timestamp = datetime.now().timestamp()

    if last_request_timestamp and curr_timestamp - last_request_timestamp > ALLOWABLE_IDLE_TIME:
        if url not in [urlTo('logout'), urlTo('login')] and logged_in:  # if the request is logout or login, the let it pass
            # else logout silently
            try:
                requests.post(
                    url=urlTo('logout'),
                    headers={'Content-type': 'application/json',
                             'token': get_token()},
                    json={'token': get_token()}
                )
                logged_in = False
            except requests.exceptions.ConnectionError:
                ErrorPopup('Server down')
        elif url == urlTo('login'):
            logged_in = True
    # don't update last_request_timestamp if logs is called w/o filters (from main menu)
    log_filter_params = ['time', 'operation', 'reverse']
    if url != urlTo('logs') or any(map(lambda param: param in params, log_filter_params)):
        last_request_timestamp = curr_timestamp
示例#24
0
 def generate_course_form(self):
     url = urlTo('course_form')
     try:
         params = {
             'mat_no': self.ids['mat_no'].text,
             'session': int(self.ids['reg_session'].text),
             'to_print': True
         }
     except ValueError:
         ErrorPopup('Fields cannot be empty')
         return
     AsyncRequest(url,
                  params=params,
                  method='GET',
                  on_success=self.print_course_form)
示例#25
0
 def _delete_course_reg(self):
     if not self.data:
         ErrorPopup('Delete error')
         return
     params = {
         'mat_no': self.data['mat_no'],
         'acad_session': self.data['course_reg_session'],
         'superuser': True if root.sm.is_admin else None
     }
     url = urlTo('course_reg')
     AsyncRequest(url,
                  params=params,
                  method='DELETE',
                  on_failure=self.show_error,
                  on_success=self.clear_fields)
示例#26
0
    def update(self):
        data = dict()

        data['ViceChancellor'] = self.ids['vc'].text
        data['ChairmanSubCommitteeBCS'] = self.ids['chairman'].text
        data['Dean'] = self.ids['dean'].text
        data['FacultyExamOfficer'] = self.ids['exam_officer'].text
        data['HOD'] = self.ids['hod'].text
        data['NumPrizeWinners'] = int(self.ids['prize_winners'].text)

        url = urlTo('dynamic_props')
        AsyncRequest(url,
                     data=data,
                     method='PATCH',
                     on_success=self.submit_success)
示例#27
0
    def update(self):
        if not self.ids['password'].text:
            ErrorPopup('Password field can\'t be empty')
            return
        if ':' in self.ids['password'].text:
            ErrorPopup('Password contains ":"')
            return

        self.data['password'] = tokenize(self.ids['password'].text)
        self.data['email'] = self.ids['email'].text
        url = urlTo('accounts')
        AsyncRequest(url,
                     data=self.data,
                     method='PATCH',
                     on_success=self.update_success)
示例#28
0
    def get_grading_rules(self, resp):
        data = resp.json()
        flatten_dict = lambda dic: [[key] + list(val[:4]) for key, val in {
            **dic['first_sem'],
            **dic['second_sem']
        }.items()]
        data['regular_courses'] = flatten_dict(data['regular_courses'])
        data['carryovers'] = flatten_dict(data['carryovers'])
        self.data = data

        url = urlTo('grading_rules')
        params = {'acad_session': self.data['entry_session']}
        AsyncRequest(url,
                     params=params,
                     method='GET',
                     on_success=self.populate_fields)
示例#29
0
 def send_feedback(self):
     from main import prev_log, fd
     url = urlTo('feedback')
     data = {
         'username':
         self.username,
         'message':
         self.ids['message'].text,
         'error_log':
         'Previous App Session\n' + '=' * 20 + '\n' + prev_log +
         '\n\nCurrent App Session\n' + '=' * 19 + '\n' + fd.read()
     }
     AsyncRequest(url,
                  method='POST',
                  data=data,
                  on_success=self.show_message,
                  on_failure=self.show_message)
示例#30
0
    def add(self):
        try:
            data = {}
            for key in keys[:-3]:
                data[key] = self.ids[key].text
            data['credit'] = int(data['credit'])
            data['semester'] = [1, 2][data['semester'].strip().lower() == 'second']
            data['level'] = int(self.ids['level'].text)
            data['start_date'] = get_current_session() + 1
            data['end_date'] = 2999
            optional = self.ids['opt_yes'].active
            data['options'] = [0, data['semester']][optional]

            data['code'] = data['code'].upper()
            data['teaching_dept'] = data['teaching_dept'].upper()
            url = urlTo('course_details')
            AsyncRequest(url, method='POST', data=data, on_success=self.success)
        except:
            ErrorPopup('Fields cannot be empty')