unqiue hologram code
This commit is contained in:
		
							parent
							
								
									328c657e0f
								
							
						
					
					
						commit
						ef0779de6a
					
				
					 5 changed files with 70 additions and 12 deletions
				
			
		| 
						 | 
				
			
			@ -6,6 +6,7 @@ from django.urls import reverse
 | 
			
		|||
from django.utils import timezone
 | 
			
		||||
from django.template import Template, Context
 | 
			
		||||
from django.utils.safestring import mark_safe
 | 
			
		||||
from django.db import IntegrityError
 | 
			
		||||
 | 
			
		||||
from processes.models import ProcessInstance, StepInstance
 | 
			
		||||
from invoices.models import Invoice
 | 
			
		||||
| 
						 | 
				
			
			@ -157,15 +158,56 @@ def certificate_print(request, instance_id):
 | 
			
		|||
    if request.method == 'POST':
 | 
			
		||||
        # Save/update hologram code then print
 | 
			
		||||
        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.save(update_fields=['hologram_code'])
 | 
			
		||||
        else:
 | 
			
		||||
            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 or None)
 | 
			
		||||
            else:
 | 
			
		||||
                # Check if hologram code is already used
 | 
			
		||||
                if CertificateInstance.objects.filter(hologram_code=code).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)
 | 
			
		||||
                
 | 
			
		||||
                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
 | 
			
		||||
        return render(request, 'certificates/print.html', {
 | 
			
		||||
            'instance': instance,
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue