# -*- coding: utf-8 -*-
"""
===================================================
:mod:`apps.legislature.models` - Legislative bodies
===================================================
"""
from django.db import models
from django.db.models import permalink
from django.contrib.contenttypes.models import ContentType
from django.contrib.contenttypes import generic
from django.utils.translation import ugettext_lazy as _
from kelsen.apps.core.models import Agent, Person
from kelsen.apps.territory.models import Territory
class Parliament(Agent):
"""
Represents a legislative body.
"""
name = models.CharField(_('name'), max_length=255)
slug = models.SlugField(_('slug'))
jurisdiction = models.ForeignKey(Territory, verbose_name=_('jurisdiction'))
class Meta:
verbose_name = _('Parliament')
verbose_name_plural = _('Parliaments')
ordering = ['name', ]
def __unicode__(self):
return self.name
@permalink
def get_absolute_url(self):
return ('parliament', (), {'slug': self.slug})
class ParliamentaryTerm(models.Model):
"""
Represents the terms of a :class:`Parliament` class.
"""
initial_date = models.DateField(_('initial date'), )
final_date = models.DateField(_('final date'), blank=True, null=True)
name = models.CharField(_('parliamentary term name'), max_length=50)
slug = models.SlugField(_('slug'))
parliament = models.ForeignKey(Parliament, verbose_name=_('parliament'))
note = models.TextField(_('note'), blank=True, null=True) # check blank and null
class Meta:
verbose_name = _('Parliamentary term')
verbose_name_plural = _('Parliamentary terms')
ordering = ['parliament', '-initial_date' ]
def __unicode__(self):
return self.slug
@permalink
def get_absolute_url(self):
return ('parliamentary-term', (), {'slug': self.slug})
class PoliticalGroup(Agent):
"""
Represents a plurality of members of parliament during a
:class:`ParliamentaryTerm`. :class:`PoliticalGroup` has rights and
obligations by its own in accordance with the :class:`Parliament`
proceedings.
"""
initial_date = models.DateField(_('initial date'), )
final_date = models.DateField(_('final date'), blank=True, null=True)
name = models.CharField(_('name'), max_length=255)
term = models.ForeignKey(ParliamentaryTerm, verbose_name=_('parliamentary term'))
slug = models.SlugField()
note = models.TextField(_('note'), blank=True, null=True) # check blank and null
class Meta:
verbose_name = _('Political group')
verbose_name_plural = _('Political groups')
ordering = ['name', ]
def __unicode__(self):
return self.slug
@permalink
def get_absolute_url(self):
return ('politicalgroup', (), {'slug': self.slug})
class MemberParliamentTerm(models.Model):
"""
Represents the term of office of a :class:`MemberParliament`.
A :class:`MemberParliament` can be elected during one or more
:class:`ElectionTerm`
This class is also necessary to represent
:class:`MemberParliament` changes of :class:`PoliticalGroup`.
"""
name = models.CharField(_('job name'), max_length=255)
initial_date = models.DateField(_('initial date'), )
final_date = models.DateField(_('final date'), blank=True, null=True)
person = models.ForeignKey(Person, verbose_name=_('member of parliament'))
group = models.ForeignKey(PoliticalGroup, verbose_name=_('political group'))
constituency = models.ForeignKey(Territory, verbose_name=_('constituency'))
note = models.TextField(_('note'), blank=True, null=True) # check blank and null
class Meta:
verbose_name = _('Member of Parliament term')
verbose_name_plural = _('Member of Parliament terms')
ordering = ['-initial_date', 'group' ]
get_latest_by = 'initial_date'
def __unicode__(self):
return "%s: %s %s" % (self.initial_date,
self.person.name,
self.person.surname1)
@permalink
def get_absolute_url(self):
return ('mp', (), {'slug': self.person.id})
# TODO: Other integrants of parliament (Comitees, chairmen...)
# -*- coding: utf-8 -*-
"""
============================
:mod:`apps.executive.models`
============================
Module containing classes related with executive and administrative
organization.
"""
from django.db import models
from django.db.models import permalink
from django.contrib.contenttypes.models import ContentType
from django.contrib.contenttypes import generic
from django.utils.translation import ugettext_lazy as _
import mptt
from kelsen.apps.core.models import Agent, Person
from kelsen.apps.laws.models import Law
from kelsen.apps.territory.models import Territory
class ExecutiveOrganCategory(models.Model):
name = models.CharField(_('name'), max_length=255)
slug = models.SlugField(_('slug'))
parent = models.ForeignKey(
'self',
verbose_name=_('parent category'),
blank=True,
null=True,
related_name='children')
class Meta:
verbose_name = _('Executive organ category')
verbose_name_plural = _('Executive organ categories')
ordering = ['name', ]
def __unicode__(self):
return self.name
@permalink
def get_absolute_url(self):
return ('executive-organ-category', (), {'slug': self.slug})
class ExecutiveOrgan(Agent):
"""
Represents an executive or administrative body.
"""
name = models.CharField(_('name'), max_length=255)
slug = models.SlugField(_('slug'))
category = models.ForeignKey(
ExecutiveOrganCategory,
verbose_name=_('category'),
blank=True,
null=True)
parent = models.ForeignKey(
'self',
verbose_name=_('parent'),
null=True,
blank=True,
related_name='children')
statute = models.ForeignKey(
Law,
verbose_name=_('statute'),
blank=True,
null=True)
jurisdiction = models.ForeignKey(Territory, verbose_name=_('jurisdiction'))
class Meta:
verbose_name = _('Executive organ')
verbose_name_plural = _('Executive organs')
ordering = ['tree_id', 'lft']
def __unicode__(self):
return '%s [%s]' % (self.name, self.jurisdiction.name)
@permalink
def get_absolute_url(self):
return ('executive-organ', (), {'slug': self.slug})
mptt.register(ExecutiveOrgan, order_insertion_by=['name'])
class PublicServantTerm(models.Model):
"""
Represents a :class:`Person` officer of a :class:`Organ`.
"""
name = models.CharField(_('job name'), max_length=255)
initial_date = models.DateField(_('initial date'), )
final_date = models.DateField(_('final date'), blank=True, null=True)
person = models.ForeignKey(Person, verbose_name=_('person'))
executive_organ = models.ForeignKey(ExecutiveOrgan, verbose_name=_('organ'))
note = models.TextField(_('note'), blank=True, null=True) # check blank and null
class Meta:
verbose_name = _('Office term')
verbose_name_plural = _('Office terms')
ordering = ['executive_organ', '-initial_date' ]
def __unicode__(self):
return "%s %s" % (self.person.name, self.executive_organ.name)
@permalink
def get_absolute_url(self):
return ('public-servant', (), {'slug': self.person.slug })
class Rule(models.Model):
law = models.ForeignKey(Law, verbose_name=_('rules'))
organ = models.ForeignKey(ExecutiveOrgan, verbose_name=_('organ'))
class Meta:
verbose_name = _('Rule')
verbose_name_plural = _('Rules')
ordering = ['organ' ]
def __unicode__(self):
return self.organ.slug
@permalink
def get_absolute_url(self):
return ('rule', (), {'slug': self.slug})
# -*- coding: utf-8 -*-
"""
============================
:mod:`apps.judiciary.models`
============================
Module containing classes related with judiciary organization.
"""
from django.db import models
from django.db.models import permalink
from django.template.defaultfilters import slugify
from django.utils.translation import ugettext_lazy as _
import mptt
from kelsen.apps.core.models import Agent, Person
from kelsen.apps.laws.models import Law
from kelsen.apps.territory.models import Territory
class SubjectMatterJurisdiction(models.Model):
"""
Represents the type of legal action to be heared by a
:class:`Court`.
"""
name = models.CharField(_('name'), max_length=200)
slug = models.SlugField(_('slug'), unique=True,)
class Meta:
verbose_name = _('Subject matter jurisdiction')
verbose_name_plural = _('Subject matter jurisdictions')
ordering = ['name',]
def __unicode__(self):
return self.name
@permalink
def get_absolute_url(self):
return ('subject-matter', (), {'slug': self.slug})
class CourtCategory(models.Model):
"""
Represents the category of a :class:`Court`.
"""
name = models.CharField(_('name'), max_length=255)
slug = models.SlugField(_('slug'))
composition = models.CharField(_('composition'), max_length=40)
parent = models.ForeignKey(
'self',
verbose_name=_('parent category'),
blank=True,
null=True,
related_name='children')
class Meta:
verbose_name = _('Court category')
verbose_name_plural = _('Court categories')
ordering = ['name', ]
def __unicode__(self):
return self.name
@permalink
def get_absolute_url(self):
return ('court-category', (), {'slug': self.slug})
class Court(Agent):
"""
Represents the place where justice is judicially administered.
"""
name = models.CharField(_('name'), max_length=255)
slug = models.SlugField(_('slug'))
number = models.PositiveIntegerField() # change int character field
jurisdictions = models.ManyToManyField(Territory, verbose_name=_('jurisdiction'))
category = models.ForeignKey(
CourtCategory,
verbose_name=_('category'),
blank=True,
null=True)
matter_jurisdictions = models.ManyToManyField(
SubjectMatterJurisdiction,
related_name='court_set',
verbose_name=_('subject matter jurisdiction'))
parent = models.ForeignKey(
'self',
verbose_name=_('parent'),
null=True,
blank=True,
related_name='children')
statute = models.ForeignKey(
Law,
verbose_name=_('statute'),
blank=True,
null=True)
class Meta:
verbose_name = _('Court')
verbose_name_plural = _('Courts')
ordering = ['tree_id', 'lft']
def __unicode__(self):
return self.name
@permalink
def get_absolute_url(self):
return ('court', (), {'slug': self.slug})
mptt.register(Court, order_insertion_by=['name'])
class JudgeTerm(models.Model):
"""
Represents the office term of a :class:`Judge`.
"""
name = models.CharField(_('job name'), max_length=255)
initial_date = models.DateField(_('initial date'), )
final_date = models.DateField(_('final date'), blank=True, null=True)
person = models.ForeignKey(Person, verbose_name=_('person'))
court = models.ForeignKey(Court, verbose_name=_('court'))
note = models.TextField(_('note'), blank=True, null=True) # check blank and null
class Meta:
verbose_name = _('Judge term')
verbose_name_plural = _('Judge terms')
ordering = ['court', '-initial_date' ]
def __unicode__(self):
return "%s %s" % (self.person.name, self.court.name)
@permalink
def get_absolute_url(self):
return ('judge', (), {'slug': self.person.slug })