diff --git a/.rubocop_todo.yml b/.rubocop_todo.yml index 4be769f4..321c034e 100644 --- a/.rubocop_todo.yml +++ b/.rubocop_todo.yml @@ -1,6 +1,6 @@ # This configuration was generated by # `rubocop --auto-gen-config --exclude-limit 9999` -# on 2020-03-09 00:26:07 -0400 using RuboCop version 0.80.1. +# on 2020-04-06 20:32:47 -0400 using RuboCop version 0.80.1. # The point is for the user to remove these configuration records # one by one as the offenses are removed from the code base. # Note that changes in the inspected code, or installation of new @@ -29,6 +29,13 @@ Rails/HelperInstanceVariable: Exclude: - 'app/helpers/application_helper.rb' +# Offense count: 1 +# Configuration parameters: Include. +# Include: app/models/**/*.rb +Rails/InverseOf: + Exclude: + - 'app/models/partner.rb' + # Offense count: 2 # Configuration parameters: Include. # Include: app/**/*.rb, config/**/*.rb, db/**/*.rb, lib/**/*.rb diff --git a/app/controllers/api/v1/partner_forms_controller.rb b/app/controllers/api/v1/partner_forms_controller.rb new file mode 100644 index 00000000..69b4ff19 --- /dev/null +++ b/app/controllers/api/v1/partner_forms_controller.rb @@ -0,0 +1,35 @@ +class Api::V1::PartnerFormsController < ApiController + skip_before_action :verify_authenticity_token + respond_to :json + + def create + return head :forbidden unless api_key_valid? + + partner_form = PartnerForm.where( + diaper_bank_id: partner_form_params[:diaper_bank_id], + ).first_or_create + + partner_form.update(sections: partner_form_params[:sections]) + + render json: { + partner_form: partner_form + } + rescue ActiveRecord::RecordInvalid => e + render e.message + end + + private + + def api_key_valid? + return true if Rails.env.development? + + request.headers["X-Api-Key"] == ENV["DIAPER_KEY"] + end + + def partner_form_params + params.require(:partner_form).permit( + :diaper_bank_id, + sections: [] + ) + end +end diff --git a/app/models/partner.rb b/app/models/partner.rb index 495513de..1a4474d4 100644 --- a/app/models/partner.rb +++ b/app/models/partner.rb @@ -101,9 +101,22 @@ class Partner < ApplicationRecord has_many :partner_requests, dependent: :destroy has_many :family_requests, dependent: :destroy + has_one :partner_form, primary_key: :diaper_bank_id, foreign_key: :diaper_bank_id, dependent: :destroy delegate :email, to: :user + ALL_PARTIALS = %w[ + media_information + agency_stability + organizational_capacity + sources_of_funding + population_served + executive_director + diaper_pick_up_person + agency_distribution_information + attached_documents + ].freeze + def export_hash { name: name, @@ -228,6 +241,10 @@ def flipper_id "Partner;#{id}" end + def partials_to_show + displayable_partials || ALL_PARTIALS + end + def impact_metrics { families_served: families_served_count, @@ -238,6 +255,10 @@ def impact_metrics private + def displayable_partials + partner_form&.sections + end + def expose_attachment_path(documentation) # NOTE(chaserx): I'm not sure how I feel about this. # I think smells because the `export_json` method should probably be diff --git a/app/models/partner_form.rb b/app/models/partner_form.rb new file mode 100644 index 00000000..970b584a --- /dev/null +++ b/app/models/partner_form.rb @@ -0,0 +1,3 @@ +class PartnerForm < ApplicationRecord + validates :diaper_bank_id, presence: true, uniqueness: true +end \ No newline at end of file diff --git a/app/views/partners/_form.html.erb b/app/views/partners/_form.html.erb index 59767de5..146b43c5 100644 --- a/app/views/partners/_form.html.erb +++ b/app/views/partners/_form.html.erb @@ -10,602 +10,14 @@ <%= form_with(model: partner, local: true) do |form| %>
-
-
-

Agency Information

-
-
-
- -
- <%= form.text_field :name, class: "form-control" %> -
-
-
- -
- <%= form.select :agency_type, AGENCY_TYPES.values, {}, class: "form-control" %> -
-
- -
- - <% if partner.proof_of_partner_status.attached? %> -
- Attached - file: <%= link_to partner.proof_of_partner_status.blob['filename'], rails_blob_path(partner.proof_of_partner_status), class: "font-weight-bold" %> - <%= form.file_field :proof_of_partner_status, class: "form-control-file form-control" %> -
- <% else %> -
- <%= form.file_field :proof_of_partner_status, class: "form-control-file" %> -
- <% end %> -
-
- -
- <%= form.text_area :agency_mission, class: "form-control" %> -
-
-
- -
- <%= form.text_field :address1, class: "form-control" %> -
-
-
- -
- <%= form.text_field :address2, class: "form-control" %> -
-
-
- -
- <%= form.text_field :city, class: "form-control" %> -
-
-
- -
- <%= form.text_field :state, class: "form-control" %> -
-
-
- -
- <%= form.text_field :zip_code, class: "form-control" %> -
-
-
-
-
-
-

Agency Stability

-
-
-
- -
- <%= form.number_field :founded, class: "form-control" %> -
-
-
- -
- <%= form.check_box :form_990, class: "form-control form-check-input" %> - -
-
-
- - <% if partner.proof_of_form_990.attached? %> -
- Attached - file: <%= link_to partner.proof_of_form_990.blob['filename'], rails_blob_path(partner.proof_of_form_990), class: "font-weight-bold" %> - <%= form.file_field :proof_of_form_990, class: "form-control-file form-control" %> -
- <% else %> -
- <%= form.file_field :proof_of_form_990, class: "form-control-file" %> -
- <% end %> -
-
- -
- <%= form.text_field :program_name, class: "form-control" %> -
-
-
- -
- <%= form.text_area :program_description, class: "form-control" %> -
-
-
- -
- <%= form.text_field :program_age, class: "form-control" %> -
-
-
- -
- <%= form.check_box :evidence_based, class: "form-control form-check-input" %> -
-
-
- -
- <%= form.check_box :case_management, class: "form-control form-check-input" %> -
-
-
- -
- <%= form.text_area :evidence_based_description, class: "form-control" %> -
-
-
- -
- <%= form.text_area :program_client_improvement, class: "form-control" %> -
-
-
- -
- <%= form.text_field :diaper_use, class: "form-control" %> -
-
-
- -
- <%= form.text_field :other_diaper_use, class: "form-control" %> -
-
-
- -
- <%= form.check_box :currently_provide_diapers, class: "form-check-input form-control" %> -
-
-
- -
- <%= form.check_box :turn_away_child_care, class: "form-check-input form-control" %> -
-
-
-
-
- -
-

