b6e08575d5e3c120cf5e3f2d261edad1efa91d1e
[Evergreen.git] / Evergreen / src / extras / import / legacy_circ.sql
1 BEGIN;
2
3 CREATE TABLE legacy_lib_max_fine (lib text, max_fine numeric(6,2)); 
4 COPY legacy_lib_max_fine (lib, max_fine) FROM STDIN;
5 CHRLS   10.00   
6 FRRLS   10.00           
7 HCLS    10.00                   
8 OCRL    10.00                   
9 OHOOP   10.00   
10 OKRL    10.00   
11 PPL     10.00   
12 PMRLS   10.00   
13 STRL    10.00   
14 DTRL    100.00
15 SJRL    100.00
16 ARL     100.00  
17 ECGRL   100.00  
18 \.
19
20 CREATE TABLE legacy_type_circ_map (lib text, max_fine numeric(6,2), renewals int);
21 COPY legacy_type_circ_map (item_type, recuring_fine, renewals) FROM STDIN;
22 ART     0.10    0
23 ATLAS   0.50    2
24 AUDIOBOOK       0.50    2
25 AV      0.50    2
26 BESTSELLER      0.50    2
27 BOOK    0.10    2
28 CD      0.10    2
29 COMPUTER        0.10    2
30 DATALOAD        0.10    2
31 DEPOSIT 0.10    2
32 DVD     0.50    0
33 DVD-LONG        0.10    2
34 E-AUDIO 0.50    1
35 E-BOOK  0.50    1
36 EQUIP-LONG      0.50    0
37 EQUIPMENT       0.50    1
38 FACBESTSLR      0.10    2
39 FACNEWBK        0.10    2
40 FILMSTRIP       0.10    2
41 ILL-ITEM        0.50    0
42 INTERNET        0.10    1
43 KIT     0.10    2
44 LASERDISC       0.50    0
45 LIBRARYUSE      0.10    2
46 MAG-CIRC        0.10    2
47 MAG-NOCIRC      0.10    2
48 MAP     0.50    1
49 MICROFORM       0.10    2
50 MUSIC   0.10    2
51 NEW-AV  0.50    1
52 NEW-BOOK        0.10    2
53 NEWSPAPER       0.10    2
54 NILS-ITEM       0.10    2
55 OUTREACH        0.10    2
56 PAMPHLET        0.10    2
57 PAPERBACK       0.10    2
58 REALIA  0.10    2
59 RECORD  0.10    2
60 REFERENCE       0.00    0
61 RESERVE 0.00    0
62 ROOM    0.00    0
63 ROOMSATELL      0.00    0
64 SOFTWARE        0.10    2
65 SOFTWRLONG      0.10    2
66 STATE-BOOK      0.10    1
67 STATE-MFRM      0.10    2
68 TALKINGBK       0.00    0
69 TOY     0.10    2
70 UNKNOWN 0.10    2
71 VIDEO   0.10    0
72 VIDEO-LONG      0.10    2
73 VIDEO-SPEC      0.00    2
74 WEBSOURCE       0.00    2
75 \.
76
77 -- First, we extract the real circs for users that we know about
78 -- CREATE TABLE legacy_real_circ AS
79 INSERT INTO action.circulation
80         (
81                 usr,
82                 xact_start,
83                 target_copy,
84                 circ_lib,
85                 circ_staff,
86                 renewal_remaining,
87                 due_date,
88                 stop_fines_time,
89                 duration,
90                 recuring_fine,
91                 max_fine,
92                 desk_renewal,
93                 duration_rule,
94                 recuring_fine_rule,
95                 max_fine_rule,
96                 stop_fines
97         )
98         SELECT  DISTINCT ON (lc.charge_key1, lc.charge_key2, lc.charge_key3)
99                 au.id AS usr,
100                 CASE WHEN lc.renewal_date = 'NEVER' THEN lc.charge_date::DATE ELSE lc.renewal_date::DATE END AS xact_start,
101                 cp.id AS target_copy,
102                 ou.id AS circ_lib,
103                 1 AS circ_staff,
104                 tm.renewals AS renewal_remaining,
105                 CASE WHEN lc.due_date = 'NEVER' THEN (now() + '20 years')::DATE ELSE lc.due_date::DATE END AS due_date,
106                 CASE WHEN lc.claim_return_date = '0' THEN NULL ELSE lc.claim_return_date::DATE END AS stop_fines_time,
107                 ((CASE WHEN lc.due_date = 'NEVER' THEN (now() + '20 years')::DATE ELSE lc.due_date::DATE END
108                         -
109                   CASE WHEN lc.renewal_date = 'NEVER' THEN lc.charge_date::DATE ELSE lc.renewal_date::DATE END)||' days')::interval AS duration,
110                 tm.recuring_fine AS recuring_fine,
111                 COALESCE( mf.max_fine, 5.00 ) AS max_fine,
112                 CASE WHEN lc.renewal_date = 'NEVER' THEN FALSE ELSE TRUE END AS desk_renewal,
113                 'IMPORT'::TEXT AS duration_rule,
114                 'IMPORT'::TEXT AS recuring_fine_rule,
115                 'IMPORT'::TEXT AS max_fine_rule,
116                 CASE WHEN lc.claim_return_date = '0' THEN NULL ELSE 'CLAIMSRETURNED' END AS stop_fines
117           FROM  legacy_charge lc
118                 JOIN joined_legacy li
119                         ON (    lc.charge_key1 = li.cat_key
120                                 AND lc.charge_key2 = li.call_key
121                                 AND lc.charge_key3 = li.item_key )
122                 JOIN asset.copy cp ON (cp.barcode = li.item_id)
123                 JOIN legacy_type_circ_map tm ON (cp.circ_modifier = tm.item_type)
124                 JOIN actor.org_unit ou ON (lc.library = ou.shortname)
125                 JOIN actor.usr au ON (lc.user_key = au.id)
126                 LEFT JOIN legacy_baduser_map bu ON (bu.id = lc.user_key)
127                 LEFT JOIN legacy_lib_max_fine mf ON (ou.shortname LIKE mf.lib||'%')
128           WHERE bu.id IS NULL
129           ORDER BY
130                 lc.charge_key1,
131                 lc.charge_key2,
132                 lc.charge_key3,
133                 lc.charge_key4 DESC;
134
135
136 -- Now build a table containing the status change info ...
137 CREATE TABLE legacy_status_change_circ AS
138         SELECT  DISTINCT ON (lc.charge_key1, lc.charge_key2, lc.charge_key3)
139                 pol.profile AS profile,
140                 cp.id AS item
141           FROM  legacy_charge lc
142                 JOIN joined_legacy li
143                         ON (    lc.charge_key1 = li.cat_key
144                                 AND lc.charge_key2 = li.call_key
145                                 AND lc.charge_key3 = li.item_key )
146                 JOIN asset.copy cp ON (cp.barcode = li.item_id)
147                 JOIN legacy_baduser_map bu ON (bu.id = lc.user_key)
148                 JOIN legacy_non_real_user pol ON (bu.barcode = pol.barcode)
149           WHERE bu.type = 'N'
150           ORDER BY
151                 lc.charge_key1,
152                 lc.charge_key2,
153                 lc.charge_key3,
154                 lc.charge_key4 DESC;
155
156 -- ... and update the copies with it
157 UPDATE  asset.copy
158   SET   status = legacy_copy_status_map.id
159   FROM  legacy_status_change_circ
160         JOIN legacy_copy_status_map ON (legacy_copy_status_map.name = legacy_status_change_circ.profile)
161   WHERE asset.copy.id = legacy_status_change_circ.item;
162
163
164 -- Next up, circ_lib changes based on recirc users ...
165 CREATE TABLE legacy_lib_change_circ AS
166         SELECT  DISTINCT ON (lc.charge_key1, lc.charge_key2, lc.charge_key3)
167                 ou.id AS lib,
168                 cp.id AS item
169           FROM  legacy_charge lc
170                 JOIN joined_legacy li
171                         ON (    lc.charge_key1 = li.cat_key
172                                 AND lc.charge_key2 = li.call_key
173                                 AND lc.charge_key3 = li.item_key )
174                 JOIN asset.copy cp ON (cp.barcode = li.item_id)
175                 JOIN legacy_baduser_map bu ON (bu.id = lc.user_key)
176                 JOIN legacy_recirc_lib pol ON (bu.barcode = pol.barcode)
177                 JOIN actor.org_unit ou ON (ou.shortname = pol.lib)
178           WHERE bu.type = 'R'
179           ORDER BY
180                 lc.charge_key1,
181                 lc.charge_key2,
182                 lc.charge_key3,
183                 lc.charge_key4 DESC;
184
185 -- ... and apply that too.
186 UPDATE  asset.copy
187   SET   circ_lib = legacy_lib_change_circ.lib
188   FROM  legacy_lib_change_circ
189   WHERE asset.copy.id = legacy_lib_change_circ.item;
190
191 COMMIT;