from onegov.core.orm.mixins import dict_property
from onegov.core.orm.mixins import meta_property
from onegov.org.models.extensions import AccessExtension
from onegov.org.models.extensions import PublicationExtension
from onegov.people import AgencyMembership
from typing import TYPE_CHECKING
if TYPE_CHECKING:
from onegov.agency.models import ExtendedAgency
from onegov.agency.models import ExtendedPerson
from sqlalchemy.orm import relationship
[docs]
class ExtendedAgencyMembership(AgencyMembership, AccessExtension,
PublicationExtension):
""" An extended version of the standard membership from onegov.people. """
[docs]
__mapper_args__ = {'polymorphic_identity': 'extended'}
[docs]
es_type_name = 'extended_membership'
@property
[docs]
def es_public(self) -> bool: # type:ignore[override]
if self.agency:
if self.agency.meta.get('access', 'public') != 'public':
return False
if not self.agency.published:
return False
if self.person:
if self.person.meta.get('access', 'public') != 'public':
return False
if not self.person.published:
return False
return self.access == 'public'
# Todo: It is very unclear how this should be used. In the PDF rendering,
# it is placed a middle column with 0.5 cm after the title.
# On the agency, it is placed after the membership title, so not a prefix
# but rather a suffix and it looks. For 0.5cm, the form should validate the
# length of this, otherwise people complain about weird pdf
#: The prefix character.
[docs]
prefix: dict_property[str | None] = meta_property()
#: A note to the membership.
[docs]
note: dict_property[str | None] = meta_property()
#: An addition to the membership.
[docs]
addition: dict_property[str | None] = meta_property()
if TYPE_CHECKING:
# NOTE: We only relate extended versions
[docs]
agency: relationship[ExtendedAgency]
person: relationship[ExtendedPerson]