x
This commit is contained in:
@@ -10,7 +10,7 @@
|
|||||||
"""
|
"""
|
||||||
from fastapi import APIRouter, Depends, Query, HTTPException
|
from fastapi import APIRouter, Depends, Query, HTTPException
|
||||||
from sqlalchemy.ext.asyncio import AsyncSession
|
from sqlalchemy.ext.asyncio import AsyncSession
|
||||||
from sqlalchemy import select
|
from sqlalchemy import select, func
|
||||||
from typing import Optional, List
|
from typing import Optional, List
|
||||||
|
|
||||||
from database.database import get_db_session
|
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,
|
total_amount=order.total_amount,
|
||||||
paid_amount=order.paid_amount,
|
paid_amount=order.paid_amount,
|
||||||
remark=order.remark,
|
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,
|
paid_amount=order.paid_amount,
|
||||||
remark=order.remark,
|
remark=order.remark,
|
||||||
created_at=order.created_at,
|
created_at=order.created_at,
|
||||||
|
received_date=order.received_date,
|
||||||
|
paid_date=order.paid_date,
|
||||||
items=[
|
items=[
|
||||||
PurchaseOrderItemResponse(
|
PurchaseOrderItemResponse(
|
||||||
id=item.id,
|
id=item.id,
|
||||||
@@ -307,7 +311,13 @@ async def update_purchase_order_status(
|
|||||||
if order.status == "received" and new_status != "paid":
|
if order.status == "received" and new_status != "paid":
|
||||||
raise HTTPException(status_code=400, detail="已收货的采购订单只能标记为已付款")
|
raise HTTPException(status_code=400, detail="已收货的采购订单只能标记为已付款")
|
||||||
|
|
||||||
|
# 更新状态和对应时间
|
||||||
order.status = new_status
|
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.commit()
|
||||||
await db_session.refresh(order)
|
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())
|
any_received = any((item.received_quantity or 0) > 0 for item in item_map.values())
|
||||||
if all_received:
|
if all_received:
|
||||||
order.status = "received"
|
order.status = "received"
|
||||||
|
order.received_date = func.now()
|
||||||
elif any_received:
|
elif any_received:
|
||||||
order.status = "partial_received"
|
order.status = "partial_received"
|
||||||
|
|
||||||
|
|||||||
@@ -28,6 +28,8 @@ class PurchaseOrderResponse(BaseModel):
|
|||||||
paid_amount: float
|
paid_amount: float
|
||||||
remark: Optional[str]
|
remark: Optional[str]
|
||||||
created_at: datetime
|
created_at: datetime
|
||||||
|
received_date: Optional[datetime]
|
||||||
|
paid_date: Optional[datetime]
|
||||||
|
|
||||||
class Config:
|
class Config:
|
||||||
from_attributes = True
|
from_attributes = True
|
||||||
|
|||||||
@@ -712,6 +712,9 @@ class PurchaseOrder(Base):
|
|||||||
operator_id = Column(Integer, ForeignKey("users.id"), nullable=True)
|
operator_id = Column(Integer, ForeignKey("users.id"), nullable=True)
|
||||||
created_at = Column(DateTime, default=func.now())
|
created_at = Column(DateTime, default=func.now())
|
||||||
updated_at = Column(DateTime, default=func.now(), onupdate=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")
|
supplier = relationship("Supplier", back_populates="purchase_orders")
|
||||||
items = relationship("PurchaseOrderItem", back_populates="order", cascade="all, delete-orphan")
|
items = relationship("PurchaseOrderItem", back_populates="order", cascade="all, delete-orphan")
|
||||||
|
|||||||
@@ -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>
|
||||||
|
<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.order_no }}</td>
|
||||||
<td>{{ order.supplier_name }}</td>
|
<td>{{ order.supplier_name }}</td>
|
||||||
<td>{{ getPurchaseOrderStatusLabel(order.status) }}</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.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.total_amount || 0) }}</td>
|
||||||
<td>{{ formatCurrency(order.paid_amount || 0) }}</td>
|
<td>{{ formatCurrency(order.paid_amount || 0) }}</td>
|
||||||
<td>
|
<td>
|
||||||
|
|||||||
Reference in New Issue
Block a user