toulouse-maelis: ajouter la semaine type à la réservation (#74438) #102

Merged
nroche merged 3 commits from wip/74438-parsifal-recurrent-week into main 2023-02-16 17:17:08 +01:00
6 changed files with 424 additions and 227 deletions

View File

@ -74,6 +74,10 @@ SUBSCRIPTION_SCHEMA = {
'type': 'string',
'pattern': '^[0-9]{4}-[0-9]{2}-[0-9]{2}$',
},
'recurrent_week': {
'type': 'array',
'items': {'type': 'string'},
},
},
'required': [
'person_id',

View File

@ -2666,7 +2666,34 @@ class ToulouseMaelis(BaseResource, HTTPResource):
},
'dateRef': ref_date,
}
return {'data': self.call('Activity', 'getPersonUnitInfo', getPersonUnitInfoRequestBean=params)}
response = self.call('Activity', 'getPersonUnitInfo', getPersonUnitInfoRequestBean=params)
day_names = ['Lundi', 'Mardi', 'Mercredi', 'Jeudi', 'Vendredi', 'Samedi', 'Dimanche']
recurrent_week = []
weekly_calendar = response['weeklyCalendarActivity']
if response['calendarGeneration'].get('value') in ('O', 'F') and weekly_calendar:
units = []
for item in response.get('unitScheduleList') or []:
key = item['unit']['calendarLetter']
value = item['unit']['libelle']
units.append((key, value))
for item in weekly_calendar.get('dayWeekInfoList') or []:
if item['isOpen']:
day_num = item['dayNum']
day = day_names[day_num - 1]
for key, value in units:
recurrent_week.append(
{
'id': '%s-%s' % (day_num, key),
'day': day,
'label': value,
'overlaps': ['%s-%s' % (day_num, k) for k, v in units if k != key],
'text': '%s %s' % (day, value),
}
)
response['recurrent_week'] = recurrent_week
return {'data': response}
@endpoint(
display_category='Inscriptions',
@ -2690,6 +2717,16 @@ class ToulouseMaelis(BaseResource, HTTPResource):
):
family_id = family_id or self.get_link(NameID).family_id
recurrent_week = []
for item in post_data.get('recurrent_week') or []:
day_num, key = item.split('-')
recurrent_week.append(
{
'dayNum': day_num,
'calendarLetter': key,
'isPresent': True,
}
)
payload = {
'addPersonUnitBasketRequestBean': {
'numFamily': family_id,
@ -2699,6 +2736,7 @@ class ToulouseMaelis(BaseResource, HTTPResource):
'idPlace': post_data['place_id'],
'dateStartSubscribe': post_data['start_date'],
'dateEndSubscribe': post_data['end_date'],
'dayWeekInfoList': recurrent_week,
}
}
response = self.call('Activity', 'addPersonUnitBasket', **payload)

View File

