From b5a80b944c49dc5a66c9ab5989c560cab0715671 Mon Sep 17 00:00:00 2001 From: Flatlogic Bot Date: Sat, 21 Feb 2026 08:32:30 +0000 Subject: [PATCH] items debug saving --- complete_schema.sql | 2 +- .../20260221_fix_supplier_foreign_keys.sql | 67 +++++++++++++++++++ index.php | 2 +- 3 files changed, 69 insertions(+), 2 deletions(-) create mode 100644 db/migrations/20260221_fix_supplier_foreign_keys.sql diff --git a/complete_schema.sql b/complete_schema.sql index 0cef087..90b1906 100644 --- a/complete_schema.sql +++ b/complete_schema.sql @@ -951,7 +951,7 @@ CREATE TABLE `stock_items` ( KEY `category_id` (`category_id`), KEY `unit_id` (`unit_id`), KEY `fk_stock_items_supplier` (`supplier_id`), - CONSTRAINT `fk_stock_items_supplier` FOREIGN KEY (`supplier_id`) REFERENCES `customers` (`id`) ON DELETE SET NULL, + CONSTRAINT `fk_stock_items_supplier` FOREIGN KEY (`supplier_id`) REFERENCES `suppliers` (`id`) ON DELETE SET NULL, CONSTRAINT `stock_items_ibfk_1` FOREIGN KEY (`category_id`) REFERENCES `stock_categories` (`id`) ON DELETE SET NULL, CONSTRAINT `stock_items_ibfk_2` FOREIGN KEY (`unit_id`) REFERENCES `stock_units` (`id`) ON DELETE SET NULL ) ENGINE=InnoDB AUTO_INCREMENT=5 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci; diff --git a/db/migrations/20260221_fix_supplier_foreign_keys.sql b/db/migrations/20260221_fix_supplier_foreign_keys.sql new file mode 100644 index 0000000..f6f2950 --- /dev/null +++ b/db/migrations/20260221_fix_supplier_foreign_keys.sql @@ -0,0 +1,67 @@ +-- Fix for suppliers split and foreign keys + +-- 1. Move remaining suppliers from customers to suppliers table if type column exists +SET @dbname = DATABASE(); +SET @tablename = 'customers'; +SET @columnname = 'type'; +SET @preparedStatement = (SELECT IF( + (SELECT COUNT(*) FROM INFORMATION_SCHEMA.COLUMNS + WHERE TABLE_SCHEMA = @dbname AND TABLE_NAME = @tablename AND COLUMN_NAME = @columnname) > 0, + 'INSERT IGNORE INTO suppliers (id, name, email, phone, tax_id, balance, credit_limit, created_at, total_spent) SELECT id, name, email, phone, tax_id, balance, credit_limit, created_at, total_spent FROM customers WHERE type = "supplier"', + 'SELECT 1' +)); +PREPARE stmt FROM @preparedStatement; +EXECUTE stmt; +DEALLOCATE PREPARE stmt; + +-- 2. Delete them from customers if type column exists +SET @preparedStatement = (SELECT IF( + (SELECT COUNT(*) FROM INFORMATION_SCHEMA.COLUMNS + WHERE TABLE_SCHEMA = @dbname AND TABLE_NAME = @tablename AND COLUMN_NAME = @columnname) > 0, + 'DELETE FROM customers WHERE type = "supplier"', + 'SELECT 1' +)); +PREPARE stmt FROM @preparedStatement; +EXECUTE stmt; +DEALLOCATE PREPARE stmt; + +-- 3. Drop type column if it exists +SET @preparedStatement = (SELECT IF( + (SELECT COUNT(*) FROM INFORMATION_SCHEMA.COLUMNS + WHERE TABLE_SCHEMA = @dbname AND TABLE_NAME = @tablename AND COLUMN_NAME = @columnname) > 0, + 'ALTER TABLE customers DROP COLUMN type', + 'SELECT 1' +)); +PREPARE stmt FROM @preparedStatement; +EXECUTE stmt; +DEALLOCATE PREPARE stmt; + +-- 4. Fix foreign keys for supplier_id in stock_items +SET @tablename = 'stock_items'; +SET @constraintname = 'fk_stock_items_supplier'; +SET @preparedStatement = (SELECT IF( + (SELECT COUNT(*) FROM INFORMATION_SCHEMA.TABLE_CONSTRAINTS + WHERE CONSTRAINT_SCHEMA = @dbname AND TABLE_NAME = @tablename AND CONSTRAINT_NAME = @constraintname AND CONSTRAINT_TYPE = 'FOREIGN KEY') > 0, + 'ALTER TABLE stock_items DROP FOREIGN KEY fk_stock_items_supplier', + 'SELECT 1' +)); +PREPARE stmt FROM @preparedStatement; +EXECUTE stmt; +DEALLOCATE PREPARE stmt; + +ALTER TABLE stock_items ADD CONSTRAINT fk_stock_items_supplier FOREIGN KEY (supplier_id) REFERENCES suppliers(id) ON DELETE SET NULL; + +-- 5. Fix foreign keys for supplier_id in purchase_returns +SET @tablename = 'purchase_returns'; +SET @constraintname = 'purchase_returns_ibfk_2'; +SET @preparedStatement = (SELECT IF( + (SELECT COUNT(*) FROM INFORMATION_SCHEMA.TABLE_CONSTRAINTS + WHERE CONSTRAINT_SCHEMA = @dbname AND TABLE_NAME = @tablename AND CONSTRAINT_NAME = @constraintname AND CONSTRAINT_TYPE = 'FOREIGN KEY') > 0, + 'ALTER TABLE purchase_returns DROP FOREIGN KEY purchase_returns_ibfk_2', + 'SELECT 1' +)); +PREPARE stmt FROM @preparedStatement; +EXECUTE stmt; +DEALLOCATE PREPARE stmt; + +ALTER TABLE purchase_returns ADD CONSTRAINT purchase_returns_ibfk_2 FOREIGN KEY (supplier_id) REFERENCES suppliers(id) ON DELETE SET NULL; diff --git a/index.php b/index.php index 118444d..92ac092 100644 --- a/index.php +++ b/index.php @@ -1506,7 +1506,7 @@ if (isset($_POST['add_hr_department'])) { } // Insert Purchase Return - $stmt = $db->prepare("INSERT INTO purchase_returns (purchase_id, supplier_id, return_date, total_amount, notes) VALUES (?, ?, ?, ?, ?)"); + $stmt = $db->prepare("INSERT INTO purchase_returns (invoice_id, supplier_id, return_date, total_amount, notes) VALUES (?, ?, ?, ?, ?)"); $stmt->execute([$invoice_id, $supplier_id, $return_date, $total_return, $notes]); $return_id = $db->lastInsertId();