backedn with graphs and applications
This commit is contained in:
parent
1d652c1481
commit
05a7c8ee06
|
@ -1,5 +1,118 @@
|
||||||
class Admin::RecruitmentsController < OrbitAdminController
|
class Admin::RecruitmentsController < OrbitAdminController
|
||||||
|
|
||||||
def index
|
def index
|
||||||
|
@job_postings = RecruitmentJob.jobs.count
|
||||||
|
@internship_postings = RecruitmentJob.internships.count
|
||||||
|
@exchange_postings = RecruitmentJob.exchanges.count
|
||||||
|
@total_employees = EmployeeProfile.count
|
||||||
|
@total_employers = EmployerProfile.count
|
||||||
|
@total_position_filled = RecruitmentJob.filled.count
|
||||||
|
end
|
||||||
|
|
||||||
|
def load_chart
|
||||||
|
month = params[:month].present? ? params[:month] : Time.now.month
|
||||||
|
year = params[:year].present? ? params[:year] : Time.now.year
|
||||||
|
case params[:type]
|
||||||
|
when "posting"
|
||||||
|
@startdt = DateTime.parse("#{year}/#{month}")
|
||||||
|
enddt = DateTime.parse("#{year}/#{month.to_i + 1}")
|
||||||
|
@data = {}
|
||||||
|
@data[t("recruitment.post_t.type1")] = RecruitmentJob.jobs.where(:created_at.gte => @startdt, :created_at.lt => enddt).count
|
||||||
|
@data[t("recruitment.post_t.type2")] = RecruitmentJob.internships.where(:created_at.gte => @startdt, :created_at.lt => enddt).count
|
||||||
|
@data[t("recruitment.post_t.type3")] = RecruitmentJob.exchanges.where(:created_at.gte => @startdt, :created_at.lt => enddt).count
|
||||||
|
when "registration"
|
||||||
|
@startdt = DateTime.parse("#{year}/#{month}")
|
||||||
|
enddt = DateTime.parse("#{year}/#{month.to_i + 1}")
|
||||||
|
@data = {}
|
||||||
|
@data[t("recruitment.user_type.type1")] = RecruitProfile.employees.where(:created_at.gte => @startdt, :created_at.lt => enddt).count
|
||||||
|
@data[t("recruitment.user_type.type2")] = RecruitProfile.employers.where(:created_at.gte => @startdt, :created_at.lt => enddt).count
|
||||||
|
when "filled"
|
||||||
|
@startdt = DateTime.parse("#{year}/#{month}")
|
||||||
|
enddt = DateTime.parse("#{year}/#{month.to_i + 1}")
|
||||||
|
@data = {}
|
||||||
|
@data[t("recruitment.post_t.type1")] = RecruitmentJob.jobs.filled.where(:created_at.gte => @startdt, :created_at.lt => enddt).count
|
||||||
|
@data[t("recruitment.post_t.type2")] = RecruitmentJob.internships.filled.where(:created_at.gte => @startdt, :created_at.lt => enddt).count
|
||||||
|
@data[t("recruitment.post_t.type3")] = RecruitmentJob.exchanges.filled.where(:created_at.gte => @startdt, :created_at.lt => enddt).count
|
||||||
|
end
|
||||||
|
render :layout => false
|
||||||
|
end
|
||||||
|
|
||||||
|
def member_management
|
||||||
|
@filter_fields = {:user_type => [{:title => t("recruitment.user_type.type1"), :id => "1"},{:title => t("recruitment.user_type.type2"), :id => "2"}]}
|
||||||
|
@table_fields = ["recruitment.name", "recruitment.user_type_title", "recruitment.actions"]
|
||||||
|
if params[:filters].present? && params[:filters]["user_type"].present?
|
||||||
|
numbers = params[:filters]["user_type"].collect{|ut| ut.to_i}
|
||||||
|
@users = RecruitProfile.where(:user_type.in => numbers).order_by(sort)
|
||||||
|
else
|
||||||
|
@users = RecruitProfile.all.order_by(sort)
|
||||||
|
end
|
||||||
|
@users = search_data(@users,[:pseudo_member_id, :email, :first_name, :last_name]).page(params[:page]).per(10)
|
||||||
|
if request.xhr?
|
||||||
|
render :partial => "member_index"
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
def postings
|
||||||
|
@filter_fields = {:application_type => [{:title => "recruitment.post_t.type1", :id => "type1"},{:title => "recruitment.post_t.type2", :id => "type2"},{:title => "recruitment.post_t.type3", :id => "type3"}]}
|
||||||
|
@table_fields = ["recruitment.job_title", "recruitment.company_name", "recruitment.position_filled", "recruitment.number_of_applicants", "recruitment.post_type", "recruitment.actions"]
|
||||||
|
if params[:filters].present? && params[:filters]["application_type"].present?
|
||||||
|
@jobs = RecruitmentJob.where(:post_type.in => params[:filters]["application_type"])
|
||||||
|
else
|
||||||
|
@jobs = RecruitmentJob.all
|
||||||
|
end
|
||||||
|
@jobs = search_data(@jobs,[:job_title]).page(params[:page]).per(10)
|
||||||
|
if request.xhr?
|
||||||
|
render :partial => "posting_index"
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
def show_member
|
||||||
|
@user = RecruitProfile.find(params[:id])
|
||||||
|
@profile = @user.profile
|
||||||
|
end
|
||||||
|
|
||||||
|
def applications
|
||||||
|
@job = RecruitmentJob.find(params[:id])
|
||||||
|
@applications = EmployeeJobApplication.where(:job => @job.id.to_s).not_archived
|
||||||
|
@table_fields = ["recruitment.name", "recruitment.applied_date"]
|
||||||
|
end
|
||||||
|
|
||||||
|
def member_applications
|
||||||
|
@user = RecruitProfile.find(params[:id])
|
||||||
|
profile = @user.profile
|
||||||
|
@applications = profile.employee_job_applications.not_archived
|
||||||
|
@table_fields = ["recruitment.job_title", "recruitment.company_name", "recruitment.applied_date", "recruitment.post_type"]
|
||||||
|
end
|
||||||
|
|
||||||
|
def company_postings
|
||||||
|
@user = RecruitProfile.find(params[:id])
|
||||||
|
profile = @user.profile
|
||||||
|
@jobs = profile.recruitment_jobs
|
||||||
|
@filter_fields = {:application_type => [{:title => "recruitment.post_t.type1", :id => "type1"},{:title => "recruitment.post_t.type2", :id => "type2"},{:title => "recruitment.post_t.type3", :id => "type3"}]}
|
||||||
|
@table_fields = ["recruitment.job_title", "recruitment.company_name", "recruitment.position_filled", "recruitment.number_of_applicants", "recruitment.post_type", "recruitment.actions"]
|
||||||
|
if params[:filters].present? && params[:filters]["application_type"].present?
|
||||||
|
@jobs = @jobs.where(:post_type.in => params[:filters]["application_type"])
|
||||||
|
end
|
||||||
|
@jobs = search_data(@jobs,[:job_title]).page(params[:page]).per(10)
|
||||||
|
if request.xhr?
|
||||||
|
render :partial => "posting_index"
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
def delete_user
|
||||||
|
user = RecruitProfile.find(params[:id])
|
||||||
|
if params[:status].present?
|
||||||
|
if params[:status] == "disable"
|
||||||
|
user.disable_user
|
||||||
|
elsif params[:status] == "enable"
|
||||||
|
user.enable_user
|
||||||
|
end
|
||||||
|
else
|
||||||
|
pu = PseudoUser.where(:user_name => user.pseudo_member_id).first
|
||||||
|
user.destroy
|
||||||
|
pu.destroy
|
||||||
|
end
|
||||||
|
redirect_to member_management_admin_recruitments_path(:page => params[:page])
|
||||||
end
|
end
|
||||||
|
|
||||||
def industries
|
def industries
|
||||||
|
|
|
@ -692,6 +692,7 @@ class RecruitmentsController < PseudoSessionController
|
||||||
par[:employee_profile_attributes][:skills] = par[:employee_profile_attributes][:skills].split(",")
|
par[:employee_profile_attributes][:skills] = par[:employee_profile_attributes][:skills].split(",")
|
||||||
par[:employee_profile_attributes][:skills].collect!{|sk| sk.strip}
|
par[:employee_profile_attributes][:skills].collect!{|sk| sk.strip}
|
||||||
end
|
end
|
||||||
|
# debugger
|
||||||
par
|
par
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
|
@ -11,6 +11,7 @@ class RecruitProfile
|
||||||
field :first_name, as: :slug_title
|
field :first_name, as: :slug_title
|
||||||
field :last_name
|
field :last_name
|
||||||
field :user_type, type: Integer, default: 1
|
field :user_type, type: Integer, default: 1
|
||||||
|
field :enabled, type: Boolean, :default => true
|
||||||
|
|
||||||
scope :employers, ->{ where(user_type: self::EMPLOYER) }
|
scope :employers, ->{ where(user_type: self::EMPLOYER) }
|
||||||
scope :employees, ->{ where(user_type: self::EMPLOYEE) }
|
scope :employees, ->{ where(user_type: self::EMPLOYEE) }
|
||||||
|
@ -22,6 +23,22 @@ class RecruitProfile
|
||||||
accepts_nested_attributes_for :employer_profile, :allow_destroy => true
|
accepts_nested_attributes_for :employer_profile, :allow_destroy => true
|
||||||
|
|
||||||
|
|
||||||
|
def disable_user
|
||||||
|
pu = PseudoUser.where(:user_name => self.pseudo_member_id).first
|
||||||
|
pu.enabled = false
|
||||||
|
self.enabled = false
|
||||||
|
pu.save
|
||||||
|
self.save
|
||||||
|
end
|
||||||
|
|
||||||
|
def enable_user
|
||||||
|
pu = PseudoUser.where(:user_name => self.pseudo_member_id).first
|
||||||
|
pu.enabled = true
|
||||||
|
self.enabled = true
|
||||||
|
pu.save
|
||||||
|
self.save
|
||||||
|
end
|
||||||
|
|
||||||
def name
|
def name
|
||||||
self.first_name + " " + self.last_name rescue self.email
|
self.first_name + " " + self.last_name rescue self.email
|
||||||
end
|
end
|
||||||
|
|
|
@ -45,8 +45,10 @@ class RecruitmentJob
|
||||||
belongs_to :employer_profile
|
belongs_to :employer_profile
|
||||||
|
|
||||||
scope :not_filled, ->{where(:filled => false)}
|
scope :not_filled, ->{where(:filled => false)}
|
||||||
|
scope :filled, ->{where(:filled => true)}
|
||||||
scope :jobs, ->{where(:post_type => "type1")}
|
scope :jobs, ->{where(:post_type => "type1")}
|
||||||
scope :internships, ->{where(:post_type => "type2")}
|
scope :internships, ->{where(:post_type => "type2")}
|
||||||
|
scope :exchanges, ->{where(:post_type => "type3")}
|
||||||
|
|
||||||
def get_category
|
def get_category
|
||||||
RecruitmentCategory.find(self.category).job_category rescue ""
|
RecruitmentCategory.find(self.category).job_category rescue ""
|
||||||
|
@ -67,4 +69,15 @@ class RecruitmentJob
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def get_job_page
|
||||||
|
case self.post_type
|
||||||
|
when "type1"
|
||||||
|
"jobs"
|
||||||
|
when "type2"
|
||||||
|
"internships"
|
||||||
|
when "type3"
|
||||||
|
"exchanges"
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
end
|
end
|
|
@ -0,0 +1,46 @@
|
||||||
|
<script>
|
||||||
|
if(document.querySelectorAll("#orbit-bar").length==0) location.reload();
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<table class="table main-list">
|
||||||
|
<thead>
|
||||||
|
<tr class="sort-header">
|
||||||
|
<% @table_fields.each do |f| %>
|
||||||
|
<%= thead(f) %>
|
||||||
|
<% end %>
|
||||||
|
</tr>
|
||||||
|
</thead>
|
||||||
|
<tbody>
|
||||||
|
<% @users.each do |user| %>
|
||||||
|
<tr>
|
||||||
|
<td>
|
||||||
|
<% if user.is_employee? %>
|
||||||
|
<a href="/<%= I18n.locale.to_s + "/candidates/" + user.to_param %>" target="_blank" ><%= user.name %></a>
|
||||||
|
<% elsif user.is_employer? %>
|
||||||
|
<a href="<%= show_member_admin_recruitment_path(user.id) %>" ><%= user.profile.company_name %></a>
|
||||||
|
<% end %>
|
||||||
|
</td>
|
||||||
|
<td><%= t("recruitment.user_type.type#{user.user_type.to_s}") %></td>
|
||||||
|
<td>
|
||||||
|
<% if user.enabled %>
|
||||||
|
<a href="<%= delete_user_admin_recruitment_path(user.id, :status => "disable", :page => params[:page]) %>" data-method="delete" class="btn btn-warning"><%= t("recruitment.disable_user") %></a>
|
||||||
|
<% else %>
|
||||||
|
<a href="<%= delete_user_admin_recruitment_path(user.id, :status => "enable", :page => params[:page]) %>" data-method="delete" class="btn btn-success"><%= t("recruitment.enable_user") %></a>
|
||||||
|
<% end %>
|
||||||
|
<a href="<%= delete_user_admin_recruitment_path(user.id, :page => params[:page]) %>" data-method="delete" data-confirm="Are you sure?" class="btn btn-danger"><%= t(:_delete) %></a>
|
||||||
|
<% if user.is_employee? %>
|
||||||
|
<a href="<%= member_applications_admin_recruitment_path(user.id) %>" class="btn btn-info"><%= t("recruitment.show_applications") %></a>
|
||||||
|
<% elsif user.is_employer? %>
|
||||||
|
<a href="<%= company_postings_admin_recruitment_path(user.id) %>" class="btn btn-info"><%= t("recruitment.show_jobs") %></a>
|
||||||
|
<% end %>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
<% end %>
|
||||||
|
</tbody>
|
||||||
|
</table>
|
||||||
|
|
||||||
|
<%=
|
||||||
|
content_tag :div, class: "bottomnav clearfix" do
|
||||||
|
content_tag :div, paginate(@users), class: "pagination pagination-centered"
|
||||||
|
end
|
||||||
|
%>
|
|
@ -0,0 +1,35 @@
|
||||||
|
<script>
|
||||||
|
if(document.querySelectorAll("#orbit-bar").length==0) location.reload();
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<table class="table main-list">
|
||||||
|
<thead>
|
||||||
|
<tr class="sort-header">
|
||||||
|
<% @table_fields.each do |f| %>
|
||||||
|
<%= thead(f) %>
|
||||||
|
<% end %>
|
||||||
|
</tr>
|
||||||
|
</thead>
|
||||||
|
<tbody>
|
||||||
|
<% @jobs.each do |job| %>
|
||||||
|
<tr>
|
||||||
|
<td><a href="/<%= I18n.locale.to_s %>/<%= job.get_job_page %>/<%= job.to_param %>" target="_blank"><%= job.job_title %></a></td>
|
||||||
|
<td><%= job.employer_profile.company_name %></td>
|
||||||
|
<td><span class="label label-<%= (job.filled ? "success" : "important" ) %>"><%= (job.filled ? "Yes" : "No" ) %></span></td>
|
||||||
|
<% jobcount = job.get_application_count %>
|
||||||
|
<td><%= jobcount %></td>
|
||||||
|
<td><%= job.get_post_type_label.html_safe %></td>
|
||||||
|
<td>
|
||||||
|
<% if jobcount > 0 %>
|
||||||
|
<a href="<%= applications_admin_recruitment_path(job.id) %>" class="btn btn-default"><%= t("recruitment.show_application") %></a>
|
||||||
|
<% end %>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
<% end %>
|
||||||
|
</tbody>
|
||||||
|
</table>
|
||||||
|
<%=
|
||||||
|
content_tag :div, class: "bottomnav clearfix" do
|
||||||
|
content_tag :div, paginate(@jobs), class: "pagination pagination-centered"
|
||||||
|
end
|
||||||
|
%>
|
|
@ -0,0 +1,19 @@
|
||||||
|
<h3>Applications for <%= @job.job_title %> ~ <i><%= @job.employer_profile.company_name %></i></h3>
|
||||||
|
<table class="table main-list">
|
||||||
|
<thead>
|
||||||
|
<tr class="sort-header">
|
||||||
|
<% @table_fields.each do |f| %>
|
||||||
|
<%= thead(f) %>
|
||||||
|
<% end %>
|
||||||
|
</tr>
|
||||||
|
</thead>
|
||||||
|
<tbody>
|
||||||
|
<% @applications.each do |app| %>
|
||||||
|
<tr>
|
||||||
|
<td><a href="/<%= I18n.locale.to_s %>/candidates/<%= app.employee_profile.recruit_profile.to_param %>" target="_blank"><%= app.employee_profile.recruit_profile.name %></a></td>
|
||||||
|
<td><%= app.created_at.strftime("%Y/%m/%d") %></td>
|
||||||
|
</tr>
|
||||||
|
<% end %>
|
||||||
|
</tbody>
|
||||||
|
</table>
|
||||||
|
<a href="#" onclick="window.history.back(); return false;" class="btn btn-warning"><%= t(:back) %></a>
|
|
@ -0,0 +1,6 @@
|
||||||
|
<%= csrf_meta_tag %>
|
||||||
|
<%= render_filter @filter_fields, "index_table" %>
|
||||||
|
<span id="index_table">
|
||||||
|
<%= render 'posting_index'%>
|
||||||
|
</span>
|
||||||
|
<a href="#" onclick="window.history.back(); return false;" class="btn btn-warning"><%= t(:back) %></a>
|
|
@ -1 +1,171 @@
|
||||||
backend index
|
<%= javascript_include_tag "//www.google.com/jsapi", "chartkick"%>
|
||||||
|
<style type="text/css">
|
||||||
|
.all-stats{
|
||||||
|
list-style: none;
|
||||||
|
display: inline-block;
|
||||||
|
text-align: center;
|
||||||
|
font-size: 16px;
|
||||||
|
}
|
||||||
|
.all-stats li{
|
||||||
|
display: inline-block;
|
||||||
|
width: 150px;
|
||||||
|
height: 100px;
|
||||||
|
background-color: #ff8700;
|
||||||
|
padding-top: 40px;
|
||||||
|
color: #fff;
|
||||||
|
border-radius: 5px;
|
||||||
|
margin-right: 20px;
|
||||||
|
border: 2px solid yellow;
|
||||||
|
}
|
||||||
|
.all-stats li:hover{
|
||||||
|
background-color: #ff8700cc;
|
||||||
|
}
|
||||||
|
.all-stats li .heading{
|
||||||
|
margin-bottom: 5px;
|
||||||
|
height: 20px;
|
||||||
|
}
|
||||||
|
.all-stats li .count{
|
||||||
|
margin-top: 30px;
|
||||||
|
font-size: 20px;
|
||||||
|
}
|
||||||
|
.loading-area{
|
||||||
|
margin-top: 25px;
|
||||||
|
}
|
||||||
|
.start-chart{
|
||||||
|
margin-bottom: 30px;
|
||||||
|
}
|
||||||
|
</style>
|
||||||
|
<div id="all-stats">
|
||||||
|
<h3>Summary</h3>
|
||||||
|
<ul class="all-stats">
|
||||||
|
<li>
|
||||||
|
<div class="heading">Total Job Postings</div>
|
||||||
|
<div class="count"><%= @job_postings %></div>
|
||||||
|
</li>
|
||||||
|
<li>
|
||||||
|
<div class="heading">Total Internship Postings</div>
|
||||||
|
<div class="count"><%= @internship_postings %></div>
|
||||||
|
</li>
|
||||||
|
<li>
|
||||||
|
<div class="heading">Total Exchange Postings</div>
|
||||||
|
<div class="count"><%= @exchange_postings %></div>
|
||||||
|
</li>
|
||||||
|
<li>
|
||||||
|
<div class="heading">Total Employees</div>
|
||||||
|
<div class="count"><%= @total_employees %></div>
|
||||||
|
</li>
|
||||||
|
<li>
|
||||||
|
<div class="heading">Total Employers</div>
|
||||||
|
<div class="count"><%= @total_employers %></div>
|
||||||
|
</li>
|
||||||
|
<li>
|
||||||
|
<div class="heading">Total Positions Filled</div>
|
||||||
|
<div class="count"><%= @total_position_filled %></div>
|
||||||
|
</li>
|
||||||
|
</ul>
|
||||||
|
</div>
|
||||||
|
<hr>
|
||||||
|
<div id="posting-chart" class="stat-chart">
|
||||||
|
<div class="form pull-right">
|
||||||
|
<form class="form-inline" id="posting-chart-form">
|
||||||
|
<select name="year" class="input-small">
|
||||||
|
<option><%= t("recruitment.select_year") %></option>
|
||||||
|
<% (2017..Time.now.year).each do |year| %>
|
||||||
|
<option value="<%= year %>"><%= year %></option>
|
||||||
|
<% end %>
|
||||||
|
</select>
|
||||||
|
<select name="month" class="input-small">
|
||||||
|
<option><%= t("recruitment.select_month") %></option>
|
||||||
|
<% (01..12).each do |month| %>
|
||||||
|
<option value="<%= month %>"><%= month %></option>
|
||||||
|
<% end %>
|
||||||
|
</select>
|
||||||
|
<button type="submit" class="btn">Load</button>
|
||||||
|
</form>
|
||||||
|
</div>
|
||||||
|
<div class="loading-area">
|
||||||
|
<div style="text-align: center;"><img src="/assets/preloader.gif" width="75px"></div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div id="registration-chart" class="stat-chart">
|
||||||
|
<div class="form pull-right">
|
||||||
|
<form class="form-inline" id="registration-chart-form">
|
||||||
|
<select name="year" class="input-small">
|
||||||
|
<option><%= t("recruitment.select_year") %></option>
|
||||||
|
<% (2017..Time.now.year).each do |year| %>
|
||||||
|
<option value="<%= year %>"><%= year %></option>
|
||||||
|
<% end %>
|
||||||
|
</select>
|
||||||
|
<select name="month" class="input-small">
|
||||||
|
<option><%= t("recruitment.select_month") %></option>
|
||||||
|
<% (1..12).each do |month| %>
|
||||||
|
<option value="<%= month %>"><%= month %></option>
|
||||||
|
<% end %>
|
||||||
|
</select>
|
||||||
|
<button type="submit" class="btn">Load</button>
|
||||||
|
</form>
|
||||||
|
</div>
|
||||||
|
<div class="loading-area">
|
||||||
|
<div style="text-align: center;"><img src="/assets/preloader.gif" width="75px"></div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div id="filled-chart" class="stat-chart">
|
||||||
|
<div class="form pull-right">
|
||||||
|
<form class="form-inline" id="filled-chart-form">
|
||||||
|
<select name="year" class="input-small">
|
||||||
|
<option><%= t("recruitment.select_year") %></option>
|
||||||
|
<% (2017..Time.now.year).each do |year| %>
|
||||||
|
<option value="<%= year %>"><%= year %></option>
|
||||||
|
<% end %>
|
||||||
|
</select>
|
||||||
|
<select name="month" class="input-small">
|
||||||
|
<option><%= t("recruitment.select_month") %></option>
|
||||||
|
<% (1..12).each do |month| %>
|
||||||
|
<option value="<%= month %>"><%= month %></option>
|
||||||
|
<% end %>
|
||||||
|
</select>
|
||||||
|
<button type="submit" class="btn">Load</button>
|
||||||
|
</form>
|
||||||
|
</div>
|
||||||
|
<div class="loading-area">
|
||||||
|
<div style="text-align: center;"><img src="/assets/preloader.gif" width="75px"></div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
|
||||||
|
<script type="text/javascript">
|
||||||
|
$(document).ready(function(){
|
||||||
|
loadChart("posting");
|
||||||
|
loadChart("registration");
|
||||||
|
loadChart("filled");
|
||||||
|
})
|
||||||
|
var loadChart = function(type, month, year){
|
||||||
|
$.ajax({
|
||||||
|
url : "<%= load_chart_admin_recruitments_path %>",
|
||||||
|
data : {"type" : type, "month" : month, "year" : year},
|
||||||
|
dataType : "html",
|
||||||
|
type : "get"
|
||||||
|
}).done(function(html){
|
||||||
|
console.log($("#" + type + "-chart .loading-area"));
|
||||||
|
$("#" + type + "-chart .loading-area").html(html);
|
||||||
|
})
|
||||||
|
}
|
||||||
|
$("#posting-chart-form").on("submit",function(){
|
||||||
|
var month = $(this).find("select[name=month]").val(),
|
||||||
|
year = $(this).find("select[name=year]").val();
|
||||||
|
loadChart("posting", month, year);
|
||||||
|
return false;
|
||||||
|
})
|
||||||
|
$("#registration-chart-form").on("submit",function(){
|
||||||
|
var month = $(this).find("select[name=month]").val(),
|
||||||
|
year = $(this).find("select[name=year]").val();
|
||||||
|
loadChart("registration", month, year);
|
||||||
|
return false;
|
||||||
|
})
|
||||||
|
$("#filled-chart-form").on("submit",function(){
|
||||||
|
var month = $(this).find("select[name=month]").val(),
|
||||||
|
year = $(this).find("select[name=year]").val();
|
||||||
|
loadChart("filled", month, year);
|
||||||
|
return false;
|
||||||
|
})
|
||||||
|
</script>
|
|
@ -0,0 +1,19 @@
|
||||||
|
<% if params[:type] == "posting" %>
|
||||||
|
<h4>
|
||||||
|
Posting statistics for the month
|
||||||
|
<b><i><%= @startdt.strftime("%B %Y") %></i></b>
|
||||||
|
</h4>
|
||||||
|
<%= column_chart @data, ytitle: t("recruitment.number_of_posts"), label: t("recruitment.number_of_posts"), id: "posting_chart" %>
|
||||||
|
<% elsif params[:type] == "registration" %>
|
||||||
|
<h4>
|
||||||
|
Registration statistics for the month
|
||||||
|
<b><i><%= @startdt.strftime("%B %Y") %></i></b>
|
||||||
|
</h4>
|
||||||
|
<%= column_chart @data, ytitle: t("recruitment.number_of_registered_users"), label: t("recruitment.number_of_registered_users"), id: "registration_chart", colors: ["#f2096e"] %>
|
||||||
|
<% elsif params[:type] == "filled" %>
|
||||||
|
<h4>
|
||||||
|
Positions filled statistics for the month
|
||||||
|
<b><i><%= @startdt.strftime("%B %Y") %></i></b>
|
||||||
|
</h4>
|
||||||
|
<%= column_chart @data, ytitle: t("recruitment.number_of_positions_filled"), label: t("recruitment.number_of_positions_filled"), id: "filled_chart", colors: ["#aff109"] %>
|
||||||
|
<% end %>
|
|
@ -0,0 +1,33 @@
|
||||||
|
<h3>Applications for <%= @user.name %></h3>
|
||||||
|
<table class="table main-list">
|
||||||
|
<thead>
|
||||||
|
<tr class="sort-header">
|
||||||
|
<% @table_fields.each do |f| %>
|
||||||
|
<%= thead(f) %>
|
||||||
|
<% end %>
|
||||||
|
</tr>
|
||||||
|
</thead>
|
||||||
|
<tbody>
|
||||||
|
<% @applications.each do |app| %>
|
||||||
|
<tr>
|
||||||
|
<%
|
||||||
|
job = app.get_job
|
||||||
|
company_profile = job.employer_profile
|
||||||
|
%>
|
||||||
|
<td>
|
||||||
|
<a href="/<%= I18n.locale.to_s + "/" + job.get_job_page + "/" + job.to_param %>" target="_blank"><%= job.job_title %></a>
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
<a href="<%= show_member_admin_recruitment_path(company_profile.recruit_profile.id) %>"><%= company_profile.company_name %></a>
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
<%= app.created_at.strftime("%y/%m/%d") %>
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
<%= job.get_post_type_label.html_safe %>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
<% end %>
|
||||||
|
</tbody>
|
||||||
|
</table>
|
||||||
|
<a href="#" onclick="window.history.back();return false;" class="btn btn-warning">Back</a>
|
|
@ -0,0 +1,5 @@
|
||||||
|
<%= csrf_meta_tag %>
|
||||||
|
<%= render_filter @filter_fields, "index_table" %>
|
||||||
|
<span id="index_table">
|
||||||
|
<%= render 'member_index'%>
|
||||||
|
</span>
|
|
@ -0,0 +1,5 @@
|
||||||
|
<%= csrf_meta_tag %>
|
||||||
|
<%= render_filter @filter_fields, "index_table" %>
|
||||||
|
<span id="index_table">
|
||||||
|
<%= render 'posting_index'%>
|
||||||
|
</span>
|
|
@ -0,0 +1,53 @@
|
||||||
|
<table class="table main-list">
|
||||||
|
<tbody>
|
||||||
|
<tr>
|
||||||
|
<th><%= t("recruitment.name") %></th>
|
||||||
|
<td><%= @user.name %></td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<th><%= t("recruitment.company_name") %></th>
|
||||||
|
<td><%= @profile.company_name %></td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<th><%= t("recruitment.office_address") %></th>
|
||||||
|
<td><%= @profile.office_address %></td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<th><%= t("recruitment.company_profile") %></th>
|
||||||
|
<td><%= @profile.company_profile %></td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<th><%= t("recruitment.website") %></th>
|
||||||
|
<td><a href="<%= @profile.website %>" target="_blank"><%= @profile.website %></a></td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<th><%= t("recruitment.country") %></th>
|
||||||
|
<td><%= MiscList::COUNTRIES[@profile.country] %></td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<th><%= t("recruitment.state") %></th>
|
||||||
|
<td><%= @profile.state %></td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<th><%= t("recruitment.zipcode") %></th>
|
||||||
|
<td><%= @profile.zipcode %></td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<th><%= t("recruitment.country_code") %></th>
|
||||||
|
<td><%= @profile.country_code %></td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<th><%= t("recruitment.phone_number") %></th>
|
||||||
|
<td><%= @profile.phone_number %></td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<th><%= t("recruitment.mobile_number") %></th>
|
||||||
|
<td><%= @profile.mobile_number %></td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<th><%= t("recruitment.industry") %></th>
|
||||||
|
<td><%= @profile.get_industry %></td>
|
||||||
|
</tr>
|
||||||
|
</tbody>
|
||||||
|
</table>
|
||||||
|
<a href="#" onclick="window.history.back();return false;" class="btn btn-warning">Back</a>
|
|
@ -14,8 +14,14 @@
|
||||||
<% @applications.each do |app| %>
|
<% @applications.each do |app| %>
|
||||||
<% job = app.get_job %>
|
<% job = app.get_job %>
|
||||||
<tr>
|
<tr>
|
||||||
<td><%= job.get_post_type_label.html_safe %></td>
|
|
||||||
<td>
|
<td>
|
||||||
|
<% if !job.nil? %>
|
||||||
|
<%= job.get_post_type_label.html_safe %></td>
|
||||||
|
<% else %>
|
||||||
|
<%= t("recruitment.not_available") %>
|
||||||
|
<% end %>
|
||||||
|
<td>
|
||||||
|
<% if !job.nil? %>
|
||||||
<% if job.post_type == "type1" %>
|
<% if job.post_type == "type1" %>
|
||||||
<a href="<%= "/#{I18n.locale.to_s}/jobs/" + job.to_param %>" target="_blank"><%= job.job_title %></a>
|
<a href="<%= "/#{I18n.locale.to_s}/jobs/" + job.to_param %>" target="_blank"><%= job.job_title %></a>
|
||||||
<% elsif job.post_type == "type2" %>
|
<% elsif job.post_type == "type2" %>
|
||||||
|
@ -23,8 +29,11 @@
|
||||||
<% elsif job.post_type == "type3" %>
|
<% elsif job.post_type == "type3" %>
|
||||||
<a href="<%= "/#{I18n.locale.to_s}/exchanges/" + job.to_param %>" target="_blank"><%= job.job_title %></a>
|
<a href="<%= "/#{I18n.locale.to_s}/exchanges/" + job.to_param %>" target="_blank"><%= job.job_title %></a>
|
||||||
<% end %>
|
<% end %>
|
||||||
|
<% else %>
|
||||||
|
<%= t("recruitment.not_available") %>
|
||||||
|
<% end %>
|
||||||
</td>
|
</td>
|
||||||
<td><%= job.employer_profile.company_name %></td>
|
<td><%= job.employer_profile.company_name rescue t("recruitment.not_available") %></td>
|
||||||
<td><%= app.created_at.strftime("%d %B %Y") %></td>
|
<td><%= app.created_at.strftime("%d %B %Y") %></td>
|
||||||
</tr>
|
</tr>
|
||||||
<% end %>
|
<% end %>
|
||||||
|
|
|
@ -196,7 +196,7 @@
|
||||||
|
|
||||||
<!-- Academic Type -->
|
<!-- Academic Type -->
|
||||||
<div class="form-group">
|
<div class="form-group">
|
||||||
<%= f.label :academic_type, t("recruitment.academic_type"), :class => "col-sm-2 control-label" %>
|
<%= f.label :academic_type, t("recruitment.academic_type_title"), :class => "col-sm-2 control-label" %>
|
||||||
<div class="col-sm-5">
|
<div class="col-sm-5">
|
||||||
<%= f.select :academic_type, @academic_types, {:include_blank => "Select Degree"},{:class => "form-control"} %>
|
<%= f.select :academic_type, @academic_types, {:include_blank => "Select Degree"},{:class => "form-control"} %>
|
||||||
</div>
|
</div>
|
||||||
|
|
|
@ -237,7 +237,7 @@
|
||||||
|
|
||||||
<!-- Academic Type -->
|
<!-- Academic Type -->
|
||||||
<div class="form-group">
|
<div class="form-group">
|
||||||
<%= f.label :academic_type, t("recruitment.academic_type"), :class => "col-sm-2 control-label" %>
|
<%= f.label :academic_type, t("recruitment.academic_type_title"), :class => "col-sm-2 control-label" %>
|
||||||
<div class="col-sm-5">
|
<div class="col-sm-5">
|
||||||
<%= f.select :academic_type, @academic_types, {:include_blank => "Select Degree"},{:class => "form-control"} %>
|
<%= f.select :academic_type, @academic_types, {:include_blank => "Select Degree"},{:class => "form-control"} %>
|
||||||
</div>
|
</div>
|
||||||
|
|
|
@ -198,7 +198,7 @@
|
||||||
|
|
||||||
<!-- Academic Type -->
|
<!-- Academic Type -->
|
||||||
<div class="form-group">
|
<div class="form-group">
|
||||||
<%= f.label :academic_type, t("recruitment.academic_type"), :class => "col-sm-2 control-label" %>
|
<%= f.label :academic_type, t("recruitment.academic_type_title"), :class => "col-sm-2 control-label" %>
|
||||||
<div class="col-sm-5">
|
<div class="col-sm-5">
|
||||||
<%= f.select :academic_type, @academic_types, {:include_blank => "Select Degree"},{:class => "form-control"} %>
|
<%= f.select :academic_type, @academic_types, {:include_blank => "Select Degree"},{:class => "form-control"} %>
|
||||||
</div>
|
</div>
|
||||||
|
|
|
@ -180,9 +180,9 @@
|
||||||
</div>
|
</div>
|
||||||
<script type="text/javascript">
|
<script type="text/javascript">
|
||||||
$(function() {
|
$(function() {
|
||||||
$("#portfolioForm").submit(function() {
|
// $("#portfolioForm").submit(function() {
|
||||||
$(this).find(":input").filter(function(){ return !this.value; }).attr("disabled", "disabled");
|
// $(this).find(":input").filter(function(){ return !this.value; }).attr("disabled", "disabled");
|
||||||
return true; // ensure form still submits
|
// return true; // ensure form still submits
|
||||||
});
|
// });
|
||||||
});
|
});
|
||||||
</script>
|
</script>
|
|
@ -2,6 +2,22 @@ en:
|
||||||
module_name:
|
module_name:
|
||||||
recruitment: Recruitment
|
recruitment: Recruitment
|
||||||
recruitment:
|
recruitment:
|
||||||
|
show_jobs: Show Jobs
|
||||||
|
number_of_positions_filled: Number of position filled
|
||||||
|
number_of_registered_users: Number of registered users
|
||||||
|
select_year: Year
|
||||||
|
select_month: Month
|
||||||
|
postings: Postings
|
||||||
|
number_of_posts: Number of Posts
|
||||||
|
number_of_applicants: Number of Applications
|
||||||
|
applications: Applications
|
||||||
|
disable_user: Disable User
|
||||||
|
enable_user: Enable User
|
||||||
|
user_type_title: User Type
|
||||||
|
user_type:
|
||||||
|
type1: Employee
|
||||||
|
type2: Employer
|
||||||
|
stats: Statistics
|
||||||
file: File
|
file: File
|
||||||
download_file: Download File
|
download_file: Download File
|
||||||
add_exchange: Add Exchange
|
add_exchange: Add Exchange
|
||||||
|
@ -53,7 +69,7 @@ en:
|
||||||
request_letter: Request Letter
|
request_letter: Request Letter
|
||||||
request: Request
|
request: Request
|
||||||
recommendation: Recommendations
|
recommendation: Recommendations
|
||||||
academic_type: Academic Type
|
academic_type_title: Academic Type
|
||||||
salary_range: Salary Range
|
salary_range: Salary Range
|
||||||
min_salary: Min Salary
|
min_salary: Min Salary
|
||||||
max_salary: Max Salary
|
max_salary: Max Salary
|
||||||
|
|
|
@ -2,16 +2,32 @@ zh_tw:
|
||||||
module_name:
|
module_name:
|
||||||
recruitment: 招募
|
recruitment: 招募
|
||||||
recruitment:
|
recruitment:
|
||||||
file: File
|
show_jobs: Show Jobs
|
||||||
download_file: Download File
|
number_of_positions_filled: Number of position filled
|
||||||
add_exchange: Add Exchange
|
number_of_registered_users: Number of registered users
|
||||||
edit_internship: Edit Internship
|
select_year: Year
|
||||||
min_credit_score: Min Credit Score
|
select_month: Month
|
||||||
exchange_title: Exchange Title
|
postings: Postings
|
||||||
exchange_description: Exchange Description
|
number_of_posts: Number of Posts
|
||||||
exchange_conditions: Exchange Information
|
number_of_applicants: Number of Applications
|
||||||
exchange_duration: Exchange Duration
|
applications: 應用
|
||||||
exchange_start_date: Exchange Start Date
|
disable_user: 停止用戶
|
||||||
|
enable_user: 啟動用戶
|
||||||
|
user_type_title: 使用者類型
|
||||||
|
user_type:
|
||||||
|
type1: 僱員
|
||||||
|
type2: 雇主
|
||||||
|
stats: 數據
|
||||||
|
file: 檔案
|
||||||
|
download_file: 下載資料
|
||||||
|
add_exchange: 新增交換學生
|
||||||
|
edit_internship: 編輯 實習生
|
||||||
|
min_credit_score: 最低需求信用點
|
||||||
|
exchange_title: 交換學生名義
|
||||||
|
exchange_description: 交換描述
|
||||||
|
exchange_conditions: 交換資訊
|
||||||
|
exchange_duration: 交換期間
|
||||||
|
exchange_start_date: 交換日期
|
||||||
post_type: 公告類型
|
post_type: 公告類型
|
||||||
post_t:
|
post_t:
|
||||||
type1: 正職
|
type1: 正職
|
||||||
|
@ -33,7 +49,7 @@ zh_tw:
|
||||||
internship_conditions: 實習工作條件
|
internship_conditions: 實習工作條件
|
||||||
stipend-title: 實習薪資
|
stipend-title: 實習薪資
|
||||||
stipend_range: 實習薪資範圍
|
stipend_range: 實習薪資範圍
|
||||||
in: in
|
in: 專精於
|
||||||
min_qualification: 最低需求
|
min_qualification: 最低需求
|
||||||
referral_already_recommended: 報歉,您已經撰寫此使用者的推薦函.
|
referral_already_recommended: 報歉,您已經撰寫此使用者的推薦函.
|
||||||
name: 名字
|
name: 名字
|
||||||
|
@ -53,7 +69,7 @@ zh_tw:
|
||||||
request_letter: 需求信件
|
request_letter: 需求信件
|
||||||
request: 需求
|
request: 需求
|
||||||
recommendation: 建議
|
recommendation: 建議
|
||||||
academic_type: 學術類型
|
academic_type_title: 學術類型
|
||||||
salary_range: 工資範圍
|
salary_range: 工資範圍
|
||||||
min_salary: 最低薪資
|
min_salary: 最低薪資
|
||||||
max_salary: 最高薪資
|
max_salary: 最高薪資
|
||||||
|
@ -87,13 +103,13 @@ zh_tw:
|
||||||
type1: 待業中
|
type1: 待業中
|
||||||
type2: 就業中
|
type2: 就業中
|
||||||
website: 網址
|
website: 網址
|
||||||
avatar: Avatar
|
avatar: 上傳圖片
|
||||||
address: 地址
|
address: 地址
|
||||||
next: 下一個
|
next: 下一個
|
||||||
job_posted: 公開職缺
|
job_posted: 公開職缺
|
||||||
position_filled: 值缺已滿
|
position_filled: 值缺已滿
|
||||||
applications: 申請
|
applications: 申請
|
||||||
actions: Actions
|
actions: 動作
|
||||||
no_jobs_posted: 未有相關工作需求
|
no_jobs_posted: 未有相關工作需求
|
||||||
show_application: 展示 應用
|
show_application: 展示 應用
|
||||||
edit: 編輯
|
edit: 編輯
|
||||||
|
|
|
@ -9,18 +9,24 @@ Rails.application.routes.draw do
|
||||||
get "categories"
|
get "categories"
|
||||||
get "addindustry"
|
get "addindustry"
|
||||||
post "createindustry"
|
post "createindustry"
|
||||||
|
get "member_management"
|
||||||
get "addcategory"
|
get "addcategory"
|
||||||
post "createcategory"
|
post "createcategory"
|
||||||
|
get "postings"
|
||||||
|
get "load_chart"
|
||||||
end
|
end
|
||||||
member do
|
member do
|
||||||
delete "deleteindustry"
|
delete "deleteindustry"
|
||||||
get "editindustry"
|
get "editindustry"
|
||||||
patch "updateindustry"
|
patch "updateindustry"
|
||||||
|
delete "delete_user"
|
||||||
delete "deletecategory"
|
delete "deletecategory"
|
||||||
get "editcategory"
|
get "editcategory"
|
||||||
patch "updatecategory"
|
patch "updatecategory"
|
||||||
|
get "applications"
|
||||||
|
get "show_member"
|
||||||
|
get "member_applications"
|
||||||
|
get "company_postings"
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
|
@ -13,12 +13,24 @@ module Recruitment
|
||||||
active_for_controllers (['admin/recruitments'])
|
active_for_controllers (['admin/recruitments'])
|
||||||
head_link_path "admin_recruitments_path"
|
head_link_path "admin_recruitments_path"
|
||||||
|
|
||||||
context_link 'recruitment.members',
|
context_link 'recruitment.stats',
|
||||||
:link_path=>"admin_recruitments_path" ,
|
:link_path=>"admin_recruitments_path" ,
|
||||||
:priority=>1,
|
:priority=>1,
|
||||||
:active_for_action=>{'admin/recruitments'=>"index"},
|
:active_for_action=>{'admin/recruitments'=>"index"},
|
||||||
:available_for => 'managers'
|
:available_for => 'managers'
|
||||||
|
|
||||||
|
context_link 'recruitment.members',
|
||||||
|
:link_path=>"member_management_admin_recruitments_path" ,
|
||||||
|
:priority=>1,
|
||||||
|
:active_for_action=>{'admin/recruitments'=>"member_management"},
|
||||||
|
:available_for => 'managers'
|
||||||
|
|
||||||
|
context_link 'recruitment.postings',
|
||||||
|
:link_path=>"postings_admin_recruitments_path" ,
|
||||||
|
:priority=>1,
|
||||||
|
:active_for_action=>{'admin/recruitments'=>"postings"},
|
||||||
|
:available_for => 'managers'
|
||||||
|
|
||||||
context_link 'recruitment.industries',
|
context_link 'recruitment.industries',
|
||||||
:link_path=>"industries_admin_recruitments_path" ,
|
:link_path=>"industries_admin_recruitments_path" ,
|
||||||
:priority=>1,
|
:priority=>1,
|
||||||
|
|
Loading…
Reference in New Issue