models.py 6.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125
  1. from django.db import models
  2. from Info.models import User, Company
  3. # Create your models here.
  4. class Vendor(models.Model):
  5. id = models.AutoField(primary_key=True)
  6. code = models.TextField()
  7. name = models.TextField()
  8. contact = models.TextField()
  9. phone = models.TextField()
  10. email = models.TextField(blank=True, null=True)
  11. address = models.TextField()
  12. comment = models.TextField(blank=True, null=True)
  13. status = models.TextField(default='sign-off') # 状态 sign-off,normal,EOL
  14. creator = models.ForeignKey(
  15. to=User, on_delete=models.DO_NOTHING, related_name="create_of_vendor", null=True, blank=True) # 创建人
  16. owner = models.ForeignKey(
  17. to=User, on_delete=models.DO_NOTHING, related_name="owner_of_vendor", null=True, blank=True) # 现在的管理者
  18. company = models.ForeignKey(to=Company, on_delete=models.CASCADE, null=True) # 料号归属公司
  19. create_datetime = models.DateTimeField(auto_now_add=True)
  20. last_update_datetime = models.DateTimeField(auto_now=True)
  21. class Part(models.Model):
  22. id = models.AutoField(primary_key=True)
  23. part_number = models.TextField()
  24. description = models.TextField()
  25. comment = models.TextField(blank=True, null=True)
  26. version = models.IntegerField(default=0)
  27. # 料号的状态,draft,review,production,EOL
  28. life_cycle = models.TextField(default='draft')
  29. # draft sign-off released expired EOL 表示料号+版本处在生命周期。
  30. # draft sign-off 只能有一个,表示BOM在签核中,
  31. # released只能有一个。
  32. # expired可以有多一个,表示旧的版本。
  33. # 如果EOL的话,全部版本都要EOL
  34. sub_parts = models.TextField(blank=True, null=True) # 将一个包含下一阶料号ID的list转成string
  35. creator = models.ForeignKey(
  36. to=User, on_delete=models.DO_NOTHING, related_name="creator_of_part", null=True, blank=True) # 创建人
  37. owner = models.ForeignKey(
  38. to=User, on_delete=models.DO_NOTHING, related_name="owner_of_part", null=True, blank=True) # 现在的管理者
  39. company = models.ForeignKey(
  40. to=Company, on_delete=models.CASCADE, null=True) # 料号归属公司
  41. source_type = models.TextField(null=True, blank=True, default='build') # 原料来源,采购,生产
  42. vendor = models.ForeignKey(
  43. to=Vendor, on_delete=models.CASCADE, blank=True, null=True) # 料号采购公司
  44. vendor_part_number = models.TextField(blank=True, null=True)
  45. create_datetime = models.DateTimeField(auto_now_add=True)
  46. last_update_datetime = models.DateTimeField(auto_now=True)
  47. class PartAttachment(models.Model):
  48. id = models.AutoField(primary_key=True)
  49. part = models.ForeignKey(to=Part, on_delete=models.CASCADE, blank=True, null=True)
  50. storage_type = models.TextField(default="local") # 存储类型 local/cloud 默认为local
  51. url = models.TextField()
  52. display_name = models.TextField()
  53. creator = models.ForeignKey(to=User, on_delete=models.DO_NOTHING, null=True, blank=True) # 创建人
  54. company = models.ForeignKey( to=Company, on_delete=models.CASCADE, null=True)
  55. create_datetime = models.DateTimeField(auto_now_add=True)
  56. last_update_datetime = models.DateTimeField(auto_now=True)
  57. class VendorAttachment(models.Model):
  58. id = models.AutoField(primary_key=True)
  59. vendor = models.ForeignKey(to=Vendor, on_delete=models.CASCADE, blank=True, null=True)
  60. storage_type = models.TextField(default="local") # 存储类型 local/cloud 默认为local
  61. url = models.TextField()
  62. display_name = models.TextField()
  63. creator = models.ForeignKey(to=User, on_delete=models.DO_NOTHING, null=True, blank=True) # 创建人
  64. company = models.ForeignKey( to=Company, on_delete=models.CASCADE, null=True)
  65. create_datetime = models.DateTimeField(auto_now_add=True)
  66. last_update_datetime = models.DateTimeField(auto_now=True)
  67. class BOMSetting(models.Model):
  68. id = models.AutoField(primary_key=True)
  69. company = models.ForeignKey(to=Company, on_delete=models.CASCADE, null=True)
  70. auto_pn = models.BooleanField(default=False)
  71. auto_ver = models.BooleanField(default=True)
  72. auto_supplier_code = models.BooleanField(default=True)
  73. part_ecn_default_approvers = models.TextField(blank=True, null=True)
  74. vendor_ecn_default_approvers = models.TextField(blank=True, null=True)
  75. attachment_maxsize = models.IntegerField(default=1000) # 默认公司保存附件大小(单位M)
  76. create_datetime = models.DateTimeField(auto_now_add=True)
  77. last_update_datetime = models.DateTimeField(auto_now=True)
  78. class BOM(models.Model):
  79. id = models.AutoField(primary_key=True)
  80. parent_part = models.ForeignKey(to=Part, on_delete=models.CASCADE, related_name="parent_part")
  81. # child_part = models.ForeignKey(to=Part, on_delete=models.CASCADE, related_name="child_part")
  82. child_pn = models.TextField() # child PN 只记录子料号,不记录版本等其他信息。所以不适用foreign key
  83. qty = models.DecimalField(max_digits=9, decimal_places=4)
  84. creator = models.ForeignKey(to=User, on_delete=models.DO_NOTHING, null=True, blank=True)
  85. create_datetime = models.DateTimeField(auto_now_add=True)
  86. last_update_datetime = models.DateTimeField(auto_now=True)
  87. class ECN(models.Model):
  88. id = models.AutoField(primary_key=True)
  89. number = models.TextField()
  90. creator = models.ForeignKey(to=User, on_delete=models.DO_NOTHING, related_name="create_of_ecn", null=True, blank=True) # 创建人
  91. company = models.ForeignKey(to=Company, on_delete=models.CASCADE, null=True) # ECN归属公司
  92. status = models.TextField(default='签核中') # 状态,默认签核中,d,拒绝,撤回sign-off,release,reject,widthdraw。不能删除,否则将导致ECN number出错
  93. comment = models.TextField(blank=True, null=True)
  94. category = models.TextField() # 类型 part, vendor
  95. target_part = models.ForeignKey(to=Part, on_delete=models.CASCADE, null=True)
  96. target_vendor = models.ForeignKey(to=Vendor, on_delete=models.CASCADE, null=True)
  97. create_datetime = models.DateTimeField(auto_now_add=True)
  98. last_update_datetime = models.DateTimeField(auto_now=True)
  99. class EcnSignOff(models.Model):
  100. id = models.AutoField(primary_key=True)
  101. company = models.ForeignKey(to=Company, on_delete=models.CASCADE, null=True) # ECN sign off归属公司
  102. ecn = models.ForeignKey(to=ECN, on_delete=models.CASCADE)
  103. owner = models.ForeignKey(to=User, on_delete=models.DO_NOTHING, related_name="ecn_sign_off_owner", null=True, blank=True) # 签核的人
  104. comment = models.TextField(blank=True, null=True)
  105. status = models.TextField(default='签核中') # 状态,默认签核中,批准,拒绝
  106. create_datetime = models.DateTimeField(auto_now_add=True)
  107. last_update_datetime = models.DateTimeField(auto_now=True)