added the beginnings of the noncat code + events
authorerickson <erickson@dcc99617-32d9-48b4-a31d-7c20da2025e4>
Wed, 25 Jan 2006 18:59:04 +0000 (18:59 +0000)
committererickson <erickson@dcc99617-32d9-48b4-a31d-7c20da2025e4>
Wed, 25 Jan 2006 18:59:04 +0000 (18:59 +0000)
git-svn-id: svn://svn.open-ils.org/ILS/trunk@2829 dcc99617-32d9-48b4-a31d-7c20da2025e4

Open-ILS/src/extras/ils_events.xml
Open-ILS/src/perlmods/OpenILS/Application/AppUtils.pm
Open-ILS/src/perlmods/OpenILS/Application/Circ.pm
Open-ILS/src/perlmods/OpenILS/Application/Circ/NonCat.pm [new file with mode: 0644]

index 585b2db..906cc08 100644 (file)
                <desc> Stat cat entry map object does not exist </desc>
        </event>
 
+       <event code='1511' textcode='NON_CAT_TYPE_NOT_FOUND'>
+               <desc> The non cataloged type object does not exist </desc>
+       </event>
+
+
+
+
+       <event code='1700' textcode='NON_CAT_TYPE_EXISTS'>
+               <desc> The non-cataloged type object already exists </desc>
+       </event>
+
+
+       <event code='2000' textcode='BAD_PARAMS'>
+               <desc>
+                       Invalid parameters were encountered in a method
+               </desc>
+       </event>
+
+       <event code='2001' textcode='DATABASE_UPDATE_FAILED'>
+               <desc>
+                       The attempt to write to the DB failed
+               </desc>
+       </event>
 
 
+       <event code='5000' textcode='PERM_FAILURE'>
+               <desc> 
+                       Permission Error.  * The object returning this code shall also 
+                       contain a field "ilsperm" containing the name of the permission which failed 
+                       and a field called "ilspermloc" defining the location at which the permission
+                       failed if available.
+               </desc>
+       </event>
 
 
        <!-- ================================================================ -->
        <!-- CIRC EVENTS -->
-       <event code='1700' textcode='ROUTE_COPY'>
+       <event code='7000' textcode='ROUTE_COPY'>
                <desc> A copy needs to be routed to a different location        </desc>
        </event>
 
-       <event code='1701' textcode='PATRON_BAD_STANDING'>
+       <event code='7001' textcode='PATRON_BAD_STANDING'>
                <desc>
                        The patron in question is not able to check out materials because
                        their account is in bad standing
                </desc>
        </event>
 
-       <event code='1702' textcode='PATRON_EXCEEDS_CHECKOUT_COUNT'>
+       <event code='7002' textcode='PATRON_EXCEEDS_CHECKOUT_COUNT'>
                <desc>
                        The patron in question has the maximum number of items already checked out
                </desc>
        </event>
 
-       <event code='1703' textcode='COPY_CIRC_NOT_ALLOWED'>
+       <event code='7003' textcode='COPY_CIRC_NOT_ALLOWED'>
                <desc> Target copy is not allowed to circulate </desc>
        </event>
 
-       <event code='1704' textcode='COPY_NOT_AVAILABLE'>
+       <event code='7004' textcode='COPY_NOT_AVAILABLE'>
                <desc> Copy is not available </desc>
        </event>
 
-       <event code='1705' textcode='LOCATION_CIRC_NOT_ALLOWED'>
+       <event code='7005' textcode='LOCATION_CIRC_NOT_ALLOWED'>
                <desc> Location does not allow materials to circulate </desc>
        </event>
 
-       <event code='1706' textcode='COPY_IS_REFERENCE'>
+       <event code='7006' textcode='COPY_IS_REFERENCE'>
                <desc> Copy is reference material </desc>
        </event>
 
-       <event code='1707' textcode='COPY_NEEDED_FOR_HOLD'>
+       <event code='7007' textcode='COPY_NEEDED_FOR_HOLD'>
                <desc> Copy is needed to fulfil a hold </desc>
        </event>
        <!-- ================================================================ -->
 
-
-       <event code='2000' textcode='BAD_PARAMS'>
-               <desc>
-                       Invalid parameters were encountered in a method
-               </desc>
-       </event>
-
-       <event code='5000' textcode='PERM_FAILURE'>
-               <desc> 
-                       Permission Error.  * The object returning this code shall also 
-                       contain a field "ilsperm" containing the name of the permission which failed 
-                       and a field called "ilspermloc" defining the location at which the permission
-                       failed if available.
-               </desc>
-       </event>
 </ils_events>
 
 
index 8ac94e8..e74cdde 100644 (file)
@@ -645,6 +645,32 @@ sub find_org {
        return undef;
 }
 
+sub fetch_non_cat_type_by_name_and_org {
+       my( $self, $name, $orgId ) = @_;
+       $logger->debug("Fetching non cat type $name at org $orgId");
+       my $types = $self->simplereq(
+               'open-ils.storage',
+               'open-ils.storage.direct.config.non_cataloged_type.search_where.atomic',
+               { name => $name, owning_lib => $orgId } );
+       return ($types->[0], undef) if($types and @$types);
+       return (undef, OpenILS::Event->new('NON_CAT_TYPE_NOT_FOUND') );
+}
 
