Basic fake-delete support for mono parts user/miker/fake-delete-parts
authorMike Rylander <mrylander@gmail.com>
Thu, 7 Jun 2012 18:54:24 +0000 (14:54 -0400)
committerMike Rylander <mrylander@gmail.com>
Thu, 7 Jun 2012 18:54:24 +0000 (14:54 -0400)
Signed-off-by: Mike Rylander <mrylander@gmail.com>
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 88b1b71..e414900 100644 (file)
@@ -2504,6 +2504,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 792f53b..1168b21 100644 (file)
@@ -2103,7 +2103,7 @@ sub basic_opac_copy_query {
                 acpm => {
                     type => 'left',
                     join => {
-                        bmp => { type => 'left' }
+                        bmp => { type => 'left', filter => { deleted => 'f' } }
                     }
                 }
             }
index 82ad1af..8da498d 100644 (file)
@@ -2564,7 +2564,8 @@ sub rec_hold_parts {
                     },
                     distinct => 1,
                 }
-            }
+            },
+            deleted => 'f'
         },
         order_by =>[{class=>'bmp', field=>'label_sortkey'}]
     };
index 24e484c..0a5c5e3 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 d98bb3d..e736123 100644 (file)
@@ -3674,6 +3674,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;
@@ -3701,6 +3704,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 53be2e1..8102f2f 100644 (file)
@@ -21,6 +21,8 @@ BEGIN;
 
 CREATE RULE protect_bib_rec_delete AS ON DELETE TO biblio.record_entry DO INSTEAD (UPDATE biblio.record_entry SET deleted = TRUE WHERE OLD.id = biblio.record_entry.id; DELETE FROM metabib.metarecord_source_map WHERE source = 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 ac33c66..4b6a05b 100644 (file)
@@ -430,7 +430,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
@@ -811,7 +811,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 08fc5c0..6676c6a 100644 (file)
@@ -29,7 +29,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 : {bmp : 'label'}}, {record : cgi.param('r')});
+        monoPartGrid.loadAll({order_by : {bmp : 'label'}}, {deleted : 'f', record : cgi.param('r')});
     });
 </script>
 [% END %]
index 913fef6..da82f18 100644 (file)
@@ -206,7 +206,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 );
 
         /***********************************************************************************************************/