From: Dan Pearl Date: Thu, 4 Sep 2014 19:19:09 +0000 (-0400) Subject: LP#1312699 - Add feature to allow user to edit their checkout history X-Git-Url: https://old-git.evergreen-ils.org/?a=commitdiff_plain;h=d954f554861ab01dbf6901af57808e7bf6828eea;p=working%2FEvergreen.git LP#1312699 - Add feature to allow user to edit their checkout history Signed-off-by: Dan Pearl --- diff --git a/Open-ILS/examples/fm_IDL.xml b/Open-ILS/examples/fm_IDL.xml index 271992458b..8bbe775592 100644 --- a/Open-ILS/examples/fm_IDL.xml +++ b/Open-ILS/examples/fm_IDL.xml @@ -3984,6 +3984,7 @@ SELECT usr, + diff --git a/Open-ILS/src/perlmods/lib/OpenILS/WWW/EGCatLoader/Account.pm b/Open-ILS/src/perlmods/lib/OpenILS/WWW/EGCatLoader/Account.pm index 97364ed746..9a98383d53 100644 --- a/Open-ILS/src/perlmods/lib/OpenILS/WWW/EGCatLoader/Account.pm +++ b/Open-ILS/src/perlmods/lib/OpenILS/WWW/EGCatLoader/Account.pm @@ -1509,6 +1509,10 @@ sub load_myopac_circ_history { my $ctx = $self->ctx; my $limit = $self->cgi->param('limit') || 15; my $offset = $self->cgi->param('offset') || 0; + my $action = $self->cgi->param('action') || ''; + + my $circ_handle_result; + $circ_handle_result = $self->handle_circ_update($action) if $action; $ctx->{circ_history_limit} = $limit; $ctx->{circ_history_offset} = $offset; @@ -1528,7 +1532,35 @@ sub load_myopac_circ_history { }); $ctx->{circs} = $self->fetch_user_circs(1, [map { $_->{id} } @$circ_ids]); - return Apache2::Const::OK; + return defined($circ_handle_result) ? $circ_handle_result : Apache2::Const::OK; +} + +sub handle_circ_update { + my $self = shift; + my $action = shift; + my $circ_ids = shift; + my $e = $self->editor; + my $url; + + my @circ_ids = ($circ_ids) ? @$circ_ids : $self->cgi->param('circ_id'); # for non-_all actions + + my $cstore_ses = OpenSRF::AppSession->create('open-ils.cstore'); + $cstore_ses->connect(); + $cstore_ses->request('open-ils.cstore.transaction.begin')->gather(1); + + if($action =~ /delete/) { + for my $circ_id (@circ_ids) { + my $circ = $cstore_ses->request( + 'open-ils.cstore.direct.action.circulation.retrieve', $circ_id)->gather(1); + $circ->hide_from_usr_history(1); + my $resp = $cstore_ses->request( + 'open-ils.cstore.direct.action.circulation.update', $circ)->gather(1); + } + } + + $cstore_ses->request('open-ils.cstore.transaction.commit')->gather(1); + $cstore_ses->disconnect(); + return undef; } # TODO: action.usr_visible_holds does not return cancelled holds. Should it? diff --git a/Open-ILS/src/sql/Pg/090.schema.action.sql b/Open-ILS/src/sql/Pg/090.schema.action.sql index 0a1c5bf895..e001973b58 100644 --- a/Open-ILS/src/sql/Pg/090.schema.action.sql +++ b/Open-ILS/src/sql/Pg/090.schema.action.sql @@ -147,7 +147,8 @@ CREATE TABLE action.circulation ( ON DELETE SET NULL DEFERRABLE INITIALLY DEFERRED, copy_location INT NOT NULL DEFAULT 1 REFERENCES asset.copy_location (id) DEFERRABLE INITIALLY DEFERRED, - checkin_scan_time TIMESTAMP WITH TIME ZONE + checkin_scan_time TIMESTAMP WITH TIME ZONE, + hide_from_usr_history BOOL NOT NULL DEFAULT FALSE ) INHERITS (money.billable_xact); ALTER TABLE action.circulation ADD PRIMARY KEY (id); ALTER TABLE action.circulation @@ -910,6 +911,7 @@ BEGIN WHERE usr = usr_id AND parent_circ IS NULL AND xact_start > NOW() - view_age + AND NOT hide_from_usr_history ORDER BY xact_start DESC LOOP RETURN NEXT c; diff --git a/Open-ILS/src/sql/Pg/upgrade/XXXX.editable_usr_circ_history.sql b/Open-ILS/src/sql/Pg/upgrade/XXXX.editable_usr_circ_history.sql new file mode 100644 index 0000000000..f8bf2be96a --- /dev/null +++ b/Open-ILS/src/sql/Pg/upgrade/XXXX.editable_usr_circ_history.sql @@ -0,0 +1,54 @@ +BEGIN; + +ALTER TABLE action.circulation + ADD COLUMN hide_from_usr_history boolean not null default false; + +COMMIT; + +BEGIN; + +CREATE OR REPLACE FUNCTION action.usr_visible_circs(usr_id integer) + RETURNS SETOF action.circulation + LANGUAGE plpgsql +AS $function$ +DECLARE + c action.circulation%ROWTYPE; + view_age INTERVAL; + usr_view_age actor.usr_setting%ROWTYPE; + usr_view_start actor.usr_setting%ROWTYPE; +BEGIN + SELECT * INTO usr_view_age FROM actor.usr_setting WHERE usr = usr_id AND name = 'history.circ.retention_age'; + SELECT * INTO usr_view_start FROM actor.usr_setting WHERE usr = usr_id AND name = 'history.circ.retention_start'; + + IF usr_view_age.value IS NOT NULL AND usr_view_start.value IS NOT NULL THEN + -- User opted in and supplied a retention age + IF oils_json_to_text(usr_view_age.value)::INTERVAL > AGE(NOW(), oils_json_to_text(usr_view_start.value)::TIMESTAMPTZ) THEN + view_age := AGE(NOW(), oils_json_to_text(usr_view_start.value)::TIMESTAMPTZ); + ELSE + view_age := oils_json_to_text(usr_view_age.value)::INTERVAL; + END IF; + ELSIF usr_view_start.value IS NOT NULL THEN + -- User opted in + view_age := AGE(NOW(), oils_json_to_text(usr_view_start.value)::TIMESTAMPTZ); + ELSE + -- User did not opt in + RETURN; + END IF; + + FOR c IN + SELECT * + FROM action.circulation + WHERE usr = usr_id + AND parent_circ IS NULL + AND xact_start > NOW() - view_age + AND NOT hide_from_usr_history + ORDER BY xact_start DESC + LOOP +ETURN NEXT c; + END LOOP; + + RETURN; +END; +$function$ + +COMMIT; diff --git a/Open-ILS/src/templates/opac/myopac/circ_history.tt2 b/Open-ILS/src/templates/opac/myopac/circ_history.tt2 index 4775b934e1..a5e99c3070 100644 --- a/Open-ILS/src/templates/opac/myopac/circ_history.tt2 +++ b/Open-ILS/src/templates/opac/myopac/circ_history.tt2 @@ -45,9 +45,35 @@
[% l('There are no items in your circulation history.') %]
[% ELSE %] +
+ + + + + + +
+ + + +
+ @@ -61,6 +87,9 @@ [% FOR circ IN ctx.circs; attrs = {marc_xml => circ.marc_xml}; + PROCESS get_marc_attrs args=attrs; %] + [% END %] diff --git a/docs/RELEASE_NOTES_NEXT/OPAC/edit_circ_history b/docs/RELEASE_NOTES_NEXT/OPAC/edit_circ_history new file mode 100644 index 0000000000..ea4c60cd93 --- /dev/null +++ b/docs/RELEASE_NOTES_NEXT/OPAC/edit_circ_history @@ -0,0 +1,10 @@ +Editable Borrowing History +^^^^^^^^^^^^^^^^^^^^^^^^^^ +You can delete titles that you do not wish to appear in your Check Out History. + + * In "My Account", click on the "Items Checked Out" tab, then the "Check Out History" sub-tab. + * Check off the items you wish to conceal. + * Click the Go button next to the "Delete Selected Titles" drop-down box. + * Click OK in the pop-up to confirm your deletion. Choose carefully, as there is no "undo". + +Deleted titles will also not appear in the downloaded CSV file.
+ +
[% l('Title / Author') %]
+ +
@@ -90,6 +119,7 @@ [% circ.circ.target_copy.barcode | html %] [% circ.circ.target_copy.call_number.label | html %]