fix(lint): auto-fix ruff violations and tune lint rules
- Auto-fixed 4,496 lint issues (import sorting, modern syntax, etc.) - Added ignore rules for patterns intentional in this codebase: E402 (late imports), E712 (SQLAlchemy filters), B904 (raise from), SIM108/SIM105/SIM117 (readability preferences) - Added per-file ignores for tests and scripts - Excluded broken scripts/rename_terminology.py (has curly quotes) Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
@@ -26,7 +26,7 @@ def __getattr__(name: str):
|
||||
from app.modules.orders.definition import orders_module
|
||||
|
||||
return orders_module
|
||||
elif name == "get_orders_module_with_routers":
|
||||
if name == "get_orders_module_with_routers":
|
||||
from app.modules.orders.definition import get_orders_module_with_routers
|
||||
|
||||
return get_orders_module_with_routers
|
||||
|
||||
@@ -4,9 +4,10 @@ Revision ID: orders_001
|
||||
Revises: customers_001
|
||||
Create Date: 2026-02-07
|
||||
"""
|
||||
from alembic import op
|
||||
import sqlalchemy as sa
|
||||
|
||||
from alembic import op
|
||||
|
||||
revision = "orders_001"
|
||||
down_revision = "customers_001"
|
||||
branch_labels = None
|
||||
|
||||
@@ -5,14 +5,14 @@ Orders module database models.
|
||||
This module contains the canonical implementations of order-related models.
|
||||
"""
|
||||
|
||||
from app.modules.orders.models.order import Order, OrderItem
|
||||
from app.modules.orders.models.order_item_exception import OrderItemException
|
||||
from app.modules.orders.models.invoice import (
|
||||
Invoice,
|
||||
InvoiceStatus,
|
||||
VATRegime,
|
||||
StoreInvoiceSettings,
|
||||
VATRegime,
|
||||
)
|
||||
from app.modules.orders.models.order import Order, OrderItem
|
||||
from app.modules.orders.models.order_item_exception import OrderItemException
|
||||
|
||||
__all__ = [
|
||||
"Order",
|
||||
|
||||
@@ -16,6 +16,8 @@ Money values are stored as integer cents (e.g., €105.91 = 10591).
|
||||
See docs/architecture/money-handling.md for details.
|
||||
"""
|
||||
|
||||
from typing import TYPE_CHECKING
|
||||
|
||||
from sqlalchemy import (
|
||||
Boolean,
|
||||
Column,
|
||||
@@ -27,10 +29,9 @@ from sqlalchemy import (
|
||||
String,
|
||||
Text,
|
||||
)
|
||||
from typing import TYPE_CHECKING
|
||||
|
||||
if TYPE_CHECKING:
|
||||
from app.modules.orders.models.order_item_exception import OrderItemException
|
||||
pass
|
||||
from sqlalchemy.dialects.sqlite import JSON
|
||||
from sqlalchemy.orm import relationship
|
||||
|
||||
|
||||
@@ -24,13 +24,13 @@ def __getattr__(name: str):
|
||||
if name == "admin_router":
|
||||
from app.modules.orders.routes.api import admin_router
|
||||
return admin_router
|
||||
elif name == "admin_exceptions_router":
|
||||
if name == "admin_exceptions_router":
|
||||
from app.modules.orders.routes.api import admin_exceptions_router
|
||||
return admin_exceptions_router
|
||||
elif name == "store_router":
|
||||
if name == "store_router":
|
||||
from app.modules.orders.routes.api import store_router
|
||||
return store_router
|
||||
elif name == "store_exceptions_router":
|
||||
if name == "store_exceptions_router":
|
||||
from app.modules.orders.routes.api import store_exceptions_router
|
||||
return store_exceptions_router
|
||||
raise AttributeError(f"module {__name__!r} has no attribute {name!r}")
|
||||
|
||||
@@ -29,7 +29,7 @@ def __getattr__(name: str):
|
||||
if name == "admin_router":
|
||||
from app.modules.orders.routes.api.admin import admin_router
|
||||
return admin_router
|
||||
elif name == "store_router":
|
||||
if name == "store_router":
|
||||
from app.modules.orders.routes.api.store import store_router
|
||||
return store_router
|
||||
raise AttributeError(f"module {__name__!r} has no attribute {name!r}")
|
||||
|
||||
@@ -22,8 +22,6 @@ from sqlalchemy.orm import Session
|
||||
from app.api.deps import get_current_admin_api, require_module_access
|
||||
from app.core.database import get_db
|
||||
from app.modules.enums import FrontendType
|
||||
from app.modules.orders.services.order_service import order_service
|
||||
from models.schema.auth import UserContext
|
||||
from app.modules.orders.schemas import (
|
||||
AdminOrderItem,
|
||||
AdminOrderListResponse,
|
||||
@@ -34,6 +32,8 @@ from app.modules.orders.schemas import (
|
||||
OrderDetailResponse,
|
||||
ShippingLabelInfo,
|
||||
)
|
||||
from app.modules.orders.services.order_service import order_service
|
||||
from models.schema.auth import UserContext
|
||||
|
||||
# Base router for orders
|
||||
_orders_router = APIRouter(
|
||||
|
||||
@@ -17,8 +17,6 @@ from sqlalchemy.orm import Session
|
||||
from app.api.deps import get_current_admin_api, require_module_access
|
||||
from app.core.database import get_db
|
||||
from app.modules.enums import FrontendType
|
||||
from app.modules.orders.services.order_item_exception_service import order_item_exception_service
|
||||
from models.schema.auth import UserContext
|
||||
from app.modules.orders.schemas import (
|
||||
BulkResolveRequest,
|
||||
BulkResolveResponse,
|
||||
@@ -28,6 +26,10 @@ from app.modules.orders.schemas import (
|
||||
OrderItemExceptionStats,
|
||||
ResolveExceptionRequest,
|
||||
)
|
||||
from app.modules.orders.services.order_item_exception_service import (
|
||||
order_item_exception_service,
|
||||
)
|
||||
from models.schema.auth import UserContext
|
||||
|
||||
logger = logging.getLogger(__name__)
|
||||
|
||||
|
||||
@@ -17,15 +17,15 @@ from sqlalchemy.orm import Session
|
||||
from app.api.deps import get_current_store_api, require_module_access
|
||||
from app.core.database import get_db
|
||||
from app.modules.enums import FrontendType
|
||||
from app.modules.orders.services.order_inventory_service import order_inventory_service
|
||||
from app.modules.orders.services.order_service import order_service
|
||||
from models.schema.auth import UserContext
|
||||
from app.modules.orders.schemas import (
|
||||
OrderDetailResponse,
|
||||
OrderListResponse,
|
||||
OrderResponse,
|
||||
OrderUpdate,
|
||||
)
|
||||
from app.modules.orders.services.order_inventory_service import order_inventory_service
|
||||
from app.modules.orders.services.order_service import order_service
|
||||
from models.schema.auth import UserContext
|
||||
|
||||
# Base router for orders
|
||||
_orders_router = APIRouter(
|
||||
|
||||
@@ -16,8 +16,6 @@ from sqlalchemy.orm import Session
|
||||
from app.api.deps import get_current_store_api, require_module_access
|
||||
from app.core.database import get_db
|
||||
from app.modules.enums import FrontendType
|
||||
from app.modules.orders.services.order_item_exception_service import order_item_exception_service
|
||||
from models.schema.auth import UserContext
|
||||
from app.modules.orders.schemas import (
|
||||
BulkResolveRequest,
|
||||
BulkResolveResponse,
|
||||
@@ -27,6 +25,10 @@ from app.modules.orders.schemas import (
|
||||
OrderItemExceptionStats,
|
||||
ResolveExceptionRequest,
|
||||
)
|
||||
from app.modules.orders.services.order_item_exception_service import (
|
||||
order_item_exception_service,
|
||||
)
|
||||
from models.schema.auth import UserContext
|
||||
|
||||
logger = logging.getLogger(__name__)
|
||||
|
||||
|
||||
@@ -38,8 +38,6 @@ from app.modules.enums import FrontendType
|
||||
from app.modules.orders.exceptions import (
|
||||
InvoicePDFNotFoundException,
|
||||
)
|
||||
from app.modules.orders.services.invoice_service import invoice_service
|
||||
from models.schema.auth import UserContext
|
||||
from app.modules.orders.schemas import (
|
||||
InvoiceCreate,
|
||||
InvoiceListPaginatedResponse,
|
||||
@@ -52,6 +50,8 @@ from app.modules.orders.schemas import (
|
||||
StoreInvoiceSettingsResponse,
|
||||
StoreInvoiceSettingsUpdate,
|
||||
)
|
||||
from app.modules.orders.services.invoice_service import invoice_service
|
||||
from models.schema.auth import UserContext
|
||||
|
||||
store_invoices_router = APIRouter(
|
||||
prefix="/invoices",
|
||||
|
||||
@@ -20,17 +20,21 @@ from sqlalchemy.orm import Session
|
||||
|
||||
from app.api.deps import get_current_customer_api
|
||||
from app.core.database import get_db
|
||||
from app.modules.orders.exceptions import OrderNotFoundException
|
||||
from app.modules.tenancy.exceptions import StoreNotFoundException
|
||||
from app.modules.orders.exceptions import InvoicePDFNotFoundException
|
||||
from app.modules.customers.schemas import CustomerContext
|
||||
from app.modules.orders.services import order_service
|
||||
from app.modules.orders.services.invoice_service import invoice_service # noqa: MOD-004 - Core invoice service
|
||||
from app.modules.orders.exceptions import (
|
||||
InvoicePDFNotFoundException,
|
||||
OrderNotFoundException,
|
||||
)
|
||||
from app.modules.orders.schemas import (
|
||||
OrderDetailResponse,
|
||||
OrderListResponse,
|
||||
OrderResponse,
|
||||
)
|
||||
from app.modules.orders.services import order_service
|
||||
from app.modules.orders.services.invoice_service import (
|
||||
invoice_service, # noqa: MOD-004 - Core invoice service
|
||||
)
|
||||
from app.modules.tenancy.exceptions import StoreNotFoundException
|
||||
|
||||
router = APIRouter()
|
||||
logger = logging.getLogger(__name__)
|
||||
|
||||
@@ -12,9 +12,9 @@ from sqlalchemy.orm import Session
|
||||
|
||||
from app.api.deps import get_db, require_menu_access
|
||||
from app.modules.core.utils.page_context import get_admin_context
|
||||
from app.templates_config import templates
|
||||
from app.modules.enums import FrontendType
|
||||
from app.modules.tenancy.models import User
|
||||
from app.templates_config import templates
|
||||
|
||||
router = APIRouter()
|
||||
|
||||
|
||||
@@ -13,8 +13,8 @@ from sqlalchemy.orm import Session
|
||||
|
||||
from app.api.deps import get_current_store_from_cookie_or_header, get_db
|
||||
from app.modules.core.utils.page_context import get_store_context
|
||||
from app.templates_config import templates
|
||||
from app.modules.tenancy.models import User
|
||||
from app.templates_config import templates
|
||||
|
||||
router = APIRouter()
|
||||
|
||||
|
||||
@@ -5,82 +5,80 @@ Orders module Pydantic schemas.
|
||||
This module contains the canonical implementations of order-related schemas.
|
||||
"""
|
||||
|
||||
from app.modules.orders.schemas.invoice import (
|
||||
InvoiceBuyerDetails,
|
||||
# Invoice CRUD schemas
|
||||
InvoiceCreate,
|
||||
# Line item schemas
|
||||
InvoiceLineItem,
|
||||
InvoiceLineItemResponse,
|
||||
# Pagination
|
||||
InvoiceListPaginatedResponse,
|
||||
InvoiceListResponse,
|
||||
InvoiceManualCreate,
|
||||
# PDF
|
||||
InvoicePDFGeneratedResponse,
|
||||
InvoiceResponse,
|
||||
# Address schemas
|
||||
InvoiceSellerDetails,
|
||||
# Backward compatibility
|
||||
InvoiceSettingsCreate,
|
||||
InvoiceSettingsResponse,
|
||||
InvoiceSettingsUpdate,
|
||||
InvoiceStatsResponse,
|
||||
InvoiceStatusUpdate,
|
||||
# Invoice settings schemas
|
||||
StoreInvoiceSettingsCreate,
|
||||
StoreInvoiceSettingsResponse,
|
||||
StoreInvoiceSettingsUpdate,
|
||||
)
|
||||
from app.modules.orders.schemas.order import (
|
||||
# Address schemas
|
||||
AddressSnapshot,
|
||||
AddressSnapshotResponse,
|
||||
# Order item schemas
|
||||
OrderItemCreate,
|
||||
OrderItemExceptionBrief,
|
||||
OrderItemResponse,
|
||||
# Customer schemas
|
||||
CustomerSnapshot,
|
||||
CustomerSnapshotResponse,
|
||||
# Order CRUD schemas
|
||||
OrderCreate,
|
||||
OrderUpdate,
|
||||
OrderTrackingUpdate,
|
||||
OrderItemStateUpdate,
|
||||
# Order response schemas
|
||||
OrderResponse,
|
||||
OrderDetailResponse,
|
||||
OrderListResponse,
|
||||
OrderListItem,
|
||||
# Admin schemas
|
||||
AdminOrderItem,
|
||||
AdminOrderListResponse,
|
||||
AdminOrderStats,
|
||||
AdminOrderStatusUpdate,
|
||||
AdminStoreWithOrders,
|
||||
AdminStoresWithOrdersResponse,
|
||||
AdminStoreWithOrders,
|
||||
# Customer schemas
|
||||
CustomerSnapshot,
|
||||
CustomerSnapshotResponse,
|
||||
LetzshopOrderConfirmItem,
|
||||
LetzshopOrderConfirmRequest,
|
||||
# Letzshop schemas
|
||||
LetzshopOrderImport,
|
||||
LetzshopShippingInfo,
|
||||
LetzshopOrderConfirmItem,
|
||||
LetzshopOrderConfirmRequest,
|
||||
# Shipping schemas
|
||||
MarkAsShippedRequest,
|
||||
# Order CRUD schemas
|
||||
OrderCreate,
|
||||
OrderDetailResponse,
|
||||
# Order item schemas
|
||||
OrderItemCreate,
|
||||
OrderItemExceptionBrief,
|
||||
OrderItemResponse,
|
||||
OrderItemStateUpdate,
|
||||
OrderListItem,
|
||||
OrderListResponse,
|
||||
# Order response schemas
|
||||
OrderResponse,
|
||||
OrderTrackingUpdate,
|
||||
OrderUpdate,
|
||||
ShippingLabelInfo,
|
||||
)
|
||||
|
||||
from app.modules.orders.schemas.order_item_exception import (
|
||||
OrderItemExceptionResponse,
|
||||
OrderItemExceptionBriefResponse,
|
||||
OrderItemExceptionListResponse,
|
||||
OrderItemExceptionStats,
|
||||
ResolveExceptionRequest,
|
||||
IgnoreExceptionRequest,
|
||||
AutoMatchResult,
|
||||
BulkResolveRequest,
|
||||
BulkResolveResponse,
|
||||
AutoMatchResult,
|
||||
)
|
||||
|
||||
from app.modules.orders.schemas.invoice import (
|
||||
# Invoice settings schemas
|
||||
StoreInvoiceSettingsCreate,
|
||||
StoreInvoiceSettingsUpdate,
|
||||
StoreInvoiceSettingsResponse,
|
||||
# Line item schemas
|
||||
InvoiceLineItem,
|
||||
InvoiceLineItemResponse,
|
||||
# Address schemas
|
||||
InvoiceSellerDetails,
|
||||
InvoiceBuyerDetails,
|
||||
# Invoice CRUD schemas
|
||||
InvoiceCreate,
|
||||
InvoiceManualCreate,
|
||||
InvoiceResponse,
|
||||
InvoiceListResponse,
|
||||
InvoiceStatusUpdate,
|
||||
# Pagination
|
||||
InvoiceListPaginatedResponse,
|
||||
# PDF
|
||||
InvoicePDFGeneratedResponse,
|
||||
InvoiceStatsResponse,
|
||||
# Backward compatibility
|
||||
InvoiceSettingsCreate,
|
||||
InvoiceSettingsUpdate,
|
||||
InvoiceSettingsResponse,
|
||||
IgnoreExceptionRequest,
|
||||
OrderItemExceptionBriefResponse,
|
||||
OrderItemExceptionListResponse,
|
||||
OrderItemExceptionResponse,
|
||||
OrderItemExceptionStats,
|
||||
ResolveExceptionRequest,
|
||||
)
|
||||
|
||||
__all__ = [
|
||||
|
||||
@@ -9,7 +9,6 @@ from datetime import datetime
|
||||
|
||||
from pydantic import BaseModel, ConfigDict, Field
|
||||
|
||||
|
||||
# ============================================================================
|
||||
# Exception Response Schemas
|
||||
# ============================================================================
|
||||
|
||||
@@ -5,29 +5,29 @@ Orders module services.
|
||||
This module contains the canonical implementations of order-related services.
|
||||
"""
|
||||
|
||||
from app.modules.orders.services.order_service import (
|
||||
order_service,
|
||||
OrderService,
|
||||
)
|
||||
from app.modules.orders.services.order_inventory_service import (
|
||||
order_inventory_service,
|
||||
OrderInventoryService,
|
||||
)
|
||||
from app.modules.orders.services.order_item_exception_service import (
|
||||
order_item_exception_service,
|
||||
OrderItemExceptionService,
|
||||
)
|
||||
from app.modules.orders.services.invoice_service import (
|
||||
invoice_service,
|
||||
InvoiceService,
|
||||
from app.modules.orders.services.customer_order_service import (
|
||||
CustomerOrderService,
|
||||
customer_order_service,
|
||||
)
|
||||
from app.modules.orders.services.invoice_pdf_service import (
|
||||
invoice_pdf_service,
|
||||
InvoicePDFService,
|
||||
invoice_pdf_service,
|
||||
)
|
||||
from app.modules.orders.services.customer_order_service import (
|
||||
customer_order_service,
|
||||
CustomerOrderService,
|
||||
from app.modules.orders.services.invoice_service import (
|
||||
InvoiceService,
|
||||
invoice_service,
|
||||
)
|
||||
from app.modules.orders.services.order_inventory_service import (
|
||||
OrderInventoryService,
|
||||
order_inventory_service,
|
||||
)
|
||||
from app.modules.orders.services.order_item_exception_service import (
|
||||
OrderItemExceptionService,
|
||||
order_item_exception_service,
|
||||
)
|
||||
from app.modules.orders.services.order_service import (
|
||||
OrderService,
|
||||
order_service,
|
||||
)
|
||||
|
||||
__all__ = [
|
||||
|
||||
@@ -20,15 +20,15 @@ from sqlalchemy.orm import Session
|
||||
|
||||
from app.exceptions import ValidationException
|
||||
from app.modules.orders.exceptions import (
|
||||
InvoiceSettingsNotFoundException,
|
||||
InvoiceNotFoundException,
|
||||
InvoiceSettingsNotFoundException,
|
||||
OrderNotFoundException,
|
||||
)
|
||||
from app.modules.orders.models.invoice import (
|
||||
Invoice,
|
||||
InvoiceStatus,
|
||||
VATRegime,
|
||||
StoreInvoiceSettings,
|
||||
VATRegime,
|
||||
)
|
||||
from app.modules.orders.models.order import Order
|
||||
from app.modules.orders.schemas.invoice import (
|
||||
@@ -126,9 +126,8 @@ class InvoiceService:
|
||||
if seller_oss_registered:
|
||||
vat_rate = self.get_vat_rate_for_country(buyer_country)
|
||||
return VATRegime.OSS, vat_rate, buyer_country
|
||||
else:
|
||||
vat_rate = self.get_vat_rate_for_country(seller_country)
|
||||
return VATRegime.ORIGIN, vat_rate, buyer_country
|
||||
vat_rate = self.get_vat_rate_for_country(seller_country)
|
||||
return VATRegime.ORIGIN, vat_rate, buyer_country
|
||||
|
||||
return VATRegime.EXEMPT, Decimal("0.00"), buyer_country
|
||||
|
||||
|
||||
@@ -15,7 +15,6 @@ from sqlalchemy import func
|
||||
|
||||
from app.modules.contracts.features import (
|
||||
FeatureDeclaration,
|
||||
FeatureProviderProtocol,
|
||||
FeatureScope,
|
||||
FeatureType,
|
||||
FeatureUsage,
|
||||
|
||||
@@ -11,6 +11,7 @@ All operations are logged to the inventory_transactions table for audit trail.
|
||||
"""
|
||||
|
||||
import logging
|
||||
|
||||
from sqlalchemy.orm import Session
|
||||
|
||||
from app.exceptions import ValidationException
|
||||
@@ -18,7 +19,6 @@ from app.modules.inventory.exceptions import (
|
||||
InsufficientInventoryException,
|
||||
InventoryNotFoundException,
|
||||
)
|
||||
from app.modules.orders.exceptions import OrderNotFoundException
|
||||
from app.modules.inventory.models.inventory import Inventory
|
||||
from app.modules.inventory.models.inventory_transaction import (
|
||||
InventoryTransaction,
|
||||
@@ -26,6 +26,7 @@ from app.modules.inventory.models.inventory_transaction import (
|
||||
)
|
||||
from app.modules.inventory.schemas.inventory import InventoryReserve
|
||||
from app.modules.inventory.services.inventory_service import inventory_service
|
||||
from app.modules.orders.exceptions import OrderNotFoundException
|
||||
from app.modules.orders.models.order import Order, OrderItem
|
||||
|
||||
logger = logging.getLogger(__name__)
|
||||
@@ -136,10 +137,9 @@ class OrderInventoryService:
|
||||
"reason": "no_inventory",
|
||||
})
|
||||
continue
|
||||
else:
|
||||
raise InventoryNotFoundException(
|
||||
f"No inventory found for product {item.product_id}"
|
||||
)
|
||||
raise InventoryNotFoundException(
|
||||
f"No inventory found for product {item.product_id}"
|
||||
)
|
||||
|
||||
try:
|
||||
reserve_data = InventoryReserve(
|
||||
@@ -237,10 +237,9 @@ class OrderInventoryService:
|
||||
"reason": "no_inventory",
|
||||
})
|
||||
continue
|
||||
else:
|
||||
raise InventoryNotFoundException(
|
||||
f"No inventory found for product {item.product_id}"
|
||||
)
|
||||
raise InventoryNotFoundException(
|
||||
f"No inventory found for product {item.product_id}"
|
||||
)
|
||||
|
||||
try:
|
||||
reserve_data = InventoryReserve(
|
||||
@@ -367,10 +366,9 @@ class OrderInventoryService:
|
||||
"fulfilled_quantity": 0,
|
||||
"message": "No inventory found",
|
||||
}
|
||||
else:
|
||||
raise InventoryNotFoundException(
|
||||
f"No inventory found for product {item.product_id}"
|
||||
)
|
||||
raise InventoryNotFoundException(
|
||||
f"No inventory found for product {item.product_id}"
|
||||
)
|
||||
|
||||
try:
|
||||
reserve_data = InventoryReserve(
|
||||
@@ -420,8 +418,7 @@ class OrderInventoryService:
|
||||
"fulfilled_quantity": 0,
|
||||
"message": str(e),
|
||||
}
|
||||
else:
|
||||
raise
|
||||
raise
|
||||
|
||||
def release_order_reservation(
|
||||
self,
|
||||
@@ -461,10 +458,9 @@ class OrderInventoryService:
|
||||
"reason": "no_inventory",
|
||||
})
|
||||
continue
|
||||
else:
|
||||
raise InventoryNotFoundException(
|
||||
f"No inventory found for product {item.product_id}"
|
||||
)
|
||||
raise InventoryNotFoundException(
|
||||
f"No inventory found for product {item.product_id}"
|
||||
)
|
||||
|
||||
try:
|
||||
reserve_data = InventoryReserve(
|
||||
|
||||
@@ -15,15 +15,15 @@ from datetime import UTC, datetime
|
||||
from sqlalchemy import and_, func, or_
|
||||
from sqlalchemy.orm import Session, joinedload
|
||||
|
||||
from app.modules.catalog.exceptions import ProductNotFoundException
|
||||
from app.modules.catalog.models import Product
|
||||
from app.modules.orders.exceptions import (
|
||||
ExceptionAlreadyResolvedException,
|
||||
InvalidProductForExceptionException,
|
||||
OrderItemExceptionNotFoundException,
|
||||
)
|
||||
from app.modules.catalog.exceptions import ProductNotFoundException
|
||||
from app.modules.orders.exceptions import OrderItemExceptionNotFoundException
|
||||
from app.modules.orders.models.order import Order, OrderItem
|
||||
from app.modules.orders.models.order_item_exception import OrderItemException
|
||||
from app.modules.catalog.models import Product
|
||||
|
||||
logger = logging.getLogger(__name__)
|
||||
|
||||
|
||||
@@ -16,9 +16,8 @@ from sqlalchemy import func
|
||||
from sqlalchemy.orm import Session
|
||||
|
||||
from app.modules.contracts.metrics import (
|
||||
MetricValue,
|
||||
MetricsContext,
|
||||
MetricsProviderProtocol,
|
||||
MetricValue,
|
||||
)
|
||||
|
||||
if TYPE_CHECKING:
|
||||
|
||||
@@ -25,31 +25,31 @@ from sqlalchemy import and_, func, or_
|
||||
from sqlalchemy.orm import Session
|
||||
|
||||
from app.exceptions import ValidationException
|
||||
from app.modules.billing.services.subscription_service import (
|
||||
TierLimitExceededException,
|
||||
subscription_service,
|
||||
)
|
||||
from app.modules.catalog.models import Product
|
||||
from app.modules.customers.exceptions import CustomerNotFoundException
|
||||
from app.modules.inventory.exceptions import InsufficientInventoryException
|
||||
from app.modules.orders.exceptions import OrderNotFoundException
|
||||
from app.modules.customers.models.customer import Customer
|
||||
from app.modules.inventory.exceptions import InsufficientInventoryException
|
||||
from app.modules.marketplace.models import (
|
||||
MarketplaceProduct,
|
||||
MarketplaceProductTranslation,
|
||||
)
|
||||
from app.modules.orders.exceptions import OrderNotFoundException
|
||||
from app.modules.orders.models.order import Order, OrderItem
|
||||
from app.modules.orders.schemas.order import (
|
||||
AddressSnapshot,
|
||||
CustomerSnapshot,
|
||||
OrderCreate,
|
||||
OrderItemCreate,
|
||||
OrderUpdate,
|
||||
)
|
||||
from app.modules.billing.services.subscription_service import (
|
||||
subscription_service,
|
||||
TierLimitExceededException,
|
||||
)
|
||||
from app.modules.tenancy.models import Store
|
||||
from app.utils.money import Money, cents_to_euros, euros_to_cents
|
||||
from app.utils.vat import (
|
||||
VATResult,
|
||||
calculate_vat_amount,
|
||||
determine_vat_regime,
|
||||
)
|
||||
from app.modules.marketplace.models import MarketplaceProduct, MarketplaceProductTranslation
|
||||
from app.modules.catalog.models import Product
|
||||
from app.modules.tenancy.models import Store
|
||||
|
||||
# Placeholder product constants
|
||||
PLACEHOLDER_GTIN = "0000000000000"
|
||||
@@ -372,7 +372,7 @@ class OrderService:
|
||||
store_id=store_id,
|
||||
subtotal_cents=subtotal_cents,
|
||||
billing_country_iso=billing.country_iso,
|
||||
buyer_vat_number=getattr(billing, 'vat_number', None),
|
||||
buyer_vat_number=getattr(billing, "vat_number", None),
|
||||
)
|
||||
|
||||
# Calculate amounts in cents
|
||||
@@ -1291,7 +1291,9 @@ class OrderService:
|
||||
order_id: int,
|
||||
) -> dict[str, Any]:
|
||||
"""Get shipping label information for an order (admin only)."""
|
||||
from app.modules.core.services.admin_settings_service import admin_settings_service # noqa: MOD-004
|
||||
from app.modules.core.services.admin_settings_service import (
|
||||
admin_settings_service, # noqa: MOD-004
|
||||
)
|
||||
|
||||
order = db.query(Order).filter(Order.id == order_id).first()
|
||||
|
||||
|
||||
@@ -1,7 +1,6 @@
|
||||
# tests/unit/services/test_invoice_service.py
|
||||
"""Unit tests for InvoiceService."""
|
||||
|
||||
import uuid
|
||||
from decimal import Decimal
|
||||
|
||||
import pytest
|
||||
@@ -11,21 +10,19 @@ from app.modules.orders.exceptions import (
|
||||
InvoiceNotFoundException,
|
||||
InvoiceSettingsNotFoundException,
|
||||
)
|
||||
from app.modules.orders.services.invoice_service import (
|
||||
EU_VAT_RATES,
|
||||
InvoiceService,
|
||||
LU_VAT_RATES,
|
||||
)
|
||||
from app.modules.orders.models import (
|
||||
Invoice,
|
||||
InvoiceStatus,
|
||||
VATRegime,
|
||||
StoreInvoiceSettings,
|
||||
VATRegime,
|
||||
)
|
||||
from app.modules.orders.schemas import (
|
||||
StoreInvoiceSettingsCreate,
|
||||
StoreInvoiceSettingsUpdate,
|
||||
)
|
||||
from app.modules.orders.services.invoice_service import (
|
||||
InvoiceService,
|
||||
)
|
||||
|
||||
|
||||
@pytest.mark.unit
|
||||
|
||||
@@ -1,6 +1,8 @@
|
||||
# tests/unit/models/database/test_order_item_exception.py
|
||||
"""Unit tests for OrderItemException database model."""
|
||||
|
||||
from datetime import UTC
|
||||
|
||||
import pytest
|
||||
from sqlalchemy.exc import IntegrityError
|
||||
|
||||
@@ -153,7 +155,7 @@ class TestOrderItemExceptionModel:
|
||||
|
||||
def test_exception_resolution(self, db, test_order_item, test_store, test_product, test_user):
|
||||
"""Test resolving an exception with a product."""
|
||||
from datetime import datetime, timezone
|
||||
from datetime import datetime
|
||||
|
||||
exception = OrderItemException(
|
||||
order_item_id=test_order_item.id,
|
||||
@@ -166,7 +168,7 @@ class TestOrderItemExceptionModel:
|
||||
db.commit()
|
||||
|
||||
# Resolve the exception
|
||||
now = datetime.now(timezone.utc)
|
||||
now = datetime.now(UTC)
|
||||
exception.status = "resolved"
|
||||
exception.resolved_product_id = test_product.id
|
||||
exception.resolved_at = now
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
# tests/unit/models/database/test_order.py
|
||||
"""Unit tests for Order and OrderItem database models."""
|
||||
|
||||
from datetime import datetime, timezone
|
||||
from datetime import UTC, datetime
|
||||
|
||||
import pytest
|
||||
from sqlalchemy.exc import IntegrityError
|
||||
@@ -33,7 +33,7 @@ def create_order_with_snapshots(
|
||||
subtotal=subtotal,
|
||||
total_amount=total_amount,
|
||||
currency="EUR",
|
||||
order_date=datetime.now(timezone.utc),
|
||||
order_date=datetime.now(UTC),
|
||||
# Customer snapshot
|
||||
customer_first_name=customer.first_name,
|
||||
customer_last_name=customer.last_name,
|
||||
|
||||
@@ -1,14 +1,13 @@
|
||||
# tests/unit/models/schema/test_order.py
|
||||
"""Unit tests for order Pydantic schemas."""
|
||||
|
||||
from datetime import datetime, timezone
|
||||
from datetime import UTC, datetime
|
||||
|
||||
import pytest
|
||||
from pydantic import ValidationError
|
||||
|
||||
from app.modules.orders.schemas import (
|
||||
AddressSnapshot,
|
||||
AddressSnapshotResponse,
|
||||
CustomerSnapshot,
|
||||
CustomerSnapshotResponse,
|
||||
OrderCreate,
|
||||
@@ -385,7 +384,7 @@ class TestOrderResponseSchema:
|
||||
|
||||
def test_from_dict(self):
|
||||
"""Test creating response from dict."""
|
||||
now = datetime.now(timezone.utc)
|
||||
now = datetime.now(UTC)
|
||||
data = {
|
||||
"id": 1,
|
||||
"store_id": 1,
|
||||
@@ -448,7 +447,7 @@ class TestOrderResponseSchema:
|
||||
|
||||
def test_is_marketplace_order(self):
|
||||
"""Test is_marketplace_order property."""
|
||||
now = datetime.now(timezone.utc)
|
||||
now = datetime.now(UTC)
|
||||
# Direct order
|
||||
direct_order = OrderResponse(
|
||||
id=1, store_id=1, customer_id=1, order_number="ORD-001",
|
||||
@@ -499,7 +498,7 @@ class TestOrderItemResponseSchema:
|
||||
|
||||
def test_from_dict(self):
|
||||
"""Test creating response from dict."""
|
||||
now = datetime.now(timezone.utc)
|
||||
now = datetime.now(UTC)
|
||||
data = {
|
||||
"id": 1,
|
||||
"order_id": 1,
|
||||
@@ -525,7 +524,7 @@ class TestOrderItemResponseSchema:
|
||||
|
||||
def test_has_unresolved_exception(self):
|
||||
"""Test has_unresolved_exception property."""
|
||||
now = datetime.now(timezone.utc)
|
||||
now = datetime.now(UTC)
|
||||
base_data = {
|
||||
"id": 1, "order_id": 1, "product_id": 1,
|
||||
"product_name": "Test", "product_sku": "SKU-001",
|
||||
|
||||
Reference in New Issue
Block a user