Files
hotelsync/backend/migrations/063_minibar_stock.sql
HotelSync 1f4def0a34 feat: minibar — category dropdown, учёт остатков (приходы/списания/инвентаризация/отчёт)
- MinibarSettingsPage: поле категории → выпадающий список с существующими + «Новая...»
- Кнопка «Учёт и остатки» ведёт на /settings/minibar/stock
- MinibarStockPage: 5 вкладок — Остатки, Приходы, Списания, Инвентаризация, Отчёт
- api.ts: добавлены методы и типы для stock/receipts/writeoffs/inventory/report

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-06 15:36:40 +03:00

65 lines
2.2 KiB
SQL

CREATE TABLE minibar_stock (
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
hotel_id UUID NOT NULL REFERENCES hotels(id) ON DELETE CASCADE,
item_id UUID NOT NULL REFERENCES minibar_items(id) ON DELETE CASCADE,
quantity NUMERIC(10,3) NOT NULL DEFAULT 0,
updated_at TIMESTAMPTZ NOT NULL DEFAULT NOW(),
UNIQUE(hotel_id, item_id)
);
CREATE TABLE minibar_receipts (
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
hotel_id UUID NOT NULL REFERENCES hotels(id) ON DELETE CASCADE,
supplier TEXT,
notes TEXT,
created_by UUID REFERENCES users(id),
created_at TIMESTAMPTZ NOT NULL DEFAULT NOW()
);
CREATE TABLE minibar_receipt_items (
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
receipt_id UUID NOT NULL REFERENCES minibar_receipts(id) ON DELETE CASCADE,
item_id UUID NOT NULL REFERENCES minibar_items(id),
quantity NUMERIC(10,3) NOT NULL,
cost_price NUMERIC(10,2)
);
CREATE TABLE minibar_writeoffs (
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
hotel_id UUID NOT NULL REFERENCES hotels(id) ON DELETE CASCADE,
reason TEXT NOT NULL,
notes TEXT,
created_by UUID REFERENCES users(id),
created_at TIMESTAMPTZ NOT NULL DEFAULT NOW()
);
CREATE TABLE minibar_writeoff_items (
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
writeoff_id UUID NOT NULL REFERENCES minibar_writeoffs(id) ON DELETE CASCADE,
item_id UUID NOT NULL REFERENCES minibar_items(id),
quantity NUMERIC(10,3) NOT NULL
);
CREATE TABLE minibar_inventory_checks (
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
hotel_id UUID NOT NULL REFERENCES hotels(id) ON DELETE CASCADE,
checked_at DATE NOT NULL DEFAULT CURRENT_DATE,
notes TEXT,
is_complete BOOLEAN NOT NULL DEFAULT false,
created_by UUID REFERENCES users(id),
created_at TIMESTAMPTZ NOT NULL DEFAULT NOW()
);
CREATE TABLE minibar_inventory_items (
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
check_id UUID NOT NULL REFERENCES minibar_inventory_checks(id) ON DELETE CASCADE,
item_id UUID NOT NULL REFERENCES minibar_items(id),
expected_qty NUMERIC(10,3) NOT NULL DEFAULT 0,
actual_qty NUMERIC(10,3) NOT NULL DEFAULT 0
);
CREATE INDEX ON minibar_stock(hotel_id);
CREATE INDEX ON minibar_receipts(hotel_id);
CREATE INDEX ON minibar_writeoffs(hotel_id);
CREATE INDEX ON minibar_inventory_checks(hotel_id);