PageRenderTime 25ms CodeModel.GetById 16ms RepoModel.GetById 0ms app.codeStats 0ms

/structure/models.py

https://bitbucket.org/gameame/rubrik
Python | 108 lines | 65 code | 23 blank | 20 comment | 0 complexity | d419fbc9d76917dfc11022c73613b0cb MD5 | raw file
Possible License(s): GPL-3.0
  1. #coding=utf-8
  2. """
  3. Copyright Š 2010 Gabriele Mearelli, Nicola Poluzzi. All rights reserved.
  4. This file is part of Rubrik <http://bitbucket.org/gameame/rubrik/>
  5. Rubrik is free software: you can redistribute it and/or modify
  6. it under the terms of the GNU General Public License as published by
  7. the Free Software Foundation, either version 3 of the License, or
  8. (at your option) any later version.
  9. Rubrik is distributed in the hope that it will be useful,
  10. but WITHOUT ANY WARRANTY; without even the implied warranty of
  11. MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
  12. GNU General Public License for more details.
  13. You should have received a copy of the GNU General Public License
  14. along with Rubrik. If not, see <http://www.gnu.org/licenses/>.
  15. """
  16. from django.db import models
  17. from django.conf import settings
  18. from django.contrib.contenttypes import generic
  19. from django.utils.translation import ugettext as _
  20. from anagrafica.models import Contact, FormatDateField
  21. from django.contrib.auth.models import User
  22. class Structure(models.Model):
  23. level = models.PositiveIntegerField(choices=enumerate(settings.LEVELS), verbose_name=_('level'))
  24. name = models.CharField(max_length=1000, verbose_name=_('structure name'))
  25. super_structure = models.ForeignKey("Structure", blank=True, null=True, verbose_name=_('sub-structure of'))
  26. address = generic.GenericRelation("anagrafica.Address", null=True, blank=True)
  27. email = models.EmailField(blank=True, null=True, verbose_name=_('e-mail'))
  28. phone = models.CharField(max_length=50, blank=True, null=True, verbose_name=_('phone'))
  29. website = models.URLField(verify_exists=True, blank=True, null=True, verbose_name=_('website'))
  30. managers = models.ManyToManyField(User, through="StructureManager")
  31. def __unicode__(self):
  32. return self.get_level() + " - " + self.name
  33. def get_level(self):
  34. return settings.LEVELS[self.level]
  35. def get_contacts(self):
  36. return Contact.objects.filter(**{"structure" + "__".join(["super_structure"] * structure.level): self})
  37. class Meta:
  38. verbose_name = _('structure')
  39. verbose_name_plural = _('structures')
  40. class Group(models.Model):
  41. name = models.CharField(max_length=1000, verbose_name=_('name'))
  42. structure = models.ForeignKey(Structure, verbose_name=_('structure'))
  43. members = models.ManyToManyField(Contact, blank=True, null=True, related_name="groups")
  44. class Meta:
  45. verbose_name = _('group')
  46. verbose_name_plural = _('groups')
  47. # MEMBERSHIP DATAS
  48. class MembershipPayment(models.Model):
  49. subscriber = models.ForeignKey(Contact, verbose_name=_(u'subscriber'))
  50. structure = models.ForeignKey(Structure, verbose_name=_(u'structure'))
  51. date = FormatDateField(format="%d/%m/%Y", help_text=_(u'dd/mm/yyyy format'), verbose_name=_('payment date'))
  52. year = models.SmallIntegerField(blank=True, null=True, verbose_name=_('payment year'), help_text=_('Specify if payment has been made for a different year'))
  53. fee = models.DecimalField(max_digits=10, decimal_places=2, verbose_name=_('fee'))
  54. def __unicode__(self):
  55. return _(u"%(year)d payment") % {"year": self.date.year}
  56. class Meta:
  57. verbose_name = _('membership payment')
  58. verbose_name_plural = _('membership payments')
  59. ordering = ['date']
  60. class RoleType(models.Model):
  61. name = models.CharField(max_length=255, verbose_name=_('role'))
  62. def __unicode__(self):
  63. return self.name
  64. class Meta:
  65. verbose_name = _('role type')
  66. verbose_name_plural = _('role types')
  67. class StructureRole(models.Model):
  68. structure = models.ForeignKey(Structure, verbose_name=_('structure'))
  69. role = models.ForeignKey(RoleType, verbose_name=_('role'), blank=True, null=True)
  70. subscriber = models.ForeignKey(Contact, verbose_name=_('iscritto'))
  71. class Meta:
  72. verbose_name = _('structure role')
  73. verbose_name_plural = _('structure roles')
  74. ROLES = (
  75. ('admin', _('admin')),
  76. ('viewer', _('viewer')),
  77. )
  78. class StructureManager(models.Model):
  79. structure = models.ForeignKey(Structure, verbose_name=_('structure'))
  80. user = models.ForeignKey(User, verbose_name=_('user'))
  81. role = models.CharField(max_length=255, choices=ROLES, verbose_name=_('role'))