From d945dd013d9412674e3ff0a8b222d8630f64cddc Mon Sep 17 00:00:00 2001 From: Maxime Bombar Date: Sun, 21 Oct 2018 22:31:21 +0200 Subject: [PATCH] [Printer] Handles submission of empty files --- printer/templates/printer/print.html | 2 +- printer/views.py | 161 ++++++++++----------------- 2 files changed, 59 insertions(+), 104 deletions(-) diff --git a/printer/templates/printer/print.html b/printer/templates/printer/print.html index 6ddc402f..85f8fee8 100644 --- a/printer/templates/printer/print.html +++ b/printer/templates/printer/print.html @@ -21,7 +21,7 @@ {% endfor %} - {% bootstrap_button action_name name="options" button_type="submit" icon="star" %} + {% bootstrap_button action_name name="Print" button_type="submit" icon="star" %} diff --git a/printer/views.py b/printer/views.py index d82d8473..3d6644d9 100644 --- a/printer/views.py +++ b/printer/views.py @@ -40,89 +40,77 @@ from cotisations.utils import find_payment_method from django.core.exceptions import ValidationError +# raise ValidationError("'%(path)s'", code='path', params = {'path': job.printAs}) + @login_required def new_job(request): """ View to create a new printing job """ if request.method == 'POST': - # raise Exception('coucou3') - # raise ValidationError("'%(path)s'", code='path', params = {'path': request.FILES}) - job_formset = formset_factory(JobWithOptionsForm)( - request.POST, - request.FILES or None, - form_kwargs={'user': request.user}, - ) - - # raise ValidationError("'%(path)s'", code='path', params = {'path': request.FILES}) + ### First Step + if 'Next' in request.POST: + job_formset = formset_factory(JobWithOptionsForm)( + request.POST, + request.FILES or None, + form_kwargs={'user': request.user}, + ) - tmp_job_formset = job_formset - - if request.FILES: - # raise Exception("Coucou4") if job_formset.is_valid(): - # raise Exception("Valide !!!") - files = request.FILES data = [] i=0 - # request.POST['jids'] = [] - jids = [] - for job in job_formset.forms: - if job.is_valid(): - try: - filename = job.cleaned_data['file'].name - except KeyError: - raise ValidationError("'%(path)s'", code='path', params = {'path': job}) + for job in job_formset: + ### Fails if one of the forms is submitted without a file. + try: + filename = job.cleaned_data['file'].name job = job.save(commit=False) job.filename = filename job.user=request.user - # raise ValidationError("'%(path)s'", code='path', params = {'path': job.printAs}) if job.printAs is None: job.printAs = request.user job.status='Pending' - # raise - # raise ValidationError("'%(path)s'", code='path', params = {'path': request.FILES['form-%s-file' % i].temporary_file_path()}) - # job_data = model_to_dict(job) - # raise ValidationError("'%(plop)s'", code='plop', params = {'plop': bool(job.printAs is None) }) metadata = pdfinfo(request.FILES['form-%s-file' % i].temporary_file_path()) job.pages = metadata["Pages"] - # raise ValidationError("'%(path)s'", code='path', params = {'path': type(job)}) - # job.save() - # job_data = model_to_dict(job) - # job_data['file'] = request.FILES['form-%s-file' % i] - # raise ValidationError("'%(plop)s'", code='plop', params = {'plop': job_data }) - # raise ValidationError("'%(path)s'", code='path', params = {'path': request.session }) job._update_price() job.save() job_data = model_to_dict(job) - jids.append(job.id) - # request.session['id-form-%s-file' % i] = job.id - # request.session['form-%s-file' % i] = request.FILES['form-%s-file' % i].temporary_file_path() job_data['jid'] = job.id data.append(job_data) - i+=1 + except KeyError: + job_formset.errors[i] = {'file': ['This field is required.']} + i+=1 job_formset_filled_in = formset_factory(PrintForm, extra=0)( initial=data, - # jids=jids, - form_kwargs={'user': request.user, - }, + form_kwargs={'user': request.user}, ) - # raise ValidationError("'%(path)s'", code='path', params = {'path': job_formset_filled_in.forms }) - # request.POST['job_ids'] = jids - return form( - { - 'jobform': job_formset_filled_in, - 'action_name' : 'Print', - }, - 'printer/print.html', - request - ) + if job_formset.total_error_count() == 0: + ### Every job in the formset has been treated; + ### And no empty file. --> Go to next step. + return form( + { + 'jobform': job_formset_filled_in, + 'action_name' : 'Print', + }, + 'printer/print.html', + request + ) + else: + ### No file + return form( + { + 'jobform': job_formset, + 'action_name': _("Next"), + }, + 'printer/newjob.html', + request + ) + + ### Formset is not valid --> Return the formset with errors else: - job_formset = tmp_job_formset return form( { 'jobform': job_formset, @@ -132,58 +120,29 @@ def new_job(request): request ) - # else: - # job_formset = tmp_job_formset - # return form( - # { - # 'jobform': job_formset, - # 'action_name': _("Next"), - # }, - # 'printer/newjob.html', - # request - # ) - - - # else: - # raise Exception("Coucou5") - # elif 'Print' in request.POST: - # raise ValidationError("'%(path)s'", code='path', params = {'path': request.POST }) - - # raise Exception('On a déjà upload !') - # n = int(request.POST['form-TOTAL_FORMS']) - job_formset = formset_factory(PrintForm)( - request.POST, - form_kwargs={'user': request.user}, - ) - # raise ValidationError("'%(path)s'", code='path', params = {'path': request.POST }) - # jids = request.POST['job_ids'] - if job_formset.is_valid(): - for job_form in job_formset: - i=0 - # old_job = JobWithOptions.objects.get(id=jids[i]) - jid = job_form.cleaned_data['jid'] - # raise ValidationError("'%(path)s'", code='path', params = {'path': job_obj.cleaned_data }) - job = JobWithOptions.objects.get(id=jid) - # job = job_obj.save(commit=False) - job.user = request.user - job.status = 'Printable' - # raise ValidationError("'%(plop)s'", code='plop', params = {'plop': job.file}) - # job.file = old_job.file - job._update_price() - job.save() - i+=1 - # raise ValidationError("'%(plop)s'", code='plop', params = {'plop': request.method}) - # raise ValidationError("'%(path)s'", code='path', params = {'path': str(n) }) - # request.session['jids']=jids - return redirect('printer:payment') + ### Second step + elif 'Print' in request.POST: + job_formset = formset_factory(PrintForm)( + request.POST, + form_kwargs={'user': request.user}, + ) + if job_formset.is_valid(): + for job_form in job_formset: + jid = job_form.cleaned_data['jid'] + job = JobWithOptions.objects.get(id=jid) + job.user = request.user + job.status = 'Printable' + job._update_price() + job.save() + return redirect('printer:payment') + ### GET request else: - # raise Exception("Coucou2") job_formset = formset_factory(JobWithOptionsForm)( form_kwargs={'user': request.user} ) - # raise ValidationError("'%(plop)s'", code='plop', params = {'plop': job_formset}) + return form( { @@ -198,9 +157,6 @@ def payment(request): """ View used to create a new invoice and make the payment """ - # user = request.user - # jids = request.session['jids'] - # raise ValidationError("'%(path)s'", code='path', params = {'path': jids}) jobs = JobWithOptions.objects.filter(user=request.user, status='Printable', paid='False') users = {} for job in jobs: @@ -214,7 +170,7 @@ def payment(request): job.save() for user in users: - # If payment_method balance doesn't exist, then you're not allowed to print. + ### If payment_method balance doesn't exist, then you're not allowed to print. try: balance = find_payment_method(Paiement.objects.get(is_balance=True)) except Paiement.DoesNotExist: @@ -228,7 +184,6 @@ def payment(request): )) invoice = Facture(user=user) invoice.paiement = balance.payment - # invoice.valid = True invoice.save() Vente.objects.create( facture=invoice,