from __future__ import annotations
from webob.exc import HTTPNotFound
from onegov.core.elements import Link
from onegov.core.security import Private, Public
from onegov.org.forms.commission import CommissionForm
from onegov.org import _
from onegov.parliament.collections.commission import RISCommissionCollection
from onegov.parliament.collections.commission import CommissionCollection
from onegov.parliament.models import RISCommission, Commission
from onegov.town6 import TownApp
from onegov.town6.layout import RISCommissionCollectionLayout
from onegov.town6.layout import RISCommissionLayout
from typing import TYPE_CHECKING
if TYPE_CHECKING:
from webob import Response
from onegov.core.types import RenderData
from onegov.pas.layouts import PASCommissionCollectionLayout
from onegov.pas.layouts import PASCommissionLayout
from onegov.town6.request import TownRequest
[docs]
def view_commissions(
self: CommissionCollection,
request: TownRequest,
layout: RISCommissionCollectionLayout | PASCommissionCollectionLayout
) -> 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,
'commissions': self.query().all(),
'title': layout.title,
}
[docs]
def add_commission(
self: CommissionCollection,
request: TownRequest,
form: CommissionForm,
layout: RISCommissionCollectionLayout | PASCommissionCollectionLayout
) -> RenderData | Response:
if form.submitted(request):
commission = self.add(**form.get_useful_data())
request.success(_('Added a new commission'))
return request.redirect(request.link(commission))
layout.breadcrumbs.append(Link(_('New'), '#'))
layout.include_editor()
return {
'layout': layout,
'title': _('New commission'),
'form': form,
'form_width': 'large'
}
[docs]
def view_commission(
self: Commission,
request: TownRequest,
layout: RISCommissionLayout | PASCommissionLayout
) -> RenderData | Response:
return {
'layout': layout,
'commission': self,
'title': layout.title,
}
[docs]
def edit_commission(
self: Commission,
request: TownRequest,
form: CommissionForm,
layout: RISCommissionLayout | PASCommissionLayout
) -> 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 = []
layout.include_editor()
return {
'layout': layout,
'title': layout.title,
'form': form,
'form_width': 'large'
}
[docs]
def delete_commission(
self: Commission,
request: TownRequest
) -> None:
request.assert_valid_csrf_token()
collection = CommissionCollection(request.session)
collection.delete(self)
@TownApp.html(
model=RISCommissionCollection,
template='commissions.pt',
permission=Public
)
[docs]
def ris_view_commissions(
self: RISCommissionCollection,
request: TownRequest
) -> RenderData | Response:
if not request.app.org.ris_enabled:
raise HTTPNotFound()
return view_commissions(
self, request, RISCommissionCollectionLayout(self, request))
@TownApp.form(
model=RISCommissionCollection,
name='new',
template='form.pt',
permission=Private,
form=CommissionForm
)
[docs]
def ris_add_commission(
self: RISCommissionCollection,
request: TownRequest,
form: CommissionForm
) -> RenderData | Response:
if not request.app.org.ris_enabled:
raise HTTPNotFound()
return add_commission(
self,
request,
form,
RISCommissionCollectionLayout(self, request)
)
@TownApp.html(
model=RISCommission,
template='commission.pt',
permission=Public
)
[docs]
def ris_view_commission(
self: RISCommission,
request: TownRequest
) -> RenderData | Response:
if not request.app.org.ris_enabled:
raise HTTPNotFound()
return view_commission(self, request, RISCommissionLayout(self, request))
@TownApp.form(
model=RISCommission,
name='edit',
template='form.pt',
permission=Private,
form=CommissionForm
)
[docs]
def ris_edit_commission(
self: RISCommission,
request: TownRequest,
form: CommissionForm
) -> RenderData | Response:
if not request.app.org.ris_enabled:
raise HTTPNotFound()
return edit_commission(
self, request, form, RISCommissionLayout(self, request))
@TownApp.view(
model=RISCommission,
request_method='DELETE',
permission=Private
)
[docs]
def ris_delete_commission(
self: RISCommission,
request: TownRequest
) -> None:
return delete_commission(self, request)