from django.db import models
from erp.models import InboundBill, MaterialDetail, OutboundBill,OutMaterialDetail


class BoundListModel(models.Model):
    STATUS =( 
            ("100", '入库申请'), ("101", '入库同意'), ("102", '组盘中'), ("103", '部分入库'), ("104", '已入库'),
            ("111", '质检合格'),
            ("200", '出库申请'), ("201", '出库同意'), ("202", '出库中'), ("203", '部分出库'), ("204", '已出库'), 
            ("300", '完成')
            )
    
    audit_status = models.BooleanField(default=False, verbose_name='审核状态')

    bound_month = models.CharField(max_length=255, verbose_name="月份")
    bound_date = models.DateField(verbose_name="单据日期")

    bound_code = models.CharField(max_length=255, verbose_name="出入库编号",unique=True)
    bound_code_type = models.CharField(max_length=255, verbose_name="单据类型")
    bound_bs_type = models.CharField(max_length=255, verbose_name="业务类型")
    bound_type = models.CharField(max_length=255, verbose_name="出入库类型")
    bound_desc = models.CharField(default='', max_length=255, verbose_name="出入库描述")
    bound_department = models.CharField(max_length=255, verbose_name="部门")

    base_type = models.IntegerField(default=0, verbose_name="基准类型")

    bound_status = models.CharField(max_length=255, verbose_name="单据状态",choices=STATUS, default='100')
    note = models.CharField(default='', max_length=255, verbose_name="备注")

    creater = models.CharField(default='uesr', max_length=255, verbose_name="Who Created")
    openid = models.CharField(max_length=255, verbose_name="Openid")
    is_delete = models.BooleanField(default=False, verbose_name='Delete Label')
    create_time = models.DateTimeField(auto_now_add=True, verbose_name="Create Time")
    update_time = models.DateTimeField(auto_now=True, blank=True, null=True, verbose_name="Update Time")
    relate_bill = models.ForeignKey(InboundBill, on_delete=models.CASCADE, verbose_name="关联单据", related_name='bound_list',null=True, blank=True)
    relate_out_bill = models.ForeignKey(OutboundBill, on_delete=models.CASCADE, verbose_name="关联出库单据", related_name='bound_out_list',null=True, blank=True)

    class Meta:
        db_table = 'boundlist'
        verbose_name = 'Bound List'
        verbose_name_plural = "Bound List"
        ordering = ['bound_status','-id']

class BoundBatchModel(models.Model):

    CONTAINER_STATUS = (
        (0, '入库申请'),
        (1, '入库中'),
        (2, '部分入库'),
        (3, '在库'),
        (4, '出库中'),
        (5, '部分出库'),
        (6, '已出库'),

    )

    bound_number = models.CharField(max_length=255, verbose_name="入库批次号",blank=False, null=False, unique=True)
    sourced_number = models.CharField(max_length=255, verbose_name="来源批次号",blank=True, null=True)
    bound_month = models.CharField(max_length=255, verbose_name="月份")
    bound_batch_order = models.IntegerField(default=0, verbose_name="批次顺序")
  
    warehouse_code = models.CharField(max_length=255, verbose_name="仓库编码")
    warehouse_name = models.CharField(max_length=255, verbose_name="仓库名称")
    goods_code = models.CharField(max_length=255, verbose_name="商品编码")
    goods_desc = models.CharField(max_length=255, verbose_name="商品描述")
    goods_std = models.CharField(default='待填写', max_length=255, verbose_name="商品标准",blank=True, null=True)
    goods_unit = models.CharField(default='待填写', max_length=255, verbose_name="商品单位")
    goods_qty = models.BigIntegerField(default=0, verbose_name="商品数量")
    goods_in_qty = models.BigIntegerField(default=0, verbose_name="入库数量")
    goods_in_location_qty = models.BigIntegerField(default=0, verbose_name="库位上入库数量")
    goods_out_qty = models.BigIntegerField(default=0, verbose_name="出库数量")
    goods_out_location_qty = models.BigIntegerField(default=0, verbose_name="库位上出库数量")

    status = models.IntegerField(choices=CONTAINER_STATUS, default=0, verbose_name='批次状态')
    container_number = models.IntegerField( default=0, verbose_name="托盘数目")
    goods_weight = models.FloatField(default=0, verbose_name="商品单重")
    goods_total_weight = models.FloatField(default=0, verbose_name="商品总重")
    note = models.CharField(default='', max_length=255, verbose_name="备注")

    creater = models.CharField(default='uesr', max_length=255, verbose_name="Who Created")
    openid = models.CharField(max_length=255, verbose_name="Openid")
    is_delete = models.BooleanField(default=False, verbose_name='Delete Label')
    create_time = models.DateTimeField(auto_now_add=True, verbose_name="Create Time")
    update_time = models.DateTimeField(auto_now=True, blank=True, null=True, verbose_name="Update Time")
    relate_material = models.ForeignKey(MaterialDetail, on_delete=models.CASCADE, verbose_name="关联物料", related_name='bound_batch',null=True, blank=True)
    
    class Meta:
        db_table = 'boundbatch'
        verbose_name = 'Bound Batch'
        verbose_name_plural = "Bound Batch"
        ordering = ['-id']

