Lots of updates mainly in how pages are displayed. Also edited participant database to allow for simulataneous employer creation, made the TIN field not mandatory etc
This commit is contained in:
parent
9662776c73
commit
2de94bd706
|
@ -44,6 +44,19 @@ class EmployersController < ApplicationController
|
|||
redirect_to employers_url, notice: 'Employer was successfully destroyed.'
|
||||
end
|
||||
|
||||
# GET /employers/search
|
||||
# This action responds to the auto-complete AJAX requests
|
||||
def search
|
||||
if params[:term].present?
|
||||
@employers = Employer.where("name LIKE ?", "%#{params[:term]}%")
|
||||
else
|
||||
@employers = Employer.none
|
||||
end
|
||||
|
||||
# Respond with a JSON array of employer names and IDs
|
||||
render json: @employers.map { |e| { label: e.name, value: e.id } }
|
||||
end
|
||||
|
||||
private
|
||||
|
||||
def set_employer
|
||||
|
|
|
@ -1,49 +1,84 @@
|
|||
class ParticipantsController < ApplicationController
|
||||
before_action :set_participant, only: [:show, :edit, :update, :destroy]
|
||||
before_action :set_participant, only: [:show, :edit, :update, :destroy]
|
||||
|
||||
def index
|
||||
@participants = Participant.all
|
||||
end
|
||||
|
||||
def show
|
||||
end
|
||||
|
||||
def new
|
||||
@participant = Participant.new
|
||||
end
|
||||
|
||||
def create
|
||||
@participant = Participant.new(participant_params)
|
||||
if @participant.save
|
||||
redirect_to @participant, notice: 'Participant was successfully created.'
|
||||
else
|
||||
render :new
|
||||
end
|
||||
end
|
||||
|
||||
def edit
|
||||
end
|
||||
|
||||
def update
|
||||
if @participant.update(participant_params)
|
||||
redirect_to @participant, notice: 'Participant was successfully updated.'
|
||||
else
|
||||
render :edit
|
||||
end
|
||||
end
|
||||
|
||||
def destroy
|
||||
@participant.destroy
|
||||
redirect_to participants_url, notice: 'Participant was successfully destroyed.'
|
||||
end
|
||||
|
||||
private
|
||||
def set_participant
|
||||
@participant = Participant.find(params[:id])
|
||||
end
|
||||
|
||||
def participant_params
|
||||
params.require(:participant).permit(:name, :address, :phone, :email, :mci, :dob, :ssn, :gender, :employer_id)
|
||||
end
|
||||
def index
|
||||
@participants = Participant.all
|
||||
end
|
||||
|
||||
|
||||
def show
|
||||
end
|
||||
|
||||
def new
|
||||
@participant = Participant.new
|
||||
end
|
||||
|
||||
def create
|
||||
@participant = Participant.new(participant_params)
|
||||
|
||||
begin
|
||||
Participant.transaction do
|
||||
if params[:is_employer] == 'yes'
|
||||
employer = Employer.create!(employer_params_from_participant(@participant))
|
||||
@participant.employer = employer
|
||||
end
|
||||
|
||||
if @participant.save
|
||||
redirect_to @participant, notice: 'Participant was successfully created.'
|
||||
else
|
||||
raise ActiveRecord::Rollback, "Participant could not be saved"
|
||||
end
|
||||
end
|
||||
rescue ActiveRecord::RecordInvalid => e
|
||||
# Log the error and set a flash message for the user
|
||||
Rails.logger.error("Participant creation failed: #{e.message}")
|
||||
flash.now[:alert] = "Error: #{e.message}"
|
||||
render :new
|
||||
end
|
||||
|
||||
|
||||
|
||||
rescue => e
|
||||
puts "Error: #{e.message}" # Log the error message
|
||||
flash.now[:alert] = "Error: #{e.message}" # Optionally, display the error message to the user
|
||||
render :new
|
||||
|
||||
end
|
||||
|
||||
def edit
|
||||
end
|
||||
|
||||
def update
|
||||
if @participant.update(participant_params)
|
||||
redirect_to @participant, notice: 'Participant was successfully updated.'
|
||||
else
|
||||
render :edit
|
||||
end
|
||||
end
|
||||
|
||||
def destroy
|
||||
@participant.destroy
|
||||
redirect_to participants_url, notice: 'Participant was successfully destroyed.'
|
||||
end
|
||||
|
||||
private
|
||||
|
||||
def set_participant
|
||||
@participant = Participant.find(params[:id])
|
||||
end
|
||||
|
||||
def participant_params
|
||||
params.require(:participant).permit(:name, :address, :phone, :email, :mci, :dob, :ssn, :gender, :employer_id)
|
||||
end
|
||||
|
||||
def employer_params_from_participant(participant)
|
||||
{
|
||||
name: participant.name,
|
||||
address: participant.address,
|
||||
phone: participant.phone,
|
||||
email: participant.email,
|
||||
dob: participant.dob, # Mapping Date of Birth
|
||||
ssn: participant.ssn, # Mapping SSN
|
||||
gender: participant.gender # Mapping Gender
|
||||
}
|
||||
end
|
||||
end
|
||||
|
|
|
@ -1,5 +1,10 @@
|
|||
class Participant < ApplicationRecord
|
||||
belongs_to :employer
|
||||
# This makes the association to Employer optional
|
||||
belongs_to :employer, optional: true
|
||||
belongs_to :worker, optional: true
|
||||
|
||||
# Other associations
|
||||
has_and_belongs_to_many :programs
|
||||
has_many :workers
|
||||
end
|
||||
|
||||
|
|
|
@ -10,10 +10,10 @@
|
|||
<th>Address</th>
|
||||
<th>Phone</th>
|
||||
<th>Email</th>
|
||||
<th>TIN</th>
|
||||
|
||||
<th>DOB</th>
|
||||
<th>SSN</th>
|
||||
<th>Gender</th>
|
||||
|
||||
|
||||
<th>Actions</th>
|
||||
</tr>
|
||||
</thead>
|
||||
|
@ -24,14 +24,13 @@
|
|||
<td><%= employer.address %></td>
|
||||
<td><%= employer.phone %></td>
|
||||
<td><%= employer.email %></td>
|
||||
<td><%= employer.tin %></td>
|
||||
|
||||
<td><%= employer.dob %></td>
|
||||
<td><%= employer.ssn %></td>
|
||||
<td><%= employer.gender %></td>
|
||||
|
||||
|
||||
<td>
|
||||
<%= link_to 'Show', employer, class: 'btn btn-sm btn-info' %>
|
||||
<%= link_to 'Edit', edit_employer_path(employer), class: 'btn btn-sm btn-warning' %>
|
||||
<%= link_to 'Destroy', @employer, method: :delete, data: { confirm: 'Are you sure?', turbo: 'false' }, class: 'btn btn-sm btn-danger' %>
|
||||
</td>
|
||||
</tr>
|
||||
<% end %>
|
||||
|
|
|
@ -30,6 +30,17 @@
|
|||
<%= form.email_field :email, id: 'email-field', class: 'form-control', required: true, placeholder: 'Make sure to include @ sign' %>
|
||||
</div>
|
||||
|
||||
<div class="mb-3">
|
||||
<%= form.label :is_employer, 'Is this participant also an employer?', class: 'form-label' %>
|
||||
<div>
|
||||
<%= radio_button_tag 'is_employer', 'yes', false, class: 'form-check-input' %>
|
||||
<%= label_tag 'is_employer_yes', 'Yes', class: 'form-check-label' %>
|
||||
<%= radio_button_tag 'is_employer', 'no', true, class: 'form-check-input' %>
|
||||
<%= label_tag 'is_employer_no', 'No', class: 'form-check-label' %>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
||||
<div class="mb-3">
|
||||
<%= form.label :mci, 'MCI', class: 'form-label' %>
|
||||
<%= form.text_field :mci, class: 'form-control', placeholder: 'Required for Participant' %>
|
||||
|
@ -138,3 +149,30 @@
|
|||
|
||||
|
||||
|
||||
<script src="https://code.jquery.com/jquery-3.6.0.min.js"></script>
|
||||
<script src="https://code.jquery.com/ui/1.13.0/jquery-ui.min.js"></script>
|
||||
<link rel="stylesheet" href="//code.jquery.com/ui/1.13.0/themes/base/jquery-ui.css">
|
||||
|
||||
<script>
|
||||
$(document).ready(function() {
|
||||
$('#employer-autocomplete').autocomplete({
|
||||
source: function(request, response) {
|
||||
$.ajax({
|
||||
url: '/employers/search', // Rails endpoint for searching employers
|
||||
dataType: "json",
|
||||
data: { term: request.term },
|
||||
success: function(data) {
|
||||
response(data);
|
||||
}
|
||||
});
|
||||
},
|
||||
minLength: 2, // Minimum characters to trigger the search
|
||||
select: function(event, ui) {
|
||||
// Function to handle selection
|
||||
$('#employer-autocomplete').val(ui.item.label); // ui.item.label should contain the name of the employer
|
||||
// You might want to set a hidden field with employer ID if needed
|
||||
return false;
|
||||
}
|
||||
});
|
||||
});
|
||||
</script>
|
||||
|
|
|
@ -23,9 +23,9 @@
|
|||
<td><%= participant.address %></td>
|
||||
<td><%= participant.phone %></td>
|
||||
<td><%= participant.email %></td>
|
||||
<td><%= participant.program %></td>
|
||||
<td><%= participant.programs.map(&:name).join(", ") %></td>
|
||||
<td><%= participant.mci %></td>
|
||||
<td><%= participant.dob.strftime('%Y-%m-%d') if participant.dob %></td>
|
||||
<td><%= participant.dob.strftime('%B, %d, %Y') if participant.dob %></td>
|
||||
<td><%= participant.ssn %></td>
|
||||
<td><%= participant.gender %></td>
|
||||
<td><%= link_to 'Show', participant, class: 'btn btn-sm btn-info' %></td>
|
||||
|
|
|
@ -15,6 +15,37 @@
|
|||
<%= @participant.address %>
|
||||
</p>
|
||||
|
||||
<p class="card-text">
|
||||
<strong>Phone:</strong>
|
||||
<%= @participant.phone %>
|
||||
</p>
|
||||
|
||||
<p class="card-text">
|
||||
<strong>Email:</strong>
|
||||
<%= @participant.email %>
|
||||
</p>
|
||||
|
||||
<p class="card-text">
|
||||
<strong>MCI:</strong>
|
||||
<%= @participant.mci %>
|
||||
</p>
|
||||
|
||||
<p class="card-text">
|
||||
<strong>DOB:</strong>
|
||||
<%= @participant.dob.strftime('%B, %d, %Y') if @participant.dob.present? %>
|
||||
</p>
|
||||
|
||||
|
||||
<p class="card-text">
|
||||
<strong>SSN:</strong>
|
||||
<%= @participant.ssn %>
|
||||
</p>
|
||||
|
||||
<p class="card-text">
|
||||
<strong>Gender:</strong>
|
||||
<%= @participant.gender %>
|
||||
</p>
|
||||
|
||||
<!-- Repeat this pattern for other attributes like phone, email, etc. -->
|
||||
|
||||
</div>
|
||||
|
|
|
@ -10,9 +10,12 @@ Rails.application.routes.draw do
|
|||
end
|
||||
|
||||
resources :participants
|
||||
resources :employers
|
||||
resources :workers
|
||||
resources :vendors
|
||||
resources :employers do
|
||||
get 'search', on: :collection
|
||||
end
|
||||
|
||||
|
||||
|
||||
|
||||
|
|
|
@ -0,0 +1,5 @@
|
|||
class ChangeWorkerIdToBeOptionalInParticipants < ActiveRecord::Migration[6.0]
|
||||
def change
|
||||
change_column_null :participants, :worker_id, true
|
||||
end
|
||||
end
|
|
@ -10,7 +10,7 @@
|
|||
#
|
||||
# It's strongly recommended that you check this file into your version control system.
|
||||
|
||||
ActiveRecord::Schema[7.1].define(version: 2024_01_17_025159) do
|
||||
ActiveRecord::Schema[7.1].define(version: 2024_01_20_051441) do
|
||||
create_table "employers", force: :cascade do |t|
|
||||
t.string "name"
|
||||
t.string "address"
|
||||
|
@ -41,7 +41,7 @@ ActiveRecord::Schema[7.1].define(version: 2024_01_17_025159) do
|
|||
t.integer "employer_id", null: false
|
||||
t.datetime "created_at", null: false
|
||||
t.datetime "updated_at", null: false
|
||||
t.integer "worker_id", null: false
|
||||
t.integer "worker_id"
|
||||
t.index ["employer_id"], name: "index_participants_on_employer_id"
|
||||
t.index ["worker_id"], name: "index_participants_on_worker_id"
|
||||
end
|
||||
|
|
Loading…
Reference in New Issue