Projet

Général

Profil

0001-maelis-provide-dates-to-subscription-web-service-500.patch

Nicolas Roche, 12 janvier 2021 09:35

Télécharger (37,2 ko)

Voir les différences:

Subject: [PATCH] maelis: provide dates to subscription web-service (#50059)

 passerelle/apps/maelis/models.py           |  3 +-
 passerelle/apps/maelis/utils.py            |  8 +++-
 passerelle/locale/fr/LC_MESSAGES/django.po |  2 +-
 tests/data/maelis/child_activities.json    | 46 ++++++++++++++++++++++
 4 files changed, 55 insertions(+), 4 deletions(-)
passerelle/apps/maelis/models.py
427 427
                raise APIError("input isn't well formatted, YYYY-MM-DD expected")
428 428
        if not queryDate:
429 429
            start_date = timezone.now().date()
430 430
        if start_date.strftime('%m-%d') >= '05-01':
431 431
            # start displaying next year activities on may
432 432
            school_year = start_date.year
433 433
        else:
434 434
            school_year = start_date.year - 1
435
        start_date = utils.get_datetime('%s-08-01' % (school_year)).date()
435 436
        end_date = utils.get_datetime('%s-07-31' % (school_year + 1)).date()
436 437

  
437 438
        child_info = self.get_child_info(NameID, childID)
438 439
        r = self.call('ActivityService?wsdl', 'readActivityList',
439 440
                      schoolyear=school_year,
440 441
                      numPerson=childID,
441 442
                      dateStartCalend=start_date,
442 443
                      dateEndCalend=end_date)
443 444

  
444 445
        flatted_activities = utils.flatten_activities(
445
            serialize_object(r), [school_year, school_year + 1])
446
            serialize_object(r), start_date, end_date)
446 447
        utils.mark_subscribed_flatted_activities(flatted_activities, child_info)
447 448
        data = utils.flatted_activities_as_list(flatted_activities, subscribingStatus)
448 449
        return {'data': data}
449 450

  
450 451
    @endpoint(
451 452
        display_category=_('Activities'),
452 453
        perm='can_access',
453 454
        display_order=3,
passerelle/apps/maelis/utils.py
201 201
        new_event['datetime'] = '%s %s' % (date_string, component['time'])
202 202
        new_event['slot_id'] = "%s%s" % (composition['virtual_unit'], component_id)
203 203
        new_event['id'] = '%s-%s-%s' % (
204 204
            date_string, event['category_id'], new_event['slot_id'])
205 205
        new_event['text'] = component['text']
206 206
        yield new_event
207 207

  
208 208

  
209
def flatten_activities(activities, years):
209
def flatten_activities(activities, start_date, end_date):
210 210
    data = {}
211 211
    for activity in activities:
212 212
        if activity.get('openDayList'):
213 213
            del activity['openDayList']
214 214
        activity_id = activity['activityPortail']['idAct']
215 215
        activity_text = activity['activityPortail']['label']
216 216
        activity_obj = deepcopy(activity)
217 217
        del activity_obj['unitPortailList']
......
219 219
            activity_obj['activityPortail']['activityType'] = {
220 220
                "code" : "?",
221 221
                "libelle" : "Inconnu",
222 222
                "natureSpec" : {
223 223
                    "code" : "?",
224 224
                    "libelle" : "Inconnu"
225 225
                }
226 226
            }
227
        activity_start_date = activity['activityPortail']['dateStart'] or start_date
228
        activity_end_date = activity['activityPortail']['dateEnd'] or end_date
227 229

  
228 230
        # compute weekly planning mask parameter to use for subscribing
229 231
        planning_masks = []
230
        for year in years:
232
        for year in range(start_date.year, end_date.year+1):
231 233
            for item in activity['activityPortail']['weeklyCalendarActivityList']:
232 234
                if item['yearCalendar'] == year:
233 235
                    planning_masks.append(item['weeklyCalendarStr'])
234 236
                    break
235 237
        if planning_masks:
236 238
            activity_weekly_planning_mask = ""
237 239
            for letters in zip(*planning_masks):
238 240
                if '1' in letters:
......
267 269
                    'text': '%s / %s / %s' % (activity_text, unit_text, place_text),
268 270
                    'activity_id': activity_id,
269 271
                    'unit_id': unit_id,
270 272
                    'place_id': place_id,
271 273
                    'activity_text': activity_text,
272 274
                    'unit_text': unit_text,
273 275
                    'place_text': place_text,
274 276
                    'activity_weekly_planning_mask': activity_weekly_planning_mask,
277
                    'activity_start_date': activity_start_date,
278
                    'activity_end_date': activity_end_date,
275 279
                    'unit_calendar_letter': unit_calendar_letter,
276 280
                    'unit_weekly_planning': unit_weekly_planning,
277 281
                    'activity_object': activity_obj,
278 282
                    'unit_object': unit_obj,
279 283
                    'place_object': place,
280 284
                }
281 285
            units[unit_id] = places
282 286
        data[activity_id] = units