+sub fetch_non_cat_type {
+       my( $self, $id ) = @_;
+       $logger->debug("Fetching non cat type $id");
+       my( $type, $evt );
+       $type = $self->simplereq(
+               'open-ils.storage', 
+               'open-ils.storage.direct.config.non_cataloged_type.retrieve', $id );
+       $evt = OpenILS::Event->new('NON_CAT_TYPE_NOT_FOUND') unless $type;
+       return ($type, $evt);
+}
+
+sub DB_UPDATE_FAILED { 
+       my( $self, $payload ) = @_;
+       return OpenILS::Event->new('DATABASE_UPDATE_FAILED', 
+               payload => ($payload) ? $payload : undef ); 
+}
 
 1;
index 860870f..2627aae 100644 (file)
@@ -8,6 +8,7 @@ use OpenILS::Application::Circ::Survey;
 use OpenILS::Application::Circ::StatCat;
 use OpenILS::Application::Circ::Holds;
 use OpenILS::Application::Circ::Money;
+use OpenILS::Application::Circ::NonCat;
 
 use OpenILS::Application::AppUtils;
 my $apputils = "OpenILS::Application::AppUtils";
diff --git a/Open-ILS/src/perlmods/OpenILS/Application/Circ/NonCat.pm b/Open-ILS/src/perlmods/OpenILS/Application/Circ/NonCat.pm
new file mode 100644 (file)
index 0000000..5f9e663
--- /dev/null
@@ -0,0 +1,103 @@
+package OpenILS::Application::Circ::NonCat;
+use base 'OpenSRF::Application';
+use strict; use warnings;
+use OpenSRF::EX qw(:try);
+use Data::Dumper;
+use OpenSRF::Utils::Logger qw(:logger);
+use OpenILS::Application::AppUtils;
+use OpenILS::Utils::Fieldmapper;
+$Data::Dumper::Indent = 0;
+
+my $U = "OpenILS::Application::AppUtils";
+
+
+__PACKAGE__->register_method(
+       method  => "create_noncat_type",
+       api_name        => "open-ils.circ.non_cat_type.create",
+       notes           => q/
+               Creates a new non cataloged item type
+               @param authtoken The login session key
+               @param name The name of the new type
+               @param orgId The location where the type will live
+               @return The type object on success and the corresponding
+               event on failure
+       /);
+
+sub create_noncat_type {
+       my( $self, $client, $authtoken, $name, $orgId ) = @_;
+       my( $staff, $evt ) = $U->checkses($authtoken);
+       return $evt if $evt;
+
+       my $type;
+
+       # first, see if the exact type already exists  XXX this needs to be ranged
+       ($type, $evt) = $U->fetch_non_cat_type_by_name_and_org($name, $orgId);
+       return OpenILS::Event->new('NON_CAT_TYPE_EXISTS') if $type;
+
+       $evt = $U->check_perms( $staff->id, $orgId, 'CREATE_NON_CAT_TYPE' );
+       return $evt if $evt;
+
+       $type = Fieldmapper::config::non_cataloged_type->new;
+       $type->name($name);
+       $type->owning_lib($orgId);
+
+       my $id = $U->simplereq(
+               'open-ils.storage',
+               'open-ils.storage.direct.config.non_cataloged_type.create', $type );
+
+       return $U->DB_UPDATE_FAILED($type) unless $id;
+       $type->id($id);
+       return $type;
+}
+
+__PACKAGE__->register_method(
+       method  => "update_noncat_type",
+       api_name        => "open-ils.circ.non_cat_type.update",
+       notes           => q/
+               Updates a non-cataloged type object
+               @param authtoken The login session key
+               @param type The updated type object
+               @return The result of the DB update call unless a preceeding event occurs, 
+                       in which case the event will be returned
+       /);
+
+sub update_noncat_type {
+       my( $self, $client, $authtoken, $type ) = @_;
+       my( $staff, $evt ) = $U->checkses($authtoken);
+       return $evt if $evt;
+
+       my $otype;
+       ($otype, $evt) = $U->fetch_non_cat_type($type->id);
+       return $evt if $evt;
+
+       $type->owning_lib($otype->owning_lib); # do not allow them to "move" the object
+
+       $evt = $U->check_perms( $staff->id, $type->owning_lib, 'UPDATE_NON_CAT_TYPE' );
+       return $evt if $evt;
+
+       return $U->simplereq(
+               'open-ils.storage',
+               'open-ils.storage.direct.config.non_cataloged_type.update', $type );
+}
+
+__PACKAGE__->register_method(
+       method  => "retrieve_noncat_types_all",
+       api_name        => "open-ils.circ.non_cat_types.retrieve.all",
+       notes           => q/
+               Retrieves the non-cat types at the requested location as well
+               as those above and below the requested location in the org tree
+               @param orgId The base location at which to retrieve the type objects
+               @return An array of non cat type objects or an event if an error occurs
+       /);
+
+sub retrieve_noncat_types_all {
+       my( $self, $client, $orgId ) = @_;
+       return $U->simplereq(
+               'open-ils.storage', # XXX Needs to be a ranged call
+               'open-ils.storage.direct.config.non_cataloged_type.search_where.atomic', 
+               { owning_lib => $orgId } );
+}
+
+
+
+1;