From cff5fb73738b1ef632c9de88a4156f5b291c4d71 Mon Sep 17 00:00:00 2001 From: Lebbeous Fogle-Weekley <lebbeous@esilibrary.com> Date: Wed, 1 Aug 2012 14:51:39 -0400 Subject: [PATCH] Whitespace fixes in Collections.pm Signed-off-by: Lebbeous Fogle-Weekley <lebbeous@esilibrary.com> --- .../lib/OpenILS/Application/Collections.pm | 1522 ++++++++++---------- 1 file changed, 761 insertions(+), 761 deletions(-) diff --git a/Open-ILS/src/perlmods/lib/OpenILS/Application/Collections.pm b/Open-ILS/src/perlmods/lib/OpenILS/Application/Collections.pm index 3979d208ce..f1d6e36fda 100644 --- a/Open-ILS/src/perlmods/lib/OpenILS/Application/Collections.pm +++ b/Open-ILS/src/perlmods/lib/OpenILS/Application/Collections.pm @@ -24,85 +24,85 @@ use File::Path; sub initialize { return 1; } __PACKAGE__->register_method( - method => 'user_from_bc', - api_name => 'open-ils.collections.user_id_from_barcode', + method => 'user_from_bc', + api_name => 'open-ils.collections.user_id_from_barcode', ); sub user_from_bc { - my( $self, $conn, $auth, $bc ) = @_; - my $e = new_editor(authtoken=>$auth); - return $e->event unless $e->checkauth; - return $e->event unless $e->allowed('VIEW_USER'); - my $card = $e->search_actor_card({barcode=>$bc})->[0] - or return $e->event; - my $user = $e->retrieve_actor_user($card->usr) - or return $e->event; - return $user->id; + my( $self, $conn, $auth, $bc ) = @_; + my $e = new_editor(authtoken=>$auth); + return $e->event unless $e->checkauth; + return $e->event unless $e->allowed('VIEW_USER'); + my $card = $e->search_actor_card({barcode=>$bc})->[0] + or return $e->event; + my $user = $e->retrieve_actor_user($card->usr) + or return $e->event; + return $user->id; } __PACKAGE__->register_method( - method => 'users_of_interest', - api_name => 'open-ils.collections.users_of_interest.retrieve', - api_level => 1, - argc => 4, + method => 'users_of_interest', + api_name => 'open-ils.collections.users_of_interest.retrieve', + api_level => 1, + argc => 4, stream => 1, - signature => { - desc => q/ - Returns an array of user information objects that the system - based on the search criteria provided. If the total fines - a user owes reaches or exceeds "fine_level" on or befre "age" - and the fines were created at "location", the user will be - included in the return set/, - - params => [ - { name => 'auth', - desc => 'The authentication token', - type => 'string' }, - - { name => 'age', - desc => q/Number of days back to check/, - type => q/number/, - }, - - { name => 'fine_level', - desc => q/The fine threshold at which users will be included in the search results /, - type => q/number/, - }, - { name => 'location', - desc => q/The short-name of the orginization unit (library) at which the fines were created. - If a selected location has 'child' locations (e.g. a library region), the - child locations will be included in the search/, - type => q/string/, - }, - ], - - 'return' => { - desc => q/An array of user information objects. - usr : Array of user information objects containing id, dob, profile, and groups - threshold_amount : The total amount the patron owes that is at least as old - as the fine "age" and whose transaction was created at the searched location - last_pertinent_billing : The time of the last billing that relates to this query - /, - type => 'array', - example => { - usr => { - id => 'id', - dob => '1970-01-01', - profile => 'Patron', - groups => [ 'Patron', 'Staff' ], - }, - threshold_amount => 99, - } - } - } + signature => { + desc => q/ + Returns an array of user information objects that the system + based on the search criteria provided. If the total fines + a user owes reaches or exceeds "fine_level" on or befre "age" + and the fines were created at "location", the user will be + included in the return set/, + + params => [ + { name => 'auth', + desc => 'The authentication token', + type => 'string' }, + + { name => 'age', + desc => q/Number of days back to check/, + type => q/number/, + }, + + { name => 'fine_level', + desc => q/The fine threshold at which users will be included in the search results /, + type => q/number/, + }, + { name => 'location', + desc => q/The short-name of the orginization unit (library) at which the fines were created. + If a selected location has 'child' locations (e.g. a library region), the + child locations will be included in the search/, + type => q/string/, + }, + ], + + 'return' => { + desc => q/An array of user information objects. + usr : Array of user information objects containing id, dob, profile, and groups + threshold_amount : The total amount the patron owes that is at least as old + as the fine "age" and whose transaction was created at the searched location + last_pertinent_billing : The time of the last billing that relates to this query + /, + type => 'array', + example => { + usr => { + id => 'id', + dob => '1970-01-01', + profile => 'Patron', + groups => [ 'Patron', 'Staff' ], + }, + threshold_amount => 99, + } + } + } ); sub users_of_interest { my( $self, $conn, $auth, $age, $fine_level, $location ) = @_; - return OpenILS::Event->new('BAD_PARAMS') + return OpenILS::Event->new('BAD_PARAMS') unless ($auth and $age and $location); my $e = new_editor(authtoken => $auth); @@ -112,7 +112,7 @@ sub users_of_interest { or return $e->event; $org = $org->[0]; # they need global perms to view users so no org is provided - return $e->event unless $e->allowed('VIEW_USER'); + return $e->event unless $e->allowed('VIEW_USER'); my $data = []; @@ -120,7 +120,7 @@ sub users_of_interest { my $start = time; my $req = $ses->request( - 'open-ils.storage.money.collections.users_of_interest', + 'open-ils.storage.money.collections.users_of_interest', $age, $fine_level, $location); # let the client know we're still here @@ -132,57 +132,57 @@ sub users_of_interest { __PACKAGE__->register_method( - method => 'users_of_interest_warning_penalty', - api_name => 'open-ils.collections.users_of_interest.warning_penalty.retrieve', - api_level => 1, - argc => 4, + method => 'users_of_interest_warning_penalty', + api_name => 'open-ils.collections.users_of_interest.warning_penalty.retrieve', + api_level => 1, + argc => 4, stream => 1, - signature => { - desc => q/ - Returns an array of user information objects for users that have the - PATRON_EXCEEDS_COLLECTIONS_WARNING penalty applied, - based on the search criteria provided./, - - params => [ - { name => 'auth', - desc => 'The authentication token', - type => 'string' - }, { + signature => { + desc => q/ + Returns an array of user information objects for users that have the + PATRON_EXCEEDS_COLLECTIONS_WARNING penalty applied, + based on the search criteria provided./, + + params => [ + { name => 'auth', + desc => 'The authentication token', + type => 'string' + }, { name => 'location', - desc => q/The short-name of the orginization unit (library) at which the penalty is applied. - If a selected location has 'child' locations (e.g. a library region), the - child locations will be included in the search/, - type => q/string/, - }, { + desc => q/The short-name of the orginization unit (library) at which the penalty is applied. + If a selected location has 'child' locations (e.g. a library region), the + child locations will be included in the search/, + type => q/string/, + }, { name => 'min_age', - desc => q/Optional. Minimum age of the penalty application/, - type => q/interval, e.g "30 days"/, - }, { + desc => q/Optional. Minimum age of the penalty application/, + type => q/interval, e.g "30 days"/, + }, { name => 'max_age', - desc => q/Optional. Maximum age of the penalty application/, - type => q/interval, e.g "90 days"/, - } - ], - - 'return' => { - desc => q/An array of user information objects. - usr : Array of user information objects containing id, dob, profile, and groups - threshold_amount : The total amount the patron owes that is at least as old - as the fine "age" and whose transaction was created at the searched location - last_pertinent_billing : The time of the last billing that relates to this query - /, - type => 'array', - example => { - usr => { - id => 'id', - dob => '1970-01-01', - profile => 'Patron', - groups => [ 'Patron', 'Staff' ], - }, - threshold_amount => 99, # TODO: still needed? - } - } - } + desc => q/Optional. Maximum age of the penalty application/, + type => q/interval, e.g "90 days"/, + } + ], + + 'return' => { + desc => q/An array of user information objects. + usr : Array of user information objects containing id, dob, profile, and groups + threshold_amount : The total amount the patron owes that is at least as old + as the fine "age" and whose transaction was created at the searched location + last_pertinent_billing : The time of the last billing that relates to this query + /, + type => 'array', + example => { + usr => { + id => 'id', + dob => '1970-01-01', + profile => 'Patron', + groups => [ 'Patron', 'Staff' ], + }, + threshold_amount => 99, # TODO: still needed? + } + } + } ); @@ -199,16 +199,16 @@ sub users_of_interest_warning_penalty { or return $e->event; $org = $org->[0]; # they need global perms to view users so no org is provided - return $e->event unless $e->allowed('VIEW_USER'); + return $e->event unless $e->allowed('VIEW_USER'); my $org_ids = $e->json_query({from => ['actor.org_unit_full_path', $org->id]}); my $ses = OpenSRF::AppSession->create('open-ils.cstore'); - # max age == oldest - my $max_set_date = DateTime->now->subtract(seconds => + # max age == oldest + my $max_set_date = DateTime->now->subtract(seconds => interval_to_seconds($max_age))->strftime( '%F %T%z' ) if $max_age; - my $min_set_date = DateTime->now->subtract(seconds => + my $min_set_date = DateTime->now->subtract(seconds => interval_to_seconds($min_age))->strftime( '%F %T%z' ) if $min_age; my $start = time; @@ -235,7 +235,7 @@ sub users_of_interest_warning_penalty { {stop_date => {'>' => 'now'}} ] }, - # We are only interested in users that do not have the + # We are only interested in users that do not have the # circ.collections.exempt setting applied '+aus' => {value => undef} } @@ -274,22 +274,22 @@ sub process_users_of_interest_results { my $u = $e->retrieve_actor_user( [ - $hash->{usr}, - { - flesh => 1, - flesh_fields => {au => ["groups","profile", "card"]}, - } + $hash->{usr}, + { + flesh => 1, + flesh_fields => {au => ["groups","profile", "card"]}, + } ] ) or return $e->event; $hash->{usr} = { - id => $u->id, - dob => $u->dob, - profile => $u->profile->name, - barcode => $u->card->barcode, - groups => [ map { $_->name } @{$u->groups} ], + id => $u->id, + dob => $u->dob, + profile => $u->profile->name, + barcode => $u->card->barcode, + groups => [ map { $_->name } @{$u->groups} ], }; - + $conn->respond($hash); } @@ -298,61 +298,61 @@ sub process_users_of_interest_results { __PACKAGE__->register_method( - method => 'users_owing_money', - api_name => 'open-ils.collections.users_owing_money.retrieve', - api_level => 1, - argc => 5, + method => 'users_owing_money', + api_name => 'open-ils.collections.users_owing_money.retrieve', + api_level => 1, + argc => 5, stream => 1, - signature => { - desc => q/ - Returns an array of users that owe money during - the given time frame at the location (or child locations) - provided/, - - params => [ - { name => 'auth', - desc => 'The authentication token', - type => 'string' }, - - { name => 'start_date', - desc => 'The start of the time interval to check', - type => q/string (ISO 8601 timestamp. E.g. 2006-06-24, 1994-11-05T08:15:30-05:00 /, - }, - - { name => 'end_date', - desc => q/Then end date of the time interval to check/, - type => q/string (ISO 8601 timestamp. E.g. 2006-06-24, 1994-11-05T08:15:30-05:00 /, - }, - { name => 'fine_level', - desc => q/The fine threshold at which users will be included in the search results /, - type => q/number/, - }, - { name => 'locations', - desc => q/ A list of one or more org-unit short names. - If a selected location has 'child' locations (e.g. a library region), the - child locations will be included in the search/, - type => q'string', - }, - ], - 'return' => { - desc => q/An array of user information objects/, - type => 'array', - } - } + signature => { + desc => q/ + Returns an array of users that owe money during + the given time frame at the location (or child locations) + provided/, + + params => [ + { name => 'auth', + desc => 'The authentication token', + type => 'string' }, + + { name => 'start_date', + desc => 'The start of the time interval to check', + type => q/string (ISO 8601 timestamp. E.g. 2006-06-24, 1994-11-05T08:15:30-05:00 /, + }, + + { name => 'end_date', + desc => q/Then end date of the time interval to check/, + type => q/string (ISO 8601 timestamp. E.g. 2006-06-24, 1994-11-05T08:15:30-05:00 /, + }, + { name => 'fine_level', + desc => q/The fine threshold at which users will be included in the search results /, + type => q/number/, + }, + { name => 'locations', + desc => q/ A list of one or more org-unit short names. + If a selected location has 'child' locations (e.g. a library region), the + child locations will be included in the search/, + type => q'string', + }, + ], + 'return' => { + desc => q/An array of user information objects/, + type => 'array', + } + } ); sub users_owing_money { - my( $self, $conn, $auth, $start_date, $end_date, $fine_level, @locations ) = @_; + my( $self, $conn, $auth, $start_date, $end_date, $fine_level, @locations ) = @_; - return OpenILS::Event->new('BAD_PARAMS') - unless ($auth and $start_date and $end_date and @locations); + return OpenILS::Event->new('BAD_PARAMS') + unless ($auth and $start_date and $end_date and @locations); - my $e = new_editor(authtoken => $auth); - return $e->event unless $e->checkauth; + my $e = new_editor(authtoken => $auth); + return $e->event unless $e->checkauth; - # they need global perms to view users so no org is provided - return $e->event unless $e->allowed('VIEW_USER'); + # they need global perms to view users so no org is provided + return $e->event unless $e->allowed('VIEW_USER'); my $data = []; @@ -373,65 +373,65 @@ sub users_owing_money { __PACKAGE__->register_method( - method => 'users_with_activity', - api_name => 'open-ils.collections.users_with_activity.retrieve', - api_level => 1, - argc => 4, + method => 'users_with_activity', + api_name => 'open-ils.collections.users_with_activity.retrieve', + api_level => 1, + argc => 4, stream => 1, - signature => { - desc => q/ - Returns an array of users that are already in collections - and had any type of billing or payment activity within - the given time frame at the location (or child locations) - provided/, - - params => [ - { name => 'auth', - desc => 'The authentication token', - type => 'string' }, - - { name => 'start_date', - desc => 'The start of the time interval to check', - type => q/string (ISO 8601 timestamp. E.g. 2006-06-24, 1994-11-05T08:15:30-05:00 /, - }, - - { name => 'end_date', - desc => q/Then end date of the time interval to check/, - type => q/string (ISO 8601 timestamp. E.g. 2006-06-24, 1994-11-05T08:15:30-05:00 /, - }, - { name => 'location', - desc => q/The short-name of the orginization unit (library) at which the activity occurred. - If a selected location has 'child' locations (e.g. a library region), the - child locations will be included in the search/, - type => q'string', - }, - ], - - 'return' => { - desc => q/An array of user information objects/, - type => 'array', - } - } + signature => { + desc => q/ + Returns an array of users that are already in collections + and had any type of billing or payment activity within + the given time frame at the location (or child locations) + provided/, + + params => [ + { name => 'auth', + desc => 'The authentication token', + type => 'string' }, + + { name => 'start_date', + desc => 'The start of the time interval to check', + type => q/string (ISO 8601 timestamp. E.g. 2006-06-24, 1994-11-05T08:15:30-05:00 /, + }, + + { name => 'end_date', + desc => q/Then end date of the time interval to check/, + type => q/string (ISO 8601 timestamp. E.g. 2006-06-24, 1994-11-05T08:15:30-05:00 /, + }, + { name => 'location', + desc => q/The short-name of the orginization unit (library) at which the activity occurred. + If a selected location has 'child' locations (e.g. a library region), the + child locations will be included in the search/, + type => q'string', + }, + ], + + 'return' => { + desc => q/An array of user information objects/, + type => 'array', + } + } ); sub users_with_activity { - my( $self, $conn, $auth, $start_date, $end_date, $location ) = @_; - return OpenILS::Event->new('BAD_PARAMS') - unless ($auth and $start_date and $end_date and $location); + my( $self, $conn, $auth, $start_date, $end_date, $location ) = @_; + return OpenILS::Event->new('BAD_PARAMS') + unless ($auth and $start_date and $end_date and $location); - my $e = new_editor(authtoken => $auth); - return $e->event unless $e->checkauth; + my $e = new_editor(authtoken => $auth); + return $e->event unless $e->checkauth; - my $org = $e->search_actor_org_unit({shortname => $location}) - or return $e->event; $org = $org->[0]; + my $org = $e->search_actor_org_unit({shortname => $location}) + or return $e->event; $org = $org->[0]; return $e->event unless $e->allowed('VIEW_USER', $org->id); my $ses = OpenSRF::AppSession->create('open-ils.storage'); my $start = time; my $req = $ses->request( - 'open-ils.storage.money.collections.users_with_activity.atomic', - $start_date, $end_date, $location); + 'open-ils.storage.money.collections.users_with_activity.atomic', + $start_date, $end_date, $location); $conn->status( new OpenSRF::DomainObject::oilsContinueStatus ); @@ -454,99 +454,99 @@ sub users_with_activity { __PACKAGE__->register_method( - method => 'put_into_collections', - api_name => 'open-ils.collections.put_into_collections', - api_level => 1, - argc => 3, - signature => { - desc => q/ - Marks a user as being "in collections" at a given location - /, - - params => [ - { name => 'auth', - desc => 'The authentication token', - type => 'string' }, - - { name => 'user_id', - desc => 'The id of the user to plact into collections', - type => 'number', - }, - - { name => 'location', - desc => q/The short-name of the orginization unit (library) - for which the user is being placed in collections/, - type => q'string', - }, - { name => 'fee_amount', - desc => q/ - The amount of money that a patron should be fined. - If this field is empty, no fine is created. - /, - type => 'string', - }, - { name => 'fee_note', - desc => q/ - Custom note that is added to the the billing. - This field is not required. - Note: fee_note is not the billing_type. Billing_type type is - decided by the system. (e.g. "fee for collections"). - fee_note is purely used for any additional needed information - and is only visible to staff. - /, - type => 'string', - }, - ], - - 'return' => { - desc => q/A SUCCESS event on success, error event on failure/, - type => 'object', - } - } + method => 'put_into_collections', + api_name => 'open-ils.collections.put_into_collections', + api_level => 1, + argc => 3, + signature => { + desc => q/ + Marks a user as being "in collections" at a given location + /, + + params => [ + { name => 'auth', + desc => 'The authentication token', + type => 'string' }, + + { name => 'user_id', + desc => 'The id of the user to plact into collections', + type => 'number', + }, + + { name => 'location', + desc => q/The short-name of the orginization unit (library) + for which the user is being placed in collections/, + type => q'string', + }, + { name => 'fee_amount', + desc => q/ + The amount of money that a patron should be fined. + If this field is empty, no fine is created. + /, + type => 'string', + }, + { name => 'fee_note', + desc => q/ + Custom note that is added to the the billing. + This field is not required. + Note: fee_note is not the billing_type. Billing_type type is + decided by the system. (e.g. "fee for collections"). + fee_note is purely used for any additional needed information + and is only visible to staff. + /, + type => 'string', + }, + ], + + 'return' => { + desc => q/A SUCCESS event on success, error event on failure/, + type => 'object', + } + } ); sub put_into_collections { - my( $self, $conn, $auth, $user_id, $location, $fee_amount, $fee_note ) = @_; + my( $self, $conn, $auth, $user_id, $location, $fee_amount, $fee_note ) = @_; - return OpenILS::Event->new('BAD_PARAMS') - unless ($auth and $user_id and $location); + return OpenILS::Event->new('BAD_PARAMS') + unless ($auth and $user_id and $location); - my $e = new_editor(authtoken => $auth, xact =>1); - return $e->event unless $e->checkauth; + my $e = new_editor(authtoken => $auth, xact =>1); + return $e->event unless $e->checkauth; - my $org = $e->search_actor_org_unit({shortname => $location}); - return $e->event unless $org = $org->[0]; - return $e->event unless $e->allowed('money.collections_tracker.create', $org->id); + my $org = $e->search_actor_org_unit({shortname => $location}); + return $e->event unless $org = $org->[0]; + return $e->event unless $e->allowed('money.collections_tracker.create', $org->id); - my $existing = $e->search_money_collections_tracker( - { - location => $org->id, - usr => $user_id, - collector => $e->requestor->id - }, - {idlist => 1} - ); + my $existing = $e->search_money_collections_tracker( + { + location => $org->id, + usr => $user_id, + collector => $e->requestor->id + }, + {idlist => 1} + ); - return OpenILS::Event->new('MONEY_COLLECTIONS_TRACKER_EXISTS') if @$existing; + return OpenILS::Event->new('MONEY_COLLECTIONS_TRACKER_EXISTS') if @$existing; - $logger->info("collect: user ".$e->requestor->id. - " putting user $user_id into collections for $location"); + $logger->info("collect: user ".$e->requestor->id. + " putting user $user_id into collections for $location"); - my $tracker = Fieldmapper::money::collections_tracker->new; + my $tracker = Fieldmapper::money::collections_tracker->new; - $tracker->usr($user_id); - $tracker->collector($e->requestor->id); - $tracker->location($org->id); - $tracker->enter_time('now'); + $tracker->usr($user_id); + $tracker->collector($e->requestor->id); + $tracker->location($org->id); + $tracker->enter_time('now'); - $e->create_money_collections_tracker($tracker) - or return $e->event; + $e->create_money_collections_tracker($tracker) + or return $e->event; - if( $fee_amount ) { - my $evt = add_collections_fee($e, $user_id, $org, $fee_amount, $fee_note ); - return $evt if $evt; - } + if( $fee_amount ) { + my $evt = add_collections_fee($e, $user_id, $org, $fee_amount, $fee_note ); + return $evt if $evt; + } - $e->commit; + $e->commit; my $pen = Fieldmapper::actor::user_standing_penalty->new; $pen->org_unit($org->id); @@ -556,241 +556,241 @@ sub put_into_collections { $pen->note($fee_note) if $fee_note; $U->simplereq('open-ils.actor', 'open-ils.actor.user.penalty.apply', $auth, $pen); - return OpenILS::Event->new('SUCCESS'); + return OpenILS::Event->new('SUCCESS'); } sub add_collections_fee { - my( $e, $patron_id, $org, $fee_amount, $fee_note ) = @_; + my( $e, $patron_id, $org, $fee_amount, $fee_note ) = @_; - $fee_note ||= ""; + $fee_note ||= ""; - $logger->info("collect: adding fee to user $patron_id : $fee_amount : $fee_note"); + $logger->info("collect: adding fee to user $patron_id : $fee_amount : $fee_note"); - my $xact = Fieldmapper::money::grocery->new; - $xact->usr($patron_id); - $xact->xact_start('now'); - $xact->billing_location($org->id); + my $xact = Fieldmapper::money::grocery->new; + $xact->usr($patron_id); + $xact->xact_start('now'); + $xact->billing_location($org->id); - $xact = $e->create_money_grocery($xact) or return $e->event; + $xact = $e->create_money_grocery($xact) or return $e->event; - my $bill = Fieldmapper::money::billing->new; - $bill->note($fee_note); - $bill->xact($xact->id); - $bill->btype(2); - $bill->billing_type(OILS_BILLING_TYPE_COLLECTION_FEE); - $bill->amount($fee_amount); + my $bill = Fieldmapper::money::billing->new; + $bill->note($fee_note); + $bill->xact($xact->id); + $bill->btype(2); + $bill->billing_type(OILS_BILLING_TYPE_COLLECTION_FEE); + $bill->amount($fee_amount); - $e->create_money_billing($bill) or return $e->event; - return undef; + $e->create_money_billing($bill) or return $e->event; + return undef; } __PACKAGE__->register_method( - method => 'remove_from_collections', - api_name => 'open-ils.collections.remove_from_collections', - signature => q/ - Returns the users that are currently in collections and - had activity during the provided interval. Dates are inclusive. - @param start_date The beginning of the activity interval - @param end_date The end of the activity interval - @param location The location at which the fines were created - / + method => 'remove_from_collections', + api_name => 'open-ils.collections.remove_from_collections', + signature => q/ + Returns the users that are currently in collections and + had activity during the provided interval. Dates are inclusive. + @param start_date The beginning of the activity interval + @param end_date The end of the activity interval + @param location The location at which the fines were created + / ); __PACKAGE__->register_method( - method => 'remove_from_collections', - api_name => 'open-ils.collections.remove_from_collections', - api_level => 1, - argc => 3, - signature => { - desc => q/ - Removes a user from the collections table for the given location - /, - - params => [ - { name => 'auth', - desc => 'The authentication token', - type => 'string' }, - - { name => 'user_id', - desc => 'The id of the user to plact into collections', - type => 'number', - }, - - { name => 'location', - desc => q/The short-name of the orginization unit (library) - for which the user is being removed from collections/, - type => q'string', - }, - ], - - 'return' => { - desc => q/A SUCCESS event on success, error event on failure/, - type => 'object', - } - } + method => 'remove_from_collections', + api_name => 'open-ils.collections.remove_from_collections', + api_level => 1, + argc => 3, + signature => { + desc => q/ + Removes a user from the collections table for the given location + /, + + params => [ + { name => 'auth', + desc => 'The authentication token', + type => 'string' }, + + { name => 'user_id', + desc => 'The id of the user to plact into collections', + type => 'number', + }, + + { name => 'location', + desc => q/The short-name of the orginization unit (library) + for which the user is being removed from collections/, + type => q'string', + }, + ], + + 'return' => { + desc => q/A SUCCESS event on success, error event on failure/, + type => 'object', + } + } ); sub remove_from_collections { - my( $self, $conn, $auth, $user_id, $location ) = @_; + my( $self, $conn, $auth, $user_id, $location ) = @_; - return OpenILS::Event->new('BAD_PARAMS') - unless ($auth and $user_id and $location); + return OpenILS::Event->new('BAD_PARAMS') + unless ($auth and $user_id and $location); - my $e = new_editor(authtoken => $auth, xact=>1); - return $e->event unless $e->checkauth; + my $e = new_editor(authtoken => $auth, xact=>1); + return $e->event unless $e->checkauth; - my $org = $e->search_actor_org_unit({shortname => $location}) - or return $e->event; $org = $org->[0]; - return $e->event unless $e->allowed('money.collections_tracker.delete', $org->id); + my $org = $e->search_actor_org_unit({shortname => $location}) + or return $e->event; $org = $org->[0]; + return $e->event unless $e->allowed('money.collections_tracker.delete', $org->id); - my $tracker = $e->search_money_collections_tracker( - { usr => $user_id, location => $org->id }) - or return $e->event; + my $tracker = $e->search_money_collections_tracker( + { usr => $user_id, location => $org->id }) + or return $e->event; - $e->delete_money_collections_tracker($tracker->[0]) - or return $e->event; + $e->delete_money_collections_tracker($tracker->[0]) + or return $e->event; - $e->commit; - return OpenILS::Event->new('SUCCESS'); + $e->commit; + return OpenILS::Event->new('SUCCESS'); } #__PACKAGE__->register_method( -# method => 'transaction_details', -# api_name => 'open-ils.collections.user_transaction_details.retrieve', -# signature => q/ -# / +# method => 'transaction_details', +# api_name => 'open-ils.collections.user_transaction_details.retrieve', +# signature => q/ +# / #); __PACKAGE__->register_method( - method => 'transaction_details', - api_name => 'open-ils.collections.user_transaction_details.retrieve', - api_level => 1, - argc => 5, - signature => { - desc => q/ - Returns a list of fleshed user objects with transaction details - /, - - params => [ - { name => 'auth', - desc => 'The authentication token', - type => 'string' }, - - { name => 'start_date', - desc => 'The start of the time interval to check', - type => q/string (ISO 8601 timestamp. E.g. 2006-06-24, 1994-11-05T08:15:30-05:00 /, - }, - - { name => 'end_date', - desc => q/Then end date of the time interval to check/, - type => q/string (ISO 8601 timestamp. E.g. 2006-06-24, 1994-11-05T08:15:30-05:00 /, - }, - { name => 'location', - desc => q/The short-name of the orginization unit (library) at which the activity occurred. - If a selected location has 'child' locations (e.g. a library region), the - child locations will be included in the search/, - type => q'string', - }, - { - name => 'user_list', - desc => 'An array of user ids', - type => 'array', - }, - ], - - 'return' => { - desc => q/A list of objects. Object keys include: - usr : - transactions : An object with keys : - circulations : Fleshed circulation objects - grocery : Fleshed 'grocery' transaction objects - /, - type => 'object' - } - } + method => 'transaction_details', + api_name => 'open-ils.collections.user_transaction_details.retrieve', + api_level => 1, + argc => 5, + signature => { + desc => q/ + Returns a list of fleshed user objects with transaction details + /, + + params => [ + { name => 'auth', + desc => 'The authentication token', + type => 'string' }, + + { name => 'start_date', + desc => 'The start of the time interval to check', + type => q/string (ISO 8601 timestamp. E.g. 2006-06-24, 1994-11-05T08:15:30-05:00 /, + }, + + { name => 'end_date', + desc => q/Then end date of the time interval to check/, + type => q/string (ISO 8601 timestamp. E.g. 2006-06-24, 1994-11-05T08:15:30-05:00 /, + }, + { name => 'location', + desc => q/The short-name of the orginization unit (library) at which the activity occurred. + If a selected location has 'child' locations (e.g. a library region), the + child locations will be included in the search/, + type => q'string', + }, + { + name => 'user_list', + desc => 'An array of user ids', + type => 'array', + }, + ], + + 'return' => { + desc => q/A list of objects. Object keys include: + usr : + transactions : An object with keys : + circulations : Fleshed circulation objects + grocery : Fleshed 'grocery' transaction objects + /, + type => 'object' + } + } ); sub transaction_details { - my( $self, $conn, $auth, $start_date, $end_date, $location, $user_list ) = @_; - - return OpenILS::Event->new('BAD_PARAMS') - unless ($auth and $start_date and $end_date and $location and $user_list); - - my $e = new_editor(authtoken => $auth); - return $e->event unless $e->checkauth; - - # they need global perms to view users so no org is provided - return $e->event unless $e->allowed('VIEW_USER'); - - my $org = $e->search_actor_org_unit({shortname => $location}) - or return $e->event; $org = $org->[0]; - - # get a reference to the org inside of the tree - $org = $U->find_org($U->get_org_tree(), $org->id); - - my @data; - for my $uid (@$user_list) { - my $blob = {}; - - $blob->{usr} = $e->retrieve_actor_user( - [ - $uid, - { - "flesh" => 1, - "flesh_fields" => { - "au" => [ - "cards", - "card", - "standing_penalties", - "addresses", - "billing_address", - "mailing_address", - "stat_cat_entries" - ] - } - } - ] - ); - - $blob->{transactions} = { - circulations => - fetch_circ_xacts($e, $uid, $org, $start_date, $end_date), - grocery => - fetch_grocery_xacts($e, $uid, $org, $start_date, $end_date), - reservations => - fetch_reservation_xacts($e, $uid, $org, $start_date, $end_date) - }; - - # for each transaction, flesh the workstatoin on any attached payment - # and make the payment object a real object (e.g. cash payment), - # not just a generic payment object - for my $xact ( - @{$blob->{transactions}->{circulations}}, - @{$blob->{transactions}->{reservations}}, - @{$blob->{transactions}->{grocery}} ) { - - my $ps; - if( $ps = $xact->payments and @$ps ) { - my @fleshed; my $evt; - for my $p (@$ps) { - ($p, $evt) = flesh_payment($e,$p); - return $evt if $evt; - push(@fleshed, $p); - } - $xact->payments(\@fleshed); - } - } - - push( @data, $blob ); - } - - return \@data; + my( $self, $conn, $auth, $start_date, $end_date, $location, $user_list ) = @_; + + return OpenILS::Event->new('BAD_PARAMS') + unless ($auth and $start_date and $end_date and $location and $user_list); + + my $e = new_editor(authtoken => $auth); + return $e->event unless $e->checkauth; + + # they need global perms to view users so no org is provided + return $e->event unless $e->allowed('VIEW_USER'); + + my $org = $e->search_actor_org_unit({shortname => $location}) + or return $e->event; $org = $org->[0]; + + # get a reference to the org inside of the tree + $org = $U->find_org($U->get_org_tree(), $org->id); + + my @data; + for my $uid (@$user_list) { + my $blob = {}; + + $blob->{usr} = $e->retrieve_actor_user( + [ + $uid, + { + "flesh" => 1, + "flesh_fields" => { + "au" => [ + "cards", + "card", + "standing_penalties", + "addresses", + "billing_address", + "mailing_address", + "stat_cat_entries" + ] + } + } + ] + ); + + $blob->{transactions} = { + circulations => + fetch_circ_xacts($e, $uid, $org, $start_date, $end_date), + grocery => + fetch_grocery_xacts($e, $uid, $org, $start_date, $end_date), + reservations => + fetch_reservation_xacts($e, $uid, $org, $start_date, $end_date) + }; + + # for each transaction, flesh the workstatoin on any attached payment + # and make the payment object a real object (e.g. cash payment), + # not just a generic payment object + for my $xact ( + @{$blob->{transactions}->{circulations}}, + @{$blob->{transactions}->{reservations}}, + @{$blob->{transactions}->{grocery}} ) { + + my $ps; + if( $ps = $xact->payments and @$ps ) { + my @fleshed; my $evt; + for my $p (@$ps) { + ($p, $evt) = flesh_payment($e,$p); + return $evt if $evt; + push(@fleshed, $p); + } + $xact->payments(\@fleshed); + } + } + + push( @data, $blob ); + } + + return \@data; } __PACKAGE__->register_method( @@ -799,8 +799,8 @@ __PACKAGE__->register_method( api_level => 1, stream => 1, argc => 2, - signature => { - desc => q/Collect balance information for users in collections. By default, + signature => { + desc => q/Collect balance information for users in collections. By default, only the total balance owed is calculated. Use the "include_xacts" param to include per-transaction summaries as well./, params => [ @@ -813,16 +813,16 @@ __PACKAGE__->register_method( location -- org unit shortname start_date -- ISO 8601 date. limit to patrons added to collections on or after this date (optional). end_date -- ISO 8601 date. limit to patrons added to collections on or before this date (optional). - user_id -- retrieve information only for this user (takes preference over + user_id -- retrieve information only for this user (takes preference over start and end_date). May be a single ID or list of IDs. (optional). include_xacts -- If true, include a summary object per transaction in addition to the full balance owed /, type => q/hash/ }, ], - 'return' => { + 'return' => { desc => q/ - The file name prefix of the file to be created. + The file name prefix of the file to be created. The file name format will be: user_balance_YYYY-MM-DD_${location}_${start_date}_${end_date}_${user_id}.[tmp|xml] Optional params not provided by the caller will not be part of the file name. @@ -845,8 +845,8 @@ sub user_balance_summary { my $end_date = $$args{end_date}; my $user_id = $$args{user_id}; - return OpenILS::Event->new('BAD_PARAMS') - unless $auth and $location and + return OpenILS::Event->new('BAD_PARAMS') + unless $auth and $location and ($start_date or $end_date or $user_id); my $e = new_editor(authtoken => $auth); @@ -856,7 +856,7 @@ sub user_balance_summary { or return $e->event; # they need global perms to view users so no org is provided - return $e->event unless $e->allowed('VIEW_USER', $org->id); + return $e->event unless $e->allowed('VIEW_USER', $org->id); my $org_list = $U->get_org_descendants($org->id); @@ -885,24 +885,24 @@ sub user_balance_summary { } print $FILE "<Collections>\n"; # append to the document as we have data - + for my $user_id (@user_list) { my $user_doc = XML::LibXML::Document->new; my $root = $user_doc->createElement('User'); $user_doc->setDocumentElement($root); my $user = $e->retrieve_actor_user([ - $user_id, { + $user_id, { flesh => 1, flesh_fields => { au => [ 'card', - 'cards', - 'standing_penalties', - 'addresses', - 'billing_address', - 'mailing_address', - 'stat_cat_entries' + 'cards', + 'standing_penalties', + 'addresses', + 'billing_address', + 'mailing_address', + 'stat_cat_entries' ] }} ]); @@ -930,11 +930,11 @@ sub user_balance_summary { # get the sum owed an all transactions my $balance = $e->json_query({ select => {mbts => [ - { column => 'balance_owed', - transform => 'sum', + { column => 'balance_owed', + transform => 'sum', aggregate => 1 } - ]}, + ]}, from => 'mbts', where => {id => [@$circ_ids, @$groc_ids, @$res_ids]} })->[0]; @@ -942,7 +942,7 @@ sub user_balance_summary { $balance = $balance ? $balance->{balance_owed} : '0'; my $xacts_node = $user_doc->createElement('Transactions'); - my $balance_node = $user_doc->createElement('BalanceOwed'); + my $balance_node = $user_doc->createElement('BalanceOwed'); $balance_node->appendChild($user_doc->createTextNode($balance)); $xacts_node->appendChild($balance_node); $root->appendChild($xacts_node); @@ -985,7 +985,7 @@ sub setup_batch_file { my $user_id = $$args{user_id}; my $conf = OpenSRF::Utils::SettingsClient->new; - my $dir_name = $conf->config_value(apps => + my $dir_name = $conf->config_value(apps => 'open-ils.collections' => app_settings => 'batch_file_dir'); if (!$dir_name) { @@ -1018,179 +1018,179 @@ sub setup_batch_file { } sub flesh_payment { - my $e = shift; - my $p = shift; - my $type = $p->payment_type; - $logger->debug("collect: fleshing workstation on payment $type : ".$p->id); - my $meth = "retrieve_money_$type"; - $p = $e->$meth($p->id) or return (undef, $e->event); - try { - $p->payment_type($type); - $p->cash_drawer( - $e->retrieve_actor_workstation( - [ - $p->cash_drawer, - { - flesh => 1, - flesh_fields => { aws => [ 'owning_lib' ] } - } - ] - ) - ); - } catch Error with {}; - return ($p); + my $e = shift; + my $p = shift; + my $type = $p->payment_type; + $logger->debug("collect: fleshing workstation on payment $type : ".$p->id); + my $meth = "retrieve_money_$type"; + $p = $e->$meth($p->id) or return (undef, $e->event); + try { + $p->payment_type($type); + $p->cash_drawer( + $e->retrieve_actor_workstation( + [ + $p->cash_drawer, + { + flesh => 1, + flesh_fields => { aws => [ 'owning_lib' ] } + } + ] + ) + ); + } catch Error with {}; + return ($p); } # -------------------------------------------------------------- -# Collect all open circs for the user +# Collect all open circs for the user # For each circ, see if any billings or payments were created -# during the given time period. +# during the given time period. # -------------------------------------------------------------- sub fetch_circ_xacts { - my $e = shift; - my $uid = shift; - my $org = shift; - my $start_date = shift; - my $end_date = shift; - - my @circs; - - # at the specified org and each descendent org, - # fetch the open circs for this user - $U->walk_org_tree( $org, - sub { - my $n = shift; - $logger->debug("collect: searching for open circs at " . $n->shortname); - push( @circs, - @{ - $e->search_action_circulation( - { - usr => $uid, - circ_lib => $n->id, - }, - {idlist => 1} - ) - } - ); - } - ); - - - my @data; - my $active_ids = fetch_active($e, \@circs, $start_date, $end_date); - - for my $cid (@$active_ids) { - push( @data, - $e->retrieve_action_circulation( - [ - $cid, - { - flesh => 1, - flesh_fields => { - circ => [ "billings", "payments", "circ_lib", 'target_copy' ] - } - } - ] - ) - ); - } - - return \@data; + my $e = shift; + my $uid = shift; + my $org = shift; + my $start_date = shift; + my $end_date = shift; + + my @circs; + + # at the specified org and each descendent org, + # fetch the open circs for this user + $U->walk_org_tree( $org, + sub { + my $n = shift; + $logger->debug("collect: searching for open circs at " . $n->shortname); + push( @circs, + @{ + $e->search_action_circulation( + { + usr => $uid, + circ_lib => $n->id, + }, + {idlist => 1} + ) + } + ); + } + ); + + + my @data; + my $active_ids = fetch_active($e, \@circs, $start_date, $end_date); + + for my $cid (@$active_ids) { + push( @data, + $e->retrieve_action_circulation( + [ + $cid, + { + flesh => 1, + flesh_fields => { + circ => [ "billings", "payments", "circ_lib", 'target_copy' ] + } + } + ] + ) + ); + } + + return \@data; } sub fetch_grocery_xacts { - my $e = shift; - my $uid = shift; - my $org = shift; - my $start_date = shift; - my $end_date = shift; - - my @xacts; - $U->walk_org_tree( $org, - sub { - my $n = shift; - $logger->debug("collect: searching for open grocery xacts at " . $n->shortname); - push( @xacts, - @{ - $e->search_money_grocery( - { - usr => $uid, - billing_location => $n->id, - }, - {idlist => 1} - ) - } - ); - } - ); - - my @data; - my $active_ids = fetch_active($e, \@xacts, $start_date, $end_date); - - for my $id (@$active_ids) { - push( @data, - $e->retrieve_money_grocery( - [ - $id, - { - flesh => 1, - flesh_fields => { - mg => [ "billings", "payments", "billing_location" ] } - } - ] - ) - ); - } - - return \@data; + my $e = shift; + my $uid = shift; + my $org = shift; + my $start_date = shift; + my $end_date = shift; + + my @xacts; + $U->walk_org_tree( $org, + sub { + my $n = shift; + $logger->debug("collect: searching for open grocery xacts at " . $n->shortname); + push( @xacts, + @{ + $e->search_money_grocery( + { + usr => $uid, + billing_location => $n->id, + }, + {idlist => 1} + ) + } + ); + } + ); + + my @data; + my $active_ids = fetch_active($e, \@xacts, $start_date, $end_date); + + for my $id (@$active_ids) { + push( @data, + $e->retrieve_money_grocery( + [ + $id, + { + flesh => 1, + flesh_fields => { + mg => [ "billings", "payments", "billing_location" ] } + } + ] + ) + ); + } + + return \@data; } sub fetch_reservation_xacts { - my $e = shift; - my $uid = shift; - my $org = shift; - my $start_date = shift; - my $end_date = shift; - - my @xacts; - $U->walk_org_tree( $org, - sub { - my $n = shift; - $logger->debug("collect: searching for open grocery xacts at " . $n->shortname); - push( @xacts, - @{ - $e->search_booking_reservation( - { - usr => $uid, - pickup_lib => $n->id, - }, - {idlist => 1} - ) - } - ); - } - ); - - my @data; - my $active_ids = fetch_active($e, \@xacts, $start_date, $end_date); - - for my $id (@$active_ids) { - push( @data, - $e->retrieve_booking_reservation( - [ - $id, - { - flesh => 1, - flesh_fields => { - bresv => [ "billings", "payments", "pickup_lib" ] } - } - ] - ) - ); - } - - return \@data; + my $e = shift; + my $uid = shift; + my $org = shift; + my $start_date = shift; + my $end_date = shift; + + my @xacts; + $U->walk_org_tree( $org, + sub { + my $n = shift; + $logger->debug("collect: searching for open grocery xacts at " . $n->shortname); + push( @xacts, + @{ + $e->search_booking_reservation( + { + usr => $uid, + pickup_lib => $n->id, + }, + {idlist => 1} + ) + } + ); + } + ); + + my @data; + my $active_ids = fetch_active($e, \@xacts, $start_date, $end_date); + + for my $id (@$active_ids) { + push( @data, + $e->retrieve_booking_reservation( + [ + $id, + { + flesh => 1, + flesh_fields => { + bresv => [ "billings", "payments", "pickup_lib" ] } + } + ] + ) + ); + } + + return \@data; } @@ -1200,103 +1200,103 @@ sub fetch_reservation_xacts { # had any activity within the given time span # -------------------------------------------------------------- sub fetch_active { - my( $e, $ids, $start_date, $end_date ) = @_; + my( $e, $ids, $start_date, $end_date ) = @_; - # use this.. - # { payment_ts => { between => [ $start, $end ] } } ' ;) + # use this.. + # { payment_ts => { between => [ $start, $end ] } } ' ;) - my @active; - for my $id (@$ids) { + my @active; + for my $id (@$ids) { - # see if any billings were created in the given time range - my $bills = $e->search_money_billing ( - { - xact => $id, - billing_ts => { between => [ $start_date, $end_date ] }, - }, - {idlist =>1} - ); + # see if any billings were created in the given time range + my $bills = $e->search_money_billing ( + { + xact => $id, + billing_ts => { between => [ $start_date, $end_date ] }, + }, + {idlist =>1} + ); - my $payments = []; + my $payments = []; - if( !@$bills ) { + if( !@$bills ) { - # see if any payments were created in the given range - $payments = $e->search_money_payment ( - { - xact => $id, - payment_ts => { between => [ $start_date, $end_date ] }, - }, - {idlist =>1} - ); - } + # see if any payments were created in the given range + $payments = $e->search_money_payment ( + { + xact => $id, + payment_ts => { between => [ $start_date, $end_date ] }, + }, + {idlist =>1} + ); + } - push( @active, $id ) if @$bills or @$payments; - } + push( @active, $id ) if @$bills or @$payments; + } - return \@active; + return \@active; } __PACKAGE__->register_method( - method => 'create_user_note', - api_name => 'open-ils.collections.patron_note.create', - api_level => 1, - argc => 4, - signature => { - desc => q/ Adds a note to a patron's account /, - params => [ - { name => 'auth', - desc => 'The authentication token', - type => 'string' }, - - { name => 'user_barcode', - desc => q/The patron's barcode/, - type => q/string/, - }, - { name => 'title', - desc => q/The title of the note/, - type => q/string/, - }, - - { name => 'note', - desc => q/The text of the note/, - type => q/string/, - }, - ], - - 'return' => { - desc => q/ - Returns SUCCESS event on success, error event otherwise. - /, - type => 'object' - } - } + method => 'create_user_note', + api_name => 'open-ils.collections.patron_note.create', + api_level => 1, + argc => 4, + signature => { + desc => q/ Adds a note to a patron's account /, + params => [ + { name => 'auth', + desc => 'The authentication token', + type => 'string' }, + + { name => 'user_barcode', + desc => q/The patron's barcode/, + type => q/string/, + }, + { name => 'title', + desc => q/The title of the note/, + type => q/string/, + }, + + { name => 'note', + desc => q/The text of the note/, + type => q/string/, + }, + ], + + 'return' => { + desc => q/ + Returns SUCCESS event on success, error event otherwise. + /, + type => 'object' + } + } ); sub create_user_note { - my( $self, $conn, $auth, $user_barcode, $title, $note_txt ) = @_; - - my $e = new_editor(authtoken=>$auth, xact=>1); - return $e->event unless $e->checkauth; - return $e->event unless $e->allowed('UPDATE_USER'); # XXX Makre more specific perm for this - - return $e->event unless - my $card = $e->search_actor_card({barcode=>$user_barcode})->[0]; - - my $note = Fieldmapper::actor::usr_note->new; - $note->usr($card->usr); - $note->title($title); - $note->creator($e->requestor->id); - $note->create_date('now'); - $note->pub('f'); - $note->value($note_txt); - - $e->create_actor_usr_note($note) or return $e->event; - $e->commit; - return OpenILS::Event->new('SUCCESS'); + my( $self, $conn, $auth, $user_barcode, $title, $note_txt ) = @_; + + my $e = new_editor(authtoken=>$auth, xact=>1); + return $e->event unless $e->checkauth; + return $e->event unless $e->allowed('UPDATE_USER'); # XXX Makre more specific perm for this + + return $e->event unless + my $card = $e->search_actor_card({barcode=>$user_barcode})->[0]; + + my $note = Fieldmapper::actor::usr_note->new; + $note->usr($card->usr); + $note->title($title); + $note->creator($e->requestor->id); + $note->create_date('now'); + $note->pub('f'); + $note->value($note_txt); + + $e->create_actor_usr_note($note) or return $e->event; + $e->commit; + return OpenILS::Event->new('SUCCESS'); } -- 2.11.0