X-Git-Url: http://git.freeside.biz/gitweb/?p=freeside.git;a=blobdiff_plain;f=FS%2FFS%2Finventory_class.pm;h=dacbc512ff8430455a4e582ca2d1f20c60c4b169;hp=508889bcaefb10591ef579c80c37d20b161b8b51;hb=57bb423fe457ba4e13726877f53bcdf944f828f8;hpb=63a268637b2d51a8766412617724b9436439deb6 diff --git a/FS/FS/inventory_class.pm b/FS/FS/inventory_class.pm index 508889bca..dacbc512f 100644 --- a/FS/FS/inventory_class.pm +++ b/FS/FS/inventory_class.pm @@ -1,10 +1,8 @@ package FS::inventory_class; +use base qw(FS::Record); use strict; -use vars qw( @ISA ); -use FS::Record qw( dbh qsearch qsearchs ); - -@ISA = qw(FS::Record); +use FS::Record qw( dbh ); # qsearch qsearchs dbh ); =head1 NAME @@ -115,16 +113,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 ) = @_; $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"; + + 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 +143,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 +157,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