fix: 调拨, 付款, 收款

This commit is contained in:
Czw996 2021-12-27 14:41:13 +08:00
parent f04b19598d
commit bac5f008b5
15 changed files with 62 additions and 25 deletions

View file

@ -24,7 +24,7 @@ class WarehouseSerializer(BaseSerializer):
def validate_manager(self, instance):
instance = self.validate_foreign_key(User, instance, message='管理员不存在')
if not instance.is_active:
if instance and not instance.is_active:
raise ValidationError(f'管理员[{instance.name}]未激活')
return instance

View file

@ -110,6 +110,8 @@ class PaymentOrderSerializer(BaseSerializer):
payment_order.total_amount = total_payment_amount
payment_order.save(update_fields=['total_amount'])
return payment_order
class CollectionOrderSerializer(BaseSerializer):
"""收款单据"""
@ -191,6 +193,8 @@ class CollectionOrderSerializer(BaseSerializer):
collection_order.total_amount = total_collection_amount
collection_order.save(update_fields=['total_amount'])
return collection_order
class ChargeOrderSerializer(BaseSerializer):
"""收支单据"""

View file

@ -1,10 +1,10 @@
from extensions.permissions import ModelPermission
class InventoryMessagePermission(ModelPermission):
code = 'inventory_message'
class InventoryWarningPermission(ModelPermission):
code = 'inventory_warning'
__all__ = [
'InventoryMessagePermission',
'InventoryWarningPermission',
]

View file

@ -2,9 +2,10 @@ from extensions.common.base import *
from extensions.serializers import *
from extensions.exceptions import *
from apps.goods.models import *
from apps.sales.models import *
class InventoryMessageSerializer(BaseSerializer):
class InventoryWarningSerializer(BaseSerializer):
"""库存预警"""
goods_number = CharField(source='goods.number', read_only=True, label='商品编号')
@ -20,6 +21,25 @@ class InventoryMessageSerializer(BaseSerializer):
'unit_name', 'inventory_upper', 'inventory_lower']
class SalesTaskReminderSerializer(BaseSerializer):
"""销售任务提醒"""
warehouse_number = CharField(source='warehouse.number', read_only=True, label='仓库编号')
warehouse_name = CharField(source='warehouse.name', read_only=True, label='仓库名称')
goods_number = CharField(source='goods.number', read_only=True, label='商品编号')
goods_name = CharField(source='goods.name', read_only=True, label='商品名称')
goods_barcode = CharField(source='goods.barcode', read_only=True, label='商品条码')
unit_name = CharField(source='goods.unit.name', read_only=True, label='单位名称')
class Meta:
model = SalesTask
read_only_fields = ['id', 'warehouse_number', 'warehouse_name', 'goods_number', 'goods_name',
'goods_barcode', 'unit_name', 'salesperson_name', 'sales_quantity',
'is_completed', 'create_time']
fields = ['warehouse', 'goods', 'salesperson', 'total_quantity', 'start_time', 'end_time',
*read_only_fields]
__all__ = [
'InventoryMessageSerializer',
'InventoryWarningSerializer',
]

View file

@ -3,5 +3,5 @@ from apps.message.views import *
router = BaseRouter()
router.register('inventory_messages', InventoryMessageViewSet, 'inventory_message')
router.register('inventory_warnings', InventoryWarningViewSet, 'inventory_warning')
urlpatterns = router.urls

View file

@ -12,23 +12,28 @@ from apps.message.models import *
from apps.goods.models import *
class InventoryMessageViewSet(BaseViewSet, ListModelMixin):
class InventoryWarningViewSet(BaseViewSet, ListModelMixin):
"""库存预警"""
serializer_class = InventoryMessageSerializer
permission_classes = [IsAuthenticated, InventoryMessagePermission]
serializer_class = InventoryWarningSerializer
permission_classes = [IsAuthenticated, InventoryWarningPermission]
select_related_fields = ['goods', 'goods__unit']
queryset = Inventory.objects.all()
def get_queryset(self):
queryset = super().get_queryset().filter(goods__enable_inventory_warning=True)
queryset = queryset.values('goods').annotate(total_inventory_quantity=Sum('total_quantity'))
print(queryset)
queryset = queryset.filter(
Q(goods__inventory_upper__isnull=False) & Q(total_quantity__gt=F('goods__inventory_upper')) |
Q(goods__inventory_lower__isnull=False) & Q(total_quantity__lte=F('goods__inventory_lower'))
)
return queryset
print(queryset)
return Inventory.objects.all()
__all__ = [
'InventoryMessageViewSet',
'InventoryWarningViewSet',
]

View file

