From 249f26d0f3d79b80b6b8fe633fd5621987ad42bc Mon Sep 17 00:00:00 2001 From: Justin Miller <16829344+jmilljr24@users.noreply.github.com> Date: Mon, 8 Jun 2026 17:09:46 -0400 Subject: [PATCH] renam to bulk payment more --- ...troller.rb => bulk_payments_controller.rb} | 38 +++++++++---------- app/controllers/events_controller.rb | 16 ++++---- ...s => bulk_payment_attendees_controller.js} | 6 +-- app/frontend/javascript/controllers/index.js | 4 +- .../controllers/section_filter_controller.js | 6 +-- app/models/concerns/pay_charge_extensions.rb | 6 +-- app/models/event.rb | 4 +- app/models/event_form.rb | 4 +- app/policies/event_policy.rb | 2 +- ...yment_policy.rb => bulk_payment_policy.rb} | 2 +- .../{group_payment.rb => bulk_payment.rb} | 4 +- app/services/form_builder_service.rb | 30 +++++++-------- app/views/events/_bulk_actions_menu.html.erb | 2 +- app/views/events/_form.html.erb | 4 +- app/views/events/_form_actions_menu.html.erb | 6 +-- ...yments.html.erb => bulk_payments.html.erb} | 10 ++--- .../new.html.erb | 38 +++++++++---------- .../show.html.erb | 6 +-- app/views/events/show.html.erb | 6 +-- app/views/forms/edit.html.erb | 2 +- app/views/forms/edit_sections.html.erb | 6 +-- app/views/forms/new.html.erb | 4 +- config/routes.rb | 4 +- ...payment_enabled_to_bulk_payment_enabled.rb | 5 +++ db/schema.rb | 4 +- db/seeds/dev/events_management.rb | 14 +++---- spec/views/page_bg_class_alignment_spec.rb | 6 +-- 27 files changed, 122 insertions(+), 117 deletions(-) rename app/controllers/events/{group_payments_controller.rb => bulk_payments_controller.rb} (77%) rename app/frontend/javascript/controllers/{group_payment_attendees_controller.js => bulk_payment_attendees_controller.js} (82%) rename app/policies/events/{group_payment_policy.rb => bulk_payment_policy.rb} (62%) rename app/services/event_registration_services/{group_payment.rb => bulk_payment.rb} (97%) rename app/views/events/{group_payments.html.erb => bulk_payments.html.erb} (88%) rename app/views/events/{group_payments => bulk_payments}/new.html.erb (87%) rename app/views/events/{group_payments => bulk_payments}/show.html.erb (94%) create mode 100644 db/migrate/20260608205816_rename_group_payment_enabled_to_bulk_payment_enabled.rb diff --git a/app/controllers/events/group_payments_controller.rb b/app/controllers/events/bulk_payments_controller.rb similarity index 77% rename from app/controllers/events/group_payments_controller.rb rename to app/controllers/events/bulk_payments_controller.rb index 66f78e0f1..550889bc0 100644 --- a/app/controllers/events/group_payments_controller.rb +++ b/app/controllers/events/bulk_payments_controller.rb @@ -1,38 +1,38 @@ module Events - class GroupPaymentsController < ApplicationController + class BulkPaymentsController < ApplicationController skip_before_action :authenticate_user!, only: [ :new, :create, :show ] before_action :set_event before_action :set_form, only: [ :new, :create ] rescue_from ActionController::InvalidAuthenticityToken do flash[:alert] = "Your session has expired. Please try submitting the form again." - redirect_to new_event_group_payment_path(@event) + redirect_to new_event_bulk_payment_path(@event) end def new - authorize! :group_payment, to: :new? + authorize! :bulk_payment, to: :new? @form_fields = visible_form_fields @event = @event.decorate - @attendee_field = @form.form_fields.find_by(field_identifier: "group_payment_attendees") + @attendee_field = @form.form_fields.find_by(field_identifier: "bulk_payment_attendees") end def create - authorize! :group_payment, to: :create? + authorize! :bulk_payment, to: :create? - @form_params = params.dig(:group_payment, :form_fields)&.to_unsafe_h || {} + @form_params = params.dig(:bulk_payment, :form_fields)&.to_unsafe_h || {} @field_errors = validate_required_fields if @field_errors.any? @form_fields = visible_form_fields @event = @event.decorate - @attendee_field = @form.form_fields.find_by(field_identifier: "group_payment_attendees") + @attendee_field = @form.form_fields.find_by(field_identifier: "bulk_payment_attendees") render :new, status: :unprocessable_content return end - result = EventRegistrationServices::GroupPayment.call( + result = EventRegistrationServices::BulkPayment.call( event: @event, form: @form, form_params: @form_params, @@ -44,20 +44,20 @@ def create checkout_session = create_stripe_checkout_session(result.form_submission) redirect_to checkout_session.url, allow_other_host: true, status: :see_other else - redirect_to event_group_payment_path(@event, submission_id: result.form_submission.id), - notice: "Your group payment information has been submitted." + redirect_to event_bulk_payment_path(@event, submission_id: result.form_submission.id), + notice: "Your bulk payment information has been submitted." end else @form_fields = visible_form_fields @event = @event.decorate - @attendee_field = @form.form_fields.find_by(field_identifier: "group_payment_attendees") + @attendee_field = @form.form_fields.find_by(field_identifier: "bulk_payment_attendees") flash.now[:alert] = result.errors.join(", ") render :new, status: :unprocessable_content end end def show - authorize! :group_payment, to: :show? + authorize! :bulk_payment, to: :show? @submission = FormSubmission.find(params[:submission_id]) @form = @submission.form @@ -66,7 +66,7 @@ def show @event = @event.decorate attendee_answer = @responses.values.find { |a| - a.form_field&.field_identifier == "group_payment_attendees" + a.form_field&.field_identifier == "bulk_payment_attendees" } @attendees = parse_attendees(attendee_answer&.submitted_answer) end @@ -89,9 +89,9 @@ def set_event end def set_form - @form = @event.group_payment_form + @form = @event.bulk_payment_form unless @form - redirect_to event_path(@event), alert: "Group payment form is not available for this event." + redirect_to event_path(@event), alert: "Bulk payment form is not available for this event." end end @@ -101,7 +101,7 @@ def validate_required_fields visible_fields.find_each do |field| next if field.group_header? - next if field.field_identifier == "group_payment_attendees" + next if field.field_identifier == "bulk_payment_attendees" value = @form_params[field.id.to_s] @@ -148,13 +148,13 @@ def create_stripe_checkout_session(submission) line_items: [ { price_data: { currency: "usd", - product_data: { name: "Group Payment (#{qty} attendees): #{@event.title}" }, + product_data: { name: "Bulk Payment (#{qty} attendees): #{@event.title}" }, unit_amount: unit_amount }, quantity: qty } ], - success_url: event_group_payment_url(@event, submission_id: submission.id, checkout: "success"), - cancel_url: event_group_payment_url(@event, submission_id: submission.id, checkout: "cancelled") + success_url: event_bulk_payment_url(@event, submission_id: submission.id, checkout: "success"), + cancel_url: event_bulk_payment_url(@event, submission_id: submission.id, checkout: "cancelled") ) end diff --git a/app/controllers/events_controller.rb b/app/controllers/events_controller.rb index f36e1239d..2ffa7f334 100644 --- a/app/controllers/events_controller.rb +++ b/app/controllers/events_controller.rb @@ -2,7 +2,7 @@ class EventsController < ApplicationController include AhoyTracking, TagAssignable skip_before_action :authenticate_user!, only: [ :index, :show, :staff ] skip_before_action :verify_authenticity_token, only: [ :preview ] - before_action :set_event, only: %i[ show edit update destroy preview dashboard background registrants staff recipients group_payments preview_reminder send_reminder copy_registration_form ] + before_action :set_event, only: %i[ show edit update destroy preview dashboard background registrants staff recipients bulk_payments preview_reminder send_reminder copy_registration_form ] def index authorize! @@ -106,12 +106,12 @@ def recipients @dashboard = EventDashboard.new(@event) end - def group_payments + def bulk_payments authorize! @event @event = @event.decorate @submissions = FormSubmission.joins(form: :event_forms) - .where(event_forms: { event_id: @event.id, role: "group_payment" }) + .where(event_forms: { event_id: @event.id, role: "bulk_payment" }) .includes(:person, form_answers: :form_field) .order(created_at: :desc) end @@ -300,13 +300,13 @@ def assign_event_forms(event) event.event_forms.scholarship.destroy_all end - if params.dig(:event, :group_payment_enabled) == "1" - form = Form.standalone.find_by(role: "group_payment") - if form && !event.event_forms.group_payment.exists? - event.event_forms.create!(form: form, role: "group_payment") + if params.dig(:event, :bulk_payment_enabled) == "1" + form = Form.standalone.find_by(role: "bulk_payment") + if form && !event.event_forms.bulk_payment.exists? + event.event_forms.create!(form: form, role: "bulk_payment") end else - event.event_forms.group_payment.destroy_all + event.event_forms.bulk_payment.destroy_all end end diff --git a/app/frontend/javascript/controllers/group_payment_attendees_controller.js b/app/frontend/javascript/controllers/bulk_payment_attendees_controller.js similarity index 82% rename from app/frontend/javascript/controllers/group_payment_attendees_controller.js rename to app/frontend/javascript/controllers/bulk_payment_attendees_controller.js index 62861cd44..a5a146ea8 100644 --- a/app/frontend/javascript/controllers/group_payment_attendees_controller.js +++ b/app/frontend/javascript/controllers/bulk_payment_attendees_controller.js @@ -14,7 +14,7 @@ export default class extends Controller { const index = this.countValue++ const fragment = this.templateTarget.content.cloneNode(true) - fragment.querySelectorAll("[data-group-payment-attendees-target=\"row\"]").forEach(row => { + fragment.querySelectorAll("[data-bulk-payment-attendees-target=\"row\"]").forEach(row => { row.dataset.index = index }) @@ -31,7 +31,7 @@ export default class extends Controller { } removeRow(event) { - const row = event.target.closest("[data-group-payment-attendees-target=\"row\"]") + const row = event.target.closest("[data-bulk-payment-attendees-target=\"row\"]") if (row) { row.remove() this.serialize() @@ -40,7 +40,7 @@ export default class extends Controller { serialize() { const attendees = [] - this.rowsTarget.querySelectorAll("[data-group-payment-attendees-target=\"row\"]").forEach(row => { + this.rowsTarget.querySelectorAll("[data-bulk-payment-attendees-target=\"row\"]").forEach(row => { const first_name = row.querySelector("[data-attendee-field=\"first_name\"]")?.value || "" const last_name = row.querySelector("[data-attendee-field=\"last_name\"]")?.value || "" const email = row.querySelector("[data-attendee-field=\"email\"]")?.value || "" diff --git a/app/frontend/javascript/controllers/index.js b/app/frontend/javascript/controllers/index.js index 1904efd53..8ba5ac349 100644 --- a/app/frontend/javascript/controllers/index.js +++ b/app/frontend/javascript/controllers/index.js @@ -177,6 +177,6 @@ application.register("world-map-chart", WorldMapChartController) import CurrencyInputController from "./currency_input_controller" application.register("currency-input", CurrencyInputController) -import GroupPaymentAttendeesController from "./group_payment_attendees_controller" -application.register("group-payment-attendees", GroupPaymentAttendeesController) +import BulkPaymentAttendeesController from "./bulk_payment_attendees_controller" +application.register("bulk-payment-attendees", BulkPaymentAttendeesController) diff --git a/app/frontend/javascript/controllers/section_filter_controller.js b/app/frontend/javascript/controllers/section_filter_controller.js index 48463ffdc..105515136 100644 --- a/app/frontend/javascript/controllers/section_filter_controller.js +++ b/app/frontend/javascript/controllers/section_filter_controller.js @@ -13,10 +13,10 @@ export default class extends Controller { const sectionRole = el.dataset.sectionRole if (role === "scholarship") { el.classList.toggle("hidden", sectionRole !== "scholarship") - } else if (role === "group_payment") { - el.classList.toggle("hidden", sectionRole !== "group_payment") + } else if (role === "bulk_payment") { + el.classList.toggle("hidden", sectionRole !== "bulk_payment") } else { - el.classList.toggle("hidden", sectionRole === "scholarship" || sectionRole === "group_payment") + el.classList.toggle("hidden", sectionRole === "scholarship" || sectionRole === "bulk_payment") } }) } diff --git a/app/models/concerns/pay_charge_extensions.rb b/app/models/concerns/pay_charge_extensions.rb index 23e93397f..05b40d01c 100644 --- a/app/models/concerns/pay_charge_extensions.rb +++ b/app/models/concerns/pay_charge_extensions.rb @@ -15,7 +15,7 @@ def create_external_processor_payment if (event_registration_id = metadata["event_registration_id"]) create_event_registration_payment(event_registration_id) elsif (form_submission_id = metadata["form_submission_id"]) - create_group_payment(form_submission_id) + create_bulk_payment(form_submission_id) elsif (person_id = metadata["person_id"]) create_donation_payment(person_id) end @@ -49,10 +49,10 @@ def create_event_registration_payment(event_registration_id) ) end - def create_group_payment(form_submission_id) + def create_bulk_payment(form_submission_id) submission = FormSubmission.find_by(id: form_submission_id) return unless submission - return unless submission.role == "group_payment" + return unless submission.role == "bulk_payment" person = submission.person return unless person diff --git a/app/models/event.rb b/app/models/event.rb index 384636da9..15f1a3d68 100644 --- a/app/models/event.rb +++ b/app/models/event.rb @@ -69,8 +69,8 @@ def scholarship_form forms.find_by(event_forms: { role: "scholarship" }) end - def group_payment_form - forms.find_by(event_forms: { role: "group_payment" }) + def bulk_payment_form + forms.find_by(event_forms: { role: "bulk_payment" }) end def active_registration_for(person) diff --git a/app/models/event_form.rb b/app/models/event_form.rb index e1d366539..4f2f6bdda 100644 --- a/app/models/event_form.rb +++ b/app/models/event_form.rb @@ -2,12 +2,12 @@ class EventForm < ApplicationRecord belongs_to :event belongs_to :form - ROLES = %w[registration scholarship group_payment].freeze + ROLES = %w[registration scholarship bulk_payment].freeze validates :role, presence: true, inclusion: { in: ROLES } validates :form_id, uniqueness: { scope: [ :event_id, :role ] } scope :registration, -> { where(role: "registration") } scope :scholarship, -> { where(role: "scholarship") } - scope :group_payment, -> { where(role: "group_payment") } + scope :bulk_payment, -> { where(role: "bulk_payment") } end diff --git a/app/policies/event_policy.rb b/app/policies/event_policy.rb index 870002e0f..d37d7473c 100644 --- a/app/policies/event_policy.rb +++ b/app/policies/event_policy.rb @@ -65,7 +65,7 @@ def recipients? manage? end - def group_payments? + def bulk_payments? manage? end diff --git a/app/policies/events/group_payment_policy.rb b/app/policies/events/bulk_payment_policy.rb similarity index 62% rename from app/policies/events/group_payment_policy.rb rename to app/policies/events/bulk_payment_policy.rb index ba8c8be49..bd55a1570 100644 --- a/app/policies/events/group_payment_policy.rb +++ b/app/policies/events/bulk_payment_policy.rb @@ -1,4 +1,4 @@ -class Events::GroupPaymentPolicy < ApplicationPolicy +class Events::BulkPaymentPolicy < ApplicationPolicy def new? true end diff --git a/app/services/event_registration_services/group_payment.rb b/app/services/event_registration_services/bulk_payment.rb similarity index 97% rename from app/services/event_registration_services/group_payment.rb rename to app/services/event_registration_services/bulk_payment.rb index 6fdf10121..54733c411 100644 --- a/app/services/event_registration_services/group_payment.rb +++ b/app/services/event_registration_services/bulk_payment.rb @@ -1,5 +1,5 @@ module EventRegistrationServices - class GroupPayment + class BulkPayment Result = Struct.new(:success?, :form_submission, :errors, keyword_init: true) def self.call(event:, form:, form_params:, person: nil) @@ -53,7 +53,7 @@ def find_or_create_person end def create_form_submission(person) - submission = FormSubmission.create!(person: person, form: @form, role: "group_payment") + submission = FormSubmission.create!(person: person, form: @form, role: "bulk_payment") save_form_answers(submission) submission end diff --git a/app/services/form_builder_service.rb b/app/services/form_builder_service.rb index c456ad68e..9129ad24f 100644 --- a/app/services/form_builder_service.rb +++ b/app/services/form_builder_service.rb @@ -9,7 +9,7 @@ class FormBuilderService payment: { label: "Payment", method: :build_payment_fields }, consent: { label: "Consent", method: :build_consent_fields }, post_event_feedback: { label: "Post-event feedback", method: :build_post_event_feedback_fields }, - group_payment: { label: "Group payment", method: :build_group_payment_fields } + bulk_payment: { label: "Bulk payment", method: :build_bulk_payment_fields } }.freeze def initialize(name:, sections:, role: nil) @@ -49,7 +49,7 @@ def call payment: %w[payment_method], consent: %w[communication_consent], post_event_feedback: %w[event_rating most_valuable improvement_suggestions], - group_payment: %w[payer_first_name payer_last_name payer_email organization_name number_of_attendees payment_method group_payment_attendees] + bulk_payment: %w[payer_first_name payer_last_name payer_email organization_name number_of_attendees payment_method bulk_payment_attendees] }.freeze # Header questions created by each section's builder method @@ -63,7 +63,7 @@ def call payment: [ "Payment Information" ], consent: [ "Consent" ], post_event_feedback: [ "Post-Event Feedback" ], - group_payment: [ "Payer Information", "Payment Information", "Attendees" ] + bulk_payment: [ "Payer Information", "Payment Information", "Attendees" ] }.freeze # Update sections on an existing form: add new sections, remove unchecked ones @@ -111,7 +111,7 @@ def self.update_sections!(form, new_sections) "scholarship" => :always_ask, "consent" => :answers_on_file, "post_event_feedback" => :answers_on_file, - "group_payment" => :always_ask + "bulk_payment" => :always_ask }.freeze # Sections where answers carry across all events (ask once ever) @@ -341,33 +341,33 @@ def build_post_event_feedback_fields(form, position) position end - def build_group_payment_fields(form, position) - position = add_header(form, position, "Payer Information", group: "group_payment", visibility: :logged_out_only) + def build_bulk_payment_fields(form, position) + position = add_header(form, position, "Payer Information", group: "bulk_payment", visibility: :logged_out_only) position = add_field(form, position, "Payer First Name", :free_form_input_one_line, - key: "payer_first_name", group: "group_payment", required: true, + key: "payer_first_name", group: "bulk_payment", required: true, visibility: :logged_out_only) position = add_field(form, position, "Payer Last Name", :free_form_input_one_line, - key: "payer_last_name", group: "group_payment", required: true, + key: "payer_last_name", group: "bulk_payment", required: true, visibility: :logged_out_only) position = add_field(form, position, "Payer Email", :free_form_input_one_line, - key: "payer_email", group: "group_payment", required: true, + key: "payer_email", group: "bulk_payment", required: true, visibility: :logged_out_only) position = add_field(form, position, "Organization Name", :free_form_input_one_line, - key: "organization_name", group: "group_payment", required: false, + key: "organization_name", group: "bulk_payment", required: false, visibility: :logged_out_only) - position = add_header(form, position, "Payment Information", group: "group_payment") + position = add_header(form, position, "Payment Information", group: "bulk_payment") position = add_field(form, position, "Payment Method", :multiple_choice_radio, - key: "payment_method", group: "group_payment", required: true, + key: "payment_method", group: "bulk_payment", required: true, options: [ "Credit Card", "Check", "Purchase Order", "Other" ]) - position = add_header(form, position, "Attendees", group: "group_payment") + position = add_header(form, position, "Attendees", group: "bulk_payment") position = add_field(form, position, "Number of Attendees", :free_form_input_one_line, - key: "number_of_attendees", group: "group_payment", required: true, + key: "number_of_attendees", group: "bulk_payment", required: true, datatype: :number_integer) position = add_field(form, position, "Attendees", :no_user_input, - key: "group_payment_attendees", group: "group_payment", required: false) + key: "bulk_payment_attendees", group: "bulk_payment", required: false) position end end diff --git a/app/views/events/_bulk_actions_menu.html.erb b/app/views/events/_bulk_actions_menu.html.erb index 7e24ffc19..290eb6643 100644 --- a/app/views/events/_bulk_actions_menu.html.erb +++ b/app/views/events/_bulk_actions_menu.html.erb @@ -13,7 +13,7 @@ data-dropdown-target="content" class="hidden absolute right-0 z-10 mt-1 bg-white border border-gray-200 rounded-md shadow-lg py-1 min-w-[180px]"> <%= link_to "Send reminder emails", preview_reminder_event_path(@event), class: item_class %> - <%= link_to "Group payments", group_payments_event_path(@event), class: item_class %> + <%= link_to "Bulk payments", bulk_payments_event_path(@event), class: item_class %> <%= link_to registrants_event_path(@event, format: :csv), class: item_class, data: { turbo_frame: "_top" } do %> Download CSV <% end %> diff --git a/app/views/events/_form.html.erb b/app/views/events/_form.html.erb index 43ad62591..0976e3d71 100644 --- a/app/views/events/_form.html.erb +++ b/app/views/events/_form.html.erb @@ -394,8 +394,8 @@
diff --git a/app/views/events/_form_actions_menu.html.erb b/app/views/events/_form_actions_menu.html.erb index fd6624fd7..3238093f0 100644 --- a/app/views/events/_form_actions_menu.html.erb +++ b/app/views/events/_form_actions_menu.html.erb @@ -12,15 +12,15 @@
-

Group Payment

+

Bulk Payment

Pay for multiple attendees.

@@ -42,12 +42,12 @@ <% end %> - <%= form_with url: event_group_payment_path(@event), method: :post, - data: { controller: "group-payment-attendees", action: "submit->group-payment-attendees#serialize", turbo: false }, + <%= form_with url: event_bulk_payment_path(@event), method: :post, + data: { controller: "bulk-payment-attendees", action: "submit->bulk-payment-attendees#serialize", turbo: false }, class: "space-y-2" do |f| %> <% @@ -56,7 +56,7 @@ %> <% @form_fields.each do |field| %> - <% next if field.field_identifier == "group_payment_attendees" %> + <% next if field.field_identifier == "bulk_payment_attendees" %> <% if field.group_header? %>
@@ -70,8 +70,8 @@ error = @field_errors&.dig(field.id) error_border = error ? "border-red-400 focus:border-red-500 focus:ring-red-500/30" : "border-gray-300 hover:border-gray-400 focus:border-blue-500 focus:ring-blue-500/30" input_classes = "w-full rounded-lg border bg-white px-3.5 py-2.5 text-sm text-gray-900 shadow-sm transition focus:outline-none focus:ring-2 #{error_border}" - field_name = "group_payment[form_fields][#{field.id}]" - field_id = "group_payment_form_fields_#{field.id}" + field_name = "bulk_payment[form_fields][#{field.id}]" + field_id = "bulk_payment_form_fields_#{field.id}" two_col = %w[payer_first_name payer_last_name].include?(field.field_identifier) %> <% if two_col %> @@ -114,7 +114,7 @@ submitted_value = @form_params&.dig(field.id.to_s) error = @field_errors&.dig(field.id) error_border = error ? "border-red-400 focus:border-red-500 focus:ring-red-500/30" : "border-gray-300 hover:border-gray-400 focus:border-blue-500 focus:ring-blue-500/30" - field_id = "group_payment_form_fields_#{field.id}" + field_id = "bulk_payment_form_fields_#{field.id}" %>