summaryrefslogtreecommitdiff
path: root/httemplate
diff options
context:
space:
mode:
authorMark Wells <mark@freeside.biz>2016-08-18 12:42:52 -0700
committerMark Wells <mark@freeside.biz>2016-08-18 12:42:52 -0700
commitac0bdc5e7860c6ab43d467f075505b0b4ec0245f (patch)
tree120681942e66030f5cdf208408562d3551e5dd0e /httemplate
parent1702e26457d8d53d3b384024e6a0ba68c74d4fbb (diff)
report on contract end dates, #71964
Diffstat (limited to 'httemplate')
-rw-r--r--httemplate/elements/menu.html1
-rw-r--r--httemplate/search/cust_pkg-date.html90
2 files changed, 91 insertions, 0 deletions
diff --git a/httemplate/elements/menu.html b/httemplate/elements/menu.html
index 88c1df3..51ec263 100644
--- a/httemplate/elements/menu.html
+++ b/httemplate/elements/menu.html
@@ -275,6 +275,7 @@ $report_packages{'Suspension summary'} = [ $fsurl.'search/cust_pkg_susp.html', '
$report_packages{'Customer packages with unconfigured services'} = [ $fsurl.'search/cust_pkg.cgi?APKG_pkgnum', 'List packages which have provisionable services' ];
$report_packages{'FCC Form 477'} = [ $fsurl.'search/report_477.html' ]
if $conf->exists('part_pkg-show_fcc_options');
+$report_packages{'Contract end dates'} = [ $fsurl.'search/cust_pkg-date.html?date=contract_end', 'Show packages by contract end date' ];
$report_packages{'Advanced package reports'} = [ $fsurl.'search/report_cust_pkg.html', 'by agent, date range, status, package definition' ];
tie my %report_inventory, 'Tie::IxHash',
diff --git a/httemplate/search/cust_pkg-date.html b/httemplate/search/cust_pkg-date.html
new file mode 100644
index 0000000..1b93775
--- /dev/null
+++ b/httemplate/search/cust_pkg-date.html
@@ -0,0 +1,90 @@
+<%init>
+my $curuser = $FS::CurrentUser::CurrentUser;
+die 'access denied' unless $curuser->access_right('List packages');
+
+my %cols = (
+ 'contract_end' => 'Contract end',
+ # We could put any of the date fields in cust_pkg in here, but keep in
+ # mind:
+ # - for start_date, setup, and bill, make sure to include rows where
+ # the field is null, as that's effectively "right now".
+ # - for cancel and susp, and maybe expire, adjourn, and resume, add a
+ # column for the cancel or suspend reason.
+ # - for expire, also figure out if there's a future change scheduled.
+ # - for change_date, should probably show what it was changed from.
+);
+
+my $col = $cgi->param('date');
+die "invalid date column" unless $cols{$col};
+
+my $title = 'Packages by ' . lc($cols{$col}) . ' date';
+# second option on the cust_fields_avail list, plus email
+my $cust_fields = 'Cust# | Customer | Day phone | Night phone | Mobile phone | Invoicing email(s)';
+my @header = ( $cols{$col},
+ emt('#'),
+ emt('Quan.'),
+ emt('Package'),
+ # anything else? package status, maybe?
+ );
+my @fields = ( sub { time2str('%b %d %Y', $_[0]->$col) },
+ 'pkgnum',
+ 'quantity',
+ 'pkg_label',
+ );
+my @sort_fields = ( map '', @fields ); # should only ever sort by $col
+
+push @header, FS::UI::Web::cust_header($cust_fields);
+push @fields, \&FS::UI::Web::cust_fields;
+
+my $query = {
+ 'table' => 'cust_pkg',
+ 'addl_from' => FS::UI::Web::join_cust_main('cust_pkg', 'cust_pkg'),
+ 'hashref' => {
+ $col => { op => '!=', value => '' },
+ 'cancel' => '',
+ },
+ 'order_by' => "ORDER BY $col",
+};
+
+my $count_query =
+ "SELECT COUNT(*) FROM cust_pkg WHERE $col IS NOT NULL AND cancel IS NULL";
+
+my $pkg_link = sub {
+ my $self = shift;
+ my $frag = 'cust_pkg'. $self->pkgnum;
+ [ "${p}view/cust_main.cgi?custnum=".$self->custnum.
+ ";show=packages;fragment=$frag#cust_pkg",
+ 'pkgnum'
+ ];
+};
+
+my @links = ( '', ($pkg_link) x 3,
+ FS::UI::Web::cust_links() );
+
+my $date_color_sub = sub {
+ my $self = shift;
+ my $color;
+ my $interval = ($self->$col - time) / 86400;
+ if ( $interval > 30 ) {
+ $color = 'palegreen';
+ } elsif ( $interval > 0 ) {
+ $color = 'yellow';
+ } else {
+ $color = 'tomato';
+ }
+ "background-color: $color";
+};
+
+</%init>
+<& elements/search.html,
+ 'title' => $title,
+ 'name' => 'packages',
+ 'query' => $query,
+ 'count_query' => $count_query,
+ 'header' => \@header,
+ 'fields' => \@fields,
+ 'align' => 'rrrl'. FS::UI::Web::cust_aligns(),
+ 'links' => \@links,
+ 'cell_style' => [ $date_color_sub ],
+&>
+