upskill-event-manager/bin/enhance-test-data-revenue.sh
Ben Reed 3e23a0884e feat: Add comprehensive data seeding scripts for testing infrastructure
- 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
2025-08-11 15:44:27 -03:00

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."