from django.db import models

class InboundBill(models.Model):
    BOUND_TYPE = (
        (1, '订单'),
        (2, '其他'),
    )
    STATUS_CHOICES = (
        (0, '草稿'),
        (1, '已审批'),
        (2, '已入库'),
        (3, '已取消'),
    )
    billId = models.BigIntegerField(primary_key=True,verbose_name='原始单据ID')
    number = models.CharField(max_length=50, unique=True, verbose_name='单据编号')
    type = models.IntegerField(choices=BOUND_TYPE, verbose_name='绑定类型')
    date = models.CharField(max_length=10, verbose_name='入库时间')  
    department = models.CharField(max_length=100, verbose_name='部门', null=True)
    warehouse = models.CharField(max_length=100, verbose_name='仓库', default='W01')  
    creater = models.CharField(max_length=50, verbose_name='创建人', null=True)
    note = models.TextField(blank=True, verbose_name='备注说明', null=True)
    totalCount = models.IntegerField(verbose_name='总条目数')
    create_time = models.DateTimeField(auto_now_add=True, verbose_name='创建时间')
    update_time = models.DateTimeField(auto_now=True, verbose_name='更新时间')
    bound_status = models.IntegerField(default=0, verbose_name='状态')
    is_delete = models.BooleanField(default=False, verbose_name='是否删除')
    erp_audit_id = models.CharField(max_length=1000,null=True, verbose_name='ERP审核ID')  
    erp_save_id = models.CharField(max_length=1000,null=True, verbose_name='ERP保存ID')  
    class Meta:
        verbose_name = '生产入库单'
        verbose_name_plural = verbose_name
        ordering = [ 'bound_status','-create_time','-update_time']
    
class OutboundBill(models.Model):

    BOUND_TYPE = (
        (1, '订单'),
        (2, '其他'),
    )
    STATUS_CHOICES = (
        (0, '草稿'),
        (1, '已审批'),
        (2, '已入库'),
        (3, '已取消'),
    )

    billId = models.BigIntegerField(primary_key=True,verbose_name='原始单据ID')
    number = models.CharField(max_length=50, unique=True, verbose_name='单据编号')
    type = models.IntegerField(choices=BOUND_TYPE, verbose_name='绑定类型')
    date = models.CharField(max_length=10, verbose_name='出库时间')  
    department = models.CharField(max_length=10, verbose_name='部门', null=True,blank=True)
    warehouse = models.CharField(max_length=10, verbose_name='仓库', default='W01')  
    creater = models.CharField(max_length=50, verbose_name='创建人', null=True,blank=True)
    note = models.TextField(blank=True, verbose_name='备注说明', null=True)
    totalCount = models.IntegerField(verbose_name='总条目数')
    create_time = models.DateTimeField(auto_now_add=True, verbose_name='创建时间')
    update_time = models.DateTimeField(auto_now=True, verbose_name='更新时间')
    bound_status = models.IntegerField(default=0, verbose_name='状态')
    is_delete = models.BooleanField(default=False, verbose_name='是否删除')
    erp_audit_id = models.CharField(max_length=1000,null=True, verbose_name='ERP审核ID')  
    erp_save_id = models.CharField(max_length=1000,null=True, verbose_name='ERP保存ID')  

    class Meta:
        verbose_name = '出库单'
        verbose_name_plural = verbose_name
        ordering = [ 'bound_status','-create_time','-update_time']



class MaterialDetail(models.Model):
    """物料明细模型"""
    bound_billId = models.ForeignKey(
        InboundBill,
        on_delete=models.CASCADE,
        related_name='bill_id',
        verbose_name='所属入库单'
    )
    STATUS_CHOICES = (
        (0, '未质检'),
        (1, '已质检'),
    )
    entryIds = models.BigIntegerField(verbose_name='分录ID')
    production_batch = models.CharField(max_length=50, verbose_name='生产批次')
    goods_code = models.CharField(max_length=20, verbose_name='商品编码')
    goods_name = models.CharField(max_length=100, verbose_name='商品名称')
    goods_std = models.CharField(max_length=50, verbose_name='商品规格')
    goods_weight = models.DecimalField(max_digits=10, decimal_places=2, verbose_name='单件重量', default=1)
    plan_qty = models.IntegerField(verbose_name='计划数量')
    goods_total_weight = models.DecimalField(max_digits=10, decimal_places=2, verbose_name='总重量', null=True)
    goods_unit = models.CharField(max_length=20, verbose_name='计量单位')
    note = models.TextField(blank=True, verbose_name='备注')
    status = models.IntegerField(choices=STATUS_CHOICES, verbose_name='质检状态', default=0)
    create_time = models.DateTimeField(auto_now_add=True, verbose_name='创建时间')
    update_time = models.DateTimeField(auto_now=True, verbose_name='更新时间')
    is_delete = models.BooleanField(default=False, verbose_name='是否删除')

    class Meta:
        verbose_name = '物料明细'
        verbose_name_plural = verbose_name
        unique_together = [('bound_billId', 'entryIds')]
        ordering = ['-update_time', '-create_time']


class OutMaterialDetail(models.Model):
    """物料明细模型"""
    bound_billId = models.ForeignKey(
        OutboundBill,
        on_delete=models.CASCADE,
        related_name='bill_id',
        verbose_name='所属出库单'
    )
    Material_entryIds = models.ForeignKey(
        MaterialDetail,
        on_delete=models.CASCADE,
        related_name='entry_Ids',
        verbose_name='所属入库单详细',
        null=True,
        blank=True
    )
    entryIds = models.BigIntegerField(verbose_name='分录ID')
    production_batch = models.CharField(max_length=50, verbose_name='生产批次')
    goods_code = models.CharField(max_length=20, verbose_name='商品编码')
    goods_name = models.CharField(max_length=100, verbose_name='商品名称')

    goods_weight = models.DecimalField(max_digits=10, decimal_places=2, verbose_name='单件重量', default=1)
    goods_out_qty = models.IntegerField(verbose_name='计划数量')
    goods_total_weight = models.DecimalField(max_digits=10, decimal_places=2, verbose_name='总重量', null=True)
    goods_unit = models.CharField(max_length=20, verbose_name='计量单位')
    note = models.TextField(blank=True, verbose_name='备注')
    create_time = models.DateTimeField(auto_now_add=True, verbose_name='创建时间')
    update_time = models.DateTimeField(auto_now=True, verbose_name='更新时间')
    is_delete = models.BooleanField(default=False, verbose_name='是否删除')

    class Meta:
        verbose_name = '出库物料明细'
        verbose_name_plural = verbose_name
        ordering = ['-update_time', '-create_time']