123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315 |
- from rest_framework_csv.renderers import CSVStreamingRenderer
- def file_headers_list():
- return [
- 'document_date',
- 'document_number',
- 'document_type',
- 'business_type',
- 'iout_type',
- 'department',
- 'warehouse_name',
- 'goods_code',
- 'goods_desc',
- 'goods_std',
- 'goods_batch',
- 'in_batch',
- 'out_batch',
- 'goods_in',
- 'goods_out',
- 'goods_notes',
- 'creator'
- ]
- def cn_data_header_list():
- return dict([
- ('document_date', '单据日期'),
- ('document_number', '单据编号'),
- ('document_type', '单据类型'),
- ('business_type', '业务类型'),
- ('iout_type', '出入库类型'),
- ('department', '部门'),
- ('warehouse_code', '仓库编码'),
- ('warehouse_name', '仓库名称'),
- ('goods_code', '商品编码'),
- ('goods_desc', '商品描述'),
- ('goods_std', '商品标准'),
- ('goods_batch', '商品批次'),
- ('in_batch', '入库批次'),
- ('out_batch', '出库批次'),
- ('goods_in', '入库数量'),
- ('goods_out', '出库数量'),
- ('goods_notes', '备注'),
- ('creator', '创建人')
- ])
- class FileFlowListRenderCN(CSVStreamingRenderer):
- header = file_headers_list()
- labels = cn_data_header_list()
- """
- class MaterialChangeHistory(models.Model):
- material_stats = models.ForeignKey(
- MaterialStatistics,
- on_delete=models.CASCADE,
- related_name='history_records',
- verbose_name="关联物料"
- )
-
- # 与批次日志建立多对一关系
- batch_log = models.ForeignKey(batchLogModel,on_delete=models.CASCADE, related_name='material_history', verbose_name="关联批次日志",primary_key=False)
- goods_code = models.CharField(max_length=50, verbose_name='货品编码')
- goods_desc = models.CharField(max_length=100, verbose_name='货品描述')
- goods_std = models.CharField(max_length=50, verbose_name='货品规格', null=True, blank=True)
- goods_unit = models.CharField(max_length=50, verbose_name='货品单位', null=True, blank=True)
- # 时间戳记录(使用批次日志的时间)
- change_time = models.DateTimeField(
- verbose_name="变动时间"
- )
-
- # 库存变动情况
- in_quantity = models.DecimalField(
- max_digits=10, decimal_places=3,
- default=Decimal('0'),
- verbose_name="入库数量"
- )
-
- out_quantity = models.DecimalField(
- max_digits=10, decimal_places=3,
- default=Decimal('0'),
- verbose_name="出库数量"
- )
-
- # 变更类型(从批次日志获取)
- change_type = models.CharField(
- max_length=20,
- verbose_name="变动类型"
- )
-
- # 变更时的库存快照
- opening_quantity = models.DecimalField(
- max_digits=10, decimal_places=3,
- default=Decimal('0'),
- verbose_name="期初数量"
- )
-
- closing_quantity = models.DecimalField(
- max_digits=10, decimal_places=3,
- default=Decimal('0'),
- verbose_name="期末数量"
-
- class batchLogModel(models.Model):
- LOG_TYPES = (
- ('create', '创建'),
- ('update', '更新'),
- ('delete', '删除'),
- ('out', '出库'),
- ('cancel_out', '取消出库'),
- ('status_change', '状态变更'),
- )
- bound = models.ForeignKey(BoundListModel, on_delete=models.CASCADE, related_name='logs', null=True, blank=True)
- batch = models.ForeignKey(BoundBatchModel, on_delete=models.CASCADE, related_name='logs')
- log_type = models.CharField(max_length=20, choices=LOG_TYPES, verbose_name='日志类型')
- goods_code = models.CharField(max_length=50, verbose_name='货品编码')
- goods_desc = models.CharField(max_length=100, verbose_name='货品描述')
- goods_std = models.CharField(max_length=50, verbose_name='货品规格', null=True, blank=True)
- goods_unit = models.CharField(max_length=50, verbose_name='货品单位', null=True, blank=True)
- goods_in_qty = models.DecimalField(max_digits=10, decimal_places=3, default=Decimal('0'),verbose_name='新入数量', null=True, blank=True)
- goods_out_qty = models.DecimalField(max_digits=10, decimal_places=3, default=Decimal('0'),verbose_name='新出数量', null=True, blank=True)
- detail_logs = models.ManyToManyField(
- ContainerDetailLogModel,
- related_name='batch_logs',
- verbose_name='关联托盘日志'
- )
- create_time = models.DateTimeField(auto_now_add=True, verbose_name='创建时间')
-
- class ContainerDetailLogModel(models.Model):
-
- LOG_TYPES = (
- ('create', '创建'),
- ('update', '更新'),
- ('delete', '删除'),
- ('out', '出库'),
- ('cancel_out', '取消出库'),
- ('status_change', '状态变更'),
- )
-
- # 关联的托盘明细
- container_detail = models.ForeignKey(
- ContainerDetailModel,
- on_delete=models.CASCADE,
- related_name='logs'
- )
-
- # 日志类型
- log_type = models.CharField(
- max_length=20,
- choices=LOG_TYPES,
- verbose_name='日志类型'
- )
-
- # 原值
- old_goods_qty = models.DecimalField(max_digits=10, decimal_places=3, default=Decimal('0'),verbose_name='原数量', null=True, blank=True)
- old_goods_out_qty = models.DecimalField(max_digits=10, decimal_places=3, default=Decimal('0'),verbose_name='原出库数量', null=True, blank=True)
- old_status = models.IntegerField(
- choices=ContainerDetailModel.BATCH_STATUS,
- null=True,
- blank=True,
- verbose_name='原状态'
- )
-
- # 新值
- new_goods_qty = models.DecimalField(max_digits=10, decimal_places=3, default=Decimal('0'),verbose_name='新数量', null=True, blank=True)
- new_goods_out_qty = models.DecimalField(max_digits=10, decimal_places=3, default=Decimal('0'),verbose_name='新出库数量', null=True, blank=True)
- new_status = models.IntegerField(
- choices=ContainerDetailModel.BATCH_STATUS,
- null=True,
- blank=True,
- verbose_name='新状态'
- )
-
- # 元信息
- creater = models.CharField(max_length=50, verbose_name='操作人')
- create_time = models.DateTimeField(auto_now_add=True, verbose_name='操作时间')
- tobatchlog = models.BooleanField(default=False, verbose_name='是否转移到批次日志')
- """
- def MaterialChangeHistory_file_headers_list():
- return [
- 'id',
- 'batch_log',
- 'goods_code',
- 'goods_desc',
- 'goods_std',
- 'goods_unit',
- 'change_time',
- 'in_quantity',
- 'out_quantity',
- 'change_type',
- 'opening_quantity',
- 'closing_quantity'
- ]
- def MaterialChangeHistory_cn_data_header_list():
- return dict([
- ('id', '序号'),
- ('batch_log', '批次日志'),
- ('goods_code', '货品编码'),
- ('goods_desc', '货品描述'),
- ('goods_std', '货品规格'),
- ('goods_unit', '货品单位'),
- ('change_time', '变动时间'),
- ('in_quantity', '入库数量'),
- ('out_quantity', '出库数量'),
- ('change_type', '变动类型'),
- ('opening_quantity', '期初数量'),
- ('closing_quantity', '期末数量')
- ])
-
- class MaterialChangeHistoryRenderCN(CSVStreamingRenderer):
- header = MaterialChangeHistory_file_headers_list()
- labels = MaterialChangeHistory_cn_data_header_list()
-
- def batchLog_file_headers_list():
- return [
- 'id',
- 'log_type',
- 'batch_code',
- 'goods_code',
- 'goods_desc',
- 'goods_std',
- 'goods_in_qty',
- 'goods_out_qty',
- 'goods_unit',
- 'check_status',
- 'create_time',
- 'detail_logs',
- ]
- def batchLog_cn_data_header_list():
- return dict([
- ('id', '序号'),
- ('bound', '绑定'),
- ('batch', '批次'),
- ('log_type', '日志类型'),
- ('goods_code', '货品编码'),
- ('goods_desc', '货品描述'),
- ('goods_std', '货品规格'),
- ('goods_unit', '货品单位'),
- ('goods_in_qty', '新入数量'),
- ('goods_out_qty', '新出数量'),
- ('detail_logs', '托盘日志'),
- ('create_time', '创建时间'),
- ('check_status', '质检状态(0:未质检,1:已质检,2:质检不合格)')
- ])
- class batchLogRenderCN(CSVStreamingRenderer):
- header = batchLog_file_headers_list()
- labels = batchLog_cn_data_header_list()
-
- def ContainerDetailLog_file_headers_list():
- return [
- 'id',
- 'batch',
- 'container_code',
- 'goods_code',
- 'goods_desc',
- 'detail_goods_qty',
- 'goods_qty',
- 'goods_out_qty',
- 'batch_goods_qty',
- 'batch_goods_in_qty',
- 'batch_goods_in_location_qty',
- 'batch_goods_out_qty',
- 'create_time',
- 'log_type',
- 'old_goods_qty',
- 'old_goods_out_qty',
- 'old_status',
- 'new_goods_qty',
- 'new_goods_out_qty',
- 'new_status',
- 'creater',
- 'tobatchlog',
- 'container_detail'
- ]
- def ContainerDetailLog_cn_data_header_list():
- return dict([
- ('id', '序号'),
- ('batch', '批次'),
- ('container_code', '托盘编码'),
- ('goods_code', '货品编码'),
- ('goods_desc', '货品描述'),
- ('detail_goods_qty', '托盘货品数量'),
- ('goods_qty', '货品数量'),
- ('goods_out_qty', '出库数量'),
- ('batch_goods_qty', '批次货品数量'),
- ('batch_goods_in_qty', '批次入库数量'),
- ('batch_goods_in_location_qty', '批次入库库位数量'),
- ('batch_goods_out_qty', '批次出库数量'),
- ('create_time', '创建时间'),
- ('log_type', '日志类型'),
- ('old_goods_qty', '原数量'),
- ('old_goods_out_qty', '原出库数量'),
- ('old_status', '原状态'),
- ('new_goods_qty', '新数量'),
- ('new_goods_out_qty', '新出库数量'),
- ('new_status', '新状态'),
- ('creater', '操作人'),
- ('tobatchlog', '是否转移到批次日志'),
- ('container_detail', '托盘明细')
- ])
- class ContainerDetailLogRenderCN(CSVStreamingRenderer):
- header = ContainerDetailLog_file_headers_list()
- labels = ContainerDetailLog_cn_data_header_list()
|