405 lines
14 KiB
Perl
405 lines
14 KiB
Perl
#!/usr/bin/perl
|
|
|
|
BEGIN { use lib '/usr/home/cfg' ; require push_inc ; }
|
|
|
|
require cfg ;
|
|
# unless ($username eq 'handre') { 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;
|
|
|
|
&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 $cnt_match_credits = 4 ; # used in common_load_quote_vars
|
|
|
|
#-------- page opts --------------------------------------------------------------------------------------------------------------------------------------------------
|
|
|
|
&page_opts ;
|
|
|
|
#---------------------------------------------------------------------------------------------------------------------------------------------------------------------
|
|
|
|
print "Content-type: text/html\n\n";
|
|
|
|
our $srchscr = 1 ;
|
|
|
|
&db_open_ro ;
|
|
our $db_ignore_open_close = 1 ; # do one open and one close instead of repeating it
|
|
if ($iaction eq ''){ &report_screen ; }
|
|
&common_min_action;
|
|
$db_ignore_open_close = 0 ; # do one open and one close instead of repeating it
|
|
&db_close_conn ;
|
|
|
|
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(CAMERAS FROM ($i{date_from}) > CAMERAS TO ($i{date_to})); &report_screen; }
|
|
}
|
|
|
|
if ($i{date_from}) {
|
|
push @report_sql, "(`quote_date` >= '$i{date_from}')" ;
|
|
push @report_results, "quote_date >= $i{date_from}" ;
|
|
}
|
|
|
|
if ($i{date_to}) {
|
|
push @report_sql, "(`quote_date` <= '$i{date_to}')" ;
|
|
push @report_results, "quote_date <= $i{date_to}" ;
|
|
}
|
|
|
|
if ($i{client_id}) {
|
|
push @report_sql, "(`quote_to`='$i{client_id}')" ;
|
|
push @report_results, "Client = $client{$i{client_id}}" ;
|
|
}
|
|
|
|
if ($i{options} eq 'accepted') {
|
|
# push @report_sql, "(`quote_to`='$i{client_id}')" ;
|
|
# push @report_results, "Client = $client{$i{client_id}}" ;
|
|
|
|
push @report_sql, "(`quote_accepted`=1)" ;
|
|
push @report_results, "Quote Accepted = 'Yes'" ;
|
|
}
|
|
|
|
if ($i{options} eq 'cancelled') {
|
|
|
|
push @report_sql, "(`quote_cancelled`=1)" ;
|
|
push @report_results, "Quote Cancelled = 'Yes'" ;
|
|
}
|
|
|
|
if ($i{options} eq 'pending') {
|
|
|
|
push @report_sql, "(`quote_pending`=1)" ;
|
|
push @report_results, "Quote Pending = 'Yes'" ;
|
|
}
|
|
|
|
|
|
push @report_sql, "(`invoice_nr`>0)" ;
|
|
push @report_results, "Invoice Nr exists" ;
|
|
|
|
$report_results_msg = uc join(', ', @report_results) ;
|
|
|
|
unless ($report_results_msg) { $error = qq(ENTER AT LEAST ONE SEARCH PARAMETER); &report_screen; } else { $isaved = qq(SELECT WHERE $report_results_msg) ; }
|
|
|
|
} #------------------------------------------------------------------------------------------
|
|
|
|
sub load_search_vars {
|
|
|
|
if ($i{client_id}) {
|
|
my $customers_sql_where = "`id`='$i{client_id}'" ;
|
|
&db_min_ro('customers','*',$customers_sql_where,'','') ;
|
|
foreach my $id (keys %{$db{customers}}) { $client{$id} = $db{customers}{$id}{name} ; }
|
|
}
|
|
|
|
} #------------------------------------------------------------------------------------------
|
|
|
|
sub list_screen {
|
|
|
|
my $srch_where_sql = join(' AND ', @report_sql) ;
|
|
my $add_sql_where = '' ;
|
|
&load_list_vars("$srch_where_sql$add_sql_where") ;
|
|
"e_list;
|
|
|
|
} #------------------------------------------------------------------------------------------
|
|
|
|
sub quote_list {
|
|
|
|
our @sql_col_display = ("nr","customer","event","location","city","date_from","date_to","days","type","operators") ;
|
|
our @col_display_excel = () ;
|
|
@col_display_excel = @sql_col_display ;
|
|
|
|
&report_xlsx_export_header_events("Operators_Booking_Summary",'events') ;
|
|
|
|
$worksheet{$ws} -> set_row(0, 40) ;
|
|
$worksheet{$ws} -> set_row(1, 25) ;
|
|
$worksheet{$ws} -> set_row(2, 25) ;
|
|
$worksheet{$ws} -> set_row(3, 5) ;
|
|
|
|
$worksheet{$ws} -> set_column(0,0,10);
|
|
$worksheet{$ws} -> set_column(1,1,30);
|
|
$worksheet{$ws} -> set_column(2,2,40);
|
|
$worksheet{$ws} -> set_column(3,4,20);
|
|
$worksheet{$ws} -> set_column(5,6,15);
|
|
$worksheet{$ws} -> set_column(7,7,10);
|
|
$worksheet{$ws} -> set_column(8,8,40);
|
|
$worksheet{$ws} -> set_column(9,9,50);
|
|
|
|
my @month_fullname = ("January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December") ;
|
|
# if ($i{export_to_excel}) { &report_xls_export_header("Event Quotes",'event_quotes') ; }
|
|
my @day_of_week_text = ("", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday", "Sunday") ;
|
|
|
|
foreach my $id (sort {$b <=> $a} keys %{$db{$tables}}) {
|
|
|
|
unless ($id) { next ; }
|
|
|
|
my $quote_expiry = $db{$tables}{$id}{quote_expiry} ; $quote_expiry =~ s/\-//iog ;
|
|
|
|
# if ($quote_expiry and $quote_expiry<"$now_year$now_mm$now_dd" and $iaction ne 'report' and $iaction ne 'accepted' and $iaction ne 'closed' and $iaction ne 'all') { next ; }
|
|
if ($quote_expiry and $quote_expiry<"$now_year$now_mm$now_dd" and $db{$tables}{$id}{quote_accepted}!=1 and
|
|
$iaction ne 'report' and $iaction ne 'accepted' and $iaction ne 'closed' and $iaction ne 'all' and
|
|
$i{options} ne 'accepted' and $i{options} ne 'closed' and $i{options} ne 'all')
|
|
{ next ; }
|
|
|
|
$print_tbody .= qq~<tr>~ ;
|
|
|
|
$xlsxcol=0;
|
|
|
|
my $quote_nr = $db{$tables}{$id}{quote_nr} ;
|
|
|
|
foreach (@sql_col_display) {
|
|
unless ($_) { next ; } # blank for the buttons column
|
|
my $val = &get_val($id, $_) ;
|
|
my $align = qq~ class="dt-center"~ ;
|
|
my $nowrap = '' ;
|
|
$print_tbody .= qq~<td $nowrap $align>$val</td>~ ;
|
|
$val = $id if $_ eq 'nr' ;
|
|
$val =~ s/\<br>/\;/g if $_ eq 'operators' ;
|
|
&xlsxcreator_write_xlsx($ws,$xlsxrow,$xlsxcol,$val,$format_event_data) ;
|
|
$xlsxcol++;
|
|
}
|
|
$xlsxrow++;
|
|
$print_tbody .= qq~</tr>~ ;
|
|
## EXCEL----------------------------
|
|
|
|
# my $start_date = substr($db{$tables}{$id}{date_from},0,10);
|
|
# my $end_date = substr($db{$tables}{$id}{date_to},0,10);
|
|
# my @event_dates = () ;
|
|
|
|
# my $year = substr($db{$tables}{$id}{date_from}, 0, 4 ) ;
|
|
# my $month = substr($db{$tables}{$id}{date_from}, 5, 2 ) ;
|
|
# my $day = substr($db{$tables}{$id}{date_from}, 8, 2 ) ;
|
|
|
|
# push (@event_dates, $year . '-' . $month . '-' . $day) ;
|
|
|
|
# while ($start_date ne $end_date){
|
|
|
|
# ($year,$month,$day) = Add_Delta_Days($year,$month,$day,1) ;
|
|
# $day = sprintf("%02d", $day) ;
|
|
# $month = sprintf("%02d", $month) ;
|
|
# push (@event_dates, $year . '-' . $month . '-' . $day) ;
|
|
# $start_date = $year . '-' . $month . '-' . $day ;
|
|
# }
|
|
|
|
# # print "EVENT_DATES: @event_dates\n" ;
|
|
|
|
|
|
|
|
# my $row_count = 0;
|
|
# my $day_count = 0 ;
|
|
# for my $event_date (sort @event_dates) {
|
|
# $xlsxcol = 0 ;
|
|
# $row_count++ ;
|
|
# $day_count++ ;
|
|
# foreach (@sql_col_display) {
|
|
# my $val = &get_val($id, $_) ;
|
|
# if ($_ eq 'nr'){$val = $id ;}
|
|
# elsif ($_ eq 'days'){$val = $day_count ;}
|
|
# if ($event_date ne $end_date) {
|
|
# &report_write_events($val, 0) ;
|
|
# } else {
|
|
# &report_write_events($val, 1) ;
|
|
# }
|
|
# $xlsxcol++;
|
|
# }
|
|
# $xlsxrow++;
|
|
# }
|
|
# EXCEL---------------------------------------------
|
|
|
|
my $delete_butt = '' ;
|
|
my $edit_butt = '' ;
|
|
my $quote_nr = $quote_nr ; $quote_nr =~ s/'//iog; unless ($quote_nr) { $quote_nr = $id ; }
|
|
}
|
|
|
|
# if ($i{export_to_excel}) {
|
|
&report_xlsx_export_footer('L',15,'events') ;
|
|
|
|
$print_more_boxes .= qq~<br><button type="button" class="btn btn-default" onclick="history.go(-1);">Back</button><br><br>~ ;
|
|
|
|
&common_min_extra_crumb("search-$lcpage\s","Search Screen") ;
|
|
|
|
} #-------------------------------------------------------------------------------
|
|
|
|
sub get_val {
|
|
|
|
my ($id, $col) = @_ ;
|
|
my $val = $db{$tables}{$id}{$_} ;
|
|
my $ops = "" ;
|
|
# print "$col, $val \n" ;
|
|
if ($col eq 'date_to') {
|
|
$val = substr($db{$tables}{$id}{date_to},0,10) ;
|
|
$align = qq~ class="dt-center" style="width:6.9%"~ ;
|
|
} elsif ($col eq 'date_from') {
|
|
$val = substr($db{$tables}{$id}{date_from},0,10) ;
|
|
} elsif ($col eq 'event') {
|
|
$val = $db{$tables}{$id}{ref} ;
|
|
$nowrap = 'nowrap' ;
|
|
} elsif ($col eq 'location') {
|
|
$val = ($db{$tables}{$id}{region_id}) ? "$db{regions}{$db{$tables}{$id}{region_id}}{name} [$db{regions}{$db{$tables}{$id}{region_id}}{code}]" : "" ;
|
|
} elsif ($col eq 'city') {
|
|
$val = ($db{$tables}{$id}{city_id}) ? $db{cities}{$db{$tables}{$id}{city_id}}{city} : $db{$tables}{$id}{city} ;
|
|
} elsif ($col eq 'customer') {
|
|
$val = $customer{$db{$tables}{$id}{quote_to}} ;
|
|
$nowrap = 'nowrap' ;
|
|
} elsif ($col eq 'city'){
|
|
} elsif ($col eq 'ligr'){
|
|
$val = $db{$tables}{$id}{ligr} ;
|
|
} elsif ($col eq 'days') {
|
|
$val = $db{$tables}{$id}{qty} ;
|
|
} elsif ($col eq 'type') {
|
|
$val = $event_types{$db{$tables}{$id}{type}} if $db{$tables}{$id}{type} ;
|
|
} elsif ($col eq 'nr') {
|
|
my $class = 'info' ;
|
|
if ($db{$tables}{$id}{quote_cancelled}) {
|
|
$class = 'danger' ;
|
|
} elsif ($db{$tables}{$id}{quote_accepted}) {
|
|
$class = 'success' ;
|
|
} elsif ($quote_expiry and $quote_expiry<"$now_year$now_mm$now_dd") {
|
|
$class = 'danger' ;
|
|
} elsif ($db{$tables}{$id}{quote_pending}) {
|
|
$class = 'warning' ;
|
|
}
|
|
$val = qq~<a class="btn btn-$class btn-xs" href="javascript:editMinItem('$id');">$id</a>~ ;
|
|
} elsif ($col eq 'location'){
|
|
} elsif ($col eq 'operators') {
|
|
$val = "" ;
|
|
my %seen_op = () ;
|
|
@op_work = split(";", $db{event_quotes_min}{$id}{operator_workings_event});
|
|
for my $opp_cnt (1 .. 50) {
|
|
# next unless $db{$tables}{$id}{"operator_$opp_cnt\_workings_event"} ;
|
|
# next if $seen_op{$db{$tables}{$id}{"operator_$opp_cnt\_workings_event"}} ;
|
|
# $seen_op{$db{$tables}{$id}{"operator_$opp_cnt\_workings_event"}} = 1;
|
|
# $ops = $casual_names_from_ids{$db{$tables}{$id}{"operator_$opp_cnt\_workings_event"}} ;
|
|
next unless $op_work[$opp_cnt - 1] ;
|
|
next if $seen_op{$op_work[$opp_cnt - 1]} ;
|
|
$seen_op{$op_work[$opp_cnt - 1]} = 1;
|
|
$ops = $casual_names_from_ids{$op_work[$opp_cnt - 1]} ;
|
|
$val .= "$ops<br>" ;
|
|
}
|
|
$val = substr($val,0,-2) if $val;
|
|
}
|
|
return ($val) ;
|
|
}
|
|
|
|
sub load_list_vars {
|
|
|
|
my ($where) = @_ ;
|
|
our %event_types = () ;
|
|
&db_min_ro('event_types','id,name','','','') ;
|
|
foreach my $id (keys %{$db{event_types}}) { $event_types{$id} = $db{event_types}{$id}{name} ; }
|
|
&db_min_ro('customers','id,name','','','') ;
|
|
foreach my $id (keys %{$db{customers}}) { $customer{$id} = $db{customers}{$id}{name} ; }
|
|
our %casual_names_from_ids = () ;
|
|
&db_min_ro('users','id, name, user_type',"user_type = 'casual_a' OR user_type = 'casual_b' OR user_type = 'casual_c'",'','') ;
|
|
foreach my $id (keys %{$db{'users'}}){
|
|
$casual_names_from_ids{$id} = $db{'users'}{$id}{name} ;
|
|
}
|
|
&db_min_ro('event_quotes_min','id, operator_workings_event','','','') ;
|
|
&db_min_ro('cities','id,city,province','','','') ;
|
|
&db_min_ro('regions','id,code,name','','','') ;
|
|
&db_min_ro($tables,'*',$where,'','') ;
|
|
|
|
} #------------------------------------------------------------------------------------------
|
|
|
|
sub thead {
|
|
|
|
&common_min_thead ;
|
|
|
|
} #-------------------------------------------------------------------------------
|
|
|
|
sub page_opts {
|
|
|
|
our $glyphicon = 'list' ;
|
|
# our $lcpage = 'operators-booking-summary' ;
|
|
our $lcpage = 'event-quote' ;
|
|
|
|
|
|
&common_page_name ;
|
|
|
|
our $tables = 'event_quotes' ;
|
|
$page_title = 'Operators Booking Summary' ;
|
|
|
|
} #-------------------------------------------------------------------------------
|
|
|
|
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','','') ;
|
|
|
|
my @datefrom = &common_add_delta_ymd(-2,0,0) ;
|
|
|
|
$print_box_content_rows .= &common_min_form_datepicker('date_from',"$datefrom[0]-01-01") ;
|
|
$print_box_content_rows .= &common_min_form_datepicker('date_to',"$now_year-$now_mm-$now_dd") ;
|
|
|
|
$opts{options} = qq~
|
|
<option value=""></option>
|
|
<option value="all">All</option>
|
|
<option value="pending">Pending</option>
|
|
<option value="accepted">Accepted</option>
|
|
<option value="cancelled">Cancelled</option>
|
|
~ ;
|
|
$print_box_content_rows .= &common_min_form_select('options','','',1,'') ;
|
|
|
|
$print_box_content_rows .= &common_min_form_select('client_id','') ;
|
|
# $print_box_content_rows .= &common_min_form_select('options','') ;
|
|
$print_box_content_rows .= &common_min_forms_end('','','report') ;
|
|
|
|
&common_min_search_screen ;
|
|
|
|
} #-------------------------------------------------------------------------------
|
|
|
|
sub common_camera_links_events {
|
|
|
|
my ($table,$id,$val) = @_ ;
|
|
|
|
if ($_ eq 'camera_nr') {
|
|
my $class = 'info' ; $class = 'warning' if $db{$table}{$id}{quote_nr} ;
|
|
my $style = '' ; $style = "style='background-color:purple;'" if $db{$table}{$id}{demo_recipient} ;
|
|
$val = qq~<a class="btn btn-$class btn-xs" href="javascript:editMinItem('$id','cameras');" style="padding: 0px 3px 0px 3px;font-size:12px">$val</a>~ ;
|
|
}
|
|
|
|
if ($_ eq 'quote_nr' or $_ eq 'ref_nr' or $_ eq 'ref') {
|
|
my $class = 'info' ; $class = 'warning' if $val ;
|
|
my $style = '' ; $style = "style='background-color:purple;'" if $db{$table}{$id}{demo_recipient} ; $class = 'success' if $db{$table}{$id}{quote_accepted} or $quote_accepted{$id} ; $class = 'danger' if $db{$table}{$id}{quote_cancelled} or $quote_cancelled{$id} ;
|
|
my $quote_id = $quote_id{$val} ? $quote_id{$val} : $id ;
|
|
$val = $val ? qq~<a class="btn btn-$class btn-xs" href="javascript:editEventQuote('$quote_id');" style="padding: 0px 3px 0px 3px;font-size:12px">$val</a>~ : '' ;
|
|
}
|
|
|
|
return ($val) ;
|
|
|
|
} #------------------------------------------------------------------------------------------
|
|
|
|
use common ;
|
|
use report ;
|
|
use xlsxcreator ;
|
|
use today ;
|
|
|
|
1; |