- 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
		
			
				
	
	
		
			415 lines
		
	
	
		
			No EOL
		
	
	
		
			15 KiB
		
	
	
	
		
			Bash
		
	
	
		
			Executable file
		
	
	
	
	
			
		
		
	
	
			415 lines
		
	
	
		
			No EOL
		
	
	
		
			15 KiB
		
	
	
	
		
			Bash
		
	
	
		
			Executable file
		
	
	
	
	
| #!/bin/bash
 | |
| 
 | |
| # Load configuration
 | |
| source wordpress-dev/bin/hvac-plugin-deploy.conf
 | |
| 
 | |
| echo "=== Enhancing Test Data with Revenue and Sales Information ==="
 | |
| 
 | |
| # 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' > enhance-revenue-data.php
 | |
| <?php
 | |
| // Load WordPress
 | |
| require_once('wp-load.php');
 | |
| 
 | |
| echo "=== Enhancing test data with revenue information ===\n\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;
 | |
| 
 | |
| // Get all events created by test_trainer
 | |
| $events = get_posts([
 | |
|     'post_type' => 'tribe_events',
 | |
|     'post_status' => 'publish',
 | |
|     'author' => $trainer_id,
 | |
|     'posts_per_page' => -1,
 | |
|     'orderby' => 'date',
 | |
|     'order' => 'DESC'
 | |
| ]);
 | |
| 
 | |
| echo "Found " . count($events) . " events to enhance\n\n";
 | |
| 
 | |
