From bf543f091a8511216de2ad7e0acc4bc8ba6d737c Mon Sep 17 00:00:00 2001 From: erickson Date: Fri, 15 May 2009 19:49:44 +0000 Subject: [PATCH] ranged org unit setting method which returns the whole pile of settings for a given org, plus ancestor settings that are not represented by the context org or intermediate ancestor. git-svn-id: svn://svn.open-ils.org/ILS/trunk@13181 dcc99617-32d9-48b4-a31d-7c20da2025e4 --- .../src/perlmods/OpenILS/Application/Actor.pm | 32 +++++++++++++++++++ 1 file changed, 32 insertions(+) diff --git a/Open-ILS/src/perlmods/OpenILS/Application/Actor.pm b/Open-ILS/src/perlmods/OpenILS/Application/Actor.pm index 0e27cd02a6..21a3d317b6 100644 --- a/Open-ILS/src/perlmods/OpenILS/Application/Actor.pm +++ b/Open-ILS/src/perlmods/OpenILS/Application/Actor.pm @@ -181,6 +181,38 @@ sub ou_settings { } +__PACKAGE__->register_method( + method => "ranged_ou_settings", + api_name => "open-ils.actor.org_unit_setting.values.ranged.retrieve", +); +sub ranged_ou_settings { + my( $self, $client, $auth, $org_id ) = @_; + + my $e = new_editor(authtoken => $auth); + return $e->event unless $e->checkauth; + return $e->event unless $e->allowed('VIEW_ORG_SETTINGS', $org_id); + + my %ranged_settings; + my $org_list = $U->get_org_ancestors($org_id); + my $settings = $e->search_actor_org_unit_setting({org_unit => $org_list}); + $org_list = [ reverse @$org_list ]; + + # start at the context org and capture the setting value + # without clobbering settings we've already captured + for my $org_id (@$org_list) { + + my @sets = grep { $_->org_unit == $org_id } @$settings; + + for my $set (@sets) { + $ranged_settings{$set->name} = OpenSRF::Utils::JSON->JSON2perl($set->value) + unless defined $ranged_settings{$set->name}; + } + } + + return \%ranged_settings; +} + + __PACKAGE__->register_method( api_name => 'open-ils.actor.ou_setting.ancestor_default', -- 2.43.2