Brak opisu

models.py 6.7KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186
  1. from django.db import models
  2. # Create your models here.
  3. # Enumerations
  4. class MaterialType(models.TextChoices):
  5. METAL = 'Metal'
  6. PLASTIC = 'Plastic'
  7. GLASS = 'Glass'
  8. PAPER = 'Paper'
  9. ELECTRONIC_WASTE = 'Electronic Waste'
  10. ORGANIC_WASTE = 'Organic Waste'
  11. TEXTILE = 'Textile'
  12. class MetalSubType(models.TextChoices):
  13. FERROUS_IRON = 'Ferrous - Iron'
  14. FERROUS_STEEL = 'Ferrous - Steel'
  15. NONFERROUS_ALUMINUM = 'Non-Ferrous - Aluminum'
  16. NONFERROUS_COPPER = 'Non-Ferrous - Copper'
  17. NONFERROUS_BRASS = 'Non-Ferrous - Brass'
  18. class PlasticSubType(models.TextChoices):
  19. PET = 'PET'
  20. HDPE = 'HDPE'
  21. PVC = 'PVC'
  22. LDPE = 'LDPE'
  23. PP = 'PP'
  24. PS = 'PS'
  25. class GlassSubType(models.TextChoices):
  26. CONTAINER_BOTTLES = 'Container - Bottles'
  27. CONTAINER_JARS = 'Container - Jars'
  28. FLAT_WINDOWS = 'Flat - Windows'
  29. FLAT_MIRRORS = 'Flat - Mirrors'
  30. class PaperSubType(models.TextChoices):
  31. CARDBOARD = 'Cardboard'
  32. OFFICE_PAPER = 'Office Paper'
  33. NEWSPAPER = 'Newspaper'
  34. MAGAZINES = 'Magazines'
  35. class EWasteSubType(models.TextChoices):
  36. COMPUTERS = 'Computers'
  37. MOBILE_PHONES = 'Mobile Phones'
  38. TELEVISIONS = 'Televisions'
  39. SMALL_APPLIANCES = 'Small Appliances'
  40. class OrganicWasteSubType(models.TextChoices):
  41. FOOD_WASTE = 'Food Waste'
  42. YARD_WASTE = 'Yard Waste'
  43. AGRICULTURAL_WASTE = 'Agricultural Waste'
  44. class TextileSubType(models.TextChoices):
  45. NATURAL_COTTON = 'Natural - Cotton'
  46. NATURAL_WOOL = 'Natural - Wool'
  47. SYNTHETIC_POLYESTER = 'Synthetic - Polyester'
  48. SYNTHETIC_NYLON = 'Synthetic - Nylon'
  49. class OperationType(models.TextChoices):
  50. COLLECTION = 'Collection'
  51. SORTING = 'Sorting'
  52. PROCESSING = 'Processing'
  53. SHREDDING = 'Shredding'
  54. MELTING = 'Melting'
  55. GRANULATING = 'Granulating'
  56. PACKAGING = 'Packaging'
  57. DISTRIBUTION = 'Distribution'
  58. class ReportType(models.TextChoices):
  59. COLLECTION = 'Collection Report'
  60. PROCESSING = 'Processing Report'
  61. EFFICIENCY = 'Recycling Efficiency Report'
  62. COMPLIANCE = 'Compliance Report'
  63. SUSTAINABILITY = 'Sustainability Report'
  64. FINANCIAL = 'Financial Report'
  65. INVENTORY = 'Inventory Report'
  66. class RegulationType(models.TextChoices):
  67. ENVIRONMENTAL_PROTECTION = 'Environmental Protection Act'
  68. WASTE_MANAGEMENT = 'Waste Management Act'
  69. RECYCLING_GUIDELINES = 'Recycling and Reuse Guidelines'
  70. HAZARDOUS_WASTE = 'Hazardous Waste Regulations'
  71. AIR_QUALITY = 'Air Quality Standards'
  72. WATER_QUALITY = 'Water Quality Standards'
  73. HEALTH_SAFETY = 'Occupational Health and Safety Regulations'
  74. class ComplianceStatus(models.TextChoices):
  75. PENDING = 'Pending'
  76. IN_PROGRESS = 'In Progress'
  77. COMPLETED = 'Completed'
  78. FAILED = 'Failed'
  79. NOT_APPLICABLE = 'Not Applicable'
  80. class AuthorityType(models.TextChoices):
  81. EPA = 'Environmental Protection Agency (EPA)'
  82. LOCAL_GOVERNMENT = 'Local Government'
  83. HEALTH_SAFETY = 'Health and Safety Authority'
  84. WASTE_MANAGEMENT = 'Waste Management Authority'
  85. RECYCLING_BOARD = 'Recycling Compliance Board'
  86. SUSTAINABILITY_COUNCIL = 'Sustainability Council'
  87. # Database Models
  88. class Role(models.Model):
  89. role_name = models.CharField(max_length=100)
  90. class Permission(models.Model):
  91. permission_name = models.CharField(max_length=100)
  92. class RolePermission(models.Model):
  93. role = models.ForeignKey(Role, on_delete=models.CASCADE)
  94. permission = models.ForeignKey(Permission, on_delete=models.CASCADE)
  95. class User(models.Model):
  96. username = models.CharField(max_length=100)
  97. password_hash = models.CharField(max_length=255)
  98. email = models.EmailField(unique=True)
  99. role = models.ForeignKey(Role, on_delete=models.CASCADE)
  100. created_at = models.DateTimeField(auto_now_add=True)
  101. class Customer(models.Model):
  102. name = models.CharField(max_length=100)
  103. contact_info = models.TextField()
  104. email = models.EmailField(blank=True, null=True)
  105. phone_number = models.CharField(max_length=15, blank=True)
  106. class Material(models.Model):
  107. material_name = models.CharField(max_length=100, choices=MaterialType.choices)
  108. description = models.TextField()
  109. created_at = models.DateTimeField(auto_now_add=True)
  110. updated_at = models.DateTimeField(auto_now=True)
  111. class MaterialDetail(models.Model):
  112. material = models.ForeignKey(Material, on_delete=models.CASCADE)
  113. subtype = models.CharField(max_length=100)
  114. class Operation(models.Model):
  115. material = models.ForeignKey(Material, on_delete=models.CASCADE)
  116. customer = models.ForeignKey(Customer, on_delete=models.CASCADE)
  117. operation_type = models.CharField(max_length=100, choices=OperationType.choices)
  118. quantity = models.DecimalField(max_digits=10, decimal_places=2)
  119. operation_date = models.DateTimeField()
  120. created_at = models.DateTimeField(auto_now_add=True)
  121. updated_at = models.DateTimeField(auto_now=True)
  122. class Regulation(models.Model):
  123. regulation_name = models.CharField(max_length=100, choices=RegulationType.choices)
  124. description = models.TextField()
  125. authority = models.ForeignKey('Authority', on_delete=models.CASCADE)
  126. created_at = models.DateTimeField(auto_now_add=True)
  127. updated_at = models.DateTimeField(auto_now=True)
  128. class ComplianceCheck(models.Model):
  129. regulation = models.ForeignKey(Regulation, on_delete=models.CASCADE)
  130. user = models.ForeignKey(User, on_delete=models.CASCADE)
  131. operation = models.ForeignKey(Operation, on_delete=models.CASCADE)
  132. status = models.CharField(max_length=100, choices=ComplianceStatus.choices)
  133. check_date = models.DateTimeField()
  134. remarks = models.TextField()
  135. class Report(models.Model):
  136. report_name = models.CharField(max_length=100, choices=ReportType.choices)
  137. user = models.ForeignKey(User, on_delete=models.CASCADE)
  138. report_data = models.TextField()
  139. created_at = models.DateTimeField(auto_now_add=True)
  140. class AuditLog(models.Model):
  141. user = models.ForeignKey(User, on_delete=models.CASCADE)
  142. action = models.CharField(max_length=255)
  143. action_details = models.TextField()
  144. action_time = models.DateTimeField(auto_now_add=True)
  145. class Authority(models.Model):
  146. authority_name = models.CharField(max_length=100, choices=AuthorityType.choices)
  147. contact_info = models.TextField()
  148. class SustainabilityTracking(models.Model):
  149. operation = models.ForeignKey(Operation, on_delete=models.CASCADE)
  150. carbon_footprint = models.DecimalField(max_digits=10, decimal_places=2)
  151. sustainability_measures = models.TextField()
  152. class SupportTicket(models.Model):
  153. user = models.ForeignKey(User, on_delete=models.CASCADE)
  154. customer = models.ForeignKey(Customer, on_delete=models.CASCADE)
  155. issue = models.TextField()
  156. created_at = models.DateTimeField(auto_now_add=True)
  157. resolution = models.TextField(null=True, blank=True)