Konflikt resen

This commit is contained in:
2025-02-21 14:58:02 +01:00
parent a8227b18b6
commit ff6b525e18
10 changed files with 107 additions and 24 deletions

View File

@@ -2,6 +2,7 @@ from celery import shared_task
from backend.core.models import Organization, Document, Risk, Control, DocumentRiskControl from backend.core.models import Organization, Document, Risk, Control, DocumentRiskControl
from backend.core.utils import get_top_risk, get_controls_for_risk from backend.core.utils import get_top_risk, get_controls_for_risk
from django.shortcuts import get_object_or_404, render from django.shortcuts import get_object_or_404, render
from .utils import send_payment_email
@shared_task @shared_task
@@ -50,3 +51,6 @@ def create_document_for_organization(confirmation_email):
controls_content += "\n" controls_content += "\n"
document.add_segment('body', controls_content) document.add_segment('body', controls_content)
send_payment_email(confirmation_email)

View File

@@ -1,8 +1,10 @@
{% extends "base_login.html" %} {% extends "base.html" %}
{%block content%}
<h2>Link has expired! </h2> <h2>Link has expired! </h2>
<form method="POST"> <form method="POST">
{% csrf_token %} {% csrf_token %}
<button type="submit">Resend link</button> <button type="submit">Resend link</button>
</form> </form>
{% endblock %}

View File

@@ -1,5 +1,11 @@
{% extends "base_login.html" %} {% extends "base.html" %}
{%block content%}
<div class="out-risk-management">
<div class="risk-management">
<h1>Email Confirmed!</h1>
<p>Your email {{ email }} has been successfully verified.</p>
</div>
</div>
<h1>Email Confirmed!</h1> {%endblock%}
<p>Your email {{ email }} has been successfully verified.</p>

View File

@@ -4,7 +4,7 @@ from .models import EmailConfirmation
import uuid import uuid
from django.conf import settings from django.conf import settings
from django.utils.timezone import now from django.utils.timezone import now
from backend.core.models import Document, Organization
def send_confirmation_email(email): def send_confirmation_email(email):
confirmation, created = EmailConfirmation.objects.get_or_create(email=email) confirmation, created = EmailConfirmation.objects.get_or_create(email=email)
@@ -22,3 +22,27 @@ def send_confirmation_email(email):
from_email= settings.EMAIL_HOST_USER, from_email= settings.EMAIL_HOST_USER,
recipient_list=[email] recipient_list=[email]
) )
def send_payment_email(email):
organization = Organization.objects.get(email=email)
document = Document.objects.get(organization=organization)
payment_link = f"http://127.0.0.1:8000{reverse('core:payment_page')}?email={email}"
send_mail(
subject="Complete your payment",
message=f"Click the link to proceed with payment: {payment_link}",
from_email=settings.EMAIL_HOST_USER,
recipient_list=[email],
fail_silently=False,
)
def send_document_email(email, document_link):
send_mail(
subject="Your Document is Ready",
message=f"You can access your document at any time here: {document_link}",
from_email=settings.EMAIL_HOST_USER,
recipient_list=[email],
fail_silently=False,
)

View File

@@ -17,13 +17,10 @@ def confirm_email(request, uuid):
confirmation = get_object_or_404(EmailConfirmation, uuid=uuid) confirmation = get_object_or_404(EmailConfirmation, uuid=uuid)
if confirmation.is_expired(): if confirmation.is_expired():
return render(request, 'confirmation_expired.html', {'email': confirmation.email}) return render(request, 'accounts/confirmation_expired.html', {'email': confirmation.email})
task = create_document_for_organization.delay(confirmation.email) task = create_document_for_organization.delay(confirmation.email)
print(f"Task ID: {task.id}") return render(request, 'accounts/confirmation_success.html', {'email': confirmation.email})
return HttpResponse("Email is confirmed")
def resend_confirmation(request,email): def resend_confirmation(request,email):
if request.method == 'POST': if request.method == 'POST':

View File

