From: erickson Date: Fri, 13 Jun 2008 01:18:43 +0000 (+0000) Subject: added explicit approval method for lineitems X-Git-Url: https://old-git.evergreen-ils.org/?a=commitdiff_plain;h=f642d4f30f3cab8f65f11c3de2c74e33a8a89c65;p=Evergreen.git added explicit approval method for lineitems git-svn-id: svn://svn.open-ils.org/ILS/branches/acq-experiment@9820 dcc99617-32d9-48b4-a31d-7c20da2025e4 --- diff --git a/Open-ILS/src/perlmods/OpenILS/Application/Acq/Lineitem.pm b/Open-ILS/src/perlmods/OpenILS/Application/Acq/Lineitem.pm index 56ca703e03..dab6a6a5d6 100644 --- a/Open-ILS/src/perlmods/OpenILS/Application/Acq/Lineitem.pm +++ b/Open-ILS/src/perlmods/OpenILS/Application/Acq/Lineitem.pm @@ -490,4 +490,51 @@ sub retrieve_lineitem_detail { } + +__PACKAGE__->register_method( + method => 'approve_lineitem', + api_name => 'open-ils.acq.lineitem.approve', + signature => { + desc => 'Mark a lineitem as approved', + params => [ + {desc => 'Authentication token', type => 'string'}, + {desc => 'lineitem ID', type => 'number'} + ], + return => {desc => '1 on success, Event on error'} + } +); +sub approve_lineitem { + my($self, $conn, $auth, $li_id) = @_; + my $e = new_editor(xact=>1, authtoken=>$auth); + return $e->die_event unless $e->checkauth; + + # XXX perm checks for each lineitem detail + + my $li = $e->retrieve_acq_lineitem($li_id) + or return $e->die_event; + + return OpenILS::Event->new('ACQ_LINEITEM_APPROVED', payload => $li_id) + if $li->state eq 'approved'; + + my $details = $e->search_acq_lineitem_detail({lineitem => $li_id}); + return OpenILS::Event->new('ACQ_LINEITEM_NO_COPIES', payload => $li_id) + unless scalar(@$details) > 0; + + for my $detail (@$details) { + return OpenILS::Event->new('ACQ_LINEITEM_DETAIL_NO_FUND', payload => $detail->id) + unless $detail->fund; + + return OpenILS::Event->new('ACQ_LINEITEM_DETAIL_NO_ORG', payload => $detail->id) + unless $detail->owning_lib; + } + + $li->state('approved'); + $li->edit_time('now'); + $e->update_acq_lineitem($li) or return $e->die_event; + + $e->commit; + return 1; +} + + 1;