From 4dc3d3783f4e3356014478c40296c61e5b11208f Mon Sep 17 00:00:00 2001 From: Hamza-Ayed Date: Thu, 7 May 2026 03:19:21 +0300 Subject: [PATCH] Update: 2026-05-07 03:19:21 --- scripts/migrate_payments.php | 122 +++++++++++++++++++++++++++++++++++ 1 file changed, 122 insertions(+) create mode 100644 scripts/migrate_payments.php diff --git a/scripts/migrate_payments.php b/scripts/migrate_payments.php new file mode 100644 index 0000000..d196efc --- /dev/null +++ b/scripts/migrate_payments.php @@ -0,0 +1,122 @@ +exec(" + CREATE TABLE IF NOT EXISTS subscription_plans ( + id VARCHAR(50) PRIMARY KEY, + name_ar VARCHAR(255) NOT NULL, + name_en VARCHAR(255) NOT NULL, + max_companies INT NOT NULL, + max_invoices_month INT NOT NULL, + max_users INT NOT NULL, + price_jod DECIMAL(10,3) NOT NULL, + ai_features BOOLEAN DEFAULT TRUE, + jofotara_enabled BOOLEAN DEFAULT TRUE, + sort_order INT DEFAULT 0, + is_active BOOLEAN DEFAULT TRUE, + created_at DATETIME DEFAULT CURRENT_TIMESTAMP + ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci + "); + + // 2. Insert initial plans + echo "Inserting initial plans...\n"; + $plans = require __DIR__ . '/../app/config/plans.php'; + $stmt = $db->prepare(" + INSERT INTO subscription_plans (id, name_ar, name_en, max_companies, max_invoices_month, max_users, price_jod, ai_features, jofotara_enabled, sort_order) + VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?) + ON DUPLICATE KEY UPDATE + name_ar = VALUES(name_ar), + price_jod = VALUES(price_jod), + max_companies = VALUES(max_companies), + max_invoices_month = VALUES(max_invoices_month) + "); + + $order = 0; + foreach ($plans as $id => $plan) { + $stmt->execute([ + $id, + $plan['name_ar'], + $plan['name_en'], + $plan['max_companies'], + $plan['max_invoices_month'], + $plan['max_users'], + $plan['price_jod'], + $plan['ai_features'] ? 1 : 0, + $plan['jofotara_enabled'] ? 1 : 0, + $order++ + ]); + } + + // 3. Create payment_requests table + echo "Creating payment_requests table...\n"; + $db->exec(" + CREATE TABLE IF NOT EXISTS payment_requests ( + id CHAR(36) PRIMARY KEY, + tenant_id CHAR(36) NOT NULL, + user_id CHAR(36) NOT NULL, + plan_id VARCHAR(50) NOT NULL, + amount_jod DECIMAL(10,3) NOT NULL, + internal_reference VARCHAR(50) UNIQUE NOT NULL, + cliq_alias VARCHAR(100) NOT NULL, + payer_name VARCHAR(255) DEFAULT NULL, + bank_reference VARCHAR(100) DEFAULT NULL, + status ENUM('pending','uploaded','verified','approved','rejected') DEFAULT 'pending', + admin_notes TEXT DEFAULT NULL, + verified_at DATETIME DEFAULT NULL, + created_at DATETIME DEFAULT CURRENT_TIMESTAMP, + updated_at DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, + FOREIGN KEY (tenant_id) REFERENCES tenants(id), + FOREIGN KEY (user_id) REFERENCES users(id), + INDEX idx_status (status), + INDEX idx_bank_ref (bank_reference) + ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci + "); + + // 4. Create bank_transactions table + echo "Creating bank_transactions table...\n"; + $db->exec(" + CREATE TABLE IF NOT EXISTS bank_transactions ( + id INT AUTO_INCREMENT PRIMARY KEY, + bank_reference VARCHAR(100) UNIQUE NOT NULL, + amount DECIMAL(10,3) NOT NULL, + sender_name VARCHAR(255) DEFAULT NULL, + raw_message TEXT NOT NULL, + is_claimed BOOLEAN DEFAULT FALSE, + created_at DATETIME DEFAULT CURRENT_TIMESTAMP, + INDEX idx_ref (bank_reference) + ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci + "); + + // 5. Update subscriptions table if needed + echo "Updating subscriptions table schema...\n"; + // Check if column plan_id exists, if not add it + $cols = $db->query("SHOW COLUMNS FROM subscriptions")->fetchAll(PDO::FETCH_COLUMN); + if (!in_array('plan_id', $cols)) { + $db->exec("ALTER TABLE subscriptions ADD COLUMN plan_id VARCHAR(50) AFTER tenant_id"); + $db->exec("ALTER TABLE subscriptions MODIFY COLUMN plan ENUM('free','basic','office','pro','enterprise') DEFAULT 'free'"); + } + if (!in_array('max_users', $cols)) { + $db->exec("ALTER TABLE subscriptions ADD COLUMN max_users INT NOT NULL DEFAULT 1 AFTER max_invoices_per_month"); + } + + echo "Migration completed successfully!\n"; + +} catch (\Throwable $e) { + echo "Migration failed: " . $e->getMessage() . "\n"; + exit(1); +}