@ -1,6 +1,8 @@
<?xml version='1.0' encoding='UTF-8'?><wsdl:definitions xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/" xmlns:tns="activity.ws.maelis.sigec.com" xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" xmlns:ns1="http://schemas.xmlsoap.org/soap/http" name="ActivityService" targetNamespace="activity.ws.maelis.sigec.com">
<wsdl:types>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:tns="bean.persistence.school.ws.maelis.sigec.com" targetNamespace="bean.persistence.school.ws.maelis.sigec.com" version="1.0">
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:tns="bean.persistence.school.ws.maelis.sigec.com" xmlns:ns1="activity.ws.maelis.sigec.com" targetNamespace="bean.persistence.school.ws.maelis.sigec.com" version="1.0">
<xs:import namespace="activity.ws.maelis.sigec.com"/>
<xs:complexType name="weeklyCalendarActivityBean">
<xs:sequence>
@ -16,6 +18,43 @@
</xs:sequence>
</xs:complexType>
<xs:complexType name="unitScheduleBean">
<xs:sequence>
<xs:element minOccurs="0" name="unit" type="tns:unit2Bean"/>
<xs:element maxOccurs="unbounded" minOccurs="0" name="dayInfoList" nillable="true" type="tns:dayInfoBean"/>
</xs:sequence>
</xs:complexType>
<xs:complexType name="unit2Bean">
<xs:sequence>
<xs:element minOccurs="0" name="idActivity" type="xs:string"/>
<xs:element minOccurs="0" name="idUnit" type="xs:string"/>
<xs:element minOccurs="0" name="libelle" type="xs:string"/>
<xs:element minOccurs="0" name="calendarLetter" type="xs:string"/>
<xs:element minOccurs="0" name="dateDeb" type="xs:dateTime"/>
<xs:element minOccurs="0" name="dateFin" type="xs:dateTime"/>
</xs:sequence>
</xs:complexType>
<xs:complexType name="dayInfoBean">
<xs:sequence>
<xs:element minOccurs="0" name="day" type="xs:dateTime"/>
<xs:element name="scheduledPresence" type="xs:int"/>
<xs:element name="realPresence" type="xs:int"/>
<xs:element minOccurs="0" name="absence" type="tns:absenceBean"/>
<xs:element form="qualified" minOccurs="0" name="status" type="ns1:dayInfoStatus"/>
<xs:element form="qualified" minOccurs="0" name="action" type="ns1:dayInfoAction"/>
<xs:element minOccurs="0" name="hasPlace" type="xs:boolean"/>
</xs:sequence>
</xs:complexType>
<xs:complexType name="absenceBean">
<xs:sequence>
<xs:element minOccurs="0" name="libelle" type="xs:string"/>
<xs:element minOccurs="0" name="code" type="xs:string"/>
</xs:sequence>
</xs:complexType>
</xs:schema>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:tns="bean.persistence.activity.ws.maelis.sigec.com" xmlns:ns2="bean.persistence.school.ws.maelis.sigec.com" xmlns:ns1="activity.ws.maelis.sigec.com" targetNamespace="bean.persistence.activity.ws.maelis.sigec.com" version="1.0">
@ -42,6 +81,7 @@
<xs:element minOccurs="0" name="dayNum" type="xs:int"/>
<xs:element minOccurs="0" name="isPresent" type="xs:boolean"/>
<xs:element minOccurs="0" name="isOpen" type="xs:boolean"/>
<xs:element minOccurs="0" name="calendarLetter" type="xs:string"/>
</xs:sequence>
</xs:complexType>
@ -121,6 +161,7 @@
<xs:sequence>
<xs:element minOccurs="0" name="idAct" type="xs:string"/>
<xs:element minOccurs="0" name="libelle" type="xs:string"/>
<xs:element minOccurs="0" name="libelle2" type="xs:string"/>
<xs:element minOccurs="0" name="activityType" type="tns:activityTypeBean"/>
</xs:sequence>
</xs:complexType>
@ -151,6 +192,7 @@
<xs:sequence>
<xs:element minOccurs="0" name="idUnit" type="xs:string"/>
<xs:element minOccurs="0" name="libelle" type="xs:string"/>
<xs:element minOccurs="0" name="calendarLetter" type="xs:string"/>
</xs:sequence>
</xs:complexType>
@ -278,6 +320,8 @@
<xs:element minOccurs="0" name="obs1" type="xs:string"/>
<xs:element minOccurs="0" name="obs2" type="xs:string"/>
<xs:element minOccurs="0" name="numTel" type="xs:string"/>
<xs:element minOccurs="0" name="latitude" type="xs:double"/>
<xs:element minOccurs="0" name="longitude" type="xs:double"/>
</xs:sequence>
</xs:complexType>
@ -409,11 +453,12 @@
<xs:element minOccurs="0" name="controlResult" type="ns1:controlResultBean"/>
<xs:element minOccurs="0" name="personInfo" type="tns:personInfoBean"/>
<xs:element minOccurs="0" name="activity" type="tns:activity2Bean"/>
<xs:element minOccurs="0" name="unit" type="tns:unitInfoBean"/>
<xs:element minOccurs="0" name="place" type="tns:placeBasketBean"/>
<xs:element minOccurs="0" name="calendarGeneration" type="ns1:activityCalendarGenerationBean"/>
<xs:element minOccurs="0" name="weeklyCalendarActivity" type="tns:weeklyCalendarSubscribeUnitBean"/>
<xs:element maxOccurs="unbounded" minOccurs="0" name="openDayList" nillable="true" type="tns:dayOpenBean"/>
<xs:element minOccurs="0" name="unit" type="tns:unitInfoBean"/>
<xs:element minOccurs="0" name="place" type="tns:placeBasketBean"/>
<xs:element maxOccurs="unbounded" minOccurs="0" name="unitScheduleList" nillable="true" type="ns2:unitScheduleBean"/>
<xs:element minOccurs="0" name="billingInformation" type="tns:billingInformationBean"/>
<xs:element minOccurs="0" name="action" type="ns1:subscribeAction"/>
<xs:element maxOccurs="unbounded" minOccurs="0" name="indicatorList" nillable="true" type="tns:indicatorBean"/>
@ -442,26 +487,6 @@
</xs:sequence>
</xs:complexType>
<xs:complexType name="weeklyCalendarSubscribeUnitBean">
<xs:sequence>
<xs:element maxOccurs="unbounded" minOccurs="0" name="dayWeekInfoList" nillable="true" type="tns:dayWeekActivityInfoBean"/>
</xs:sequence>
</xs:complexType>
<xs:complexType name="dayWeekActivityInfoBean">
<xs:sequence>
<xs:element minOccurs="0" name="dayNum" type="xs:int"/>
<xs:element minOccurs="0" name="isOpen" type="xs:boolean"/>
</xs:sequence>
</xs:complexType>
<xs:complexType name="dayOpenBean">
<xs:sequence>
<xs:element minOccurs="0" name="day" type="xs:dateTime"/>
<xs:element minOccurs="0" name="hasPlace" type="xs:boolean"/>
</xs:sequence>
</xs:complexType>
<xs:complexType name="unitInfoBean">
<xs:sequence>
<xs:element minOccurs="0" name="idUnit" type="xs:string"/>
@ -509,6 +534,26 @@
</xs:complexContent>
</xs:complexType>
<xs:complexType name="weeklyCalendarSubscribeUnitBean">
<xs:sequence>
<xs:element maxOccurs="unbounded" minOccurs="0" name="dayWeekInfoList" nillable="true" type="tns:dayWeekActivityInfoBean"/>
</xs:sequence>
</xs:complexType>
<xs:complexType name="dayWeekActivityInfoBean">
<xs:sequence>
<xs:element minOccurs="0" name="dayNum" type="xs:int"/>
<xs:element minOccurs="0" name="isOpen" type="xs:boolean"/>
</xs:sequence>
</xs:complexType>
<xs:complexType name="dayOpenBean">
<xs:sequence>
<xs:element minOccurs="0" name="day" type="xs:dateTime"/>
<xs:element minOccurs="0" name="hasPlace" type="xs:boolean"/>
</xs:sequence>
</xs:complexType>
<xs:complexType name="billingInformationBean">
<xs:sequence>
<xs:element minOccurs="0" name="modeFact" type="ns1:modeFactBean"/>
@ -619,7 +664,7 @@
</xs:complexType>
</xs:schema>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:tns="activity.ws.maelis.sigec.com" xmlns:ns1="bean.persistence.activity.ws.maelis.sigec.com" attributeFormDefault="unqualified" elementFormDefault="unqualified" targetNamespace="activity.ws.maelis.sigec.com">
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:tns="activity.ws.maelis.sigec.com" xmlns:ns2="bean.persistence.school.ws.maelis.sigec.com" xmlns:ns1="bean.persistence.activity.ws.maelis.sigec.com" attributeFormDefault="unqualified" elementFormDefault="unqualified" targetNamespace="activity.ws.maelis.sigec.com">
<xs:import namespace="bean.persistence.activity.ws.maelis.sigec.com"/>
<xs:import namespace="bean.persistence.school.ws.maelis.sigec.com"/>
<xs:element name="addPersonUnitBasket" type="tns:addPersonUnitBasket"/>
@ -656,6 +701,8 @@
<xs:element name="updatePersonScheduleResponse" type="tns:updatePersonScheduleResponse"/>
<xs:element name="updatePersonUnitBasket" type="tns:updatePersonUnitBasket"/>
<xs:element name="updatePersonUnitBasketResponse" type="tns:updatePersonUnitBasketResponse"/>
<xs:element name="updateWeekCalendar" type="tns:updateWeekCalendar"/>
<xs:element name="updateWeekCalendarResponse" type="tns:updateWeekCalendarResponse"/>
<xs:element name="validateBasket" type="tns:validateBasket"/>
<xs:element name="validateBasketResponse" type="tns:validateBasketResponse"/>
<xs:complexType name="addPersonUnitBasket">
@ -831,6 +878,19 @@
</xs:extension>
</xs:complexContent>
</xs:complexType>
<xs:complexType name="consoTarifKernelBean">
<xs:sequence>
<xs:element minOccurs="0" name="commune" type="xs:string"/>
<xs:element minOccurs="0" name="consoKernelBean" type="tns:codeLabelKernelBean"/>
<xs:element minOccurs="0" name="tarifKernelBean" type="tns:codeLabelKernelBean"/>
</xs:sequence>
</xs:complexType>
<xs:complexType name="codeLabelKernelBean">
<xs:sequence>
<xs:element minOccurs="0" name="code" type="xs:string"/>
<xs:element minOccurs="0" name="label" type="xs:string"/>
</xs:sequence>
</xs:complexType>
<xs:complexType name="activityPeriodCapacityKernelBean">
<xs:sequence>
<xs:element maxOccurs="unbounded" minOccurs="0" name="calendCapacityExceptKernelList" nillable="true" type="tns:calendCapacityKernelBean"/>
@ -844,25 +904,12 @@
<xs:element minOccurs="0" name="dayDate" type="xs:dateTime"/>
</xs:sequence>
</xs:complexType>
<xs:complexType name="codeLabelKernelBean">
<xs:sequence>
<xs:element minOccurs="0" name="code" type="xs:string"/>
<xs:element minOccurs="0" name="label" type="xs:string"/>
</xs:sequence>
</xs:complexType>
<xs:complexType name="activityUnitPlace2KernelBean">
<xs:sequence>
<xs:element minOccurs="0" name="activityKernel" type="xs:anyType"/>
<xs:element maxOccurs="unbounded" minOccurs="0" name="unitKernelList" nillable="true" type="xs:anyType"/>
</xs:sequence>
</xs:complexType>
<xs:complexType name="consoTarifKernelBean">
<xs:sequence>
<xs:element minOccurs="0" name="commune" type="xs:string"/>
<xs:element minOccurs="0" name="consoKernelBean" type="tns:codeLabelKernelBean"/>
<xs:element minOccurs="0" name="tarifKernelBean" type="tns:codeLabelKernelBean"/>
</xs:sequence>
</xs:complexType>
<xs:complexType name="validateBasket">
<xs:sequence>
<xs:element minOccurs="0" name="validateBasketRequestBean" type="ns1:validateBasketRequestBean"/>
@ -967,6 +1014,18 @@
<xs:element minOccurs="0" name="resultBean" type="ns1:updatePersonScheduleResultBean"/>
</xs:sequence>
</xs:complexType>
<xs:complexType name="updateWeekCalendar">
<xs:sequence>
<xs:element name="idActivity" type="xs:string"/>
<xs:element name="numPerson" type="xs:int"/>
<xs:element name="dateStart" type="xs:dateTime"/>
<xs:element minOccurs="0" name="dateEnd" type="xs:dateTime"/>
<xs:element maxOccurs="unbounded" minOccurs="0" name="dayWeekInfoList" type="ns1:dayWeekInfoBean"/>
</xs:sequence>
</xs:complexType>
<xs:complexType name="updateWeekCalendarResponse">
<xs:sequence/>
</xs:complexType>
<xs:complexType name="readActivityNatureTypeList">
<xs:sequence/>
</xs:complexType>
@ -995,6 +1054,13 @@
<xs:element minOccurs="0" name="getPersonCatalogueActivityResultBean" type="ns1:getPersonCatalogueActivityResultBean"/>
</xs:sequence>
</xs:complexType>
<xs:simpleType name="indicatorTypeDescEnum">
<xs:restriction base="xs:string">
<xs:enumeration value="NONE"/>
<xs:enumeration value="NOTE"/>
<xs:enumeration value="CHOICE"/>
</xs:restriction>
</xs:simpleType>
<xs:simpleType name="blocNoteTypeEnum">
<xs:restriction base="xs:string">
<xs:enumeration value="A"/>
@ -1004,13 +1070,6 @@
<xs:enumeration value="ID"/>
</xs:restriction>
</xs:simpleType>
<xs:simpleType name="indicatorTypeDescEnum">
<xs:restriction base="xs:string">
<xs:enumeration value="NONE"/>
<xs:enumeration value="NOTE"/>
<xs:enumeration value="CHOICE"/>
</xs:restriction>
</xs:simpleType>
<xs:simpleType name="dayInfoStatus">
<xs:restriction base="xs:string">
<xs:enumeration value="NO_CUSTODY"/>
@ -1104,6 +1163,10 @@
<wsdl:part element="tns:delSchedulePresenceUnitResponse" name="parameters">
</wsdl:part>
</wsdl:message>
<wsdl:message name="updateWeekCalendarResponse">
<wsdl:part element="tns:updateWeekCalendarResponse" name="parameters">
</wsdl:part>
</wsdl:message>
<wsdl:message name="updatePersonUnitBasket">
<wsdl:part element="tns:updatePersonUnitBasket" name="parameters">
</wsdl:part>
@ -1184,6 +1247,10 @@
<wsdl:part element="tns:addSchedulePresenceUnitResponse" name="parameters">
</wsdl:part>
</wsdl:message>
<wsdl:message name="updateWeekCalendar">
<wsdl:part element="tns:updateWeekCalendar" name="parameters">
</wsdl:part>
</wsdl:message>
<wsdl:message name="updatePersonScheduleResponse">
<wsdl:part element="tns:updatePersonScheduleResponse" name="parameters">
</wsdl:part>
@ -1509,6 +1576,26 @@ La capacité est contrôle lors de la lecture des information et en fonction du
<wsdl:fault message="tns:MaelisActivityException" name="MaelisActivityException">
</wsdl:fault>
</wsdl:operation>
<wsdl:operation name="updateWeekCalendar">
<wsdl:documentation>Met à jour le calendrier hebdomadaire d'une personne, par rapport à une activité
----------------------
idActivity : identifiant de l'activité
numPerson : Numéro de personne
dateStart : date de début d'application
dateEnd : date de fin d'application, facultatif, si non fourni date de fin de l'inscription
dayWeekInfoList : liste des jours de 1 à 7 du planning hebdomadaire avec la lettre du motif de l'unité de présence
------------------------------
Traitement :
La méthode enregistre le nouveau calendrier hebdomadaire et effectue une mise à jour du calendrier annuel calculé à partir du modèle hebdomadaire à partir de la date d'application passée en paramètre jusqu'à la date de fin.</wsdl:documentation>
<wsdl:input message="tns:updateWeekCalendar" name="updateWeekCalendar">
</wsdl:input>
<wsdl:output message="tns:updateWeekCalendarResponse" name="updateWeekCalendarResponse">
</wsdl:output>
<wsdl:fault message="tns:MaelisActivityException" name="MaelisActivityException">
</wsdl:fault>
</wsdl:operation>
<wsdl:operation name="readActivityNatureTypeList">
<wsdl:documentation>Méthode de lecture des natures et des types d'activité
Cette méthode retourne la liste des natures d'activités avec, pour chaque nature,
@ -1742,6 +1829,18 @@ Si la capacité est effectuée par jour, il n'y a pas de contrôle du nombre d'i
<soap:fault name="MaelisActivityException" use="literal"/>
</wsdl:fault>
</wsdl:operation>
<wsdl:operation name="updateWeekCalendar">
<soap:operation soapAction="" style="document"/>
<wsdl:input name="updateWeekCalendar">
<soap:body use="literal"/>
</wsdl:input>
<wsdl:output name="updateWeekCalendarResponse">
<soap:body use="literal"/>
</wsdl:output>
<wsdl:fault name="MaelisActivityException">
<soap:fault name="MaelisActivityException" use="literal"/>
</wsdl:fault>
</wsdl:operation>
<wsdl:operation name="readActivityNatureTypeList">
<soap:operation soapAction="" style="document"/>
<wsdl:input name="readActivityNatureTypeList">

