beginTransaction(); foreach ($setting_keys as $key) { if (isset($_POST[$key])) { $value = $_POST[$key]; // For PAYE brackets, we expect a JSON string, so we don't validate it beyond checking if it's set $stmt = $pdo->prepare( "INSERT INTO settings (company_id, setting_key, setting_value) VALUES (?, ?, ?) ON DUPLICATE KEY UPDATE setting_value = VALUES(setting_value)" ); $stmt->execute([$company_id, $key, $value]); } } $pdo->commit(); $success_message = 'Settings updated successfully!'; } catch (Exception $e) { if ($pdo->inTransaction()) { $pdo->rollBack(); } $error_message = "Failed to update settings: " . $e->getMessage(); } } // Fetch current settings for the company $settings = []; $stmt = db()->prepare("SELECT setting_key, setting_value FROM settings WHERE company_id = ? AND setting_key IN ('" . implode("',\'", $setting_keys) . "')"); $stmt->execute([$company_id]); $results = $stmt->fetchAll(); foreach ($results as $row) { $settings[$row['setting_key']] = $row['setting_value']; } // Set default values if not present $defaults = [ 'napsa_rate' => '5', // 5% 'napsa_ceiling' => '2880', // ZMW 2880 'nhima_rate' => '1', // 1% 'paye_brackets' => json_encode([ ['from' => 0, 'to' => 4800, 'rate' => 0], ['from' => 4800.01, 'to' => 6800, 'rate' => 20], ['from' => 6800.01, 'to' => 8900, 'rate' => 30], ['from' => 8900.01, 'to' => null, 'rate' => 37.5] ], JSON_PRETTY_PRINT) ]; foreach ($defaults as $key => $value) { if (!isset($settings[$key])) { $settings[$key] = $value; } } ?>