Compare commits

...

2 Commits

5 changed files with 95 additions and 3 deletions

View File

@ -0,0 +1,46 @@
# Generated by Django 3.2.12 on 2026-04-21 06:27
from django.conf import settings
from django.db import migrations, models
import django.db.models.deletion
import django.utils.timezone
class Migration(migrations.Migration):
dependencies = [
migrations.swappable_dependency(settings.AUTH_USER_MODEL),
('system', '0007_alter_dept_create_by_alter_dept_third_info_and_more'),
('mpr', '0005_warehousestock_status'),
]
operations = [
migrations.CreateModel(
name='WareHouse',
fields=[
('id', models.CharField(editable=False, help_text='主键ID', max_length=20, primary_key=True, serialize=False, verbose_name='主键ID')),
('create_time', models.DateTimeField(default=django.utils.timezone.now, help_text='创建时间', verbose_name='创建时间')),
('update_time', models.DateTimeField(auto_now=True, help_text='修改时间', verbose_name='修改时间')),
('is_deleted', models.BooleanField(default=False, help_text='删除标记', verbose_name='删除标记')),
('number', models.CharField(max_length=20, verbose_name='库房编号')),
('name', models.CharField(max_length=20, verbose_name='库房名称')),
('place', models.CharField(max_length=50, verbose_name='具体地点')),
('belong_dept', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='mpr_warehouse_belong_dept', to='system.dept', verbose_name='所属部门')),
('create_by', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='mpr_warehouse_create_by', to=settings.AUTH_USER_MODEL, verbose_name='创建人')),
('update_by', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='mpr_warehouse_update_by', to=settings.AUTH_USER_MODEL, verbose_name='最后编辑人')),
],
options={
'abstract': False,
},
),
migrations.AlterField(
model_name='warehouseentry',
name='warehouse',
field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='entries', to='mpr.warehouse', verbose_name='库房'),
),
migrations.AlterField(
model_name='warehousestock',
name='warehouse',
field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='mpr_stocks', to='mpr.warehouse', verbose_name='库房'),
),
]

View File

@ -1,9 +1,27 @@
from django.db import models
from apps.utils.models import BaseModel, CommonBDModel
from apps.utils.models import BaseModel, CommonBDModel, CommonBModel
from datetime import datetime
from django.db.models import Max, Sum
class WareHouse(CommonBModel):
"""
TN:库房信息
"""
number = models.CharField('库房编号', max_length=20)
name = models.CharField('库房名称', max_length=20)
place = models.CharField('具体地点', max_length=50)
create_by = models.ForeignKey(
'system.user', null=True, blank=True, on_delete=models.SET_NULL,
verbose_name='创建人', related_name='mpr_warehouse_create_by')
update_by = models.ForeignKey(
'system.user', null=True, blank=True, on_delete=models.SET_NULL,
verbose_name='最后编辑人', related_name='mpr_warehouse_update_by')
belong_dept = models.ForeignKey(
'system.dept', null=True, blank=True, on_delete=models.SET_NULL,
verbose_name='所属部门', related_name='mpr_warehouse_belong_dept')
def _get_number(model_cls):
today_str = datetime.now().strftime('%Y%m%d')
prefix = model_cls.PREFIX
@ -77,7 +95,7 @@ class WarehouseEntry(CommonBDModel):
number = models.CharField('编号', max_length=20, unique=True)
warehouse = models.ForeignKey(
'inm.WareHouse', verbose_name='',
WareHouse, verbose_name='',
on_delete=models.CASCADE, related_name='entries')
entry_date = models.DateField('入库日期', null=True, blank=True)
entry_type = models.CharField('入库类型', max_length=20, choices=ENTRY_TYPE_CHOICES, default='raw_normal')
@ -123,7 +141,7 @@ class WarehouseStock(BaseModel):
)
warehouse = models.ForeignKey(
'inm.WareHouse', verbose_name='',
WareHouse, verbose_name='',
on_delete=models.CASCADE, related_name='mpr_stocks')
entry = models.ForeignKey(
WarehouseEntry, verbose_name='来源入库单',

View File

@ -7,10 +7,20 @@ from apps.mpr.models import (
PurchaseRequisition, PurchaseRequisitionItem,
WarehouseEntry, WarehouseEntryItem, WarehouseStock,
MaterialRequisition, MaterialRequisitionItem,
WareHouse,
)
from apps.wf.serializers import TicketSimpleSerializer
# ========== 库房 ==========
class WareHouseSerializer(CustomModelSerializer):
class Meta:
model = WareHouse
fields = '__all__'
read_only_fields = ['create_time', 'update_time', 'is_deleted']
# ========== 物资申购单 ==========
class PurchaseRequisitionItemSerializer(CustomModelSerializer):

View File

@ -1,6 +1,7 @@
from django.urls import path, include
from rest_framework.routers import DefaultRouter
from apps.mpr.views import (
WareHouseViewSet,
PurchaseRequisitionViewSet, PurchaseRequisitionItemViewSet,
WarehouseEntryViewSet, WarehouseEntryItemViewSet,
WarehouseStockViewSet,
@ -10,6 +11,7 @@ from apps.mpr.views import (
API_BASE_URL = 'api/mpr/'
router = DefaultRouter()
router.register('warehouse', WareHouseViewSet, basename='mpr_warehouse')
router.register('requisition', PurchaseRequisitionViewSet, basename='requisition')
router.register('requisition_item', PurchaseRequisitionItemViewSet, basename='requisition_item')
router.register('warehouse_entry', WarehouseEntryViewSet, basename='warehouse_entry')

View File

@ -8,8 +8,10 @@ from apps.mpr.models import (
PurchaseRequisition, PurchaseRequisitionItem,
WarehouseEntry, WarehouseEntryItem, WarehouseStock,
MaterialRequisition, MaterialRequisitionItem,
WareHouse,
)
from apps.mpr.serializers import (
WareHouseSerializer,
PurchaseRequisitionListSerializer,
PurchaseRequisitionDetailSerializer,
PurchaseRequisitionCreateSerializer,
@ -30,6 +32,20 @@ from apps.mpr.filters import (
)
class WareHouseViewSet(CustomModelViewSet):
"""
库房管理
"""
queryset = WareHouse.objects.all()
serializer_class = WareHouseSerializer
search_fields = ['number', 'name', 'place']
ordering = '-create_time'
perms_map = {
'get': '*', 'post': 'warehouse.create',
'put': 'warehouse.update', 'delete': 'warehouse.delete',
}
class PurchaseRequisitionViewSet(TicketMixin, CustomModelViewSet):
"""
物资申购单