food-market/app/paths.py
Claude efce552e2b Отдельный репозиторий для базы, фасовки товара, ввод истории
Три правки по замечаниям.

1. База и код разъехались по разным репозиториям. Автокоммит и раньше
   трогал только vault.fmdb, но лежал он в той же ветке, что и исходники,
   поэтому пуш тащил всю историю программы. Теперь data/ — самостоятельный
   клон food-records со своим .git, а исходники его игнорируют целиком.
   При первом запуске приложение встаёт на уже существующую историю
   сервера, а не заводит параллельную.

2. Фасовки товара. Пачка печенья 10 шт за 200 ₽ и та же печенька поштучно
   за 30 ₽ — один товар с двумя фасовками. Остатки, себестоимость и FIFO
   считаются в базовых единицах, поэтому поштучные продажи вычитаются из
   купленных пачек. Размер фасовки хранится в документе слепком.
   Миграция схемы 1→2 не меняет поведение уже заведённых данных.

3. Быстрый ввод продаж за период: выбор диапазона дат, строка таблицы —
   отдельная продажа, ввод с клавиатуры, запись всех разом. Незнакомое имя
   заводится как контрагент, повтор периода подсвечивается.

Тесты больше не имеют настроенного remote, чтобы не ходить в сеть.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-08-22 21:25:39 +03:00

51 lines
1.8 KiB
Python
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

"""Где лежат данные.
Код и база живут в **разных** репозиториях. Исходники — в food-market,
зашифрованная база — в food-records. Смешивать их нельзя: пуш отправляет всю
ветку целиком, поэтому в общем репозитории история данных неизбежно тащила бы
за собой историю программы.
На диске это выглядит так: exe лежит в корне, а рядом с ним папка data —
самостоятельный клон репозитория с данными, со своим .git. Исходники папку
data игнорируют полностью.
"""
from __future__ import annotations
import sys
from pathlib import Path
VAULT_NAME = "vault.fmdb"
DATA_DIR_NAME = "data"
DEFAULT_DATA_REMOTE = "https://gt.ser.gay/kizya/food-records.git"
def app_root() -> Path:
if getattr(sys, "frozen", False):
return Path(sys.executable).resolve().parent
return Path(__file__).resolve().parent.parent
def data_dir() -> Path:
"""Корень репозитория с данными. Внутри — только база и её служебные файлы."""
return app_root() / DATA_DIR_NAME
def vault_path() -> Path:
return data_dir() / VAULT_NAME
def vault_rel_posix() -> str:
"""Путь базы внутри репозитория данных. База лежит в его корне."""
return VAULT_NAME
def backup_path() -> Path:
return data_dir() / f"{VAULT_NAME}.bak"
def remote_copy_path() -> Path:
"""Куда складывается удалённая версия базы при расхождении веток."""
return data_dir() / "vault.remote.fmdb"