Commit 4552c30b by Tô Ngọc Ánh

CSV download

parent 9a91355f
Pipeline #1093 failed with stages
in 0 seconds
......@@ -37,8 +37,14 @@ class AppliedJobsController < ApplicationController
return unless current_user.admin
get_data_search_bar
@date, @applied_jobs = SearchAppliedJob.search(params)
render 'users/applied_jobs'
@date, @applied_jobs = SearchAppliedJobsService.search(params)
respond_to do |format|
format.html { render 'users/applied_jobs' }
format.csv {
send_data ExportCsvService.new(@applied_jobs, AppliedJob::CSV_ATTRIBUTES).perform,
filename: "applied_jobs.csv"
}
end
end
private
......
class AppliedJob < ApplicationRecord
scope :of_email, ->(email) { where(email: email) if email.present? }
EMAIL_REGEXN = /\A[a-zA-Z][\w\.]+@[a-zA-Z]+\.[a-zA-Z]+\z/
CSV_ATTRIBUTES = %w(job_id job_title email full_name curriculum_vitae created_at).freeze
belongs_to :user
belongs_to :job
......
require 'csv'
class ExportCsvService
def initialize(objects, attributes)
@objects = objects
@attributes = attributes
end
def perform
CSV.generate do |csv|
csv << attributes
objects.each do |object|
csv << attributes.map { |att| object.public_send(att) }
end
end
end
private
attr_reader :attributes, :objects
end
module SearchAppliedJob
module SearchAppliedJobsService
def self.search(params)
date = {}
if params[:email].nil?
......@@ -9,7 +9,11 @@ module SearchAppliedJob
date[:from] = Date.new(params[:applied_at]["from(1i)"].to_i, params[:applied_at]["from(2i)"].to_i, params[:applied_at]["from(3i)"].to_i)
date[:to] = Date.new(params[:applied_at]["to(1i)"].to_i, params[:applied_at]["to(2i)"].to_i, params[:applied_at]["to(3i)"].to_i)
job_ids = Job.of_industry(params[:industry]).of_location(params[:location]).pluck(:id)
applied_jobs = AppliedJob.includes(:job).of_email(params[:email]).where(created_at: date[:from]..date[:to], job_id: job_ids).page(params[:page])
applied_jobs = AppliedJob.joins(:job)
.select("applied_jobs.*, jobs.title as job_title")
.of_email(params[:email])
.where(created_at: date[:from]..date[:to], job_id: job_ids)
.page(params[:page])
end
[date, applied_jobs]
end
......
......@@ -2,7 +2,7 @@
<div class="row">
<div class = "col-lg-10">
<div class='card-body'>
<%= link_to applied_job.job.title, job_path(applied_job.job_id), class: 'card-title font-weight-bold text-decoration-none' %>
<%= link_to applied_job.job_title, job_path(applied_job.job_id), class: 'card-title font-weight-bold text-decoration-none' %>
<p><strong>Candidate Name: </strong><%= link_to applied_job.full_name, user_path(applied_job.user_id) %></p>
<p><strong>Candidate's CV: </strong><%= link_to applied_job.curriculum_vitae.identifier, applied_job.curriculum_vitae.url %></p>
<p><strong>Candidate's Email: </strong><%= applied_job.email %></p>
......
......@@ -14,8 +14,8 @@
{ order: [:year, :month, :day], use_month_numbers: true, use_two_digit_numbers: true, selected: @date[:to] },
{ class: 'form-control mx-1' } %>
</div>
<%= submit_tag 'Search', name: nil, class: 'btn btn-outline-success m-2' %>
<%= button_tag 'CSV Download', class: 'btn btn-outline-success m-2' %>
<%= button_tag 'Search', name: nil, type: 'submit', class: 'btn btn-outline-success m-2' %>
<%= button_tag 'CSV Download', value: 'csv', name: 'format', class: 'btn btn-outline-success m-2' %>
<% end %>
</div>
<div class='content'>
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment