Source code for town6.views.parliamentarian

from __future__ import annotations

from onegov.core.elements import Link
from onegov.core.security import Public, Private
from onegov.parliament.collections import RISParliamentarianCollection
from onegov.parliament.collections import ParliamentarianCollection
from onegov.org.forms import ParliamentarianForm
from onegov.org.forms import ParliamentarianRoleForm
from onegov.parliament.models import RISParliamentarian
from onegov.parliament.models import RISParliamentarianRole
from onegov.pas.models import PASParliamentarian, PASParliamentarianRole
from onegov.town6 import _
from onegov.town6 import TownApp
from onegov.town6.layout import (
    RISParliamentarianCollectionLayout,
    RISParliamentarianLayout
)

from typing import TYPE_CHECKING
if TYPE_CHECKING:
    from webob.response import Response
    from onegov.core.types import RenderData
    from onegov.org.forms.parliamentarian import PASParliamentarianForm
    from onegov.pas.layouts import PASParliamentarianCollectionLayout
    from onegov.pas.layouts import PASParliamentarianLayout
    from onegov.town6.request import TownRequest


[docs] def view_parliamentarians( self: ParliamentarianCollection, request: TownRequest, layout: RISParliamentarianCollectionLayout | PASParliamentarianCollectionLayout ) -> RenderData | Response: filters = {} filters['active'] = [ Link( text=request.translate(title), active=self.active == value, url=request.link(self.for_filter(active=value)) ) for title, value in ( (_('Active'), True), (_('Inactive'), False) ) ] return { 'add_link': request.link(self, name='new'), 'filters': filters, 'layout': layout, 'parliamentarians': self.query().all(), 'title': layout.title, }
[docs] def add_parliamentarian( self: ParliamentarianCollection, request: TownRequest, form: ParliamentarianForm | PASParliamentarianForm, layout: RISParliamentarianCollectionLayout | PASParliamentarianCollectionLayout ) -> RenderData | Response: if form.submitted(request): parliamentarian = self.add(**form.get_useful_data()) request.success(_('Added a new parliamentarian')) return request.redirect(request.link(parliamentarian)) layout.breadcrumbs.append(Link(_('New'), '#')) return { 'layout': layout, 'title': _('New parliamentarian'), 'form': form, 'form_width': 'large' }
[docs] def view_parliamentarian( self: RISParliamentarian | PASParliamentarian, request: TownRequest, layout: RISParliamentarianLayout | PASParliamentarianLayout ) -> RenderData | Response: return { 'layout': layout, 'parliamentarian': self, 'title': layout.title, }
[docs] def edit_parliamentarian( self: RISParliamentarian | PASParliamentarian, request: TownRequest, form: ParliamentarianForm | PASParliamentarianForm, layout: RISParliamentarianLayout | PASParliamentarianLayout ) -> RenderData | Response: if form.submitted(request): form.populate_obj(self) request.success(_('Your changes were saved')) return request.redirect(request.link(self)) form.process(obj=self) layout.breadcrumbs.append(Link(_('Edit'), '#')) layout.editbar_links = [] return { 'layout': layout, 'title': layout.title, 'form': form, 'form_width': 'large' }
[docs] def delete_parliamentarian( self: RISParliamentarian | PASParliamentarian, request: TownRequest, ) -> None: request.assert_valid_csrf_token() collection = ParliamentarianCollection(request.session) collection.delete(self)
[docs] def add_commission_membership( self: RISParliamentarian | PASParliamentarian, request: TownRequest, form: ParliamentarianRoleForm, layout: RISParliamentarianLayout | PASParliamentarianLayout ) -> RenderData | Response: form.delete_field('parliamentarian_id') if form.submitted(request): if isinstance(self, RISParliamentarian): self.roles.append( RISParliamentarianRole(**form.get_useful_data()) ) elif isinstance(self, PASParliamentarian): self.roles.append( PASParliamentarianRole(**form.get_useful_data()) ) else: raise NotImplementedError( 'Unknown parliamentarian type: {}'.format(type(self)) ) request.success(_('Added a new role')) return request.redirect(request.link(self)) layout.breadcrumbs.append(Link(_('New role'), '#')) layout.include_editor() return { 'layout': layout, 'title': _('New role'), 'form': form, 'form_width': 'large' }
@TownApp.html( model=RISParliamentarianCollection, template='parliamentarians.pt', permission=Public )
[docs] def ris_view_parliamentarians( self: RISParliamentarianCollection, request: TownRequest ) -> RenderData | Response: layout = RISParliamentarianCollectionLayout(self, request) return view_parliamentarians(self, request, layout)
@TownApp.form( model=RISParliamentarianCollection, name='new', template='form.pt', permission=Public, form=ParliamentarianForm )
[docs] def ris_add_parliamentarian( self: RISParliamentarianCollection, request: TownRequest, form: ParliamentarianForm ) -> RenderData | Response: layout = RISParliamentarianCollectionLayout(self, request) return add_parliamentarian(self, request, form, layout)
@TownApp.html( model=RISParliamentarian, template='parliamentarian.pt', permission=Public )
[docs] def ris_view_parliamentarian( self: RISParliamentarian, request: TownRequest ) -> RenderData | Response: layout = RISParliamentarianLayout(self, request) return view_parliamentarian(self, request, layout)
@TownApp.form( model=RISParliamentarian, name='edit', template='form.pt', permission=Private, form=ParliamentarianForm )
[docs] def ris_edit_parliamentarian( self: RISParliamentarian, request: TownRequest, form: ParliamentarianForm ) -> RenderData | Response: layout = RISParliamentarianLayout(self, request) return edit_parliamentarian(self, request, form, layout)
@TownApp.view( model=RISParliamentarian, request_method='DELETE', permission=Private )
[docs] def ris_delete_parliamentarian( self: RISParliamentarian, request: TownRequest ) -> None: return delete_parliamentarian(self, request)
@TownApp.form( model=RISParliamentarian, name='new-role', template='form.pt', permission=Private, form=ParliamentarianRoleForm )
[docs] def ris_add_commission_membership( self: RISParliamentarian, request: TownRequest, form: ParliamentarianRoleForm ) -> RenderData | Response: layout = RISParliamentarianLayout(self, request) return add_commission_membership(self, request, form, layout)