uw_catalog 0.0.5 → 0.0.6
Sign up to get free protection for your applications and to get access to all the features.
- data/lib/uw_catalog/catalog.rb +24 -20
- data/lib/uw_catalog/model/holding.rb +42 -39
- data/lib/uw_catalog/model/holding_marc.rb +11 -21
- data/lib/uw_catalog/model/item.rb +1 -1
- data/lib/uw_catalog/version.rb +1 -1
- data/lib/uw_catalog/voyager_item_status.rb +2 -2
- data/lib/uw_catalog/voyager_sql.rb +20 -1
- metadata +2 -2
data/lib/uw_catalog/catalog.rb
CHANGED
@@ -22,13 +22,14 @@ module UwCatalog
|
|
22
22
|
bibs
|
23
23
|
end
|
24
24
|
|
25
|
-
def self.
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
25
|
+
def self.get_availability_data(bibid)
|
26
|
+
ret = Array.new
|
27
|
+
begin
|
28
|
+
data_hash = get_availability_data_hash(bibid)
|
29
|
+
parse_availability_data_hash(data_hash)
|
30
|
+
rescue => e
|
31
|
+
throw UwCatalogError.new("#{e.class}: #{e.message}")
|
32
|
+
end
|
32
33
|
end
|
33
34
|
|
34
35
|
def self.get_availability_data_hash(bibid)
|
@@ -38,11 +39,11 @@ module UwCatalog
|
|
38
39
|
def self.parse_availability_data_hash(data_hash)
|
39
40
|
ret = Array.new
|
40
41
|
data_hash.each do |d|
|
41
|
-
|
42
|
-
|
42
|
+
loc_id = d[:location_id]
|
43
|
+
location = d[:location]
|
43
44
|
if !d[:temp_location].nil?
|
44
|
-
|
45
|
-
|
45
|
+
loc_id = d[:temp_location_id]
|
46
|
+
location = d[:temp_location]
|
46
47
|
end
|
47
48
|
|
48
49
|
loc = Location.new({:id => loc_id, :location => location})
|
@@ -62,20 +63,23 @@ module UwCatalog
|
|
62
63
|
end
|
63
64
|
if (!d[:item_id].nil?)
|
64
65
|
item = get_item_from_hash(d)
|
65
|
-
|
66
|
+
holding.add_item(item)
|
66
67
|
end
|
67
68
|
end
|
68
69
|
ret
|
69
70
|
end
|
70
71
|
|
71
|
-
|
72
|
-
|
73
|
-
|
74
|
-
|
75
|
-
|
76
|
-
|
77
|
-
|
78
|
-
|
72
|
+
|
73
|
+
private
|
74
|
+
|
75
|
+
|
76
|
+
def self.get_item_from_hash(d)
|
77
|
+
item = Item.new({:id => d[:item_id], :item_enum=>d[:item_enum],
|
78
|
+
:copy_number=>d[:copy_number], :on_reserve=>d[:on_reserve],
|
79
|
+
:item_status=>d[:item_status], :item_type_id=>d[:item_type_id],
|
80
|
+
:item_barcode=>d[:item_barcode],
|
81
|
+
:item_status_date=>d[:item_status_date], :current_due_date=>d[:current_due_date],
|
82
|
+
:hold_recall_status_date=>d[:hold_recall_status_date]})
|
79
83
|
end
|
80
84
|
|
81
85
|
def self.get_items_data_hash(bibid)
|
@@ -1,6 +1,5 @@
|
|
1
1
|
module UwCatalog
|
2
2
|
class Holding
|
3
|
-
@@date_format = "%B %d, %Y"
|
4
3
|
attr_accessor :id, :call_number, :item_enum, :perm_location_id, :perm_location, :items
|
5
4
|
|
6
5
|
def initialize(h=Hash.new)
|
@@ -12,22 +11,28 @@ module UwCatalog
|
|
12
11
|
self.id == another_holding.id
|
13
12
|
end
|
14
13
|
|
15
|
-
def
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
14
|
+
def library_has
|
15
|
+
ret = Hash.new
|
16
|
+
marc = HoldingMarc.new(@id)
|
17
|
+
val = marc.bound_copies
|
18
|
+
ret[:bound_copies] = val unless (val.nil? or val.empty?)
|
19
|
+
val = marc.indexes
|
20
|
+
ret[:indexes] = val unless (val.nil? or val.empty?)
|
21
|
+
val = marc.supplements
|
22
|
+
ret[:supplements] = val unless (val.nil? or val.empty?)
|
23
|
+
ret
|
25
24
|
end
|
26
25
|
|
27
|
-
def
|
28
|
-
|
29
|
-
|
26
|
+
def get_items_display(concise = false)
|
27
|
+
ret = Hash.new
|
28
|
+
return ret unless items.size > 0
|
30
29
|
|
30
|
+
status_list = item_statuses(concise)
|
31
|
+
ret[:status] = status_list
|
32
|
+
|
33
|
+
ret
|
34
|
+
end
|
35
|
+
|
31
36
|
def add_item(item)
|
32
37
|
idx = items.index(item)
|
33
38
|
if idx.nil?
|
@@ -47,30 +52,23 @@ module UwCatalog
|
|
47
52
|
end
|
48
53
|
end
|
49
54
|
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
val = marc.supplements
|
58
|
-
ret[:supplements] = val unless (val.nil? or val.empty?)
|
59
|
-
ret
|
55
|
+
private
|
56
|
+
|
57
|
+
def get_copies
|
58
|
+
if items.nil?
|
59
|
+
return Array.new
|
60
|
+
end
|
61
|
+
copies = items.collect {|c| c.copy_number}.uniq
|
60
62
|
end
|
61
|
-
|
62
|
-
def
|
63
|
-
|
64
|
-
|
65
|
-
|
66
|
-
|
67
|
-
|
68
|
-
|
69
|
-
ret[:status] = status_list
|
70
|
-
|
71
|
-
ret
|
63
|
+
|
64
|
+
def self.override_status(item)
|
65
|
+
(16 == item.item_status.to_i)
|
66
|
+
end
|
67
|
+
|
68
|
+
def self.get_item_rank(item)
|
69
|
+
status_guide = VoyagerItemStatus.status_guide(item.item_status.to_i)
|
70
|
+
status_guide[:rank]
|
72
71
|
end
|
73
|
-
|
74
72
|
|
75
73
|
def item_statuses(concise)
|
76
74
|
status_list = Array.new
|
@@ -80,14 +78,17 @@ module UwCatalog
|
|
80
78
|
status_available, status_text = get_status(item)
|
81
79
|
status_list << {:item_id => item.id, :status_text => status_text,
|
82
80
|
:available => status_available, :copy_number=> item.copy_number,
|
83
|
-
:item_enum => item.item_enum
|
81
|
+
:item_enum => item.item_enum, :item_type_id => item.item_type_id,
|
82
|
+
:noloan => (item.item_type_id == 2)}
|
84
83
|
end
|
85
84
|
|
86
85
|
if (concise)
|
87
86
|
total_count = status_list.size
|
88
87
|
status_list.keep_if{|i| i[:available] == false}.compact
|
89
88
|
if (total_count > 0 && status_list.size == 0)
|
89
|
+
#reset status list to aggregated view with no specific item data
|
90
90
|
status_list << {:status_text => 'Available', :available => true}
|
91
|
+
status_list[0][:noloan] = (items.select{|i| i.item_type_id ==2 }.size == items.size)
|
91
92
|
end
|
92
93
|
end
|
93
94
|
|
@@ -101,13 +102,15 @@ module UwCatalog
|
|
101
102
|
|
102
103
|
ret = status_text
|
103
104
|
status_date = nil
|
105
|
+
date_format = "%B %d, %Y"
|
106
|
+
|
104
107
|
if status_guide[:display_date]
|
105
108
|
case item.item_status.to_i
|
106
109
|
when 2, 3
|
107
|
-
status_date = item.current_due_date.strftime(
|
110
|
+
status_date = item.current_due_date.strftime(date_format) unless item.current_due_date.nil?
|
108
111
|
status_text = "#{status_text}, Due on #{status_date}"
|
109
112
|
else
|
110
|
-
status_date = item.item_status_date.strftime(
|
113
|
+
status_date = item.item_status_date.strftime(date_format) unless item.item_status_date.nil?
|
111
114
|
status_text = "#{status_text} #{status_date}"
|
112
115
|
end
|
113
116
|
end
|
@@ -1,10 +1,10 @@
|
|
1
1
|
module UwCatalog
|
2
2
|
class HoldingMarc
|
3
3
|
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
4
|
+
YEAR_CAPTIONS = ['(year)', '(Year)', 'year', '(year covered)']
|
5
|
+
MONTH_CAPTIONS = ['(month)', 'mo']
|
6
|
+
DAY_CAPTIONS = ['(day)']
|
7
|
+
SEASON_CAPTIONS = ['(season)']
|
8
8
|
|
9
9
|
attr_reader :holding_id, :record
|
10
10
|
|
@@ -33,23 +33,14 @@ module UwCatalog
|
|
33
33
|
supplements_internal
|
34
34
|
end
|
35
35
|
|
36
|
-
|
36
|
+
private
|
37
37
|
|
38
38
|
def new_issues
|
39
39
|
issues_received(0)
|
40
40
|
end
|
41
41
|
|
42
42
|
def issues_received(category)
|
43
|
-
sql =
|
44
|
-
"from line_item_copy_status " +
|
45
|
-
"inner join subscription on line_item_copy_status.line_item_id = subscription.line_item_id " +
|
46
|
-
"inner join component on subscription.subscription_id = component.subscription_id " +
|
47
|
-
"inner join serial_issues on component.component_id = serial_issues.component_id " +
|
48
|
-
"inner join issues_received on issues_received.issue_id = serial_issues.issue_id and component.component_id = issues_received.component_id " +
|
49
|
-
"where line_item_copy_status.mfhd_id = ? " +
|
50
|
-
"and component.category = ? " +
|
51
|
-
"and serial_issues.received = 1 " +
|
52
|
-
"and issues_received.opac_suppressed = 1"
|
43
|
+
sql = VoyagerSql.get_issues_recieved_sql
|
53
44
|
repository(:UW).adapter.select(sql, @holding_id, category)
|
54
45
|
end
|
55
46
|
|
@@ -62,8 +53,7 @@ module UwCatalog
|
|
62
53
|
|
63
54
|
def marc_stream
|
64
55
|
marc_stream = ''
|
65
|
-
sql =
|
66
|
-
" mfhd_master.mfhd_id = mfhd_data.mfhd_id"
|
56
|
+
sql = VoyagerSql.get_marc_stream_sql
|
67
57
|
mfhd_data_segments = repository(:UW).adapter.select(sql, @holding_id)
|
68
58
|
mfhd_data_segments.each do |segment|
|
69
59
|
marc_stream << segment
|
@@ -235,10 +225,10 @@ module UwCatalog
|
|
235
225
|
|
236
226
|
# Locate the chronology subfields
|
237
227
|
field.subfields.each do |subfield|
|
238
|
-
caption_and_pattern[field['8']][:chronology][:year] = subfield.code if
|
239
|
-
caption_and_pattern[field['8']][:chronology][:month] = subfield.code if
|
240
|
-
caption_and_pattern[field['8']][:chronology][:day] = subfield.code if
|
241
|
-
caption_and_pattern[field['8']][:chronology][:season] = subfield.code if
|
228
|
+
caption_and_pattern[field['8']][:chronology][:year] = subfield.code if YEAR_CAPTIONS.include?(subfield.value)
|
229
|
+
caption_and_pattern[field['8']][:chronology][:month] = subfield.code if MONTH_CAPTIONS.include?(subfield.value)
|
230
|
+
caption_and_pattern[field['8']][:chronology][:day] = subfield.code if DAY_CAPTIONS.include?(subfield.value)
|
231
|
+
caption_and_pattern[field['8']][:chronology][:season] = subfield.code if SEASON_CAPTIONS.include?(subfield.value)
|
242
232
|
end
|
243
233
|
|
244
234
|
# Unless the chronology data is in subfield $a...
|
data/lib/uw_catalog/version.rb
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
module UwCatalog
|
2
2
|
class VoyagerItemStatus
|
3
|
-
|
3
|
+
ITEM_STATUSES =
|
4
4
|
{
|
5
5
|
0 => { :voyager_identifer => 0, :available => false, :forward_status => "Unknown", :display_date => false, :rank => 25 },
|
6
6
|
1 => { :voyager_identifer => 1, :available => true, :forward_status => "Available", :display_date => false, :rank => 20 },
|
@@ -30,7 +30,7 @@ module UwCatalog
|
|
30
30
|
25 => { :voyager_identifer => 25, :available => false, :forward_status => "Requested", :display_date => true, :rank => 17 }
|
31
31
|
}
|
32
32
|
def self.status_guide(status_code)
|
33
|
-
|
33
|
+
ITEM_STATUSES[status_code]
|
34
34
|
end
|
35
35
|
|
36
36
|
def available?(itemStatusCode)
|
@@ -34,8 +34,8 @@ module UwCatalog
|
|
34
34
|
", circ_transactions, hold_recall_items " +
|
35
35
|
"where bib_mfhd.bib_id=? " +
|
36
36
|
"and bib_mfhd.mfhd_id=mfhd_master.mfhd_id " +
|
37
|
-
"and mfhd_master.location_id=hloc.location_id " +
|
38
37
|
"and mfhd_master.suppress_in_opac='N' " +
|
38
|
+
"and mfhd_master.location_id=hloc.location_id " +
|
39
39
|
"and hloc.suppress_in_opac='N' " +
|
40
40
|
"and mfhd_master.mfhd_id=mfhd_item.mfhd_id " +
|
41
41
|
"and mfhd_item.item_id=item.item_id " +
|
@@ -76,5 +76,24 @@ module UwCatalog
|
|
76
76
|
"and not exists (select 'x' from mfhd_item mi where mi.mfhd_id = mfhd_master.mfhd_id)"
|
77
77
|
end
|
78
78
|
|
79
|
+
def self.get_issues_recieved_sql()
|
80
|
+
"select serial_issues.enumchron " +
|
81
|
+
"from line_item_copy_status " +
|
82
|
+
"inner join subscription on line_item_copy_status.line_item_id = subscription.line_item_id " +
|
83
|
+
"inner join component on subscription.subscription_id = component.subscription_id " +
|
84
|
+
"inner join serial_issues on component.component_id = serial_issues.component_id " +
|
85
|
+
"inner join issues_received on issues_received.issue_id = serial_issues.issue_id " +
|
86
|
+
"and component.component_id = issues_received.component_id " +
|
87
|
+
"where line_item_copy_status.mfhd_id = ? " +
|
88
|
+
"and component.category = ? " +
|
89
|
+
"and serial_issues.received = 1 " +
|
90
|
+
"and issues_received.opac_suppressed = 1"
|
91
|
+
end
|
92
|
+
|
93
|
+
def self.get_marc_stream_sql()
|
94
|
+
"select mfhd_data.record_segment from mfhd_master, mfhd_data " +
|
95
|
+
"where mfhd_master.mfhd_id=? " +
|
96
|
+
"and mfhd_master.mfhd_id = mfhd_data.mfhd_id"
|
97
|
+
end
|
79
98
|
end
|
80
99
|
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: uw_catalog
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.6
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2013-
|
12
|
+
date: 2013-08-01 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: rake
|