]> git.evergreen-ils.org Git - working/Evergreen.git/blob - Open-ILS/src/sql/Pg/095.schema.booking.sql
Added a GPL notice and a DROP SCHEMA statement.
[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         CONSTRAINT brt_name_once_per_owner UNIQUE(owner, name)
34 );
35
36 CREATE TABLE booking.resource (
37         id             SERIAL           PRIMARY KEY,
38         owner          INT              NOT NULL
39                                         REFERENCES actor.org_unit(id)
40                                         DEFERRABLE INITIALLY DEFERRED,
41         type           INT              NOT NULL
42                                         REFERENCES booking.resource_type(id)
43                                         DEFERRABLE INITIALLY DEFERRED,
44         overbook       BOOLEAN          NOT NULL DEFAULT FALSE,
45         barcode        TEXT             NOT NULL,
46         deposit        BOOLEAN          NOT NULL DEFAULT FALSE,
47         deposit_amount DECIMAL(8,2)     NOT NULL DEFAULT 0.00,
48         user_fee       DECIMAL(8,2)     NOT NULL DEFAULT 0.00,
49         CONSTRAINT br_unique UNIQUE(owner, type, barcode)
50 );
51
52 -- For non-catalog items: hijack barcode for name/description
53
54 CREATE TABLE booking.resource_attr (
55         id              SERIAL          PRIMARY KEY,
56         owner           INT             NOT NULL
57                                         REFERENCES actor.org_unit(id)
58                                         DEFERRABLE INITIALLY DEFERRED,
59         name            TEXT            NOT NULL,
60         resource_type   INT             NOT NULL
61                                         REFERENCES booking.resource_type(id)
62                                         ON DELETE CASCADE
63                                         DEFERRABLE INITIALLY DEFERRED,
64         required        BOOLEAN         NOT NULL DEFAULT FALSE,
65         CONSTRAINT bra_name_once_per_type UNIQUE(resource_type, name)
66 );
67
68 CREATE TABLE booking.resource_attr_value (
69         id               SERIAL         PRIMARY KEY,
70         owner            INT            NOT NULL
71                                         REFERENCES actor.org_unit(id)
72                                         DEFERRABLE INITIALLY DEFERRED,
73         attr             INT            NOT NULL
74                                         REFERENCES booking.resource_attr(id)
75                                         DEFERRABLE INITIALLY DEFERRED,
76         valid_value      TEXT           NOT NULL,
77         CONSTRAINT brav_logical_key UNIQUE(owner, attr, valid_value)
78 );
79
80 -- Do we still need a name column?
81
82
83 CREATE TABLE booking.resource_attr_map (
84         id               SERIAL         PRIMARY KEY,
85         resource         INT            NOT NULL
86                                         REFERENCES booking.resource(id)
87                                         ON DELETE CASCADE
88                                         DEFERRABLE INITIALLY DEFERRED,
89         resource_attr    INT            NOT NULL
90                                         REFERENCES booking.resource_attr(id)
91                                         ON DELETE CASCADE
92                                         DEFERRABLE INITIALLY DEFERRED,
93         value            INT            NOT NULL
94                                         REFERENCES booking.resource_attr_value(id)
95                                         DEFERRABLE INITIALLY DEFERRED,
96         CONSTRAINT bram_one_value_per_attr UNIQUE(resource, resource_attr)
97 );
98
99 CREATE TABLE booking.reservation (
100         request_time     TIMESTAMPTZ   NOT NULL DEFAULT now(),
101         start_time       TIMESTAMPTZ,
102         end_time         TIMESTAMPTZ,
103         capture_time     TIMESTAMPTZ,
104         cancel_time      TIMESTAMPTZ,
105         pickup_time      TIMESTAMPTZ,
106         return_time      TIMESTAMPTZ,
107         booking_interval INTERVAL,
108         fine_interval    INTERVAL,
109         fine_amount      DECIMAL(8,2),
110         target_resource_type  INT       NOT NULL
111                                         REFERENCES booking.resource_type(id)
112                                         ON DELETE CASCADE
113                                         DEFERRABLE INITIALLY DEFERRED,
114         target_resource  INT            REFERENCES booking.resource(id)
115                                         ON DELETE CASCADE
116                                         DEFERRABLE INITIALLY DEFERRED,
117         current_resource INT            REFERENCES booking.resource(id)
118                                         ON DELETE CASCADE
119                                         DEFERRABLE INITIALLY DEFERRED,
120         request_lib      INT            NOT NULL
121                                         REFERENCES actor.org_unit(id)
122                                         DEFERRABLE INITIALLY DEFERRED,
123         pickup_lib       INT            REFERENCES actor.org_unit(id)
124                                         DEFERRABLE INITIALLY DEFERRED,
125         capture_staff    INT            REFERENCES actor.usr(id)
126                                         DEFERRABLE INITIALLY DEFERRED
127 ) INHERITS (money.billable_xact);
128
129 ALTER TABLE booking.reservation ADD PRIMARY KEY (id);
130
131 ALTER TABLE booking.reservation
132         ADD CONSTRAINT booking_reservation_usr_fkey
133         FOREIGN KEY (usr) REFERENCES actor.usr (id)
134         DEFERRABLE INITIALLY DEFERRED;
135
136 CREATE TABLE booking.reservation_attr_value_map (
137         id               SERIAL         PRIMARY KEY,
138         reservation      INT            NOT NULL
139                                         REFERENCES booking.reservation(id)
140                                         ON DELETE CASCADE
141                                         DEFERRABLE INITIALLY DEFERRED,
142         attr_value       INT            NOT NULL
143                                         REFERENCES booking.resource_attr_value(id)
144                                         ON DELETE CASCADE
145                                         DEFERRABLE INITIALLY DEFERRED,
146         CONSTRAINT bravm_logical_key UNIQUE(reservation, attr_value)
147 );
148
149 COMMIT;