summaryrefslogtreecommitdiff
path: root/FS
diff options
context:
space:
mode:
authorMitch Jackson <mitch@freeside.biz>2018-09-17 21:30:15 -0400
committerMitch Jackson <mitch@freeside.biz>2018-09-19 12:06:06 -0400
commitfa32644857a444c489ff0d7389b0d6d61790b229 (patch)
tree024521c0304b8f5ec7be4e560e00f17df7a596be /FS
parentd727ecee34916db4c21ae09d258faa243ab7faa9 (diff)
RT# 78547 Future autobill report - report runs in job queue
Diffstat (limited to 'FS')
-rw-r--r--FS/FS/Report/Queued/FutureAutobill.pm132
-rw-r--r--FS/FS/UI/Web.pm1
2 files changed, 133 insertions, 0 deletions
diff --git a/FS/FS/Report/Queued/FutureAutobill.pm b/FS/FS/Report/Queued/FutureAutobill.pm
new file mode 100644
index 0000000..82c9021
--- /dev/null
+++ b/FS/FS/Report/Queued/FutureAutobill.pm
@@ -0,0 +1,132 @@
+package FS::Report::Queued::FutureAutobill;
+use strict;
+use warnings;
+use vars qw( $job );
+
+use FS::Conf;
+use FS::cust_main;
+use FS::cust_main::Location;
+use FS::cust_payby;
+use FS::CurrentUser;
+use FS::Log;
+use FS::Mason qw(mason_interps);
+use FS::Record qw( qsearch );
+use FS::UI::Web;
+use FS::UID qw( dbh );
+
+use DateTime;
+use File::Temp;
+use Data::Dumper;
+use HTML::Entities qw( encode_entities );
+
+=head1 NAME
+
+FS::Report::Queued::FutureAutobill - Future Auto-Bill Transactions Report
+
+=head1 DESCRIPTION
+
+Future Autobill report generated within the job queue.
+
+Report results are saved to temp storage as a Mason fragment
+that is rendered by the queued report viewer.
+
+For every customer with a valid auto-bill payment method,
+report runs bill_and_collect() for each day, from today through
+the report target date. After recording the results, all
+operations are rolled back.
+
+This report relies on the ability to safely run bill_and_collect(),
+with all exports and messaging disabled, and then to roll back the
+results.
+
+=head1 PARAMETERS
+
+C<agentnum>, C<target_date>
+
+=cut
+
+sub make_report {
+ $job = shift;
+ my $param = shift;
+ my $outbuf;
+ my $DEBUG = 0;
+
+ my $time_begin = time();
+
+ my $report_fh = File::Temp->new(
+ TEMPLATE => 'report.future_autobill.XXXXXXXX',
+ DIR => sprintf( '%s/cache.%s', $FS::Conf::base_dir, $FS::UID::datasrc ),
+ UNLINK => 0
+ ) or die "Cannot create report file: $!";
+
+ if ( $DEBUG ) {
+ warn Dumper( $job );
+ warn Dumper( $param );
+ warn $report_fh;
+ warn $report_fh->filename;
+ }
+
+ my $curuser = FS::CurrentUser->load_user( $param->{CurrentUser} )
+ or die 'Unable to set report user';
+
+ my ( $fs_interp ) = FS::Mason::mason_interps(
+ 'standalone',
+ outbuf => \$outbuf,
+ );
+ $fs_interp->error_mode('fatal');
+ $fs_interp->error_format('text');
+
+ $FS::Mason::Request::QUERY_STRING = sprintf(
+ 'target_date=%s&agentnum=%s',
+ encode_entities( $param->{target_date} ),
+ encode_entities( $param->{agentnum} || '' ),
+ );
+ $FS::Mason::Request::FSURL = $param->{RootURL};
+
+ my $mason_request = $fs_interp->make_request(
+ comp => '/search/future_autobill.html'
+ );
+
+ {
+ local $@;
+ eval{ $mason_request->exec() };
+ if ( $@ ) {
+ my $error = ref $@ eq 'HTML::Mason::Exception' ? $@->error : $@;
+
+ my $log = FS::Log->new('FS::Report::Queued::FutureAutobill');
+ $log->error(
+ "Error generating report: $FS::Mason::Request::QUERY_STRING $error"
+ );
+ die $error;
+ }
+ }
+
+ my $report_fn;
+ if ( $report_fh->filename =~ /report\.(future_autobill.+)$/ ) {
+ $report_fn = $1
+ } else {
+ die 'Error parsing report filename '.$report_fh->filename;
+ }
+
+ my $report_title = FS::cust_payby->future_autobill_report_title();
+ my $time_rendered = time() - $time_begin;
+
+ if ( $DEBUG ) {
+ warn "Generated content:\n";
+ warn $outbuf;
+ warn $report_fn;
+ warn $report_title;
+ }
+
+ print $report_fh qq{<% include("/elements/header.html", '$report_title') %>\n};
+ print $report_fh $outbuf;
+ print $report_fh qq{<!-- Time to render report $time_rendered seconds -->};
+ print $report_fh qq{<% include("/elements/footer.html") %>\n};
+
+ die sprintf
+ "<a href=%s/misc/queued_report.html?report=%s>view</a>\n",
+ $param->{RootURL},
+ $report_fn;
+}
+
+1;
diff --git a/FS/FS/UI/Web.pm b/FS/FS/UI/Web.pm
index 6cc04b9..5412868 100644
--- a/FS/FS/UI/Web.pm
+++ b/FS/FS/UI/Web.pm
@@ -743,6 +743,7 @@ use FS::CurrentUser;
use FS::Record qw(qsearchs);
use FS::queue;
use FS::CGI qw(rooturl);
+use FS::Report::Queued::FutureAutobill;
$DEBUG = 0;