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