models.py 9.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217
  1. from django.db import models
  2. class InboundBill(models.Model):
  3. BOUND_TYPE = (
  4. (1, '生产入库'),
  5. (2, '采购入库'),
  6. (3, '其他入库'),
  7. (4, '调拨入库'),
  8. )
  9. STATUS_CHOICES = (
  10. (0, '草稿'),
  11. (1, '汇报'),
  12. )
  13. # 质检状态:0 质检 1 部分质检 2 全部质检 3 无需质检 4 质检不通过
  14. QC_STATUS_CHOICES = (
  15. (0, '未质检'),
  16. (1, '部分质检'),
  17. (2, '全部质检'),
  18. (3, '无需质检'),
  19. (4, '质检不通过'),
  20. )
  21. billId = models.BigIntegerField(primary_key=True,verbose_name='原始单据ID')
  22. number = models.CharField(max_length=50, unique=True, verbose_name='单据编号')
  23. type = models.IntegerField(choices=BOUND_TYPE, verbose_name='绑定类型')
  24. date = models.CharField(max_length=10, verbose_name='入库时间')
  25. department = models.CharField(max_length=100, verbose_name='部门', null=True)
  26. warehouse = models.CharField(max_length=100, verbose_name='仓库', default='W01')
  27. creater = models.CharField(max_length=50, verbose_name='创建人', null=True)
  28. note = models.TextField(blank=True, verbose_name='备注说明', null=True)
  29. totalCount = models.IntegerField(verbose_name='总条目数')
  30. create_time = models.DateTimeField(auto_now_add=True, verbose_name='创建时间')
  31. update_time = models.DateTimeField(auto_now=True, verbose_name='更新时间')
  32. bound_status = models.IntegerField(default=0,choices=STATUS_CHOICES, verbose_name='状态')
  33. is_delete = models.BooleanField(default=False, verbose_name='是否删除')
  34. audit_status = models.IntegerField(default=0, verbose_name='审核状态')
  35. save_status = models.IntegerField(default=0, verbose_name='保存状态')
  36. qc_status = models.IntegerField(default=0,choices=QC_STATUS_CHOICES, verbose_name='质检状态')
  37. erp_audit_id = models.CharField(max_length=1000,null=True, verbose_name='ERP审核ID')
  38. erp_save_id = models.CharField(max_length=1000,null=True, verbose_name='ERP保存ID')
  39. class Meta:
  40. verbose_name = '生产入库单'
  41. verbose_name_plural = verbose_name
  42. ordering = [ 'bound_status','-create_time','-update_time']
  43. class InboundBillOperateLog(models.Model):
  44. """入库单日志"""
  45. log_type_choices = (
  46. ('create', '创建'),
  47. ('update', '更新'),
  48. ('erp_audit', 'erp审核'),
  49. ('erp_save', 'erp保存'),
  50. ('wms_audit', 'wms审核'),
  51. ('update_batch', 'erp质检'),
  52. ('delete', '删除'),
  53. ('cancel', '取消'),
  54. ('submit', '提交'),
  55. ('confirm', '确认'),
  56. ('reject', '驳回'),
  57. ('confirm_submit', '确认提交'),
  58. ('confirm_audit', '确认审核'),
  59. ('confirm_cancel', '确认取消'),
  60. )
  61. billId = models.ForeignKey(
  62. InboundBill,
  63. on_delete=models.CASCADE,
  64. related_name='bill_id_log',
  65. verbose_name='所属入库单'
  66. )
  67. log_type = models.CharField(max_length=20,choices=log_type_choices, verbose_name='操作类型')
  68. log_content = models.TextField(verbose_name='操作内容')
  69. create_time = models.DateTimeField(auto_now_add=True, verbose_name='创建时间')
  70. update_time = models.DateTimeField(auto_now=True, verbose_name='更新时间')
  71. class Meta:
  72. verbose_name = '入库单日志'
  73. verbose_name_plural = verbose_name
  74. ordering = ['-update_time', '-create_time']
  75. class OutboundBill(models.Model):
  76. BOUND_TYPE = (
  77. (1, '订单'),
  78. (2, '其他'),
  79. )
  80. STATUS_CHOICES = (
  81. (0, '草稿'),
  82. (1, '已审批'),
  83. (2, '已入库'),
  84. (3, '已取消'),
  85. )
  86. QC_STATUS_CHOICES = (
  87. (0, '未质检'),
  88. (1, '部分质检'),
  89. (2, '全部质检'),
  90. (3, '无需质检'),
  91. (4, '质检不通过'),
  92. )
  93. billId = models.BigIntegerField(primary_key=True,verbose_name='原始单据ID')
  94. number = models.CharField(max_length=50, unique=True, verbose_name='单据编号')
  95. type = models.IntegerField(choices=BOUND_TYPE, verbose_name='绑定类型')
  96. date = models.CharField(max_length=10, verbose_name='出库时间')
  97. department = models.CharField(max_length=10, verbose_name='部门', null=True,blank=True)
  98. warehouse = models.CharField(max_length=10, verbose_name='仓库', default='W01')
  99. creater = models.CharField(max_length=50, verbose_name='创建人', null=True,blank=True)
  100. note = models.TextField(blank=True, verbose_name='备注说明', null=True)
  101. totalCount = models.IntegerField(verbose_name='总条目数')
  102. create_time = models.DateTimeField(auto_now_add=True, verbose_name='创建时间')
  103. update_time = models.DateTimeField(auto_now=True, verbose_name='更新时间')
  104. bound_status = models.IntegerField(default=0, choices=STATUS_CHOICES,verbose_name='状态')
  105. is_delete = models.BooleanField(default=False, verbose_name='是否删除')
  106. audit_status = models.IntegerField(default=0, verbose_name='审核状态')
  107. save_status = models.IntegerField(default=0, verbose_name='保存状态')
  108. qc_status = models.IntegerField(default=0,choices=QC_STATUS_CHOICES, verbose_name='质检状态')
  109. erp_audit_id = models.CharField(max_length=1000,null=True, verbose_name='ERP审核ID')
  110. erp_save_id = models.CharField(max_length=1000,null=True, verbose_name='ERP保存ID')
  111. class Meta:
  112. verbose_name = '出库单'
  113. verbose_name_plural = verbose_name
  114. ordering = [ 'bound_status','-create_time','-update_time']
  115. class OutboundBillOperateLog(models.Model):
  116. """出库单日志"""
  117. billId = models.ForeignKey(
  118. OutboundBill,
  119. on_delete=models.CASCADE,
  120. related_name='bill_id_log',
  121. verbose_name='所属出库单'
  122. )
  123. log_type = models.CharField(max_length=20, verbose_name='操作类型')
  124. log_content = models.TextField(verbose_name='操作内容')
  125. create_time = models.DateTimeField(auto_now_add=True, verbose_name='创建时间')
  126. update_time = models.DateTimeField(auto_now=True, verbose_name='更新时间')
  127. class Meta:
  128. verbose_name = '出库单日志'
  129. verbose_name_plural = verbose_name
  130. ordering = ['-update_time', '-create_time']
  131. class MaterialDetail(models.Model):
  132. """物料明细模型"""
  133. bound_billId = models.ForeignKey(
  134. InboundBill,
  135. on_delete=models.CASCADE,
  136. related_name='bill_id',
  137. verbose_name='所属入库单'
  138. )
  139. STATUS_CHOICES = (
  140. (0, '未质检'),
  141. (1, '已质检'),
  142. )
  143. entryIds = models.BigIntegerField(verbose_name='分录ID')
  144. production_batch = models.CharField(max_length=50, verbose_name='生产批次')
  145. material_goods_code = models.CharField(max_length=20, default='', verbose_name='物料编码', null=True, blank=True)
  146. material_batch_order = models.CharField(max_length=20, default='', verbose_name='物料批次', null=True, blank=True)
  147. goods_code = models.CharField(max_length=20, verbose_name='商品编码')
  148. goods_name = models.CharField(max_length=100, verbose_name='商品名称')
  149. goods_std = models.CharField(max_length=50, verbose_name='商品规格')
  150. goods_weight = models.DecimalField(max_digits=10, decimal_places=2, verbose_name='单件重量', default=1)
  151. plan_qty = models.IntegerField(verbose_name='计划数量')
  152. goods_total_weight = models.DecimalField(max_digits=10, decimal_places=2, verbose_name='总重量', null=True)
  153. goods_unit = models.CharField(max_length=20, verbose_name='计量单位')
  154. note = models.TextField(blank=True, verbose_name='备注')
  155. status = models.IntegerField(choices=STATUS_CHOICES, verbose_name='质检状态', default=0)
  156. create_time = models.DateTimeField(auto_now_add=True, verbose_name='创建时间')
  157. update_time = models.DateTimeField(auto_now=True, verbose_name='更新时间')
  158. is_delete = models.BooleanField(default=False, verbose_name='是否删除')
  159. class Meta:
  160. verbose_name = '物料明细'
  161. verbose_name_plural = verbose_name
  162. unique_together = [('bound_billId', 'entryIds')]
  163. ordering = ['-update_time', '-create_time']
  164. class OutMaterialDetail(models.Model):
  165. """物料明细模型"""
  166. bound_billId = models.ForeignKey(
  167. OutboundBill,
  168. on_delete=models.CASCADE,
  169. related_name='bill_id',
  170. verbose_name='所属出库单'
  171. )
  172. Material_entryIds = models.ForeignKey(
  173. MaterialDetail,
  174. on_delete=models.CASCADE,
  175. related_name='entry_Ids',
  176. verbose_name='所属入库单详细',
  177. null=True,
  178. blank=True
  179. )
  180. entryIds = models.BigIntegerField(verbose_name='分录ID')
  181. production_batch = models.CharField(max_length=50, verbose_name='生产批次')
  182. material_goods_code = models.CharField(max_length=20, default='', verbose_name='物料编码', null=True, blank=True)
  183. material_batch_order = models.CharField(max_length=20, default='', verbose_name='物料批次', null=True, blank=True)
  184. goods_code = models.CharField(max_length=20, verbose_name='商品编码')
  185. goods_name = models.CharField(max_length=100, verbose_name='商品名称')
  186. goods_weight = models.DecimalField(max_digits=10, decimal_places=2, verbose_name='单件重量', default=1)
  187. goods_out_qty = models.IntegerField(verbose_name='计划数量')
  188. goods_total_weight = models.DecimalField(max_digits=10, decimal_places=2, verbose_name='总重量', null=True)
  189. goods_unit = models.CharField(max_length=20, verbose_name='计量单位')
  190. note = models.TextField(blank=True, verbose_name='备注')
  191. create_time = models.DateTimeField(auto_now_add=True, verbose_name='创建时间')
  192. update_time = models.DateTimeField(auto_now=True, verbose_name='更新时间')
  193. is_delete = models.BooleanField(default=False, verbose_name='是否删除')
  194. class Meta:
  195. verbose_name = '出库物料明细'
  196. verbose_name_plural = verbose_name
  197. ordering = ['-update_time', '-create_time']