feat: Ajouter upload manuel de PDF signé pour avenants
- Nouvelle modale UploadSignedPdfModal avec drag & drop
- API route /api/staff/amendments/[id]/upload-signed-pdf
- Upload vers S3 avec pattern avenants/{ref}_avenant_signed_{timestamp}.pdf
- Mise à jour automatique statut → 'signed' et signature_status → 'signed'
- Validation du fichier (PDF uniquement, max 10MB)
- Bouton 'Ajouter PDF signé' sur page détail avenant
This commit is contained in:
parent
26132f38ce
commit
1d9145a0b2
6 changed files with 605 additions and 17 deletions
105
Contrats de travail-Tous les CDDU.csv
Normal file
105
Contrats de travail-Tous les CDDU.csv
Normal file
|
|
@ -0,0 +1,105 @@
|
||||||
|
Reference,Structure API,Date avenant,Effet avenant,Élément(s) à avenanter
|
||||||
|
DK1M4LEQ,Association Atelier Moz,3/7/2025,3/7/2025,"Durée de l'engagement,Rémunération"
|
||||||
|
14SJX34R,La Petite Légèreté,14/6/2025,14/6/2025,"Durée de l'engagement,Rémunération"
|
||||||
|
FR6BWZ6N,La Petite Légèreté,14/6/2025,14/6/2025,"Durée de l'engagement,Rémunération"
|
||||||
|
9JWKKVLK,Cette Compagnie Là,14/5/2025,14/5/2025,"Durée de l'engagement,Rémunération"
|
||||||
|
IDCPDYU3,Association Atelier Moz,9/5/2025,9/5/2025,"Durée de l'engagement,Rémunération"
|
||||||
|
Q3P4W8R5T,Via Arte Éducation,15/5/2025,15/5/2025,"Durée de l'engagement,Rémunération"
|
||||||
|
J4R2QQNV,Compagnie The Singing Mice,2/4/2025,2/4/2025,Durée de l'engagement
|
||||||
|
WGAK2AW2,Compagnie The Singing Mice,10/4/2025,10/4/2025,"Durée de l'engagement,Rémunération"
|
||||||
|
2M4JPV9DS,Via Arte Éducation,8/4/2025,8/4/2025,"Durée de l'engagement,Rémunération"
|
||||||
|
9NTRD1KX8,Via Arte Éducation,25/4/2025,25/4/2025,"Durée de l'engagement,Rémunération"
|
||||||
|
6KAL6ICS,Monstera In The Wild,13/3/2025,13/3/2025,Durée de l'engagement
|
||||||
|
2T3JX82Z,Association Atelier Moz,19/3/2025,19/3/2025,"Durée de l'engagement,Rémunération"
|
||||||
|
IXP6YMN7,Compagnie des Doux Sauvages,23/2/2025,23/2/2025,Rémunération
|
||||||
|
2WSMYDIX,Compagnie Lazara,22/2/2025,22/2/2025,"Durée de l'engagement,Rémunération"
|
||||||
|
L77B3JTXM,Via Arte Éducation,13/2/2025,13/2/2025,"Durée de l'engagement,Rémunération"
|
||||||
|
29TLJGPQA,Via Arte Éducation,11/2/2025,11/2/2025,"Durée de l'engagement,Rémunération"
|
||||||
|
5LZHSRRQ,Compagnie The Singing Mice,12/2/2025,5/2/2025,Rémunération
|
||||||
|
ZVIBR6FZ1,Via Arte Éducation,13/2/2025,13/2/2025,"Durée de l'engagement,Rémunération"
|
||||||
|
CYDUMW3FG,Via Arte Éducation,14/1/2025,14/1/2025,"Durée de l'engagement,Rémunération"
|
||||||
|
SVA5MNZ9V,Via Arte Éducation,18/12/2024,18/12/2024,"Durée de l'engagement,Rémunération"
|
||||||
|
VU4AC265,Compagnie The Singing Mice,11/12/2024,11/12/2024,"Durée de l'engagement,Rémunération"
|
||||||
|
4IV9411Y,Compagnie The Singing Mice,11/12/2024,11/12/2024,Durée de l'engagement
|
||||||
|
SHQ8YDTJW,Via Arte Éducation,9/12/2024,9/12/2024,"Durée de l'engagement,Rémunération"
|
||||||
|
517NU12QH,Via Arte Éducation,6/12/2024,6/12/2024,"Durée de l'engagement,Rémunération"
|
||||||
|
KLYSLRBB,Via Arte Éducation,8/11/2024,8/11/2024,"Durée de l'engagement,Rémunération"
|
||||||
|
FCJVXQU3,Compagnie Cacho Fio !,15/11/2024,15/11/2024,"Durée de l'engagement,Rémunération"
|
||||||
|
R4Z0M3FD,Via Arte Éducation,18/11/2024,18/11/2024,"Durée de l'engagement,Rémunération"
|
||||||
|
7WUASZNN,Association Atelier Moz,21/10/2024,21/10/2024,Rémunération
|
||||||
|
AQX7F4FS,La Compagnie Timber,26/10/2024,26/10/2024,Durée de l'engagement
|
||||||
|
8E89FK97,La Compagnie Timber,26/10/2024,26/10/2024,Durée de l'engagement
|
||||||
|
PNNEI8P9,La Compagnie Timber,26/10/2024,26/10/2024,Durée de l'engagement
|
||||||
|
KRY6RSI8,Association Atelier Moz,23/10/2024,23/10/2024,Rémunération
|
||||||
|
I8A7TZPT,Association Atelier Moz,21/10/2024,21/10/2024,Rémunération
|
||||||
|
XVAPQ4U5,Association Atelier Moz,19/10/2024,19/10/2024,"Durée de l'engagement,Rémunération"
|
||||||
|
RWNH76Z1,Association Atelier Moz,19/10/2024,19/10/2024,Rémunération
|
||||||
|
BAXJDT8M,Association Atelier Moz,19/10/2024,19/10/2024,Rémunération
|
||||||
|
77UACYWU,Les Poulbots,18/10/2024,18/10/2024,"Durée de l'engagement,Rémunération"
|
||||||
|
VDUGZP2N,Via Arte Éducation,10/10/2024,10/10/2024,"Durée de l'engagement,Rémunération"
|
||||||
|
KGIFL7CF,Association Atelier Moz,23/9/2024,23/9/2024,"Durée de l'engagement,Rémunération"
|
||||||
|
ZXNZ7ATT,Association Atelier Moz,19/9/2024,19/9/2024,"Durée de l'engagement,Rémunération"
|
||||||
|
653837066,Association Atelier Moz,16/9/2024,16/9/2024,"Durée de l'engagement,Rémunération"
|
||||||
|
UCS3R7LQ,Théâtre Des Sept Lieues,15/9/2024,15/9/2024,"Durée de l'engagement,Rémunération"
|
||||||
|
NT1CGR8S,Théâtre Des Sept Lieues,15/9/2024,15/9/2024,"Durée de l'engagement,Rémunération"
|
||||||
|
J1Q5UK2M,Compagnie Lazara,1/8/2024,1/8/2024,"Durée de l'engagement,Rémunération"
|
||||||
|
EM27R59E,Compagnie Ito Ita,1/8/2024,1/8/2024,"Durée de l'engagement,Rémunération"
|
||||||
|
77AM9IQ6,Compagnie Ito Ita,1/8/2024,1/8/2024,"Durée de l'engagement,Rémunération"
|
||||||
|
WTPWAN85,Compagnie Ito Ita,1/8/2024,1/8/2024,"Durée de l'engagement,Rémunération"
|
||||||
|
ETA23ASN,Les Poulbots,1/7/2024,2/7/2024,Durée de l'engagement
|
||||||
|
JJ2RG1X7,Les Poulbots,1/7/2024,2/7/2024,Durée de l'engagement
|
||||||
|
BYGTHPPH,Les Poulbots,1/7/2024,2/7/2024,Durée de l'engagement
|
||||||
|
11TP2U8Z,Les Poulbots,1/7/2024,2/7/2024,Durée de l'engagement
|
||||||
|
PXD43URC,Les Poulbots,1/7/2024,2/7/2024,Durée de l'engagement
|
||||||
|
AAHSZT4D,Via Arte Éducation,1/6/2024,1/6/2024,"Durée de l'engagement,Rémunération"
|
||||||
|
UB26N9AQ,Via Arte Éducation,4/6/2024,4/6/2024,Rémunération
|
||||||
|
8NHYOFEU,Via Arte Éducation,4/6/2024,4/6/2024,Rémunération
|
||||||
|
LWWZVLDQ,Via Arte Éducation,4/6/2024,4/6/2024,Rémunération
|
||||||
|
ICWHL0EV,Via Arte Éducation,4/6/2024,4/6/2024,Rémunération
|
||||||
|
2ZO90V3D,Via Arte Éducation,3/6/2024,3/6/2024,"Durée de l'engagement,Rémunération"
|
||||||
|
ZUGVE10S,Via Arte Éducation,3/6/2024,3/6/2024,Rémunération
|
||||||
|
3AEZ16ZL,Cette Compagnie Là,24/4/2024,30/4/2024,"Objet,Durée de l'engagement"
|
||||||
|
KJJQXJ75,Via Arte Éducation,13/4/2024,13/4/2024,"Durée de l'engagement,Rémunération"
|
||||||
|
2MCT6WG8,Via Arte Éducation,11/4/2024,11/4/2024,"Durée de l'engagement,Rémunération"
|
||||||
|
3XC8IJA3,Via Arte Éducation,26/4/2024,26/4/2024,"Durée de l'engagement,Rémunération"
|
||||||
|
27XF1EGV,Via Arte Éducation,24/4/2024,24/4/2024,"Durée de l'engagement,Rémunération"
|
||||||
|
V66TE2Q9,Compagnie Lazara,21/3/2024,21/3/2024,
|
||||||
|
73AIDADF,Compagnie Lazara,21/3/2024,21/3/2024,
|
||||||
|
YBMMBS1A,Compagnie Lazara,21/3/2024,21/3/2024,
|
||||||
|
IUDLPMGM,Compagnie Lazara,21/3/2024,21/3/2024,
|
||||||
|
823257467,Via Arte Éducation,6/3/2024,6/3/2024,"Durée de l'engagement,Rémunération"
|
||||||
|
249883595,Compagnie The Singing Mice,13/3/2024,13/3/2024,Rémunération
|
||||||
|
193469402,Compagnie The Singing Mice,13/3/2024,13/3/2024,Rémunération
|
||||||
|
704657966,Compagnie The Singing Mice,13/3/2024,13/3/2024,Rémunération
|
||||||
|
329025022,Via Arte Éducation,11/3/2024,11/3/2024,"Durée de l'engagement,Rémunération"
|
||||||
|
177171505,Via Arte Éducation,14/3/2024,14/3/2024,"Durée de l'engagement,Rémunération"
|
||||||
|
276881122,Via Arte Éducation,11/3/2024,11/3/2024,"Durée de l'engagement,Rémunération"
|
||||||
|
616626490,Via Arte Éducation,15/3/2024,15/3/2024,"Durée de l'engagement,Rémunération"
|
||||||
|
395610201,Compagnie The Singing Mice,26/2/2024,26/2/2024,"Durée de l'engagement,Rémunération"
|
||||||
|
492601842,Compagnie The Singing Mice,5/2/2024,5/2/2024,"Durée de l'engagement,Rémunération"
|
||||||
|
947625754,Compagnie The Singing Mice,5/2/2024,5/2/2024,"Durée de l'engagement,Rémunération"
|
||||||
|
228752984,Compagnie The Singing Mice,5/2/2024,5/2/2024,"Durée de l'engagement,Rémunération"
|
||||||
|
174913740,Compagnie The Singing Mice,6/2/2024,6/2/2024,
|
||||||
|
877563770,Compagnie The Singing Mice,6/2/2024,6/2/2024,
|
||||||
|
349658085,Via Arte Éducation,20/1/2024,20/1/2024,"Durée de l'engagement,Rémunération"
|
||||||
|
199186934,Via Arte Éducation,19/1/2024,19/1/2024,"Durée de l'engagement,Rémunération"
|
||||||
|
597781528,Via Arte Éducation,22/1/2024,22/1/2024,"Durée de l'engagement,Rémunération"
|
||||||
|
832706440,Via Arte Éducation,10/1/2024,10/1/2024,Rémunération
|
||||||
|
596949853,Via Arte Éducation,11/1/2024,11/1/2024,"Durée de l'engagement,Rémunération"
|
||||||
|
318662808,Via Arte Éducation,15/1/2024,15/1/2024,"Durée de l'engagement,Rémunération"
|
||||||
|
730178581,Via Arte Éducation,15/1/2024,15/1/2024,Durée de l'engagement
|
||||||
|
963236711,Compagnie The Singing Mice,14/12/2023,15/12/2023,Rémunération
|
||||||
|
509264147,Compagnie Lazara,15/12/2023,15/12/2023,"Durée de l'engagement,Rémunération"
|
||||||
|
162647099,La Compagnie Timber,4/12/2023,7/12/2023,"Durée de l'engagement,Rémunération"
|
||||||
|
536618268,Compagnie The Singing Mice,14/12/2023,15/12/2023,Rémunération
|
||||||
|
330461667,Compagnie The Singing Mice,14/12/2023,14/12/2023,"Durée de l'engagement,Rémunération"
|
||||||
|
249691755,Compagnie The Singing Mice,14/11/2023,16/11/2023,"Durée de l'engagement,Rémunération"
|
||||||
|
158629019,Compagnie The Singing Mice,14/11/2023,16/11/2023,"Durée de l'engagement,Rémunération"
|
||||||
|
764990510,Compagnie The Singing Mice,14/11/2023,16/11/2023,"Durée de l'engagement,Rémunération"
|
||||||
|
410912878,Compagnie The Singing Mice,14/11/2023,16/11/2023,"Durée de l'engagement,Rémunération"
|
||||||
|
RG4168801,Odentas,,,
|
||||||
|
RG8698859,Compagnie The Singing Mice,,,
|
||||||
|
RG88658839,Compagnie Krapo Roy,,,
|
||||||
|
RG68262791,La Douce Prod,,,
|
||||||
|
RG25171165,Compagnie Krapo Roy,,,
|
||||||
|
RG30881481,Compagnie Krapo Roy,,,
|
||||||
|
92
Contrats-PDF-Avenants.csv
Normal file
92
Contrats-PDF-Avenants.csv
Normal file
|
|
@ -0,0 +1,92 @@
|
||||||
|
Reference,Avenant PDF
|
||||||
|
DK1M4LEQ,AVENANT-CDDU-DK1M4LEQ-MOZ010.pdf (https://v5.airtableusercontent.com/v3/u/46/46/1762372800000/OPuetT2g7F15jRNctn6Tow/vV--4K0dSxouzbRvfG8U6F54M3ySrCnvWeouWrUSAtVISQyuBlqgibVo-i4sopRzlAt_53LvjJg5AmQko71DgkIUXW9L9HxPQV4VnnWHoi21OJYb7bm4mRcyZWBhiovUY95AFQdryRUi9QVTOGbdKtvtcB6VArm7lk4PZ5bCUWsYKEmyR7-e8rH9uAYktW6q/3sS-Cp8nP8HCqOMc68hxkAGmCfdggEtQI-T1a_zwRu4)
|
||||||
|
14SJX34R,AVENANT-CDDU-14SJX34R-LEGER001.pdf (https://v5.airtableusercontent.com/v3/u/46/46/1762372800000/dWi6ycl7uVdhKxRN1ugR4A/wjqi8sLO2Pnux2FLgjEgWVvnfvYxCZhX14ZH8GXRQkQ-UA1u57COPkwXN3osXkxxNYNRsLz6RebmUfvrKDlvJjmAcNTNV1eHuEpKiUzgrkySBvANRrJP7SSbWUKOQK_o1Asl9Ewp6p78yFB0RadFNuAJGWX9ocOeJEumCBnNZHmyxp0e4BtSh-Bussel2k34/0B1c1p4dO5arksuUU845LYbgvr40eeHjWzKMrkkuO5w)
|
||||||
|
FR6BWZ6N,AVENANT-CDDU-FR6BWZ6N-LEGER002.pdf (https://v5.airtableusercontent.com/v3/u/46/46/1762372800000/aIUD87xx2-JyKY80voh2tQ/Dw-LTkGU8KQvuZvWdE76zVUGEUxjjPrupb4n48HuvxZToBtsxMqQzRg_wr2GxSeaV_2BhF8ptAnTF1GF56f5G0e4NlZO_c0oujXsiXh53hrl6rPDdKcvumMK7CQ4Xh-UWz9JY0PGjod34psLmdXlTwcgvT05bb39umo-wnl4-D7_mT0OWmnrWnu8OH2b8FOf/Q3htSHcAOeNEbPveyJF6yuY_9hy8Wf6RVluIeblvHJE)
|
||||||
|
9JWKKVLK,AVENANT-CDDU-9JWKKVLK-CIELA005.pdf (https://v5.airtableusercontent.com/v3/u/46/46/1762372800000/KZvE8PB0EsU_lZcrOSw5Mg/5coHLt59hOz--5kk7uogs7ZaWf_NkUWc2NDqzoW7HyyrbkJONo2Tna4M29zyWrkJ-BtB3O_ABbuac9RdUbuxToHKnUiyi947xEnaQSX9ilSn5-fkMYleTVGck0BEqdP0NUSoDIMvjbdFUiejA-JIH7M_0k7H-N1Dd1Sob4XRpyT91mjWFbtbZmsKApL4A4ng/0C1hDJXAyXvAI09xCIL7Ofl5mzTBLHDp28rKwEx_ahs)
|
||||||
|
IDCPDYU3,AVENANT-CDDU-IDCPDYU3-MOZ003.pdf (https://v5.airtableusercontent.com/v3/u/46/46/1762372800000/ZuLGuzxMHe-UZl-fnphBYA/FwT6sJ4a-uIy5dLCUfaQGhXWo6a-4NJ9nP_oAiT11n2yRE8w0sYAuy7py2CCsKXGTORh5DGh5sDbyrpOzeQTRxeER6599td-oy1uBP8qvHAA1muhfbymRYm6liLQf1kYPmGLaFwzCiDog9qc1te5oHR3UjzHMQ2fRg5fZTaMnGvUIJXbNHL7_fmQAHZOFV79/_reepQZuAegHXKs1dvGgzAe_Dea6-whajY9NjDi4chI)
|
||||||
|
Q3P4W8R5T,AVENANT-CDDU-Q3P4W8R5T-VIAART015.pdf (https://v5.airtableusercontent.com/v3/u/46/46/1762372800000/s0nt6tAI-dGZeOrGbhBdkA/a644vwITUY2-mFdV2OyVj9gdS3jw-zbQo0hpqNV1V7wP0j9q1PN2439oiL_W4RZ0otAcTFxpbSlG8xSFO3V_Xemp5Cnj5FS_A_ccv0O608FhP6jc2afbidmIa6CbrNgyQsU4bwG5Ocw-i6ibypvs7_wHYojEIywpxY6hzkkldK-ORQNXtSVotV92q8njsFKv/ybWc91Cs-c5MD3LoQ8fb3dWBuuWC7cmsFe0IIM_KLWY)
|
||||||
|
J4R2QQNV,AVENANT-CDDU-J4R2QQNV-MICE022.pdf (https://v5.airtableusercontent.com/v3/u/46/46/1762372800000/XS5jyxX2sOeRbXu9XQFWPQ/Koa81tqJsLVXVTJN_EZoooSeG5i-gr6oLqaZB8ZDYT7E5c7tLteQLJbpkPZ1q2Zaw24SqVelXRHMPYA9_Zu-wV3NW-Hqz8RvAMYLuQw-iZulurrnlK55x1_F9KRIUK7ar-RCzYfTlR27KANwZXM3OdzJkV0GFZzKTDYsO7iwSHMMfvBVLaBVFVBb4CQ4XwRV/i7Ia0_qmxr84xzCb-ZvDQ0JuIxbltxa3VdIm5R6CQnU)
|
||||||
|
WGAK2AW2,AVENANT-CDDU-WGAK2AW2-MICE008.pdf (https://v5.airtableusercontent.com/v3/u/46/46/1762372800000/C22FIC8qai6MpFluTAtfIw/puvLObaeGRHM9IFi6gylkGd4Sl9jDg8gqNvOWENd6pX3twXOv-vxvGpjeI6DyNvJQXGWaU14D_U_6HfDIg5DA2tTbAulord1NS0h4kE7_AKYHW0Vyc1fJGjFrZijxPUimbHVpmtYfwLKrl26-o8Mvt0wl_aQoH_L7YfFPV3fnekVeW1p5kGmCmzPQR7vxc4t/j0yHNX29AQuWkVt3Q0PfsmkCATt9GlZN5z1xHFR9d7c)
|
||||||
|
2M4JPV9DS,AVENANT-CDDU-2M4JPV9DS-VIAART007.pdf (https://v5.airtableusercontent.com/v3/u/46/46/1762372800000/E92jX92fCffFDAr7k2ei1w/3IhCPpYYEKwSghtCvqSh3r0fpv_phUNYe8xETIrV2EJlL2I_F-2Rgqtf8f5aO04sA8apWYGztOwQWOUQ-R2o909OhAqQ9JQOlKvf5PZBPpteKmhJ0hSS7CcG5Kyw-ZTpMOMa962j69zfTNda9IwPLunXusi2FNDb6gW3FpZz7Yaa_mL7slj_U6CuLVGS0T1J/3SY1lcF_sPxiRYFFk5exIkokWL9YMDK2IaMeO_PIjtU)
|
||||||
|
9NTRD1KX8,AVENANT-CDDU-9NTRD1KX8-VIAART008.pdf (https://v5.airtableusercontent.com/v3/u/46/46/1762372800000/3SH9euZlspEwcUZ_paO4uw/_SAZnhfu25SKv36f--_B0rdxf_ntE0Ug1FCbMIeTL_2z6Fmeb3CKO14BjUxxnKPA33JgKs2FvSQG5PytY_lmBUWxXHf5Uc2WoBOY4XhtPp65hZFUHnDmPbdsbjkXz9RVNOwhNEv6YwIRpyYl03oX3JT3eMe2kMrpBCcTgeupF_y4__Zyci9Tc2sPTnEzxcjG/8_gCBns4SINBu1C-TliSYztwo8UjbuXKyu4HNKTafLo)
|
||||||
|
2T3JX82Z,AVENANT-CDDU-2T3JX82Z-MOZ017.pdf (https://v5.airtableusercontent.com/v3/u/46/46/1762372800000/x5bOh8qu1yWdyxjQc-19Rg/9_wYrhxW2_bkLBjgawtpVBlf3REAxY1ztW-KrP1BjE7AYN25nceLCkG14c39Sda9Sm7ffNJtqCMd9tVr4C2FbqdLIRy83dxHzaT4qimiL87FgpF-mVdrGJndoPrEWSOIX660mQPTvKpWzfYovJhhzlI1eVqV0N1Ucvk0Dgw4e9eSrAJUX31-kJ1SNyneedwu/taQgMT9kwvI-_FPvTF8BrM7ECHgV05g04c2pq7kb7TA)
|
||||||
|
IXP6YMN7,AVENANT-CDDU-IXP6YMN7-DOUX001.pdf (https://v5.airtableusercontent.com/v3/u/46/46/1762372800000/YUgIgILDNhormtmoQYlPAg/0emsJgHbzNSU1ZzypsVgdDwZA5b29Y1yJX8IGpGAf5BPtaEDMhp4zocvrTLGxJLBeqBVnNSErpBJjdsgdsvj5pqKr90LUZMGfTMDXZNEH8q2rNt7Z4i8vyyed0t7RzJRrpGuK_i3wEh2w2olrwQuKDlvVApZOBL0_RgmHbVP-wXUkZgvZA-TzErhaEu6QrPt/5CjhJ_8E4l8v4abGoxQ3_N1cw2LSuFHqhFIVmkMk75M)
|
||||||
|
2WSMYDIX,AVENANT-CDDU-2WSMYDIX-LAZ017.pdf (https://v5.airtableusercontent.com/v3/u/46/46/1762372800000/r9GFfixan2alhFYdHsY3sg/R3X3HD9B3QxMefJnPwiF-HSHK2Sf-Z4ECXv4wDvY85IA26p_BpVfvSIE6hJo5rfyxeAjQ-LesreayzOWtx3FYrgD5b5WXMjRA6Qk3hsu_UskRh6wDhYHRg2Ejf4FExBM4Z1HPV0WW-9XYkV4TgYTLkxt0YHL1tohKchp4vD33dcAcjTn2j8s5fqz83Fj6vc5/VAbvCBrVP8v5FaXy7fqwK6CninwDTaKOFsCijNnZ3qw)
|
||||||
|
L77B3JTXM,AVENANT-CDDU-L77B3JTXM-VIAART039.pdf (https://v5.airtableusercontent.com/v3/u/46/46/1762372800000/Ujuk0PG5dxYzoO2TeN1VHA/Puo7uuCOMyaLjHbiVcGXvlgwaeTl1ajHW-eLrS2EcoBQ9UrVfCQ-Qzy47dw5IUq8EfphlcTcDP2k1hlXqKdwSSsWZ5H3XSH8906GK5VtzlKThqj6ZvXp_9pLQCH3GOdLaSVA981-hrQxtj_zC_XobNpC8ec2Q-kLlz8t397bLDFvY4_oSj1kVLiyjeTGL09i/39u6OXlT9SvtLORouKtjVWrnznfbG_DAaDpe38HyJHo)
|
||||||
|
29TLJGPQA,AVENANT-CDDU-29TLJGPQA-VIAART006.pdf (https://v5.airtableusercontent.com/v3/u/46/46/1762372800000/DO638SrpYMeziDIuZqkw8w/UkasRcoLEf3kOm0ZVKnUmsw-kw-O51Rh6YQn2KnZXN-0IWphwsgmS6lo7m70lDzi7WdVmjHDHhlneEFw0rSJ_VU381_plwAwyAtYjbK060MLOCRV5BYy-Pz0DZdQmmU0c9O9BtbLRpWVo4lpCZdetORoWBRh-Do43wUtg3G4asxJza5wwhEJEz4lKNhrRkIP/v-5pTPHQdTD6FVbnp17loJSTsayVq2yACz0h_wyF3Mo)
|
||||||
|
5LZHSRRQ,AVENANT-CDDU-5LZHSRRQ-MICE007.pdf (https://v5.airtableusercontent.com/v3/u/46/46/1762372800000/Yn0FGsJRRfnbcfApMjaifQ/IkXAPkYHQGok3Bpe_FfWhiF61X8MGISLhxhn1pumGbXDFwSgQHoruaraIpemCOuiY2FlHkslN64XFww0D12oMa-h8cuXKqqzos4gUiwU0eAiWTlCTjRnTgi8NA8nTUP1hFHl2SeyDLLqV5Vt-8DTHAxGyJ3yaVwIO10BWvhsGv7-9iBEGoB1wOVkQP4gMN9d/Kw-yEMHF50NFV69-n5MqtnNhuhQKk0KMWvQ0HSq-zeU)
|
||||||
|
ZVIBR6FZ1,AVENANT-CDDU-ZVIBR6FZ1-VIAART017.pdf (https://v5.airtableusercontent.com/v3/u/46/46/1762372800000/Er0fyKmzFhu5VVHl4TgF5w/gxFpLIqMFqo6n3EMi7waaOYtuoBzMx8FZJcJT4I80J8kqFP9K4iio--akJ3aOtnhO7e5MON58c3aEJReYIq14sac0-AQBthi7XQFlUqZ-NEcCoI0h9gAWZbXJ_57IABPiaq_DBCHl-zvi7g74kp4C0OY4LW0GIkeGkTAFHyaJ-UlucgHrBKdx2Ew6zZizS6W/DyT3DuNNwSi35Afk8xDjdlmBRUOTNWf0HJJHxrEYScc)
|
||||||
|
CYDUMW3FG,AVENANT-CDDU-CYDUMW3FG-VIAART026.pdf (https://v5.airtableusercontent.com/v3/u/46/46/1762372800000/LehRghbL6LAAyzDyebYBDw/gCFh_bmeflSUCrHDCxNVtd2_0s3qjGBzDDxkdDWZMjQU2bOJJH1zJDwY1JKAfHvh5gJVD6LaAOehyYGhuFE3CzOUDSmHNiAZOzEAg8xegfaLCst087yuZLgqw1S6gvcfQKpuXzV-pMemLLj_HS-BdPd9LPPc7YKbmFUJITSAJJTCGat5svgOHWpR4pAuNsVN/MCaCI5NtchzUkF-iNLogBABHxHySno8vx8QMok0KKTE)
|
||||||
|
SVA5MNZ9V,AVENANT-CDDU-SVA5MNZ9V-VIAART010.pdf (https://v5.airtableusercontent.com/v3/u/46/46/1762372800000/aciPPVtGoCLEa1lV_QHwoQ/08qwSwjDO-m_hZDTj5ufFHavs19XEIrJjuTS2Rp-ZK_C1kX3iX-RZEszuYWqfqNZdLWAp4MgzbElMU9-VGDKTZVP-ymT444hZJmqNCX3ZKunXndVgdWRDVOAS1PjJVKJQC6HHFY5vN0GoqTdUp0zrGkM9bRU8Hlt128xomrXRwGaa1ht3eDD3VgNgakOKOzH/Wz2rf-YMCKPeSkQIAy4fA9EuDTOAedyPSus5tS7ygLQ)
|
||||||
|
4IV9411Y,AVENANT-CDDU-4IV9411Y-MICE010.pdf (https://v5.airtableusercontent.com/v3/u/46/46/1762372800000/pKI7bA42HPVlCT9WuvcDbQ/6zyF9Q9VAY0I9W0Lx713aqhB-AXs47TVULA-uNClOzLGN-e1GHuUA9bCPFMs1TzZxXJ0a119VdeVup61vADiOC5w_ecRsNQEthwC_Zh5nIUoIzWCuKb7bqfNdSQiIf-dKxBs77JqZkXtwrcoQjIBqKaKYlEglQ8UmijrpFFtcQe2NwKeQqR4-Pite_myORFn/DAS89fHWa9JvE7X8d7XnMCpc_auM6IVu11cD-O8Vi7Q)
|
||||||
|
517NU12QH,AVENANT-CDDU-517NU12QH-VIAART026.pdf (https://v5.airtableusercontent.com/v3/u/46/46/1762372800000/S72zOjgp9vMYCE7IWE92TQ/qJ_T2325ZbGjPL2od54quPiUC15h3wSytiOAgCBggDMsdTXQ0aIdEygy4ddrFiS35_Dy9x7QA6msGY_LBVdd2a7EvrWyPwfMWKt4nPlIp_2mUABri-2zQ8Dt-V7bKkGHVcyEPYuFAjFSdfm71HkcC8UcdLw1LcpqBdoqT26NXxdC7-HrTkGKCViPT3g6Y8tU/1BRMvMpkfm7VGSKlgAesuXEBX9k26sL8HAiYGz7ztRI)
|
||||||
|
KLYSLRBB,AVENANT-CDDU-KLYSLRBB-VIAART028.pdf (https://v5.airtableusercontent.com/v3/u/46/46/1762372800000/APcygbOr5GUEzm0EntrErw/paQ-REnIRd795eZXagbNIQWPbdWJ8947VebydRwpLKTHdlGu3tJXuJosFCilzQ1BmaMlCHaMUSMYzoqUeroKvytKh1dBbppGnzZBY_kKU2Z9fV5jJbrlk9crgxj-aMzb6jZarkOdRrA36SM22EYZTTqDCvwS9TCApJwlVNG8jgAYByr2D1gj0a6c4zxmW7FC/TZJN1lTpNFQ6wVqnvB5xENXMQvxs-KAO-LZ3LJjxX0k)
|
||||||
|
FCJVXQU3,AVENANT-CDDU-FCJVXQU3-CF001.pdf (https://v5.airtableusercontent.com/v3/u/46/46/1762372800000/55czQW-YCPuM2I8o-lBzOw/AasM8ekOB0f4mHpRR-6K9IR2B4VrWW5WaB0Z3ziGZRJvs3w6BowORZh77Rx9KoISGK4C2rOUS83aHsWolJc9Mx5b2art9soA-1XKDGFOSTxB2Xfde86CmGjkmLGsEfrrogvtWlMpPBfmT5M0wKqfIdcFWn1Nd-7YcIUtXxca-t1FDoNGyhIIflnjASXL-awA/XZ3RaAKD_ep2qxrK9BKzr9y2b5CK8dEvi4Z50c--j0g)
|
||||||
|
R4Z0M3FD,AVENANT-CDDU-R4Z0M3FD-VIAART001.pdf (https://v5.airtableusercontent.com/v3/u/46/46/1762372800000/NA2RW6CL1wRTHmhjGvR18Q/i_toIQcbETP4kChgj-y3idSZNVAytUXZ7A2Y5r2yXk8N9flT7xUsMZaF0PRJ7X7oBLlFRZzK84PtVGzojzVhiL2LryPeV7C06EuGjJBx5nrWg84x5X0FTchglnjthwuBYDq9WphS0d5qKlcC8B-IaK4B-DPHBp8WzuL7UtWX64DBtOw-gLzvZBoZi5ZeCSgS/X-iCrrqxVj6y_3Y8A_dcd7bSIoWNdCV3_yhupCHUEZY)
|
||||||
|
7WUASZNN,AVENANT-CDDU-7WUASZNN-MOZ017.pdf (https://v5.airtableusercontent.com/v3/u/46/46/1762372800000/fI8xuOcM0QESGf1jRvue6Q/kipjAaKb90bhvm9zUlUnoagSeOWhdWatN7RN82mEKF5Wth2l5_cCzaPYM7_ngLjcpLvyL-hwcePZX35Z2kiTvhiT7tGyN25YTgjQdEUMI24ficIzqcKXYK2etIxsBUWDf1JR35p9KNOmqo9w099xNmrpT_01R2nlHk2cnsWkKQDWIoYqhYDIkCJVkYwRQ2Ep/nSUiCt_j_U2d4FhnxKO5f0jvZilSX1fNjO4iMuVsH1U)
|
||||||
|
AQX7F4FS,AVENANT-CDDU-AQX7F4FS-CT002.pdf (https://v5.airtableusercontent.com/v3/u/46/46/1762372800000/YqjjINwloLVLsiFViEj4JA/1vQUoXz46o_a1T3bCqKv094w9q62JJTQkdvbQT7wCvbpM5nWA-tS3MJocLs9wl-E4bT0Grzs58gexBwiveTULb269YpGxGQoHj1r7a7l1NImF2lWlnmtcaZ6TKRoxw1-_2VymbZhg4MI2QD-uuhApCS52nb0Z4YkL0DEZiiLuYY3q_iALrHQtqnti7u7e-Uo/abJXPA2PZXO9wareM-gI6lMFDR2Xb3VQvLB1jyqRJoU)
|
||||||
|
PNNEI8P9,AVENANT-CDDU-PNNEI8P9-CT003.pdf (https://v5.airtableusercontent.com/v3/u/46/46/1762372800000/AeZdYPcleJ9XpSBJwcoHgw/3HsrQ3cIVgbrQoM44SK7_YPGqXA3dOOIuxWSTDpKsVSzKlonFuVjoLvFnxet1imp6dNNoiTEsYweYBh6hnJQPeYSyLXjN3bRcDBvN7CK9O9Fam9CBiNXER4qK3LqL7xGWNfrBT1T5VxPlQN1qRFzXQ9n8a5BZ6BDkLF4G59GH-RlXxYXHrbhEVucWbtzDImI/6JgVJsAh5vOzhlyNcFTFLndDrkGdeFUAT5B_i7xjvUE)
|
||||||
|
KRY6RSI8,AVENANT-CDDU-KRY6RSI8-MOZ027.pdf (https://v5.airtableusercontent.com/v3/u/46/46/1762372800000/deS5-bekq43R4F_6n3QxFA/iiYtmLg8rN48x4YqiWt8385N-MxEtlH9bwhDsSPaR78AWVMkBQHrfXyDuhdgTZQuMd1mw-HP4iHnQN41Ym746BpObQz55Syx6rk1_MqGwJsImO7WopOOyHYqEv_XMngIVADVVz3K46VlKw4IX0DWxUI7vbf1D0XOMwrLD7A3DnQcoQHJKKMvyT6eLYZT_aOL/md77FV2S-v720ezEc1bj4DliqpKiZxyLdlTESI8Zljk)
|
||||||
|
I8A7TZPT,AVENANT-CDDU-I8A7TZPT-MOZ028.pdf (https://v5.airtableusercontent.com/v3/u/46/46/1762372800000/DMYaPB9Xed9w9iMV8h-qJQ/9tDrqQG_Dot4oed6JLuYidHXHORuF2TxEnRQ02b3IWWxdPqVnwZWSpFUO-A3sKm8Y7XUTT9rGwHz4CSCW5Ym7nqqmnTqlxkDThV3jqzPNOMmLped1TUTBETVsHkIP4_Y4TgEEqDaMFCcKR5UGtX3_gSPF2ss0Gf51EjkDrcUILfAZ5NXPZYvdrhi3lIayag-/wo0sNcE4gjYBWweR45NcC5DW6DY2rLUKfMuv6tN5Z-I)
|
||||||
|
XVAPQ4U5,AVENANT-CDDU-XVAPQ4U5-MOZ022.pdf (https://v5.airtableusercontent.com/v3/u/46/46/1762372800000/jUMgvuUigS-VuIty1YQuLQ/eZIqDNYWMOq-gjuKvYDcXd_JVLrLNKrPA28nzxVOwE9Z887cqGNmY7uK8kCFIosYGvDn4kkNGNjU_kObzC1zumcn-3tTShcDmiQPC1vK3gLbNZgzquH0w5BflLSe1fembq97p1a3UAW1VMQVQ82Rx4NrTW_qxa2nDCnWXQY7cSN9Q2UxjFwpDKm_c_h-RLWv/jQ_BNAFfP9QYRg4I7JGDTZLM1UJa2iducV9LHs-S-ig)
|
||||||
|
RWNH76Z1,AVENANT-CDDU-RWNH76Z1-MOZ014.pdf (https://v5.airtableusercontent.com/v3/u/46/46/1762372800000/NplNKVxOiBR5rWmmgwYalg/T9amc4bRESREKDemUDg6SWtBs0D2AHx4lHNsqC8vGmJV1-USVf_hOkHEo1qJX70eXJBk3hfIuoqGMlS7VUsjAJsw8VbRT-gFjCOdVvAmkzv6pY5672okYeDtnHs8kIVwLzp6aapRDaaMchFD-asXVNak1AM4UYpWqzmqvdmfIsBvEoJnn-KPE7PllFbcHsbK/Bj4HuFhXA92yuGICzYiGggz4jPJjOVhvgQgf-N8k5HU)
|
||||||
|
BAXJDT8M,AVENANT-CDDU-BAXJDT8M-MOZ025.pdf (https://v5.airtableusercontent.com/v3/u/46/46/1762372800000/5m2vPEQYOvTIU1ORczRy1w/4Kqauuk1Vgd3eV3Xf3FWmJmwo2HLjpdvOOb3Apy-_bfZNaTZHV4zkjEgcis72Jt9pkpuI1MYJj3BsK64FNiK6wP_RyxwbAsmNpslrIfjSkjuUYLXKeHsyxeQy8sNWVgq3TCF16271GaZk0nbBX86-6D5V0kt_xpycbGB6hisOF2qurU_TPvOXRUOacxyg1uO/H6WpMwINamvcNh_QkIXyrZkJP1hpNB95VFTXZJkHBBo)
|
||||||
|
77UACYWU,AVENANT-CDDU-77UACYWU-POUL005.pdf (https://v5.airtableusercontent.com/v3/u/46/46/1762372800000/GU3B91BTq7SGGIPEyqHHUQ/zrEnH30yUvaFJRzOkABZAvN2_qr7eesqUrFGzYAu3oTE7nkSlls3qk_8tkiXa3Lm057CHWgzBvw7pXM1Ybt-WKobPSPdV9bEDQvbqqlyXPCc3dT9_H87ueZrd4rT1y9zDnpgsEc_aMegb4_ps6MJMixUPUsq9kchen1NL-XhAkUoVm-n179RJ6jk12nmkTag/WR7piX0K479eMw9RYzPQpI_3-lf-EZtfrdmEZqP3ejc)
|
||||||
|
VDUGZP2N,AVENANT-CDDU-VDUGZP2N-VIAART041.pdf (https://v5.airtableusercontent.com/v3/u/46/46/1762372800000/GuWfOnPZzzweR08xxQ0SOQ/0p1DtU9NaZkV5adbgP4T5yVr0ivfW78d09bqL8wbABn_B4HTA-Qe3mGZWCLeeAqEky1snorYFacDPcJXvZQkR42oq9VeclHsvE8KqSACDQE42EvwmEfmzHAssCNlJOKBoVOGd_O4QdEq2JhHz_K7a2AMHIU4JB1wjAVy_oULCMbeHDdHxCIS8_cR0hxBFJhj/9kZtgGSCo0mXPM5V6BY9eORXtQHFla1bRm7PIizPcoo)
|
||||||
|
KGIFL7CF,AVENANT-CDDU-KGIFL7CF-MOZ006.pdf (https://v5.airtableusercontent.com/v3/u/46/46/1762372800000/vepXoyWB0b58ogHOidj47A/IlyvJHI-RQOnxjk8YPgGb2aBj3hfrOj8WX4DNPTYBQ66xRh_nbB0NCIQYLsZlBRJ4jaEbTyQVMnS4V5LmztilAxD0yBlxW5Ud1ajj-a-1T3Ea8e6tln6VzvC06hKjEPVvSNlThyvsqBMFKa6QNsxpPjWVGmorYXH7bvUqFOalDbr1OvOeOGPH3zYFkCapC06/HL8lG42Mgn0N5CB1IiEFPvi8hCg6GTR5bzDKGA5BTYM)
|
||||||
|
ZXNZ7ATT,AVENANT-CDDU-ZXNZ7ATT-MOZ005.pdf (https://v5.airtableusercontent.com/v3/u/46/46/1762372800000/d8kaKtESGiDDauAq5Ouv-w/YnC4FULhSkkyC-x4dDFWYt6AHsp_QJRCzDf5j9XzGYVh7R3bYp6MXmtADS9HtNDZWWZ6uyYMgISD9BV150IPN4ehmIXmqquvGmwAbwlo_MCpO6UzGIJeFW19DJDam1LwPMUENk2fPVTuSMgdfE3TKYMoepc8cyGC51OpP6q099IWzGddEZX1RMJvshnol0Eo/jCK5v20g-oGsrVgrx67QFrSu7sIMD2UHmjKFJjJf2LY)
|
||||||
|
653837066,AVENANT-CDDU-653837066-MOZ003.pdf (https://v5.airtableusercontent.com/v3/u/46/46/1762372800000/IxswQsQdrL1BEwL966sHNg/KLG1KCd_mRKcHZ7DdPxm-dWt8rGDbyhQbiWFXoREOhsKMCaESUJUXqL3BqMvazLJSZ2nSE1jx4MCExUpAt5JIu2AaF726JNlKRMaIhFkjHQHrmhzBF9J1i2ye6Q8Z_udm76YiRRT7hF8IMe1LViPAPw8n9bIOusuRwrvqYxbe9icvNVAeYLayvm0olw-61P0/haW5xkqFtHQeD-2fYtw5NMgbx74Q4jUzRtSdG_V37Eg)
|
||||||
|
UCS3R7LQ,AVENANT-CDDU-UCS3R7LQ-SEPT005.pdf (https://v5.airtableusercontent.com/v3/u/46/46/1762372800000/t95ZKw_9Oe8fYpnMaF6k5g/In_wLfZFGudWlFxk-oAp6B28qJTbyOGW3rZQ_9_rzXxpLphbQAqvmheabAakvzpAJ7DCHv1GOVpKZUY2eUoqGPW65FOvETjkBNBBtF1nOxqoEJtqWOVbis4bsziS-7MDpEQoxIadFaakRPDI46VVvNLctgPck5DxFzkOaNXRvrAlPMUQ2_n1wiKGf_VLLb3T/JNEGH07rtJjGCc_uzwQe8AVHbQ2_tMEfCQakBRaCVxc)
|
||||||
|
NT1CGR8S,AVENANT-CDDU-NT1CGR8S-SEPT009.pdf (https://v5.airtableusercontent.com/v3/u/46/46/1762372800000/r8584bSwU9vDlA1uooXXZA/9fEcciDPihFCS_7UkG7rBl9UHPREM6FiuPSyLSL0bzOCOplk65wTXZIJhqLPC8mo41WEuHOGeejlJCLErCOOwXmEPgoU4Z57wudqqe9IxDZOwBuiRoeXataD0z6Vs_4yJ2r4Iwm_jFSlpMo_qDpBF77eCjWEl5zwFu7evBBjU57Y1Mx_rfbiMe-Ia3RadfCb/LJbTbsgDq3PpV5qVlu5MEfc8TDErfrY3Dshx97W_Upg)
|
||||||
|
J1Q5UK2M,AVENANT-CDDU-J1Q5UK2M-LAZ001.pdf (https://v5.airtableusercontent.com/v3/u/46/46/1762372800000/vmWLzjGZ6r6xxzCSYyPhDQ/-Iud8Tc2ZrygEuR9nKq3V8NuRx4EH-YFdGUonURUclmeNQRsxFcfr3sONVcVbiyMueBg8CsOLU0d4w8pkea2491cxyuzOiv1T9s6TKhPchxmgamtDRv15stBeJcuXLHHXGibFUILeflvwaUdTz_1YyXTnYJdua139t8oTVr9e5OsE1sBJkaaoq-K1_Ejc29C/Zz6mS1JbCQ3ukvhu8G-CTZQZ3LHnFNj894VKgK_lz9c)
|
||||||
|
EM27R59E,AVENANT-CDDU-EM27R59E-ITOITA001.pdf (https://v5.airtableusercontent.com/v3/u/46/46/1762372800000/opJ2wH9_eAFAaV20JprHRg/2gHiAIjKaStnwe432hfxo-KW-qXaiw8RKxexHtSeMJKjZWUfVFnZwb4bdvx0_unm-2JT1pJH80sS2cV-jRhi0utBiJ7neKlJxTsVT8Eefu8MPYy6CQMuUKWSFM6PLHEwLQOsduxsQhYPx_Kg2YNW6uO7KzofHBo60gUJsrlwn6EyKigw8U3gV6HP63-ImQhi/0tSmK1o3-nzVWlO-_R2iahf2glYNvEhpWh9A_lZckaY)
|
||||||
|
77AM9IQ6,AVENANT-CDDU-77AM9IQ6-ITOITA007.pdf (https://v5.airtableusercontent.com/v3/u/46/46/1762372800000/6u9rgBawft7Pl0PItrchmA/vBWrud7JwzsOSRYW_kWCrEhaSkhP003DmGGh9i1C4TZXUc3VKESqV6CyjNpfFrYB_SpOUDsNdh870sbrg4m4GTOP-tivCPxCf-HJg3S8n1bd__YbCnuVMvUSeP6SceTdqSBD9mrp01FQ_N1wH8y6poFmzDbZbQ2EBfgbQv1V1Gc-UzzymkMNBrKi2-iMDl-m/vadziTSDVCcRKsoxFvoUg5zaTjWNv2PiTnHjV3MYpWY)
|
||||||
|
WTPWAN85,AVENANT-CDDU-WTPWAN85-ITOITA008.pdf (https://v5.airtableusercontent.com/v3/u/46/46/1762372800000/oecqJCOkgNOLiW179996pg/li_St7ECmKw-nfAcoTq7krQpRchN6Gqqn7MLWqe116gcP9-MHd1H10INHrQZPktIanBNSwYKtngKDI0XEhN7I7TqIFRRDMS-kGdIOVlNRe4MffaPax4r-PIXs8sPBu_PLhpUGJmSnMo6Dn8ljyc316lW2ysLR77KQvm8HufMU4QqGvEvteRBr_ap67q3rWPY/QpNwcQAD7UPqiMi82p5VmAv0LlH8d8n78wiYVzaZSko)
|
||||||
|
ETA23ASN,AVENANT-CDDU-ETA23ASN-POUL004.pdf (https://v5.airtableusercontent.com/v3/u/46/46/1762372800000/0cKrrRnLWb7XwmNf2uVyCw/s3nCZIxa5y5w7-7FxDzw5IuYCQXX5o6frdZD-tIg018vLhqogCMjQnZYNlhnsINSjEFKlLKe0lhF3fiRpWxeVyW78lzXgpzfAWhkwU7M7iDP0i0Zs551mh8UlU-H9mb403pSrDSn3MjOHLluk2EXm3Xmoy9ISSaVvJvqZ1SuydMKOuK4pdCVlNLLRm48k35Y/J_pgrlH_H5RurlZi9hXOVQSLD-ZBy38NL6ZEzNXAeBY)
|
||||||
|
JJ2RG1X7,AVENANT-CDDU-JJ2RG1X7-POUL006.pdf (https://v5.airtableusercontent.com/v3/u/46/46/1762372800000/YCcD-vdMU8lHjA1UwocgzQ/vI8vy_j9yzf-YmPBnAvCvbRdnzW90-R2fSJIV_Z_IYKOwPTQ56EdhecG1cFGamZnCuMWpfkfFVt7Qk46lrK2D3X3mWsk6jqgc6KN5zslKdaxfnJyFTQeMh1glDDnTqpir4dxbiB3p34yEQx0hml0vf57hPZUDHqs7tt27eQSvTe9uUBGdVDTOKXBdOIDRxF_/a72T_0GHRGTrXr5SF_cJa5R2584aeJ4H1U7wKHcoHPY)
|
||||||
|
BYGTHPPH,AVENANT-CDDU-BYGTHPPH-POUL008.pdf (https://v5.airtableusercontent.com/v3/u/46/46/1762372800000/qc2gWp3gTF48giw3W_LhmA/fg3groJxlEDolnUxFa81hI92CDIjDvu82gd-62vqx_RYhj_DYgCbdMunEYaAzNyJDHtc6CDvD_6ATVYSfOCK4qLGFnu3JL2B8Td-ZlICNL1_ABHawTdO4v__djspPffAbrUlGTfXhVu5HykxQ2s4nKyv88VTSQw8oZRdG9fGwwpOIkXCrj09335vXA1a-Zy_/9LmhjcYv9PYRHL9q5pvbRtncw7LK7825mK7FTBzTD6Q)
|
||||||
|
11TP2U8Z,AVENANT-CDDU-11TP2U8Z-POUL009.pdf (https://v5.airtableusercontent.com/v3/u/46/46/1762372800000/2wGeI0B8Hf2DaQ4v_aRSxw/cv-w1tSOK7VVNcVox1SNzTz2UrdgwLQ3056PIpn4nuqKQv9MhuNzbrlQTZfNOqkWC5As8ZJ30Loe_07_82ZmKlEvO2JDXvwNk863Nq8DzTH4GDo8zonI5FTocA6OmDj6rdVrcw9__-U0HsZ_NYU-tg_Aqdlr_WPxvbVhm_czpLbDdye-XL2SWtkWu-6hpVCH/BoyPY4CcVSb4LVqcF17BdrK-a_dIwE8EGhnaomVB8qs)
|
||||||
|
PXD43URC,AVENANT-CDDU-PXD43URC-POUL001.pdf (https://v5.airtableusercontent.com/v3/u/46/46/1762372800000/-2Ck0qmENspFmwstnhglSA/PVMjfZxwxvuAWUVQI3Do8aP0-reaWacj65yY7KJzKSkv_G2szq7dtqC4aTwznSB2I9bVviB2hqY8JA4kUT1KvZYJSNPdiXjfE3YnbO4p3IVrmzWP5O1vX1s2G569iPVdhr0jfoR0YiKiwI3sJZxaQz8RMeDiS1P0h_83uhzOQlJG44bhyFhZa4okVbWzed5x/8K1VWDs9hvWssAEKpFTScGEHzWrNp19UxDnRANyYgjc)
|
||||||
|
AAHSZT4D,AVENANT-CDDU-AAHSZT4D-VIAART001.pdf (https://v5.airtableusercontent.com/v3/u/46/46/1762372800000/pCEFRu_Y-dZox99Y1oUxbA/Tv2GxZ9fGTo2sthjVqZ4WZ99rsJE9p1y2DDG4YTYznVzoY-Jv4rHmPCT04a4aZ0D7HXkYpv4KI1x6A61UOijUS9QXsDyxj9Hb6r-DiXDWvC_P88r9HICb13bXlBS1_xBpQ4hcDrEmR4XQ2sIlq8LQ_Tav4Sk7D9an4lZJoqY_fAFnPccPyhV9B-bVzMTmKj1/R6GnI5638QGr6JZ719XFcYxFHNBAsOTUW0QUem7zhzo)
|
||||||
|
8NHYOFEU,AVENANT-CDDU-8NHYOFEU-VIAART025.pdf (https://v5.airtableusercontent.com/v3/u/46/46/1762372800000/q8FbkgYyI16Hkracmfu2WA/-IZ9SkoiZL3WHBhpm576rWzaDsl3VxOXpW_B5B-HT7XPppW0JVA4z9IFk13HF-691vVyIc8i0p_t4aMeyBsZya9p0AufrOfRfzr7Dff7Fvg9QgncbLaPQsf9v4ldLkOoX1xok4MKDbgrNCGtCCOPbGlws7kPSaqgellGu5zCPvkO9vNqcH35-RMnG22wwLig/GExDWbLVqUYzz7CO3iodADgLx4vBULLKW-sT8FhoRvI)
|
||||||
|
LWWZVLDQ,AVENANT-CDDU-LWWZVLDQ-VIAART028.pdf (https://v5.airtableusercontent.com/v3/u/46/46/1762372800000/gfB9rynpSNf4G_N9mxCV_w/MXsCGc0HxxhfLKFXxJZYa8BONQwCmdVaQgwEz3UiZY4AZMWqYxUy-1T-K15v7fgR3AsAzM_zGtu44bZNeOr1LrGXlj0BQg_zsNkOKrfkilaNEhjeHXQZTztKHHK0g0oPIZTeyGabWn4g_pBzpbOZU9y0aABAfRxw8dPq43P3bnxwNv0G91JAEalEp3NC72i0/OmsFlel-XjMQqpNHc0i6Z_u07wKGPkQNYVcVq94FQ6o)
|
||||||
|
ICWHL0EV,AVENANT-CDDU-ICWHL0EV-VIAART012.pdf (https://v5.airtableusercontent.com/v3/u/46/46/1762372800000/AWTYj6pLEZBn_35q1wjvWA/-oeW_0mECUzvLW9d9Ps_ZaRH3ZPVTPu6VgB0xR1BVy8TGJPmcWy8NorwxLZqQS_73GDy1XXIcb63Pgy57nGKXQ_qNN4TlH9-ZP1s8E8DExshD3Mry3SGEBG6PLZ8ZDESnhJ-lvuMLRajxHxKSXf-icD8-bPmWH51VAkIKi7G9bA7NYFNuorNx2OHLLzKzSZH/ivjPsWRHyHz2s5IHdAT8-8SKEpwyOAYLsYL5XzvX6Eo)
|
||||||
|
2ZO90V3D,AVENANT-CDDU-2ZO90V3D-VIAART026.pdf (https://v5.airtableusercontent.com/v3/u/46/46/1762372800000/0dgp38fLibVacdbc5F3vjQ/1SNHHoWcELnNtf5KPlwPbx_QQ6LDWTJ8kEz6Ja6sceQWAehqUSqh2kqoOE_ELpyFqneWucbD_y-o8qY0vHJSLH1Go8cb53inedLzI8xVu59mY_vBByFq-xrCqTL4OTFzONoxaZmpw2TpziNtVUiYmY88-rmK3AjUKtbyFGBd9T9-oT-7HiqRymYBrhGP-lMy/CmsMZT8o5z14yAj9teUDT5dj0jxUc0aWxeRB_iG8Z1Q)
|
||||||
|
ZUGVE10S,AVENANT-CDDU-ZUGVE10S-VIAART027.pdf (https://v5.airtableusercontent.com/v3/u/46/46/1762372800000/moIT_t5RsoAaYM6ACumk9g/Tn2QO9rLriIcrVw951iBglGOQ0DRTn9LO4f6XJlSV_wrTvbc_JNy6t3tS-tckRYxImZLqJ85Q7RBNr4jP1fxvPGyhg80YnS7hhlyGRoXYLf0MYNi4_CJ8KC_Et5-rft91u8Wcvs0019Uvg-npzN2thOd5hvYUZr33mtw5VDxyJbPFVtJzYDh3Ey80RfrFw-i/y21CeTdaaCZF5XadHKJaJNKjaOUwGhEY26OI4lQnUfo)
|
||||||
|
3AEZ16ZL,AVENANT-CDDU-3AEZ16ZL-CIELA004.pdf (https://v5.airtableusercontent.com/v3/u/46/46/1762372800000/X06gnGqBendWdt2CRR9AmQ/sfilzjvS_HAbAyN8jxNQp2BoLWFsBEZ4qex7kfgW9L06biSG6fUVH8siRglFfNznDRcYW_-_3OBWoWX_QDuaUhGfpl06tmvdEatRtrtCnbMj1hB9-MNutBeuTVbzGDEAdWgbrwkJ23VsfTEPezJTfunFEhu1w__njQAraf05tibOgfBMZ3t7ttm-wPfqalF4/Sw6KYSQlclLJzbki7Lqpq0YPad7yZix1pWI_SRYDc_k)
|
||||||
|
2MCT6WG8,AVENANT-CDDU-2MCT6WG8-VIAART022.pdf (https://v5.airtableusercontent.com/v3/u/46/46/1762372800000/RDwM83_amI48KwvCvjIdLA/nizRhxk20ncgnX_9-GSF7W6TI3Cwun1B4RfRLp56Re72Swr85TU9oonNkJQf33_xKwIJAaskRwoRm0srQVNaw5wCYhsbSGm1reNoFfs3nN3TONKhByzhddff6gJuQZLeYHSdIilMFpbA2s_MoT4RteHbJJJeuf2jJWkYnwgPn5S4FEOBCN0fX6lTi-9i6lCB/Z9tlapIWn69jMaHkefFPfa1f_IVmNiaRkcFcn01bFwk)
|
||||||
|
3XC8IJA3,AVENANT-CDDU-3XC8IJA3-VIAART001.pdf (https://v5.airtableusercontent.com/v3/u/46/46/1762372800000/semp6SKuwBQUzdnHMxedMQ/N4ze-YbPd8W2afSHuxColxd9-R8Wf_I5a5b8ILhnphWY3n8AVMlA0kaauYgsbFSYandc48O9V4Ha1y7CTztdl3cwIFX1wing7U2Tf0d8vJ1IAnlUqqBSG--eMtvM_tXekTSieMLBq1tzFAiJFMR7foN1AFC2-ims-HQbckNhlBmyjZ-yACqdK9G7ZEFf37oO/jrF1OouaJtjqZZkfMlmidZD29rUAfSCYTZqFSjH1kiM)
|
||||||
|
27XF1EGV,AVENANT-CDDU-27XF1EGV-VIAART002.pdf (https://v5.airtableusercontent.com/v3/u/46/46/1762372800000/LVekn8f6LjNgvPHp_q4bWQ/B4OIYr9nzHMvXD372NxXjXf6G8JHgQJ6OqgsP686-hPIEk1dlNCTrXVgcLDrXfMrcJOthQLSDM0zNZI0tNDoidh5z85K2U6sUkfQpYZ9Q4agQe821m9ph2uMUB7b0EFCTjzm9qzGwsdJ03ZJBi7SEwCGiwgaeBTgHVKMsdS43Pd-WftETJmp6RUPg_mQYDWH/3Fi6hI8GNLm9P28kp-EgQtQO576mTutgi_gKAyQTydE)
|
||||||
|
V66TE2Q9,AVENANT-CDDU-V66TE2Q9-LAZ014.pdf (https://v5.airtableusercontent.com/v3/u/46/46/1762372800000/yz3TaVQeOd36KA40RO-x_w/hNjJKC5TOZgRU9k4lyaXkvsxBU5f2kOd07KAM3pOZjKhwsJ90-hRl8WyOKd0Jn5NXQs0AUIUgsK5hD1N1XuokA1VwFSofYVhGaQP2PSECUAl6INGdhBKYCnajmLp4pwQ4orhwTMotogsGTZiWFAMLvUkIc9jZPlVuCA3SG3BrvQ/zsrSrMUB3sBScNYafkTg21E5xDILzdthhHNGkphSzZc)
|
||||||
|
73AIDADF,AVENANT-CDDU-73AIDADF-LAZ010.pdf (https://v5.airtableusercontent.com/v3/u/46/46/1762372800000/FYBvAXiAfvKm0nNksvV-og/jzhoE2jrRu0mDxhn2seALurliTOYhnH5ZaPmz_QK6djBWGFe9uSBIVzBVbAmkShTtspnOvO3cT8kiNLZRrFs6mXBzcmVGokTB1Qf_HRZ-X__CM0UqsglIIfjxjA7q2MG4eZJ86t05sG2VS2pL4FHOkRhafCdBi8MxtE6qsIsBoQ/xjMM9acXu8395EakzIDafOEmwDJbdN6QAN9nsmrdAfs)
|
||||||
|
YBMMBS1A,AVENANT-CDDU-YBMMBS1A-LAZ005.pdf (https://v5.airtableusercontent.com/v3/u/46/46/1762372800000/MmjSSNm7SEw1b-EI4ZzpSg/7c8XOZ1f1rroU0gU1kaYKhySiLX6gJ70iHTJGGN3boxKPjCZKuuMK9hmC4TywP9ZU7v2g4w9fzaDuG2A6nhCWWaistrfBuUoXvB5aaPvHXTr5ffCBv_OZw-P9ATinpMs6XrVrH_EyO0ExsLIxiFU0gEH1X51Pai19dyhIPawy9k/GJlZfEDuM53MYIcJUT3yL8CVSZrCIic3zAEzPISmdwY)
|
||||||
|
IUDLPMGM,AVENANT-CDDU-IUDLPMGM-LAZ007.pdf (https://v5.airtableusercontent.com/v3/u/46/46/1762372800000/NQtlnwNaL1XojR8B0hez4g/nYq9CcJCBruqyKP4-jGeZl0PrUmTf_DWcjzxu0NoOdDA2O7ILEpYBvK0PIXCyRq6uj_rOAjFsZ-nSiDpmfoC0y-Z1xiT4niKHhgpyH-dZfxJLO6syuVsWgUAXUCWzl1v7eztvlGRW2lnw2UambdH0tCCi5ES9u6cV6HZFa9daIw/8ze4g5snPJd_PDrQJKAsCACBDnvdaG7WQk20l2NFy2E)
|
||||||
|
823257467,AVENANT-CDDU-823257467-VIAART014.pdf (https://v5.airtableusercontent.com/v3/u/46/46/1762372800000/iglm_Zfa3PYFX32gC1Nogw/6c4fe6E2dpJOowJboGGX7Jz_0vNTW7XNCa35gtsZColBQ6kXYT8c2nXEEJT0SVpMAi2xmZQDKNFkI76-ZdIZtihNGemb97onfqK7Y1X9umvFS2-rH6if6mXlu8QNfXH5DxL8hkLlC4-dTXHVpVWb58gQyKi4y3gE1bEaxa8G8j-7YxS1Q2VFTYUiWuD07pXP/IK-1ZG1P-oi-640YDrQYYm1BFm6XneR2ocyrDSy-NJk)
|
||||||
|
249883595,AVENANT-CDDU-249883595-MICE007.pdf (https://v5.airtableusercontent.com/v3/u/46/46/1762372800000/z8ronLl7-hHS2U85qTLVUQ/fVDH8AckJSZQ40S3O4yiOOSKRCm4dkDQRWCt0G6d65EZejbMKrJrUGixF0sJ8pZdxSvmNb7z2ykiCT5Y68xLVV6XuUj_xfSbBaX2bVh8HLRfH79wKZtHXPUn_nArq2HFWC7dVIdRf2hxex_jl6kPkcOOFXHAyDac53m3SMwyN7k/MnIZkduWkhG7ySd2i0MlVZzrRpER7zVHI9puMD0no2c)
|
||||||
|
193469402,AVENANT-CDDU-193469402-MICE008.pdf (https://v5.airtableusercontent.com/v3/u/46/46/1762372800000/ijDwcZ8GCx3EbjuDXoYhiw/rhIK10ntuPDLZDqFW-DbUeQ0JujqxK0678sw37JHE59OT7crTichnWUY-BgcsSFgLUhVs_2WQ-6n7r02xt5mwD4KOZ-c4cY6AgxYcaAUabOnXT0RnYsDHDAMSE0UEIXPMwMf4yniUYW9DA7V0LKvnlpOnldOLBzw8l_iFwzrIYM/wY1nTT604OXmCMLGsyEEg_aBZP3Bed6crAbD79m1wdw)
|
||||||
|
704657966,AVENANT-CDDU-704657966-MICE004.pdf (https://v5.airtableusercontent.com/v3/u/46/46/1762372800000/HfbSPdU_ER2YIkdVN10bEA/3JbgoqOgb7XOUb_QdD0hSQcao-Jd1kKfsTpVW1MdyJMh8M3Ilw_-6BXDqmAJwpsX6Ofc31rtg-vfG7W1L0UNv6yFSbHN3ktx7JITcAS52c01bf1eYjPIPtH_70sZnQihQCI6j4dzJ9MJQwwMzjP7h85QDm6NTFJIsn5j439diQo/PfkyIs9tTQba9paVDiVGCG2fY9Tosz9jfxVL_fj991k)
|
||||||
|
329025022,AVENANT-CDDU-329025022-VIAART028.pdf (https://v5.airtableusercontent.com/v3/u/46/46/1762372800000/KbKvoB0jwefOPEbbzey19g/QdWrEQJrGmTsxMjxcmRc8H03Y6HZmWB5vlQ_TQ_xPCXqJTPJfW_cmGeWJkmrHkCOnVUgKIfhJcXsDXJi12xKpW1IVn4tlPnxh34AnhOFOKmfIM85MLjFsTRCxpscgEpwLE54UIxvuAzsPWzcMxrDkvYUGXVrnAujrB6CJ1zTCQCxu2QCwo_ky-ett6AmG_A8/IbezZFzTwuVsSNOv4DAg4iY5UCPbSmph53EP1ESKN40)
|
||||||
|
177171505,AVENANT-CDDU-177171505-VIAART002.pdf (https://v5.airtableusercontent.com/v3/u/46/46/1762372800000/uGggxd1Xg7oroLEaRnkgNA/24P838vISQIQj7gz8W_HYW-_-U5YBmFJ6lNwXk0V4Lv14tTfQ65Z9AmD_obs7bKhYq5jDxG06bd-zKkmZGQxJajKrog6ELOtpba3ozkjCf5cbLrhKDyq4JxkseYrByVJBZJ1PBw8zrfp9pjZ_siiXs2p7jHvb-wnBHtMzXW9esZY8rrlmuCKWvK8Wc_liiWa/kzPuDwW3TXjbZR1Pu4kG5RH39X4I7_NBAJlWtyJAoF0)
|
||||||
|
276881122,AVENANT-CDDU-276881122-VIAART027.pdf (https://v5.airtableusercontent.com/v3/u/46/46/1762372800000/a8NYs99ssRNqHCSV2zVZ2w/Vi6xyWMxjP-IcC-mPrvhkfhLkne82NgIeW8yokTuU3RtMbzD3WqfvCjHm2eHYEwsra86YkNciYyEQv0m_PUUHHIOQrVufYvXG_O7xUNtI2G6SsWTALU3JYirP8TZQRAK7xhlIV-dLuV9F-tw5JuoX19hptJigPWjtOa6tjUTvxHXxcfXTMAOl2xwCmEHP7dm/lqeijgfX5wKQulxMiLS5ovUUXWR62ZlCP1Kgrz_GtJg)
|
||||||
|
395610201,AVENANT-CDDU-395610201-MICE013.pdf (https://v5.airtableusercontent.com/v3/u/46/46/1762372800000/Oy-vS-1suxdXoD10LcB3Fw/sUfuSL4PCmfpRkqPNV0-kq-i6y5Nq76WMSXCF2ktvZyr8sYbWHfZBqGQeSoyovREB6DKniW7RWX_WX6EmZW_33zMrothxIHQr1IOfuZmnbPl34-VYrU3zFj0o4oRcQ8Rv8hD8KitwM1gTWfmZ7GWbSg03Ykz2b2PmjzZDOhC71c/B9achP-l2A6jXw8048iTUiY6HTGQEzzYGGn1eyyTgjs)
|
||||||
|
492601842,AVENANT-CDDU-492601842-MICE007.pdf (https://v5.airtableusercontent.com/v3/u/46/46/1762372800000/E-X_w28qKuzSTtyzakcXrA/B5zNdrXNSDgFktcKNcEcBpbI-ATnGBPGXYOLc6_Ag1RsWkb0rszfmBmlc6gv_LFigYIfgoSSkQ8adF5ePMtABwrDGDM6QIru0UAdwgDLuIooxYxualLSzDP0__u3LcAAAklC2jux3T-B9h7PDpe6fBMea2HTX4HW1pr8p0aiUy8/Ds1o7ZZ3sJSilqliH5yYmtfjmZwxK0rFVfNAl3gDxLs)
|
||||||
|
947625754,AVENANT-CDDU-947625754-MICE008.pdf (https://v5.airtableusercontent.com/v3/u/46/46/1762372800000/I-BTzdblDKzmdojS5OnIHg/3VmLwdixEqorHgAN77xd-wIGyQXyymqNvNrSR05G6a6SY4BGoDYIFoCfSKUcjU3DyJDUNOCqdwKOdO6MXuDuJ83sErOF2xwtQ5l5iT4bZRPUqE_TBaS30tioskT5xa5D7NX6WaxJrLs9dBODN0aDRFldxt1iFbUWU7pcw023Va0/VZmjF4y68CEtm6wSeGWg3-3VTBc9US1Xu_pLMgj1g-4)
|
||||||
|
228752984,AVENANT-CDDU-228752984-MICE004.pdf (https://v5.airtableusercontent.com/v3/u/46/46/1762372800000/FPCp7m3Uu10uOHqvg6wLCA/AmwKbZEgG2ENiWfX1aCmd6dWFQgsUs8GAXXnqXZ2X7SS2MnPd4YsC6XVugTYPD7TiXwsZet-KFjaxE9IJnvex_FOzH4CnmBilOhC_sByM00EHhmrxPl8MLfVFShI6Rg3uWX2e1uPY9AFarlKQmBN98Z2ykfgX62rrwpqrK2ay7w/iZ-nWDu5EtuPXwqSgHx9HeQ7Rq0gl6FjkBXt1xmw7Ks)
|
||||||
|
174913740,AVENANT-CDDU-174913740-MICE007.pdf (https://v5.airtableusercontent.com/v3/u/46/46/1762372800000/gkAP_1pvnBH4dpOwtT_Y6A/tRdfWIrAPYt_CR-cM6b9c8Dghtatw2wDzyunGzgejO7X83iow9h3dr3B6v7_unWxIFv84XhJRSJdT47LHgkSuema6zzBEQivpK6uiqMqk68SvNWOEw8Zx_3yzzH2Qgv5AMuaYsixT7sL8lxBQ2Qv5Sd4AnmUuYW_dyK_89aO5ug/0aLz8sA8I093XTzn_lORKiHjyMxxR0Q-ZvFoXWpmJcA)
|
||||||
|
877563770,AVENANT-CDDU-877563770-MICE008.pdf (https://v5.airtableusercontent.com/v3/u/46/46/1762372800000/CgHhEvLfsnL70LNDPLNCaA/8ZA19aoZBpCpL59TDOIJUxj4AD3H7pwE6IWe9evrIlOfAsAePSzyJNm-NCb_t5iEWv6SdFQwHgR6n877gnn0AFEjlUD5xecbGjmJFz3GBUYXRKrB8MLl65WVwzmtB7IXxdA6AirTkG4bGiWE_azniFp9es-jytcARLdgmT16b-w/Pl9NY4aWZ7n8dluBSiCbyNDKkP3cFeh0juGsL3beEtE)
|
||||||
|
349658085,AVENANT-CDDU-349658085-VIAART006.pdf (https://v5.airtableusercontent.com/v3/u/46/46/1762372800000/ZY346NrD-naMVc_Hzi0TtA/WxCEpDrTUGi16hHDsSNpfsR7PE-omHV340Pnj0FR6zYyTlNDYr-6c9s3iBOY3-0_RnCpghNRHOpVWWdYcr-ldBqeWIF6XsykVSY1HdClaZSMghcwmguwSKyJAt3spLF7e3SoYtt6UkUm1l2OBmsAQcaJkr_ggd2VPh2Uy7Avg2jI5KvM-Mwhe9e1pIE05r9T/3ht0WivIHI6AMNmjNEshjvYp0BLGdxIT6ZgQA899Y2I)
|
||||||
|
199186934,AVENANT-CDDU-199186934-VIAART004.pdf (https://v5.airtableusercontent.com/v3/u/46/46/1762372800000/b0aO5jP7WEWAg527CHQCmw/lPSSJIifkW1ntvXaubBY22M02TomcXOm1basIR8UiYu-_ORqfx4EckJUOnuMb6lWZQpNTBnwbGdsO65yWNY-J2s17eH5H1jwZbV2sI4gxUpaq2znac8GXJULNppvsA2uM2KbEY_TLghJS_Z8gD72c85UtlLjInFwXU9CNNxI5JREK_MGYME2G4eyNYnN8H5I/rk43cBPuD7MISBQun--VWU4QkUUzc6Vyd1tQSjwmaGc)
|
||||||
|
597781528,AVENANT-CDDU-597781528-VIAART022.pdf (https://v5.airtableusercontent.com/v3/u/46/46/1762372800000/TdqMc3qYcihewEM5sAaBVQ/4MmviEt0Xz3RtpNcBO0Msvqj6cEhz6KiIaSYoiXXd2kUCqAR4cvNy8cinV2I-ZteVYiNa4nD0vdyTyXVqOxH948PKOyxTG4D5l20bTNf32r4_dKbYzFQsyIqmuAMnLN5dGeHsv39FZvE3pg-slydTZ_NU7hnHjtJSMgl8ovHu6tjZKCMdu-A0sWTMhD8z_rH/KEHSMXG5GY6Kb4Aine35h8cgEL2wNHdJrrJbS1UDKEk)
|
||||||
|
832706440,AVENANT-CDDU-832706440-VIAART026.pdf (https://v5.airtableusercontent.com/v3/u/46/46/1762372800000/ZgpovSSoZOkxTqY4QKhq0g/hhMV-02qACmCvzw-HXtaTOt7e0lhqVomnNoCEs5JvUN1c0W_KcOiw0AjmcGTn5y7n7MW7pr1pxKanYGkSSaFc3Opw09iTjzsccMXeI7aXNEirSoDmMvsIMSx0IiTnAGEykxXlTGlZ4h-Dzv4XvRch4ur1E4BYE9Ts1aicnS9HB_rlDv1Z8T9rYSwqGa-qoWH/5JJQWgInsbnbMiTFWU9_SRcuQns4sI_6LigcqV-KInQ)
|
||||||
|
596949853,AVENANT-CDDU-596949853-VIAART021.pdf (https://v5.airtableusercontent.com/v3/u/46/46/1762372800000/2l4qDeBaKYXnSaZnpSk-sQ/nMycSXu5ZTJgayLy502mHM6QfN528gnqi0kCf4-gzaZTFVSCj-JcbT0nve2wVVOGeypjpDgSG840jnUd_Yk9eA7whatnejzEO_XkG5z3UBk_cIWR40iVcgak6y0alZ5CJpRIsFT1Xdnhy-45P-VhsUK6DlxyLPHdmkiyRxIy3X4hAHn-emRq1WuPh6uy4_hY/g6VkvPhaAMJOo0hyBX5qFuc0JHSwgbPIs0qXB7ZADy8)
|
||||||
|
318662808,AVENANT-CDDU-318662808-VIAART003.pdf (https://v5.airtableusercontent.com/v3/u/46/46/1762372800000/SbRM1ZcL7Rcue1YhPc4WQQ/UBK1DLxaWl84lFSa9j5gjr9hMIbZQxe7V_zwvgBnIGLwwQLC493KQaL10c2XM3e9asADse-yQN-Gd_15t42FT-S9h3uTH_pCrQhUiSkvC5UbNS7V8TrtRRL5t0cZ52-LeGqcJMJKiqKTUVMLKtjgDnburiiY-psS8gGrSLq0228sX8VjmZDk6LesMXb9ZAxm/YIhLrlaQyPoDPi-ihyEZA7-FdiJlEauEJvibFsWie88)
|
||||||
|
730178581,AVENANT-CDDU-730178581-VIAART011.pdf (https://v5.airtableusercontent.com/v3/u/46/46/1762372800000/ykuTPt0dVcc4cAd5aqgUag/pLr4snlfTjjziR_7-JV6iHKAfd8iaIqC8eZvmA5vEw5OaLMBpIhr71MK7H7utnTM1EkX9xtS5AnTX8t0lyuRdIwgXN_YmYBBW9zzcaiSA-TkNx3aK5cjS68hjkQ3EqsDJGK4_Nt7aw7irLabktgiLwweyurfvD7HsJUIl6ZUkE38m7bSG59For-8_A0c5waa/IfhHZZuhtN9NxL6qUsWrbMdMd1NcciRMgXrnth8NhC8)
|
||||||
|
963236711,AVENANT-CDDU-963236711-MICE012.pdf (https://v5.airtableusercontent.com/v3/u/46/46/1762372800000/XGX4BOBPM8b6KeH9Ewa05A/W6gprPJ7kKwY2FzFZiT26lZMym46GAfZYWmqMQgUWTo2qj44PUdIAgH-F8WLSEzpTi_TgQZoyH_SUzdPsWv9ciSmQTJWsKPlT32mABOrly-D9MLX5Wl5GZRW6Qa4-Mji4Po5r2XEoxNTRT73jMd8sucFcE34jO84m42STOqd7Gs/k8Dw6q3D6xzzivCV2WPcVUMA7-iT3O0B8t2r0tFy0cE)
|
||||||
|
509264147,AVENANT-CDDU-509264147-LAZ006.pdf (https://v5.airtableusercontent.com/v3/u/46/46/1762372800000/dOYH4Iu6lQCH8e_XN5lThg/-hq3W4dkN7eXGR0VuSwXU3e2ejKeBN_2TLKtvTq-TCCrWGtrWAoxHK49qc6vO10Yg4XfjUj7u5OCJaqzq-sqDjlbif9iDKCTXzK4ACYMrEek55okbvqH4GJc7UR9BGMUji1tMHEdWtXDRYauavwWIayFz-vaK8WtgLCw6OnAwLw/AVpLuDuI6u-jRn8umrrWyAO5Iz195-C04_PxZ7JFKtc)
|
||||||
|
162647099,AVENANT-CDDU-162647099-CT003.pdf (https://v5.airtableusercontent.com/v3/u/46/46/1762372800000/DW_NZwBB33z4WAwjq67YGw/SHwzV5PTHXRKlgARhWm1-fEngmRd-DBIVUqS_4rR4JDyvmZ_Bx36lOtEsP9fa-I96_Rd-_yTp44qr0BY9nxnHFbyXxARqDTgCdz8jE7mq1m4K9guOdVgLLeX57P8oj8aNydhENc0XJoMQ5S1Z6ZikKr0niFbeTRGA_UQFaohorM/nvM8-P0ae-WQfdaSI5f1Th0zoKbX0-_l582ybEobVMU)
|
||||||
|
536618268,AVENANT-CDDU-536618268-MICE008.pdf (https://v5.airtableusercontent.com/v3/u/46/46/1762372800000/fyME4-OnIbf3G8NI7VV7Aw/fp1-NmuXcqtJafFF4ULGXrKIVPMxDNMBa2FENHjGF1InX8nQpJUOuEkR728PwKdaMNMIx3zeavl8W4QEvArKfpd5DYyjU7rt1IfXK5DuqEGW5USezIAcKPK37kS1aaLbIomysrv9Qn-rqRHozWyNqzRtAcPCq_KwqnoDpB1rgtU/aolVJtjL1NwnRU3EP8xt_fK1kMf69ovVVOjCMONHpio)
|
||||||
|
330461667,AVENANT-CDDU-330461667-MICE007.pdf (https://v5.airtableusercontent.com/v3/u/46/46/1762372800000/YgGlGuxbYa1mtmqesRvS2A/OAAiNyEt7_MnfBg21aU9N9ecaZC7Qmff9ZN7RnfraJQcGmlUNHRfU7u2w8nRupyIxrsFCv-Bja7YiviKRhIZS0v3cCAQQBGha4RKVkLVhiaLJrqsvPUMVV--AlNwjNiCdXamPD7g0M50ipLpK_alNAzsJTZlOMfCqJ7odI-W3s0/9uOKhfBwbnDvb6nDXoK7S9L3a-JeE_dWKPi4xtngLkI)
|
||||||
|
249691755,AVENANT-CDDU-249691755-MICE008.pdf (https://v5.airtableusercontent.com/v3/u/46/46/1762372800000/AIgAjm-jYHFrX8-eFavftg/BzCNiifxKjJd1-Nok0yPx3_sf95-TY-m8ctjc_-nMONKEaDWcgnwrxMW_G5ZLSwKM_eJsbzi6d7oUxYjFVHxZGAd9Z1YhFh9rORndtJOCBO2qf1UnErbbaRRo3SkKKQtrSxqCQpM8R4Ijwg8_fwwtmiRhe8jsDDKLa1bgDFxi94/OCeiMM52QYhFl6riEFAwFiTI0m0SW_ev7sdH7nSSFnA)
|
||||||
|
158629019,AVENANT-CDDU-158629019-MICE005.pdf (https://v5.airtableusercontent.com/v3/u/46/46/1762372800000/aW-xaJPzp4WN4CtKhbaIjQ/39VM47lsoj6494PM8eFO3C_6HGDFMNSBwKgsVOngaJX_2NTmsrGat5ibEqVw_CKCT1OU5zuG_Q8gxaVo2eOPDxupZHPTnyxLiDwrMN_9u2hWKEBakrKa6y2KFYR5oMcv-RAN9g3U0fGHMtRKoKXZ17WZk0E1dszh2ddDSzHSc58/IqWxs8FeoNjRLBpNTvdfZaRG_XLdspGbbzrZ9jLgwAE)
|
||||||
|
764990510,AVENANT-CDDU-764990510-MICE002.pdf (https://v5.airtableusercontent.com/v3/u/46/46/1762372800000/HbML_6_f2Z8IXoFGuQv6iA/09PBU7RdovQxK23O_bovIarIm4IW3kEx46ad2yw81arBwaPZ4jmQOiaV-74U0tDKRimYARZwCYC9mHFFcUyvMTR-CkOqpwQv1XKrpJIF_0wf_-hCjQcGfI_8OzK2e_89NlXfx9XAJiEgOnD5_kLHFEoGr4Ms4B5fKrB9mtc0Bgk/trmmPhZy9fGpk9V6dteqzKw37vmZYa2k76zf-5qR0qQ)
|
||||||
|
410912878,AVENANT-CDDU-410912878-MICE003.pdf (https://v5.airtableusercontent.com/v3/u/46/46/1762372800000/dD-CIWSit_451vjTwec4rg/imllwy7uJdPkhuSJCr0FSLiEB7AvyJtXRDW1CtxrKbeoBmw56fUU_3WxXI2AJygiY4VawyyPxPeT0VVxaKAZ2-QDUfUNShVAOhCwY7PpIUiS5CDVCmPejBtx2g3nIWqvcvF5WK42S2ty9Gl61VjXHCcRHdPaPSXIEAtXTpr1HwY/1DjtfHw48qeGpEFNIPBQyyOGkb2itFTJSBMyit2WnDs)
|
||||||
|
152
app/api/staff/amendments/[id]/upload-signed-pdf/route.ts
Normal file
152
app/api/staff/amendments/[id]/upload-signed-pdf/route.ts
Normal file
|
|
@ -0,0 +1,152 @@
|
||||||
|
import { createRouteHandlerClient } from "@supabase/auth-helpers-nextjs";
|
||||||
|
import { cookies } from "next/headers";
|
||||||
|
import { NextRequest, NextResponse } from "next/server";
|
||||||
|
import { S3Client, PutObjectCommand } from "@aws-sdk/client-s3";
|
||||||
|
|
||||||
|
const s3Client = new S3Client({
|
||||||
|
region: process.env.AWS_REGION || "eu-west-3",
|
||||||
|
credentials: {
|
||||||
|
accessKeyId: process.env.AWS_ACCESS_KEY_ID!,
|
||||||
|
secretAccessKey: process.env.AWS_SECRET_ACCESS_KEY!,
|
||||||
|
},
|
||||||
|
});
|
||||||
|
|
||||||
|
const S3_BUCKET_NAME = process.env.S3_BUCKET_NAME || "odentas-documents";
|
||||||
|
|
||||||
|
export async function POST(
|
||||||
|
request: NextRequest,
|
||||||
|
{ params }: { params: Promise<{ id: string }> }
|
||||||
|
) {
|
||||||
|
try {
|
||||||
|
const { id } = await params;
|
||||||
|
const supabase = createRouteHandlerClient({ cookies });
|
||||||
|
|
||||||
|
// Vérifier l'authentification
|
||||||
|
const {
|
||||||
|
data: { user },
|
||||||
|
} = await supabase.auth.getUser();
|
||||||
|
|
||||||
|
if (!user) {
|
||||||
|
return NextResponse.json(
|
||||||
|
{ error: "Non authentifié" },
|
||||||
|
{ status: 401 }
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Vérifier que l'utilisateur est staff
|
||||||
|
const { data: staffUser } = await supabase
|
||||||
|
.from("staff_users")
|
||||||
|
.select("is_staff")
|
||||||
|
.eq("user_id", user.id)
|
||||||
|
.maybeSingle();
|
||||||
|
|
||||||
|
if (!staffUser?.is_staff) {
|
||||||
|
return NextResponse.json(
|
||||||
|
{ error: "Accès refusé" },
|
||||||
|
{ status: 403 }
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Récupérer le fichier depuis le FormData
|
||||||
|
const formData = await request.formData();
|
||||||
|
const file = formData.get("file") as File;
|
||||||
|
|
||||||
|
if (!file) {
|
||||||
|
return NextResponse.json(
|
||||||
|
{ error: "Aucun fichier fourni" },
|
||||||
|
{ status: 400 }
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Vérifier que c'est un PDF
|
||||||
|
if (file.type !== "application/pdf") {
|
||||||
|
return NextResponse.json(
|
||||||
|
{ error: "Le fichier doit être un PDF" },
|
||||||
|
{ status: 400 }
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Vérifier la taille (max 10MB)
|
||||||
|
if (file.size > 10 * 1024 * 1024) {
|
||||||
|
return NextResponse.json(
|
||||||
|
{ error: "Le fichier ne doit pas dépasser 10 MB" },
|
||||||
|
{ status: 400 }
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Récupérer l'avenant
|
||||||
|
const { data: avenant, error: avenantError } = await supabase
|
||||||
|
.from("avenants")
|
||||||
|
.select("numero_avenant, contract_id")
|
||||||
|
.eq("id", id)
|
||||||
|
.single();
|
||||||
|
|
||||||
|
if (avenantError || !avenant) {
|
||||||
|
return NextResponse.json(
|
||||||
|
{ error: "Avenant non trouvé" },
|
||||||
|
{ status: 404 }
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Récupérer le contrat pour avoir la référence
|
||||||
|
const { data: contract } = await supabase
|
||||||
|
.from("cddu_contracts")
|
||||||
|
.select("contract_number, reference")
|
||||||
|
.eq("id", avenant.contract_id)
|
||||||
|
.single();
|
||||||
|
|
||||||
|
const contractRef = contract?.reference || contract?.contract_number || "UNKNOWN";
|
||||||
|
|
||||||
|
// Convertir le fichier en Buffer
|
||||||
|
const arrayBuffer = await file.arrayBuffer();
|
||||||
|
const buffer = Buffer.from(arrayBuffer);
|
||||||
|
|
||||||
|
// Générer la clé S3
|
||||||
|
const timestamp = Date.now();
|
||||||
|
const s3Key = `avenants/${contractRef}_avenant_signed_${timestamp}.pdf`;
|
||||||
|
|
||||||
|
// Upload sur S3
|
||||||
|
const uploadCommand = new PutObjectCommand({
|
||||||
|
Bucket: S3_BUCKET_NAME,
|
||||||
|
Key: s3Key,
|
||||||
|
Body: buffer,
|
||||||
|
ContentType: "application/pdf",
|
||||||
|
});
|
||||||
|
|
||||||
|
await s3Client.send(uploadCommand);
|
||||||
|
|
||||||
|
const pdfUrl = `https://${S3_BUCKET_NAME}.s3.${process.env.AWS_REGION || "eu-west-3"}.amazonaws.com/${s3Key}`;
|
||||||
|
|
||||||
|
// Mettre à jour l'avenant avec la clé S3 du PDF signé
|
||||||
|
const { error: updateError } = await supabase
|
||||||
|
.from("avenants")
|
||||||
|
.update({
|
||||||
|
signed_pdf_s3_key: s3Key,
|
||||||
|
signed_pdf_url: pdfUrl,
|
||||||
|
signature_status: "signed",
|
||||||
|
statut: "signed",
|
||||||
|
})
|
||||||
|
.eq("id", id);
|
||||||
|
|
||||||
|
if (updateError) {
|
||||||
|
console.error("Erreur mise à jour avenant:", updateError);
|
||||||
|
return NextResponse.json(
|
||||||
|
{ error: "Erreur lors de la mise à jour de l'avenant" },
|
||||||
|
{ status: 500 }
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
return NextResponse.json({
|
||||||
|
success: true,
|
||||||
|
s3Key,
|
||||||
|
pdfUrl,
|
||||||
|
message: "PDF signé uploadé avec succès",
|
||||||
|
});
|
||||||
|
} catch (error: any) {
|
||||||
|
console.error("Erreur upload PDF signé:", error);
|
||||||
|
return NextResponse.json(
|
||||||
|
{ error: error.message || "Erreur lors de l'upload du PDF" },
|
||||||
|
{ status: 500 }
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -673,39 +673,39 @@ export default function StaffAvenantsPageClient({ initialData }: StaffAvenantsPa
|
||||||
/>
|
/>
|
||||||
</th>
|
</th>
|
||||||
<th
|
<th
|
||||||
className="px-4 py-3 text-left text-xs font-medium text-slate-600 cursor-pointer hover:bg-slate-100"
|
className="px-4 py-3 text-left text-xs font-medium text-slate-600 cursor-pointer hover:bg-slate-100 whitespace-nowrap"
|
||||||
onClick={() => handleSort("numero_avenant")}
|
onClick={() => handleSort("numero_avenant")}
|
||||||
>
|
>
|
||||||
N° Avenant {getSortIcon("numero_avenant")}
|
N° Avenant {getSortIcon("numero_avenant")}
|
||||||
</th>
|
</th>
|
||||||
<th
|
<th
|
||||||
className="px-4 py-3 text-left text-xs font-medium text-slate-600 cursor-pointer hover:bg-slate-100"
|
className="px-4 py-3 text-left text-xs font-medium text-slate-600 cursor-pointer hover:bg-slate-100 whitespace-nowrap"
|
||||||
onClick={() => handleSort("contract_number")}
|
onClick={() => handleSort("contract_number")}
|
||||||
>
|
>
|
||||||
N° Contrat {getSortIcon("contract_number")}
|
N° Contrat {getSortIcon("contract_number")}
|
||||||
</th>
|
</th>
|
||||||
<th className="px-4 py-3 text-left text-xs font-medium text-slate-600">
|
<th className="px-4 py-3 text-left text-xs font-medium text-slate-600 whitespace-nowrap">
|
||||||
Salarié
|
Salarié
|
||||||
</th>
|
</th>
|
||||||
<th className="px-4 py-3 text-left text-xs font-medium text-slate-600">
|
<th className="px-4 py-3 text-left text-xs font-medium text-slate-600 whitespace-nowrap">
|
||||||
Organisation
|
Organisation
|
||||||
</th>
|
</th>
|
||||||
<th className="px-4 py-3 text-left text-xs font-medium text-slate-600">
|
<th className="px-4 py-3 text-left text-xs font-medium text-slate-600 whitespace-nowrap">
|
||||||
Type
|
Type
|
||||||
</th>
|
</th>
|
||||||
<th className="px-4 py-3 text-left text-xs font-medium text-slate-600">
|
<th className="px-4 py-3 text-left text-xs font-medium text-slate-600 whitespace-nowrap">
|
||||||
Éléments
|
Éléments
|
||||||
</th>
|
</th>
|
||||||
<th
|
<th
|
||||||
className="px-4 py-3 text-left text-xs font-medium text-slate-600 cursor-pointer hover:bg-slate-100"
|
className="px-4 py-3 text-left text-xs font-medium text-slate-600 cursor-pointer hover:bg-slate-100 whitespace-nowrap"
|
||||||
onClick={() => handleSort("date_effet")}
|
onClick={() => handleSort("date_effet")}
|
||||||
>
|
>
|
||||||
Date d'effet {getSortIcon("date_effet")}
|
Date d'effet {getSortIcon("date_effet")}
|
||||||
</th>
|
</th>
|
||||||
<th className="px-4 py-3 text-left text-xs font-medium text-slate-600">
|
<th className="px-4 py-3 text-left text-xs font-medium text-slate-600 whitespace-nowrap">
|
||||||
Signatures
|
Signatures
|
||||||
</th>
|
</th>
|
||||||
<th className="px-4 py-3 text-left text-xs font-medium text-slate-600">
|
<th className="px-4 py-3 text-left text-xs font-medium text-slate-600 whitespace-nowrap">
|
||||||
Statut
|
Statut
|
||||||
</th>
|
</th>
|
||||||
<th className="px-4 py-3 text-left text-xs font-medium text-slate-600">
|
<th className="px-4 py-3 text-left text-xs font-medium text-slate-600">
|
||||||
|
|
@ -728,13 +728,13 @@ export default function StaffAvenantsPageClient({ initialData }: StaffAvenantsPa
|
||||||
/>
|
/>
|
||||||
</td>
|
</td>
|
||||||
<td
|
<td
|
||||||
className="px-4 py-3 text-sm font-medium text-slate-900 cursor-pointer"
|
className="px-4 py-3 text-xs font-medium text-slate-900 cursor-pointer whitespace-nowrap"
|
||||||
onClick={() => router.push(`/staff/avenants/${amendment.id}`)}
|
onClick={() => router.push(`/staff/avenants/${amendment.id}`)}
|
||||||
>
|
>
|
||||||
{amendment.numero_avenant || "-"}
|
{amendment.numero_avenant || "-"}
|
||||||
</td>
|
</td>
|
||||||
<td
|
<td
|
||||||
className="px-4 py-3 text-sm text-slate-700 cursor-pointer"
|
className="px-4 py-3 text-sm text-slate-700 cursor-pointer whitespace-nowrap"
|
||||||
onClick={() => router.push(`/staff/avenants/${amendment.id}`)}
|
onClick={() => router.push(`/staff/avenants/${amendment.id}`)}
|
||||||
>
|
>
|
||||||
{amendment.contract_number || "-"}
|
{amendment.contract_number || "-"}
|
||||||
|
|
@ -755,7 +755,7 @@ export default function StaffAvenantsPageClient({ initialData }: StaffAvenantsPa
|
||||||
{amendment.organization_name || "-"}
|
{amendment.organization_name || "-"}
|
||||||
</td>
|
</td>
|
||||||
<td
|
<td
|
||||||
className="px-4 py-3 cursor-pointer"
|
className="px-4 py-3 cursor-pointer whitespace-nowrap"
|
||||||
onClick={() => router.push(`/staff/avenants/${amendment.id}`)}
|
onClick={() => router.push(`/staff/avenants/${amendment.id}`)}
|
||||||
>
|
>
|
||||||
{getTypeBadge(amendment.type_avenant)}
|
{getTypeBadge(amendment.type_avenant)}
|
||||||
|
|
@ -767,19 +767,19 @@ export default function StaffAvenantsPageClient({ initialData }: StaffAvenantsPa
|
||||||
{getElementsLabel(amendment.elements)}
|
{getElementsLabel(amendment.elements)}
|
||||||
</td>
|
</td>
|
||||||
<td
|
<td
|
||||||
className="px-4 py-3 text-sm text-slate-700 cursor-pointer"
|
className="px-4 py-3 text-sm text-slate-700 cursor-pointer whitespace-nowrap"
|
||||||
onClick={() => router.push(`/staff/avenants/${amendment.id}`)}
|
onClick={() => router.push(`/staff/avenants/${amendment.id}`)}
|
||||||
>
|
>
|
||||||
{formatDate(amendment.date_effet)}
|
{formatDate(amendment.date_effet)}
|
||||||
</td>
|
</td>
|
||||||
<td
|
<td
|
||||||
className="px-4 py-3 cursor-pointer"
|
className="px-4 py-3 cursor-pointer whitespace-nowrap"
|
||||||
onClick={() => router.push(`/staff/avenants/${amendment.id}`)}
|
onClick={() => router.push(`/staff/avenants/${amendment.id}`)}
|
||||||
>
|
>
|
||||||
{getSignatureIcons(amendment.signature_status)}
|
{getSignatureIcons(amendment.signature_status)}
|
||||||
</td>
|
</td>
|
||||||
<td
|
<td
|
||||||
className="px-4 py-3 cursor-pointer"
|
className="px-4 py-3 cursor-pointer whitespace-nowrap"
|
||||||
onClick={() => router.push(`/staff/avenants/${amendment.id}`)}
|
onClick={() => router.push(`/staff/avenants/${amendment.id}`)}
|
||||||
>
|
>
|
||||||
{getStatusBadge(amendment.status)}
|
{getStatusBadge(amendment.status)}
|
||||||
|
|
|
||||||
187
components/staff/amendments/UploadSignedPdfModal.tsx
Normal file
187
components/staff/amendments/UploadSignedPdfModal.tsx
Normal file
|
|
@ -0,0 +1,187 @@
|
||||||
|
"use client";
|
||||||
|
|
||||||
|
import { Upload, X, FileText, AlertCircle } from "lucide-react";
|
||||||
|
import { useState, useRef } from "react";
|
||||||
|
|
||||||
|
interface UploadSignedPdfModalProps {
|
||||||
|
isOpen: boolean;
|
||||||
|
onClose: () => void;
|
||||||
|
onConfirm: (file: File) => Promise<void>;
|
||||||
|
numeroAvenant: string;
|
||||||
|
isUploading: boolean;
|
||||||
|
}
|
||||||
|
|
||||||
|
export default function UploadSignedPdfModal({
|
||||||
|
isOpen,
|
||||||
|
onClose,
|
||||||
|
numeroAvenant,
|
||||||
|
onConfirm,
|
||||||
|
isUploading,
|
||||||
|
}: UploadSignedPdfModalProps) {
|
||||||
|
const [selectedFile, setSelectedFile] = useState<File | null>(null);
|
||||||
|
const [error, setError] = useState<string | null>(null);
|
||||||
|
const fileInputRef = useRef<HTMLInputElement>(null);
|
||||||
|
|
||||||
|
if (!isOpen) return null;
|
||||||
|
|
||||||
|
const handleFileSelect = (e: React.ChangeEvent<HTMLInputElement>) => {
|
||||||
|
const file = e.target.files?.[0];
|
||||||
|
if (!file) return;
|
||||||
|
|
||||||
|
// Vérifier que c'est bien un PDF
|
||||||
|
if (file.type !== "application/pdf") {
|
||||||
|
setError("Le fichier doit être un PDF");
|
||||||
|
setSelectedFile(null);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Vérifier la taille (max 10MB)
|
||||||
|
if (file.size > 10 * 1024 * 1024) {
|
||||||
|
setError("Le fichier ne doit pas dépasser 10 MB");
|
||||||
|
setSelectedFile(null);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
setError(null);
|
||||||
|
setSelectedFile(file);
|
||||||
|
};
|
||||||
|
|
||||||
|
const handleUpload = async () => {
|
||||||
|
if (!selectedFile) return;
|
||||||
|
|
||||||
|
try {
|
||||||
|
await onConfirm(selectedFile);
|
||||||
|
setSelectedFile(null);
|
||||||
|
setError(null);
|
||||||
|
} catch (err: any) {
|
||||||
|
setError(err.message || "Erreur lors de l'upload");
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
const handleClose = () => {
|
||||||
|
if (!isUploading) {
|
||||||
|
setSelectedFile(null);
|
||||||
|
setError(null);
|
||||||
|
onClose();
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
return (
|
||||||
|
<div className="fixed inset-0 bg-black/50 flex items-center justify-center z-50 p-4">
|
||||||
|
<div className="bg-white rounded-xl shadow-xl max-w-lg w-full">
|
||||||
|
{/* Header */}
|
||||||
|
<div className="flex items-center justify-between p-6 border-b">
|
||||||
|
<div>
|
||||||
|
<h2 className="text-xl font-semibold text-slate-900">
|
||||||
|
Ajouter un PDF signé
|
||||||
|
</h2>
|
||||||
|
<p className="text-sm text-slate-600 mt-1">
|
||||||
|
Avenant {numeroAvenant}
|
||||||
|
</p>
|
||||||
|
</div>
|
||||||
|
<button
|
||||||
|
onClick={handleClose}
|
||||||
|
disabled={isUploading}
|
||||||
|
className="p-2 hover:bg-slate-100 rounded-lg transition-colors disabled:opacity-50"
|
||||||
|
>
|
||||||
|
<X className="h-5 w-5 text-slate-600" />
|
||||||
|
</button>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
{/* Body */}
|
||||||
|
<div className="p-6 space-y-4">
|
||||||
|
<div className="p-4 bg-blue-50 border border-blue-200 rounded-lg">
|
||||||
|
<div className="flex gap-3">
|
||||||
|
<AlertCircle className="h-5 w-5 text-blue-600 flex-shrink-0 mt-0.5" />
|
||||||
|
<div className="text-sm text-blue-900">
|
||||||
|
<p className="font-medium mb-1">Upload manuel d'un PDF signé</p>
|
||||||
|
<p className="text-blue-800">
|
||||||
|
Utilisez cette fonctionnalité pour ajouter un avenant qui a été signé
|
||||||
|
en dehors du système (signature papier, autre plateforme, etc.).
|
||||||
|
</p>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
{/* Zone de sélection de fichier */}
|
||||||
|
<div className="space-y-3">
|
||||||
|
<label className="block text-sm font-medium text-slate-700">
|
||||||
|
Sélectionner le PDF signé
|
||||||
|
</label>
|
||||||
|
|
||||||
|
{!selectedFile ? (
|
||||||
|
<div
|
||||||
|
onClick={() => fileInputRef.current?.click()}
|
||||||
|
className="border-2 border-dashed border-slate-300 rounded-lg p-8 text-center hover:border-indigo-400 hover:bg-indigo-50/50 transition-colors cursor-pointer"
|
||||||
|
>
|
||||||
|
<Upload className="h-12 w-12 text-slate-400 mx-auto mb-3" />
|
||||||
|
<p className="text-sm font-medium text-slate-700 mb-1">
|
||||||
|
Cliquer pour sélectionner un fichier
|
||||||
|
</p>
|
||||||
|
<p className="text-xs text-slate-500">
|
||||||
|
PDF uniquement, max 10 MB
|
||||||
|
</p>
|
||||||
|
</div>
|
||||||
|
) : (
|
||||||
|
<div className="border border-slate-300 rounded-lg p-4 bg-slate-50">
|
||||||
|
<div className="flex items-center gap-3">
|
||||||
|
<div className="flex-shrink-0 w-10 h-10 bg-indigo-100 rounded-lg flex items-center justify-center">
|
||||||
|
<FileText className="h-5 w-5 text-indigo-600" />
|
||||||
|
</div>
|
||||||
|
<div className="flex-1 min-w-0">
|
||||||
|
<p className="text-sm font-medium text-slate-900 truncate">
|
||||||
|
{selectedFile.name}
|
||||||
|
</p>
|
||||||
|
<p className="text-xs text-slate-500">
|
||||||
|
{(selectedFile.size / 1024).toFixed(2)} KB
|
||||||
|
</p>
|
||||||
|
</div>
|
||||||
|
<button
|
||||||
|
onClick={() => setSelectedFile(null)}
|
||||||
|
disabled={isUploading}
|
||||||
|
className="p-2 hover:bg-slate-200 rounded-lg transition-colors disabled:opacity-50"
|
||||||
|
>
|
||||||
|
<X className="h-4 w-4 text-slate-600" />
|
||||||
|
</button>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
)}
|
||||||
|
|
||||||
|
<input
|
||||||
|
ref={fileInputRef}
|
||||||
|
type="file"
|
||||||
|
accept="application/pdf"
|
||||||
|
onChange={handleFileSelect}
|
||||||
|
className="hidden"
|
||||||
|
/>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
{error && (
|
||||||
|
<div className="p-3 bg-red-50 border border-red-200 rounded-lg text-sm text-red-800">
|
||||||
|
{error}
|
||||||
|
</div>
|
||||||
|
)}
|
||||||
|
</div>
|
||||||
|
|
||||||
|
{/* Footer */}
|
||||||
|
<div className="flex items-center justify-end gap-3 p-6 border-t bg-slate-50">
|
||||||
|
<button
|
||||||
|
onClick={handleClose}
|
||||||
|
disabled={isUploading}
|
||||||
|
className="px-4 py-2 text-slate-700 hover:bg-slate-200 rounded-lg transition-colors font-medium disabled:opacity-50"
|
||||||
|
>
|
||||||
|
Annuler
|
||||||
|
</button>
|
||||||
|
<button
|
||||||
|
onClick={handleUpload}
|
||||||
|
disabled={!selectedFile || isUploading}
|
||||||
|
className="inline-flex items-center gap-2 px-4 py-2 bg-indigo-600 text-white rounded-lg hover:bg-indigo-700 transition-colors font-medium disabled:opacity-50 disabled:cursor-not-allowed"
|
||||||
|
>
|
||||||
|
<Upload className="h-4 w-4" />
|
||||||
|
{isUploading ? "Upload en cours..." : "Uploader le PDF"}
|
||||||
|
</button>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
@ -1,12 +1,13 @@
|
||||||
"use client";
|
"use client";
|
||||||
|
|
||||||
import { useRouter } from "next/navigation";
|
import { useRouter } from "next/navigation";
|
||||||
import { ArrowLeft, Calendar, FileText, User, Building2, Download, Trash2, RefreshCw, Send, Check, X, Clock, Edit3 } from "lucide-react";
|
import { ArrowLeft, Calendar, FileText, User, Building2, Download, Trash2, RefreshCw, Send, Check, X, Clock, Edit3, Upload } from "lucide-react";
|
||||||
import { useEffect, useState } from "react";
|
import { useEffect, useState } from "react";
|
||||||
import DeleteAvenantModal from "@/components/staff/amendments/DeleteAvenantModal";
|
import DeleteAvenantModal from "@/components/staff/amendments/DeleteAvenantModal";
|
||||||
import SendSignatureModal from "@/components/staff/amendments/SendSignatureModal";
|
import SendSignatureModal from "@/components/staff/amendments/SendSignatureModal";
|
||||||
import ChangeStatusModal from "@/components/staff/amendments/ChangeStatusModal";
|
import ChangeStatusModal from "@/components/staff/amendments/ChangeStatusModal";
|
||||||
import UpdateSignatureStatusModal from "@/components/staff/amendments/UpdateSignatureStatusModal";
|
import UpdateSignatureStatusModal from "@/components/staff/amendments/UpdateSignatureStatusModal";
|
||||||
|
import UploadSignedPdfModal from "@/components/staff/amendments/UploadSignedPdfModal";
|
||||||
|
|
||||||
interface AvenantDetailPageClientProps {
|
interface AvenantDetailPageClientProps {
|
||||||
avenant: any;
|
avenant: any;
|
||||||
|
|
@ -26,6 +27,8 @@ export default function AvenantDetailPageClient({ avenant }: AvenantDetailPageCl
|
||||||
const [isChangingStatus, setIsChangingStatus] = useState(false);
|
const [isChangingStatus, setIsChangingStatus] = useState(false);
|
||||||
const [showUpdateSignatureModal, setShowUpdateSignatureModal] = useState(false);
|
const [showUpdateSignatureModal, setShowUpdateSignatureModal] = useState(false);
|
||||||
const [isUpdatingSignature, setIsUpdatingSignature] = useState(false);
|
const [isUpdatingSignature, setIsUpdatingSignature] = useState(false);
|
||||||
|
const [showUploadPdfModal, setShowUploadPdfModal] = useState(false);
|
||||||
|
const [isUploadingPdf, setIsUploadingPdf] = useState(false);
|
||||||
|
|
||||||
// Charger l'URL du PDF si la clé S3 existe
|
// Charger l'URL du PDF si la clé S3 existe
|
||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
|
|
@ -212,6 +215,36 @@ export default function AvenantDetailPageClient({ avenant }: AvenantDetailPageCl
|
||||||
setIsUpdatingSignature(false);
|
setIsUpdatingSignature(false);
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
const handleUploadSignedPdf = async (file: File) => {
|
||||||
|
setIsUploadingPdf(true);
|
||||||
|
try {
|
||||||
|
const formData = new FormData();
|
||||||
|
formData.append("file", file);
|
||||||
|
|
||||||
|
const response = await fetch(`/api/staff/amendments/${avenant.id}/upload-signed-pdf`, {
|
||||||
|
method: "POST",
|
||||||
|
body: formData,
|
||||||
|
});
|
||||||
|
|
||||||
|
if (!response.ok) {
|
||||||
|
const error = await response.json();
|
||||||
|
throw new Error(error.error || "Erreur lors de l'upload");
|
||||||
|
}
|
||||||
|
|
||||||
|
const data = await response.json();
|
||||||
|
|
||||||
|
// Fermer le modal et recharger la page
|
||||||
|
setShowUploadPdfModal(false);
|
||||||
|
alert("PDF signé uploadé avec succès !");
|
||||||
|
router.refresh();
|
||||||
|
} catch (error: any) {
|
||||||
|
console.error("Erreur upload PDF:", error);
|
||||||
|
throw error; // Re-throw pour que la modale puisse afficher l'erreur
|
||||||
|
} finally {
|
||||||
|
setIsUploadingPdf(false);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
const contract = avenant.cddu_contracts;
|
const contract = avenant.cddu_contracts;
|
||||||
|
|
||||||
|
|
@ -593,7 +626,17 @@ export default function AvenantDetailPageClient({ avenant }: AvenantDetailPageCl
|
||||||
|
|
||||||
{/* PDF */}
|
{/* PDF */}
|
||||||
<div className="bg-white rounded-xl border shadow-sm p-6">
|
<div className="bg-white rounded-xl border shadow-sm p-6">
|
||||||
<h2 className="font-semibold text-slate-900 mb-4">Document signé</h2>
|
<div className="flex items-center justify-between mb-4">
|
||||||
|
<h2 className="font-semibold text-slate-900">Document signé</h2>
|
||||||
|
<button
|
||||||
|
onClick={() => setShowUploadPdfModal(true)}
|
||||||
|
className="inline-flex items-center gap-2 px-3 py-1.5 text-sm border border-green-300 text-green-700 rounded-lg hover:bg-green-50 transition-colors"
|
||||||
|
title="Ajouter manuellement un PDF signé"
|
||||||
|
>
|
||||||
|
<Upload className="h-3.5 w-3.5" />
|
||||||
|
Ajouter PDF signé
|
||||||
|
</button>
|
||||||
|
</div>
|
||||||
<div className="flex items-start gap-4 p-4 bg-slate-50 rounded-lg border">
|
<div className="flex items-start gap-4 p-4 bg-slate-50 rounded-lg border">
|
||||||
<div className="flex-shrink-0 w-12 h-12 bg-indigo-100 rounded-lg flex items-center justify-center">
|
<div className="flex-shrink-0 w-12 h-12 bg-indigo-100 rounded-lg flex items-center justify-center">
|
||||||
<FileText className="h-6 w-6 text-indigo-600" />
|
<FileText className="h-6 w-6 text-indigo-600" />
|
||||||
|
|
@ -732,6 +775,15 @@ export default function AvenantDetailPageClient({ avenant }: AvenantDetailPageCl
|
||||||
isUpdating={isUpdatingSignature}
|
isUpdating={isUpdatingSignature}
|
||||||
numeroAvenant={avenant.numero_avenant}
|
numeroAvenant={avenant.numero_avenant}
|
||||||
/>
|
/>
|
||||||
|
|
||||||
|
{/* Modale d'upload de PDF signé */}
|
||||||
|
<UploadSignedPdfModal
|
||||||
|
isOpen={showUploadPdfModal}
|
||||||
|
onClose={() => setShowUploadPdfModal(false)}
|
||||||
|
onConfirm={handleUploadSignedPdf}
|
||||||
|
numeroAvenant={avenant.numero_avenant}
|
||||||
|
isUploading={isUploadingPdf}
|
||||||
|
/>
|
||||||
</div>
|
</div>
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue