/structure/models.py
Python | 108 lines | 65 code | 23 blank | 20 comment | 0 complexity | d419fbc9d76917dfc11022c73613b0cb MD5 | raw file
Possible License(s): GPL-3.0
- #coding=utf-8
- """
- Copyright 2010 Gabriele Mearelli, Nicola Poluzzi. All rights reserved.
- This file is part of Rubrik <http://bitbucket.org/gameame/rubrik/>
- Rubrik is free software: you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by
- the Free Software Foundation, either version 3 of the License, or
- (at your option) any later version.
- Rubrik is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- GNU General Public License for more details.
- You should have received a copy of the GNU General Public License
- along with Rubrik. If not, see <http://www.gnu.org/licenses/>.
- """
- from django.db import models
- from django.conf import settings
- from django.contrib.contenttypes import generic
- from django.utils.translation import ugettext as _
- from anagrafica.models import Contact, FormatDateField
- from django.contrib.auth.models import User
- class Structure(models.Model):
- level = models.PositiveIntegerField(choices=enumerate(settings.LEVELS), verbose_name=_('level'))
- name = models.CharField(max_length=1000, verbose_name=_('structure name'))
- super_structure = models.ForeignKey("Structure", blank=True, null=True, verbose_name=_('sub-structure of'))
- address = generic.GenericRelation("anagrafica.Address", null=True, blank=True)
- email = models.EmailField(blank=True, null=True, verbose_name=_('e-mail'))
- phone = models.CharField(max_length=50, blank=True, null=True, verbose_name=_('phone'))
- website = models.URLField(verify_exists=True, blank=True, null=True, verbose_name=_('website'))
- managers = models.ManyToManyField(User, through="StructureManager")
- def __unicode__(self):
- return self.get_level() + " - " + self.name
-
- def get_level(self):
- return settings.LEVELS[self.level]
- def get_contacts(self):
- return Contact.objects.filter(**{"structure" + "__".join(["super_structure"] * structure.level): self})
-
- class Meta:
- verbose_name = _('structure')
- verbose_name_plural = _('structures')
- class Group(models.Model):
- name = models.CharField(max_length=1000, verbose_name=_('name'))
- structure = models.ForeignKey(Structure, verbose_name=_('structure'))
- members = models.ManyToManyField(Contact, blank=True, null=True, related_name="groups")
-
- class Meta:
- verbose_name = _('group')
- verbose_name_plural = _('groups')
- # MEMBERSHIP DATAS
- class MembershipPayment(models.Model):
- subscriber = models.ForeignKey(Contact, verbose_name=_(u'subscriber'))
- structure = models.ForeignKey(Structure, verbose_name=_(u'structure'))
- date = FormatDateField(format="%d/%m/%Y", help_text=_(u'dd/mm/yyyy format'), verbose_name=_('payment date'))
- year = models.SmallIntegerField(blank=True, null=True, verbose_name=_('payment year'), help_text=_('Specify if payment has been made for a different year'))
- fee = models.DecimalField(max_digits=10, decimal_places=2, verbose_name=_('fee'))
-
- def __unicode__(self):
- return _(u"%(year)d payment") % {"year": self.date.year}
- class Meta:
- verbose_name = _('membership payment')
- verbose_name_plural = _('membership payments')
- ordering = ['date']
-
- class RoleType(models.Model):
- name = models.CharField(max_length=255, verbose_name=_('role'))
-
- def __unicode__(self):
- return self.name
-
- class Meta:
- verbose_name = _('role type')
- verbose_name_plural = _('role types')
-
- class StructureRole(models.Model):
- structure = models.ForeignKey(Structure, verbose_name=_('structure'))
- role = models.ForeignKey(RoleType, verbose_name=_('role'), blank=True, null=True)
- subscriber = models.ForeignKey(Contact, verbose_name=_('iscritto'))
-
- class Meta:
- verbose_name = _('structure role')
- verbose_name_plural = _('structure roles')
- ROLES = (
- ('admin', _('admin')),
- ('viewer', _('viewer')),
- )
- class StructureManager(models.Model):
- structure = models.ForeignKey(Structure, verbose_name=_('structure'))
- user = models.ForeignKey(User, verbose_name=_('user'))
- role = models.CharField(max_length=255, choices=ROLES, verbose_name=_('role'))