dodati payment kodovi, generisanje kodova, pdf view,promena payment page

This commit is contained in:
2025-06-20 00:56:57 +02:00
parent 44bb4578b1
commit 65b58e3bb9
13 changed files with 221 additions and 36 deletions

View File

@@ -3,7 +3,7 @@ import yaml
from django.shortcuts import render, redirect , get_object_or_404
from .forms import OrganizationForm
from .models import Organization,Document, DocumentTemplate
from .models import Organization,Document, DocumentTemplate, PaymentCode
from backend.accounts.utils import send_confirmation_email, send_document_email
from django.contrib.admin.views.decorators import staff_member_required
from .utils import generate_pdf, generate_risk_graph, generate_residual_risk_graph
@@ -11,11 +11,13 @@ from .tables import risk_matrix_table ,get_risk_table, get_safeguard_summary_tab
from django.conf import settings
site_domain = settings.SITE_DOMAIN
from .processors import render_template
from django.http import JsonResponse, FileResponse, Http404
from django.http import JsonResponse, FileResponse, Http404, HttpResponse
from django.core.exceptions import ValidationError
from django.core.validators import validate_email
import os
from django.utils import timezone
from weasyprint import HTML
from django.template.loader import render_to_string
# @login_required
@@ -112,16 +114,28 @@ def pdf_view(request, document_id):
return generate_pdf(document)
def payment_page(request):
email = request.GET.get("email")
organization = get_object_or_404(Organization, email=email)
document = get_object_or_404(Document, organization=organization)
if request.method == "POST":
pdf_url = f"{site_domain}/pdf/{document.id}/"
send_document_email(email, pdf_url, document)
return redirect(pdf_url)
return render(request, "payment.html", {"email": email})
error = None
email = request.GET.get('email')
if request.method == 'POST':
import re
code = re.sub(r'\s+', '', request.POST.get('code', '')).upper()[:10]
try:
payment_code = PaymentCode.objects.get(code=code)
if payment_code.used:
error = "CODE INVALID"
else:
org = Organization.objects.filter(email__iexact=email).first()
payment_code.used = True
payment_code.used_at = timezone.now()
payment_code.company = org
payment_code.save()
document = Document.objects.get(organization = org)
url = f"{site_domain}/pdf/{document.id}/"
send_document_email(email, url, document)
return redirect(url)
except PaymentCode.DoesNotExist:
error = "CODE INVALID"
return render(request, 'payment.html', {'error': error})
def no_confidential_data(request):
return render(request, "no_confidential_data.html")
@@ -131,4 +145,20 @@ def download_example_pdf(request):
pdf_path = os.path.join(settings.BASE_DIR, 'backend/core/static/pdf/risklet_example_document.pdf')
if not os.path.exists(pdf_path):
raise Http404("File not found.")
return FileResponse(open(pdf_path, 'rb'), as_attachment=True, filename='risklet_example_document.pdf')
return FileResponse(open(pdf_path, 'rb'), as_attachment=True, filename='risklet_example_document.pdf')
@staff_member_required
def payment_codes_pdf_view(request):
filter_by = request.GET.get('filter_by', 'all')
if filter_by == 'used':
codes = PaymentCode.objects.filter(used=True)
elif filter_by == 'available':
codes = PaymentCode.objects.filter(used=False)
else:
codes = PaymentCode.objects.all()
html_string = render_to_string('payment_code_report.html', {'codes': codes})
pdf_content = HTML(string=html_string, base_url=request.build_absolute_uri('/')).write_pdf()
response = HttpResponse(pdf_content, content_type='application/pdf')
response['Content-Disposition'] = f'inline; filename=payment_codes_{timezone.now().strftime("%Y%m%d_%H%M%S")}.pdf'
return response