from mptt.models import TreeForeignKey from datetime import datetime from django.db import models from django.utils import timezone from users.models import User from specializations.models import Specialization CURRENCIES = ( ('rur', 'RUR'), ('usd', 'USD'), ('eur', 'EUR'), ) TERMS = ( ('project', 'За проект'), ('hour', 'За час'), ('day', 'За день'), ('month', 'За месяц'), ) class BuildingClassfication(models.Model): name = models.CharField(max_length=255) def __str__(self): return self.name class Meta: verbose_name = 'Тип здания' verbose_name_plural = 'Типы здания' class ConstructionType(models.Model): name = models.CharField(max_length=255) def __str__(self): return self.name class Meta: verbose_name = 'Вид строительства' verbose_name_plural = 'Виды строительства' class Realty(models.Model): building_classification = models.ForeignKey(BuildingClassfication, related_name='realties') construction_type = models.ForeignKey(ConstructionType, related_name='realties') location = TreeForeignKey('common.Location', related_name='realties', null=True, blank=True) name = models.CharField(max_length=255) user = models.ForeignKey(User, related_name='realties') def __str__(self): return self.name class Meta: verbose_name = 'Объект' verbose_name_plural = 'Объекты' class Project(models.Model): WORK_TYPES = ( ('1', 'Проектирование'), ('2', 'Техническое сопровождение') ) DEAL_TYPES = ( ('secure_deal', 'Безопасная сделка (с резервированием бюджета) '), ('direct_payment', 'Прямая оплата Исполнителю на его кошелек/счет'), ) STATES = ( ('active', 'Активный'), ('trashed', 'В корзине'), ('deleted', 'Удален'), ) budget = models.DecimalField(max_digits=10, decimal_places=0) budget_by_agreement = models.BooleanField(default=False) created = models.DateTimeField(default=timezone.now) cro = models.BooleanField(default=False) currency = models.CharField(max_length=20, default='rur', choices=CURRENCIES) customer = models.ForeignKey(User, related_name='projects') name = models.CharField(max_length=255) price_and_term_required = models.BooleanField(default=False, blank=True) realty = models.ForeignKey(Realty, null=True, related_name='projects') deal_type = models.CharField(max_length=20, default='secure_deal', choices=DEAL_TYPES) specialization = models.ForeignKey(Specialization, related_name='projects') term = models.IntegerField(default=0) term_type = models.CharField(max_length=20, choices=TERMS, default='hour') text = models.TextField(blank=True) work_type = models.CharField(default='1', max_length=20, choices=WORK_TYPES) state = models.CharField(default='active', max_length=20, choices=STATES) def __str__(self): return self.name class Meta: verbose_name = 'Проект' verbose_name_plural = 'Проекты' def secure_deal(self): if self.deal_type == 'secure_deal': return True return False class ProjectFile(models.Model): file = models.FileField(upload_to='projects/project_files') project = models.ForeignKey(Project, related_name='files') class Meta: verbose_name = 'Файл проекта' verbose_name_plural = 'Файлы проектов' class Answer(models.Model): budget = models.DecimalField(max_digits=10, decimal_places=0) currency = models.CharField(max_length=5, choices=CURRENCIES, default='rur') created = models.DateTimeField(default=timezone.now) project = models.ForeignKey(Project, related_name='answers') term = models.IntegerField(default=0) term_type = models.CharField(max_length=10, choices=TERMS, default='hour') text = models.TextField() contractor = models.ForeignKey(User, related_name='answers') def __str__(self): return self.text class Meta: verbose_name = 'Ответ к проекту' verbose_name_plural = 'Ответы к проектам' ordering = ('-created',) class Order(models.Model): contractor = models.ForeignKey(User, null=True, blank=True) created = models.DateTimeField(default=timezone.now) project = models.OneToOneField(Project, related_name='order') secure = models.BooleanField(default=False) status = models.BooleanField(default=False) def __str__(self): return self.project.name class Meta: verbose_name = 'Заказ' verbose_name_plural = 'Заказы' class Stage(models.Model): cost = models.DecimalField(max_digits=10, decimal_places=0) cost_type = models.CharField(max_length=5, choices=CURRENCIES, default='rur') name = models.CharField(max_length=255) order = models.ForeignKey(Order, related_name='stages') result = models.CharField(max_length=255) term = models.IntegerField(default=0) term_type = models.CharField(max_length=10, choices=TERMS, default='hour') def __str__(self): return self.name class Meta: verbose_name = 'Этап' verbose_name_plural = 'Этапы' class Candidate(models.Model): answer = models.ForeignKey(Answer, related_name='candidates') project = models.ForeignKey(Project, related_name='candidates') status = models.BooleanField(default=False) def __str__(self): return self.answer.user.get_full_name() class Meta: verbose_name = 'Кандидат' verbose_name_plural = 'Кандидаты' class Portfolio(models.Model): description = models.TextField() name = models.CharField(max_length=255) user = models.ForeignKey(User, related_name='portfolio') def __str__(self): return self.name class Meta: verbose_name = 'Портфолио' verbose_name_plural = 'Портфолио' class PortfolioPhoto(models.Model): img = models.ImageField(upload_to='projects/portfolio') portfolio = models.ForeignKey(Portfolio) class Meta: verbose_name = 'Фото портфолио' verbose_name_plural = 'Фото портфолио' # def __str__(self): # return self.img