aisa/scripts/dialog/get_bank_transactions.pl

298 lines
9.1 KiB
Perl
Raw Permalink Normal View History

2025-11-26 09:31:54 +00:00
#!/usr/bin/perl
BEGIN { use lib '/usr/home/cfg' ; require push_inc ; }
require cfg ;
print "Content-type: text/html\n\n";
&today ;
#---------------------------------------------------------------------------------------------------------------------------------------------------------------------
use DBI;
use CGI::Carp qw(fatalsToBrowser);
use CGI;
use Excel::Writer::XLSX ;
@ARGV = split(/\\*\&/, $ENV{'QUERY_STRING'});
$action = $ARGV[0] ;
$date_from = $ARGV[1] ;
$date_to = $ARGV[2] ;
our $only_update_number = ($action eq 'add_number_only') ? 1 : 0 ;
# our $debug = 1 ;
our $table = 'bank_transactions' ;
our ($q) = CGI -> new() ;
$iaction = $q -> param('iaction') || $action ;
$iaction = "add" if $iaction eq 'add_number_only' ;
#---------------------------------------------------------------------------------------------------------------------------------------------------------------------
# &db_switch_conn('aisa') ;
if ($iaction eq 'create') {
&common_min_add_screen ;
&build_excel ;
&screen2 ;
}
# if ($iaction eq 'save') {
# &common_min_load_params ;
# &build_excel ;
# &screen2 ;
# }
&common_min_action;
exit ;
#------------------------------------------------------------------------------------------
sub insert {
} #------------------------------------------------------------------------------------------
sub validate {
} #------------------------------------------------------------------------------------------
sub build_excel {
my @months = ("","Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec") ;
my ($year_input1,$month_input1,$day_input1,$year_input2,$month_input2,$day_input2) ;
if ($date_from) {
($year_input1,$month_input1,$day_input1) = split(/\-/,$date_from) ;
# push @report_results, "(TRANSACTION DATE AFTER '$day_input1 $months[$month_input1] $year_input1')" ;
push @report_sql, "(transaction_date >= '$date_from')" ;
}
if ($date_to) {
($year_input2,$month_input2,$day_input2) = split(/\-/,$date_to) ;
# push @report_results, "(TRANSACTION DATE BEFORE '$day_input2 $months[$month_input2] $year_input2')" ;
push @report_sql, "(transaction_date <= '$date_to')" ;
}
# $report_results_msg = uc join(', ',@report_results) ;
my $srch_where_sql = join(' AND ', @report_sql) ;
&load_list_vars("$srch_where_sql") ;
our $xlsxheading = ($year_input1 ne $year_input2) ? "$day_input1 $months[$month_input1] $year_input1 TO $day_input2 $months[$month_input2] $year_input2" :
($year_input1 eq $year_input2 && $month_input1 ne $month_input2) ? "$day_input1 $months[$month_input1] TO $day_input2 $months[$month_input2] $year_input2" :
($year_input1 eq $year_input2 && $month_input1 eq $month_input2 && $day_input1 ne $day_input2) ? "$day_input1 TO $day_input2 $months[$month_input1] $year_input1" :
($year_input1 eq $year_input2 && $month_input1 eq $month_input2 && $day_input1 eq $day_input2) ? "$day_input1 $months[$month_input1] $year_input1" : "" ;
$xlsxheading = "Bank Transactions " . $xlsxheading ;
&report_xlsx_export_header("Bank_Transactions",'bank_transactions') ;
$xlsxrow = 2 ;
$xlsxcol = 0 ;
foreach my $dc (sort { $b cmp $a } keys %bank_transaction_categories) {
&xlsxcreator_write_xlsx($ws,$xlsxrow,$xlsxcol,uc $dc,$format117) ;
$xlsxrow++ ;
foreach my $cat_id (sort { $bank_transaction_categories{$dc}{$a} cmp $bank_transaction_categories{$dc}{$b} } keys %{$bank_transaction_categories{$dc}}) {
next if $cat_id == 27 ;
&xlsxcreator_write_xlsx($ws,$xlsxrow,$xlsxcol,$db{bank_transaction_categories}{$cat_id}{name},$format118) ;
$xlsxrow++ ;
my $start_row = $xlsxrow ;
foreach my $trans_id (keys %{$transactions_by_category{$cat_id}}) {
&xlsxcreator_write_xlsx($ws,$xlsxrow,0,$trans_id,$format1) ;
&xlsxcreator_write_xlsx($ws,$xlsxrow,1,substr($db{$table}{$trans_id}{transaction_date},8,2) . "/" . substr($db{$table}{$trans_id}{transaction_date},5,2) . "/" . substr($db{$table}{$trans_id}{transaction_date},0,4),$format1) ;
&xlsxcreator_write_xlsx($ws,$xlsxrow,2,$db{$table}{$trans_id}{account_nr},$format1) ;
&xlsxcreator_write_xlsx($ws,$xlsxrow,3,$db{$table}{$trans_id}{amount},$format120) ;
&xlsxcreator_write_xlsx($ws,$xlsxrow,4,$db{$table}{$trans_id}{description},$format1) ;
&xlsxcreator_write_xlsx($ws,$xlsxrow,5,$db{bank_transaction_categories}{$cat_id}{name},$format1) ;
$xlsxrow++ ;
}
$xlsxrow++ ;
&xlsxcreator_write_formula($ws,$xlsxrow,3,"=SUM(D$start_row:D$xlsxrow)",$format119) ;
$xlsxrow++ ;
}
}
my $cat_id = 27 ;
for (0 .. 5) {
&xlsxcreator_write_xlsx($ws,$xlsxrow,$_," ",$format121) ;
}
my $start_row = $xlsxrow ;
$xlsxrow++ ;
&xlsxcreator_write_xlsx($ws,$xlsxrow,$xlsxcol,$db{bank_transaction_categories}{$cat_id}{name},$format118) ;
$xlsxrow++ ;
my $start_row = $xlsxrow ;
foreach my $trans_id (keys %{$transactions_by_category{$cat_id}}) {
&xlsxcreator_write_xlsx($ws,$xlsxrow,0,"",$format1) ;
&xlsxcreator_write_xlsx($ws,$xlsxrow,1,substr($db{$table}{$trans_id}{transaction_date},8,2) . "/" . substr($db{$table}{$trans_id}{transaction_date},5,2) . "/" . substr($db{$table}{$trans_id}{transaction_date},0,4),$format1) ;
&xlsxcreator_write_xlsx($ws,$xlsxrow,2,"",$format1) ;
&xlsxcreator_write_xlsx($ws,$xlsxrow,3,$db{$table}{$trans_id}{amount},$format120) ;
&xlsxcreator_write_xlsx($ws,$xlsxrow,4,$db{$table}{$trans_id}{description},$format1) ;
$xlsxrow++ ;
}
$xlsxrow++ ;
&xlsxcreator_write_formula($ws,$xlsxrow,3,"=SUM(D$start_row:D$xlsxrow)",$format119) ;
$xlsxrow++ ;
for (0 .. 5) {
&xlsxcreator_write_xlsx($ws,$xlsxrow,$_," ",$format121) ;
}
for ($start_row - 1 .. $xlsxrow) {
&xlsxcreator_write_xlsx($ws,$_,6," ",$format122) ;
}
$worksheet{$ws}->set_column(1,3,20) ;
$worksheet{$ws}->set_column(4,5,30) ;
&report_xlsx_export_footer('F',15,'bank_transactions') ;
} #------------------------------------------------------------------------------------------
sub load_list_vars {
my ($where,$where_2) = @_ ;
&db_min_ro($table,"*","$where",'','') ;
our %transactions_by_category = () ;
foreach (keys %{$db{$table}}) {
$transactions_by_category{$db{$table}{$_}{category_id}}{$_} = 1 ;
}
&db_min_ro('bank_transaction_categories',"*","",'','') ;
our %bank_transaction_categories = () ;
foreach (keys %{$db{bank_transaction_categories}}) {
if ($db{bank_transaction_categories}{$_}{income_source}) {
$bank_transaction_categories{income}{$_} = $db{bank_transaction_categories}{$_}{name} ;
} else {
$bank_transaction_categories{expenses}{$_} = $db{bank_transaction_categories}{$_}{name} ;
}
}
} #------------------------------------------------------------------------------------------
sub add_screen {
$box_header_title = 'Get Bank Transactions' ;
$hidden_action = 'search' ;
$head_col_width = 2 ;
} #------------------------------------------------------------------------------------------
sub add_db_fields {
$ignore{iaction} = 1 ;
$ignore{id} = 1 ;
$required{date_from} = 1 ;
$required{date_to} = 1 ;
$datepicker{date_from} = 1 ;
$datepicker{date_to} = 1 ;
$sort_field{1} = 'date_from' ;
$sort_field{2} = 'date_to' ;
$db{$table}{''}{date_from} = "$now_year-01-01" ;
} #------------------------------------------------------------------------------------------
sub thead {
&common_min_thead ;
} #-------------------------------------------------------------------------------
sub screen1 {
# $trigger_jquery_raw .= qq~
# \$('#btn-close-customer').click(function (e) {
# parent.BootstrapDialog.closeAll() ;
# });
# ~ ;
&dialog_load_screen ;
} #------------------------------------------------------------------------------------------
sub screen2 {
$xlsxpath =~ s|/var/www/html/||;
$trigger_jquery_raw = qq~
let url = "https://$useropts{web}/$xlsxpath" + "/" + "$xlsxname" ;
\$.get(url) ;
parent.BootstrapDialog.closeAll() ;
~;
&common_min_dialog_save_screen ;
} #------------------------------------------------------------------------------------------
sub dialog_load_screen {
&dialog_common ;
print <<ENDOFTEXT;
$dialog{'common'}{'head'}
<div id="content" class="col-lg-12 col-sm-12">
<!-- content starts -->
$alert
<div class="row">
<div class="box col-md-12">
<div class="box-inner">
<div class="box-content">
$print_box_content_rows
</div>
</div>
</div>
</div><!--/row-->
</div><!--/fluid-row-->
</div><!--/.fluid-container-->
<!-- external javascript -->
<script src="$useropts{'bower_components'}/chosen/chosen.jquery.min.js"></script>
<script src="$useropts{'bower_components'}/bootstrap/dist/js/bootstrap.min.js"></script>
<script src="$useropts{'js'}/jquery.form-validator.min.js"></script>
<script src="/js/bootstrap-datetimepicker.min.js"></script>
<script src="/js/bootstrap-datepicker.js"></script>
<script>
\$.validate();
$trigger_jquery_raw
</script>
</body>
</html>
ENDOFTEXT
#
exit;
} #------------------------------------------------------------------------------------------
use today ;
use dialog ;
use common ;
use common_min ;
use report ;
use xlsxcreator ;
1;