#!/usr/bin/perl BEGIN { use lib '/usr/home/cfg' ; require push_inc ; } require cfg ; print "Content-type: text/html\n\n"; # unless ($useropts{it}{$username}) { print "<<<<<<<<<<<< MAINTENANCE IN PROGRESS >>>>>>>>>" ; exit ; } #--------------------------------------------------------------------------------------------------------------------------------------------------------------------- use CGI::Carp qw(fatalsToBrowser); use CGI; use Mail::Sendmail; use Fcntl qw(:flock); use File::Copy; use File::Basename; use Date::Calc qw(:all); use Excel::Writer::XLSX; use Time::Piece ; &today; #--------------------------------------------------------------------------------------------------------------------------------------------------------------------- @ARGV = split(/\\*\&/, $ENV{'QUERY_STRING'}); $action = $ARGV[0] ; our ($q) = CGI -> new() ; our $iaction = $q -> param('iaction') || $action ; our $isaved = $q -> param('isaved') || '' ; # our $debug = 1 ; # our $testing = 1 ; # if ($username ne 'handre') { # print "<< MAINTENANCE IN PROGRESS >>" ; exit ; # } #-------- page opts -------------------------------------------------------------------------------------------------------------------------------------------------- &page_opts ; #--------------------------------------------------------------------------------------------------------------------------------------------------------------------- our $srchscr = 1 ; if ($iaction eq 'save') { &db_open_upd ; our $db_ignore_open_close = 1 ; # do one open and one close instead of repeating it &common_min_load_params ; &report_ifields; &update ; # &list_screen ; $db_ignore_open_close = 0 ; # do one open and one close instead of repeating it &db_close_conn ; exit if $testing ; # &screen3; &redirect_screen; } &db_open_ro ; our $db_ignore_open_close = 1 ; # do one open and one close instead of repeating it &report_screen if $iaction eq '' ; if ($iaction eq 'report') { &common_min_load_params ; &report_ifields; &list_screen ; &screen3; } &common_min_action; $db_ignore_open_close = 0 ; # do one open and one close instead of repeating it &db_close_conn ; exit; #------------------------------------------------------------------------------------------ sub validate { } sub insert { } sub update { my %seen_event_id = () ; foreach (keys %i) { next if $_ !~ /^update_/ || ($_ =~ /^update_/ && !$i{$_}) ; local @abc = split("_",$_) ; $seen_event_id{$abc[-3]} = 1 ; } local $e_q_sql = join (" OR ",map { "id='$_'" } keys %seen_event_id) ; &db_min_ro($table,'id,event_system_id_multiple,date_from,date_to,set_up_groups_head_operator_ids,set_up_groups_status_ids',"$e_q_sql",'','') ; my %ii = () ; my %iii = %i ; foreach my $event_id (keys %seen_event_id) { my @event_system_ids = split(/\;/,$db{$table}{$event_id}{event_system_id_multiple}) ; my @set_up_head_operator_ids = split(/\;/,$db{$table}{$event_id}{set_up_groups_head_operator_ids}) ; my @set_up_status = split(/\;/,$db{$table}{$event_id}{set_up_groups_status_ids}) ; my $system_cnt = 0 ; foreach (@event_system_ids) { $system_cnt++ ; $head_operator_hash{cnt}{$event_id}{$_} = $system_cnt ; $status_hash{cnt}{$event_id}{$_} = $system_cnt ; } $system_cnt = 0 ; foreach my $system_data (@set_up_head_operator_ids) { $system_cnt++ ; next unless $system_data ; if ($system_data =~ /~/) { ($system_id,$system_data) = split(/\~/,$system_data) ; } else { $system_id = $event_system_ids[$system_cnt - 1] ; } next unless $head_operator_hash{cnt}{$event_id}{$system_id} ; my $day_cnt = 0 ; foreach my $daily_data (split(/\-/,$system_data)) { $day_cnt++ ; $ii{$event_id}{$system_id}{$day_cnt}{head_operator} = $daily_data ; } } $system_cnt = 0 ; foreach my $system_data (@set_up_status) { $system_cnt++ ; next unless $system_data ; if ($system_data =~ /~/) { ($system_id,$system_data) = split(/\~/,$system_data) ; } else { $system_id = $event_system_ids[$system_cnt - 1] ; } next unless $status_hash{cnt}{$event_id}{$system_id}; my $day_cnt = 0 ; foreach my $daily_data (split(/\-/,$system_data)) { $day_cnt++ ; $ii{$event_id}{$system_id}{$day_cnt}{calibration_status} = $daily_data ; } } } foreach my $field (keys %i) { local @a = split("_",$field) ; my $upd_field = "update_$a[-3]\_$a[-2]\_$a[-1]" ; next unless $i{$upd_field} ; if (substr($field,0,19) eq 'calibration_status_') { $ii{$a[-3]}{$a[-2]}{$a[-1]}{calibration_status} = $i{$field} ; } elsif (substr($field,0,14) eq 'head_operator_') { $ii{$a[-3]}{$a[-2]}{$a[-1]}{head_operator} = $i{$field} ; } } # my $calid_field = 'event_system_calibration_ids' ; my $calstatus_field = 'set_up_groups_status_ids' ; my $headops_field = 'set_up_groups_head_operator_ids' ; foreach my $event_id (keys %ii) { %i = () ; # &common_debug("1. +++ event_id[$event_id] date_from[$db{$table}{$event_id}{date_from}] date_to[$db{$table}{$event_id}{date_to}] event_system_calibration_ids[$db{$table}{$event_id}{event_system_calibration_ids}] set_up_groups_status_ids[$db{$table}{$event_id}{set_up_groups_status_ids}] event_system_id_multiple[$db{$table}{$event_id}{event_system_id_multiple}]") ; my @event_system_calibration_status = split(/\;/,$db{$table}{$event_id}{set_up_groups_status_ids}) ; my @event_system_ids = split(/\;/,$db{$table}{$event_id}{event_system_id_multiple}) ; # my @calibration_ids = split(";",$db{$table}{$event_id}{event_system_calibration_ids}) ; my @op_head_id = split(/\;/,$db{$table}{$event_id}{set_up_groups_head_operator_ids}) ; my @ed_from = &common_split_sql_time($db{$table}{$event_id}{date_from}) ; my @ed_to = &common_split_sql_time($db{$table}{$event_id}{date_to}) ; &common_date_array("$ed_from[0]$ed_from[1]$ed_from[2]","$ed_to[0]$ed_to[1]$ed_to[2]") ; $sys_cnt = 0; foreach my $system_id (sort { $status_hash{cnt}{$event_id}{$a} <=> $status_hash{cnt}{$event_id}{$b} } keys %{$status_hash{cnt}{$event_id}}) { $sys_cnt++; my (@calibrator_statuses_per_event_day) = split(/\-/,$event_system_calibration_status[$sys_cnt-1]); my $sys_day=0; my $line = qq~~ ; foreach my $_date (@common_date_array) { $sys_day++; $line .= "$ii{$event_id}{$system_id}{$sys_day}{calibration_status}-" ; } $line =~ s/-+$// ; $i{$calstatus_field} .= qq~$system_id\~$line~ if $line ; $i{$calstatus_field} .= qq~;~ ; } $i{$calstatus_field} =~ s/;+$// ; $sys_cnt = 0; foreach my $system_id (sort { $head_operator_hash{cnt}{$event_id}{$a} <=> $head_operator_hash{cnt}{$event_id}{$b} } keys %{$head_operator_hash{cnt}{$event_id}}) { $sys_cnt++ ; my (@head_op_id_per_event_day) = split(/\-/,$op_head_id[$sys_cnt-1]) ; my $sys_day = 0 ; my $line = qq~~ ; foreach my $_date (@common_date_array) { $sys_day++; $line .= "$ii{$event_id}{$system_id}{$sys_day}{head_operator}-" ; } $line =~ s/-+$// ; $i{$headops_field} .= qq~$system_id\~$line~ if $line ; $i{$headops_field} .= ";" ; } $i{$headops_field} =~ s/;+$// ; $ignore{$calstatus_field} = (($i{$calstatus_field} eq $db{$table}{$event_id}{$calstatus_field}) || (!$i{$calstatus_field} && !$db{$table}{$event_id}{$calstatus_field})) ? 1 : 0 ; $ignore{$headops_field} = (($i{$headops_field} eq $db{$table}{$event_id}{$headops_field}) || (!$i{$headops_field} && !$db{$table}{$event_id}{$headops_field})) ? 1 : 0 ; # print "\n $event_id : $calstatus_field ($ignore{$calstatus_field}) : $i{$calstatus_field} , $db{$table}{$event_id}{$calstatus_field}" ; # print "\n $event_id : $headops_field ($ignore{$headops_field}) : $i{$headops_field} , $db{$table}{$event_id}{$headops_field}" ; &db_min_upd($table,"`id`='$event_id'") if !$ignore{$calstatus_field} || !$ignore{$headops_field} ; } %i = %iii ; # exit ; } #------------------------------------------------------------------------------------------ sub report_ifields { &load_search_vars ; if ($i{date_from} and $i{date_to}) { # check dates my $date_from_check = $i{date_from} ; $date_from_check =~ s/\-//g ; my $date_to_check = $i{date_to} ; $date_to_check =~ s/\-//g ; if ($date_from_check > $date_to_check) { $error = qq~'$i{date_from}' > '$i{date_to}'~ ; &report_screen ; } # push @report_sql, "((`date_from` >= '$i{date_from} 00:00:00' AND `date_from` <= '$i{date_to} 23:59:59') OR (`date_to` <= '$i{date_to} 23:59:59' AND `date_to` >= '$i{date_from} 00:00:00'))" ; # push @report_sql, "(('$i{date_from} 23:59:59' >= `date_from` AND '$i{date_from} 00:00:00' <= `date_to`) OR ('$i{date_to} 23:59:59' >= `date_from` AND '$i{date_to} 00:00:00' <= `date_to`))" ; # push @report_sql, "((`date_from` >= '$i{date_from} 00:00:00' AND `date_from` <= '$i{date_to} 23:59:59') OR (`date_to` >= '$i{date_from} 00:00:00' AND `date_to` <= '$i{date_to} 23:59:59'))" ; my @srch_ed_from = &common_split_sql_time($i{date_from}) ; my @srch_ed_to = &common_split_sql_time($i{date_to}) ; &common_date_array("$srch_ed_from[0]$srch_ed_from[1]$srch_ed_from[2]","$srch_ed_to[0]$srch_ed_to[1]$srch_ed_to[2]") ; @report_sql_or = () ; foreach my $_srch_date (@common_date_array) { my $srch_ccyy_mm_dd = substr($_srch_date,0,4) . '-' . substr($_srch_date,4,2) . '-' . substr($_srch_date,6,2) ; push @report_sql_or, "('$srch_ccyy_mm_dd 23:59:59' >= date_from AND '$srch_ccyy_mm_dd 00:00:00' <= date_to)" } my $sql_or = join(' OR ',@report_sql_or) ; push @report_sql, "($sql_or)" if $sql_or ; # push @report_sql, "((`date_from` >= '$i{date_from} 00:00:00' AND `date_from` <= '$i{date_to} 23:59:59') OR (`date_to` >= '$i{date_from} 00:00:00' AND `date_to` <= '$i{date_to} 23:59:59'))" ; push @report_results, "(BETWEEN '$i{date_from}' AND '$i{date_to}')" ; } elsif (not $i{date_from}) { $error = qq~PLEASE ENTER A START DATE!~ ; &report_screen; } elsif (not $i{date_to}) { $error = qq~PLEASE ENTER AN END DATE!~ ; &report_screen; } # if ($i{calibrator_id} and $i{calibrator_id} ne 'all') { # push @report_results,"`CALIBRATOR` = '$db{users}{1}{name}'" ; # push @report_sql, " # ( # `event_system_calibration_ids` LIKE '%;$i{calibrator_id};%' OR # `event_system_calibration_ids` LIKE '%;$i{calibrator_id}' OR # `event_system_calibration_ids` LIKE '$i{calibrator_id};%' OR # `event_system_calibration_ids` LIKE '%-$i{calibrator_id};%' OR # `event_system_calibration_ids` LIKE '%;$i{calibrator_id}-%' OR # `event_system_calibration_ids` LIKE '%-$i{calibrator_id}-%' OR # `event_system_calibration_ids` LIKE '$i{calibrator_id}-%' OR # `event_system_calibration_ids` LIKE '%-$i{calibrator_id}' # ) # " ; # } elsif ($i{calibrator_id} and $i{calibrator_id} eq 'all') { # push @report_results,"`CALIBRATORS` = 'ALL'" ; # } else { # # push @report_sql, "(`user_id` = '')" ; # } if ($i{calibration_status} and $i{calibration_status} ne 'all') { push @report_sql, " ( `set_up_groups_status_ids` LIKE '%;$i{calibration_status};%' OR `set_up_groups_status_ids` LIKE '%;$i{calibration_status}' OR `set_up_groups_status_ids` LIKE '$i{calibration_status};%' OR `set_up_groups_status_ids` LIKE '%-$i{calibration_status};%' OR `set_up_groups_status_ids` LIKE '%;$i{calibration_status}-%' OR `set_up_groups_status_ids` LIKE '%-$i{calibration_status}-%' OR `set_up_groups_status_ids` LIKE '$i{calibration_status}-%' OR `set_up_groups_status_ids` LIKE '%-$i{calibration_status}' OR `set_up_groups_status_ids` LIKE '%~$i{calibration_status};%' OR `set_up_groups_status_ids` LIKE '%~$i{calibration_status}' OR `set_up_groups_status_ids` LIKE '%~$i{calibration_status}-%' ) " ; push @report_results,"`STATUS` = '$db{calibration_status}{$i{calibration_status}}{status}'" ; } if ($i{client_id}) { push @report_sql,"quote_to='$i{client_id}'" ; &db_min_ro('customers','id,name',"id='$i{client_id}'",'','') ; push @report_results,"CLIENT = '$db{customers}{$i{client_id}}{name}'" ; } $report_results_msg = uc join(', ', @report_results) ; if (not $report_results_msg) { $error = qq(ENTER AT LEAST ONE SEARCH PARAMETER); &report_screen; } else { $isaved = qq(SELECT WHERE $report_results_msg) ; } our $srch_where_sql = join(' AND ',@report_sql) ; } #------------------------------------------------------------------------------------------ sub load_search_vars { # if ($i{calibrator_id} and $i{calibrator_id} ne 'all') { # &db_min_ro('users','1,name',"`id` = '$i{calibrator_id}'",'','') ; # } &db_min_ro('calibration_status','id,status','','','') ; our $calibration_status = 1 ; } #------------------------------------------------------------------------------------------ sub list_screen { $print_box_content_rows .= &common_min_forms_start("$lcpage") ; our $set_up_groups = 1 ; &calibration_load_list_vars("$srch_where_sql") ; # $box_icon .= qq~
~ ; # $trigger_jquery_raw .= qq~ # function selectAll() { # let jsObject = { # $quote_and_ops_ids # }; # for (let key in jsObject) { # let op_id = jsObject[key]; # let parts = key.split("_") ; # let event_id = parts[1] ; # \$(\$("#itv-table").dataTable().fnGetNodes()).find(\$("input[name=update_"+event_id+"_"+op_id+"]")).each(function () { # console.log("input[name=paid_"+event_id+"_"+op_id+"]") ; # if(\$(this).is(':checked')) { # \$(this).prop('checked',false); # } else { # \$(this).prop('checked',true); # } # }) ; # } # } # ~; # $fcol = 2 ; # $print_box_content_rows .= qq~~ ; $fcol = 12 ; my $report = 1 ; our $xlsxdir = "set_up_groups_report" ; our $xlsxreportname = "Set_Up_Groups_Report" ; my $date = &common_write_date_interval($i{date_from},$i{date_to}) ; our $xlsx_title_heading = "Set Up Groups Report $date" ; my $found_after_date = 0 ; my $today_val = int("$now_year$now_mm$now_dd") ; my @date_from_inp = split(/ /,$i{date_from}) ; my ($year_inp1,$month_inp1,$day_inp1) = split(/\-/,$date_from_inp[0]) ; my $date_inp_val1 = int("$year_inp1$month_inp1$day_inp1") ; my @date_to_inp = split(/ /,$i{date_to}) ; my ($year_inp2,$month_inp2,$day_inp2) = split(/\-/,$date_to_inp[0]) ; my $date_inp_val2 = int("$year_inp2$month_inp2$day_inp2") ; foreach (keys %{$db{$table}}) { my @date_from = split(/ /,$db{$table}{$_}{date_from}) ; my ($year_1,$month_1,$day_1) = split(/\-/,$date_from[0]) ; my $date_val1 = int("$year_1$month_1$day_1") ; my @date_to = split(/ /,$db{$table}{$_}{date_to}) ; my ($year_2,$month_2,$day_2) = split(/\-/,$date_to[0]) ; my $date_val2 = int("$year_2$month_2$day_2") ; $found_after_date = 1 if ($today_val <= $date_val1 && $today_val <= $date_inp_val1) || ($today_val <= $date_val2 && $today_val <= $date_inp_val2) ; } # if ($found_after_date) { # $trigger_jquery_raw .= qq~ # \$("#itv-table tr th:nth-last-child(3)").css("width", "12.5%") ; # \$("#itv-table tr th:nth-last-child(2)").css("width", "7.5%") ; # \$("#itv-table tr th:nth-last-child(4)").css("width", "12.5%") ; # ~ ; # } else { # $trigger_jquery_raw .= qq~ # \$("#itv-table tr th:nth-last-child(3)").css("width", "7.5%") ; # \$("#itv-table tr th:nth-last-child(2)").css("width", "7.5%") ; # \$("#itv-table tr th:nth-last-child(4)").css("width", "7.5%") ; # ~ ; # } &calibration_build_table_and_or_excel(1) ; $fnsortorder = 'asc' ; &common_min_extra_crumb("$lcpage","Search Screen") ; $trigger_jquery_raw .= qq~ \$("#savebutt").click(function() { \$("#$lcpage-form").submit() ; }) ; ~ ; } #------------------------------------------------------------------------------------------ sub set_tick { my ($color,$tooltip) = @_ ; $tick{green} = qq~~ ; $tick{orange} = qq~~ ; $tick{red} = qq~~ ; return ($tick{$color}) ; } #------------------------------------------------------------------------------------------ sub set_cross { my ($color,$tooltip) = @_ ; $tick{green} = qq~~ ; $tick{orange} = qq~~ ; $tick{red} = qq~~ ; return ($tick{$color}) ; } #------------------------------------------------------------------------------------------ sub thead { &common_min_thead ; } #------------------------------------------------------------------------------- sub page_opts { our $glyphicon = 'list' ; our $lcpage = 'set-up-groups-report' ; &common_page_name ; our $table = 'event_quotes' ; $page_title = 'Set Up Groups Report' ; } #------------------------------------------------------------------------------- sub report_screen { our $lcol = 3 ; our $fcol = 5 ; $print_box_content_rows .= &common_min_forms_start('report') ; # &common_min_select_opts('client_id','customers','name','','','',"events='1'") ; my $def = ($i{client_id}) ? $i{client_id} : 5 ; $allow_deselect{client_id} = 1 ; &common_min_select_opts('client_id','customers','name',$def,'','',"") ; $print_box_content_rows .= &common_min_form_select('client_id','') ; my ($sql_next_day) = &common_add_delta_days(1) ; my ($next_year,$next_month,$next_day) = split(/\-/,$sql_next_day) ; $print_box_content_rows .= &common_min_form_datepicker('date_from',"$next_year-$next_month-$next_day") ; #unless $i{date_from} ; $print_box_content_rows .= &common_min_form_datepicker('date_to',"$next_year-$next_month-$next_day") ; $selected{calibration_status}{all} = 'SELECTED' ; if ($i{calibration_status}) { $selected{calibration_status}{$i{calibration_status}} = 'SELECTED' ; $selected{calibration_status}{all} = '' ; } &db_min_ro('calibration_status','id,status','','','') ; # $opts{calibration_status} .= qq~~ ; foreach (keys %{$db{calibration_status}}) { $opts{calibration_status} .= qq~~ ; } $opts{calibration_status} .= qq~~ ; $preferred_title{calibration_status} = "Status" ; # $preferred_title{calibrator_id} = "Calibrator" ; # # &db_min_ro('users',"id,name","`user_type` = 'support' OR `user_type` = 'casual_calibrator'",'','') ; # &db_min_ro('users',"id,name,username","(user_type = 'support' OR user_type = 'manager' OR user_type = 'casual_calibrator') AND name NOT LIKE 'Rory%' AND name NOT LIKE 'Handre%'",'','') ; # $selected{calibrator_id}{all} = 'SELECTED' ; # if ($i{calibrator_id}) { # $selected{calibrator_id}{$i{calibrator_id}} = 'SELECTED' ; # $selected{calibrator_id}{all} = '' ; # } # # $opts{calibrator_id} .= qq~~ ; # foreach (sort {$db{users}{$a}{name} cmp $db{users}{$b}{name}} keys %{$db{users}}) { # next if $useropts{it}{$db{users}{$_}{username}} ; # $opts{calibrator_id} .= qq~~ ; # } # $opts{calibrator_id} .= qq~~ ; # if ($i{event_quote_id}) { # $selected{event_quote_id}{$i{event_quote_id}} = 'SELECTED' ; # } else { # $selected{event_quote_id}{all} = 'SELECTED' ; # } # $opts{event_quote_id} .= qq~~ ; # $print_box_content_rows .= &common_min_form_select('operator_id','') ; # $print_box_content_rows .= &common_min_form_select('event_quote_id','') ; $print_box_content_rows .= &common_min_form_select('calibration_status','') ; # $print_box_content_rows .= &common_min_form_select('calibrator_id','') ; $print_box_content_rows .= &common_min_forms_end('','','report') ; &common_min_search_screen ; } #------------------------------------------------------------------------------- sub screen3 { &thead; if ($isaved) { $alert = &common_min_alert('success',"$ucpage $isaved!",'ok') ; } else { &common_min_alert_type ; } # my $page = "$lcpage\s" ; my $page = "event-quotes" ; if ($s{no}) { $page = $lcpage ; } &common_min_table('id',$page,'list') ; our $savjqy = 1 ; # &common_min_extra_crumb("manage-$lcpage\s","Manage $ucfirstpage\s") ; $extra_form_fields .= qq~ ~; $print_box_content_rows .= &common_min_forms_end('','','save') ; require _blank ; exit ; } #------------------------------------------------------------------------------------------ sub redirect_screen { &common_min_alert_type ; print <