| foreach ($events as $event) {
 | |
|     echo "Enhancing event: {$event->post_title} (ID: {$event->ID})\n";
 | |
|     
 | |
|     // Get existing ticket for this event
 | |
|     $tickets = get_posts([
 | |
|         'post_type' => 'tribe_tpp_tickets',
 | |
|         'meta_query' => [
 | |
|             [
 | |
|                 'key' => '_tribe_tpp_for_event',
 | |
|                 'value' => $event->ID
 | |
|             ]
 | |
|         ],
 | |
|         'posts_per_page' => 1
 | |
|     ]);
 | |
|     
 | |
|     if (!empty($tickets)) {
 | |
|         $ticket = $tickets[0];
 | |
|         $ticket_id = $ticket->ID;
 | |
|         echo "Found existing ticket ID: {$ticket_id}\n";
 | |
|         
 | |
|         // Get ticket price
 | |
|         $price = get_post_meta($ticket_id, '_price', true) ?: 299;
 | |
|         
 | |
|         // Count actual attendees
 | |
|         $attendees = get_posts([
 | |
|             'post_type' => 'tribe_tpp_attendees',
 | |
|             'meta_query' => [
 | |
|                 [
 | |
|                     'key' => '_tribe_tpp_event',
 | |
|                     'value' => $event->ID
 | |
|                 ]
 | |
|             ],
 | |
|             'posts_per_page' => -1
 | |
|         ]);
 | |
|         
 | |
|         $attendee_count = count($attendees);
 | |
|         $checked_in_count = 0;
 | |
|         
 | |
|         // Update attendee payment status and count check-ins
 | |
|         foreach ($attendees as $attendee) {
 | |
|             // Ensure payment status is set
 | |
|             update_post_meta($attendee->ID, '_paid_price', $price);
 | |
|             update_post_meta($attendee->ID, '_tribe_tickets_order_status', 'completed');
 | |
|             update_post_meta($attendee->ID, '_tribe_tpp_order_status', 'completed');
 | |
|             
 | |
|             // Count checked in
 | |
|             $is_checked_in = get_post_meta($attendee->ID, '_tribe_tpp_checkin', true);
 | |
|             if ($is_checked_in) {
 | |
|                 $checked_in_count++;
 | |
|             }
 | |
|         }
 | |
|         
 | |
|         // Calculate revenue
 | |
|         $total_revenue = $attendee_count * $price;
 | |
|         
 | |
|         // Update ticket meta with accurate sales data
 | |
|         update_post_meta($ticket_id, '_tribe_tpp_sold', $attendee_count);
 | |
|         update_post_meta($ticket_id, '_tribe_ticket_sold', $attendee_count);
 | |
|         update_post_meta($ticket_id, 'total_sales', $attendee_count);
 | |
|         update_post_meta($ticket_id, '_stock', 50 - $attendee_count); // Assuming capacity of 50
 | |
|         
 | |
|         // Update event meta for revenue tracking
 | |
|         update_post_meta($event->ID, '_tribe_ticket_sold_count', $attendee_count);
 | |
|         update_post_meta($event->ID, '_EventCost', $price);
 | |
|         update_post_meta($event->ID, '_tribe_event_revenue', $total_revenue);
 | |
|         
 | |
|         // Add provider if not set
 | |
|         $provider = get_post_meta($event->ID, '_tribe_default_ticket_provider', true);
 | |
|         if (empty($provider)) {
 | |
|             update_post_meta($event->ID, '_tribe_default_ticket_provider', 'Tribe__Tickets_Plus__Commerce__PayPal__Main');
 | |
|         }
 | |
|         
 | |
|         echo "- Attendees: {$attendee_count}\n";
 | |
|         echo "- Checked in: {$checked_in_count}\n";
 | |
|         echo "- Ticket price: \${$price}\n";
 | |
|         echo "- Total revenue: \${$total_revenue}\n";
 | |
|         
 | |
|         // Ensure we have PayPal order data for each attendee (needed for reports)
 | |
|         $order_num = 1;
 | |
|         foreach ($attendees as $attendee) {
 | |
|             $order_id = get_post_meta($attendee->ID, '_tribe_tpp_order', true);
 | |
|             if (empty($order_id) || strpos($order_id, 'TEST-') === 0) {
 | |
|                 // Create a more realistic order ID
 | |
|                 $new_order_id = 'PAY-' . strtoupper(substr(md5($event->ID . '-' . $attendee->ID . '-' . time()), 0, 8));
 | |
|                 update_post_meta($attendee->ID, '_tribe_tpp_order', $new_order_id);
 | |
|                 update_post_meta($attendee->ID, '_tribe_paypal_transaction_id', $new_order_id);
 | |
|             }
 | |
|             
 | |
|             // Ensure attendee has all required meta for revenue calculation
 | |
|             update_post_meta($attendee->ID, '_tribe_tpp_price', $price);
 | |
|             update_post_meta($attendee->ID, '_paid_price', $price);
 | |
|             update_post_meta($attendee->ID, '_tribe_tickets_event_id', $event->ID);
 | |
|             update_post_meta($attendee->ID, '_tribe_tickets_product_id', $ticket_id);
 | |
|             
 | |
|             $order_num++;
 | |
|         }
 | |
|         
 | |
|     } else {
 | |
|         echo "No ticket found for this event - skipping revenue enhancement\n";
 | |
|     }
 | |
|     
 | |
|     echo "----------------------------\n";
 | |
| }
 | |
| 
 | |
| // Now let's add some additional attendees to events that need more data
 | |
| echo "\nAdding additional attendees to events with low attendance...\n\n";
 | |
| 
 | |
