Commit 31dc3481 by Son Do Hong

Merge branch 'feature/count_jobs' into 'master'

Feature/count jobs based on city/industry

See merge request !13
parents 98be312e b565e7d0
class StaticPagesController < ApplicationController
class TopsController < ApplicationController
def index
@vn_cities = City.vn_cities
@vn_cities = City.city_order.take(Settings.top.city.limit)
@industries = Industry.all
@jobs = Job.page(params[:page]).per(Settings.job.per_page)
end
......
......@@ -14,6 +14,17 @@
#
class City < ApplicationRecord
has_many :city_jobs
has_many :jobs, through: :city_jobs
scope :vn_cities, -> {where region: "Việt Nam"}
scope :inter_cities, -> {where region: "#"}
def job_count
@job_count ||= jobs.count
end
def self.city_order
@city_order ||= all.sort_by(&:job_count).reverse
end
end
......@@ -13,4 +13,6 @@
#
class Industry < ApplicationRecord
has_many :industry_jobs
has_many :jobs, through: :industry_jobs
end
......@@ -30,4 +30,10 @@
class Job < ApplicationRecord
belongs_to :company
has_many :city_jobs
has_many :cities, through: :city_jobs
has_many :industry_jobs
has_many :industries, through: :industry_jobs
end
require "csv"
class Import
def initialize
end
def import
cities = []
companies = []
industries = []
jobs = []
city_columns = [:name, :region]
company_columns = [:name, :email, :address, :code]
industry_columns = [:name]
job_columns = [:title, :level, :salary, :description, :short_des,
:requirement, :category, :company_id]
join_jobs = []
CSV.foreach(Rails.root.join("lib", "jobss.csv"), headers: true) do |row|
file_path = Settings.csv.file_path
CSV.foreach(Rails.root.join("lib", file_path), headers: true) do |row|
cities << {name: row["company province"], region: "Việt Nam"}
companies << {name: row["company name"], email: row["contact email"],
address: row["company address"], code: row["company id"]}
industries << {name: row["category"]}
job_csv = JobCsv.new(row)
jobs << job_csv.csv_attributes
join_jobs << [row["company province"], row["category"], job_csv.title, job_csv.company_id]
rescue
error = ActiveSupport::Logger.new("log/errors.log")
error.info "These row have been skipped: #{row}"
next
end
City.import city_columns, cities, on_duplicate_key_ignore: true
puts "Cities imported"
cities_import(city_columns, cities)
industries_import(industry_columns, industries)
companies_import(company_columns, companies)
jobs_import(job_columns, jobs)
join_jobs_import(join_jobs)
end
Company.import company_columns, companies, on_duplicate_key_ignore: true
puts "Companies imported"
def cities_import(col_arr, arr)
return if col_arr.blank?
City.import col_arr, arr, on_duplicate_key_ignore: true
end
def industries_import(col_arr, arr)
return if col_arr.blank?
Industry.import col_arr, arr, on_duplicate_key_ignore: true
end
def companies_import(col_arr, arr)
return if col_arr.blank?
Company.import col_arr, arr, on_duplicate_key_ignore: true
end
def jobs_import(col_arr, arr)
return if col_arr.blank?
Job.import col_arr, arr
end
Industry.import industry_columns, industries, on_duplicate_key_ignore: true
puts "Industries imported"
def join_jobs_import(param)
param.each do |city_name,industry_name, job_title, company_id|
job = Job.find_by(title: job_title, company_id: company_id)
city = City.find_by(name: city_name)
job.city_jobs.create(city_id: city.id)
industry = Industry.find_by(name: industry_name)
job.industry_jobs.create(industry_id: industry.id)
end
end
end
require "csv"
class JobsImport
def import_job
jobs = []
job_columns = [:title, :level, :salary, :description, :short_des,
:requirement, :category, :company_id]
CSV.foreach(Rails.root.join("lib", "jobss.csv"), headers: true) do |row|
jobs << JobCsv.new(row).csv_attributes
end
Job.import job_columns, jobs
puts "Jobs imported"
end
end
<div class="col-md-3">
<div class="col-show">
<%= city.name %>
<%= city.name %> (<%= (city.job_count) %>)
</div>
</div>
<h3>Top cities</h3>
<div class="container">
<div class="row row-cols-4">
<%= render partial: "cities/city", collection: @vn_cities %>
</div>
<%= link_to "All cities", cities_path, class: "btn btn-lg btn-primary" %>
</div>
......@@ -17,13 +17,7 @@
</div>
<div class="top_cities">
<h3>Top cities</h3>
<div class="container">
<div class="row row-cols-4">
<%= render partial: "cities/city", collection: @vn_cities %>
</div>
</div>
<%= render partial: "shared/top_cities" %>
</div>
<div class="top_industries">
......
......@@ -4,8 +4,7 @@ Rails.application.routes.draw do
resources :cities, only: :index
resources :jobs, only: :index
devise_for :users
root "static_pages#index"
get "static_pages/index"
root "tops#index"
namespace :users do
resource :my_page, only: :show
end
......
job:
per_page: 5
csv:
file_path: "jobss.csv"
top:
city:
limit: 9
,nghiann,devops-OptiPlex-3020,02.12.2019 09:27,file:///home/nghiann/.config/libreoffice/4;
\ No newline at end of file
......@@ -2,6 +2,8 @@ namespace :task do
desc "import data"
task import: :environment do
Import.new.import
JobsImport.new.import_job
import = ActiveSupport::Logger.new("log/import.log")
import.info "Cities, industries, companies, jobs imported succesful at #{Time.current}"
end
end
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