This commit is contained in:
2026-03-31 01:00:22 +08:00
parent 5cd8a21f24
commit dccd9bd81d
4 changed files with 24 additions and 2 deletions
+13 -2
View File
@@ -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"
@@ -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
+3
View File
@@ -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")
+6
View File
@@ -3222,7 +3222,10 @@ const InventoryView = {
<th>采购单</th>
<th>供应商</th>
<th>状态</th>
<th>订单创建</th>
<th>预计到货</th>
<th>实际到货</th>
<th>实际付款</th>
<th>总金额</th>
<th>已付款</th>
<th>操作</th>
@@ -3233,7 +3236,10 @@ const InventoryView = {
<td>{{ order.order_no }}</td>
<td>{{ order.supplier_name }}</td>
<td>{{ getPurchaseOrderStatusLabel(order.status) }}</td>
<td>{{ order.created_at ? formatDateTime(order.created_at) : '-' }}</td>
<td>{{ order.expected_date ? formatDate(order.expected_date) : '-' }}</td>
<td>{{ order.received_date ? formatDateTime(order.received_date) : '-' }}</td>
<td>{{ order.paid_date ? formatDateTime(order.paid_date) : '-' }}</td>
<td>{{ formatCurrency(order.total_amount || 0) }}</td>
<td>{{ formatCurrency(order.paid_amount || 0) }}</td>
<td>