Sindbad~EG File Manager
<?php
session_start();
require_once __DIR__ . '/../config/database.php';
require_once __DIR__ . '/../includes/functions.php';
if (!isset($_SESSION['user_id'])) {
header('Location: ../login.php');
exit();
}
// Check permission for data entry
if (!checkPermission('dataentry')) {
header('Location: ' . $_SESSION['user_level'] . '.php?error=access_denied');
exit();
}
$page_title = 'Demography 1 - Data Entry';
$page_description = 'Enter demographic data for assemblies';
$success_message = '';
$error_message = '';
// Get accessible areas, districts, and assemblies based on user level
$areas = getAccessibleAreas($_SESSION['user_level'], $_SESSION['area_id']);
$districts = [];
$assemblies = [];
// Handle form submissions for all three data types
if ($_POST) {
$area_id = (int)$_POST['area_id'];
$district_id = (int)$_POST['district_id'];
$assembly_id = (int)$_POST['assembly_id'];
// Validate location selection
if (!$area_id || !$district_id || !$assembly_id) {
$error_message = 'Please select Area, District, and Assembly.';
} else {
// Handle Membership data submission
if (isset($_POST['submit_demography'])) {
$children_male = (int)$_POST['children_male'];
$children_female = (int)$_POST['children_female'];
$teens_male = (int)$_POST['teens_male'];
$teens_female = (int)$_POST['teens_female'];
$young_adults_male = (int)$_POST['young_adults_male'];
$young_adults_female = (int)$_POST['young_adults_female'];
$other_adults_male = (int)$_POST['other_adults_male'];
$other_adults_female = (int)$_POST['other_adults_female'];
try {
// Check if entry already exists for this assembly
$check_query = "SELECT id FROM demography_data WHERE assembly_id = :assembly_id";
$check_stmt = $db->prepare($check_query);
$check_stmt->bindParam(':assembly_id', $assembly_id);
$check_stmt->execute();
if ($check_stmt->rowCount() > 0) {
$error_message = 'Demography data already exists for this assembly. Please use the Data Edit page to update.';
} else {
// Insert new demography data
$insert_query = "INSERT INTO demography_data (
area_id, district_id, assembly_id,
children_male, children_female,
teens_male, teens_female,
young_adults_male, young_adults_female,
other_adults_male, other_adults_female,
created_by
) VALUES (
:area_id, :district_id, :assembly_id,
:children_male, :children_female,
:teens_male, :teens_female,
:young_adults_male, :young_adults_female,
:other_adults_male, :other_adults_female,
:created_by
)";
$insert_stmt = $db->prepare($insert_query);
$insert_stmt->bindParam(':area_id', $area_id);
$insert_stmt->bindParam(':district_id', $district_id);
$insert_stmt->bindParam(':assembly_id', $assembly_id);
$insert_stmt->bindParam(':children_male', $children_male);
$insert_stmt->bindParam(':children_female', $children_female);
$insert_stmt->bindParam(':teens_male', $teens_male);
$insert_stmt->bindParam(':teens_female', $teens_female);
$insert_stmt->bindParam(':young_adults_male', $young_adults_male);
$insert_stmt->bindParam(':young_adults_female', $young_adults_female);
$insert_stmt->bindParam(':other_adults_male', $other_adults_male);
$insert_stmt->bindParam(':other_adults_female', $other_adults_female);
$insert_stmt->bindParam(':created_by', $_SESSION['user_id']);
if ($insert_stmt->execute()) {
$success_message = 'Demography data saved successfully!';
logAudit('CREATE', 'demography_data', $db->lastInsertId(), null, $_POST);
// Create notification
createNotification($_SESSION['user_id'], 'Data Entry Complete', 'Demography data has been successfully entered.', 'success');
} else {
$error_message = 'Error saving demography data. Please try again.';
}
}
} catch (Exception $e) {
$error_message = 'Database error: ' . $e->getMessage();
}
// Handle Souls data submission
} elseif (isset($_POST['submit_souls'])) {
try {
// Check if entry already exists for this assembly
$check_query = "SELECT id FROM souls_data WHERE assembly_id = :assembly_id";
$check_stmt = $db->prepare($check_query);
$check_stmt->bindParam(':assembly_id', $assembly_id);
$check_stmt->execute();
if ($check_stmt->rowCount() > 0) {
$error_message = 'Souls data already exists for this assembly. Please use the Data Edit page to update.';
} else {
$insert_query = "INSERT INTO souls_data (area_id, district_id, assembly_id, outreach_program, adult_souls_won_cop, other_souls_won, gospel_sunday_morning, hum, mpwds, chaplaincy, chieftancy, som, digital_space, baptized_in_water, holy_spirit_baptism, old_members_now_baptized_holy_spirit, created_by)
VALUES (:area_id, :district_id, :assembly_id, :outreach_program, :adult_souls_won_cop, :other_souls_won, :gospel_sunday_morning, :hum, :mpwds, :chaplaincy, :chieftancy, :som, :digital_space, :baptized_in_water, :holy_spirit_baptism, :old_members_baptized, :created_by)";
$insert_stmt = $db->prepare($insert_query);
$insert_stmt->bindValue(':area_id', $area_id);
$insert_stmt->bindValue(':district_id', $district_id);
$insert_stmt->bindValue(':assembly_id', $assembly_id);
$insert_stmt->bindValue(':outreach_program', (int)$_POST['outreach_program']);
$insert_stmt->bindValue(':adult_souls_won_cop', (int)$_POST['adult_souls_won_cop']);
$insert_stmt->bindValue(':other_souls_won', (int)$_POST['other_souls_won']);
$insert_stmt->bindValue(':gospel_sunday_morning', (int)$_POST['gospel_sunday_morning']);
$insert_stmt->bindValue(':hum', (int)$_POST['hum']);
$insert_stmt->bindValue(':mpwds', (int)$_POST['mpwds']);
$insert_stmt->bindValue(':chaplaincy', (int)$_POST['chaplaincy']);
$insert_stmt->bindValue(':chieftancy', (int)$_POST['chieftancy']);
$insert_stmt->bindValue(':som', (int)$_POST['som']);
$insert_stmt->bindValue(':digital_space', (int)$_POST['digital_space']);
$insert_stmt->bindValue(':baptized_in_water', (int)$_POST['baptized_in_water']);
$insert_stmt->bindValue(':holy_spirit_baptism', (int)$_POST['holy_spirit_baptism']);
$insert_stmt->bindValue(':old_members_baptized', (int)$_POST['old_members_baptized']);
$insert_stmt->bindValue(':created_by', $_SESSION['user_id']);
if ($insert_stmt->execute()) {
$success_message = 'Souls data saved successfully!';
logAudit('CREATE', 'souls_data', $db->lastInsertId(), null, $_POST);
createNotification($_SESSION['user_id'], 'Data Entry Complete', 'Souls data has been successfully entered.', 'success');
} else {
$error_message = 'Error saving souls data. Please try again.';
}
}
} catch (Exception $e) {
$error_message = 'Database error: ' . $e->getMessage();
}
// Handle Transfers data submission
} elseif (isset($_POST['submit_transfers'])) {
try {
// Check if entry already exists for this assembly
$check_query = "SELECT id FROM transfers_data WHERE assembly_id = :assembly_id";
$check_stmt = $db->prepare($check_query);
$check_stmt->bindParam(':assembly_id', $assembly_id);
$check_stmt->execute();
if ($check_stmt->rowCount() > 0) {
$error_message = 'Transfers data already exists for this assembly. Please use the Data Edit page to update.';
} else {
$insert_query = "INSERT INTO transfers_data (area_id, district_id, assembly_id, transfers_in_13_19, transfers_in_20_35, transfers_in_above_35, transfers_out_13_19, transfers_out_20_35, transfers_out_above_35, created_by)
VALUES (:area_id, :district_id, :assembly_id, :transfers_in_13_19, :transfers_in_20_35, :transfers_in_above_35, :transfers_out_13_19, :transfers_out_20_35, :transfers_out_above_35, :created_by)";
$insert_stmt = $db->prepare($insert_query);
$insert_stmt->bindValue(':area_id', $area_id);
$insert_stmt->bindValue(':district_id', $district_id);
$insert_stmt->bindValue(':assembly_id', $assembly_id);
$insert_stmt->bindValue(':transfers_in_13_19', (int)$_POST['transfers_in_13_19']);
$insert_stmt->bindValue(':transfers_in_20_35', (int)$_POST['transfers_in_20_35']);
$insert_stmt->bindValue(':transfers_in_above_35', (int)$_POST['transfers_in_above_35']);
$insert_stmt->bindValue(':transfers_out_13_19', (int)$_POST['transfers_out_13_19']);
$insert_stmt->bindValue(':transfers_out_20_35', (int)$_POST['transfers_out_20_35']);
$insert_stmt->bindValue(':transfers_out_above_35', (int)$_POST['transfers_out_above_35']);
$insert_stmt->bindValue(':created_by', $_SESSION['user_id']);
if ($insert_stmt->execute()) {
$success_message = 'Transfers data saved successfully!';
logAudit('CREATE', 'transfers_data', $db->lastInsertId(), null, $_POST);
createNotification($_SESSION['user_id'], 'Data Entry Complete', 'Transfers data has been successfully entered.', 'success');
} else {
$error_message = 'Error saving transfers data. Please try again.';
}
}
} catch (Exception $e) {
$error_message = 'Database error: ' . $e->getMessage();
}
}
}
}
// Get districts for selected area (AJAX will handle this)
if (isset($_GET['get_districts']) && isset($_GET['area_id'])) {
$area_id = (int)$_GET['area_id'];
$districts = getAccessibleDistricts($_SESSION['user_level'], $area_id, $_SESSION['district_id']);
header('Content-Type: application/json');
echo json_encode($districts);
exit();
}
// Get assemblies for selected district (AJAX will handle this)
if (isset($_GET['get_assemblies']) && isset($_GET['district_id'])) {
$district_id = (int)$_GET['district_id'];
$assemblies = getAccessibleAssemblies($_SESSION['user_level'], $_SESSION['area_id'], $district_id, $_SESSION['assembly_id']);
header('Content-Type: application/json');
echo json_encode($assemblies);
exit();
}
include __DIR__ . '/../includes/header.php';
?>
<div class="bg-white rounded-lg shadow-sm border border-gray-200">
<!-- Global Location Selection -->
<div class="bg-gray-50 p-6 border-b border-gray-200">
<h3 class="text-lg font-semibold text-gray-800 mb-4">Location Selection</h3>
<p class="text-sm text-gray-600 mb-4">Select the location once - it will apply to all data categories below.</p>
<div class="grid grid-cols-1 md:grid-cols-3 gap-6">
<div>
<label for="global_area_id" class="block text-sm font-medium text-gray-700 mb-2">Area *</label>
<select name="area_id" id="global_area_id" required class="w-full px-3 py-2 border border-gray-300 rounded-lg focus:ring-2 focus:ring-cop-blue focus:border-transparent">
<option value="">Select Area</option>
<?php foreach ($areas as $area): ?>
<option value="<?php echo $area['id']; ?>"><?php echo htmlspecialchars($area['name']); ?></option>
<?php endforeach; ?>
</select>
</div>
<div>
<label for="global_district_id" class="block text-sm font-medium text-gray-700 mb-2">District *</label>
<select name="district_id" id="global_district_id" required class="w-full px-3 py-2 border border-gray-300 rounded-lg focus:ring-2 focus:ring-cop-blue focus:border-transparent">
<option value="">Select District</option>
</select>
</div>
<div>
<label for="global_assembly_id" class="block text-sm font-medium text-gray-700 mb-2">Assembly *</label>
<select name="assembly_id" id="global_assembly_id" required class="w-full px-3 py-2 border border-gray-300 rounded-lg focus:ring-2 focus:ring-cop-blue focus:border-transparent">
<option value="">Select Assembly</option>
</select>
</div>
</div>
</div>
<!-- Tab Navigation -->
<div class="border-b border-gray-200">
<nav class="flex space-x-8 px-6" aria-label="Tabs">
<button id="membershipTab" class="tab-button border-b-2 border-cop-blue py-4 px-1 text-sm font-medium text-cop-blue" onclick="showTab('membership')">
Membership
</button>
<button id="soulsTab" class="tab-button border-b-2 border-transparent py-4 px-1 text-sm font-medium text-gray-500 hover:text-gray-700 hover:border-gray-300" onclick="showTab('souls')">
Souls
</button>
<button id="transfersTab" class="tab-button border-b-2 border-transparent py-4 px-1 text-sm font-medium text-gray-500 hover:text-gray-700 hover:border-gray-300" onclick="showTab('transfers')">
Transfers
</button>
</nav>
</div>
<!-- Form Content -->
<div class="p-6">
<?php if ($success_message): ?>
<div class="mb-6 bg-green-50 border border-green-200 text-green-700 px-4 py-3 rounded-lg">
<div class="flex items-center">
<i class="fas fa-check-circle mr-2"></i>
<?php echo htmlspecialchars($success_message); ?>
</div>
</div>
<?php endif; ?>
<?php if ($error_message): ?>
<div class="mb-6 bg-red-50 border border-red-200 text-red-700 px-4 py-3 rounded-lg">
<div class="flex items-center">
<i class="fas fa-exclamation-circle mr-2"></i>
<?php echo htmlspecialchars($error_message); ?>
</div>
</div>
<?php endif; ?>
<!-- Membership Tab Content -->
<div id="membershipContent" class="tab-content">
<form method="POST" id="demographyForm" class="space-y-8">
<!-- 1. Children's Membership -->
<div class="bg-blue-50 p-6 rounded-lg">
<h3 class="text-lg font-semibold text-gray-800 mb-4">1. CHILDREN'S MEMBERSHIP (below 13yrs)</h3>
<div class="grid grid-cols-1 md:grid-cols-3 gap-6">
<div>
<label for="children_male" class="block text-sm font-medium text-gray-700 mb-2">Male</label>
<input type="number" name="children_male" id="children_male" min="0" value="0"
class="w-full px-3 py-2 border border-gray-300 rounded-lg focus:ring-2 focus:ring-cop-blue focus:border-transparent">
</div>
<div>
<label for="children_female" class="block text-sm font-medium text-gray-700 mb-2">Female</label>
<input type="number" name="children_female" id="children_female" min="0" value="0"
class="w-full px-3 py-2 border border-gray-300 rounded-lg focus:ring-2 focus:ring-cop-blue focus:border-transparent">
</div>
<div>
<label class="block text-sm font-medium text-gray-700 mb-2">Total (1i)</label>
<input type="text" id="children_total" readonly
class="w-full px-3 py-2 bg-gray-100 border border-gray-300 rounded-lg text-gray-600">
</div>
</div>
</div>
<!-- 2. Youth Membership -->
<div class="bg-green-50 p-6 rounded-lg">
<h3 class="text-lg font-semibold text-gray-800 mb-6">2. YOUTH MEMBERSHIP (13 to 35 years)</h3>
<!-- 2.1 Teens -->
<div class="mb-6">
<h4 class="text-md font-medium text-gray-700 mb-4">2.1 TEENS (13-19YRS)</h4>
<div class="grid grid-cols-1 md:grid-cols-3 gap-6">
<div>
<label for="teens_male" class="block text-sm font-medium text-gray-700 mb-2">Male</label>
<input type="number" name="teens_male" id="teens_male" min="0" value="0"
class="w-full px-3 py-2 border border-gray-300 rounded-lg focus:ring-2 focus:ring-cop-blue focus:border-transparent">
</div>
<div>
<label for="teens_female" class="block text-sm font-medium text-gray-700 mb-2">Female</label>
<input type="number" name="teens_female" id="teens_female" min="0" value="0"
class="w-full px-3 py-2 border border-gray-300 rounded-lg focus:ring-2 focus:ring-cop-blue focus:border-transparent">
</div>
<div>
<label class="block text-sm font-medium text-gray-700 mb-2">Total</label>
<input type="text" id="teens_total" readonly
class="w-full px-3 py-2 bg-gray-100 border border-gray-300 rounded-lg text-gray-600">
</div>
</div>
</div>
<!-- 2.2 Young Adults -->
<div class="mb-6">
<h4 class="text-md font-medium text-gray-700 mb-4">2.2 YOUNG ADULTS (20-35 YRS)</h4>
<div class="grid grid-cols-1 md:grid-cols-3 gap-6">
<div>
<label for="young_adults_male" class="block text-sm font-medium text-gray-700 mb-2">Male</label>
<input type="number" name="young_adults_male" id="young_adults_male" min="0" value="0"
class="w-full px-3 py-2 border border-gray-300 rounded-lg focus:ring-2 focus:ring-cop-blue focus:border-transparent">
</div>
<div>
<label for="young_adults_female" class="block text-sm font-medium text-gray-700 mb-2">Female</label>
<input type="number" name="young_adults_female" id="young_adults_female" min="0" value="0"
class="w-full px-3 py-2 border border-gray-300 rounded-lg focus:ring-2 focus:ring-cop-blue focus:border-transparent">
</div>
<div>
<label class="block text-sm font-medium text-gray-700 mb-2">Total</label>
<input type="text" id="young_adults_total" readonly
class="w-full px-3 py-2 bg-gray-100 border border-gray-300 rounded-lg text-gray-600">
</div>
</div>
</div>
<!-- Youth Total -->
<div class="bg-white p-4 rounded-lg border-2 border-green-300">
<div class="flex justify-between items-center">
<span class="font-semibold text-gray-800">Youth Total (a)</span>
<input type="text" id="youth_total" readonly
class="px-3 py-2 bg-gray-100 border border-gray-300 rounded-lg text-gray-600 font-semibold">
</div>
</div>
</div>
<!-- 3. Other Adults -->
<div class="bg-yellow-50 p-6 rounded-lg">
<h3 class="text-lg font-semibold text-gray-800 mb-4">3. OTHER ADULTS (above 35 years)</h3>
<div class="grid grid-cols-1 md:grid-cols-3 gap-6 mb-6">
<div>
<label for="other_adults_male" class="block text-sm font-medium text-gray-700 mb-2">Male</label>
<input type="number" name="other_adults_male" id="other_adults_male" min="0" value="0"
class="w-full px-3 py-2 border border-gray-300 rounded-lg focus:ring-2 focus:ring-cop-blue focus:border-transparent">
</div>
<div>
<label for="other_adults_female" class="block text-sm font-medium text-gray-700 mb-2">Female</label>
<input type="number" name="other_adults_female" id="other_adults_female" min="0" value="0"
class="w-full px-3 py-2 border border-gray-300 rounded-lg focus:ring-2 focus:ring-cop-blue focus:border-transparent">
</div>
<div>
<label class="block text-sm font-medium text-gray-700 mb-2">Total (b)</label>
<input type="text" id="other_adults_total" readonly
class="w-full px-3 py-2 bg-gray-100 border border-gray-300 rounded-lg text-gray-600">
</div>
</div>
</div>
<!-- Summary Totals -->
<div class="bg-gray-800 text-white p-6 rounded-lg">
<h3 class="text-lg font-semibold mb-6">SUMMARY</h3>
<div class="space-y-4">
<div class="flex justify-between items-center py-2 border-b border-gray-600">
<span class="font-medium">Total Adult Members (a)+(b)</span>
<input type="text" id="total_adult_members" readonly
class="px-3 py-2 bg-gray-700 border border-gray-600 rounded-lg text-white font-semibold">
</div>
<div class="flex justify-between items-center py-2">
<span class="font-semibold text-lg">Overall Members (Adults & Children) (1i +(a+b))</span>
<input type="text" id="overall_members" readonly
class="px-3 py-2 bg-gray-700 border border-gray-600 rounded-lg text-white font-bold text-lg">
</div>
</div>
</div>
<!-- Submit Button -->
<div class="flex justify-end space-x-4">
<button type="button" onclick="resetForm()"
class="px-6 py-3 bg-gray-500 text-white rounded-lg hover:bg-gray-600 transition duration-200">
<i class="fas fa-undo mr-2"></i>Reset
</button>
<button type="submit" name="submit_demography"
class="px-6 py-3 bg-cop-blue text-white rounded-lg hover:bg-cop-dark-blue transition duration-200">
<i class="fas fa-save mr-2"></i>Save Demography Data
</button>
</div>
</form>
</div>
<!-- Souls Tab Content -->
<div id="soulsContent" class="tab-content hidden">
<form method="POST" id="soulsForm" class="space-y-8">
<!-- 1. Souls Won -->
<div class="bg-blue-50 p-6 rounded-lg">
<h3 class="text-lg font-semibold text-gray-800 mb-4">1. SOULS WON</h3>
<div class="grid grid-cols-1 md:grid-cols-3 gap-6">
<div>
<label for="outreach_program" class="block text-sm font-medium text-gray-700 mb-2">OUT-REACH PROGRAM</label>
<input type="number" name="outreach_program" id="outreach_program" min="0" value="0"
class="w-full px-3 py-2 border border-gray-300 rounded-lg focus:ring-2 focus:ring-cop-blue focus:border-transparent">
</div>
<div>
<label for="adult_souls_won_cop" class="block text-sm font-medium text-gray-700 mb-2">ADULT SOULS WON(COP)</label>
<input type="number" name="adult_souls_won_cop" id="adult_souls_won_cop" min="0" value="0"
class="w-full px-3 py-2 border border-gray-300 rounded-lg focus:ring-2 focus:ring-cop-blue focus:border-transparent">
</div>
<div>
<label for="other_souls_won" class="block text-sm font-medium text-gray-700 mb-2">OTHER SOULS WON</label>
<input type="number" name="other_souls_won" id="other_souls_won" min="0" value="0"
class="w-full px-3 py-2 border border-gray-300 rounded-lg focus:ring-2 focus:ring-cop-blue focus:border-transparent">
</div>
</div>
</div>
<!-- 2. Souls Won Through -->
<div class="bg-green-50 p-6 rounded-lg">
<h3 class="text-lg font-semibold text-gray-800 mb-4">2. SOULS WON THROUGH</h3>
<div class="grid grid-cols-2 md:grid-cols-4 gap-4">
<div>
<label for="gospel_sunday_morning" class="block text-sm font-medium text-gray-700 mb-2">GOSPEL SUNDAY MORNING</label>
<input type="number" name="gospel_sunday_morning" id="gospel_sunday_morning" min="0" value="0"
class="w-full px-3 py-2 border border-gray-300 rounded-lg focus:ring-2 focus:ring-cop-blue focus:border-transparent">
</div>
<div>
<label for="hum" class="block text-sm font-medium text-gray-700 mb-2">HUM</label>
<input type="number" name="hum" id="hum" min="0" value="0"
class="w-full px-3 py-2 border border-gray-300 rounded-lg focus:ring-2 focus:ring-cop-blue focus:border-transparent">
</div>
<div>
<label for="mpwds" class="block text-sm font-medium text-gray-700 mb-2">MPWDs</label>
<input type="number" name="mpwds" id="mpwds" min="0" value="0"
class="w-full px-3 py-2 border border-gray-300 rounded-lg focus:ring-2 focus:ring-cop-blue focus:border-transparent">
</div>
<div>
<label for="chaplaincy" class="block text-sm font-medium text-gray-700 mb-2">CHAPLAINCY</label>
<input type="number" name="chaplaincy" id="chaplaincy" min="0" value="0"
class="w-full px-3 py-2 border border-gray-300 rounded-lg focus:ring-2 focus:ring-cop-blue focus:border-transparent">
</div>
<div>
<label for="chieftancy" class="block text-sm font-medium text-gray-700 mb-2">CHIEFTANCY</label>
<input type="number" name="chieftancy" id="chieftancy" min="0" value="0"
class="w-full px-3 py-2 border border-gray-300 rounded-lg focus:ring-2 focus:ring-cop-blue focus:border-transparent">
</div>
<div>
<label for="som" class="block text-sm font-medium text-gray-700 mb-2">SOM</label>
<input type="number" name="som" id="som" min="0" value="0"
class="w-full px-3 py-2 border border-gray-300 rounded-lg focus:ring-2 focus:ring-cop-blue focus:border-transparent">
</div>
<div>
<label for="digital_space" class="block text-sm font-medium text-gray-700 mb-2">DIGITAL SPACE</label>
<input type="number" name="digital_space" id="digital_space" min="0" value="0"
class="w-full px-3 py-2 border border-gray-300 rounded-lg focus:ring-2 focus:ring-cop-blue focus:border-transparent">
</div>
</div>
</div>
<!-- 3. Converts -->
<div class="bg-yellow-50 p-6 rounded-lg">
<h3 class="text-lg font-semibold text-gray-800 mb-4">3. CONVERTS</h3>
<div class="grid grid-cols-1 md:grid-cols-3 gap-6">
<div>
<label for="baptized_in_water" class="block text-sm font-medium text-gray-700 mb-2">BAPTIZED IN WATER</label>
<input type="number" name="baptized_in_water" id="baptized_in_water" min="0" value="0"
class="w-full px-3 py-2 border border-gray-300 rounded-lg focus:ring-2 focus:ring-cop-blue focus:border-transparent">
</div>
<div>
<label for="holy_spirit_baptism" class="block text-sm font-medium text-gray-700 mb-2">HOLY SPIRIT BAPTISM</label>
<input type="number" name="holy_spirit_baptism" id="holy_spirit_baptism" min="0" value="0"
class="w-full px-3 py-2 border border-gray-300 rounded-lg focus:ring-2 focus:ring-cop-blue focus:border-transparent">
</div>
<div>
<label for="old_members_baptized" class="block text-sm font-medium text-gray-700 mb-2">OLD MEMBERS NOW BAPTIZED IN HOLY SPIRIT</label>
<input type="number" name="old_members_baptized" id="old_members_baptized" min="0" value="0"
class="w-full px-3 py-2 border border-gray-300 rounded-lg focus:ring-2 focus:ring-cop-blue focus:border-transparent">
</div>
</div>
</div>
<!-- Submit Button -->
<div class="flex justify-end space-x-4">
<button type="button" onclick="resetSoulsForm()"
class="px-6 py-3 bg-gray-500 text-white rounded-lg hover:bg-gray-600 transition duration-200">
<i class="fas fa-undo mr-2"></i>Reset
</button>
<button type="submit" name="submit_souls"
class="px-6 py-3 bg-cop-blue text-white rounded-lg hover:bg-cop-dark-blue transition duration-200">
<i class="fas fa-save mr-2"></i>Save Souls Data
</button>
</div>
</form>
</div>
<!-- Transfers Tab Content -->
<div id="transfersContent" class="tab-content hidden">
<form method="POST" id="transfersForm" class="space-y-8">
<!-- 1. Transfers In -->
<div class="bg-blue-50 p-6 rounded-lg">
<h3 class="text-lg font-semibold text-gray-800 mb-4">1. TRANSFERS IN</h3>
<div class="grid grid-cols-1 md:grid-cols-4 gap-6">
<div>
<label for="transfers_in_13_19" class="block text-sm font-medium text-gray-700 mb-2">13 - 19 YRS</label>
<input type="number" name="transfers_in_13_19" id="transfers_in_13_19" min="0" value="0"
class="w-full px-3 py-2 border border-gray-300 rounded-lg focus:ring-2 focus:ring-cop-blue focus:border-transparent">
</div>
<div>
<label for="transfers_in_20_35" class="block text-sm font-medium text-gray-700 mb-2">20-35 YRS</label>
<input type="number" name="transfers_in_20_35" id="transfers_in_20_35" min="0" value="0"
class="w-full px-3 py-2 border border-gray-300 rounded-lg focus:ring-2 focus:ring-cop-blue focus:border-transparent">
</div>
<div>
<label for="transfers_in_above_35" class="block text-sm font-medium text-gray-700 mb-2">ABOVE 35YRS</label>
<input type="number" name="transfers_in_above_35" id="transfers_in_above_35" min="0" value="0"
class="w-full px-3 py-2 border border-gray-300 rounded-lg focus:ring-2 focus:ring-cop-blue focus:border-transparent">
</div>
<div>
<label class="block text-sm font-medium text-gray-700 mb-2">TOTAL</label>
<input type="text" id="transfers_in_total" readonly
class="w-full px-3 py-2 bg-gray-100 border border-gray-300 rounded-lg text-gray-600">
</div>
</div>
</div>
<!-- 2. Transfers Out -->
<div class="bg-red-50 p-6 rounded-lg">
<h3 class="text-lg font-semibold text-gray-800 mb-4">2. TRANSFERS OUT</h3>
<div class="grid grid-cols-1 md:grid-cols-4 gap-6">
<div>
<label for="transfers_out_13_19" class="block text-sm font-medium text-gray-700 mb-2">13 - 19 YRS</label>
<input type="number" name="transfers_out_13_19" id="transfers_out_13_19" min="0" value="0"
class="w-full px-3 py-2 border border-gray-300 rounded-lg focus:ring-2 focus:ring-cop-blue focus:border-transparent">
</div>
<div>
<label for="transfers_out_20_35" class="block text-sm font-medium text-gray-700 mb-2">20-35 YRS</label>
<input type="number" name="transfers_out_20_35" id="transfers_out_20_35" min="0" value="0"
class="w-full px-3 py-2 border border-gray-300 rounded-lg focus:ring-2 focus:ring-cop-blue focus:border-transparent">
</div>
<div>
<label for="transfers_out_above_35" class="block text-sm font-medium text-gray-700 mb-2">ABOVE 35YRS</label>
<input type="number" name="transfers_out_above_35" id="transfers_out_above_35" min="0" value="0"
class="w-full px-3 py-2 border border-gray-300 rounded-lg focus:ring-2 focus:ring-cop-blue focus:border-transparent">
</div>
<div>
<label class="block text-sm font-medium text-gray-700 mb-2">TOTAL</label>
<input type="text" id="transfers_out_total" readonly
class="w-full px-3 py-2 bg-gray-100 border border-gray-300 rounded-lg text-gray-600">
</div>
</div>
</div>
<!-- Submit Button -->
<div class="flex justify-end space-x-4">
<button type="button" onclick="resetTransfersForm()"
class="px-6 py-3 bg-gray-500 text-white rounded-lg hover:bg-gray-600 transition duration-200">
<i class="fas fa-undo mr-2"></i>Reset
</button>
<button type="submit" name="submit_transfers"
class="px-6 py-3 bg-cop-blue text-white rounded-lg hover:bg-cop-dark-blue transition duration-200">
<i class="fas fa-save mr-2"></i>Save Transfers Data
</button>
</div>
</form>
</div>
</div>
</div>
<script>
// Tab switching functionality
function showTab(tabName) {
// Hide all tab contents
document.querySelectorAll('.tab-content').forEach(content => {
content.classList.add('hidden');
});
// Remove active class from all tab buttons
document.querySelectorAll('.tab-button').forEach(button => {
button.classList.remove('border-cop-blue', 'text-cop-blue');
button.classList.add('border-transparent', 'text-gray-500');
});
// Show selected tab content
document.getElementById(tabName + 'Content').classList.remove('hidden');
// Add active class to selected tab button
const activeButton = document.getElementById(tabName + 'Tab');
activeButton.classList.remove('border-transparent', 'text-gray-500');
activeButton.classList.add('border-cop-blue', 'text-cop-blue');
}
// Function to validate global location selection
function validateGlobalLocation() {
const areaId = document.getElementById('global_area_id').value;
const districtId = document.getElementById('global_district_id').value;
const assemblyId = document.getElementById('global_assembly_id').value;
if (!areaId || !districtId || !assemblyId) {
alert('Please select Area, District, and Assembly before submitting any form.');
return false;
}
return true;
}
// Function to add global location values to form before submission
function addGlobalLocationToForm(form) {
const areaId = document.getElementById('global_area_id').value;
const districtId = document.getElementById('global_district_id').value;
const assemblyId = document.getElementById('global_assembly_id').value;
// Remove existing hidden inputs if any
const existingInputs = form.querySelectorAll('input[name="area_id"], input[name="district_id"], input[name="assembly_id"]');
existingInputs.forEach(input => input.remove());
// Add hidden inputs with global location values
const areaInput = document.createElement('input');
areaInput.type = 'hidden';
areaInput.name = 'area_id';
areaInput.value = areaId;
form.appendChild(areaInput);
const districtInput = document.createElement('input');
districtInput.type = 'hidden';
districtInput.name = 'district_id';
districtInput.value = districtId;
form.appendChild(districtInput);
const assemblyInput = document.createElement('input');
assemblyInput.type = 'hidden';
assemblyInput.name = 'assembly_id';
assemblyInput.value = assemblyId;
form.appendChild(assemblyInput);
}
// Auto-calculation functions for Membership tab
function calculateTotals() {
// Children totals
const childrenMale = parseInt(document.getElementById('children_male').value) || 0;
const childrenFemale = parseInt(document.getElementById('children_female').value) || 0;
document.getElementById('children_total').value = childrenMale + childrenFemale;
// Teens totals
const teensMale = parseInt(document.getElementById('teens_male').value) || 0;
const teensFemale = parseInt(document.getElementById('teens_female').value) || 0;
const teensTotal = teensMale + teensFemale;
document.getElementById('teens_total').value = teensTotal;
// Young adults totals
const youngAdultsMale = parseInt(document.getElementById('young_adults_male').value) || 0;
const youngAdultsFemale = parseInt(document.getElementById('young_adults_female').value) || 0;
const youngAdultsTotal = youngAdultsMale + youngAdultsFemale;
document.getElementById('young_adults_total').value = youngAdultsTotal;
// Youth total
const youthTotal = teensTotal + youngAdultsTotal;
document.getElementById('youth_total').value = youthTotal;
// Other adults totals
const otherAdultsMale = parseInt(document.getElementById('other_adults_male').value) || 0;
const otherAdultsFemale = parseInt(document.getElementById('other_adults_female').value) || 0;
const otherAdultsTotal = otherAdultsMale + otherAdultsFemale;
document.getElementById('other_adults_total').value = otherAdultsTotal;
// Total adult members
const totalAdultMembers = youthTotal + otherAdultsTotal;
document.getElementById('total_adult_members').value = totalAdultMembers;
// Overall members
const overallMembers = (childrenMale + childrenFemale) + totalAdultMembers;
document.getElementById('overall_members').value = overallMembers;
}
// Add event listeners to all input fields
document.addEventListener('DOMContentLoaded', function() {
// Membership tab calculations
const membershipInputs = document.querySelectorAll('#membershipContent input[type="number"]');
membershipInputs.forEach(input => {
input.addEventListener('input', calculateTotals);
});
// Transfers tab calculations
const transfersInputs = document.querySelectorAll('#transfersContent input[type="number"]');
transfersInputs.forEach(input => {
input.addEventListener('input', calculateTransfersTotals);
});
// Initial calculations
calculateTotals();
calculateTransfersTotals();
// Add form submission handlers
document.getElementById('demographyForm').addEventListener('submit', function(e) {
if (!validateGlobalLocation()) {
e.preventDefault();
return false;
}
addGlobalLocationToForm(this);
});
document.getElementById('soulsForm').addEventListener('submit', function(e) {
if (!validateGlobalLocation()) {
e.preventDefault();
return false;
}
addGlobalLocationToForm(this);
});
document.getElementById('transfersForm').addEventListener('submit', function(e) {
if (!validateGlobalLocation()) {
e.preventDefault();
return false;
}
addGlobalLocationToForm(this);
});
// Global area change handler
document.getElementById('global_area_id').addEventListener('change', function() {
const areaId = this.value;
const districtSelect = document.getElementById('global_district_id');
const assemblySelect = document.getElementById('global_assembly_id');
// Clear districts and assemblies
districtSelect.innerHTML = '<option value="">Select District</option>';
assemblySelect.innerHTML = '<option value="">Select Assembly</option>';
if (areaId) {
fetch(`?get_districts=1&area_id=${areaId}`)
.then(response => response.json())
.then(districts => {
districts.forEach(district => {
const option = document.createElement('option');
option.value = district.id;
option.textContent = district.name;
districtSelect.appendChild(option);
});
});
}
});
// Global district change handler
document.getElementById('global_district_id').addEventListener('change', function() {
const districtId = this.value;
const assemblySelect = document.getElementById('global_assembly_id');
// Clear assemblies
assemblySelect.innerHTML = '<option value="">Select Assembly</option>';
if (districtId) {
fetch(`?get_assemblies=1&district_id=${districtId}`)
.then(response => response.json())
.then(assemblies => {
assemblies.forEach(assembly => {
const option = document.createElement('option');
option.value = assembly.id;
option.textContent = assembly.name;
assemblySelect.appendChild(option);
});
});
}
});
});
// Auto-calculation functions for Transfers tab
function calculateTransfersTotals() {
// Transfers In total
const transfersIn13_19 = parseInt(document.getElementById('transfers_in_13_19').value) || 0;
const transfersIn20_35 = parseInt(document.getElementById('transfers_in_20_35').value) || 0;
const transfersInAbove35 = parseInt(document.getElementById('transfers_in_above_35').value) || 0;
document.getElementById('transfers_in_total').value = transfersIn13_19 + transfersIn20_35 + transfersInAbove35;
// Transfers Out total
const transfersOut13_19 = parseInt(document.getElementById('transfers_out_13_19').value) || 0;
const transfersOut20_35 = parseInt(document.getElementById('transfers_out_20_35').value) || 0;
const transfersOutAbove35 = parseInt(document.getElementById('transfers_out_above_35').value) || 0;
document.getElementById('transfers_out_total').value = transfersOut13_19 + transfersOut20_35 + transfersOutAbove35;
}
function resetForm() {
if (confirm('Are you sure you want to reset all fields? This will clear all entered data.')) {
document.getElementById('demographyForm').reset();
calculateTotals();
}
}
function resetSoulsForm() {
if (confirm('Are you sure you want to reset all fields? This will clear all entered data.')) {
document.getElementById('soulsForm').reset();
}
}
function resetTransfersForm() {
if (confirm('Are you sure you want to reset all fields? This will clear all entered data.')) {
document.getElementById('transfersForm').reset();
calculateTransfersTotals();
}
}
</script>
<?php include __DIR__ . '/../includes/footer.php'; ?>
Sindbad File Manager Version 1.0, Coded By Sindbad EG ~ The Terrorists