Десктопное приложение на PySide6. Вся база — один JSON-документ, зашифрованный AES-256-GCM под паролем (ключ через scrypt), лежит в data/vault.fmdb и раз в час уезжает в этот репозиторий. Основное: - партии с дедлайном возврата себестоимости пекарне, FIFO-разнос продаж по партиям и прогресс покрытия к сроку; - типы выбытия: розница, другу по себестоимости, съел сам, подарок, списание — съеденное вычитается из прибыли, за него платить всё равно; - долги контрагентов с частичными оплатами; - номенклатура с историей изменения цен; - журнал изменений внутри базы: git хранит непрозрачные снимки, поэтому настоящая история ведётся здесь. Синхронизация коммитит только путь базы и схлопывает часовые пуши в один коммит на день через amend + force-with-lease. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
32 lines
883 B
Python
32 lines
883 B
Python
from datetime import date, timedelta
|
||
|
||
import pytest
|
||
|
||
from app import journal
|
||
from app.storage import Vault
|
||
|
||
|
||
@pytest.fixture
|
||
def vault(tmp_path):
|
||
return Vault.create(tmp_path / "vault.fmdb", "pw")
|
||
|
||
|
||
@pytest.fixture
|
||
def buns(vault):
|
||
"""Три булки из примера пользователя, с фиксированными ценами поставщика."""
|
||
return {
|
||
"повидло": journal.create_product(vault, "Булка с повидлом", cost_price=30, retail_price=50),
|
||
"мак": journal.create_product(vault, "Булка с маком", cost_price=20, retail_price=35),
|
||
"корица": journal.create_product(vault, "Булка с корицей", cost_price=25, retail_price=40),
|
||
}
|
||
|
||
|
||
@pytest.fixture
|
||
def today():
|
||
return date.today()
|
||
|
||
|
||
@pytest.fixture
|
||
def in_two_weeks(today):
|
||
return today + timedelta(days=14)
|