& elements/search.html,
'title' => $title,
'name' => 'packages',
'query' => $query,
'count_query' => $count_query,
'header' => \@header,
'fields' => \@fields,
'sort_fields' => [],
'align' => 'rrrl'. FS::UI::Web::cust_aligns(),
'color' => \@color,
'style' => \@style,
'links' => \@links,
'cell_style' => [ $date_color_sub ],
&>
<%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';
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 @color = ( map '', @fields );
my @style = ( map '', @fields );
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 );
push @header, FS::UI::Web::cust_header($cgi->param('cust_fields'));
push @fields, \&FS::UI::Web::cust_fields;
push @color, FS::UI::Web::cust_colors();
push @style, FS::UI::Web::cust_styles();
push @links, FS::UI::Web::cust_links();
my $agentnums_sql = $curuser->agentnums_sql('table' => 'cust_main');
if ( $cgi->param('agentnum') =~ /^(\d+)$/ and $1 ) {
$agentnums_sql .= " AND agentnum = $1";
}
my $query = {
'select' => join(',', 'cust_pkg.*', FS::UI::Web::cust_sql_fields() ),
'table' => 'cust_pkg',
'addl_from' => FS::UI::Web::join_cust_main('cust_pkg', 'cust_pkg'),
'hashref' => {
$col => { op => '!=', value => '' },
'cancel' => '',
},
'extra_sql' => ' AND '.$agentnums_sql,
'order_by' => "ORDER BY $col",
};
my $count_query =
"SELECT COUNT(*) FROM cust_pkg JOIN cust_main USING (custnum) ".
"WHERE $col IS NOT NULL AND cancel IS NULL AND $agentnums_sql";
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>