From: erickson Date: Mon, 6 Apr 2009 14:43:55 +0000 (+0000) Subject: moved generic object/event firing to apputils function. plugged in PO formatting... X-Git-Url: https://old-git.evergreen-ils.org/?a=commitdiff_plain;h=22996f27a6266a5b4035fe18503f6f618619f983;p=Evergreen.git moved generic object/event firing to apputils function. plugged in PO formatting call git-svn-id: svn://svn.open-ils.org/ILS/trunk@12796 dcc99617-32d9-48b4-a31d-7c20da2025e4 --- diff --git a/Open-ILS/src/perlmods/OpenILS/Application/Acq/Financials.pm b/Open-ILS/src/perlmods/OpenILS/Application/Acq/Financials.pm index c7e0a07eb4..38c705f2da 100644 --- a/Open-ILS/src/perlmods/OpenILS/Application/Acq/Financials.pm +++ b/Open-ILS/src/perlmods/OpenILS/Application/Acq/Financials.pm @@ -1072,5 +1072,23 @@ sub retrieve_purchase_order_impl { } +__PACKAGE__->register_method( + method => 'format_po', + api_name => 'open-ils.acq.purchase_order.format' +); + +sub format_po { + my($self, $conn, $auth, $po_id, $format) = @_; + my $e = new_editor(authtoken=>$auth); + return $e->event unless $e->checkauth; + + my $po = $e->retrieve_acq_purchase_order($po_id) or return $e->event; + return $e->event unless $e->allowed('VIEW_PURCHASE_ORDER', $po->ordering_agency); + + my $hook = "format.po.$format"; + return $U->fire_object_event(undef, $hook, $po, $po->ordering_agency); +} + + 1; diff --git a/Open-ILS/src/perlmods/OpenILS/Application/AppUtils.pm b/Open-ILS/src/perlmods/OpenILS/Application/AppUtils.pm index 674da9262a..1ab49a6ed5 100644 --- a/Open-ILS/src/perlmods/OpenILS/Application/AppUtils.pm +++ b/Open-ILS/src/perlmods/OpenILS/Application/AppUtils.pm @@ -1469,5 +1469,59 @@ sub xact_org { return $loc->[0]->{billing_location}; } + +# If an event_def ID is not provided, use the hook and context org to find the +# most appropriate event. create the event, fire it, then return the resulting +# event with fleshed template_output and error_output +sub fire_object_event { + my($self, $event_def, $hook, $object, $context_org) = @_; + + my $e = OpenILS::Utils::CStoreEditor->new; + my $def; + + if($event_def) { + $def = $e->retrieve_action_trigger_event_definition($event_def) + or return $e->event; + + } else { + # find the most appropriate event def depending on context org + my $orgs = $self->get_org_ancestors($context_org); + $orgs = $e->search_actor_org_unit( + [{id => $orgs}, {flesh => 1, flesh_fields => {aou => ['ou_type']}}]); + $orgs = [ sort { $a->ou_type->depth cmp $b->ou_type->depth } @$orgs ]; + + for my $org (reverse @$orgs) { + $def = $e->search_action_trigger_event_definition( + {hook => $hook, owner => $org->id} + )->[0]; + last if $def; + } + + return $e->event unless $def; + } + + my $event_id = $self->simplereq( + 'open-ils.trigger', + 'open-ils.trigger.event.autocreate.by_definition', + $def->id, $object, $context_org); + + my $fire = 'open-ils.trigger.event.fire'; + + if($def->group_field) { + $fire =~ s/event/event_group/o; + $event_id = [$event_id]; + } + + my $resp = $self->simplereq('open-ils.trigger', $fire, $event_id); + return 0 unless $resp and ($resp->{event} or $resp->{events}); + my $evt = $resp->{event} ? $resp->{event} : $resp->{events}->[0]; + + return $e->retrieve_action_trigger_event([ + $evt->id, + {flesh => 1, flesh_fields => {atev => ['template_output', 'error_output']}} + ]); +} + + 1; diff --git a/Open-ILS/src/perlmods/OpenILS/Application/Circ.pm b/Open-ILS/src/perlmods/OpenILS/Application/Circ.pm index 4805025d05..a1f0975da3 100644 --- a/Open-ILS/src/perlmods/OpenILS/Application/Circ.pm +++ b/Open-ILS/src/perlmods/OpenILS/Application/Circ.pm @@ -1084,9 +1084,6 @@ sub test_batch_circ_events { return $e->event unless $e->checkauth; return $e->event unless $e->allowed('VIEW_CIRCULATIONS'); - my $def = $e->retrieve_action_trigger_event_definition($event_def) - or return $e->event; - my $copy = $e->search_asset_copy({barcode => $barcode, deleted => 'f'})->[0] or return $e->event; @@ -1096,26 +1093,7 @@ sub test_batch_circ_events { return undef unless $circ; - my $event_id = $U->simplereq( - 'open-ils.trigger', - 'open-ils.trigger.event.autocreate.by_definition', - $event_def, $circ, $e->requestor->ws_ou); - - my $fire = 'open-ils.trigger.event.fire'; - - if($def->group_field) { - $fire =~ s/event/event_group/o; - $event_id = [$event_id]; - } - - my $resp = $U->simplereq('open-ils.trigger', $fire, $event_id); - return 0 unless $resp and ($resp->{event} or $resp->{events}); - my $evt = $resp->{event} ? $resp->{event} : $resp->{events}->[0]; - - return $e->retrieve_action_trigger_event([ - $evt->id, - {flesh => 1, flesh_fields => {atev => ['template_output', 'error_output']}} - ]); + return $U->fire_object_event($event_def, undef, $circ, $e->requestor->ws_ou) }