Fixed Participant Show page. Add new worker now will autofill on user entry based on already entered Workers.
This commit is contained in:
parent
847921ba25
commit
e952763c3a
|
@ -19,6 +19,10 @@ class EmploymentsController < ApplicationController
|
||||||
redirect_to participant_path(participant), notice: 'Employment was successfully removed.'
|
redirect_to participant_path(participant), notice: 'Employment was successfully removed.'
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def index
|
||||||
|
@employments = Employment.all # or however you need to retrieve the data
|
||||||
|
end
|
||||||
|
|
||||||
private
|
private
|
||||||
|
|
||||||
def set_employment
|
def set_employment
|
||||||
|
|
|
@ -12,7 +12,7 @@ class ParticipantsController < ApplicationController
|
||||||
@workers = @participant.workers # Fetch associated workers
|
@workers = @participant.workers # Fetch associated workers
|
||||||
@employment = Employment.new # Initialize a new Employment object
|
@employment = Employment.new # Initialize a new Employment object
|
||||||
@participant = Participant.includes(employments: :worker).find(params[:id])
|
@participant = Participant.includes(employments: :worker).find(params[:id])
|
||||||
@employments = @participant.employments.joins(:worker).order('workers.last_name')
|
@employments = @participant.employments.includes(:worker).order('workers.last_name')
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
||||||
|
@ -58,15 +58,18 @@ class ParticipantsController < ApplicationController
|
||||||
|
|
||||||
def link_worker
|
def link_worker
|
||||||
@participant = Participant.find(params[:id])
|
@participant = Participant.find(params[:id])
|
||||||
employment = @participant.employments.new(employment_params)
|
@employment = @participant.employments.new(employment_params)
|
||||||
if employment.save
|
|
||||||
|
if @employment.save
|
||||||
redirect_to @participant, notice: 'Worker was successfully linked.'
|
redirect_to @participant, notice: 'Worker was successfully linked.'
|
||||||
else
|
else
|
||||||
# Assuming you have a show or edit page to render
|
Rails.logger.debug @employment.errors.full_messages
|
||||||
render 'show', alert: 'Failed to link worker.'
|
flash[:alert] = @employment.errors.full_messages.to_sentence
|
||||||
|
render 'show'
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
||||||
private
|
private
|
||||||
|
|
||||||
def set_participant
|
def set_participant
|
||||||
|
@ -92,4 +95,5 @@ class ParticipantsController < ApplicationController
|
||||||
def employment_params
|
def employment_params
|
||||||
params.require(:employment).permit(:worker_id, :start_date, :end_date)
|
params.require(:employment).permit(:worker_id, :start_date, :end_date)
|
||||||
end
|
end
|
||||||
|
|
||||||
end
|
end
|
||||||
|
|
|
@ -38,6 +38,18 @@ class WorkersController < ApplicationController
|
||||||
@worker.destroy
|
@worker.destroy
|
||||||
redirect_to workers_path
|
redirect_to workers_path
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def search
|
||||||
|
if params[:term]
|
||||||
|
# Assuming you want to search by first name or last name
|
||||||
|
@workers = Worker.where('first_name LIKE ? OR last_name LIKE ?', "%#{params[:term]}%", "%#{params[:term]}%")
|
||||||
|
else
|
||||||
|
@workers = Worker.all
|
||||||
|
end
|
||||||
|
|
||||||
|
# Format the response as needed by your autocomplete component
|
||||||
|
render json: @workers.map { |worker| { label: "#{worker.first_name} #{worker.last_name}", value: worker.id } }
|
||||||
|
end
|
||||||
|
|
||||||
private
|
private
|
||||||
def worker_params
|
def worker_params
|
||||||
|
|
|
@ -160,6 +160,7 @@
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
|
|
||||||
|
<%# This is to auto complete the Employer field on hand entry %>
|
||||||
|
|
||||||
<script src="https://code.jquery.com/jquery-3.6.0.min.js"></script>
|
<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>
|
<script src="https://code.jquery.com/ui/1.13.0/jquery-ui.min.js"></script>
|
||||||
|
|
|
@ -9,7 +9,7 @@
|
||||||
|
|
||||||
|
|
||||||
<table class="table table-striped table-hover">
|
<table class="table table-striped table-hover">
|
||||||
<thead class="table-dark">
|
<thead class="table-light">
|
||||||
<tr>
|
<tr>
|
||||||
<th>First Name</th>
|
<th>First Name</th>
|
||||||
<th>Last Name</th>
|
<th>Last Name</th>
|
||||||
|
@ -40,9 +40,9 @@
|
||||||
<% end %>
|
<% end %>
|
||||||
</td>
|
</td>
|
||||||
<td>
|
<td>
|
||||||
<%= link_to edit_participant_path(participant), class: 'btn btn-sm btn-warning' do %>
|
<%= link_to edit_participant_path(participant), class: 'btn btn-sm btn-info' do %>
|
||||||
<i class="bi bi-pencil-fill"></i> <!-- Pencil icon for 'Edit' -->
|
<i class="bi bi-pencil-fill" style="color: white;"></i> <!-- Pencil icon for 'Edit' with white color -->
|
||||||
<% end %>
|
<% end %>
|
||||||
</td>
|
</td>
|
||||||
</tr>
|
</tr>
|
||||||
<% end %>
|
<% end %>
|
||||||
|
|
|
@ -62,40 +62,46 @@
|
||||||
|
|
||||||
|
|
||||||
<h2 class="mt-4">Linked Workers</h2>
|
<h2 class="mt-4">Linked Workers</h2>
|
||||||
<table class="table table-striped">
|
<% if @employments.present? %>
|
||||||
<thead class="table-dark">
|
<table class="table table-striped">
|
||||||
<tr>
|
<thead class="table-light">
|
||||||
<th>Worker Name</th>
|
|
||||||
<th>Start Date</th>
|
|
||||||
<th>End Date</th>
|
|
||||||
<th>Actions</th>
|
|
||||||
</tr>
|
|
||||||
</thead>
|
|
||||||
<tbody>
|
|
||||||
<% @employments.each do |employment| %>
|
|
||||||
<tr>
|
<tr>
|
||||||
<td><%= employment.worker&.full_name || 'No Worker Assigned' %></td>
|
<th>Worker Name</th>
|
||||||
<td><%= employment.start_date.strftime('%B %d, %Y') if employment.start_date.present? %></td>
|
<th>Start Date</th>
|
||||||
<td><%= employment.end_date.strftime('%B %d, %Y') if employment.end_date.present? %></td>
|
<th>End Date</th>
|
||||||
<td>
|
<th>Actions</th>
|
||||||
<%= link_to worker_path(employment.worker), class: 'btn btn-sm btn-secondary' do %>
|
|
||||||
<i class="bi bi-eye"></i> <!-- Eyeball icon for 'Show' -->
|
|
||||||
<% end %>
|
|
||||||
<%= link_to edit_employment_path(employment), class: 'btn btn-sm btn-warning' do %>
|
|
||||||
<i class="bi bi-pencil-fill"></i> <!-- Pencil icon for 'Edit' -->
|
|
||||||
<% end %>
|
|
||||||
</td>
|
|
||||||
</tr>
|
</tr>
|
||||||
<% end %>
|
</thead>
|
||||||
</tbody>
|
<tbody>
|
||||||
</table>
|
<% @employments.each do |employment| %>
|
||||||
|
<tr>
|
||||||
|
<td><%= employment.worker&.full_name || 'No Worker Assigned' %></td>
|
||||||
|
<td><%= employment.start_date.strftime('%B %d, %Y') if employment.start_date.present? %></td>
|
||||||
|
<td><%= employment.end_date.strftime('%B %d, %Y') if employment.end_date.present? %></td>
|
||||||
|
<td>
|
||||||
|
<%= link_to worker_path(employment.worker), class: 'btn btn-sm btn-secondary' do %>
|
||||||
|
<i class="bi bi-eye"></i> <!-- Eyeball icon for 'Show' -->
|
||||||
|
<% end %>
|
||||||
|
<%= link_to edit_employment_path(employment), class: 'btn btn-sm btn-info' do %>
|
||||||
|
<i class="bi bi-pencil-fill"></i> <!-- Pencil icon for 'Edit' -->
|
||||||
|
<% end %>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
<% end %>
|
||||||
|
</tbody>
|
||||||
|
</table>
|
||||||
|
<% else %>
|
||||||
|
<p>No employments available.</p>
|
||||||
|
<% end %>
|
||||||
|
|
||||||
<br>
|
<br>
|
||||||
|
|
||||||
|
|
||||||
<%= form_with(model: [@participant, @employment], url: link_worker_participant_path(@participant), method: :post, class: 'row g-3') do |form| %>
|
<%= form_with(model: [@participant, @employment], url: link_worker_participant_path(@participant), method: :post, class: 'row g-3') do |form| %>
|
||||||
<div class="col-md-6">
|
<div class="col-md-6">
|
||||||
<%= form.label :worker_id, "Add New Worker", class: 'form-label' %>
|
<%= form.label :worker_name, "Add New Worker", class: 'form-label' %>
|
||||||
<%= form.collection_select :worker_id, Worker.all, :id, :full_name, { include_blank: true, prompt: "Select a Worker" }, { class: 'form-select' } %>
|
<%= text_field_tag :worker_name, nil, id: 'worker-autocomplete', class: 'form-control', placeholder: 'Start typing worker name...' %>
|
||||||
|
<%= hidden_field_tag 'employment[worker_id]', nil, id: 'selected-worker-id' %>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="col-md-3">
|
<div class="col-md-3">
|
||||||
|
@ -112,3 +118,35 @@
|
||||||
<%= form.submit "Link Worker", class: 'btn btn-dark' %>
|
<%= form.submit "Link Worker", class: 'btn btn-dark' %>
|
||||||
</div>
|
</div>
|
||||||
<% end %>
|
<% end %>
|
||||||
|
|
||||||
|
|
||||||
|
<%# This is for autocompleting the Worker field to return users in the system %>
|
||||||
|
|
||||||
|
<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() {
|
||||||
|
$('#worker-autocomplete').autocomplete({
|
||||||
|
source: function(request, response) {
|
||||||
|
$.ajax({
|
||||||
|
url: '/workers/search', // Updated endpoint for searching workers
|
||||||
|
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
|
||||||
|
$('#worker-autocomplete').val(ui.item.label); // ui.item.label should contain the name of the worker
|
||||||
|
$('#selected-worker-id').val(ui.item.value); // Set the worker ID in the hidden field
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
});
|
||||||
|
</script>
|
||||||
|
|
||||||
|
|
|
@ -15,7 +15,10 @@ Rails.application.routes.draw do
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
resources :workers
|
resources :workers do
|
||||||
|
get 'search', on: :collection
|
||||||
|
end
|
||||||
|
|
||||||
resources :vendors
|
resources :vendors
|
||||||
resources :employments, only: [:edit, :update, :destroy]
|
resources :employments, only: [:edit, :update, :destroy]
|
||||||
resources :employers do
|
resources :employers do
|
||||||
|
|
File diff suppressed because it is too large
Load Diff
12
package.json
12
package.json
|
@ -2,13 +2,17 @@
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@babel/plugin-proposal-private-methods": "^7.18.6",
|
"@babel/plugin-proposal-private-methods": "^7.18.6",
|
||||||
"@babel/plugin-proposal-private-property-in-object": "^7.21.11",
|
"@babel/plugin-proposal-private-property-in-object": "^7.21.11",
|
||||||
|
"@babel/plugin-transform-optional-chaining": "^7.23.4",
|
||||||
"@hotwired/turbo-rails": "^8.0.0-beta.2",
|
"@hotwired/turbo-rails": "^8.0.0-beta.2",
|
||||||
"@rails/ujs": "^7.1.3",
|
"@rails/ujs": "^7.1.3",
|
||||||
"@rails/webpacker": "5.4.4",
|
"@rails/webpacker": "5.4.4"
|
||||||
"webpack": "^4.46.0",
|
|
||||||
"webpack-cli": "^3.3.12"
|
|
||||||
},
|
},
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
"webpack-dev-server": "^3"
|
"@babel/core": "^7.23.9",
|
||||||
|
"@babel/plugin-proposal-optional-chaining": "^7.21.0",
|
||||||
|
"@babel/preset-env": "^7.23.9",
|
||||||
|
"webpack": "^5.90.0",
|
||||||
|
"webpack-cli": "^5.1.4",
|
||||||
|
"webpack-dev-server": "^4.15.1"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue