models.py 5.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148
  1. #!/usr/bin/env python
  2. # -*- coding: utf-8 -*-
  3. from django.db import models
  4. from django.contrib.auth.models import User
  5. from datetime import date, timedelta
  6. #Изделия
  7. class Product(models.Model):
  8. name = models.CharField(max_length=150)
  9. prod_period = models.IntegerField()#трудоемкость, дней
  10. def __unicode__(self):
  11. return self.name
  12. #График работы
  13. class Schedule(models.Model):
  14. date = models.DateField()
  15. designer = models.ForeignKey(User)
  16. def __unicode__(self):
  17. return ' '.join((self.designer.first_name, self.designer.last_name))
  18. #Таблица посещаемости
  19. class Attendance(models.Model):
  20. date = models.DateField()
  21. calls = models.IntegerField()
  22. visits = models.IntegerField()
  23. @property
  24. def date_dd_mm_yy(self):
  25. return self.date.strftime("%d/%m/%Y")
  26. @property
  27. def date_as_tuple(self):
  28. return tuple(self.date_dd_mm_yy().split("/"))
  29. @property
  30. def order_count(self):
  31. return Order.objects.filter(date=self.date).count()
  32. @property
  33. def orders_price(self):
  34. orders = Order.objects.filter(date=self.date)
  35. day_price = sum(o.price for o in orders)
  36. return day_price
  37. #Статьи затрат
  38. class CostItem(models.Model):
  39. name = models.CharField(max_length=150)
  40. default_item = models.BooleanField(default=False)
  41. def __unicode__(self):
  42. return self.name
  43. #Заказы
  44. class Order(models.Model):
  45. date = models.DateField() #дата
  46. product = models.ForeignKey(Product) #id изделия
  47. price = models.DecimalField(max_digits=12, decimal_places=2) #стоимость
  48. address = models.CharField(max_length=150) #адрес
  49. designer = models.ForeignKey(User, related_name='+') #id дизайнера
  50. deadline = models.DateField() #срок сдачи
  51. delivery = models.BooleanField(default=False) #доставка
  52. lifting = models.BooleanField(default=False) #подъем
  53. paid = models.DecimalField(max_digits=12, decimal_places=2) #оплачено
  54. approved = models.DateTimeField(null=True, blank = True) #согласовано
  55. executor = models.ForeignKey(User, null = True, blank = True, related_name='+') #id исполнителя
  56. is_done = models.BooleanField(default=False) #сдан
  57. calls = models.TextField(null=True, blank = True) #обзвон
  58. contact = models.CharField(max_length=150, null=True, blank = True) #контактное лицо
  59. phone_num = models.CharField(max_length=150,null=True, blank = True) #контактный телефон
  60. cancelled = models.BooleanField(default=False) #отменен
  61. cost_items = models.ManyToManyField(CostItem, through='OrderCosts', related_name='+', null=True, blank=True) #статьи затрат
  62. def __unicode__(self):
  63. return ', '.join((self.date.strftime('%d %b %Y'), self.product.name, self.address))
  64. @property
  65. def date_dmy(self):
  66. return self.date.strftime("%d/%m/%Y")
  67. @property
  68. def deadline_dmy(self):
  69. return self.deadline.strftime("%d/%m/%Y")
  70. @property
  71. def approved_date(self):
  72. return self.approved.strftime("%d/%m/%Y %H:%M")
  73. @property
  74. def sketch(self):
  75. return len(Sketch.objects.filter(order = self))
  76. @property
  77. def ostatok(self):
  78. return self.price-self.paid
  79. @property
  80. def calls_color(self):
  81. need_color=False
  82. if self.approved!=None:
  83. need_color = (date.today()-self.approved.date()>= timedelta(days = 10))
  84. return need_color
  85. #Эскизы
  86. class Sketch(models.Model):
  87. sketch_file = models.FileField(upload_to = 'sketches/') #путь к файу
  88. order = models.ForeignKey(Order) #id заказа
  89. def __unicode__(self):
  90. return self.sketch_file.name
  91. #Действия
  92. class Action(models.Model):
  93. name = models.CharField(max_length=150) #наименование действия
  94. #Производственный план
  95. class ProdPlan(models.Model):
  96. start_date = models.DateField() #дата начала
  97. end_date = models.DateField() #дата окончания
  98. order = models.ForeignKey(Order) #id заказа
  99. executor = models.ForeignKey(User) #id исполнителя
  100. action = models.ForeignKey(Action) #id действия
  101. #Протокол доступа
  102. class AccessProtocol(models.Model):
  103. time = models.DateTimeField() #время
  104. user = models.ForeignKey(User) #id пользователя
  105. event = models.CharField(max_length=150) #действие
  106. #План заказов
  107. class OrderPlan(models.Model):
  108. date = models.DateField()
  109. plan = models.DecimalField(max_digits=12, decimal_places=2)
  110. def __unicode__(self):
  111. return self.date.strftime('%B %Y')
  112. # Затраты по заказам
  113. class OrderCosts(models.Model):
  114. order = models.ForeignKey(Order, related_name='+')
  115. cost_item = models.ForeignKey(CostItem, related_name='+')
  116. value = models.DecimalField(max_digits=12, decimal_places=2, null=True, blank = True)
  117. formula = models.CharField(max_length=150, null=True, blank = True)
  118. def __unicode__(self):
  119. return ', '.join((self.order.product.name, self.cost_item.name))