- Add essential data seeding scripts to version control - Update .gitignore to whitelist bin/ directory for key testing scripts - Include comprehensive test data creation for trainers, events, attendees, and certificates - Scripts use environment variables for credentials (no hardcoded secrets) - Supports both regular trainers and master trainers with proper roles - Includes debugging and data enhancement utilities Scripts included: - create-comprehensive-test-data.sh: Full staging data setup with users/events/certificates - create-staging-test-data.sh: Staging environment test data creation - create-complete-test-data.sh: Complete test data with attendees and check-ins - create-test-attendees.sh: Attendee and ticket order generation - enhance-test-data-revenue.sh: Revenue data enhancement for testing - fix-and-create-test-data.sh: Data fixing and creation combined - debug-attendee-data.sh: Attendee data debugging utilities
419 lines
No EOL
15 KiB
Bash
Executable file
419 lines
No EOL
15 KiB
Bash
Executable file
#!/bin/bash
|
|
|
|
# Load configuration
|
|
source wordpress-dev/bin/hvac-plugin-deploy.conf
|
|
|
|
echo "=== Creating Complete Test Data with Revenue ==="
|
|
|
|
# Execute PHP script directly on server
|
|
ssh $REMOTE_USER@$REMOTE_HOST << 'ENDSSH'
|
|
cd /home/974670.cloudwaysapps.com/uberrxmprk/public_html
|
|
|
|
# Create and execute the PHP script
|
|
cat << 'EOF' > create-test-data-with-revenue.php
|
|
<?php
|
|
// Load WordPress
|
|
require_once('wp-load.php');
|
|
|
|
echo "=== Creating complete test data with revenue ===\n\n";
|
|
|
|
// First, let's check what's happening with events
|
|
global $wpdb;
|
|
$events_table = $wpdb->posts;
|
|
$event_count = $wpdb->get_var("SELECT COUNT(*) FROM {$events_table} WHERE post_type = 'tribe_events'");
|
|
echo "Total events in database: {$event_count}\n";
|
|
|
|
// Check if The Events Calendar is properly set up
|
|
if (!class_exists('Tribe__Events__Main')) {
|
|
die("The Events Calendar plugin is not active!\n");
|
|
}
|
|
|
|
// Get test trainer
|
|
$test_trainer = get_user_by('login', 'test_trainer');
|
|
if (!$test_trainer) {
|
|
die("test_trainer user not found.\n");
|
|
}
|
|
$trainer_id = $test_trainer->ID;
|
|
echo "Using test_trainer (ID: {$trainer_id})\n\n";
|
|
|
|
// Delete any existing test events to start fresh
|
|
$existing_events = $wpdb->get_col("
|
|
SELECT ID FROM {$wpdb->posts}
|
|
WHERE post_type = 'tribe_events'
|
|
AND post_author = {$trainer_id}
|
|
");
|
|
|
|
if (!empty($existing_events)) {
|
|
echo "Cleaning up " . count($existing_events) . " existing test events...\n";
|
|
foreach ($existing_events as $event_id) {
|
|
wp_delete_post($event_id, true);
|
|
}
|
|
}
|
|
|
|
// Create comprehensive test events
|
|
$events_data = [
|
|
[
|
|
'title' => 'Advanced HVAC Diagnostics Workshop',
|
|
'description' => 'Master advanced diagnostic techniques for modern HVAC systems including digital controls and variable speed equipment.',
|
|
'venue_name' => 'HVAC Excellence Training Center',
|
|
'venue_address' => '1234 Technical Drive',
|
|
'venue_city' => 'Dallas',
|
|
'venue_state' => 'TX',
|
|
'venue_zip' => '75201',
|
|
'start_date' => date('Y-m-d 09:00:00', strtotime('+1 week')),
|
|
'end_date' => date('Y-m-d 17:00:00', strtotime('+1 week')),
|
|
'price' => 349,
|
|
'capacity' => 30,
|
|
'attendees' => 25,
|
|
'checked_in' => 22
|
|
],
|
|
[
|
|
'title' => 'Commercial Refrigeration Certification',
|
|
'description' => 'Comprehensive certification course covering commercial refrigeration systems, EPA regulations, and best practices.',
|
|
'venue_name' => 'Industrial Training Institute',
|
|
'venue_address' => '5678 Commerce Park',
|
|
'venue_city' => 'Chicago',
|
|
'venue_state' => 'IL',
|
|
'venue_zip' => '60601',
|
|
'start_date' => date('Y-m-d 08:00:00', strtotime('+2 weeks')),
|
|
'end_date' => date('Y-m-d 18:00:00', strtotime('+2 weeks +1 day')),
|
|
'price' => 599,
|
|
'capacity' => 25,
|
|
'attendees' => 20,
|
|
'checked_in' => 18
|
|
],
|
|
[
|
|
'title' => 'Heat Pump Installation & Service',
|
|
'description' => 'Learn proper installation, commissioning, and service procedures for modern heat pump systems.',
|
|
'venue_name' => 'Green Energy Training Lab',
|
|
'venue_address' => '9012 Sustainability Way',
|
|
'venue_city' => 'San Francisco',
|
|
'venue_state' => 'CA',
|
|
'venue_zip' => '94105',
|
|
'start_date' => date('Y-m-d 09:00:00', strtotime('+3 weeks')),
|
|
'end_date' => date('Y-m-d 16:00:00', strtotime('+3 weeks')),
|
|
'price' => 299,
|
|
'capacity' => 35,
|
|
'attendees' => 28,
|
|
'checked_in' => 25
|
|
],
|
|
[
|
|
'title' => 'Building Automation Systems',
|
|
'description' => 'Introduction to BAS/BMS systems, programming, troubleshooting, and integration with HVAC equipment.',
|
|
'venue_name' => 'Smart Building Academy',
|
|
'venue_address' => '3456 Innovation Boulevard',
|
|
'venue_city' => 'New York',
|
|
'venue_state' => 'NY',
|
|
'venue_zip' => '10001',
|
|
'start_date' => date('Y-m-d 08:30:00', strtotime('+4 weeks')),
|
|
'end_date' => date('Y-m-d 17:30:00', strtotime('+4 weeks +2 days')),
|
|
'price' => 799,
|
|
'capacity' => 20,
|
|
'attendees' => 18,
|
|
'checked_in' => 16
|
|
]
|
|
];
|
|
|
|
$created_events = [];
|
|
$total_revenue = 0;
|
|
|
|
// Names pool for attendees
|
|
$first_names = ['James', 'Mary', 'John', 'Patricia', 'Robert', 'Jennifer', 'Michael', 'Linda',
|
|
'William', 'Elizabeth', 'David', 'Barbara', 'Richard', 'Susan', 'Joseph', 'Jessica',
|
|
'Thomas', 'Sarah', 'Charles', 'Karen', 'Christopher', 'Nancy', 'Daniel', 'Betty',
|
|
'Matthew', 'Helen', 'Anthony', 'Sandra', 'Mark', 'Donna', 'Donald', 'Carol'];
|
|
|
|
$last_names = ['Smith', 'Johnson', 'Williams', 'Brown', 'Jones', 'Garcia', 'Miller', 'Davis',
|
|
'Rodriguez', 'Martinez', 'Hernandez', 'Lopez', 'Gonzalez', 'Wilson', 'Anderson',
|
|
'Thomas', 'Taylor', 'Moore', 'Jackson', 'Martin', 'Lee', 'Perez', 'Thompson'];
|
|
|
|
$companies = ['ABC Heating & Air', 'Comfort Systems Inc', 'CoolTech HVAC', 'Premier Climate Control',
|
|
'Elite Mechanical', 'ProAir Services', 'Quality Comfort Solutions', 'Advanced HVAC Systems'];
|
|
|
|
foreach ($events_data as $event_data) {
|
|
echo "\nCreating event: {$event_data['title']}\n";
|
|
|
|
// Create the event using Tribe__Events__API
|
|
$event_args = [
|
|
'post_title' => $event_data['title'],
|
|
'post_content' => $event_data['description'],
|
|
'post_status' => 'publish',
|
|
'post_author' => $trainer_id,
|
|
'EventStartDate' => $event_data['start_date'],
|
|
'EventEndDate' => $event_data['end_date'],
|
|
'EventCost' => $event_data['price'],
|
|
'EventCurrencySymbol' => '$',
|
|
'Venue' => [
|
|
'Venue' => $event_data['venue_name'],
|
|
'Address' => $event_data['venue_address'],
|
|
'City' => $event_data['venue_city'],
|
|
'State' => $event_data['venue_state'],
|
|
'Zip' => $event_data['venue_zip'],
|
|
'Country' => 'United States'
|
|
]
|
|
];
|
|
|
|
// Use The Events Calendar API to create event
|
|
$event_id = tribe_create_event($event_args);
|
|
|
|
if (is_wp_error($event_id) || !$event_id) {
|
|
echo "Failed to create event\n";
|
|
continue;
|
|
}
|
|
|
|
echo "Created event ID: {$event_id}\n";
|
|
|
|
// Ensure ticket provider is set
|
|
update_post_meta($event_id, '_tribe_default_ticket_provider', 'Tribe__Tickets_Plus__Commerce__PayPal__Main');
|
|
|
|
// Create ticket
|
|
$ticket_args = [
|
|
'post_title' => "General Admission - {$event_data['title']}",
|
|
'post_content' => "Access to {$event_data['title']}",
|
|
'post_status' => 'publish',
|
|
'post_type' => 'tribe_tpp_tickets',
|
|
'post_author' => $trainer_id
|
|
];
|
|
|
|
$ticket_id = wp_insert_post($ticket_args);
|
|
|
|
if (is_wp_error($ticket_id)) {
|
|
echo "Failed to create ticket\n";
|
|
continue;
|
|
}
|
|
|
|
// Set comprehensive ticket meta
|
|
$ticket_meta = [
|
|
'_tribe_tpp_for_event' => $event_id,
|
|
'_price' => $event_data['price'],
|
|
'_tribe_ticket_capacity' => $event_data['capacity'],
|
|
'_capacity' => $event_data['capacity'],
|
|
'_stock' => $event_data['capacity'] - $event_data['attendees'],
|
|
'_manage_stock' => 'yes',
|
|
'_tribe_ticket_show_not_going' => 'no',
|
|
'_tribe_tpp_sold' => $event_data['attendees'],
|
|
'_tribe_ticket_sold' => $event_data['attendees'],
|
|
'total_sales' => $event_data['attendees']
|
|
];
|
|
|
|
foreach ($ticket_meta as $key => $value) {
|
|
update_post_meta($ticket_id, $key, $value);
|
|
}
|
|
|
|
echo "Created ticket ID: {$ticket_id} (Price: \${$event_data['price']})\n";
|
|
|
|
// Create attendees
|
|
echo "Creating {$event_data['attendees']} attendees...\n";
|
|
|
|
for ($i = 0; $i < $event_data['attendees']; $i++) {
|
|
// First attendee is always Ben
|
|
if ($i === 0) {
|
|
$first_name = 'Ben';
|
|
$last_name = 'Reed';
|
|
$email = 'ben@tealmaker.com';
|
|
$company = 'TealMaker';
|
|
} else {
|
|
$first_name = $first_names[array_rand($first_names)];
|
|
$last_name = $last_names[array_rand($last_names)];
|
|
$email = strtolower($first_name . '.' . $last_name . rand(100, 999) . '@example.com');
|
|
$company = $companies[array_rand($companies)];
|
|
}
|
|
|
|
$full_name = "{$first_name} {$last_name}";
|
|
|
|
// Create attendee post
|
|
$attendee_args = [
|
|
'post_title' => $full_name,
|
|
'post_content' => '',
|
|
'post_status' => 'publish',
|
|
'post_type' => 'tribe_tpp_attendees',
|
|
'post_author' => $trainer_id
|
|
];
|
|
|
|
$attendee_id = wp_insert_post($attendee_args);
|
|
|
|
if (is_wp_error($attendee_id)) {
|
|
continue;
|
|
}
|
|
|
|
// Generate realistic order data
|
|
$order_id = 'PAY-' . strtoupper(substr(md5($event_id . $attendee_id . microtime()), 0, 17));
|
|
$security_code = strtoupper(substr(md5($order_id), 0, 10));
|
|
|
|
// Set comprehensive attendee meta
|
|
$attendee_meta = [
|
|
// Event and ticket association
|
|
'_tribe_tpp_event' => $event_id,
|
|
'_tribe_tpp_product' => $ticket_id,
|
|
'_tribe_tickets_event_id' => $event_id,
|
|
'_tribe_tickets_product_id' => $ticket_id,
|
|
|
|
// Order information
|
|
'_tribe_tpp_order' => $order_id,
|
|
'_tribe_paypal_transaction_id' => $order_id,
|
|
'_tribe_tpp_order_status' => 'completed',
|
|
'_tribe_tickets_order_status' => 'completed',
|
|
|
|
// Personal information
|
|
'_tribe_tickets_full_name' => $full_name,
|
|
'_tribe_tickets_email' => $email,
|
|
'_tribe_tpp_full_name' => $full_name,
|
|
'_tribe_tpp_email' => $email,
|
|
|
|
// Payment information
|
|
'_paid_price' => $event_data['price'],
|
|
'_tribe_tpp_price' => $event_data['price'],
|
|
|
|
// Security
|
|
'_tribe_tpp_security_code' => $security_code,
|
|
|
|
// Additional fields
|
|
'company' => $company,
|
|
'_tribe_tpp_attendee_optout' => 'no'
|
|
];
|
|
|
|
foreach ($attendee_meta as $key => $value) {
|
|
update_post_meta($attendee_id, $key, $value);
|
|
}
|
|
|
|
// Check in attendees based on the specified count
|
|
if ($i < $event_data['checked_in']) {
|
|
update_post_meta($attendee_id, '_tribe_tpp_checkin', 1);
|
|
update_post_meta($attendee_id, 'check_in', 1);
|
|
update_post_meta($attendee_id, '_tribe_tickets_checkin_status', 1);
|
|
}
|
|
}
|
|
|
|
// Calculate and store event revenue
|
|
$event_revenue = $event_data['attendees'] * $event_data['price'];
|
|
$total_revenue += $event_revenue;
|
|
|
|
// Update event meta with sales data
|
|
update_post_meta($event_id, '_tribe_ticket_sold_count', $event_data['attendees']);
|
|
update_post_meta($event_id, '_tribe_event_revenue', $event_revenue);
|
|
|
|
$created_events[] = [
|
|
'id' => $event_id,
|
|
'title' => $event_data['title'],
|
|
'attendees' => $event_data['attendees'],
|
|
'checked_in' => $event_data['checked_in'],
|
|
'revenue' => $event_revenue
|
|
];
|
|
|
|
echo "Created {$event_data['attendees']} attendees, {$event_data['checked_in']} checked in\n";
|
|
echo "Event revenue: \${$event_revenue}\n";
|
|
}
|
|
|
|
// Generate certificates for checked-in attendees
|
|
if (class_exists('HVAC_Certificate_Manager')) {
|
|
echo "\n=== Generating certificates ===\n";
|
|
|
|
$certificate_manager = HVAC_Certificate_Manager::instance();
|
|
$total_certificates = 0;
|
|
|
|
foreach ($created_events as $event_info) {
|
|
echo "\nGenerating certificates for: {$event_info['title']}\n";
|
|
|
|
// Get checked-in attendees
|
|
$checked_in_attendees = get_posts([
|
|
'post_type' => 'tribe_tpp_attendees',
|
|
'meta_query' => [
|
|
'relation' => 'AND',
|
|
[
|
|
'key' => '_tribe_tpp_event',
|
|
'value' => $event_info['id']
|
|
],
|
|
[
|
|
'key' => '_tribe_tpp_checkin',
|
|
'value' => 1
|
|
]
|
|
],
|
|
'posts_per_page' => -1
|
|
]);
|
|
|
|
$event_certificates = 0;
|
|
|
|
foreach ($checked_in_attendees as $attendee) {
|
|
if (!$certificate_manager->certificate_exists($event_info['id'], $attendee->ID)) {
|
|
$cert_filename = 'certificate-' . $event_info['id'] . '-' . $attendee->ID . '-' . time() . rand(100, 999) . '.pdf';
|
|
$cert_path = 'hvac-certificates/' . date('Y/m/') . $cert_filename;
|
|
|
|
$cert_id = $certificate_manager->create_certificate(
|
|
$event_info['id'],
|
|
$attendee->ID,
|
|
0,
|
|
$cert_path,
|
|
$trainer_id
|
|
);
|
|
|
|
if ($cert_id) {
|
|
$event_certificates++;
|
|
$total_certificates++;
|
|
|
|
// Create dummy PDF
|
|
$upload_dir = wp_upload_dir();
|
|
$full_path = $upload_dir['basedir'] . '/' . $cert_path;
|
|
$dir = dirname($full_path);
|
|
if (!file_exists($dir)) {
|
|
wp_mkdir_p($dir);
|
|
}
|
|
|
|
$attendee_name = get_post_meta($attendee->ID, '_tribe_tickets_full_name', true);
|
|
$pdf_content = "%PDF-1.4\n1 0 obj<</Type/Catalog/Pages 2 0 R>>endobj\n";
|
|
$pdf_content .= "2 0 obj<</Type/Pages/Kids[3 0 R]/Count 1>>endobj\n";
|
|
$pdf_content .= "3 0 obj<</Type/Page/MediaBox[0 0 612 792]/Parent 2 0 R/Resources<<>>>>endobj\n";
|
|
$pdf_content .= "%%EOF\n";
|
|
file_put_contents($full_path, $pdf_content);
|
|
}
|
|
}
|
|
}
|
|
|
|
echo "Generated {$event_certificates} certificates\n";
|
|
}
|
|
|
|
echo "\nTotal certificates generated: {$total_certificates}\n";
|
|
}
|
|
|
|
// Final summary
|
|
echo "\n=== TEST DATA CREATION COMPLETE ===\n";
|
|
echo "Created " . count($created_events) . " events:\n\n";
|
|
|
|
foreach ($created_events as $event) {
|
|
echo "- {$event['title']}\n";
|
|
echo " Attendees: {$event['attendees']} | Checked in: {$event['checked_in']} | Revenue: \${$event['revenue']}\n";
|
|
}
|
|
|
|
echo "\nTotal Revenue: \${$total_revenue}\n";
|
|
echo "\nAll test data has been created successfully!\n";
|
|
?>
|
|
EOF
|
|
|
|
# Execute the PHP script
|
|
php create-test-data-with-revenue.php
|
|
|
|
# Clean up
|
|
rm create-test-data-with-revenue.php
|
|
ENDSSH
|
|
|
|
echo ""
|
|
echo "[0;32mComplete test data with revenue created![0m"
|
|
echo ""
|
|
echo "You can now test all features:"
|
|
echo ""
|
|
echo "1. Enhanced Dashboard: https://upskill-staging.measurequick.com/hvac-dashboard/"
|
|
echo " - Search for events (try 'Workshop' or 'Certification')"
|
|
echo " - Filter by date range"
|
|
echo " - Change items per page (10/25/50/100)"
|
|
echo " - Sort by clicking column headers"
|
|
echo " - View revenue numbers for each event"
|
|
echo ""
|
|
echo "2. Certificate Generation: https://upskill-staging.measurequick.com/generate-certificates/"
|
|
echo " - Select any event to see attendees"
|
|
echo " - Generate certificates for checked-in attendees"
|
|
echo ""
|
|
echo "3. Certificate Reports: https://upskill-staging.measurequick.com/certificate-reports/"
|
|
echo " - View all generated certificates"
|
|
echo " - Filter by event or attendee name"
|
|
echo " - Download certificates"
|
|
echo ""
|
|
echo "Login as: test_trainer" |