/savane/svpeople/models.py

# · Python · 131 lines · 98 code · 15 blank · 18 comment · 0 complexity · 83d3ff34519ea33a8824a1b08f0c93f1 MD5 · raw file

  1. # Jobs models
  2. # Copyright (C) 2010 Sylvain Beucler
  3. #
  4. # This file is part of Savane.
  5. #
  6. # Savane is free software: you can redistribute it and/or modify
  7. # it under the terms of the GNU Affero General Public License as
  8. # published by the Free Software Foundation, either version 3 of the
  9. # License, or (at your option) any later version.
  10. #
  11. # Savane is distributed in the hope that it will be useful,
  12. # but WITHOUT ANY WARRANTY; without even the implied warranty of
  13. # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
  14. # GNU Affero General Public License for more details.
  15. #
  16. # You should have received a copy of the GNU Affero General Public License
  17. # along with this program. If not, see <http://www.gnu.org/licenses/>.
  18. from django.db import models
  19. from django.contrib.auth import models as auth_models
  20. from django.utils.translation import ugettext, ugettext_lazy as _
  21. import datetime
  22. class OpenJobManager(models.Manager):
  23. def get_query_set(self):
  24. return super(self.__class__, self).get_query_set().filter(status=1)
  25. class Job(models.Model):
  26. status_CHOICES = (
  27. ('1', _('Open')),
  28. ('2', _('Filled')),
  29. ('3', _('Deleted')),
  30. )
  31. group = models.ForeignKey(auth_models.Group)
  32. created_by = models.ForeignKey(auth_models.User)
  33. title = models.CharField(max_length=255, verbose_name=_("Short description"))
  34. description = models.TextField(_("Long description"))
  35. date = models.DateTimeField(auto_now_add=True)
  36. status = models.CharField(_("Status"), max_length=1, choices=status_CHOICES)
  37. category = models.ForeignKey("Category", verbose_name=_("Category"))
  38. objects = models.Manager() # default manager
  39. open_objects = OpenJobManager()
  40. def __unicode__(self):
  41. return "%s" % (self.title)
  42. @models.permalink
  43. def get_absolute_url(self):
  44. return ('savane:svpeople:job_detail', [self.id])
  45. class Label(models.Model):
  46. class Meta:
  47. abstract = True
  48. active = models.BooleanField(default=True)
  49. label = models.CharField(max_length=255)
  50. def __unicode__(self):
  51. return "%s" % (self.label)
  52. class Category(Label):
  53. class Meta:
  54. verbose_name = _("category")
  55. verbose_name_plural = _("categories")
  56. def open_job_set(self):
  57. return self.job_set.filter(status=1)
  58. class Skill(Label):
  59. class Meta:
  60. verbose_name = _("skill")
  61. verbose_name_plural = _("skills")
  62. ordering = ('label',)
  63. class SkillLevel(Label):
  64. class Meta:
  65. verbose_name = _("skill level")
  66. verbose_name_plural = _("skill levels")
  67. class SkillYear(Label):
  68. class Meta:
  69. verbose_name = _("skill year")
  70. verbose_name_plural = _("skill years")
  71. # Cf. fixtures/*.yaml
  72. default_categories_marked_for_translation = (
  73. _("Developer"),
  74. _("Project manager"),
  75. _("Unix admin"),
  76. _("Doc writer"),
  77. _("Tester"),
  78. _("Support manager"),
  79. _("Graphic/other designer"),
  80. _("Translator"),
  81. )
  82. default_skill_levels_marked_for_translation = (
  83. _("Base knowledge"),
  84. _("Good knowledge"),
  85. _("Master"),
  86. _("Master apprentice"),
  87. _("Expert"),
  88. )
  89. default_skill_years_marked_for_translation = (
  90. _("(< 6 months)"),
  91. _("6 Mo - 2 yr"),
  92. _("2 yr - 5 yr"),
  93. _("5 yr - 10 yr"),
  94. _("> 10 years"),
  95. )
  96. class JobInventory(models.Model):
  97. class Meta:
  98. verbose_name = _("job inventory")
  99. verbose_name_plural = _("job inventories")
  100. job = models.ForeignKey(Job)
  101. skill = models.ForeignKey(Skill)
  102. skill_level = models.ForeignKey(SkillLevel)
  103. skill_year = models.ForeignKey(SkillYear)
  104. from savane.utils.fields import AutoOneToOneField
  105. class UserInfo(models.Model):
  106. user = AutoOneToOneField(auth_models.User, primary_key=True, related_name="svpeopleuserinfo")
  107. resume = models.TextField(_("Resume"))
  108. view_skills = models.BooleanField(_("Publicly viewable"), default=False)
  109. class SkillInventory(models.Model):
  110. class Meta:
  111. verbose_name = _("skill inventory")
  112. verbose_name_plural = _("skill inventories")
  113. user = models.ForeignKey(auth_models.User)
  114. skill = models.ForeignKey(Skill)
  115. skill_level = models.ForeignKey(SkillLevel)
  116. skill_year = models.ForeignKey(SkillYear)