Projet

Général

Profil

0001-astregs-forward-json-payload-as-it-is-for-associatio.patch

Serghei Mihai, 10 juillet 2019 09:02

Télécharger (12,4 ko)

Voir les différences:

Subject: [PATCH] astregs: forward json payload as it is for association
 creation (#34664)

 passerelle/apps/astregs/models.py            | 55 +++++---------------
 tests/data/astregs/TiersCreationResponse.xml |  2 +-
 tests/test_astregs.py                        | 27 +++++-----
 3 files changed, 28 insertions(+), 56 deletions(-)
passerelle/apps/astregs/models.py
15 15
# along with this program.  If not, see <http://www.gnu.org/licenses/>.
16 16

  
17 17
from zeep.helpers import serialize_object
18
import json
18 19

  
19 20
from django.db import models
20 21
from django.utils.translation import ugettext_lazy as _
......
70 71
            "type": "string",
71 72
            "required": False
72 73
        },
74
        "acronym": {
75
            "description": "acronym",
76
            "type": "string",
77
            "required": False
78
        },
73 79
        "status": {
74 80
            "description": "association status",
75 81
            "type": "string",
......
404 410
                             'text': '%s - %s' % (item.Numero_SIRET, item.Nom_enregistrement)})
405 411
        return {'data': data}
406 412

  
407
    @endpoint(perm='can_access', name='create-association',
408
              post={
409
                  'description': _('Creates an association'),
410
                  'request_body': {
411
                      'schema': {
412
                          'application/json': ASSOCIATION_SCHEMA
413
                      }
414
                  }
415
              }
413
    @endpoint(description=_('Creates an association'),
414
              perm='can_access', name='create-association',
415
              methods=['post']
416 416
    )
417
    def create_association(self, request, post_data):
418
        tiers = {'Financier': post_data.get('financial', False),
419
                 'CodeFamille': post_data['family_code'],
420
                 'CatTiers': post_data['category'],
421
                 'NomEnregistrement': post_data['name'],
422
                 'Organisme': post_data.get('organism', 'CG06'), # defaults to CG06
423
                 'NumeroSiret': post_data['siren'],
424
                 'NumeroSiretFin': post_data['nic'],
425
                 # can be D (débiteur), F (fournisseur) or * (both)
426
                 'Type': post_data.get('type', '*'),
427
                 'StatutTiers': post_data.get('status', 'PROPOSE'),
428
                 'AdresseIsAdresseDeFacturation': True,
429
                 'AdresseIsAdresseDeCommande': True,
430
                 'AdresseTitre': 'AdressePrincipale',
431
                 'AdresseDestinataire': post_data['name'],
432
                 'AdresseLibelleRue': post_data['address']
433

  
434
        }
435
        optional_attributes = {
436
            'address_complement': 'AdresseComplementVoie',
437
            'zipcode': 'AdresseCodePostal',
438
            'city': 'Libelle_Postale',
439
            'country': 'AdresseLibellePays',
440
            'email': 'Mail',
441
            'website': 'SiteWeb',
442
            'contact_id': 'EncodeKeyContact',
443
            'comment': 'Commentaire'
444
        }
445
        for param, attribute in optional_attributes.items():
446
            if post_data.get(param):
447
                tiers[attribute] = post_data[param]
448

  
417
    def create_association(self, request):
418
        payload = json.loads(request.body)
449 419
        client = self.get_client('Tiers')
450 420
        r = client.service.Creation({'Authentification': self.authentication,
451 421
                                     'Contexte': self.context,
452
                                     'Tiers': tiers})
453

  
422
                                     'Tiers': payload})
454 423
        return {'data': serialize_object(r)}
455 424

  
456 425
    @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'
199 201
    }
200 202
    mocked_post.return_value = mock.Mock(content=tiers_creation_response, status_code=200,
201 203
                                         headers={'Content-Type': 'text/xml'})
......
214 216
    assert data['Type'] == '*'
215 217
    assert data['AdresseTitre'] == 'AdressePrincipale'
216 218
    assert data['AdresseLibelleRue'] == force_text('169, rue du Château')
219
    assert data['Sigle'] == 'EO'
217 220

  
218 221
    mocked_post.return_value = mock.Mock(content=tiers_creation_error_response,
219 222
                                         status_code=500, headers={'Content-Type': 'text/xml'})
220
-