You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

166 lines
6.2 KiB

Trestle.resource(:users) do
menu do
item :resumes, icon: "fa fa-file-alt", priority: 1
end
form do |item|
tab :details, label: "Details" do
concat Trestle::Form::Automatic.new(admin).render(self, item)
text_area :objective
end
tab :work_experiences, badge: (item.persisted? ? item.work_experiences.size : 0) do
concat content_tag(:p, "User: #{item.to_s}")
if item.persisted?
concat link_to("Add Work Experience", WorkExperiencesAdmin.path(:new, user_id: item.id))
table item.work_experiences do
column :employer
column :title
column :period
column :reference_date, align: :center
column :actions, align: :right do |experience|
# TODO: The redirect after succesful delete goes back to the index page.. it should go back to the user page
safe_join([
link_to("Edit", WorkExperiencesAdmin.path(:edit, id: experience.id), class: "btn btn-secondary has-icon"),
link_to("Delete", work_experiences_admin_path(experience), class: "btn btn-danger has-icon", method: :delete, data: { confirm: "Are you sure?" })
], " | ")
end
end
else
concat content_tag(:p, "Save the user before adding work experiences.")
end
end
tab :education_entries, badge: (item.persisted? ? item.education_entries.size : 0) do
concat content_tag(:p, "User: #{item.to_s}")
if item.persisted?
concat link_to("Add Education Entry", EducationEntriesAdmin.path(:new, user_id: item.id))
table item.education_entries do
column :institution
column :title
column :period
column :location
column :actions, align: :right do |entry|
safe_join([
link_to("Edit", EducationEntriesAdmin.path(:edit, id: entry.id), class: "btn btn-secondary has-icon"),
link_to("Delete", EducationEntriesAdmin.path(:destroy, id: entry.id), class: "btn btn-danger has-icon", method: :delete, data: { confirm: "Are you sure?" })
], " | ")
end
end
else
concat content_tag(:p, "Save the user before adding education entries.")
end
end
tab :skills, badge: (item.persisted? ? item.skills.size : 0) do
concat content_tag(:p, "User: #{item.to_s}")
if item.persisted?
concat link_to("Add Skill", SkillsAdmin.path(:new, user_id: item.id))
table item.skills do
column :title
column :detail
column :order, align: :center
column :actions, align: :right do |skill|
safe_join([
link_to("Edit", SkillsAdmin.path(:edit, id: skill.id), class: "btn btn-secondary has-icon"),
link_to("Delete", SkillsAdmin.path(:destroy, id: skill.id), class: "btn btn-danger has-icon", method: :delete, data: { confirm: "Are you sure?" })
], " | ")
end
end
else
concat content_tag(:p, "Save the user before adding skills.")
end
end
tab :cover_letters, badge: (item.persisted? ? item.cover_letters.size : 0) do
concat content_tag(:p, "User: #{item.to_s}")
if item.persisted?
concat link_to("Add Cover Letter", CoverLettersAdmin.path(:new, user_id: item.id))
table item.cover_letters do
column :title
column :company_name
column :job_application
column :order, align: :center
column :actions, align: :right do |cover_letter|
safe_join([
link_to("Edit", CoverLettersAdmin.path(:edit, id: cover_letter.id), class: "btn btn-secondary has-icon"),
link_to("Delete", CoverLettersAdmin.path(:destroy, id: cover_letter.id), class: "btn btn-danger has-icon", method: :delete, data: { confirm: "Are you sure?" })
], " | ")
end
end
else
concat content_tag(:p, "Save the user before adding cover letters.")
end
end
end
# Customize the table columns shown on the index view.
table do
column :name
column :label
column :created_at, align: :center
actions do |toolbar, instance, admin|
toolbar.edit if admin && admin.actions.include?(:edit)
toolbar.delete if admin && admin.actions.include?(:destroy)
toolbar.link 'CV', instance, action: :generate, method: :get, style: :primary, icon: "fa fa-file-pdf", target: "_blank"
toolbar.link 'CLS', instance, action: :generate_cls, method: :get, style: :secondary, icon: "fa", target: "_blank"
toolbar.link 'JSON', instance, action: :generate_json, method: :get, style: :secondary, icon: "fa", target: "_blank"
toolbar.link 'Clone', instance, action: :clone, method: :post, style: :secondary, icon: "fa fa-copy"
end
end
controller do
def generate
tex_content = generate_tex
destination_dir = "#{Rails.root}/app/views/templates/awesome"
`cd #{destination_dir} && make clean`
File.open("#{destination_dir}/resume.tex", "w") do |f|
f << tex_content
end
`cd #{destination_dir} && make resume.pdf`
render file: "#{destination_dir}/resume.pdf", layout: false
end
def generate_cls
tex_content = generate_tex
destination_dir = "#{Rails.root}/app/views/templates/awesome"
File.open("#{destination_dir}/resume.tex", "w") do |f|
f << tex_content
end
render file: "#{destination_dir}/resume.tex", layout: false
end
def generate_json
generate_json_resume
end
def generate_json_resume
@user = admin.find_instance(params)
render template: "users/show", formats: [:json], layout: false
end
def generate_tex(template: "resume")
user = admin.find_instance(params)
ac = ActionController::Base.new()
ac.render_to_string(layout: false, template: "templates/awesome/#{template}", locals: { "@user": user } )
end
def clone
user = admin.find_instance(params)
cloned_user = user.clone!(label: "cloned")
flash[:message] = "User cloned as ##{cloned_user.id}."
redirect_to users_admin_path(cloned_user)
end
end
routes do
get :generate, on: :member
get :generate_cls, on: :member
get :generate_json, on: :member
post :clone, on: :member
end
end