@@ -27,6 +27,8 @@ def determine_partner
2727 end
2828 end
2929
30+ set_base_vita_partners ( language_routing : true )
31+
3032 from_itin_enabled = vita_partner_from_itin_enabled if @intake . present? && @intake . itin_applicant?
3133 return from_itin_enabled if from_itin_enabled . present?
3234
@@ -45,12 +47,38 @@ def determine_partner
4547 from_national_routing = route_to_national_overflow_partner
4648 return from_national_routing if from_national_routing . present?
4749
50+ # If previous steps result in no vita-partner with the intake's language preference,
51+ # then we repeat the zip-code, state and national-overflow routing steps without factoring in the language preference
52+ set_base_vita_partners ( language_routing : false )
53+ from_zip_code = vita_partner_from_zip_code if @zip_code . present?
54+ return from_zip_code if from_zip_code . present?
55+
56+ from_state_routing = vita_partner_from_state if @zip_code . present?
57+ return from_state_routing if from_state_routing . present?
58+
59+ from_national_routing = route_to_national_overflow_partner
60+ return from_national_routing if from_national_routing . present?
61+
4862 @routing_method = :at_capacity
4963 return
5064 end
5165
5266 private
5367
68+ def set_base_vita_partners ( language_routing :)
69+ @base_orgs = if language_routing
70+ Organization . with_language_capability ( @intake &.preferred_interview_language )
71+ else
72+ Organization
73+ end
74+
75+ @base_vita_partners = if language_routing
76+ VitaPartner . with_language_capability ( @intake &.preferred_interview_language )
77+ else
78+ VitaPartner
79+ end
80+ end
81+
5482 def previous_year_partner
5583 return false unless @intake
5684
@@ -101,8 +129,8 @@ def vita_partner_from_itin_enabled
101129 def vita_partner_from_zip_code
102130 return unless @zip_code . present?
103131
104- eligible_with_capacity = Organization . with_capacity . joins ( :serviced_zip_codes ) .
105- where ( vita_partner_zip_codes : { zip_code : @zip_code } )
132+ eligible_with_capacity = @base_orgs . with_capacity . joins ( :serviced_zip_codes )
133+ . where ( vita_partner_zip_codes : { zip_code : @zip_code } )
106134
107135 vita_partner = eligible_with_capacity . sample
108136
@@ -119,7 +147,7 @@ def vita_partner_from_state
119147 in_state_routing_fractions = StateRoutingFraction . joins ( :state_routing_target )
120148 . where ( state_routing_targets : { state_abbreviation : state } )
121149 # get state routing fractions associated with organizations that have capacity
122- organization_ids_with_capacity = Organization . with_capacity . pluck ( 'id' )
150+ organization_ids_with_capacity = @base_orgs . with_capacity . pluck ( 'id' )
123151 with_capacity_organization_fractions = in_state_routing_fractions
124152 . joins ( :organization )
125153 . where ( organization : organization_ids_with_capacity )
@@ -142,7 +170,7 @@ def vita_partner_from_state
142170 end
143171
144172 def route_to_national_overflow_partner
145- national_overflow_locations = VitaPartner . with_capacity . where ( national_overflow_location : true ) . order ( Arel . sql ( "RANDOM()" ) ) . limit ( 1 )
173+ national_overflow_locations = @base_vita_partners . with_capacity . where ( national_overflow_location : true ) . order ( Arel . sql ( "RANDOM()" ) ) . limit ( 1 )
146174 vita_partner = national_overflow_locations &.first
147175 if vita_partner . present?
148176 @routing_method = :national_overflow
0 commit comments