class OutBatchModel(models.Model):
    CONTAINER_STATUS = (
        (0, '申请'),
        (1, '在途'),
        (2, '已出库')
    )
    OUT_TYPE = (
        (0, '发货出库'),
        (4, '其他出库'),
    )
    out_number = models.CharField(max_length=255, verbose_name="出库批次号",blank=False, null=False)

    batch_number = models.ForeignKey(BoundBatchModel, on_delete=models.CASCADE, verbose_name="批次号", related_name='out_batch')

    out_date = models.DateTimeField(verbose_name="出库日期")

    out_type = models.IntegerField(choices=OUT_TYPE, default=4,  verbose_name="出库类型")
    out_note = models.CharField(default='', max_length=255, verbose_name="出库备注")

    warehouse_code = models.CharField(max_length=255, verbose_name="仓库编码")
    warehouse_name = models.CharField(max_length=255, verbose_name="仓库名称")

    goods_code = models.CharField(max_length=255, verbose_name="商品编码")
    goods_desc = models.CharField(max_length=255, verbose_name="商品描述")
    goods_std = models.CharField(default='待填写', max_length=255, verbose_name="商品标准",blank=True, null=True)
    goods_unit = models.CharField(default='待填写', max_length=255, verbose_name="商品单位")
    goods_qty = models.BigIntegerField(default=0, verbose_name="商品数量")
    goods_out_qty = models.BigIntegerField(default=0, verbose_name="出库数量")

    status = models.IntegerField(choices=CONTAINER_STATUS, default=0, verbose_name='批次状态')

    container_number = models.IntegerField( default=0, verbose_name="托盘数目")
    goods_weight = models.FloatField(default=0, verbose_name="商品单重")
    goods_total_weight = models.FloatField(default=0, verbose_name="商品总重")

    creater = models.CharField(default='uesr', max_length=255, verbose_name="Who Created")
    openid = models.CharField(max_length=255, verbose_name="Openid")
    is_delete = models.BooleanField(default=False, verbose_name='Delete Label')
    create_time = models.DateTimeField(auto_now_add=True, verbose_name="Create Time")
    update_time = models.DateTimeField(auto_now=True, blank=True, null=True, verbose_name="Update Time")
    relate_material = models.ForeignKey(OutMaterialDetail, on_delete=models.CASCADE, verbose_name="关联物料", related_name='out_batch',null=True, blank=True)

    class Meta:
        db_table = 'outbatch'
        verbose_name = 'Out Batch'
        verbose_name_plural = "Out Batch"
        ordering = ['-id']