| foreach ($events as $event) {
 | |
|     // Get ticket
 | |
|     $tickets = get_posts([
 | |
|         'post_type' => 'tribe_tpp_tickets',
 | |
|         'meta_query' => [
 | |
|             [
 | |
|                 'key' => '_tribe_tpp_for_event',
 | |
|                 'value' => $event->ID
 | |
|             ]
 | |
|         ],
 | |
|         'posts_per_page' => 1
 | |
|     ]);
 | |
|     
 | |
|     if (empty($tickets)) {
 | |
|         continue;
 | |
|     }
 | |
|     
 | |
|     $ticket = $tickets[0];
 | |
|     $ticket_id = $ticket->ID;
 | |
|     $price = get_post_meta($ticket_id, '_price', true) ?: 299;
 | |
|     
 | |
|     // Count current attendees
 | |
|     $current_attendees = get_posts([
 | |
|         'post_type' => 'tribe_tpp_attendees',
 | |
|         'meta_query' => [
 | |
|             [
 | |
|                 'key' => '_tribe_tpp_event',
 | |
|                 'value' => $event->ID
 | |
|             ]
 | |
|         ],
 | |
|         'posts_per_page' => -1
 | |
|     ]);
 | |
|     
 | |
|     $current_count = count($current_attendees);
 | |
|     
 | |
|     // If less than 15 attendees, add more
 | |
|     if ($current_count < 15) {
 | |
|         $to_add = 15 - $current_count;
 | |
|         echo "Event '{$event->post_title}' has {$current_count} attendees. Adding {$to_add} more...\n";
 | |
|         
 | |
|         $names = [
 | |
|             ['Alex', 'Thompson', 'alex.thompson'],
 | |
|             ['Jessica', 'Martinez', 'jessica.martinez'],
 | |
|             ['Ryan', 'Chen', 'ryan.chen'],
 | |
|             ['Ashley', 'Kumar', 'ashley.kumar'],
 | |
|             ['Brandon', 'White', 'brandon.white'],
 | |
|             ['Nicole', 'Lee', 'nicole.lee'],
 | |
|             ['Justin', 'Harris', 'justin.harris'],
 | |
|             ['Amanda', 'Clark', 'amanda.clark'],
 | |
|             ['Kevin', 'Lewis', 'kevin.lewis'],
 | |
|             ['Rachel', 'Walker', 'rachel.walker'],
 | |
|             ['Timothy', 'Hall', 'timothy.hall'],
 | |
|             ['Laura', 'Allen', 'laura.allen'],
 | |
|             ['Jason', 'Young', 'jason.young'],
 | |
|             ['Michelle', 'King', 'michelle.king'],
 | |
|             ['Eric', 'Wright', 'eric.wright']
 | |
|         ];
 | |
|         
 | |
|         for ($i = 0; $i < $to_add && $i < count($names); $i++) {
 | |
|             list($first_name, $last_name, $email_prefix) = $names[$i];
 | |
|             $full_name = "{$first_name} {$last_name}";
 | |
|             $email = $email_prefix . rand(100, 999) . '@hvacpro.com';
 | |
|             
 | |
|             // Create attendee
 | |
|             $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)) {
 | |
|                 // Create realistic order ID
 | |
|                 $order_id = 'PAY-' . strtoupper(substr(md5($event->ID . '-' . $attendee_id . '-' . time()), 0, 8));
 | |
|                 
 | |
|                 // Set all attendee meta
 | |
|                 $attendee_meta = [
 | |
|                     '_tribe_tpp_event' => $event->ID,
 | |
|                     '_tribe_tpp_product' => $ticket_id,
 | |
|                     '_tribe_tpp_order' => $order_id,
 | |
|                     '_tribe_paypal_transaction_id' => $order_id,
 | |
|                     '_tribe_tickets_full_name' => $full_name,
 | |
|                     '_tribe_tickets_email' => $email,
 | |
|                     '_tribe_tpp_full_name' => $full_name,
 | |
|                     '_tribe_tpp_email' => $email,
 | |
|                     '_tribe_tpp_security_code' => substr(md5($order_id), 0, 10),
 | |
|                     '_paid_price' => $price,
 | |
|                     '_tribe_tpp_price' => $price,
 | |
|                     '_tribe_tickets_order_status' => 'completed',
 | |
|                     '_tribe_tpp_order_status' => 'completed',
 | |
|                     '_tribe_tickets_event_id' => $event->ID,
 | |
|                     '_tribe_tickets_product_id' => $ticket_id
 | |
|                 ];
 | |
|                 
 | |
|                 foreach ($attendee_meta as $key => $value) {
 | |
|                     update_post_meta($attendee_id, $key, $value);
 | |
|                 }
 | |
|                 
 | |
|                 // Check in 85% of new attendees
 | |
|                 if ($i < ($to_add * 0.85)) {
 | |
|                     update_post_meta($attendee_id, '_tribe_tpp_checkin', 1);
 | |
|                     update_post_meta($attendee_id, 'check_in', 1);
 | |
|                 }
 | |
|             }
 | |
|         }
 | |