View File

@ -1,32 +1,42 @@
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
<soap:Body>
<ns2:getPersonUnitInfoResponse xmlns:ns2="activity.ws.maelis.sigec.com" xmlns:ns3="bean.persistence.activity.ws.maelis.sigec.com">
<ns2:getPersonUnitInfoResponse xmlns:ns2="activity.ws.maelis.sigec.com" xmlns:ns3="bean.persistence.activity.ws.maelis.sigec.com" xmlns:ns4="bean.persistence.school.ws.maelis.sigec.com">
<getPersonUnitInfoResponseBean>
<controlResult>
<controlOK>true</controlOK>
</controlResult>
<personInfo>
<idMaelis>S10053182024</idMaelis>
<num>246423</num>
<lastname>SIMPSON</lastname>
<idMaelis>S10055586371</idMaelis>
<num>261768</num>
<lastname>NICO</lastname>
<firstname>BART</firstname>
<dateBirth>2014-04-01T00:00:00+02:00</dateBirth>
<sexe>M</sexe>
</personInfo>
<activity>
<idActivity>A10053187087</idActivity>
<libelle1>Vacances Ete 2023</libelle1>
<idActivity>A10049337567</idActivity>
<libelle1>SEJOUR CORSE FEV 2023</libelle1>
<activityType>
<code>LOI_VAC</code>
<libelle>Loisirs - Vacances</libelle>
<code>EXTVAC</code>
<libelle>Vacances</libelle>
<natureSpec>
<code>V</code>
<libelle>Vacances Enfants</libelle>
<code>X</code>
<libelle>Extrascolaire</libelle>
</natureSpec>
</activityType>
<typInsPortal>I</typInsPortal>
<paiementPortal>I</paiementPortal>
</activity>
<unit>
<idUnit>A10049337568</idUnit>
<libelle>SEJOUR CORSE FEV 2023</libelle>
<dateStart>2023-02-13T00:00:00+01:00</dateStart>
<dateEnd>2023-02-24T00:00:00+01:00</dateEnd>
</unit>
<place>
<idPlace>A10049337572</idPlace>
<lib1>SEJOUR</lib1>
</place>
<calendarGeneration>
<code>FORBIDDEN</code>
<value>I</value>
@ -54,23 +64,13 @@
</dayWeekInfoList>
<dayWeekInfoList>
<dayNum>6</dayNum>
<isOpen>false</isOpen>
<isOpen>true</isOpen>
</dayWeekInfoList>
<dayWeekInfoList>
<dayNum>7</dayNum>
<isOpen>false</isOpen>
<isOpen>true</isOpen>
</dayWeekInfoList>
</weeklyCalendarActivity>
<unit>
<idUnit>A10053187241</idUnit>
<libelle>Juillet</libelle>
<dateStart>2023-07-10T00:00:00+02:00</dateStart>
<dateEnd>2023-07-31T00:00:00+02:00</dateEnd>
</unit>
<place>
<idPlace>A10053179604</idPlace>
<lib1>ALEX JANY</lib1>
</place>
<billingInformation/>
<action>ADD_SUBSCRIBE</action>
</getPersonUnitInfoResponseBean>

