feat(customers): add controlled CSV and XLSX customer import
This commit is contained in:
parent
613ffdc8b7
commit
82e03877b3
566 changed files with 2752 additions and 991 deletions
|
|
@ -64,6 +64,7 @@ from app.schemas.domain import (
|
|||
UserPasswordResetRequest,
|
||||
)
|
||||
from app.services.domain_service import CrudService, DomainServices
|
||||
from app.services.customer_import import CustomerImportService, parse_json_object
|
||||
from app.services.quickstart_service import QuickStartService
|
||||
from app.services.report_settings import OrionReportSettingsService
|
||||
from app.services.validation_workflow import ValidationWorkflowService
|
||||
|
|
@ -214,6 +215,51 @@ def paging(
|
|||
return {"page": page, "page_size": page_size, "search": search}
|
||||
|
||||
|
||||
@router.post("/customer-imports/preview")
|
||||
async def preview_customer_import(
|
||||
file: UploadFile,
|
||||
mapping: str | None = Form(default=None),
|
||||
session: Session = Depends(get_session),
|
||||
_: User = Depends(current_admin),
|
||||
):
|
||||
try:
|
||||
content = await file.read()
|
||||
parsed_mapping = parse_json_object(mapping) if mapping else None
|
||||
return CustomerImportService(session).preview(file.filename or "import", content, parsed_mapping)
|
||||
except ValueError as exc:
|
||||
raise HTTPException(status_code=422, detail=str(exc)) from exc
|
||||
except UnicodeDecodeError as exc:
|
||||
raise HTTPException(status_code=422, detail="Die CSV-Datei muss UTF-8 kodiert sein.") from exc
|
||||
|
||||
|
||||
@router.post("/customer-imports/confirm")
|
||||
async def confirm_customer_import(
|
||||
file: UploadFile,
|
||||
mapping: str = Form(...),
|
||||
row_actions: str | None = Form(default=None),
|
||||
ignore_empty_values: bool = Form(default=True),
|
||||
session: Session = Depends(get_session),
|
||||
user: User = Depends(current_admin),
|
||||
):
|
||||
try:
|
||||
content = await file.read()
|
||||
result = CustomerImportService(session).confirm(
|
||||
file.filename or "import",
|
||||
content,
|
||||
parse_json_object(mapping),
|
||||
parse_json_object(row_actions),
|
||||
ignore_empty_values,
|
||||
user,
|
||||
)
|
||||
return result
|
||||
except ValueError as exc:
|
||||
session.rollback()
|
||||
raise HTTPException(status_code=422, detail=str(exc)) from exc
|
||||
except IntegrityError as exc:
|
||||
session.rollback()
|
||||
raise HTTPException(status_code=409, detail="Der Kundenimport konnte nicht vollständig gespeichert werden.") from exc
|
||||
|
||||
|
||||
def commit_create(session: Session, service: CrudService, payload):
|
||||
try:
|
||||
item = service.create(payload.model_dump())
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue