ccls-ccls_engine 3.11.0
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/README.rdoc +182 -0
- data/app/models/abstract.rb +181 -0
- data/app/models/abstract_search.rb +50 -0
- data/app/models/abstract_validations.rb +324 -0
- data/app/models/address.rb +70 -0
- data/app/models/address_type.rb +15 -0
- data/app/models/addressing.rb +147 -0
- data/app/models/aliquot.rb +44 -0
- data/app/models/aliquot_sample_format.rb +13 -0
- data/app/models/analysis.rb +14 -0
- data/app/models/bc_request.rb +20 -0
- data/app/models/candidate_control.rb +101 -0
- data/app/models/context.rb +23 -0
- data/app/models/context_data_source.rb +4 -0
- data/app/models/county.rb +16 -0
- data/app/models/data_source.rb +24 -0
- data/app/models/diagnosis.rb +23 -0
- data/app/models/document_type.rb +16 -0
- data/app/models/document_version.rb +27 -0
- data/app/models/enrollment.rb +78 -0
- data/app/models/enrollment_validations.rb +167 -0
- data/app/models/follow_up.rb +16 -0
- data/app/models/follow_up_type.rb +18 -0
- data/app/models/gift_card.rb +22 -0
- data/app/models/gift_card_search.rb +137 -0
- data/app/models/home_exposure_response.rb +24 -0
- data/app/models/homex_outcome.rb +75 -0
- data/app/models/hospital.rb +22 -0
- data/app/models/icf_master_id.rb +30 -0
- data/app/models/icf_master_tracker.rb +217 -0
- data/app/models/icf_master_tracker_change.rb +9 -0
- data/app/models/icf_master_tracker_update.rb +50 -0
- data/app/models/ineligible_reason.rb +26 -0
- data/app/models/instrument.rb +26 -0
- data/app/models/instrument_type.rb +17 -0
- data/app/models/instrument_version.rb +28 -0
- data/app/models/interview.rb +122 -0
- data/app/models/interview_method.rb +17 -0
- data/app/models/interview_outcome.rb +16 -0
- data/app/models/language.rb +28 -0
- data/app/models/live_birth_data_update.rb +142 -0
- data/app/models/operational_event.rb +99 -0
- data/app/models/operational_event_type.rb +31 -0
- data/app/models/organization.rb +28 -0
- data/app/models/patient.rb +63 -0
- data/app/models/patient_validations.rb +118 -0
- data/app/models/person.rb +28 -0
- data/app/models/phone_number.rb +105 -0
- data/app/models/phone_type.rb +15 -0
- data/app/models/project.rb +39 -0
- data/app/models/project_outcome.rb +19 -0
- data/app/models/race.rb +31 -0
- data/app/models/refusal_reason.rb +23 -0
- data/app/models/sample.rb +168 -0
- data/app/models/sample_kit.rb +14 -0
- data/app/models/sample_outcome.rb +16 -0
- data/app/models/sample_temperature.rb +14 -0
- data/app/models/sample_type.rb +37 -0
- data/app/models/search.rb +195 -0
- data/app/models/section.rb +18 -0
- data/app/models/state.rb +25 -0
- data/app/models/study_subject.rb +237 -0
- data/app/models/study_subject_abstracts.rb +47 -0
- data/app/models/study_subject_addresses.rb +34 -0
- data/app/models/study_subject_associations.rb +38 -0
- data/app/models/study_subject_duplicates.rb +111 -0
- data/app/models/study_subject_enrollments.rb +17 -0
- data/app/models/study_subject_homex_outcome.rb +22 -0
- data/app/models/study_subject_identifier.rb +153 -0
- data/app/models/study_subject_interviews.rb +25 -0
- data/app/models/study_subject_languages.rb +21 -0
- data/app/models/study_subject_operational_events.rb +66 -0
- data/app/models/study_subject_patient.rb +177 -0
- data/app/models/study_subject_pii.rb +74 -0
- data/app/models/study_subject_races.rb +25 -0
- data/app/models/study_subject_search.rb +260 -0
- data/app/models/study_subject_validations.rb +116 -0
- data/app/models/subject_language.rb +11 -0
- data/app/models/subject_race.rb +11 -0
- data/app/models/subject_relationship.rb +21 -0
- data/app/models/subject_type.rb +22 -0
- data/app/models/tracing_status.rb +20 -0
- data/app/models/transfer.rb +40 -0
- data/app/models/unit.rb +14 -0
- data/app/models/vital_status.rb +19 -0
- data/app/models/zip_code.rb +36 -0
- data/config/abstract_fields.yml +1038 -0
- data/config/abstract_sections.yml +77 -0
- data/config/home_exposure_response_fields.yml +583 -0
- data/config/icf_master_tracker_update.yml +56 -0
- data/config/live_birth_data_update.yml +56 -0
- data/config/shared_use_db.yml +4 -0
- data/generators/ccls_engine/USAGE +2 -0
- data/generators/ccls_engine/ccls_engine_generator.rb +123 -0
- data/generators/ccls_engine/templates/autotest_ccls_engine.rb +3 -0
- data/generators/ccls_engine/templates/ccls_engine.rake +12 -0
- data/generators/ccls_engine/templates/fixtures/address_types.yml +30 -0
- data/generators/ccls_engine/templates/fixtures/context_data_sources.yml +54 -0
- data/generators/ccls_engine/templates/fixtures/contexts.yml +19 -0
- data/generators/ccls_engine/templates/fixtures/data_sources.yml +40 -0
- data/generators/ccls_engine/templates/fixtures/diagnoses.yml +40 -0
- data/generators/ccls_engine/templates/fixtures/document_types.yml +65 -0
- data/generators/ccls_engine/templates/fixtures/document_versions.csv +155 -0
- data/generators/ccls_engine/templates/fixtures/follow_up_types.yml +16 -0
- data/generators/ccls_engine/templates/fixtures/hospitals.yml +114 -0
- data/generators/ccls_engine/templates/fixtures/ineligible_reasons.yml +35 -0
- data/generators/ccls_engine/templates/fixtures/instrument_types.yml +26 -0
- data/generators/ccls_engine/templates/fixtures/instrument_versions.yml +22 -0
- data/generators/ccls_engine/templates/fixtures/instruments.yml +22 -0
- data/generators/ccls_engine/templates/fixtures/interview_methods.yml +30 -0
- data/generators/ccls_engine/templates/fixtures/interview_outcomes.yml +31 -0
- data/generators/ccls_engine/templates/fixtures/languages.yml +34 -0
- data/generators/ccls_engine/templates/fixtures/operational_event_types.yml +141 -0
- data/generators/ccls_engine/templates/fixtures/organizations.yml +198 -0
- data/generators/ccls_engine/templates/fixtures/people.yml +130 -0
- data/generators/ccls_engine/templates/fixtures/phone_types.yml +30 -0
- data/generators/ccls_engine/templates/fixtures/project_outcomes.yml +25 -0
- data/generators/ccls_engine/templates/fixtures/projects.yml +59 -0
- data/generators/ccls_engine/templates/fixtures/races.yml +52 -0
- data/generators/ccls_engine/templates/fixtures/refusal_reasons.yml +55 -0
- data/generators/ccls_engine/templates/fixtures/sample_outcomes.yml +36 -0
- data/generators/ccls_engine/templates/fixtures/sample_temperatures.yml +16 -0
- data/generators/ccls_engine/templates/fixtures/sample_types.yml +147 -0
- data/generators/ccls_engine/templates/fixtures/sections.yml +31 -0
- data/generators/ccls_engine/templates/fixtures/states.yml +363 -0
- data/generators/ccls_engine/templates/fixtures/subject_relationships.yml +46 -0
- data/generators/ccls_engine/templates/fixtures/subject_types.yml +30 -0
- data/generators/ccls_engine/templates/fixtures/tracing_statuses.yml +30 -0
- data/generators/ccls_engine/templates/fixtures/units.yml +13 -0
- data/generators/ccls_engine/templates/fixtures/vital_statuses.yml +28 -0
- data/generators/ccls_engine/templates/functional/roles_controller_test.rb +142 -0
- data/generators/ccls_engine/templates/functional/sessions_controller_test.rb +19 -0
- data/generators/ccls_engine/templates/functional/users_controller_test.rb +94 -0
- data/generators/ccls_engine/templates/images/sort_down.png +0 -0
- data/generators/ccls_engine/templates/images/sort_up.png +0 -0
- data/generators/ccls_engine/templates/initializer.rb +28 -0
- data/generators/ccls_engine/templates/javascripts/ccls_engine.js +24 -0
- data/generators/ccls_engine/templates/javascripts/jquery-ui.js +763 -0
- data/generators/ccls_engine/templates/javascripts/jquery.js +154 -0
- data/generators/ccls_engine/templates/javascripts/jrails.js +1 -0
- data/generators/ccls_engine/templates/migrations/create_user_invitations.rb +18 -0
- data/generators/ccls_engine/templates/migrations/create_users.rb +33 -0
- data/generators/ccls_engine/templates/migrations/drop_user_invitations.rb +18 -0
- data/generators/ccls_engine/templates/stylesheets/ccls_engine.css +180 -0
- data/generators/ccls_engine/templates/stylesheets/user.css +35 -0
- data/generators/ccls_engine/templates/stylesheets/users.css +23 -0
- data/generators/ccls_engine/templates/unit/core_extension_test.rb +18 -0
- data/generators/ccls_engine/templates/unit/role_test.rb +30 -0
- data/generators/ccls_engine/templates/unit/user_test.rb +321 -0
- data/lib/ccls-ccls_engine.rb +1 -0
- data/lib/ccls_engine.rb +135 -0
- data/lib/ccls_engine/action_view_extension.rb +3 -0
- data/lib/ccls_engine/action_view_extension/base.rb +53 -0
- data/lib/ccls_engine/action_view_extension/form_builder.rb +39 -0
- data/lib/ccls_engine/active_record_extension.rb +2 -0
- data/lib/ccls_engine/active_record_extension/base.rb +70 -0
- data/lib/ccls_engine/active_record_shared.rb +8 -0
- data/lib/ccls_engine/assertions.rb +69 -0
- data/lib/ccls_engine/autotest.rb +54 -0
- data/lib/ccls_engine/ccls_user.rb +117 -0
- data/lib/ccls_engine/core_extension.rb +14 -0
- data/lib/ccls_engine/date_and_time_formats.rb +30 -0
- data/lib/ccls_engine/factories.rb +880 -0
- data/lib/ccls_engine/factory_test_helper.rb +276 -0
- data/lib/ccls_engine/helper.rb +112 -0
- data/lib/ccls_engine/icf_master_tracker_update_test_helper.rb +121 -0
- data/lib/ccls_engine/live_birth_data_update_test_helper.rb +110 -0
- data/lib/ccls_engine/package_test_helper.rb +49 -0
- data/lib/ccls_engine/shared_database.rb +20 -0
- data/lib/ccls_engine/tasks.rb +1 -0
- data/lib/ccls_engine/test_tasks.rb +52 -0
- data/lib/ccls_engine/translation_table.rb +86 -0
- data/lib/shared_migration.rb +5 -0
- data/lib/surveyor/survey_extensions.rb +125 -0
- data/lib/tasks/application.rake +286 -0
- data/lib/tasks/calnet_authenticated.rake +6 -0
- data/lib/tasks/common_lib.rake +7 -0
- data/lib/tasks/database.rake +288 -0
- data/lib/tasks/documentation.rake +71 -0
- data/lib/tasks/homex_import.rake +723 -0
- data/lib/tasks/odms_import.rake +1116 -0
- data/lib/tasks/simply_authorized.rake +6 -0
- data/lib/tasks/ucb_ccls_engine_tasks.rake +4 -0
- data/lib/tasks/use_db.rake +4 -0
- data/rails/init.rb +4 -0
- data/test/unit/ccls/abstract_search_test.rb +150 -0
- data/test/unit/ccls/abstract_test.rb +674 -0
- data/test/unit/ccls/address_test.rb +155 -0
- data/test/unit/ccls/address_type_test.rb +25 -0
- data/test/unit/ccls/addressing_test.rb +466 -0
- data/test/unit/ccls/aliquot_sample_format_test.rb +20 -0
- data/test/unit/ccls/aliquot_test.rb +156 -0
- data/test/unit/ccls/analysis_test.rb +31 -0
- data/test/unit/ccls/bc_request_test.rb +43 -0
- data/test/unit/ccls/candidate_control_test.rb +712 -0
- data/test/unit/ccls/context_data_source_test.rb +26 -0
- data/test/unit/ccls/context_test.rb +40 -0
- data/test/unit/ccls/core_extension_test.rb +17 -0
- data/test/unit/ccls/county_test.rb +34 -0
- data/test/unit/ccls/data_source_test.rb +41 -0
- data/test/unit/ccls/diagnosis_test.rb +51 -0
- data/test/unit/ccls/document_type_test.rb +35 -0
- data/test/unit/ccls/document_version_test.rb +68 -0
- data/test/unit/ccls/enrollment_test.rb +575 -0
- data/test/unit/ccls/follow_up_test.rb +23 -0
- data/test/unit/ccls/follow_up_type_test.rb +34 -0
- data/test/unit/ccls/gift_card_search_test.rb +153 -0
- data/test/unit/ccls/gift_card_test.rb +40 -0
- data/test/unit/ccls/home_exposure_response_test.rb +83 -0
- data/test/unit/ccls/homex_outcome_test.rb +199 -0
- data/test/unit/ccls/hospital_test.rb +102 -0
- data/test/unit/ccls/icf_master_id_test.rb +30 -0
- data/test/unit/ccls/icf_master_tracker_change_test.rb +14 -0
- data/test/unit/ccls/icf_master_tracker_test.rb +132 -0
- data/test/unit/ccls/icf_master_tracker_update_test.rb +176 -0
- data/test/unit/ccls/ineligible_reason_test.rb +48 -0
- data/test/unit/ccls/instrument_test.rb +62 -0
- data/test/unit/ccls/instrument_type_test.rb +39 -0
- data/test/unit/ccls/instrument_version_test.rb +71 -0
- data/test/unit/ccls/interview_method_test.rb +44 -0
- data/test/unit/ccls/interview_outcome_test.rb +34 -0
- data/test/unit/ccls/interview_test.rb +298 -0
- data/test/unit/ccls/language_test.rb +47 -0
- data/test/unit/ccls/live_birth_data_update_test.rb +358 -0
- data/test/unit/ccls/operational_event_test.rb +187 -0
- data/test/unit/ccls/operational_event_type_test.rb +51 -0
- data/test/unit/ccls/organization_test.rb +64 -0
- data/test/unit/ccls/patient_test.rb +538 -0
- data/test/unit/ccls/person_test.rb +55 -0
- data/test/unit/ccls/phone_number_test.rb +244 -0
- data/test/unit/ccls/phone_type_test.rb +32 -0
- data/test/unit/ccls/project_outcome_test.rb +34 -0
- data/test/unit/ccls/project_test.rb +60 -0
- data/test/unit/ccls/race_test.rb +37 -0
- data/test/unit/ccls/refusal_reason_test.rb +52 -0
- data/test/unit/ccls/role_test.rb +26 -0
- data/test/unit/ccls/sample_kit_test.rb +35 -0
- data/test/unit/ccls/sample_outcome_test.rb +34 -0
- data/test/unit/ccls/sample_temperature_test.rb +25 -0
- data/test/unit/ccls/sample_test.rb +363 -0
- data/test/unit/ccls/sample_type_test.rb +58 -0
- data/test/unit/ccls/section_test.rb +34 -0
- data/test/unit/ccls/state_test.rb +31 -0
- data/test/unit/ccls/study_subject_abstracts_test.rb +115 -0
- data/test/unit/ccls/study_subject_addresses_test.rb +93 -0
- data/test/unit/ccls/study_subject_duplicates_test.rb +407 -0
- data/test/unit/ccls/study_subject_enrollments_test.rb +65 -0
- data/test/unit/ccls/study_subject_homex_outcome_test.rb +64 -0
- data/test/unit/ccls/study_subject_identifier_test.rb +439 -0
- data/test/unit/ccls/study_subject_interviews_test.rb +26 -0
- data/test/unit/ccls/study_subject_languages_test.rb +142 -0
- data/test/unit/ccls/study_subject_operational_events_test.rb +53 -0
- data/test/unit/ccls/study_subject_patient_test.rb +249 -0
- data/test/unit/ccls/study_subject_pii_test.rb +278 -0
- data/test/unit/ccls/study_subject_races_test.rb +203 -0
- data/test/unit/ccls/study_subject_search_test.rb +704 -0
- data/test/unit/ccls/study_subject_test.rb +770 -0
- data/test/unit/ccls/subject_language_test.rb +43 -0
- data/test/unit/ccls/subject_race_test.rb +35 -0
- data/test/unit/ccls/subject_relationship_test.rb +43 -0
- data/test/unit/ccls/subject_type_test.rb +40 -0
- data/test/unit/ccls/tracing_status_test.rb +32 -0
- data/test/unit/ccls/transfer_test.rb +81 -0
- data/test/unit/ccls/translation_table_test.rb +40 -0
- data/test/unit/ccls/unit_test.rb +21 -0
- data/test/unit/ccls/user_test.rb +156 -0
- data/test/unit/ccls/vital_status_test.rb +36 -0
- data/test/unit/ccls/zip_code_test.rb +55 -0
- metadata +633 -0
|
@@ -0,0 +1,286 @@
|
|
|
1
|
+
namespace :ccls do
|
|
2
|
+
|
|
3
|
+
desc "Dump data to xml files"
|
|
4
|
+
task :export_to_xml => :environment do
|
|
5
|
+
outdir = if Rails.env == 'production'
|
|
6
|
+
"/my/ruby/xml"
|
|
7
|
+
else
|
|
8
|
+
"."
|
|
9
|
+
end
|
|
10
|
+
%w( project enrollment study_subject
|
|
11
|
+
patient phone_number address addressing ).each do |model|
|
|
12
|
+
puts "Exporting #{model.pluralize} ..."
|
|
13
|
+
File.open("#{outdir}/#{model.pluralize}.xml",'w'){|f|
|
|
14
|
+
f.puts model.camelize.constantize.all.to_xml }
|
|
15
|
+
end
|
|
16
|
+
end
|
|
17
|
+
|
|
18
|
+
desc "Report data counts in database"
|
|
19
|
+
task :data_report => :environment do
|
|
20
|
+
puts
|
|
21
|
+
puts "Report data counts in database"
|
|
22
|
+
puts
|
|
23
|
+
printf "%-25s %5d\n", "StudySubject.count:", StudySubject.count
|
|
24
|
+
|
|
25
|
+
StudySubject.all(:select => "subject_type_id, COUNT(*) AS count",
|
|
26
|
+
:group => :subject_type_id ).each do |e|
|
|
27
|
+
printf "%-25s %5d\n", "subject_type = #{e.subject_type}:", e.count
|
|
28
|
+
end
|
|
29
|
+
|
|
30
|
+
%w{ case_control_type childidwho hispanicity_id father_hispanicity_id
|
|
31
|
+
mother_hispanicity_id sex do_not_contact }.each do |field|
|
|
32
|
+
StudySubject.all(:select => "#{field}, COUNT(*) AS count",
|
|
33
|
+
:group => field ).each do |e|
|
|
34
|
+
printf "%-25s %5d\n", "#{field} = #{e.send(field)}:", e.count
|
|
35
|
+
end
|
|
36
|
+
end
|
|
37
|
+
|
|
38
|
+
printf "%-25s %5d\n", "Patient.count:", Patient.count
|
|
39
|
+
%w{ was_under_15_at_dx was_previously_treated was_ca_resident_at_diagnosis
|
|
40
|
+
organization_id diagnosis_id
|
|
41
|
+
}.each do |field|
|
|
42
|
+
Patient.all(:select => "#{field}, COUNT(*) AS count",
|
|
43
|
+
:group => field ).each do |e|
|
|
44
|
+
printf "%-25s %5d\n", "#{field} = #{e.send(field)}:", e.count
|
|
45
|
+
end
|
|
46
|
+
end
|
|
47
|
+
|
|
48
|
+
printf "%-25s %5d\n", "Enrollment.count:", Enrollment.count
|
|
49
|
+
printf "%-25s %5d\n", "OperationalEvent.count:", OperationalEvent.count
|
|
50
|
+
%w{ operational_event_type_id }.each do |field|
|
|
51
|
+
OperationalEvent.all(:select => "#{field}, COUNT(*) AS count",
|
|
52
|
+
:group => field ).each do |e|
|
|
53
|
+
printf "%-25s %5d\n", "#{field} = #{e.send(field)}:", e.count
|
|
54
|
+
end
|
|
55
|
+
end
|
|
56
|
+
|
|
57
|
+
printf "%-25s %5d\n", "CCLS Enrollments.count:", Enrollment.count(
|
|
58
|
+
:conditions => { :project_id => Project['ccls'].id })
|
|
59
|
+
%w{ consented is_eligible refusal_reason_id document_version_id
|
|
60
|
+
ineligible_reason_id
|
|
61
|
+
}.each do |field|
|
|
62
|
+
Enrollment.all(:select => "#{field}, COUNT(*) AS count",
|
|
63
|
+
:conditions => { :project_id => Project['ccls'].id },
|
|
64
|
+
:group => field ).each do |e|
|
|
65
|
+
printf "%-25s %5d\n", "#{field} = #{e.send(field)}:", e.count
|
|
66
|
+
end
|
|
67
|
+
end
|
|
68
|
+
|
|
69
|
+
printf "%-25s %5d\n", "IcfMasterId.count:", IcfMasterId.count
|
|
70
|
+
printf "%-25s %5d\n", "Used IcfMasterId.count:", IcfMasterId.count(
|
|
71
|
+
:conditions => [ 'study_subject_id IS NOT NULL' ])
|
|
72
|
+
printf "%-25s %5d\n", "Unused IcfMasterId.count:", IcfMasterId.count(
|
|
73
|
+
:conditions => [ 'study_subject_id IS NULL' ])
|
|
74
|
+
|
|
75
|
+
printf "%-25s %5d\n", "Subjects with icf_master_id:", StudySubject.count(
|
|
76
|
+
:conditions => [ 'icf_master_id IS NOT NULL' ])
|
|
77
|
+
printf "%-25s %5d\n", "Subjects without icf_master_id:", StudySubject.count(
|
|
78
|
+
:conditions => [ 'icf_master_id IS NULL' ])
|
|
79
|
+
|
|
80
|
+
printf "%-25s %5d\n", "Subjects with childid:", StudySubject.count(
|
|
81
|
+
:conditions => [ 'childid IS NOT NULL' ])
|
|
82
|
+
printf "%-25s %5d\n", "Subjects without childid:", StudySubject.count(
|
|
83
|
+
:conditions => [ 'childid IS NULL' ])
|
|
84
|
+
|
|
85
|
+
printf "%-25s %5d\n", "Subjects with patid:", StudySubject.count(
|
|
86
|
+
:conditions => [ 'patid IS NOT NULL' ])
|
|
87
|
+
printf "%-25s %5d\n", "Subjects without patid:", StudySubject.count(
|
|
88
|
+
:conditions => [ 'patid IS NULL' ])
|
|
89
|
+
|
|
90
|
+
printf "%-25s %5d\n", "Subjects with studyid:", StudySubject.count(
|
|
91
|
+
:conditions => [ 'studyid IS NOT NULL' ])
|
|
92
|
+
printf "%-25s %5d\n", "Subjects without studyid:", StudySubject.count(
|
|
93
|
+
:conditions => [ 'studyid IS NULL' ])
|
|
94
|
+
|
|
95
|
+
printf "%-25s %5d\n", "Subjects with subjectid:", StudySubject.count(
|
|
96
|
+
:conditions => [ 'subjectid IS NOT NULL' ])
|
|
97
|
+
printf "%-25s %5d\n", "Subjects without subjectid:", StudySubject.count(
|
|
98
|
+
:conditions => [ 'subjectid IS NULL' ])
|
|
99
|
+
|
|
100
|
+
end
|
|
101
|
+
|
|
102
|
+
# task :sync_subject_type => :environment do
|
|
103
|
+
# abort("Don't do this in production! Not unless you know exactly what you're doing anyway."
|
|
104
|
+
# ) if Rails.env == 'production'
|
|
105
|
+
# Identifier.find(:all).each_with_index do |identifier,index|
|
|
106
|
+
# puts "Processing #{index}"
|
|
107
|
+
# study_subject = identifier.study_subject
|
|
108
|
+
# if study_subject.nil?
|
|
109
|
+
# puts "No study_subject on this identifier"
|
|
110
|
+
# next
|
|
111
|
+
# end
|
|
112
|
+
# puts "case_control_type #{identifier.case_control_type}"
|
|
113
|
+
# puts "subject_type #{study_subject.subject_type}"
|
|
114
|
+
# if study_subject.subject_type.to_s == 'Case' and identifier.case_control_type != 'C'
|
|
115
|
+
# puts "subject_type == 'Case' and case_control_type != 'C'"
|
|
116
|
+
# study_subject.patient.destroy unless study_subject.patient.nil?
|
|
117
|
+
# study_subject.reload.subject_type = SubjectType['Control']
|
|
118
|
+
# study_subject.save!
|
|
119
|
+
# puts "NEW subject_type #{study_subject.reload.subject_type}"
|
|
120
|
+
# end
|
|
121
|
+
# end
|
|
122
|
+
# end
|
|
123
|
+
|
|
124
|
+
desc "Load some fixtures to database for application"
|
|
125
|
+
task :update => :environment do
|
|
126
|
+
# gift_cards
|
|
127
|
+
fixtures = %w(
|
|
128
|
+
address_types
|
|
129
|
+
contexts
|
|
130
|
+
context_data_sources
|
|
131
|
+
data_sources
|
|
132
|
+
diagnoses
|
|
133
|
+
document_types
|
|
134
|
+
document_versions
|
|
135
|
+
follow_up_types
|
|
136
|
+
hospitals
|
|
137
|
+
ineligible_reasons
|
|
138
|
+
instrument_versions
|
|
139
|
+
instruments
|
|
140
|
+
interview_methods
|
|
141
|
+
interview_outcomes
|
|
142
|
+
instrument_types
|
|
143
|
+
languages
|
|
144
|
+
organizations
|
|
145
|
+
operational_event_types
|
|
146
|
+
people
|
|
147
|
+
phone_types
|
|
148
|
+
projects
|
|
149
|
+
races
|
|
150
|
+
refusal_reasons
|
|
151
|
+
roles
|
|
152
|
+
sample_outcomes
|
|
153
|
+
sample_temperatures
|
|
154
|
+
sample_types
|
|
155
|
+
sections
|
|
156
|
+
states
|
|
157
|
+
subject_relationships
|
|
158
|
+
subject_types
|
|
159
|
+
tracing_statuses
|
|
160
|
+
units
|
|
161
|
+
vital_statuses
|
|
162
|
+
)
|
|
163
|
+
ENV['FIXTURES'] = fixtures.join(',')
|
|
164
|
+
puts "Loading fixtures for #{ENV['FIXTURES']}"
|
|
165
|
+
Rake::Task["db:fixtures:load"].invoke
|
|
166
|
+
Rake::Task["db:fixtures:load"].reenable
|
|
167
|
+
end
|
|
168
|
+
|
|
169
|
+
task :full_update => :update do
|
|
170
|
+
#
|
|
171
|
+
# We don't use this yet, plus it hasn't changed, so why keep updating it?
|
|
172
|
+
# It takes about 30 minutes.
|
|
173
|
+
#
|
|
174
|
+
# # the zip_codes.csv fixtures is too big and takes too long to
|
|
175
|
+
# # load in testing, so I left a small one there and put
|
|
176
|
+
# # the full version from http://www.populardata.com/zipcode_database.html
|
|
177
|
+
fixtures = %w(
|
|
178
|
+
zip_codes
|
|
179
|
+
counties
|
|
180
|
+
)
|
|
181
|
+
# Do not import icf_master_ids this way in production as these are real
|
|
182
|
+
# icf_master_ids and some may be assigned to real subjects already.
|
|
183
|
+
# icf_master_ids
|
|
184
|
+
ENV['FIXTURES'] = fixtures.join(',')
|
|
185
|
+
ENV['FIXTURES_PATH'] = 'production/fixtures'
|
|
186
|
+
puts "Loading production fixtures for #{ENV['FIXTURES']}"
|
|
187
|
+
Rake::Task["db:fixtures:load"].invoke
|
|
188
|
+
Rake::Task["db:fixtures:load"].reenable
|
|
189
|
+
end
|
|
190
|
+
|
|
191
|
+
desc "Add some expected users."
|
|
192
|
+
task :add_users => :environment do
|
|
193
|
+
puts "Adding users"
|
|
194
|
+
%w( 859908 228181 214766 180918 66458 768475
|
|
195
|
+
10883 86094 769067 ).each do |uid|
|
|
196
|
+
puts " - Adding user with uid:#{uid}:"
|
|
197
|
+
User.find_create_and_update_by_uid(uid)
|
|
198
|
+
end
|
|
199
|
+
end
|
|
200
|
+
|
|
201
|
+
desc "Add user by UID"
|
|
202
|
+
task :add_user => :environment do
|
|
203
|
+
puts
|
|
204
|
+
if ENV['uid'].blank?
|
|
205
|
+
puts "User's CalNet UID required."
|
|
206
|
+
puts "Usage: rake #{$*} uid=INTEGER"
|
|
207
|
+
puts
|
|
208
|
+
exit
|
|
209
|
+
end
|
|
210
|
+
if !User.exists?(:uid => ENV['uid'])
|
|
211
|
+
puts "No user found with uid=#{ENV['uid']}. Adding..."
|
|
212
|
+
User.find_create_and_update_by_uid(ENV['uid'])
|
|
213
|
+
else
|
|
214
|
+
puts "User with uid #{ENV['uid']} already exists."
|
|
215
|
+
end
|
|
216
|
+
puts
|
|
217
|
+
end
|
|
218
|
+
|
|
219
|
+
desc "Deputize user by UID"
|
|
220
|
+
task :deputize => :environment do
|
|
221
|
+
puts
|
|
222
|
+
if ENV['uid'].blank?
|
|
223
|
+
puts "User's CalNet UID required."
|
|
224
|
+
puts "Usage: rake #{$*} uid=INTEGER"
|
|
225
|
+
puts
|
|
226
|
+
exit
|
|
227
|
+
end
|
|
228
|
+
if !User.exists?(:uid => ENV['uid'])
|
|
229
|
+
puts "No user found with uid=#{ENV['uid']}."
|
|
230
|
+
puts
|
|
231
|
+
exit
|
|
232
|
+
end
|
|
233
|
+
user = User.find(:first, :conditions => { :uid => ENV['uid'] })
|
|
234
|
+
puts "Found user #{user.displayname}. Deputizing..."
|
|
235
|
+
user.deputize
|
|
236
|
+
puts "User deputized: #{user.is_administrator?}"
|
|
237
|
+
puts
|
|
238
|
+
end
|
|
239
|
+
|
|
240
|
+
end
|
|
241
|
+
|
|
242
|
+
|
|
243
|
+
__END__
|
|
244
|
+
|
|
245
|
+
# task :args_as_array do
|
|
246
|
+
# args = $*.dup.slice(1..-1)
|
|
247
|
+
# puts args.collect {|arg| "X:" << arg }.join("\n")
|
|
248
|
+
# exit
|
|
249
|
+
# end
|
|
250
|
+
|
|
251
|
+
|
|
252
|
+
Another way to pass arguments to rake task as demonstrated by one of the sunspot gem's tasks
|
|
253
|
+
...
|
|
254
|
+
# This task depends on the standard Rails file naming \
|
|
255
|
+
# conventions, in that the file name matches the defined class name. \
|
|
256
|
+
# By default the indexing system works in batches of 50 records, you can \
|
|
257
|
+
# set your own value for this by using the batch_size argument. You can \
|
|
258
|
+
# also optionally define a list of models to separated by a forward slash '/'
|
|
259
|
+
#
|
|
260
|
+
# $ rake sunspot:reindex # reindex all models
|
|
261
|
+
# $ rake sunspot:reindex[1000] # reindex in batches of 1000
|
|
262
|
+
# $ rake sunspot:reindex[false] # reindex without batching
|
|
263
|
+
# $ rake sunspot:reindex[,Post] # reindex only the Post model
|
|
264
|
+
# $ rake sunspot:reindex[1000,Post] # reindex only the Post model in
|
|
265
|
+
# # batchs of 1000
|
|
266
|
+
# $ rake sunspot:reindex[,Post+Author] # reindex Post and Author model
|
|
267
|
+
task :reindex, :batch_size, :models, :needs => :environment do |t, args|
|
|
268
|
+
reindex_options = {:batch_commit => false}
|
|
269
|
+
case args[:batch_size]
|
|
270
|
+
when 'false'
|
|
271
|
+
reindex_options[:batch_size] = nil
|
|
272
|
+
when /^\d+$/
|
|
273
|
+
reindex_options[:batch_size] = args[:batch_size].to_i if args[:batch_size].to_i > 0
|
|
274
|
+
end
|
|
275
|
+
unless args[:models]
|
|
276
|
+
all_files = Dir.glob(Rails.root.join('app', 'models', '*.rb'))
|
|
277
|
+
all_models = all_files.map { |path| File.basename(path, '.rb').camelize.constantize }
|
|
278
|
+
sunspot_models = all_models.select { |m| m < ActiveRecord::Base and m.searchable? }
|
|
279
|
+
else
|
|
280
|
+
sunspot_models = args[:models].split('+').map{|m| m.constantize}
|
|
281
|
+
end
|
|
282
|
+
sunspot_models.each do |model|
|
|
283
|
+
model.solr_reindex reindex_options
|
|
284
|
+
end
|
|
285
|
+
end
|
|
286
|
+
|
|
@@ -0,0 +1,288 @@
|
|
|
1
|
+
namespace :db do
|
|
2
|
+
|
|
3
|
+
# desc "Import subject and address data from CSV files"
|
|
4
|
+
# task :import_csv_data => [
|
|
5
|
+
# :destroy_csv_data,
|
|
6
|
+
# :import_subject_data,
|
|
7
|
+
# :import_matchingid_and_familyid,
|
|
8
|
+
# :import_address_data,
|
|
9
|
+
# :random_enrollments_data
|
|
10
|
+
# ]
|
|
11
|
+
|
|
12
|
+
desc "Destroy subject and address data"
|
|
13
|
+
task :destroy_csv_data => :environment do
|
|
14
|
+
StudySubject.destroy_all
|
|
15
|
+
Enrollment.destroy_all
|
|
16
|
+
Addressing.destroy_all
|
|
17
|
+
Address.destroy_all
|
|
18
|
+
PhoneNumber.destroy_all
|
|
19
|
+
Interview.destroy_all
|
|
20
|
+
# Identifier.destroy_all
|
|
21
|
+
Patient.destroy_all
|
|
22
|
+
# Pii.destroy_all
|
|
23
|
+
# ResponseSet.destroy_all
|
|
24
|
+
# Response.destroy_all
|
|
25
|
+
Sample.destroy_all
|
|
26
|
+
SampleKit.destroy_all
|
|
27
|
+
# Package.destroy_all
|
|
28
|
+
HomexOutcome.destroy_all
|
|
29
|
+
InterviewOutcome.destroy_all
|
|
30
|
+
HomeExposureResponse.destroy_all
|
|
31
|
+
OperationalEvent.destroy_all
|
|
32
|
+
ProjectOutcome.destroy_all
|
|
33
|
+
SampleOutcome.destroy_all
|
|
34
|
+
# Track.destroy_all
|
|
35
|
+
Transfer.destroy_all
|
|
36
|
+
# SurveyInvitation.destroy_all
|
|
37
|
+
end
|
|
38
|
+
|
|
39
|
+
task :random_enrollments_data => :environment do
|
|
40
|
+
p = Project.find_or_create_by_code({
|
|
41
|
+
:code => "HomeExposures",
|
|
42
|
+
:description => "HomeExposures"
|
|
43
|
+
})
|
|
44
|
+
StudySubject.all.each do |s|
|
|
45
|
+
puts s.id
|
|
46
|
+
# 2440000 is sometime in 1968
|
|
47
|
+
# 2455000 is sometime in 2009
|
|
48
|
+
|
|
49
|
+
options = {
|
|
50
|
+
:study_subject => s,
|
|
51
|
+
:project => p,
|
|
52
|
+
:is_candidate => true,
|
|
53
|
+
:able_to_locate => true
|
|
54
|
+
}
|
|
55
|
+
options[:is_eligible] = [nil,1,2,999][rand(4)]
|
|
56
|
+
if options[:is_eligible] == 2
|
|
57
|
+
ir = IneligibleReason.random()
|
|
58
|
+
options[:ineligible_reason_id] = ir.id
|
|
59
|
+
if ir.is_other?
|
|
60
|
+
options[:ineligible_reason_specify] = "Random reason ineligible"
|
|
61
|
+
end
|
|
62
|
+
end
|
|
63
|
+
|
|
64
|
+
options[:is_chosen] = [nil,1,2,999][rand(4)]
|
|
65
|
+
if options[:is_chosen] == 2
|
|
66
|
+
options[:reason_not_chosen] = "Random reason not chosen"
|
|
67
|
+
end
|
|
68
|
+
|
|
69
|
+
options[:consented] = [nil,1,2,999][rand(4)]
|
|
70
|
+
if options[:consented] == 1
|
|
71
|
+
options[:consented_on] = Date.jd(2440000+rand(15000))
|
|
72
|
+
elsif options[:consented] == 2
|
|
73
|
+
options[:consented_on] = Date.jd(2440000+rand(15000))
|
|
74
|
+
rr = RefusalReason.random()
|
|
75
|
+
options[:refusal_reason_id] = rr.id
|
|
76
|
+
if rr.is_other?
|
|
77
|
+
options[:other_refusal_reason] = "Random refusal reason"
|
|
78
|
+
end
|
|
79
|
+
end
|
|
80
|
+
|
|
81
|
+
options[:terminated_participation] = [nil,1,2,999][rand(4)]
|
|
82
|
+
if options[:terminated_participation] == 1
|
|
83
|
+
options[:terminated_reason] = "Random terminated reason"
|
|
84
|
+
end
|
|
85
|
+
|
|
86
|
+
options[:is_complete] = [nil,1,2,999][rand(4)]
|
|
87
|
+
if options[:is_complete] == 1
|
|
88
|
+
options[:completed_on] = Date.jd(2440000+rand(15000))
|
|
89
|
+
end
|
|
90
|
+
Enrollment.create!(options)
|
|
91
|
+
|
|
92
|
+
|
|
93
|
+
options = {
|
|
94
|
+
:interview_outcome => InterviewOutcome.random(),
|
|
95
|
+
:sample_outcome => SampleOutcome.random()
|
|
96
|
+
}
|
|
97
|
+
if options[:interview_outcome]
|
|
98
|
+
options[:interview_outcome_on] = Date.jd(2440000+rand(15000))
|
|
99
|
+
end
|
|
100
|
+
if options[:sample_outcome]
|
|
101
|
+
options[:sample_outcome_on] = Date.jd(2440000+rand(15000))
|
|
102
|
+
end
|
|
103
|
+
s.build_homex_outcome(options)
|
|
104
|
+
s.save!
|
|
105
|
+
end
|
|
106
|
+
end
|
|
107
|
+
|
|
108
|
+
# desc "Import subject data from CSV file"
|
|
109
|
+
# task :import_subjectid => :environment do
|
|
110
|
+
# require 'fastercsv'
|
|
111
|
+
# # DO NOT COMMENT OUT THE HEADER LINE OR IT RAISES CRYPTIC ERROR
|
|
112
|
+
# (f=FasterCSV.open('misc/dummy_subject_pii_etc.csv', 'rb',{
|
|
113
|
+
# :headers => true })).each do |line|
|
|
114
|
+
## Childid,patID,Type,OrderNo,subjectID,sex,DOB,RefDate,InterviewDate,First_Name,Middle_Name,Last_Name,Mother_First_Name,Mother_Middle_Name,Mother_Maiden_Name,Mother_Last_Name,Father_First_Name,Father_Middle_Name,Father_Last_Name,Primary_Phone,Alternate_phone1,Alternate_phone2,Alternate_phone3
|
|
115
|
+
# puts "Processing line #{f.lineno}"
|
|
116
|
+
# puts line
|
|
117
|
+
#
|
|
118
|
+
# # due to padding it with zeros, NEED this to be an Integer
|
|
119
|
+
# # doesn't work correctly in sqlite so just pad it before search
|
|
120
|
+
# identifier = Identifier.find_by_childid(
|
|
121
|
+
# sprintf("%06d",line['Childid'].to_i))
|
|
122
|
+
# raise ActiveRecord::RecordNotFound unless identifier
|
|
123
|
+
#
|
|
124
|
+
# identifier.update_attributes!(:subjectid => line['subjectID'])
|
|
125
|
+
#
|
|
126
|
+
# end
|
|
127
|
+
# end
|
|
128
|
+
#
|
|
129
|
+
# desc "Import matchingid and familyid data from CSV file"
|
|
130
|
+
# task :import_matchingid_and_familyid => :environment do
|
|
131
|
+
# require 'fastercsv'
|
|
132
|
+
# # DO NOT COMMENT OUT THE HEADER LINE OR IT RAISES CRYPTIC ERROR
|
|
133
|
+
# (f=FasterCSV.open('misc/subjectmatchingfamilyids_xref.csv', 'rb',{
|
|
134
|
+
# :headers => true })).each do |line|
|
|
135
|
+
## subjectID,matchingID,familyid
|
|
136
|
+
# puts "Processing line #{f.lineno}"
|
|
137
|
+
# puts line
|
|
138
|
+
# if line['subjectID'] =~ /^\s*#/
|
|
139
|
+
# puts "skipping as subjectid not found"
|
|
140
|
+
# next
|
|
141
|
+
# end
|
|
142
|
+
#
|
|
143
|
+
# # due to padding it with zeros, NEED this to be an Integer
|
|
144
|
+
# # doesn't work correctly in sqlite so just pad it before search
|
|
145
|
+
# identifier = Identifier.find_by_subjectid(
|
|
146
|
+
# sprintf("%06d",line['subjectID'].to_i))
|
|
147
|
+
# raise ActiveRecord::RecordNotFound unless identifier
|
|
148
|
+
#
|
|
149
|
+
# identifier.update_attributes!(
|
|
150
|
+
# :matchingid => line['matchingID'],
|
|
151
|
+
# :familyid => line['familyid']
|
|
152
|
+
# )
|
|
153
|
+
#
|
|
154
|
+
# end
|
|
155
|
+
# end
|
|
156
|
+
#
|
|
157
|
+
# desc "Import address data from CSV file"
|
|
158
|
+
# task :import_address_data => :environment do
|
|
159
|
+
# require 'fastercsv'
|
|
160
|
+
# # DO NOT COMMENT OUT THE HEADER LINE OR IT RAISES CRYPTIC ERROR
|
|
161
|
+
# (f=FasterCSV.open('misc/dummy_addresses.csv', 'rb',{
|
|
162
|
+
# :headers => true })).each do |line|
|
|
163
|
+
## subjectID,Address_Type_ID,Address_Line1,Address_City,Address_State,Address_Zip
|
|
164
|
+
# puts "Processing line #{f.lineno}"
|
|
165
|
+
# puts line
|
|
166
|
+
#
|
|
167
|
+
# # due to padding it with zeros, NEED this to be an Integer
|
|
168
|
+
# # doesn't work correctly in sqlite so just pad it before search
|
|
169
|
+
# study_subject = Identifier.find_by_subjectid(
|
|
170
|
+
# sprintf("%06d",line['subjectID'].to_i)).study_subject
|
|
171
|
+
# raise ActiveRecord::RecordNotFound unless study_subject
|
|
172
|
+
#
|
|
173
|
+
## address_type = AddressType.find(line[1].to_s)
|
|
174
|
+
## address_type = AddressType.find_by_code(
|
|
175
|
+
## (line[1].to_s == '1')?'Home':'Mailing')
|
|
176
|
+
## raise ActiveRecord::RecordNotFound unless address_type
|
|
177
|
+
#
|
|
178
|
+
## study_subject.addressings << Addressing.create!(
|
|
179
|
+
## :study_subject_id => study_subject.id,
|
|
180
|
+
# study_subject.addressings.create!(
|
|
181
|
+
# :current_address => 1, # Yes
|
|
182
|
+
# :is_valid => true,
|
|
183
|
+
# :is_verified => false,
|
|
184
|
+
# :address_attributes => {
|
|
185
|
+
# :address_type_id => line['Address_Type_ID'].to_i,
|
|
186
|
+
# :line_1 => line['Address_Line1']||"FAKE LINE 1",
|
|
187
|
+
# :city => line['Address_City']||"FAKE CITY",
|
|
188
|
+
# :state => line['Address_State']||"FAKE STATE",
|
|
189
|
+
# :zip => line['Address_Zip']||"12345-6789"
|
|
190
|
+
# }
|
|
191
|
+
# )
|
|
192
|
+
# end
|
|
193
|
+
# end
|
|
194
|
+
#
|
|
195
|
+
# desc "Import subject data from CSV file"
|
|
196
|
+
# task :import_subject_data => :environment do
|
|
197
|
+
# require 'fastercsv'
|
|
198
|
+
# # DO NOT COMMENT OUT THE HEADER LINE OR IT RAISES CRYPTIC ERROR
|
|
199
|
+
# (f=FasterCSV.open('misc/dummy_subject_pii_etc.csv', 'rb',{
|
|
200
|
+
# :headers => true })).each do |line|
|
|
201
|
+
## Childid,patID,Type,OrderNo,subjectID,sex,DOB,RefDate,InterviewDate,First_Name,Middle_Name,Last_Name,Mother_First_Name,Mother_Middle_Name,Mother_Maiden_Name,Mother_Last_Name,Father_First_Name,Father_Middle_Name,Father_Last_Name,Primary_Phone,Alternate_phone1,Alternate_phone2,Alternate_phone3
|
|
202
|
+
# puts "Processing line #{f.lineno}"
|
|
203
|
+
# puts line
|
|
204
|
+
#
|
|
205
|
+
## subject_type = SubjectType['Case']
|
|
206
|
+
# subject_type = SubjectType.random()
|
|
207
|
+
#
|
|
208
|
+
# # TODO (not included in csv)
|
|
209
|
+
## race = Race[1]
|
|
210
|
+
# race = Race.random()
|
|
211
|
+
#
|
|
212
|
+
# dob = (line['DOB'].blank?)?'':Time.parse(line['DOB'])
|
|
213
|
+
# refdate = (line['RefDate'].blank?)?'':Time.parse(line['RefDate'])
|
|
214
|
+
# interview_date = (line['InterviewDate'].blank?)?'':Time.parse(line['InterviewDate'])
|
|
215
|
+
# study_subject = StudySubject.create!({
|
|
216
|
+
## :patient_attributes => { }, # TODO (patid)
|
|
217
|
+
# :pii_attributes => {
|
|
218
|
+
# :first_name => line['First_Name'],
|
|
219
|
+
# :middle_name => line['Middle_Name'],
|
|
220
|
+
# :last_name => line['Last_Name'],
|
|
221
|
+
# :father_first_name => line['Father_First_Name'],
|
|
222
|
+
# :father_middle_name => line['Father_Middle_Name'],
|
|
223
|
+
# :father_last_name => line['Father_Last_Name'],
|
|
224
|
+
# :mother_first_name => line['Mother_First_Name'],
|
|
225
|
+
# :mother_middle_name => line['Mother_Middle_Name'],
|
|
226
|
+
# :mother_maiden_name => line['Mother_Maiden_Name'],
|
|
227
|
+
# :mother_last_name => line['Mother_Last_Name'],
|
|
228
|
+
# :dob => dob
|
|
229
|
+
# },
|
|
230
|
+
# :identifier_attributes => {
|
|
231
|
+
# :state_id_no => sprintf('%09d',line['Childid']), # TODO
|
|
232
|
+
# :subjectid => line['subjectID'],
|
|
233
|
+
# :ssn => sprintf('%09d',line['Childid']), # TODO
|
|
234
|
+
# :patid => line['patID'],
|
|
235
|
+
# :case_control_type => line['Type'],
|
|
236
|
+
# :orderno => line['OrderNo'],
|
|
237
|
+
# :childid => line['Childid']
|
|
238
|
+
# },
|
|
239
|
+
# :subject_type => subject_type,
|
|
240
|
+
# :sex => line['sex'],
|
|
241
|
+
# :reference_date => refdate
|
|
242
|
+
# })
|
|
243
|
+
# study_subject.races = [race]
|
|
244
|
+
#
|
|
245
|
+
## Identifier.create!({
|
|
246
|
+
## :study_subject_id => study_subject.id,
|
|
247
|
+
## :state_id_no => sprintf('%09d',line['Childid']), # TODO
|
|
248
|
+
## :subjectid => line['subjectID'],
|
|
249
|
+
## :ssn => sprintf('%09d',line['Childid']), # TODO
|
|
250
|
+
## :patid => line['patID'],
|
|
251
|
+
## :case_control_type => line['Type'],
|
|
252
|
+
## :orderno => line['OrderNo'],
|
|
253
|
+
## :childid => line['Childid']
|
|
254
|
+
## })
|
|
255
|
+
#
|
|
256
|
+
# (19..22).each do |i|
|
|
257
|
+
## PhoneNumber.create!({
|
|
258
|
+
# study_subject.phone_numbers.create!({
|
|
259
|
+
## :study_subject_id => study_subject.id,
|
|
260
|
+
# :phone_type_id => 1,
|
|
261
|
+
# :phone_number => line[i]
|
|
262
|
+
# }) unless line[i].blank?
|
|
263
|
+
# end
|
|
264
|
+
#
|
|
265
|
+
# options = {
|
|
266
|
+
## :identifier_id => study_subject.identifier.id,
|
|
267
|
+
# :interview_method => InterviewMethod.random(),
|
|
268
|
+
# :interviewer => Person.random(),
|
|
269
|
+
# :language => Language.random(),
|
|
270
|
+
# :instrument_version => InstrumentVersion.random(),
|
|
271
|
+
# :began_on => interview_date,
|
|
272
|
+
# :ended_on => interview_date
|
|
273
|
+
# }
|
|
274
|
+
# options[:subject_relationship] = SubjectRelationship.random()
|
|
275
|
+
# if options[:subject_relationship].is_other?
|
|
276
|
+
# options[:subject_relationship_other] = 'super unknown god buddy'
|
|
277
|
+
# end
|
|
278
|
+
#
|
|
279
|
+
## Interview.create!(options)
|
|
280
|
+
# study_subject.interviews.create!(options)
|
|
281
|
+
#
|
|
282
|
+
## use Time.parse to parse all dates (better than Date.parse)
|
|
283
|
+
#
|
|
284
|
+
## need ssn, state_id_no in data (making it up now)
|
|
285
|
+
#
|
|
286
|
+
# end
|
|
287
|
+
# end
|
|
288
|
+
end
|