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.org.forms import ParliamentarianForm
from onegov.org.forms import ParliamentarianRoleForm
from onegov.org.forms.commission_role import ParliamentarianCommissionRoleForm
from onegov.org.models import RISParliamentarian
from onegov.org.models import RISParliamentarianCollection
from onegov.org.models import PoliticalBusinessParticipationCollection
from onegov.parliament.collections import ParliamentarianCollection
from onegov.parliament.models import ParliamentarianRole
from onegov.parliament.models import CommissionMembership
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.pas.forms.parliamentarian import PASParliamentarianForm
    from onegov.parliament.models import Parliamentarian
    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: Parliamentarian, request: TownRequest, layout: RISParliamentarianLayout | PASParliamentarianLayout ) -> RenderData | Response: return { 'layout': layout, 'parliamentarian': self, 'title': layout.title, }
[docs] def edit_parliamentarian( self: Parliamentarian, 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)) elif not request.POST: 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: Parliamentarian, request: TownRequest, ) -> None: request.assert_valid_csrf_token() businesses = PoliticalBusinessParticipationCollection(request.session) businesses.by_parliamentarian_id(self.id).delete() parliamentarians = ParliamentarianCollection(request.session) parliamentarians.delete(self) request.success(_('The parliamentarian has been deleted.'))
[docs] def add_parliamentary_group_membership( self: Parliamentarian, request: TownRequest, form: ParliamentarianRoleForm, layout: RISParliamentarianLayout | PASParliamentarianLayout ) -> RenderData | Response: form.delete_field('parliamentarian_id') if form.submitted(request): self.roles.append( ParliamentarianRole.get_polymorphic_class( # FIXME: We should probably just use `ris` and `pas` # as the polymorphic types on every model # then we can directly use them f'{self.type}_role', ParliamentarianRole )(**form.get_useful_data()) ) request.success(_('Added a new role')) return request.redirect(request.link(self)) layout.breadcrumbs.append( Link(_('New parliamentary group function'), '#')) layout.include_editor() return { 'layout': layout, 'title': _('New parliamentary group function'), 'form': form, 'form_width': 'large' }
[docs] def add_commission_membership( self: Parliamentarian, request: TownRequest, form: ParliamentarianCommissionRoleForm, layout: RISParliamentarianLayout ) -> RenderData | Response: form.delete_field('parliamentarian_id') if form.submitted(request): self.commission_memberships.append( CommissionMembership.get_polymorphic_class( # FIXME: We should probably just use `ris` and `pas` # as the polymorphic types on every model # then we can directly use them 'ris_commission_membership', CommissionMembership )(**form.get_useful_data()) ) request.success(_('Added a new role')) return request.redirect(request.link(self)) layout.breadcrumbs.append(Link(_('New commission function'), '#')) layout.include_editor() return { 'layout': layout, 'title': _('New commission function'), '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', # change to 'add-group-role' template='form.pt', permission=Private, form=ParliamentarianRoleForm )
[docs] def ris_add_parliamentary_group_membership( self: RISParliamentarian, request: TownRequest, form: ParliamentarianRoleForm ) -> RenderData | Response: layout = RISParliamentarianLayout(self, request) return add_parliamentary_group_membership(self, request, form, layout)
@TownApp.form( model=RISParliamentarian, name='new-commission-role', # change to 'add-group-role' template='form.pt', permission=Private, form=ParliamentarianCommissionRoleForm )
[docs] def ris_add_commission_membership( self: RISParliamentarian, request: TownRequest, form: ParliamentarianCommissionRoleForm ) -> RenderData | Response: layout = RISParliamentarianLayout(self, request) return add_commission_membership(self, request, form, layout)