X-Git-Url: http://git.freeside.biz/gitweb/?p=freeside.git;a=blobdiff_plain;f=FS%2FFS%2Finventory_class.pm;h=4747241d7a298ed54aabcff337773f149f635029;hp=04ee207d342f371ea3c2ee090083e72fbad92c7b;hb=74e058c8a010ef6feb539248a550d0bb169c1e94;hpb=600a0939e7e7e589dae4f4f5bfef3650728940b7 diff --git a/FS/FS/inventory_class.pm b/FS/FS/inventory_class.pm index 04ee207d3..4747241d7 100644 --- a/FS/FS/inventory_class.pm +++ b/FS/FS/inventory_class.pm @@ -115,16 +115,25 @@ class (see L). =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 { my( $self, $sql ) = @_; - my $sql = "AND $sql" if length($sql); - my $statement = - "SELECT COUNT(*) FROM inventory_item WHERE classnum = ? $sql"; - my $sth = dbh->prepare($statement) or die dbh->errstr. " preparing $statement"; - $sth->execute($self->classnum) or die $sth->errstr. " executing $statement"; + $sql = "AND $sql" if length($sql); + + my $agentnums_sql = $FS::CurrentUser::CurrentUser->agentnums_sql( + 'null' => 1, + 'table' => 'inventory_item', + ); + + my $st = "SELECT COUNT(*) FROM inventory_item ". + " WHERE classnum = ? AND $agentnums_sql $sql"; + my $sth = dbh->prepare($st) or die dbh->errstr. " preparing $st"; + $sth->execute($self->classnum) or die $sth->errstr. " executing $st"; $sth->fetchrow_arrayref->[0]; } @@ -136,7 +145,10 @@ L). =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 @@ -147,7 +159,95 @@ L). =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', # (upload batch)', + '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{$_} = + ''. + '('. + ''. + $label. + ''. + ')'. + ''; + } + + my %num = map { + $_ => $inventory_class->$_($sql); + } keys %labels; + + [ map { + [ + { + 'data' => ''. $num{$_}. '', + 'align' => 'right', + }, + { + 'data' => $labels{$_}, + 'align' => 'left', + 'link' => ( $num{$_} + ? $link.$link{$_} + : '' + ), + }, + { 'data' => $actioncol{$_}, + 'align' => 'left', + }, + ] + } keys %labels + ]; + }; } =back