From: Mike Rylander Date: Wed, 30 Mar 2011 13:34:45 +0000 (-0400) Subject: Merging affix/parts/unified-item-editor from upstream X-Git-Url: https://old-git.evergreen-ils.org/?a=commitdiff_plain;h=5f561390c16f5db53263d96801f3621944a342ce;p=evergreen%2Fequinox.git Merging affix/parts/unified-item-editor from upstream --- 5f561390c16f5db53263d96801f3621944a342ce diff --cc Open-ILS/src/perlmods/lib/OpenILS/Application/Storage/CDBI/biblio.pm index 1cb2e9f4b0,3df2ee5aca..7780cbcb6a --- a/Open-ILS/src/perlmods/lib/OpenILS/Application/Storage/CDBI/biblio.pm +++ b/Open-ILS/src/perlmods/lib/OpenILS/Application/Storage/CDBI/biblio.pm @@@ -23,20 -23,12 +23,28 @@@ biblio::record_note->columns( Essentia #------------------------------------------------------------------------------- #------------------------------------------------------------------------------- +package biblio::peer_type; +use base qw/biblio/; + +biblio::peer_type->table( 'biblio_peer_type' ); +biblio::peer_type->columns( Essential => qw/id name/ ); +#------------------------------------------------------------------------------- + +#------------------------------------------------------------------------------- +package biblio::peer_record_copy_map; +use base qw/biblio/; + +biblio::peer_record_copy_map->table( 'biblio_peer_record_copy_map' ); +biblio::peer_record_copy_map->columns( Essential => qw/id peer_type peer_record target_copy/ ); +#------------------------------------------------------------------------------- + ++#------------------------------------------------------------------------------- + package biblio::monograph_part; + use base qw/biblio/; + + biblio::monograph_part->table( 'biblio_monograph_part' ); + biblio::monograph_part->columns( Essential => qw/id record label label_sortkey/ ); + #------------------------------------------------------------------------------- + 1; diff --cc Open-ILS/src/perlmods/lib/OpenILS/Application/Storage/Driver/Pg/dbi.pm index eadae0f395,623be5fbeb..5c6990ff22 --- a/Open-ILS/src/perlmods/lib/OpenILS/Application/Storage/Driver/Pg/dbi.pm +++ b/Open-ILS/src/perlmods/lib/OpenILS/Application/Storage/Driver/Pg/dbi.pm @@@ -1,18 -1,17 +1,29 @@@ { + #------------------------------------------------------------------------------- + package asset::copy_part_map; + + asset::copy_part_map->table( 'asset.copy_part_map' ); + + #------------------------------------------------------------------------------- + package biblio::monograph_part; + + biblio::monograph_part->table( 'biblio.monograph_part' ); + biblio::monograph_part->sequence( 'biblio.monograph_part_id_seq' ); + #------------------------------------------------------------------------------- + package biblio::peer_record_copy_map; + + biblio::peer_record_copy_map->table( 'biblio.peer_record_copy_map' ); + biblio::peer_record_copy_map->sequence( 'biblio.peer_record_copy_map_id_seq' ); + + #------------------------------------------------------------------------------- + package biblio::peer_type; + + biblio::peer_type->table( 'biblio.peer_type' ); + biblio::peer_type->sequence( 'biblio.peer_type_id_seq' ); + + #------------------------------------------------------------------------------- package container::user_bucket; container::user_bucket->table( 'container.user_bucket' ); diff --cc Open-ILS/src/sql/Pg/010.schema.biblio.sql index 5a4a7f5743,cf404f2f54..b7d20f3675 --- a/Open-ILS/src/sql/Pg/010.schema.biblio.sql +++ b/Open-ILS/src/sql/Pg/010.schema.biblio.sql @@@ -79,16 -79,30 +79,42 @@@ CREATE INDEX biblio_record_note_record_ CREATE INDEX biblio_record_note_creator_idx ON biblio.record_note ( creator ); CREATE INDEX biblio_record_note_editor_idx ON biblio.record_note ( editor ); +CREATE TABLE biblio.peer_type ( + id SERIAL PRIMARY KEY, + name TEXT NOT NULL UNIQUE -- i18n +); + +CREATE TABLE biblio.peer_bib_copy_map ( + id SERIAL PRIMARY KEY, + peer_type INT NOT NULL REFERENCES biblio.peer_type (id), + peer_record BIGINT NOT NULL REFERENCES biblio.record_entry (id), + target_copy BIGINT NOT NULL -- can't use fkey because of acp subtables +); ++======= + CREATE TABLE biblio.monograph_part ( + id SERIAL PRIMARY KEY, + record BIGINT NOT NULL REFERENCES biblio.record_entry (id), + label TEXT NOT NULL, + label_sortkey TEXT NOT NULL, + CONSTRAINT record_label_unique UNIQUE (record,label) + ); + + CREATE OR REPLACE FUNCTION biblio.normalize_biblio_monograph_part_sortkey () RETURNS TRIGGER AS $$ + BEGIN + NEW.label_sortkey := REGEXP_REPLACE( + lpad_number_substrings( + naco_normalize(NEW.label), + '0', + 10 + ), + E'\\s+', + '', + 'g' + ); + RETURN NEW; + END; + $$ LANGUAGE PLPGSQL; + + CREATE TRIGGER norm_sort_label BEFORE INSERT OR UPDATE ON biblio.monograph_part FOR EACH ROW EXECUTE PROCEDURE biblio.normalize_biblio_monograph_part_sortkey(); COMMIT; diff --cc Open-ILS/src/sql/Pg/040.schema.asset.sql index 15397969d2,dbe0c09fb2..5d1e5132c7 --- a/Open-ILS/src/sql/Pg/040.schema.asset.sql +++ b/Open-ILS/src/sql/Pg/040.schema.asset.sql @@@ -91,9 -91,15 +91,16 @@@ CREATE INDEX cp_editor_idx ON asset.c CREATE INDEX cp_create_date ON asset.copy (create_date); CREATE RULE protect_copy_delete AS ON DELETE TO asset.copy DO INSTEAD UPDATE asset.copy SET deleted = TRUE WHERE OLD.id = asset.copy.id; + CREATE TABLE asset.copy_part_map ( + id SERIAL PRIMARY KEY, + target_copy BIGINT NOT NULL, -- points o asset.copy + part INT NOT NULL REFERENCES biblio.monograph_part (id) ON DELETE CASCADE + ); + CREATE UNIQUE INDEX copy_part_map_cp_part_idx ON asset.copy_part_map (target_copy, part); + CREATE TABLE asset.opac_visible_copies ( - id BIGINT primary key, -- copy id + id BIGSERIAL primary key, + copy_id BIGINT, -- copy id record BIGINT, circ_lib INTEGER ); diff --cc Open-ILS/src/sql/Pg/990.schema.unapi.sql index 0d100b8298,f84b3fe782..c76a6c020a --- a/Open-ILS/src/sql/Pg/990.schema.unapi.sql +++ b/Open-ILS/src/sql/Pg/990.schema.unapi.sql @@@ -576,18 -608,17 +619,25 @@@ CREATE OR REPLACE FUNCTION unapi.acp ( XMLELEMENT( name statcats, CASE WHEN ('ascecm' = ANY ($4)) THEN - XMLAGG((SELECT unapi.acpn( stat_cat_entry, 'xml', 'statcat', array_remove_item_by_value($4,'acp'), $5, $6, $7, $8) FROM asset.stat_cat_entry_copy_map WHERE owning_copy = cp.id)) + XMLAGG((SELECT unapi.ascecm( stat_cat_entry, 'xml', 'statcat', array_remove_item_by_value($4,'acp'), $5, $6, $7, $8) FROM asset.stat_cat_entry_copy_map WHERE owning_copy = cp.id)) ELSE NULL END - ) + ), + XMLELEMENT( name foreign_records, + CASE + WHEN ('bre' = ANY ($4)) THEN + XMLAGG((SELECT unapi.bre(peer_bib,'marcxml','record','{}'::TEXT[], $5, $6, $7, $8) FROM biblio.peer_bib_copy_map WHERE target_copy = cp.id)) + ELSE NULL + END, + - ) ++ ), + CASE + WHEN ('bmp' = ANY ($4)) THEN + XMLELEMENT( name monograph_parts, + XMLAGG((SELECT unapi.bmp( part, 'xml', 'monograph_part', array_remove_item_by_value($4,'acp'), $5, $6, $7, $8) FROM asset.copy_part_map WHERE target_copy = cp.id)) + ) + ELSE NULL + END ) FROM asset.copy cp WHERE id = $1