feat:光芯科技 主要修改采购功能
This commit is contained in:
parent
159b644126
commit
949620809a
|
|
@ -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='库房'),
|
||||
),
|
||||
]
|
||||
|
|
@ -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='来源入库单',
|
||||
|
|
|
|||
|
|
@ -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):
|
||||
|
|
|
|||
|
|
@ -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')
|
||||
|
|
|
|||
|
|
@ -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):
|
||||
"""
|
||||
物资申购单
|
||||
|
|
|
|||
Loading…
Reference in New Issue