From dccd9bd81de9688b3a5510519d223bb8f4dc0d2d Mon Sep 17 00:00:00 2001 From: SZCJW <792430652@qq.com> Date: Tue, 31 Mar 2026 01:00:22 +0800 Subject: [PATCH] x --- src/api/inventory/purchase_order_routes.py | 15 +++++++++++++-- .../inventory/schemas/purchase_order_schemas.py | 2 ++ src/models/database.py | 3 +++ static/vue-app.js | 6 ++++++ 4 files changed, 24 insertions(+), 2 deletions(-) diff --git a/src/api/inventory/purchase_order_routes.py b/src/api/inventory/purchase_order_routes.py index accde36..b3479c7 100644 --- a/src/api/inventory/purchase_order_routes.py +++ b/src/api/inventory/purchase_order_routes.py @@ -10,7 +10,7 @@ """ from fastapi import APIRouter, Depends, Query, HTTPException from sqlalchemy.ext.asyncio import AsyncSession -from sqlalchemy import select +from sqlalchemy import select, func from typing import Optional, List from database.database import get_db_session @@ -48,7 +48,9 @@ def _build_purchase_order_response(order: PurchaseOrder, supplier_name: str) -> total_amount=order.total_amount, paid_amount=order.paid_amount, remark=order.remark, - created_at=order.created_at + created_at=order.created_at, + received_date=order.received_date, + paid_date=order.paid_date ) @@ -91,6 +93,8 @@ async def _build_purchase_order_detail( paid_amount=order.paid_amount, remark=order.remark, created_at=order.created_at, + received_date=order.received_date, + paid_date=order.paid_date, items=[ PurchaseOrderItemResponse( id=item.id, @@ -307,7 +311,13 @@ async def update_purchase_order_status( if order.status == "received" and new_status != "paid": raise HTTPException(status_code=400, detail="已收货的采购订单只能标记为已付款") + # 更新状态和对应时间 order.status = new_status + if new_status == "received": + order.received_date = func.now() + elif new_status == "paid": + order.paid_date = func.now() + await db_session.commit() await db_session.refresh(order) @@ -397,6 +407,7 @@ async def receive_purchase_order( any_received = any((item.received_quantity or 0) > 0 for item in item_map.values()) if all_received: order.status = "received" + order.received_date = func.now() elif any_received: order.status = "partial_received" diff --git a/src/api/inventory/schemas/purchase_order_schemas.py b/src/api/inventory/schemas/purchase_order_schemas.py index bfbbbf9..f3bcd43 100644 --- a/src/api/inventory/schemas/purchase_order_schemas.py +++ b/src/api/inventory/schemas/purchase_order_schemas.py @@ -28,6 +28,8 @@ class PurchaseOrderResponse(BaseModel): paid_amount: float remark: Optional[str] created_at: datetime + received_date: Optional[datetime] + paid_date: Optional[datetime] class Config: from_attributes = True diff --git a/src/models/database.py b/src/models/database.py index cf8539b..cc89e7a 100644 --- a/src/models/database.py +++ b/src/models/database.py @@ -712,6 +712,9 @@ class PurchaseOrder(Base): operator_id = Column(Integer, ForeignKey("users.id"), nullable=True) created_at = Column(DateTime, default=func.now()) updated_at = Column(DateTime, default=func.now(), onupdate=func.now()) + # 状态变更时间 + received_date = Column(DateTime, nullable=True) # 已收货时间 + paid_date = Column(DateTime, nullable=True) # 已付款时间 supplier = relationship("Supplier", back_populates="purchase_orders") items = relationship("PurchaseOrderItem", back_populates="order", cascade="all, delete-orphan") diff --git a/static/vue-app.js b/static/vue-app.js index 4a50ba1..860eb0d 100644 --- a/static/vue-app.js +++ b/static/vue-app.js @@ -3222,7 +3222,10 @@ const InventoryView = {