Program Address

-
-
-
- -
- <%= form.text_field :program_address1, class: "form-control" %> -
-
-
- -
- <%= form.text_field :program_address2, class: "form-control" %> -
-
-
- -
- <%= form.text_field :program_city, class: "form-control" %> -
-
-
- -
- <%= form.text_field :program_state, class: "form-control" %> -
-
-
- -
- <%= form.number_field :program_zip_code, class: "form-control" %> -
-
-
-
-
- -
-

Media Information

-
-
-
- -
- <%= form.text_field :website, class: "form-control" %> -
-
-
- -
- <%= form.text_field :facebook, class: "form-control" %> -
-
-
- -
- <%= form.text_field :twitter, class: "form-control" %> -
-
-
-
-
- -
-

Organization Capacity

-
-
-
- -
- <%= form.text_field :max_serve, class: "form-control" %> -
-
-
- -
- <%= form.text_area :incorporate_plan, class: "form-control" %> -
-
-
- -
- <%= form.check_box :responsible_staff_position, class: "form-check-input form-control" %> -
-
-
- -
- <%= form.check_box :storage_space, class: "form-control form-check-input" %> -
-
-
- -
- <%= form.text_area :describe_storage_space, class: "form-control" %> -
-
-
- -
- <%= form.check_box :trusted_pickup, class: "form-control form-check-input" %> -
-
-
-
-
- -
-

Additional Documents

-
-
-
- <% if partner.documents.attached? %> -
-
- Attached files: -
    - <% partner.documents.each do |doc| %> -
  • <%= link_to doc.blob['filename'], rails_blob_path(doc), class: "font-weight-bold" %>
  • - <% end %> -
-
-
- <%= form.file_field :documents, multiple: true, class: "form-control-file" %> -
-
- <% else %> - <%= form.file_field :documents, multiple: true, class: "form-control-file" %> - <% end %> -
-
-
-
- - - - - - +
+ <%= render partial: "partners/edit/agency_information", locals: { form: form, partner: @partner } %>
-
- -
-

Population Served

-
-
-
- -
- <%= form.check_box :income_requirement_desc, class: "form-check-input form-control" %> -
-
-
- -
- <%= form.check_box :serve_income_circumstances, class: "form-check-input form-control" %> -
-
-
- -
- <%= form.check_box :income_verification, class: "form-check-input form-control" %> -
-
-
- -
- <%= form.check_box :internal_db, class: "form-check-input form-control" %> -
-
-
- -
- <%= form.check_box :maac, class: "form-check-input form-control" %> -
-
-
Ethnic Composition of Those Served
-
- -
- <%= form.number_field :population_black, class: "form-control" %> -
-
-
- -
- <%= form.number_field :population_white, class: "form-control" %> -
-
-
- -
- <%= form.number_field :population_hispanic, class: "form-control" %> -
-
-
- -
- <%= form.number_field :population_asian, class: "form-control" %> -
-
-
- -
- <%= form.number_field :population_american_indian, class: "form-control" %> -
-
-
- -
- <%= form.number_field :population_island, class: "form-control" %> -
-
-
- -
- <%= form.number_field :population_multi_racial, class: "form-control" %> -
-
-
- -
- <%= form.number_field :population_other, class: "form-control" %> -
-
-
Zip Codes Served
-
- -
- <%= form.text_field :zips_served, class: "form-control" %> -
-
-
Poverty Information of Those Served
-
- -
- <%= form.number_field :at_fpl_or_below, class: "form-control" %> -
-
-
- -
- <%= form.number_field :above_1_2_times_fpl, class: "form-control" %> -
-
-
- -
- <%= form.number_field :greater_2_times_fpl, class: "form-control" %> -
-
-
- -
- <%= form.number_field :poverty_unknown, class: "form-control" %> -
-
-
- -
- <%= form.text_field :ages_served, class: "form-control" %> -
-
-
-
-
- - -
-

Executive Director

-
-
-
- -
- <%= form.text_field :executive_director_name, class: "form-control" %> -
-
-
- -
- <%= form.text_field :executive_director_phone, class: "form-control" %> -
-
-
- -
- <%= form.text_field :executive_director_email, class: "form-control" %> -
-
-
-
-
- -
-

Program Contact

-
-
-
- -
- <%= form.text_field :program_contact_name, class: "form-control" %> -
-
-
- -
- <%= form.text_field :program_contact_phone, class: "form-control" %> -
-
-
- -
- <%= form.text_field :program_contact_mobile, class: "form-control" %> -
-
-
- -
- <%= form.text_field :program_contact_email, class: "form-control" %> -
-
-
-
-
- -
-

Diaper Pick Up Person

-
-
-
- -
- <%= form.text_field :pick_up_method, class: "form-control" %> -
-
-
- -
- <%= form.text_field :pick_up_name, class: "form-control" %> -
-
-
- -
- <%= form.text_field :pick_up_phone, class: "form-control" %> -
-
-
- -
- <%= form.text_field :pick_up_email, class: "form-control" %> -
-
-
-
-
- -
-

Agency Distribution Information

-
-
-
- -
- <%= form.text_field :distribution_times, class: "form-control" %> -
-
-
- -
- <%= form.text_field :new_client_times, class: "form-control" %> -
-
-
- -
- <%= form.text_field :more_docs_required, class: "form-control" %> -
-
-
-
+ <% @partner.partials_to_show.each do |partial| %> +
+ <%= render partial: "partners/edit/#{partial}", locals: { form: form, partner: @partner } %>
- -
-

Sources of Funding

-
-
-
- -
- <%= form.text_field :sources_of_funding, class: "form-control" %> -
-
-
- -
- <%= form.text_field :sources_of_diapers, class: "form-control" %> -
-
-
- -
- <%= form.text_field :diaper_budget, class: "form-control" %> -
-
-
- -
- <%= form.text_field :diaper_funding_source, class: "form-control" %> -
-
-
-
-
- - -
+ <% end %>
diff --git a/app/views/partners/edit/_agency_distribution_information.html.erb b/app/views/partners/edit/_agency_distribution_information.html.erb new file mode 100644 index 00000000..d454a36f --- /dev/null +++ b/app/views/partners/edit/_agency_distribution_information.html.erb @@ -0,0 +1,25 @@ +
+

Agency Distribution Information

+
+
+
+ +
+ <%= form.text_field :distribution_times, class: "form-control" %> +
+
+
+ +
+ <%= form.text_field :new_client_times, class: "form-control" %> +
+
+
+ +
+ <%= form.text_field :more_docs_required, class: "form-control" %> +
+
+
+
+
diff --git a/app/views/partners/edit/_agency_information.html.erb b/app/views/partners/edit/_agency_information.html.erb new file mode 100644 index 00000000..04ec8efb --- /dev/null +++ b/app/views/partners/edit/_agency_information.html.erb @@ -0,0 +1,75 @@ +
+

Agency Information

+
+
+
+ +
+ <%= form.text_field :name, class: "form-control" %> +
+
+
+ +
+ <%= form.select :agency_type, AGENCY_TYPES.values, {}, class: "form-control" %> +
+
+ +
+ + <% if partner.proof_of_partner_status.attached? %> +
+ Attached + file: <%= link_to partner.proof_of_partner_status.blob['filename'], rails_blob_path(partner.proof_of_partner_status), class: "font-weight-bold" %> + <%= form.file_field :proof_of_partner_status, class: "form-control-file form-control" %> +
+ <% else %> +
+ <%= form.file_field :proof_of_partner_status, class: "form-control-file" %> +
+ <% end %> +
+
+ +
+ <%= form.text_area :agency_mission, class: "form-control" %> +
+
+
+ +
+ <%= form.text_field :address1, class: "form-control" %> +
+
+
+ +
+ <%= form.text_field :address2, class: "form-control" %> +
+
+
+ +
+ <%= form.text_field :city, class: "form-control" %> +
+
+
+ +
+ <%= form.text_field :state, class: "form-control" %> +
+
+
+ +
+ <%= form.text_field :zip_code, class: "form-control" %> +
+
+
+
+
diff --git a/app/views/partners/edit/_agency_stability.html.erb b/app/views/partners/edit/_agency_stability.html.erb new file mode 100644 index 00000000..12a31c99 --- /dev/null +++ b/app/views/partners/edit/_agency_stability.html.erb @@ -0,0 +1,136 @@ +
+

Agency Stability

+
+
+
+ +
+ <%= form.number_field :founded, class: "form-control" %> +
+
+
+ +
+ <%= form.check_box :form_990, class: "form-control form-check-input" %> +
+
+
+ + <% if partner.proof_of_form_990.attached? %> +
+ Attached + file: <%= link_to partner.proof_of_form_990.blob['filename'], rails_blob_path(partner.proof_of_form_990), class: "font-weight-bold" %> + <%= form.file_field :proof_of_form_990, class: "form-control-file form-control" %> +
+ <% else %> +
+ <%= form.file_field :proof_of_form_990, class: "form-control-file" %> +
+ <% end %> +
+
+ +
+ <%= form.text_field :program_name, class: "form-control" %> +
+
+
+ +
+ <%= form.text_area :program_description, class: "form-control" %> +
+
+
+ +
+ <%= form.text_field :program_age, class: "form-control" %> +
+
+
+ +
+ <%= form.check_box :evidence_based, class: "form-control form-check-input" %> +
+
+
+ +
+ <%= form.check_box :case_management, class: "form-control form-check-input" %> +
+
+
+ +
+ <%= form.text_area :evidence_based_description, class: "form-control" %> +
+
+
+ +
+ <%= form.text_area :program_client_improvement, class: "form-control" %> +
+
+
+ +
+ <%= form.text_field :diaper_use, class: "form-control" %> +
+
+
+ +
+ <%= form.text_field :other_diaper_use, class: "form-control" %> +
+
+
+ +
+ <%= form.check_box :currently_provide_diapers, class: "form-check-input form-control" %> +
+
+
+ +
+ <%= form.check_box :turn_away_child_care, class: "form-check-input form-control" %> +
+
+
+
+
+
+

Program Address

+
+
+
+ +
+ <%= form.text_field :program_address1, class: "form-control" %> +
+
+
+ +
+ <%= form.text_field :program_address2, class: "form-control" %> +
+
+
+ +
+ <%= form.text_field :program_city, class: "form-control" %> +
+
+
+ +
+ <%= form.text_field :program_state, class: "form-control" %> +
+
+
+ +
+ <%= form.number_field :program_zip_code, class: "form-control" %> +
+
+
+
+
diff --git a/app/views/partners/edit/_attached_documents.html.erb b/app/views/partners/edit/_attached_documents.html.erb new file mode 100644 index 00000000..a6459c59 --- /dev/null +++ b/app/views/partners/edit/_attached_documents.html.erb @@ -0,0 +1,26 @@ +
+

Additional Documents

+
+
+
+ <% if partner.documents.attached? %> +
+
+ Attached files: +
    + <% partner.documents.each do |doc| %> +
  • <%= link_to doc.blob['filename'], rails_blob_path(doc), class: "font-weight-bold" %>
  • + <% end %> +
