aisa/scripts/logistics_payments.pl
2025-11-26 11:31:54 +02:00

910 lines
40 KiB
Perl

#!/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 ;
#-------- page opts --------------------------------------------------------------------------------------------------------------------------------------------------
&page_opts ;
#---------------------------------------------------------------------------------------------------------------------------------------------------------------------
our $srchscr = 1 ;
&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 ;
}
if ($iaction eq 'save') {
&common_min_load_params ;
&update ;
&screen4 ;
}
&common_min_action ;
$db_ignore_open_close = 0 ; # do one open and one close instead of repeating it
&db_close_conn ;
exit;
#------------------------------------------------------------------------------------------
sub update {
&db_min_ro($table,'id,logistics_dates_paid,logistics_amounts_paid,logistics_suppliers','logistics_dates_paid IS NOT NULL OR logistics_amounts_paid IS NOT NULL OR logistics_suppliers IS NOT NULL','','') ;
my %iii = %i ;
my %ii = () ;
foreach (sort keys %i) {
local $cell_name = $_ ;
local @a = split(/\_/,$cell_name) ;
if ($_ =~ /paid_/ && $i{"paid_$a[-2]\_$a[-1]"}) {
my $amnt_payable_field = "amount_payble_$a[-2]\_$a[-1]" ;
$i{$amnt_payable_field} = sprintf("%.2f",$i{$amnt_payable_field}) ;
$ii{$a[-1]}{$a[-2]}{logistics_amounts_paid} .= qq~$i{$amnt_payable_field}~ ;
$ii{$a[-1]}{$a[-2]}{logistics_dates_paid} .= qq~$now_year-$now_mm-$now_dd~ ;
}
}
foreach my $event_id (sort keys %ii) {
%i = () ;
$i{logistics_dates_paid} = qq~$ii{$event_id}{from}{logistics_dates_paid};$ii{$event_id}{to}{logistics_dates_paid}~ if $ii{$event_id}{from}{logistics_dates_paid} || $ii{$event_id}{to}{logistics_dates_paid} ;
$i{logistics_amounts_paid} = qq~$ii{$event_id}{from}{logistics_amounts_paid};$ii{$event_id}{to}{logistics_amounts_paid}~ if $ii{$event_id}{from}{logistics_amounts_paid} || $ii{$event_id}{to}{logistics_amounts_paid} ;
$i{logistics_suppliers} = qq~$ii{$event_id}{from}{logistics_suppliers}-$ii{$event_id}{to}{logistics_suppliers}~ if $ii{$event_id}{from}{logistics_suppliers} || $ii{$event_id}{to}{logistics_suppliers} ;
$i{logistics_amounts_paid} = qq~$db{$table}{$event_id}{logistics_amounts_paid}|$i{logistics_amounts_paid}~ if $db{$table}{$event_id}{logistics_amounts_paid} && $i{logistics_amounts_paid} ;
$ignore{logistics_amounts_paid} = 1 if (!$i{logistics_amounts_paid} && !$db{$table}{$event_id}{logistics_amounts_paid}) || $i{logistics_amounts_paid} eq $db{$table}{$event_id}{logistics_amounts_paid} ;
$i{logistics_dates_paid} = qq~$db{$table}{$event_id}{logistics_dates_paid}|$i{logistics_dates_paid}~ if $db{$table}{$event_id}{logistics_dates_paid} && $i{logistics_dates_paid} ;
$ignore{logistics_dates_paid} = 1 if (!$i{logistics_dates_paid} && !$db{$table}{$event_id}{logistics_dates_paid}) || $i{logistics_dates_paid} eq $db{$table}{$event_id}{logistics_dates_paid} ;
$ignore{logistics_suppliers} = 1 if (!$i{logistics_suppliers} && !$db{$table}{$event_id}{logistics_suppliers}) || $i{logistics_suppliers} eq $db{$table}{$event_id}{logistics_suppliers} ;
&db_min_upd("$table","id='$event_id'") if $i{logistics_amounts_paid} || $i{logistics_dates_paid} ;
}
%i = %iii ;
} #------------------------------------------------------------------------------------------
sub load_search_vars {
&db_min_ro('logistics_suppliers','*',"`id`='$i{supplier_id}'",'','') if $i{supplier_id} ;
&db_min_ro('logistics_locations','*',"`id`='$i{system_location_id}'",'','') if $i{system_location_id} ;
} #------------------------------------------------------------------------------------------
sub report_ifields {
&load_search_vars ;
if ($i{date_from} && !$i{date_to}) { # check dates
push @report_sql, "`date_from` >= '$i{date_from} 00:00:00'" ; ############################################### > OR >=
push @report_results, "(EVENT AFTER '$i{date_from}')" ;
} elsif (!$i{date_from}) {
$error = qq~PLEASE ENTER A START DATE!~ ;
&report_screen;
} elsif ($i{date_from} && $i{date_to}) { # check dates
push @report_sql, "(('$i{date_from} 00:00:00' <= `date_from` AND `date_from` <= '$i{date_to} 23:59:59') OR ('$i{date_from} 00:00:00' <= `date_to` AND `date_to` <= '$i{date_to} 23:59:59'))" ; ############################################### > OR >=
push @report_results, "(EVENT BETWEEN '$i{date_from}' AND '$i{date_to}')" ;
}
if ($i{client_id} && $i{client_id} ne 'all') {
&db_min_ro('customers','1,name',"id='$i{client_id}'",'','') ;
push @report_sql, "(`quote_to` = '$i{client_id}')" ;
push @report_results, "Client = `$db{customers}{1}{name}`" ;
}
# if ($i{organisation_ids}) {
# push @report_sql, "(FIND_IN_SET($i{organisation_ids},organisation_ids))" ;
# push @report_results, "Venue = `$db{organisations}{$i{organisation_ids}}{name}`" ;
# }
# if ($i{system_location_id}) {
# push @report_sql, "logistics_system_location_id='$i{system_location_id}'" ;
# push @report_results, "System Location = `$db{logistics_locations}{$i{system_location_id}}{location}`" ;
# } else {
# push @report_sql,"logistics_system_location_id != '1'" ;
# }
if ($i{supplier_id}) {
# push @report_sql, "((logistics_suppliers REGEXP '(^|;)[^-]*-$i{supplier_id}(\$\|;)') OR (logistics_suppliers REGEXP '(^|;)($i{supplier_id})-[^;]*(\$\|;)'))" ;
push @report_sql, "(logistics_suppliers LIKE '%-$i{supplier_id}' OR logistics_suppliers LIKE '$i{supplier_id}-%')" ;
push @report_results, "Supplier = `$db{logistics_suppliers}{$i{supplier_id}}{supplier}`" ;
} else {
push @report_sql, "(logistics_suppliers NOT LIKE '%-2' OR logistics_suppliers NOT LIKE '2-%')" ;
}
if ($i{operator_id}) {
&db_min_ro('users','id,name',"`user_type` LIKE 'casual_%'",'','') ;
push @report_results, "Operator Is `$db{users}{$i{operator_id}}{name}`" ;
push @report_sql, "FIND_IN_SET('$i{operator_id}',REPLACE(logistics_shipment_operator_id,'-',','))" ;
}
# if ($is_dcb_partner && $i{status_id} != 1) { $i{status_id} = 1 ; }
# if ($i{status_id}) {
# local %status_hash = (1 =>"Booked",2 => "Pending",3=>"In Transit",4 =>"Delivered") ;
# push @report_results, "Status = `$status_hash{$i{status_id}}`" ;
# push @report_sql, "((logistics_status_ids REGEXP '(^|;)[^-]*-$i{status_id}(\$\|;)') OR (logistics_status_ids REGEXP '(^|;)($i{status_id})-[^;]*(\$\|;)'))" ;
# }
# if ($i{region_id}) {
# push @report_sql, "`region_id` = '$i{region_id}'" ;
# push @report_results, "Region = `$db{regions}{$i{region_id}}{name} [$db{regions}{$i{region_id}}{code}]`" ;
# }
push @report_sql , "logistics_shipment_operator_id IS NOT NULL AND logistics_shipment_operator_id != '-'" ;
$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 list_screen {
$print_box_content_rows .= &common_min_forms_start('logistics-payments') ;
our $open_new_tab = qq~target="_blank"~ ; # opens booking page in a new tab
my $srch_where_sql = join(' AND ',@report_sql) ;
our @sql_col_display = ("event_quote_nr","event_name","client_name","from_or_to_event","from","to","city","supplier","date_of_event","delivery_date","operator_name","default_amount","amount_paid","amount_payable","paid") ;
foreach (reverse @sql_col_display) { $lastchild++ ; $last_child{$_} = $lastchild ; } # &common_debug("last-child : $_ [$last_child{$_}]");
&report_xlsx_export_header("Logistics Payments Report",'logistics_payments') ;
&load_list_vars("$srch_where_sql","$where_min") ;
my $field = "" ; my @qty_work = () ; my @amnt_usd_work = () ; my @amnt_work = () ; my @op_work = () ; my @description = () ;
my @paid_work = () ; my $row_cnt = 0 ; my $first_id = 0 ; my $last_id = 0 ; my %row_cnt_to_id = () ;
$fcol = 2 ;
$print_box_content_rows .= qq~<div style = "display:none;">~ ;
$print_box_content_rows .= &common_min_form_input_col("date_from",$i{date_from}) ; #date_from_i_field
$print_box_content_rows .= &common_min_form_input_col("date_to",$i{date_to}) ; #date_to_i_field
$print_box_content_rows .= &common_min_form_input_col("event_quote_id",$i{event_quote_id}) ;
$print_box_content_rows .= &common_min_form_input_col("supplier_id",$i{supplier_id}) ;
$print_box_content_rows .= &common_min_form_input_col("paid_status",$i{paid_status}) ;
$print_box_content_rows .= qq~</div>~ ;
$fcol = 12 ; my $valxlsx = 0 ; my $table_row_cnt = 0 ;
my $f_t_event_ids = qq~~ ; my $op_ids = qq~~ ; my %seen_op = () ; my %xlsxrow_ops = () ;
my @from_to = ('to','from') ; $f_t_pos{from} = 0 ; $f_t_pos{to} = 1 ;
our @month_names = ("","Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec") ;
our @months = @month_names ;
my $amounts_ids = qq~~ ;
foreach my $id (sort {$a <=> $b} keys %{$db{$table}}) {
next unless $db{customers}{$db{$table}{$id}{quote_to}}{id} ;
my %tot_amnt_paid = () ; my %dates_paid_tooltip = () ; my @date_payable = () ;
my $cnt = 0 ;
my @date_pay = split(/\|/,$db{$table}{$id}{logistics_dates_paid}) ;
my @amount_pay = split(/\|/,$db{$table}{$id}{logistics_amounts_paid}) ;
foreach my $date_pay_1 (@date_pay) {
my $amount_pay_1 = $amount_pay[$cnt] ;
$cnt++ ;
my @date_pay_2 = split(/\;/,$date_pay_1) ;
my @amount_pay_2 = split(/\;/,$amount_pay_1) ;
$tot_amnt_paid{from} += $amount_pay_2[0] ;
$tot_amnt_paid{to} += $amount_pay_2[1] ;
my $date_string_1 = &common_min_date_as_string($date_pay_2[0]) ;
my $date_string_2 = &common_min_date_as_string($date_pay_2[1]) ;
$dates_paid_tooltip{from} .= qq~<br>~ if $dates_paid_tooltip{from} ;
$dates_paid_tooltip{to} .= qq~<br>~ if $dates_paid_tooltip{to} ;
$dates_paid_tooltip{from} .= qq~$amount_pay_2[0] PAID $date_string_1~ if $date_string_1 ;
$dates_paid_tooltip{to} .= qq~$amount_pay_2[1] PAID $date_string_2~ if $date_string_2 ;
}
my @suppliers = split(/\-/,$db{$table}{$id}{logistics_suppliers}) ;
my @operators = split(/\-/,$db{$table}{$id}{logistics_shipment_operator_id}) ;
foreach my $f_t (@from_to) {
# next if $suppliers[$f_t_pos{$f_t}] eq '2' || $db{$table}{$id}{logistics_system_location_id} eq '1' ;
next if !$AISA_suppliers{$suppliers[$f_t_pos{$f_t}]} || !$operators[$f_t_pos{$f_t}] ;
my $cost_of_shipment = $db{event_cost_items}{1}{rates} ;
foreach (keys %shipments_cost) {
if (($f_t eq 'to' && &common_min_greater_date_time("$shipments_cost{$_}{valid_from} 00:00:00",$db{$table}{$id}{date_from}) && &common_min_greater_date_time($db{$table}{$id}{date_from},"$shipments_cost{$_}{valid_to} 23:59:59")) || ($f_t eq 'from' && &common_min_greater_date_time("$shipments_cost{$_}{valid_from} 00:00:00",$db{$table}{$id}{date_to}) && &common_min_greater_date_time($db{$table}{$id}{date_to},"$shipments_cost{$_}{valid_to} 00:00:00"))) {
$cost_of_shipment = $shipments_cost{$_}{cost} ;
last ;
}
}
local $amnt_owed = $cost_of_shipment - $tot_amnt_paid{$f_t} ;
$amnt_owed = 0 if $tot_amnt_paid{$f_t} || $dates_paid_tooltip{$f_t} ;
next if $i{paid_status} eq 'outstanding' && $amnt_owed <= 0 ;
next if $i{paid_status} eq 'paid' && $amnt_owed > 0 ;
$amnt_owed = &common_commify(sprintf("%.2f",$amnt_owed)) ;
$column_count++ ;
$xlsxcol = 0 ;
$print_tbody .= qq~<tr id="$id">~ ;
$table_row_cnt++ ;
my $table_col_cnt = 0 ;
# title="$amnt_toolip{$op_id}" data-toggle="tooltip" data-placement="top"
my @logistics_delivery_datetime = split(/\|/,$db{$table}{$id}{logistics_delivery_datetime}) ;
if ($db{users}{$operators[$f_t_pos{$f_t}]}{name} && !$seen_op{$db{users}{$operators[$f_t_pos{$f_t}]}{name}}) {
&xlsxcreator_add_worksheet($db{users}{$operators[$f_t_pos{$f_t}]}{name}) ;
$seen_op{$db{users}{$operators[$f_t_pos{$f_t}]}{name}} = 1 ;
$xlsxrow_ops{$operators[$f_t_pos{$f_t}]} = 2 ;
foreach (@sql_col_display) {
my $coltitle = $_ ;
$coltitle =~ s/\_id//g ;
$coltitle =~ s/\_/ /g ;
my $ucfirst = join '', map { ucfirst lc } split /(\s+)/, $coltitle;
&xlsxcreator_write_xlsx($db{users}{$operators[$f_t_pos{$f_t}]}{name},0,$xlsxcol,$ucfirst,$format_management_report_headings);
$xlsxcol++;
}
$xlsxcol = 0 ;
&xlsxcreator_freeze_panes($db{users}{$operators[$f_t_pos{$f_t}]}{name},1,0) ; # Freeze the first 3 rows
}
foreach (@sql_col_display) {
next unless $_ ; # blank for the buttons column
$display = 1 ;
our $val = $db{$table}{$id}{$_} ;
our $valxlsx = $val ;
my $align = '' ;
my $center = qq~ class="dt-center"~ ;
$align = $center ;
$table_col_cnt++ ;
my $nowrap = '' ;
# ("event_quote_nr","event_name","from_or_to_event","system_location","supplier","default_amount","amount_paid","amount_payable","date_payable","paid") ;
if ($_ eq 'event_quote_nr') {
$val = &common_min_get_event_quote_button($id,$table) ;
} elsif ($_ eq 'event_name') {
$align = qq~ class="dt-left"~ ;
$val = $db{$table}{$id}{ref} ;
} elsif ($_ eq 'client_name') {
$nowrap = 'nowrap' ;
$val = $db{customers}{$db{$table}{$id}{quote_to}}{name} ;
} elsif ($_ eq 'from_or_to_event') {
$val = uc $f_t ;
} elsif ($_ eq 'from' || $_ eq 'to') {
# if (($col_disp eq 'to' && $from_to eq 'to') || ($col_disp eq 'from' && $from_to eq 'from')) {
if ($f_t eq $_) {
if ($db{$table}{$id}{logistics_venue_id}) {
my @logistics_venue_id = split(/\-/,$db{$table}{$id}{logistics_venue_id}) ;
my $venue_id = ($_ eq 'from') ? $logistics_venue_id[0] : $logistics_venue_id[1] ;
$val = qq~$db{organisations}{$venue_id}{name}~ ;
$val .= qq~ [$db{organisations}{$venue_id}{region_code}]~ if $db{organisations}{$venue_id}{region_code} ;
}
} elsif ($f_t ne $_) {
if ($db{$table}{$id}{logistics_system_location_id}) {
my @logistics_system_location_id = split(/\-/,$db{$table}{$id}{logistics_system_location_id}) ;
my $system_id = ($_ eq 'from') ? $logistics_system_location_id[0] : $logistics_system_location_id[1] ;
$val = $db{logistics_locations}{$system_id}{location} ;
if ($system_id eq '5') {
my @saved_field_from_to = split(/\:\|\:/,$db{$table}{$id}{logistics_location_other}) ;
my @saved_field_from_to_2 = ($_ eq 'from') ? split(/\|/,$saved_field_from_to[0]) : split(/\|/,$saved_field_from_to[1]) ;
$val .= ($f_t eq 'from' && $saved_field_from_to_2[0]) ? qq~ [$saved_field_from_to_2[0]]~ : ($f_t eq 'to' && $saved_field_from_to_2[1]) ? qq~ [$saved_field_from_to_2[1]]~ : qq~~ ;
}
}
}
$valxlsx = $val ;
}
# elsif ($_ eq 'system_location') {
# $val = $db{logistics_locations}{$db{$table}{$id}{logistics_system_location_id}}{location} ;
# }
elsif ($_ eq 'city') {
$val = join (",", map { "$db{cities}{$_}{name}" } split(/\,/,$db{$table}{$id}{city_id}) ) ;
} elsif ($_ eq 'date_of_event') {
&logistics_dates($from_to,$id) ;
$val = $valxlsx ;
$nowrap = 'nowrap' ;
} elsif ($_ eq 'delivery_date') {
$nowrap = 'nowrap' ;
$val = ($logistics_delivery_datetime[$f_t_pos{$f_t}]) ? &common_min_date_as_string(substr($logistics_delivery_datetime[$f_t_pos{$f_t}],0,10)) : qq~~ ;
$valxlsx = $val ;
} elsif ($_ eq 'supplier') {
# $opts{"supplier_$f_t\_$id"} = $opts{suppliers} ;
# $val = &common_min_table_select("supplier_$f_t\_$id",$suppliers[$f_t_pos{$f_t}],'',$table_row_cnt,$last_child{$_},'',$suppliers[$f_t_pos{$f_t}],'','','') ;
$val = $db{logistics_suppliers}{$suppliers[$f_t_pos{$f_t}]}{supplier} ;
$valxlsx = $val ;
} elsif ($_ eq 'operator_name') {
$val = $db{users}{$operators[$f_t_pos{$f_t}]}{name} ;
$valxlsx = $val ;
} elsif ($_ eq 'default_amount') {
my $tot_amnt = &common_commify(sprintf("%.2f",$cost_of_shipment)) ;
$val = $tot_amnt ;
$valxlsx = $val ;
} elsif ($_ eq 'amount_paid') {
$tot_amnt_paid{$f_t} = sprintf("%.2f",$tot_amnt_paid{$f_t}) ;
$val = qq~<div title="$dates_paid_tooltip{$f_t}" data-toggle="tooltip" data-placement="top">$tot_amnt_paid{$f_t}</div>~ ;
$valxlsx = $dates_paid_tooltip{$f_t} ;
$valxlsx =~ s/\<br>/\;/g;
# $valxlsx = ($valxlsx) ? qq~$amnt_owed [$valxlsx]~ : qq~$amnt_owed~ ;
$valxlsx = ($valxlsx) ? qq~$tot_amnt_paid{$f_t} [$valxlsx]~ : qq~$tot_amnt_paid{$f_t}~ ;
} elsif ($_ eq 'amount_payable') {
$amounts_ids .= qq~input[name='amount_payble_$f_t\_$id'],~ ;
$amount_ids_to_default .= qq~"inputAmount_payble_$f_t\_$id":"$amnt_owed",~ ;
$val = ($amnt_owed > 0) ? &common_min_form_input_col("amount_payble_$f_t\_$id",$amnt_owed) : $amnt_owed ;
$valxlsx = $amnt_owed ;
}
# elsif ($_ eq 'date_payable') {
# if ($date_payable_arr[$f_t_pos{$f_t}]) {
# # $val = ($amnt_owed > 0) ? &common_min_form_input_col("date_$id\_$op_id",$date_pay[$column_count - 1]) : "N/A" ;
# # $val = ($amnt_owed > 0) ? &common_min_form_input_col("date_$f_t\_$id",$date_pay[$f_t_pos{$f_t}]) : "N/A" ;
# $val = ($amnt_owed > 0) ? &common_min_table_datepicker("date_$f_t\_$id",$date_payable[$f_t_pos{$f_t}],'',$table_row_cnt,$table_col_cnt,'',1,'','') : "N/A" ;
# $valxlsx = ($amnt_owed > 0) ? $date_pay[$f_t_pos{$f_t}] : "N/A" ;
# } else {
# # # my $date_payable = ($i{date_to}) ? $i{date_to} : "$now_year-$now_mm-$now_dd" ;
# my $date_payable = "$now_year-$now_mm-$now_dd" ;
# # $val = &common_min_form_input_col("date_$id\_$op_id",$date_payable) ;
# $val = &common_min_table_datepicker("date_$f_t\_$id",$date_payable) ;
# $valxlsx = &common_min_date_as_string($date_payable) ;
# }
# }
elsif ($_ eq 'paid') {
if ($amount_pay[$f_t_pos{$f_t}]) {
$val = ($amnt_owed > 0) ? &common_min_form_checkbox_col("paid_$f_t\_$id",1) : '<i class="glyphicons glyphicons-tick"></i>' ;
} else {
$val = ($amnt_owed > 0) ? &common_min_form_checkbox_col("paid_$f_t\_$id",0) : '<i class="glyphicons glyphicons-tick"></i>' ;
}
$valxlsx = ($amnt_owed > 0) ? "No" : "Yes" ;
}
if ($_ ne 'event_quote_nr' && $_ ne 'date_payable' && $_ ne 'amount_payable' && $_ ne 'paid' && $_ ne 'amount_paid' && $_ ne 'default_amount' && $_ ne 'supplier') {
&xlsxcreator_write_xlsx($ws,$xlsxrow,$xlsxcol,$val,$format_management_report_data) ;
&xlsxcreator_write_xlsx($db{users}{$operators[$f_t_pos{$f_t}]}{name},$xlsxrow_ops{$operators[$f_t_pos{$f_t}]},$xlsxcol,$val,$format_management_report_data) ;
} elsif ($_ eq 'event_quote_nr') {
&xlsxcreator_write_xlsx($ws,$xlsxrow,$xlsxcol,$id,$format_management_report_data_ref_nr) ;
&xlsxcreator_write_xlsx($db{users}{$operators[$f_t_pos{$f_t}]}{name},$xlsxrow_ops{$operators[$f_t_pos{$f_t}]},$xlsxcol,$id,$format_management_report_data_ref_nr) ;
} elsif ($_ eq 'date_payable' || $_ eq 'amount_payable' || $_ eq 'paid' || $_ eq 'default_amount' || $_ eq 'amount_paid' || $_ eq 'supplier') {
&xlsxcreator_write_xlsx($ws,$xlsxrow,$xlsxcol,$valxlsx,$format_management_report_data) ;
&xlsxcreator_write_xlsx($db{users}{$operators[$f_t_pos{$f_t}]}{name},$xlsxrow_ops{$operators[$f_t_pos{$f_t}]},$xlsxcol,$valxlsx,$format_management_report_data) ;
}
$xlsxcol++;
# if ($_ eq 'ref_nr' or $_ eq 'camera_nr') { $val = &common_camera_links($tables,$id,$val) ;}
$print_tbody .= qq~<td $align $nowrap>$val</td>~ ;
}
$print_tbody .= qq~</tr>~ ;
$xlsxrow++ ; $xlsxrow_ops{$operators[$f_t_pos{$f_t}]}++ ;
$f_t_event_ids .= qq~"$f_t\_$id",~ ;
}
# chop $op_ids if $op_ids ;
# $f_t_event_ids .= qq~"$row_cnt_$id":[$op_ids],~ if $op_ids ;
}
chop $f_t_event_ids if $f_t_event_ids ;
chop $amounts_ids if $amounts_ids ;
chop $amount_ids_to_default if $amount_ids_to_default ;
$trigger_jquery_raw .= qq~
let default_amnt_ownd = {$amount_ids_to_default} ;
let prev_amnt_ownd = {} ;
// itv-table
// \$("$amounts_ids").change( function () {
\$("#$useropts{table_id}").on("change","[id^='inputAmount_payble_']", function () {
default_amnt_ownd[this.id] = parseFloat(default_amnt_ownd[this.id]) ;
// if ((\$(this).val() <= 0 || \$(this).val() > default_amnt_ownd[this.id]) && !prev_amnt_ownd[this.id]) {
if ((\$(this).val() <= 0) && !prev_amnt_ownd[this.id]) {
\$(this).val(default_amnt_ownd[this.id]) ;
// } else if ((\$(this).val() <= 0 || \$(this).val() > default_amnt_ownd[this.id]) && prev_amnt_ownd[this.id]) {
} else if ((\$(this).val() <= 0) && prev_amnt_ownd[this.id]) {
\$(this).val(prev_amnt_ownd[this.id]) ;
} else {
prev_amnt_ownd[this.id] = \$(this).val() ;
}
let abc = \$(this).val() ;
abc = parseFloat(abc) ;
abc = abc.toFixed(2) ;
\$(this).val(abc) ;
}) ;
~ ;
$xlsxrow_ops{$ws} = 1 ;
$db{users}{$ws}{name} = $ws ;
foreach (keys %xlsxrow_ops) {
$worksheet{$db{users}{$_}{name}} -> set_column(0,0,15) ;
$worksheet{$db{users}{$_}{name}} -> set_column(2,8,25) ;
$worksheet{$db{users}{$_}{name}} -> set_column(1,1,40) ;
$worksheet{$db{users}{$_}{name}} -> set_column(9,13,15) ;
$worksheet{$db{users}{$_}{name}} -> set_column(15,15,10) ;
$worksheet{$db{users}{$_}{name}} -> set_row(0,20) if $db{users}{$_}{name} ne $ws ;
}
$worksheet{$ws} -> set_row(0,30) ;
$worksheet{$ws} -> set_row(2,20) ;
$box_icon .= qq~<div class="box-icon" title='Toggle all Selected' data-toggle="tooltip" data-placement="left"><a class="btn btn-default btn-round" href="javascript:selectAll();" style="padding-top:1px;"><i class="glyphicon glyphicon-usd icon-white"></i></a></div>~ ;
&report_xlsx_export_footer('L',15,'logistics_payments') ;
$fnsortcol = 0;
$fnsortorder = 'asc' ;
&common_min_extra_crumb("$lcpage\s","Search Screen") ;
$trigger_jquery_raw .= qq~
function selectAll() {
console.log("selectAll") ;
let jsObject = [
$f_t_event_ids
];
for (let key in jsObject) {
console.log("key : "+key) ;
\$(\$("#itv-table").dataTable().fnGetNodes()).find(\$("input[name=paid_"+jsObject[key]+"]")).each(function () {
if(\$(this).is(':checked')) {
\$(this).prop('checked',false);
} else {
\$(this).prop('checked',true);
}
}) ;
}
}
~;
# my $savebuttjs = ($count_outstanding > 0) ? '$("#invoice-form").submit();' : 'noty({text:"There are no operators to pay!",layout:"center",type:"error",timeout:3000});return;' ;
$trigger_jquery_raw .= qq~
\$("#savebutt").click(function() {
$savebuttjs
\$("#logistics-payments-form").submit();
});
~ ;
&common_min_table_datepicker_jquery ;
} #------------------------------------------------------------------------------------------
sub set_tick {
my ($color,$tooltip) = @_ ;
$tick{green} = qq~<span style="display:none;">2</span><span class="label label-success"><i $tooltip class="glyphicon glyphicon-ok"></i></span>~ ;
$tick{orange} = qq~<span style="display:none;">1</span><span class="label label-warning"><i $tooltip class="glyphicon glyphicon-ok"></i></span>~ ;
$tick{red} = qq~<span style="display:none;">0</span><span class="label label-danger"><i $tooltip class="glyphicon glyphicon-ok"></i></span>~ ;
return ($tick{$color}) ;
} #------------------------------------------------------------------------------------------
sub set_cross {
my ($color,$tooltip) = @_ ;
$tick{green} = qq~<span style="display:none;">2</span><span class="label label-success"><i $tooltip class="glyphicon glyphicon-remove"></i></span>~ ;
$tick{orange} = qq~<span style="display:none;">1</span><span class="label label-warning"><i $tooltip class="glyphicon glyphicon-remove"></i></span>~ ;
$tick{red} = qq~<span style="display:none;">0</span><span class="label label-danger"><i $tooltip class="glyphicon glyphicon-remove"></i></span>~ ;
return ($tick{$color}) ;
} #------------------------------------------------------------------------------------------
sub load_list_vars {
my ($where) = @_ ;
&db_min_ro($table,"id,quote_to,ref,quote_accepted,logistics_suppliers,logistics_system_location_id,logistics_dates_paid,logistics_amounts_paid,date_from,date_to,logistics_delivery_datetime,logistics_shipment_operator_id,logistics_venue_id,city_id","$where AND `quote_accepted` = '1'",'','') ;
&db_min_ro('customers','id,name',"events='1'",'','') ;
# my %seen_poc = () ; load_list_vars
foreach (sort {$db{$table}{$a}{poc_name} cmp $db{$table}{$b}{poc_name}} keys %{$db{$table}}) {
# next if $seen_poc{$db{$table}{$_}{poc_name}}{$db{$table}{$_}{poc_contact_nr}} || !$db{$table}{$_}{poc_name} ;
# $seen_poc{$db{$table}{$_}{poc_name}}{$db{$table}{$_}{poc_contact_nr}} = 1 ;
my $poc_name = ($db{$table}{$_}{recipient_name}) ? $db{$table}{$_}{recipient_name} : $db{$table}{$_}{poc_name} ;
my $poc_nr = ($db{$table}{$_}{recipient_nr}) ? $db{$table}{$_}{recipient_nr} : $db{$table}{$_}{poc_contact_nr} ;
next unless $poc_name ;
$poc_nr =~ s/\'//g ;
$opts{poc}{$_} .= qq~<option value="$poc_name\_$poc_nr">$poc_name [$poc_nr]</option>~ ;
}
# &db_min_ro('event_systems','*',"(`system_type` = 'solo' OR `system_type` = 'mobile' OR `description` lIKE 'cricket%')",'','') ;
# our %logistics_waybill_ids_hash = () ;
# our %fval = () ;
# our %col_database_col = () ;
# foreach my $id (keys %{$db{$table}}) {
# $fval{item}{$id}{from} = $db{$table}{$id}{logistics_item_ids} ;
# $fval{item}{$id}{to} = $db{$table}{$id}{logistics_item_ids} ;
# my @split_values = split(/\-/, $db{$table}{$id}{logistics_suppliers}) ;
# $fval{supplier}{$id}{from} = $split_values[0] ;
# $fval{supplier}{$id}{to} = $split_values[1] ;
# @split_values = split(/\-/,$db{$table}{$id}{logistics_waybill_nrs}) ;
# $logistics_waybill_ids_hash{$id}{from} = $split_values[0] ;
# $logistics_waybill_ids_hash{$id}{to} = $split_values[1] ;
# $fval{waybill_nr}{$id}{from} = $split_values[0] ;
# $fval{waybill_nr}{$id}{to} = $split_values[1] ;
# @split_values = split(/\-/,$db{$table}{$id}{logistics_status_ids}) ;
# $fval{status}{$id}{from} = $split_values[0] ;
# $fval{status}{$id}{to} = $split_values[1] ;
# @split_values = split(/\-\-/,$db{$table}{$id}{logistics_dcb_comments}) ;
# $fval{dcb_comments}{$id}{from} = $split_values[0] ;
# $fval{dcb_comments}{$id}{to} = $split_values[1] ;
# @split_values = split(/\-\-/,$db{$table}{$id}{logistics_special_instructions}) ;
# my @split_from = split(/\:\|\:/,$split_values[0]) ;
# my @split_to = split(/\:\|\:/,$split_values[1]) ;
# $fval{special_instructions}{$id}{from} = $split_from[0] ;
# $fval{other_special_instructions}{$id}{from} = $split_from[1] ;
# $fval{special_instructions}{$id}{to} = $split_to[0] ;
# $fval{other_special_instructions}{$id}{to} = $split_to[1] ;
# my $def_poc_name = ($db{$table}{$id}{recipient_name}) ? $db{$table}{$id}{recipient_name} : $db{$table}{$id}{poc_name} ;
# my $def_poc_nr = ($db{$table}{$id}{recipient_nr}) ? $db{$table}{$id}{recipient_nr} : $db{$table}{$id}{poc_contact_nr} ;
# $fval{poc}{$id}{from} = qq~$def_poc_name\_$def_poc_nr~ if $def_poc_name || $def_poc_nr;
# $fval{poc}{$id}{to} = $fval{poc}{$id}{from} ;
# my @delivery_split = split(/\|/,$db{$table}{$id}{logistics_delivery_datetime}) ;
# my @delivery_from = split("T",$delivery_split[0]) ;
# my @delivery_to = split("T",$delivery_split[1]) ;
# $fval{delivery_date}{$id}{to} = $delivery_to[0] || &get_default_date($db{$table}{$id}{date_to},-1) ;
# $fval{delivery_time}{$id}{to} = $delivery_to[1] || '15:00:00' ;
# $fval{delivery_date}{$id}{from} = $delivery_from[0] || &get_default_date($db{$table}{$id}{date_from},1) ;
# $fval{delivery_time}{$id}{from} = $delivery_from[1] || '15:00:00' ;
# my @location_other_split = split(/\:\|\:/,$db{$table}{$id}{logistics_location_other}) ;
# my @location_other_to_split = split(/\|/,$location_other_split[1]) ;
# $fval{other_to}{$id}{from} = $location_other_to_split[0] ;
# $fval{other_to}{$id}{to} = $location_other_to_split[1] ;
# my @location_other_from_split = split(/\|/,$location_other_split[0]) ;
# $fval{other_from}{$id}{from} = $location_other_from_split[0] ;
# $fval{other_from}{$id}{to} = $location_other_from_split[1] ;
# $fval{received_by}{$id}{to} = $db{$table}{$id}{logistics_received_by} ;
# $fval{received_by}{$id}{from} = $fval{received_by}{$id}{to} ;
# }
# &db_min_ro('cities','id,city,city_short','','','') ;
# &db_min_ro('sport_types','id,name','','','') ;
# &db_min_ro('regions','code,id','','','') ;
# &db_min_ro('organisations','id,name,region_code','','','') ;
# foreach (sort {$db{organisations}{$a}{name} cmp $db{organisations}{$b}{name}} keys %{$db{organisations}}) {
# $opts{venue_location}{$db{regions}{$db{organisations}{$_}{region_code}}{id}} .= qq~<option value="$_">$db{organisations}{$_}{name}</option>~ ;
# # &common_debug("1. venue_location >>>>>> [<option value=$_>$db{organisations}{$_}{name}</option>]");
# }
# $opts{venue_location}{other} .= qq~<option value="5">Other</option>~ ;
&db_min_ro('users','id,name,user_type,username',"`user_type` LIKE 'casual_%' AND `name` NOT LIKE 'Rory%'",'','') ;
# my $dcb_sql = ($is_dcb_partner) ? "id='2'" : '' ;
# &db_min_ro('logistics_suppliers','*','','','') ;
&db_min_ro('logistics_suppliers','*',"active = '1'",'','') ;
our %AISA_suppliers = () ;
foreach (sort {$db{logistics_suppliers}{$a}{supplier} cmp $db{logistics_suppliers}{$b}{supplier}} keys %{$db{logistics_suppliers}}) {
$opts{suppliers} .= qq~<option value='$_'>$db{logistics_suppliers}{$_}{supplier}</option>~ ;
$AISA_suppliers{$_} = 1 if $db{logistics_suppliers}{$_}{supplier} =~ /AISA/ ;
}
# foreach (sort {$db{logistics_suppliers}{$a}{supplier} cmp $db{logistics_suppliers}{$b}{supplier}} keys %{$db{logistics_suppliers}}) {
# $logistics_suppliers_selected = ($_ == 2) ? 'SELECTED' : '' ; # DCB Logistics
# $opts{supplier} .= qq~<option value="$_" $logistics_suppliers_selected>$db{logistics_suppliers}{$_}{supplier}</option>~ ;
# $db{logistics_suppliers}{$_}{name} = $db{logistics_suppliers}{$_}{supplier} ;
# }
# $opts{supplier_to} = $opts{supplier_from} ;
&db_min_ro('logistics_locations','*','','','') ;
&db_min_ro('logistics_shipments_cost','*','','','') ; ## id,cost,valid_from,valid_to
our %shipments_cost = () ;
foreach (keys %{$db{logistics_shipments_cost}}) {
$shipments_cost{$_}{valid_from} = $db{logistics_shipments_cost}{$_}{valid_from} ;
$shipments_cost{$_}{valid_to} = $db{logistics_shipments_cost}{$_}{valid_to} ;
$shipments_cost{$_}{cost} = $db{logistics_shipments_cost}{$_}{cost} ;
}
&db_min_ro('organisations','id,name,region_code','','','') ; ## id,cost,valid_from,valid_to
&db_min_ro('cities','id,name','','','') ;
&db_min_ro('event_systems','*',"(`system_type` = 'solo' OR `system_type` = 'mobile' OR `description` lIKE 'cricket%')",'','') ;
&db_min_ro('event_cost_items','1,rates',"name = 'Logistics Shipments'",'','') ;
# foreach (sort {$db{logistics_locations}{$a}{location} cmp $db{logistics_locations}{$b}{location}} keys %{$db{logistics_locations}}) {
# $opts{system_location} .= qq~<option value="$_">$db{logistics_locations}{$_}{location}</option>~ ;
# }
# &common_debug("1. system_location >>>>>> [$opts{system_location}]");
# our %status_hash = (1 =>"Booked",2 => "Pending",3=>"In Transit",4 =>"Delivered") ;
# $opts{status} .= qq~<option value="1">$status_hash{1}</option>~ ;
# $opts{status} .= qq~<option value="2" SELECTED>$status_hash{2}</option>~ ;
# $opts{status} .= qq~<option value="3">$status_hash{3}</option>~ ;
# $opts{status} .= qq~<option value="4">$status_hash{4}</option>~ ;
# $opts{status} = $opts{status_to} ;
# &db_min_ro('logistics_items','*','','','') ;
# foreach (sort {($db{logistics_items}{$a}{name} =~ /^(\d+)/)[0] <=> ($db{logistics_items}{$b}{name} =~ /^(\d+)/)[0]} keys %{$db{logistics_items}}) {
# next if lc $db{logistics_items}{$_}{name} eq 'other' ;
# $opts{item} .= qq~<option value="$_">$db{logistics_items}{$_}{name}</option>~ ;
# $logistics_items_qty{$db{logistics_items}{$_}{qty}} .= "$_," if $db{logistics_items}{$_}{name} =~ /Tripod/ || $db{logistics_items}{$_}{name} =~ /Extension/ || $db{logistics_items}{$_}{name} =~ /Mobile System/ ;
# }
# foreach (keys %logistics_items_qty) {
# chop $logistics_items_qty{$_} ;
# }
# $opts{item} .= qq~<option value="1">Other</option>~ ;
} #------------------------------------------------------------------------------------------
sub thead {
&common_min_thead ;
} #-------------------------------------------------------------------------------
sub page_opts {
our $glyphicon = 'list' ;
our $lcpage = 'logistics-payment' ;
&common_page_name ;
our $table = 'event_quotes' ;
$page_title = 'Logistics Payments' ;
} #-------------------------------------------------------------------------------
sub report_screen {
our $lcol = 3 ;
our $fcol = 5 ;
$allow_deselect{client_id} = 1 ;
$allow_deselect{supplier_id} = 1 ;
$allow_deselect{operator_id} = 1 ;
$i{client_id} = "" if $i{client_id} eq 'all' ;
$opts{client_id} = ($i{client_id}) ? qq~<option value='all'>All</option>~ : qq~<option value='all' SELECTED>All</option>~ ;
&common_min_select_opts('client_id','customers','name',$i{client_id},'','',"events='1'") ;
# &common_min_select_opts('organisation_ids','organisations','name','','','','','','','','name') ;
&common_min_select_opts('supplier_id','logistics_suppliers','supplier','','','',"supplier NOT LIKE 'DCB%' AND active = '1'",'','','','supplier') ;
&common_min_select_opts('operator_id','users','name','','','',"`user_type` LIKE 'casual_%' AND `name` NOT LIKE 'Rory%'",'','','','name') ;
# &common_min_select_opts('system_location_id','logistics_locations','location','','','',"location NOT LIKE '%JHB'",'','','','location') ;
# &common_min_select_opts('region_id','regions','name','','','code','','','','','name') ;
# %status_hash = ($is_dcb_partner) ? (1 =>"Booked") : (1 =>"Booked",2 => "Pending",3=>"In Transit",4 =>"Delivered") ;
# $i{status_id} = ($is_dcb_partner && !$i{status_id}) ? 1 : $i{status_id} ;
# $selected{$i{status_id}} = "SELECTED" if $i{status_id} ;
# for (1 .. 4) { $opts{status_id} .= qq~<option value="$_" $selected{$_}>$status_hash{$_}</option>~ ; }
$preferred_title{organisation_ids} = "Venue" ;
$print_box_content_rows .= &common_min_forms_start('report') ;
# $trigger_jquery .= qq~
# \$("#selectClient_id").val('5').trigger("chosen:updated") ;
# ~ ;
# $allow_deselect{organisation_ids} = 1 ;
# $allow_deselect{supplier_id} = 1 ;
# $allow_deselect{status_id} = 1 ;
# $allow_deselect{region_id} = 1 ;
$print_box_content_rows .= &common_min_form_select('client_id',$i{client_id}) ;
my ($monday,$sunday) = &common_get_this_monday_sunday ;
$print_box_content_rows .= &common_min_form_datepicker('date_from',$monday) ; #unless $i{date_from} ;
$print_box_content_rows .= &common_min_form_datepicker('date_to',$sunday) ; #unless $i{date_from} ;
# $print_box_content_rows .= &common_min_form_select('organisation_ids','') ;
$print_box_content_rows .= &common_min_form_select('supplier_id','') ;
$print_box_content_rows .= &common_min_form_select('operator_id','') ;
# $print_box_content_rows .= &common_min_form_select('system_location_id','') ;
# $print_box_content_rows .= &common_min_form_select('status_id','') ;
# $print_box_content_rows .= &common_min_form_select('region_id','') ;
$opts{paid_status} .= qq~<option value="all">All</option>~ ;
$opts{paid_status} .= qq~<option value="paid">Paid</option>~ ;
$opts{paid_status} .= qq~<option value="outstanding" SELECTED>Outstanding</option>~ ;
$print_box_content_rows .= &common_min_form_select('paid_status','') ;
$print_box_content_rows .= &common_min_forms_end('','','report') ;
&common_min_search_screen ;
} #-------------------------------------------------------------------------------
sub screen3 {
our %custom_column_styles = () ;
$custom_column_styles{date_payable} = qq~style="min-width:120px;"~ ;
$custom_column_styles{amount_payable} = qq~style="min-width:120px;"~ ;
# $custom_column_styles{supplier} = qq~style="min-width:120px;width:15%;"~ ;
# &common_min_table_select_jquery("#$useropts{table_id} td:nth-last-child($last_child{supplier})") ;
&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") ;ST STITHIANS COLLEGE BASKETBALL TOU
$extra_form_fields .= qq~
<input type="hidden" name="client_id" value="$i{client_id}">
<input type="hidden" name="date_from" value="$i{date_from}">
<input type="hidden" name="date_to" value="$i{date_to}">
<input type="hidden" name="operator_id" value="$i{operator_id}">
<input type="hidden" name="supplier_id" value="$i{supplier_id}">
<input type="hidden" name="paid_status" value="$i{paid_status}">~;
$print_box_content_rows .= &common_min_forms_end('','','save') ;
require _blank ;
exit ;
} #------------------------------------------------------------------------------------------
sub screen4 {
&common_min_alert_type ;
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>
\$(document).ready(function(){ \$('#logistics-payments-form').submit(); })
</script>
</body>
<form role="form" id="logistics-payments-form" method="post" action="logistics-payments">
<input type="hidden" name="iaction" value="report">
<input type="hidden" name="date_from" value="$i{date_from}">
<input type="hidden" name="date_to" value="$i{date_to}">
<input type="hidden" name="paid_status" value="$i{paid_status}">
<input type="hidden" name="client_id" value="$i{client_id}">
<input type="hidden" name="supplier_id" value="$i{supplier_id}">
<input type="hidden" name="operator_id" value="$i{operator_id}">
<input type="hidden" name="isaved" value="$success">
</form>
</html>
ENDOFTEXT
#
exit ;
} #------------------------------------------------------------------------------------------
use common ;
use report ;
use xlsxcreator ;
use today ;
use logistics ;
1;