[open-ils-commits] r13606 - trunk/Open-ILS/src/perlmods/OpenILS/Application/Storage/Publisher (erickson)
svn at svn.open-ils.org
svn at svn.open-ils.org
Wed Jul 15 13:05:20 EDT 2009
Author: erickson
Date: 2009-07-15 13:05:18 -0400 (Wed, 15 Jul 2009)
New Revision: 13606
Modified:
trunk/Open-ILS/src/perlmods/OpenILS/Application/Storage/Publisher/actor.pm
Log:
patch from Mike R. to provide an option to sort user search results on the number of outstanding penalties a user has
Modified: trunk/Open-ILS/src/perlmods/OpenILS/Application/Storage/Publisher/actor.pm
===================================================================
--- trunk/Open-ILS/src/perlmods/OpenILS/Application/Storage/Publisher/actor.pm 2009-07-15 17:04:42 UTC (rev 13605)
+++ trunk/Open-ILS/src/perlmods/OpenILS/Application/Storage/Publisher/actor.pm 2009-07-15 17:05:18 UTC (rev 13606)
@@ -474,11 +474,18 @@
my $ws_ou = shift;
my $ws_ou_depth = shift || 0;
+ my $penalty_sort = 0;
+
my $strict_opt_in = OpenSRF::Utils::SettingsClient->new->config_value( share => user => 'opt_in' );
$sort = ['family_name','first_given_name'] unless ($$sort[0]);
push @$sort,'id';
+ if ($$sort[0] eq 'penalties') {
+ shift @$sort;
+ $penalty_sort = 1;
+ }
+
# group 0 = user
# group 1 = address
# group 2 = phone, ident
@@ -565,6 +572,7 @@
my $order_by = join ', ', map { 'LOWER(CAST(users.'. (split / /,$_)[0] . ' AS text)) ' . (split / /,$_)[1] } @$sort;
my $distinct_list = join ', ', map { 'LOWER(CAST(users.'. (split / /,$_)[0] . ' AS text))' } @$sort;
+ my $group_list = $distinct_list;
if ($inactive) {
$inactive = '';
@@ -583,19 +591,32 @@
$opt_in_where = "AND (oi.id IS NOT NULL OR users.home_ou = $ws_ou)";
}
+ my $penalty_join = '';
+ if ($penalty_sort) {
+ $distinct_list = 'COUNT(penalties.id), ' . $distinct_list;
+ $order_by = 'COUNT(penalties.id) DESC, ' . $order_by;
+ unshift @$sort, 'COUNT(penalties.id)';
+ $penalty_join = <<" SQL";
+ LEFT JOIN actor.usr_standing_penalty penalties
+ ON (users.id = penalties.usr AND (penalties.stop_date IS NULL OR penalties.stop_date > NOW()))
+ SQL
+ }
+
my $descendants = "actor.org_unit_descendants($ws_ou, $ws_ou_depth)";
$select = "JOIN ($select) AS search ON (search.id = users.id)" if ($select);
$select = <<" SQL";
- SELECT DISTINCT $distinct_list
+ SELECT $distinct_list
FROM $u_table AS users $card
JOIN $descendants d ON (d.id = users.home_ou)
$select
$opt_in_join
$clone_select
+ $penalty_join
WHERE users.deleted = FALSE
$inactive
$opt_in_where
+ GROUP BY $group_list
ORDER BY $order_by
LIMIT $limit
SQL
@@ -608,109 +629,6 @@
method => 'patron_search',
);
-=comment not gonna use it...
-
-sub fleshed_search {
- my $self = shift;
- my $client = shift;
- my $searches = shift;
-
- return undef unless (defined $searches);
-
- for my $usr ( actor::user->search( $searches ) ) {
- next unless $usr;
- $client->respond( flesh_user( $usr ) );
- }
- return undef;
-}
-__PACKAGE__->register_method(
- api_name => 'open-ils.storage.fleshed.actor.user.search',
- api_level => 1,
- method => 'fleshed_search',
- stream => 1,
- cachable => 1,
-);
-
-sub fleshed_search_like {
- my $self = shift;
- my $client = shift;
- my $searches = shift;
-
- return undef unless (defined $searches);
-
- for my $usr ( actor::user->search_like( $searches ) ) {
- next unless $usr;
- $client->respond( flesh_user( $usr ) );
- }
- return undef;
-}
-__PACKAGE__->register_method(
- api_name => 'open-ils.storage.fleshed.actor.user.search_like',
- api_level => 1,
- method => 'user_by_barcode',
- stream => 1,
- cachable => 1,
-);
-
-sub retrieve_fleshed_user {
- my $self = shift;
- my $client = shift;
- my @ids = shift;
-
- return undef unless @ids;
-
- @ids = ($ids[0]) unless ($self->api_name =~ /batch/o);
-
- $client->respond( flesh_user( actor::user->retrieve( $_ ) ) ) for ( @ids );
-
- return undef;
-}
-__PACKAGE__->register_method(
- api_name => 'open-ils.storage.fleshed.actor.user.retrieve',
- api_level => 1,
- method => 'retrieve_fleshed_user',
- cachable => 1,
-);
-__PACKAGE__->register_method(
- api_name => 'open-ils.storage.fleshed.actor.user.batch.retrieve',
- api_level => 1,
- method => 'retrieve_fleshed_user',
- stream => 1,
- cachable => 1,
-);
-
-sub flesh_user {
- my $usr = shift;
-
-
- my $standing = $usr->standing;
- my $profile = $usr->profile;
- my $ident_type = $usr->ident_type;
-
- my $maddress = $usr->mailing_address;
- my $baddress = $usr->billing_address;
- my $card = $usr->card;
-
- my @addresses = $usr->addresses;
- my @cards = $usr->cards;
-
- my $usr_fm = $usr->to_fieldmapper;
- $usr_fm->standing( $standing->to_fieldmapper );
- $usr_fm->profile( $profile->to_fieldmapper );
- $usr_fm->ident_type( $ident_type->to_fieldmapper );
-
- $usr_fm->card( $card->to_fieldmapper );
- $usr_fm->mailing_address( $maddress->to_fieldmapper ) if ($maddress);
- $usr_fm->billing_address( $baddress->to_fieldmapper ) if ($baddress);
-
- $usr_fm->cards( [ map { $_->to_fieldmapper } @cards ] );
- $usr_fm->addresses( [ map { $_->to_fieldmapper } @addresses ] );
-
- return $usr_fm;
-}
-
-=cut
-
sub org_unit_list {
my $self = shift;
my $client = shift;
More information about the open-ils-commits
mailing list