Projet

Général

Profil

0001-gesbac-get-demand-response-by-gesbac-id-instead-of-f.patch

Serghei Mihai (congés, retour 15/05), 27 janvier 2020 10:18

Télécharger (6,53 ko)

Voir les différences:

Subject: [PATCH] gesbac: get demand response by gesbac id instead of form id
 (#39134)

 .../migrations/0002_auto_20200127_0942.py     | 26 +++++++++++++++++
 passerelle/apps/gesbac/models.py              | 28 +++++++++++++------
 tests/test_gesbac.py                          |  6 ++--
 3 files changed, 49 insertions(+), 11 deletions(-)
 create mode 100644 passerelle/apps/gesbac/migrations/0002_auto_20200127_0942.py
passerelle/apps/gesbac/migrations/0002_auto_20200127_0942.py
1
# -*- coding: utf-8 -*-
2
# Generated by Django 1.11.20 on 2020-01-27 08:42
3
from __future__ import unicode_literals
4

  
5
from django.db import migrations, models
6

  
7

  
8
class Migration(migrations.Migration):
9

  
10
    dependencies = [
11
        ('gesbac', '0001_initial'),
12
    ]
13

  
14
    operations = [
15
        migrations.AddField(
16
            model_name='form',
17
            name='counter',
18
            field=models.IntegerField(default=1),
19
        ),
20
        migrations.AddField(
21
            model_name='form',
22
            name='gesbac_id',
23
            field=models.CharField(default='', max_length=64),
24
            preserve_default=False,
25
        ),
26
    ]
passerelle/apps/gesbac/models.py
330 330
    )
331 331
    def create_demand(self, request, post_data):
332 332
        form_id = post_data['form_id']
333

  
334
        form = Form.objects.create(resource=self, form_id=form_id)
333
        try:
334
            old_form = Form.objects.filter(resource=self, form_id=form_id).latest()
335
            counter = old_form.counter+1
336
        except Form.DoesNotExist:
337
            counter = 1
338
        form = Form.objects.create(resource=self, form_id=form_id, counter=counter)
335 339
        post_data['form_id'] = form.get_gesbac_id()
336 340
        data = []
337 341
        applicant_data = ['E']
......
355 359
        form.demand_data = data
356 360
        form.save()
357 361
        self.add_job('send_demand', form_id=form.id)
358
        return {'data': {'filename': form.get_filename()}}
362
        return {'data': {'filename': form.get_filename(),
363
                         'gesbac_id': form.get_gesbac_id()}}
359 364

  
360 365
    @endpoint(name='get-response', perm='can_access',
361 366
              description=_('Get response'),
362 367
              parameters={
363
                  'form_id': {
364
                      'description': _('Form identifier'),
365
                      'example_value': '42-01'
368
                  'gesbac_id': {
369
                      'description': _('Gesbac demand identifier'),
370
                      'example_value': '420001'
366 371
                  }
367 372
              }
368 373
    )
369
    def get_response(self, request, form_id):
374
    def get_response(self, request, gesbac_id):
370 375
        try:
371 376
            response = self.form_set.filter(status='closed',
372
                                            form_id=form_id).latest()
377
                                            gesbac_id=gesbac_id).latest()
373 378
            return {'data': response.card_data}
374 379
        except Form.DoesNotExist:
375 380
            raise Http404('No response found')
......
385 390
class Form(models.Model):
386 391
    resource = models.ForeignKey(Gesbac, on_delete=models.CASCADE)
387 392
    form_id = models.CharField(max_length=64)
393
    gesbac_id = models.CharField(max_length=64)
394
    counter = models.IntegerField(default=1)
388 395
    creation_datetime = models.DateTimeField(auto_now_add=True)
389 396
    filename = models.CharField(max_length=128, null=True)
390 397
    status = models.CharField(max_length=8, default='new',
......
397 404
        get_latest_by = 'creation_datetime'
398 405

  
399 406
    def get_gesbac_id(self):
400
        return self.form_id.replace('-', '%03d' % self.id)
407
        if not self.gesbac_id:
408
            self.gesbac_id = self.form_id.replace('-', '%03d' % self.counter)
409
            self.save()
410
        return self.gesbac_id
401 411

  
402 412
    def get_filename(self):
403 413
        if not self.filename:
tests/test_gesbac.py
82 82
                                         timestamp.strftime('%y%m%d-%H%M%S'),
83 83
                                         form.get_gesbac_id())
84 84
    assert response.json['data']['filename'] == expected_filename
85
    assert response.json['data']['gesbac_id'] == '4200142'
85 86
    assert resource.form_set.filter(status='new').count() == 1
86 87
    with sftpserver.serve_content({'output': {expected_filename: 'content'}}):
87 88
        resource.jobs()
......
96 97
                                         timestamp.strftime('%y%m%d-%H%M%S'),
97 98
                                         form.get_gesbac_id())
98 99
    assert response.json['data']['filename'] == expected_filename
100
    assert response.json['data']['gesbac_id'] == '4200242'
99 101
    with sftpserver.serve_content({'output': {response.json['data']['filename']: 'content'}}):
100 102
        resource.jobs()
101 103
    assert resource.form_set.filter(status='sent').count() == 2
......
103 105

  
104 106
def test_get_demand_response(app, resource, freezer, sftpserver):
105 107
    response = app.get('/gesbac/test/get-response/',
106
                       params={'form_id': '42-43'}, status=404)
108
                       params={'gesbac_id': '42043'}, status=404)
107 109
    timestamp = now()
108 110
    payload = {
109 111
        'form_id': '42-43',
......
154 156
    assert response.card_data == ['CARTE', gesbac_id, '3', '2', '1234', '', '',
155 157
                                  '', '', '', '', '', force_text(comment, 'latin-1')]
156 158
    response = app.get('/gesbac/test/get-response/',
157
                       params={'form_id': '42-43'})
159
                       params={'gesbac_id': gesbac_id})
158 160
    assert response.json['err'] == 0
159 161
    assert response.json['data'] == ['CARTE', gesbac_id, '3', '2', '1234', '',
160 162
                                     '', '', '', '', '', '', force_text(comment, 'latin-1')]
161
-