@@ -334,7 +334,7 @@ def add_existing_row_cells(row, vaccination_record:)
334334 row [ :programme ] = programme . import_names . first
335335 row [ :vaccine_given ] = Cell . new (
336336 vaccine &.upload_name ,
337- allowed_values : vaccine_values_for_programmes ( [ programme ] )
337+ allowed_values : vaccine_values_for_programme ( programme )
338338 )
339339 row [ :performing_professional_email ] = Cell . new (
340340 vaccination_record . performed_by_user &.email ,
@@ -390,7 +390,7 @@ def add_new_row_cells(row, patient:, programme:)
390390 )
391391 row [ :programme ] = programme_variant . import_names . first
392392 row [ :vaccine_given ] = Cell . new (
393- allowed_values : vaccine_values_for_programmes ( [ programme_variant ] )
393+ allowed_values : vaccine_values_for_programme ( programme_variant )
394394 )
395395 row [ :performing_professional_email ] = Cell . new (
396396 allowed_formula : performing_professionals_range
@@ -415,10 +415,15 @@ def add_new_row_cells(row, patient:, programme:)
415415 end
416416 end
417417
418- def vaccine_values_for_programmes ( programmes )
419- @vaccines [ programmes ] ||= Vaccine
418+ def vaccine_values_for_programme ( programme )
419+ # We use the variant_type or type strings as the cache key because
420+ # Programme::Variant delegates identity methods (hash, ==) to the base
421+ # Programme. Without this, MMR vaccines would be returned for an MMRV
422+ # variant.
423+ cache_key = programme . try ( :variant_type ) || programme . type
424+ @vaccines [ cache_key ] ||= Vaccine
420425 . active
421- . for_programmes ( programmes )
426+ . for_programmes ( [ programme ] )
422427 . pluck ( :upload_name )
423428 end
424429
0 commit comments