Projet

Général

Profil

0001-astregs-update-payload-params-names-for-association-.patch

Serghei Mihai, 11 juillet 2019 11:29

Télécharger (15,2 ko)

Voir les différences:

Subject: [PATCH] astregs: update payload params names for association creation
 (#34664)

 passerelle/apps/astregs/models.py            | 126 +++++--------------
 tests/data/astregs/TiersCreationResponse.xml |   2 +-
 tests/test_astregs.py                        |  32 +++--
 3 files changed, 52 insertions(+), 108 deletions(-)
passerelle/apps/astregs/models.py
32 32
    "description": "",
33 33
    "type": "object",
34 34
    "properties": {
35
        "family_code": {
36
            "description": "association family code",
35
        "Financier": {
36
            "description": "financial association",
37 37
            "type": "string",
38
            "required": True
38
            "required": True,
39
            "enum": ["true", "false"]
39 40
        },
40
        "category": {
41
        "CodeFamille": {
41 42
            "description": "association family code",
42 43
            "type": "string",
43 44
            "required": True
44 45
        },
45
        "name": {
46
            "description": "association name",
47
            "type": "string",
48
            "required": True
49
        },
50
        "siren": {
51
            "description": "SIREN number",
46
        "CatTiers": {
47
            "description": "association category",
52 48
            "type": "string",
53 49
            "required": True
54 50
        },
55
        "nic": {
56
            "description": "NIC number",
51
        "NomEnregistrement": {
52
            "description": "association name",
57 53
            "type": "string",
58 54
            "required": True
59 55
        },
60
        "organism": {
61
            "description": "association organism",
62
            "type": "string",
63
            "required": False
64
        },
65
        "financial": {
66
            "description": "financial association",
67
            "type": "bool",
68
            "required": False,
69
        },
70
        "type": {
71
            "description": "association type",
72
            "type": "string",
73
            "required": False
74
        },
75
        "status": {
56
        "StatutTiers": {
76 57
            "description": "association status",
77 58
            "type": "string",
78
            "required": False,
59
            "required": True,
79 60
            "enum": ["PROPOSE", "VALIDE", "REFUSE", "BLOQUE", "A COMPLETER"]
80 61
        },
81
        "address": {
82
            "description": "association address",
83
            "type": "string",
84
            "required": True
85
        },
86
        "address_complement": {
87
            "description": "association address complement",
88
            "type": "string",
89
            "required": False
90
        },
91
        "zipcode": {
92
            "description": "association address zipcode",
93
            "type": "string",
94
            "required": False
95
        },
96
        "city": {
97
            "description": "association city",
62
        "Type": {
63
            "description": "association type",
98 64
            "type": "string",
99
            "required": False
65
            "required": True,
66
            "enum": ["D", "F", "*"]
100 67
        },
101
        "country": {
102
            "description": "association address zipcode",
68
        "NumeroSiret": {
69
            "description": "SIREN number",
103 70
            "type": "string",
104
            "required": False
71
            "required": True
105 72
        },
106
        "email": {
107
            "description": "association email",
73
        "NumeroSiretFin": {
74
            "description": "NIC number",
108 75
            "type": "string",
109
            "required": False
76
            "required": True
110 77
        },
111
        "website": {
112
            "description": "association website",
78
        "AdresseTitre": {
113 79
            "type": "string",
114
            "required": False
80
            "required": True
115 81
        },
116
        "comment": {
117
            "description": "comment for association",
82
        "AdresseIsAdresseDeCommande": {
118 83
            "type": "string",
119
            "required": False
84
            "required": True,
85
            "enum": ["true", "false"]
120 86
        },
121
        "contact_id": {
122
            "description": "association contact id",
87
        "AdresseIsAdresseDeFacturation": {
123 88
            "type": "string",
124
            "required": False
89
            "required": True,
90
            "enum": ["true", "false"]
125 91
        }
126 92
    }
127 93
}
......
415 381
                             'text': '%s - %s' % (item.Numero_SIRET, item.Nom_enregistrement)})
416 382
        return {'data': data}
417 383

  
384

  
418 385
    @endpoint(perm='can_access', name='create-association',
419 386
              post={
420 387
                  'description': _('Creates an association'),
......
426 393
              }
427 394
    )
428 395
    def create_association(self, request, post_data):
429
        tiers = {'Financier': post_data.get('financial', False),
430
                 'CodeFamille': post_data['family_code'],
431
                 'CatTiers': post_data['category'],
432
                 'NomEnregistrement': post_data['name'],
433
                 'Organisme': post_data.get('organism', 'CG06'), # defaults to CG06
434
                 'NumeroSiret': post_data['siren'],
435
                 'NumeroSiretFin': post_data['nic'],
436
                 # can be D (débiteur), F (fournisseur) or * (both)
437
                 'Type': post_data.get('type', '*'),
438
                 'StatutTiers': post_data.get('status', 'PROPOSE'),
439
                 'AdresseIsAdresseDeFacturation': True,
440
                 'AdresseIsAdresseDeCommande': True,
441
                 'AdresseTitre': 'AdressePrincipale',
442
                 'AdresseDestinataire': post_data['name'],
443
                 'AdresseLibelleRue': post_data['address']
444

  
445
        }
446
        optional_attributes = {
447
            'address_complement': 'AdresseComplementVoie',
448
            'zipcode': 'AdresseCodePostal',
449
            'city': 'Libelle_Postale',
450
            'country': 'AdresseLibellePays',
451
            'email': 'Mail',
452
            'website': 'SiteWeb',
453
            'contact_id': 'EncodeKeyContact',
454
            'comment': 'Commentaire'
455
        }
456
        for param, attribute in optional_attributes.items():
457
            if post_data.get(param):
458
                tiers[attribute] = post_data[param]
459

  
460
        r = self.call('Tiers', 'Creation', Tiers=tiers)
396
        r = self.call('Tiers', 'Creation', Tiers=post_data)
461 397
        return {'data': serialize_object(r)}
462 398

  
463 399
    @endpoint(description=_('Get association informations'),
tests/data/astregs/TiersCreationResponse.xml
1
<?xml version='1.0' encoding='utf-8'?><soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"><soapenv:Body><ns1:creationResponse xmlns:ns1="http://gfi.astre.webservices/gf/tiers"><ns1:response><ns1:TiersReturn><ns1:Financier>false</ns1:Financier><ns1:CodeTiers>487464</ns1:CodeTiers><ns1:CodeFamille>51</ns1:CodeFamille><ns1:CatTiers>42</ns1:CatTiers><ns1:CodeCivilite></ns1:CodeCivilite><ns1:NomEnregistrement>My association</ns1:NomEnregistrement><ns1:Nom></ns1:Nom><ns1:Prenom></ns1:Prenom><ns1:Sigle></ns1:Sigle><ns1:Organisme>CG06</ns1:Organisme><ns1:RaisonSociale3></ns1:RaisonSociale3><ns1:RaisonSociale4></ns1:RaisonSociale4><ns1:RaisonSociale5></ns1:RaisonSociale5><ns1:RaisonSociale6></ns1:RaisonSociale6><ns1:LibelleCourrier></ns1:LibelleCourrier><ns1:EncodeKeyNatjur></ns1:EncodeKeyNatjur><ns1:CodeAPE></ns1:CodeAPE><ns1:NumeroSiret>112233445</ns1:NumeroSiret><ns1:NumeroSiretFin>00024</ns1:NumeroSiretFin><ns1:Commentaire></ns1:Commentaire><ns1:AdresseDestinataire>My association</ns1:AdresseDestinataire><ns1:AdresseTitre>AdressePrincipale</ns1:AdresseTitre><ns1:IdentifiantAdresse>785772</ns1:IdentifiantAdresse><ns1:AdresseIsAdresseDeFacturation>false</ns1:AdresseIsAdresseDeFacturation><ns1:AdresseIsAdresseDeCommande>false</ns1:AdresseIsAdresseDeCommande><ns1:AdresseComplementDestinataire></ns1:AdresseComplementDestinataire><ns1:AdresseComplementaire></ns1:AdresseComplementaire><ns1:AdresseLibelleRue>169, rue du Château</ns1:AdresseLibelleRue><ns1:AdresseComplementVoie></ns1:AdresseComplementVoie><ns1:AdresseCodePostal>75014</ns1:AdresseCodePostal><ns1:AdresseBureauDistributeur></ns1:AdresseBureauDistributeur><ns1:AdresseCodePays></ns1:AdresseCodePays><ns1:AdresseLibellePays>France</ns1:AdresseLibellePays><ns1:NumeroTelephone></ns1:NumeroTelephone><ns1:NumeroFax></ns1:NumeroFax><ns1:Mail>foo@example.com</ns1:Mail><ns1:SiteWeb>http://example.com</ns1:SiteWeb><ns1:CodeTiersReprise></ns1:CodeTiersReprise><ns1:StatutTiers>PROPOSE</ns1:StatutTiers><ns1:Type>*</ns1:Type><ns1:Permanent>false</ns1:Permanent><ns1:IndSeuil>false</ns1:IndSeuil><ns1:DelaiSuiviFacture>0</ns1:DelaiSuiviFacture><ns1:Remise>0,00</ns1:Remise><ns1:DeclarationFiscale>false</ns1:DeclarationFiscale><ns1:IndicateurTiersSubrogatoire>false</ns1:IndicateurTiersSubrogatoire><ns1:ValeurIdentifiant0></ns1:ValeurIdentifiant0><ns1:ValeurIdentifiant1></ns1:ValeurIdentifiant1><ns1:ValeurIdentifiant2></ns1:ValeurIdentifiant2><ns1:ValeurIdentifiant3></ns1:ValeurIdentifiant3><ns1:ValeurIdentifiant4></ns1:ValeurIdentifiant4><ns1:ValeurIdentifiant5></ns1:ValeurIdentifiant5><ns1:ValeurIdentifiant6></ns1:ValeurIdentifiant6><ns1:ValeurIdentifiant7></ns1:ValeurIdentifiant7><ns1:ValeurIdentifiant8></ns1:ValeurIdentifiant8><ns1:ValeurIdentifiant9></ns1:ValeurIdentifiant9><ns1:NoDeclarationPref></ns1:NoDeclarationPref><ns1:TiersContactId></ns1:TiersContactId><ns1:EncodeKeyContact>4242</ns1:EncodeKeyContact><ns1:EncodeKeyFonction></ns1:EncodeKeyFonction><ns1:LibelleFonction></ns1:LibelleFonction><ns1:DateDebutFonction></ns1:DateDebutFonction><ns1:DateFinFonction></ns1:DateFinFonction></ns1:TiersReturn></ns1:response></ns1:creationResponse></soapenv:Body></soapenv:Envelope>
1
<?xml version='1.0' encoding='utf-8'?><soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"><soapenv:Body><ns1:creationResponse xmlns:ns1="http://gfi.astre.webservices/gf/tiers"><ns1:response><ns1:TiersReturn><ns1:Financier>false</ns1:Financier><ns1:CodeTiers>487464</ns1:CodeTiers><ns1:CodeFamille>51</ns1:CodeFamille><ns1:CatTiers>42</ns1:CatTiers><ns1:CodeCivilite></ns1:CodeCivilite><ns1:NomEnregistrement>My association</ns1:NomEnregistrement><ns1:Nom></ns1:Nom><ns1:Prenom></ns1:Prenom><ns1:Sigle>EO</ns1:Sigle><ns1:Organisme>CG06</ns1:Organisme><ns1:RaisonSociale3></ns1:RaisonSociale3><ns1:RaisonSociale4></ns1:RaisonSociale4><ns1:RaisonSociale5></ns1:RaisonSociale5><ns1:RaisonSociale6></ns1:RaisonSociale6><ns1:LibelleCourrier></ns1:LibelleCourrier><ns1:EncodeKeyNatjur></ns1:EncodeKeyNatjur><ns1:CodeAPE></ns1:CodeAPE><ns1:NumeroSiret>112233445</ns1:NumeroSiret><ns1:NumeroSiretFin>00024</ns1:NumeroSiretFin><ns1:Commentaire></ns1:Commentaire><ns1:AdresseDestinataire>My association</ns1:AdresseDestinataire><ns1:AdresseTitre>AdressePrincipale</ns1:AdresseTitre><ns1:IdentifiantAdresse>785772</ns1:IdentifiantAdresse><ns1:AdresseIsAdresseDeFacturation>false</ns1:AdresseIsAdresseDeFacturation><ns1:AdresseIsAdresseDeCommande>false</ns1:AdresseIsAdresseDeCommande><ns1:AdresseComplementDestinataire></ns1:AdresseComplementDestinataire><ns1:AdresseComplementaire></ns1:AdresseComplementaire><ns1:AdresseLibelleRue>169, rue du Château</ns1:AdresseLibelleRue><ns1:AdresseComplementVoie></ns1:AdresseComplementVoie><ns1:AdresseCodePostal>75014</ns1:AdresseCodePostal><ns1:AdresseBureauDistributeur></ns1:AdresseBureauDistributeur><ns1:AdresseCodePays></ns1:AdresseCodePays><ns1:AdresseLibellePays>France</ns1:AdresseLibellePays><ns1:NumeroTelephone></ns1:NumeroTelephone><ns1:NumeroFax></ns1:NumeroFax><ns1:Mail>foo@example.com</ns1:Mail><ns1:SiteWeb>http://example.com</ns1:SiteWeb><ns1:CodeTiersReprise></ns1:CodeTiersReprise><ns1:StatutTiers>PROPOSE</ns1:StatutTiers><ns1:Type>*</ns1:Type><ns1:Permanent>false</ns1:Permanent><ns1:IndSeuil>false</ns1:IndSeuil><ns1:DelaiSuiviFacture>0</ns1:DelaiSuiviFacture><ns1:Remise>0,00</ns1:Remise><ns1:DeclarationFiscale>false</ns1:DeclarationFiscale><ns1:IndicateurTiersSubrogatoire>false</ns1:IndicateurTiersSubrogatoire><ns1:ValeurIdentifiant0></ns1:ValeurIdentifiant0><ns1:ValeurIdentifiant1></ns1:ValeurIdentifiant1><ns1:ValeurIdentifiant2></ns1:ValeurIdentifiant2><ns1:ValeurIdentifiant3></ns1:ValeurIdentifiant3><ns1:ValeurIdentifiant4></ns1:ValeurIdentifiant4><ns1:ValeurIdentifiant5></ns1:ValeurIdentifiant5><ns1:ValeurIdentifiant6></ns1:ValeurIdentifiant6><ns1:ValeurIdentifiant7></ns1:ValeurIdentifiant7><ns1:ValeurIdentifiant8></ns1:ValeurIdentifiant8><ns1:ValeurIdentifiant9></ns1:ValeurIdentifiant9><ns1:NoDeclarationPref></ns1:NoDeclarationPref><ns1:TiersContactId></ns1:TiersContactId><ns1:EncodeKeyContact>4242</ns1:EncodeKeyContact><ns1:EncodeKeyFonction></ns1:EncodeKeyFonction><ns1:LibelleFonction></ns1:LibelleFonction><ns1:DateDebutFonction></ns1:DateDebutFonction><ns1:DateFinFonction></ns1:DateFinFonction></ns1:TiersReturn></ns1:response></ns1:creationResponse></soapenv:Body></soapenv:Envelope>
tests/test_astregs.py
184 184
@mock.patch('passerelle.utils.Request.post')
185 185
def test_association_creation(mocked_post, mocked_get, tiers_creation_response,
186 186
                              tiers_creation_error_response, connector, app):
187
    payload = {'family_code': '51',
188
               'category': '42',
189
               'name': 'My association',
190
               'siren': '112233445',
191
               'nic': '00024',
192
               'address': '169, rue du Château',
193
               'zipcode': '75014',
194
               'city': 'Paris',
195
               'country': 'France',
196
               'email': 'foo@example.com',
197
               'website': 'http://example.com',
198
               'contact_id': '4242'
187
    payload = {
188
        'CodeFamille': '51',
189
        'CatTiers': '42',
190
        'EncodeKeyContact': '4242',
191
        'Sigle': 'EO',
192
        'NomEnregistrement': 'My association',
193
        'Organisme': 'CG06',
194
        'NumeroSiret': '112233445',
195
        'NumeroSiretFin': '00024',
196
        'StatutTiers': 'PROPOSE',
197
        'Type': '*',
198
        'AdresseTitre': 'AdressePrincipale',
199
        'AdresseLibelleRue': '169, rue du Château',
200
        'Sigle': 'EO',
201
        'Financier': 'true',
202
        'AdresseIsAdresseDeFacturation': 'false',
203
        'AdresseIsAdresseDeCommande': 'false'
199 204
    }
200 205
    mocked_post.return_value = mock.Mock(content=tiers_creation_response, status_code=200,
201 206
                                         headers={'Content-Type': 'text/xml'})
......
214 219
    assert data['Type'] == '*'
215 220
    assert data['AdresseTitre'] == 'AdressePrincipale'
216 221
    assert data['AdresseLibelleRue'] == force_text('169, rue du Château')
222
    assert data['Sigle'] == 'EO'
223
    assert data['AdresseIsAdresseDeCommande'] == 'false'
224
    assert data['AdresseIsAdresseDeFacturation'] == 'false'
217 225

  
218 226
    mocked_post.return_value = mock.Mock(content=tiers_creation_error_response,
219 227
                                         status_code=500,
220
-