diff --git a/backend/core/admin.py b/backend/core/admin.py index e9c1e27..9d34b80 100644 --- a/backend/core/admin.py +++ b/backend/core/admin.py @@ -1,8 +1,8 @@ from django.contrib import admin -from .models import Document, DocumentSegment, Organization, Risk, Control, DocumentTemplate, DocumentRiskControl, PaymentCode +from .models import Document, DocumentSegment, Organization, Risk, Control, DocumentTemplate, DocumentRiskControl, DemoCode from django.urls import reverse from django.utils.html import format_html -from .utils import generate_payment_code +from .utils import generate_demo_code from django.urls import path from django.shortcuts import render, redirect from .forms import GenerateCodesForm @@ -44,10 +44,10 @@ class ControlAdmin(admin.ModelAdmin): class DocumentRiskControlAdmin(admin.ModelAdmin): list_display = ('document', 'risk', 'control', 'weight','likelihood') -class PaymentCodeAdmin(admin.ModelAdmin): +class DemoCodeAdmin(admin.ModelAdmin): list_display = ('code', 'created_at', 'used', 'company', 'used_at') - change_list_template = "admin/paymentcode_changelist.html" + change_list_template = "admin/democode_changelist.html" def get_urls(self): urls = super().get_urls() @@ -64,9 +64,9 @@ class PaymentCodeAdmin(admin.ModelAdmin): created = 0 for _ in range(count): while True: - code = generate_payment_code() - if not PaymentCode.objects.filter(code=code).exists(): - PaymentCode.objects.create(code=code) + code = generate_demo_code() + if not DemoCode.objects.filter(code=code).exists(): + DemoCode.objects.create(code=code) created += 1 break self.message_user(request, f"{created} codes generated.") @@ -82,4 +82,4 @@ admin.site.register(Risk ,RiskAdmin) admin.site.register(Control, ControlAdmin) admin.site.register(DocumentTemplate, DocumentTemplateAdmin) admin.site.register(DocumentRiskControl, DocumentRiskControlAdmin) -admin.site.register(PaymentCode, PaymentCodeAdmin) +admin.site.register(DemoCode, DemoCodeAdmin) diff --git a/backend/core/migrations/0018_rename_paymentcode_democode.py b/backend/core/migrations/0018_rename_paymentcode_democode.py new file mode 100644 index 0000000..f59d4ee --- /dev/null +++ b/backend/core/migrations/0018_rename_paymentcode_democode.py @@ -0,0 +1,17 @@ +# Generated by Django 5.1.3 on 2025-07-13 22:45 + +from django.db import migrations + + +class Migration(migrations.Migration): + + dependencies = [ + ('core', '0017_document_key_findings'), + ] + + operations = [ + migrations.RenameModel( + old_name='PaymentCode', + new_name='DemoCode', + ), + ] diff --git a/backend/core/models.py b/backend/core/models.py index aa21de9..3ef45cd 100644 --- a/backend/core/models.py +++ b/backend/core/models.py @@ -175,7 +175,7 @@ class DocumentRiskControl(models.Model): unique_together = ('document', 'risk', 'control') -class PaymentCode(models.Model): +class DemoCode(models.Model): code = models.CharField(max_length=10, unique=True) created_at = models.DateTimeField(auto_now_add=True) used = models.BooleanField(default=False) diff --git a/backend/core/templates/admin/democode_changelist.html b/backend/core/templates/admin/democode_changelist.html new file mode 100644 index 0000000..04a4e3c --- /dev/null +++ b/backend/core/templates/admin/democode_changelist.html @@ -0,0 +1,14 @@ +{% extends "admin/change_list.html" %} +{% block object-tools %} +
+
+ Generate Demo Codes +
+
+ All (PDF) + Used (PDF) + Unused (PDF) +
+
+{{ block.super }} +{% endblock %} \ No newline at end of file diff --git a/backend/core/templates/admin/generate_codes.html b/backend/core/templates/admin/generate_codes.html index 69afabd..a023c0f 100644 --- a/backend/core/templates/admin/generate_codes.html +++ b/backend/core/templates/admin/generate_codes.html @@ -2,7 +2,7 @@ {% block content %}
-

Generate Payment Codes

+

Generate Demo Codes