passerelle/locale/fr/LC_MESSAGES/django.po
2153 2153
"Décompose les événements reliés à des parties de journées si positionné"
2154 2154

  
2155 2155
#: apps/maelis/models.py:504
2156 2156
msgid "Subscribe"
2157 2157
msgstr "Inscription"
2158 2158

  
2159 2159
#: apps/maelis/models.py:508 apps/maelis/models.py:540
2160 2160
msgid "Activity ID"
2161
msgstr "Identifiant de l'activités"
2161
msgstr "Identifiant de l'activité"
2162 2162

  
2163 2163
#: apps/maelis/models.py:509
2164 2164
msgid "Unit ID"
2165 2165
msgstr "Identifiant de l'unité"
2166 2166

  
2167 2167
#: apps/maelis/models.py:510
2168 2168
msgid "Place ID"
2169 2169
msgstr "Identifiant du lieu"
tests/data/maelis/child_activities.json
1 1
{
2 2
    "data": [
3 3
        {
4
            "activity_end_date": "2021-07-06T00:00:00+02:00",
4 5
            "activity_id": "A10003121692",
5 6
            "activity_object": {
6 7
                "activityPortail": {
7 8
                    "activityType": {
8 9
                        "code": "ACCMAT",
9 10
                        "libelle": "Accueil du matin",
10 11
                        "natureSpec": {
11 12
                            "code": "A",
......
33 34
                    "weeklyCalendarActivityList": [
34 35
                        {
35 36
                            "weeklyCalendarStr": "0010011",
36 37
                            "yearCalendar": 2020
37 38
                        }
38 39
                    ]
39 40
                }
40 41
            },
42
            "activity_start_date": "2020-09-01T00:00:00+02:00",
41 43
            "activity_text": "1 2020-2021 GARDERIE MATIN",
42 44
            "activity_weekly_planning_mask": "0010011",
43 45
            "id": "A10003121692-A10003121694-A10000000201",
44 46
            "place_id": "A10000000201",
45 47
            "place_object": {
46 48
                "adresse": {
47 49
                    "idStreet": null,
48 50
                    "num": 0,
......
96 98
                "topCESU": "O",
97 99
                "typeCtrlPlace": "N"
98 100
            },
99 101
            "unit_text": "1 2020-2021 GARDERIE MATIN",
100 102
            "unit_weekly_planning": "XX1XX11",
101 103
            "user_subscribing_status": "not-subscribed"
102 104
        },
103 105
        {
106
            "activity_end_date": "2021-07-06T00:00:00+02:00",
104 107
            "activity_id": "A10003121692",
105 108
            "activity_object": {
106 109
                "activityPortail": {
107 110
                    "activityType": {
108 111
                        "code": "ACCMAT",
109 112
                        "libelle": "Accueil du matin",
110 113
                        "natureSpec": {
111 114
                            "code": "A",
......
133 136
                    "weeklyCalendarActivityList": [
134 137
                        {
135 138
                            "weeklyCalendarStr": "0010011",
136 139
                            "yearCalendar": 2020
137 140
                        }
138 141
                    ]
139 142
                }
140 143
            },
144
            "activity_start_date": "2020-09-01T00:00:00+02:00",
141 145
            "activity_text": "1 2020-2021 GARDERIE MATIN",
142 146
            "activity_weekly_planning_mask": "0010011",
143 147
            "id": "A10003121692-A10003121694-A10000000211",
144 148
            "place_id": "A10000000211",
145 149
            "place_object": {
146 150
                "adresse": {
147 151
                    "idStreet": null,
148 152
                    "num": 0,
......
196 200
                "topCESU": "O",
197 201
                "typeCtrlPlace": "N"
198 202
            },
199 203
            "unit_text": "1 2020-2021 GARDERIE MATIN",
200 204
            "unit_weekly_planning": "XX1XX11",
201 205
            "user_subscribing_status": "subscribed"
202 206
        },
203 207
        {
208
            "activity_end_date": "2021-07-03T00:00:00+02:00",
204 209
            "activity_id": "A10003123490",
205 210
            "activity_object": {
206 211
                "activityPortail": {
207 212
                    "activityType": {
208 213
                        "code": "RESTSCOL",
209 214
                        "libelle": "Restauration scolaire",
210 215
                        "natureSpec": {
211 216
                            "code": "R",
......
233 238
                    "weeklyCalendarActivityList": [
234 239
                        {
235 240
                            "weeklyCalendarStr": "0010011",
236 241
                            "yearCalendar": 2020
237 242
                        }
238 243
                    ]
239 244
                }
240 245
            },
246
            "activity_start_date": "2020-09-02T00:00:00+02:00",
241 247
            "activity_text": "2 2020-2021  RESTAURATION SCOLAIRE",
242 248
            "activity_weekly_planning_mask": "0010011",
243 249
            "id": "A10003123490-A10003123492-A10000000211",
244 250
            "place_id": "A10000000211",
245 251
            "place_object": {
246 252
                "adresse": {
247 253
                    "idStreet": null,
248 254
                    "num": 0,
......
333 339
                "topCESU": "N",
334 340
                "typeCtrlPlace": "N"
335 341
            },
336 342
            "unit_text": "2 2020-2021  RESTAURATION SCOLAIRE",
337 343
            "unit_weekly_planning": "XX1XX11",
338 344
            "user_subscribing_status": "subscribed"
339 345
        },
340 346
        {
347
            "activity_end_date": "2021-07-03T00:00:00+02:00",
341 348
            "activity_id": "A10003123507",
342 349
            "activity_object": {
343 350
                "activityPortail": {
344 351
                    "activityType": {
345 352
                        "code": "ACCSOIR",
346 353
                        "libelle": "Accueil du soir",
347 354
                        "natureSpec": {
348 355
                            "code": "A",
......
366 373
                    "schoolControl": null,
367 374
                    "schoolNature": null,
368 375
                    "schoolYear": 2020,
369 376
                    "waitIfComplete": "N",
370 377
                    "weeklyCalendarActivityList": []
371 378
                },
372 379
                "openDayList": []
373 380
            },
381
            "activity_start_date": "2020-09-02T00:00:00+02:00",
374 382
            "activity_text": "3 2020-2021 GARDERIE SOIR",
375 383
            "activity_weekly_planning_mask": "0000000",
376 384
            "id": "A10003123507-A10003123509-A10000000201",
377 385
            "place_id": "A10000000201",
378 386
            "place_object": {
379 387
                "adresse": {
380 388
                    "idStreet": null,
381 389
                    "num": 0,
......
429 437
                "topCESU": "O",
430 438
                "typeCtrlPlace": "N"
431 439
            },
432 440
            "unit_text": "3 2020-2021 GARDERIE SOIR",
433 441
            "unit_weekly_planning": "XXXXXXX",
434 442
            "user_subscribing_status": "not-subscribed"
435 443
        },
436 444
        {
445
            "activity_end_date": "2021-07-03T00:00:00+02:00",
437 446
            "activity_id": "A10003123507",
438 447
            "activity_object": {
439 448
                "activityPortail": {
440 449
                    "activityType": {
441 450
                        "code": "ACCSOIR",
442 451
                        "libelle": "Accueil du soir",
443 452
                        "natureSpec": {
444 453
                            "code": "A",
......
462 471
                    "schoolControl": null,
463 472
                    "schoolNature": null,
464 473
                    "schoolYear": 2020,
465 474
                    "waitIfComplete": "N",
466 475
                    "weeklyCalendarActivityList": []
467 476
                },
468 477
                "openDayList": []
469 478
            },
479
            "activity_start_date": "2020-09-02T00:00:00+02:00",
470 480
            "activity_text": "3 2020-2021 GARDERIE SOIR",
471 481
            "activity_weekly_planning_mask": "0000000",
472 482
            "id": "A10003123507-A10003123509-A10000000211",
473 483
            "place_id": "A10000000211",
474 484
            "place_object": {
475 485
                "adresse": {
476 486
                    "idStreet": null,
477 487
                    "num": 0,
......
525 535
                "topCESU": "O",
526 536
                "typeCtrlPlace": "N"
527 537
            },
528 538
            "unit_text": "3 2020-2021 GARDERIE SOIR",
529 539
            "unit_weekly_planning": "XXXXXXX",
530 540
            "user_subscribing_status": "not-subscribed"
531 541
        },
532 542
        {
543
            "activity_end_date": "2021-07-02T00:00:00+02:00",
533 544
            "activity_id": "A10003131850",
534 545
            "activity_object": {
535 546
                "activityPortail": {
536 547
                    "activityType": {
537 548
                        "code": "?",
538 549
                        "libelle": "Inconnu",
539 550
                        "natureSpec": {
540 551
                            "code": "?",
......
562 573
                    "weeklyCalendarActivityList": [
563 574
                        {
564 575
                            "weeklyCalendarStr": "0000011",
565 576
                            "yearCalendar": 2020
566 577
                        }
567 578
                    ]
568 579
                }
569 580
            },
581
            "activity_start_date": "2020-07-01T00:00:00+02:00",
570 582
            "activity_text": "2020-2021 ALSH VACANCES PAGNOL (CAPA)",
571 583
            "activity_weekly_planning_mask": "0000011",
572 584
            "id": "A10003131850-A10003131861-A10000000212",
573 585
            "place_id": "A10000000212",
574 586
            "place_object": {
575 587
                "adresse": {
576 588
                    "idStreet": null,
577 589
                    "num": 0,
......
636 648
                "topCESU": "N",
637 649
                "typeCtrlPlace": "N"
638 650
            },
639 651
            "unit_text": "HIVER 2EME SEMAINE",
640 652
            "unit_weekly_planning": "ccccc11",
641 653
            "user_subscribing_status": "not-subscribed"
642 654
        },
643 655
        {
656
            "activity_end_date": "2021-07-02T00:00:00+02:00",
644 657
            "activity_id": "A10003131850",
645 658
            "activity_object": {
646 659
                "activityPortail": {
647 660
                    "activityType": {
648 661
                        "code": "?",
649 662
                        "libelle": "Inconnu",
650 663
                        "natureSpec": {
651 664
                            "code": "?",
......
673 686
                    "weeklyCalendarActivityList": [
674 687
                        {
675 688
                            "weeklyCalendarStr": "0000011",
676 689
                            "yearCalendar": 2020
677 690
                        }
678 691
                    ]
679 692
                }
680 693
            },
694
            "activity_start_date": "2020-07-01T00:00:00+02:00",
681 695
            "activity_text": "2020-2021 ALSH VACANCES PAGNOL (CAPA)",
682 696
            "activity_weekly_planning_mask": "0000011",
683 697
            "id": "A10003131850-A10003131861-A10002132200",
684 698
            "place_id": "A10002132200",
685 699
            "place_object": {
686 700
                "adresse": {
687 701
                    "idStreet": null,
688 702
                    "num": 0,
......
747 761
                "topCESU": "N",
748 762
                "typeCtrlPlace": "N"
749 763
            },
750 764
            "unit_text": "HIVER 2EME SEMAINE",
751 765
            "unit_weekly_planning": "ccccc11",
752 766
            "user_subscribing_status": "not-subscribed"
753 767
        },
754 768
        {
769
            "activity_end_date": "2021-07-02T00:00:00+02:00",
755 770
            "activity_id": "A10003131850",
756 771
            "activity_object": {
757 772
                "activityPortail": {
758 773
                    "activityType": {
759 774
                        "code": "?",
760 775
                        "libelle": "Inconnu",
761 776
                        "natureSpec": {
762 777
                            "code": "?",
......
784 799
                    "weeklyCalendarActivityList": [
785 800
                        {
786 801
                            "weeklyCalendarStr": "0000011",
787 802
                            "yearCalendar": 2020
788 803
                        }
789 804
                    ]
790 805
                }
791 806
            },
807
            "activity_start_date": "2020-07-01T00:00:00+02:00",
792 808
            "activity_text": "2020-2021 ALSH VACANCES PAGNOL (CAPA)",
793 809
            "activity_weekly_planning_mask": "0000011",
794 810
            "id": "A10003131850-A10003131879-A10000000212",
795 811
            "place_id": "A10000000212",
796 812
            "place_object": {
797 813
                "adresse": {
798 814
                    "idStreet": null,
799 815
                    "num": 0,
......
858 874
                "topCESU": "N",
859 875
                "typeCtrlPlace": "N"
860 876
            },
861 877
            "unit_text": "TOUSSAINT 2EME SEMAINE",
862 878
            "unit_weekly_planning": "DDDDD11",
863 879
            "user_subscribing_status": "not-subscribed"
864 880
        },
865 881
        {
882
            "activity_end_date": "2021-07-02T00:00:00+02:00",
866 883
            "activity_id": "A10003131850",
867 884
            "activity_object": {
868 885
                "activityPortail": {
869 886
                    "activityType": {
870 887
                        "code": "?",
871 888
                        "libelle": "Inconnu",
872 889
                        "natureSpec": {
873 890
                            "code": "?",
......
895 912
                    "weeklyCalendarActivityList": [
896 913
                        {
897 914
                            "weeklyCalendarStr": "0000011",
898 915
                            "yearCalendar": 2020
899 916
                        }
900 917
                    ]
901 918
                }
902 919
            },
920
            "activity_start_date": "2020-07-01T00:00:00+02:00",
903 921
            "activity_text": "2020-2021 ALSH VACANCES PAGNOL (CAPA)",
904 922
            "activity_weekly_planning_mask": "0000011",
905 923
            "id": "A10003131850-A10003131879-A10002132200",
906 924
            "place_id": "A10002132200",
907 925
            "place_object": {
908 926
                "adresse": {
909 927
                    "idStreet": null,
910 928
                    "num": 0,
......
969 987
                "topCESU": "N",
970 988
                "typeCtrlPlace": "N"
971 989
            },
972 990
            "unit_text": "TOUSSAINT 2EME SEMAINE",
973 991
            "unit_weekly_planning": "DDDDD11",
974 992
            "user_subscribing_status": "not-subscribed"
975 993
        },
976 994
        {
995
            "activity_end_date": "2021-07-02T00:00:00+02:00",
977 996
            "activity_id": "A10003131850",
978 997
            "activity_object": {
979 998
                "activityPortail": {
980 999
                    "activityType": {
981 1000
                        "code": "?",
982 1001
                        "libelle": "Inconnu",
983 1002
                        "natureSpec": {
984 1003
                            "code": "?",
......
1006 1025
                    "weeklyCalendarActivityList": [
1007 1026
                        {
1008 1027
                            "weeklyCalendarStr": "0000011",
1009 1028
                            "yearCalendar": 2020
1010 1029
                        }
1011 1030
                    ]
1012 1031
                }
1013 1032
            },
1033
            "activity_start_date": "2020-07-01T00:00:00+02:00",
1014 1034
            "activity_text": "2020-2021 ALSH VACANCES PAGNOL (CAPA)",
1015 1035
            "activity_weekly_planning_mask": "0000011",
1016 1036
            "id": "A10003131850-A10003131882-A10000000212",
1017 1037
            "place_id": "A10000000212",
1018 1038
            "place_object": {
1019 1039
                "adresse": {
1020 1040
                    "idStreet": null,
1021 1041
                    "num": 0,
......
1080 1100
                "topCESU": "N",
1081 1101
                "typeCtrlPlace": "N"
1082 1102
            },
1083 1103
            "unit_text": "TOUSSAINT 1 ERE SEMAINE",
1084 1104
            "unit_weekly_planning": "CCCCC11",
1085 1105
            "user_subscribing_status": "not-subscribed"
1086 1106
        },
1087 1107
        {
1108
            "activity_end_date": "2021-07-02T00:00:00+02:00",
1088 1109
            "activity_id": "A10003131850",
1089 1110
            "activity_object": {
1090 1111
                "activityPortail": {
1091 1112
                    "activityType": {
1092 1113
                        "code": "?",
1093 1114
                        "libelle": "Inconnu",
1094 1115
                        "natureSpec": {
1095 1116
                            "code": "?",
......
1117 1138
                    "weeklyCalendarActivityList": [
1118 1139
                        {
1119 1140
                            "weeklyCalendarStr": "0000011",
1120 1141
                            "yearCalendar": 2020
1121 1142
                        }
1122 1143
                    ]
1123 1144
                }
1124 1145
            },
1146
            "activity_start_date": "2020-07-01T00:00:00+02:00",
1125 1147
            "activity_text": "2020-2021 ALSH VACANCES PAGNOL (CAPA)",
1126 1148
            "activity_weekly_planning_mask": "0000011",
1127 1149
            "id": "A10003131850-A10003131882-A10002132200",
1128 1150
            "place_id": "A10002132200",
1129 1151
            "place_object": {
1130 1152
                "adresse": {
1131 1153
                    "idStreet": null,
1132 1154
                    "num": 0,
......
1191 1213
                "topCESU": "N",
1192 1214
                "typeCtrlPlace": "N"
1193 1215
            },
1194 1216
            "unit_text": "TOUSSAINT 1 ERE SEMAINE",
1195 1217
            "unit_weekly_planning": "CCCCC11",
1196 1218
            "user_subscribing_status": "not-subscribed"
1197 1219
        },
1198 1220
        {
1221
            "activity_end_date": "2021-07-02T00:00:00+02:00",
1199 1222
            "activity_id": "A10003131850",
1200 1223
            "activity_object": {
1201 1224
                "activityPortail": {
1202 1225
                    "activityType": {
1203 1226
                        "code": "?",
1204 1227
                        "libelle": "Inconnu",
1205 1228
                        "natureSpec": {
1206 1229
                            "code": "?",
......
1228 1251
                    "weeklyCalendarActivityList": [
1229 1252
                        {
1230 1253
                            "weeklyCalendarStr": "0000011",
1231 1254
                            "yearCalendar": 2020
1232 1255
                        }
1233 1256
                    ]
1234 1257
                }
1235 1258
            },
1259
            "activity_start_date": "2020-07-01T00:00:00+02:00",
1236 1260
            "activity_text": "2020-2021 ALSH VACANCES PAGNOL (CAPA)",
1237 1261
            "activity_weekly_planning_mask": "0000011",
1238 1262
            "id": "A10003131850-A10003131903-A10000000212",
1239 1263
            "place_id": "A10000000212",
1240 1264
            "place_object": {
1241 1265
                "adresse": {
1242 1266
                    "idStreet": null,
1243 1267
                    "num": 0,
......
1302 1326
                "topCESU": "O",
1303 1327
                "typeCtrlPlace": "N"
1304 1328
            },
1305 1329
            "unit_text": "NOEL 2EME SEMAINE",
1306 1330
            "unit_weekly_planning": "BBBBB11",
1307 1331
            "user_subscribing_status": "not-subscribed"
1308 1332
        },
1309 1333
        {
1334
            "activity_end_date": "2021-07-02T00:00:00+02:00",
1310 1335
            "activity_id": "A10003131850",
1311 1336
            "activity_object": {
1312 1337
                "activityPortail": {
1313 1338
                    "activityType": {
1314 1339
                        "code": "?",
1315 1340
                        "libelle": "Inconnu",
1316 1341
                        "natureSpec": {
1317 1342
                            "code": "?",
......
1339 1364
                    "weeklyCalendarActivityList": [
1340 1365
                        {
1341 1366
                            "weeklyCalendarStr": "0000011",
1342 1367
                            "yearCalendar": 2020
1343 1368
                        }
1344 1369
                    ]
1345 1370
                }
1346 1371
            },
1372
            "activity_start_date": "2020-07-01T00:00:00+02:00",
1347 1373
            "activity_text": "2020-2021 ALSH VACANCES PAGNOL (CAPA)",
1348 1374
            "activity_weekly_planning_mask": "0000011",
1349 1375
            "id": "A10003131850-A10003131903-A10002132200",
1350 1376
            "place_id": "A10002132200",
1351 1377
            "place_object": {
1352 1378
                "adresse": {
1353 1379
                    "idStreet": null,
1354 1380
                    "num": 0,
......
1413 1439
                "topCESU": "O",
1414 1440
                "typeCtrlPlace": "N"
1415 1441
            },
1416 1442
            "unit_text": "NOEL 2EME SEMAINE",
1417 1443
            "unit_weekly_planning": "BBBBB11",
1418 1444
            "user_subscribing_status": "not-subscribed"
1419 1445
        },
1420 1446
        {
1447
            "activity_end_date": "2021-07-02T00:00:00+02:00",
1421 1448
            "activity_id": "A10003131850",
1422 1449
            "activity_object": {
1423 1450
                "activityPortail": {
1424 1451
                    "activityType": {
1425 1452
                        "code": "?",
1426 1453
                        "libelle": "Inconnu",
1427 1454
                        "natureSpec": {
1428 1455
                            "code": "?",
......
1450 1477
                    "weeklyCalendarActivityList": [
1451 1478
                        {
1452 1479
                            "weeklyCalendarStr": "0000011",
1453 1480
                            "yearCalendar": 2020
1454 1481
                        }
1455 1482
                    ]
1456 1483
                }
1457 1484
            },
1485
            "activity_start_date": "2020-07-01T00:00:00+02:00",
1458 1486
            "activity_text": "2020-2021 ALSH VACANCES PAGNOL (CAPA)",
1459 1487
            "activity_weekly_planning_mask": "0000011",
1460 1488
            "id": "A10003131850-A10003131909-A10000000212",
1461 1489
            "place_id": "A10000000212",
1462 1490
            "place_object": {
1463 1491
                "adresse": {
1464 1492
                    "idStreet": null,
1465 1493
                    "num": 0,
......
1524 1552
                "topCESU": "N",
1525 1553
                "typeCtrlPlace": "N"
1526 1554
            },
1527 1555
            "unit_text": "NOEL 1ERE SEMAINE",
1528 1556
            "unit_weekly_planning": "JJJJJ11",
1529 1557
            "user_subscribing_status": "not-subscribed"
1530 1558
        },
1531 1559
        {
1560
            "activity_end_date": "2021-07-02T00:00:00+02:00",
1532 1561
            "activity_id": "A10003131850",
1533 1562
            "activity_object": {
1534 1563
                "activityPortail": {
1535 1564
                    "activityType": {
1536 1565
                        "code": "?",
1537 1566
                        "libelle": "Inconnu",
1538 1567
                        "natureSpec": {
1539 1568
                            "code": "?",
......
1561 1590
                    "weeklyCalendarActivityList": [
1562 1591
                        {
1563 1592
                            "weeklyCalendarStr": "0000011",
1564 1593
                            "yearCalendar": 2020
1565 1594
                        }
1566 1595
                    ]
1567 1596
                }
1568 1597
            },
1598
            "activity_start_date": "2020-07-01T00:00:00+02:00",
1569 1599
            "activity_text": "2020-2021 ALSH VACANCES PAGNOL (CAPA)",
1570 1600
            "activity_weekly_planning_mask": "0000011",
1571 1601
            "id": "A10003131850-A10003131909-A10002132200",
1572 1602
            "place_id": "A10002132200",
1573 1603
            "place_object": {
1574 1604
                "adresse": {
1575 1605
                    "idStreet": null,
1576 1606
                    "num": 0,
......
1635 1665
                "topCESU": "N",
1636 1666
                "typeCtrlPlace": "N"
1637 1667
            },
1638 1668
            "unit_text": "NOEL 1ERE SEMAINE",
1639 1669
            "unit_weekly_planning": "JJJJJ11",
1640 1670
            "user_subscribing_status": "not-subscribed"
1641 1671
        },
1642 1672
        {
1673
            "activity_end_date": "2021-07-03T00:00:00+02:00",
1643 1674
            "activity_id": "A10003132030",
1644 1675
            "activity_object": {
1645 1676
                "activityPortail": {
1646 1677
                    "activityType": {
1647 1678
                        "code": "?",
1648 1679
                        "libelle": "Inconnu",
1649 1680
                        "natureSpec": {
1650 1681
                            "code": "?",
......
1672 1703
                    "weeklyCalendarActivityList": [
1673 1704
                        {
1674 1705
                            "weeklyCalendarStr": "1101111",
1675 1706
                            "yearCalendar": 2020
1676 1707
                        }
1677 1708
                    ]
1678 1709
                }
1679 1710
            },
1711
            "activity_start_date": "2020-09-02T00:00:00+02:00",
1680 1712
            "activity_text": "2020-2021 CENTRE DE LOISIRS MERCREDI",
1681 1713
            "activity_weekly_planning_mask": "1101111",
1682 1714
            "id": "A10003132030-A10003132034-A10000000212",
1683 1715
            "place_id": "A10000000212",
1684 1716
            "place_object": {
1685 1717
                "adresse": {
1686 1718
                    "idStreet": null,
1687 1719
                    "num": 0,
......
1735 1767
                "topCESU": "N",
1736 1768
                "typeCtrlPlace": "N"
1737 1769
            },
1738 1770
            "unit_text": "JOURNEE",
1739 1771
            "unit_weekly_planning": "11A1111",
1740 1772
            "user_subscribing_status": "not-subscribed"
1741 1773
        },
1742 1774
        {
1775
            "activity_end_date": "2021-07-03T00:00:00+02:00",
1743 1776
            "activity_id": "A10003132030",
1744 1777
            "activity_object": {
1745 1778
                "activityPortail": {
1746 1779
                    "activityType": {
1747 1780
                        "code": "?",
1748 1781
                        "libelle": "Inconnu",
1749 1782
                        "natureSpec": {
1750 1783
                            "code": "?",
......
1772 1805
                    "weeklyCalendarActivityList": [
1773 1806
                        {
1774 1807
                            "weeklyCalendarStr": "1101111",
1775 1808
                            "yearCalendar": 2020
1776 1809
                        }
1777 1810
                    ]
1778 1811
                }
1779 1812
            },
1813
            "activity_start_date": "2020-09-02T00:00:00+02:00",
1780 1814
            "activity_text": "2020-2021 CENTRE DE LOISIRS MERCREDI",
1781 1815
            "activity_weekly_planning_mask": "1101111",
1782 1816
            "id": "A10003132030-A10003132036-A10000000212",
1783 1817
            "place_id": "A10000000212",
1784 1818
            "place_object": {
1785 1819
                "adresse": {
1786 1820
                    "idStreet": null,
1787 1821
                    "num": 0,
......
1835 1869
                "topCESU": "N",
1836 1870
                "typeCtrlPlace": "N"
1837 1871
            },
1838 1872
            "unit_text": "MATIN",
1839 1873
            "unit_weekly_planning": "11B1111",
1840 1874
            "user_subscribing_status": "not-subscribed"
1841 1875
        },
1842 1876
        {
1877
            "activity_end_date": "2021-07-03T00:00:00+02:00",
1843 1878
            "activity_id": "A10003132030",
1844 1879
            "activity_object": {
1845 1880
                "activityPortail": {
1846 1881
                    "activityType": {
1847 1882
                        "code": "?",
1848 1883
                        "libelle": "Inconnu",
1849 1884
                        "natureSpec": {
1850 1885
                            "code": "?",
......
1872 1907
                    "weeklyCalendarActivityList": [
1873 1908
                        {
1874 1909
                            "weeklyCalendarStr": "1101111",
1875 1910
                            "yearCalendar": 2020
1876 1911
                        }
1877 1912
                    ]
1878 1913
                }
1879 1914
            },
1915
            "activity_start_date": "2020-09-02T00:00:00+02:00",
1880 1916
            "activity_text": "2020-2021 CENTRE DE LOISIRS MERCREDI",
1881 1917
            "activity_weekly_planning_mask": "1101111",
1882 1918
            "id": "A10003132030-A10003132038-A10000000212",
1883 1919
            "place_id": "A10000000212",
1884 1920
            "place_object": {
1885 1921
                "adresse": {
1886 1922
                    "idStreet": null,
1887 1923
                    "num": 0,
......
1935 1971
                "topCESU": "N",
1936 1972
                "typeCtrlPlace": "N"
1937 1973
            },
1938 1974
            "unit_text": "MATIN ET REPAS",
1939 1975
            "unit_weekly_planning": "11C1111",
1940 1976
            "user_subscribing_status": "not-subscribed"
1941 1977
        },
1942 1978
        {
1979
            "activity_end_date": "2021-07-03T00:00:00+02:00",
1943 1980
            "activity_id": "A10003132030",
1944 1981
            "activity_object": {
1945 1982
                "activityPortail": {
1946 1983
                    "activityType": {
1947 1984
                        "code": "?",
1948 1985
                        "libelle": "Inconnu",
1949 1986
                        "natureSpec": {
1950 1987
                            "code": "?",
......
1972 2009
                    "weeklyCalendarActivityList": [
1973 2010
                        {
1974 2011
                            "weeklyCalendarStr": "1101111",
1975 2012
                            "yearCalendar": 2020
1976 2013
                        }
1977 2014
                    ]
1978 2015
                }
1979 2016
            },
2017
            "activity_start_date": "2020-09-02T00:00:00+02:00",
1980 2018
            "activity_text": "2020-2021 CENTRE DE LOISIRS MERCREDI",
1981 2019
            "activity_weekly_planning_mask": "1101111",
1982 2020
            "id": "A10003132030-A10003132040-A10000000212",
1983 2021
            "place_id": "A10000000212",
1984 2022
            "place_object": {
1985 2023
                "adresse": {
1986 2024
                    "idStreet": null,
1987 2025
                    "num": 0,
......
2035 2073
                "topCESU": "N",
2036 2074
                "typeCtrlPlace": "N"
2037 2075
            },
2038 2076
            "unit_text": "APRES MIDI",
2039 2077
            "unit_weekly_planning": "11D1111",
2040 2078
            "user_subscribing_status": "not-subscribed"
2041 2079
        },
2042 2080
        {
2081
            "activity_end_date": "2021-07-31",
2043 2082
            "activity_id": "A10003132090",
2044 2083
            "activity_object": {
2045 2084
                "activityPortail": {
2046 2085
                    "activityType": {
2047 2086
                        "code": "LOIVAC",
2048 2087
                        "libelle": "(Loisirs Vacances)",
2049 2088
                        "natureSpec": {
2050 2089
                            "code": "L",
......
2072 2111
                    "weeklyCalendarActivityList": [
2073 2112
                        {
2074 2113
                            "weeklyCalendarStr": "0000011",
2075 2114
                            "yearCalendar": 2020
2076 2115
                        }
2077 2116
                    ]
2078 2117
                }
2079 2118
            },
2119
            "activity_start_date": "2020-01-01T00:00:00+02:00",
2080 2120
            "activity_text": "COURS DE DANSE",
2081 2121
            "activity_weekly_planning_mask": "0000011",
2082 2122
            "id": "A10003132090-A10003132091-A10000000212",
2083 2123
            "place_id": "A10000000212",
2084 2124
            "place_object": {
2085 2125
                "adresse": {
2086 2126
                    "idStreet": null,
2087 2127
                    "num": 0,
......
2123 2163
                "topCESU": "N",
2124 2164
                "typeCtrlPlace": "N"
2125 2165
            },
2126 2166
            "unit_text": "COURS DE DANSE",
2127 2167
            "unit_weekly_planning": "XXXXX11",
2128 2168
            "user_subscribing_status": "not-subscribed"
2129 2169
        },
2130 2170
        {
2171
            "activity_end_date": "2021-07-31",
2131 2172
            "activity_id": "A10003132150",
2132 2173
            "activity_object": {
2133 2174
                "activityPortail": {
2134 2175
                    "activityType": {
2135 2176
                        "code": "LOIVAC",
2136 2177
                        "libelle": "(Loisirs Vacances)",
2137 2178
                        "natureSpec": {
2138 2179
                            "code": "L",
......
2156 2197
                    "schoolControl": null,
2157 2198
                    "schoolNature": null,
2158 2199
                    "schoolYear": 2020,
2159 2200
                    "waitIfComplete": "N",
2160 2201
                    "weeklyCalendarActivityList": []
2161 2202
                },
2162 2203
                "openDayList": []
2163 2204
            },
2205
            "activity_start_date": "2020-01-01T00:00:00+02:00",
2164 2206
            "activity_text": "LASERQUEST",
2165 2207
            "activity_weekly_planning_mask": "0000000",
2166 2208
            "id": "A10003132150-A10003132152-A10000000212",
2167 2209
            "place_id": "A10000000212",
2168 2210
            "place_object": {
2169 2211
                "adresse": {
2170 2212
                    "idStreet": null,
2171 2213
                    "num": 0,
......
2207 2249
                "topCESU": "N",
2208 2250
                "typeCtrlPlace": "N"
2209 2251
            },
2210 2252
            "unit_text": "LASERQUEST",
2211 2253
            "unit_weekly_planning": "XXXXXXX",
2212 2254
            "user_subscribing_status": "not-subscribed"
2213 2255
        },
2214 2256
        {
2257
            "activity_end_date": "2021-07-31",
2215 2258
            "activity_id": "A10003132271",
2216 2259
            "activity_object": {
2217 2260
                "activityPortail": {
2218 2261
                    "activityType": {
2219 2262
                        "code": "LOIVAC",
2220 2263
                        "libelle": "(Loisirs Vacances)",
2221 2264
                        "natureSpec": {
2222 2265
                            "code": "L",
......
2240 2283
                    "schoolControl": null,
2241 2284
                    "schoolNature": null,
2242 2285
                    "schoolYear": 2020,
2243 2286
                    "waitIfComplete": "N",
2244 2287
                    "weeklyCalendarActivityList": []
2245 2288
                },
2246 2289
                "openDayList": []
2247 2290
            },
2291
            "activity_start_date": "2020-09-02T00:00:00+02:00",
2248 2292
            "activity_text": "EQUITATION",
2249 2293
            "activity_weekly_planning_mask": "0000000",
2250 2294
            "id": "A10003132271-A10003132273-A10000000212",
2251 2295
            "place_id": "A10000000212",
2252 2296
            "place_object": {
2253 2297
                "adresse": {
2254 2298
                    "idStreet": null,
2255 2299
                    "num": 0,
......
2291 2335
                "topCESU": "N",
2292 2336
                "typeCtrlPlace": "N"
2293 2337
            },
2294 2338
            "unit_text": "EQUITATION",
2295 2339
            "unit_weekly_planning": "XXXXXXX",
2296 2340
            "user_subscribing_status": "not-subscribed"
2297 2341
        },
2298 2342
        {
2343
            "activity_end_date": "2021-07-31",
2299 2344
            "activity_id": "A10003132293",
2300 2345
            "activity_object": {
2301 2346
                "activityPortail": {
2302 2347
                    "activityType": {
2303 2348
                        "code": "LOIVAC",
2304 2349
                        "libelle": "(Loisirs Vacances)",
2305 2350
                        "natureSpec": {
2306 2351
                            "code": "L",
......
2324 2369
                    "schoolControl": null,
2325 2370
                    "schoolNature": null,
2326 2371
                    "schoolYear": 2020,
2327 2372
                    "waitIfComplete": "N",
2328 2373
                    "weeklyCalendarActivityList": []
2329 2374
                },
2330 2375
                "openDayList": []
2331 2376
            },
2377
            "activity_start_date": "2020-01-01T00:00:00+02:00",
2332 2378
            "activity_text": "SORTIE MUSEE",
2333 2379
            "activity_weekly_planning_mask": "0000000",
2334 2380
            "id": "A10003132293-A10003132295-A10000000212",
2335 2381
            "place_id": "A10000000212",
2336 2382
            "place_object": {
2337 2383
                "adresse": {
2338 2384
                    "idStreet": null,
2339 2385
                    "num": 0,
2340
-