Advertisement
Guest User

Untitled

a guest
Feb 25th, 2018
76
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.02 KB | None | 0 0
  1. from django.db.models import (Model, CharField, DateTimeField,
  2. SmallIntegerField, ForeignKey,
  3. PositiveIntegerField, PROTECT)
  4.  
  5. from django.contrib.auth.models import User
  6.  
  7. # Create your models here.
  8.  
  9. class Negotiator(User):
  10.  
  11. class Meta:
  12. proxy = True
  13.  
  14.  
  15. #can't implement these methods right now, Agreement requires this class defined
  16.  
  17. def get_associated_agreements(self):
  18. ...
  19.  
  20. def have_failed_agreements(self):
  21. ...
  22.  
  23. class Country(Model):
  24. #longest:the Separate Customs Territory of Taiwan, Penghu, Kinmen, and Matsu
  25. name = CharField(max_length=67, blank=False)
  26. code = CharField(max_length=3, blank=False)
  27.  
  28. def __str__(self):
  29. return f'(Country {self.name})'
  30.  
  31. class Company(Model):
  32. name = CharField(max_length=256, blank=False)
  33. country = ForeignKey(Country, on_delete=PROTECT)
  34.  
  35. def __str__(self):
  36. return f'(Company {self.name} {self.country})'
  37.  
  38. #can't implement these methods right now, Agreement requires this class defined
  39.  
  40. def get_associated_agreements(self):
  41. ...
  42.  
  43. def have_failed_agreements(self):
  44. ...
  45.  
  46. class Agreement(Model):
  47. negotiator = ForeignKey(Negotiator, on_delete=PROTECT) #notify new employee?
  48. begin = DateTimeField(auto_now_add=True, blank=True)
  49. end = DateTimeField(blank=False)
  50. company = ForeignKey(Company, on_delete=PROTECT)
  51. #assuming values can't exceed 2 billions or take negative values
  52. income = PositiveIntegerField(blank=False)
  53. outcome = PositiveIntegerField(blank=False)
  54.  
  55. def __str__(self):
  56. return f'(Agreement {self.negotiator} {self.company})'
  57.  
  58. #can't implement these methods right now, Period requires this class defined
  59.  
  60. def get_associated_periods(self):
  61. ...
  62.  
  63. def check_for_failed(self):
  64. ...
  65.  
  66. class Period(Model):
  67.  
  68. possible_statuses = (
  69. (1,'New'),
  70. (2,'Active'),
  71. (3,'Reconciliation'),
  72. (4,'Closed')
  73. )
  74.  
  75. agreement = ForeignKey(Agreement, on_delete=PROTECT)
  76. begin = DateTimeField(auto_now_add=True, blank=True)
  77. end = DateTimeField(blank=False)
  78. status = SmallIntegerField(choices=possible_statuses,
  79. default=1)
  80.  
  81. def __str__(self):
  82. return f'(Period {self.agreement} {self.end})'
  83.  
  84. #monkey patching, expecting Model.__set__ to not throw attr exception
  85.  
  86. def __get_associated_agreements_neg(self):
  87. yield from Agreement.objects.filter(negotiator=self)
  88.  
  89. def __get_associated_agreements_comp(self):
  90. yield from Agreement.objects.filter(company=self)
  91.  
  92. def __get_associated_periods(self):
  93. yield from Period.objects.filter(agreement=self)
  94.  
  95.  
  96.  
  97. Negotiator.get_associated_agreements = __get_associated_agreements_neg
  98. Company.get_associated_agreements = __get_associated_agreements_comp
  99. Agreement.get_associated_periods = __get_associated_periods
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement