CDBI hates me... collecting stat_cat_entries by hand
authormiker <miker@dcc99617-32d9-48b4-a31d-7c20da2025e4>
Fri, 6 May 2005 02:36:51 +0000 (02:36 +0000)
committermiker <miker@dcc99617-32d9-48b4-a31d-7c20da2025e4>
Fri, 6 May 2005 02:36:51 +0000 (02:36 +0000)
git-svn-id: svn://svn.open-ils.org/ILS/trunk@673 dcc99617-32d9-48b4-a31d-7c20da2025e4

Open-ILS/src/perlmods/OpenILS/Application/Storage/CDBI.pm
Open-ILS/src/perlmods/OpenILS/Application/Storage/Publisher/asset.pm

index b992eb2..4e707fe 100644 (file)
@@ -246,10 +246,12 @@ sub modify_from_fieldmapper {
                }
        }
 
-       my %hash = map { defined $fm->$_ ?
-                               ($_ => ''.$fm->$_) :
-                               ()
-                       } $fm->real_fields;
+#      my %hash = map { defined $fm->$_ ?
+#                              ($_ => ''.$fm->$_) :
+#                              ()
+#                      } $fm->real_fields;
+
+       my %hash = map { ($_ => ''.$fm->$_) } $fm->real_fields;
 
        my $au = $obj->autoupdate;
        $obj->autoupdate(0);
@@ -314,8 +316,9 @@ sub modify_from_fieldmapper {
 
        asset::copy_note->has_a( owning_copy => 'asset::copy' );
 
-       actor::user->has_many( stat_cat_entries => 'actor::stat_cat_entry_user_map' );
-       asset::copy->has_many( stat_cat_entries => 'asset::stat_cat_entry_copy_map' );
+       actor::user->has_many( stat_cat_entries => [ 'actor::stat_cat_entry_user_map' => 'stat_cat_entry' ] );
+       asset::copy->has_many( stat_cat_entries => [ 'asset::stat_cat_entry_copy_map' => 'stat_cat_entry' ] );
+       asset::copy->has_many( stat_cat_entry_copy_maps => 'asset::stat_cat_entry_copy_map' );
 
        asset::copy->has_a( call_number => 'asset::call_number' );
        asset::copy->has_a( creator => 'actor::user' );
index f3fe965..aa7fb49 100644 (file)
@@ -26,17 +26,38 @@ __PACKAGE__->register_method(
 sub fleshed_copy {
        my $self = shift;
        my $client = shift;
-       my $id = ''.shift;
+       my @ids = @_;
 
-       my $cp = asset::copy->retrieve($id);
+       return undef unless (@ids);
 
-       my $cp_fm = $cp->to_fieldmapper;
-       $cp_fm->circ_lib( $cp->circ_lib->to_fieldmapper );
-       $cp_fm->location( $cp->location->to_fieldmapper );
-       $cp_fm->status( $cp->status->to_fieldmapper );
-       return $cp_fm;
+       @ids = ($ids[0]) unless ($self->api_name =~ /batch/o);
+
+       for my $id ( @ids ) {
+               next unless $id;
+               my $cp = asset::copy->retrieve($id);
+
+               my $cp_fm = $cp->to_fieldmapper;
+               $cp_fm->circ_lib( $cp->circ_lib->to_fieldmapper );
+               $cp_fm->location( $cp->location->to_fieldmapper );
+               $cp_fm->status( $cp->status->to_fieldmapper );
+               my @scs;
+               for my $map ( $cp->stat_cat_entry_copy_maps ) {
+                       push @scs, $map->to_fieldmapper;
+               }
+               $cp_fm->stat_cat_entries( \@scs );
+
+               $client->respond( $cp_fm );
+       }
+
+       return undef;
 }
 __PACKAGE__->register_method(
+       api_name        => 'open-ils.storage.fleshed.asset.copy.batch.retrieve',
+       method          => 'fleshed_copy',
+       argc            => 1,
+       stream          => 1,
+);
+__PACKAGE__->register_method(
        api_name        => 'open-ils.storage.fleshed.asset.copy.retrieve',
        method          => 'fleshed_copy',
        argc            => 1,
@@ -109,6 +130,49 @@ __PACKAGE__->register_method(
         method          => 'ranged_asset_stat_cat',
 );
 
+
+#XXX Fix stored proc calls
+sub multiranged_asset_stat_cat {
+        my $self = shift;
+        my $client = shift;
+        my $ous = shift;
+
+        return undef unless (defined($ous) and @$ous);
+        my $s_table = asset::stat_cat->table;
+
+        my $select = <<"        SQL";
+                SELECT  s.*
+                  FROM  $s_table s
+                 WHERE s.owner IN ( XXX )
+                  ORDER BY name
+        SQL
+
+       my $binds = join(' INTERSECT ', map { 'SELECT id FROM actor.org_unit_full_path(?)' } grep {defined} @$ous);
+       $select =~ s/XXX/$binds/so;
+       
+        $fleshed = 0;
+        $fleshed = 1 if ($self->api_name =~ /fleshed/o);
+
+        my $sth = asset::stat_cat->db_Main->prepare_cached($select);
+        $sth->execute(map { "$_" } grep {defined} @$ous);
+
+        for my $sc ( map { asset::stat_cat->construct($_) } $sth->fetchall_hash ) {
+                my $sc_fm = $sc->to_fieldmapper;
+                $sc_fm->entries(
+                        [ $self->method_lookup( 'open-ils.storage.multiranged.asset.stat_cat_entry.search.stat_cat' )->run($ous, $sc->id) ]
+                ) if ($fleshed);
+                $client->respond( $sc_fm );
+        }
+
+        return undef;
+}
+__PACKAGE__->register_method(
+        api_name        => 'open-ils.storage.multiranged.fleshed.asset.stat_cat.all',
+        api_level       => 1,
+        stream          => 1,
+        method          => 'multiranged_asset_stat_cat',
+);
+
 #XXX Fix stored proc calls
 sub ranged_asset_stat_cat_entry {
         my $self = shift;
@@ -143,6 +207,42 @@ __PACKAGE__->register_method(
         method          => 'ranged_asset_stat_cat_entry',
 );
 
+#XXX Fix stored proc calls
+sub multiranged_asset_stat_cat_entry {
+        my $self = shift;
+        my $client = shift;
+        my $ous = shift;
+        my $sc = ''.shift();
+
+        return undef unless (defined($ous) and @$ous);
+        my $s_table = asset::stat_cat_entry->table;
+
+        my $select = <<"        SQL";
+                SELECT  s.*
+                  FROM  $s_table s
+                 WHERE s.owner IN ( XXX ) and s.stat_cat = ?
+                  ORDER BY value
+        SQL
+
+       my $binds = join(' INTERSECT ', map { 'SELECT id FROM actor.org_unit_full_path(?)' } grep {defined} @$ous);
+       $select =~ s/XXX/$binds/so;
+       
+        my $sth = asset::stat_cat->db_Main->prepare_cached($select);
+        $sth->execute(map {"$_"} @$ous,$sc);
+
+        for my $sce ( map { asset::stat_cat_entry->construct($_) } $sth->fetchall_hash ) {
+                $client->respond( $sce->to_fieldmapper );
+        }
+
+        return undef;
+}
+__PACKAGE__->register_method(
+        api_name        => 'open-ils.storage.multiranged.asset.stat_cat_entry.search.stat_cat',
+        api_level       => 1,
+        stream          => 1,
+        method          => 'multiranged_asset_stat_cat_entry',
+);
+
 
 
 1;