class Milestone(reorderhelper.models.ReorderableMixin, models.Model): title = models.CharField(max_length=255) tag = models.CharField(max_length=20) description = MarkdownxField() due = models.PositiveIntegerField() lead = models.ForeignKey(Partner) maintask = models.ForeignKey(Task, blank=True) secondarytasks = models.ManyToManyField( Task, related_name="milestone_secondaryTasks") verification = MarkdownxField() wp = SortableForeignKey(Workpackage) @property def tasklist(self): # print("tasklist") l1 = ["\\textbf{{\\ref{{{}}}}}".format(self.maintask.tag)] # print(l1) l2 = ["\\ref{{{}}}".format(t.tag) for t in self.secondarytasks.all()] # print(l2) r = ", ".join(l1 + l2) # print(r) return r def __str__(self): return self.title class Meta: ordering = ['order']
class Task(reorderhelper.models.ReorderableMixin, models.Model): title = models.CharField(max_length=255) tag = models.CharField(max_length=20) start = models.PositiveIntegerField() end = models.PositiveIntegerField() objectives = MarkdownxField() description = MarkdownxField() wp = SortableForeignKey(Workpackage) lead = models.ForeignKey(Partner) def __str__(self): return self.title def interval(self): return [ (self.start, self.end), ] def contributors(self): return set([x.partner.shortname for x in self.taskpartnerpm_set.all()]) class Meta: ordering = ['order']
class ActivitySponsor(DateModel, SortableMixin): is_active = models.BooleanField(verbose_name=_('Active'), default=True) logo_height = models.PositiveSmallIntegerField( verbose_name=_('Logo Height'), null=True, blank=True) logo_width = models.PositiveSmallIntegerField(verbose_name=_('Logo Width'), null=True, blank=True) sponsor_type = SortableForeignKey(verbose_name=_('Sponsor Type'), to='sponsor.SponsorType') sponsor = models.ForeignKey(verbose_name=_('Sponsor'), to='sponsor.Sponsor') activity = models.ForeignKey(verbose_name=_('Activity'), to='activity.Activity') # ordering field order_id = models.PositiveSmallIntegerField(default=0, editable=False, db_index=True) class Meta: verbose_name = _('Activity Sponsor') verbose_name_plural = _('Activity Sponsors') ordering = ('order_id', 'sponsor_type') unique_together = ('activity', 'sponsor') def __str__(self): return '{activity} - {sponsor}'.format( activity=self.activity.__str__(), sponsor=self.sponsor.__str__())
class Direction(SortableMixin): name = models.CharField(max_length=100, default='') text = HTMLField(default='', verbose_name=_('Text')) lazy_text = HTMLField(default='', verbose_name=_('Lazy Text'), editable=False) recipe = SortableForeignKey('Recipe', related_name='directions', on_delete=models.CASCADE) order_with_respect_to = 'recipe' ingredient_amounts = models.ManyToManyField('IngredientAmount', blank=True) direction_order = models.PositiveIntegerField(default=0, editable=False, db_index=True) def save(self, *args, **kwargs): if settings.LAZIFY_IMAGES: self.lazy_text = lazify_images(self.text) super().save(*args, **kwargs) def __str__(self): return self.name class Meta: verbose_name = _('Direction') verbose_name_plural = _('Directions') ordering = ['direction_order'] constraints = [ models.UniqueConstraint(fields=['recipe', 'text'], name='no duplicate direction per recipe') ]
class CalendarDay(Sortable): apartament = SortableForeignKey(Apartament, related_name='calendar', verbose_name=_('calendar')) date = models.DateField(u'Data') price = models.DecimalField(u'Cena', max_digits=10, decimal_places=2) STATE_FREE = 1 STATE_BOOKING = 2 STATE_UNAVAILABLE = 3 STATE_CHOICES = ( (STATE_FREE, _('Free')), (STATE_BOOKING, _('Booking')), (STATE_UNAVAILABLE, _('Unavailable')), ) state = models.PositiveSmallIntegerField(u'Stan', choices=STATE_CHOICES, default=STATE_FREE) created_date = models.DateTimeField(auto_now_add=True) updated_date = models.DateTimeField(auto_now=True) objects = CalendarDayManager() class Meta: ordering = ('-date', ) verbose_name = u'Dzień kalendarza' verbose_name_plural = u'Dni kalendarza' unique_together = ('apartament', 'date') def __unicode__(self): return str(self.date) @property def formatted_price(self): return formatted_price(self.price)
class PriceSettings(Sortable): apartament = SortableForeignKey(Apartament, related_name='price', verbose_name=_('price'), unique=True) price = models.DecimalField(u'Cena', max_digits=10, decimal_places=2) show_default_price = models.BooleanField(u'Pokazuj domyślną cenę', default=True) created_date = models.DateTimeField(auto_now_add=True) updated_date = models.DateTimeField(auto_now=True) class Meta: verbose_name = u'Cena domyślna' verbose_name_plural = u'Cena domyślna' @property def state(self): return CalendarDay.STATE_FREE def get_state_display(self): return unicode(dict(CalendarDay.STATE_CHOICES)[self.state]) @property def formatted_price(self): return formatted_price(self.price)
class SearchTermItem(TimeStampsModel, SortableMixin): uuid = models.UUIDField(primary_key=True, default=uuid.uuid4, editable=False) category = SortableForeignKey('search_terms.SearchTermCategory', on_delete=models.CASCADE) slug = models.CharField(max_length=30, unique=True) name = models.CharField(max_length=60) description = models.TextField(null=True, blank=True) call_to_action_type = models.CharField(choices=SEARCH_TERM_CTA_TYPES, default=PLAIN_TEXT_CTA_TYPE, max_length=20) call_to_action_text = models.CharField(max_length=255, null=True, blank=True) link = models.CharField(max_length=200, null=True, blank=True) order_number = models.PositiveIntegerField(default=0, editable=False, db_index=True) class Meta: ordering = ['order_number'] def __str__(self): return self.name @property def v1_url(self): return f'{settings.V1_URL}{self.link}'
class ThroughImage(Sortable): catalogImage = SortableForeignKey(CatalogImage, on_delete=models.CASCADE, verbose_name=_('catalog image')) catalogAlbum = models.ForeignKey(CatalogAlbum, on_delete=models.CASCADE, verbose_name=_('catalog album')) image_order = models.PositiveIntegerField(default=0, editable=False, db_index=True) class Meta(Sortable.Meta): ordering = ['image_order']
class Division(SortableMixin): name = models.CharField('name', max_length=120, db_index=True) office = models.ForeignKey('Office', on_delete=models.SET_NULL, blank=True, null=True, related_name='divisions', db_index=True) department = SortableForeignKey('Department', on_delete=models.SET_NULL, blank=True, null=True, related_name='divisions') url = models.SlugField(max_length=120, unique=True) independent = models.BooleanField(default=False) def __str__(self): return self.name class Meta: verbose_name = 'Division' verbose_name_plural = 'Divisions' ordering = ['division_order'] division_order = models.PositiveIntegerField(default=0, editable=False, db_index=True)
class Photos(Sortable): apartament = SortableForeignKey(Apartament, related_name='slides', verbose_name=_('Gallery')) published = models.BooleanField(_('Published'), default=True) imageField1 = models.ImageField(_('Image'), upload_to='apartaments', blank=True) imageField2 = models.ImageField(_('Image'), upload_to='apartaments', blank=True) imageField3 = models.ImageField(_('Image'), upload_to='apartaments', blank=True) template = models.CharField(max_length=255, choices=(('1', 'one photo'), ('2', 'two photo'), ('3', 'three photo'))) class Meta(Sortable.Meta): verbose_name = _('Photo') verbose_name_plural = _('Photos') def __unicode__(self): return self.apartament.name
class Task(SortableMixin, TimeStampedModel): title = models.CharField(max_length=255) description = models.TextField(blank=True) priority = models.CharField( max_length=1, choices=Priority.choices, default=Priority.MEDIUM ) labels = models.ManyToManyField(Label, related_name="tasks") assignees = models.ManyToManyField(User, related_name="tasks") column = SortableForeignKey(Column, related_name="tasks", on_delete=models.CASCADE) task_order = models.PositiveIntegerField(default=0, editable=False, db_index=True) period = models.CharField( max_length=2, choices=Period.choices, default=Period.WORKDAY ) week = models.PositiveIntegerField(choices=[(x, str(x)) for x in range(1, 53)]) color = models.CharField(max_length=7, default="#D7421B") created = models.DateTimeField( auto_now_add=True, help_text="(automatic) created date" ) updated = models.DateTimeField(auto_now=True, auto_now_add=False) def __str__(self): return f"{self.id} - {self.title}" class Meta: ordering = ["task_order"]
class EmploymentPoint(EventPoint): employment = SortableForeignKey(Employment, null=True, on_delete=models.CASCADE) class Meta(EventPoint.Meta): verbose_name_plural = "Employment Points"
class Poll(SortableMixin): class Meta: # verbose_name_plural = u'Polls' ordering = ['poll_order'] user = models.ForeignKey(User, null=True) poll_type = models.CharField( max_length=30, default='multi', choices=( ('multi', 'pick multiple options'), ('one', 'pick one option'), ('countries', 'pick a country from the list'), ('text', 'type text'), ('email_now', 'email - save and send at Submit'), ('email', 'email - just save'), ('first_name', 'enter first name'), ('phone', 'telephone number') ) ) question = models.CharField(max_length=500, blank=True) survey = SortableForeignKey( Survey, on_delete=models.SET_NULL, blank=True, null=True) first_level = models.BooleanField(default=True) poll_order = models.PositiveIntegerField(default=0, editable=False, db_index=True) include_in_raport = models.BooleanField(default=True) include_in_details = models.BooleanField(default=True) ghost = models.BooleanField(default=False) group = models.ForeignKey(PollGroup, on_delete=models.SET_NULL, null=True, blank=True) def __str__(self): return self.question
class AffiliationPoint(EventPoint): affiliation = SortableForeignKey(Affiliation, null=True, on_delete=models.CASCADE) class Meta(EventPoint.Meta): verbose_name_plural = "Affiliation Points"
class ProjectPoint(EventPoint): experience = SortableForeignKey(Project, null=True, on_delete=models.CASCADE) class Project(EventPoint.Meta): verbose_name_plural = "Project Points"
class Link(SortableMixin): COMPONENT_CHOICES = ( ('page', _('Page')), ('initiatives.list', _('Initiative Search')), ('initiatives.start', _('Initiative Start')), ('initiatives.create', _('Initiative Create')), ('initiatives.detail', _('Initiative Detail')), ('initiatives.activities.list', _('Activities Search')), ('project', _('Project')), ('task', _('Task')), ('fundraiser', _('Fundraiser')), ('results-page', _('Results Page')), ('news', _('News')), ) link_group = SortableForeignKey(LinkGroup, related_name='links') link_permissions = models.ManyToManyField(LinkPermission, blank=True) highlight = models.BooleanField(default=False) title = models.CharField(_('Title'), null=False, max_length=100) component = models.CharField(_('Component'), choices=COMPONENT_CHOICES, max_length=50, blank=True, null=True) component_id = models.CharField(_('Component ID'), max_length=100, blank=True, null=True) external_link = models.CharField(_('External Link'), max_length=2000, blank=True, null=True) link_order = models.PositiveIntegerField(default=0, editable=False, db_index=True) class Meta: ordering = ['link_order']
class CourseTeacher(Sortable): teacher = models.ForeignKey(User, verbose_name=_(u'Teacher')) course = SortableForeignKey(Course, verbose_name=_(u'Course')) class Meta(Sortable.Meta): verbose_name = _(u'course teacher') verbose_name_plural = _(u'course teachers')
class Project(SimpleModel, SortableMixin): class Meta: ordering = ['order'] category = SortableForeignKey(Category) description = models.TextField() order = models.PositiveIntegerField(default=0, editable=False)
class Component(SimpleModel, Sortable): class Meta(Sortable.Meta): pass widget = SortableForeignKey(Widget) def __unicode__(self): return self.title
class SortableCategoryWidget(SimpleModel, Sortable): class Meta(Sortable.Meta): verbose_name = 'Sortable Category Widget' verbose_name_plural = 'Sortable Category Widgets' non_sortable_category = SortableForeignKey(NonSortableCategory) def __str__(self): return self.title
class EducationPoint(EventPoint): education = SortableForeignKey(Education, null=True, on_delete=models.CASCADE) text = models.TextField('Text') keyword = models.CharField('Keyword', max_length=50, null=True) class Meta(EventPoint.Meta): verbose_name_plural = "Education Points"
class Unit(Sortable): title = models.CharField(verbose_name=_(u'Title'), max_length=200) course = SortableForeignKey(Course, verbose_name=_(u'Course')) UNIT_TYPES = ( ('n', _(u'Normal')), ('h', _(u'Homework')), ('e', _(u'Exam')), ) unittype = models.CharField(verbose_name=_(u'Type'), choices=UNIT_TYPES, max_length=1, default=UNIT_TYPES[0][0]) start = models.DateTimeField(verbose_name=_(u'Start'), null=True, blank=True, help_text=_(u'Until this date is reached, no ' u'contents of this module will ' u'be shown to the students.')) deadline = models.DateTimeField(verbose_name=_(u'Deadline'), null=True, blank=True, help_text=_(u'Until this date is reached, ' u'the students will be able ' u'to modify their answers, ' u"but won't see the solution")) weight = models.SmallIntegerField(verbose_name=_(u'Weight'), null=False, default=0, help_text='0-100%', validators=[MaxValueValidator(100)]) UNIT_STATUSES = ( ('d', _(u'Draft')), ('l', _(u'Listable')), ('p', _(u'Published')), ) status = models.CharField( verbose_name=_(u'Status'), choices=UNIT_STATUSES, max_length=10, default=UNIT_STATUSES[0][0], ) objects = UnitManager() class Meta(Sortable.Meta): verbose_name = _(u'unit') verbose_name_plural = _(u'units') unique_together = ('title', 'course') def __unicode__(self): return u'%s - %s (%s)' % (self.course, self.title, self.unittype) def get_unit_type_name(self): for t in self.UNIT_TYPES: if t[0] == self.unittype: return t[1] def natural_key(self): return self.course.natural_key() + (self.title, )
class FolderIgnore(Sortable): class Meta(Sortable.Meta): pass folder = SortableForeignKey(Folder) ignore_line = models.CharField(max_length=254) def __str__(self): return self.ignore_line
class PhraseCategory(SortableMixin): category = SortableForeignKey('Category', on_delete=models.CASCADE, db_index=True) phrase = models.ForeignKey('Phrase', on_delete=models.CASCADE, db_index=True) order = models.PositiveIntegerField(editable=False, db_index=True, default=0) def __str__(self): return f'{self.category.name} - {self.phrase.content}' class Meta: ordering = ['order']
class Component(SimpleModel, SortableMixin): class Meta: ordering = ['order'] widget = SortableForeignKey(Widget) order = models.PositiveIntegerField(default=0, editable=False) def __str__(self): return self.title
class Person(SortableMixin): first_name = models.CharField('First Name', max_length=30, db_index=True) last_name = models.CharField('Last Name', max_length=30, db_index=True) surname = models.CharField('Surname', max_length=30, db_index=True) birthday = models.DateField('Birthday', help_text='yyyy-mm-dd', db_index=True) job_acceptance_date = models.DateField('Job Acceptance Date', help_text='yyyy-mm-dd', blank=True, null=True) image = models.ImageField('Image', upload_to="persons") office = models.ForeignKey('Office', on_delete=models.SET_NULL, blank=True, null=True, related_name='persons') department = models.ForeignKey('Department', on_delete=models.SET_NULL, blank=True, null=True, related_name='persons') division = SortableForeignKey('Division', on_delete=models.SET_NULL, blank=True, null=True, related_name='persons') position = models.CharField('Position', max_length=50, db_index=True) email = models.EmailField('Email', unique=True, blank=True, null=True, db_index=True) phone_number = models.PositiveSmallIntegerField('Phone', unique=True, blank=True, null=True, db_index=True) url = models.SlugField(max_length=120, unique=True) last_update = models.DateField(auto_now=True) def __str__(self): return self.first_name + ' ' + self.last_name class Meta: verbose_name = 'Person' verbose_name_plural = 'Persons' ordering = ['person_order'] person_order = models.PositiveIntegerField(default=0, editable=False, db_index=True)
class PageContents(SortableMixin): page = models.ForeignKey('Page', on_delete=models.CASCADE) content = SortableForeignKey("BaseContent", on_delete=models.CASCADE, related_name='pgs') content_order = models.PositiveIntegerField(default=0, editable=False, db_index=True) class Meta: ordering = ('content_order', )
class SubSection(SortableMixin): title = models.CharField(max_length=255, default='Section Title') description = RichTextField() order = models.PositiveIntegerField(default=0, editable=False, db_index=True) section = SortableForeignKey(to=Section, on_delete=models.CASCADE, null=True) def __str__(self): return self.title class Meta: ordering = ['order', ]
class ThroughImage(Sortable): #catalogImage = models.ForeignKey(CatalogImage, on_delete=models.CASCADE) catalogImage = SortableForeignKey(CatalogImage, on_delete=models.CASCADE) catalogAlbum = models.ForeignKey(CatalogAlbum, on_delete=models.CASCADE) #weight = models.IntegerField(verbose_name=_("weight")) class Meta(Sortable.Meta): #ordering = ['weight'] #unique_together = ('catalogAlbum', 'weight',) pass
class SortableCategoryWidget(SimpleModel, SortableMixin): class Meta: ordering = ['order'] verbose_name = 'Sortable Category Widget' verbose_name_plural = 'Sortable Category Widgets' non_sortable_category = SortableForeignKey(NonSortableCategory) order = models.PositiveIntegerField(default=0, editable=False) def __str__(self): return self.title