# 利用创建好的批次来与申请单相对应       
class OutBoundDetailModel(models.Model):
    CONTAINER_STATUS = (
        (0, '出库申请'),
        (1, '出库中'),
        (2, '已出库'),
        (3, '入库中'),
        (4, '已入库')
    )

    bound_list = models.ForeignKey(BoundListModel, on_delete=models.CASCADE, verbose_name="Bound List", related_name='out_bound_detail')
    bound_batch = models.ForeignKey(OutBatchModel, on_delete=models.PROTECT, verbose_name="Bound Batch", related_name='out_bound_batch_detail')
    bound_batch_number = models.ForeignKey(BoundBatchModel, on_delete=models.CASCADE, verbose_name="Bound Batch Number", related_name='out_bound_batch_number_detail')
    status = models.IntegerField(choices=CONTAINER_STATUS, default=0, verbose_name='批次状态')
    
    detail_code = models.CharField(max_length=255, verbose_name="明细编号")
    creater = models.CharField(default='uesr', max_length=255, verbose_name="Who Created")
    openid = models.CharField(max_length=255, verbose_name="Openid")
    is_delete = models.BooleanField(default=False, verbose_name='Delete Label')
    create_time = models.DateTimeField(auto_now_add=True, verbose_name="Create Time")
    update_time = models.DateTimeField(auto_now=True, blank=True, null=True, verbose_name="Update Time")

    class Meta:
        db_table = 'Outbounddetail'
        verbose_name = 'OutBound Detail'
        verbose_name_plural = "OutBound Detail"
        ordering = ['-id']

class BatchLogModel(models.Model):
    BATCH_LOG_TYPE = (
        (0, '入库'),
        (1, '出库'),
        (2, '移库'),
        (9, '其他'),
        
    )
    batch_id  =models.ForeignKey(BoundBatchModel, on_delete=models.CASCADE, verbose_name="批次ID", related_name='batch_log')
    log_type = models.IntegerField(choices=BATCH_LOG_TYPE, default=9, verbose_name="日志类型")
    log_date = models.DateTimeField(verbose_name="日志日期")
    goods_code = models.CharField(max_length=255, verbose_name="商品编码")
    goods_desc = models.CharField(max_length=255, verbose_name="商品描述")
    goods_qty = models.BigIntegerField(default=0, verbose_name="商品数量")
    log_content = models.CharField(max_length=255, verbose_name="日志内容")
    creater = models.CharField(default='uesr', max_length=255, verbose_name="Who Created")
    openid = models.CharField(max_length=255, verbose_name="Openid")
    is_delete = models.BooleanField(default=False, verbose_name='Delete Label')
    create_time = models.DateTimeField(auto_now_add=True, verbose_name="Create Time")
    update_time = models.DateTimeField(auto_now=True, blank=True, null=True, verbose_name="Update Time")

    class Meta:
        db_table = 'batchlog'
        verbose_name = 'Batch Log'
        verbose_name_plural = "Batch Log"

# 利用创建好的批次来与申请单相对应       
class BoundDetailModel(models.Model):
    CONTAINER_STATUS = (
        (0, '入库申请'),
        (1, '入库中'),
        (2, '在库'),
        (3, '出库中'),
        (4, '已出库')
    )

    bound_list = models.ForeignKey(BoundListModel, on_delete=models.CASCADE, verbose_name="Bound List", related_name='bound_detail')
    bound_batch = models.ForeignKey(BoundBatchModel, on_delete=models.PROTECT, verbose_name="Bound Batch", related_name='bound_batch_detail')
    status = models.IntegerField(choices=CONTAINER_STATUS, default=0, verbose_name='批次状态')
    
    detail_code = models.CharField(max_length=255, verbose_name="明细编号",unique=True)
    creater = models.CharField(default='uesr', max_length=255, verbose_name="Who Created")
    openid = models.CharField(max_length=255, verbose_name="Openid")
    is_delete = models.BooleanField(default=False, verbose_name='Delete Label')
    create_time = models.DateTimeField(auto_now_add=True, verbose_name="Create Time")
    update_time = models.DateTimeField(auto_now=True, blank=True, null=True, verbose_name="Update Time")

    class Meta:
        db_table = 'bounddetail'
        verbose_name = 'Bound Detail'
        verbose_name_plural = "Bound Detail"
        ordering = ['-id']