From c3e023ba984a70b6badb645ffe87a25293b2cf2a Mon Sep 17 00:00:00 2001 From: miker Date: Thu, 21 Jan 2010 16:43:04 +0000 Subject: [PATCH] Patch from Dan Wells to address a thinko in the use of the queue ownership field for a Vandelay queue: I have been doing a lot of experimenting with Vandelay the last few weeks and have traced many of my failures to one distinct bug. I finally noticed yesterday why Item Import worked for the 'admin' user but for nobody else. It turns out there is a bug in one of the database functions where it treats the queue 'owner' column as an org_unit ID when in fact it is a usr id. Of course since 'admin' is ID 1 out of the box and there is an org_unit 1 as well, this bug is transparent to admin and easy to miss. Well, I started by making a few changes to the function to address this, but soon realized that what we really wanted to do was base the import on the Import Def chosen by the user when the records are loaded, and it would be ideal if the Import Def was somehow associated with the queue at the time of import. I started poking around in the schema, and lo and behold, the vandelay.bib_queue table already had an 'item_attr_def' linking column for this very purpose which was going unused! So, the attached patch finally puts this column to use by doing the following: 1) Edits the create_bib_queue() sub in Vandelay.pm to accept the item import attribute definition ID as an argument and save it appropriately. 2) Edits the vandelay.js interface file to accept and send the import definition ID to create_bib_queue() when creating a queue. 3) Edits fm_IDL.xml to add the 'item_attr_def' field (and fix a small labeling error). 4) Edits 012.schema.vandelay.sql to replace the buggy function that started all this with a now simpler, working version. The change is actually smaller than it looks due removing one nested loop and the resulting indentation change. ============================================= Developer's Certificate of Origin 1.1 By making a contribution to this project, I certify that: (a) The contribution was created in whole or in part by me and I have the right to submit it under the open source license indicated in the file; or (b) The contribution is based upon previous work that, to the best of my knowledge, is covered under an appropriate open source license and I have the right under that license to submit that work with modifications, whether created in whole or in part by me, under the same open source license (unless I am permitted to submit under a different license), as indicated in the file; or (c) The contribution was provided directly to me by some other person who certified (a), (b) or (c) and I have not modified it. (d) I understand and agree that this project and the contribution are public and that a record of the contribution (including all personal information I submit with it, including my sign-off) is maintained indefinitely and may be redistributed consistent with this project or the open source license(s) involved. Signed-off-by: Daniel B. Wells ============================================= git-svn-id: svn://svn.open-ils.org/ILS/trunk@15353 dcc99617-32d9-48b4-a31d-7c20da2025e4 --- Open-ILS/examples/fm_IDL.xml | 4 +- .../src/perlmods/OpenILS/Application/Vandelay.pm | 4 +- Open-ILS/src/sql/Pg/002.schema.config.sql | 2 +- Open-ILS/src/sql/Pg/012.schema.vandelay.sql | 101 ++++++++++----------- Open-ILS/web/js/ui/default/vandelay/vandelay.js | 6 +- 5 files changed, 59 insertions(+), 58 deletions(-) diff --git a/Open-ILS/examples/fm_IDL.xml b/Open-ILS/examples/fm_IDL.xml index 52aae41bcf..222fbbb447 100644 --- a/Open-ILS/examples/fm_IDL.xml +++ b/Open-ILS/examples/fm_IDL.xml @@ -149,7 +149,7 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA - + @@ -243,9 +243,11 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA + + diff --git a/Open-ILS/src/perlmods/OpenILS/Application/Vandelay.pm b/Open-ILS/src/perlmods/OpenILS/Application/Vandelay.pm index 01035070cd..29509bf9d8 100644 --- a/Open-ILS/src/perlmods/OpenILS/Application/Vandelay.pm +++ b/Open-ILS/src/perlmods/OpenILS/Application/Vandelay.pm @@ -36,6 +36,7 @@ sub create_bib_queue { my $name = shift; my $owner = shift; my $type = shift; + my $import_def = shift; my $e = new_editor(authtoken => $auth, xact => 1); @@ -51,6 +52,7 @@ sub create_bib_queue { $queue->name( $name ); $queue->owner( $owner ); $queue->queue_type( $type ) if ($type); + $queue->item_attr_def( $import_def ) if ($import_def); my $new_q = $e->create_vandelay_bib_queue( $queue ); return $e->die_event unless ($new_q); @@ -62,7 +64,7 @@ __PACKAGE__->register_method( api_name => "open-ils.vandelay.bib_queue.create", method => "create_bib_queue", api_level => 1, - argc => 3, + argc => 4, ); diff --git a/Open-ILS/src/sql/Pg/002.schema.config.sql b/Open-ILS/src/sql/Pg/002.schema.config.sql index 60d97bd28b..343cd9b178 100644 --- a/Open-ILS/src/sql/Pg/002.schema.config.sql +++ b/Open-ILS/src/sql/Pg/002.schema.config.sql @@ -51,7 +51,7 @@ CREATE TABLE config.upgrade_log ( install_date TIMESTAMP WITH TIME ZONE NOT NULL DEFAULT NOW() ); -INSERT INTO config.upgrade_log (version) VALUES ('0138'); -- dbs +INSERT INTO config.upgrade_log (version) VALUES ('0139'); -- Dan Wells via miker CREATE TABLE config.bib_source ( id SERIAL PRIMARY KEY, diff --git a/Open-ILS/src/sql/Pg/012.schema.vandelay.sql b/Open-ILS/src/sql/Pg/012.schema.vandelay.sql index 47f5545422..e1083fc972 100644 --- a/Open-ILS/src/sql/Pg/012.schema.vandelay.sql +++ b/Open-ILS/src/sql/Pg/012.schema.vandelay.sql @@ -432,61 +432,58 @@ $$ LANGUAGE PLPGSQL; CREATE OR REPLACE FUNCTION vandelay.ingest_bib_items ( ) RETURNS TRIGGER AS $func$ DECLARE - queue_rec RECORD; - item_rule RECORD; + attr_def BIGINT; item_data vandelay.import_item%ROWTYPE; BEGIN - SELECT * INTO queue_rec FROM vandelay.bib_queue WHERE id = NEW.queue; - - FOR item_rule IN SELECT r.* FROM actor.org_unit_ancestors( queue_rec.owner ) o JOIN vandelay.import_item_attr_definition r ON ( r.owner = o.id ) LOOP - FOR item_data IN SELECT * FROM vandelay.ingest_items( NEW.id::BIGINT, item_rule.id::BIGINT ) LOOP - INSERT INTO vandelay.import_item ( - record, - definition, - owning_lib, - circ_lib, - call_number, - copy_number, - status, - location, - circulate, - deposit, - deposit_amount, - ref, - holdable, - price, - barcode, - circ_modifier, - circ_as_type, - alert_message, - pub_note, - priv_note, - opac_visible - ) VALUES ( - NEW.id, - item_data.definition, - item_data.owning_lib, - item_data.circ_lib, - item_data.call_number, - item_data.copy_number, - item_data.status, - item_data.location, - item_data.circulate, - item_data.deposit, - item_data.deposit_amount, - item_data.ref, - item_data.holdable, - item_data.price, - item_data.barcode, - item_data.circ_modifier, - item_data.circ_as_type, - item_data.alert_message, - item_data.pub_note, - item_data.priv_note, - item_data.opac_visible - ); - END LOOP; + SELECT item_attr_def INTO attr_def FROM vandelay.bib_queue WHERE id = NEW.queue; + + FOR item_data IN SELECT * FROM vandelay.ingest_items( NEW.id::BIGINT, attr_def ) LOOP + INSERT INTO vandelay.import_item ( + record, + definition, + owning_lib, + circ_lib, + call_number, + copy_number, + status, + location, + circulate, + deposit, + deposit_amount, + ref, + holdable, + price, + barcode, + circ_modifier, + circ_as_type, + alert_message, + pub_note, + priv_note, + opac_visible + ) VALUES ( + NEW.id, + item_data.definition, + item_data.owning_lib, + item_data.circ_lib, + item_data.call_number, + item_data.copy_number, + item_data.status, + item_data.location, + item_data.circulate, + item_data.deposit, + item_data.deposit_amount, + item_data.ref, + item_data.holdable, + item_data.price, + item_data.barcode, + item_data.circ_modifier, + item_data.circ_as_type, + item_data.alert_message, + item_data.pub_note, + item_data.priv_note, + item_data.opac_visible + ); END LOOP; RETURN NULL; diff --git a/Open-ILS/web/js/ui/default/vandelay/vandelay.js b/Open-ILS/web/js/ui/default/vandelay/vandelay.js index 262b4fca3e..cb0b2ff02d 100644 --- a/Open-ILS/web/js/ui/default/vandelay/vandelay.js +++ b/Open-ILS/web/js/ui/default/vandelay/vandelay.js @@ -287,13 +287,13 @@ function uploadMARC(onload){ /** * Creates a new vandelay queue */ -function createQueue(queueName, type, onload) { +function createQueue(queueName, type, onload, importDefId) { var name = (type=='bib') ? 'bib' : 'authority'; var method = 'open-ils.vandelay.'+ name +'_queue.create' fieldmapper.standardRequest( ['open-ils.vandelay', method], { async: true, - params: [authtoken, queueName, null, name], + params: [authtoken, queueName, null, name, importDefId], oncomplete : function(r) { var queue = r.recv().content(); if(e = openils.Event.parse(queue)) @@ -899,7 +899,7 @@ function batchUpload() { currentQueueId = vlUploadQueueSelector.getValue(); uploadMARC(handleUploadMARC); } else { - createQueue(queueName, currentType, handleCreateQueue); + createQueue(queueName, currentType, handleCreateQueue, vlUploadQueueHoldingsImportProfile.attr('value')); } } -- 2.11.0