diff --git a/db.sqlite3 b/db.sqlite3 index 19c9391..645a3ed 100644 Binary files a/db.sqlite3 and b/db.sqlite3 differ diff --git a/requirements.txt b/requirements.txt index f98624d..d1cba28 100644 --- a/requirements.txt +++ b/requirements.txt @@ -92,4 +92,5 @@ uritemplate==4.1.1 urllib3==2.2.3 virtualenv==20.26.6 webencodings==0.5.1 +weasyprint==63.0 whitenoise==6.7.0 diff --git a/resume_cv/urls.py b/resume_cv/urls.py index b5cf669..0af43d2 100644 --- a/resume_cv/urls.py +++ b/resume_cv/urls.py @@ -5,6 +5,7 @@ ResumeCVCreateView, resume_builder, UserResumeListView, + download_resume, ) app_name = "resume_cv" @@ -14,4 +15,5 @@ path("resume-cv/create", ResumeCVCreateView.as_view(), name="create"), path("templates/builder/<code>", resume_builder, name="builder"), path("resumes/", UserResumeListView.as_view(), name="resumes"), + path("download-as-pdf/<int:id>/", download_resume, name="export.pdf"), ] diff --git a/resume_cv/views.py b/resume_cv/views.py index 3120c23..e4aac09 100644 --- a/resume_cv/views.py +++ b/resume_cv/views.py @@ -1,13 +1,16 @@ import json +from django.contrib.auth.decorators import login_required from django.contrib.auth.mixins import LoginRequiredMixin from django.http import HttpResponse, JsonResponse from django.middleware.csrf import get_token from django.shortcuts import render, redirect from django.urls import reverse_lazy from django.views import View -from django.views.generic import ListView, CreateView +from django.views.generic import ListView +from weasyprint import HTML +from jobsapp.decorators import user_is_employee # Create your views here. from jobsapp.mixins import EmployeeRequiredMixin from resume_cv.forms import ResumeCvForm @@ -113,3 +116,15 @@ class UserResumeListView(ListView): def get_queryset(self): return self.model.objects.filter(user_id=self.request.user.id).order_by("-id") + + +@login_required +@user_is_employee +def download_resume(request, id): + resume = ResumeCv.objects.get(id=id) + if resume: + pdf_file = HTML(string=resume.content).write_pdf() + response = HttpResponse(pdf_file, content_type="application/pdf") + response["Content-Disposition"] = f'attachment; filename="{resume.name}.pdf"' + return response + return redirect("resume_cv:resumes") diff --git a/templates/resumes/builder.html b/templates/resumes/builder.html index edcf068..cf485ab 100644 --- a/templates/resumes/builder.html +++ b/templates/resumes/builder.html @@ -76,7 +76,7 @@ <h4><b>{{ template.name }}</b></h4> let urlStore = '{% url 'resume-cv.update.builder' resume.id %}'; let urlLoad = '{% url 'resume-cv.load.builder' resume.id %}'; let back_button_url = "{% url 'resume_cv:templates' %}"; - let exportPDF_url = ""; + let exportPDF_url = '{% url 'resume_cv:export.pdf' resume.id %}'; let images_url = ['{% static 'img/1875187.jpg' %}']; let all_fonts = ['Arial', 'Verdana', 'Helvetica', 'Tahoma', 'Trebuchet MS', 'Times New Roman', 'Georgia', 'Garamond', 'Courier New', 'Brush Script MT'];