@@ -4,8 +4,12 @@ class ExportPartnersCSVService
44 # to this service object; this is happening within the same request/response cycle, so it's already
55 # in memory, so we can pass that collection in directly. Should this be moved to a background / async
66 # job, we will need to pass in a collection of IDs instead.
7- def initialize ( partners )
7+ def initialize ( partners , organization )
88 @partners = partners . includes ( :profile )
9+ # Assumes that all of the partners belong to the same organization. This is true for the time being
10+ # and, were that to change, base_table would need to be reworked anyway to account for partners from
11+ # different orgs having different partials enabled, and thus different columns in the CSV.
12+ @partials_to_show = organization . partials_to_show
913 end
1014
1115 def generate_csv
@@ -19,28 +23,148 @@ def generate_csv
1923
2024 attr_reader :partners
2125
22- def headers
23- base_table . keys
24- end
25-
2626 def base_table
27- {
27+ table = {
2828 "Agency Name" => -> ( partner ) { partner . name } ,
2929 "Agency Email" => -> ( partner ) { partner . email } ,
30- "Agency Address" => -> ( partner ) { partner . agency_info [ :address ] } ,
31- "Agency City" => -> ( partner ) { partner . agency_info [ :city ] } ,
32- "Agency State" => -> ( partner ) { partner . agency_info [ :state ] } ,
33- "Agency Zip Code" => -> ( partner ) { partner . agency_info [ :zip_code ] } ,
34- "Agency Website" => -> ( partner ) { partner . agency_info [ :website ] } ,
35- "Agency Type" => -> ( partner ) { partner . agency_info [ :agency_type ] } ,
36- "Contact Name" => -> ( partner ) { partner . contact_person [ :name ] } ,
37- "Contact Phone" => -> ( partner ) { partner . contact_person [ :phone ] } ,
38- "Contact Email" => -> ( partner ) { partner . contact_person [ :email ] } ,
3930 "Notes" => -> ( partner ) { partner . notes } ,
40- "Counties Served" => -> ( partner ) { county_list_by_regions [ partner . id ] || "" } ,
41- "Providing Diapers" => -> ( partner ) { diaper_statuses [ partner . id ] } ,
42- "Providing Period Supplies" => -> ( partner ) { period_supplies_statuses [ partner . id ] }
31+ "Agency Type" => -> ( partner ) { I18n . t ( partner . profile . agency_type , scope : :partners_profile ) } , # Columns from the agency_information partial
32+ "Other Agency Type" => -> ( partner ) { partner . profile . other_agency_type } ,
33+ "Agency Mission" => -> ( partner ) { partner . profile . agency_mission } ,
34+ "Agency Address" => -> ( partner ) {
35+ ( partner . profile . address1 . blank? || partner . profile . address2 . blank? ) ?
36+ "" : "#{ partner . profile . address1 } , #{ partner . profile . address2 } "
37+ } ,
38+ "Agency City" => -> ( partner ) { partner . profile . city } ,
39+ "Agency State" => -> ( partner ) { partner . profile . state } ,
40+ "Agency Zip Code" => -> ( partner ) { partner . profile . zip_code } ,
41+ "Program/Delivery Address" => -> ( partner ) {
42+ ( partner . profile . program_address1 . blank? || partner . profile . program_address2 . blank? ) ?
43+ "" : "#{ partner . profile . program_address1 } , #{ partner . profile . program_address2 } "
44+ } ,
45+ "Program City" => -> ( partner ) { partner . profile . program_city } ,
46+ "Program State" => -> ( partner ) { partner . profile . program_state } ,
47+ "Program Zip Code" => -> ( partner ) { partner . profile . program_zip_code }
4348 }
49+
50+ media_information_col ( table )
51+ agency_stability_col ( table )
52+ organizational_capacity_col ( table )
53+ sources_of_funding_col ( table )
54+ area_served_col ( table )
55+ population_served_col ( table )
56+ executive_director_col ( table )
57+ pick_up_person_col ( table )
58+ agency_distribution_information_col ( table )
59+
60+ table [ "Quantity-based Requests" ] = -> ( partner ) { partner . profile . enable_quantity_based_requests } # Columns from the partner_settings partial
61+ table [ "Child-based Requests" ] = -> ( partner ) { partner . profile . enable_child_based_requests }
62+ table [ "Individual Requests" ] = -> ( partner ) { partner . profile . enable_individual_requests }
63+
64+ table [ "Providing Diapers" ] = -> ( partner ) { diaper_statuses [ partner . id ] }
65+ table [ "Providing Period Supplies" ] = -> ( partner ) { period_supplies_statuses [ partner . id ] }
66+
67+ table
68+ end
69+
70+ def media_information_col ( table )
71+ if @partials_to_show . include? "media_information"
72+ table [ "Agency Website" ] = -> ( partner ) { partner . profile . website }
73+ table [ "Facebook" ] = -> ( partner ) { partner . profile . facebook }
74+ table [ "Twitter" ] = -> ( partner ) { partner . profile . twitter }
75+ table [ "Instagram" ] = -> ( partner ) { partner . profile . instagram }
76+ table [ "No Social Media Presence" ] = -> ( partner ) { partner . profile . no_social_media_presence }
77+ end
78+ end
79+
80+ def agency_stability_col ( table )
81+ if @partials_to_show . include? "agency_stability"
82+ table [ "Year Founded" ] = -> ( partner ) { partner . profile . founded }
83+ table [ "Form 990 Filed" ] = -> ( partner ) { partner . profile . form_990 }
84+ table [ "Program Name" ] = -> ( partner ) { partner . profile . program_name }
85+ table [ "Program Description" ] = -> ( partner ) { partner . profile . program_description }
86+ table [ "Agency Age" ] = -> ( partner ) { partner . profile . program_age }
87+ table [ "Evidence Based" ] = -> ( partner ) { partner . profile . evidence_based }
88+ table [ "Case Management" ] = -> ( partner ) { partner . profile . case_management }
89+ table [ "How Are Essentials Used" ] = -> ( partner ) { partner . profile . essentials_use }
90+ table [ "Receive Essentials From Other Sources" ] = -> ( partner ) { partner . profile . receives_essentials_from_other }
91+ table [ "Currently Providing Diapers" ] = -> ( partner ) { partner . profile . currently_provide_diapers }
92+ end
93+ end
94+
95+ def organizational_capacity_col ( table )
96+ if @partials_to_show . include? "organizational_capacity"
97+ table [ "Client Capacity" ] = -> ( partner ) { partner . profile . client_capacity }
98+ table [ "Storage Space" ] = -> ( partner ) { partner . profile . storage_space }
99+ table [ "Storage Space Description" ] = -> ( partner ) { partner . profile . describe_storage_space }
100+ end
101+ end
102+
103+ def sources_of_funding_col ( table )
104+ if @partials_to_show . include? "sources_of_funding"
105+ table [ "Sources Of Funding" ] = -> ( partner ) { partner . profile . sources_of_funding }
106+ table [ "How do you currently obtain diapers?" ] = -> ( partner ) { partner . profile . sources_of_diapers }
107+ table [ "Essentials Budget" ] = -> ( partner ) { partner . profile . essentials_budget }
108+ table [ "Essentials Funding Source" ] = -> ( partner ) { partner . profile . essentials_funding_source }
109+ end
110+ end
111+
112+ def area_served_col ( table )
113+ if @partials_to_show . include? "area_served"
114+ table [ "Area Served" ] = -> ( partner ) { county_list_by_regions [ partner . id ] || "" }
115+ end
116+ end
117+
118+ def population_served_col ( table )
119+ if @partials_to_show . include? "population_served"
120+ table [ "Income Requirement" ] = -> ( partner ) { partner . profile . income_requirement_desc }
121+ table [ "Verify Income" ] = -> ( partner ) { partner . profile . income_verification }
122+ table [ "% African American" ] = -> ( partner ) { partner . profile . population_black }
123+ table [ "% Caucasian" ] = -> ( partner ) { partner . profile . population_white }
124+ table [ "% Hispanic" ] = -> ( partner ) { partner . profile . population_hispanic }
125+ table [ "% Asian" ] = -> ( partner ) { partner . profile . population_asian }
126+ table [ "% American Indian" ] = -> ( partner ) { partner . profile . population_american_indian }
127+ table [ "% Pacific Island" ] = -> ( partner ) { partner . profile . population_island }
128+ table [ "% Multi-racial" ] = -> ( partner ) { partner . profile . population_multi_racial }
129+ table [ "% Other" ] = -> ( partner ) { partner . profile . population_other }
130+ table [ "Zip Codes Served" ] = -> ( partner ) { partner . profile . zips_served }
131+ table [ "% At FPL or Below" ] = -> ( partner ) { partner . profile . at_fpl_or_below }
132+ table [ "% Above 1-2 times FPL" ] = -> ( partner ) { partner . profile . above_1_2_times_fpl }
133+ table [ "% Greater than 2 times FPL" ] = -> ( partner ) { partner . profile . greater_2_times_fpl }
134+ table [ "% Poverty Unknown" ] = -> ( partner ) { partner . profile . poverty_unknown }
135+ end
136+ end
137+
138+ def executive_director_col ( table )
139+ if @partials_to_show . include? "executive_director"
140+ table [ "Executive Director Name" ] = -> ( partner ) { partner . profile . executive_director_name }
141+ table [ "Executive Director Phone" ] = -> ( partner ) { partner . profile . executive_director_phone }
142+ table [ "Executive Director Email" ] = -> ( partner ) { partner . profile . executive_director_email }
143+ table [ "Primary Contact Name" ] = -> ( partner ) { partner . profile . primary_contact_name }
144+ table [ "Primary Contact Phone" ] = -> ( partner ) { partner . profile . primary_contact_phone }
145+ table [ "Primary Contact Cell" ] = -> ( partner ) { partner . profile . primary_contact_mobile }
146+ table [ "Primary Contact Email" ] = -> ( partner ) { partner . profile . primary_contact_email }
147+ end
148+ end
149+
150+ def pick_up_person_col ( table )
151+ if @partials_to_show . include? "pick_up_person"
152+ table [ "Pick Up Person Name" ] = -> ( partner ) { partner . profile . pick_up_name }
153+ table [ "Pick Up Person Phone" ] = -> ( partner ) { partner . profile . pick_up_phone }
154+ table [ "Pick Up Person Email" ] = -> ( partner ) { partner . profile . pick_up_email }
155+ end
156+ end
157+
158+ def agency_distribution_information_col ( table )
159+ if @partials_to_show . include? "agency_distribution_information"
160+ table [ "Distribution Times" ] = -> ( partner ) { partner . profile . distribution_times }
161+ table [ "New Client Times" ] = -> ( partner ) { partner . profile . new_client_times }
162+ table [ "More Docs Required" ] = -> ( partner ) { partner . profile . more_docs_required }
163+ end
164+ end
165+
166+ def headers
167+ base_table . keys
44168 end
45169
46170 def build_row_data ( partner )
0 commit comments