68 lines
1.7 KiB
Python
68 lines
1.7 KiB
Python
from asciimatics.widgets import Layout, Text, Button
|
|
from zope import component
|
|
|
|
from ...utils import http_get
|
|
from ..CeoFrame import CeoFrame
|
|
from ceo_common.interfaces import IConfig
|
|
|
|
|
|
position_names = {
|
|
'president': "President",
|
|
'vice-president': "Vice President",
|
|
'treasurer': "Treasurer",
|
|
'secretary': "Secretary",
|
|
'sysadmin': "Sysadmin",
|
|
'cro': "Chief Returning Officer",
|
|
'librarian': "Librarian",
|
|
'imapd': "IMAPD",
|
|
'webmaster': "Web Master",
|
|
'offsck': "Office Manager",
|
|
}
|
|
|
|
|
|
class GetPositionsView(CeoFrame):
|
|
def __init__(self, screen, width, height, model, readonly=True):
|
|
super().__init__(
|
|
screen, height, width, model,
|
|
'GetPositions',
|
|
on_load = self._on_load)
|
|
|
|
layout = Layout([100], fill_frame=True)
|
|
self.add_layout(layout)
|
|
|
|
cfg = component.getUtility(IConfig)
|
|
avail = cfg.get('positions_available')
|
|
required = cfg.get('positions_required')
|
|
|
|
self._positions = []
|
|
for pos in avail:
|
|
widget = Text(
|
|
f"{'*' if pos in required else ' '}{position_names.get(pos, pos)}:",
|
|
pos,
|
|
readonly=readonly,
|
|
)
|
|
self._positions.append(widget)
|
|
layout.add_widget(widget)
|
|
|
|
self.add_flash_message_layout()
|
|
self._add_buttons()
|
|
self.fix()
|
|
|
|
|
|
def _add_buttons(self):
|
|
self.add_buttons(
|
|
next_btn_text="Change",
|
|
next_scene='SetPositions',
|
|
back_btn=True,
|
|
)
|
|
|
|
|
|
def _on_load(self):
|
|
res = http_get('/api/positions')
|
|
if res.status_code != 200:
|
|
return
|
|
|
|
positions = res.json()
|
|
for pos in self._positions:
|
|
pos.value = positions.get(pos.name)
|