diff --git a/ERP_5/apps/production_info/__init__.py b/ERP_5/apps/production_info/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/ERP_5/apps/production_info/admin.py b/ERP_5/apps/production_info/admin.py new file mode 100644 index 0000000..8c38f3f --- /dev/null +++ b/ERP_5/apps/production_info/admin.py @@ -0,0 +1,3 @@ +from django.contrib import admin + +# Register your models here. diff --git a/ERP_5/apps/production_info/apps.py b/ERP_5/apps/production_info/apps.py new file mode 100644 index 0000000..da207a8 --- /dev/null +++ b/ERP_5/apps/production_info/apps.py @@ -0,0 +1,6 @@ +from django.apps import AppConfig + + +class ProductionInfoConfig(AppConfig): + default_auto_field = 'django.db.models.BigAutoField' + name = 'production_info' diff --git a/ERP_5/apps/production_info/migrations/__init__.py b/ERP_5/apps/production_info/migrations/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/ERP_5/apps/production_info/models.py b/ERP_5/apps/production_info/models.py new file mode 100644 index 0000000..f7af7e2 --- /dev/null +++ b/ERP_5/apps/production_info/models.py @@ -0,0 +1,144 @@ +from django.db import models +from django.utils import timezone + +from ERP_5.utils.base_model import BaseModel + + +# BOM表中的物料模型类 +class BomMaterialModel(BaseModel): + # 冗余字段 + goods_code = models.CharField('货品编号,不让用户填写', max_length=28) + name = models.CharField(max_length=20, verbose_name='货品名称') + specification = models.CharField('货品规格', max_length=50, null=True, blank=True) + model_number = models.CharField('型号', max_length=50, null=True, blank=True) + units_name = models.CharField('单位名字', max_length=50, null=True, blank=True) + units = models.ForeignKey('goods_info.UnitsModel', on_delete=models.SET_NULL, null=True, blank=True) + + remark = models.CharField('备注', max_length=512, blank=True, null=True) + purchase_price = models.DecimalField('采购价', max_digits=10, decimal_places=2, blank=True, default=0) + count = models.DecimalField('数量,最多精确到小数点后两位', max_digits=10, decimal_places=2, default=0) + money = models.DecimalField('费用,最多精确到小数点后两位', max_digits=10, decimal_places=2, default=0) + + goods = models.ForeignKey('goods_info.GoodsModel', null=True, on_delete=models.SET_NULL, + verbose_name='货品') + + parent_goods = models.ForeignKey('goods_info.GoodsModel', blank=True, related_name='material_list', null=True, + on_delete=models.SET_NULL, verbose_name='当前的物料清单属于哪个货品') + + class Meta: + db_table = 't_bom_material' + verbose_name = '生产物料表' + verbose_name_plural = verbose_name + ordering = ['id'] + + +# BOM表中 的生产工序模型类 +class BomProcessModel(BaseModel): + process_order = models.IntegerField('执行顺序') + name = models.CharField('工序名称', max_length=50) + leader_name = models.CharField('负责人的名字', max_length=20) + leader_user = models.ForeignKey('erp_system.UserModel', related_name='leader1_in_list', null=True, blank=True, + on_delete=models.SET_NULL, verbose_name='负责人员') + money = models.DecimalField('工价,最多精确到小数点后两位', max_digits=10, decimal_places=2, default=0) + remark = models.CharField('备注', max_length=512, blank=True, null=True) + parent_goods = models.ForeignKey('goods_info.GoodsModel', blank=True, related_name='process_list', null=True, + on_delete=models.SET_NULL, verbose_name='当前的生产工序属于哪个货品') + + class Meta: + db_table = 't_bom_process' + verbose_name = '生产工序表' + verbose_name_plural = verbose_name + ordering = ['process_order'] + + +# 生产任务模型类 +class ProductTaskModel(BaseModel): + invoices_date = models.DateTimeField('单据日期', blank=True, null=True, default=timezone.now) + number_code = models.CharField('编号或者条码', max_length=28, unique=True) + # 冗余字段 + name = models.CharField(max_length=20, verbose_name='货品名称') + specification = models.CharField('货品规格', max_length=50, null=True, blank=True) + model_number = models.CharField('型号', max_length=50, null=True, blank=True) + goods_number_code = models.CharField('生产的货品编号或者批号', max_length=28) + units_name = models.CharField('货品的单位', max_length=28, null=True, blank=True) + sale_number = models.DecimalField('订单数量', default=1, max_digits=10, decimal_places=2) + p_number = models.DecimalField('生产数量', default=1, max_digits=10, decimal_places=2) + finish_date = models.DateField('实际完工日期', null=True, blank=True) + plan_finish_date = models.DateField('计划完工日期') + goods = models.ForeignKey('goods_info.GoodsModel', null=True, blank=True, on_delete=models.SET_NULL, + verbose_name='货品') + + sale_number_code = models.CharField('销售单的编号或者批号', max_length=28, null=True, blank=True) + sale = models.ForeignKey('sale_info.SaleModel', null=True, blank=True, on_delete=models.SET_NULL, + verbose_name='销售单') + status = models.CharField('状态,0:未审核,1:加工中,2:完工', max_length=1, + default='0') + + check_number = models.DecimalField('验收合格数量', default=0, max_digits=10, decimal_places=2) + storage_number = models.DecimalField('已入库数量', default=0, max_digits=10, decimal_places=2) + cost_money = models.DecimalField('合计成本', max_digits=10, decimal_places=2, default=0) + remark = models.CharField('备注', max_length=512, blank=True, null=True) + + check_user = models.ForeignKey('erp_system.UserModel', related_name='checker6_list', null=True, blank=True, + on_delete=models.SET_NULL, + verbose_name='审核人员,不能修改') + # 增加一个冗余字段 + check_user_name = models.CharField('操作人员的真实姓名', max_length=20, null=True, blank=True) + + class Meta: + db_table = 't_product_task' + verbose_name = '生产任务表' + verbose_name_plural = verbose_name + + +# 生产物料模型 +class ProductMaterialModel(BaseModel): + # 冗余字段 + goods_code = models.CharField('货品编号,不让用户填写', max_length=28) + name = models.CharField(max_length=20, verbose_name='货品名称') + specification = models.CharField('货品规格', max_length=50, null=True, blank=True) + model_number = models.CharField('型号', max_length=50, null=True, blank=True) + units_name = models.CharField('单位名字', max_length=50, null=True, blank=True) + units = models.ForeignKey('goods_info.UnitsModel', on_delete=models.SET_NULL, null=True, blank=True) + + remark = models.CharField('备注', max_length=512, blank=True, null=True) + purchase_price = models.DecimalField('采购价', max_digits=10, decimal_places=2, blank=True, default=0) + count = models.DecimalField('总共需要的数量', max_digits=10, decimal_places=2, default=0) + money = models.DecimalField('费用,最多精确到小数点后两位', max_digits=10, decimal_places=2, default=0) + + goods = models.ForeignKey('goods_info.GoodsModel', null=True, on_delete=models.SET_NULL, + verbose_name='货品') + + get_count = models.DecimalField('已经领取的数量', max_digits=10, decimal_places=2, default=0) + back_count = models.DecimalField('退回的数量', max_digits=10, decimal_places=2, default=0) + use_count = models.DecimalField('已使用的数量', max_digits=10, decimal_places=2, default=0) + scrap_count = models.DecimalField('报废的数量', max_digits=10, decimal_places=2, default=0) + + product_task = models.ForeignKey('ProductTaskModel', null=True, on_delete=models.SET_NULL, + verbose_name='生产任务', related_name='material_list') + + class Meta: + db_table = 't_product_material' + verbose_name = '生产物料表' + verbose_name_plural = verbose_name + + +# 生产任务中 的生产工序模型类 +class ProductProcessModel(BaseModel): + process_order = models.IntegerField('执行顺序') + name = models.CharField('工序名称', max_length=128) + leader_name = models.CharField('负责人的名字', max_length=20) + leader_user = models.ForeignKey('erp_system.UserModel', related_name='leader2_in_list', null=True, blank=True, + on_delete=models.SET_NULL, verbose_name='负责人员') + price = models.DecimalField('工价,最多精确到小数点后两位', max_digits=10, decimal_places=2, default=0) + money = models.DecimalField('费用,最多精确到小数点后两位', max_digits=10, decimal_places=2, default=0) + plan_finish_date = models.DateField('计划完工日期', null=True, blank=True) + remark = models.CharField('备注', max_length=512, blank=True, null=True) + + product_task = models.ForeignKey('ProductTaskModel', null=True, on_delete=models.SET_NULL, + verbose_name='生产任务', related_name='process_list') + + class Meta: + db_table = 't_product_process' + verbose_name = '生产工序表' + verbose_name_plural = verbose_name diff --git a/ERP_5/apps/production_info/tests.py b/ERP_5/apps/production_info/tests.py new file mode 100644 index 0000000..7ce503c --- /dev/null +++ b/ERP_5/apps/production_info/tests.py @@ -0,0 +1,3 @@ +from django.test import TestCase + +# Create your tests here. diff --git a/ERP_5/apps/production_info/views.py b/ERP_5/apps/production_info/views.py new file mode 100644 index 0000000..91ea44a --- /dev/null +++ b/ERP_5/apps/production_info/views.py @@ -0,0 +1,3 @@ +from django.shortcuts import render + +# Create your views here.