+
+
+ <%= form.file_field :documents, multiple: true, class: "form-control-file" %> +
+
+ <% else %> + <%= form.file_field :documents, multiple: true, class: "form-control-file" %> + <% end %> +
+
+
+
diff --git a/app/views/partners/edit/_diaper_pick_up_person.html.erb b/app/views/partners/edit/_diaper_pick_up_person.html.erb new file mode 100644 index 00000000..3757a799 --- /dev/null +++ b/app/views/partners/edit/_diaper_pick_up_person.html.erb @@ -0,0 +1,31 @@ +
+

Diaper Pick Up Person

+
+
+
+ +
+ <%= form.text_field :pick_up_method, class: "form-control" %> +
+
+
+ +
+ <%= form.text_field :pick_up_name, class: "form-control" %> +
+
+
+ +
+ <%= form.text_field :pick_up_phone, class: "form-control" %> +
+
+
+ +
+ <%= form.text_field :pick_up_email, class: "form-control" %> +
+
+
+
+
diff --git a/app/views/partners/edit/_executive_director.html.erb b/app/views/partners/edit/_executive_director.html.erb new file mode 100644 index 00000000..06e28674 --- /dev/null +++ b/app/views/partners/edit/_executive_director.html.erb @@ -0,0 +1,56 @@ +
+

Executive Director

+
+
+
+ +
+ <%= form.text_field :executive_director_name, class: "form-control" %> +
+
+
+ +
+ <%= form.text_field :executive_director_phone, class: "form-control" %> +
+
+
+ +
+ <%= form.text_field :executive_director_email, class: "form-control" %> +
+
+
+
+
+
+

Program Contact

+
+
+
+ +
+ <%= form.text_field :program_contact_name, class: "form-control" %> +
+
+
+ +
+ <%= form.text_field :program_contact_phone, class: "form-control" %> +
+
+
+ +
+ <%= form.text_field :program_contact_mobile, class: "form-control" %> +
+
+
+ +
+ <%= form.text_field :program_contact_email, class: "form-control" %> +
+
+
+
+
diff --git a/app/views/partners/edit/_media_information.html.erb b/app/views/partners/edit/_media_information.html.erb new file mode 100644 index 00000000..fce58b1f --- /dev/null +++ b/app/views/partners/edit/_media_information.html.erb @@ -0,0 +1,25 @@ +
+

Media Information

+
+
+
+ +
+ <%= form.text_field :website, class: "form-control" %> +
+
+
+ +
+ <%= form.text_field :facebook, class: "form-control" %> +
+
+
+ +
+ <%= form.text_field :twitter, class: "form-control" %> +
+
+
+
+
diff --git a/app/views/partners/edit/_organizational_capacity.html.erb b/app/views/partners/edit/_organizational_capacity.html.erb new file mode 100644 index 00000000..241d98e1 --- /dev/null +++ b/app/views/partners/edit/_organizational_capacity.html.erb @@ -0,0 +1,43 @@ +
+

Organization Capacity

+
+
+
+ +
+ <%= form.text_field :max_serve, class: "form-control" %> +
+
+
+ +
+ <%= form.text_area :incorporate_plan, class: "form-control" %> +
+
+
+ +
+ <%= form.check_box :responsible_staff_position, class: "form-check-input form-control" %> +
+
+
+ +
+ <%= form.check_box :storage_space, class: "form-control form-check-input" %> +
+
+
+ +
+ <%= form.text_area :describe_storage_space, class: "form-control" %> +
+
+
+ +
+ <%= form.check_box :trusted_pickup, class: "form-control form-check-input" %> +
+
+
+
+
diff --git a/app/views/partners/edit/_population_served.html.erb b/app/views/partners/edit/_population_served.html.erb new file mode 100644 index 00000000..2750735f --- /dev/null +++ b/app/views/partners/edit/_population_served.html.erb @@ -0,0 +1,124 @@ +
+

Population Served

+
+
+
+ +
+ <%= form.check_box :income_requirement_desc, class: "form-check-input form-control" %> +
+
+
+ +
+ <%= form.check_box :serve_income_circumstances, class: "form-check-input form-control" %> +
+
+
+ +
+ <%= form.check_box :income_verification, class: "form-check-input form-control" %> +
+
+
+ +
+ <%= form.check_box :internal_db, class: "form-check-input form-control" %> +
+
+
+ +
+ <%= form.check_box :maac, class: "form-check-input form-control" %> +
+
+
Ethnic Composition of Those Served
+
+ +
+ <%= form.number_field :population_black, class: "form-control" %> +
+
+
+ +
+ <%= form.number_field :population_white, class: "form-control" %> +
+
+
+ +
+ <%= form.number_field :population_hispanic, class: "form-control" %> +
+
+
+ +
+ <%= form.number_field :population_asian, class: "form-control" %> +
+
+
+ +
+ <%= form.number_field :population_american_indian, class: "form-control" %> +
+
+
+ +
+ <%= form.number_field :population_island, class: "form-control" %> +
+
+
+ +
+ <%= form.number_field :population_multi_racial, class: "form-control" %> +
+
+
+ +
+ <%= form.number_field :population_other, class: "form-control" %> +
+
+
Zip Codes Served
+
+ +
+ <%= form.text_field :zips_served, class: "form-control" %> +
+
+
Poverty Information of Those Served
+
+ +
+ <%= form.number_field :at_fpl_or_below, class: "form-control" %> +
+
+
+ +
+ <%= form.number_field :above_1_2_times_fpl, class: "form-control" %> +
+
+
+ +
+ <%= form.number_field :greater_2_times_fpl, class: "form-control" %> +
+
+
+ +
+ <%= form.number_field :poverty_unknown, class: "form-control" %> +
+
+
+ +
+ <%= form.text_field :ages_served, class: "form-control" %> +
+
+
+
+
diff --git a/app/views/partners/edit/_sources_of_funding.html.erb b/app/views/partners/edit/_sources_of_funding.html.erb new file mode 100644 index 00000000..bfad9827 --- /dev/null +++ b/app/views/partners/edit/_sources_of_funding.html.erb @@ -0,0 +1,31 @@ +
+

