2025-11-26 09:31:54 +00:00
#!/usr/bin/perl
BEGIN { use lib '/usr/home/cfg' ; require push_inc ; }
use CGI qw( :standard ) ;
use CGI::Carp qw( fatalsToBrowser ) ;
use Date::Calc qw( :all ) ;
# use Date::Calc qw(Add_Delta_Days) ;
require cfg ;
print header ; # CGI.pm method
use POSIX ;
#------------------------------------------------------------------------------------------
@ ARGV = split ( /\\*\&/ , $ ENV { 'QUERY_STRING' } ) ;
our $ qid = $ ARGV [ 0 ] ;
our $ qaction = $ ARGV [ 1 ] ;
2026-02-03 12:35:43 +00:00
our $ event_or_analytics = ( $ qid eq 'event' ) ? "event" : ( $ qid eq 'analytics' ) ? "analytics" : "" ;
if ( $ qid eq 'event' || $ qid eq 'analytics' ) {
2025-11-26 09:31:54 +00:00
$ qid = $ qaction ;
$ qaction = 'view' ;
}
our ( $ q ) = CGI - > new ( ) ;
$ iaction = $ q - > param ( 'iaction' ) || $ qaction ;
$ id = $ q - > param ( 'id' ) || $ qid ;
our $ dialog = 1 ;
#------------------------------------------------------------------------------------------
our $ savjqy = 1 ;
our $ addbkb = 1 ;
# our $testing = 1 ;
# our $debug = 1 ;
our $ max_operators = 15 ;
#------------------------------------------------------------------------------------------
# &common_debug("dialog/events.pl [$iaction]") ;
& today ;
#-------- page opts --------------------------------------------------------------------------------------------------------------------------------------------------
$ table = 'events' ;
#---------------------------------------------------------------------------------------------------------------------------------------------------------------------
if ( $ iaction eq '' ) {
& load_events ;
& screen1 ;
}
if ( $ iaction eq 'add' ) {
& add_form ;
& screen2 ;
}
if ( $ iaction eq 'edit' ) {
& common_min_load_params ;
& edit_form ;
& screen2 ;
}
if ( $ iaction eq 'save' ) {
& common_min_load_params ;
& insert_events ;
& screen3 ;
}
if ( $ iaction eq 'update' ) {
& common_min_load_params ;
& update_events ;
& screen3 ;
}
if ( $ iaction eq 'delete' ) {
& common_min_load_params ;
& delete_events ;
& screen3 ;
}
if ( $ iaction eq 'view' ) {
& common_min_load_params ;
& view_form ;
& screen2 ;
}
if ( $ iaction eq 'available' or $ iaction eq 'unavailable' or $ iaction eq 'confirm' ) {
& common_min_load_params ;
& update_events_staff ;
& screen3 ;
}
# if ($iaction eq 'saveoperator'){
# &common_min_load_params ;
# &save_operator ;
# &screen3 ;
# }
exit ;
#------------------------------------------------------------------------------------------
# sub save_operator {
# $ignore{iaction} = 1 ;
# $ignore{event_quote_nr} = 1 ;
# &db_open_upd ;
# our $db_ignore_open_close = 1 ; # do one open and one close instead of repeating it
# @operators_a = split(/\,/,$i{operators_type_a}) ;
# @operators_b = split(/\,/,$i{operators_type_b}) ;
# my %selected_operator_a = () ;
# my %selected_operator_b = () ;
# for (@operators_a) {
# $selected_operators{$_} = 1;
# }
# for (@operators_b) {
# $selected_operators{$_} = 1;
# }
# my %operator_type = () ;
# &db_min_ro('users','id,user_type',"user_type LIKE 'casual%'",'','') ;
# foreach (keys %{$db{users}}) {
# $operator_type{$_} = uc substr($db{users}{$_}{user_type},-1,1) ;
# }
# # my @db_operators_a = () ; foreach (@operators_a) { push @db_operators_a, $_ ; }
# # my @db_operators_b = () ; foreach (@operators_b) { push @db_operators_b, $_ ; }
# # my $operators_a = join(',',@db_operators_a) ;
# # my $operators_b = join(',',@db_operators_b) ;
# $ignore{operators_type_a} = 1 ;
# $ignore{operators_type_b} = 1 ;
# %exist_col = () ;
# # for (1 .. $max_operators) {
# push @sql_fields, "operator_workings_event" ;
# push @sql_fields, "description_workings_event" ;
# push @sql_fields, "qty_workings_event" ;
# push @sql_fields, "amount_usd_workings_event" ;
# # }
# my $select = join(",", @sql_fields) ;
# &db_min_ro('event_quotes_min',"id,$select","quote_nr='$i{event_quote_nr}'",'','') ;
# my %seen_operator = () ;
# my $first_avail_col = 0 ;
# my $col = 0 ;
# my @deselected_operator_a = () ;
# my @deselected_operator_b = () ;
# # for (1 .. $max_operators) {
# # $col = $max_operators - $_ + 1 ;
# # last if $db{event_quotes}{$i{event_quote_nr}}{"description_$col\_workings_event"} ;
# # $first_avail_col = $col ;
# # }
# # for (1 .. $max_operators) {
# my $op_id = $db{event_quotes}{$i{event_quote_nr}}{"operator_$_\_workings_event"} ;
# if ($op_id and not $selected_operators{$op_id}){
# $i{"operator_$_\_workings_event"} = '' ;
# $i{"description_$_\_workings_event"} = '' ;
# $i{"qty_$_\_workings_event"} = 0 ;
# $i{"amount_usd_$_\_workings_event"} = '0.00' ;
# # }
# # next unless $op_id ;
# # $seen_operator{$op_id} = 1 ;
# }
# # }
# my @new_operators_a = () ;
# my @new_operators_b = () ;
# for (@operators_a){
# next if $seen_operator{$_} ;
# push @new_operators_a, $_ ;
# }
# for (@operators_b){
# next if $seen_operator{$_} ;
# push @new_operators_b, $_ ;
# }
# for (@new_operators_a){
# $i{"qty_workings_event"} = 1 ;
# $i{"amount_usd_workings_event"} = '0.00' ;
# $i{"operator_workings_event"} = $_ ;
# $i{"description_workings_event"} = '14' ;
# $first_avail_col++;
# }
# for (@new_operators_b){
# $i{"qty_workings_event"} = 1 ;
# $i{"amount_usd_workings_event"} = '0.00' ;
# $i{"operator_workings_event"} = $_ ;
# $i{"description_workings_event"} = '14' ;
# $first_avail_col++;
# }
# &db_min_upd('event_quotes',"quote_nr='$i{event_quote_nr}'") ;
# # foreach (keys %i) {
# # if (substr($_,0,3) eq 'new') { next ; }
# # if ($ignore{$_}) { next ; }
# # if ($hidden{$_} == 1) { next ; }
# # if ($i{$_} =~ /\"/) { $set .= qq(`$_`='$i{$_}',) ; } elsif ($i{$_} eq 'NULL') { $set .= qq(`$_`=$i{$_},) ; } else { $set .= qq(`$_`="$i{$_}",) ; }
# # }
# # &common_debug("UPDATE event_quotes SET $set WHERE quote_nr='$i{event_quote_nr}'") ;
# # # for (1 .. $max_operators) {
# # for $op_cnt ($max_operators .. 1) {
# # my $ex_col = "operator_$op_cnt\_workings_event" ;
# # my $op_id = $db{event_quotes}{$eid}{$ex_col} ;
# # # next unless $op_id ;
# # $first_avail_col = $op_cnt unless $op_id ;
# # foreach $op_a (@operators_a) {
# # if ($op_a eq $op_id) {
# # $exist_col{$op_a} = $ex_col ;
# # }
# # }
# # foreach $op_b (@operators_b) {
# # if ($op_b eq $op_id) {
# # $exist_col{$op_b} = $ex_col ;
# # }
# # }
# # }
# # }
# # # return unless $exist_col ;
# # local $avail_col = ($first_avail_col) ? $first_avail_col : 1 ;
# # foreach (@operators_a) {
# # next if $exist_col{$_} ;
# # local $field = "operator_$avail_col\_workings_event" ;
# # $i{$field} = $_ ;
# # # &db_min_upd('event_quotes',"quote_nr='$i{event_quote_nr}'") ;
# # $avail_col++
# # }
# # foreach (@operators_b) {
# # next if $exist_col{$_} ;
# # local $field = "operator_$avail_col\_workings_event" ;
# # $i{$field} = $_ ;
# # # &db_min_upd('event_quotes',"quote_nr='$i{event_quote_nr}'") ;
# # $avail_col++
# # }
# $db_ignore_open_close = 0 ; # do one open and one close instead of repeating it
# &db_close_conn ;
# # exit ;
# } #------------------------------------------------------------------------------------------
# sub process_operators {
# @operators_a = split(/\,/,$i{operators_type_a}) ;
# @operators_b = split(/\,/,$i{operators_type_b}) ;
# my @db_operators_a = () ; foreach (@operators_a) { push @db_operators_a, $_ ; }
# my @db_operators_b = () ; foreach (@operators_b) { push @db_operators_b, $_ ; }
# my $operators_a = join(',',@db_operators_a) ;
# my $operators_b = join(',',@db_operators_b) ;
# $ignore{operators_type_a} = 1 ;
# $ignore{operators_type_b} = 1 ;
# # $i{operator_names_type_a} = $operators_a ;
# # $i{operator_names_type_b} = $operators_b ;
# } #------------------------------------------------------------------------------------------
sub update_events_staff {
# local $exist_col = '' ;
# local $avail_col = '' ;
local $ exists = '' ;
& db_min_ro ( 'events' , 'id,event_quote_nr' , "event_quote_nr='$i{event_quote_nr}' AND user_id='$userid'" , '' , '' ) ;
foreach my $ eid ( keys % { $ db { events } } ) { $ exists = 1 if $ db { events } { $ eid } { event_quote_nr } eq $ i { event_quote_nr } ; }
# for (1 .. $max_operators) {
# push @sql_fields, "operator_$_\_workings_event" ;
# }
# my $select = join(",", @sql_fields) ;
# &db_min_ro('event_quotes',"id,$select","quote_nr='$i{event_quote_nr}'",'','') ;
# foreach my $eid (keys %{$db{event_quotes}}) {
# # for (1 .. $max_operators) {
# for ($max_operators .. 1) {
# my $ex_col = "operator_$_\_workings_event" ;
# my $op_id = $db{event_quotes}{$eid}{$ex_col} ;
# # next unless $op_id ;
# $avail_col = $ex_col unless $op_id ;
# if ($userid eq $op_id) {
# $exist_col = $ex_col ;
# # last ;
# }
# }
# }
# return unless $exist_col ;
# if ($exist_col and $iaction eq 'unavailable') {
# $i{"$exist_col"} = '' ; # set unavailable
# &db_min_upd('event_quotes',"quote_nr='$i{event_quote_nr}'") ;
# } elsif ($iaction eq 'available' and $exist_col eq '' and $avail_col) {
# $i{"$avail_col"} = $userid ; # set available
# &db_min_upd('event_quotes',"quote_nr='$i{event_quote_nr}'") ;
# }
$ ignore { iaction } = 1 ;
$ i { date_time } = "$now_ccyy_mm_dd $now_hour:$now_min:$now_sec" ;
# $i{category} = 'available' if $iaction eq 'confirm' ;
if ( $ exists ) {
& db_min_upd ( 'events' , "event_quote_nr='$i{event_quote_nr}' AND user_id='$userid'" ) ;
} else {
& db_min_insert ( 'events' ) ;
}
} #------------------------------------------------------------------------------------------
sub update_events {
unless ( $ i { id } ) { $ error = qq( NO ID ) ; return ; }
& hidden_fields ;
$ hidden { id } = 1 ;
# $i{user_id} = $userid ;
# if ($i{completed}) { $i{completeddate} = "$now_ccyy_mm_dd $now_hour:$now_min:$now_sec" ; } else { $i{completed} = '0' ; }
& db_min_upd ( 'events' , "id='$i{id}'" ) ;
# &update_operators($i{event_quote_nr}) ;
} #------------------------------------------------------------------------------------------
sub delete_events {
unless ( $ i { id } ) { $ error = qq( NO ID ) ; return ; }
& db_min_delete ( 'events' , "id='$i{id}'" ) ;
} #------------------------------------------------------------------------------------------
sub insert_events {
& hidden_fields ;
# $i{id} = &db_min_get_max('events','id') ;
# $i{user_id} = $userid ;
# $i{operator_names_type_a} = ;
$ i { date_time } = "$now_ccyy_mm_dd $now_hour:$now_min:$now_sec" ;
& db_min_insert ( 'events' ) ;
# &update_operators($i{event_quote_nr}) ;
} #------------------------------------------------------------------------------------------
# sub update_operators {
# my ($iidd) = @_ ;
# return unless $iidd ;
# my $operators = qq~~ ;
# foreach (split(",",$i{operator_names_type_a})) {
# $operators .= qq~$_;~ ;
# }
# foreach (split(",",$i{operator_names_type_b})) {
# $operators .= qq~$_;~ ;
# }
# chop $operators if $operators ;
# # my $iidd = ;
# %i = () ;
# $i{id} = $iidd ;
# $i{operators_workings_event} = $operators ;
# &db_common_upd('event_quotes_min',"id='$i{id}'") ;
# } #------------------------------------------------------------------------------------------
sub hidden_fields {
$ textarea { notes } = 1 ;
# $required{title} = 1 ;
$ required { category } = 1 ;
if ( $ db { $ table } { $ id } { category } eq 'leave' ) {
$ required { days } = 9 ;
} else {
$ ignore { days } = 1 ;
$ ignore { type } = 1 ;
}
$ datetimepicker { startdate } = 1 ;
$ datetimepicker { enddate } = 1 ;
$ ignore { iaction } = 1 ;
$ ignore { completed } = 1 ;
$ ignore { title } = 1 ;
$ ignore { operator_names_type_a } = 1 ;
$ ignore { operator_names_type_b } = 1 ;
$ hidden { id } = 2 ;
# $hidden{user_id} = 2 ;
$ hidden { date_time } = 2 ;
# $checkbox{completed} = 2 ;
$ selected { category } { $ db { $ table } { $ id } { category } } = 'SELECTED' ;
$ select { category } = 1 ;
if ( $ db { $ table } { $ id } { category } eq 'leave' ) {
$ opts { category } . = qq( <option value="leave" $selected{category}{leave}>Leave</option> ) ;
} else {
# $opts{category} .= qq(<option value="meeting" $selected{category}{meeting}>Meeting</option><option value="task" $selected{category}{task}>Task</option>) ;
$ opts { category } . = qq( <option value="weekend_work" $selected{category}{weekend_work}>Weekend Work</option> ) ;
$ opts { category } . = qq( <option value="public_holiday" $selected{category}{public_holiday}>Public Holiday</option> ) ;
$ opts { category } . = qq( <option value="other" $selected{category}{other}>Other</option> ) ;
}
# $opts{category} .= qq(<option value="leave" $selected{leave}>Leave</option><option value="meeting" $selected{meeting}>Meeting</option><option value="task" $selected{task}>Task</option><option value="birthday" $selected{birthday}>Birthday</option>) ;
# $opts{category} .= qq(<option value=leave" $selected{category}{leave}>Leave</option><option value="meeting" $selected{category}{meeting}>Meeting</option><option value="task" $selected{category}{task}>Task</option>) ;
& sort_fields ;
} #------------------------------------------------------------------------------------------
sub sort_fields {
$ sort_field { 1 } = 'category' ;
$ sort_field { 2 } = 'startdate' ;
$ sort_field { 3 } = 'enddate' ;
$ sort_field { 4 } = 'user_id' ;
$ sort_field { 5 } = 'notes' ;
} #-------------------------------------------------------------------------------
sub sort_leave_fields {
$ sort_field { 1 } = 'category' ;
$ sort_field { 2 } = 'startdate' ;
$ sort_field { 3 } = 'enddate' ;
$ sort_field { 4 } = 'days' ;
$ sort_field { 5 } = 'type' ;
$ sort_field { 6 } = 'user_id' ;
$ sort_field { 7 } = 'notes' ;
} #-------------------------------------------------------------------------------
sub edit_form {
$ boxtitle = 'Edit' ;
& db_min_ro ( $ table , '*' , "id='$i{id}'" , '' , '' ) ;
& hidden_fields ;
if ( $ db { $ table } { $ id } { category } eq 'leave' ) {
$ selected { 'type' } { $ db { $ table } { $ i { id } } { type } } = 'SELECTED' ;
& common_min_opts ( 'leave_type' , 'type' , 1 ) ;
& sort_leave_fields ;
}
& common_min_select_opts ( 'user_id' , 'users' , 'name' , $ db { $ table } { $ id } { user_id } , 1 ) ;
& display_user ;
$ print_box_content_rows = & common_min_edit_form ( $ i { id } , $ table , 'update' ) ;
} #------------------------------------------------------------------------------------------
sub view_form {
& db_open_ro ;
our $ db_ignore_open_close = 1 ; # do one open and one close instead of repeating it
# our @month_array = ( "January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December" ) ;
our @ month_array = ( "Jan" , "Feb" , "Mar" , "Apr" , "May" , "Jun" , "Jul" , "Aug" , "Sep" , "Oct" , "Nov" , "Dec" ) ;
our @ months = ( "" , "Jan" , "Feb" , "Mar" , "Apr" , "May" , "Jun" , "Jul" , "Aug" , "Sep" , "Oct" , "Nov" , "Dec" ) ;
# @month_array = @months ;
$ boxtitle = 'View' ;
$ table = 'event_quotes' ;
2026-02-03 12:35:43 +00:00
if ( $ event_or_analytics eq 'event' ) {
# &db_min_ro($table,'quote_nr,nr,quote_date,customer,country_id,ref,date_from,date_to,qty,currency,grand_total,invoice_nr',"quote_nr='$id'",'','') ;
# &db_min_ro($table,'quote_nr,quote_date,country_id,ref,date_from,date_to,qty,currency,grand_total,invoice_nr',"quote_nr='$id'",'','') ;
$ sort_field { 1 } = 'quote_nr' ;
$ sort_field { 2 } = 'ref' ;
$ sort_field { 3 } = 'date_from' ;
$ sort_field { 4 } = 'date_to' ;
$ sort_field { 5 } = 'type_of_system' ;
$ sort_field { 6 } = 'type_details' if $ usertype ne 'schools_manager' ;
# $sort_field{7} = 'system_name' if $usertype ne 'schools_manager' ;
$ sort_field { 7 } = 'system_details' if $ usertype ne 'schools_manager' ;
# $sort_field{8} = 'club_name' ;
$ sort_field { 9 } = 'days' ;
$ sort_field { 10 } = 'operators' ;
$ sort_field { 11 } = 'sport_type_ids' ;
$ sort_field { 12 } = 'city' ;
$ sort_field { 13 } = 'region' ;
$ sort_field { 14 } = 'venue' ;
# $sort_field{1} = 'quote_nr' ;
# $sort_field{2} = 'ref' ;
# $sort_field{3} = 'date_from' ;
# $sort_field{4} = 'date_to' ;
# $sort_field{5} = 'type' ;
# $sort_field{6} = 'sport_type_ids' ;
# # $sort_field{7} = 'ligr' ;
# $sort_field{8} = 'location' ;
# $sort_field{9} = 'city_id' ;
# $sort_field{10} = 'organisation_ids' ;
# # $sort_field{5} = 'country_id' ;
# $sort_field{11} = 'quote_to' ;
# $sort_field{12} = 'notes' ;
# $sort_field{13} = 'nr_of_casuals' ;
# $sort_field{14} = 'operator_names_type_a' ;
# $sort_field{15} = 'nr_of_casuals_2' ;
# $sort_field{16} = 'operator_names_type_b' ;
2025-11-26 09:31:54 +00:00
2026-02-03 12:35:43 +00:00
$ sort_field { 17 } = 'poc_name' ;
$ sort_field { 18 } = 'poc_contact_nr' ;
$ sort_field { 19 } = 'category_1' ;
$ sort_field { 20 } = 'category_1_sub_categories' ;
$ sort_field { 21 } = 'category_2' ;
$ sort_field { 22 } = 'category_2_sub_categories' ;
$ sort_field { 23 } = 'recipient_name' ;
$ sort_field { 24 } = 'recipient_nr' ;
$ sort_field { 25 } = 'additional_notes' ;
$ sort_field { 26 } = 'format_of_title' ;
$ preferred_title { organisation_ids } = "Venue(s)" ;
$ preferred_title { sport_type_ids } = "Sport Types(s)" ;
foreach ( sort { $ a <=> $ b } keys % sort_field ) { push @ sql_fields , $ sort_field { $ _ } ; }
for ( 1 .. $ max_operators ) {
push @ sql_fields , "operator_$_\_workings_event" ;
}
my $ select = join ( "," , @ sql_fields ) ;
& db_min_ro ( 'event_quotes_poc' , 'id,name,contact_nr' , '' , '' , '' ) ;
& db_min_ro ( 'event_quotes_categories' , 'id,category' , '' , '' , '' ) ;
& db_min_ro ( 'event_systems' , 'id,name,description' , '' , '' , '' ) ;
& 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_type_details' , 'id,name' , '' , '' , '' ) ;
2025-11-26 09:31:54 +00:00
2026-02-03 12:35:43 +00:00
# &db_min_ro($table,"$select,casual_worker,casual_worker_2,user_id","quote_nr='$id'",'','') ;
2025-11-26 09:31:54 +00:00
}
2026-02-03 12:35:43 +00:00
my $ analytics_sql_where = ( $ event_or_analytics eq 'event' ) ? "event_quote_id <> '0' AND event_quote_id = '$id'" : ( $ event_or_analytics eq 'analytics' ) ? "id= '$id'" : "" ;
2025-11-26 09:31:54 +00:00
2026-02-03 12:35:43 +00:00
& db_min_ro ( 'analytics_event_bookings' , 'id,event_quote_id,fixtures_saved_values,analytics_saved_values,start_date_time,end_date_time,sport_type_ids,event_name' , "$analytics_sql_where" , '' , '' ) ;
2025-11-26 09:31:54 +00:00
& db_switch_conn ( 'sss' ) ;
& db_min_ro ( 'teams' , 'id,name' , '' , '' , '' ) ;
& db_switch_conn ( 'aisa' ) ;
my @ fixtures_saved_values = ( ) ;
my @ analytics_saved_values = ( ) ;
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~~ ; our $ analytics_event_exists = 0 ;
my $ analytics_required = 0 ;
2026-02-03 12:35:43 +00:00
foreach my $ aid ( sort { $ b <=> $ a } keys % { $ db { analytics_event_bookings } } ) {
if ( $ event_or_analytics eq 'analytics' ) {
$ db { $ table } { $ id } { date_from } = $ db { analytics_event_bookings } { $ aid } { start_date_time } ;
$ db { $ table } { $ id } { date_to } = $ db { analytics_event_bookings } { $ aid } { end_date_time } ;
}
2025-11-26 09:31:54 +00:00
$ analytics_event_exists = 1 ;
# $analytics_event_exists = 0 ;
# $db{analytics_event_bookings}{$id}{analytics_saved_values} = "" ;
# $db{analytics_event_bookings}{$id}{fixtures_saved_values} = "" ;
2026-02-03 12:35:43 +00:00
$ analytics_required = 1 if ! $ db { analytics_event_bookings } { $ aid } { analytics_saved_values } && ! $ db { analytics_event_bookings } { $ aid } { fixtures_saved_values } ;
2025-11-26 09:31:54 +00:00
$ 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' ;
2026-02-03 12:35:43 +00:00
$ db { analytics_event_bookings } { $ aid } { fixtures_saved_values } =~ s/\|+$// ;
2025-11-26 09:31:54 +00:00
2026-02-03 12:35:43 +00:00
$ db { analytics_event_bookings } { $ aid } { fixtures_saved_values } = ";;;" unless $ db { analytics_event_bookings } { $ aid } { fixtures_saved_values } ;
2025-11-26 09:31:54 +00:00
2026-02-03 12:35:43 +00:00
@ fixtures_saved_values = split ( /\|/ , $ db { analytics_event_bookings } { $ aid } { fixtures_saved_values } ) ;
2025-11-26 09:31:54 +00:00
my $ fixtures_row_cnt = 0 ;
foreach ( @ fixtures_saved_values ) {
my @ abc = split ( /\;/ , $ _ ) ;
$ fixtures_row_cnt + + ;
2026-02-03 12:35:43 +00:00
$ analytics_saved_values { $ aid } { $ fixtures_row_cnt } { $ sort_field { 27 } } = ( $ abc [ 0 ] ) ? & common_min_date_as_string ( $ abc [ 0 ] ) : ( $ db { analytics_event_bookings } { $ aid } { start_date_time } ) ? & common_min_date_as_string ( $ db { analytics_event_bookings } { $ aid } { start_date_time } ) : & common_min_date_as_string ( "$now_year-$now_mm-$now_dd 08:00:00" ) ;
$ analytics_saved_values { $ aid } { $ fixtures_row_cnt } { $ sort_field { 28 } } = ( $ abc [ 1 ] ) ? $ db { sport_types } { $ abc [ 1 ] } { name } : ( $ db { analytics_event_bookings } { $ aid } { sport_type_ids } && $ db { analytics_event_bookings } { $ aid } { sport_type_ids } !~ /;/ ) ? $ db { sport_types } { $ db { analytics_event_bookings } { $ aid } { sport_type_ids } } { name } : "N/A" ;
$ analytics_saved_values { $ aid } { $ fixtures_row_cnt } { $ sort_field { 29 } } = ucfirst $ abc [ 2 ] . ' ' . uc $ abc [ 3 ] ;
$ analytics_saved_values { $ aid } { $ fixtures_row_cnt } { $ sort_field { 30 } } = ( $ abc [ 4 ] && $ abc [ 6 ] ) ? $ db { teams } { $ abc [ 4 ] } { name } . ' vs ' . $ db { teams } { $ abc [ 6 ] } { name } : ( $ abc [ 4 ] ) ? $ db { teams } { $ abc [ 4 ] } { name } . ' vs N/A' : ( $ abc [ 6 ] ) ? 'N/A vs ' . $ db { teams } { $ abc [ 6 ] } { name } : "" ;
2025-11-26 09:31:54 +00:00
}
2026-02-03 12:35:43 +00:00
@ analytics_saved_values_arr = split ( /\|/ , $ db { analytics_event_bookings } { $ aid } { analytics_saved_values } ) ;
2025-11-26 09:31:54 +00:00
my $ analytics_row_cnt = 0 ;
foreach ( @ analytics_saved_values_arr ) {
my @ abc = split ( /\;/ , $ _ ) ;
2026-02-03 12:35:43 +00:00
$ abc [ 1 ] =~ s/\_semi_colon_character_/\;/g ;
$ abc [ 1 ] =~ s/\_pipe_character_/\|/g ;
$ abc [ 2 ] =~ s/\_semi_colon_character_/\;/g ;
$ abc [ 2 ] =~ s/\_pipe_character_/\|/g ;
2025-11-26 09:31:54 +00:00
$ analytics_row_cnt + + ;
2026-02-03 12:35:43 +00:00
$ analytics_saved_values { $ aid } { $ analytics_row_cnt } { $ sort_field { 31 } } = ( $ abc [ 0 ] eq '1' ) ? "Yes" : ( $ abc [ 0 ] eq "2" ) ? "No" : "" ;
$ analytics_saved_values { $ aid } { $ analytics_row_cnt } { $ sort_field { 32 } } = $ abc [ 1 ] ;
$ analytics_saved_values { $ aid } { $ analytics_row_cnt } { $ sort_field { 33 } } = ( $ abc [ 2 ] ) ? qq~<a href='$abc[2]' target="_blank" style="color:blue;"><u>Click Here</u></a>~ : qq~~ ;
2025-11-26 09:31:54 +00:00
}
if ( $ analytics_row_cnt > $ fixtures_row_cnt ) {
for ( $ fixtures_row_cnt + 1 .. $ analytics_row_cnt ) {
2026-02-03 12:35:43 +00:00
$ analytics_saved_values { $ aid } { $ _ } { $ sort_field { 27 } } = ( $ db { analytics_event_bookings } { $ aid } { start_date_time } ) ? & common_min_date_as_string ( $ db { analytics_event_bookings } { $ aid } { start_date_time } ) : & common_min_date_as_string ( "$now_year-$now_mm-$now_dd 08:00:00" ) ;
$ analytics_saved_values { $ aid } { $ _ } { $ sort_field { 28 } } = ( $ db { analytics_event_bookings } { $ aid } { sport_type_ids } && $ db { analytics_event_bookings } { $ aid } { sport_type_ids } !~ /;/ ) ? $ db { sport_types } { $ db { analytics_event_bookings } { $ aid } { sport_type_ids } } { name } : "N/A" ;
2025-11-26 09:31:54 +00:00
}
}
}
if ( $ analytics_event_exists ) {
$ useropts { 'common' } { 'css' } . = qq ~
table {
border - collapse: separate ;
border - spacing: 12.5 px ;
width: 100 % ;
font - size: 1 em ;
}
tbody tr {
line - height: 0 ;
}
thead th {
line - height: 0 ;
}
tbody td {
background - color: rgb ( 238 , 238 , 238 ) ;
}
~ ;
my $ table_header = "<thead><tr><th>" . join ( "</th><th>" , map { join ( " " , map { ucfirst $ _ } split ( /\_/ , $ sort_field { $ _ } ) ) } ( 27 .. 33 ) ) . "</th></tr></thead>" ;
foreach my $ analytics_id ( sort { $ b <=> $ a } keys % analytics_saved_values ) {
my $ analytics_table_raw = qq~~ ;
foreach my $ row_counter ( sort { $ a <=> $ b } keys % { $ analytics_saved_values { $ analytics_id } } ) {
last if $ analytics_required ;
$ analytics_table_raw . = qq ~
<tr>
~ ;
foreach my $ col_nr ( 27 .. 33 ) {
my $ nowrap = ( $ col_nr == 27 ) ? "nowrap" : "" ;
$ analytics_table_raw . = ( $ analytics_saved_values { $ analytics_id } { $ row_counter } { $ sort_field { $ col_nr } } ) ? qq ~
< td style = 'font-size:90%;' $ nowrap > <span> $ analytics_saved_values { $ analytics_id } { $ row_counter } { $ sort_field { $ col_nr } } </span> </td>
~ : qq ~
<td> <span> </span> </td>
~ ;
}
$ analytics_table_raw . = qq ~
</tr>
~ ;
}
$ analytics_table . = qq~<tbody>$analytics_table_raw</tbody>~ if $ analytics_table_raw ;
# <div class='box-header well' data-original-title=''>
# <h2><i class='glyphicon glyphicon-tasks'></i> Analytics Required</h2>
# </div>
if ( $ analytics_table_raw ) {
# $analytics_table_body .= qq~
# <div class='row'>
#
# </div>
# <div class='box-inner'>
# <div class='box-content'>
# ~ ;
$ analytics_table_body . = qq~</div></div></div></div>~ if $ analytics_table_body ;
$ analytics_table_body . = & common_min_box_top ( 'tasks' , "View Analytics - $db{analytics_event_bookings}{$analytics_id}{event_name} [$analytics_id]" ) ;
$ analytics_table_body . = qq ~
<table>
$ table_header
$ analytics_table_raw
</table>
~ ;
}
}
}
2026-02-03 12:35:43 +00:00
if ( $ event_or_analytics eq 'event' ) {
2025-11-26 09:31:54 +00:00
2026-02-03 12:35:43 +00:00
& db_min_ro ( $ table , "*" , "quote_nr='$id'" , '' , '' ) ;
2025-11-26 09:31:54 +00:00
2026-02-03 12:35:43 +00:00
if ( $ db { $ table } { $ id } { city_id } =~ /,/ ) {
$ sort_field { 12 } = 'cities' ;
} else {
$ sort_field { 13 } = '' ;
}
& db_min_ro ( 'event_quotes_min' , "*" , "id='$id'" , '' , '' ) ;
2025-11-26 09:31:54 +00:00
2026-02-03 12:35:43 +00:00
& db_min_ro ( 'users' , 'id,name,user_type,phone' , "user_type LIKE 'casual%'" , '' , '' ) ;
foreach ( keys % { $ db { users } } ) {
$ casual_name { $ _ } = $ db { users } { $ _ } { name } ;
# my $casual_type = $db{users}{$_}{user_type} ; $casual_type =~ s/_casual//g ;
$ casual_type { $ _ } = uc substr ( $ db { users } { $ _ } { user_type } , - 1 , 1 ) ;
}
# %col_name = () ;
# &db_min_ro('countries','id,name',"id=$db{$table}{$id}{country_id}",'','') if $db{$table}{$id}{country_id} ;
# foreach (keys %{$db{countries}}) { $country{$_} = $db{countries}{$_}{name} ; }
% col_name = ( ) ;
& db_min_ro ( 'event_types' , 'id,name' , "id=$db{$table}{$id}{type}" , '' , '' ) if $ db { $ table } { $ id } { type } ;
foreach ( keys % { $ db { event_types } } ) { $ event_type { $ _ } = $ db { event_types } { $ _ } { name } ; }
% col_name = ( ) ;
& db_min_ro ( 'customers' , 'id,name' , "id=$db{$table}{$id}{quote_to}" , '' , '' ) if $ db { $ table } { $ id } { quote_to } ;
foreach ( keys % { $ db { customers } } ) { $ customers { $ _ } = $ db { customers } { $ _ } { name } ; }
% col_name = ( ) ;
# &db_min_ro('events','id,event_quote_nr,category,user_id',"event_quote_nr='$id'",'','') ;
2025-11-26 09:31:54 +00:00
2026-02-03 12:35:43 +00:00
# my $user_id = $db{$table}{$id}{user_id} ;
my $ quote_nr = $ db { $ table } { $ id } { quote_nr } ;
my $ start = $ db { $ table } { $ id } { date_from } ;
my $ end = $ db { $ table } { $ id } { date_to } ;
my $ date_start = substr ( $ start , 0 , 10 ) ;
my $ date_end = substr ( $ end , 0 , 10 ) ;
# for (1 .. $max_operators) {
# local $field = "operator_$_\_workings_event" ;
# $op_id = $db{$table}{$id}{$field} ;
my % selected_names = ( ) ;
2025-11-26 09:31:54 +00:00
2026-02-03 12:35:43 +00:00
# &common_debug("operator_workings_event : $db{event_quotes_min}{$id}{operator_workings_event} , id : $id") ;
2025-11-26 09:31:54 +00:00
2026-02-03 12:35:43 +00:00
foreach my $ op_id ( split ( ";" , $ db { event_quotes_min } { $ id } { operator_workings_event } ) ) {
next unless $ op_id ;
next if $ done_op { $ op_id } { $ quote_nr } ;
$ this_user_subscribed { $ op_id } = 1 ;
$ cat { $ date_start } { $ date_end } { $ quote_nr } { $ op_id } = 'assigned' ;
$ ccnt { $ date_start } { $ date_end } { $ casual_type { $ op_id } } { $ quote_nr } + + ;
$ subscribed_names { $ date_start } { $ date_end } { $ casual_type { $ op_id } } { $ quote_nr } . = "$casual_name{$op_id}, " ;
$ done_op { $ op_id } { $ quote_nr } = 1 ;
# $selected_names{operator_names_type_a}{$op_id}{$id} = 'SELECTED' if $casual_type{$op_id} eq 'A' ;
# $selected_names{operator_names_type_b}{$op_id}{$id} = 'SELECTED' if $casual_type{$op_id} eq 'B' ;
2025-11-26 09:31:54 +00:00
2026-02-03 12:35:43 +00:00
# &common_debug("op_id : $op_id , casual_type : $casual_type{$op_id} , id : $id") ;
}
& db_min_ro ( 'events' , 'id,event_quote_nr,category,user_id,startdate,enddate' , "user_id='$userid' OR event_quote_nr='$id'" , '' , '' ) ;
2025-11-26 09:31:54 +00:00
2026-02-03 12:35:43 +00:00
# &db_min_ro('events','id,event_quote_nr,category,user_id,startdate,enddate',"(user_id='$userid' OR event_quote_nr='$id') AND startdate LIKE '$date_start%' AND enddate LIKE '$date_end%'",'','') ;
foreach ( keys % { $ db { events } } ) {
my $ start = $ db { events } { $ _ } { startdate } ; my $ edate_start = substr ( $ start , 0 , 10 ) ;
my $ end = $ db { events } { $ _ } { enddate } ; my $ edate_end = substr ( $ end , 0 , 10 ) ;
$ qnr = $ db { events } { $ _ } { event_quote_nr } ;
$ uid = $ db { events } { $ _ } { user_id } ;
2025-11-26 09:31:54 +00:00
2026-02-03 12:35:43 +00:00
if ( $ date_start ne $ edate_start ) { next ; }
if ( $ date_end ne $ edate_end ) { next ; }
# $booked_this_one{$uid}{$qnr}{$db{events}{$_}{category}} = 1 ;
$ cat { $ edate_start } { $ edate_end } { $ qnr } { $ uid } = $ db { events } { $ _ } { category } ;
# $ccnt{$edate_start}{$edate_end}{$casual_type{$uid}}{$qnr}++ if $cat{$edate_start}{$edate_end}{$qnr}{$uid} eq 'available' ;
# $subscribed_names{$edate_start}{$edate_end}{$casual_type{$uid}}{$qnr} .= "$casual_name{$uid}, " if $cat{$edate_start}{$edate_end}{$qnr}{$uid} eq 'available' ;
& check_dates_booked ( $ qnr , $ uid , $ db { events } { $ _ } { startdate } , $ db { events } { $ _ } { enddate } ) if $ cat { $ edate_start } { $ edate_end } { $ qnr } { $ uid } eq 'available' ;
2025-11-26 09:31:54 +00:00
}
2026-02-03 12:35:43 +00:00
my $ casual_1_type = $ db { $ table } { $ id } { casual_worker } ;
my $ casual_2_type = $ db { $ table } { $ id } { casual_worker_2 } ;
$ preferred_title { date_from } = 'Date From' ;
$ preferred_title { date_to } = 'Date To' ;
$ preferred_title { quote_to } = 'Client' ;
$ preferred_title { nr_of_casuals } = 'Nr of Operators' ; # . $casual_1_type ;
$ preferred_title { nr_of_casuals_2 } = 'Nr of Operators' ; # . $casual_2_type ;
$ preferred_title { ref } = 'Event Name' ;
$ lcol = 2 ; $ fcol = 8 ;
# foreach (sort { $col_name{$a} cmp $col_name{$b} } keys %col_name) {
# $col = $col_name{$_} ;
my $ casuals_1_subscribed = sprintf ( "%0.0f" , $ ccnt { $ date_start } { $ date_end } { $ casual_1_type } { $ id } ) ;
my $ casuals_2_subscribed = sprintf ( "%0.0f" , $ ccnt { $ date_start } { $ date_end } { $ casual_2_type } { $ id } ) ;
chop $ subscribed_names { $ date_start } { $ date_end } { $ casual_1_type } { $ id } ; chop $ subscribed_names { $ date_start } { $ date_end } { $ casual_1_type } { $ id } ;
chop $ subscribed_names { $ date_start } { $ date_end } { $ casual_2_type } { $ id } ; chop $ subscribed_names { $ date_start } { $ date_end } { $ casual_2_type } { $ id } ;
my $ casual_1_names_subscribed = '[' . $ subscribed_names { $ date_start } { $ date_end } { $ casual_1_type } { $ id } . ']' if $ subscribed_names { $ date_start } { $ date_end } { $ casual_1_type } { $ id } ;
my $ casual_2_names_subscribed = '[' . $ subscribed_names { $ date_start } { $ date_end } { $ casual_2_type } { $ id } . ']' if $ subscribed_names { $ date_start } { $ date_end } { $ casual_2_type } { $ id } ;
# my $operator_id = 0 ;
# my %selected_names = () ;
# for (1 .. $max_operators) {
# $operator_id = $db{$table}{$id}{"operator_$_\_workings_event"} ;
# $selected_names{operator_names_type_a}{$operator_id}{$id} = 'SELECTED' if $operator_id and $casual_type{$operator_id} eq 'A' ;
# $selected_names{operator_names_type_b}{$operator_id}{$id} = 'SELECTED' if $operator_id and $casual_type{$operator_id} eq 'B' ;
2025-11-26 09:31:54 +00:00
# }
2026-02-03 12:35:43 +00:00
# $selected_names{operator_names_type_a}{48}{$id} = 'SELECTED' ;
foreach my $ casual_id ( keys % casual_name ) {
$ opts { operator_names_type_a } . = qq( <option $selected_names{operator_names_type_a}{$casual_id}{$id} value="$casual_id">$casual_name{$casual_id}</option> ) if $ casual_type { $ casual_id } eq 'A' ;
$ opts { operator_names_type_b } . = qq( <option $selected_names{operator_names_type_b}{$casual_id}{$id} value="$casual_id">$casual_name{$casual_id}</option> ) if $ casual_type { $ casual_id } eq 'B' ;
}
my @ club_ids_arr = ( ) ;
foreach ( split ( ";" , $ db { $ table } { $ id } { club_ids } ) ) {
push @ club_ids_arr , "`id` = '$_'" if $ _ ;
}
my $ club_ids_sql = join ( " OR " , @ club_ids_arr ) ;
$ club_ids_sql = "($club_ids_sql)" if $ club_ids_sql ;
& db_min_ro ( 'clubs' , 'id,name' , "$club_ids_sql" , '' , '' ) ;
if ( $ date_start eq $ date_end ) {
$ sort_field { 3 } = 'date' ;
$ sort_field { 4 } = '' ;
$ preferred_title { date_from } = 'Date' ;
}
my @ times_from = split ( /\;/ , $ db { $ table } { $ id } { times_from } ) ;
my @ times_to = split ( /\;/ , $ db { $ table } { $ id } { times_to } ) ;
my @ times_from_com = ( ) ; my @ times_to_com = ( ) ;
push @ times_from_com , substr ( $ db { $ table } { $ id } { date_from } , 11 ) ;
my @ days_active = split ( /\;/ , $ db { $ table } { $ id } { days_active } ) ;
my % dates_hash = ( ) ;
for ( 1 .. 10 ) {
my ( $ year , $ month , $ day ) = split ( /\-/ , substr ( $ db { $ table } { $ 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 } { $ id } { date_from } , 11 ) if ! $ times_from [ $ _ - 2 ] && $ _ > 1 ;
last if substr ( $ db { $ table } { $ 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 } { $ id } { date_to } , 11 ) if ! $ times_to [ $ _ - 1 ] ;
}
my $ system_count = 0 ; my $ system_day_cnt = 0 ; my % system_has_daily_op = ( ) ;
foreach my $ system_row ( split ( /\|/ , $ db { $ table } { $ 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 ;
# push @times_to_com, substr($db{$table}{$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}{$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 ;
}
2025-11-26 09:31:54 +00:00
foreach my $ cnt ( sort { $ a <=> $ b } keys % sort_field ) {
$ col = $ sort_field { $ cnt } ;
next if ! $ col || $ col eq 'quote_nr' ;
$ val = $ db { $ table } { $ id } { $ col } ;
# next if not $val and $col ne 'operator_names_type_a' and $col ne 'operator_names_type_b' and $col ne 'category_1_sub-Categories' and $col ne 'category_2_sub-Categories' ;
# $val = $country{$val} if $col eq 'country_id' ;
$ val = $ customers { $ val } if $ col eq 'quote_to' ;
# $val = $event_type{$val} if $col eq 'type' ;
if ( $ col eq 'nr_of_casuals' ) {
$ casuals_1_subscribed = 0 unless $ casuals_1_subscribed ;
$ db { $ table } { $ id } { nr_of_casuals } = 0 unless $ db { $ table } { $ id } { nr_of_casuals } ;
$ val = "$casuals_1_subscribed/$val $casual_1_names_subscribed" ;
$ fully_substribed { $ casual_1_type } = 1 if $ casuals_1_subscribed >= $ db { $ table } { $ id } { nr_of_casuals } ;
} elsif ( $ col eq 'nr_of_casuals_2' ) {
$ casuals_2_subscribed = 0 unless $ casuals_2_subscribed ;
$ db { $ table } { $ id } { nr_of_casuals_2 } = 0 unless $ db { $ table } { $ id } { nr_of_casuals_2 } ;
$ val = "$casuals_2_subscribed/$val $casual_2_names_subscribed" ;
$ fully_substribed { $ casual_2_type } = 1 if $ casuals_2_subscribed >= $ db { $ table } { $ id } { nr_of_casuals_2 } ;
} elsif ( $ col eq 'date_from' || $ col eq 'date' ) {
$ val = & process_date ( $ db { $ table } { $ id } { date_from } ) ;
$ val . = qq~ to ~ . substr ( $ times_to_com [ 0 ] , 0 , 5 ) ;
$ val . = substr ( $ db { $ table } { $ id } { date_to } , 11 , 5 ) if $ col eq 'date' ;
} elsif ( $ col eq 'date_to' ) {
$ val = & process_date ( $ db { $ table } { $ id } { date_to } ) ;
$ val = substr ( $ val , 0 , - 5 ) . substr ( $ times_from_com [ - 1 ] , 0 , 5 ) . qq~ to ~ . substr ( $ val , - 5 , 5 ) ;
} elsif ( $ col eq 'operator_names_type_a' ) {
next unless $ db { $ table } { $ id } { nr_of_casuals } ;
# $preferred_title{$col} = "Operator Names A" ;
# $fcol = 3 ;
# $multiple{$col} = 1 ;
# $setmultiple = 'multiple' ;
# $print_box_content_rows .= &common_min_form_select($col,'') ;
# $print_box_content_rows . "</div>" ;
} elsif ( $ col eq 'operator_names_type_b' ) {
# next unless $db{$table}{$id}{nr_of_casuals_2} ;
# $preferred_title{$col} = "Operator Names B" ;
# $fcol = 3 ;
# $multiple{$col} = 1 ;
# $setmultiple = 'multiple' ;
# $print_box_content_rows .= &common_min_form_select($col,'') ;
} elsif ( $ col eq 'sport_type_ids' ) {
$ val = qq~~ ;
foreach ( split ( "," , $ db { $ table } { $ id } { sport_type_ids } ) ) {
$ val . = qq~$db{sport_types}{$_}{name}, ~ ;
}
chop $ val if $ val ; chop $ val if $ val ;
}
# elsif ($col eq 'city_id') {
# $val = $db{cities}{$val}{city} ;
# $val .= qq~, $db{regions}{$db{$table}{$id}{region_id}}{name}~ if $db{$table}{$id}{region_id} ;
# }
# elsif ($col eq 'organisation_ids') {
# $val = qq~~ ;
# foreach (split(",",$db{$table}{$id}{organisation_ids})) {
# $val .= qq~$db{organisations}{$_}{name}, ~ ;
# }
# chop $val if $val ; chop $val if $val ;
# }
# event_quotes_poc','id,name,contact_nr
elsif ( $ col eq 'poc_name' ) {
$ val = $ db { event_quotes_poc } { $ db { $ table } { $ id } { poc_id } } { name } ;
} elsif ( $ col eq 'poc_contact_nr' ) {
$ val = $ db { event_quotes_poc } { $ db { $ table } { $ id } { poc_id } } { contact_nr } ;
$ val =~ s/ //g ;
if ( substr ( $ val , 0 , 2 ) eq '27' && length ( $ val ) == 11 ) {
$ val = "+27 " . substr ( $ val , 2 , 2 ) . " " . substr ( $ val , 4 , 3 ) . " " . substr ( $ val , 7 , 4 ) ;
} elsif ( ( substr ( $ val , 0 , 2 ) eq '07' || substr ( $ val , 0 , 2 ) eq '08' || substr ( $ val , 0 , 2 ) eq '02' ) && length ( $ val ) == 10 ) {
$ val = "+27 " . substr ( $ val , 1 , 2 ) . " " . substr ( $ val , 3 , 3 ) . " " . substr ( $ val , 6 , 4 ) ;
} else {
$ val = $ db { event_quotes_poc } { $ db { $ table } { $ id } { poc_id } } { contact_nr } ;
}
} elsif ( $ col eq 'category_1_sub_categories' ) {
my @ a = split ( '\|;\|' , $ db { event_quotes_min } { $ id } { category_details } ) ;
$ a [ 0 ] =~ s/\n/<br>/g ;
$ a [ 0 ] = substr ( $ a [ 0 ] , 0 , - 4 ) if substr ( $ a [ 0 ] , - 4 , 4 ) eq '<br>' ;
$ val = $ a [ 0 ] ;
next unless $ val ;
} elsif ( $ col eq 'category_2_sub_categories' ) {
my @ a = split ( '\|;\|' , $ db { event_quotes_min } { $ id } { category_details } ) ;
$ a [ 1 ] =~ s/\n/<br>/g ;
$ a [ 1 ] = substr ( $ a [ 1 ] , 0 , - 4 ) if substr ( $ a [ 1 ] , - 4 , 4 ) eq '<br>' ;
$ val = $ a [ 1 ] ;
next unless $ val ;
} elsif ( $ col eq 'category_1' ) {
$ val = $ db { event_quotes_categories } { $ db { $ table } { $ id } { category_id_1 } } { category } ;
} elsif ( $ col eq 'category_2' ) {
$ val = $ db { event_quotes_categories } { $ db { $ table } { $ id } { category_id_2 } } { category } ;
} elsif ( $ col eq 'type_details' ) {
# event_system_id_multiple
$ val = qq~~ ;
foreach my $ type_id ( split ( "," , $ db { $ table } { $ id } { type_details_id } ) ) {
$ val . = qq~$db{event_type_details}{$type_id}{name}, ~ ;
}
chop $ val if $ val ; chop $ val if $ val ;
} elsif ( $ col eq 'system_details' ) {
# elsif ($col eq 'system_name') {
$ val = qq~~ ;
# my $cnt_sys = 0 ;
my @ club_ids = split ( ";" , $ db { $ table } { $ id } { club_ids } ) ;
my @ operator_ids = ( $ db { $ table } { $ id } { operator_ids } =~ /;/ ) ? split ( ";" , $ db { $ table } { $ id } { operator_ids } ) : split ( "," , $ db { $ table } { $ id } { operator_ids } ) ;
my $ cnt_sys = - 1 ;
foreach my $ event_id ( split ( /\;/ , $ db { $ table } { $ id } { event_system_id_multiple } ) ) {
$ cnt_sys + + ;
next if not $ event_id and not $ club_ids [ $ cnt_sys ] ;
$ event_id =~ s/f-//g ;
$ val . = qq~$db{event_systems}{$event_id}{name} ~ if $ event_id ;
$ val . = qq~>>> ~ if $ event_id and not $ db { event_systems } { $ event_id } { description } ;
$ val . = qq~($db{event_systems}{$event_id}{description}) >>> ~ if $ db { event_systems } { $ event_id } { description } and $ event_id ;
$ val . = qq~NO SYSTEM >>> ~ unless $ event_id ;
$ val . = qq~$db{clubs}{$club_ids[$cnt_sys]}{name} >>> ~ if $ club_ids [ $ cnt_sys ] ;
$ val . = qq~NO CLUB >>> ~ unless $ club_ids [ $ cnt_sys ] ;
$ val . = qq~$db{users}{$operator_ids[$cnt_sys]}{name}~ if $ operator_ids [ $ cnt_sys ] ;
$ cnt_sys + + ;
$ val . = qq~[$system_daily_ops{$cnt_sys}]~ if $ system_daily_ops { $ cnt_sys } && ! $ operator_ids [ $ cnt_sys - 1 ] ;
$ 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} ;
$ val . = qq~<br>~ ;
# $cnt_sys++ ;
}
# chop $val if $val ; chop $val if $val ;
$ val = substr ( $ val , 0 , - 4 ) if $ val ;
}
# elsif ($col eq 'club_name') {
# $val = '' ;
# foreach my $club_id (split(";",$db{$table}{$id}{club_ids})) {
# $val .= qq~$db{clubs}{$club_id}{name}<br>~ if $club_id ;
# }
# $val =~ s/\n/<br>/g;
# $val = substr($val,0,-4) if substr($val,-4,-1) eq '<br' ;
# }
elsif ( $ col eq 'days' ) {
$ val = $ db { users } { $ _ } { qty } ;
} elsif ( $ col eq 'operators' ) {
$ val = qq~~ ; my $ cnt_ops = 0 ;
my @ operator_ids = ( $ db { $ table } { $ id } { operator_ids } =~ /;/ ) ? split ( ";" , $ db { $ table } { $ id } { operator_ids } ) : split ( "," , $ db { $ table } { $ id } { operator_ids } ) ;
foreach ( @ operator_ids ) {
next unless $ _ ;
$ cnt_ops + + ;
$ val . = qq~$db{users}{$_}{name}~ ;
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 ) ;
} else {
$ phone = $ db { users } { $ _ } { phone } ;
}
$ val . = qq~ - $phone~ if $ phone ;
$ val . = qq~, ~ ;
}
chop $ val if $ val ; chop $ val if $ val ;
$ val = qq~$cnt_ops [$val]~ if $ cnt_ops ;
} elsif ( $ col eq 'region' ) {
$ val = $ db { regions } { $ db { $ table } { $ id } { region_id } } { name } ;
} elsif ( $ col eq 'city' ) {
$ val = $ db { cities } { $ db { $ table } { $ id } { city_id } } { name } ;
$ val . = qq~, $db{regions}{$db{$table}{$id}{region_id}}{name}~ if $ db { $ table } { $ id } { region_id } ;
} elsif ( $ col eq 'cities' ) {
# $val = '' ;
# foreach (split(",",$db{$table}{$id}{city_id})) {
# $val .= qq~$db{cities}{$_}{name},~ ;
# }
# chop $val if $val ;
$ val = join ( "," , map { "$db{cities}{$_}{name}" } split ( /\,/ , $ db { $ table } { $ id } { city_id } ) ) ;
} elsif ( $ col eq 'venue' ) {
$ val = qq~~ ;
foreach ( split ( "," , $ db { $ table } { $ id } { organisation_ids } ) ) {
$ val . = qq~$db{organisations}{$_}{name}, ~ ;
}
chop $ val if $ val ; chop $ val if $ val ;
} elsif ( $ col eq 'type_of_system' ) {
$ val = $ event_type { $ db { $ table } { $ id } { type } } ;
} elsif ( $ col eq 'format_of_title' ) {
$ val = $ db { $ table } { $ id } { format_of_title } ;
$ val =~ s/\n/<br>/g ;
} elsif ( $ col eq 'additional_notes' ) {
$ val = $ db { $ table } { $ id } { additional_notes } ;
$ val =~ s/\n/<br>/g ;
} elsif ( $ col eq 'fixture_date/Time_from' ) {
$ val = join ( "," , map { "$analytics_saved_values{$col}{$_}" } sort { $ a <=> $ b } keys % { $ analytics_saved_values { $ col } } ) ;
} elsif ( $ col eq 'sport' ) {
$ val = join ( "," , map { "$analytics_saved_values{$col}{$_}" } keys % { $ analytics_saved_values { $ col } } ) ;
} elsif ( $ col eq 'age_group' ) {
$ val = join ( "," , map { "$analytics_saved_values{$col}{$_}" } sort { $ a <=> $ b } keys % { $ analytics_saved_values { $ col } } ) ;
} elsif ( $ col eq 'team' ) {
$ val = join ( "," , map { "$analytics_saved_values{$col}{$_}" } sort { $ a <=> $ b } keys % { $ analytics_saved_values { $ col } } ) ;
} elsif ( $ col eq 'stream_forwarding' ) {
$ val = join ( "," , map { "$analytics_saved_values{$col}{$_}" } sort { $ a <=> $ b } keys % { $ analytics_saved_values { $ col } } ) ;
} elsif ( $ col eq 'stream_key' ) {
$ val = join ( "," , map { "$analytics_saved_values{$col}{$_}" } sort { $ a <=> $ b } keys % { $ analytics_saved_values { $ col } } ) ;
} elsif ( $ col eq 'stream_URL' ) {
$ val = join ( "," , map { "$analytics_saved_values{$col}{$_}" } sort { $ a <=> $ b } keys % { $ analytics_saved_values { $ col } } ) ;
}
next unless $ val ;
$ print_box_content_rows . = & common_min_form_view ( $ col , $ val , '' ) unless $ col eq 'operator_names_type_a' or $ col eq 'operator_names_type_b' ;
if ( $ col eq 'date_from' && substr ( $ db { $ table } { $ id } { date_from } , 0 , 10 ) ne substr ( $ db { $ table } { $ id } { date_to } , 0 , 10 ) ) {
for ( 2 .. 9 ) {
last if substr ( $ db { $ table } { $ id } { date_to } , 0 , 10 ) eq $ dates_hash { $ _ } ;
next if $ db { $ table } { $ id } { days_active } && ! $ days_active [ $ _ - 1 ] ;
my ( $ new_year , $ new_month , $ new_day ) = split ( /\-/ , $ dates_hash { $ _ } ) ;
$ 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 ) ;
$ print_box_content_rows . = & common_min_form_view ( " " , $ val , '' ) ;
}
}
}
$ dialog = 0 ;
$ addbkb = 0 ;
# $print_box_content_rows .= &common_min_forms_end('','','report') ;
# my @assigned_users_a = split(/\,/,$db{$table}{$id}{operator_names_type_a}s) ;
# my @assigned_users_b = split(/\,/,$db{$table}{$id}{operator_names_type_b}) ;
# my %selected_names = () ;
# for (@assigned_users_a){ $selected_names{operator_names_type_a}{$_}{$id} = 'SELECTED'; }
# for (@assigned_users_b){ $selected_names{operator_names_type_b}{$_}{$id} = 'SELECTED'; }
# <input type="hidden" name="iaction" value="$db{$table}{$id}{operator_names_type_a}">
# <input type="hidden" name="iaction" value="$db{$table}{$id}{operator_names_type_b}">
# $print_box_content_rows .= qq~
$ form_for_save . = qq ~
< form role = "form" name = "form_$table" id = "$table-form" method = "post" enctype = "multipart/form-data" >
< input type = "hidden" name = "iaction" value = "saveoperator" >
< input type = "hidden" name = "event_quote_nr" value = "$id" >
< input type = "hidden" name = "operators_type_a" id = "operators-type-a" value = "" >
< input type = "hidden" name = "operators_type_b" id = "operators-type-b" value = "" >
< div class = 'row' >
< div class = "col-md-12" >
& nbsp ;
</div>
</div>
< div class = "row" >
< div class = "col-md-12" >
& nbsp ; < button type = "button" class = "btn btn-primary" id = "savebuttcalender" > Save </button> & nbsp ;
</div>
</div>
< div class = "row" >
< div class = "col-md-12" >
& nbsp ;
</div>
</div>
</form>
~ ;
$ trigger_jquery_raw . = qq ~ \ $( "#savebuttcalender" ) . click ( function ( ) {
var op_a_val = \ $( "#selectOperator_names_type_a" ) . chosen ( ) . val ( ) ;
var op_b_val = \ $( "#selectOperator_names_type_b" ) . chosen ( ) . val ( ) ;
// const selected_a = op_a_val . split ( "," ) ;
// const selected_b = op_b_val . split ( "," ) ;
// let counter_a = 0 ;
// let counter_b = 0 ;
// for ( let i = 0 ; i < selected_a . length ; i + + ) {
// counter_a + + ;
// }
// for ( let i = 0 ; i < selected_b . length ; i + + ) {
// counter_b + + ;
// }
// var max_ops_a = '$db{$table}{$id}{nr_of_casuals}' ;
// var max_ops_b = '$db{$table}{$id}{nr_of_casuals_2}' ;
// if ( max_ops_a < counter_a && max_ops_b < counter_b ) {
// noty ( { text: 'Operator A names exceed max nr allowed of ' + max_ops_a + '! and Operator B names exceed max nr allowed of ' + max_ops_b + '!' , layout: "center" , type: "error" , timeout:3000 } ) ;
// return ;
// } else if ( max_ops_b < counter_b && max_ops_a >= counter_a ) {
// noty ( { text: 'Operator B names exceed max nr allowed of ' + max_ops_b + '!' , layout: "center" , type: "error" , timeout:3000 } ) ;
// return ;
// } else if ( max_ops_a < counter_a && max_ops_b >= counter_b ) {
// noty ( { text: 'Operator A names exceed max nr allowed of ' + max_ops_a + '!' , layout: "center" , type: "error" , timeout:3000 } ) ;
// return ;
// } else {
\ $( '#operators-type-a' ) . val ( op_a_val ) ;
\ $( '#operators-type-b' ) . val ( op_b_val ) ;
\ $( '#$table-form' ) . submit ( ) ;
// }
} ) ; ~ ;
# $trigger_jquery_raw .= qq~\$("#savebuttcalender").click(function() {
# var max_allowed_a = $db{$table}{$id}{nr_of_casuals} ;
# var max_allowed_b = $db{$table}{$id}{nr_of_casuals_2} ;
# if (max_allowed_a < counter_a && max_allowed_b < counter_b) {
# noty({text:'Operator A names exceed max nr allowed of '+max_allowed_a+'! and Operator B names exceed max nr allowed of '+max_allowed_b+'!',layout:"center",type:"error",timeout:3000});
# return;
# } else if (max_allowed_b < counter_b && max_allowed_a >= counter_a) {
# noty({text:'Operator B names exceed max nr allowed of '+max_allowed_b+'!',layout:"center",type:"error",timeout:3000});
# return;
# } else if (max_allowed_a < counter_a && max_allowed_b >= counter_b) {
# noty({text:'Operator A names exceed max nr allowed of '+max_allowed_a+'!',layout:"center",type:"error",timeout:3000});
# return;
# } else {
# \$('#$table-form').submit();
# }
# });~ ;
# $print_box_content_rows . "</div>" ;
$ db_ignore_open_close = 0 ; # do one open and one close instead of repeating it
& db_close_conn ;
# my $saction = ($cat{$date_start}{$date_end}{$id}{$userid} eq 'available') ? 'unavailable' : 'available' ; my $butttxt = uc $saction ; my $buttcolor = ($saction eq 'available') ? 'success' : 'danger' ;
my $ buttcolor = ( $ saction eq 'available' ) ? 'success' : 'danger' ;
if ( $ cat { $ date_start } { $ date_end } { $ id } { $ userid } eq 'available' ) {
$ saction = 'unavailable' ;
} elsif ( $ cat { $ date_start } { $ date_end } { $ id } { $ userid } eq 'assigned' ) {
$ saction = 'available' ;
# $buttcolor = 'info' ;
$ buttcolor = 'success' ;
} elsif ( $ cat { $ date_start } { $ date_end } { $ id } { $ userid } eq 'unavailable' ) {
$ saction = 'available' ;
$ buttcolor = 'success' ;
}
my $ butttxt = uc $ saction ;
my ( $ dy1 , $ dm1 , $ dd1 , $ th1 , $ tm1 , $ ts1 ) = & common_split_sql_time ( $ db { $ table } { $ id } { date_from } ) ;
my ( $ dy2 , $ dm2 , $ dd2 , $ th2 , $ tm2 , $ ts2 ) = & common_split_sql_time ( $ db { $ table } { $ id } { date_to } ) ;
my $ Dd = Delta_Days ( $ dy1 , $ dm1 , $ dd1 , $ dy2 , $ dm2 , $ dd2 ) ;
# my $nr_of_casuals_1_allowed = sprintf("%0.0f",$db{$table}{$id}{nr_of_casuals}) ;
# if ($casuals_1_subscribed >= $nr_of_casuals_1_allowed and $saction eq 'available') { return ; } # fully subscribed
# my $nr_of_casuals_2_allowed = sprintf("%0.0f",$db{$table}{$id}{nr_of_casuals_2}) ;
# if ($casuals_2_subscribed >= $nr_of_casuals_2_allowed and $saction eq 'available') { return ; } # fully subscribed
my $ cnow = $ now_ccyymmdd . $ now_hour . $ now_min . $ now_sec ;
my $ cstart = $ db { $ table } { $ id } { date_from } ; $ cstart =~ s/ //g ; $ cstart =~ s/-//g ; $ cstart =~ s/://g ;
my $ cend = $ db { $ table } { $ id } { date_to } ; $ cend =~ s/ //g ; $ cend =~ s/-//g ; $ cend =~ s/://g ;
my $ in_the_past = 0 ;
our $ files_attach = qq~~ ;
2026-02-03 12:35:43 +00:00
my $ pdf_tooltip_extra = ( $ event_or_analytics eq 'analytics' ) ? "ANALYTICS EVENT" : "EVENT" ;
my $ pdf_tooltip_extra2 = ( $ event_or_analytics eq 'analytics' ) ? "Analytics Event" : "Event" ;
2025-11-26 09:31:54 +00:00
$ files_attach . = qq ~
< div class = "col-md-1" >
<br>
2026-02-03 12:35:43 +00:00
< a class = "btn btn-primary btn-xs" href = "javascript:parent.dlgMdl('$useropts{domain}$useropts{scripts}/pdf/event_details_pdf.pl?$qid&&&$event_or_analytics','$pdf_tooltip_extra DETAILS $quote_nr','','waybill-dialog');" data - title = "$pdf_tooltip_extra2 Details PDF" data - toggle = "tooltip" data - placement = "left" data - container = "body" >
2025-11-26 09:31:54 +00:00
< i class = "glyphicon glyphicon-print" > </i>
</a>
<br>
<br>
</div> ~ if $ glod_user_level > 1 ;
2026-02-03 12:35:43 +00:00
2025-11-26 09:31:54 +00:00
for ( 1 .. 3 ) {
$ working_uploads = & get_event_uploads ( $ qid , "upload_$_" , 'id' ) ;
if ( $ working_uploads ) {
$ files_attach . = qq ~
< div class = "col-md-1" >
<br>
$ working_uploads
<br>
<br>
</div>
~ ;
}
}
# ;;;;6797|;;;;6797|;;;;6797|;8;;;6797
if ( $ cstart < $ cnow && $ cend < $ cnow ) { # event in the past
# if (1) { # event in the past
if ( $ analytics_event_exists ) {
if ( $ analytics_table ) {
$ analytics_table_body . = qq ~
< div class = "row" >
< div class = "col-md-2" >
<br>
< span class = "label label-danger" >
Event has past
</span>
<br>
<br>
</div>
$ files_attach
</div>
< div class = "row" >
< div class = "col-md-12" >
& nbsp ; < button type = "button" class = "btn btn-default" onclick = "parent.BootstrapDialog.closeAll();" > Close </button>
</div>
</div>
</div>
</div>
</div>
</div>
~ ;
} else {
$ print_box_content_rows . = qq ~
< div class = "row" >
< div class = "col-md-2" >
<br>
< span class = "label label-danger" >
Event has past
</span>
<br>
<br>
</div>
$ files_attach
</div>
< div class = "row" >
< div class = "col-md-12" >
& nbsp ; < button type = "button" class = "btn btn-default" onclick = "parent.BootstrapDialog.closeAll();" > Close </button>
</div>
</div>
~ ;
}
} else {
$ print_box_content_rows . = qq ~
< div class = "row" >
< div class = "col-md-2" >
<br>
< span class = "label label-danger" >
Event has past
</span>
<br>
<br>
</div>
$ files_attach
</div>
< div class = "row" >
< div class = "col-md-12" >
& nbsp ; < button type = "button" class = "btn btn-default" onclick = "parent.BootstrapDialog.closeAll();" > Close </button>
</div>
</div>
~ ;
}
return ;
} else {
if ( $ analytics_event_exists ) {
if ( $ analytics_table ) {
$ analytics_table_body . = qq ~
< div class = "row" >
< div class = "col-md-2" >
<br>
& nbsp ; < button type = "button" class = "btn btn-default" onclick = "parent.BootstrapDialog.closeAll();" > Close </button>
<br>
<br>
</div>
$ files_attach
</div>
</div>
</div>
</div>
</div>
~ ;
} else {
$ print_box_content_rows . = qq ~
< div class = "row" >
< div class = "col-md-2" >
<br>
< span class = "label label-danger" > Analytics Required </span>
<br>
<br>
</div>
$ files_attach
</div>
< div class = "row" >
< div class = "col-md-12" >
& nbsp ; < button type = "button" class = "btn btn-default" onclick = "parent.BootstrapDialog.closeAll();" > Close </button>
</div>
</div>
~ ;
}
# my $analytics_required = ($analytics_table) ? qq~ <button type="button" class="btn btn-default" onclick="parent.BootstrapDialog.closeAll();">Close</button>~ : qq~<span class="label label-danger">Analytics Required</span>~ ;
# my $close_button = (!$analytics_table) ? qq~
# <div class="row">
# <div class="col-md-12">
# <button type="button" class="btn btn-default" onclick="parent.BootstrapDialog.closeAll();">Close</button>
# </div>
# </div>
# ~ : qq~~ ;
} else {
$ print_box_content_rows . = qq ~
< div class = "row" >
< div class = "col-md-2" >
<br>
& nbsp ; < button type = "button" class = "btn btn-default" onclick = "parent.BootstrapDialog.closeAll();" > Close </button>
<br>
<br>
</div>
$ files_attach
</div>
~ ;
}
}
if ( $ time_subscribed { $ userid } { "$dy1$dm1$dd1$th1" } and $ cat { $ date_start } { $ date_end } { $ id } { $ userid } ne 'available' ) { $ print_box_content_rows . = qq~<span class="label label-danger">You're already booked for an event during this time</span>~ ; return ; } # busy on another event already, avoid double booking
if ( $ time_subscribed { $ userid } { "$dy2$dm2$dd2$th2" } and $ cat { $ date_start } { $ date_end } { $ id } { $ userid } ne 'available' ) { $ print_box_content_rows . = qq~<span class="label label-danger">You're already booked for an event during this time</span>~ ; return ; } # busy on another event already, avoid double booking
return unless substr ( $ usertype , 0 , 6 ) eq 'casual' ;
# my $is_operator = uc substr($usertype,0,6) ;
# unless (substr($usertype,0,6) eq 'casual') { $print_box_content_rows .= qq~<span class="label label-danger">$is_operator</span>~; return ; }
my $ casual_type = uc substr ( $ usertype , - 1 , 1 ) ;
# return if $fully_substribed{$casual_type} and $cat{$date_start}{$date_end}{$id}{$userid} and $cat{$date_start}{$date_end}{$id}{$userid} ne 'available' ;
# return if $fully_substribed{$casual_type} and $saction eq 'available' and $this_user_subscribed{$userid} != 1 ;
return unless $ butttxt ;
$ print_box_content_rows . = qq~<div class="clear"></div>~ ;
} #------------------------------------------------------------------------------------------
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 get_event_uploads {
my ( $ id , $ type , $ folder ) = @ _ ;
unless ( $ id and $ type ) { return ( ) ; }
my $ uploads = '' ; my % uploads = ( ) ;
my $ field = $ type ; my ( $ doctype , $ num ) = split ( /\_/ , $ field ) ; $ doctype . = 's' ;
$ table = $ doctype unless $ table ;
my $ doc = $ db { $ table } { $ id } { $ field } ;
& common_debug ( "$doc" ) ;
if ( $ doc ) {
my $ tooltip = qq~data-toggle="tooltip" data-placement="right" data-title="$doc"~ ;
my @ docarr = split ( /\./ , $ doc ) ; my $ ext = pop @ docarr ; my $ file = pop @ docarr ;
my $ dlg_title = uc substr ( $ doc , 0 , 4 ) . ' ' . $ ext ;
$ file_cnt + + ;
my $ test_icon_loc = qq~$htmlpath/img/icons/doc/$ext.png~ ;
my $ icon_loc = qq~/img/icons/doc/$ext.png~ ; $ icon_loc = qq~/img/icons/doc/def.png~ unless - f $ test_icon_loc ;
# $uploads{$type} .= qq~<a id="attach-$tag_id-$file_cnt" style='margin-left:10px;' $tooltip href="javascript:dlgMdl('/uploads/$doctype/$db{$table}{$id}{$folder}/$doc','$dlg_title','','max-dialog');"><img src='/img/icons/doc/$ext.png' style='width:40px;height:40px;'></a><a href="javascript:void(0);" id="delete-attach-$id-$file_cnt"><i class="glyphicon glyphicon-trash"></i></a>~ ;
$ uploads { $ type } . = qq~<a id="attach-$id-$file_cnt" style='margin-left:10px;' $tooltip href="javascript:parent.dlgMdl('/uploads/$doctype/$db{$table}{$id}{$folder}/$doc','$dlg_title','','max-dialog');"><img src='$icon_loc' style='width:30px;height:30px;'></a>~ ;
# $uploads .= qq~<a id="attach-$tag_id-$file_cnt" style='margin-left:10px;' href="javascript:dlgMdl('/uploads/$doctype\s/$db{$table}{$id}{$folder}/$db{$table}{$id}{$field}','$dlg_title','','max-dialog');"><img src='/img/icons/doc/$ext.png' style='width:40px;height:40px;'></a><a href="javascript:void(0);" id="delete-attach-$tag_id-$file_cnt"><i class="glyphicon glyphicon-trash"></i></a>~;
}
if ( $ uploads { $ type } ) { $ uploads = $ uploads { $ type } ; }
return ( $ uploads ) ;
} #------------------------------------------------------------------------------------------
sub check_dates_booked {
my ( $ qnr , $ uid , $ startdate , $ enddate ) = @ _ ;
my ( $ dy1 , $ dm1 , $ dd1 , $ th1 , $ tm1 , $ ts1 ) = & common_split_sql_time ( $ startdate ) ; my $ startccyymmdd = $ dy1 . $ dm1 . $ dd1 ; $ start_hour { $ uid } { $ startccyymmdd } = $ th1 ; #my $startccyymmddhr = $startccyymmdd . $th1 ;
my ( $ dy2 , $ dm2 , $ dd2 , $ th2 , $ tm2 , $ ts2 ) = & common_split_sql_time ( $ enddate ) ; my $ endccyymmdd = $ dy2 . $ dm2 . $ dd2 ; $ end_hour { $ uid } { $ endccyymmdd } = $ th2 ; #my $endccyymmddhr = $endccyymmdd . $th2 ;
my $ array_date = $ startccyymmdd ;
while ( $ array_date < $ endccyymmdd ) {
my $ date_dd = substr ( $ array_date , 6 , 2 ) ;
my $ date_mm = substr ( $ array_date , 4 , 2 ) ;
my $ date_ccyy = substr ( $ array_date , 0 , 4 ) ;
my ( $ ccyy , $ month , $ day ) = Add_Delta_Days ( $ date_ccyy , $ date_mm , $ date_dd , 1 ) ;
$ month = sprintf ( "%02s" , $ month ) ;
$ day = sprintf ( "%02s" , $ day ) ;
$ array_date = "$ccyy$month$day" ;
$ start_hr = ( $ start_hour { $ uid } { $ array_date } ) ? $ start_hour { $ uid } { $ array_date } : 0 ;
$ end_hr = ( $ end_hour { $ uid } { $ array_date } ) ? $ end_hour { $ uid } { $ array_date } : 23 ;
for ( $ start_hr .. $ end_hr ) {
my $ hr = sprintf ( "%02s" , $ _ ) ;
my ( $ year , $ month , $ day , $ hour , $ min , $ sec ) = Add_Delta_DHMS ( $ date_ccyy , $ date_mm , $ date_dd , $ hr , '00' , '00' , 0 , 1 , 0 , 0 ) ;
$ time_subscribed { $ uid } { "$array_date$hr" } = 1 ;
}
# $day_subscribed{$uid}{$array_date} = 1 ;
}
} #------------------------------------------------------------------------------------------
sub display_user {
& db_min_ro ( 'users' , 'id,name,username' , '' , '' , '' ) ;
foreach my $ id ( keys % { $ db { users } } ) {
$ user_name { $ id } = $ db { users } { $ id } { name } ;
}
} #------------------------------------------------------------------------------------------
sub add_form {
$ boxtitle = 'Add' ;
@ user_excl_sql = ( ) ;
foreach ( keys % { $ useropts { it } } ) {
push @ user_excl_sql , "username <> '$_'" ;
}
my $ user_excl_sql = join ( " AND " , @ user_excl_sql ) ;
& common_min_select_opts ( 'user_id' , 'users' , 'name' , '' , 1 , '' , $ user_excl_sql ) ;
# &common_min_opts('leave_type','type',1) ;
% col_name = ( ) ;
& db_min_ro ( $ table , '*' , 'id > 1 AND id < 10' , '' , '' ) ;
& hidden_fields ;
# $extra_form_fields = qq(<input type="hidden" name="incident_id" value="$id">) ;
$ print_box_content_rows = & common_min_add_form ( 'events' , 'save' ) ;
} #------------------------------------------------------------------------------------------
sub load_events {
& db_min_ro ( $ table , '*' , "id='$id'" , '' , '' ) ;
& common_min_dialog ;
& display_user ;
my $ category = ucfirst $ db { $ table } { $ id } { category } ;
# my $title_row = qq(<div class="col-md-12"><label class="control-label">Title :</label> <span class="label-success label">$db{$table}{$id}{title}</span></div>) ;
if ( $ db { $ table } { $ id } { category } eq 'leave' ) {
# $title_row = '' ;
$ category = ucfirst $ db { $ table } { $ id } { type } . ' ' . $ category
}
if ( $ db { $ table } { $ id } { category } eq 'weekend_work' ) {
$ category =~ s/\_/ /g ;
}
$ content = qq(
< div class = "row" >
< div class = "col-md-12" > & nbsp ;
</div>
</div>
< div class = "row" >
< div class = "box col-md-12" >
< div class = "box-inner" >
< div class = "box-header well" data - original - title = "" >
<h2> < i class = "glyphicon glyphicon-tasks" > </i> Item </h2>
</div>
< div class = "box-content" >
< div class = "row" >
< div class = "col-md-12" >
$ title_row
< div class = "col-md-12" > < label class = "control-label" > Name : </label> $ user_name { $ db { $ table } { $ id } { user_id } } </div>
< div class = "col-md-12" > < label class = "control-label" > Category : </label> < span class = "label-default label" > $ category </span> </div>
< div class = "col-md-12" > < label class = "control-label" > Notes : </label> $ db { $ table } { $ id } { notes } </div>
< div class = "col-md-12" > < label class = "control-label" > Start Time : </label> $ db { $ table } { $ id } { startdate } </div>
< div class = "col-md-12" > < label class = "control-label" > End Time : </label> $ db { $ table } { $ id } { enddate } </div>
< div class = "col-md-12" > < label class = "control-label" > Date Added : </label> $ db { $ table } { $ id } { date_time } </div>
</div>
</div>
</div>
</div>
</div>
</div> <!--/row-->
) ;
} #----------------------------------------------------------------------------------------
sub screen1 {
my $ buttons = '' ;
if ( $ useropts { super } { lc $ username } ) {
$ buttons = qq( <button type="button" class="btn btn-primary" id="addbutt"><i class="glyphicon glyphicon-plus icon-white"></i></button>
< button type = "button" class = "btn btn-info" id = "editbutt" > < i class = "glyphicon glyphicon-edit icon-white" > </i> </button> & nbsp ;
< button type = "button" class = "btn btn-danger" id = "delbutt" > < i class = "glyphicon glyphicon-trash icon-white" > </i> </button> & nbsp ; ) ;
}
print << ENDOFTEXT ;
$ dialog { 'common' } { 'head' }
< div id = "content" class = "col-lg-12 col-sm-12" >
< ! - - content starts - - >
$ print_top
< div class = "row" >
< div class = "box col-md-12" >
<div>
$ content
</div>
</div>
<!--/span-->
</div> <!--/row-->
< div class = "row" > < div class = "box col-md-12" > & nbsp ; </div> </div>
< div class = "row" >
< div class = "box col-md-12" >
< form role = "form" name = "form_events" id = "events-form" method = "post" >
< input type = "hidden" name = "iaction" id = "action" value = "" >
< input type = "hidden" name = "id" value = "$id" >
< div class = "row" >
< div class = "col-md-12" >
$ buttons
< button type = "button" class = "btn btn-default" onclick = "parent.BootstrapDialog.closeAll();" > Close </button> </div>
</div>
< div class = "row" > < div class = "col-md-12" > & nbsp ; </div> </div>
</form>
</div>
</div>
</div>
</div> <!--/fluid-row-->
</div> <!--/.fluid-container-->
< ! - - external javascript - - >
<style> body { font - size: 14 px ; } . control - label { font - size: 14 px ; } </style>
$ dialog { 'common' } { 'js' }
<script>
\ $( "#addbutt" ) . click ( function ( ) {
\ $( '#action' ) . val ( 'add' ) ;
\ $( '#events-form' ) . submit ( ) ;
} ) ;
\ $( "#editbutt" ) . click ( function ( ) {
\ $( '#action' ) . val ( 'edit' ) ;
\ $( '#events-form' ) . submit ( ) ;
} ) ;
\ $( "#delbutt" ) . click ( function ( ) {
\ $( '#action' ) . val ( 'delete' ) ;
\ $( '#events-form' ) . submit ( ) ;
} ) ;
</script>
</body>
</html>
ENDOFTEXT
#
# <div class="row"><div class="col-md-12"><button type="button" class="btn btn-success" id="addbutt">Add</button> <button type="button" class="btn btn-info" id="editbutt">Edit</button> <button type="button" class="btn btn-danger" id="delbutt"><i class="glyphicon glyphicon-trash icon-white"></i></button> <button type="button" class="btn btn-default" onclick="parent.BootstrapDialog.closeAll();">Close</button></div></div><div class="row"><div class="col-md-12"> </div></div>
} #------------------------------------------------------------------------------------------
sub screen2 {
$ trigger_jquery_raw . = qq( \ $ ( "#savebutt" ) .click ( function ( ) {
var sc_val = \ $( "#selectAssigned_users" ) . chosen ( ) . val ( ) ;
\ $( '#assigned-users' ) . val ( sc_val ) ;
\ $( '#events-form' ) . submit ( ) ;
} ) ; ) ;
& common_min_alert_type ;
& common_min_footer ( 'id' , '' ) ;
& common_min_dialog ;
2026-02-03 12:35:43 +00:00
my $ events_table_body = ( $ event_or_analytics eq 'event' ) ? qq ~
< div class = "row" >
< div class = "box col-md-12" >
< div class = "box-inner" >
< div class = "box-header well" data - original - title = "" >
<h2> < i class = "glyphicon glyphicon-tasks" > </i> $ boxtitle Event </h2>
</div>
< div class = "box-content" >
$ print_box_content_rows
</div>
</div>
</div>
</div>
~ : qq~~ ;
2025-11-26 09:31:54 +00:00
print << ENDOFTEXT ;
$ dialog { 'common' } { 'head' }
< div id = "content" class = "col-lg-12 col-sm-12" >
< ! - - content starts - - >
$ print_top
< div class = "row" >
< div class = "box col-md-12" >
$ events_content
</div>
<!--/span-->
</div> <!--/row-->
2026-02-03 12:35:43 +00:00
$ events_table_body <!--/row-->
2025-11-26 09:31:54 +00:00
$ analytics_table_body
</div> <!--/row-->
</div> <!--/fluid-row-->
</div> <!--/.fluid-container-->
< ! - - external javascript - - >
<style> body { font - size: 14 px ; } . control - label { font - size: 14 px ; } </style>
< link href = "$useropts{'css'}/bootstrap-dialog.css" rel = 'stylesheet' >
$ dialog { 'common' } { 'js' }
< script src = "$useropts{'js'}/bootstrap-datetimepicker.min.js" > </script>
< script src = "$useropts{'js'}/jquery.form-validator.min.js" > </script>
< script src = "$useropts{'js'}/bootstrap-dialog.js" > </script>
<script>
\ $ . validate ( ) ;
\ $ ( document ) . ready ( function ( ) {
$ trigger_jquery
} ) ;
$ trigger_jquery_raw
</script>
$ print_footer_jscript
$ print_footer_forms
</body>
</html>
ENDOFTEXT
#
} #------------------------------------------------------------------------------------------
sub screen3 {
if ( ( $ username eq 'rory' ) and ( $ testing ) ) { return ; }
print << ENDOFTEXT ;
< ! DOCTYPE html >
< html lang = "en" >
<head>
< meta charset = "utf-8" >
<title> $ useropts { title } </title>
< script src = "$useropts{'bower_components'}/jquery/jquery.min.js" > </script>
</head>
<body>
<script>
\ $ ( function ( ) {
parent . location . reload ( ) ;
parent . BootstrapDialog . closeAll ( ) ;
} ) ;
</script>
</body>
</html>
ENDOFTEXT
#
} #------------------------------------------------------------------------------------------
use db ;
use db_min ;
use today ;
use common ;
use common_min ;
1 ;