Csv import now works with preacknowlegdments
This commit is contained in:
@@ -39,7 +39,7 @@ from .alpinebits_server import (
|
||||
Version,
|
||||
)
|
||||
from .auth import generate_unique_id, validate_api_key
|
||||
from .config_loader import load_config
|
||||
from .config_loader import load_config, get_username_for_hotel
|
||||
from .const import CONF_GOOGLE_ACCOUNT, CONF_HOTEL_ID, CONF_META_ACCOUNT, HttpStatusCode
|
||||
from .conversion_service import ConversionService
|
||||
from .csv_import import CSVImporter
|
||||
@@ -1142,15 +1142,25 @@ async def handle_wix_form_test(
|
||||
async def _process_csv_import_background(
|
||||
csv_content: str,
|
||||
filename: str,
|
||||
hotel_code: str | None,
|
||||
hotel_code: str,
|
||||
session_maker: SessionMaker,
|
||||
config: dict[str, Any],
|
||||
log_filename: Path,
|
||||
):
|
||||
"""Background task to process CSV import.
|
||||
"""Background task to process CSV import with automatic acknowledgement.
|
||||
|
||||
This runs in a separate asyncio task after the HTTP response is sent.
|
||||
Handles both file saving and database processing.
|
||||
All imported reservations are automatically acknowledged using the username
|
||||
associated with the hotel_code from the config.
|
||||
|
||||
Args:
|
||||
csv_content: CSV content as string
|
||||
filename: Original filename
|
||||
hotel_code: Hotel code (mandatory) - used to get username for acknowledgements
|
||||
session_maker: SessionMaker for creating database sessions
|
||||
config: Application configuration
|
||||
log_filename: Path to save the CSV file
|
||||
"""
|
||||
try:
|
||||
# First, save the CSV file (in background)
|
||||
@@ -1160,11 +1170,22 @@ async def _process_csv_import_background(
|
||||
# Now process the CSV import
|
||||
_LOGGER.info("Starting database processing of %s", filename)
|
||||
|
||||
# Get username for acknowledgements from config
|
||||
username = get_username_for_hotel(config, hotel_code)
|
||||
|
||||
# Create a new session for this background task
|
||||
db_session = await session_maker.create_session()
|
||||
try:
|
||||
importer = CSVImporter(db_session, config)
|
||||
stats = await importer.import_csv_file(str(log_filename), hotel_code, dryrun=False)
|
||||
# Import with pre-acknowledgement enabled
|
||||
stats = await importer.import_csv_file(
|
||||
str(log_filename),
|
||||
hotel_code,
|
||||
dryrun=False,
|
||||
pre_acknowledge=True,
|
||||
client_id=hotel_code,
|
||||
username=username
|
||||
)
|
||||
|
||||
_LOGGER.info(
|
||||
"CSV import complete for %s: %s", filename, stats
|
||||
@@ -1177,13 +1198,13 @@ async def _process_csv_import_background(
|
||||
)
|
||||
|
||||
|
||||
@api_router.put("/admin/import-csv/{filename:path}")
|
||||
@api_router.put("/admin/import-csv/{hotel_code}/{filename:path}")
|
||||
@limiter.limit(BURST_RATE_LIMIT)
|
||||
async def import_csv_endpoint(
|
||||
request: Request,
|
||||
background_tasks: BackgroundTasks,
|
||||
hotel_code: str,
|
||||
filename: str,
|
||||
hotel_code: str | None = None,
|
||||
credentials: tuple = Depends(validate_basic_auth),
|
||||
db_session=Depends(get_async_session),
|
||||
session_maker: SessionMaker = Depends(get_session_maker),
|
||||
@@ -1196,16 +1217,18 @@ async def import_csv_endpoint(
|
||||
- fbclid/gclid tracking IDs
|
||||
|
||||
Returns immediately with 202 Accepted while processing continues in background.
|
||||
All imported reservations are automatically acknowledged using the username
|
||||
associated with the hotel_code in the config.
|
||||
|
||||
Requires basic authentication and saves CSV files to log directory.
|
||||
Supports gzip compression via Content-Encoding header.
|
||||
|
||||
Args:
|
||||
hotel_code: Hotel code (mandatory) - used to get username for acknowledgements
|
||||
filename: Name for the CSV file (used for logging)
|
||||
hotel_code: Optional hotel code to override CSV values
|
||||
credentials: Basic auth credentials
|
||||
|
||||
Example: PUT /api/admin/import-csv/reservations.csv
|
||||
Example: PUT /api/admin/import-csv/39054_001/reservations.csv
|
||||
|
||||
"""
|
||||
try:
|
||||
|
||||
Reference in New Issue
Block a user