View File

@ -1,41 +1,50 @@
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
<soap:Body>
<ns2:getPersonUnitInfoResponse xmlns:ns2="activity.ws.maelis.sigec.com" xmlns:ns3="bean.persistence.activity.ws.maelis.sigec.com">
<ns2:getPersonUnitInfoResponse xmlns:ns2="activity.ws.maelis.sigec.com" xmlns:ns3="bean.persistence.activity.ws.maelis.sigec.com" xmlns:ns4="bean.persistence.school.ws.maelis.sigec.com">
<getPersonUnitInfoResponseBean>
<controlResult>
<controlOK>true</controlOK>
</controlResult>
<personInfo>
<idMaelis>S10053182024</idMaelis>
<num>246423</num>
<lastname>SIMPSON</lastname>
<idMaelis>S10055586371</idMaelis>
<num>261768</num>
<lastname>NICO</lastname>
<firstname>BART</firstname>
<dateBirth>2014-04-01T00:00:00+02:00</dateBirth>
<sexe>M</sexe>
</personInfo>
<activity>
<idActivity>A10051141965</idActivity>
<libelle1>Vitrail Fusing 1/2 Je Adultes 2022/2023 - Mardi 14h-17h</libelle1>
<libelle2>Activité modèle</libelle2>
<idActivity>A10055585858</idActivity>
<libelle1>ADL ELEMENTAIRE Maourine FEVRIER 22/23</libelle1>
<activityType>
<code>LOI_ADU</code>
<libelle>Loisirs Adultes</libelle>
<code>EXTVAC</code>
<libelle>Vacances</libelle>
<natureSpec>
<code>P</code>
<libelle>Loisirs</libelle>
<code>X</code>
<libelle>Extrascolaire</libelle>
</natureSpec>
</activityType>
<typInsPortal>I</typInsPortal>
<paiementPortal>I</paiementPortal>
</activity>
<unit>
<idUnit>A10055585860</idUnit>
<libelle>ADL ELEMENTAIRE Maourine FEVRIER 22/23</libelle>
<dateStart>2023-02-13T00:00:00+01:00</dateStart>
<dateEnd>2023-02-24T00:00:00+01:00</dateEnd>
</unit>
<place>
<idPlace>M10053212196</idPlace>
<lib1>MAOURINE (la) ELEMENTAIRE</lib1>
</place>
<calendarGeneration>
<code>FORBIDDEN</code>
<value>I</value>
<code>REQUIRED</code>
<value>O</value>
</calendarGeneration>
<weeklyCalendarActivity>
<dayWeekInfoList>
<dayNum>1</dayNum>
<isOpen>false</isOpen>
<isOpen>true</isOpen>
</dayWeekInfoList>
<dayWeekInfoList>
<dayNum>2</dayNum>
@ -51,7 +60,7 @@
</dayWeekInfoList>
<dayWeekInfoList>
<dayNum>5</dayNum>
<isOpen>false</isOpen>
<isOpen>true</isOpen>
</dayWeekInfoList>
<dayWeekInfoList>
<dayNum>6</dayNum>
@ -62,24 +71,24 @@
<isOpen>false</isOpen>
</dayWeekInfoList>
</weeklyCalendarActivity>
<openDayList>
<day>2023-01-24T00:00:00+01:00</day>
<hasPlace>true</hasPlace>
</openDayList>
<openDayList>
<day>2023-01-31T00:00:00+01:00</day>
<hasPlace>true</hasPlace>
</openDayList>
<unit>
<idUnit>A10051141990</idUnit>
<libelle>Inscription 1er semestre</libelle>
<dateStart>2022-09-01T00:00:00+02:00</dateStart>
<dateEnd>2023-01-31T00:00:00+01:00</dateEnd>
</unit>
<place>
<idPlace>A10053179226</idPlace>
<lib1>Centre Culturel ALBAN MINVILLE</lib1>
</place>
<unitScheduleList>
<unit>
<idUnit>A10055586816</idUnit>
<libelle>Journée</libelle>
<calendarLetter>C</calendarLetter>
<dateDeb>2023-02-13T00:00:00+01:00</dateDeb>
<dateFin>2023-02-24T00:00:00+01:00</dateFin>
</unit>
</unitScheduleList>
<unitScheduleList>
<unit>
<idUnit>A10055586815</idUnit>
<libelle>Demi-journée</libelle>
<calendarLetter>B</calendarLetter>
<dateDeb>2023-02-13T00:00:00+01:00</dateDeb>
<dateFin>2023-02-24T00:00:00+01:00</dateFin>
</unit>
</unitScheduleList>
<billingInformation/>
<action>ADD_SUBSCRIBE</action>
</getPersonUnitInfoResponseBean>