{% csrf_token %} {{ form.as_p }} diff --git a/backend/core/templates/admin/paymentcode_changelist.html b/backend/core/templates/admin/paymentcode_changelist.html deleted file mode 100644 index be6ac30..0000000 --- a/backend/core/templates/admin/paymentcode_changelist.html +++ /dev/null @@ -1,14 +0,0 @@ -{% extends "admin/change_list.html" %} -{% block object-tools %} -
-
- Generate Payment Codes -
-
- All (PDF) - Used (PDF) - Unused (PDF) -
-
-{{ block.super }} -{% endblock %} \ No newline at end of file diff --git a/backend/core/templates/payment_code_report.html b/backend/core/templates/demo_code_report.html similarity index 93% rename from backend/core/templates/payment_code_report.html rename to backend/core/templates/demo_code_report.html index dc20bb1..199793f 100644 --- a/backend/core/templates/payment_code_report.html +++ b/backend/core/templates/demo_code_report.html @@ -4,11 +4,11 @@ - PDF payment report + Demo codes report -

Payment Codes Report

+

Demo Codes Report

diff --git a/backend/core/templates/payment.html b/backend/core/templates/payment.html index 7f4a218..3dc5a75 100644 --- a/backend/core/templates/payment.html +++ b/backend/core/templates/payment.html @@ -3,7 +3,7 @@

Payment

-

Please enter your payment code to proceed to document.

+

Please enter your demo code to proceed to document.

{% if success %}

{{ success }}

diff --git a/backend/core/urls.py b/backend/core/urls.py index 57cf8da..4609170 100644 --- a/backend/core/urls.py +++ b/backend/core/urls.py @@ -19,6 +19,6 @@ urlpatterns = [ path('validate_code/', v.validate_code, name='validate_code'), #admin urls - path('admin/payment-codes-pdf/', v.payment_codes_pdf_view, name='payment_codes_pdf'), + path('admin/demo-codes-pdf/', v.demo_codes_pdf_view, name='demo_codes_pdf'), ] diff --git a/backend/core/utils.py b/backend/core/utils.py index 445eb6b..ab884ba 100644 --- a/backend/core/utils.py +++ b/backend/core/utils.py @@ -400,6 +400,6 @@ def generate_residual_risk_graph(risks_with_controls): return base64.b64encode(image_png).decode("utf-8") -def generate_payment_code(length=6): +def generate_demo_code(length=6): chars = 'ABCDEFGHJKLMNPQRSTUVWXYZ23456789' return ''.join(random.choices(chars, k=length)) \ No newline at end of file diff --git a/backend/core/views.py b/backend/core/views.py index a403828..7ede935 100644 --- a/backend/core/views.py +++ b/backend/core/views.py @@ -6,7 +6,7 @@ import time from django.shortcuts import render, redirect , get_object_or_404 from .forms import OrganizationForm -from .models import Organization,Document, DocumentTemplate, PaymentCode +from .models import Organization,Document, DocumentTemplate, DemoCode 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 @@ -123,7 +123,7 @@ def payment_page(request): import re code = re.sub(r'\s+', '', request.POST.get('code', '')).upper()[:10] try: - payment_code = PaymentCode.objects.get(code=code) + payment_code = DemoCode.objects.get(code=code) if payment_code.used: error = "CODE INVALID" else: @@ -136,7 +136,7 @@ def payment_page(request): url = f"{site_domain}/pdf/{document.id}/" send_document_email(email, url, document) return redirect(url) - except PaymentCode.DoesNotExist: + except DemoCode.DoesNotExist: error = "❌ Invalid code" return render(request, 'payment.html', {'error': error}) @@ -152,18 +152,18 @@ def download_example_pdf(request): @staff_member_required -def payment_codes_pdf_view(request): +def demo_codes_pdf_view(request): filter_by = request.GET.get('filter_by', 'all') if filter_by == 'used': - codes = PaymentCode.objects.filter(used=True) + codes = DemoCode.objects.filter(used=True) elif filter_by == 'available': - codes = PaymentCode.objects.filter(used=False) + codes = DemoCode.objects.filter(used=False) else: - codes = PaymentCode.objects.all() - html_string = render_to_string('payment_code_report.html', {'codes': codes}) + codes = DemoCode.objects.all() + html_string = render_to_string('demo_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' + response['Content-Disposition'] = f'inline; filename=demo_codes_{timezone.now().strftime("%Y%m%d_%H%M%S")}.pdf' return response @csrf_exempt @@ -172,8 +172,8 @@ def validate_code(request): try: data = json.loads(request.body) code = data.get("code", "").strip().upper() - from .models import PaymentCode - valid = PaymentCode.objects.filter(code=code, used=False).exists() + from .models import DemoCode + valid = DemoCode.objects.filter(code=code, used=False).exists() time.sleep(3) return JsonResponse({"valid": valid}) except Exception: