55 lines
1.8 KiB
Python
55 lines
1.8 KiB
Python
from threading import Thread
|
|
|
|
from ...utils import http_post
|
|
from .Controller import Controller
|
|
from .SyncRequestController import SyncRequestController
|
|
import ceo.term_utils as term_utils
|
|
from ceo.tui.views import RenewUserConfirmationView
|
|
|
|
|
|
class RenewUserController(SyncRequestController):
|
|
def __init__(self, model, app):
|
|
super().__init__(model, app)
|
|
|
|
def on_membership_type_changed(self, radio_button, new_state, selected_type):
|
|
if new_state:
|
|
self.model.membership_type = selected_type
|
|
|
|
def on_next_button_pressed(self, button):
|
|
try:
|
|
username = self.get_username_from_view()
|
|
num_terms = self.get_num_terms_from_view()
|
|
except Controller.InvalidInput:
|
|
return
|
|
self.model.username = username
|
|
self.model.num_terms = num_terms
|
|
self.view.flash_text.set_text('Looking up user...')
|
|
Thread(target=self._get_next_terms).start()
|
|
|
|
def _get_next_terms(self):
|
|
try:
|
|
self.model.new_terms = term_utils.get_terms_for_renewal_for_user(
|
|
self.model.username,
|
|
self.model.num_terms,
|
|
self.model.membership_type == 'club_rep',
|
|
self
|
|
)
|
|
except Controller.RequestFailed:
|
|
return
|
|
|
|
def target():
|
|
self.view.flash_text.set_text('')
|
|
view = RenewUserConfirmationView(self.model, self, self.app)
|
|
self.switch_to_view(view)
|
|
|
|
self.app.run_in_main_loop(target)
|
|
|
|
def get_resp(self):
|
|
uid = self.model.username
|
|
body = {'uid': uid}
|
|
if self.model.membership_type == 'club_rep':
|
|
body['non_member_terms'] = self.model.new_terms
|
|
else:
|
|
body['terms'] = self.model.new_terms
|
|
return http_post(f'/api/members/{uid}/renew', json=body)
|