|
|
|
@ -1,24 +1,120 @@ |
|
|
|
Trestle.resource(:users) do |
|
|
|
menu do |
|
|
|
item :users, icon: "fa fa-user", priority: 1 |
|
|
|
item :resumes, icon: "fa fa-file-alt", priority: 1 |
|
|
|
end |
|
|
|
|
|
|
|
form do |item| |
|
|
|
concat Trestle::Form::Automatic.new(admin).render(self, item) |
|
|
|
|
|
|
|
text_area :objective |
|
|
|
tab :details, label: "Details" do |
|
|
|
concat Trestle::Form::Automatic.new(admin).render(self, item) |
|
|
|
text_area :objective |
|
|
|
end |
|
|
|
|
|
|
|
tab :export, label: "Export Resume" do |
|
|
|
safe_join([ |
|
|
|
link_to("Export as PDF", generate_users_admin_path(item), class: "btn btn-primary has-icon", target: "_blank"), |
|
|
|
link_to("Export as TeX", generate_cls_users_admin_path(item), class: "btn btn-secondary has-icon", target: "_blank"), |
|
|
|
link_to("Export as JSON", generate_json_users_admin_path(item), class: "btn btn-secondary has-icon", target: "_blank") |
|
|
|
], " ") |
|
|
|
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 |
|
|
|
|
|
|
|
@ -44,11 +140,8 @@ Trestle.resource(:users) do |
|
|
|
end |
|
|
|
|
|
|
|
def generate_json |
|
|
|
generate_json_resume |
|
|
|
end |
|
|
|
|
|
|
|
def generate_json_resume |
|
|
|
@user = admin.find_instance(params) |
|
|
|
response.headers["Content-Disposition"] = "attachment; filename=resume.json" |
|
|
|
render template: "users/show", formats: [:json], layout: false |
|
|
|
end |
|
|
|
|
|
|
|
@ -57,11 +150,19 @@ Trestle.resource(:users) do |
|
|
|
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 |
|
|
|
|