unqiue hologram code
This commit is contained in:
parent
328c657e0f
commit
ef0779de6a
5 changed files with 70 additions and 12 deletions
|
|
@ -12,9 +12,7 @@ class CertificateTemplateAdmin(admin.ModelAdmin):
|
||||||
|
|
||||||
@admin.register(CertificateInstance)
|
@admin.register(CertificateInstance)
|
||||||
class CertificateInstanceAdmin(admin.ModelAdmin):
|
class CertificateInstanceAdmin(admin.ModelAdmin):
|
||||||
list_display = ('process_instance', 'rendered_title', 'issued_at', 'approved')
|
list_display = ('process_instance', 'rendered_title', 'hologram_code', 'issued_at', 'approved')
|
||||||
list_filter = ('approved', 'issued_at')
|
list_filter = ('approved', 'issued_at')
|
||||||
search_fields = ('process_instance__code', 'rendered_title')
|
search_fields = ('process_instance__code', 'rendered_title', 'hologram_code')
|
||||||
autocomplete_fields = ('process_instance', 'template')
|
autocomplete_fields = ('process_instance', 'template')
|
||||||
|
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,18 @@
|
||||||
|
# Generated by Django 5.2.4 on 2025-10-09 08:26
|
||||||
|
|
||||||
|
from django.db import migrations, models
|
||||||
|
|
||||||
|
|
||||||
|
class Migration(migrations.Migration):
|
||||||
|
|
||||||
|
dependencies = [
|
||||||
|
('certificates', '0002_certificateinstance_hologram_code'),
|
||||||
|
]
|
||||||
|
|
||||||
|
operations = [
|
||||||
|
migrations.AlterField(
|
||||||
|
model_name='certificateinstance',
|
||||||
|
name='hologram_code',
|
||||||
|
field=models.CharField(blank=True, max_length=50, null=True, unique=True, verbose_name='کد یکتا هولوگرام'),
|
||||||
|
),
|
||||||
|
]
|
||||||
|
|
@ -28,7 +28,7 @@ class CertificateInstance(BaseModel):
|
||||||
issued_at = models.DateField(auto_now_add=True, verbose_name='تاریخ صدور')
|
issued_at = models.DateField(auto_now_add=True, verbose_name='تاریخ صدور')
|
||||||
approved = models.BooleanField(default=False, verbose_name='تایید شده')
|
approved = models.BooleanField(default=False, verbose_name='تایید شده')
|
||||||
approved_at = models.DateTimeField(null=True, blank=True, verbose_name='تاریخ تایید')
|
approved_at = models.DateTimeField(null=True, blank=True, verbose_name='تاریخ تایید')
|
||||||
hologram_code = models.CharField(max_length=50, null=True, blank=True, verbose_name='کد یکتا هولوگرام')
|
hologram_code = models.CharField(max_length=50, null=True, blank=True, verbose_name='کد یکتا هولوگرام', unique=True)
|
||||||
|
|
||||||
class Meta:
|
class Meta:
|
||||||
verbose_name = 'گواهی'
|
verbose_name = 'گواهی'
|
||||||
|
|
|
||||||
|
|
@ -6,6 +6,7 @@ from django.urls import reverse
|
||||||
from django.utils import timezone
|
from django.utils import timezone
|
||||||
from django.template import Template, Context
|
from django.template import Template, Context
|
||||||
from django.utils.safestring import mark_safe
|
from django.utils.safestring import mark_safe
|
||||||
|
from django.db import IntegrityError
|
||||||
|
|
||||||
from processes.models import ProcessInstance, StepInstance
|
from processes.models import ProcessInstance, StepInstance
|
||||||
from invoices.models import Invoice
|
from invoices.models import Invoice
|
||||||
|
|
@ -157,15 +158,56 @@ def certificate_print(request, instance_id):
|
||||||
if request.method == 'POST':
|
if request.method == 'POST':
|
||||||
# Save/update hologram code then print
|
# Save/update hologram code then print
|
||||||
code = (request.POST.get('hologram_code') or '').strip()
|
code = (request.POST.get('hologram_code') or '').strip()
|
||||||
if cert:
|
|
||||||
if code:
|
if not code:
|
||||||
|
messages.error(request, 'کد یکتای هولوگرام الزامی است')
|
||||||
|
# Find certificate step to redirect back
|
||||||
|
certificate_step = instance.process.steps.filter(order=9).first()
|
||||||
|
if certificate_step and instance.current_step:
|
||||||
|
return redirect('processes:step_detail', instance_id=instance.id, step_id=certificate_step.id)
|
||||||
|
return redirect('processes:instance_summary', instance_id=instance.id)
|
||||||
|
|
||||||
|
try:
|
||||||
|
if cert:
|
||||||
|
# Check if hologram code is already used by another certificate
|
||||||
|
if CertificateInstance.objects.filter(hologram_code=code).exclude(id=cert.id).exists():
|
||||||
|
messages.error(request, 'این کد هولوگرام قبلاً استفاده شده است. لطفاً کد دیگری وارد کنید')
|
||||||
|
# Find certificate step to redirect back
|
||||||
|
certificate_step = instance.process.steps.filter(order=9).first()
|
||||||
|
if certificate_step and instance.current_step:
|
||||||
|
return redirect('processes:step_detail', instance_id=instance.id, step_id=certificate_step.id)
|
||||||
|
return redirect('processes:instance_summary', instance_id=instance.id)
|
||||||
|
|
||||||
cert.hologram_code = code
|
cert.hologram_code = code
|
||||||
cert.save(update_fields=['hologram_code'])
|
cert.save(update_fields=['hologram_code'])
|
||||||
else:
|
else:
|
||||||
template = CertificateTemplate.objects.filter(is_active=True).order_by('-created').first()
|
# Check if hologram code is already used
|
||||||
if template:
|
if CertificateInstance.objects.filter(hologram_code=code).exists():
|
||||||
title, body = _render_template(template, instance)
|
messages.error(request, 'این کد هولوگرام قبلاً استفاده شده است. لطفاً کد دیگری وارد کنید')
|
||||||
cert = CertificateInstance.objects.create(process_instance=instance, template=template, rendered_title=title, rendered_body=body, hologram_code=code or None)
|
# Find certificate step to redirect back
|
||||||
|
certificate_step = instance.process.steps.filter(order=9).first()
|
||||||
|
if certificate_step and instance.current_step:
|
||||||
|
return redirect('processes:step_detail', instance_id=instance.id, step_id=certificate_step.id)
|
||||||
|
return redirect('processes:instance_summary', instance_id=instance.id)
|
||||||
|
|
||||||
|
template = CertificateTemplate.objects.filter(is_active=True).order_by('-created').first()
|
||||||
|
if template:
|
||||||
|
title, body = _render_template(template, instance)
|
||||||
|
cert = CertificateInstance.objects.create(
|
||||||
|
process_instance=instance,
|
||||||
|
template=template,
|
||||||
|
rendered_title=title,
|
||||||
|
rendered_body=body,
|
||||||
|
hologram_code=code
|
||||||
|
)
|
||||||
|
except IntegrityError:
|
||||||
|
messages.error(request, 'این کد هولوگرام قبلاً استفاده شده است. لطفاً کد دیگری وارد کنید')
|
||||||
|
# Find certificate step to redirect back
|
||||||
|
certificate_step = instance.process.steps.filter(order=9).first()
|
||||||
|
if certificate_step and instance.current_step:
|
||||||
|
return redirect('processes:step_detail', instance_id=instance.id, step_id=certificate_step.id)
|
||||||
|
return redirect('processes:instance_summary', instance_id=instance.id)
|
||||||
|
|
||||||
# proceed to rendering page after saving code
|
# proceed to rendering page after saving code
|
||||||
return render(request, 'certificates/print.html', {
|
return render(request, 'certificates/print.html', {
|
||||||
'instance': instance,
|
'instance': instance,
|
||||||
|
|
|
||||||
BIN
db.sqlite3
BIN
db.sqlite3
Binary file not shown.
Loading…
Add table
Add a link
Reference in a new issue