-- CreateTable CREATE TABLE `sklad_categories` ( `id` INTEGER NOT NULL AUTO_INCREMENT, `name` VARCHAR(100) NOT NULL, `description` TEXT NULL, `sort_order` INTEGER NOT NULL DEFAULT 0, `created_at` DATETIME(0) NULL DEFAULT CURRENT_TIMESTAMP(0), `modified_at` DATETIME(0) NULL, PRIMARY KEY (`id`) ) DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; -- CreateTable CREATE TABLE `sklad_suppliers` ( `id` INTEGER NOT NULL AUTO_INCREMENT, `name` VARCHAR(255) NOT NULL, `ico` VARCHAR(20) NULL, `dic` VARCHAR(20) NULL, `contact_person` VARCHAR(255) NULL, `email` VARCHAR(255) NULL, `phone` VARCHAR(50) NULL, `address` TEXT NULL, `notes` TEXT NULL, `is_active` BOOLEAN NOT NULL DEFAULT true, `created_at` DATETIME(0) NULL DEFAULT CURRENT_TIMESTAMP(0), `modified_at` DATETIME(0) NULL, PRIMARY KEY (`id`) ) DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; -- CreateTable CREATE TABLE `sklad_locations` ( `id` INTEGER NOT NULL AUTO_INCREMENT, `code` VARCHAR(20) NOT NULL, `name` VARCHAR(100) NOT NULL, `description` TEXT NULL, `is_active` BOOLEAN NOT NULL DEFAULT true, `created_at` DATETIME(0) NULL DEFAULT CURRENT_TIMESTAMP(0), `modified_at` DATETIME(0) NULL, UNIQUE INDEX `sklad_locations_code_key`(`code`), PRIMARY KEY (`id`) ) DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; -- CreateTable CREATE TABLE `sklad_items` ( `id` INTEGER NOT NULL AUTO_INCREMENT, `item_number` VARCHAR(50) NULL, `name` VARCHAR(255) NOT NULL, `description` TEXT NULL, `category_id` INTEGER NULL, `unit` VARCHAR(20) NOT NULL, `min_quantity` DECIMAL(12, 3) NULL, `is_active` BOOLEAN NOT NULL DEFAULT true, `notes` TEXT NULL, `created_at` DATETIME(0) NULL DEFAULT CURRENT_TIMESTAMP(0), `modified_at` DATETIME(0) NULL, UNIQUE INDEX `sklad_items_item_number_key`(`item_number`), INDEX `sklad_items_category_id`(`category_id`), PRIMARY KEY (`id`) ) DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; -- CreateTable CREATE TABLE `sklad_batches` ( `id` INTEGER NOT NULL AUTO_INCREMENT, `item_id` INTEGER NOT NULL, `receipt_line_id` INTEGER NOT NULL, `quantity` DECIMAL(12, 3) NOT NULL, `original_qty` DECIMAL(12, 3) NOT NULL, `unit_price` DECIMAL(12, 2) NOT NULL, `received_at` DATETIME(0) NULL, `is_consumed` BOOLEAN NOT NULL DEFAULT false, UNIQUE INDEX `sklad_batches_receipt_line_id_key`(`receipt_line_id`), INDEX `sklad_batches_fifo`(`item_id`, `is_consumed`, `received_at`), PRIMARY KEY (`id`) ) DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; -- CreateTable CREATE TABLE `sklad_item_locations` ( `id` INTEGER NOT NULL AUTO_INCREMENT, `item_id` INTEGER NOT NULL, `location_id` INTEGER NOT NULL, `quantity` DECIMAL(12, 3) NOT NULL DEFAULT 0, UNIQUE INDEX `sklad_item_locations_unique`(`item_id`, `location_id`), PRIMARY KEY (`id`) ) DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; -- CreateTable CREATE TABLE `sklad_receipts` ( `id` INTEGER NOT NULL AUTO_INCREMENT, `receipt_number` VARCHAR(50) NULL, `supplier_id` INTEGER NULL, `delivery_note_number` VARCHAR(100) NULL, `delivery_note_date` DATETIME(0) NULL, `received_by` INTEGER NULL, `notes` TEXT NULL, `status` ENUM('DRAFT', 'CONFIRMED', 'CANCELLED') NOT NULL DEFAULT 'DRAFT', `created_at` DATETIME(0) NULL DEFAULT CURRENT_TIMESTAMP(0), `modified_at` DATETIME(0) NULL, PRIMARY KEY (`id`) ) DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; -- CreateTable CREATE TABLE `sklad_receipt_lines` ( `id` INTEGER NOT NULL AUTO_INCREMENT, `receipt_id` INTEGER NOT NULL, `item_id` INTEGER NOT NULL, `quantity` DECIMAL(12, 3) NOT NULL, `unit_price` DECIMAL(12, 2) NOT NULL, `location_id` INTEGER NULL, `notes` VARCHAR(255) NULL, INDEX `sklad_receipt_lines_receipt_id`(`receipt_id`), PRIMARY KEY (`id`) ) DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; -- CreateTable CREATE TABLE `sklad_receipt_attachments` ( `id` INTEGER NOT NULL AUTO_INCREMENT, `receipt_id` INTEGER NOT NULL, `file_name` VARCHAR(255) NOT NULL, `file_mime` VARCHAR(100) NOT NULL, `file_size` INTEGER NOT NULL, `file_path` VARCHAR(500) NOT NULL, `created_at` DATETIME(0) NULL DEFAULT CURRENT_TIMESTAMP(0), PRIMARY KEY (`id`) ) DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; -- CreateTable CREATE TABLE `sklad_issues` ( `id` INTEGER NOT NULL AUTO_INCREMENT, `issue_number` VARCHAR(50) NULL, `project_id` INTEGER NOT NULL, `issued_by` INTEGER NULL, `notes` TEXT NULL, `status` ENUM('DRAFT', 'CONFIRMED', 'CANCELLED') NOT NULL DEFAULT 'DRAFT', `created_at` DATETIME(0) NULL DEFAULT CURRENT_TIMESTAMP(0), `modified_at` DATETIME(0) NULL, PRIMARY KEY (`id`) ) DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; -- CreateTable CREATE TABLE `sklad_issue_lines` ( `id` INTEGER NOT NULL AUTO_INCREMENT, `issue_id` INTEGER NOT NULL, `item_id` INTEGER NOT NULL, `batch_id` INTEGER NOT NULL, `quantity` DECIMAL(12, 3) NOT NULL, `location_id` INTEGER NULL, `reservation_id` INTEGER NULL, `notes` VARCHAR(255) NULL, INDEX `sklad_issue_lines_issue_id`(`issue_id`), PRIMARY KEY (`id`) ) DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; -- CreateTable CREATE TABLE `sklad_reservations` ( `id` INTEGER NOT NULL AUTO_INCREMENT, `item_id` INTEGER NOT NULL, `project_id` INTEGER NOT NULL, `quantity` DECIMAL(12, 3) NOT NULL, `remaining_qty` DECIMAL(12, 3) NOT NULL, `reserved_by` INTEGER NULL, `notes` TEXT NULL, `status` ENUM('ACTIVE', 'FULFILLED', 'CANCELLED') NOT NULL DEFAULT 'ACTIVE', `created_at` DATETIME(0) NULL DEFAULT CURRENT_TIMESTAMP(0), `modified_at` DATETIME(0) NULL, INDEX `sklad_reservations_item_status`(`item_id`, `status`), PRIMARY KEY (`id`) ) DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; -- CreateTable CREATE TABLE `sklad_inventory_sessions` ( `id` INTEGER NOT NULL AUTO_INCREMENT, `session_number` VARCHAR(50) NULL, `notes` TEXT NULL, `status` ENUM('DRAFT', 'CONFIRMED') NOT NULL DEFAULT 'DRAFT', `created_at` DATETIME(0) NULL DEFAULT CURRENT_TIMESTAMP(0), `modified_at` DATETIME(0) NULL, PRIMARY KEY (`id`) ) DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; -- CreateTable CREATE TABLE `sklad_inventory_lines` ( `id` INTEGER NOT NULL AUTO_INCREMENT, `session_id` INTEGER NOT NULL, `item_id` INTEGER NOT NULL, `location_id` INTEGER NULL, `system_qty` DECIMAL(12, 3) NOT NULL, `actual_qty` DECIMAL(12, 3) NOT NULL, `difference` DECIMAL(12, 3) NOT NULL, `notes` VARCHAR(255) NULL, INDEX `sklad_inventory_lines_session_id`(`session_id`), PRIMARY KEY (`id`) ) DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; -- AddForeignKey ALTER TABLE `sklad_items` ADD CONSTRAINT `sklad_items_category_id_fkey` FOREIGN KEY (`category_id`) REFERENCES `sklad_categories`(`id`) ON DELETE SET NULL ON UPDATE CASCADE; -- AddForeignKey ALTER TABLE `sklad_batches` ADD CONSTRAINT `sklad_batches_item_id_fkey` FOREIGN KEY (`item_id`) REFERENCES `sklad_items`(`id`) ON DELETE RESTRICT ON UPDATE CASCADE; -- AddForeignKey ALTER TABLE `sklad_batches` ADD CONSTRAINT `sklad_batches_receipt_line_id_fkey` FOREIGN KEY (`receipt_line_id`) REFERENCES `sklad_receipt_lines`(`id`) ON DELETE RESTRICT ON UPDATE CASCADE; -- AddForeignKey ALTER TABLE `sklad_item_locations` ADD CONSTRAINT `sklad_item_locations_item_id_fkey` FOREIGN KEY (`item_id`) REFERENCES `sklad_items`(`id`) ON DELETE RESTRICT ON UPDATE CASCADE; -- AddForeignKey ALTER TABLE `sklad_item_locations` ADD CONSTRAINT `sklad_item_locations_location_id_fkey` FOREIGN KEY (`location_id`) REFERENCES `sklad_locations`(`id`) ON DELETE RESTRICT ON UPDATE CASCADE; -- AddForeignKey ALTER TABLE `sklad_receipts` ADD CONSTRAINT `sklad_receipts_supplier_id_fkey` FOREIGN KEY (`supplier_id`) REFERENCES `sklad_suppliers`(`id`) ON DELETE SET NULL ON UPDATE CASCADE; -- AddForeignKey ALTER TABLE `sklad_receipts` ADD CONSTRAINT `sklad_receipts_received_by_fkey` FOREIGN KEY (`received_by`) REFERENCES `users`(`id`) ON DELETE SET NULL ON UPDATE CASCADE; -- AddForeignKey ALTER TABLE `sklad_receipt_lines` ADD CONSTRAINT `sklad_receipt_lines_receipt_id_fkey` FOREIGN KEY (`receipt_id`) REFERENCES `sklad_receipts`(`id`) ON DELETE RESTRICT ON UPDATE CASCADE; -- AddForeignKey ALTER TABLE `sklad_receipt_lines` ADD CONSTRAINT `sklad_receipt_lines_item_id_fkey` FOREIGN KEY (`item_id`) REFERENCES `sklad_items`(`id`) ON DELETE RESTRICT ON UPDATE CASCADE; -- AddForeignKey ALTER TABLE `sklad_receipt_lines` ADD CONSTRAINT `sklad_receipt_lines_location_id_fkey` FOREIGN KEY (`location_id`) REFERENCES `sklad_locations`(`id`) ON DELETE SET NULL ON UPDATE CASCADE; -- AddForeignKey ALTER TABLE `sklad_receipt_attachments` ADD CONSTRAINT `sklad_receipt_attachments_receipt_id_fkey` FOREIGN KEY (`receipt_id`) REFERENCES `sklad_receipts`(`id`) ON DELETE RESTRICT ON UPDATE CASCADE; -- AddForeignKey ALTER TABLE `sklad_issues` ADD CONSTRAINT `sklad_issues_project_id_fkey` FOREIGN KEY (`project_id`) REFERENCES `projects`(`id`) ON DELETE RESTRICT ON UPDATE CASCADE; -- AddForeignKey ALTER TABLE `sklad_issues` ADD CONSTRAINT `sklad_issues_issued_by_fkey` FOREIGN KEY (`issued_by`) REFERENCES `users`(`id`) ON DELETE SET NULL ON UPDATE CASCADE; -- AddForeignKey ALTER TABLE `sklad_issue_lines` ADD CONSTRAINT `sklad_issue_lines_issue_id_fkey` FOREIGN KEY (`issue_id`) REFERENCES `sklad_issues`(`id`) ON DELETE RESTRICT ON UPDATE CASCADE; -- AddForeignKey ALTER TABLE `sklad_issue_lines` ADD CONSTRAINT `sklad_issue_lines_item_id_fkey` FOREIGN KEY (`item_id`) REFERENCES `sklad_items`(`id`) ON DELETE RESTRICT ON UPDATE CASCADE; -- AddForeignKey ALTER TABLE `sklad_issue_lines` ADD CONSTRAINT `sklad_issue_lines_batch_id_fkey` FOREIGN KEY (`batch_id`) REFERENCES `sklad_batches`(`id`) ON DELETE RESTRICT ON UPDATE CASCADE; -- AddForeignKey ALTER TABLE `sklad_issue_lines` ADD CONSTRAINT `sklad_issue_lines_location_id_fkey` FOREIGN KEY (`location_id`) REFERENCES `sklad_locations`(`id`) ON DELETE SET NULL ON UPDATE CASCADE; -- AddForeignKey ALTER TABLE `sklad_issue_lines` ADD CONSTRAINT `sklad_issue_lines_reservation_id_fkey` FOREIGN KEY (`reservation_id`) REFERENCES `sklad_reservations`(`id`) ON DELETE SET NULL ON UPDATE CASCADE; -- AddForeignKey ALTER TABLE `sklad_reservations` ADD CONSTRAINT `sklad_reservations_item_id_fkey` FOREIGN KEY (`item_id`) REFERENCES `sklad_items`(`id`) ON DELETE RESTRICT ON UPDATE CASCADE; -- AddForeignKey ALTER TABLE `sklad_reservations` ADD CONSTRAINT `sklad_reservations_project_id_fkey` FOREIGN KEY (`project_id`) REFERENCES `projects`(`id`) ON DELETE RESTRICT ON UPDATE CASCADE; -- AddForeignKey ALTER TABLE `sklad_reservations` ADD CONSTRAINT `sklad_reservations_reserved_by_fkey` FOREIGN KEY (`reserved_by`) REFERENCES `users`(`id`) ON DELETE SET NULL ON UPDATE CASCADE; -- AddForeignKey ALTER TABLE `sklad_inventory_lines` ADD CONSTRAINT `sklad_inventory_lines_session_id_fkey` FOREIGN KEY (`session_id`) REFERENCES `sklad_inventory_sessions`(`id`) ON DELETE RESTRICT ON UPDATE CASCADE; -- AddForeignKey ALTER TABLE `sklad_inventory_lines` ADD CONSTRAINT `sklad_inventory_lines_item_id_fkey` FOREIGN KEY (`item_id`) REFERENCES `sklad_items`(`id`) ON DELETE RESTRICT ON UPDATE CASCADE; -- AddForeignKey ALTER TABLE `sklad_inventory_lines` ADD CONSTRAINT `sklad_inventory_lines_location_id_fkey` FOREIGN KEY (`location_id`) REFERENCES `sklad_locations`(`id`) ON DELETE SET NULL ON UPDATE CASCADE;