uw_catalog 0.0.5 → 0.0.6
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- 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
|