Commit 4c4314e6 by Ooh-Ao

fd

parent a3a4f0b1
...@@ -16,14 +16,16 @@ from ..schemas.borrow_schema import BorrowTransactionBase ...@@ -16,14 +16,16 @@ from ..schemas.borrow_schema import BorrowTransactionBase
# CREATE # CREATE
async def create_borrow_transaction(db: AsyncSession, borrow_in: BorrowTransactionBase): async def create_borrow_transaction(db: AsyncSession, borrow_in: BorrowTransactionBase):
""" """
สมมติว่าตอนสร้างจะเป็นสถานะ requested ก่อน สร้าง BorrowTransaction โดยที่ถ้าสถานะเป็น 'approved'
ยังไม่ตัดจำนวนใน project_equipment ระบบจะตัดจำนวนในสต็อกทันที (deduct stock) และบันทึกสถานะเป็น 'approved'
Admin เป็นผู้สร้าง transaction นี้และระบุ memberId ที่เบิกอุปกรณ์
""" """
# หา ProjectEquipment ที่อ้างอิง
pe_db = await db.get(ProjectEquipment, borrow_in.peId) pe_db = await db.get(ProjectEquipment, borrow_in.peId)
if not pe_db: if not pe_db:
raise HTTPException(status_code=404, detail="ProjectEquipment not found") raise HTTPException(status_code=404, detail="ProjectEquipment not found")
# ตรวจสอบ member อยู่ใน project หรือไม่ # ตรวจสอบว่า member อยู่ใน project หรือไม่
result_pm = await db.execute( result_pm = await db.execute(
select(ProjectMember).where( select(ProjectMember).where(
ProjectMember.memberId == borrow_in.memberId, ProjectMember.memberId == borrow_in.memberId,
...@@ -34,13 +36,25 @@ async def create_borrow_transaction(db: AsyncSession, borrow_in: BorrowTransacti ...@@ -34,13 +36,25 @@ async def create_borrow_transaction(db: AsyncSession, borrow_in: BorrowTransacti
if not pm_db: if not pm_db:
raise HTTPException(status_code=403, detail="Member is not in this project") raise HTTPException(status_code=403, detail="Member is not in this project")
# สร้าง BorrowTransaction (สถานะเริ่มต้นเป็น requested) # กำหนดสถานะเริ่มต้นจาก input ถ้ามี, ถ้าไม่ระบุให้เป็น "requested"
status = borrow_in.status if borrow_in.status else "requested"
new_borrow = BorrowTransaction( new_borrow = BorrowTransaction(
memberId=borrow_in.memberId, memberId=borrow_in.memberId,
peId=borrow_in.peId, peId=borrow_in.peId,
quantity_borrowed=borrow_in.quantity_borrowed, quantity_borrowed=borrow_in.quantity_borrowed,
status=borrow_in.status or "requested" # ตั้งเป็น requested ถ้าไม่กำหนด status=status
) )
# ถ้าสถานะเป็น "approved" ให้ทำการตรวจสอบและตัดสต็อกทันที
if status == "approved":
if pe_db.quantity_in_project < borrow_in.quantity_borrowed:
raise HTTPException(status_code=400, detail="Not enough equipment to approve")
pe_db.quantity_in_project -= borrow_in.quantity_borrowed
# บันทึกการตัดสต็อก (อาจเพิ่ม approved_by, approved_at ได้ที่นี่)
new_borrow.approved_by = borrow_in.approved_by # ถ้ามีการส่ง admin id
new_borrow.approved_at = datetime.utcnow()
db.add(pe_db)
try: try:
db.add(new_borrow) db.add(new_borrow)
...@@ -52,7 +66,6 @@ async def create_borrow_transaction(db: AsyncSession, borrow_in: BorrowTransacti ...@@ -52,7 +66,6 @@ async def create_borrow_transaction(db: AsyncSession, borrow_in: BorrowTransacti
return new_borrow return new_borrow
# UPDATE # UPDATE
async def update_borrow_transaction(db: AsyncSession, borrow_id: UUID, borrow_up: BorrowTransactionBase): async def update_borrow_transaction(db: AsyncSession, borrow_id: UUID, borrow_up: BorrowTransactionBase):
borrow_db = await db.get(BorrowTransaction, borrow_id) borrow_db = await db.get(BorrowTransaction, borrow_id)
......
...@@ -4,10 +4,13 @@ from typing import Optional ...@@ -4,10 +4,13 @@ from typing import Optional
from datetime import datetime from datetime import datetime
class BorrowTransactionBase(BaseModel): class BorrowTransactionBase(BaseModel):
# peId: UUID
quantity_borrowed: int quantity_borrowed: int
status: str = "borrowed" # เช่น requested, borrowed, returned status: str = "borrowed" # เช่น requested, borrowed, returned
returned_date: Optional[datetime] = None returned_date: Optional[datetime] = None
memberId: UUID
# approved_by: UUID
class BorrowTransactionCreate(BorrowTransactionBase): class BorrowTransactionCreate(BorrowTransactionBase):
peId: UUID peId: UUID
memberId: UUID memberId: UUID
......
...@@ -2,18 +2,20 @@ import { TranslateService } from "@ngx-translate/core"; ...@@ -2,18 +2,20 @@ import { TranslateService } from "@ngx-translate/core";
import { BaseModel } from "./base.model"; import { BaseModel } from "./base.model";
export class BorrowTransactionsModel extends BaseModel { export class BorrowTransactionsModel extends BaseModel {
borrow_id: string;
pe_id: string;
quantity_borrowed: number; quantity_borrowed: number;
status: string; status: string;
returned_date?: string; returned_date: string;
borrowId: string;
created_at: string;
peId: string;
memberId: string;
constructor(data?: Partial<BorrowTransactionsModel>, translateService?: TranslateService) { constructor(data?: Partial<BorrowTransactionsModel>, translateService?: TranslateService) {
super(data, translateService); super(data, translateService);
this.borrow_id = data?.borrow_id ?? ''; this.borrowId = data?.borrowId ?? '';
this.pe_id = data?.pe_id ?? ''; this.peId = data?.peId ?? '';
this.quantity_borrowed = data?.quantity_borrowed ?? 0; this.quantity_borrowed = data?.quantity_borrowed ?? 0;
this.status = data?.status ?? ''; this.status = data?.status ?? '';
this.returned_date = data?.returned_date ?? null; this.returned_date = data?.returned_date ?? ''
} }
} }
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment