Basic fake-delete support for mono parts
authorMike Rylander <mrylander@gmail.com>
Thu, 7 Jun 2012 18:54:24 +0000 (14:54 -0400)
committerMike Rylander <mrylander@gmail.com>
Thu, 15 Oct 2015 17:38:01 +0000 (13:38 -0400)
Signed-off-by: Mike Rylander <mrylander@gmail.com>
Conflicts:
Open-ILS/src/perlmods/lib/OpenILS/Application/SuperCat.pm
Open-ILS/src/sql/Pg/800.fkeys.sql
Open-ILS/src/templates/conify/global/biblio/monograph_part.tt2

Open-ILS/examples/fm_IDL.xml
Open-ILS/src/perlmods/lib/OpenILS/Application/AppUtils.pm
Open-ILS/src/perlmods/lib/OpenILS/Application/Search/Biblio.pm
Open-ILS/src/perlmods/lib/OpenILS/Application/Storage/CDBI/biblio.pm
Open-ILS/src/perlmods/lib/OpenILS/Application/SuperCat.pm
Open-ILS/src/sql/Pg/010.schema.biblio.sql
Open-ILS/src/sql/Pg/800.fkeys.sql
Open-ILS/src/sql/Pg/990.schema.unapi.sql
Open-ILS/src/templates/conify/global/biblio/monograph_part.tt2
Open-ILS/xul/staff_client/server/cat/volume_copy_creator.js

index 37aab83..8cff802 100644 (file)
@@ -3056,6 +3056,7 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA
                        <field name="record" reporter:datatype="link"/>
                        <field name="label" reporter:datatype="text"/>
                        <field name="label_sortkey" reporter:datatype="text"/>
+                       <field name="deleted" reporter:datatype="bool"/>
                </fields>
                <links>
                        <link field="record" reltype="has_a" key="id" map="" class="bre"/>
index 44449f7..e690a70 100644 (file)
@@ -2033,7 +2033,7 @@ sub basic_opac_copy_query {
                 acpm => {
                     type => 'left',
                     join => {
-                        bmp => { type => 'left' }
+                        bmp => { type => 'left', filter => { deleted => 'f' } }
                     }
                 }
             }
index 5c84493..8de593b 100644 (file)
@@ -2637,7 +2637,8 @@ sub rec_hold_parts {
                     },
                     distinct => 1,
                 }
-            }
+            },
+            deleted => 'f'
         },
         order_by =>[{class=>'bmp', field=>'label_sortkey'}]
     };
index 732dd9a..fde1a04 100644 (file)
@@ -43,7 +43,7 @@ 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/ );
+biblio::monograph_part->columns( Essential => qw/id record label label_sortkey deleted/ );
 #-------------------------------------------------------------------------------
 
 1;
