models.py 4.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136
  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. # Create your models here.
  7. #Соответствие названий и номеров дней недели
  8. class Common:
  9. day_names = ("Понедельник","Вторник","Среда","Четверг","Пятница","Суббота","Воскресенье")
  10. day_colors = ("FFFFFF","FFFFFF","FFFFFF","FFFFFF","FFFFFF","#FFE4E1", "#FFE4E1")
  11. #Изделия
  12. class Product(models.Model):
  13. name = models.CharField(max_length=150)
  14. prod_period = models.IntegerField()#трудоемкость, дней
  15. def __unicode__(self):
  16. return self.name
  17. #Таблица посещаемости
  18. class Attendance(models.Model):
  19. date = models.DateField()
  20. calls = models.IntegerField()
  21. visits = models.IntegerField()
  22. @property
  23. def date_dd_mm_yy(self):
  24. return self.date.strftime("%d/%m/%Y")
  25. @property
  26. def date_as_tuple(self):
  27. return tuple(self.date_dd_mm_yy().split("/"))
  28. @property
  29. def week_day(self):
  30. day_number = self.date.weekday()
  31. day_name = Common.day_names[day_number]
  32. return day_name
  33. @property
  34. def day_color(self):
  35. day_number = self.date.weekday()
  36. color = Common.day_colors[day_number]
  37. return color
  38. @property
  39. def order_count(self):
  40. return Order.objects.filter(date=self.date).count()
  41. @property
  42. def orders_price(self):
  43. orders = Order.objects.filter(date=self.date)
  44. day_price = sum(o.price for o in orders)
  45. return day_price
  46. #Заказы
  47. class Order(models.Model):
  48. date = models.DateField() #дата
  49. product = models.ForeignKey(Product) #id изделия
  50. price = models.DecimalField(max_digits=12, decimal_places=2) #стоимость
  51. address = models.CharField(max_length=150) #адрес
  52. designer = models.ForeignKey(User, related_name='+') #id дизайнера
  53. deadline = models.DateField() #срок сдачи
  54. delivery = models.BooleanField(default=False) #доставка
  55. lifting = models.BooleanField(default=False) #подъем
  56. paid = models.DecimalField(max_digits=12, decimal_places=2) #оплачено
  57. approved = models.DateTimeField(null=True, blank = True) #согласовано
  58. executor = models.ForeignKey(User, related_name='+') #id исполнителя
  59. is_done = models.BooleanField(default=False) #сдан
  60. calls = models.TextField(null=True, blank = True) #обзвон
  61. contact = models.CharField(max_length=150, null=True, blank = True) #контактное лицо
  62. phone_num = models.CharField(max_length=150,null=True, blank = True) #контактный телефон
  63. cancelled = models.BooleanField(default=False) #отменен
  64. def __unicode__(self):
  65. return ', '.join((self.date.strftime('%d %b %Y'), self.product.name, self.address))
  66. @property
  67. def date_dmy(self):
  68. return self.date.strftime("%d/%m/%Y")
  69. @property
  70. def deadline_dmy(self):
  71. return self.deadline.strftime("%d/%m/%Y")
  72. @property
  73. def approved_date(self):
  74. return self.approved.strftime("%d/%m/%Y")
  75. @property
  76. def ostatok(self):
  77. return self.price-self.paid
  78. @property
  79. def calls_color(self):
  80. need_color=False
  81. if self.approved!=None:
  82. need_color = (date.today()-self.approved.date()>= timedelta(days = 10))
  83. return need_color
  84. #Эскизы
  85. class Sketch(models.Model):
  86. sketch_file = models.FileField(upload_to = 'sketches') #путь к файу
  87. order = models.ForeignKey(Order) #id заказа
  88. def __unicode__(self):
  89. return self.sketch_file.name
  90. #Действия
  91. class Action(models.Model):
  92. name = models.CharField(max_length=150) #наименование действия
  93. #Производственный план
  94. class ProdPlan(models.Model):
  95. start_date = models.DateField() #дата начала
  96. end_date = models.DateField() #дата окончания
  97. order = models.ForeignKey(Order) #id заказа
  98. executor = models.ForeignKey(User) #id исполнителя
  99. action = models.ForeignKey(Action) #id действия
  100. #Протокол доступа
  101. class AccessProtocol(models.Model):
  102. time = models.DateTimeField() #время
  103. user = models.ForeignKey(User) #id пользователя
  104. event = models.CharField(max_length=150) #действие
  105. #План заказов
  106. class OrderPlan(models.Model):
  107. date = models.DateField()
  108. plan = models.IntegerField()
  109. def __unicode__(self):
  110. return self.date.strftime('%B %Y')