View File

@ -24,6 +24,7 @@ import responses
from django.utils.dateparse import parse_date
from requests.exceptions import ConnectionError
from zeep import Settings
from zeep.helpers import serialize_object
from passerelle.contrib.toulouse_maelis.models import Link, Referential, ToulouseMaelis
from passerelle.contrib.toulouse_maelis.utils import get_public_criterias, json_date_format
@ -5610,10 +5611,10 @@ def test_read_ape_indicator_list(con, app):
assert 'text' in item
def test_get_person_subscription_info_extra_scolaire(activity_service, con, app):
def test_get_person_subscription_info(activity_service, con, app):
activity_service.add_soap_response(
'getPersonUnitInfo',
get_xml_file('R_get_person_unit_info_extra_scolaire.xml'),
get_xml_file('R_get_person_unit_info.xml'),
)
url = get_endpoint('get-person-subscription-info')
@ -5637,49 +5638,36 @@ def test_get_person_subscription_info_extra_scolaire(activity_service, con, app)
assert resp.json['data'] == {
'controlResult': {'controlOK': True, 'message': None},
'personInfo': {
'idMaelis': 'S10053182024',
'num': 246423,
'lastname': 'SIMPSON',
'idMaelis': 'S10055586371',
'num': 261768,
'lastname': 'NICO',
'firstname': 'BART',
'dateBirth': '2014-04-01T00:00:00+02:00',
'sexe': 'M',
},
'activity': {
'idActivity': 'A10053187087',
'libelle1': 'Vacances Ete 2023',
'idActivity': 'A10049337567',
'libelle1': 'SEJOUR CORSE FEV 2023',
'libelle2': None,
'activityType': {
'code': 'LOI_VAC',
'libelle': 'Loisirs - Vacances',
'natureSpec': {'code': 'V', 'libelle': 'Vacances Enfants'},
'code': 'EXTVAC',
'libelle': 'Vacances',
'natureSpec': {'code': 'X', 'libelle': 'Extrascolaire'},
},
'typInsPortal': 'I',
'paiementPortal': 'I',
},
'calendarGeneration': {'code': 'FORBIDDEN', 'value': 'I'},
'weeklyCalendarActivity': {
'dayWeekInfoList': [
{'dayNum': 1, 'isOpen': True},
{'dayNum': 2, 'isOpen': True},
{'dayNum': 3, 'isOpen': True},
{'dayNum': 4, 'isOpen': True},
{'dayNum': 5, 'isOpen': True},
{'dayNum': 6, 'isOpen': False},
{'dayNum': 7, 'isOpen': False},
]
},
'openDayList': [],
'unit': {
'idUnit': 'A10053187241',
'libelle': 'Juillet',
'dateStart': '2023-07-10T00:00:00+02:00',
'dateEnd': '2023-07-31T00:00:00+02:00',
'idUnit': 'A10049337568',
'libelle': 'SEJOUR CORSE FEV 2023',
'dateStart': '2023-02-13T00:00:00+01:00',
'dateEnd': '2023-02-24T00:00:00+01:00',
'placeInfoList': [],
'idIns': None,
},
'place': {
'idPlace': 'A10053179604',
'lib1': 'ALEX JANY',
'idPlace': 'A10049337572',
'lib1': 'SEJOUR',
'lib2': None,
'idIns': None,
'etatIns': None,
@ -5690,9 +5678,24 @@ def test_get_person_subscription_info_extra_scolaire(activity_service, con, app)
'longitude': None,
'latitude': None,
},
'calendarGeneration': {'code': 'FORBIDDEN', 'value': 'I'},
'weeklyCalendarActivity': {
'dayWeekInfoList': [
{'dayNum': 1, 'isOpen': True},
{'dayNum': 2, 'isOpen': True},
{'dayNum': 3, 'isOpen': True},
{'dayNum': 4, 'isOpen': True},
{'dayNum': 5, 'isOpen': True},
{'dayNum': 6, 'isOpen': True},
{'dayNum': 7, 'isOpen': True},
]
},
'openDayList': [],
'unitScheduleList': [],
'billingInformation': None,
'action': 'ADD_SUBSCRIBE',
'indicatorList': [],
'recurrent_week': [],
}
# no date provided
@ -5706,10 +5709,10 @@ def test_get_person_subscription_info_extra_scolaire(activity_service, con, app)
assert resp.json['err'] == 0
def test_get_person_subscription_info_loisir(activity_service, con, app):
def test_get_person_subscription_info_with_recurrent_week(activity_service, con, app):
activity_service.add_soap_response(
'getPersonUnitInfo',
get_xml_file('R_get_person_unit_info_loisir.xml'),
get_xml_file('R_get_person_unit_info_with_recurrent_week.xml'),
)
url = get_endpoint('get-person-subscription-info')
@ -5733,52 +5736,36 @@ def test_get_person_subscription_info_loisir(activity_service, con, app):
assert resp.json['data'] == {
'controlResult': {'controlOK': True, 'message': None},
'personInfo': {
'idMaelis': 'S10053182024',
'num': 246423,
'lastname': 'SIMPSON',
'idMaelis': 'S10055586371',
'num': 261768,
'lastname': 'NICO',
'firstname': 'BART',
'dateBirth': '2014-04-01T00:00:00+02:00',
'sexe': 'M',
},
'activity': {
'idActivity': 'A10051141965',
'libelle1': 'Vitrail Fusing 1/2 Je Adultes 2022/2023 - Mardi 14h-17h',
'libelle2': 'Activité modèle',
'idActivity': 'A10055585858',
'libelle1': 'ADL ELEMENTAIRE Maourine FEVRIER 22/23',
'libelle2': None,
'activityType': {
'code': 'LOI_ADU',
'libelle': 'Loisirs Adultes',
'natureSpec': {'code': 'P', 'libelle': 'Loisirs'},
'code': 'EXTVAC',
'libelle': 'Vacances',
'natureSpec': {'code': 'X', 'libelle': 'Extrascolaire'},
},
'typInsPortal': 'I',
'paiementPortal': 'I',
},
'calendarGeneration': {'code': 'FORBIDDEN', 'value': 'I'},
'weeklyCalendarActivity': {
'dayWeekInfoList': [
{'dayNum': 1, 'isOpen': False},
{'dayNum': 2, 'isOpen': True},
{'dayNum': 3, 'isOpen': True},
{'dayNum': 4, 'isOpen': True},
{'dayNum': 5, 'isOpen': False},
{'dayNum': 6, 'isOpen': False},
{'dayNum': 7, 'isOpen': False},
]
},
'openDayList': [
{'day': '2023-01-24T00:00:00+01:00', 'hasPlace': True},
{'day': '2023-01-31T00:00:00+01:00', 'hasPlace': True},
],
'unit': {
'idUnit': 'A10051141990',
'libelle': 'Inscription 1er semestre',
'dateStart': '2022-09-01T00:00:00+02:00',
'dateEnd': '2023-01-31T00:00:00+01:00',
'idUnit': 'A10055585860',
'libelle': 'ADL ELEMENTAIRE Maourine FEVRIER 22/23',
'dateStart': '2023-02-13T00:00:00+01:00',
'dateEnd': '2023-02-24T00:00:00+01:00',
'placeInfoList': [],
'idIns': None,
},
'place': {
'idPlace': 'A10053179226',
'lib1': 'Centre Culturel ALBAN MINVILLE',
'idPlace': 'M10053212196',
'lib1': 'MAOURINE (la) ELEMENTAIRE',
'lib2': None,
'idIns': None,
'etatIns': None,
@ -5789,9 +5776,100 @@ def test_get_person_subscription_info_loisir(activity_service, con, app):
'longitude': None,
'latitude': None,
},
'calendarGeneration': {'code': 'REQUIRED', 'value': 'O'},
'weeklyCalendarActivity': {
'dayWeekInfoList': [
{'dayNum': 1, 'isOpen': True},
{'dayNum': 2, 'isOpen': True},
{'dayNum': 3, 'isOpen': True},
{'dayNum': 4, 'isOpen': True},
{'dayNum': 5, 'isOpen': True},
{'dayNum': 6, 'isOpen': False},
{'dayNum': 7, 'isOpen': False},
]
},
'openDayList': [],
'unitScheduleList': [
{
'unit': {
'idActivity': None,
'idUnit': 'A10055586816',
'libelle': 'Journée',
'calendarLetter': 'C',
'dateDeb': '2023-02-13T00:00:00+01:00',
'dateFin': '2023-02-24T00:00:00+01:00',
},
'dayInfoList': [],
},
{
'unit': {
'idActivity': None,
'idUnit': 'A10055586815',
'libelle': 'Demi-journée',
'calendarLetter': 'B',
'dateDeb': '2023-02-13T00:00:00+01:00',
'dateFin': '2023-02-24T00:00:00+01:00',
},
'dayInfoList': [],
},
],
'billingInformation': None,
'action': 'ADD_SUBSCRIBE',
'indicatorList': [],
'recurrent_week': [
{'id': '1-C', 'day': 'Lundi', 'label': 'Journée', 'overlaps': ['1-B'], 'text': 'Lundi Journée'},
{
'id': '1-B',
'day': 'Lundi',
'label': 'Demi-journée',
'overlaps': ['1-C'],
'text': 'Lundi Demi-journée',
},
{'id': '2-C', 'day': 'Mardi', 'label': 'Journée', 'overlaps': ['2-B'], 'text': 'Mardi Journée'},
{
'id': '2-B',
'day': 'Mardi',
'label': 'Demi-journée',
'overlaps': ['2-C'],
'text': 'Mardi Demi-journée',
},
{
'id': '3-C',
'day': 'Mercredi',
'label': 'Journée',
'overlaps': ['3-B'],
'text': 'Mercredi Journée',
},
{
'id': '3-B',
'day': 'Mercredi',
'label': 'Demi-journée',
'overlaps': ['3-C'],
'text': 'Mercredi Demi-journée',
},
{'id': '4-C', 'day': 'Jeudi', 'label': 'Journée', 'overlaps': ['4-B'], 'text': 'Jeudi Journée'},
{
'id': '4-B',
'day': 'Jeudi',
'label': 'Demi-journée',
'overlaps': ['4-C'],
'text': 'Jeudi Demi-journée',
},
{
'id': '5-C',
'day': 'Vendredi',
'label': 'Journée',
'overlaps': ['5-B'],
'text': 'Vendredi Journée',
},
{
'id': '5-B',
'day': 'Vendredi',
'label': 'Demi-journée',
'overlaps': ['5-C'],
'text': 'Vendredi Demi-journée',
},
],
}
# no date provided
@ -5823,71 +5901,9 @@ def test_get_person_subscription_info_error(activity_service, con, app):
}
resp = app.get(url, params=params)
assert resp.json['err'] == 0
assert resp.json['data'] == {
'controlResult': {
'controlOK': False,
'message': 'E1019 : Il existe déjà une inscription à cette unité',
},
'personInfo': {
'idMaelis': 'S10053182024',
'num': 246423,
'lastname': 'SIMPSON',
'firstname': 'BART',
'dateBirth': '2014-04-01T00:00:00+02:00',
'sexe': 'M',
},
'activity': {
'idActivity': 'A10051141965',
'libelle1': 'Vitrail Fusing 1/2 Je Adultes 2022/2023 - Mardi 14h-17h',
'libelle2': 'Activité modèle',
'activityType': {
'code': 'LOI_ADU',
'libelle': 'Loisirs Adultes',
'natureSpec': {'code': 'P', 'libelle': 'Loisirs'},
},
'typInsPortal': 'I',
'paiementPortal': 'I',
},
'calendarGeneration': {'code': 'FORBIDDEN', 'value': 'I'},
'weeklyCalendarActivity': {
'dayWeekInfoList': [
{'dayNum': 1, 'isOpen': False},
{'dayNum': 2, 'isOpen': True},
{'dayNum': 3, 'isOpen': True},
{'dayNum': 4, 'isOpen': True},
{'dayNum': 5, 'isOpen': False},
{'dayNum': 6, 'isOpen': False},
{'dayNum': 7, 'isOpen': False},
]
},
'openDayList': [
{'day': '2023-01-24T00:00:00+01:00', 'hasPlace': True},
{'day': '2023-01-31T00:00:00+01:00', 'hasPlace': True},
],
'unit': {
'idUnit': 'A10051141990',
'libelle': 'Inscription 1er semestre',
'dateStart': '2022-09-01T00:00:00+02:00',
'dateEnd': '2023-01-31T00:00:00+01:00',
'placeInfoList': [],
'idIns': None,
},
'place': {
'idPlace': 'A10053179226',
'lib1': 'Centre Culturel ALBAN MINVILLE',
'lib2': None,
'idIns': None,
'etatIns': None,
'ageStart': None,
'ageEnd': None,
'ctrlPlaces': None,
'listBlocNoteBean': [],
'longitude': None,
'latitude': None,
},
'billingInformation': None,
'action': 'ADD_SUBSCRIBE',
'indicatorList': [],
assert resp.json['data']['controlResult'] == {
'controlOK': False,
'message': 'E1019 : Il existe déjà une inscription à cette unité',
}
@ -5995,6 +6011,37 @@ def test_add_person_basket_subscription(activity_service, con, app):
}
def test_add_person_basket_subscription_with_recurrent_week(activity_service, con, app):
def request_check(request):
assert serialize_object(request.dayWeekInfoList) == [
{'dayNum': 1, 'isPresent': True, 'isOpen': None, 'calendarLetter': 'B'},
{'dayNum': 2, 'isPresent': True, 'isOpen': None, 'calendarLetter': 'C'},
]
activity_service.add_soap_response(
'addPersonUnitBasket',
get_xml_file('R_add_person_unit_basket.xml'),
request_check=request_check,
)
url = get_endpoint('add-person-basket-subscription')
params = {
'person_id': '246423',
'activity_id': 'A10051141965',
'unit_id': 'A10051141990',
'place_id': 'A10053179226',
'start_date': '2022-09-01',
'end_date': '2023-08-31',
'recurrent_week': ['1-B', '2-C'],
}
resp = app.post_json(url + '?family_id=311323', params=params)
assert resp.json['err'] == 0
Link.objects.create(resource=con, family_id='311323', name_id='local')
resp = app.post_json(url + '?NameID=local', params=params)
assert resp.json['err'] == 0
def test_add_person_basket_subscription_error(activity_service, con, app):
activity_service.add_soap_response(
'addPersonUnitBasket',