class VendorsController < ApplicationController def index @vendors = Vendor.order(:name).page(params[:page]).per(5) # Adjust the number per page as needed end def show @vendor = Vendor.find(params[:id]) @sorted_participants = @vendor.service_contracts.includes(:participant).map(&:participant).sort_by(&:last_name) end def new @vendor = Vendor.new end def create @vendor = Vendor.new(vendor_params) if @vendor.save assign_role_specific_forms_to(@vendor) redirect_to @vendor, notice: 'Vendor was successfully created.' else render :new end end def edit @vendor = Vendor.find(params[:id]) end def update @vendor = Vendor.find(params[:id]) if @vendor.update(vendor_params) redirect_to @vendor else render :edit end end def destroy @vendor = Vendor.find(params[:id]) @vendor.destroy redirect_to vendors_path end def search if params[:term].present? @vendors = Vendor.where("name LIKE ?", "%#{params[:term]}%") else @vendors = Vendor.none end # Respond with a JSON array of vendor names and IDs render json: @vendors.map { |vendor| { label: vendor.name, value: vendor.id } } end private def vendor_params params.require(:vendor).permit( :name, :address_line_1, :address_line_2, :city, :state, :zip, :phone, :email, :dba, :tin, :contact ) end def assign_role_specific_forms_to(vendor) vendor_role = FormRole.find_by(name: 'Vendor') # Fetch forms associated with the "Vendor" role forms_for_vendor = vendor_role.forms forms_for_vendor.each do |form| # Create an onboarding item for each form for the newly created vendor vendor.onboarding_items.create(form: form) end end end