77 lines
3 KiB
Python
77 lines
3 KiB
Python
from __future__ import annotations
|
|
|
|
from sqlalchemy import select
|
|
from sqlalchemy.orm import Session
|
|
|
|
from app.models.report_settings import (
|
|
OrionImagePosition,
|
|
OrionImageSize,
|
|
OrionLayoutProfile,
|
|
OrionLogoSize,
|
|
OrionPageMargin,
|
|
OrionReportSettings,
|
|
OrionReportSettingsScope,
|
|
OrionSignatureMode,
|
|
OrionSpacing,
|
|
OrionTableFontSize,
|
|
)
|
|
from app.models.user import User
|
|
from app.schemas.domain import OrionReportSettingsUpdate
|
|
|
|
|
|
class OrionReportSettingsService:
|
|
def __init__(self, session: Session) -> None:
|
|
self.session = session
|
|
|
|
def get_global(self) -> OrionReportSettings:
|
|
settings = self.session.scalar(
|
|
select(OrionReportSettings).where(
|
|
OrionReportSettings.scope == OrionReportSettingsScope.global_.value
|
|
)
|
|
)
|
|
if settings is not None:
|
|
return settings
|
|
settings = OrionReportSettings(
|
|
scope=OrionReportSettingsScope.global_.value,
|
|
layout_profile=OrionLayoutProfile.standard.value,
|
|
show_cover_result_text=True,
|
|
signature_mode=OrionSignatureMode.technical_only.value,
|
|
image_size=OrionImageSize.medium.value,
|
|
page_break_before_main_chapters=True,
|
|
page_margin=OrionPageMargin.standard.value,
|
|
section_spacing=OrionSpacing.standard.value,
|
|
table_layout=OrionSpacing.standard.value,
|
|
table_font_size=OrionTableFontSize.standard.value,
|
|
image_position=OrionImagePosition.side_by_side.value,
|
|
max_images_per_page=2,
|
|
show_image_captions=True,
|
|
show_header=True,
|
|
show_footer=True,
|
|
logo_size=OrionLogoSize.medium.value,
|
|
compact_cover=False,
|
|
)
|
|
self.session.add(settings)
|
|
self.session.flush()
|
|
return settings
|
|
|
|
def update_global(self, payload: OrionReportSettingsUpdate, user: User) -> OrionReportSettings:
|
|
settings = self.get_global()
|
|
settings.layout_profile = payload.layout_profile.value
|
|
settings.show_cover_result_text = payload.show_cover_result_text
|
|
settings.signature_mode = payload.signature_mode.value
|
|
settings.image_size = payload.image_size.value
|
|
settings.page_break_before_main_chapters = payload.page_break_before_main_chapters
|
|
settings.page_margin = payload.page_margin.value
|
|
settings.section_spacing = payload.section_spacing.value
|
|
settings.table_layout = payload.table_layout.value
|
|
settings.table_font_size = payload.table_font_size.value
|
|
settings.image_position = payload.image_position.value
|
|
settings.max_images_per_page = payload.max_images_per_page
|
|
settings.show_image_captions = payload.show_image_captions
|
|
settings.show_header = payload.show_header
|
|
settings.show_footer = payload.show_footer
|
|
settings.logo_size = payload.logo_size.value
|
|
settings.compact_cover = payload.compact_cover
|
|
settings.updated_by_user_id = user.id
|
|
self.session.flush()
|
|
return settings
|