@@ -0,0 +1,14 @@
{% extends 'base.html' %}
{% block content %}
<div class="out-risk-management">
<div class="risk-management">
<h2>Payment</h2>
<p>Click the button below to pay and access your document.</p>
<form method="post">
{% csrf_token %}
<button class="btn-bl" type="submit">Pay</button>
</form>
</div>
</div>
{% endblock %}

View File

@@ -11,4 +11,6 @@ urlpatterns = [
# url document/ recieves a parameter named 'uuid' and passes it to the view # url document/ recieves a parameter named 'uuid' and passes it to the view
path('document/<uuid:document_id>/', v.document, name='document'), path('document/<uuid:document_id>/', v.document, name='document'),
path('preview/<str:name>/', v.template_preview, name='template_preview'), path('preview/<str:name>/', v.template_preview, name='template_preview'),
path("payment/", v.payment_page, name="payment_page"),
] ]

View File

@@ -3,14 +3,15 @@ import yaml
from django.shortcuts import render, redirect , get_object_or_404 from django.shortcuts import render, redirect , get_object_or_404
from .forms import OrganizationForm from .forms import OrganizationForm
from .models import Organization,Document,Risk, DocumentTemplate,DocumentRiskControl,Control from .models import Organization,Document,Risk, DocumentTemplate,DocumentRiskControl
from backend.core.utils import get_top_risk from backend.core.utils import get_top_risk
from django.urls import reverse from django.urls import reverse
from backend.accounts.utils import send_confirmation_email from backend.accounts.utils import send_confirmation_email, send_document_email
from django.contrib.admin.views.decorators import staff_member_required from django.contrib.admin.views.decorators import staff_member_required
from django.template import Template, Context from django.template import Template, Context
# @login_required # @login_required
# def index(request): # def index(request):
# return HttpResponse('<h1>Django</h1><p>Página simples.</p>') # return HttpResponse('<h1>Django</h1><p>Página simples.</p>')
@@ -45,13 +46,6 @@ def signup(request):
def thankyou(request): def thankyou(request):
return render(request, 'thankyou.html') return render(request, 'thankyou.html')
@staff_member_required
def template_preview(request, name):
template = get_object_or_404(DocumentTemplate, name=name)
parsed_template = template.to_dict()
return render(request, 'template_preview.html', {'template': parsed_template})
def document(request, document_id): def document(request, document_id):
document = get_object_or_404(Document, id=document_id) document = get_object_or_404(Document, id=document_id)
risks = ( risks = (
@@ -99,3 +93,23 @@ def document(request, document_id):
rendered_content += django_template.render(Context(context)) rendered_content += django_template.render(Context(context))
return render(request, 'document.html', {'rendered_html': rendered_content}) return render(request, 'document.html', {'rendered_html': rendered_content})
@staff_member_required
def template_preview(request, name):
template = get_object_or_404(DocumentTemplate, name=name)
parsed_template = template.to_dict()
return render(request, 'template_preview.html', {'template': parsed_template})
def payment_page(request):
email = request.GET.get("email")
organization = Organization.objects.get(email=email)
document = Document.objects.get(organization=organization)
document_link = f"http://127.0.0.1:8000/document/{document.id}/"
if request.method == "POST":
send_document_email(email, document_link)
return redirect(document_link)
return render(request, "payment.html", {"email": email})

View File

@@ -9,3 +9,11 @@ Faker==33.0.0
isort==5.13.2 isort==5.13.2
python-decouple==3.8 python-decouple==3.8
psycopg2-binary==2.9.10 psycopg2-binary==2.9.10
openai==1.63.0
python-dotenv==1.0.1
PyYAML==6.0.2
celery==5.4.0
django-celery-results==2.5.1
redis==5.2.1

12
start_services.sh Executable file
View File

@@ -0,0 +1,12 @@
#!/bin/bash
echo "Starting Django server..."
python3 manage.py runserver &
echo "Starting Celery worker..."
celery -A backend worker --loglevel=info &
echo "Starting Redis server on port 6380..."
redis-server --port 6380 &
wait