38471-vm/create_tenant_views.php
2026-02-25 09:58:14 +00:00

55 lines
2.0 KiB
PHP

<?php
require 'db/config.php';
$db = db();
$tables = [
'users', 'invoices', 'lpos', 'purchases', 'quotations',
'expenses', 'payments', 'purchase_payments', 'pos_transactions',
'customers', 'suppliers', 'stock_items', 'pos_held_carts',
'loyalty_transactions', 'purchase_returns', 'sales_returns', 'pos_payments'
];
try {
// 1. Create function
$db->exec("DROP FUNCTION IF EXISTS current_outlet_id");
$db->exec("CREATE FUNCTION current_outlet_id() RETURNS INT DETERMINISTIC RETURN @session_outlet_id");
foreach ($tables as $t) {
// Ensure table exists and isn't already a view
$stmt = $db->query("SHOW FULL TABLES LIKE '$t'");
$row = $stmt->fetch(PDO::FETCH_NUM);
if (!$row) continue;
if ($row[1] === 'VIEW') continue; // Already processed
// Make sure it has outlet_id
$hasCol = false;
$cols = $db->query("SHOW COLUMNS FROM `$t`")->fetchAll(PDO::FETCH_ASSOC);
foreach ($cols as $c) {
if ($c['Field'] === 'outlet_id') $hasCol = true;
}
if (!$hasCol) {
$db->exec("ALTER TABLE `$t` ADD COLUMN IF NOT EXISTS `outlet_id` int(11) DEFAULT 1 AFTER `id`");
}
// Alter default to 1 if it's NULL
$db->exec("ALTER TABLE `$t` MODIFY `outlet_id` int(11) DEFAULT 1");
// Rename table to _table
$db->exec("RENAME TABLE `$t` TO `_$t`");
// Create view
$db->exec("CREATE VIEW `$t` AS SELECT * FROM `_$t` WHERE outlet_id = current_outlet_id() OR current_outlet_id() IS NULL OR current_outlet_id() = 0");
// Create trigger
$db->exec("CREATE TRIGGER `trg_ins_$t` BEFORE INSERT ON `_$t` FOR EACH ROW BEGIN
IF current_outlet_id() IS NOT NULL AND current_outlet_id() != 0 THEN
SET NEW.outlet_id = current_outlet_id();
END IF;
END");
echo "Processed $t\n";
}
} catch (Exception $e) {
echo "Error: " . $e->getMessage() . "\n";
}