#!/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 ; use LWP::UserAgent; use XML::LibXML; use LWP::Simple; use XML::Simple ; use JSON ; &today; #--------------------------------------------------------------------------------------------------------------------------------------------------------------------- @ARGV = split(/\\*\&/, $ENV{'QUERY_STRING'}); $action = $ARGV[0] ; our ($q) = CGI -> new() ; our $iaction = $q -> param('iaction') || $action ; our $isaved = $q -> param('isaved') || '' ; $iaction = 'report' unless $iaction ; # our $debug = 1 ; # our $testing = 1 ; # our $testing = 1 ; # our $testdcd = 1 ; # if ($username ne 'handre') { # print "<< MAINTENANCE IN PROGRESS >>" ; exit ; # } # -------- page opts -------------------------------------------------------------------------------------------------------------------------------------------------- &page_opts ; #--------------------------------------------------------------------------------------------------------------------------------------------------------------------- our $srchscr = 1 ; ##DO NOT CHANGE THE ORDER OF THERE COLUMNS IT IS THE ORDER IN WHICH THEY ARE STORED IN THE DATABASE our @sql_col_display = ("system","region","head_operator","system_test_date","status","equipment_checked","venue","comments","dates","special_arrangements") ; ##DO NOT CHANGE THE ORDER OF THERE COLUMNS IT IS THE ORDER IN WHICH THEY ARE STORED IN THE DATABASE &db_open_upd ; our $db_ignore_open_close = 1 ; # do one open and one close instead of repeating it if ($iaction eq 'report') { &report_screen } elsif ($iaction eq 'save') { &common_min_load_params ; &update ; &report_ifields; $iaction = 'report' ; &list_screen ; exit if ($username eq 'handre' || $username eq 'rory') && $testing ; $s{no} = 1 ; &screen3 ; } elsif ($iaction eq 'list') { &common_min_load_params ; &report_ifields; &list_screen ; &screen3 ; } $db_ignore_open_close = 0 ; # do one open and one close instead of repeating it &db_close_conn ; &common_min_action; exit; #------------------------------------------------------------------------------------------ sub update { &db_min_ro('mobile_tracking_system','event_system_id,id,mobile_tracking_system_data','','','') ; my %system_exists = () ; foreach (keys %{$db{mobile_tracking_system}}) { $system_exists{$_} = 1 ; } my %ii = %i ; my %seen_event_system_id = () ; foreach my $field (keys %ii) { next if ($field =~ /^update_/ && !$ii{$field}) || $field !~ /^update_/ ; local @a = split(/\_/,$field) ; my $event_system_id = $a[-1] ; $event_system_id = int($event_system_id) ; next if $seen_event_system_id{$event_system_id} ; $seen_event_system_id{$event_system_id} = 1 ; %i = () ; foreach my $field_2 (@sql_col_display) { next if $field_2 eq 'system' ; my $field_name = qq~$field_2\_$event_system_id~ ; $i{mobile_tracking_system_data} .= qq~$ii{$field_name}:;:~ ; } $i{mobile_tracking_system_data} =~ s/(?:\:;\:)+$// if $i{mobile_tracking_system_data} ; $i{mobile_tracking_system_data} = qq~~ if $i{mobile_tracking_system_data} !~ /[a-zA-Z0-9]/ ; $ignore{mobile_tracking_system_data} = ((!$i{mobile_tracking_system_data} && !$db{mobile_tracking_system}{$event_system_id}{mobile_tracking_system_data}) || ($i{mobile_tracking_system_data} eq $db{mobile_tracking_system}{$event_system_id}{mobile_tracking_system_data})) ? 1 : 0 ; # if ($db{mobile_tracking_system}{$event_system_id}{id}) { if ($system_exists{$event_system_id}) { &db_min_upd('mobile_tracking_system',"`event_system_id`='$event_system_id'") unless $ignore{mobile_tracking_system_data} ; } elsif (!$ignore{mobile_tracking_system_data}) { $i{event_system_id} = $event_system_id ; $i{id} = &db_min_get_max('mobile_tracking_system','id') ; &db_min_insert('mobile_tracking_system') ; } } %i = %ii ; } #------------------------------------------------------------------------------------------ sub report_screen { our $lcol = 3 ; our $fcol = 5 ; $print_box_content_rows .= &common_min_forms_start('report') ; # &common_min_select_opts('system_id',$table,'name',$i{client_id},'') ; my $def_val = ($i{system_type}) ? $i{system_type} : "all" ; my %def_selected = () ; $def_selected{$def_val} = "SELECTED" ; $opts{system_type} = qq~ ~ ; $print_box_content_rows .= &common_min_form_select('system_type',$i{system_type}) ; $i{region} = ($i{region}) ? $i{region} : "all" ; my %select_hashes = () ; $select_hashes{region} = {1 => 'JHB',2 => 'PTA',3 => 'CPT',4 => 'KZN',5 => 'BLOEM',6 => 'EL',7 => 'PE',8 => 'GARDEN ROUTE',9 => 'LP',10 => 'MP',11 => 'NC',12 => 'NW',13 => 'INTERNATIONAL','all' => 'All'} ; $opts{region} = "" ; $opts{region} =~ s/value='\Q$i{region}\E'/value='$i{region}' SELECTED/g if $i{region} ; $print_box_content_rows .= &common_min_form_select('region',$i{region}) ; $print_box_content_rows .= &common_min_forms_end('','','list') ; &common_min_search_screen ; } #------------------------------------------------------------------------------- sub report_ifields { if ($i{system_type} && $i{system_type} ne 'all') { push @report_sql, "(es.system_type = '$i{system_type}')" ; my $system_type = ucfirst $i{system_type} ; push @report_results, "SYSTEM TYPE = '$system_type'" ; } elsif ($i{system_type} eq 'all') { push @report_sql, "(es.system_type = 'mobile' OR es.system_type = 'solo')" ; push @report_results, "SYSTEM TYPE = ('Mobile' OR 'Solo')" ; } my %select_hashes = () ; $select_hashes{region} = {1 => 'JHB',2 => 'PTA',3 => 'CPT',4 => 'KZN',5 => 'BLOEM',6 => 'EL',7 => 'PE',8 => 'GARDEN ROUTE',9 => 'LP',10 => 'MP',11 => 'NC',12 => 'NW',13 => 'INTERNATIONAL','all' => 'All'} ; if ($i{region} && $i{region} ne 'all') { push @report_sql, "(mts.mobile_tracking_system_data REGEXP '^$i{region}(:;:|\$)')" ; push @report_results, "REGION = '$select_hashes{region}{$i{region}}'" ; } $report_results_msg = uc join(', ', @report_results) ; if (not $report_results_msg) { $error = qq~ENTER AT LEAST ONE SEARCH PARAMETER~ ; &report_screen; } elsif ($iaction eq 'save') { $isaved = qq~SUCCESSFULLY SAVED!~ ; } else { $isaved = qq~SELECT WHERE $report_results_msg~ ; } our $srch_where_sql = join(' AND ',@report_sql) ; # $srch_where_sql = qq~es.id=1~ ; } #------------------------------------------------------------------------------------------ sub load_list_vars { my ($where) = @_ ; &common_min_select_opts('head_operator','users','name','','','',"`user_type` = 'casual_c'") ; # &db_min_ro($table,"*","$where",'','') ; $where = "WHERE $where" if $where ; &db_min_raw(" SELECT es.*, mts.mobile_tracking_system_data FROM $table es LEFT JOIN mobile_tracking_system mts ON es.id = mts.event_system_id $where; "); foreach $row (@$rows_array_ref) { for (0 .. $col_cnt){ next if $col_name{$_} eq 'lastupdate' ; $db{$table}{@$row[0]}{$col_name{$_}} = @$row[$_] ; } } } #------------------------------------------------------------------------------------------ sub list_screen { $print_box_content_rows .= &common_min_forms_start("$lcpage") ; &load_list_vars($srch_where_sql) ; $fcol = 12 ; our $xlsx_title_heading = "Mobile System Tracking Report" ; our $xlsxdir = "mobile_system_tracking" ; our $xlsxreportname = "Mobile_System_Tracking_Report" ; &report_xlsx_export_header("$xlsxreportname",$xlsxdir,'',$xlsx_title_heading) ; push @sql_col_display,"update" ; # push @sql_col_display,"" ; my @rev_sql_col_display = reverse @sql_col_display ; foreach (@rev_sql_col_display) { $lastchild++ ; $last_child{$_} = $lastchild ; } # &common_debug("last-child : $_ [$last_child{$_}]"); $xlsxrow-- ; our $current_date = int("$now_year$now_mm$now_dd") ; our $found_editable = 0 ; our %seen_field_id = () ; our %all_location_ids_per_system = () ; our $all_ids = qq~~ ; local @month_names = ("","Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec") ; our $quote_and_ops_ids = qq~~ ; our @selects_with_default_ids = () ; our @table_with_default_ids = () ; our @dropdown_chosen_ids = () ; our @update_ids = () ; my $table_row = 0 ; my $placeholder_row_cnt = 0 ; our @date_value_ids = () ; our @default_javascript_by_id = () ; our @all_update_field_ids = () ; my %select_hashes = () ; # our @sql_col_display = ("system","region","head_operator","system_test_date","status","equipment_checked","venue","comments","dates","special_arrangements") ; $select_hashes{region} = {1 => 'JHB',2 => 'PTA',3 => 'CPT',4 => 'KZN',5 => 'BLOEM',6 => 'EL',7 => 'PE',8 => 'GARDEN ROUTE',9 => 'LP',10 => 'MP',11 => 'NC',12 => 'NW',13 => 'INTERNATIONAL'} ; $select_hashes{status} = {1 => 'All Clear',2 => 'Support Needed',3 => 'Part Pending'} ; $select_hashes{equipment_checked} = {1 => 'Yes',2 => 'No'} ; $select_hashes{venue} = {1 => 'JHB HUB',2 => 'BLOEM HUB',3 => 'KZN HUB',4 => 'CPT HUB',5 => 'RMA HUB',6 => 'SCHOOL',7 => 'OPERATOR'} ; foreach (keys %{$db{users}}) { $select_hashes{head_operator}{$_} = $db{users}{$_}{name} ; } $opts{region} = "" ; $opts{status} = "" ; $opts{equipment_checked} = "" ; $opts{venue} = "" ; # $opts{region} = qq~~ ; # $opts{status} = qq~~ ; # $opts{equipment_checked} = qq~~ ; # $opts{venue} = qq~~ ; # rgb(255,165,0) ## orange # rgb(255,255,0) ## yellow # rgb(81,203,242) ## Blue # rgb(50,50,50) ## Black/Grey # rgb(249,13,13) ## Red # rgb(128,64,0) ## Brown # Bloem + NC - Orange # JHB + PTA - Yellow # CPT + Garden Route - Blue # KZN - Black/Grey # EL + PE - Red # LP + MP + NW - Brown my %region_background_color = () ; $region_background_color{1} = "rgb(255,255,0)" ; $region_background_color{2} = $region_background_color{1} ; $region_background_color{3} = "rgb(81,203,242)" ; $region_background_color{4} = "rgb(115,117,117)" ; $region_background_color{5} = "rgb(255,153,0)" ; $region_background_color{6} = "rgb(249,13,13)" ; $region_background_color{7} = $region_background_color{6} ; $region_background_color{8} = "rgb(81,203,242)" ; $region_background_color{9} = "rgb(172,115,57)" ; $region_background_color{10} = $region_background_color{9} ; $region_background_color{11} = $region_background_color{5} ; $region_background_color{12} = $region_background_color{9} ; # 153, 102, 51 foreach my $id (sort {$a <=> $b} keys %{$db{$table}}) { $table_row++ ; $print_tbody .= qq~~ ; our %field = () ; our %ucfirstfield = () ; our $default_javascript = qq~~ ; $xlsxcol = 0 ; $placeholder_row_cnt++ ; my $col_cnt = -2 ; my @default_vals = split(/\:;:/,$db{$table}{$id}{mobile_tracking_system_data}) ; foreach (@sql_col_display) { next unless $_ ; # blank for the buttons column $col_cnt++ ; $field{$_} = qq~$_\_$id~ if $_ ne 'system' ; $ucfirstfield{$field{$_}} = ucfirst $field{$_} ; if ($_ eq 'system') { # DO nothing } elsif ($_ eq 'update') { $ucfirstfield{$field{$_}} = qq~checkbox~ . $ucfirstfield{$field{$_}} ; } elsif ($_ eq 'system_test_date' || $_ eq 'comments' || $_ eq 'dates' || $_ eq 'special_arrangements') { $ucfirstfield{$field{$_}} = qq~textarea~ . $ucfirstfield{$field{$_}} ; # } elsif ($_ eq 'date_due') { # $ucfirstfield{$field{$_}} = qq~input~ . $ucfirstfield{$field{$_}} ; } else { $ucfirstfield{$field{$_}} = qq~select~ . $ucfirstfield{$field{$_}} ; $opts{$field{$_}} = $opts{$_} ; } # our $formatting = $format84 ; our $formatting = $format84 ; my $val = $db{$table}{$id}{$_} ; our $val_min = 'MUSTBEBLANK' ; our $align = qq~ class="dt-center"~ ; our $nowrap = '' ; my $due_date = 0 ; my $default_val_is_saved = ($default_vals[$col_cnt]) ? 1 : 0 ; my $result = $_ ; $result =~ s/\_id//g ; $result = join(' ', map { ucfirst $_ } split /\_/, $result); $preferred_placeholder{$field{$_}} = $result . ' ' . $id ; $background_color = (($_ eq 'status' || $_ eq 'equipment_checked') && $default_vals[$col_cnt] eq '1') ? "rgb(46,204,113)" : (($_ eq 'status' || $_ eq 'equipment_checked') && $default_vals[$col_cnt] eq '2') ? "rgb(249,13,13)" : ($_ eq 'status' && $default_vals[$col_cnt] eq '3') ? "rgb(255,153,0)" : '' ; $background_color = ($_ eq 'region' && $default_vals[$col_cnt] && $region_background_color{$default_vals[$col_cnt]}) ? $region_background_color{$default_vals[$col_cnt]} : $background_color ; if ($_ eq 'system') { my $id_val = sprintf("%09d",$id) ; $val_min = qq~$db{$table}{$id}{name} [$db{$table}{$id}{description}]~ ; $val = qq~$id_val$val_min~ ; } elsif ($_ eq 'region' || $_ eq 'head_operator' || $_ eq 'status' || $_ eq 'equipment_checked' || $_ eq 'venue') { # $opts{$field{$_}} =~ s/value='$default_vals[$col_cnt]'/value='$default_vals[$col_cnt]' SELECTED/g if $default_vals[$col_cnt] ; $val = &common_min_table_select($field{$_},$default_vals[$col_cnt],'',$table_row,$last_child{$_},$background_color,$default_val_is_saved,$_) ; $val_min = $select_hashes{$_}{$default_vals[$col_cnt]} ; } elsif ($_ eq 'system_test_date' || $_ eq 'comments' || $_ eq 'dates' || $_ eq 'special_arrangements') { $val = &common_min_table_textarea($field{$_},$default_vals[$col_cnt],'',$table_row,$last_child{$_},'',$default_val_is_saved) ; $val_min = $default_vals[$col_cnt] ; } elsif ($_ eq 'update') { $val = &common_min_table_checkbox($field{update}) ; chop $default_javascript if $default_javascript ; if ($default_javascript) { push @default_javascript_by_id, qq~"$id":{$default_javascript}~ ; push @all_update_field_ids,"#$ucfirstfield{$field{region}},#$ucfirstfield{$field{head_operator}},#$ucfirstfield{$field{system_test_date}},#$ucfirstfield{$field{status}},#$ucfirstfield{$field{equipment_checked}},#$ucfirstfield{$field{venue}},#$ucfirstfield{$field{comments}},#$ucfirstfield{$field{dates}},#$ucfirstfield{$field{special_arrangements}}" ; } } if ($val_min eq 'MUSTBEBLANK') { $val_min = $val ; } $val_min =~ s/\MUSTBEBLANK//g ; $print_tbody .= qq~$val~ ; next if $_ eq 'update' ; &xlsxcreator_write_xlsx($ws,$xlsxrow,$xlsxcol,$val_min,$formatting) ; $xlsxcol++ ; } $print_tbody .= qq~~ ; $xlsxrow++ if $id ne 'add_row' ; chop $system_location_ids if $system_location_ids ; chop $event_venue_ids if $event_venue_ids ; } &common_min_table_textarea_jquery ; &common_min_table_validate_date_inputs_jquery ; &common_min_table_update_checkbox_col ; # &common_min_table_select_jquery("#$useropts{table_id} td:nth-last-child($last_child{region}),#$useropts{table_id} td:nth-last-child($last_child{head_operator}),#$useropts{table_id} td:nth-last-child($last_child{status}),#$useropts{table_id} td:nth-last-child($last_child{equipment_checked}),#$useropts{table_id} td:nth-last-child($last_child{venue})") if $iaction ne 'save' and $iaction ne 'delete' and $iaction ne 'report' ; # \$("#$useropts{table_id} tr th").slice(-11, -8).css("width","12.25%"); # \$("#$useropts{table_id} tr th").slice(-7, -2).css("width","12.25%"); # \$("#$useropts{table_id} tr th:nth-last-child($last_child{date_allocated})").css("width","8.25%"); # \$("#$useropts{table_id} tr th:nth-last-child($last_child{update})").css("width","4%"); # $trigger_jquery .= qq~ # \$("#selectRegion_1").val("13").trigger("chosen:updated") ; # ~ ; $trigger_jquery .= qq~ \$("#$useropts{table_id} tr th:nth-last-child(1)").css("max-width","10px;"); ~ ; $worksheet{$ws}->set_column("A:A",40); $worksheet{$ws}->set_column("B:G",20); $worksheet{$ws}->set_column("H:H",40); $worksheet{$ws}->set_column("I:I",20); $worksheet{$ws}->set_column("J:J",100); &report_xlsx_export_footer('L',15,$xlsxdir) ; $fnsortorder = 'desc' ; &common_min_extra_crumb("$lcpage","Search Screen") ; $trigger_jquery_raw .= qq~ \$("#savebutt").click(function() { let item_val ; $jquery_chosen_sel \$("#$lcpage-form").submit() ; }) ; ~ ; $extra_form_footer = qq~
~ ; # From Venue  To Venue $trigger_jquery_raw .= qq~ function toggleToFrom (ft) { \$('#logisticsaction').val(ft); \$('#logisticsform').submit(); } ~; } #------------------------------------------------------------------------------------------ sub thead { &common_min_thead ; } #------------------------------------------------------------------------------- sub page_opts { our $glyphicon = 'list' ; our $lcpage = 'mobile-tracking-systems' ; &common_page_name ; # our $table = 'mobile_tracking_system' ; our $table = 'event_systems' ; $page_title = 'Mobile Tracking Systems Report' ; our $blank_action = 1 ; } #------------------------------------------------------------------------------- # sub screen2 { # my $page = "mobile-tracking-system-report" ; # # # if ($i{id} && $redirsave eq 'edit') { # # if ($redirsave eq 'edit') { # # $input_hidden_id = qq~~ ; # # } # # my $doc_ready_jquery = qq~\$(document).ready(function(){ \$('#$redirsave-form').submit(); })~ unless $username eq 'rory' ; # # &common_min_table_select_jquery("#itv-table td:nth-last-child(4),#itv-table td:nth-last-child(4),#itv-table td:nth-last-child(5),#itv-table td:nth-last-child(8)") ; # &common_min_table_select_jquery("#$useropts{table_id} td:nth-last-child($last_child{region}),#$useropts{table_id} td:nth-last-child($last_child{head_operator}),#$useropts{table_id} td:nth-last-child($last_child{status}),#$useropts{table_id} td:nth-last-child($last_child{equipment_checked}),#$useropts{table_id} td:nth-last-child($last_child{venue})") ; # my $form_name = $redirsave . 'form' ; # our $success = "SUCCESSFULLY SAVED" ; # &common_min_alert_type ; # print < # # # # $useropts{title} # # # # # #
# # # $input_hidden_id #
# # ENDOFTEXT # # # exit ; # } #------------------------------------------------------------------------------------------ sub screen3 { foreach (@sql_col_display) { $custom_column_styles{$_} = qq~style="min-width:150px;"~ if $_ ne 'update' ; } &thead; if ($isaved) { $alert = &common_min_alert('success',"$ucpage $isaved!",'ok') ; } else { &common_min_alert_type ; } # my $page = "$lcpage\s" ; my $page = "mobile-tracking-system-report" ; if ($s{no}) { $page = $lcpage ; } &common_min_table('id',$page,'list') ; # &common_min_table_select_jquery("#itv-table td:nth-last-child(4),#itv-table td:nth-last-child(5),#itv-table td:nth-last-child(8)") ; &common_min_table_select_jquery("#$useropts{table_id} td:nth-last-child($last_child{region}),#$useropts{table_id} td:nth-last-child($last_child{head_operator}),#$useropts{table_id} td:nth-last-child($last_child{status}),#$useropts{table_id} td:nth-last-child($last_child{equipment_checked}),#$useropts{table_id} td:nth-last-child($last_child{venue})") ; 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 < $useropts{title}
ENDOFTEXT # exit ; # } #------------------------------------------------------------------------------------------ use db ; use today ; use common ; use report ; use xlsxcreator ; 1;