• Home
  • Features
  • Pricing
  • Docs
  • Announcements
  • Sign In

pulibrary / orangelight / d973573e-9a44-478e-9952-901d9a0e6df1

10 Nov 2025 09:45PM UTC coverage: 95.247% (-0.2%) from 95.41%
d973573e-9a44-478e-9952-901d9a0e6df1

push

circleci

web-flow
Annex requests with no items should email forranx@princeton.edu (#5339)

* Add new confirmation and email templates when
there are no annex items - add new RequestMailer methods to
support the templates
email this case to forranx@princeton.edu

Update request_mailer_preview.rb
 * remove stale and unused methods
 * parsing of location label
Update mock data in request_mailer_preview.rb spec

related to [#4183]

* Update the hidden_service_options_fill_in with a new check for annex_no_items service
Update the submittable services to include annex_no_items
Include annex_no_items where needed by the code
Add new annex abstract method and subclasses for digitize , noitems and pickup
Pass patron as an argument in the new annex services
Update items validator with annex_no_items

Add a new condition in categorize_by_delivery_and_location method
that checks for an item type of annex_no_items && edd?
to set the item type to annex_edd (Illiad request)

related to [#4183]

* when annex no item service is used the patron should
receive a confirmation email
with the annex confirmation subject

related to [#4183]

50 of 63 new or added lines in 8 files covered. (79.37%)

1 existing line in 1 file now uncovered.

6232 of 6543 relevant lines covered (95.25%)

1448.52 hits per line

Source File
Press 'n' to go to next uncovered line, 'b' for previous

88.41
/app/mailers/requests/request_mailer.rb
1
# frozen_string_literal: true
2
module Requests
3✔
3
  class RequestMailer < ApplicationMailer
3✔
4
    include Requests::Bibdata
3✔
5
    helper "requests/application"
3✔
6

7
    def digitize_fill_in_confirmation(submission)
3✔
8
      @submission = Submission.new_from_hash submission
×
9
      @delivery_mode = "edd"
×
10
      subject = I18n.t('requests.paging.email_subject', pick_up_location: "Digitization")
×
11
      destination_email = @submission.email
×
12
      mail(to: destination_email,
×
13
           from: I18n.t('requests.default.email_from'),
14
           subject:)
15
    end
16

17
    def paging_email(submission)
3✔
18
      @submission = Submission.new_from_hash submission
3✔
19
      pick_ups = paging_pick_ups(submission: @submission)
3✔
20
      subject = I18n.t('requests.paging.email_subject', pick_up_location: pick_ups.join(", "))
3✔
21
      destination_email = "fstpage@princeton.edu"
3✔
22
      mail(to: destination_email,
3✔
23
           from: I18n.t('requests.default.email_from'),
24
           subject:)
25
    end
26

27
    def paging_confirmation(submission)
3✔
28
      @submission = Submission.new_from_hash submission
3✔
29
      pick_ups = paging_pick_ups(submission: @submission)
3✔
30
      subject = I18n.t('requests.paging.email_subject', pick_up_location: pick_ups.join(", "))
3✔
31
      destination_email = @submission.email
3✔
32
      mail(to: destination_email,
3✔
33
           from: I18n.t('requests.default.email_from'),
34
           subject:)
35
    end
36

37
    def pres_email(submission)
3✔
38
      request_email(submission:, subject_key: 'requests.pres.email_subject', destination_key: 'requests.pres.email')
4✔
39
    end
40

41
    def pres_confirmation(submission)
3✔
42
      confirmation_email(submission:, subject_key: 'requests.pres.email_subject')
4✔
43
    end
44

45
    def annex_email(submission)
3✔
46
      @submission = Submission.new_from_hash submission
8✔
47
      destination_email = annex_email_destinations(submission: @submission)
8✔
48
      mail(to: destination_email,
8✔
49
           from: I18n.t('requests.default.email_from'),
50
           subject: I18n.t('requests.annex.email_subject'))
51
    end
52

53
    def annex_confirmation(submission)
3✔
54
      confirmation_email(submission:, subject_key: 'requests.annex.email_subject')
10✔
55
    end
56

57
    def annex_in_library_email(submission)
3✔
58
      @submission = Submission.new_from_hash submission
2✔
59
      mail(to: I18n.t('requests.annex.email'),
2✔
60
           from: I18n.t('requests.default.email_from'),
61
           subject: I18n.t('requests.annex_in_library.email_subject'))
62
    end
63

64
    def annex_in_library_confirmation(submission)
3✔
65
      confirmation_email(submission:, subject_key: 'requests.annex_in_library.email_subject')
2✔
66
    end
67

68
    def annex_edd_email(submission); end
3✔
69

70
    def annex_edd_confirmation(submission)
3✔
71
      confirmation_email(submission:, subject_key: 'requests.recap_edd.email_subject', partial: 'recap_edd_confirmation')
1✔
72
    end
73

74
    # temporary changes issue 438
75
    def on_shelf_email(submission)
3✔
76
      @submission = Submission.new_from_hash submission
11✔
77
      location_email = get_location_contact_email(@submission.items.first[:location_code])
11✔
78
      # Location and destination are the same forthe moment
79
      # destination_email = I18n.t('requests.on_shelf.email')
80
      subject = "#{I18n.t('requests.on_shelf.email_subject')} (#{@submission.items.first[:location_code].upcase}) #{@submission.items.first[:call_number]}"
11✔
81
      mail(to: location_email,
11✔
82
           # cc: destination_email,
83
           from: I18n.t('requests.default.email_from'),
84
           subject:)
85
    end
86

87
    # temporary changes issue 438
88
    def on_shelf_confirmation(submission)
3✔
89
      @submission = Submission.new_from_hash submission
9✔
90
      destination_email = @submission.email
9✔
91
      subject = "#{Requests::BibdataService.delivery_locations[@submission.items.first['pick_up']]['label']} #{I18n.t('requests.on_shelf.email_subject_patron')}"
9✔
92
      mail(to: destination_email,
9✔
93
           from: I18n.t('requests.default.email_from'),
94
           subject:)
95
    end
96

97
    def on_order_email(submission)
3✔
98
      destination_key = 'requests.default.email_destination'
7✔
99
      request_email(submission:, subject_key: 'requests.on_order.email_subject', destination_key:)
7✔
100
    end
101

102
    def on_order_confirmation(submission)
3✔
103
      confirmation_email(submission:, subject_key: 'requests.on_order.email_subject')
7✔
104
    end
105

106
    def in_process_email(submission)
3✔
107
      destination_key = 'requests.default.email_destination'
8✔
108
      request_email(submission:, subject_key: 'requests.in_process.email_subject', destination_key:)
8✔
109
    end
110

111
    def in_process_confirmation(submission)
3✔
112
      confirmation_email(submission:, subject_key: 'requests.in_process.email_subject')
8✔
113
    end
114

115
    def annex_no_items_email(submission)
3✔
NEW
116
      request_email(submission:, subject_key: 'requests.annex_no_items.email_subject', destination_key: 'requests.annex_no_items.email')
×
117
    end
118

119
    def annex_no_items_confirmation(submission)
3✔
NEW
120
      @submission = Submission.new_from_hash submission
×
NEW
121
      destination_email = @submission.email
×
NEW
122
      subject = I18n.t('requests.annex.email_subject')
×
NEW
123
      mail(to: destination_email,
×
124
           from: I18n.t('requests.default.email_from'),
125
           subject:)
126
    end
127

128
    def recap_no_items_email(submission)
3✔
129
      request_email(submission:, subject_key: 'requests.recap_no_items.email_subject', destination_key: 'requests.recap_no_items.email')
×
130
    end
131

132
    def recap_no_items_confirmation(submission)
3✔
133
      @submission = Submission.new_from_hash submission
×
134
      destination_email = @submission.email
×
135
      subject = I18n.t('requests.recap.email_subject')
×
136
      mail(to: destination_email,
×
137
           from: I18n.t('requests.default.email_from'),
138
           subject:)
139
    end
140

141
    def digitize_email(submission)
3✔
142
      # TODO: what should we do here
143
    end
144

145
    def digitize_confirmation(submission)
3✔
146
      confirmation_email(submission:, subject_key: 'requests.digitize.email_subject', from_key: 'requests.digitize.email_from')
1✔
147
    end
148

149
    def interlibrary_loan_confirmation(submission)
3✔
150
      confirmation_email(submission:, subject_key: 'requests.interlibrary_loan.email_subject', from_key: 'requests.interlibrary_loan.email_from')
7✔
151
    end
152

153
    def recap_confirmation(submission)
3✔
154
      subject_key = 'requests.recap.email_subject'
5✔
155

156
      confirmation_email(submission:, subject_key:)
5✔
157
    end
158

159
    def recap_marquand_edd_email(submission); end
3✔
160

161
    def recap_marquand_edd_confirmation(submission)
3✔
162
      confirmation_email(submission:, subject_key: 'requests.recap_edd.email_subject', partial: 'recap_edd_confirmation')
1✔
163
    end
164

165
    def recap_marquand_in_library_email(submission); end
3✔
166

167
    def recap_marquand_in_library_confirmation(submission)
3✔
168
      confirmation_email(submission:, subject_key: 'requests.recap_in_library.email_subject')
1✔
169
    end
170

171
    def recap_in_library_email(submission)
3✔
172
      # only send an email to the libraries if this is a marquand request
173
      request_email(submission:, subject_key: 'requests.recap_marquand.email_subject', destination_key: 'requests.recap_marquand.email_destination') if Submission.new_from_hash(submission).marquand?
1✔
174
    end
175

176
    def recap_in_library_confirmation(submission)
3✔
177
      subject_key = 'requests.recap_in_library.email_subject'
1✔
178

179
      confirmation_email(submission:, subject_key:)
1✔
180
    end
181

182
    def recap_edd_confirmation(submission)
3✔
183
      confirmation_email(submission:, subject_key: 'requests.recap_edd.email_subject')
6✔
184
    end
185

186
    def marquand_edd_email(submission)
3✔
187
      request_email(submission:, subject_key: 'requests.marquand_edd.email_subject', destination_key: 'requests.marquand_edd.email_destination')
1✔
188
    end
189

190
    def marquand_edd_confirmation(submission)
3✔
191
      confirmation_email(submission:, subject_key: 'requests.marquand_edd.confirmation_subject')
1✔
192
    end
193

194
    def marquand_in_library_email(submission)
3✔
195
      request_email(submission:, subject_key: 'requests.marquand_in_library.email_subject', destination_key: 'requests.marquand_in_library.email_destination')
2✔
196
    end
197

198
    def marquand_in_library_confirmation(submission)
3✔
199
      confirmation_email(submission:, subject_key: 'requests.marquand_in_library.confirmation_subject')
2✔
200
    end
201

202
    def service_error_email(errors, submission)
3✔
203
      @submission = Submission.new_from_hash submission
3✔
204
      @errors = errors
3✔
205
      error_types = @errors.flat_map { |_key, value| value }.pluck(:type).uniq
6✔
206
      destination_email = if error_types.include?("digitize")
3✔
207
                            I18n.t('requests.digitize.invalid_patron.email')
2✔
208
                          else
209
                            I18n.t('requests.error.service_error_email')
1✔
210
                          end
211
      mail(to: destination_email,
3✔
212
           from: I18n.t('requests.default.email_from'),
213
           subject: I18n.t('requests.error.service_error_subject'))
214
    end
215

216
    def invalid_illiad_patron_email(user_attributes, transaction_attributes)
3✔
217
      @user_attributes = user_attributes
1✔
218
      @transaction_attributes = transaction_attributes
1✔
219
      destination_email = I18n.t('requests.digitize.invalid_patron.email')
1✔
220
      mail(to: destination_email,
1✔
221
           from: I18n.t('requests.default.email_from'),
222
           subject: I18n.t('requests.digitize.invalid_patron.subject'))
223
    end
224

225
    private
3✔
226

227
      def confirmation_email(submission:, subject_key:, from_key: 'requests.default.email_from', partial: nil)
3✔
228
        @submission = Submission.new_from_hash submission
57✔
229
        destination_email = @submission.email
57✔
230
        subject = I18n.t(subject_key)
57✔
231
        mail(to: destination_email,
57✔
232
             from: I18n.t(from_key),
233
             subject:,
234
             template_name: partial)
235
      end
236

237
      def request_email(submission:, subject_key:, destination_key: 'requests.default.email_destination', from_key: 'requests.default.email_from')
3✔
238
        @submission = Submission.new_from_hash submission
22✔
239
        destination_email = I18n.t(destination_key)
22✔
240
        mail(to: destination_email,
22✔
241
             from: I18n.t(from_key),
242
             subject: I18n.t(subject_key))
243
      end
244

245
      def paging_pick_ups(submission:)
3✔
246
        @delivery_mode = submission.items[0]["delivery_mode_#{submission.items[0]['mfhd']}"]
6✔
247
        if @delivery_mode == "edd"
6✔
248
          ["Digitization"]
×
249
        else
250
          @submission.items.map { |item| Requests::BibdataService.delivery_locations[item["pick_up"]]["label"] }
12✔
251
        end
252
      end
253

254
      def annex_email_destinations(submission:)
3✔
255
        annex_items(submission:).map do |item|
8✔
256
          if item["location_code"] == 'annex$doc'
8✔
257
            I18n.t('requests.anxadoc.email')
3✔
258
          else
259
            I18n.t('requests.annex.email')
5✔
260
          end
261
        end
262
      end
263

264
      def annex_items(submission:)
3✔
265
        submission.items.select { |item| item["type"] == 'annex' }
16✔
266
      end
267
  end
268
end
STATUS · Troubleshooting · Open an Issue · Sales · Support · CAREERS · ENTERPRISE · START FREE · SCHEDULE DEMO
ANNOUNCEMENTS · TWITTER · TOS & SLA · Supported CI Services · What's a CI service? · Automated Testing

© 2025 Coveralls, Inc