@ -111,11 +111,13 @@ class InventoryOptionSerializer(ModelSerializer):
goods_barcode = CharField(source='goods.barcode', read_only=True, label='商品条码')
goods_spec = CharField(source='goods.spec', read_only=True, label='商品规格')
unit_name = CharField(source='goods.unit.name', read_only=True, label='单位名称')
enable_batch_control = BooleanField(source='goods.enable_batch_control',
read_only=True, label='启用批次控制')
class Meta:
model = Inventory
fields = ['id', 'goods', 'goods_number', 'goods_name', 'goods_barcode', 'goods_spec',
'total_quantity', 'unit_name']
'total_quantity', 'unit_name', 'enable_batch_control']
# Purchase
@ -221,7 +223,6 @@ class SupplierArrearsOptionSerializer(BaseSerializer):
'address', 'remark', 'is_active', 'arrears_amount', 'has_arrears']
__all__ = [
'RoleOptionSerializer', 'UserOptionSerializer',
'WarehouseOptionSerializer',

View file

@ -92,7 +92,7 @@ class PurchaseOrderSerializer(BaseSerializer):
if not instance.is_active:
raise ValidationError(f'仓库[{instance.name}]未激活')
if not instance.is_locked:
if instance.is_locked:
raise ValidationError(f'仓库[{instance.name}]已锁定')
return instance
@ -265,7 +265,7 @@ class PurchaseReturnOrderSerializer(BaseSerializer):
if not instance.is_active:
raise ValidationError(f'仓库[{instance.name}]未激活')
if not instance.is_locked:
if instance.is_locked:
raise ValidationError(f'仓库[{instance.name}]已锁定')
return instance

View file

@ -92,7 +92,7 @@ class SalesOrderSerializer(BaseSerializer):
if not instance.is_active:
raise ValidationError(f'仓库[{instance.name}]未激活')
if not instance.is_locked:
if instance.is_locked:
raise ValidationError(f'仓库[{instance.name}]已锁定')
return instance
@ -269,7 +269,7 @@ class SalesReturnOrderSerializer(BaseSerializer):
if not instance.is_active:
raise ValidationError(f'仓库[{instance.name}]未激活')
if not instance.is_locked:
if instance.is_locked:
raise ValidationError(f'仓库[{instance.name}]已锁定')
return instance

View file

@ -2,6 +2,7 @@ from extensions.common.base import *
from extensions.serializers import *
from extensions.exceptions import *
from apps.purchase.models import *
from apps.sales.models import *
class PurchaseReportDetialSerializer(BaseSerializer):
@ -47,7 +48,7 @@ class SalesReportDetialSerializer(BaseSerializer):
create_time = DateTimeField(source='sales_order.create_time', read_only=True, label='创建时间')
class Meta:
model = PurchaseGoods
model = SalesGoods
fields = ['id', 'goods', 'goods_number', 'goods_name', 'goods_barcode', 'goods_spec',
'sales_quantity', 'category_name', 'unit_name', 'sales_price', 'total_amount',
'sales_order', 'sales_order_number', 'warehouse_number', 'warehouse_name',

View file

@ -101,7 +101,7 @@ class StockCheckOrderSerializer(BaseSerializer):
if not instance.is_active:
raise ValidationError(f'仓库[{instance.name}]未激活')
if not instance.is_locked:
if instance.is_locked:
raise ValidationError(f'仓库[{instance.name}]已锁定')
return instance

View file

@ -61,7 +61,7 @@ class StockTransferOrderSerializer(BaseSerializer):
if not instance.is_active:
raise ValidationError(f'仓库[{instance.name}]未激活')
if not instance.is_locked:
if instance.is_locked:
raise ValidationError(f'仓库[{instance.name}]已锁定')
return instance
@ -70,7 +70,7 @@ class StockTransferOrderSerializer(BaseSerializer):
if not instance.is_active:
raise ValidationError(f'仓库[{instance.name}]未激活')
if not instance.is_locked:
if instance.is_locked:
raise ValidationError(f'仓库[{instance.name}]已锁定')
return instance

View file

@ -79,7 +79,7 @@ class StockTransferOrderViewSet(BaseViewSet, ListModelMixin, RetrieveModelMixin,
else:
# 创建出库商品
stock_out_goods_set.append(StockOutGoods(
stock_out_order=stock_out_order, goods=stock_transfer_order.goods,
stock_out_order=stock_out_order, goods=stock_transfer_goods.goods,
stock_out_quantity=stock_transfer_goods.stock_transfer_quantity,
remain_quantity=stock_transfer_goods.stock_transfer_quantity, team=self.team
))
@ -105,7 +105,7 @@ class StockTransferOrderViewSet(BaseViewSet, ListModelMixin, RetrieveModelMixin,
else:
# 创建入库商品
stock_in_goods_set.append(StockInGoods(
stock_in_order=stock_in_order, goods=stock_transfer_order.goods,
stock_in_order=stock_in_order, goods=stock_transfer_goods.goods,
stock_in_quantity=stock_transfer_goods.stock_transfer_quantity,
remain_quantity=stock_transfer_goods.stock_transfer_quantity, team=self.team
))

View file

@ -3,5 +3,11 @@
## 功能
- 库存预警
[/api/inventory_warnings/]
- 销售任务提醒
[/api/sales_task_reminders/]
## 其他接口

View file

@ -43,6 +43,6 @@ urlpatterns = [
path('api/', include('apps.flow.urls')),
path('api/', include('apps.finance.urls')),
path('api/', include('apps.statistic.urls')),
path('api/', include('apps.message.urls')),
# path('api/', include('apps.message.urls')),
path('api/', include('apps.option.urls')),
]