50 lines
1.7 KiB
Python
50 lines
1.7 KiB
Python
from asciimatics.widgets import Layout, Label, Text
|
|
from zope import component
|
|
|
|
from ...utils import defer, http_post
|
|
from ..CeoFrame import CeoFrame
|
|
from .GetPositionsView import position_names
|
|
from ceo_common.interfaces import IConfig
|
|
from ceod.transactions.members.UpdateMemberPositionsTransaction import UpdateMemberPositionsTransaction
|
|
|
|
|
|
class SetPositionsView(CeoFrame):
|
|
def __init__(self, screen, width, height, model):
|
|
super().__init__(
|
|
screen, height, width, model, 'SetPositions',
|
|
save_data=True)
|
|
cfg = component.getUtility(IConfig)
|
|
avail = cfg.get('positions_available')
|
|
required = cfg.get('positions_required')
|
|
|
|
layout = Layout([100], fill_frame=True)
|
|
self.add_layout(layout)
|
|
for pos in avail:
|
|
suffix = ' (*)' if pos in required else ''
|
|
widget = Text(position_names[pos] + suffix, pos)
|
|
layout.add_widget(widget)
|
|
|
|
layout = Layout([100])
|
|
self.add_layout(layout)
|
|
layout.add_widget(Label('(*) Required'))
|
|
|
|
self.add_flash_message_layout()
|
|
self.add_buttons(
|
|
back_btn=True,
|
|
next_scene='Confirm', on_next=self._next)
|
|
self.fix()
|
|
|
|
def _next(self):
|
|
self.save()
|
|
body = {pos: username for pos, username in self.data.items() if username}
|
|
|
|
self._model.deferred_req = defer(http_post, '/api/positions', json=body)
|
|
self._model.operations = UpdateMemberPositionsTransaction.operations
|
|
self._model.confirm_lines = [
|
|
"The positions will be updated as follows:",
|
|
'',
|
|
*self.data.items(),
|
|
'',
|
|
'Are you sure you want to continue?',
|
|
]
|