|         
 | |
|         // Update ticket sales count
 | |
|         $new_total = $current_count + $to_add;
 | |
|         update_post_meta($ticket_id, '_tribe_tpp_sold', $new_total);
 | |
|         update_post_meta($ticket_id, '_tribe_ticket_sold', $new_total);
 | |
|         update_post_meta($ticket_id, 'total_sales', $new_total);
 | |
|         update_post_meta($ticket_id, '_stock', 50 - $new_total);
 | |
|         
 | |
|         // Update event revenue
 | |
|         $new_revenue = $new_total * $price;
 | |
|         update_post_meta($event->ID, '_tribe_ticket_sold_count', $new_total);
 | |
|         update_post_meta($event->ID, '_tribe_event_revenue', $new_revenue);
 | |
|         
 | |
|         echo "Added {$to_add} attendees. New total: {$new_total}, Revenue: \${$new_revenue}\n";
 | |
|     }
 | |
| }
 | |
| 
 | |
| // Generate certificates for all checked-in attendees
 | |
| if (class_exists('HVAC_Certificate_Manager')) {
 | |
|     echo "\n=== Generating certificates for checked-in attendees ===\n";
 | |
|     
 | |
|     $certificate_manager = HVAC_Certificate_Manager::instance();
 | |
|     $total_certificates = 0;
 | |
|     
 | |
|     foreach ($events as $event) {
 | |
|         echo "\nProcessing certificates for: {$event->post_title}\n";
 | |
|         
 | |
|         // Get all checked-in attendees
 | |
|         $checked_in_attendees = get_posts([
 | |
|             'post_type' => 'tribe_tpp_attendees',
 | |
|             'meta_query' => [
 | |
|                 'relation' => 'AND',
 | |
|                 [
 | |
|                     'key' => '_tribe_tpp_event',
 | |
|                     'value' => $event->ID
 | |
|                 ],
 | |
|                 [
 | |
|                     'key' => '_tribe_tpp_checkin',
 | |
|                     'value' => 1
 | |
|                 ]
 | |
|             ],
 | |
|             'posts_per_page' => -1
 | |
|         ]);
 | |
|         
 | |
|         $event_certificates = 0;
 | |
|         
 | |
|         foreach ($checked_in_attendees as $attendee) {
 | |
|             // Check if certificate already exists
 | |
|             if (!$certificate_manager->certificate_exists($event->ID, $attendee->ID)) {
 | |
|                 // Generate certificate
 | |
|                 $cert_filename = 'certificate-' . $event->ID . '-' . $attendee->ID . '-' . time() . '.pdf';
 | |
|                 $cert_path = 'hvac-certificates/' . date('Y/m/') . $cert_filename;
 | |
|                 
 | |
|                 $cert_id = $certificate_manager->create_certificate(
 | |
|                     $event->ID,
 | |
|                     $attendee->ID,
 | |
|                     0, // user_id
 | |
|                     $cert_path,
 | |
|                     $trainer_id
 | |
|                 );
 | |
|                 
 | |
|                 if ($cert_id) {
 | |
|                     $event_certificates++;
 | |
|                     $total_certificates++;
 | |
|                     
 | |
|                     // Create dummy PDF file
 | |
|                     $upload_dir = wp_upload_dir();
 | |
|                     $full_path = $upload_dir['basedir'] . '/' . $cert_path;
 | |
|                     $dir = dirname($full_path);
 | |
|                     if (!file_exists($dir)) {
 | |
|                         wp_mkdir_p($dir);
 | |
|                     }
 | |
|                     
 | |
|                     // Create a simple PDF-like content
 | |
|                     $attendee_name = get_post_meta($attendee->ID, '_tribe_tickets_full_name', true);
 | |
|                     $pdf_content = "%PDF-1.4\nTest Certificate for {$attendee_name}\nEvent: {$event->post_title}\nGenerated for testing purposes.";
 | |
|                     file_put_contents($full_path, $pdf_content);
 | |
|                 }
 | |
|             }
 | |
|         }
 | |
|         
 | |
|         if ($event_certificates > 0) {
 | |
|             echo "Generated {$event_certificates} certificates for this event\n";
 | |
|         } else {
 | |
|             echo "All attendees already have certificates\n";
 | |
|         }
 | |
|     }
 | |
|     
 | |
|     echo "\nTotal new certificates generated: {$total_certificates}\n";
 | |
| }
 | |
