Inventory.models.inventory_detail 源代码

from django.db import models
from django.utils import timezone

from Inventory import (INVENTORY_DETAIL_STATUS_CHOICES,
                       INVENTORY_DETAIL_STATUS_EXHAUST,
                       INVENTORY_DETAIL_STATUS_NORMAL)


class AbstractInventoryDetail(models.Model):
    # TODO: Review these fields in inventory practice
    weight = models.FloatField(verbose_name='单重')
    count = models.FloatField(verbose_name='数量')
    status = models.IntegerField(verbose_name='状态',
                                 choices=INVENTORY_DETAIL_STATUS_CHOICES,
                                 default=INVENTORY_DETAIL_STATUS_NORMAL)

    class Meta:
        abstract = True

    def save(self, *args, **kwargs):
        # Update status after refunding
        if (self.count > 0 and
                self.status == INVENTORY_DETAIL_STATUS_EXHAUST):
            self.status = INVENTORY_DETAIL_STATUS_NORMAL
        # Update status after applying
        elif (self.count == 0 and
                self.status == INVENTORY_DETAIL_STATUS_NORMAL):
            self.status = INVENTORY_DETAIL_STATUS_EXHAUST
        super(AbstractInventoryDetail, self).save(*args, **kwargs)

    def __str__(self):
        return str(self.entry_detail)


class WeldingInventoryManager(models.Manager):
    def get_queryset(self):
        return super(WeldingInventoryManager, self).get_queryset().filter(
            deadline__gte=timezone.now())


[文档]class WeldingMaterialInventoryDetail(AbstractInventoryDetail): """ 焊材库存明细 """ entry_detail = models.ForeignKey('WeldingMaterialEntryDetail', verbose_name='焊材入库明细', on_delete=models.CASCADE) deadline = models.DateTimeField(verbose_name='有效期') objects = WeldingInventoryManager() class Meta: verbose_name = '焊材库存明细' verbose_name_plural = '焊材库存明细'
[文档]class SteelMaterialInventoryDetail(AbstractInventoryDetail): """ 钢材库存明细 """ entry_detail = models.ForeignKey('SteelMaterialEntryDetail', verbose_name='钢材入库明细', on_delete=models.CASCADE) length = models.FloatField(verbose_name='长度', default=-1) refund_times = models.IntegerField(verbose_name='退库次数', default=0) warehouse = models.ForeignKey('Warehouse', verbose_name='库房', blank=True, null=True, on_delete=models.PROTECT) class Meta: verbose_name = '钢材库存明细' verbose_name_plural = '钢材库存明细'
[文档]class AuxiliaryMaterialInventoryDetail(AbstractInventoryDetail): """ 辅材库存明细 """ entry_detail = models.ForeignKey('AuxiliaryMaterialEntryDetail', verbose_name='辅材入库明细', on_delete=models.CASCADE) class Meta: verbose_name = '辅材库存明细' verbose_name_plural = '辅材库存明细'
[文档]class BoughtInComponentInventoryDetail(AbstractInventoryDetail): """ 外购件库存明细 """ entry_detail = models.OneToOneField('BoughtInComponentEntryDetail', verbose_name='外购件入库明细', on_delete=models.CASCADE) class Meta: verbose_name = '外购件库存明细' verbose_name_plural = '外购件库存明细'