models.py 10.0 KB

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