Sindbad~EG File Manager

Current Path : /home/copmadinaarea/thecopmadinaarea.org/portal/modules/member-transfers/
Upload File :
Current File : /home/copmadinaarea/thecopmadinaarea.org/portal/modules/member-transfers/index.php

<?php
require_once '../../config/config.php';
checkLogin();

$pageTitle = "Member Transfers - " . APP_NAME;
$db = Database::getInstance()->getConnection();
$success = '';
$error = '';

// Get access level
$accessLevel = getUserAccessLevel();
$userAssemblyId = getUserAssemblyId();
$userDistrictId = getUserDistrictId();

// Handle transfer request
if ($_SERVER['REQUEST_METHOD'] === 'POST' && isset($_POST['submit_transfer'])) {
    try {
        $memberId = $_POST['member_id'];
        $fromAssemblyId = $_POST['from_assembly_id'];
        $toAssemblyId = $_POST['to_assembly_id'];
        $transferReason = $_POST['transfer_reason'];
        $transferDate = $_POST['transfer_date'];
        
        // Validate
        if ($fromAssemblyId == $toAssemblyId) {
            throw new Exception("Cannot transfer to the same assembly");
        }
        
        // Start transaction
        $db->beginTransaction();
        
        // Update member's assembly
        $stmt = $db->prepare("
            UPDATE members 
            SET assembly_id = :new_assembly, 
                district_id = (SELECT district_id FROM assemblies WHERE id = :new_assembly)
            WHERE id = :member_id
        ");
        $stmt->execute([
            'new_assembly' => $toAssemblyId,
            'member_id' => $memberId
        ]);
        
        // Record transfer (if you have a transfers table, otherwise just success message)
        
        $db->commit();
        $success = "Member transfer completed successfully!";
        
    } catch (Exception $e) {
        if ($db->inTransaction()) {
            $db->rollBack();
        }
        $error = $e->getMessage();
    }
}

// Get members for transfer
$query = "SELECT m.*, a.assembly_name, d.district_name 
          FROM members m
          LEFT JOIN assemblies a ON m.assembly_id = a.id
          LEFT JOIN districts d ON m.district_id = d.id
          WHERE m.is_active = 1";
$params = [];

if ($accessLevel === 'assembly') {
    $query .= " AND m.assembly_id = :assembly_id";
    $params['assembly_id'] = $userAssemblyId;
} elseif ($accessLevel === 'district') {
    $query .= " AND m.district_id = :district_id";
    $params['district_id'] = $userDistrictId;
}

$query .= " ORDER BY m.first_name, m.last_name LIMIT 100";

$stmt = $db->prepare($query);
$stmt->execute($params);
$members = $stmt->fetchAll();

// Get all assemblies
$assemblies = $db->query("SELECT a.*, d.district_name 
                          FROM assemblies a 
                          LEFT JOIN districts d ON a.district_id = d.id 
                          WHERE a.is_active = 1 
                          ORDER BY d.district_name, a.assembly_name")->fetchAll();

include '../../includes/header.php';
?>

<?php include '../../includes/sidebar.php'; ?>

<!-- Main Content -->
<main class="flex-1 md:ml-64 mt-16">
    <div class="container mx-auto px-4 py-8">
        <div class="max-w-6xl mx-auto">
            
            <!-- Header -->
            <div class="mb-8">
                <h1 class="text-3xl font-bold text-gray-800 mb-2">Member Transfers</h1>
                <p class="text-gray-600">Manage member transfers between assemblies</p>
            </div>
            
            <!-- Success/Error Messages -->
            <?php if ($success): ?>
                <div class="mb-6 bg-green-100 border-l-4 border-green-500 text-green-700 p-4 rounded-lg shadow-md">
                    <div class="flex items-center">
                        <i class="fas fa-check-circle mr-3 text-xl"></i>
                        <p><?php echo $success; ?></p>
                    </div>
                </div>
            <?php endif; ?>
            
            <?php if ($error): ?>
                <div class="mb-6 bg-red-100 border-l-4 border-red-500 text-red-700 p-4 rounded-lg shadow-md">
                    <div class="flex items-center">
                        <i class="fas fa-exclamation-circle mr-3 text-xl"></i>
                        <p><?php echo htmlspecialchars($error); ?></p>
                    </div>
                </div>
            <?php endif; ?>
            
            <!-- Transfer Form -->
            <div class="bg-white rounded-xl shadow-lg p-6 mb-6">
                <h2 class="text-xl font-semibold text-gray-800 mb-6">
                    <i class="fas fa-exchange-alt mr-2"></i>Create New Transfer
                </h2>
                
                <form method="POST" class="space-y-6">
                    <div class="grid grid-cols-2 gap-6">
                        <div class="col-span-2">
                            <label class="block text-sm font-medium text-gray-700 mb-2">Select Member*</label>
                            <select name="member_id" id="memberId" class="w-full px-4 py-2 border border-gray-300 rounded-lg focus:ring-2 focus:ring-blue-500" required>
                                <option value="">Choose a member...</option>
                                <?php foreach ($members as $member): ?>
                                    <option value="<?php echo $member['id']; ?>" 
                                            data-assembly="<?php echo $member['assembly_id']; ?>"
                                            data-assembly-name="<?php echo htmlspecialchars($member['assembly_name']); ?>">
                                        <?php echo htmlspecialchars($member['first_name'] . ' ' . $member['last_name'] . ' - ' . $member['assembly_name']); ?>
                                    </option>
                                <?php endforeach; ?>
                            </select>
                        </div>
                        
                        <div>
                            <label class="block text-sm font-medium text-gray-700 mb-2">From Assembly*</label>
                            <input type="hidden" name="from_assembly_id" id="fromAssemblyId" required>
                            <input type="text" id="fromAssemblyName" readonly 
                                   class="w-full px-4 py-2 border border-gray-300 rounded-lg bg-gray-50" 
                                   placeholder="Select member first">
                        </div>
                        
                        <div>
                            <label class="block text-sm font-medium text-gray-700 mb-2">To Assembly*</label>
                            <select name="to_assembly_id" class="w-full px-4 py-2 border border-gray-300 rounded-lg focus:ring-2 focus:ring-blue-500" required>
                                <option value="">Choose destination assembly...</option>
                                <?php foreach ($assemblies as $assembly): ?>
                                    <option value="<?php echo $assembly['id']; ?>">
                                        <?php echo htmlspecialchars($assembly['district_name'] . ' - ' . $assembly['assembly_name']); ?>
                                    </option>
                                <?php endforeach; ?>
                            </select>
                        </div>
                        
                        <div>
                            <label class="block text-sm font-medium text-gray-700 mb-2">Transfer Date*</label>
                            <input type="date" name="transfer_date" value="<?php echo date('Y-m-d'); ?>" 
                                   class="w-full px-4 py-2 border border-gray-300 rounded-lg focus:ring-2 focus:ring-blue-500" required>
                        </div>
                        
                        <div>
                            <label class="block text-sm font-medium text-gray-700 mb-2">Reason for Transfer</label>
                            <select name="transfer_reason" class="w-full px-4 py-2 border border-gray-300 rounded-lg focus:ring-2 focus:ring-blue-500">
                                <option value="relocation">Relocation</option>
                                <option value="personal">Personal Reasons</option>
                                <option value="work">Work Related</option>
                                <option value="family">Family Reasons</option>
                                <option value="other">Other</option>
                            </select>
                        </div>
                    </div>
                    
                    <div class="flex justify-end">
                        <button type="submit" name="submit_transfer" 
                                class="bg-gradient-to-r from-blue-500 to-blue-600 text-white px-8 py-3 rounded-lg hover:shadow-lg transition">
                            <i class="fas fa-paper-plane mr-2"></i>Submit Transfer
                        </button>
                    </div>
                </form>
            </div>
            
            <!-- Recent Transfers Table -->
            <div class="bg-white rounded-xl shadow-lg overflow-hidden">
                <div class="p-6 border-b border-gray-200">
                    <h2 class="text-xl font-semibold text-gray-800">
                        <i class="fas fa-history mr-2"></i>Members Available for Transfer
                    </h2>
                </div>
                
                <div class="overflow-x-auto">
                    <table class="min-w-full divide-y divide-gray-200">
                        <thead class="bg-gray-50">
                            <tr>
                                <th class="px-6 py-3 text-left text-xs font-medium text-gray-500 uppercase tracking-wider">Member</th>
                                <th class="px-6 py-3 text-left text-xs font-medium text-gray-500 uppercase tracking-wider">Current District</th>
                                <th class="px-6 py-3 text-left text-xs font-medium text-gray-500 uppercase tracking-wider">Current Assembly</th>
                                <th class="px-6 py-3 text-left text-xs font-medium text-gray-500 uppercase tracking-wider">Member Type</th>
                            </tr>
                        </thead>
                        <tbody class="bg-white divide-y divide-gray-200">
                            <?php foreach ($members as $member): ?>
                                <tr class="hover:bg-gray-50">
                                    <td class="px-6 py-4 whitespace-nowrap">
                                        <div class="text-sm font-medium text-gray-900">
                                            <?php echo htmlspecialchars($member['first_name'] . ' ' . $member['last_name']); ?>
                                        </div>
                                        <div class="text-sm text-gray-500">
                                            <?php echo htmlspecialchars($member['email'] ?? 'No email'); ?>
                                        </div>
                                    </td>
                                    <td class="px-6 py-4 whitespace-nowrap text-sm text-gray-500">
                                        <?php echo htmlspecialchars($member['district_name'] ?? 'N/A'); ?>
                                    </td>
                                    <td class="px-6 py-4 whitespace-nowrap text-sm text-gray-500">
                                        <?php echo htmlspecialchars($member['assembly_name'] ?? 'N/A'); ?>
                                    </td>
                                    <td class="px-6 py-4 whitespace-nowrap">
                                        <span class="px-2 inline-flex text-xs leading-5 font-semibold rounded-full bg-green-100 text-green-800">
                                            <?php echo htmlspecialchars($member['member_type'] ?? 'Full Member'); ?>
                                        </span>
                                    </td>
                                </tr>
                            <?php endforeach; ?>
                        </tbody>
                    </table>
                </div>
            </div>
            
        </div>
    </div>
</main>

<script>
// Auto-fill from assembly when member is selected
document.getElementById('memberId').addEventListener('change', function() {
    const selectedOption = this.options[this.selectedIndex];
    const assemblyId = selectedOption.getAttribute('data-assembly');
    const assemblyName = selectedOption.getAttribute('data-assembly-name');
    
    document.getElementById('fromAssemblyId').value = assemblyId || '';
    document.getElementById('fromAssemblyName').value = assemblyName || 'No assembly';
});
</script>

<?php include '../../includes/footer.php'; ?>

Sindbad File Manager Version 1.0, Coded By Sindbad EG ~ The Terrorists