diff options
author | ivan <ivan> | 2010-05-21 23:35:47 +0000 |
---|---|---|
committer | ivan <ivan> | 2010-05-21 23:35:47 +0000 |
commit | 42ed7ef03700fb17467bfeedead3639da9efc4a4 (patch) | |
tree | ac9ac209fee11c0a0fd4b122b8554e4d58c15037 /FS | |
parent | 4eae5a24723dd6cbac93bb646284a4fdf1553e73 (diff) |
reporting on agent inventory, RT#7010
Diffstat (limited to 'FS')
-rw-r--r-- | FS/FS/inventory_class.pm | 100 |
1 files changed, 97 insertions, 3 deletions
diff --git a/FS/FS/inventory_class.pm b/FS/FS/inventory_class.pm index 3d7f0499d..4747241d7 100644 --- a/FS/FS/inventory_class.pm +++ b/FS/FS/inventory_class.pm @@ -115,7 +115,10 @@ class (see L<FS::inventory_item>). =cut sub num_avail { - shift->num_sql('( svcnum IS NULL OR svcnum = 0 )'); + my( $self, $sql ) = @_; + $sql .= ' AND ' if length($sql); + $sql .= '( svcnum IS NULL OR svcnum = 0 )'; + $self->num_sql($sql); } sub num_sql { @@ -142,7 +145,10 @@ L<FS::inventory_class>). =cut sub num_used { - shift->num_sql("svcnum IS NOT NULL AND svcnum > 0 "); + my( $self, $sql ) = @_; + $sql .= ' AND ' if length($sql); + $sql .= 'svcnum IS NOT NULL AND svcnum > 0 '; + $self->num_sql($sql); } =item num_total @@ -153,7 +159,95 @@ L<FS::inventory_class>). =cut sub num_total { - shift->num_sql(''); + my( $self, $sql ) = @_; + $self->num_sql($sql); +} + +=back + +=head1 CLASS METHODS + +=over 4 + +=item searchcell_factory + +=cut + +sub countcell_factory { + my($class, %opt) = @_; + + my $p = $opt{p}; + + my $sql = $opt{'agentnum'} ? 'agentnum = '.$opt{'agentnum'} : ''; + + use Tie::IxHash; + tie my %labels, 'Tie::IxHash', + 'num_avail' => 'Available', # <FONT SIZE="-1"><A HREF="eventually">(upload batch)</A></FONT>', + 'num_used' => 'In use', #'Used', #'Allocated', + 'num_total' => 'Total', + ; + + my %link = ( + 'num_avail' => ';avail=1', + 'num_used' => ';used=1', + 'num_total' => '', + ); + + my %inv_action_link = ( + 'num_avail' => [ 'upload batch', + $p.'misc/inventory_item-import.html?classnum=', + 'classnum' + ], + ); + + sub { + my $inventory_class = shift; + + my $link = + $p. 'search/inventory_item.html?'. + 'classnum='. $inventory_class->classnum; + $link .= ';agentnum='.$opt{'agentnum'} if $opt{'agentnum'}; + + my %actioncol = (); + foreach ( keys %inv_action_link ) { + my($label, $baseurl, $method) = + @{ $inv_action_link{$_} }; + my $url = $baseurl. $inventory_class->$method(); + $actioncol{$_} = + '<FONT SIZE="-1">'. + '('. + '<A HREF="'.$url.'">'. + $label. + '</A>'. + ')'. + '</FONT>'; + } + + my %num = map { + $_ => $inventory_class->$_($sql); + } keys %labels; + + [ map { + [ + { + 'data' => '<B>'. $num{$_}. '</B>', + 'align' => 'right', + }, + { + 'data' => $labels{$_}, + 'align' => 'left', + 'link' => ( $num{$_} + ? $link.$link{$_} + : '' + ), + }, + { 'data' => $actioncol{$_}, + 'align' => 'left', + }, + ] + } keys %labels + ]; + }; } =back |