| 
 | |
| // Summary of all events with revenue
 | |
| echo "\n=== Final Event Summary ===\n";
 | |
| $total_revenue = 0;
 | |
| $total_attendees = 0;
 | |
| $total_checked_in = 0;
 | |
| 
 | |
| foreach ($events as $event) {
 | |
|     $attendees = get_posts([
 | |
|         'post_type' => 'tribe_tpp_attendees',
 | |
|         'meta_query' => [
 | |
|             [
 | |
|                 'key' => '_tribe_tpp_event',
 | |
|                 'value' => $event->ID
 | |
|             ]
 | |
|         ],
 | |
|         'posts_per_page' => -1
 | |
|     ]);
 | |
|     
 | |
|     $attendee_count = count($attendees);
 | |
|     $checked_in = 0;
 | |
|     $event_revenue = 0;
 | |
|     
 | |
|     foreach ($attendees as $attendee) {
 | |
|         if (get_post_meta($attendee->ID, '_tribe_tpp_checkin', true)) {
 | |
|             $checked_in++;
 | |
|         }
 | |
|         $paid = get_post_meta($attendee->ID, '_paid_price', true) ?: 0;
 | |
|         $event_revenue += $paid;
 | |
|     }
 | |
|     
 | |
|     $total_revenue += $event_revenue;
 | |
|     $total_attendees += $attendee_count;
 | |
|     $total_checked_in += $checked_in;
 | |
|     
 | |
|     echo "\n{$event->post_title}:\n";
 | |
|     echo "- Attendees: {$attendee_count}\n";
 | |
|     echo "- Checked in: {$checked_in}\n";
 | |
|     echo "- Revenue: \${$event_revenue}\n";
 | |
| }
 | |
| 
 | |
| echo "\n=== TOTAL SUMMARY ===\n";
 | |
| echo "Total Events: " . count($events) . "\n";
 | |
| echo "Total Attendees: {$total_attendees}\n";
 | |
| echo "Total Checked In: {$total_checked_in}\n";
 | |
| echo "Total Revenue: \${$total_revenue}\n";
 | |
| 
 | |
| echo "\nRevenue data enhancement completed!\n";
 | |
| ?>
 | |
| EOF
 | |
| 
 | |
| # Execute the PHP script
 | |
| php enhance-revenue-data.php
 | |
| 
 | |
| # Clean up
 | |
| rm enhance-revenue-data.php
 | |
| ENDSSH
 | |
| 
 | |
| echo ""
 | |
| echo "[0;32mRevenue data enhancement completed![0m"
 | |
| echo ""
 | |
| echo "You can now test:"
 | |
| echo "1. Dashboard with revenue numbers: https://upskill-staging.measurequick.com/hvac-dashboard/"
 | |
| echo "2. Generate Certificates: https://upskill-staging.measurequick.com/generate-certificates/"
 | |
| echo "3. Certificate Reports: https://upskill-staging.measurequick.com/certificate-reports/"
 | |
| echo ""
 | |
| echo "The dashboard should now show:"
 | |
| echo "- Total revenue from ticket sales"
 | |
| echo "- Number of tickets sold per event"
 | |
| echo "- Attendee counts and check-in rates"
 | |
| echo ""
 | |
| echo "Certificates can be generated for all checked-in attendees." |