344 lines
12 KiB
Perl
344 lines
12 KiB
Perl
|
|
#!/usr/bin/perl
|
||
|
|
|
||
|
|
BEGIN { use lib '/usr/home/cfg' ; require push_inc ; }
|
||
|
|
|
||
|
|
print "Content-type: text/html\n\n";
|
||
|
|
|
||
|
|
use CGI::Carp qw(fatalsToBrowser);
|
||
|
|
use Fcntl qw(:flock);
|
||
|
|
use JSON::Repair ':all' ;
|
||
|
|
# use Time::Piece ;
|
||
|
|
use Date::Calc qw(Add_Delta_Days) ;
|
||
|
|
|
||
|
|
require cfg ;
|
||
|
|
|
||
|
|
#------------------------------------------------------------------------------------------
|
||
|
|
|
||
|
|
@ARGV = split(/\\*\&/, $ENV{'QUERY_STRING'});
|
||
|
|
|
||
|
|
foreach $ARG (@ARGV) { ($par,$val) = split(/\=/,$ARG) ; $val =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg; $param{$par} = $val ; }
|
||
|
|
|
||
|
|
# our $debug = 1 ;
|
||
|
|
|
||
|
|
# my $json_type = $param{json_type} ;
|
||
|
|
|
||
|
|
# e.g. https://itvadmin.co.za/cgi-bin/scripts/get/get_event_quote_conflicts.pl?
|
||
|
|
# our $debug = 1 ;
|
||
|
|
|
||
|
|
#------------------------------------------------------------------------------------------
|
||
|
|
|
||
|
|
&load_json ;
|
||
|
|
|
||
|
|
print $json ;
|
||
|
|
|
||
|
|
exit ;
|
||
|
|
|
||
|
|
#------------------------------------------------------------------------------------------
|
||
|
|
|
||
|
|
sub load_json {
|
||
|
|
|
||
|
|
# if $param{table} eq 'users' ;
|
||
|
|
|
||
|
|
if (!$param{quote_id}) {
|
||
|
|
print "[]" ;
|
||
|
|
exit ;
|
||
|
|
}
|
||
|
|
|
||
|
|
my @param_times_from = ($param{times_from} =~ /(\d+)/g) ? split(";",substr($param{date_from},11) . ';' . $param{times_from}) : (substr($param{date_from},11)) ;
|
||
|
|
my @param_times_to = ($param{times_to} =~ /(\d+)/g) ? split(";",$param{times_to} . ';' . substr($param{date_to},11)) : (substr($param{date_to},11)) ;
|
||
|
|
|
||
|
|
my $day_cnt = 0 ;
|
||
|
|
|
||
|
|
my ($p_year,$p_month,$p_day) = split("-",substr($param{date_from},0,10)) ;
|
||
|
|
|
||
|
|
foreach (@param_times_from) {
|
||
|
|
|
||
|
|
$p_month = sprintf("%02d",$p_month) ;
|
||
|
|
$p_day = sprintf("%02d",$p_day) ;
|
||
|
|
$day_cnt++ ;
|
||
|
|
my $time_f = $_ ;
|
||
|
|
my $time_e = $param_times_to[$day_cnt-1] ;
|
||
|
|
$time_f =~ s/\://g ;
|
||
|
|
$time_e =~ s/\://g ;
|
||
|
|
$param_day_start{$day_cnt} = int("$p_year$p_month$p_day$time_f") ;
|
||
|
|
$param_day_end{$day_cnt} = int("$p_year$p_month$p_day$time_e") ;
|
||
|
|
($p_year,$p_month,$p_day) = Add_Delta_Days($p_year,$p_month,$p_day,1) ;
|
||
|
|
}
|
||
|
|
|
||
|
|
our $table = 'event_quotes' ; my @sys_ids = () ;
|
||
|
|
|
||
|
|
# foreach (split(";",$param{system_ids})) {
|
||
|
|
# next unless $_ ;
|
||
|
|
# push @sys_ids,"`event_system_id_multiple` LIKE '%;$_;%' OR `event_system_id_multiple` LIKE '$_;%' OR `event_system_id_multiple` LIKE '%;$_'"
|
||
|
|
# }
|
||
|
|
|
||
|
|
# my $sys_ids_sql = join (" OR ", @sys_ids) ;
|
||
|
|
|
||
|
|
# $sys_ids_sql = qq~($sys_ids_sql) AND ~ if $sys_ids_sql ;
|
||
|
|
|
||
|
|
# $sys_ids_sql .= qq~`id` != '$param{quote_id}'~ ;
|
||
|
|
# $sys_ids_sql .= qq~`id` != ''~ ;
|
||
|
|
|
||
|
|
# my $sys_ids_sql = qq~`date_to` < '$param{date_from}' OR `date_from` > '$param{date_to}'~ ;
|
||
|
|
|
||
|
|
my @event_ids_sql = () ; my @event_ids_arr = () ; my @event_ids_sql_2 = () ;
|
||
|
|
|
||
|
|
foreach (split(";",$param{system_ids})) {
|
||
|
|
# push @event_ids_sql,"event_system_id_multiple LIKE '%;$_'" ;
|
||
|
|
# push @event_ids_sql,"event_system_id_multiple LIKE '%;$_;%'" ;
|
||
|
|
# push @event_ids_sql,"event_system_id_multiple LIKE '$_;%'" ;
|
||
|
|
push @event_ids_sql,"FIND_IN_SET($_,REPLACE(event_system_id_multiple,';',','))" ;
|
||
|
|
push @event_ids_sql_2,"id='$_'" ;
|
||
|
|
push @event_ids_arr,"$_"
|
||
|
|
}
|
||
|
|
my $event_ids_sql_str = join(" OR ",@event_ids_sql) ;
|
||
|
|
my $event_ids_sql_str_2 = join(" OR ",@event_ids_sql_2) ;
|
||
|
|
|
||
|
|
unless ($event_ids_sql_str) {
|
||
|
|
print "[]" ;
|
||
|
|
exit ;
|
||
|
|
}
|
||
|
|
|
||
|
|
&db_min_ro($table,'id,ref,date_from,date_to,event_system_id_multiple,operator_ids,times_from,times_to,days_active,qty',"
|
||
|
|
((`date_from` <= '$param{date_to}' AND '$param{date_to}' <= `date_to`) OR
|
||
|
|
(`date_from` <= '$param{date_from}' AND '$param{date_from}' <= `date_to`) OR
|
||
|
|
(`date_from` >= '$param{date_from}' AND '$param{date_to}' >= `date_to`) OR
|
||
|
|
(`date_from` <= '$param{date_from}' AND '$param{date_to}' <= `date_to`))
|
||
|
|
AND id <> '$param{quote_id}'
|
||
|
|
AND quote_rejected <> '1'
|
||
|
|
AND quote_cancelled <> '1'
|
||
|
|
AND ($event_ids_sql_str)
|
||
|
|
",'','') ;
|
||
|
|
|
||
|
|
$json = '[' ; my $event_cnt = 0 ;
|
||
|
|
|
||
|
|
foreach my $id (sort keys %{$db{$table}}) {
|
||
|
|
$event_cnt++ ;
|
||
|
|
last ;
|
||
|
|
}
|
||
|
|
|
||
|
|
unless ($event_cnt) {
|
||
|
|
print "[]" ;
|
||
|
|
exit ;
|
||
|
|
}
|
||
|
|
|
||
|
|
&db_min_ro('event_systems','id,name,description',$event_ids_sql_str_2,'','') if $event_ids_sql_str_2 ;
|
||
|
|
|
||
|
|
my $param_start_time = $param{date_from} ;
|
||
|
|
my $param_end_time = $param{date_to} ;
|
||
|
|
$param_start_time =~ s/[T\-\:\s]//g;
|
||
|
|
$param_end_time =~ s/[T\-\:\s]//g;
|
||
|
|
|
||
|
|
foreach my $id (sort keys %{$db{$table}}) {
|
||
|
|
|
||
|
|
next unless $id == 7067 ;
|
||
|
|
|
||
|
|
next if !$db{$table}{$id}{days_active} && !$db{$table}{$id}{qty} ;
|
||
|
|
|
||
|
|
my ($s_year,$s_month,$s_day) = split("-",substr($db{$table}{$id}{date_from},0,10)) ;
|
||
|
|
|
||
|
|
my @times_from = () ; my @times_to = () ;
|
||
|
|
|
||
|
|
push @times_from , substr($db{$table}{$id}{date_from},11) ;
|
||
|
|
|
||
|
|
if ($db{$table}{$id}{times_to} =~ /(\d+)/g && $db{$table}{$id}{times_from} =~ /(\d+)/g && $db{$table}{$id}{qty} > 1) {
|
||
|
|
foreach (split(";",$db{$table}{$id}{times_from})) {
|
||
|
|
push @times_from,$_ if $_ ;
|
||
|
|
}
|
||
|
|
foreach (split(";",$db{$table}{$id}{times_to})) {
|
||
|
|
push @times_to,$_ if $_ ;
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
push @times_to , substr($db{$table}{$id}{date_to},11) ;
|
||
|
|
|
||
|
|
my $event_to_json = qq~"event":"$db{$table}{$id}{ref} [$id]"~ ; my $system_json = qq~~ ; my $time_json = qq~~ ;
|
||
|
|
|
||
|
|
# $json .= qq~{"event":"$db{$table}{$id}{ref} [$id]"~ ;
|
||
|
|
|
||
|
|
my $system_cnt = 0 ;
|
||
|
|
|
||
|
|
foreach my $sys_id_in_table (split(";",$db{$table}{$id}{event_system_id_multiple})) {
|
||
|
|
|
||
|
|
next unless $sys_id_in_table ;
|
||
|
|
|
||
|
|
next unless grep { $_ == $sys_id_in_table } @event_ids_arr ;
|
||
|
|
|
||
|
|
$system_cnt++ ;
|
||
|
|
|
||
|
|
$system_json .= qq~,"system_$system_cnt":"$db{event_systems}{$sys_id_in_table}{name} [$db{event_systems}{$sys_id_in_table}{description}]"~ ;
|
||
|
|
|
||
|
|
next if $system_cnt > 1 ;
|
||
|
|
|
||
|
|
my $days_cnt = -1 ; my $day_num = 0 ;
|
||
|
|
|
||
|
|
if ($db{$table}{$id}{times_from} && $db{$table}{$id}{times_from} =~ /(\d+)/g) {
|
||
|
|
|
||
|
|
foreach my $day_active (split(";",$db{$table}{$id}{days_active})) {
|
||
|
|
|
||
|
|
$days_cnt++ ;
|
||
|
|
if ($days_cnt > 0) {
|
||
|
|
($s_year,$s_month,$s_day) = Add_Delta_Days($s_year,$s_month,$s_day,1) ;
|
||
|
|
$s_day = sprintf("%02d",$s_day) ;
|
||
|
|
$s_month = sprintf("%02d",$s_month) ;
|
||
|
|
}
|
||
|
|
next unless $day_active ;
|
||
|
|
my $start_time = "$s_year$s_month$s_day$times_from[$days_cnt]" ;
|
||
|
|
my $end_time = "$s_year$s_month$s_day$times_to[$days_cnt]" ;
|
||
|
|
$start_time =~ s/\://g ; $end_time =~ s/\://g ;
|
||
|
|
|
||
|
|
if (($param_start_time <= $end_time && $start_time <= $param_start_time) || ($param_end_time <= $end_time && $start_time <= $param_end_time)) {
|
||
|
|
|
||
|
|
$day_num = $days_cnt + 1 ;
|
||
|
|
my $date_interval = &common_write_date_interval("$s_year-$s_month-$s_day","$s_year-$s_month-$s_day") ;
|
||
|
|
$date_interval .= " FROM $times_from[$days_cnt] TO $times_to[$days_cnt]" ;
|
||
|
|
$time_json .= qq~,"date_interval_day_$day_num":"$date_interval"~ ;
|
||
|
|
|
||
|
|
} elsif (($param_start_time < $start_time && $end_time < $param_end_time) || ($param_end_time <= $end_time && $start_time <= $param_start_time)) {
|
||
|
|
|
||
|
|
foreach (keys %param_day_start) {
|
||
|
|
|
||
|
|
if (($param_day_start{$_} <= $end_time && $start_time <= $param_day_start{$_}) || ($param_day_end{$_} <= $end_time && $start_time <= $param_day_end{$_}) || ($param_day_end{$_} <= $end_time && $start_time <= $param_day_start{$_}) || ($param_day_start{$_} < $start_time && $end_time < $param_day_end{$_})) {
|
||
|
|
|
||
|
|
$day_num = $days_cnt + 1 ;
|
||
|
|
my $date_interval = &common_write_date_interval("$s_year-$s_month-$s_day","$s_year-$s_month-$s_day") ;
|
||
|
|
$date_interval .= " FROM $times_from[$days_cnt] TO $times_to[$days_cnt]" ;
|
||
|
|
$time_json .= qq~,"date_interval_day_$day_num":"$date_interval"~ ;
|
||
|
|
|
||
|
|
}
|
||
|
|
}
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
} elsif ($db{$table}{$id}{qty}) {
|
||
|
|
|
||
|
|
for my $day_num (1 .. $db{$table}{$id}{qty}) {
|
||
|
|
$days_cnt = $day_num - 1 ;
|
||
|
|
if ($days_cnt > 0) {
|
||
|
|
($s_year,$s_month,$s_day) = Add_Delta_Days($s_year,$s_month,$s_day,1) ;
|
||
|
|
$s_day = sprintf("%02d",$s_day) ;
|
||
|
|
$s_month = sprintf("%02d",$s_month) ;
|
||
|
|
}
|
||
|
|
my $start_time = "$s_year$s_month$s_day$times_from[0]" ;
|
||
|
|
my $end_time = "$s_year$s_month$s_day$times_to[0]" ;
|
||
|
|
$start_time =~ s/\://g ; $end_time =~ s/\://g ;
|
||
|
|
|
||
|
|
if (($param_start_time <= $end_time && $start_time <= $param_start_time) || ($param_end_time <= $end_time && $start_time <= $param_end_time)) {
|
||
|
|
|
||
|
|
my $date_interval = &common_write_date_interval("$s_year-$s_month-$s_day","$s_year-$s_month-$s_day") ;
|
||
|
|
$date_interval .= " FROM $times_from[$days_cnt] TO $times_to[$days_cnt]" ;
|
||
|
|
$time_json .= qq~,"date_interval_day_$day_num":"$date_interval"~ ;
|
||
|
|
|
||
|
|
} elsif (($param_start_time < $start_time && $end_time < $param_end_time) || ($param_end_time <= $end_time && $start_time <= $param_start_time)) {
|
||
|
|
|
||
|
|
foreach (keys %param_day_start) {
|
||
|
|
|
||
|
|
if (($param_day_start{$_} <= $end_time && $start_time <= $param_day_start{$_}) || ($param_day_end{$_} <= $end_time && $start_time <= $param_day_end{$_}) || ($param_day_end{$_} <= $end_time && $start_time <= $param_day_start{$_}) || ($param_day_start{$_} < $start_time && $end_time < $param_day_end{$_})) {
|
||
|
|
|
||
|
|
my $date_interval = &common_write_date_interval("$s_year-$s_month-$s_day","$s_year-$s_month-$s_day") ;
|
||
|
|
$date_interval .= " FROM $times_from[$days_cnt] TO $times_to[$days_cnt]" ;
|
||
|
|
$time_json .= qq~,"date_interval_day_$day_num":"$date_interval"~ ;
|
||
|
|
|
||
|
|
}
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
}
|
||
|
|
}
|
||
|
|
$json .= qq~{$event_to_json$system_json$time_json},~ if $event_to_json && $system_json && $time_json ;
|
||
|
|
}
|
||
|
|
# $json .= qq~{"user":"","system":"$system_name","event":"$db{$table}{$id}{ref}","interval":"$db{$table}{$id}{date_from} to $db{$table}{$id}{date_to}"},~ ;
|
||
|
|
}
|
||
|
|
|
||
|
|
# our %overlap_dates = () ;
|
||
|
|
# # our %seen_this = () ; my %json_by_id = () ;
|
||
|
|
|
||
|
|
# # if ($param{system_ids}) {
|
||
|
|
|
||
|
|
# # foreach my $id (sort keys %{$db{$table}}) {
|
||
|
|
|
||
|
|
# # next if $id eq $param{quote_id} ;
|
||
|
|
|
||
|
|
# # foreach my $sys_id_input (split(/;/,$param{system_ids})) {
|
||
|
|
|
||
|
|
# # next unless $sys_id_input ;
|
||
|
|
|
||
|
|
# # foreach my $sys_id_in_table (split(/;/,$db{$table}{$id}{event_system_id_multiple})) {
|
||
|
|
|
||
|
|
# # next unless $sys_id_in_table ;
|
||
|
|
|
||
|
|
# # if ($sys_id_input eq $sys_id_in_table) {
|
||
|
|
|
||
|
|
# # next if $seen_this{$sys_id_input} ;
|
||
|
|
# # $seen_this{$sys_id_input} = 1 ;
|
||
|
|
# # my $system_name = qq~$db{event_systems}{$sys_id_input}{name}~ ;
|
||
|
|
# # $system_name .= qq~ ($db{event_systems}{$sys_id_input}{description})~ if $db{event_systems}{$sys_id_input}{description} ;
|
||
|
|
# # next unless $system_name ;
|
||
|
|
# # # my $date_interval = &common_write_date_interval($db{$table}{$id}{date_from},$db{$table}{$id}{date_to}) ;
|
||
|
|
|
||
|
|
# # $json .= qq~{"user":"","system":"$system_name","event":"$db{$table}{$id}{ref}","interval":"$db{$table}{$id}{date_from} to $db{$table}{$id}{date_to}"},~ ;
|
||
|
|
# # # $json_by_id{$id} .= qq~$json~ ;
|
||
|
|
# # }
|
||
|
|
# # }
|
||
|
|
# # }
|
||
|
|
# # }
|
||
|
|
# # }
|
||
|
|
|
||
|
|
|
||
|
|
# # %seen_this = () ;
|
||
|
|
|
||
|
|
# # if ($param{op_ids}) {
|
||
|
|
|
||
|
|
# # foreach my $id (sort keys %{$db{$table}}) {
|
||
|
|
|
||
|
|
# # next if $id eq $param{quote_id} ;
|
||
|
|
|
||
|
|
# # foreach my $op_id_input (split(/,/,$param{op_ids})) {
|
||
|
|
|
||
|
|
# # next unless $op_id_input ;
|
||
|
|
|
||
|
|
# # foreach my $op_id_in_table (split(/,/,$db{$table}{$id}{operator_ids})) {
|
||
|
|
|
||
|
|
# # next unless $op_id_in_table ;
|
||
|
|
|
||
|
|
# # if ($op_id_in_table eq $op_id_input) {
|
||
|
|
|
||
|
|
# # next if $seen_this{$op_id_input} ;
|
||
|
|
# # $seen_this{$op_id_input} = 1 ;
|
||
|
|
# # my $op_name = qq~$db{users}{$op_id_in_table}{name}~ ;
|
||
|
|
# # next unless $op_name ;
|
||
|
|
# # # my $date_interval = &common_write_date_interval($db{$table}{$id}{date_from},$db{$table}{$id}{date_to}) ;
|
||
|
|
|
||
|
|
# # $json .= qq~{"user":"$op_name","system":"","event":"$db{$table}{$id}{ref}","interval":"$db{$table}{$id}{date_from} to $db{$table}{$id}{date_to}"},~ ;
|
||
|
|
|
||
|
|
# # }
|
||
|
|
# # }
|
||
|
|
# # }
|
||
|
|
# # }
|
||
|
|
# # }
|
||
|
|
|
||
|
|
# &calibration_check_for_overlapping_dates('event_systems',"event_system_id_multiple",$param{date_from},$param{date_to},$param{system_ids},1) ;
|
||
|
|
|
||
|
|
# $json = '[' ;
|
||
|
|
|
||
|
|
# foreach my $sys_id (sort keys %overlap_dates) {
|
||
|
|
|
||
|
|
# my $system_name = $db{event_systems}{$sys_id}{name} ;
|
||
|
|
# $system_name .= qq~ ($db{event_systems}{$sys_id}{description})~ if $db{event_systems}{$sys_id}{description} ;
|
||
|
|
# foreach my $event_id (keys %{$overlap_dates{$sys_id}}) {
|
||
|
|
# $json .= qq~{"system":"$system_name","event":"$db{$table}{$event_id}{ref}","interval":"$overlap_dates{$sys_id}{$event_id}"},~ ;
|
||
|
|
# }
|
||
|
|
# }
|
||
|
|
|
||
|
|
if ($json =~ /\,/) { $json = substr($json,0,-1) ; }
|
||
|
|
|
||
|
|
$json =~ s/\\//g ;
|
||
|
|
$json .= ']' ;
|
||
|
|
|
||
|
|
} #------------------------------------------------------------------------------------------
|
||
|
|
|
||
|
|
use db ;
|
||
|
|
use common ;
|
||
|
|
# use calibration ;
|
||
|
|
|
||
|
|
1;
|