|
|
@@ -1,9 +1,10 @@
|
|
|
-from fastapi import APIRouter, Depends, HTTPException, Query
|
|
|
+from fastapi import APIRouter, Depends, HTTPException, Query, Request
|
|
|
from typing import List, Optional
|
|
|
import db
|
|
|
import schemas
|
|
|
from dependencies import require_admin
|
|
|
import services.event_hooks as event_hooks
|
|
|
+from services.audit_service import audit_service
|
|
|
|
|
|
router = APIRouter(prefix="/admin/warehouse", tags=["warehouse"])
|
|
|
|
|
|
@@ -48,6 +49,7 @@ async def get_warehouse_stock(
|
|
|
|
|
|
@router.post("/stock", response_model=dict)
|
|
|
async def add_stock_item(
|
|
|
+ request: Request,
|
|
|
data: schemas.WarehouseItemCreate,
|
|
|
admin: dict = Depends(require_admin)
|
|
|
):
|
|
|
@@ -61,12 +63,27 @@ async def add_stock_item(
|
|
|
|
|
|
if not item_id:
|
|
|
raise HTTPException(status_code=500, detail="Failed to add stock item")
|
|
|
+
|
|
|
+ await audit_service.log(
|
|
|
+ user_id=admin['id'],
|
|
|
+ action="warehouse_add_item",
|
|
|
+ target_type="warehouse_stock",
|
|
|
+ target_id=item_id,
|
|
|
+ details={
|
|
|
+ "material_id": data.material_id,
|
|
|
+ "color": data.color_name,
|
|
|
+ "quantity": data.quantity,
|
|
|
+ "units_count": data.units_count
|
|
|
+ },
|
|
|
+ request=request
|
|
|
+ )
|
|
|
|
|
|
return {"id": item_id, "message": "Stock item added successfully"}
|
|
|
|
|
|
@router.patch("/stock/{item_id}", response_model=dict)
|
|
|
async def update_stock_item(
|
|
|
item_id: int,
|
|
|
+ request: Request,
|
|
|
data: schemas.WarehouseItemUpdate,
|
|
|
admin: dict = Depends(require_admin)
|
|
|
):
|
|
|
@@ -100,14 +117,38 @@ async def update_stock_item(
|
|
|
params.append(item_id)
|
|
|
|
|
|
db.execute_commit(query, tuple(params))
|
|
|
+
|
|
|
+ await audit_service.log(
|
|
|
+ user_id=admin['id'],
|
|
|
+ action="warehouse_update_item",
|
|
|
+ target_type="warehouse_stock",
|
|
|
+ target_id=item_id,
|
|
|
+ details=data.model_dump(exclude_unset=True),
|
|
|
+ request=request
|
|
|
+ )
|
|
|
|
|
|
return {"message": "Stock item updated successfully"}
|
|
|
|
|
|
@router.delete("/stock/{item_id}", response_model=dict)
|
|
|
async def delete_stock_item(
|
|
|
item_id: int,
|
|
|
+ request: Request,
|
|
|
admin: dict = Depends(require_admin)
|
|
|
):
|
|
|
+ # Fetch item before deleting for logs
|
|
|
+ item = db.execute_query("SELECT material_id, color_name FROM warehouse_stock WHERE id = %s", (item_id,))
|
|
|
+
|
|
|
query = "DELETE FROM warehouse_stock WHERE id = %s"
|
|
|
db.execute_commit(query, (item_id,))
|
|
|
+
|
|
|
+ if item:
|
|
|
+ await audit_service.log(
|
|
|
+ user_id=admin['id'],
|
|
|
+ action="warehouse_delete_item",
|
|
|
+ target_type="warehouse_stock",
|
|
|
+ target_id=item_id,
|
|
|
+ details=item[0],
|
|
|
+ request=request
|
|
|
+ )
|
|
|
+
|
|
|
return {"message": "Stock item deleted successfully"}
|