Sources of Funding

+
+
+
+ +
+ <%= form.text_field :sources_of_funding, class: "form-control" %> +
+
+
+ +
+ <%= form.text_field :sources_of_diapers, class: "form-control" %> +
+
+
+ +
+ <%= form.text_field :diaper_budget, class: "form-control" %> +
+
+
+ +
+ <%= form.text_field :diaper_funding_source, class: "form-control" %> +
+
+
+
+
diff --git a/app/views/partners/show.html.erb b/app/views/partners/show.html.erb index 304da557..0d995d91 100644 --- a/app/views/partners/show.html.erb +++ b/app/views/partners/show.html.erb @@ -15,316 +15,13 @@
-
-
Agency Information
-
-
-
Name
-
<%= @partner.name %>
- -
Agency Type
-
<%= @partner.agency_type %>
- - <% if @partner.agency_type == "Other" %> -
Other Agency Type
-
<%= @partner.other_agency_type %>
- <% end %> - -
Status
-
<%= @partner.partner_status.humanize %>
- -
501(c)(3) IRS Determination Letter
- <% if @partner.proof_of_partner_status.attached? %> -
Attached - file: <%= link_to @partner.proof_of_partner_status.blob['filename'], rails_blob_path(@partner.proof_of_partner_status), class: "font-weight-bold" %>
- <% else %> -
Documentation not on file
- <% end %> - -
Description of Agency Mission
-
<%= @partner.agency_mission %>
- -
- Address
- <%= @partner.address1 %>
- <% unless @partner.address2.blank? %>
- <%= @partner.address2 %>
- <% end %> - <%= @partner.city %> <%= @partner.state %>
- <%= @partner.zip_code %> -
-
-
-
- -
-
Media Information
-
-
-
Website
-
<%= @partner.website %>
- -
Facebook
-
<%= @partner.facebook %>
- -
Twitter
-
<%= @partner.twitter %>
-
-
-
- -
-
Agency Stability
-
-
-
Year Founded
-
<%= @partner.founded %>
- -
Form 990 Filed
-
<%= humanize_boolean(@partner.form_990) %>
- -
Form 990
- <% if @partner.proof_of_form_990.attached? %> -
Attached - file: <%= link_to @partner.proof_of_form_990.blob['filename'], rails_blob_path(@partner.proof_of_form_990), class: "font-weight-bold" %>
- <% else %> -
Form 990 not on file
- <% end %> - -
Program Name
-
<%= @partner.program_name %>
- -
Program Description
-
<%= @partner.program_description %>
- -
Agency Age
-
<%= @partner.program_age %>
- -
Case Management
-
<%= humanize_boolean(@partner.case_management) %>
- -
Evidence Based
-
<%= humanize_boolean(@partner.evidence_based) %>
- -
Evidence Base Description
-
<%= @partner.evidence_based_description %>
- -
Verified Successes of Program
-
<%= @partner.program_client_improvement %>
- -
Diaper Use
-
<%= @partner.diaper_use %>
- -
Do You Receive Diapers From Other Sources
-
<%= @partner.other_diaper_use %>
- -
Current Providing Diapers
-
<%= humanize_boolean(@partner.currently_provide_diapers) %>
- -
Turn Away Child Care
-
<%= humanize_boolean(@partner.turn_away_child_care) %>
- -
- Program Address
- <%= @partner.program_address1 %>
- <% unless @partner.program_address2.blank? %> - <%= @partner.program_address2 %>
- <% end %> - <%= @partner.program_city %> <%= @partner.program_state %>
- <%= @partner.program_zip_code %> -
-
-
-
-
-
Organizational Capacity
-
-
-
Max Serve
-
<%= @partner.max_serve %>
- -
Incorporate Plan
-
<%= @partner.incorporate_plan %>
- -
Responsible Staff Position
-
<%= humanize_boolean(@partner.responsible_staff_position) %>
- -
Storage Space
-
<%= humanize_boolean(@partner.storage_space) %>
- -
Storage Space Description
-
<%= @partner.describe_storage_space %>
-
-
-
-
-
Sources of Funding
-
-
-
Sources of Funding
-
<%= @partner.sources_of_funding %>
- -
How do you currently obtain diapers?
-
<%= @partner.sources_of_diapers %>
- -
Diaper Budget
-
<%= @partner.diaper_budget %>
- -
Diaper Funding Source
-
<%= @partner.diaper_funding_source %>
-
-
-
+ <%= render "partners/show/agency_information" %>
- - -
-
-
Population Served
-
-
-
Clients Have An Income Requirement to Work With You
-
<%= humanize_boolean(@partner.income_requirement_desc) %>
- -
Serve Income Circumstances
-
<%= humanize_boolean(@partner.serve_income_circumstances) %>
- -
Do You Verify The Income Of Your Clients
-
<%= humanize_boolean(@partner.income_verification) %>
- -
Internal DB
-
<%= humanize_boolean(@partner.internal_db) %>
- -
MAAC Program Participant
<%= humanize_boolean(@partner.maac) %>
- -
Ethnic Composition of Those Served
-
African American
-
<%= @partner.population_black || t(:not_provided) %>
- -
Caucasian
-
<%= @partner.population_white || t(:not_provided) %>
- -
Hispanic
-
<%= @partner.population_hispanic || t(:not_provided) %>
- -
Asian
-
<%= @partner.population_asian || t(:not_provided) %>
- -
American Indian
-
<%= @partner.population_american_indian || t(:not_provided) %>
- -
Pacific Islander
-
<%= @partner.population_island || t(:not_provided) %>
- -
Multi-racial
-
<%= @partner.population_multi_racial || t(:not_provided) %>
- -
Other
-
<%= @partner.population_other || t(:not_provided) %>
- -
Zip Codes Served
-
<%= @partner.zips_served %>
- -
Poverty Information of Those Served
-
At FPL or below
-
<%= @partner.at_fpl_or_below || t(:not_provided) %>
- -
Above 1-2 times FPL
-
<%= @partner.above_1_2_times_fpl || t(:not_provided) %>
- -
Greater than 2 times FPL
-
<%= @partner.greater_2_times_fpl || t(:not_provided) %>
- -
Poverty Unknown
-
<%= @partner.poverty_unknown || t(:not_provided) %>
- -
Ages Served
-
Ages
-
<%= @partner.ages_served || t(:not_provided) %>
-
-
+ <% @partner.partials_to_show.each do |partial| %> +
+ <%= render "partners/show/#{partial}" %>
- -
-
Executive Director
-
-
-
Name
-
<%= @partner.executive_director_name %>
- -
Phone Number
-
<%= @partner.executive_director_phone %>
- -
Email
-
<%= @partner.executive_director_email %>
-
- -
Program Contact Person
-
-
Name
-
<%= @partner.program_contact_name %>
- -
Phone Number
-
<%= @partner.program_contact_phone %>
- -
Mobile Phone Number
-
<%= @partner.program_contact_mobile %>
- -
Email
-
<%= @partner.program_contact_email %>
-
-
-
- -
-
Diaper Pick Up Person
-
-
-
Pick Up Method
-
<%= @partner.pick_up_method %>
- -
Name
-
<%= @partner.pick_up_name %>
- -
Phone
-
<%= @partner.pick_up_phone %>
- -
Email
-
<%= @partner.pick_up_email %>
-
-
-
- -
-
Agency Distribution Information
-
-
-
Distribution Times
-
<%= @partner.distribution_times %>
- -
New Client Times
-
<%= @partner.new_client_times %>
- -
More Docs Required
-
<%= @partner.more_docs_required %>
-
-
-
- -
-
Attached Documents
-
- <% if @partner.documents.attached? %> -
Attached files:
- <% @partner.documents.each do |doc| %> -
<%= link_to doc.blob['filename'], rails_blob_path(doc), class: "font-weight-bold" %>
- <% end %> - <% else %> -
No files saved
- <% end %> -
-
-
+ <% end %>
diff --git a/app/views/partners/show/_agency_distribution_information.html.erb b/app/views/partners/show/_agency_distribution_information.html.erb new file mode 100644 index 00000000..cbdb1fd2 --- /dev/null +++ b/app/views/partners/show/_agency_distribution_information.html.erb @@ -0,0 +1,15 @@ +
+
Agency Distribution Information
+
+
+
Distribution Times
+
<%= @partner.distribution_times %>
+ +
New Client Times
+
<%= @partner.new_client_times %>
+ +
More Docs Required
+
<%= @partner.more_docs_required %>
+
+
+
diff --git a/app/views/partners/show/_agency_information.html.erb b/app/views/partners/show/_agency_information.html.erb new file mode 100644 index 00000000..4f80732b --- /dev/null +++ b/app/views/partners/show/_agency_information.html.erb @@ -0,0 +1,41 @@ +
+
Agency Information
+
+
+
Name
+
<%= @partner.name %>
+ +
Agency Type
+
<%= @partner.agency_type %>
+ + <% if @partner.agency_type == "Other" %> +
Other Agency Type
+
<%= @partner.other_agency_type %>
+ <% end %> + +
Status
+
<%= @partner.partner_status.humanize %>
+ +
501(c)(3) IRS Determination Letter
+ <% if @partner.proof_of_partner_status.attached? %> +
Attached + file: <%= link_to @partner.proof_of_partner_status.blob['filename'], rails_blob_path(@partner.proof_of_partner_status), class: "font-weight-bold" %>
+ <% else %> +
Documentation not on file
+ <% end %> + +
Description of Agency Mission
+
<%= @partner.agency_mission %>
+ +
+ Address
+ <%= @partner.address1 %>
+ <% unless @partner.address2.blank? %>
+ <%= @partner.address2 %>
+ <% end %> + <%= @partner.city %> <%= @partner.state %>
+ <%= @partner.zip_code %> +
+
+
+
diff --git a/app/views/partners/show/_agency_stability.html.erb b/app/views/partners/show/_agency_stability.html.erb new file mode 100644 index 00000000..7317a630 --- /dev/null +++ b/app/views/partners/show/_agency_stability.html.erb @@ -0,0 +1,63 @@ +
+
Agency Stability
+
+
+
Year Founded
+
<%= @partner.founded %>
+ +
Form 990 Filed
+
<%= humanize_boolean(@partner.form_990) %>
+ +
Form 990
+ <% if @partner.proof_of_form_990.attached? %> +
Attached + file: <%= link_to @partner.proof_of_form_990.blob['filename'], rails_blob_path(@partner.proof_of_form_990), class: "font-weight-bold" %>
+ <% else %> +
Form 990 not on file
+ <% end %> + +
Program Name
+
<%= @partner.program_name %>
+ +
Program Description
+
<%= @partner.program_description %>
+ +
Agency Age
+
<%= @partner.program_age %>
+ +
Case Management
+
<%= humanize_boolean(@partner.case_management) %>
+ +
Evidence Based
+
<%= humanize_boolean(@partner.evidence_based) %>
+ +
Evidence Base Description
+
<%= @partner.evidence_based_description %>
+ +
Verified Successes of Program
+
<%= @partner.program_client_improvement %>
+ +
Diaper Use
+
<%= @partner.diaper_use %>
+ +
Do You Receive Diapers From Other Sources
+
<%= @partner.other_diaper_use %>
+ +
Current Providing Diapers
+
<%= humanize_boolean(@partner.currently_provide_diapers) %>
+ +
Turn Away Child Care
+
<%= humanize_boolean(@partner.turn_away_child_care) %>
+ +
+ Program Address
+ <%= @partner.program_address1 %>
+ <% unless @partner.program_address2.blank? %> + <%= @partner.program_address2 %>
+ <% end %> + <%= @partner.program_city %> <%= @partner.program_state %>
+ <%= @partner.program_zip_code %> +
+
+
+
diff --git a/app/views/partners/show/_attached_documents.html.erb b/app/views/partners/show/_attached_documents.html.erb new file mode 100644 index 00000000..ab05061f --- /dev/null +++ b/app/views/partners/show/_attached_documents.html.erb @@ -0,0 +1,13 @@ +
+
Attached Documents
+
+ <% if @partner.documents.attached? %> +
Attached files:
+ <% @partner.documents.each do |doc| %> +
<%= link_to doc.blob['filename'], rails_blob_path(doc), class: "font-weight-bold" %>
+ <% end %> + <% else %> +
No files saved
+ <% end %> +
+
diff --git a/app/views/partners/show/_diaper_pick_up_person.html.erb b/app/views/partners/show/_diaper_pick_up_person.html.erb new file mode 100644 index 00000000..5654dbd4 --- /dev/null +++ b/app/views/partners/show/_diaper_pick_up_person.html.erb @@ -0,0 +1,18 @@ +
+
Diaper Pick Up Person
+
+
+
Pick Up Method
+
<%= @partner.pick_up_method %>
+ +
Name
+
<%= @partner.pick_up_name %>
+ +
Phone
+
<%= @partner.pick_up_phone %>
+ +
Email
+
<%= @partner.pick_up_email %>
+
+
+
diff --git a/app/views/partners/show/_executive_director.html.erb b/app/views/partners/show/_executive_director.html.erb new file mode 100644 index 00000000..6e9536d0 --- /dev/null +++ b/app/views/partners/show/_executive_director.html.erb @@ -0,0 +1,30 @@ +
+
Executive Director
+
+
+
Name
+
<%= @partner.executive_director_name %>
+ +
Phone Number
+
<%= @partner.executive_director_phone %>
+ +
Email
+
<%= @partner.executive_director_email %>
+
+ +
Program Contact Person
+
+
Name
+
<%= @partner.program_contact_name %>
+ +
Phone Number
+
<%= @partner.program_contact_phone %>
+ +
Mobile Phone Number
+
<%= @partner.program_contact_mobile %>
+ +
Email
+
<%= @partner.program_contact_email %>
+
+
+
diff --git a/app/views/partners/show/_media_information.html.erb b/app/views/partners/show/_media_information.html.erb new file mode 100644 index 00000000..cd058fa3 --- /dev/null +++ b/app/views/partners/show/_media_information.html.erb @@ -0,0 +1,15 @@ +
+
Media Information
+
+
+
Website
+
<%= @partner.website %>
+ +
Facebook
+
<%= @partner.facebook %>
+ +
Twitter
+
<%= @partner.twitter %>
+
+
+
diff --git a/app/views/partners/show/_organizational_capacity.html.erb b/app/views/partners/show/_organizational_capacity.html.erb new file mode 100644 index 00000000..29c8d4b3 --- /dev/null +++ b/app/views/partners/show/_organizational_capacity.html.erb @@ -0,0 +1,21 @@ +
+
Organizational Capacity
+
+
+
Max Serve
+
<%= @partner.max_serve %>
+ +
Incorporate Plan
+
<%= @partner.incorporate_plan %>
+ +
Responsible Staff Position
+
<%= humanize_boolean(@partner.responsible_staff_position) %>
+ +
Storage Space
+
<%= humanize_boolean(@partner.storage_space) %>
+ +
Storage Space Description
+
<%= @partner.describe_storage_space %>
+
+
+
diff --git a/app/views/partners/show/_population_served.html.erb b/app/views/partners/show/_population_served.html.erb new file mode 100644 index 00000000..6ad9c157 --- /dev/null +++ b/app/views/partners/show/_population_served.html.erb @@ -0,0 +1,65 @@ +
+
Population Served
+
+
+
Clients Have An Income Requirement to Work With You
+
<%= humanize_boolean(@partner.income_requirement_desc) %>
+ +
Serve Income Circumstances
+
<%= humanize_boolean(@partner.serve_income_circumstances) %>
+ +
Do You Verify The Income Of Your Clients
+
<%= humanize_boolean(@partner.income_verification) %>
+ +
Internal DB
+
<%= humanize_boolean(@partner.internal_db) %>
+ +
MAAC Program Participant
<%= humanize_boolean(@partner.maac) %>
+ +
Ethnic Composition of Those Served
+
African American
+
<%= @partner.population_black || t(:not_provided) %>
+ +
Caucasian
+
<%= @partner.population_white || t(:not_provided) %>
+ +
Hispanic
+
<%= @partner.population_hispanic || t(:not_provided) %>
+ +
Asian
+
<%= @partner.population_asian || t(:not_provided) %>
+ +
American Indian
+
<%= @partner.population_american_indian || t(:not_provided) %>
+ +
Pacific Islander
+
<%= @partner.population_island || t(:not_provided) %>
+ +
Multi-racial
+
<%= @partner.population_multi_racial || t(:not_provided) %>
+ +
Other
+
<%= @partner.population_other || t(:not_provided) %>
+ +
Zip Codes Served
+
<%= @partner.zips_served %>
+ +
Poverty Information of Those Served
+
At FPL or below
+
<%= @partner.at_fpl_or_below || t(:not_provided) %>
+ +
Above 1-2 times FPL
+
<%= @partner.above_1_2_times_fpl || t(:not_provided) %>
+ +
Greater than 2 times FPL
+
<%= @partner.greater_2_times_fpl || t(:not_provided) %>
+ +
Poverty Unknown
+
<%= @partner.poverty_unknown || t(:not_provided) %>
+ +
Ages Served
+
Ages
+
<%= @partner.ages_served || t(:not_provided) %>
+
+
+
diff --git a/app/views/partners/show/_sources_of_funding.html.erb b/app/views/partners/show/_sources_of_funding.html.erb new file mode 100644 index 00000000..249ae69d --- /dev/null +++ b/app/views/partners/show/_sources_of_funding.html.erb @@ -0,0 +1,18 @@ +
+
Sources of Funding
+
+
+
Sources of Funding
+
<%= @partner.sources_of_funding %>
+ +
How do you currently obtain diapers?
+
<%= @partner.sources_of_diapers %>
+ +
Diaper Budget
+
<%= @partner.diaper_budget %>
+ +
Diaper Funding Source
+
<%= @partner.diaper_funding_source %>
+
+
+
diff --git a/config/routes.rb b/config/routes.rb index 071dfad3..db571b05 100644 --- a/config/routes.rb +++ b/config/routes.rb @@ -63,6 +63,7 @@ namespace :v1 do resources :partners, only: [:create, :show, :update] resources :add_partners, only: [:create] + resources :partner_forms, only: [:create] end end diff --git a/db/migrate/20200404230645_create_partner_forms.rb b/db/migrate/20200404230645_create_partner_forms.rb new file mode 100644 index 00000000..a1fa53cd --- /dev/null +++ b/db/migrate/20200404230645_create_partner_forms.rb @@ -0,0 +1,10 @@ +class CreatePartnerForms < ActiveRecord::Migration[5.2] + def change + create_table :partner_forms do |t| + t.integer :diaper_bank_id + t.text :sections, array: true, default: [] + + t.timestamps + end + end +end diff --git a/db/schema.rb b/db/schema.rb index 6cd90511..1ee1c650 100644 --- a/db/schema.rb +++ b/db/schema.rb @@ -10,7 +10,7 @@ # # It's strongly recommended that you check this file into your version control system. -ActiveRecord::Schema.define(version: 2019_10_25_144701) do +ActiveRecord::Schema.define(version: 2020_04_04_230645) do # These are extensions that must be enabled in order to support this database enable_extension "plpgsql" @@ -131,6 +131,13 @@ t.index ["partner_request_id"], name: "index_item_requests_on_partner_request_id" end + create_table "partner_forms", force: :cascade do |t| + t.integer "diaper_bank_id" + t.text "sections", default: [], array: true + t.datetime "created_at", null: false + t.datetime "updated_at", null: false + end + create_table "partner_requests", force: :cascade do |t| t.text "comments" t.bigint "partner_id" diff --git a/spec/factories/partner_form.rb b/spec/factories/partner_form.rb new file mode 100644 index 00000000..db442c8c --- /dev/null +++ b/spec/factories/partner_form.rb @@ -0,0 +1,6 @@ +FactoryBot.define do + factory :partner_form do + diaper_bank_id { 1 } + sections { "MyString" } + end +end diff --git a/spec/features/partner_edit_feature_spec.rb b/spec/features/partner_edit_feature_spec.rb index 4eed1b11..4cd12d56 100644 --- a/spec/features/partner_edit_feature_spec.rb +++ b/spec/features/partner_edit_feature_spec.rb @@ -9,6 +9,21 @@ visit "/partners/#{partner.id}/edit" end + scenario "when there are partner form sections set on the partner" do + FactoryBot.create(:partner_form, diaper_bank_id: partner.id, sections: ["agency_information"]) + + visit "/partners/#{partner.id}/edit" + aggregate_failures do + expect(page).to have_content("Agency Information") + expect(page).to_not have_content("Agency Stability") + expect(page).to_not have_content("Population Served") + expect(page).to_not have_content("Program Address") + expect(page).to_not have_content("Program Contact") + expect(page).to_not have_content("Sources of Funding") + expect(page).to_not have_content("Additional Documents") + end + end + scenario "partner can select and provide an Other agency type", js: true do select "Other", from: "partner_agency_type" fill_in "partner_other_agency_type", with: Faker::Name.name diff --git a/spec/models/partner_form_spec.rb b/spec/models/partner_form_spec.rb new file mode 100644 index 00000000..c5e980dc --- /dev/null +++ b/spec/models/partner_form_spec.rb @@ -0,0 +1,15 @@ +require 'rails_helper' + +RSpec.describe PartnerForm, type: :model do + subject do + described_class.new(diaper_bank_id: Faker::Number.number) + end + it "is valid with valid attributes" do + expect(subject).to be_valid + end + + it "is not valid without a diaper_bank_id" do + subject.diaper_bank_id = nil + expect(subject).to_not be_valid + end +end diff --git a/spec/models/partner_spec.rb b/spec/models/partner_spec.rb index 0d5ac336..b97aa287 100644 --- a/spec/models/partner_spec.rb +++ b/spec/models/partner_spec.rb @@ -114,6 +114,21 @@ end end + describe "#partials_to_show" do + let(:partner) { create(:partner, diaper_bank_id: 100) } + + it 'has 9 partials when there are no displayable partials configured' do + expect(partner.partials_to_show).to eq(Partner::ALL_PARTIALS) + end + + it 'displays the number of displayable partials when they are configured' do + partner.diaper_bank_id = 100 + FactoryBot.create(:partner_form, diaper_bank_id: 100, + sections: %w[agency_information media_information agency_stability]) + expect(partner.partials_to_show.size).to eq(3) + end + end + describe "verified?" do context "partner with a verfied status" do it "returns a partner verified status as true" do diff --git a/spec/requests/api/v1/partner_forms_requests_spec.rb b/spec/requests/api/v1/partner_forms_requests_spec.rb new file mode 100644 index 00000000..7f1d41ca --- /dev/null +++ b/spec/requests/api/v1/partner_forms_requests_spec.rb @@ -0,0 +1,40 @@ +require "rails_helper" + +describe "Partners API Requests", type: :request do + describe "POST /api/v1/partners" do + context "when the body is empty" do + it "responds with an error status code" do + post api_v1_partners_path({}) + + expect(response).to have_http_status(:bad_request) + end + end + + context "when given valid parameters" do + it "responds with an :ok status" do + valid_partner_form_creation_request + + expect(response).to have_http_status(:ok) + end + + it "creates a new `PartnerForm` record" do + expect { valid_partner_form_creation_request } + .to change { PartnerForm.count } + .from(0) + .to(1) + end + end + end + + def valid_partner_form_creation_request( + diaper_bank_id: 1, + sections: %w(section1 section2 section3) + ) + post api_v1_partner_forms_path( + partner_form: { + diaper_bank_id: diaper_bank_id, + sections: sections + } + ) + end +end