aisa/scripts/pdf/event_details_pdf.pl

1462 lines
57 KiB
Perl
Raw Normal View History

2025-11-26 09:31:54 +00:00
#!/usr/bin/perl
BEGIN { use lib '/usr/home/cfg' ; require push_inc ; }
require cfg ;
# unless ($username eq 'handre') { print "<<<<<<<<<<<< MAINTENANCE IN PROGRESS >>>>>>>>>" ; exit ; }
use DBI;
use CGI::Carp qw(fatalsToBrowser);
use Date::Manip;
use Date::Calc qw(:all);
# use Font::TTF::Font;
# use GD;
# use GD::Text::Align;
use PDF::API2;
use CAM::PDF ;
# use PDF::API2;
use constant mm => 25.4/72;
use constant in => 1/72;
use constant pt => 1;
# my $pdf = PDF::API2->new;
# my $page = $pdf->page;
# my $text = $page->text;
# my $font = $pdf->corefont('Helvetica'); # built-in font
# my $size = 8;
# $text->font($font, $size);
# my $string = "W";
# my $width = $text->advancewidth($string);
# print "Width of '$string' at ${size}pt = $width\n";
#------------------------------------------------------------------------------------------
@ARGV = split(/\\*\&/, $ENV{'QUERY_STRING'});
2026-02-03 12:35:43 +00:00
our $qt_id = $ARGV[0] ;
our $tab_no = $ARGV[1] ;
our $tab_secs = $ARGV[2] ;
our $event_or_analytics = $ARGV[3] ;
2025-11-26 09:31:54 +00:00
# my @sections = split(/\|/,$tab_secs);
my @prefix_arr = qw( cost_desc_ curr_amnt_ qty_cost_ zar_amnt_ );
our $open_new_tab = qq~target="_blank"~ ; # opens booking page in a new tab
# our $debug = 1 ;
our $label = 1 ; # used in pdf_check_value_of_up
#------------------------------------------------------------------------------------------
print "Content-type: text/html\n\n";
&today ;
&pdf_curr_symbols ;
my $table = 'event_quotes' ;
&db_open_ro ;
our $db_ignore_open_close = 1 ; # do one open and one close instead of repeating it
&prep_pdf ;
$db_ignore_open_close = 0 ; # do one open and one close instead of repeating it
&db_close_conn ;
&exclusions ;
&start_pdf ;
&build_pdf ;
&finish_pdf ;
&screen2 ;
exit ;
#------------------------------------------------------------------------------------------
sub process_date {
my ($date_string) = @_ ;
my $year = substr($date_string, 0, 4) ;
my $month = substr($date_string, 5, 2) ;
$month = int($month);
$month = $month_array[$month - 1] ;
my $day = substr($date_string, 8, 2) ;
my $date_return = "$day-" ;
$date_return .= "$month-" ;
$date_return .= "$year" ;
$date_return .= " @ " . substr($date_string,11,5) ;
return $date_return ;
} #------------------------------------------------------------------------------------------
sub prep_pdf {
my @cols = () ;
&tab_hash ;
2026-02-03 12:35:43 +00:00
if ($event_or_analytics eq 'analytics') {
&db_min_ro('analytics_event_bookings',"id,event_date","`id`='$qt_id'",'','') ;
$db{$table}{$qt_id}{quote_date} = $db{analytics_event_bookings}{$qt_id}{event_date} ;
$db{$table}{$qt_id}{quote_nr} = $qt_id ;
&db_min_ro('sport_types','id,name','','','') ;
return ;
}
2025-11-26 09:31:54 +00:00
&db_min_ro('event_quotes',"*","`id`='$qt_id'",'','') ;
our @month_array = ("Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec") ;
our $countryid = $db{$table}{$qt_id}{country_id} ;
our $custid = $db{$table}{$qt_id}{quote_to} ;
our $date_from_for_pdf = &process_date($db{$table}{$qt_id}{date_from}) ;
our $date_to_for_pdf = &process_date($db{$table}{$qt_id}{date_to}) ;
our $type_id = $db{$table}{$qt_id}{type} ;
our %country = () ;
&db_min_ro('customers','id,name,physical_address,contact_email,phone,contact_name,vat_nr',"`id`='$custid'",'','') ;
$customer_name{$custid} = $db{customers}{$custid}{name} ;
$customer_address{$custid} = $db{customers}{$custid}{physical_address} ;
$customer_email{$custid} = $db{customers}{$custid}{contact_email} ;
$customer_phone{$custid} = $db{customers}{$custid}{phone} ;
$customer_contact_name{$custid} = $db{customers}{$custid}{contact_name} ;
$customer_vat_nr{$custid} = $db{customers}{$custid}{vat_nr} ;
&db_min_ro('event_cost_items','id,name','','','') ;
foreach my $id (keys %{$db{event_cost_items}}) { $price_list{$id} = $db{event_cost_items}{$id}{name} ; }
&db_min_ro('countries','*',"`id`='$countryid'",'','') ;
$country{$countryid} = $db{countries}{$countryid}{name} ;
$country{$countryid} = "Unknown" if not $country{$countryid} ;
our $camera_system_id = $db{$table}{$qt_id}{camera_system_id} ;
&db_min_ro('camera_systems','*',"`id`='$camera_system_id'",'','') ;
$camera_system{$camera_system_id} = $db{camera_systems}{$camera_system_id}{name} ;
our %event_type_for_pdf = () ;
&db_min_ro('event_types','id, name',"`id`='$type_id'",'','') ;
$event_type_for_pdf{$type_id} = $db{event_types}{$type_id}{name} ;
&db_min_ro('event_quotes_min','id,excl_costing_event,item_costing_event,qty_costing_event,usd_amnt_costing_event,item_ttl_costing_event,vat_costing_event,curr_amnt_costing_event,category_details',"`id`='$qt_id'",'','') ;
&db_min_ro('event_systems','id,name,description','','','') ;
&db_min_ro('event_type_details','id,name','','','') ;
&db_min_ro('users','id,name,phone','','','') ;
&db_min_ro('sport_types','id,name','','','') ;
&db_min_ro('regions','id,name','','','') ;
&db_min_ro('cities','id,name','','','') ;
&db_min_ro('organisations','id,name','','','') ;
&db_min_ro('event_quotes_categories','*','','','') ;
&db_min_ro('clubs','*','','','') ;
&db_min_ro('event_quotes_poc','*','','','') ;
&db_min_ro('event_quotes_recipient','*','','','') ;
} #------------------------------------------------------------------------------------------
sub exclusions {
our $exclude_rate = 0 ;
our $exclude_vat = 0 ;
if ($db{$table}{$qt_id}{currency} ne 'ZAR') {
$exclude_vat = 1 ;
}
} #------------------------------------------------------------------------------------------
sub start_pdf {
my $qtpdfpath = "$pdfpath/event_details" ;
our $pdfname = "Event_Details-$qt_id" . '.pdf' ;
# &pdf_delete_previous_pdf($qtpdfpath) ;
if (-f "$qtpdfpath/$pdfname") {
unlink ("$qtpdfpath/$pdfname") or print "unable to unlink - $qtpdfpath/$pdfname : $!";
}
&pdf_initialise($qtpdfpath,$pdfname,'ITV Event Quote') ;
} #------------------------------------------------------------------------------------------
sub build_pdf {
&tab_curr_symbols;
&pdf_initialise_page ;
$up = 292 ;
# &quote_pdf_page_header ;
&pdf_box_block_top(5,205,'#009bc8') ;
$up = 260 ;
$across = 1 ;
$blue_box = 1 ;
&pdf_page_header ;
&quote_pdf_vars ;
&quote_out_to_pdf ;
# &quote_pdf_footer ;
$up = 5 ;
&pdf_box_block_bottom(5,205,'#009bc8') ;
} #------------------------------------------------------------------------------------------
sub quote_out_to_pdf {
&pdf_nl_t;
&pdf_small_bold_text(150, $up, "Date") ;
my $dttxt = &custom_date_txt($db{$table}{$qt_id}{quote_date});
&pdf_small_bold_text_right (198, $up, $dttxt) ;
&pdf_nl;
2026-02-03 12:35:43 +00:00
if ($event_or_analytics eq 'analytics') {
&pdf_small_bold_text(150, $up, "Analytics Event Nr") ;
} else {
&pdf_small_bold_text(150, $up, "Event Nr") ;
}
2025-11-26 09:31:54 +00:00
# &pdf_small_text_right (198, $up, $qt_id) ;
&pdf_small_bold_text_right (198, $up, $db{$table}{$qt_id}{quote_nr}) ;
&pdf_nl;
&pdf_nl_t;
2026-02-03 12:35:43 +00:00
2025-11-26 09:31:54 +00:00
my $text = $page->text;
my $font = $pdf->corefont('Helvetica'); # built-in font
my $size = 8/pt ;
$text->font($font, $size);
2026-02-03 12:35:43 +00:00
unless ($event_or_analytics eq 'analytics') {
&pdf_bar(10,$up,200,$up,'#969696','EVENT INFO',20,93) ; #EEEEEE
$up = $up - 5;
2025-11-26 09:31:54 +00:00
2026-02-03 12:35:43 +00:00
&pdf_box_block_top(10,200,'#969696') ; # start block -------------------------------------
2025-11-26 09:31:54 +00:00
2026-02-03 12:35:43 +00:00
our $top = 0 ;
2025-11-26 09:31:54 +00:00
2026-02-03 12:35:43 +00:00
if ($custid) {
my ($expiry_year,$expiry_month,$expiry_day) = split(/\-/,$db{$table}{$qt_id}{quote_expiry});
my $expiry_date = &custom_date_txt("$expiry_year-$expiry_month-$expiry_day") if $db{$table}{$qt_id}{quote_expiry} ;
2025-11-26 09:31:54 +00:00
2026-02-03 12:35:43 +00:00
$top = $up ;
our $pos_cat = 15 ; our $pos_des = 60 ; our $next_line_space = 5 ;
2025-11-26 09:31:54 +00:00
2026-02-03 12:35:43 +00:00
my $sport_types = '' ;
my @sport_type_ids = ($db{$table}{$qt_id}{sport_type_ids} =~ /;/) ? split(";",$db{$table}{$qt_id}{sport_type_ids}) : split(",",$db{$table}{$qt_id}{sport_type_ids}) ;
foreach (@sport_type_ids) {
$sport_types .= qq~$db{sport_types}{$_}{name}, ~ ;
2025-11-26 09:31:54 +00:00
}
2026-02-03 12:35:43 +00:00
chop $sport_types if $sport_types ; chop $sport_types if $sport_types ;
2025-11-26 09:31:54 +00:00
2026-02-03 12:35:43 +00:00
my $operators = qq~~ ; my $cnt_ops = 0 ;
2025-11-26 09:31:54 +00:00
2026-02-03 12:35:43 +00:00
my @operator_ids = ($db{$table}{$qt_id}{operator_ids} =~ /;/) ? split(";",$db{$table}{$qt_id}{operator_ids}) : split(",",$db{$table}{$qt_id}{operator_ids}) ;
2025-11-26 09:31:54 +00:00
2026-02-03 12:35:43 +00:00
foreach (@operator_ids) {
next unless $_ ;
$cnt_ops++ ;
$operators .= qq~$db{users}{$_}{name}~ ;
2025-11-26 09:31:54 +00:00
2026-02-03 12:35:43 +00:00
my $phone = $db{users}{$_}{phone} ;
$phone =~ s/ //g ;
if (substr($phone,0,2) eq '27' && length($phone) == 11) {
$phone = "+27 " . substr($phone,2,2) . " " . substr($phone,4,3) . " " . substr($phone,7,4) ;
} elsif ((substr($phone,0,2) eq '07' || substr($phone,0,2) eq '08' || substr($phone,0,2) eq '02') && length($phone) == 10) {
$phone = "+27 " . substr($phone,1,2) . " " . substr($phone,3,3) . " " . substr($phone,6,4) ;
2025-11-26 09:31:54 +00:00
} else {
2026-02-03 12:35:43 +00:00
$phone = $db{users}{$_}{phone} ;
}
$operators .= qq~ - $phone~ if $phone ;
$operators .= qq~, ~ ;
}
chop $operators if $operators ; chop $operators if $operators ;
$operators = qq~$cnt_ops [$operators]~ if $cnt_ops ;
my $venue = qq~~ ;
my @organisation_ids = ($db{$table}{$qt_id}{organisation_ids} =~ /;/) ? split(";",$db{$table}{$qt_id}{organisation_ids}) : split(",",$db{$table}{$qt_id}{organisation_ids}) ;
foreach (@organisation_ids) {
$venue .= qq~$db{organisations}{$_}{name}, ~ ;
}
chop $venue if $venue ; chop $venue if $venue ;
my $system_details = qq~~ ;
if ($usertype ne 'schools_manager') {
2025-11-26 09:31:54 +00:00
2026-02-03 12:35:43 +00:00
my @type_details_id = ($db{$table}{$qt_id}{type_details_id} =~ /;/) ? split(";",$db{$table}{$qt_id}{type_details_id}) : split(",",$db{$table}{$qt_id}{type_details_id}) ;
2025-11-26 09:31:54 +00:00
2026-02-03 12:35:43 +00:00
foreach my $type_id (@type_details_id) {
$system_details .= qq~$db{event_type_details}{$type_id}{name}, ~ ;
}
chop $system_details if $system_details ; chop $system_details if $system_details ;
}
my $max_line_width = 100 ;
my @times_from = split(/\;/,$db{$table}{$qt_id}{times_from}) ;
my @times_to = split(/\;/,$db{$table}{$qt_id}{times_to}) ;
my @times_from_com = () ; my @times_to_com = () ;
push @times_from_com,substr($db{$table}{$qt_id}{date_from},11) ;
my @days_active = split(/\;/,$db{$table}{$qt_id}{days_active}) ;
my %dates_hash = () ;
for (1 .. 10) {
my ($year,$month,$day) = split(/\-/,substr($db{$table}{$qt_id}{date_from},0,10)) ;
my ($new_year,$new_month,$new_day) = Add_Delta_Days($year,$month,$day,$_-1) ;
$new_day = sprintf("%02s",$new_day) ; $new_month = sprintf("%02s",$new_month) ;
$dates_hash{$_} = "$new_year-$new_month-$new_day" ;
push @times_from_com,$times_from[$_-2] if $times_from[$_-2] && $_ > 1 ;
push @times_from_com,substr($db{$table}{$qt_id}{date_from},11) if !$times_from[$_-2] && $_ > 1 ;
last if substr($db{$table}{$qt_id}{date_to},0,10) eq "$new_year-$new_month-$new_day" ;
push @times_to_com,$times_to[$_-1] if $times_to[$_-1] ;
push @times_to_com,substr($db{$table}{$qt_id}{date_to},11) if !$times_to[$_-1] ;
}
push @times_to_com, substr($db{$table}{$qt_id}{date_to},11) ;
my $system_count = 0 ; my $system_day_cnt = 0 ; my %system_has_daily_op = () ;
foreach my $system_row (split(/\|/,$db{$table}{$qt_id}{daily_operator_ids})) {
$system_count++ ;
next unless $system_row ;
$system_day_cnt = 0 ;
foreach my $col (split(/\;/,$system_row)) {
$system_day_cnt++ ;
next unless $col ;
$default_op_ids{$system_count}{$system_day_cnt} = $col if $col ;
$system_daily_ops{$system_count} .= qq~Day $system_day_cnt : $db{users}{$col}{name},~ if $col ;
}
chop $system_daily_ops{$system_count} if $system_daily_ops{$system_count} ;
# chop $system_daily_ops{$system_count} if $system_daily_ops{$system_count} ;
}
$system_count = 0 ;
&display_text ("Event Name",$db{$table}{$qt_id}{ref}) if $db{$table}{$qt_id}{ref} ;
if ($date_from_for_pdf && substr($db{$table}{$qt_id}{date_from},0,10) ne substr($db{$table}{$qt_id}{date_to},0,10)) {
&display_text ("Date From",$date_from_for_pdf . qq~ to ~ . substr($times_to_com[0],0,5)) ;
for (2 .. 9) {
last if substr($db{$table}{$qt_id}{date_to},0,10) eq $dates_hash{$_} ;
next if $db{$table}{$qt_id}{days_active} and !$days_active[$_ - 1] ;
my ($new_year,$new_month,$new_day) = split(/\-/,$dates_hash{$_}) ;
my $val = $new_day . "-" . $month_array[$new_month - 1] . "-" . $new_year . " @ " . substr($times_from_com[$_ - 1],0,5) . " to " . substr($times_to_com[$_ - 1],0,5) ;
&display_text ("",$val) ;
}
&display_text ("Date To",substr($date_to_for_pdf,0,-5) . substr($times_from_com[-1],0,5) . qq~ to ~ . substr($date_to_for_pdf,-5,5)) if $date_to_for_pdf ;
} elsif ($date_from_for_pdf && substr($db{$table}{$qt_id}{date_from},0,10) eq substr($db{$table}{$qt_id}{date_to},0,10)) {
&display_text ("Date",$date_from_for_pdf . qq~ to ~ . substr($db{$table}{$qt_id}{date_to},11,5)) ;
}
&display_text ("Type of System",$event_type_for_pdf{$type_id}) if $event_type_for_pdf{$type_id} ;
&display_text ("Type Details",$system_details) if $system_details ;
2025-11-26 09:31:54 +00:00
2026-02-03 12:35:43 +00:00
if ($usertype ne 'schools_manager') {
my $club_name = qq~~ ;
# my $cnt_sys = 0 ;
my @club_ids = split(";",$db{$table}{$qt_id}{club_ids}) ;
my @operator_ids = ($db{$table}{$qt_id}{operator_ids} =~ /;/) ? split(";",$db{$table}{$qt_id}{operator_ids}) : split(",",$db{$table}{$qt_id}{operator_ids}) ;
my $cnt_sys = -1 ;
2025-11-26 09:31:54 +00:00
2026-02-03 12:35:43 +00:00
my $this_line = qq~~ ;
2025-11-26 09:31:54 +00:00
2026-02-03 12:35:43 +00:00
foreach my $event_id (split(";",$db{$table}{$qt_id}{event_system_id_multiple})) {
$cnt_sys++ ;
next if !$event_id && !$club_ids[$cnt_sys] ;
$event_id =~ s/f-//g ;
2025-11-26 09:31:54 +00:00
2026-02-03 12:35:43 +00:00
$this_line = qq~~ ;
2025-11-26 09:31:54 +00:00
2026-02-03 12:35:43 +00:00
if ($db{event_systems}{$event_id}{name}) {
$this_line .= qq~$db{event_systems}{$event_id}{name}~ ;
$this_line .= ($db{event_systems}{$event_id}{description}) ? qq~ [$db{event_systems}{$event_id}{description}]~ : qq~~ ;
} else {
$this_line .= qq~NO SYSTEM~ ;
}
2025-11-26 09:31:54 +00:00
2026-02-03 12:35:43 +00:00
$this_line .= qq~ >>> ~ ;
2025-11-26 09:31:54 +00:00
2026-02-03 12:35:43 +00:00
$this_line .= ($db{clubs}{$club_ids[$cnt_sys]}{name}) ? qq~$db{clubs}{$club_ids[$cnt_sys]}{name} >>> ~ : qq~NO CLUB >>> ~ ;
$this_line .= qq~$db{users}{$operator_ids[$cnt_sys]}{name}~ if $operator_ids[$cnt_sys] ;
$cnt_sys++ ;
2025-11-26 09:31:54 +00:00
2026-02-03 12:35:43 +00:00
$club_name .= qq~$this_line~ ;
2025-11-26 09:31:54 +00:00
2026-02-03 12:35:43 +00:00
if ($system_daily_ops{$cnt_sys} && !$operator_ids[$cnt_sys-1]) {
my $line_width123 = $text->advancewidth("$this_line\[");
$line_width123 = $line_width123*mm ;
my $available_space = 195 - 4 - $pos_des - $line_width123 ;
my $max_operator_width = 0 ;
foreach (split(/\,/,$system_daily_ops{$cnt_sys})) {
my $width123 = $text->advancewidth("$_");
$width123 = $width123*mm ;
$max_operator_width = $width123 if $width123 > $max_operator_width ;
}
my $space_width = $text->advancewidth(" ")*mm ;
my $num_spaces = 0 ;
my $fist_line = qq~~ ;
if ($max_operator_width > $available_space) {
# $club_name .= qq~\n~ ;
# $line_width123 += $available_space ;
$line_width123 -= $max_operator_width ;
$num_spaces = int($line_width123 / $space_width) ;
$num_spaces = 0 ;
for (1 .. $num_spaces) {
# $club_name .= qq~ ~ ;
}
} else {
$num_spaces = int($line_width123 / $space_width) ;
2025-11-26 09:31:54 +00:00
}
2026-02-03 12:35:43 +00:00
$club_name .= qq~[~ ;
foreach (split(/\,/,$system_daily_ops{$cnt_sys})) {
# $club_name .= qq~$_\n~ ;
$club_name .= qq~$_,~ ;
for (1 .. $num_spaces+1) {
# $club_name .= qq~ ~ ;
}
2025-11-26 09:31:54 +00:00
}
2026-02-03 12:35:43 +00:00
# $club_name =~ s/ +$// ;
$club_name =~ s/\,+$// ;
chomp $club_name ;
$club_name .= qq~]~ ;
2025-11-26 09:31:54 +00:00
}
2026-02-03 12:35:43 +00:00
$cnt_sys-- ;
$club_name =~ s/ +$// ;
$club_name =~ s/>+$// ;
$club_name .= qq~\n~ ;
2025-11-26 09:31:54 +00:00
2026-02-03 12:35:43 +00:00
# $val .= qq~>>> $db{clubs}{$club_ids[$cnt_sys]}{name} ~ if $db{clubs}{$club_ids[$cnt_sys]}{name} ;
# $val .= qq~>>> $db{users}{$operator_ids[$cnt_sys]}{name} ~ if $db{users}{$operator_ids[$cnt_sys]}{name} ;
# $val .= qq~[$db{users}{$operator_ids[$cnt_sys]}{phone}] ~ if $db{users}{$operator_ids[$cnt_sys]}{name} && $db{users}{$operator_ids[$cnt_sys]}{phone} ;
# $club_name .= qq~<br>~ ;
# $cnt_sys++ ;
2025-11-26 09:31:54 +00:00
}
2026-02-03 12:35:43 +00:00
# my $club_name = qq~~ ;
# my @club_ids = split(";",$db{$table}{$qt_id}{club_ids}) ;
# my @operator_ids = split(",",$db{$table}{$qt_id}{operator_ids}) ;
# my $cnt_sys = -1 ;
# foreach my $event_id (split(";",$db{$table}{$qt_id}{event_system_id_multiple})) {
# $cnt_sys++ ;
# next if not $event_id and not $club_ids[$cnt_sys] ;
# $club_name .= qq~$db{event_systems}{$event_id}{name} ~ if $event_id ;
# $club_name .= qq~>>> ~ if $event_id and not $db{event_systems}{$event_id}{description} ;
# $club_name .= qq~($db{event_systems}{$event_id}{description}) >>> ~ if $db{event_systems}{$event_id}{description} and $event_id ;
# $club_name .= qq~NO SYSTEM >>> ~ unless $event_id ;
# $club_name .= qq~$db{clubs}{$club_ids[$cnt_sys]}{name} >>> ~ if $club_ids[$cnt_sys] ;
# $club_name .= qq~NO CLUB >>> ~ unless $club_ids[$cnt_sys] ;
# $club_name .= qq~$db{users}{$operator_ids[$cnt_sys]}{name}~ if $operator_ids[$cnt_sys] ;
# $cnt_sys++ ;
# $club_name .= qq~[$system_daily_ops{$cnt_sys}]~ if $system_daily_ops{$cnt_sys} && !$operator_ids[$cnt_sys] ;
# $cnt_sys-- ;
# # $val .= qq~>>> $db{clubs}{$club_ids[$cnt_sys]}{name} ~ if $db{clubs}{$club_ids[$cnt_sys]}{name} ;
# # $val .= qq~>>> $db{users}{$operator_ids[$cnt_sys]}{name} ~ if $db{users}{$operator_ids[$cnt_sys]}{name} ;
# # $val .= qq~[$db{users}{$operator_ids[$cnt_sys]}{phone}] ~ if $db{users}{$operator_ids[$cnt_sys]}{name} && $db{users}{$operator_ids[$cnt_sys]}{phone} ;
# $club_name .= qq~\n~ ;
# # $cnt_sys++ ;
# }
# # chop $val if $val ; chop $val if $val ;
# # $club_name = substr($club_name,0,-4) if $club_name ;
chomp $club_name if $club_name ;
&display_text ("System Details",$club_name,195) if $club_name ;
}
&display_text ("Operator(s)",$operators) if $operators ;
&display_text ("Sport Type(s)",$sport_types) if $sport_types ;
my $city = '' ;
if ($db{$table}{$qt_id}{city_id} and $db{$table}{$qt_id}{city_id} =~ /,/) {
# foreach (split(/,/,$db{$table}{$qt_id}{city_id})) {
# $city .= qq~$db{cities}{$_}{name},~ ;
# }
# chop $city if $city ;
$city = join(",", map{ "$db{cities}{$_}{name}" } split(/\,/,$db{$table}{$qt_id}{city_id})) ;
&display_text ("Cities",$city) ;
&display_text ("Region",$db{regions}{$db{$table}{$qt_id}{region_id}}{name}) ;
} elsif ($db{$table}{$qt_id}{city_id} or $db{$table}{$qt_id}{region_id}) {
my $city = $db{cities}{$db{$table}{$qt_id}{city_id}}{name} ;
$city .= qq~, $db{regions}{$db{$table}{$qt_id}{region_id}}{name}~ if $city and $db{$table}{$qt_id}{region_id} ;
&display_text ("City",$city) if $city ;
&display_text ("Region",$city) if $db{$table}{$qt_id}{region_id} and not $city ;
}
&display_text ("Venue",$venue) if $venue ;
if ($db{$table}{$qt_id}{poc_id}) {
my $poc_name = ($db{event_quotes_poc}{$db{$table}{$qt_id}{poc_id}}{name}) ? $db{event_quotes_poc}{$db{$table}{$qt_id}{poc_id}}{name} : "N/A" ;
&display_text ("Poc Name",$poc_name) ;
# my $value_ = $db{event_quotes_poc}{$db{$table}{$qt_id}{poc_id}}{contact_nr} ;
my $value_ = $db{event_quotes_poc}{$db{$table}{$qt_id}{poc_id}}{contact_nr} ;
$value_ =~ s/ //g ;
if (substr($value_,0,2) eq '27' && length($value_) == 11) {
$value_ = "+27 " . substr($value_,2,2) . " " . substr($value_,4,3) . " " . substr($value_,7,4) ;
} elsif ((substr($value_,0,2) eq '07' || substr($value_,0,2) eq '08' || substr($value_,0,2) eq '02') && length($value_) == 10) {
$value_ = "+27 " . substr($value_,1,2) . " " . substr($value_,3,3) . " " . substr($value_,6,4) ;
} else {
$value_ = $db{event_quotes_poc}{$db{$table}{$qt_id}{poc_id}}{contact_nr} ;
}
$value_ = "N/A" unless $value_ ;
2025-11-26 09:31:54 +00:00
2026-02-03 12:35:43 +00:00
&display_text ("Poc Contact Nr","$value_") ; #if $db{$table}{$qt_id}{poc_contact_nr} ;
}
&display_text ("Category 1",$db{event_quotes_categories}{$db{$table}{$qt_id}{category_id_1}}{category}) if $db{event_quotes_categories}{$db{$table}{$qt_id}{category_id_1}}{category} ;
my @a = split(/\|;\|/,$db{event_quotes_min}{$qt_id}{category_details}) ;
&display_text ("Category 1 Sub Categories",$a[0]) if $a[0] ;
&display_text ("Category 2",$db{event_quotes_categories}{$db{$table}{$qt_id}{category_id_2}}{category}) if $db{event_quotes_categories}{$db{$table}{$qt_id}{category_id_2}}{category} ;
&display_text ("Category 2 Sub Categories",$a[1]) if $a[1] ;
if ($db{$table}{$qt_id}{recipient_id}) {
2025-11-26 09:31:54 +00:00
2026-02-03 12:35:43 +00:00
my $rec_name = ($db{event_quotes_recipient}{$db{$table}{$qt_id}{recipient_id}}{name}) ? $db{event_quotes_recipient}{$db{$table}{$qt_id}{recipient_id}}{name} : "N/A" ;
my $rec_nr = ($db{event_quotes_recipient}{$db{$table}{$qt_id}{recipient_id}}{contact_nr}) ? $db{event_quotes_recipient}{$db{$table}{$qt_id}{recipient_id}}{contact_nr} : "N/A" ;
2025-11-26 09:31:54 +00:00
2026-02-03 12:35:43 +00:00
&display_text ("Recipient Name",$rec_name) ;
2025-11-26 09:31:54 +00:00
2026-02-03 12:35:43 +00:00
$rec_nr =~ s/ //g ;
if (substr($rec_nr,0,2) eq '27' && length($rec_nr) == 11) {
$rec_nr = "+27 " . substr($rec_nr,2,2) . " " . substr($rec_nr,4,3) . " " . substr($rec_nr,7,4) ;
} elsif ((substr($rec_nr,0,2) eq '07' || substr($rec_nr,0,2) eq '08' || substr($rec_nr,0,2) eq '02') && length($rec_nr) == 10) {
$rec_nr = "+27 " . substr($rec_nr,1,2) . " " . substr($rec_nr,3,3) . " " . substr($rec_nr,6,4) ;
}
2025-11-26 09:31:54 +00:00
2026-02-03 12:35:43 +00:00
&display_text ("Recipient Nr",$rec_nr) ;
2025-11-26 09:31:54 +00:00
}
2026-02-03 12:35:43 +00:00
&display_text ("Additional Notes",$db{$table}{$qt_id}{additional_notes}) if $db{$table}{$qt_id}{additional_notes} ;
&display_text ("Format of Title",$db{$table}{$qt_id}{format_of_title}) if $db{$table}{$qt_id}{format_of_title} ;
2025-11-26 09:31:54 +00:00
2026-02-03 12:35:43 +00:00
# &pdf_bar(60,$db{$table}{$qt_id}{format_of_title},120,0,1) ;
$up -= $next_line_space ;
2025-11-26 09:31:54 +00:00
}
2026-02-03 12:35:43 +00:00
$up+=1.25 ;
&pdf_box_block_bottom(10,200,'#969696') ; # end block -------------------------------------
}
2025-11-26 09:31:54 +00:00
$inner_blue_box = 0 ;
unless ($db{$table}{$qt_id}{excl_purchase_summary}) {
}
2026-02-03 12:35:43 +00:00
my $analytics_sql_where = ($event_or_analytics eq 'analytics') ? "id= '$qt_id'" : "event_quote_id <> '0' AND event_quote_id = '$qt_id'" ;
# &db_min_ro('analytics_event_bookings','id,event_quote_id,fixtures_saved_values,analytics_saved_values,start_date_time,sport_type_ids,event_name',"event_quote_id <> '0' AND event_quote_id = '$qt_id'",'','') ;
&db_min_ro('analytics_event_bookings','id,event_quote_id,fixtures_saved_values,analytics_saved_values,start_date_time,sport_type_ids,event_name',"$analytics_sql_where",'','') ;
2025-11-26 09:31:54 +00:00
# our $analytics_event_exists = ($db{analytics_event_bookings}{$qt_id}{event_quote_id}) ? 1 : 0 ;
our $analytics_event_exists = 0 ;
foreach (keys %{$db{analytics_event_bookings}}) {
$analytics_event_exists = 1 ;
}
if ($analytics_event_exists) {
&db_switch_conn('sss') ;
&db_min_ro('teams','id,name','','','') ;
&db_switch_conn('aisa') ;
# our @months = ("","January","February","March","April","May","June","July","August","September","October","November","December") ;
my @fixtures_saved_values = () ; my @analytics_saved_values_arr = () ; my %analytics_saved_values = () ;
our @months = ("","Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec") ;
our $analytics_table_body = qq~~ ; our $analytics_table = qq~~ ;
my $text2 = $page->text;
my $font2 = $pdf->corefont('Helvetica'); # built-in font
my $size2 = 13/pt ;
$text2->font($font2, $size2);
foreach my $id (keys %{$db{analytics_event_bookings}}) {
$sort_field{27} = 'fixture_date/Time_from' ;
$sort_field{28} = 'sport' ;
$sort_field{29} = 'team' ;
$sort_field{30} = 'home_vs_opp_team' ;
$sort_field{31} = 'stream_forwarding' ;
$sort_field{32} = 'stream_key' ;
$sort_field{33} = 'stream_URL' ;
$db{analytics_event_bookings}{$id}{fixtures_saved_values} =~ s/\|+$// ;
$db{analytics_event_bookings}{$id}{analytics_saved_values} = ";;" unless $db{analytics_event_bookings}{$id}{analytics_saved_values} ;
@analytics_saved_values_arr = split(/\|/,$db{analytics_event_bookings}{$id}{analytics_saved_values}) ;
$db{analytics_event_bookings}{$id}{fixtures_saved_values} = ";;;" unless $db{analytics_event_bookings}{$id}{fixtures_saved_values} ;
@fixtures_saved_values = split(/\|/,$db{analytics_event_bookings}{$id}{fixtures_saved_values}) ;
my $nr_of_rows = scalar @fixtures_saved_values ;
$nr_of_rows = scalar @analytics_saved_values_arr if scalar @analytics_saved_values_arr > $nr_of_rows ;
my $fixtures_row_cnt = 0 ;
foreach my $data (@fixtures_saved_values) {
my @abc = split(/\;/,$data) ;
$fixtures_row_cnt++ ;
$analytics_saved_values{$id}{$fixtures_row_cnt}{$sort_field{27}} = ($abc[0]) ? &common_min_date_as_string($abc[0]) : ($db{analytics_event_bookings}{$id}{start_date_time}) ? &common_min_date_as_string($db{analytics_event_bookings}{$id}{start_date_time}) : &common_min_date_as_string("$now_year-$now_mm-$now_dd 08:00:00") ;
$analytics_saved_values{$id}{$fixtures_row_cnt}{$sort_field{28}} = ($abc[1]) ? $db{sport_types}{$abc[1]}{name} : ($db{analytics_event_bookings}{$id}{sport_type_ids} && $db{analytics_event_bookings}{$id}{sport_type_ids} !~ /;/) ? $db{sport_types}{$db{analytics_event_bookings}{$id}{sport_type_ids}}{name} : "N/A" ;
$analytics_saved_values{$id}{$fixtures_row_cnt}{$sort_field{29}} = ucfirst $abc[2] . ' ' . uc $abc[3] ;
$analytics_saved_values{$id}{$fixtures_row_cnt}{$sort_field{30}} = ($abc[4] && $abc[6]) ? $db{teams}{$abc[4]}{name} . ' VVVVVSSSS ' . $db{teams}{$abc[6]}{name} : ($abc[4]) ? $db{teams}{$abc[4]}{name} . ' VVVVVSSSS N/A' : ($abc[6]) ? 'N/A VVVVVSSSS ' . $db{teams}{$abc[6]}{name} : "" ;
}
my $analytics_row_cnt = 0 ;
foreach (@analytics_saved_values_arr) {
my @abc = split(/\;/,$_) ;
$analytics_row_cnt++ ;
$analytics_saved_values{$id}{$analytics_row_cnt}{$sort_field{31}} = ($abc[0] eq '1') ? "Yes" : ($abc[0] eq '2') ? "No" : "" ;
2026-02-03 12:35:43 +00:00
$abc[1] =~ s/\_semi_colon_character_/\;/g ;
$abc[2] =~ s/\_semi_colon_character_/\;/g ;
$abc[1] =~ s/\_pipe_character_/\|/g ;
$abc[2] =~ s/\_pipe_character_/\|/g ;
2025-11-26 09:31:54 +00:00
$analytics_saved_values{$id}{$analytics_row_cnt}{$sort_field{32}} = $abc[1] ;
$analytics_saved_values{$id}{$analytics_row_cnt}{$sort_field{33}} = $abc[2] ;
}
if ($analytics_row_cnt > $fixtures_row_cnt) {
for ($fixtures_row_cnt + 1 .. $analytics_row_cnt) {
$analytics_saved_values{$id}{$_}{$sort_field{27}} = ($db{analytics_event_bookings}{$id}{start_date_time}) ? &common_min_date_as_string($db{analytics_event_bookings}{$id}{start_date_time}) : &common_min_date_as_string("$now_year-$now_mm-$now_dd 08:00:00") ;
$analytics_saved_values{$id}{$_}{$sort_field{28}} = ($db{analytics_event_bookings}{$id}{sport_type_ids} && $db{analytics_event_bookings}{$id}{sport_type_ids} !~ /;/) ? $db{sport_types}{$db{analytics_event_bookings}{$id}{sport_type_ids}}{name} : "N/A" ;
}
}
# foreach my $row_cnt (keys %analytics_saved_values) {
# foreach my $col (keys %{$analytics_saved_values{$row_cnt}}) {
# # $analytics_saved_values{$row_cnt}{$col} = ($analytics_saved_values{$row_cnt}{$col}) ? $analytics_saved_values{$row_cnt}{$col} : '-->None<--' ;
# }
# }
# last ;
}
my %col_widths = () ;
my $asd = 80 ;
my $_27_narrow = 17.5 ;
my $_31_narrow = 18.5 ;
my $_31_extra_narrow = 9.5 ;
my $_33_narrow = 9.5 ;
my $_32_narrow = 8.5 ;
$col_widths{$sort_field{27}} = 17.5 ;
$col_widths{$sort_field{28}} = 8 ;
$col_widths{$sort_field{29}} = 8 ;
$col_widths{$sort_field{30}} = 27 ;
$col_widths{$sort_field{31}} = 26 ;
$col_widths{$sort_field{32}} = 15.5 ;
$col_widths{$sort_field{33}} = 16.5 ;
# $col_widths{$sort_field{31}} = 5 ;
# $col_widths{$sort_field{32}} = 8.5 ;
# $col_widths{$sort_field{33}} = 10 ;
my %orig_col_widths = %col_widths ;
foreach my $analytics_id (sort { $b <=> $a } keys %analytics_saved_values) {
next unless $analytics_id ;
%col_widths = %orig_col_widths ;
my $pos_cat = 15 ;
my %rows_required = () ; my %max_rows_required = () ;
my %max_col_width_excl_heading = () ; my %split_teams = () ;
foreach my $row_cnt (sort { $a <=> $b } keys %{$analytics_saved_values{$analytics_id}}) {
$max_rows_required{$row_cnt} = 1 ;
for $col_cnt (27 .. 31) {
$rows_required{$row_cnt}{$col_cnt} = 1 ;
if ($analytics_saved_values{$analytics_id}{$row_cnt}{$sort_field{$col_cnt}}) {
$analytics_saved_values{$analytics_id}{$row_cnt}{$sort_field{$col_cnt}} = " $analytics_saved_values{$analytics_id}{$row_cnt}{$sort_field{$col_cnt}} " ;
# $analytics_saved_values{$analytics_id}{$row_cnt}{$sort_field{$col_cnt}} = lc $analytics_saved_values{$analytics_id}{$row_cnt}{$sort_field{$col_cnt}} ;
my $line_width = $text->advancewidth($analytics_saved_values{$analytics_id}{$row_cnt}{$sort_field{$col_cnt}});
$line_width -= 40.024 if $col_cnt == 30 && $analytics_saved_values{$analytics_id}{$row_cnt}{$sort_field{$col_cnt}} && $analytics_saved_values{$analytics_id}{$row_cnt}{$sort_field{$col_cnt}} =~ /VVVVVSSSS/ ; ## VVVSSS
$line_width = $line_width*mm ;
$col_widths{$sort_field{$col_cnt}} = $line_width if $col_widths{$sort_field{$col_cnt}} < $line_width ;
$max_col_width_excl_heading{$sort_field{$col_cnt}} = $line_width if !$max_col_width_excl_heading{$sort_field{$col_cnt}} || $max_col_width_excl_heading{$sort_field{$col_cnt}} < $line_width ;
}
}
$rows_required{$row_cnt}{32} = 1 ;
if ($analytics_saved_values{$analytics_id}{$row_cnt}{$sort_field{32}}) {
$rows_required{$row_cnt}{32} = 0 ;
my $row_cnt2 = 0 ;
foreach (split("\n",$analytics_saved_values{$analytics_id}{$row_cnt}{$sort_field{32}})) {
next unless $_ ;
$rows_required{$row_cnt}{32}++ ;
my $line_width = $text->advancewidth(" $_ ") ;
$line_width = $line_width*mm ;
$col_widths{$sort_field{32}} = $line_width if $col_widths{$sort_field{32}} < $line_width ;
$max_col_width_excl_heading{$sort_field{32}} = $line_width if !$max_col_width_excl_heading{$sort_field{32}} || $max_col_width_excl_heading{$sort_field{32}} < $line_width ;
$row_cnt2++ ;
$max_rows_required{$row_cnt} = $row_cnt2 if $row_cnt2 > $max_rows_required{$row_cnt} ;
}
}
if ($analytics_saved_values{$analytics_id}{$row_cnt}{$sort_field{33}}) {
$rows_required{$row_cnt}{33} = 2 ;
$max_rows_required{$row_cnt} = 2 if $max_rows_required{$row_cnt} < 2 ;
}
}
$up -= 5 ;
if ($up < 30+($max_rows_required{1}-1)*3.5) {
&pdf_check_value_of_up(30+($max_rows_required{1}-1)*3.5) ;
$up -= 6 ;
}
my $heading = "ANALYTICS INFO - $db{analytics_event_bookings}{$analytics_id}{event_name} [$analytics_id]" ;
my $width4 = $text2->advancewidth($heading);
$width4 = $width4*mm ;
$width4 = 10 + (190-$width4)/2 ;
$width4 = 12 if $width4 < 12 ;
&pdf_bar(10,$up,200,$up,'#969696',$heading,20,$width4) ; #EEEEEE
$up -= 5;
&pdf_box_block_top(10,200,'#969696') ; # start block -------------------------------------
$up -= 5 ;
my $tot_width = 0 ; my $tot_ideal_width = 180 ;
foreach (keys %col_widths) {
$tot_width += $col_widths{$_} ;
$tot_width += 1 ;
}
$tot_width -= 1 ;
my %prev_col_widths = %col_widths ;
# my $tot_extra_width = $tot_width - $tot_ideal_width ;
if ($tot_width > $tot_ideal_width) {
$col_widths{$sort_field{31}} = $_31_narrow ;
$tot_width -= ($prev_col_widths{$sort_field{31}} - $col_widths{$sort_field{31}}) ;
$prev_col_widths{$sort_field{31}} = $col_widths{$sort_field{31}} ;
}
if ($tot_width > $tot_ideal_width) {
$col_widths{$sort_field{31}} = $_31_extra_narrow ;
$tot_width -= ($prev_col_widths{$sort_field{31}} - $col_widths{$sort_field{31}}) ;
}
if ($tot_width > $tot_ideal_width) {
$col_widths{$sort_field{33}} = $_33_narrow ;
$tot_width -= ($prev_col_widths{$sort_field{33}} - $col_widths{$sort_field{33}}) ;
}
if ($tot_width > $tot_ideal_width) {
if ($max_col_width_excl_heading{$sort_field{32}} < $col_widths{$sort_field{32}}) {
$col_widths{$sort_field{32}} = $_32_narrow ;
$tot_width -= ($prev_col_widths{$sort_field{32}} - $col_widths{$sort_field{32}}) ;
}
}
if ($tot_width > $tot_ideal_width) {
$col_widths{$sort_field{27}} = $_27_narrow ;
$tot_width -= ($prev_col_widths{$sort_field{27}} - $col_widths{$sort_field{27}}) ;
}
if ($tot_width > $tot_ideal_width) {
my $max_total_len = 0 ; my $max_single_len = 0 ; my %tot_widths = () ;
foreach my $row_cnt (keys %{$analytics_saved_values{$analytics_id}}) {
my ($home_team,$away_team) = split(/\ VVVVVSSSS /,$analytics_saved_values{$analytics_id}{$row_cnt}{$sort_field{30}}) ;
$home_team = "N/A" unless $home_team ;
$away_team = "N/A" unless $away_team ;
my $line_width1 = $text->advancewidth(" $home_team vs ") ;
my $line_width2 = $text->advancewidth(" $away_team ") ;
my $line_width3 = $text->advancewidth(" $away_team vs $away_team ") ;
$line_width1 = $line_width1*mm;
$line_width2 = $line_width2*mm;
$line_width3 = $line_width3*mm;
$tot_widths{$row_cnt} = $line_width3 ;
$max_single_len = $line_width1 if $line_width1 > $max_single_len ;
$max_single_len = $line_width2 if $line_width2 > $max_single_len ;
$max_total_len = $line_width3 if $line_width3 > $max_total_len ;
}
$col_widths{$sort_field{30}} = $max_single_len ;
$tot_width -= ($prev_col_widths{$sort_field{30}} - $col_widths{$sort_field{30}}) ;
foreach my $row_cnt (keys %{$analytics_saved_values{$analytics_id}}) {
if ($tot_widths{$row_cnt} <= $max_single_len) {
$split_teams{$row_cnt} = 0 ;
} else {
$split_teams{$row_cnt} = 1 ;
$rows_required{$row_cnt}{30} = 2 ;
$max_rows_required{$row_cnt} = 2 if !$max_rows_required{$row_cnt} || $max_rows_required{$row_cnt} < 2 ;
}
}
}
if ($tot_width < $tot_ideal_width) {
$col_widths{$sort_field{32}} += ($tot_ideal_width - $tot_width) ;
}
my $up_orig = $up ;
my $min_up = $up ;
my %max_line_cnt = () ; my %row_height = () ; my %analytics_saved_values_new = () ;
foreach my $row_cnt (sort { $a <=> $b } keys %{$analytics_saved_values{$analytics_id}}) {
$max_line_cnt{$row_cnt} = 1 unless $max_line_cnt{$row_cnt} ;
my $line_width1 = $text->advancewidth(" 11-Aug-2025 ") ;
# my $line_width2 = $text->advancewidth("Stream URL ");
# my $line_width3 = $text->advancewidth("S/Key ");
$line_width1 = $line_width1*mm ;
# $line_width2 = $line_width2*mm ;
# $line_width3 = $line_width3*mm ;
# $line_width1 = $line_width1;
# $line_width1 = $line_width1;
if ($analytics_saved_values{$analytics_id}{$row_cnt}{$sort_field{32}}) {
my $total_line_width = $text->advancewidth($analytics_saved_values{$analytics_id}{$row_cnt}{$sort_field{32}});
my $max_line_width = 220 ;
my $prev_line_text = "" ; my $line_cnt = 0 ; my $line_text = "" ;
if ($total_line_width > $max_line_width) {
foreach (split(/ /,$analytics_saved_values{$analytics_id}{$row_cnt}{$sort_field{32}})) {
$line_text .= "$_" ;
my $line_text_width = $text->advancewidth($line_text) ;
my $prev_line_text_width = $text->advancewidth($prev_line_text) ;
$line_text .= " " ; $prev_line_text .= " " if $prev_line_text ;
if ($prev_line_text_width <= $max_line_width && $max_line_width < $line_text_width) {
chop $prev_line_text if $prev_line_text ;
$analytics_saved_values_new{$sort_field{$col_cnt}}{$row_cnt} .= "$prev_line_text
" ;
$up-=3.5 ; $line_cnt++ ; $line_text = "$_ " ; $prev_line_text = "$_ " ;
$max_line_cnt{$row_cnt} = $line_cnt if $line_cnt > $max_line_cnt{$row_cnt} ;
} else {
$prev_line_text .= "$_" ;
}
}
if ($line_text) {
chop $line_text if $line_text ;
$analytics_saved_values_new{$sort_field{$col_cnt}}{$row_cnt} .= "$line_text
" ;
$up-=3.5 ; $line_cnt++ ; $line_text = "" ; $prev_line_text = "" ;
$max_line_cnt{$row_cnt} = $line_cnt if $line_cnt > $max_line_cnt{$row_cnt} ;
}
$up += 3.5*$line_cnt ;
} else {
$analytics_saved_values_new{$sort_field{$col_cnt}}{$row_cnt} .= "$prev_line_text
" ;
}
}
}
my $up_orig = $up ;
foreach my $row_cnt (sort { $a <=> $b } keys %{$analytics_saved_values{$analytics_id}}) {
next unless $row_cnt ;
if ($row_cnt == 1) {
for my $col_cnt (27 .. 33) {
my $table_header = join(" ", map { ucfirst $_ } split (/\_/, $sort_field{$col_cnt})) ;
if ($sort_field{$col_cnt} eq 'fixture_date/Time_from') {
&pdf_small_bold_text ($pos_cat,$up,"Date Time") ;
# $up -= 3.25 ;
# &pdf_small_bold_text ($pos_cat,$up,"/Time From") ;
# $up += 3.25 ;
} elsif ($sort_field{$col_cnt} eq 'age_group') {
# &pdf_small_bold_text ($pos_cat,$up,"Age") ;
# $up -= 3.25 ;
# &pdf_small_bold_text ($pos_cat,$up,"Group") ;
# $up += 3.25 ;
} elsif ($sort_field{$col_cnt} eq 'stream_forwarding') {
if ($col_widths{$sort_field{31}} == $_31_narrow) {
&pdf_small_bold_text ($pos_cat,$up,"S/Forwarding") ;
} elsif ($col_widths{$sort_field{31}} == $_31_extra_narrow) {
&pdf_small_bold_text ($pos_cat,$up,"S/F") ;
} else {
&pdf_small_bold_text ($pos_cat,$up,"Stream Forwarding") ;
}
} elsif ($sort_field{$col_cnt} eq 'stream_key') {
if ($col_widths{$sort_field{32}} == $_32_narrow) {
&pdf_small_bold_text ($pos_cat,$up,"S/Key") ;
} else {
&pdf_small_bold_text ($pos_cat,$up,"Stream Key") ;
}
} elsif ($sort_field{$col_cnt} eq 'stream_URL') {
if ($col_widths{$sort_field{33}} == $_33_narrow) {
&pdf_small_bold_text ($pos_cat,$up,"S/URL") ;
} else {
&pdf_small_bold_text ($pos_cat,$up,"Stream URL") ;
}
# $up -= 3.25 ;
# &pdf_small_bold_text ($pos_cat,$up,"Forwarding") ;
# $up += 3.25 ;
} else {
&pdf_small_bold_text ($pos_cat,$up,"$table_header") ;
}
$pos_cat += $col_widths{$sort_field{$col_cnt}} + 1 ;
}
# $up -= 3.25 ;
$up_orig = $up ;
}
$pos_cat = 15 ;
$up -= 5 ;
if (($rows_required{$row_cnt}{27} > 1 || $col_widths{$sort_field{27}} == $_27_narrow) && $max_rows_required{$row_cnt} < 2) {
$max_rows_required{$row_cnt} = 2 ;
}
$max_rows_required{$row_cnt} = 1 unless $max_rows_required{$row_cnt} ;
my $remaining_space_required = 15 + 3.5*($max_rows_required{$row_cnt} - 1) ;
if ($up < $remaining_space_required) {
$up = 10 ;
&pdf_box_block_bottom(10,200,'#969696') ; # end block -------------------------------------
&pdf_check_value_of_up($remaining_space_required) ;
&pdf_box_block_top(10,200,'#969696') ; # start block -------------------------------------
$up -= 6 ;
}
$up_orig = $up ;
for my $col_cnt (27 .. 33) {
$analytics_saved_values{$analytics_id}{$row_cnt}{$sort_field{$col_cnt}} = "" if $analytics_saved_values{$analytics_id}{$row_cnt}{$sort_field{$col_cnt}} eq '-->None<--' ;
$rows_required{$row_cnt}{$col_cnt} = 1 unless $rows_required{$row_cnt}{$col_cnt} ;
if ($col_cnt == 27) {
if ($rows_required{$row_cnt}{$col_cnt} > 1 || $col_widths{$sort_field{$col_cnt}} == $_27_narrow) {
$rows_required{$row_cnt}{$col_cnt} = 2 ;
$max_rows_required{$row_cnt} = 2 if $max_rows_required{$row_cnt} < 2 ;
&pdf_bar($pos_cat,$up+1,$pos_cat+$col_widths{$sort_field{$col_cnt}},$up+1,'#EEEEEE',substr($analytics_saved_values{$analytics_id}{$row_cnt}{$sort_field{$col_cnt}},0,12),10,$pos_cat,'small','small_black',1) ;
$up -= 3.5 ;
&pdf_bar($pos_cat,$up+1,$pos_cat+$col_widths{$sort_field{$col_cnt}},$up+1,'#EEEEEE',' ' . substr($analytics_saved_values{$analytics_id}{$row_cnt}{$sort_field{$col_cnt}},13,7),10,$pos_cat,'small','small_black',1) ;
} else {
&pdf_bar($pos_cat,$up+1,$pos_cat+$col_widths{$sort_field{$col_cnt}},$up+1,'#EEEEEE',$analytics_saved_values{$analytics_id}{$row_cnt}{$sort_field{$col_cnt}},10,$pos_cat,'small','small_black',1) ;
}
} elsif ($col_cnt == 28) {
# my @sport_split = () ;
# if (length($analytics_saved_values{$analytics_id}{$row_cnt}{$sort_field{$col_cnt}}) > 10) {
# @sport_split = split(/ /,$analytics_saved_values{$analytics_id}{$row_cnt}{$sort_field{$col_cnt}}) ;
# } else {
# push @sport_split, $analytics_saved_values{$analytics_id}{$row_cnt}{$sort_field{$col_cnt}} ;
# }
&pdf_bar($pos_cat,$up+1,$pos_cat+$col_widths{$sort_field{$col_cnt}},$up+1,'#EEEEEE',"$analytics_saved_values{$analytics_id}{$row_cnt}{$sort_field{$col_cnt}}",10,$pos_cat,'small','small_black',1) ;
} elsif ($col_cnt == 30) {
my @teams_split = () ;
if ($split_teams{$row_cnt}) {
@teams_split = split(/\ VVVVVSSSS /,$analytics_saved_values{$analytics_id}{$row_cnt}{$sort_field{$col_cnt}}) ;
&pdf_bar($pos_cat,$up+1,$pos_cat+$col_widths{$sort_field{$col_cnt}},$up+1,'#EEEEEE',"$teams_split[0] vs",10,$pos_cat,'small','small_black',1) ;
$up -= 3.5 ;
&pdf_bar($pos_cat,$up+1,$pos_cat+$col_widths{$sort_field{$col_cnt}},$up+1,'#EEEEEE'," $teams_split[1]",10,$pos_cat,'small','small_black',1) ;
} else {
$analytics_saved_values{$analytics_id}{$row_cnt}{$sort_field{$col_cnt}} =~ s/\VVVVVSSSS/\vs/g ;
&pdf_bar($pos_cat,$up+1,$pos_cat+$col_widths{$sort_field{$col_cnt}},$up+1,'#EEEEEE',"$analytics_saved_values{$analytics_id}{$row_cnt}{$sort_field{$col_cnt}}",10,$pos_cat,'small','small_black',1) ;
}
} elsif ($col_cnt == 32) {
# chomp $analytics_saved_values_new{$sort_field{$col_cnt}}{$row_cnt} ;
# my $new_line_cnt = 1 ;
if ($analytics_saved_values{$analytics_id}{$row_cnt}{$sort_field{$col_cnt}}) {
foreach (split("\n",$analytics_saved_values{$analytics_id}{$row_cnt}{$sort_field{$col_cnt}})) {
&pdf_bar($pos_cat,$up+1,$pos_cat+$col_widths{$sort_field{$col_cnt}},$up+1,'#EEEEEE'," $_ ",10,$pos_cat,'small','small_black',1) ;
$up -= 3.5 ;
# $new_line_cnt++ ;
}
$up += 3.5 ;
} else {
&pdf_bar($pos_cat,$up+1,$pos_cat+$col_widths{$sort_field{$col_cnt}},$up+1,'#EEEEEE',"",10,$pos_cat,'small','small_black',1) ;
}
# &pdf_bar($pos_cat,$up+1,$pos_cat+$col_widths{$sort_field{$col_cnt}},$up+1,'#EEEEEE',"$analytics_saved_values{$analytics_id}{$row_cnt}{$sort_field{$col_cnt}}",10,$pos_cat,'small','small_black',1) ;
# &pdf_bar($pos_cat,$up+1,$pos_cat+$col_widths{$sort_field{$col_cnt}},$up+1,'#EEEEEE',"",10,$pos_cat,'small','small_black',1) unless $analytics_saved_values_new{$sort_field{$col_cnt}}{$row_cnt} ;
# $new_line_cnt = 1 unless $analytics_saved_values_new{$sort_field{$col_cnt}}{$row_cnt} ;
} elsif ($col_cnt == 33) {
if ($analytics_saved_values{$analytics_id}{$row_cnt}{$sort_field{$col_cnt}}) {
$pos_cat += 3.5 if $col_widths{$sort_field{$col_cnt}} == 16.5 ;
&pdf_add_URL_link($pos_cat,$up,"$analytics_saved_values{$analytics_id}{$row_cnt}{$sort_field{$col_cnt}}","$htmlpath/img/icons/event_details_pdf_url_icon.PNG") ;
$pos_cat -= 3.5 if $col_widths{$sort_field{$col_cnt}} == 16.5 ;
&pdf_bar($pos_cat,$up+1,$pos_cat+$col_widths{$sort_field{$col_cnt}},$up+1,'#EEEEEE',"",10,$pos_cat,'small','small_black',1) ;
$up -= 3.5 ;
&pdf_bar($pos_cat,$up+1,$pos_cat+$col_widths{$sort_field{$col_cnt}},$up+1,'#EEEEEE',"",10,$pos_cat,'small','small_black',1) ;
} else {
&pdf_bar($pos_cat,$up+1,$pos_cat+$col_widths{$sort_field{$col_cnt}},$up+1,'#EEEEEE',"",10,$pos_cat,'small','small_black',1) ;
}
} else {
&pdf_bar($pos_cat,$up+1,$pos_cat+$col_widths{$sort_field{$col_cnt}},$up+1,'#EEEEEE',"$analytics_saved_values{$analytics_id}{$row_cnt}{$sort_field{$col_cnt}}",10,$pos_cat,'small','small_black',1) ;
}
for ($rows_required{$row_cnt}{$col_cnt} + 1 .. $max_rows_required{$row_cnt}) {
$up -= 3.5 ;
&pdf_bar($pos_cat,$up+1,$pos_cat+$col_widths{$sort_field{$col_cnt}},$up+1,'#EEEEEE',"",10,$pos_cat,'small','small_black',1) ;
}
$up = $up_orig ;
$pos_cat += $col_widths{$sort_field{$col_cnt}} + 1 ;
# $up -= 3.5 ;
}
$up -= 3.5*($max_rows_required{$row_cnt} - 1) ;
}
$up -= 5 ;
&pdf_box_block_bottom(10,200,'#969696') ; # end block -------------------------------------
}
if ($up < 52) {
&pdf_box_block_bottom(10,200,'#969696') ; # end block -------------------------------------
&pdf_check_value_of_up(52) ;
&pdf_box_block_top(10,200,'#969696') ; # start block -------------------------------------
$up -= 6 ;
}
$up -= 5 ;
&pdf_small_bold_text (15,$up,"Please follow these guidelines:") ;
$up -= 5 ;
&pdf_small_text(15,$up,"1. Please ensure you have been added to the temporary WhatsApp group called \"Streams for Analytics\" before game day.") ; $up -= 4 ;
&pdf_small_text(15,$up,"2. Ensure the start of the game is captured.") ; $up -= 4 ;
&pdf_small_text(15,$up,"3. Ensure the final whistle of the game is captured.") ; $up -= 4 ;
&pdf_small_text(15,$up,"4. For quarter-finals, semi-finals and finals, a penalty shoot-out may occur - end times should be extended to") ; $up -= 4 ;
&pdf_small_text(15,$up,"5. Team colours must be accurately reflected on the scoreboard.") ; $up -= 4 ;
&pdf_small_text(15,$up,"6. The scoreboard must reflect the score accurately at all times, as best as possible.") ; $up -= 4 ;
&pdf_small_text(15,$up,"7. Stream-forwarding details have been added to the event to allow live coding from YouTube. If the event needs to be recreated, the support team") ; $up -= 4 ;
&pdf_small_text(15,$up," must be informed so that the stream-forwarding details can be re-applied.") ; $up -= 4 ;
&pdf_small_text(15,$up,"8. If there is a delay to the match start time, the support team must be informed so the analysts can be updated.") ;
# &pdf_small_text(15,$up,"1. Capture start of the game.") ; $up -= 4 ;
# &pdf_small_text(15,$up,"2. Capture the final whistle of the game.") ; $up -= 4 ;
# &pdf_small_text(15,$up,"3. Quarters, semis and finals there could be a penalty shoot out - please extend your end time to include these in your same stream.") ; $up -= 4 ;
# &pdf_small_text(15,$up,"4. Team colours should reflect accurately on the scoreboard.") ; $up -= 4 ;
# &pdf_small_text(15,$up,"5. Scoreboard to reflect accurately as best you can.") ; $up -= 4 ;
# &pdf_small_text(15,$up,"6. We have added stream forward details to your event so we can code live from YouTube - if you need to recreate your event please let me know") ; $up -= 4 ;
# &pdf_small_text(15,$up," so I can read stream forwarding details.") ; $up -= 4 ;
# &pdf_small_text(15,$up,"7. If there is a delay in the start time of your match please let me know so I can update the analysts.") ;
# $up -= 4 ;
# $up = 10 ;
# &pdf_box_block_bottom(10,200,'#969696') ; # end block -------------------------------------
}
# my $page = $pdf->page;
# my $font = $pdf->corefont('Helvetica', -encoding => 'latin1');
# my $text = $page->text;
# my $size = 12;*
# $text->font($font, $size);0*-/-++
# $text->fillcolor('blue');
# # Position in points
# my $x = 50;
# my $y = 700;
# # Write the link text
# my $label = "Click Here";
# $text->translate($x, $y);
# $text->text($label);
# # Width/height for the annotation box
# # Bounding box for the link
# my $width = $font->width($label) * $size / 1000;
# my $height = $size;
# # Add the clickable annotation (note: use 'uri' not '-uri')
# $page->annotation(
# 50, 700, 250, 720,
# -uri => 'https://www.example.com',
# );
# my $page = $pdf->page();
# my ($llx, $lly, $urx, $ury) = (50, 700, 250, 720) ;
# my $annot = $page->annotation();
# $annot->url('https://www.example.com',-rect => [ $llx, $lly, $urx, $ury ]) ;
# my $font = $pdf->corefont('Helvetica');
# my $text = $page->text();
# $text->font($font, 12);
# $text->translate($llx, $lly + 5);
# $text->text('Visit Example.com');
} #------------------------------------------------------------------------------------------
sub pdf_add_URL_link {
my ($x1,$y1,$url,$icon_path) = @_ ;
return if !$x1 || !$y1 || !$url || !$pdf || !$page || !$icon_path ;
return unless -e $icon_path ;
my $gfx = $page->gfx ;
my $icon = $pdf->image_png($icon_path) ;
my $icon_width = 1 ;
my $icon_height = 1 ;
my $x2 = $x1 + $icon_width ;
my $y2 = $y1 + $icon_height ;
$gfx->image($icon,($x1+1.25)/mm,($y1-4)/mm, $icon_width/25.4) ;
my $annot = $page->annotation() ;
$annot->url($url, -rect => [($x1+1.25)/mm,($y1-4)/mm,($x1+7.25)/mm,($y1+2)/mm]) ;
} #-------------------------------------------------------------
# sub pdf_add_URL_link {
# my ($x1,$y1,$url) = @_ ;
# return if !$x1 || !$y1 || !$url ;
# my $total_line_width = $small_text->advancewidth("Click Here");
# $total_line_width = $total_line_width / 3 ;
# my $x2 = $x1 + $total_line_width ;
# my $y2 = $y1 + 1.7 ;
# my $annot = $page->annotation() ;
# $annot->url("$url",-rect => [$x1/mm,$y1/mm,$x2/mm,$y2/mm]) ;
# &pdf_small_blue_text($x1,$y1,"Click Here") ;
# &pdf_small_blue_text($x1+0.25,$y1,"________") ;
# } #------------------------------------------------------------------------------------------
sub display_text_block {
my ($name,$list_ids,$table_ids,$name_from_ids,$l_pos,$r_pos,$top_frame,$left_or_right,$split_by,$name_from_ids_2,$list_ids_2,$table_ids_2,$name_from_list_ids_2) = @_ ;
&pdf_small_bold_text ($pos_cat,$up,$name) ;
my @list_ids_2 = () ;
@list_ids_2 = split($split_by,$list_ids_2) if $list_ids_2 ;
$list_ids =~ s/$split_by/\\n/g;
my $cnt = 0 ;
} #------------------------------------------------------------------------------------------
sub display_text {
# my ($left_or_right,$heading,$text) = @_ ;
my ($heading,$text,$line_width) = @_ ;
# my $text_ = $page->text;
# my $font = $pdf->corefont('Helvetica'); # built-in font
# my $size = 8/pt ;
# $text_->font($font, $size);
$line_width = (!$line_width) ? 195 : $line_width ;
my $cnt_lines = 0 ; my $text_new = '' ; my $text_with_new_line = 0 ;
foreach my $line (split(/\n/,$text)) {
my $wrapped_line = '' ; $text_with_new_line++ ;
foreach my $word (split(/ /,$line)) {
my $word_length = length($word) ;
# my $word_length1 = $text->advancewidth("$word") ;
# print "\n word_length1 : $word_length1" ;
my $wrapped_line_length = length($wrapped_line) ;
if (length($wrapped_line) + length($wrapped_line) > $line_width) {
$cnt_lines++ ; $wrapped_line = '' ; $text_new .= '
' . $word ;
} else {
$wrapped_line .= $word . ' ' ;
$text_new .= $word . ' ' ;
}
}
$cnt_lines++ ;
$text_new .= $word . '
' ;
}
chomp $text_new if $text_new ;
$up = $up - $next_line_space ;
&pdf_small_bold_text ($pos_cat,$up,"$heading") ;
&pdf_bar($pos_des-2,$up+0.75,195,$up+0.75,'#EEEEEE',"$text_new",10,$pos_des,'small','small_black',1) if $cnt_lines == 1 ;
&pdf_bar($pos_des-2,$up+0.75-1.625*($cnt_lines-1),195,$up+0.75-1.625*($cnt_lines-1),'#EEEEEE',"$text_new",10+9*($cnt_lines-1),$pos_des,'small','small_black',2,$line_width) if $cnt_lines > 1 ;
# &pdf_bar($pos_des-2,$up-2.5,195,$up-2.5,'#EEEEEE',"[$text_new]",10+9*($cnt_lines-1),$pos_des,'small','small_black',2,150) if $cnt_lines == 3 ;
# &pdf_bar($pos_des-2,$up-4.125,195,$up-4.125,'#EEEEEE',"[$text_new]",10+9*($cnt_lines-1),$pos_des,'small','small_black',2,150) if $cnt_lines == 4 ;
# &pdf_bar($pos_des-2,$up-5.75,195,$up-5.75,'#EEEEEE',"[$text_new]",10+9*($cnt_lines-1),$pos_des,'small','small_black',2,150) if $cnt_lines == 5 ;
# return if $cnt_lines == 1 ;
# &pdf_bar($pos_des-2,$up+1,195,$up+1,'#EEEEEE',$text,10*$cnt_lines,$pos_des,'small','small_black',$cnt_lines,120) if $cnt_lines > 1 ;
$up+=1.25 if $cnt_lines > 1 ;
} #------------------------------------------------------------------------------------------
sub vertical_lines_inner_box {
&pdf_thin_black_line ($blocks[1],$top,$blocks[1],$up,'#969696') ; # vertical
&pdf_thin_black_line ($blocks[2],$top,$blocks[2],$up,'#969696') ; # vertical
&pdf_thin_black_line ($blocks[3],$top,$blocks[3],$up,'#969696') ; # vertical
&pdf_thin_black_line ($blocks[4],$top,$blocks[4],$up,'#969696') ; # vertical
&pdf_thin_black_line ($blocks[5],$top,$blocks[5],$up,'#969696') ; # vertical
} #----------------------------------------------------------------------------------------------------
sub vertical_lines_inner_box_t {
&pdf_thin_black_line ($tblocks[1],$top,$tblocks[1],$up,'#969696') ; # vertical
&pdf_thin_black_line ($tblocks[2],$top,$tblocks[2],$up,'#969696') ; # vertical
&pdf_thin_black_line ($tblocks[3],$top,$tblocks[3],$up,'#969696') ; # vertical
&pdf_thin_black_line ($tblocks[4],$top,$tblocks[4],$up,'#969696') ; # vertical
&pdf_thin_black_line ($tblocks[5],$top,$tblocks[5],$up,'#969696') ; # vertical
} #----------------------------------------------------------------------------------------------------
sub quote_pdf_footer {
&pdf_check_value_of_up(60);
$up = 90;
my $txt = qq~The parties hereby accept and agree to this quote, which incorporates by reference all the terms and conditions set forth in the Interactive Television Africa's Terms and Conditions document, attached hereto as Annexure A and the Service Level Agreement attached hereto as Annexure B (all, collectively with this quote, the "Agreement") effective as of the later of the signature dates below.~;
&pdf_text_block (10,$txt,120,3) ;
$up = $up - 10;
&pdf_medium_bold_text (10, $up, "Name:") ; &pdf_thin_black_line (30,$up,100,$up,'#969696') ; #&pdf_tiny_text (25, $up, "________________________________________________") ;
&pdf_medium_bold_text (110, $up, "Date:") ; &pdf_thin_black_line (130,$up,200,$up,'#969696') ;
$up = $up - 5;
&pdf_small_text (10, $up, "(Duly Authorised)") ;
$up = $up - 10;
&pdf_medium_bold_text (10, $up, "Company:") ; &pdf_thin_black_line (30,$up,100,$up,'#969696') ;
&pdf_medium_bold_text (110, $up, "Signature:") ; &pdf_thin_black_line (130,$up,200,$up,'#969696') ;
$up = $up - 15;
&pdf_medium_bold_text (10, $up, "Name:") ; &pdf_thin_black_line (30,$up,100,$up,'#969696') ;
&pdf_medium_bold_text (110, $up, "Date:") ; &pdf_thin_black_line (130,$up,200,$up,'#969696') ;
$up = $up - 5;
&pdf_small_text (10, $up, "(Duly Authorised on behalf of Interactive Television Africa)") ;
$up = $up - 10;
&pdf_medium_bold_text (110, $up, "Signature:") ;
&pdf_thin_black_line (130,$up,200,$up,'#969696') ;
} #------------------------------------------------------------------------------------------
sub quote_pdf_vars {
our @rboxtxt = (0,103,116,143,170,197) ;
our @boxtxt = (0,12,106,120,147,174) ;
our @blocks = (0,10,104,118,145,172) ;
our @tboxrtxt = (0,77,107,137,167,197) ;
our @tboxtxt = (0,12,82,112,142,172) ;
our @tblocks = (0,10,80,110,140,170) ;
} #-------------------------------------------------------------------------------
sub custom_date_txt {
my ($date) = @_ ;
return "Unknown" if not $date;
my $dt_txt = Date_to_Text(substr($date,0,4),substr($date,5,2),substr($date,8,2));
$dt_txt = substr($dt_txt,4) ;
return ($dt_txt) ;
} #------------------------------------------------------------------------------------------
sub check_space_on_page_custom {
my ($value) = @_ ;
if ($up < $value) {
&pdf_thin_black_line (10,$top,10,$up) ;
&vertical_lines_table; # draw vertical_lines on prematurely ended table
&pdf_initialise_page ;
$up=282 ;
$top=$up;
&pdf_thin_black_line(10,$up,200,$up) ;
$across = 1 ;
}
} #----------------------------------------------------------------------------------------------------
sub get_val {
my ($val,$cur) = @_ ;
my $disp_val = $val ;
if ($val eq '0.00') {
$disp_val = '' ;
} elsif ($val) {
$disp_val = $cur . ' ' . $val ;
}
# &common_min_debug($val);
return($disp_val);
} #------------------------------------------------------------------------------------------
sub vertical_lines_table {
unless ($exclude_rate) {
&pdf_thin_black_line ($blocks[2],$top,$blocks[2],$up) ; # vertical
&pdf_thin_black_line ($blocks[3],$top,$blocks[3],$up) ; # vertical
}
unless ($exclude_vat) {
&pdf_thin_black_line ($blocks[4],$top,$blocks[4],$up) ; # vertical
}
&pdf_thin_black_line ($blocks[5],$top,$blocks[5],$up) ; # vertical
&pdf_thin_black_line ($blocks[6],$top,$blocks[6],$up) ; # vertical
} #------------------------------------------------------------------------------------------
sub screen2 {
print <<ENDOFTEXT;
$dialog{'common'}{'head'}
<div id="content" class="col-lg-12 col-sm-12">
<CENTER>
<table height='100%' width='100%'>
<tr>
<td align='center'>
<iframe src='$useropts{'$domain'}/pdf/event_details/$pdfname' width='100%' height='100%' frameborder='0'></iframe>
</td>
</tr>
</table>
</div>
</body>
</html>
ENDOFTEXT
#
} #------------------------------------------------------------------------------------------
use db ;
use db_min ;
use dialog ;
use today ;
use common ;
use pdf ;
use tabs ;
1;