index da7f806..1d94ef3 100644 (file)
@@ -3736,6 +3736,9 @@ sub as_xml {
 package OpenILS::Application::SuperCat::unAPI::acp;
 use base qw/OpenILS::Application::SuperCat::unAPI/;
 
+use OpenILS::Application::AppUtils;
+my $U = "OpenILS::Application::AppUtils";
+
 sub as_xml {
     my $self = shift;
     my $args = shift;
@@ -3763,6 +3766,7 @@ sub as_xml {
     $xml .= "        <monograph_parts>\n";
     if (ref($self->obj->parts) && $self->obj->parts) {
         for my $part ( @{$self->obj->parts} ) {
+            next if $U->is_true($part->deleted);
             $xml .= sprintf('        <monograph_part record="%s" sortkey="%s">%s</monograph_part>',$part->record, $self->escape($part->label_sortkey), $self->escape($part->label));
             $xml .= "\n";
         }
index 4ce54ae..ff0542d 100644 (file)
@@ -98,6 +98,7 @@ CREATE TABLE biblio.monograph_part (
     record          BIGINT  NOT NULL REFERENCES biblio.record_entry (id),
     label           TEXT    NOT NULL,
     label_sortkey   TEXT    NOT NULL,
+    deleted         BOOL    NOT NULL DEFAULT FALSE,
     CONSTRAINT record_label_unique UNIQUE (record,label)
 );
 
index da04275..457f1f3 100644 (file)
@@ -35,6 +35,8 @@ CREATE RULE protect_copy_location_delete AS
         DELETE FROM config.circ_limit_set_copy_loc_map WHERE copy_loc = OLD.id;
     );
     
+CREATE RULE protect_mono_part_delete AS ON DELETE TO biblio.monograph_part DO INSTEAD (UPDATE biblio.monograph_part SET deleted = TRUE WHERE OLD.id = biblio.monograph_part.id);
+
 ALTER TABLE actor.usr ADD CONSTRAINT actor_usr_mailing_address_fkey FOREIGN KEY (mailing_address) REFERENCES actor.usr_address (id) DEFERRABLE INITIALLY DEFERRED;
 ALTER TABLE actor.usr ADD CONSTRAINT actor_usr_billing_address_fkey FOREIGN KEY (billing_address) REFERENCES actor.usr_address (id) DEFERRABLE INITIALLY DEFERRED;
 ALTER TABLE actor.usr ADD CONSTRAINT actor_usr_home_ou_fkey FOREIGN KEY (home_ou) REFERENCES actor.org_unit (id) DEFERRABLE INITIALLY DEFERRED;
index effa2b9..fcc96e4 100644 (file)
@@ -576,7 +576,7 @@ RETURNS XML AS $F$
                             (SELECT XMLAGG(bmp) FROM (
                                 SELECT  unapi.bmp( id, 'xml', 'monograph_part', evergreen.array_remove_item_by_value( evergreen.array_remove_item_by_value($5,'bre'), 'holdings_xml'), $3, $4, $6, $7, FALSE)
                                   FROM  biblio.monograph_part
-                                  WHERE record = $1
+                                  WHERE NOT deleted AND record = $1
                             )x)
                         )
                      ELSE NULL
@@ -957,7 +957,7 @@ CREATE OR REPLACE FUNCTION unapi.bmp ( obj_id BIGINT, format TEXT,  ename TEXT,
                     CASE WHEN ('bre' = ANY ($4)) THEN unapi.bre( record, 'marcxml', 'record', evergreen.array_remove_item_by_value($4,'bmp'), $5, $6, $7, $8, FALSE) ELSE NULL END
                 )
           FROM  biblio.monograph_part
-          WHERE id = $1
+          WHERE NOT deleted AND id = $1
           GROUP BY id, label, label_sortkey, record;
 $F$ LANGUAGE SQL STABLE;
 
index dfc89cc..c1f246a 100644 (file)
@@ -37,7 +37,7 @@
     openils.Util.addOnLoad( function() {
         monoPartGrid.overrideEditWidgets.record = new dijit.form.TextBox({"disabled": true});
         monoPartGrid.overrideEditWidgets.record.shove = { create : cgi.param('r') };
-        monoPartGrid.loadAll({order_by : [{class : 'bmp', field : 'label_sortkey'}]}, {record : cgi.param('r')});
+        monoPartGrid.loadAll({order_by : [{class : 'bmp', field : 'label_sortkey'}]}, {deleted : 'f', record : cgi.param('r')});
     });
 </script>
 [% END %]
index 0b16308..950488f 100644 (file)
@@ -205,7 +205,7 @@ function my_init() {
 
         dojo.require('openils.PermaCrud');
         g.pcrud = new openils.PermaCrud({'authtoken':ses()});
-        g.parts = g.pcrud.search('bmp',{'record':g.doc_id},{'order_by': { 'bmp' : 'label_sortkey' } });
+        g.parts = g.pcrud.search('bmp',{'deleted':'f', 'record':g.doc_id},{'order_by': { 'bmp' : 'label_sortkey' } });
         g.parts_hash = util.functional.convert_object_list_to_hash( g.parts );
 
         /***********************************************************************************************************/