toulouse-maelis: ajouter 2 nouveaux champs sur la profession dans le DUI (#74195) #91

Merged
nroche merged 3 commits from wip/74195-parsifal-dui-add-profesion-fields into main 2023-02-09 17:38:42 +01:00
9 changed files with 233 additions and 23 deletions

View File

@ -296,6 +296,14 @@ PROFESSION_SCHEMA = {
'description': 'Téléphone',
'oneOf': [{'type': 'string'}, {'type': 'null'}],
},
'situation': {
'description': 'Code de la situation professionnelle (depuis référentiel)',
'oneOf': [{'type': 'string'}, {'type': 'null'}],
},
'weeklyHours': {
'description': "horaires de travail hebdomadaire",
'oneOf': [{'type': 'string'}, {'type': 'null'}],
},
'addressPro': ADDRESSPROF_SCHEMA,
},
}

View File

@ -140,6 +140,7 @@ class ToulouseMaelis(BaseResource, HTTPResource):
'Document',
'Organ',
'PAI',
'ProfessionalSituation',
'Quality',
'Quotient',
'RLIndicator',
@ -330,6 +331,7 @@ class ToulouseMaelis(BaseResource, HTTPResource):
self.add_text_value('Complement', data, ['adresse', 'numComp'])
self.add_text_value('Street', data, ['adresse', 'idStreet'])
self.add_text_value('CSP', data, ['profession', 'codeCSP'])
self.add_text_value('ProfessionalSituation', data, ['profession', 'situation'])
self.add_text_value('Organ', data, ['CAFInfo', 'organ'])
for indicator in data['indicatorList']:
self.add_text_value_to_rl_indicator(indicator)
@ -480,6 +482,9 @@ class ToulouseMaelis(BaseResource, HTTPResource):
self.assert_post_data_in_referential(
'CSP', post_data, keys + ['profession', 'codeCSP'], required=False
)
self.assert_post_data_in_referential(
'ProfessionalSituation', post_data, keys + ['profession', 'situation'], required=False
)
self.assert_post_data_in_referential('Organ', post_data, keys + ['CAFInfo', 'organ'], required=False)
data = post_data
@ -703,7 +708,22 @@ class ToulouseMaelis(BaseResource, HTTPResource):
@endpoint(
display_category='Famille',
description='lister les qualités du référenciel',
description="Lister les situations professionnelles",
name='read-professional-situation-list',
perm='can_access',
parameters={
'id': {'description': 'Identifiant de lenregistrement'},
'q': {'description': 'Recherche en texte intégral'},
'limit': {'description': 'Nombre maximal de résultats; doit être inférieur à 20.'},
'distinct': {'description': 'Supression des doublons'},
},
)
def read_professional_situation_list(self, request, id=None, q=None, limit=None, distinct=True):
return {'data': self.get_referential('ProfessionalSituation', id, q, limit, distinct)}
@endpoint(
display_category='Famille',
description='lister les qualités',
name='read-quality-list',
perm='can_access',
parameters={

View File

@ -59,12 +59,16 @@
<xs:element name="readFamilyByPassword" type="tns:readFamilyByPassword"/>
<xs:element name="readFamilyByPasswordResponse" type="tns:readFamilyByPasswordResponse"/>
<xs:element name="readFamilyList" type="tns:readFamilyList"/>
<xs:element name="readFamilyListFromFullName" type="tns:readFamilyListFromFullName"/>
<xs:element name="readFamilyListFromFullNameResponse" type="tns:readFamilyListFromFullNameResponse"/>
<xs:element name="readFamilyListResponse" type="tns:readFamilyListResponse"/>
<xs:element name="readFamilyResponse" type="tns:readFamilyResponse"/>
<xs:element name="readOrganList" type="tns:readOrganList"/>
<xs:element name="readOrganListResponse" type="tns:readOrganListResponse"/>
<xs:element name="readPAIList" type="tns:readPAIList"/>
<xs:element name="readPAIListResponse" type="tns:readPAIListResponse"/>
<xs:element name="readProfessionalSituationList" type="tns:readProfessionalSituationList"/>
<xs:element name="readProfessionalSituationListResponse" type="tns:readProfessionalSituationListResponse"/>
<xs:element name="readQualityList" type="tns:readQualityList"/>
<xs:element name="readQualityListResponse" type="tns:readQualityListResponse"/>
<xs:element name="readQuotientList" type="tns:readQuotientList"/>
@ -109,6 +113,14 @@
<xs:element maxOccurs="unbounded" minOccurs="0" name="itemList" type="ns1:itemBean"/>
</xs:sequence>
</xs:complexType>
<xs:complexType name="readProfessionalSituationList">
<xs:sequence/>
</xs:complexType>
<xs:complexType name="readProfessionalSituationListResponse">
<xs:sequence>
<xs:element maxOccurs="unbounded" minOccurs="0" name="itemList" type="ns1:itemBean"/>
</xs:sequence>
</xs:complexType>
<xs:complexType name="readFamily">
<xs:sequence>
<xs:element name="dossierNumber" type="xs:int"/>
@ -536,6 +548,16 @@
<xs:complexType name="updateChildAutorizationResponse">
<xs:sequence/>
</xs:complexType>
<xs:complexType name="readFamilyListFromFullName">
<xs:sequence>
<xs:element minOccurs="0" name="fullname" type="xs:string"/>
</xs:sequence>
</xs:complexType>
<xs:complexType name="readFamilyListFromFullNameResponse">
<xs:sequence>
<xs:element maxOccurs="unbounded" minOccurs="0" name="familyBeanList" type="tns:familyBean"/>
</xs:sequence>
</xs:complexType>
<xs:complexType name="subscribeSchool">
<xs:sequence>
<xs:element name="subcribeSchoolRequestBean" type="ns2:subscribeSchoolRequestBean"/>
@ -800,15 +822,6 @@
<xs:enumeration value="CHOICE"/>
</xs:restriction>
</xs:simpleType>
<xs:simpleType name="subscribeAction">
<xs:restriction base="xs:string">
<xs:enumeration value="ADD_SUBSCRIBE"/>
<xs:enumeration value="DELETE_SUBSCRIBE"/>
<xs:enumeration value="UPDATE_SUBSCRIBE_DOSS"/>
<xs:enumeration value="ADD_DEROG"/>
<xs:enumeration value="COMPLETE_DEROG_DOSS"/>
</xs:restriction>
</xs:simpleType>
<xs:simpleType name="levelCode">
<xs:restriction base="xs:string">
<xs:enumeration value="SCHOOL"/>
@ -826,6 +839,15 @@
<xs:enumeration value="PERSON"/>
</xs:restriction>
</xs:simpleType>
<xs:simpleType name="subscribeAction">
<xs:restriction base="xs:string">
<xs:enumeration value="ADD_SUBSCRIBE"/>
<xs:enumeration value="DELETE_SUBSCRIBE"/>
<xs:enumeration value="UPDATE_SUBSCRIBE_DOSS"/>
<xs:enumeration value="ADD_DEROG"/>
<xs:enumeration value="COMPLETE_DEROG_DOSS"/>
</xs:restriction>
</xs:simpleType>
<xs:element name="MaelisFamilyException" type="tns:MaelisFamilyException"/>
<xs:complexType name="MaelisFamilyException">
<xs:sequence>
@ -918,6 +940,8 @@
<xs:element minOccurs="0" name="employerName" type="xs:string"/>
<xs:element minOccurs="0" name="phone" type="xs:string"/>
<xs:element minOccurs="0" name="addressPro" type="tns:addressProfBean"/>
<xs:element minOccurs="0" name="situation" type="xs:string"/>
<xs:element minOccurs="0" name="weeklyHours" type="xs:string"/>
</xs:sequence>
</xs:complexType>
@ -1541,6 +1565,10 @@
<wsdl:part element="tns:readQuotientList" name="parameters">
</wsdl:part>
</wsdl:message>
<wsdl:message name="readProfessionalSituationList">
<wsdl:part element="tns:readProfessionalSituationList" name="parameters">
</wsdl:part>
</wsdl:message>
<wsdl:message name="presubscribeSchoolSiblingResponse">
<wsdl:part element="tns:presubscribeSchoolSiblingResponse" name="parameters">
</wsdl:part>
@ -1573,6 +1601,10 @@
<wsdl:part element="tns:isChildExistsResponse" name="parameters">
</wsdl:part>
</wsdl:message>
<wsdl:message name="readProfessionalSituationListResponse">
<wsdl:part element="tns:readProfessionalSituationListResponse" name="parameters">
</wsdl:part>
</wsdl:message>
<wsdl:message name="updateChildMedicalRecord">
<wsdl:part element="tns:updateChildMedicalRecord" name="parameters">
</wsdl:part>
@ -1741,6 +1773,10 @@
<wsdl:part element="tns:readStreetList" name="parameters">
</wsdl:part>
</wsdl:message>
<wsdl:message name="readFamilyListFromFullNameResponse">
<wsdl:part element="tns:readFamilyListFromFullNameResponse" name="parameters">
</wsdl:part>
</wsdl:message>
<wsdl:message name="updateFamilyEmergencyPersonListResponse">
<wsdl:part element="tns:updateFamilyEmergencyPersonListResponse" name="parameters">
</wsdl:part>
@ -1865,6 +1901,10 @@
<wsdl:part element="tns:createOrUpdateFSLResponse" name="parameters">
</wsdl:part>
</wsdl:message>
<wsdl:message name="readFamilyListFromFullName">
<wsdl:part element="tns:readFamilyListFromFullName" name="parameters">
</wsdl:part>
</wsdl:message>
<wsdl:message name="updateFamilySituationResponse">
<wsdl:part element="tns:updateFamilySituationResponse" name="parameters">
</wsdl:part>
@ -1935,6 +1975,15 @@
<wsdl:fault message="tns:MaelisFamilyException" name="MaelisFamilyException">
</wsdl:fault>
</wsdl:operation>
<wsdl:operation name="readProfessionalSituationList">
<wsdl:documentation>[REF] Renvoie la liste des situations professionnelles</wsdl:documentation>
<wsdl:input message="tns:readProfessionalSituationList" name="readProfessionalSituationList">
</wsdl:input>
<wsdl:output message="tns:readProfessionalSituationListResponse" name="readProfessionalSituationListResponse">
</wsdl:output>
<wsdl:fault message="tns:MaelisFamilyException" name="MaelisFamilyException">
</wsdl:fault>
</wsdl:operation>
<wsdl:operation name="readFamily">
<wsdl:documentation>Renvoie les données de la famille
@ -2252,7 +2301,7 @@
<wsdl:documentation>Renvoie la liste des dossiers famille
-------------------------
Retourne les informations relatives aux familles correspond aux critères</wsdl:documentation>
Retourne les informations relatives aux familles correspondant aux critères</wsdl:documentation>
<wsdl:input message="tns:readFamilyList" name="readFamilyList">
</wsdl:input>
<wsdl:output message="tns:readFamilyListResponse" name="readFamilyListResponse">
@ -2379,6 +2428,18 @@ L'enfant est inscrit pour l'année scolaire et le niveau passé en paramètre :
<wsdl:fault message="tns:MaelisFamilyException" name="MaelisFamilyException">
</wsdl:fault>
</wsdl:operation>
<wsdl:operation name="readFamilyListFromFullName">
<wsdl:documentation>Renvoie la liste des dossiers famille
-------------------------
Retourne les informations relatives aux familles correspondant au critère</wsdl:documentation>
<wsdl:input message="tns:readFamilyListFromFullName" name="readFamilyListFromFullName">
</wsdl:input>
<wsdl:output message="tns:readFamilyListFromFullNameResponse" name="readFamilyListFromFullNameResponse">
</wsdl:output>
<wsdl:fault message="tns:MaelisFamilyException" name="MaelisFamilyException">
</wsdl:fault>
</wsdl:operation>
<wsdl:operation name="subscribeSchool">
<wsdl:documentation>Ajoute une inscription scolaire pour un enfant
@ -2862,6 +2923,18 @@ Cette méthode permet de mettre à jour les informations relatives au PAI pour u
<soap:fault name="MaelisFamilyException" use="literal"/>
</wsdl:fault>
</wsdl:operation>
<wsdl:operation name="readProfessionalSituationList">
<soap:operation soapAction="" style="document"/>
<wsdl:input name="readProfessionalSituationList">
<soap:body use="literal"/>
</wsdl:input>
<wsdl:output name="readProfessionalSituationListResponse">
<soap:body use="literal"/>
</wsdl:output>
<wsdl:fault name="MaelisFamilyException">
<soap:fault name="MaelisFamilyException" use="literal"/>
</wsdl:fault>
</wsdl:operation>
<wsdl:operation name="readFamily">
<soap:operation soapAction="" style="document"/>
<wsdl:input name="readFamily">
@ -2934,18 +3007,6 @@ Cette méthode permet de mettre à jour les informations relatives au PAI pour u
<soap:fault name="MaelisFamilyException" use="literal"/>
</wsdl:fault>
</wsdl:operation>
<wsdl:operation name="addChildVaccinList">
<soap:operation soapAction="" style="document"/>
<wsdl:input name="addChildVaccinList">
<soap:body use="literal"/>
</wsdl:input>
<wsdl:output name="addChildVaccinListResponse">
<soap:body use="literal"/>
</wsdl:output>
<wsdl:fault name="MaelisFamilyException">
<soap:fault name="MaelisFamilyException" use="literal"/>
</wsdl:fault>
</wsdl:operation>
<wsdl:operation name="updateFamilyEmergencyPersonList">
<soap:operation soapAction="" style="document"/>
<wsdl:input name="updateFamilyEmergencyPersonList">
@ -2958,6 +3019,18 @@ Cette méthode permet de mettre à jour les informations relatives au PAI pour u
<soap:fault name="MaelisFamilyException" use="literal"/>
</wsdl:fault>
</wsdl:operation>
<wsdl:operation name="addChildVaccinList">
<soap:operation soapAction="" style="document"/>
<wsdl:input name="addChildVaccinList">
<soap:body use="literal"/>
</wsdl:input>
<wsdl:output name="addChildVaccinListResponse">
<soap:body use="literal"/>
</wsdl:output>
<wsdl:fault name="MaelisFamilyException">
<soap:fault name="MaelisFamilyException" use="literal"/>
</wsdl:fault>
</wsdl:operation>
<wsdl:operation name="updateCoordinate">
<soap:operation soapAction="" style="document"/>
<wsdl:input name="updateCoordinate">
@ -3198,6 +3271,18 @@ Cette méthode permet de mettre à jour les informations relatives au PAI pour u
<soap:fault name="MaelisFamilyException" use="literal"/>
</wsdl:fault>
</wsdl:operation>
<wsdl:operation name="readFamilyListFromFullName">
<soap:operation soapAction="" style="document"/>
<wsdl:input name="readFamilyListFromFullName">
<soap:body use="literal"/>
</wsdl:input>
<wsdl:output name="readFamilyListFromFullNameResponse">
<soap:body use="literal"/>
</wsdl:output>
<wsdl:fault name="MaelisFamilyException">
<soap:fault name="MaelisFamilyException" use="literal"/>
</wsdl:fault>
</wsdl:operation>
<wsdl:operation name="subscribeSchool">
<soap:operation soapAction="" style="document"/>
<wsdl:input name="subscribeSchool">

View File

@ -92,6 +92,8 @@
<addressPro>
<town>Orl&#233;ans</town>
</addressPro>
<situation>01</situation>
<weeklyHours>9h-18h</weeklyHours>
</profession>
<CAFInfo>
<number>789</number>

View File

@ -92,6 +92,8 @@
<addressPro>
<town>Orl&#233;ans</town>
</addressPro>
<situation>01</situation>
<weeklyHours>9h-18h</weeklyHours>
</profession>
<CAFInfo>
<number>789</number>

View File

@ -92,6 +92,8 @@
<addressPro>
<town>Orl&#233;ans</town>
</addressPro>
<situation>01</situation>
<weeklyHours>9h-18h</weeklyHours>
</profession>
<CAFInfo>
<number>789</number>

View File

@ -76,6 +76,8 @@
<addressPro>
<town>Orl&#233;ans</town>
</addressPro>
<situation>01</situation>
<weeklyHours>9h-18h</weeklyHours>
</profession>
<CAFInfo>
<number>789</number>

View File

@ -0,0 +1,34 @@
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
<soap:Body>
<ns2:readProfessionalSituationListResponse xmlns:ns2="family.ws.maelis.sigec.com">
<itemList>
<code>01</code>
<libelle>Activité professionnelle</libelle>
</itemList>
<itemList>
<code>06</code>
<libelle>Autre</libelle>
</itemList>
<itemList>
<code>05</code>
<libelle>Congé parental</libelle>
</itemList>
<itemList>
<code>04</code>
<libelle>Etudiant</libelle>
</itemList>
<itemList>
<code>03</code>
<libelle>Formation</libelle>
</itemList>
<itemList>
<code>07</code>
<libelle>Intérim</libelle>
</itemList>
<itemList>
<code>02</code>
<libelle>Recherche d'emploi</libelle>
</itemList>
</ns2:readProfessionalSituationListResponse>
</soap:Body>
</soap:Envelope>

View File

@ -172,6 +172,9 @@ def django_db_setup(django_db_setup, django_db_blocker):
soap_mock.add_soap_response('readDocumentList', get_xml_file('R_read_document_list.xml'))
soap_mock.add_soap_response('readOrganList', get_xml_file('R_read_organ_list.xml'))
soap_mock.add_soap_response('readPAIList', get_xml_file('R_read_pai_list.xml'))
soap_mock.add_soap_response(
'readProfessionalSituationList', get_xml_file('R_read_professional_situation_list.xml')
)
soap_mock.add_soap_response('readQualityList', get_xml_file('R_read_quality_list.xml'))
soap_mock.add_soap_response('readQuotientList', get_xml_file('R_read_quotient_list.xml'))
soap_mock.add_soap_response('readRLIndicatorList', get_xml_file('R_read_rl_indicator_list.xml'))
@ -393,6 +396,7 @@ def test_cron(db):
'Nursery',
'Organ',
'PAI',
'ProfessionalSituation',
'Quality',
'Quotient',
'RLIndicator',
@ -659,6 +663,21 @@ def test_read_pai_list(con, app):
]
def test_read_professiona_situation_list(con, app):
url = get_endpoint('read-professional-situation-list')
resp = app.get(url)
assert resp.json['err'] == 0
assert resp.json['data'] == [
{'id': '01', 'code': '01', 'text': 'Activité professionnelle', 'libelle': 'Activité professionnelle'},
{'id': '06', 'code': '06', 'text': 'Autre', 'libelle': 'Autre'},
{'id': '05', 'code': '05', 'text': 'Congé parental', 'libelle': 'Congé parental'},
{'id': '04', 'code': '04', 'text': 'Etudiant', 'libelle': 'Etudiant'},
{'id': '03', 'code': '03', 'text': 'Formation', 'libelle': 'Formation'},
{'id': '07', 'code': '07', 'text': 'Intérim', 'libelle': 'Intérim'},
{'id': '02', 'code': '02', 'text': "Recherche d'emploi", 'libelle': "Recherche d'emploi"},
]
def test_read_quality_list(con, app):
url = get_endpoint('read-quality-list')
resp = app.get(url)
@ -1306,6 +1325,9 @@ def test_read_rl2(family_service, con, app):
'phone': '0123456789',
'addressPro': {'num': None, 'street': None, 'zipcode': None, 'town': 'Orléans'},
'codeCSP_text': 'ARTISAN',
'situation': '01',
'situation_text': 'Activité professionnelle',
'weeklyHours': '9h-18h',
},
'CAFInfo': {
'number': '789',
@ -1546,6 +1568,7 @@ def test_create_family(family_service, con, app):
'rl1/adresse/numComp': 'B',
'rl1/contact/isContactMail': True,
'rl1/profession/codeCSP': 'ART',
'rl1/profession/situation': '01',
'rl1/CAFInfo/organ': 'A10007752822',
'emergencyPersonList/0/civility': 'MME',
'emergencyPersonList/0/firstname': 'Keny',
@ -1665,6 +1688,7 @@ def test_create_family_wrong_referential_key_error(con, app):
'rl1/adresse/zipcode': '75014',
'rl1/adresse/numComp': 'B',
'rl1/profession/codeCSP': 'ART',
'rl1/profession/situation': '01',
'rl1/CAFInfo/organ': 'A10007752822',
'childList/0/lastname': 'Zimmerman',
'childList/0/firstname': 'Robert',
@ -1685,6 +1709,15 @@ def test_create_family_wrong_referential_key_error(con, app):
== "childList/0/medicalRecord/vaccinList/0/code key value 'plop' do not belong to 'Vaccin' referential"
)
params['childList/0/medicalRecord/vaccinList/0/code'] = 'DTC'
params['rl1/profession/situation'] = 'plop'
resp = app.post_json(url + '?NameID=local', params=params)
assert resp.json['err'] == 1
assert (
resp.json['err_desc']
== "rl1/profession/situation key value 'plop' do not belong to 'ProfessionalSituation' referential"
)
def test_update_family(family_service, con, app):
def request_check(request):
@ -1710,6 +1743,7 @@ def test_update_family(family_service, con, app):
'rl1/adresse/zipcode': '75014',
'rl1/adresse/numComp': 'B',
'rl1/profession/codeCSP': 'ART',
'rl1/profession/situation': '01',
'rl1/CAFInfo/organ': 'A10007752822',
'emergencyPersonList/0/civility': 'MME',
'emergencyPersonList/0/firstname': 'Keny',
@ -1830,6 +1864,7 @@ def test_update_family_wrong_referential_key_error(con, app):
'rl1/adresse/zipcode': '75014',
'rl1/adresse/numComp': 'B',
'rl1/profession/codeCSP': 'ART',
'rl1/profession/situation': '01',
'rl1/CAFInfo/organ': 'A10007752822',
'emergencyPersonList/0/civility': 'MME',
'emergencyPersonList/0/firstname': 'Keny',
@ -1856,6 +1891,15 @@ def test_update_family_wrong_referential_key_error(con, app):
== "childList/0/medicalRecord/vaccinList/0/code key value 'plop' do not belong to 'Vaccin' referential"
)
params['childList/0/medicalRecord/vaccinList/0/code'] = 'DTC'
params['rl1/profession/situation'] = 'plop'
resp = app.post_json(url + '?NameID=local', params=params)
assert resp.json['err'] == 1
assert (
resp.json['err_desc']
== "rl1/profession/situation key value 'plop' do not belong to 'ProfessionalSituation' referential"
)
def test_create_rl1(family_service, con, app):
family_service.add_soap_response('createFamily', get_xml_file('R_create_family.xml'))
@ -2474,6 +2518,8 @@ def test_update_coordinate(family_service, con, app):
'adresse/zipcode': '75014',
'contact/isContactMail': True,
'profession/codeCSP': 'ART',
'profession/situation': '01',
'profession/weeklyHours': '9h-18h',
'profession/profession': 'informaticien',
'profession/employerName': 'EO',
'profession/phone': '0123456789',
@ -2530,6 +2576,15 @@ def test_update_coordinate_wrong_referential_key_error(con, app):
resp.json['err_desc'] == "adresse/numComp key value 'plop' do not belong to 'Complement' referential"
)
params['adresse/numComp'] = 'B'
params['profession/situation'] = 'plop'
resp = app.post_json(url + '?NameID=local&rl_id=613878', params=params)
assert resp.json['err'] == 1
assert (
resp.json['err_desc']
== "profession/situation key value 'plop' do not belong to 'ProfessionalSituation' referential"
)
def test_update_quotient(family_service, con, app):
family_service.add_soap_response('createUpdateQuotient', get_xml_file('R_create_update_quotient.xml'))