0001-astregs-forward-json-payload-as-it-is-for-associatio.patch
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 |
- |