You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
82 lines
3.1 KiB
82 lines
3.1 KiB
from django.db import models
|
|
from django.utils import timezone
|
|
from mptt.models import TreeForeignKey
|
|
from sorl.thumbnail import ImageField
|
|
|
|
from users.models import User, Team
|
|
from projects.models import BuildingClassfication, ConstructionType, TERM_TYPES, CURRENCIES, Project
|
|
from specializations.models import Specialization
|
|
|
|
|
|
class WorkSell(models.Model):
|
|
# TODO: Add consistency ("work_sell" vs "worksell"):
|
|
|
|
budget = models.DecimalField(max_digits=10, decimal_places=0, default=0, null=True, blank=True)
|
|
building_classification = TreeForeignKey(BuildingClassfication, related_name='worksells', null=True, blank=True)
|
|
construction_type = models.ForeignKey(ConstructionType, related_name='worksells', null=True, blank=True)
|
|
contractor = models.ForeignKey(User, related_name='work_sell', null=True, blank=True) # TODO: Pluralize related name
|
|
created = models.DateTimeField(auto_now_add=True)
|
|
currency = models.CharField(max_length=20, default='rur', choices=CURRENCIES, null=True, blank=True)
|
|
description = models.TextField(blank=True)
|
|
location = TreeForeignKey('common.Location', related_name='worksells', null=True, blank=True)
|
|
name = models.CharField(max_length=255)
|
|
specialization = TreeForeignKey(Specialization, related_name='worksells', null=True, blank=True)
|
|
team = models.ForeignKey(Team, related_name='work_sells', null=True, blank=True)
|
|
term = models.IntegerField(default=0, null=True, blank=True)
|
|
term_type = models.CharField(max_length=20, choices=TERM_TYPES, default='hour', null=True, blank=True)
|
|
work_type = models.IntegerField(default=1, choices=Project.WORK_TYPES)
|
|
|
|
def __str__(self):
|
|
return self.name
|
|
|
|
def is_author_for_work(self):
|
|
pass
|
|
|
|
def get_prev(self):
|
|
try:
|
|
return self.get_previous_by_created(contractor=self.contractor)
|
|
except self.DoesNotExist:
|
|
return None
|
|
|
|
def get_next(self):
|
|
try:
|
|
return self.get_next_by_created(contractor=self.contractor)
|
|
except self.DoesNotExist:
|
|
return None
|
|
|
|
def get_cover(self):
|
|
photo = self.photos.first()
|
|
return photo and photo.img
|
|
|
|
class Meta:
|
|
ordering = ['-created']
|
|
verbose_name = 'Готовая работа'
|
|
verbose_name_plural = 'Готовые работы'
|
|
|
|
|
|
class WorkSellPhoto(models.Model):
|
|
img = ImageField(upload_to='worksell/worksell/')
|
|
worksell = models.ForeignKey(WorkSell, related_name='photos')
|
|
|
|
class Meta:
|
|
verbose_name = 'Изображение Готовая работа'
|
|
verbose_name_plural = 'Изображения Готовые работы'
|
|
|
|
def __str__(self):
|
|
return self.img and self.img.url or str(self.img)
|
|
|
|
|
|
class Picture(models.Model):
|
|
file = models.ImageField(upload_to='worksell/pictures/')
|
|
slug = models.SlugField(max_length=50, blank=True)
|
|
|
|
def __str__(self):
|
|
return self.file.name
|
|
|
|
def save(self, *args, **kwargs):
|
|
self.slug = self.file.name
|
|
super().save(*args, **kwargs)
|
|
|
|
def delete(self, *args, **kwargs):
|
|
self.file.delete(False)
|
|
super().delete(*args, **kwargs)
|
|
|