]> git.evergreen-ils.org Git - working/Evergreen.git/blob - Open-ILS/src/sql/Pg/095.schema.booking.sql
add explicit link from resource_type to biblio.record_entry
[working/Evergreen.git] / Open-ILS / src / sql / Pg / 095.schema.booking.sql
1 /*
2  * Copyright (C) 2009  Equinox Software, Inc.
3  * Scott McKellar <scott@esilibrary.com>
4  *
5  * This program is free software; you can redistribute it and/or
6  * modify it under the terms of the GNU General Public License
7  * as published by the Free Software Foundation; either version 2
8  * of the License, or (at your option) any later version.
9  *
10  * This program is distributed in the hope that it will be useful,
11  * but WITHOUT ANY WARRANTY; without even the implied warranty of
12  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
13  * GNU General Public License for more details.
14  *
15  */
16
17 BEGIN;
18
19 DROP SCHEMA IF EXISTS booking CASCADE;
20
21 CREATE SCHEMA booking;
22
23 CREATE TABLE booking.resource_type (
24         id             SERIAL          PRIMARY KEY,
25         name           TEXT            NOT NULL,
26         fine_interval  INTERVAL,
27         fine_amount    DECIMAL(8,2)    NOT NULL DEFAULT 0,
28         owner          INT             NOT NULL
29                                        REFERENCES actor.org_unit( id )
30                                        DEFERRABLE INITIALLY DEFERRED,
31         catalog_item   BOOLEAN         NOT NULL DEFAULT FALSE,
32         transferable   BOOLEAN         NOT NULL DEFAULT FALSE,
33     record         INT             REFERENCES biblio.record_entry (id)
34                                    DEFERRABLE INITIALLY DEFERRED,
35         CONSTRAINT brt_name_once_per_owner UNIQUE(owner, name, record)
36 );
37
38 CREATE TABLE booking.resource (
39         id             SERIAL           PRIMARY KEY,
40         owner          INT              NOT NULL
41                                         REFERENCES actor.org_unit(id)
42                                         DEFERRABLE INITIALLY DEFERRED,
43         type           INT              NOT NULL
44                                         REFERENCES booking.resource_type(id)
45                                         DEFERRABLE INITIALLY DEFERRED,
46         overbook       BOOLEAN          NOT NULL DEFAULT FALSE,
47         barcode        TEXT             NOT NULL,
48         deposit        BOOLEAN          NOT NULL DEFAULT FALSE,
49         deposit_amount DECIMAL(8,2)     NOT NULL DEFAULT 0.00,
50         user_fee       DECIMAL(8,2)     NOT NULL DEFAULT 0.00,
51         CONSTRAINT br_unique UNIQUE(owner, type, barcode)
52 );
53
54 -- For non-catalog items: hijack barcode for name/description
55
56 CREATE TABLE booking.resource_attr (
57         id              SERIAL          PRIMARY KEY,
58         owner           INT             NOT NULL
59                                         REFERENCES actor.org_unit(id)
60                                         DEFERRABLE INITIALLY DEFERRED,
61         name            TEXT            NOT NULL,
62         resource_type   INT             NOT NULL
63                                         REFERENCES booking.resource_type(id)
64                                         ON DELETE CASCADE
65                                         DEFERRABLE INITIALLY DEFERRED,
66         required        BOOLEAN         NOT NULL DEFAULT FALSE,
67         CONSTRAINT bra_name_once_per_type UNIQUE(resource_type, name)
68 );
69
70 CREATE TABLE booking.resource_attr_value (
71         id               SERIAL         PRIMARY KEY,
72         owner            INT            NOT NULL
73                                         REFERENCES actor.org_unit(id)
74                                         DEFERRABLE INITIALLY DEFERRED,
75         attr             INT            NOT NULL
76                                         REFERENCES booking.resource_attr(id)
77                                         DEFERRABLE INITIALLY DEFERRED,
78         valid_value      TEXT           NOT NULL,
79         CONSTRAINT brav_logical_key UNIQUE(owner, attr, valid_value)
80 );
81
82 -- Do we still need a name column?
83
84
85 CREATE TABLE booking.resource_attr_map (
86         id               SERIAL         PRIMARY KEY,
87         resource         INT            NOT NULL
88                                         REFERENCES booking.resource(id)
89                                         ON DELETE CASCADE
90                                         DEFERRABLE INITIALLY DEFERRED,
91         resource_attr    INT            NOT NULL
92                                         REFERENCES booking.resource_attr(id)
93                                         ON DELETE CASCADE
94                                         DEFERRABLE INITIALLY DEFERRED,
95         value            INT            NOT NULL
96                                         REFERENCES booking.resource_attr_value(id)
97                                         DEFERRABLE INITIALLY DEFERRED,
98         CONSTRAINT bram_one_value_per_attr UNIQUE(resource, resource_attr)
99 );
100
101 CREATE TABLE booking.reservation (
102         request_time     TIMESTAMPTZ   NOT NULL DEFAULT now(),
103         start_time       TIMESTAMPTZ,
104         end_time         TIMESTAMPTZ,
105         capture_time     TIMESTAMPTZ,
106         cancel_time      TIMESTAMPTZ,
107         pickup_time      TIMESTAMPTZ,
108         return_time      TIMESTAMPTZ,
109         booking_interval INTERVAL,
110         fine_interval    INTERVAL,
111         fine_amount      DECIMAL(8,2),
112         target_resource_type  INT       NOT NULL
113                                         REFERENCES booking.resource_type(id)
114                                         ON DELETE CASCADE
115                                         DEFERRABLE INITIALLY DEFERRED,
116         target_resource  INT            REFERENCES booking.resource(id)
117                                         ON DELETE CASCADE
118                                         DEFERRABLE INITIALLY DEFERRED,
119         current_resource INT            REFERENCES booking.resource(id)
120                                         ON DELETE CASCADE
121                                         DEFERRABLE INITIALLY DEFERRED,
122         request_lib      INT            NOT NULL
123                                         REFERENCES actor.org_unit(id)
124                                         DEFERRABLE INITIALLY DEFERRED,
125         pickup_lib       INT            REFERENCES actor.org_unit(id)
126                                         DEFERRABLE INITIALLY DEFERRED,
127         capture_staff    INT            REFERENCES actor.usr(id)
128                                         DEFERRABLE INITIALLY DEFERRED
129 ) INHERITS (money.billable_xact);
130
131 ALTER TABLE booking.reservation ADD PRIMARY KEY (id);
132
133 ALTER TABLE booking.reservation
134         ADD CONSTRAINT booking_reservation_usr_fkey
135         FOREIGN KEY (usr) REFERENCES actor.usr (id)
136         DEFERRABLE INITIALLY DEFERRED;
137
138 CREATE TABLE booking.reservation_attr_value_map (
139         id               SERIAL         PRIMARY KEY,
140         reservation      INT            NOT NULL
141                                         REFERENCES booking.reservation(id)
142                                         ON DELETE CASCADE
143                                         DEFERRABLE INITIALLY DEFERRED,
144         attr_value       INT            NOT NULL
145                                         REFERENCES booking.resource_attr_value(id)
146                                         ON DELETE CASCADE
147                                         DEFERRABLE INITIALLY DEFERRED,
148         CONSTRAINT bravm_logical_key UNIQUE(reservation, attr_value)
149 );
150
151 COMMIT;