action::hold_notification->has_a( hold => 'action::hold_request' );
+ action::hold_copy_map->has_a( hold => 'action::hold_request' );
+ action::hold_copy_map->has_a( copy => 'asset::copy' );
+
action::hold_request->has_a( current_copy => 'asset::copy' );
action::hold_request->has_a( requestor => 'actor::user' );
action::hold_request->has_a( usr => 'actor::user' );
action::hold_request->has_a( pickup_lib => 'actor::org_unit' );
action::hold_request->has_many( notifications => 'action::hold_notification' );
+ action::hold_request->has_many( copy_maps => 'action::hold_copy_map' );
+
+ asset::copy->has_many( hold_maps => 'action::hold_copy_map' );
1;
__PACKAGE__->columns(Essential => qw/request_time capture_time fulfillment_time
prev_check_time expire_time requestor usr
hold_type holdable_formats target
- selection_depth pickup_lib current_copy/);
+ phone_notify email_notify selection_depth
+ pickup_lib current_copy/);
#-------------------------------------------------------------------------------
#-------------------------------------------------------------------------------
+package action::hold_copy_map;
+use base qw/action/;
+__PACKAGE__->table('action_hold_copy_map');
+__PACKAGE__->columns(Primary => 'id');
+__PACKAGE__->columns(Essential => qw/hold copy/);
+
+#-------------------------------------------------------------------------------
+
1;
#-------------------------------------------------------------------------------
+ package action::hold_copy_map;
+
+ action::hold_copy_map->sequence( 'action.hold_copy_map_id_seq' );
+ action::hold_copy_map->table('action.hold_copy_map');
+
+ #-------------------------------------------------------------------------------
+
}
'Fieldmapper::permission::grp_perm_map' => { hint => 'pgpm' },
'Fieldmapper::action::hold_request' => { hint => 'ahr' },
'Fieldmapper::action::hold_notification' => { hint => 'ahn' },
+ 'Fieldmapper::action::hold_copy_map' => { hint => 'ahcm' },
'Fieldmapper::ex' => { hint => 'ex',
usr INT NOT NULL REFERENCES actor.usr (id),
hold_type CHAR NOT NULL CHECK (hold_type IN ('M','T','V','C')),
holdable_formats TEXT,
+ phone_notify TEXT,
+ email_notify TEXT,
target BIGINT NOT NULL, -- see hold_type
selection_depth INT NOT NULL DEFAULT 0,
pickup_lib INT NOT NULL REFERENCES actor.org_unit,
note TEXT
);
+CREATE TABLE action.hold_copy_map (
+ id SERIAL PRIMARY KEY,
+ hold INT NOT NULL REFERENCES action.hold_notification (id) ON DELETE CASCADE,
+ copy BIGINT NOT NULL REFERENCES asset.copy (id) ON DELETE CASCADE,
+ CONSTRAINT copy_once_per_hold UNIQUE (hold,copy)
+);
COMMIT;