From: miker Date: Tue, 31 Mar 2009 20:32:04 +0000 (+0000) Subject: add method for creating events by definition(s) (array accepted), including testing... X-Git-Tag: sprint4-merge-nov22~10365 X-Git-Url: https://old-git.evergreen-ils.org/?a=commitdiff_plain;h=699009be603b1fe7f891b500f162542e1cfaba41;p=working%2FEvergreen.git add method for creating events by definition(s) (array accepted), including testing of inactive events, for a specific target instead of by hook key git-svn-id: svn://svn.open-ils.org/ILS/trunk@12742 dcc99617-32d9-48b4-a31d-7c20da2025e4 --- diff --git a/Open-ILS/src/perlmods/OpenILS/Application/Trigger.pm b/Open-ILS/src/perlmods/OpenILS/Application/Trigger.pm index 577d718e52..5c1473769b 100644 --- a/Open-ILS/src/perlmods/OpenILS/Application/Trigger.pm +++ b/Open-ILS/src/perlmods/OpenILS/Application/Trigger.pm @@ -91,6 +91,82 @@ __PACKAGE__->register_method( argc => 3 ); +sub create_event_for_object_and_def { + my $self = shift; + my $client = shift; + my $definitions = shift; + my $target = shift; + my $location = shift; + + my $ident = $target->Identity; + my $ident_value = $target->$ident(); + + my @active = ($self->api_name =~ /inactive/o) ? () : ( active => 't' ); + + my $editor = new_editor(xact=>1); + + my $orgs = $editor->json_query({ from => [ 'actor.org_unit_ancestors' => $location ] }); + my $defs = $editor->search_action_trigger_event_definition( + { id => $definitions, + owner => [ map { $_->{id} } @$orgs ], + $active + } + ); + + my $hooks = $editor->search_action_trigger_hook( + { key => [ map { $_->hook } @$defs ], + core_type => $target->json_hint + } + ); + + my %hook_hash = map { ($_->key, $_) } @$hooks; + + for my $def ( @$defs ) { + + my $date = DateTime->now; + + if ($hook_hash{$def->hook}->passive eq 'f') { + + if (my $dfield = $def->delay_field) { + if ($target->$dfield()) { + $date = DateTime::Format::ISO8601->new->parse_datetime( clense_ISO8601($target->$dfield) ); + } else { + next; + } + } + + $date->add( seconds => interval_to_seconds($def->delay) ); + } + + my $event = Fieldmapper::action_trigger::event->new(); + $event->target( $ident_value ); + $event->event_def( $def->id ); + $event->run_time( $date->strftime( '%F %T%z' ) ); + + $editor->create_action_trigger_event( $event ); + + $client->respond( $event->id ); + } + + $editor->commit; + + return undef; +} +__PACKAGE__->register_method( + api_name => 'open-ils.trigger.event.autocreate.by_definition', + method => 'create_event_for_object_and_def', + api_level=> 1, + stream => 1, + argc => 3 +); +__PACKAGE__->register_method( + api_name => 'open-ils.trigger.event.autocreate.by_definition.include_inactive', + method => 'create_event_for_object_and_def', + api_level=> 1, + stream => 1, + argc => 3 +); + # Retrieves events by object, or object type + filter # $object : a target object or object type (class hint)