RECORDGOD/app
type-two ef37063b2e feat(distro): Inertia xlsx ingest + cost/new-used/margin in inventory editor
(1) Inventory edit modal gains Cost + New/Used + a live Margin readout (price−cost, %); inv_edit accepts
cost_price + condition_type; inventory list returns them.
(2) Inertia/Warner SOH list = an xlsx that doubles as the order form (fill ORDER QTY, upload). New
/admin/intake/distro-sheet[/preview]: openpyxl parses header-mapped columns (ORDER QTY/UPC/ARTIST/TITLE/
FORMAT/PPD), takes rows with QTY>0 → shared _ingest_distro core (refactored out of the RareWaves path) →
staged NEW stock with cost_price=PPD, kind from FORMAT (cd/vinyl), catno kept. Upload+preview UI in New stock.
DistroItem gains kind+catno; RareWaves path now passes kind too. Verified on the real 3,368-row Warner sheet:
3 ordered titles → 4 copies, all resolved, kind=cd, cost from PPD. Added openpyxl to requirements.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-27 11:39:39 +10:00
..
__init__.py feat: RecordGod founding — service scaffold + MariaDB→Postgres migration 2026-06-19 17:18:50 +10:00
admin_routes.py feat(distro): Inertia xlsx ingest + cost/new-used/margin in inventory editor 2026-06-27 11:39:39 +10:00
auth_routes.py feat(auth): staff email+password login + password reset (login stays token-based under the hood) 2026-06-26 16:24:34 +10:00
auth.py feat(auth): staff email+password login + password reset (login stays token-based under the hood) 2026-06-26 16:24:34 +10:00
collections_routes.py feat(collections): interactive editor — click-map crate select, genre/style/price/year rules, live match stats, priority 2026-06-22 21:33:15 +10:00
db.py feat: RecordGod founding — service scaffold + MariaDB→Postgres migration 2026-06-19 17:18:50 +10:00
disc_images.py feat(intake): ScanGod bridge — POST /admin/intake/scan (photo→staged product) + reply 2026-06-24 17:16:18 +10:00
intake_routes.py feat(distro): Inertia xlsx ingest + cost/new-used/margin in inventory editor 2026-06-27 11:39:39 +10:00
layout_routes.py feat(shop): P4 wantlist — public 'request a record' page + admin queue 2026-06-23 01:29:00 +10:00
mailer.py feat(pos): rebuild Sales — 3 tabs, smooth checkout + tender/change, print+email receipts 2026-06-23 16:29:42 +10:00
main.py feat(distro): RareWaves order ingest → cost-tracked NEW stock + approval landing 2026-06-27 11:13:48 +10:00
mirror.py feat: self-contained enrichment — disc_cache (own catalog copy), no external DB dependency 2026-06-21 13:16:56 +10:00
navigator_routes.py feat(nav): Quick Insert + click-to-pick insert slot (insert-with-shift) 2026-06-23 19:45:42 +10:00
receipts.py feat(pos): receipt logo + Monster Robot template (store name/address/footer) 2026-06-23 17:33:08 +10:00
sales_routes.py feat(shipping): use current AusPost own-packaging rates (RecordGod not live pre-1-Jul, no dating needed) 2026-06-24 01:05:12 +10:00
settings_routes.py feat(connect): OpenRouter key + test in vault; AI agent integration plan 2026-06-24 16:12:19 +10:00
shop_routes.py feat(bridge): RecordGod WP bridge plugin (WowPlatter successor) + thumb on browse/release 2026-06-24 01:43:30 +10:00
square.py feat(pos): Square Terminal payments — push checkout to a paired terminal 2026-06-23 17:57:26 +10:00
vault.py feat: standalone RecordGod web UI — landing, control-room dash, encrypted secrets vault 2026-06-21 12:40:07 +10:00
virtual.py feat(virtual): finish the 3D store port — per-room scoping, decals, portals 2026-06-21 21:00:02 +10:00
wowplatter_v1.py feat(intake): wowplatter/v1 intake carries est_market_value (DealGod target from PRICEGOD) 2026-06-25 02:00:40 +10:00