Merge prod_v5 (catalog v2.7, warehouse locking, per-project accept) into integration
Conflict in init_db.py resolved keeping the audit_log table ensure function (new-one) — prod_v5 predates it and its side was empty. Both sides' SQL lands: audit_log table plus the category-free materials model.
This commit is contained in:
@@ -345,6 +345,18 @@ BASE_UNITS: list[dict] = [
|
||||
{"code": "m", "name_fa": "متر", "dimension": "length", "si_factor": 1, "is_base": True},
|
||||
{"code": "bag", "name_fa": "کیسه", "dimension": "count", "si_factor": 1, "is_base": False},
|
||||
{"code": "ton", "name_fa": "تن", "dimension": "mass", "si_factor": 1000, "is_base": False},
|
||||
{"code": "g", "name_fa": "گرم", "dimension": "mass", "si_factor": 0.001, "is_base": False},
|
||||
{"code": "kpiece", "name_fa": "هزار عدد", "dimension": "count", "si_factor": 1000, "is_base": False},
|
||||
]
|
||||
|
||||
# تبدیلهای ثابت جهانی («تبدیلهای ثابت — همه متریالها») — ضرایب استاندارد و
|
||||
# فراگیر که در هر استارتآپ بهصورت idempotent ذخیره میشوند. کلید یکتا:
|
||||
# (from_unit, to_unit)؛ مقدار فیلدها، نام نمایشی فارسی واحد است — همان
|
||||
# قالبی که فرانتاند در standard_conversions مینویسد.
|
||||
STANDARD_CONVERSIONS: list[dict] = [
|
||||
{"from_unit": "تن", "to_unit": "کیلوگرم", "factor": 1000},
|
||||
{"from_unit": "کیلوگرم", "to_unit": "گرم", "factor": 1000},
|
||||
{"from_unit": "هزار عدد", "to_unit": "عدد", "factor": 1000},
|
||||
]
|
||||
|
||||
|
||||
@@ -379,13 +391,20 @@ async def ensure_v26(engine: AsyncEngine) -> None:
|
||||
"VALUES (:code, :name_fa, :dimension, :si_factor, :is_base) ON CONFLICT (code) DO NOTHING",
|
||||
u,
|
||||
)
|
||||
# v2.5 automation triggers (idempotent — DROP + CREATE keeps them in sync).
|
||||
# Seed the global fixed conversions (idempotent — unique key from/to unit).
|
||||
for c in STANDARD_CONVERSIONS:
|
||||
await run_statement(
|
||||
"INSERT INTO standard_conversions (from_unit, to_unit, factor) "
|
||||
"VALUES (:from_unit, :to_unit, :factor) "
|
||||
"ON CONFLICT (from_unit, to_unit) DO NOTHING",
|
||||
c,
|
||||
)
|
||||
# v2.5/v2.6 category decoupling from materials: drop trigger, function, and column.
|
||||
await run_statement("DROP TRIGGER IF EXISTS trg_supplier_materials_derive_category ON supplier_materials")
|
||||
await run_statement("""
|
||||
CREATE TRIGGER trg_supplier_materials_derive_category
|
||||
AFTER INSERT ON supplier_materials
|
||||
FOR EACH ROW EXECUTE FUNCTION fn_derive_material_category()
|
||||
""")
|
||||
await run_statement("DROP FUNCTION IF EXISTS fn_derive_material_category()")
|
||||
await run_statement("ALTER TABLE materials DROP CONSTRAINT IF EXISTS materials_category_id_fkey")
|
||||
await run_statement("ALTER TABLE materials DROP COLUMN IF EXISTS category_id")
|
||||
|
||||
await run_statement("DROP TRIGGER IF EXISTS trg_item_decisions_sync_price ON item_decisions")
|
||||
await run_statement("""
|
||||
CREATE TRIGGER trg_item_decisions_sync_price
|
||||
|
||||
Reference in New Issue
Block a user