76 lines
2.5 KiB
Python
76 lines
2.5 KiB
Python
from typing import List, Dict, Any
|
|
from fastapi import APIRouter, Depends, HTTPException, Query
|
|
from sqlalchemy.orm import Session
|
|
from core.database import get_core_db
|
|
from core.security import get_current_user, validate_access_to_resource
|
|
from api.v1.modules.a76.invoice_settings import services
|
|
from api.v1.modules.a76.invoice_settings.dto import InvoiceSettingsRequest, InvoiceSettingsResponse, OperationType
|
|
|
|
router = APIRouter(
|
|
prefix="/a76/invoice-settings",
|
|
tags=["a76/invoice-settings"]
|
|
)
|
|
|
|
@router.get("/{invoice_type}", response_model=InvoiceSettingsResponse)
|
|
def get_invoice_settings(
|
|
invoice_type: str,
|
|
operation_type: OperationType = Query(...),
|
|
company_id: int = Query(...),
|
|
db: Session = Depends(get_core_db),
|
|
current_user: Dict[str, Any] = Depends(get_current_user),
|
|
):
|
|
"""Get settings for a specific invoice type and operation"""
|
|
tenant_id = validate_access_to_resource(db, company_id, current_user)
|
|
|
|
settings = services.get_settings(
|
|
db,
|
|
tenant_id,
|
|
company_id,
|
|
invoice_type,
|
|
operation_type
|
|
)
|
|
|
|
if not settings:
|
|
# Return empty default if not found, to simplify frontend logic
|
|
return InvoiceSettingsResponse(
|
|
invoice_type=invoice_type,
|
|
operation_type=operation_type,
|
|
settings={},
|
|
id=0,
|
|
tenant_id=tenant_id,
|
|
company_id=company_id
|
|
)
|
|
return InvoiceSettingsResponse.model_validate(settings)
|
|
|
|
@router.get("/", response_model=List[InvoiceSettingsResponse])
|
|
def list_invoice_settings(
|
|
company_id: int = Query(...),
|
|
db: Session = Depends(get_core_db),
|
|
current_user: Dict[str, Any] = Depends(get_current_user),
|
|
):
|
|
"""List all configured settings for validation or overview"""
|
|
tenant_id = validate_access_to_resource(db, company_id, current_user)
|
|
|
|
return services.list_settings(
|
|
db,
|
|
tenant_id,
|
|
company_id
|
|
)
|
|
|
|
@router.put("/", response_model=InvoiceSettingsResponse)
|
|
def save_invoice_settings(
|
|
settings_data: InvoiceSettingsRequest,
|
|
company_id: int = Query(...),
|
|
db: Session = Depends(get_core_db),
|
|
current_user: Dict[str, Any] = Depends(get_current_user),
|
|
):
|
|
"""Create or update invoice settings"""
|
|
tenant_id = validate_access_to_resource(db, company_id, current_user)
|
|
|
|
return services.upsert_settings(
|
|
db,
|
|
tenant_id,
|
|
company_id,
|
|
settings_data
|
|
)
|