1 package OpenILS::Application::Circ;
2 use base qw/OpenSRF::Application/;
3 use strict; use warnings;
5 use OpenILS::Application::Circ::Rules;
6 use OpenILS::Application::Circ::Survey;
7 use OpenILS::Application::Circ::StatCat;
8 use OpenILS::Application::Circ::Holds;
9 use OpenILS::Application::Circ::Money;
11 use OpenILS::Application::AppUtils;
12 my $apputils = "OpenILS::Application::AppUtils";
14 use OpenILS::Utils::ModsParser;
16 use OpenSRF::EX qw(:try);
17 use OpenSRF::Utils::Logger qw(:logger);
18 #my $logger = "OpenSRF::Utils::Logger";
21 # ------------------------------------------------------------------------
22 # Top level Circ package;
23 # ------------------------------------------------------------------------
27 OpenILS::Application::Circ::Rules->initialize();
31 # ------------------------------------------------------------------------
32 # Returns an array of {circ, record} hashes checked out by the user.
33 # ------------------------------------------------------------------------
34 __PACKAGE__->register_method(
35 method => "checkouts_by_user",
36 api_name => "open-ils.circ.actor.user.checked_out",
38 Returns a list of open circulations as a pile of objects. each object
39 contains the relevant copy, circ, and record
42 sub checkouts_by_user {
43 my( $self, $client, $user_session, $user_id ) = @_;
45 my( $requestor, $target, $copy, $record, $evt );
47 ( $requestor, $target, $evt ) =
48 $apputils->checkses_requestor( $user_session, $user_id, 'VIEW_CIRCULATIONS');
51 my $circs = $apputils->simplereq(
53 "open-ils.storage.direct.action.open_circulation.search.atomic",
54 { usr => $target->id } );
57 for my $circ (@$circs) {
59 ( $copy, $evt ) = $apputils->fetch_copy($circ->target_copy);
62 $logger->debug("Retrieving record for copy " . $circ->target_copy);
64 ($record, $evt) = $apputils->fetch_record_by_copy( $circ->target_copy );
67 my $mods = $apputils->record_to_mvr($record);
69 push( @results, { copy => $copy, circ => $circ, record => $mods } );
77 __PACKAGE__->register_method(
78 method => "title_from_transaction",
79 api_name => "open-ils.circ.circ_transaction.find_title",
81 Returns a mods object for the title that is linked to from the
82 copy from the hold that created the given transaction
85 sub title_from_transaction {
86 my( $self, $client, $login_session, $transactionid ) = @_;
88 my( $user, $circ, $title, $evt );
90 ( $user, $evt ) = $apputils->checkses( $login_session );
93 ( $circ, $evt ) = $apputils->fetch_circulation($transactionid);
96 ($title, $evt) = $apputils->fetch_record_by_copy($circ->target_copy);
99 return $apputils->record_to_mvr($title);
103 __PACKAGE__->register_method(
104 method => "set_circ_lost",
105 api_name => "open-ils.circ.circulation.set_lost",
106 NOTES => <<" NOTES");
107 Params are login, circid
108 login must have SET_CIRC_LOST perms
109 Sets a circulation to lost
112 __PACKAGE__->register_method(
113 method => "set_circ_lost",
114 api_name => "open-ils.circ.circulation.set_claims_returned",
115 NOTES => <<" NOTES");
116 Params are login, circid
117 login must have SET_CIRC_MISSING perms
118 Sets a circulation to lost
122 my( $self, $client, $login, $circid ) = @_;
123 my( $user, $circ, $evt );
125 ( $user, $evt ) = $apputils->checkses($login);
128 ( $circ, $evt ) = $apputils->fetch_circulation( $circid );
131 if($self->api_name =~ /lost/) {
132 if($evt = $apputils->checkperms(
133 $user->id, $circ->circ_lib, "SET_CIRC_LOST")) {
136 $circ->stop_fines("LOST");
139 if($self->api_name =~ /claims_returned/) {
140 if($evt = $apputils->checkperms(
141 $user->id, $circ->circ_lib, "SET_CIRC_CLAIMS_RETURNED")) {
144 $circ->stop_fines("CLAIMSRETURNED");
147 my $s = $apputils->simplereq(
149 "open-ils.storage.direct.action.circulation.update", $circ );
151 if(!$s) { throw OpenSRF::EX::ERROR ("Error updating circulation with id $circid"); }