add-preset-shahmatka #141
@ -29,5 +29,5 @@ async def list_rules(
|
||||
version_id: uuid.UUID,
|
||||
service: EliminationRuleServiceDep,
|
||||
) -> EliminationRulesOut:
|
||||
"""Правила зафиксированной версии либо актуальные сегодня, с основанием выбора."""
|
||||
"""Правила §4 зафиксированной либо последней открытой версии с основанием выбора."""
|
||||
return await service.list_rules(version_id)
|
||||
|
||||
@ -173,7 +173,7 @@ async def build_intercompany_matrix_preset(
|
||||
rule_id: uuid.UUID,
|
||||
service: IntercompanyMatrixServiceDep,
|
||||
) -> IntercompanyMatrixOut:
|
||||
"""Cчета пресета с подходящим видом дебета или кредита."""
|
||||
"""Шахматка §6 по счетам сторон правила §4."""
|
||||
return await service.build_accounts(version_id, mode="PRESET", rule_id=rule_id)
|
||||
|
||||
|
||||
@ -189,7 +189,7 @@ async def get_unpaired_osv(
|
||||
rule_id: uuid.UUID,
|
||||
service: IntercompanyMatrixServiceDep,
|
||||
) -> UnpairedOsvOut:
|
||||
"""Все строки односторонних ячеек шахматки и их число."""
|
||||
"""Строки свода односторонних ячеек шахматки §6 и их число."""
|
||||
return await service.get_unpaired_osv(version_id, rule_id)
|
||||
|
||||
|
||||
@ -206,6 +206,7 @@ async def export_intercompany_matrix_preset(
|
||||
service: IntercompanyMatrixServiceDep,
|
||||
audit: Annotated[RequestAudit, Depends(get_request_audit)],
|
||||
) -> Response:
|
||||
"""XLSX шахматки §6 по правилу §4 с аудитом выгрузки."""
|
||||
matrix, info = await service.build_export(version_id, mode="PRESET", rule_id=rule_id)
|
||||
return await _export_response(version_id, matrix, info, audit)
|
||||
|
||||
|
||||
@ -12,7 +12,7 @@ from src.models.accounting import ChartOfAccount, EliminationRule, EliminationRu
|
||||
async def list_rules_with_accounts(
|
||||
session: AsyncSession, version_no: int | None
|
||||
) -> list[tuple[EliminationRule, EliminationRuleAccount | None]]:
|
||||
"""Правила заданной версии либо открытые правила последней версии."""
|
||||
"""Правила §4 заданной либо последней открытой версии."""
|
||||
condition = (
|
||||
EliminationRule.version_no == version_no
|
||||
if version_no is not None
|
||||
@ -35,16 +35,17 @@ async def list_rules_with_accounts(
|
||||
|
||||
|
||||
def _current_open_version_stmt():
|
||||
"""Запрос номера последней открытой версии правил §4."""
|
||||
return select(func.max(EliminationRule.version_no)).where(EliminationRule.valid_to.is_(None))
|
||||
|
||||
|
||||
async def current_open_version_no(session: AsyncSession) -> int | None:
|
||||
"""Номер последней версии, в которой есть открытые правила."""
|
||||
"""Номер последней версии с открытыми правилами §4."""
|
||||
return await session.scalar(_current_open_version_stmt())
|
||||
|
||||
|
||||
def is_valid_for_version(rule: EliminationRule | None, version_no: int | None) -> bool:
|
||||
"""Проверить номер версии либо отсутствие `valid_to`."""
|
||||
"""Проверить версию правила §4 либо отсутствие `valid_to`."""
|
||||
return rule is not None and (rule.version_no == version_no if version_no is not None else rule.valid_to is None)
|
||||
|
||||
|
||||
@ -76,7 +77,7 @@ async def list_rule_accounts(
|
||||
async def rule_with_account(
|
||||
session: AsyncSession, rule_id: uuid.UUID
|
||||
) -> tuple[EliminationRule | None, list[EliminationRuleAccount]]:
|
||||
"""Правило и его счета; `company_no` задаёт сторону, `is_excluded` — исключение."""
|
||||
"""Правило §4 и его счета; `company_no` задаёт сторону, `is_excluded` — исключение."""
|
||||
rule = await session.get(EliminationRule, rule_id)
|
||||
if rule is None:
|
||||
return None, []
|
||||
|
||||
@ -21,6 +21,7 @@ class EliminationRuleService:
|
||||
self._scope = scope
|
||||
|
||||
async def list_rules(self, consolidation_version_id: uuid.UUID) -> EliminationRulesOut:
|
||||
"""Правила §4 версии консолидации с проверкой видимости и основанием выбора."""
|
||||
found = await consolidations_repo.get_version(self._session, self._scope, consolidation_version_id)
|
||||
if found is None:
|
||||
raise NotFoundError(VERSION_NOT_FOUND)
|
||||
|
||||
@ -109,6 +109,7 @@ class MatrixExportInfo:
|
||||
|
||||
@property
|
||||
def preset_details(self) -> tuple[StatementType, int, int, str, str]:
|
||||
"""Реквизиты правила §4 для имени и шапки XLSX шахматки §6."""
|
||||
details = (
|
||||
self.rule_statement_type,
|
||||
self.rule_no,
|
||||
@ -215,7 +216,7 @@ def calculate_matrix(
|
||||
|
||||
|
||||
def get_unpaired_rows(rows: Iterable[ConsolidatedRow], matrix: IntercompanyMatrixOut) -> list[ConsolidatedRow]:
|
||||
"""Строки свода, попавшие только на одну сторону пары компаний в шахматке."""
|
||||
"""Строки свода, попавшие только на одну сторону пары шахматки §6."""
|
||||
entry_ids = {
|
||||
entry_id
|
||||
for cell in matrix.cells
|
||||
@ -429,7 +430,7 @@ class IntercompanyMatrixService:
|
||||
return result.matrix, info
|
||||
|
||||
async def get_unpaired_osv(self, version_id: uuid.UUID, rule_id: uuid.UUID) -> UnpairedOsvOut:
|
||||
"""Все строки свода без встречной стороны в шахматке заданного пресета."""
|
||||
"""Строки свода без встречной стороны в шахматке §6 заданного пресета."""
|
||||
result = await self._build_accounts(
|
||||
version_id, mode="PRESET", debit_account_ids=(), credit_account_ids=(), rule_id=rule_id
|
||||
)
|
||||
@ -443,7 +444,7 @@ class IntercompanyMatrixService:
|
||||
by_id: dict[uuid.UUID, ChartOfAccount],
|
||||
children: dict[uuid.UUID, list[uuid.UUID]],
|
||||
) -> tuple[MatrixSelection, EliminationRule]:
|
||||
"""Выбрать счета и показатель пресета для версии консолидации."""
|
||||
"""Выбрать стороны счетов и показатель правила §4 для шахматки §6."""
|
||||
if rule_id is None:
|
||||
raise DomainValidationError("RULE_REQUIRED", "Выберите правило-пресет")
|
||||
rule, rule_accounts = await elimination_rules_repo.rule_with_account(self._session, rule_id)
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user