from django.db import models from Info.models import User, Company # Create your models here. class Vendor(models.Model): id = models.AutoField(primary_key=True) code = models.TextField() name = models.TextField() contact = models.TextField() phone = models.TextField() email = models.TextField(blank=True, null=True) address = models.TextField() comment = models.TextField(blank=True, null=True) status = models.TextField(default='sign-off') # 状态 sign-off,normal,EOL creator = models.ForeignKey( to=User, on_delete=models.DO_NOTHING, related_name="create_of_vendor", null=True, blank=True) # 创建人 owner = models.ForeignKey( to=User, on_delete=models.DO_NOTHING, related_name="owner_of_vendor", null=True, blank=True) # 现在的管理者 company = models.ForeignKey(to=Company, on_delete=models.CASCADE, null=True) # 料号归属公司 create_datetime = models.DateTimeField(auto_now_add=True) last_update_datetime = models.DateTimeField(auto_now=True) class Part(models.Model): id = models.AutoField(primary_key=True) part_number = models.TextField() description = models.TextField() comment = models.TextField(blank=True, null=True) version = models.IntegerField(default=0) # 料号的状态,draft,review,production,EOL life_cycle = models.TextField(default='draft') # draft sign-off released expired EOL 表示料号+版本处在生命周期。 # draft sign-off 只能有一个,表示BOM在签核中, # released只能有一个。 # expired可以有多一个,表示旧的版本。 # 如果EOL的话,全部版本都要EOL sub_parts = models.TextField(blank=True, null=True) # 将一个包含下一阶料号ID的list转成string creator = models.ForeignKey( to=User, on_delete=models.DO_NOTHING, related_name="creator_of_part", null=True, blank=True) # 创建人 owner = models.ForeignKey( to=User, on_delete=models.DO_NOTHING, related_name="owner_of_part", null=True, blank=True) # 现在的管理者 company = models.ForeignKey( to=Company, on_delete=models.CASCADE, null=True) # 料号归属公司 source_type = models.TextField(null=True, blank=True, default='build') # 原料来源,采购,生产 vendor = models.ForeignKey( to=Vendor, on_delete=models.CASCADE, blank=True, null=True) # 料号采购公司 vendor_part_number = models.TextField(blank=True, null=True) create_datetime = models.DateTimeField(auto_now_add=True) last_update_datetime = models.DateTimeField(auto_now=True) class PartAttachment(models.Model): id = models.AutoField(primary_key=True) part = models.ForeignKey(to=Part, on_delete=models.CASCADE, blank=True, null=True) storage_type = models.TextField(default="local") # 存储类型 local/cloud 默认为local url = models.TextField() display_name = models.TextField() creator = models.ForeignKey(to=User, on_delete=models.DO_NOTHING, null=True, blank=True) # 创建人 company = models.ForeignKey( to=Company, on_delete=models.CASCADE, null=True) create_datetime = models.DateTimeField(auto_now_add=True) last_update_datetime = models.DateTimeField(auto_now=True) class VendorAttachment(models.Model): id = models.AutoField(primary_key=True) vendor = models.ForeignKey(to=Vendor, on_delete=models.CASCADE, blank=True, null=True) storage_type = models.TextField(default="local") # 存储类型 local/cloud 默认为local url = models.TextField() display_name = models.TextField() creator = models.ForeignKey(to=User, on_delete=models.DO_NOTHING, null=True, blank=True) # 创建人 company = models.ForeignKey( to=Company, on_delete=models.CASCADE, null=True) create_datetime = models.DateTimeField(auto_now_add=True) last_update_datetime = models.DateTimeField(auto_now=True) class BOMSetting(models.Model): id = models.AutoField(primary_key=True) company = models.ForeignKey(to=Company, on_delete=models.CASCADE, null=True) auto_pn = models.BooleanField(default=False) auto_ver = models.BooleanField(default=True) auto_supplier_code = models.BooleanField(default=True) part_ecn_default_approvers = models.TextField(blank=True, null=True) vendor_ecn_default_approvers = models.TextField(blank=True, null=True) attachment_maxsize = models.IntegerField(default=1000) # 默认公司保存附件大小(单位M) create_datetime = models.DateTimeField(auto_now_add=True) last_update_datetime = models.DateTimeField(auto_now=True) class BOM(models.Model): id = models.AutoField(primary_key=True) parent_part = models.ForeignKey(to=Part, on_delete=models.CASCADE, related_name="parent_part") # child_part = models.ForeignKey(to=Part, on_delete=models.CASCADE, related_name="child_part") child_pn = models.TextField() # child PN 只记录子料号,不记录版本等其他信息。所以不适用foreign key qty = models.DecimalField(max_digits=9, decimal_places=4) creator = models.ForeignKey(to=User, on_delete=models.DO_NOTHING, null=True, blank=True) create_datetime = models.DateTimeField(auto_now_add=True) last_update_datetime = models.DateTimeField(auto_now=True) class ECN(models.Model): id = models.AutoField(primary_key=True) number = models.TextField() creator = models.ForeignKey(to=User, on_delete=models.DO_NOTHING, related_name="create_of_ecn", null=True, blank=True) # 创建人 company = models.ForeignKey(to=Company, on_delete=models.CASCADE, null=True) # ECN归属公司 status = models.TextField(default='签核中') # 状态,默认签核中,d,拒绝,撤回sign-off,release,reject,widthdraw。不能删除,否则将导致ECN number出错 comment = models.TextField(blank=True, null=True) category = models.TextField() # 类型 part, vendor target_part = models.ForeignKey(to=Part, on_delete=models.CASCADE, null=True) target_vendor = models.ForeignKey(to=Vendor, on_delete=models.CASCADE, null=True) create_datetime = models.DateTimeField(auto_now_add=True) last_update_datetime = models.DateTimeField(auto_now=True) class EcnSignOff(models.Model): id = models.AutoField(primary_key=True) company = models.ForeignKey(to=Company, on_delete=models.CASCADE, null=True) # ECN sign off归属公司 ecn = models.ForeignKey(to=ECN, on_delete=models.CASCADE) owner = models.ForeignKey(to=User, on_delete=models.DO_NOTHING, related_name="ecn_sign_off_owner", null=True, blank=True) # 签核的人 comment = models.TextField(blank=True, null=True) status = models.TextField(default='签核中') # 状态,默认签核中,批准,拒绝 create_datetime = models.DateTimeField(auto_now_add=True) last_update_datetime = models.DateTimeField(auto_now=True)