Spaces:
Sleeping
Sleeping
| namespace BakeryErp.Infrastructure.Database; | |
| public static class SqliteSchema | |
| { | |
| public const string CreateTables = """ | |
| PRAGMA foreign_keys = ON; | |
| CREATE TABLE IF NOT EXISTS Suppliers ( | |
| Id TEXT PRIMARY KEY, | |
| Code TEXT NOT NULL UNIQUE, | |
| Name TEXT NOT NULL, | |
| TaxId TEXT NULL, | |
| ContactName TEXT NULL, | |
| Phone TEXT NULL, | |
| Email TEXT NULL, | |
| Address TEXT NULL, | |
| PaymentTermDays INTEGER NOT NULL DEFAULT 30, | |
| CreatedAt TEXT NOT NULL, | |
| UpdatedAt TEXT NULL, | |
| IsActive INTEGER NOT NULL DEFAULT 1 | |
| ); | |
| CREATE TABLE IF NOT EXISTS Stores ( | |
| Id TEXT PRIMARY KEY, | |
| Code TEXT NOT NULL UNIQUE, | |
| Name TEXT NOT NULL, | |
| StoreType INTEGER NOT NULL, | |
| Phone TEXT NULL, | |
| Address TEXT NULL, | |
| CreatedAt TEXT NOT NULL, | |
| UpdatedAt TEXT NULL, | |
| IsActive INTEGER NOT NULL DEFAULT 1 | |
| ); | |
| CREATE TABLE IF NOT EXISTS Warehouses ( | |
| Id TEXT PRIMARY KEY, | |
| Code TEXT NOT NULL UNIQUE, | |
| Name TEXT NOT NULL, | |
| StoreId TEXT NULL, | |
| WarehouseType INTEGER NOT NULL, | |
| CreatedAt TEXT NOT NULL, | |
| UpdatedAt TEXT NULL, | |
| IsActive INTEGER NOT NULL DEFAULT 1, | |
| FOREIGN KEY (StoreId) REFERENCES Stores(Id) | |
| ); | |
| CREATE TABLE IF NOT EXISTS Items ( | |
| Id TEXT PRIMARY KEY, | |
| Sku TEXT NOT NULL UNIQUE, | |
| Name TEXT NOT NULL, | |
| ItemType INTEGER NOT NULL, | |
| CategoryName TEXT NOT NULL, | |
| BaseUnit TEXT NOT NULL, | |
| SafetyStockQuantity NUMERIC NOT NULL DEFAULT 0, | |
| ShelfLifeDays INTEGER NULL, | |
| CreatedAt TEXT NOT NULL, | |
| UpdatedAt TEXT NULL, | |
| IsActive INTEGER NOT NULL DEFAULT 1 | |
| ); | |
| CREATE TABLE IF NOT EXISTS PurchaseOrders ( | |
| Id TEXT PRIMARY KEY, | |
| OrderNumber TEXT NOT NULL UNIQUE, | |
| SupplierId TEXT NOT NULL, | |
| OrderDate TEXT NOT NULL, | |
| Status INTEGER NOT NULL, | |
| TotalAmount NUMERIC NOT NULL DEFAULT 0, | |
| CreatedAt TEXT NOT NULL, | |
| UpdatedAt TEXT NULL, | |
| IsActive INTEGER NOT NULL DEFAULT 1, | |
| FOREIGN KEY (SupplierId) REFERENCES Suppliers(Id) | |
| ); | |
| CREATE TABLE IF NOT EXISTS PurchaseOrderLines ( | |
| Id TEXT PRIMARY KEY, | |
| PurchaseOrderId TEXT NOT NULL, | |
| ItemId TEXT NOT NULL, | |
| Quantity NUMERIC NOT NULL, | |
| Unit TEXT NOT NULL, | |
| UnitPrice NUMERIC NOT NULL, | |
| CreatedAt TEXT NOT NULL, | |
| UpdatedAt TEXT NULL, | |
| IsActive INTEGER NOT NULL DEFAULT 1, | |
| FOREIGN KEY (PurchaseOrderId) REFERENCES PurchaseOrders(Id), | |
| FOREIGN KEY (ItemId) REFERENCES Items(Id) | |
| ); | |
| CREATE TABLE IF NOT EXISTS StockBalances ( | |
| Id TEXT PRIMARY KEY, | |
| WarehouseId TEXT NOT NULL, | |
| ItemId TEXT NOT NULL, | |
| QuantityOnHand NUMERIC NOT NULL DEFAULT 0, | |
| Unit TEXT NOT NULL, | |
| LastTransactionAt TEXT NOT NULL, | |
| CreatedAt TEXT NOT NULL, | |
| UpdatedAt TEXT NULL, | |
| IsActive INTEGER NOT NULL DEFAULT 1, | |
| UNIQUE (WarehouseId, ItemId), | |
| FOREIGN KEY (WarehouseId) REFERENCES Warehouses(Id), | |
| FOREIGN KEY (ItemId) REFERENCES Items(Id) | |
| ); | |
| CREATE TABLE IF NOT EXISTS InventoryTransactions ( | |
| Id TEXT PRIMARY KEY, | |
| TransactionNumber TEXT NOT NULL UNIQUE, | |
| WarehouseId TEXT NOT NULL, | |
| ItemId TEXT NOT NULL, | |
| TransactionType INTEGER NOT NULL, | |
| Quantity NUMERIC NOT NULL, | |
| Unit TEXT NOT NULL, | |
| OccurredAt TEXT NOT NULL, | |
| SourceDocumentNumber TEXT NULL, | |
| Note TEXT NULL, | |
| CreatedAt TEXT NOT NULL, | |
| UpdatedAt TEXT NULL, | |
| IsActive INTEGER NOT NULL DEFAULT 1, | |
| FOREIGN KEY (WarehouseId) REFERENCES Warehouses(Id), | |
| FOREIGN KEY (ItemId) REFERENCES Items(Id) | |
| ); | |
| CREATE TABLE IF NOT EXISTS TransferOrders ( | |
| Id TEXT PRIMARY KEY, | |
| TransferNumber TEXT NOT NULL UNIQUE, | |
| FromWarehouseId TEXT NOT NULL, | |
| ToWarehouseId TEXT NOT NULL, | |
| TransferDate TEXT NOT NULL, | |
| Status INTEGER NOT NULL, | |
| CreatedAt TEXT NOT NULL, | |
| UpdatedAt TEXT NULL, | |
| IsActive INTEGER NOT NULL DEFAULT 1, | |
| FOREIGN KEY (FromWarehouseId) REFERENCES Warehouses(Id), | |
| FOREIGN KEY (ToWarehouseId) REFERENCES Warehouses(Id) | |
| ); | |
| CREATE TABLE IF NOT EXISTS TransferOrderLines ( | |
| Id TEXT PRIMARY KEY, | |
| TransferOrderId TEXT NOT NULL, | |
| ItemId TEXT NOT NULL, | |
| RequestedQuantity NUMERIC NOT NULL, | |
| ShippedQuantity NUMERIC NOT NULL DEFAULT 0, | |
| ReceivedQuantity NUMERIC NOT NULL DEFAULT 0, | |
| Unit TEXT NOT NULL, | |
| CreatedAt TEXT NOT NULL, | |
| UpdatedAt TEXT NULL, | |
| IsActive INTEGER NOT NULL DEFAULT 1, | |
| FOREIGN KEY (TransferOrderId) REFERENCES TransferOrders(Id), | |
| FOREIGN KEY (ItemId) REFERENCES Items(Id) | |
| ); | |
| CREATE TABLE IF NOT EXISTS PettyCashTransactions ( | |
| Id TEXT PRIMARY KEY, | |
| TransactionNumber TEXT NOT NULL UNIQUE, | |
| StoreId TEXT NOT NULL, | |
| TransactionDate TEXT NOT NULL, | |
| TransactionType INTEGER NOT NULL, | |
| ExpenseCategory TEXT NOT NULL, | |
| Amount NUMERIC NOT NULL, | |
| ReceiptImagePath TEXT NULL, | |
| Status INTEGER NOT NULL, | |
| CreatedAt TEXT NOT NULL, | |
| UpdatedAt TEXT NULL, | |
| IsActive INTEGER NOT NULL DEFAULT 1, | |
| FOREIGN KEY (StoreId) REFERENCES Stores(Id) | |
| ); | |
| CREATE TABLE IF NOT EXISTS OcrDocuments ( | |
| Id TEXT PRIMARY KEY, | |
| DocumentNumber TEXT NOT NULL UNIQUE, | |
| FilePath TEXT NOT NULL, | |
| SupplierName TEXT NULL, | |
| DocumentDate TEXT NULL, | |
| Status INTEGER NOT NULL, | |
| TotalAmount NUMERIC NULL, | |
| RawText TEXT NULL, | |
| CreatedAt TEXT NOT NULL, | |
| UpdatedAt TEXT NULL, | |
| IsActive INTEGER NOT NULL DEFAULT 1 | |
| ); | |
| """; | |
| public const string SeedData = """ | |
| INSERT OR IGNORE INTO Stores (Id, Code, Name, StoreType, CreatedAt, IsActive) | |
| VALUES | |
| ('11111111-1111-1111-1111-111111111111', 'HQ', '中央廚房', 3, datetime('now'), 1), | |
| ('22222222-2222-2222-2222-222222222222', 'S001', '直營一店', 1, datetime('now'), 1); | |
| INSERT OR IGNORE INTO Warehouses (Id, Code, Name, StoreId, WarehouseType, CreatedAt, IsActive) | |
| VALUES | |
| ('33333333-3333-3333-3333-333333333333', 'WH-HQ', '中央廚房主倉', '11111111-1111-1111-1111-111111111111', 2, datetime('now'), 1), | |
| ('44444444-4444-4444-4444-444444444444', 'WH-S001', '直營一店倉', '22222222-2222-2222-2222-222222222222', 3, datetime('now'), 1); | |
| INSERT OR IGNORE INTO Suppliers (Id, Code, Name, PaymentTermDays, CreatedAt, IsActive) | |
| VALUES ('55555555-5555-5555-5555-555555555555', 'SUP-FLOUR', '範例麵粉供應商', 30, datetime('now'), 1); | |
| INSERT OR IGNORE INTO Items (Id, Sku, Name, ItemType, CategoryName, BaseUnit, SafetyStockQuantity, ShelfLifeDays, CreatedAt, IsActive) | |
| VALUES | |
| ('66666666-6666-6666-6666-666666666666', 'RM-FLOUR-001', '高筋麵粉', 1, '麵粉', 'kg', 50, 180, datetime('now'), 1), | |
| ('77777777-7777-7777-7777-777777777777', 'PKG-BAG-001', '吐司袋', 4, '包材', '個', 500, NULL, datetime('now'), 1); | |
| """; | |
| } | |