|
|
@ -4,25 +4,30 @@
|
|||
<option name="autoReloadType" value="SELECTIVE" />
|
||||
</component>
|
||||
<component name="ChangeListManager">
|
||||
<list default="true" id="c6d0259a-16e1-410d-91a1-830590ee2a08" name="Changes" comment="30/07/2025 -18h">
|
||||
<list default="true" id="c6d0259a-16e1-410d-91a1-830590ee2a08" name="Changes" comment="10/08/2025 - 10h">
|
||||
<change beforePath="$PROJECT_DIR$/.idea/workspace.xml" beforeDir="false" afterPath="$PROJECT_DIR$/.idea/workspace.xml" afterDir="false" />
|
||||
<change beforePath="$PROJECT_DIR$/E_Sign_Document.py" beforeDir="false" afterPath="$PROJECT_DIR$/E_Sign_Document.py" afterDir="false" />
|
||||
<change beforePath="$PROJECT_DIR$/Collection_Historique.py" beforeDir="false" afterPath="$PROJECT_DIR$/Collection_Historique.py" afterDir="false" />
|
||||
<change beforePath="$PROJECT_DIR$/GlobalVariable.py" beforeDir="false" afterPath="$PROJECT_DIR$/GlobalVariable.py" afterDir="false" />
|
||||
<change beforePath="$PROJECT_DIR$/Inscription_mgt.py" beforeDir="false" afterPath="$PROJECT_DIR$/Inscription_mgt.py" afterDir="false" />
|
||||
<change beforePath="$PROJECT_DIR$/Job_Cron.py" beforeDir="false" afterPath="$PROJECT_DIR$/Job_Cron.py" afterDir="false" />
|
||||
<change beforePath="$PROJECT_DIR$/Job_Cron_Common.py" beforeDir="false" afterPath="$PROJECT_DIR$/Job_Cron_Common.py" afterDir="false" />
|
||||
<change beforePath="$PROJECT_DIR$/Log/log_file.log" beforeDir="false" afterPath="$PROJECT_DIR$/Log/log_file.log" afterDir="false" />
|
||||
<change beforePath="$PROJECT_DIR$/Session_Formation.py" beforeDir="false" afterPath="$PROJECT_DIR$/Session_Formation.py" afterDir="false" />
|
||||
<change beforePath="$PROJECT_DIR$/Session_Formation_Sequence.py" beforeDir="false" afterPath="$PROJECT_DIR$/Session_Formation_Sequence.py" afterDir="false" />
|
||||
<change beforePath="$PROJECT_DIR$/Template/invoice_RIB_PortCities_perso_tpl.html" beforeDir="false" afterPath="$PROJECT_DIR$/Template/invoice_RIB_PortCities_perso_tpl.html" afterDir="false" />
|
||||
<change beforePath="$PROJECT_DIR$/crm_opportunite.py" beforeDir="false" afterPath="$PROJECT_DIR$/crm_opportunite.py" afterDir="false" />
|
||||
<change beforePath="$PROJECT_DIR$/base_partner_catalog_config.py" beforeDir="false" afterPath="$PROJECT_DIR$/base_partner_catalog_config.py" afterDir="false" />
|
||||
<change beforePath="$PROJECT_DIR$/class_mgt.py" beforeDir="false" afterPath="$PROJECT_DIR$/class_mgt.py" afterDir="false" />
|
||||
<change beforePath="$PROJECT_DIR$/competence.py" beforeDir="false" afterPath="$PROJECT_DIR$/competence.py" afterDir="false" />
|
||||
<change beforePath="$PROJECT_DIR$/email_inscription_mgt.py" beforeDir="false" afterPath="$PROJECT_DIR$/email_inscription_mgt.py" afterDir="false" />
|
||||
<change beforePath="$PROJECT_DIR$/email_mgt.py" beforeDir="false" afterPath="$PROJECT_DIR$/email_mgt.py" afterDir="false" />
|
||||
<change beforePath="$PROJECT_DIR$/emargement.py" beforeDir="false" afterPath="$PROJECT_DIR$/emargement.py" afterDir="false" />
|
||||
<change beforePath="$PROJECT_DIR$/formulaire_mgt.py" beforeDir="false" afterPath="$PROJECT_DIR$/formulaire_mgt.py" afterDir="false" />
|
||||
<change beforePath="$PROJECT_DIR$/invoice_paiement_mgt.py" beforeDir="false" afterPath="$PROJECT_DIR$/invoice_paiement_mgt.py" afterDir="false" />
|
||||
<change beforePath="$PROJECT_DIR$/main.py" beforeDir="false" afterPath="$PROJECT_DIR$/main.py" afterDir="false" />
|
||||
<change beforePath="$PROJECT_DIR$/partner_client.py" beforeDir="false" afterPath="$PROJECT_DIR$/partner_client.py" afterDir="false" />
|
||||
<change beforePath="$PROJECT_DIR$/partner_base_setup.py" beforeDir="false" afterPath="$PROJECT_DIR$/partner_base_setup.py" afterDir="false" />
|
||||
<change beforePath="$PROJECT_DIR$/partner_invoice.py" beforeDir="false" afterPath="$PROJECT_DIR$/partner_invoice.py" afterDir="false" />
|
||||
<change beforePath="$PROJECT_DIR$/partner_order.py" beforeDir="false" afterPath="$PROJECT_DIR$/partner_order.py" afterDir="false" />
|
||||
<change beforePath="$PROJECT_DIR$/prj_common.py" beforeDir="false" afterPath="$PROJECT_DIR$/prj_common.py" afterDir="false" />
|
||||
<change beforePath="$PROJECT_DIR$/ressources_humaines.py" beforeDir="false" afterPath="$PROJECT_DIR$/ressources_humaines.py" afterDir="false" />
|
||||
<change beforePath="$PROJECT_DIR$/survey_mgt.py" beforeDir="false" afterPath="$PROJECT_DIR$/survey_mgt.py" afterDir="false" />
|
||||
<change beforePath="$PROJECT_DIR$/temp_direct/Attestation_Ftion435_00131.pdf" beforeDir="false" />
|
||||
<change beforePath="$PROJECT_DIR$/temp_direct/Attestation_Ftion435_06813.pdf" beforeDir="false" />
|
||||
|
|
@ -180,6 +185,7 @@
|
|||
<change beforePath="$PROJECT_DIR$/temp_direct/templateimportstagiairescbv2_20250721135300.csv" beforeDir="false" />
|
||||
<change beforePath="$PROJECT_DIR$/temp_direct/templateimportstagiairescbv2_20250721135322.csv" beforeDir="false" />
|
||||
<change beforePath="$PROJECT_DIR$/tools_cherif/tools_cherif.py" beforeDir="false" afterPath="$PROJECT_DIR$/tools_cherif/tools_cherif.py" afterDir="false" />
|
||||
<change beforePath="$PROJECT_DIR$/unite_enseignement_mgt.py" beforeDir="false" afterPath="$PROJECT_DIR$/unite_enseignement_mgt.py" afterDir="false" />
|
||||
<change beforePath="$PROJECT_DIR$/wrapper.py" beforeDir="false" afterPath="$PROJECT_DIR$/wrapper.py" afterDir="false" />
|
||||
</list>
|
||||
<option name="SHOW_DIALOG" value="false" />
|
||||
|
|
@ -623,7 +629,7 @@
|
|||
<option name="project" value="LOCAL" />
|
||||
<updated>1747251650255</updated>
|
||||
</task>
|
||||
<option name="localTasksCounter" value="493" />
|
||||
<option name="localTasksCounter" value="495" />
|
||||
<servers />
|
||||
</component>
|
||||
<component name="Vcs.Log.Tabs.Properties">
|
||||
|
|
@ -665,7 +671,6 @@
|
|||
</option>
|
||||
</component>
|
||||
<component name="VcsManagerConfiguration">
|
||||
<MESSAGE value="14/05/2025 - 20h" />
|
||||
<MESSAGE value="Init - 29/05/2025" />
|
||||
<MESSAGE value="Init - 29/05/2025 - FI" />
|
||||
<MESSAGE value="31/05/2025 - 20h" />
|
||||
|
|
@ -690,6 +695,7 @@
|
|||
<MESSAGE value="12/07/2025 - 12h" />
|
||||
<MESSAGE value="qsd" />
|
||||
<MESSAGE value="30/07/2025 -18h" />
|
||||
<option name="LAST_COMMIT_MESSAGE" value="30/07/2025 -18h" />
|
||||
<MESSAGE value="10/08/2025 - 10h" />
|
||||
<option name="LAST_COMMIT_MESSAGE" value="10/08/2025 - 10h" />
|
||||
</component>
|
||||
</project>
|
||||
|
|
@ -192,6 +192,8 @@ Recupération de l'historique des actions associé à un element.
|
|||
Un element est defini par :
|
||||
- related_collection
|
||||
- related_collection_recid
|
||||
|
||||
IMPORTANT : On
|
||||
"""
|
||||
def Get_Action_Historique_List(diction):
|
||||
try:
|
||||
|
|
@ -207,7 +209,7 @@ def Get_Action_Historique_List(diction):
|
|||
if val not in field_list and val.startswith('my_') is False:
|
||||
mycommon.myprint(str(
|
||||
inspect.stack()[0][3]) + " Le champ '" + val + "' n'existe pas")
|
||||
return False, " Les informations fournies sont incorrectes",
|
||||
return False, " Les informations fournies sont incorrectes", False
|
||||
|
||||
"""
|
||||
Verification des champs obligatoires
|
||||
|
|
@ -217,7 +219,7 @@ def Get_Action_Historique_List(diction):
|
|||
if val not in diction:
|
||||
mycommon.myprint(
|
||||
str(inspect.stack()[0][3]) + " - La valeur '" + val + "' n'est pas presente dans la liste des arguments ")
|
||||
return False, " Les informations fournies sont incorrectes",
|
||||
return False, " Les informations fournies sont incorrectes",False
|
||||
|
||||
"""
|
||||
Verification de l'identité et autorisation de l'entité qui
|
||||
|
|
@ -230,7 +232,7 @@ def Get_Action_Historique_List(diction):
|
|||
|
||||
local_status, my_partner = mycommon.Check_Connexion_And_Return_Partner_Data(diction)
|
||||
if (local_status is not True):
|
||||
return local_status, my_partner
|
||||
return local_status, my_partner, False
|
||||
|
||||
RetObject = []
|
||||
val_tmp = 1
|
||||
|
|
@ -250,9 +252,9 @@ def Get_Action_Historique_List(diction):
|
|||
val_tmp = val_tmp + 1
|
||||
RetObject.append(mycommon.JSONEncoder().encode(user))
|
||||
|
||||
return True, RetObject
|
||||
return True, RetObject, str(MYSY_GV.HISTORIQUE_MAX_EVENT)
|
||||
|
||||
except Exception as e:
|
||||
exc_type, exc_obj, exc_tb = sys.exc_info()
|
||||
mycommon.myprint(str(inspect.stack()[0][3]) + " -" + str(e) + " - Line : " + str(exc_tb.tb_lineno))
|
||||
return False, " Impossible de récupérer la liste des évènements "
|
||||
return False, " Impossible de récupérer la liste des évènements ", False
|
||||
|
|
@ -676,11 +676,12 @@ PARTNER_QUOTATION_STATUS = ['-1', '0', '1', '2', '3', '4']
|
|||
"""
|
||||
Pour mettre en place un système de configuration global, on va definir les valeur acceptée
|
||||
"""
|
||||
PARTNER_BASE_CONFIG_NAME = ['tva', 'smtp_server', 'smtp_user', 'smtp_user_pwd', 'smtp_count_from_name',
|
||||
PARTNER_BASE_CONFIG_NAME = ['tva', 'smtp_server', 'smtp_user', 'smtp_user_pwd', 'smtp_count_from_name',
|
||||
'smtp_count_port', 'partner_smtp', 'partner_jour_heure', 'nb_relance_auto',
|
||||
'relance_auto', 'frequence_relance_auto', 'session_warning', 'session_warning_lead_time',
|
||||
'recyclage_warning', 'recyclage_warning_lead_time',
|
||||
'preinscription_notification_email', 'inscription_notification_email']
|
||||
'preinscription_notification_email', 'inscription_notification_email','nb_heure_par_jour',
|
||||
'nb_heure_par_mois', 'nb_heure_par_annee', 'nb_heure_par_semaine']
|
||||
|
||||
|
||||
"""
|
||||
|
|
@ -724,7 +725,7 @@ AGENDA_EVENT_TYPE = ['absence', 'planning', 'autre', '']
|
|||
Limite pour l'affichage des historique d'action coté front.
|
||||
Par exemple on va afficher les 100 dernières action, mais pas tout.
|
||||
"""
|
||||
HISTORIQUE_MAX_EVENT = 100
|
||||
HISTORIQUE_MAX_EVENT = 20
|
||||
|
||||
"""
|
||||
Type d'apprenant à l'inscription d'une session de formation
|
||||
|
|
@ -871,7 +872,7 @@ EMAIL_MAX_PJ = 5
|
|||
"""
|
||||
La clé API de OpenAI
|
||||
"""
|
||||
OPENAI_KEY = "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"
|
||||
OPENAI_KEY = "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"
|
||||
|
||||
"""
|
||||
Variable interne pour le traitement
|
||||
|
|
@ -970,4 +971,5 @@ Les type de ressources humaines sont :
|
|||
'vide' ou rien ==> Ressource internes (enseignant, vacataire, etc)
|
||||
|
||||
"""
|
||||
TYPE_RH = ['', '1']
|
||||
TYPE_RH = ['', '1']
|
||||
|
||||
|
|
|
|||
1129
Inscription_mgt.py
|
|
@ -974,7 +974,7 @@ def Invoice_Data_From_Tab(diction):
|
|||
|
||||
# Récuperation de la sequence de l'objet "partner_invoice_header" dans la collection : "mysy_sequence"
|
||||
retval_sequence_invoice = MYSY_GV.dbname['mysy_sequence'].find_one(
|
||||
{'partner_invoice_header': 'partner_order_header',
|
||||
{'related_mysy_object': 'partner_invoice_header',
|
||||
'valide': '1', 'partner_owner_recid': str(
|
||||
my_partner['recid'])})
|
||||
|
||||
|
|
|
|||
|
|
@ -649,6 +649,9 @@ def Sent_Convocation_Stagiaire_By_Email(tab_files, Folder, diction):
|
|||
if (local_status is False):
|
||||
return local_status, local_retval
|
||||
|
||||
if ("company_data" in local_retval.keys() and "societe_nom" in local_retval['company_data'].keys()):
|
||||
company_name = local_retval['company_data']['societe_nom']
|
||||
|
||||
convention_dictionnary_data = local_retval
|
||||
|
||||
body = {
|
||||
|
|
@ -790,7 +793,13 @@ def Sent_Convocation_Stagiaire_By_Email(tab_files, Folder, diction):
|
|||
|
||||
else:
|
||||
msg.attach(html_mime)
|
||||
msg['From'] = MYSY_GV.O365_SMTP_COUNT_From_User
|
||||
#msg['From'] = MYSY_GV.O365_SMTP_COUNT_From_User
|
||||
|
||||
if (company_name):
|
||||
msg['From'] = str(company_name) + " <" + str(MYSY_GV.O365_SMTP_COUNT_From_User) + ">"
|
||||
else:
|
||||
msg['From'] = str(MYSY_GV.O365_SMTP_COUNT_From_User)
|
||||
|
||||
msg['Cc'] = tab_apprenant_client_rattachement_contact
|
||||
msg['Bcc'] = 'contact@mysy-training.com'
|
||||
msg['Subject'] = courrier_template_data['sujet']
|
||||
|
|
@ -1709,7 +1718,20 @@ def Cron_Send_Survey_TabIds(diction):
|
|||
|
||||
else:
|
||||
msg.attach(html_mime)
|
||||
msg['From'] = MYSY_GV.O365_SMTP_COUNT_From_User
|
||||
my_company_data = MYSY_GV.dbname['partnair_account'].find_one(
|
||||
{'recid': str(my_partner['recid']), 'is_partner_admin_account': '1', 'active': '1',
|
||||
'locked': '0'},
|
||||
{'_id': 1, 'nom': 1})
|
||||
|
||||
if (my_company_data and "nom" in my_company_data.keys() and my_company_data['nom']):
|
||||
company_name = my_company_data['nom']
|
||||
|
||||
#msg['From'] = MYSY_GV.O365_SMTP_COUNT_From_User
|
||||
if (company_name):
|
||||
msg['From'] = str(company_name) + " <" + str(MYSY_GV.O365_SMTP_COUNT_From_User) + ">"
|
||||
else:
|
||||
msg['From'] = str(MYSY_GV.O365_SMTP_COUNT_From_User)
|
||||
|
||||
msg['Bcc'] = 'contact@mysy-training.com'
|
||||
msg['Subject'] = str(subject)
|
||||
# msg['to'] = "billardman01@hotmail.com"
|
||||
|
|
@ -2465,7 +2487,20 @@ def Cron_Sent_Attestation_Stagiaire_By_Email(tab_files, Folder, diction):
|
|||
|
||||
else:
|
||||
msg.attach(html_mime)
|
||||
msg['From'] = MYSY_GV.O365_SMTP_COUNT_From_User
|
||||
my_company_data = MYSY_GV.dbname['partnair_account'].find_one(
|
||||
{'recid': str(my_partner['recid']), 'is_partner_admin_account': '1', 'active': '1',
|
||||
'locked': '0'},
|
||||
{'_id': 1, 'nom': 1})
|
||||
|
||||
if (my_company_data and "nom" in my_company_data.keys() and my_company_data['nom']):
|
||||
company_name = my_company_data['nom']
|
||||
|
||||
#msg['From'] = MYSY_GV.O365_SMTP_COUNT_From_User
|
||||
if (company_name):
|
||||
msg['From'] = str(company_name) + " <" + str(MYSY_GV.O365_SMTP_COUNT_From_User) + ">"
|
||||
else:
|
||||
msg['From'] = str(MYSY_GV.O365_SMTP_COUNT_From_User)
|
||||
|
||||
msg['Cc'] = tab_apprenant_client_rattachement_contact
|
||||
msg['Bcc'] = 'contact@mysy-training.com'
|
||||
msg['Subject'] = courrier_template_data['sujet']
|
||||
|
|
@ -2586,6 +2621,9 @@ def Cron_Qualiopi_Automatic_Traitement_Notification(diction):
|
|||
if (local_status is False):
|
||||
return local_status, local_retval
|
||||
|
||||
if ("company_data" in local_retval.keys() and "societe_nom" in local_retval['company_data'].keys()):
|
||||
company_name = local_retval['company_data']['societe_nom']
|
||||
|
||||
dictionnary_data = local_retval
|
||||
dictionnary_data['tab_message'] = diction['tab_message']
|
||||
|
||||
|
|
@ -2698,7 +2736,12 @@ def Cron_Qualiopi_Automatic_Traitement_Notification(diction):
|
|||
|
||||
else:
|
||||
msg.attach(html_mime)
|
||||
msg['From'] = MYSY_GV.O365_SMTP_COUNT_From_User
|
||||
#msg['From'] = MYSY_GV.O365_SMTP_COUNT_From_User
|
||||
if (company_name):
|
||||
msg['From'] = str(company_name) + " <" + str(MYSY_GV.O365_SMTP_COUNT_From_User) + ">"
|
||||
else:
|
||||
msg['From'] = str(MYSY_GV.O365_SMTP_COUNT_From_User)
|
||||
|
||||
msg['Bcc'] = 'contact@mysy-training.com'
|
||||
msg['Subject'] = sujetHtml
|
||||
|
||||
|
|
|
|||
59647
Log/log_file.log
|
|
@ -1337,8 +1337,15 @@ def GetActiveSessionFormation_List(diction):
|
|||
tmp_debut_inscritp = str(local_tmp['date_debut_inscription']).strip().split(" ")
|
||||
tmp_fin_inscritp = str(local_tmp['date_fin_inscription']).strip().split(" ")
|
||||
|
||||
debut_inscr = datetime.strptime(str(tmp_debut_inscritp[0]).strip(), '%d/%m/%Y')
|
||||
fin_inscr = datetime.strptime(str(tmp_fin_inscritp[0]).strip(), '%d/%m/%Y')
|
||||
debut_inscr = datetime.strptime("01/01/1999", '%d/%m/%Y')
|
||||
fin_inscr = datetime.strptime("01/01/1999", '%d/%m/%Y')
|
||||
|
||||
debut_inscr_work = str(tmp_debut_inscritp[0]).strip()
|
||||
fin_inscr_work = str(tmp_fin_inscritp[0]).strip()
|
||||
|
||||
if( mycommon.CheckisDate(debut_inscr_work) and mycommon.CheckisDate(fin_inscr_work) ):
|
||||
debut_inscr = datetime.strptime(str(tmp_debut_inscritp[0]).strip(), '%d/%m/%Y')
|
||||
fin_inscr = datetime.strptime(str(tmp_fin_inscritp[0]).strip(), '%d/%m/%Y')
|
||||
|
||||
#print(" #### date_debut_inscription = ", debut_inscr, " date_fin_inscription = ", fin_inscr, " NOW = ",datetime.now())
|
||||
if(debut_inscr <= datetime.now() and fin_inscr >= datetime.now()):
|
||||
|
|
@ -1519,11 +1526,22 @@ def GetActiveSession_Cities_And_Distance_Formation_List(diction):
|
|||
local_tmp = retval
|
||||
## Verification des conditions supplementaires :
|
||||
# en realité c'est parce que c'est chaud de le faire avec pymongo
|
||||
tmp_debut_inscritp = str(local_tmp['date_debut_inscription']).strip().split(" ")
|
||||
tmp_fin_inscritp = str(local_tmp['date_fin_inscription']).strip().split(" ")
|
||||
tmp_debut_inscritp = ""
|
||||
tmp_fin_inscritp = ""
|
||||
if( "date_debut_inscription" in local_tmp.keys() and local_tmp['date_debut_inscription']
|
||||
and "date_fin_inscription" in local_tmp.keys() and local_tmp['date_fin_inscription']):
|
||||
tmp_debut_inscritp = str(local_tmp['date_debut_inscription']).strip().split(" ")
|
||||
tmp_fin_inscritp = str(local_tmp['date_fin_inscription']).strip().split(" ")
|
||||
|
||||
local_status_tmp_debut_inscritp = mycommon.CheckisDate(str(tmp_debut_inscritp[0]))
|
||||
local_status_tmp_fin_inscritp = mycommon.CheckisDate(str(tmp_fin_inscritp[0]))
|
||||
if( tmp_debut_inscritp and tmp_fin_inscritp ):
|
||||
local_status_tmp_debut_inscritp = mycommon.CheckisDate(str(tmp_debut_inscritp[0]))
|
||||
local_status_tmp_fin_inscritp = mycommon.CheckisDate(str(tmp_fin_inscritp[0]))
|
||||
else:
|
||||
local_status_tmp_debut_inscritp = False
|
||||
local_status_tmp_fin_inscritp = False
|
||||
|
||||
debut_inscr = datetime.strptime("01/01/1999", '%d/%m/%Y')
|
||||
fin_inscr = datetime.strptime("01/01/1999", '%d/%m/%Y')
|
||||
|
||||
if( local_status_tmp_debut_inscritp and local_status_tmp_fin_inscritp ):
|
||||
debut_inscr = datetime.strptime(str(tmp_debut_inscritp[0]).strip(), '%d/%m/%Y')
|
||||
|
|
@ -8783,6 +8801,9 @@ def Sent_Convocation_Stagiaire_By_Email(tab_files, Folder, diction):
|
|||
if (local_status is False):
|
||||
return local_status, local_retval
|
||||
|
||||
if ("company_data" in local_retval.keys() and "societe_nom" in local_retval['company_data'].keys()):
|
||||
company_name = local_retval['company_data']['societe_nom']
|
||||
|
||||
convention_dictionnary_data = local_retval
|
||||
|
||||
body = {
|
||||
|
|
@ -8924,7 +8945,11 @@ def Sent_Convocation_Stagiaire_By_Email(tab_files, Folder, diction):
|
|||
|
||||
else:
|
||||
msg.attach(html_mime)
|
||||
msg['From'] = MYSY_GV.O365_SMTP_COUNT_From_User
|
||||
#msg['From'] = MYSY_GV.O365_SMTP_COUNT_From_User
|
||||
if (company_name):
|
||||
msg['From'] = str(company_name) + " <" + str(MYSY_GV.O365_SMTP_COUNT_From_User) + ">"
|
||||
else:
|
||||
msg['From'] = str(MYSY_GV.O365_SMTP_COUNT_From_User)
|
||||
msg['Cc'] = tab_apprenant_client_rattachement_contact
|
||||
msg['Bcc'] = 'contact@mysy-training.com'
|
||||
msg['Subject'] = courrier_template_data['sujet']
|
||||
|
|
@ -9388,6 +9413,9 @@ def Sent_Attestation_Stagiaire_By_Email(tab_files, Folder, diction):
|
|||
if (local_status is False):
|
||||
return local_status, local_retval
|
||||
|
||||
if ("company_data" in local_retval.keys() and "societe_nom" in local_retval['company_data'].keys()):
|
||||
company_name = local_retval['company_data']['societe_nom']
|
||||
|
||||
convention_dictionnary_data = local_retval
|
||||
convention_dictionnary_data['contenu_attestation'] = contenu_attestation
|
||||
|
||||
|
|
@ -9531,7 +9559,12 @@ def Sent_Attestation_Stagiaire_By_Email(tab_files, Folder, diction):
|
|||
|
||||
else:
|
||||
msg.attach(html_mime)
|
||||
msg['From'] = MYSY_GV.O365_SMTP_COUNT_From_User
|
||||
#msg['From'] = MYSY_GV.O365_SMTP_COUNT_From_User
|
||||
if (company_name):
|
||||
msg['From'] = str(company_name) + " <" + str(MYSY_GV.O365_SMTP_COUNT_From_User) + ">"
|
||||
else:
|
||||
msg['From'] = str(MYSY_GV.O365_SMTP_COUNT_From_User)
|
||||
|
||||
msg['Cc'] = tab_apprenant_client_rattachement_contact
|
||||
msg['Bcc'] = 'contact@mysy-training.com'
|
||||
msg['Subject'] = courrier_template_data['sujet']
|
||||
|
|
@ -10666,7 +10699,7 @@ def Invoice_Partner_From_Session( diction):
|
|||
|
||||
# Récuperation de la sequence de l'objet "partner_invoice_header" dans la collection : "mysy_sequence"
|
||||
retval_sequence_invoice = MYSY_GV.dbname['mysy_sequence'].find_one(
|
||||
{'partner_invoice_header': 'partner_order_header',
|
||||
{'related_mysy_object': 'partner_invoice_header',
|
||||
'valide': '1', 'partner_owner_recid': str(
|
||||
my_partner['recid'])})
|
||||
|
||||
|
|
@ -11043,6 +11076,9 @@ def Sent_Facture_Stagiaire_By_Email_By_Partner_client(tab_files_name_full_path,
|
|||
if (local_status is False):
|
||||
return local_status, local_retval
|
||||
|
||||
if ("company_data" in local_retval.keys() and "societe_nom" in local_retval['company_data'].keys()):
|
||||
company_name = local_retval['company_data']['societe_nom']
|
||||
|
||||
convention_dictionnary_data = local_retval
|
||||
|
||||
|
||||
|
|
@ -11198,7 +11234,12 @@ def Sent_Facture_Stagiaire_By_Email_By_Partner_client(tab_files_name_full_path,
|
|||
|
||||
else:
|
||||
msg.attach(html_mime)
|
||||
msg['From'] = MYSY_GV.O365_SMTP_COUNT_From_User
|
||||
#msg['From'] = MYSY_GV.O365_SMTP_COUNT_From_User
|
||||
if (company_name):
|
||||
msg['From'] = str(company_name) + " <" + str(MYSY_GV.O365_SMTP_COUNT_From_User) + ">"
|
||||
else:
|
||||
msg['From'] = str(MYSY_GV.O365_SMTP_COUNT_From_User)
|
||||
|
||||
msg['Bcc'] = 'contact@mysy-training.com'
|
||||
msg['Subject'] = courrier_template_data['sujet']
|
||||
# msg['to'] = "billardman01@hotmail.com"
|
||||
|
|
@ -13081,13 +13122,17 @@ def Invoice_Partner_From_Session_By_Inscription_Id( diction):
|
|||
partner_invoice_header_data['invoice_header_type'] = "facture"
|
||||
|
||||
# Récuperation de la sequence de l'objet "partner_invoice_header" dans la collection : "mysy_sequence"
|
||||
|
||||
|
||||
retval_sequence_invoice = MYSY_GV.dbname['mysy_sequence'].find_one(
|
||||
{'partner_invoice_header': 'partner_order_header',
|
||||
{'related_mysy_object': 'partner_invoice_header',
|
||||
'valide': '1', 'partner_owner_recid': str(
|
||||
my_partner['recid'])})
|
||||
|
||||
if (retval_sequence_invoice is None):
|
||||
# Il n'y pas de sequence pour le partenaire, on va aller chercher la sequence par defaut
|
||||
|
||||
|
||||
retval_sequence_invoice = MYSY_GV.dbname['mysy_sequence'].find_one(
|
||||
{'related_mysy_object': 'partner_invoice_header',
|
||||
'valide': '1', 'partner_owner_recid': 'default'})
|
||||
|
|
@ -13669,7 +13714,7 @@ def Invoice_Splited_Partner_From_Session_By_Inscription_Id( diction):
|
|||
|
||||
# Récuperation de la sequence de l'objet "partner_invoice_header" dans la collection : "mysy_sequence"
|
||||
retval_sequence_invoice = MYSY_GV.dbname['mysy_sequence'].find_one(
|
||||
{'partner_invoice_header': 'partner_order_header',
|
||||
{'related_mysy_object': 'partner_invoice_header',
|
||||
'valide': '1', 'partner_owner_recid': str(
|
||||
my_partner['recid'])})
|
||||
|
||||
|
|
@ -14922,6 +14967,9 @@ def Send_Email_request_presinscription_data_validation(diction):
|
|||
local_status, local_retval = mycommon.Get_Dictionnary_data_For_Template(new_diction)
|
||||
convention_dictionnary_data = local_retval
|
||||
|
||||
if ("company_data" in local_retval.keys() and "societe_nom" in local_retval['company_data'].keys()):
|
||||
company_name = local_retval['company_data']['societe_nom']
|
||||
|
||||
convention_dictionnary_data['attendeelist_url'] = MYSY_GV.CLIENT_URL_BASE+"UpadateAttendeeList/"+str(diction['client_id'])+"/"+str(diction['session_id'])+"/"+str(diction['partner_recid'])+"/"
|
||||
|
||||
body = {
|
||||
|
|
@ -14967,7 +15015,15 @@ def Send_Email_request_presinscription_data_validation(diction):
|
|||
return local_stpm_status, partner_own_smtp_value
|
||||
|
||||
msg.attach(html_mime)
|
||||
msg['From'] = partner_SMTP_COUNT_From_User
|
||||
if (str(partner_own_smtp_value) == "1"):
|
||||
msg['From'] = partner_SMTP_COUNT_From_User
|
||||
else:
|
||||
if (company_name):
|
||||
msg['From'] = str(company_name) + " <" + str(partner_SMTP_COUNT_From_User) + ">"
|
||||
else:
|
||||
msg['From'] = str(partner_SMTP_COUNT_From_User)
|
||||
|
||||
|
||||
msg['Bcc'] = 'contact@mysy-training.com'
|
||||
msg['Subject'] = sujetHtml
|
||||
# msg['to'] = "billardman01@hotmail.com"
|
||||
|
|
|
|||
|
|
@ -1662,9 +1662,9 @@ def Update_Session_Sequence(diction):
|
|||
return False, " Impossible de mettre à jour la séquence "
|
||||
|
||||
|
||||
|
||||
"""
|
||||
Recuperer la liste des sequence d'une formation
|
||||
Cette fonction permet de recuperer le nombre de sequence de formation
|
||||
d'une session
|
||||
"""
|
||||
def Get_Session_Sequence_List(diction):
|
||||
try:
|
||||
|
|
@ -1767,6 +1767,66 @@ def Get_Session_Sequence_List(diction):
|
|||
return False, " Impossible de récupérer la liste des séquences de la session "
|
||||
|
||||
|
||||
|
||||
|
||||
"""
|
||||
Recuperer la liste des sequence d'une formation
|
||||
"""
|
||||
def Get_Session_Nb_Sequence(diction):
|
||||
try:
|
||||
diction = mycommon.strip_dictionary(diction)
|
||||
|
||||
"""
|
||||
Verification des input acceptés
|
||||
"""
|
||||
field_list = ['token', 'session_id']
|
||||
|
||||
incom_keys = diction.keys()
|
||||
for val in incom_keys:
|
||||
if val not in field_list and val.startswith('my_') is False:
|
||||
mycommon.myprint(str(
|
||||
inspect.stack()[0][3]) + " Le champ '" + val + "' n'existe pas")
|
||||
return False, " Les informations fournies sont incorrectes",
|
||||
|
||||
"""
|
||||
Verification des champs obligatoires
|
||||
"""
|
||||
field_list_obligatoire = ['token', 'session_id']
|
||||
for val in field_list_obligatoire:
|
||||
if val not in diction:
|
||||
mycommon.myprint(
|
||||
str(inspect.stack()[0][3]) + " - La valeur '" + val + "' n'est pas presente dans la liste des arguments ")
|
||||
return False, " Les informations fournies sont incorrectes",
|
||||
|
||||
"""
|
||||
Verification de l'identité et autorisation de l'entité qui
|
||||
appelle cette API
|
||||
"""
|
||||
token = ""
|
||||
if ("token" in diction.keys()):
|
||||
if diction['token']:
|
||||
token = diction['token']
|
||||
|
||||
local_status, my_partner = mycommon.Check_Connexion_And_Return_Partner_Data(diction)
|
||||
if (local_status is not True):
|
||||
return local_status, my_partner
|
||||
|
||||
RetObject = []
|
||||
val_tmp = 0
|
||||
nb_sequence = MYSY_GV.dbname['session_formation_sequence'].count_documents({'session_id':str(diction['session_id']),
|
||||
'partner_owner_recid':str(my_partner['recid']), 'valide':'1', 'locked':'0'})
|
||||
|
||||
|
||||
RetObject.append(mycommon.JSONEncoder().encode(str(nb_sequence)))
|
||||
|
||||
return True, nb_sequence
|
||||
|
||||
except Exception as e:
|
||||
exc_type, exc_obj, exc_tb = sys.exc_info()
|
||||
mycommon.myprint(str(inspect.stack()[0][3]) + " -" + str(e) + " - Line : " + str(exc_tb.tb_lineno))
|
||||
return False, " Impossible de récupérer le nombre de séquence de la session "
|
||||
|
||||
|
||||
"""
|
||||
Recuperer les données d'une sequence donnée
|
||||
"""
|
||||
|
|
@ -3860,7 +3920,8 @@ def Decale_Session_Sequence_X_days(diction):
|
|||
"""
|
||||
Verification des input acceptés
|
||||
"""
|
||||
field_list = ['token', 'tab_session_ids', 'nb_jour_decalage']
|
||||
field_list = ['token', 'tab_session_ids', 'nb_jour_decalage',
|
||||
'decalage_raison', 'decalage_comment']
|
||||
|
||||
incom_keys = diction.keys()
|
||||
for val in incom_keys:
|
||||
|
|
@ -3958,164 +4019,376 @@ def Decale_Session_Sequence_X_days(diction):
|
|||
nb_sequence = 0
|
||||
for local_session_id in tab_session_ids :
|
||||
|
||||
# Aller chercher les sequences de la session à decaller
|
||||
for local_sequence in MYSY_GV.dbname['session_formation_sequence'].find({'session_id':str(local_session_id),
|
||||
'valide': '1',
|
||||
'locked':'0',
|
||||
'partner_owner_recid': str(my_partner['recid'])
|
||||
}).sort([("_id", pymongo.ASCENDING), ]):
|
||||
# On commence par mettre à jour les dates de la session
|
||||
local_session_data = MYSY_GV.dbname['session_formation'].find_one({'_id':ObjectId(str(local_session_id)),
|
||||
'valide': '1',
|
||||
'partner_owner_recid': str(
|
||||
my_partner['recid'])
|
||||
})
|
||||
|
||||
current_start = datetime.strptime(str(local_sequence['sequence_start'])[0:16], '%d/%m/%Y %H:%M')
|
||||
current_end = datetime.strptime(str(local_sequence['sequence_end'])[0:16], '%d/%m/%Y %H:%M')
|
||||
|
||||
nb_jour_decalage_done = 0
|
||||
nb_jour_decalage_integer = local_val
|
||||
if( local_session_data ):
|
||||
|
||||
session_old_start_date = datetime.strptime(str(local_session_data['date_debut'])[0:10], '%d/%m/%Y')
|
||||
session_old_start_date_for_comment = str(local_session_data['date_debut'])[0:10]
|
||||
session_old_start_date_work = session_old_start_date
|
||||
session_new_start_date = session_old_start_date + timedelta(days=nb_jour_decalage_integer)
|
||||
session_new_start_date_for_comment = str(session_new_start_date.strftime("%d/%m/%Y"))
|
||||
|
||||
# Calcule de la nouvelle date de fin de session
|
||||
if( nb_jour_decalage_integer > 0 ):
|
||||
while( nb_jour_decalage_done <= nb_jour_decalage_integer):
|
||||
new_current_start = current_start + timedelta(days=nb_jour_decalage_done)
|
||||
new_current_end = current_end + timedelta(days=nb_jour_decalage_done)
|
||||
nb_jour_ouvre_from_debut_session = 0
|
||||
while( session_old_start_date_work < session_new_start_date ):
|
||||
|
||||
|
||||
date_jour = str(new_current_start.strftime("%Y-%m-%d"))
|
||||
jour_name = new_current_start.strftime("%A")
|
||||
|
||||
# Recuperation des sequences associées à jour_name
|
||||
is_jour_name_off = jounree_modele_data[jour_name]["is_off_day"]
|
||||
|
||||
if (date_jour not in jounree_modele_data['date_off'] and is_jour_name_off != "1"):
|
||||
nb_jour_decalage_done = nb_jour_decalage_done + 1
|
||||
else:
|
||||
#print(" ### "+str(date_jour)+ " -- "+str(jour_name)+" EST UN JOUR OFF, NO INCREMENT ")
|
||||
nb_jour_decalage_integer = nb_jour_decalage_integer + 1
|
||||
nb_jour_decalage_done = nb_jour_decalage_done + 1
|
||||
|
||||
#print(" ### nb_jour_decalage_integer passe de "+str(nb_jour_decalage_integer-1)+" à "+str(nb_jour_decalage_integer))
|
||||
|
||||
print(" ### "+str(current_start)+ " ==( "+str(nb_jour_decalage_integer)+"J )=== >> "+str(new_current_start))
|
||||
new_data = {}
|
||||
new_data['sequence_start'] = str(new_current_start.strftime("%d/%m/%Y %H:%M"))
|
||||
new_data['sequence_end'] = str(new_current_end.strftime("%d/%m/%Y %H:%M"))
|
||||
new_data['date_update'] = datetime.now().strftime("%d/%m/%Y %H:%M:%S")
|
||||
new_data['update_by'] = str(my_partner['recid'])
|
||||
|
||||
#print(" ### new_data = ", new_data)
|
||||
|
||||
MYSY_GV.dbname['session_formation_sequence'].find_one_and_update(
|
||||
{'_id': ObjectId(str(local_sequence['_id'])),
|
||||
'partner_owner_recid': str(my_partner['recid'])},
|
||||
{'$set': new_data})
|
||||
|
||||
"""
|
||||
Après la mise à jour de la sequence,
|
||||
il faut mettre à jour le planning des ressources associée
|
||||
"""
|
||||
for local_sequence_ressource_affectation in MYSY_GV.dbname[
|
||||
'session_formation_sequence_affectation'].find({
|
||||
'sequence_session_id': str(local_sequence['_id']),
|
||||
'valide': '1',
|
||||
'locked': '0',
|
||||
'partner_owner_recid': str(my_partner['recid'])
|
||||
}):
|
||||
# Aller cherche l'agenda de la ressource
|
||||
for local_ressource_agenda in MYSY_GV.dbname['agenda'].find({
|
||||
'session_formation_sequence_affectation_id': str(
|
||||
local_sequence_ressource_affectation[
|
||||
'_id']),
|
||||
'valide': '1',
|
||||
'locked': '0',
|
||||
'partner_owner_recid': str(
|
||||
my_partner['recid'])
|
||||
}):
|
||||
new_data_agenda = {}
|
||||
new_data_agenda['event_start'] = str(new_current_start.strftime("%Y-%m-%dT%H:%M"))
|
||||
new_data_agenda['event_end'] = str(new_current_end.strftime("%Y-%m-%dT%H:%M"))
|
||||
new_data_agenda['date_update'] = datetime.now().strftime("%d/%m/%Y %H:%M:%S")
|
||||
new_data_agenda['update_by'] = str(my_partner['recid'])
|
||||
|
||||
print(" ### new_data_agenda = ", new_data_agenda)
|
||||
print(" ### QRY = ", {'_id': ObjectId(str(local_ressource_agenda['_id'])),
|
||||
'partner_owner_recid': str(my_partner['recid'])})
|
||||
|
||||
MYSY_GV.dbname['agenda'].find_one_and_update(
|
||||
{'_id': ObjectId(str(local_ressource_agenda['_id'])),
|
||||
'partner_owner_recid': str(my_partner['recid'])},
|
||||
{'$set': new_data_agenda})
|
||||
|
||||
|
||||
|
||||
elif (nb_jour_decalage_integer < 0):
|
||||
while (nb_jour_decalage_done >= nb_jour_decalage_integer):
|
||||
new_current_start = current_start + timedelta(days=nb_jour_decalage_done)
|
||||
new_current_end = current_end + timedelta(days=nb_jour_decalage_done)
|
||||
|
||||
#print(" ### new_current_start = ", new_current_start)
|
||||
|
||||
date_jour = str(new_current_start.strftime("%Y-%m-%d"))
|
||||
jour_name = new_current_start.strftime("%A")
|
||||
date_jour = str(session_old_start_date_work.strftime("%Y-%m-%d"))
|
||||
jour_name = session_old_start_date_work.strftime("%A")
|
||||
|
||||
# Recuperation des sequences associées à jour_name
|
||||
is_jour_name_off = jounree_modele_data[jour_name]["is_off_day"]
|
||||
|
||||
if (date_jour not in jounree_modele_data['date_off'] and is_jour_name_off != "1"):
|
||||
nb_jour_decalage_done = nb_jour_decalage_done - 1
|
||||
else:
|
||||
print(" ### "+str(date_jour)+ " -- "+str(jour_name)+" EST UN JOUR OFF, NO INCREMENT ")
|
||||
nb_jour_decalage_integer = nb_jour_decalage_integer - 1
|
||||
nb_jour_decalage_done = nb_jour_decalage_done - 1
|
||||
nb_jour_ouvre_from_debut_session = nb_jour_ouvre_from_debut_session + 1
|
||||
|
||||
#print(" ### nb_jour_decalage_integer passe de "+str(nb_jour_decalage_integer+1)+" à "+str(nb_jour_decalage_integer))
|
||||
session_old_start_date_work = session_old_start_date_work + timedelta(days=1)
|
||||
|
||||
print(" ### " + str(current_start) + " ==( " + str(nb_jour_decalage_integer) + "J )=== >> " + str(new_current_start))
|
||||
|
||||
session_old_end_date = datetime.strptime(str(local_session_data['date_fin'])[0:10], '%d/%m/%Y')
|
||||
|
||||
"""
|
||||
Calculer le nombre de jour ouvré entre l'ancienne date debut session et la nouvelle date de début de session.
|
||||
|
||||
Car lors qu'on va caculer la nouvelle date de fin de session, on devra appliquer le decallage par rapport au nombre de
|
||||
jour ouvrée
|
||||
"""
|
||||
declage_fin = 0
|
||||
|
||||
local_session_date_fin = session_old_end_date
|
||||
while (declage_fin < nb_jour_ouvre_from_debut_session):
|
||||
|
||||
|
||||
date_jour = str(local_session_date_fin.strftime("%Y-%m-%d"))
|
||||
jour_name = local_session_date_fin.strftime("%A")
|
||||
|
||||
# Recuperation des sequences associées à jour_name
|
||||
is_jour_name_off = jounree_modele_data[jour_name]["is_off_day"]
|
||||
|
||||
if (date_jour not in jounree_modele_data['date_off'] and is_jour_name_off != "1"):
|
||||
declage_fin = declage_fin + 1
|
||||
|
||||
|
||||
local_session_date_fin = local_session_date_fin + timedelta(days=1)
|
||||
|
||||
|
||||
#print(" ### date fin session apres calcul = ", local_session_date_fin)
|
||||
|
||||
elif (nb_jour_decalage_integer < 0):
|
||||
nb_jour_ouvre_from_debut_session = 0
|
||||
while (session_old_start_date_work > session_new_start_date):
|
||||
|
||||
date_jour = str(session_old_start_date_work.strftime("%Y-%m-%d"))
|
||||
jour_name = session_old_start_date_work.strftime("%A")
|
||||
|
||||
# Recuperation des sequences associées à jour_name
|
||||
is_jour_name_off = jounree_modele_data[jour_name]["is_off_day"]
|
||||
|
||||
if (date_jour not in jounree_modele_data['date_off'] and is_jour_name_off != "1"):
|
||||
nb_jour_ouvre_from_debut_session = nb_jour_ouvre_from_debut_session - 1
|
||||
|
||||
session_old_start_date_work = session_old_start_date_work + timedelta(days=-1)
|
||||
|
||||
print(" ### NB jours ouvrée from debut session = ", nb_jour_ouvre_from_debut_session)
|
||||
|
||||
session_old_end_date = datetime.strptime(str(local_session_data['date_fin'])[0:10], '%d/%m/%Y')
|
||||
|
||||
|
||||
"""
|
||||
Calculer le nombre de jour ouvré entre l'ancienne date debut session et la nouvelle date de début de session.
|
||||
|
||||
Car lors qu'on va caculer la nouvelle date de fin de session, on devra appliquer le decallage par rapport au nombre de
|
||||
jour ouvrée
|
||||
"""
|
||||
declage_fin = 0
|
||||
local_session_date_fin = session_old_end_date
|
||||
|
||||
|
||||
while (declage_fin > nb_jour_ouvre_from_debut_session):
|
||||
local_session_date_fin = local_session_date_fin + timedelta(days=-1)
|
||||
date_jour = str(local_session_date_fin.strftime("%Y-%m-%d"))
|
||||
jour_name = local_session_date_fin.strftime("%A")
|
||||
|
||||
# Recuperation des sequences associées à jour_name
|
||||
is_jour_name_off = jounree_modele_data[jour_name]["is_off_day"]
|
||||
|
||||
if (date_jour not in jounree_modele_data['date_off'] and is_jour_name_off != "1"):
|
||||
declage_fin = declage_fin - 1
|
||||
|
||||
|
||||
print(" ### date fin session apres calcul = ", local_session_date_fin)
|
||||
|
||||
#"""""""""""""""""""""""
|
||||
session_new_end_date = local_session_date_fin
|
||||
|
||||
"""print(" ## session_old_end_date = ", session_old_end_date)
|
||||
print(" ## nb_jour_decalage_integer = ", nb_jour_decalage_integer)
|
||||
print(" ## session_new_end_date = ", session_new_end_date)"""
|
||||
|
||||
|
||||
|
||||
|
||||
# Aller chercher les sequences de la session à decaller
|
||||
for local_sequence in MYSY_GV.dbname['session_formation_sequence'].find({'session_id':str(local_session_id),
|
||||
'valide': '1',
|
||||
'locked':'0',
|
||||
'partner_owner_recid': str(my_partner['recid'])
|
||||
}).sort([("_id", pymongo.ASCENDING), ]):
|
||||
|
||||
current_start = datetime.strptime(str(local_sequence['sequence_start'])[0:16], '%d/%m/%Y %H:%M')
|
||||
current_end = datetime.strptime(str(local_sequence['sequence_end'])[0:16], '%d/%m/%Y %H:%M')
|
||||
|
||||
nb_jour_decalage_done = 0
|
||||
nb_jour_decalage_integer = local_val
|
||||
|
||||
if( nb_jour_decalage_integer > 0 ):
|
||||
|
||||
declage_fin = 0
|
||||
sequence_old_start_date_work = current_start
|
||||
sequence_old_end_date_work = current_end
|
||||
#print(" avvvv nb_jour_ouvre_from_debut_session = ", nb_jour_ouvre_from_debut_session)
|
||||
while (declage_fin < nb_jour_ouvre_from_debut_session):
|
||||
#print(" ## analyse du jour ", sequence_old_start_date_work)
|
||||
date_jour = str(sequence_old_start_date_work.strftime("%Y-%m-%d"))
|
||||
jour_name = sequence_old_start_date_work.strftime("%A")
|
||||
|
||||
# Recuperation des sequences associées à jour_name
|
||||
is_jour_name_off = jounree_modele_data[jour_name]["is_off_day"]
|
||||
|
||||
if (date_jour not in jounree_modele_data['date_off'] and is_jour_name_off != "1"):
|
||||
declage_fin = declage_fin + 1
|
||||
|
||||
sequence_old_start_date_work = sequence_old_start_date_work + timedelta(days=1)
|
||||
sequence_old_end_date_work = sequence_old_end_date_work + timedelta(days=1)
|
||||
|
||||
"""
|
||||
A la sortie du decalage gérer le cas ou ce jour est off ou ferier
|
||||
"""
|
||||
cpt = 0
|
||||
date_jour = str(sequence_old_start_date_work.strftime("%Y-%m-%d"))
|
||||
jour_name = sequence_old_start_date_work.strftime("%A")
|
||||
is_jour_name_off = jounree_modele_data[jour_name]["is_off_day"]
|
||||
while( date_jour in jounree_modele_data['date_off'] or is_jour_name_off == "1"):
|
||||
#print(" ### A la sortie on est tombé sur un jour off : ", sequence_old_start_date_work)
|
||||
sequence_old_start_date_work = sequence_old_start_date_work + timedelta(days=1)
|
||||
sequence_old_end_date_work = sequence_old_end_date_work + timedelta(days=1)
|
||||
date_jour = str(sequence_old_start_date_work.strftime("%Y-%m-%d"))
|
||||
|
||||
jour_name = sequence_old_start_date_work.strftime("%A")
|
||||
# Recuperation des sequences associées à jour_name
|
||||
is_jour_name_off = jounree_modele_data[jour_name]["is_off_day"]
|
||||
|
||||
|
||||
new_current_start = sequence_old_start_date_work
|
||||
new_current_end = sequence_old_end_date_work
|
||||
#print(" ### new_current_start = ", new_current_start)
|
||||
#print(" ### new_current_end = ", new_current_end)
|
||||
|
||||
|
||||
|
||||
#print(" ### current_start = "+str(current_start)+ " ==( "+str(nb_jour_decalage_integer)+"J )=== >> "+str(new_current_start))
|
||||
new_data = {}
|
||||
new_data['sequence_start'] = str(new_current_start.strftime("%d/%m/%Y %H:%M"))
|
||||
new_data['sequence_end'] = str(new_current_end.strftime("%d/%m/%Y %H:%M"))
|
||||
new_data['date_update'] = datetime.now().strftime("%d/%m/%Y %H:%M:%S")
|
||||
new_data['update_by'] = str(my_partner['recid'])
|
||||
|
||||
#print(" ### new_data = ", new_data)
|
||||
|
||||
MYSY_GV.dbname['session_formation_sequence'].find_one_and_update(
|
||||
{'_id': ObjectId(str(local_sequence['_id'])),
|
||||
'partner_owner_recid': str(my_partner['recid'])},
|
||||
{'$set': new_data})
|
||||
|
||||
|
||||
|
||||
|
||||
"""
|
||||
Après la mise à jour de la sequence,
|
||||
il faut mettre à jour le planning des ressources associée
|
||||
"""
|
||||
for local_sequence_ressource_affectation in MYSY_GV.dbname[
|
||||
'session_formation_sequence_affectation'].find({
|
||||
'sequence_session_id': str(local_sequence['_id']),
|
||||
'valide': '1',
|
||||
'locked': '0',
|
||||
'partner_owner_recid': str(my_partner['recid'])
|
||||
}):
|
||||
# Aller cherche l'agenda de la ressource
|
||||
for local_ressource_agenda in MYSY_GV.dbname['agenda'].find({
|
||||
'session_formation_sequence_affectation_id': str(
|
||||
local_sequence_ressource_affectation[
|
||||
'_id']),
|
||||
'valide': '1',
|
||||
'locked': '0',
|
||||
'partner_owner_recid': str(
|
||||
my_partner['recid'])
|
||||
}):
|
||||
new_data_agenda = {}
|
||||
new_data_agenda['event_start'] = str(new_current_start.strftime("%Y-%m-%dT%H:%M"))
|
||||
new_data_agenda['event_end'] = str(new_current_end.strftime("%Y-%m-%dT%H:%M"))
|
||||
new_data_agenda['date_update'] = datetime.now().strftime("%d/%m/%Y %H:%M:%S")
|
||||
new_data_agenda['update_by'] = str(my_partner['recid'])
|
||||
|
||||
|
||||
|
||||
MYSY_GV.dbname['agenda'].find_one_and_update(
|
||||
{'_id': ObjectId(str(local_ressource_agenda['_id'])),
|
||||
'partner_owner_recid': str(my_partner['recid'])},
|
||||
{'$set': new_data_agenda})
|
||||
|
||||
|
||||
|
||||
elif (nb_jour_decalage_integer < 0):
|
||||
|
||||
declage_fin = 0
|
||||
sequence_old_start_date_work = current_start
|
||||
sequence_old_end_date_work = current_end
|
||||
#print(" avvvv MINUS 0 nb_jour_ouvre_from_debut_session = ", nb_jour_ouvre_from_debut_session)
|
||||
while (declage_fin > nb_jour_ouvre_from_debut_session):
|
||||
#print(" ## analyse du jour ", sequence_old_start_date_work)
|
||||
date_jour = str(sequence_old_start_date_work.strftime("%Y-%m-%d"))
|
||||
jour_name = sequence_old_start_date_work.strftime("%A")
|
||||
|
||||
# Recuperation des sequences associées à jour_name
|
||||
is_jour_name_off = jounree_modele_data[jour_name]["is_off_day"]
|
||||
|
||||
if (date_jour not in jounree_modele_data['date_off'] and is_jour_name_off != "1"):
|
||||
declage_fin = declage_fin - 1
|
||||
|
||||
sequence_old_start_date_work = sequence_old_start_date_work + timedelta(days=-1)
|
||||
sequence_old_end_date_work = sequence_old_end_date_work + timedelta(days=-1)
|
||||
|
||||
"""
|
||||
A la sortie du decalage gérer le cas ou ce jour est off ou ferier
|
||||
"""
|
||||
cpt = 0
|
||||
date_jour = str(sequence_old_start_date_work.strftime("%Y-%m-%d"))
|
||||
jour_name = sequence_old_start_date_work.strftime("%A")
|
||||
is_jour_name_off = jounree_modele_data[jour_name]["is_off_day"]
|
||||
while (date_jour in jounree_modele_data['date_off'] or is_jour_name_off == "1"):
|
||||
#print(" ### MINUS A la sortie on est tombé sur un jour off : ", sequence_old_start_date_work)
|
||||
sequence_old_start_date_work = sequence_old_start_date_work + timedelta(days=-1)
|
||||
sequence_old_end_date_work = sequence_old_end_date_work + timedelta(days=-1)
|
||||
date_jour = str(sequence_old_start_date_work.strftime("%Y-%m-%d"))
|
||||
|
||||
jour_name = sequence_old_start_date_work.strftime("%A")
|
||||
# Recuperation des sequences associées à jour_name
|
||||
is_jour_name_off = jounree_modele_data[jour_name]["is_off_day"]
|
||||
|
||||
new_current_start = sequence_old_start_date_work
|
||||
new_current_end = sequence_old_end_date_work
|
||||
#print(" ### new_current_start = ", new_current_start)
|
||||
#print(" ### new_current_end = ", new_current_end)
|
||||
|
||||
#print(" ### " + str(current_start) + " ==( " + str(nb_jour_decalage_integer) + "J )=== >> " + str(new_current_start))
|
||||
|
||||
new_data = {}
|
||||
new_data['sequence_start'] = str(new_current_start.strftime("%d/%m/%Y %H:%M"))
|
||||
new_data['sequence_end'] = str(new_current_end.strftime("%d/%m/%Y %H:%M"))
|
||||
new_data['date_update'] = datetime.now().strftime("%d/%m/%Y %H:%M:%S")
|
||||
new_data['update_by'] = str(my_partner['recid'])
|
||||
|
||||
#print(" ### new_data MINUS = ", new_data)
|
||||
|
||||
MYSY_GV.dbname['session_formation_sequence'].find_one_and_update(
|
||||
{'_id': ObjectId(str(local_sequence['_id'])),
|
||||
'partner_owner_recid': str(my_partner['recid'])},
|
||||
{'$set': new_data})
|
||||
|
||||
|
||||
"""
|
||||
Après la mise à jour de la sequence,
|
||||
il faut mettre à jour le planning des ressources associée
|
||||
"""
|
||||
for local_sequence_ressource_affectation in MYSY_GV.dbname['session_formation_sequence_affectation'].find({
|
||||
'sequence_session_id': str(local_sequence['_id']),
|
||||
'valide': '1',
|
||||
'locked': '0',
|
||||
'partner_owner_recid': str(my_partner['recid'])
|
||||
}):
|
||||
# Aller cherche l'agenda de la ressource
|
||||
for local_ressource_agenda in MYSY_GV.dbname['agenda'].find({'session_formation_sequence_affectation_id':str(local_sequence_ressource_affectation['_id']),
|
||||
'valide': '1',
|
||||
'locked': '0',
|
||||
'partner_owner_recid': str(
|
||||
my_partner['recid'])
|
||||
}):
|
||||
new_data_agenda = {}
|
||||
new_data_agenda['event_start'] = str(new_current_start.strftime("%Y-%m-%dT%H:%M"))
|
||||
new_data_agenda['event_end'] = str(new_current_end.strftime("%Y-%m-%dT%H:%M"))
|
||||
new_data_agenda['date_update'] = datetime.now().strftime("%d/%m/%Y %H:%M:%S")
|
||||
new_data_agenda['update_by'] = str(my_partner['recid'])
|
||||
|
||||
|
||||
MYSY_GV.dbname['agenda'].find_one_and_update(
|
||||
{'_id': ObjectId(str(local_ressource_agenda['_id'])),
|
||||
'partner_owner_recid': str(my_partner['recid'])},
|
||||
{'$set': new_data_agenda})
|
||||
|
||||
|
||||
|
||||
if( nb_jour_decalage != 0 ):
|
||||
|
||||
# Mettre à jour les date de debut et de fin de la session
|
||||
new_data = {}
|
||||
new_data['sequence_start'] = str(new_current_start.strftime("%d/%m/%Y %H:%M"))
|
||||
new_data['sequence_end'] = str(new_current_end.strftime("%d/%m/%Y %H:%M"))
|
||||
new_data['date_update'] = datetime.now().strftime("%d/%m/%Y %H:%M:%S")
|
||||
new_data['date_debut'] = str(session_new_start_date.strftime("%d/%m/%Y"))
|
||||
new_data['date_fin'] = str(session_new_end_date.strftime("%d/%m/%Y"))
|
||||
new_data['date_update'] = datetime.now()
|
||||
new_data['update_by'] = str(my_partner['recid'])
|
||||
|
||||
print(" ### new_data = ", new_data)
|
||||
|
||||
MYSY_GV.dbname['session_formation_sequence'].find_one_and_update(
|
||||
{'_id': ObjectId(str(local_sequence['_id'])),
|
||||
|
||||
ret_val = MYSY_GV.dbname['session_formation'].find_one_and_update(
|
||||
{'_id': ObjectId(str(local_session_id)), 'valide': '1',
|
||||
'partner_owner_recid': str(my_partner['recid'])},
|
||||
{'$set': new_data})
|
||||
|
||||
"""
|
||||
Après la mise à jour de la sequence,
|
||||
il faut mettre à jour le planning des ressources associée
|
||||
"""
|
||||
for local_sequence_ressource_affectation in MYSY_GV.dbname['session_formation_sequence_affectation'].find({
|
||||
'sequence_session_id': str(local_sequence['_id']),
|
||||
'valide': '1',
|
||||
'locked': '0',
|
||||
'partner_owner_recid': str(my_partner['recid'])
|
||||
}):
|
||||
# Aller cherche l'agenda de la ressource
|
||||
for local_ressource_agenda in MYSY_GV.dbname['agenda'].find({'session_formation_sequence_affectation_id':str(local_sequence_ressource_affectation['_id']),
|
||||
'valide': '1',
|
||||
'locked': '0',
|
||||
'partner_owner_recid': str(
|
||||
my_partner['recid'])
|
||||
}):
|
||||
new_data_agenda = {}
|
||||
new_data_agenda['event_start'] = str(new_current_start.strftime("%Y-%m-%dT%H:%M"))
|
||||
new_data_agenda['event_end'] = str(new_current_end.strftime("%Y-%m-%dT%H:%M"))
|
||||
new_data_agenda['date_update'] = datetime.now().strftime("%d/%m/%Y %H:%M:%S")
|
||||
new_data_agenda['update_by'] = str(my_partner['recid'])
|
||||
|
||||
print(" ### new_data_agenda = ", new_data_agenda)
|
||||
print(" ### QRY = ", {'_id': ObjectId(str(local_ressource_agenda['_id'])),
|
||||
'partner_owner_recid': str(my_partner['recid'])})
|
||||
|
||||
MYSY_GV.dbname['agenda'].find_one_and_update(
|
||||
{'_id': ObjectId(str(local_ressource_agenda['_id'])),
|
||||
'partner_owner_recid': str(my_partner['recid'])},
|
||||
{'$set': new_data_agenda})
|
||||
{"$set": new_data},
|
||||
upsert=False,
|
||||
return_document=ReturnDocument.AFTER
|
||||
)
|
||||
|
||||
|
||||
return True, str(nb_sequence)+" mise(s) à jour"
|
||||
|
||||
# Logguer l'action de decalage dans l'historique de la session
|
||||
# pour la collection 'myclass'
|
||||
now = str(datetime.now().strftime("%d/%m/%Y %H:%M:%S"))
|
||||
# print(" ####### laaaa diction = ", diction)
|
||||
|
||||
description_text = "Decalage de la session du "+str(session_old_start_date_for_comment)+" au "+str(session_new_start_date_for_comment)
|
||||
if( "decalage_raison" in diction.keys() and diction['decalage_raison']):
|
||||
description_text = description_text + " Raison : "+str(diction['decalage_raison'])
|
||||
|
||||
if ("decalage_comment" in diction.keys() and diction['decalage_comment']):
|
||||
description_text = description_text + ". " + str(diction['decalage_comment'])[0:255]
|
||||
|
||||
print(" ### description_text = ", description_text)
|
||||
|
||||
history_event_dict = {}
|
||||
history_event_dict['token'] = str(diction['token'])
|
||||
history_event_dict['related_collection'] = "session_formation"
|
||||
history_event_dict['related_collection_recid'] = str(local_session_id)
|
||||
history_event_dict['action_date'] = str(now)
|
||||
|
||||
history_event_dict['action_description'] = description_text
|
||||
local_status, local_retval = mycommon.Collection_Historique.Add_Historique_Event(history_event_dict)
|
||||
if (local_status is False):
|
||||
mycommon.myprint(
|
||||
" WARNING : Impossible de logguer l'historique pour l'évènement : " + str(history_event_dict))
|
||||
|
||||
|
||||
return True, " Décalage effectué "
|
||||
|
||||
except Exception as e:
|
||||
exc_type, exc_obj, exc_tb = sys.exc_info()
|
||||
mycommon.myprint(str(inspect.stack()[0][3]) + " -" + str(e) + " - Line : " + str(exc_tb.tb_lineno))
|
||||
return False, " Impossible dedécaler les séquences "
|
||||
return False, " Impossible de décaler les dates. "
|
||||
|
||||
|
||||
|
||||
|
|
|
|||
|
|
@ -42,17 +42,19 @@
|
|||
|
||||
<div
|
||||
style="padding:12px 0px;text-align:left;font-family:Georgia, 'Times New Roman', Times, serif;color:#454349;font-size:0.9rem;width:100%;float:right;text-align:left;">
|
||||
Origine : {{json_data.orign_order}}
|
||||
Origine : {{json_data.orign_order}} <br/>
|
||||
<b>Période : {{json_data.periode}} </b>
|
||||
</div>
|
||||
|
||||
|
||||
<div
|
||||
style="padding:12px 0px;text-align:left;font-family:Georgia, 'Times New Roman', Times, serif;color:#454349;font-size:0.9rem;width:100%;float:right;text-align:left;">
|
||||
<table style="width:100%;border: none;padding: 0px;">
|
||||
<tr style="border: 1px solid black;padding: 0px; padding-top:5px;">
|
||||
<th style="text-align:center;border: 1px solid black;">Description</th>
|
||||
<th style="text-align:center;border: 1px solid black;">Quantité</th>
|
||||
<th style="text-align:center;border: 1px solid black;">Prix unitaire</th>
|
||||
<th style="text-align:center;border: 1px solid black;">Montant</th>
|
||||
<th style="text-align:center;border: 1px solid black;">Prix unitaire (HT)</th>
|
||||
<th style="text-align:center;border: 1px solid black;">Montant (HT)</th>
|
||||
</tr>
|
||||
<tr style="border: 1px solid black;padding: 0px;padding: 0px; padding-top:5px;">
|
||||
<td style="text-align:center;border: 1px solid black;"> {{json_data.packs}} <br>
|
||||
|
|
@ -87,7 +89,7 @@
|
|||
<tr style="padding:0px; padding-top:5px;font-size:0.9rem;">
|
||||
<td style="text-align:left;"> </td>
|
||||
<td style="text-align:left;"> </td>
|
||||
<td style="text-align:center;">TVA 20% : </td>
|
||||
<td style="text-align:center;">TVA : </td>
|
||||
<td style="text-align:center;">{{json_data.tva}} €</td>
|
||||
</tr>
|
||||
|
||||
|
|
@ -127,10 +129,10 @@
|
|||
<tbody>
|
||||
<tr>
|
||||
|
||||
<td scope="col" style="text-align: left;">30004</td>
|
||||
<td scope="col" style="text-align: left;">00120</td>
|
||||
<td scope="col" style="text-align: left;">00002090815</td>
|
||||
<td scope="col" style="text-align: left;">60</td>
|
||||
<td scope="col" style="text-align: left;">30087</td>
|
||||
<td scope="col" style="text-align: left;">33856</td>
|
||||
<td scope="col" style="text-align: left;">00021285503</td>
|
||||
<td scope="col" style="text-align: left;">40</td>
|
||||
</tr>
|
||||
|
||||
|
||||
|
|
@ -156,8 +158,8 @@
|
|||
<tbody>
|
||||
<tr>
|
||||
|
||||
<td scope="col" style="text-align: left;">FR76 3000 4001 2000 0020 9081 560 </td>
|
||||
<td scope="col" style="text-align: left;">BNPAFRPPXXX</td>
|
||||
<td scope="col" style="text-align: left;">FR76 3008 7338 5600 0212 8550 340</td>
|
||||
<td scope="col" style="text-align: left;">CMCIFRPP</td>
|
||||
|
||||
</tr>
|
||||
|
||||
|
|
@ -180,9 +182,7 @@
|
|||
|
||||
<p>MySy Training<br />
|
||||
|
||||
Cour du Havre 1, 75008, Paris<br />
|
||||
|
||||
MySy Training Technology (MTT), société par actions simplifiée au capital de 1000 euros, dont le siège
|
||||
MySy Training Technology (MTT), société par actions simplifiée au capital de 10 000 euros, dont le siège
|
||||
social est
|
||||
situé 2, place des magnolias, 77680, Roissy en Brie, immatriculée au Registre du Commerce et des
|
||||
Sociétés sous le numéro 917 500 860 R.C.S. Melun
|
||||
|
|
|
|||
|
|
@ -194,6 +194,8 @@ Recuperation des la configuration du catalogue public
|
|||
"""
|
||||
def Get_Partner_Catalog_Pub_Config(diction):
|
||||
try:
|
||||
|
||||
print("### INSIDE NOO PROXYYY")
|
||||
diction = mycommon.strip_dictionary(diction)
|
||||
|
||||
"""
|
||||
|
|
|
|||
459
class_mgt.py
|
|
@ -2825,6 +2825,465 @@ def get_class(diction):
|
|||
return False, " Impossible de récupérer la formation"
|
||||
|
||||
|
||||
"""
|
||||
Cette fonction recuperer les données d'une formation indépendamment de sont affichage sur la marketplace
|
||||
"""
|
||||
|
||||
def get_class_without_marketplace_check(diction):
|
||||
try:
|
||||
'''
|
||||
# Verification que les champs reçus dans l'API sont bien dans la liste des champs autorisés
|
||||
# Cela evite le cas ou une entité tierce ajouter les valeurs inconnu dans l'API
|
||||
# Ici on doit mettre tous les champs possible (obligatoire ou non) de la BDD dans la liste
|
||||
# field_list.
|
||||
'''
|
||||
field_list = ['internal_url', 'token', 'title', 'valide', 'locked', 'user_ip', 'user_country_code', 'user_country_name', 'user_city',
|
||||
'user_postal', 'user_latitude', 'user_longitude', 'user_state', 'connection_type']
|
||||
|
||||
incom_keys = diction.keys()
|
||||
for val in incom_keys:
|
||||
if val not in field_list and val.startswith('my_') is False:
|
||||
mycommon.myprint( str(inspect.stack()[0][3])+ " - Le champ '" + val + "' n'existe pas, Creation formation annulée")
|
||||
return False, " Impossible de récupérer la formation"
|
||||
|
||||
'''
|
||||
Une fois qu'on a controlé que toutes les clés mise dans l'API sont correcte. etape precedente,
|
||||
On controle que les champs obligatoires sont presents dans la liste
|
||||
'''
|
||||
field_list_obligatoire = ['token']
|
||||
|
||||
for val in field_list_obligatoire:
|
||||
if val not in diction:
|
||||
mycommon.myprint(str(inspect.stack()[0][3])+" - La valeur '" + val + "' n'est pas presente dans la liste des arguments ")
|
||||
return False, " Impossible de récupérer la formation"
|
||||
|
||||
# recuperation des paramettre
|
||||
mydata = {}
|
||||
my_internal_url = ""
|
||||
my_token = ""
|
||||
|
||||
|
||||
if ("internal_url" in diction.keys()):
|
||||
if diction['internal_url']:
|
||||
my_internal_url = diction['internal_url']
|
||||
|
||||
if ("token" in diction.keys()):
|
||||
if diction['token']:
|
||||
my_token = diction['token']
|
||||
|
||||
|
||||
|
||||
client_connected_recid = ""
|
||||
connection_type = ""
|
||||
if ("connection_type" in diction.keys()):
|
||||
if diction['connection_type']:
|
||||
connection_type = diction['connection_type']
|
||||
|
||||
|
||||
'''
|
||||
Gestion des filters.
|
||||
'''
|
||||
|
||||
internal_url_crit = {}
|
||||
if ("internal_url" in diction.keys()):
|
||||
if diction['internal_url']:
|
||||
internal_url_crit['internal_url'] = diction['internal_url']
|
||||
|
||||
title_crit = {}
|
||||
if ("title" in diction.keys()):
|
||||
if diction['title']:
|
||||
title_crit['title'] = diction['title']
|
||||
|
||||
|
||||
coll_name = MYSY_GV.dbname['myclass']
|
||||
|
||||
# verifier que le token et l'email sont ok
|
||||
coll_token = MYSY_GV.dbname['user_token']
|
||||
|
||||
# Verification de la validité du token dans le cas des user en mode connecté
|
||||
'''
|
||||
Important : Important : si le token est vide, alors c'est une recherche faite en mode non-connecté.
|
||||
on doit l'accepter.
|
||||
|
||||
le controle de la validé du token est faite que ce dernier n'est pas vide.
|
||||
'''
|
||||
|
||||
user_recid = "None"
|
||||
coll_search_result = MYSY_GV.dbname['user_recherche_result']
|
||||
|
||||
# Verification de la validité du token/mail dans le cas des user en mode connecté
|
||||
if (len(str(my_token)) > 0 and str(connection_type).strip() == "user"):
|
||||
retval = mycommon.check_token_validity("", my_token)
|
||||
|
||||
if retval is False:
|
||||
mycommon.myprint( str(inspect.stack()[0][3])+" - La session de connexion n'est pas valide")
|
||||
return False, " Impossible de récupérer la formation"
|
||||
|
||||
# Recuperation du recid de l'utilisateur
|
||||
user_recid = mycommon.get_user_recid_from_token(my_token)
|
||||
if user_recid is False:
|
||||
mycommon.myprint(str(inspect.stack()[0][3])+" - Impossible de récupérer le token de l'utilisateur")
|
||||
return False, " Impossible de récupérer la formation"
|
||||
|
||||
# Verification de la validité du token/mail dans le cas des partner en mode connecté
|
||||
if (len(str(my_token)) > 0 and str(connection_type).strip() == "partner"):
|
||||
retval = mycommon.check_partner_token_validity("", my_token)
|
||||
|
||||
if retval is False:
|
||||
mycommon.myprint(str(inspect.stack()[0][3]) + " - La session de connexion n'est pas valide")
|
||||
return "Err_Connexion", "La session de connexion n'est pas valide"
|
||||
|
||||
# Recuperation du recid de l'utilisateur
|
||||
user_recid = mycommon.get_parnter_recid_from_token(my_token)
|
||||
if user_recid is False:
|
||||
mycommon.myprint(
|
||||
str(inspect.stack()[0][3]) + " - Impossible de récupérer le token du partenaire")
|
||||
return False, " Impossible de récupérer le token du partenaire"
|
||||
|
||||
|
||||
|
||||
|
||||
RetObject = []
|
||||
filt_external_code = {}
|
||||
internal_url = ""
|
||||
if ("internal_url" in diction.keys()):
|
||||
filt_external_code = {'internal_url':str(diction['internal_url'])}
|
||||
internal_url = str(diction['internal_url'])
|
||||
|
||||
#print(' ICICICIC '+str(filt_external_code))
|
||||
|
||||
#print(" #### internal_url = ", internal_url)
|
||||
|
||||
qry_02 = {'valide':'1','locked':'0','internal_url':internal_url, }
|
||||
|
||||
#print(" #### qty_02 = ", qry_02)
|
||||
|
||||
# Recuperation des info du partenaire propriaitaire comme : ces certification (qualiopi, datadock, etc) et son nom
|
||||
tmp_class_data = MYSY_GV.dbname['myclass'].find_one({'valide':'1','locked':'0','internal_url':internal_url, },
|
||||
{"_id": 1, "partner_owner_recid": 1, } )
|
||||
|
||||
if( tmp_class_data is None or tmp_class_data["partner_owner_recid"] is None):
|
||||
#print(' ### tmp_class_data =', str(tmp_class_data ))
|
||||
mycommon.myprint(str(inspect.stack()[0][3]) + " - impossible de récupérer les données du partenaire - laa ")
|
||||
return False, " Cette formation est indisponible "
|
||||
|
||||
#print(" ### la formation concernee est : ", tmp_class_data)
|
||||
|
||||
qry = {'active':'1','locked':'0','recid':str(tmp_class_data["partner_owner_recid"]) }
|
||||
|
||||
tmp_partenaire_data = MYSY_GV.dbname['partnair_account'].find_one(qry)
|
||||
|
||||
#print(" ### qry = ", qry)
|
||||
|
||||
if (tmp_partenaire_data is None or tmp_partenaire_data["_id"] is None):
|
||||
mycommon.myprint(str(inspect.stack()[0][3]) + " - impossible de récupérer les données du partenaire (2) ")
|
||||
return False, " Cette formation est indisponible (2) "
|
||||
|
||||
|
||||
filt_title = {}
|
||||
if ("title" in diction.keys()):
|
||||
filt_title = {'title': {'$regex': str(diction['title']), "$options": "i"}}
|
||||
|
||||
|
||||
print(" #### avant requete get partner_owner_recid laa yy= "+str(user_recid)+
|
||||
" internal_url = "+str(my_internal_url)+
|
||||
" filt_title = "+str(filt_title))
|
||||
|
||||
text_size = 0
|
||||
"""
|
||||
# Pour facilité l'affichage du front, on va créer une variable qui liste le nombre de pavé existant.
|
||||
A date la liste des champs est : description, plus_produit, objectif, programme, prerequis, session, pourqui
|
||||
"""
|
||||
nb_pave_a_afficher = 0
|
||||
|
||||
connected_client_recid = ""
|
||||
if (str(connection_type).strip() == "partner"):
|
||||
connected_client_recid = user_recid
|
||||
|
||||
pipe = [
|
||||
{'$match': {'internal_url': internal_url}},
|
||||
{'$project': { 'indexed': 0, 'indexed_desc': 0, 'indexed_obj': 0, "indexed_title": 0, "valide": 0,
|
||||
"locked": 0}},
|
||||
{'$lookup':
|
||||
{
|
||||
'from': 'business_prices',
|
||||
'let': {'partner_owner_recid': "$partner_owner_recid", 'programme': '$programme'},
|
||||
|
||||
'pipeline': [
|
||||
{'$match':
|
||||
{'$expr':
|
||||
{'$and':
|
||||
[
|
||||
{'$eq': ["$partner_recid", "$$partner_owner_recid"]},
|
||||
{'$eq': ["$client_recid", connected_client_recid]},
|
||||
{'$eq': ["$valide", "1"]}
|
||||
]
|
||||
}
|
||||
}
|
||||
},
|
||||
|
||||
],
|
||||
'as': 'business_prices'
|
||||
}
|
||||
}
|
||||
]
|
||||
|
||||
mytoday = datetime.today()
|
||||
print(" ### pipe myclass = ", pipe)
|
||||
|
||||
for retVal in coll_name.aggregate(pipe):
|
||||
"""
|
||||
for retVal in coll_name.find({'valide':'1','locked':'0','internal_url':internal_url,},
|
||||
{"_id": 0, "indexed": 0, "indexed_desc": 0, "indexed_obj": 0, "indexed_title": 0,
|
||||
"valide": 0, "locked": 0, "partner_owner_recid": 0, }
|
||||
).limit(1):
|
||||
"""
|
||||
|
||||
#print('#### ICI retVal = '+str(retVal))
|
||||
tab_selected_business_prices = []
|
||||
|
||||
if ("business_prices" in retVal.keys()):
|
||||
|
||||
for local_business_prices in retVal['business_prices']:
|
||||
|
||||
if ("date_du" in local_business_prices.keys() and "date_au" in local_business_prices.keys()
|
||||
and mycommon.CheckisDate(local_business_prices['date_du']) and mycommon.CheckisDate(
|
||||
local_business_prices['date_au'])):
|
||||
|
||||
local_date_du = datetime.strptime(str(local_business_prices['date_du']).strip(), '%d/%m/%Y')
|
||||
local_date_au = datetime.strptime(str(local_business_prices['date_au']).strip(), '%d/%m/%Y')
|
||||
|
||||
if (local_date_du <= mytoday and mytoday <= local_date_au):
|
||||
local_discount = mycommon.tryFloat(str(local_business_prices['discount']))
|
||||
local_initial_price = mycommon.tryFloat(str(retVal['price']))
|
||||
local_discounted_price = round(local_initial_price - (local_initial_price * (local_discount / 100)), 2)
|
||||
local_business_prices['discounted_price'] = str(local_discounted_price)
|
||||
retVal['business_prices'][0]['discounted_price'] = str(local_discounted_price)
|
||||
tab_selected_business_prices.append(local_business_prices)
|
||||
|
||||
my_recid = {}
|
||||
my_recid['user_rec_id'] = str(user_recid)
|
||||
mydict_combined = {**diction, **retVal, **my_recid}
|
||||
mydict_combined['date_update'] = str(datetime.now())
|
||||
mydict_combined['type_view'] = "detail"
|
||||
|
||||
if ("_id" in mydict_combined.keys()):
|
||||
mydict_combined['class_id'] = mydict_combined.pop('_id')
|
||||
|
||||
#mycommon.myprint("COMBINED = " + str(mydict_combined))
|
||||
|
||||
'''
|
||||
Statistique : Insertion du recherche - resultat '''
|
||||
ret_val_tmp = coll_search_result.insert_one(mydict_combined)
|
||||
|
||||
if (ret_val_tmp is False):
|
||||
mycommon.myprint(str(inspect.stack()[0][3]) + " - Impossible de mettre à jour la table des resultat"
|
||||
" d'une recherche de formation. Voir _id = ")
|
||||
return False, "Impossible de faire un affichage detaillé "
|
||||
|
||||
|
||||
# Cette varible compte le nombre de certificat dont dispose le partenaire.
|
||||
# Cette information est utilisée pour savoir les taille à afficher sur le front
|
||||
nb_partner_certificat = 0
|
||||
if( "isdatadock" in tmp_partenaire_data.keys() and tmp_partenaire_data['isdatadock']):
|
||||
retVal['isdatadock'] = tmp_partenaire_data['isdatadock']
|
||||
if (tmp_partenaire_data['isdatadock'] == "1"):
|
||||
nb_partner_certificat = nb_partner_certificat + 1
|
||||
|
||||
if ("isqualiopi" in tmp_partenaire_data.keys() and tmp_partenaire_data['isqualiopi']):
|
||||
retVal['isqualiopi'] = tmp_partenaire_data['isqualiopi']
|
||||
if (tmp_partenaire_data['isqualiopi'] == "1"):
|
||||
nb_partner_certificat = nb_partner_certificat + 1
|
||||
|
||||
if ("iscertitrace" in tmp_partenaire_data.keys() and tmp_partenaire_data['iscertitrace']):
|
||||
retVal['iscertitrace'] = tmp_partenaire_data['iscertitrace']
|
||||
if( tmp_partenaire_data['iscertitrace'] == "1"):
|
||||
nb_partner_certificat = nb_partner_certificat + 1
|
||||
|
||||
if ("isbureaucertitrace" in tmp_partenaire_data.keys() and tmp_partenaire_data['isbureaucertitrace']):
|
||||
retVal['isbureaucertitrace'] = tmp_partenaire_data['isbureaucertitrace']
|
||||
if (tmp_partenaire_data['isbureaucertitrace'] == "1"):
|
||||
nb_partner_certificat = nb_partner_certificat + 1
|
||||
|
||||
if ("iscertifvoltaire" in tmp_partenaire_data.keys() and tmp_partenaire_data['iscertifvoltaire']):
|
||||
retVal['iscertifvoltaire'] = tmp_partenaire_data['iscertifvoltaire']
|
||||
if (tmp_partenaire_data['iscertifvoltaire'] == "1"):
|
||||
nb_partner_certificat = nb_partner_certificat + 1
|
||||
|
||||
|
||||
retVal['nb_partner_certificat'] = str(nb_partner_certificat)
|
||||
|
||||
if ("nom" in tmp_partenaire_data.keys() and tmp_partenaire_data['nom']):
|
||||
retVal['nom_partenaire'] = tmp_partenaire_data['nom']
|
||||
|
||||
if ("website" in tmp_partenaire_data.keys() and tmp_partenaire_data['website']):
|
||||
retVal['website_partenaire'] = tmp_partenaire_data['website']
|
||||
|
||||
|
||||
if ("description" in retVal.keys()):
|
||||
tmp_str = retVal['description']
|
||||
no_html = mycommon.cleanhtml(retVal['description'])
|
||||
nb_pave_a_afficher = nb_pave_a_afficher + 1
|
||||
|
||||
|
||||
text_size = text_size + len(str(no_html))
|
||||
if (len(no_html) > MYSY_GV.MAX_CARACT_DETAIL):
|
||||
retVal['description'] = no_html[:MYSY_GV.MAX_CARACT_DETAIL] + " ..."
|
||||
|
||||
|
||||
if ("objectif" in retVal.keys()):
|
||||
tmp_str = retVal['objectif']
|
||||
no_html = mycommon.cleanhtml(retVal['objectif'])
|
||||
text_size = text_size + len(str(no_html))
|
||||
nb_pave_a_afficher = nb_pave_a_afficher + 1
|
||||
|
||||
|
||||
if (len(no_html) > MYSY_GV.MAX_CARACT_DETAIL):
|
||||
retVal['objectif'] = no_html[:MYSY_GV.MAX_CARACT_DETAIL] + " ..."
|
||||
|
||||
|
||||
if ("pourqui" in retVal.keys() and retVal['pourqui']):
|
||||
nb_pave_a_afficher = nb_pave_a_afficher + 1
|
||||
|
||||
|
||||
|
||||
if ("programme" in retVal.keys()):
|
||||
tmp_str = retVal['programme']
|
||||
no_html = mycommon.cleanhtml( retVal['programme'])
|
||||
text_size = text_size + len(str(no_html))
|
||||
nb_pave_a_afficher = nb_pave_a_afficher + 1
|
||||
|
||||
|
||||
if (len(no_html) > MYSY_GV.MAX_CARACT_DETAIL):
|
||||
retVal['programme'] = no_html[:MYSY_GV.MAX_CARACT_DETAIL] + " ..."
|
||||
|
||||
|
||||
if ("methode_pedagogique" in retVal.keys()):
|
||||
tmp_str = retVal['methode_pedagogique']
|
||||
no_html = mycommon.cleanhtml( retVal['methode_pedagogique'])
|
||||
text_size = text_size + len(str(no_html))
|
||||
nb_pave_a_afficher = nb_pave_a_afficher + 1
|
||||
|
||||
|
||||
if (len(no_html) > MYSY_GV.MAX_CARACT_DETAIL):
|
||||
retVal['methode_pedagogique'] = no_html[:MYSY_GV.MAX_CARACT_DETAIL] + " ..."
|
||||
|
||||
|
||||
if ("condition_handicape" in retVal.keys()):
|
||||
tmp_str = retVal['condition_handicape']
|
||||
no_html = mycommon.cleanhtml( retVal['condition_handicape'])
|
||||
text_size = text_size + len(str(no_html))
|
||||
nb_pave_a_afficher = nb_pave_a_afficher + 1
|
||||
|
||||
|
||||
if (len(no_html) > MYSY_GV.MAX_CARACT_DETAIL):
|
||||
retVal['condition_handicape'] = no_html[:MYSY_GV.MAX_CARACT_DETAIL] + " ..."
|
||||
|
||||
|
||||
if ("suivi_eval" in retVal.keys()):
|
||||
tmp_str = retVal['suivi_eval']
|
||||
no_html = mycommon.cleanhtml( retVal['suivi_eval'])
|
||||
text_size = text_size + len(str(no_html))
|
||||
nb_pave_a_afficher = nb_pave_a_afficher + 1
|
||||
|
||||
|
||||
if (len(no_html) > MYSY_GV.MAX_CARACT_DETAIL):
|
||||
retVal['suivi_eval'] = no_html[:MYSY_GV.MAX_CARACT_DETAIL] + " ..."
|
||||
|
||||
|
||||
if ("pedagogie" in retVal.keys()):
|
||||
tmp_str = retVal['pedagogie']
|
||||
no_html = mycommon.cleanhtml(retVal['pedagogie'])
|
||||
if (len(no_html) > MYSY_GV.MAX_CARACT_DETAIL):
|
||||
retVal['pedagogie'] = no_html[:MYSY_GV.MAX_CARACT_DETAIL] + " ..."
|
||||
|
||||
#retVal["text_size"] = str(text_size)
|
||||
|
||||
retVal["text_size"] = "1600"
|
||||
|
||||
"""
|
||||
Verifier s'il y a des session des formations actives
|
||||
"""
|
||||
localmyquery = {}
|
||||
localmyquery['class_internal_url'] = internal_url
|
||||
localmyquery['valide'] = "1"
|
||||
localmyquery['session_status'] = "true"
|
||||
count_localmyquery = MYSY_GV.dbname['session_formation'].count_documents(localmyquery)
|
||||
if( count_localmyquery > 0 ):
|
||||
nb_pave_a_afficher = nb_pave_a_afficher + 1
|
||||
print(" ### nb_pave_a_afficher , SESSION ")
|
||||
|
||||
retVal["nb_pave_a_afficher"] = str(nb_pave_a_afficher)
|
||||
|
||||
#print(" #### Pour la formation :",internal_url, " text_size = ", str(text_size))
|
||||
#mycommon.myprint(" #### "+str(retVal))
|
||||
user = retVal
|
||||
|
||||
if( "recyclage_delai" not in user.keys()):
|
||||
user['recyclage_delai'] = ""
|
||||
|
||||
if ("recyclage_alert" not in user.keys()):
|
||||
user['recyclage_alert'] = ""
|
||||
|
||||
if ("recyclage_periodicite" not in user.keys()):
|
||||
user['recyclage_periodicite'] = ""
|
||||
|
||||
if ("note_finale_calculation_rule_id" not in user.keys()):
|
||||
user['note_finale_calculation_rule_id'] = ""
|
||||
|
||||
"""
|
||||
15/09/2024 :
|
||||
Si la formation a des unité d'enseignements rattaché,
|
||||
ramener dans un tableau :
|
||||
- _id
|
||||
- code
|
||||
- titre
|
||||
- description
|
||||
"""
|
||||
tab_ue_detail_data = []
|
||||
if( "list_unite_enseignement" in user.keys() ):
|
||||
for tmp_ue in user["list_unite_enseignement"] :
|
||||
if( "_id" in tmp_ue.keys() ):
|
||||
local_ue_data = MYSY_GV.dbname['unite_enseignement'].find_one({'_id':ObjectId(str(tmp_ue['_id'])),
|
||||
'partner_owner_recid':tmp_partenaire_data['recid'],
|
||||
'valide':'1',
|
||||
'locked':'0'})
|
||||
|
||||
|
||||
local_code = ""
|
||||
if( local_ue_data and "code" in local_ue_data.keys() ):
|
||||
local_code = local_ue_data['code']
|
||||
|
||||
local_titre = ""
|
||||
if (local_ue_data and "titre" in local_ue_data.keys()):
|
||||
local_titre = local_ue_data['titre']
|
||||
|
||||
local_description = ""
|
||||
if (local_ue_data and "description" in local_ue_data.keys()):
|
||||
local_description = local_ue_data['description']
|
||||
|
||||
local_node = {}
|
||||
local_node['_id'] = str(tmp_ue['_id'])
|
||||
local_node['code'] = str(local_code)
|
||||
local_node['titre'] = str(local_titre)
|
||||
local_node['description'] = str(local_description)
|
||||
|
||||
tab_ue_detail_data.append(local_node)
|
||||
|
||||
user['tab_ue_detail_data'] = tab_ue_detail_data
|
||||
user['business_prices'] = tab_selected_business_prices
|
||||
|
||||
RetObject.append(JSONEncoder().encode(user))
|
||||
|
||||
return True, RetObject
|
||||
|
||||
|
||||
except Exception as e:
|
||||
exc_type, exc_obj, exc_tb = sys.exc_info()
|
||||
mycommon.myprint(str(inspect.stack()[0][3]) + " -" + str(e)+" - Line : "+ str(exc_tb.tb_lineno) )
|
||||
return False, " Impossible de récupérer la formation"
|
||||
|
||||
|
||||
|
||||
def get_class_for_partner_catalog(diction):
|
||||
try:
|
||||
|
|
|
|||
|
|
@ -306,7 +306,7 @@ def Get_Competence_no_filter(diction):
|
|||
RetObject.append(mycommon.JSONEncoder().encode(user))
|
||||
|
||||
|
||||
#print(" #### RetObject = ", RetObject)
|
||||
print(" #### RetObject = ", RetObject)
|
||||
return True, RetObject
|
||||
|
||||
except Exception as e:
|
||||
|
|
|
|||
|
|
@ -492,7 +492,7 @@ def incription_training_refused_mail(diction):
|
|||
"params": dictionnary_data,
|
||||
}
|
||||
|
||||
print(" ### refus_data (dictionnary_data) = ", dictionnary_data)
|
||||
#print(" ### refus_data (dictionnary_data) = ", dictionnary_data)
|
||||
|
||||
# Traitement du sujet du mail
|
||||
sujet_mail_Template = jinja2.Template(str(courrier_data_retval['sujet']))
|
||||
|
|
@ -960,7 +960,7 @@ def Pre_incription_training_confirmation_mail(diction):
|
|||
Verification de la liste des champs obligatoires
|
||||
"""
|
||||
field_list_obligatoire = ['nom', 'prenom', 'email', 'date_du', 'code_session', 'date_au', 'title',
|
||||
'distantiel', 'presentiel', 'partner_owner_recid', 'token']
|
||||
'distantiel', 'presentiel', 'partner_owner_recid', 'token', 'session_id', 'formateur_email']
|
||||
for val in field_list_obligatoire:
|
||||
if val not in diction:
|
||||
mycommon.myprint(
|
||||
|
|
@ -968,6 +968,42 @@ def Pre_incription_training_confirmation_mail(diction):
|
|||
return False, "Impossible d'envoyer l'email de confirmation de l'inscritpion"
|
||||
|
||||
|
||||
"""
|
||||
Recuperer les informations de la session
|
||||
"""
|
||||
session_count = MYSY_GV.dbname['session_formation'].count_documents({'code_session':str(diction['code_session']),
|
||||
'partner_owner_recid':str(diction['partner_owner_recid']),
|
||||
'valide':'1'})
|
||||
|
||||
if( session_count !=1 ):
|
||||
mycommon.myprint(
|
||||
str(inspect.stack()[0][
|
||||
3]) + " L'identifiant de la session est invalide ")
|
||||
return False, "L'identifiant de la session est invalide "
|
||||
|
||||
session_data = MYSY_GV.dbname['session_formation'].find_one(
|
||||
{'code_session': str(diction['code_session']),
|
||||
'partner_owner_recid': str(diction['partner_owner_recid']),
|
||||
'valide': '1'})
|
||||
|
||||
session_presentiel = ""
|
||||
session_distantiel = ""
|
||||
session_hybrid = ""
|
||||
if( "mode_animation" in session_data.keys() and session_data['mode_animation']):
|
||||
if( str(session_data['mode_animation']) == "1"):
|
||||
session_presentiel = ""
|
||||
session_distantiel = "1"
|
||||
session_hybrid = ""
|
||||
elif( str(session_data['mode_animation']) == "2"):
|
||||
session_presentiel = ""
|
||||
session_distantiel = ""
|
||||
session_hybrid = "1"
|
||||
elif (str(session_data['mode_animation']) == "0"):
|
||||
session_presentiel = "1"
|
||||
session_distantiel = ""
|
||||
session_hybrid = ""
|
||||
|
||||
|
||||
|
||||
tomorrow = datetime.date.today() + datetime.timedelta(days=1)
|
||||
tomorrow_day = tomorrow.strftime("%A")
|
||||
|
|
@ -1007,8 +1043,9 @@ def Pre_incription_training_confirmation_mail(diction):
|
|||
"prenom": str(diction['prenom']),
|
||||
"date_du": str(diction['date_du']),
|
||||
"date_fin": str(diction['date_au']),
|
||||
"distantiel": str(diction['distantiel']),
|
||||
"presentiel": str(diction['presentiel']),
|
||||
"distantiel": str(session_distantiel),
|
||||
"presentiel": str(session_presentiel),
|
||||
"hybrid": str(session_hybrid),
|
||||
"title": str(diction['title']),
|
||||
"code_postal": str(diction['code_postal']),
|
||||
"ville": str(diction['ville']),
|
||||
|
|
@ -1016,7 +1053,6 @@ def Pre_incription_training_confirmation_mail(diction):
|
|||
"email": str(diction['email']),
|
||||
"session_ondemande": str(session_ondemande),
|
||||
"code_session": str(diction['code_session']),
|
||||
|
||||
},
|
||||
}
|
||||
|
||||
|
|
@ -1173,7 +1209,8 @@ def Notification_partner_Pre_incription_mail(diction):
|
|||
Verification de la liste des champs obligatoires
|
||||
"""
|
||||
field_list_obligatoire = ['nom', 'prenom', 'email', 'date_du', 'date_au', 'title',
|
||||
'partner_mail', 'telephone', 'token', 'partner_owner_recid']
|
||||
'partner_mail', 'telephone', 'token', 'partner_owner_recid',
|
||||
'session_id', 'formateur_email']
|
||||
for val in field_list_obligatoire:
|
||||
if val not in diction:
|
||||
mycommon.myprint(
|
||||
|
|
@ -1236,12 +1273,33 @@ def Notification_partner_Pre_incription_mail(diction):
|
|||
|
||||
# msg = MIMEMultipart("alternative")
|
||||
|
||||
"""
|
||||
Recuperation du modele de courrier zzzzz
|
||||
"""
|
||||
local_diction = {}
|
||||
local_diction['ref_interne'] = "PARTNER_PRE_INSCRIPTION_NOTIF"
|
||||
local_diction['type_doc'] = "email"
|
||||
local_diction['partner_owner_recid'] = str(diction['partner_owner_recid'])
|
||||
|
||||
courrier_data_status, courrier_data_retval = mycommon.Get_Courrier_Template_Include_Default_Data(local_diction)
|
||||
if (courrier_data_status is False):
|
||||
mycommon.myprint(
|
||||
str(inspect.stack()[0][
|
||||
3]) + " Impossible de récupérer le modèle de courrier 'PARTNER_PRE_INSCRIPTION_NOTIF' ")
|
||||
return False, " Impossible de récupérer le modèle de courrier 'PARTNER_PRE_INSCRIPTION_NOTIF' "
|
||||
|
||||
if ("contenu_doc" not in courrier_data_retval.keys() or str(courrier_data_retval['contenu_doc']) == ""):
|
||||
mycommon.myprint(
|
||||
str(inspect.stack()[0][
|
||||
3]) + " Le modèle de courrier 'PARTNER_PRE_INSCRIPTION_NOTIF' n'est pas correctement configuré ")
|
||||
return False, " Le modèle de courrier 'PARTNER_PRE_INSCRIPTION_NOTIF' n'est pas correctement configuré"
|
||||
|
||||
|
||||
# JINJA2
|
||||
templateLoader = jinja2.FileSystemLoader(searchpath="./")
|
||||
templateEnv = jinja2.Environment(loader=templateLoader)
|
||||
TEMPLATE_FILE = "Template/MySy_Notif_Partner_Pre_inscription_formation_tpl.html"
|
||||
template = templateEnv.get_template(TEMPLATE_FILE)
|
||||
#templateLoader = jinja2.FileSystemLoader(searchpath="./")
|
||||
#templateEnv = jinja2.Environment(loader=templateLoader)
|
||||
#TEMPLATE_FILE = "Template/MySy_Notif_Partner_Pre_inscription_formation_tpl.html"
|
||||
#template = templateEnv.get_template(TEMPLATE_FILE)
|
||||
# This data can come from database query
|
||||
body = {
|
||||
"params":{"nom": str(diction['nom']),
|
||||
|
|
@ -1260,8 +1318,13 @@ def Notification_partner_Pre_incription_mail(diction):
|
|||
"session_ondemande": str(session_ondemande),
|
||||
},
|
||||
}
|
||||
contenu_doc_Template = jinja2.Template(str(courrier_data_retval['contenu_doc']))
|
||||
sourceHtml = contenu_doc_Template.render(params=body["params"])
|
||||
#sourceHtml = template.render(params=body["params"])
|
||||
|
||||
sourceHtml = template.render(params=body["params"])
|
||||
# Traitement du sujet du mail
|
||||
sujet_mail_Template = jinja2.Template(str(courrier_data_retval['sujet']))
|
||||
sujetHtml = sujet_mail_Template.render(params=body["params"])
|
||||
|
||||
"""
|
||||
Recuperation des parametre SMTP du partner si le client a decidé d'utiliser son propre smpt
|
||||
|
|
@ -1312,9 +1375,11 @@ def Notification_partner_Pre_incription_mail(diction):
|
|||
smtpserver = smtplib.SMTP(partner_SMTP_COUNT_smtpsrv, partner_SMTP_COUNT_port)
|
||||
msg.set_content(sourceHtml, subtype='html')
|
||||
msg['From'] = partner_SMTP_COUNT_From_User
|
||||
msg['Cc'] = 'contact@mysy-training.com, billardman01@hotmail.com'
|
||||
msg['Subject'] = '[MySy Training] : pre-inscription à la formation ' + str(diction['title'])
|
||||
msg['Bbc'] = 'contact@mysy-training.com'
|
||||
msg['Subject'] = sujetHtml
|
||||
msg['To'] = str(diction['partner_mail'])
|
||||
if( "formateur_email" in diction.keys() ):
|
||||
msg['Cc'] = str(diction['formateur_email'])
|
||||
|
||||
smtpserver.ehlo()
|
||||
smtpserver.starttls()
|
||||
|
|
@ -1332,9 +1397,11 @@ def Notification_partner_Pre_incription_mail(diction):
|
|||
else:
|
||||
msg['From'] = str(MYSY_GV.O365_SMTP_COUNT_From_User)
|
||||
#msg['From'] = MYSY_GV.O365_SMTP_COUNT_From_User
|
||||
msg['Cc'] = 'contact@mysy-training.com, billardman01@hotmail.com'
|
||||
msg['Subject'] = '[MySy Training] : pre-inscription à la formation '+str(diction['title'])
|
||||
msg['Bcc'] = 'contact@mysy-training.com'
|
||||
msg['Subject'] = sujetHtml
|
||||
msg['To'] = str(diction['partner_mail'])
|
||||
if ("formateur_email" in diction.keys()):
|
||||
msg['Cc'] = str(diction['formateur_email'])
|
||||
|
||||
smtpserver.ehlo()
|
||||
smtpserver.starttls()
|
||||
|
|
|
|||
246
email_mgt.py
|
|
@ -2488,7 +2488,7 @@ def ManualSendInvoiceEmailRIB_CIC_JMJFormation(diction):
|
|||
body = {
|
||||
"params": {"order_id": "MTT/2025_N°0012/JMJ FORMATION",
|
||||
"date_order": ": 14/07/2025",
|
||||
"periode":"14/07/2025 au 13/08/2025",
|
||||
"periode":"14/08/2025 au 13/09/2025",
|
||||
"total_ht": "130",
|
||||
"tva": "11.05",
|
||||
"total_ttc": "141,05 ",
|
||||
|
|
@ -2504,9 +2504,9 @@ def ManualSendInvoiceEmailRIB_CIC_JMJFormation(diction):
|
|||
"montant": "130 €",
|
||||
|
||||
|
||||
"invoice_id": "FACT_20250715",
|
||||
"invoice_date": "14/07/2025",
|
||||
"due_date": "14/07/2025",
|
||||
"invoice_id": "FACT_20250816",
|
||||
"invoice_date": "14/08/2025",
|
||||
"due_date": "14/08/2025",
|
||||
"orign_order": "Contrat MTT/2025_N°0012/JMJ FORMATION",
|
||||
}
|
||||
}
|
||||
|
|
@ -2540,7 +2540,221 @@ def ManualSendInvoiceEmailRIB_CIC_JMJFormation(diction):
|
|||
#print(" ### body 22 = ", body)
|
||||
|
||||
sourceHtml = template.render(json_data=body["params"])
|
||||
orig_file_name = "invoice_FACT_20250715.pdf"
|
||||
orig_file_name = "invoice_FACT_20250816.pdf"
|
||||
outputFilename = str(MYSY_GV.INVOICE_DIRECTORY) + str(orig_file_name)
|
||||
|
||||
# open output file for writing (truncated binary)
|
||||
resultFile = open(outputFilename, "w+b")
|
||||
|
||||
# convert HTML to PDF
|
||||
pisaStatus = pisa.CreatePDF(
|
||||
src=sourceHtml, # the HTML to convert
|
||||
dest=resultFile) # file handle to receive result
|
||||
|
||||
# close output file
|
||||
resultFile.close()
|
||||
|
||||
return True, " facture envoyée"
|
||||
|
||||
|
||||
except Exception as e:
|
||||
exc_type, exc_obj, exc_tb = sys.exc_info()
|
||||
print(str(inspect.stack()[0][3]) + " -" + str(e) + " - ERRORRRR AT Line : " + str(exc_tb.tb_lineno))
|
||||
return False, " impossible d'envoyer la facure"
|
||||
|
||||
|
||||
|
||||
"""
|
||||
Creation manuelle d'une facture avec RIB CIC pour France Active - perso
|
||||
"""
|
||||
def ManualSendInvoiceEmailRIB_CIC_France_Active(diction):
|
||||
try:
|
||||
'''
|
||||
Verification des données obligatoires
|
||||
'''
|
||||
'''
|
||||
Une fois qu'on a controlé que toutes les clés mise dans l'API sont correcte. etape precedente,
|
||||
On controle que les champs obligatoires sont presents dans la liste
|
||||
'''
|
||||
|
||||
tomorrow = datetime.date.today() + datetime.timedelta(days=1)
|
||||
tomorrow_day = tomorrow.strftime("%A")
|
||||
|
||||
print("debut envoi mail de test ")
|
||||
# on rentre les renseignements pris sur le site du fournisseur
|
||||
|
||||
#smtpserver = smtplib.SMTP(MYSY_GV.O365_SMTP_COUNT_smtpsrv, MYSY_GV.O365_SMTP_COUNT_port)
|
||||
|
||||
# msg = MIMEMultipart("alternative")
|
||||
#msg = EmailMessage()
|
||||
|
||||
# JINJA2
|
||||
templateLoader = jinja2.FileSystemLoader(searchpath="./")
|
||||
templateEnv = jinja2.Environment(loader=templateLoader)
|
||||
TEMPLATE_FILE = "Template/MySy_Invoice_RIB_PortCities_Perso_tpl.html"
|
||||
template = templateEnv.get_template(TEMPLATE_FILE)
|
||||
body = {
|
||||
"params": {"order_id": "MTT/2025_N°0013/FRANCEACTIVE",
|
||||
"date_order": ": 09/07/2025",
|
||||
"periode":"09/07/2025 au 08/07/2026",
|
||||
"total_ht": "850",
|
||||
"tva": "0",
|
||||
"total_ttc": "850",
|
||||
"client_name": "FRANCE ACTIVE SEINE-ET-MARNE ESSONNE",
|
||||
"client_address": "29 ALLEE JEAN ROSTAND",
|
||||
"client_zip_ville": "91000 EVRY-COURCOURONNES",
|
||||
"client_pays": "France",
|
||||
"packs": "ELYOS - Pack STANDARD ",
|
||||
"detail_packs": "Mise en place d’un site web (marketplace) - "
|
||||
"Mise en place d’un outil de gestion administrative et de gestion de la relation client pour Organisme de formation ",
|
||||
"qty": "1",
|
||||
"unit_price": "850 €",
|
||||
"montant": "850 €",
|
||||
|
||||
|
||||
"invoice_id": "FACT_20250920_U",
|
||||
"invoice_date": "09/09/2025",
|
||||
"due_date": "09/09/2025",
|
||||
"orign_order": "Contrat MTT/2025_N°0013/FRANCEACTIVE",
|
||||
}
|
||||
}
|
||||
|
||||
#print(" ### body 1 = ", body)
|
||||
sourceHtml = template.render(params=body["params"])
|
||||
|
||||
"""msg.set_content(sourceHtml, subtype='html')
|
||||
msg['From'] = MYSY_GV.O365_SMTP_COUNT_From_User
|
||||
msg['Bcc'] = 'contact@mysy-training.com'
|
||||
msg['Subject'] = "[MySy Training Technology] : Votre facture N° FACT_230500030"
|
||||
msg['To'] = 'billardman1@gmail.com'
|
||||
|
||||
smtpserver.ehlo()
|
||||
smtpserver.starttls()
|
||||
smtpserver.login(MYSY_GV.O365_SMTP_COUNT_user, MYSY_GV.O365_SMTP_COUNT_password)
|
||||
val = smtpserver.send_message(msg)
|
||||
smtpserver.close()
|
||||
"""
|
||||
#print(" Email envoyé " + str(val))
|
||||
|
||||
### CREATION DE LA FACTION PDF
|
||||
templateLoader = jinja2.FileSystemLoader(searchpath="./")
|
||||
templateEnv = jinja2.Environment(loader=templateLoader)
|
||||
#TEMPLATE_FILE = "Template/MySy_Invoice_RIB_tpl.html"
|
||||
TEMPLATE_FILE = "Template/invoice_RIB_PortCities_perso_tpl.html"
|
||||
|
||||
template = templateEnv.get_template(TEMPLATE_FILE)
|
||||
# This data can come from database query
|
||||
|
||||
#print(" ### body 22 = ", body)
|
||||
|
||||
sourceHtml = template.render(json_data=body["params"])
|
||||
orig_file_name = "invoice_FACT_20250816.pdf"
|
||||
outputFilename = str(MYSY_GV.INVOICE_DIRECTORY) + str(orig_file_name)
|
||||
|
||||
# open output file for writing (truncated binary)
|
||||
resultFile = open(outputFilename, "w+b")
|
||||
|
||||
# convert HTML to PDF
|
||||
pisaStatus = pisa.CreatePDF(
|
||||
src=sourceHtml, # the HTML to convert
|
||||
dest=resultFile) # file handle to receive result
|
||||
|
||||
# close output file
|
||||
resultFile.close()
|
||||
|
||||
return True, " facture envoyée"
|
||||
|
||||
|
||||
except Exception as e:
|
||||
exc_type, exc_obj, exc_tb = sys.exc_info()
|
||||
print(str(inspect.stack()[0][3]) + " -" + str(e) + " - ERRORRRR AT Line : " + str(exc_tb.tb_lineno))
|
||||
return False, " impossible d'envoyer la facure"
|
||||
|
||||
|
||||
"""
|
||||
Creation manuelle d'une facture avec RIB CIC pour Bureau Vallé - perso
|
||||
"""
|
||||
def ManualSendInvoiceEmailRIB_CIC_BureauVallee(diction):
|
||||
try:
|
||||
'''
|
||||
Verification des données obligatoires
|
||||
'''
|
||||
'''
|
||||
Une fois qu'on a controlé que toutes les clés mise dans l'API sont correcte. etape precedente,
|
||||
On controle que les champs obligatoires sont presents dans la liste
|
||||
'''
|
||||
|
||||
tomorrow = datetime.date.today() + datetime.timedelta(days=1)
|
||||
tomorrow_day = tomorrow.strftime("%A")
|
||||
|
||||
print("debut envoi mail de test ")
|
||||
# on rentre les renseignements pris sur le site du fournisseur
|
||||
|
||||
#smtpserver = smtplib.SMTP(MYSY_GV.O365_SMTP_COUNT_smtpsrv, MYSY_GV.O365_SMTP_COUNT_port)
|
||||
|
||||
# msg = MIMEMultipart("alternative")
|
||||
#msg = EmailMessage()
|
||||
|
||||
# JINJA2
|
||||
templateLoader = jinja2.FileSystemLoader(searchpath="./")
|
||||
templateEnv = jinja2.Environment(loader=templateLoader)
|
||||
TEMPLATE_FILE = "Template/MySy_Invoice_RIB_BureauValee_Perso_tpl.html"
|
||||
template = templateEnv.get_template(TEMPLATE_FILE)
|
||||
body = {
|
||||
"params": {"order_id": "N/A",
|
||||
"date_order": ": 12/08/2025",
|
||||
"periode":"12/08/2025 au 29/08/2025",
|
||||
"total_ht": "6360,81",
|
||||
"tva": "1100",
|
||||
"total_ttc": "7460,81",
|
||||
"client_name": "BVD Fr (Bureau Vallée)",
|
||||
"client_address": "25 rue du Gros Caillou",
|
||||
"client_zip_ville": "78340 – Les Clayes-sous-Bois",
|
||||
"client_pays": "France",
|
||||
"packs": "Prestation de service ",
|
||||
"detail_packs": "Accompagnement au deploiement de l'ERP CoQliQo",
|
||||
"qty": "10 jours",
|
||||
"unit_price": "550 HT €",
|
||||
"montant": "5 500 €",
|
||||
|
||||
|
||||
"invoice_id": "FACT_20250817",
|
||||
"invoice_date": "29/08/2025",
|
||||
"due_date": "15/09/2025",
|
||||
"orign_order": "N/A",
|
||||
}
|
||||
}
|
||||
|
||||
#print(" ### body 1 = ", body)
|
||||
sourceHtml = template.render(params=body["params"])
|
||||
|
||||
"""msg.set_content(sourceHtml, subtype='html')
|
||||
msg['From'] = MYSY_GV.O365_SMTP_COUNT_From_User
|
||||
msg['Bcc'] = 'contact@mysy-training.com'
|
||||
msg['Subject'] = "[MySy Training Technology] : Votre facture N° FACT_230500030"
|
||||
msg['To'] = 'billardman1@gmail.com'
|
||||
|
||||
smtpserver.ehlo()
|
||||
smtpserver.starttls()
|
||||
smtpserver.login(MYSY_GV.O365_SMTP_COUNT_user, MYSY_GV.O365_SMTP_COUNT_password)
|
||||
val = smtpserver.send_message(msg)
|
||||
smtpserver.close()
|
||||
"""
|
||||
#print(" Email envoyé " + str(val))
|
||||
|
||||
### CREATION DE LA FACTION PDF
|
||||
templateLoader = jinja2.FileSystemLoader(searchpath="./")
|
||||
templateEnv = jinja2.Environment(loader=templateLoader)
|
||||
#TEMPLATE_FILE = "Template/MySy_Invoice_RIB_tpl.html"
|
||||
TEMPLATE_FILE = "Template/invoice_RIB_BureauVallee_perso_tpl.html"
|
||||
|
||||
template = templateEnv.get_template(TEMPLATE_FILE)
|
||||
# This data can come from database query
|
||||
|
||||
#print(" ### body 22 = ", body)
|
||||
|
||||
sourceHtml = template.render(json_data=body["params"])
|
||||
orig_file_name = "invoice_FACT_20250817.pdf"
|
||||
outputFilename = str(MYSY_GV.INVOICE_DIRECTORY) + str(orig_file_name)
|
||||
|
||||
# open output file for writing (truncated binary)
|
||||
|
|
@ -3297,7 +3511,7 @@ def Prepare_and_Send_Email_From_Front(tab_files, Folder, diction):
|
|||
'$in': list_inscription_id_Objectid},
|
||||
})
|
||||
|
||||
if( is_valide_email_in_related_collection != 1 ):
|
||||
if( is_valide_email_in_related_collection <= 0 ):
|
||||
mycommon.myprint(
|
||||
str(inspect.stack()[0][
|
||||
3]) + " L'adresse email '" + str(email_dest) + "' existe pas dans le système ")
|
||||
|
|
@ -3846,7 +4060,7 @@ def send_invidual_email(diction):
|
|||
|
||||
|
||||
tab_email_bcc.append(str(my_partner['email']))
|
||||
|
||||
""" IMPORTANT : Cette section sera utilisée une fois que le module de Queu de message est ok
|
||||
queue_mail_diction = {}
|
||||
queue_mail_diction['token'] = diction['token']
|
||||
queue_mail_diction['from'] = MYSY_GV.O365_SMTP_COUNT_From_User
|
||||
|
|
@ -3867,6 +4081,7 @@ def send_invidual_email(diction):
|
|||
queue_mail_diction['smtp_account_From_User'] = MYSY_GV.O365_SMTP_COUNT_user
|
||||
queue_mail_diction['smtp_account_port'] = MYSY_GV.O365_SMTP_COUNT_port
|
||||
|
||||
"""
|
||||
|
||||
tab_files = []
|
||||
queue_mail_status, queue_mail_retval = email_queu_mgt.Add_Message_To_Mail_Queue(tab_files, queue_mail_diction)
|
||||
|
|
@ -3893,7 +4108,22 @@ def send_invidual_email(diction):
|
|||
|
||||
else:
|
||||
msg.attach(html_mime)
|
||||
msg['From'] = MYSY_GV.O365_SMTP_COUNT_From_User
|
||||
#msg['From'] = MYSY_GV.O365_SMTP_COUNT_From_User
|
||||
company_name = ""
|
||||
my_company_data = MYSY_GV.dbname['partnair_account'].find_one(
|
||||
{'recid': str(partner_owner_recid), 'is_partner_admin_account': '1', 'active': '1',
|
||||
'locked': '0'},
|
||||
{'_id': 1, 'nom': 1})
|
||||
|
||||
if (my_company_data and "nom" in my_company_data.keys() and my_company_data['nom']):
|
||||
company_name = my_company_data['nom']
|
||||
|
||||
if (company_name):
|
||||
msg['From'] = str(company_name) + " <" + str(MYSY_GV.O365_SMTP_COUNT_From_User) + ">"
|
||||
else:
|
||||
msg['From'] = str(MYSY_GV.O365_SMTP_COUNT_From_User)
|
||||
|
||||
|
||||
msg['Cc'] = ",".join(tab_email_cc)
|
||||
msg['Bcc'] = ",".join(tab_email_bcc)
|
||||
msg['Subject'] = email_sujet
|
||||
|
|
|
|||
|
|
@ -439,6 +439,7 @@ def CreateTableauEmargement_From_Sequence(diction):
|
|||
query_key['email'] = tmp_val['email']
|
||||
query_key['session_id'] = tmp_val['session_id']
|
||||
query_key['class_internal_url'] = tmp_val['class_internal_url']
|
||||
query_key['session_formation_sequence_id'] = str(session_sequence['_id'])
|
||||
|
||||
query_key['date'] = str(session_sequence['sequence_start'])[0:10]
|
||||
query_key['sequence_start'] = str(session_sequence['sequence_start'])
|
||||
|
|
@ -458,13 +459,17 @@ def CreateTableauEmargement_From_Sequence(diction):
|
|||
new_my_local_data['matin'] = False
|
||||
new_my_local_data['apresmidi'] = False
|
||||
|
||||
if( "time_in_hour" in session_sequence.keys() ):
|
||||
new_my_local_data['time_in_hour'] = session_sequence['time_in_hour']
|
||||
else:
|
||||
delta_time = datetime.strptime(str(session_sequence['sequence_end']), '%d/%m/%Y %H:%M') - datetime.strptime(str(session_sequence['sequence_start']),'%d/%m/%Y %H:%M')
|
||||
|
||||
delta_time_converted_in_hour = round(float(delta_time.total_seconds() / 3600), 2)
|
||||
new_my_local_data['time_in_hour'] = str(delta_time_converted_in_hour)
|
||||
if( "volume_theorique" in session_sequence.keys() and session_sequence['volume_theorique']):
|
||||
new_my_local_data['time_in_hour'] = str(session_sequence['volume_theorique'])
|
||||
else:
|
||||
if( "time_in_hour" in session_sequence.keys() ):
|
||||
new_my_local_data['time_in_hour'] = session_sequence['time_in_hour']
|
||||
else:
|
||||
delta_time = datetime.strptime(str(session_sequence['sequence_end']), '%d/%m/%Y %H:%M') - datetime.strptime(str(session_sequence['sequence_start']),'%d/%m/%Y %H:%M')
|
||||
|
||||
delta_time_converted_in_hour = round(float(delta_time.total_seconds() / 3600), 2)
|
||||
new_my_local_data['time_in_hour'] = str(delta_time_converted_in_hour)
|
||||
|
||||
new_my_local_data['statut'] = "0"
|
||||
new_my_local_data['date_envoi'] = ""
|
||||
|
|
@ -557,29 +562,38 @@ def GetTableauEmargement(diction):
|
|||
RetObject = []
|
||||
for retval in MYSY_GV.dbname['emargement'].find({'session_id':str(session_id),
|
||||
'class_internal_url':str(class_internal_url)}).sort([("date",pymongo.ASCENDING), ("sequence_start",pymongo.ASCENDING), ("sequence_end",pymongo.ASCENDING),]):
|
||||
user = retval
|
||||
if( "statut" not in retval.keys() ):
|
||||
user['statut'] = ""
|
||||
|
||||
if ("date_envoi" not in retval.keys()):
|
||||
user['date_envoi'] = ""
|
||||
# Verifier que la sequence associée est bien valide
|
||||
is_sequence_valide = 0
|
||||
if( "session_formation_sequence_id" in retval.keys() and retval['session_formation_sequence_id']):
|
||||
is_sequence_valide = MYSY_GV.dbname['session_formation_sequence'].count_documents({'_id':ObjectId(str(retval['session_formation_sequence_id'])),
|
||||
'valide':'1', 'locked':'0',
|
||||
'partner_owner_recid':str(partner_recid)})
|
||||
|
||||
if ("date_emargement" not in retval.keys()):
|
||||
user['date_emargement'] = ""
|
||||
if( is_sequence_valide > 0 ):
|
||||
user = retval
|
||||
if( "statut" not in retval.keys() ):
|
||||
user['statut'] = ""
|
||||
|
||||
if ("time_in_hour" not in retval.keys()):
|
||||
delta_time = datetime.strptime(str(user['sequence_end']), '%d/%m/%Y %H:%M') - datetime.strptime(
|
||||
str(user['sequence_start']),'%d/%m/%Y %H:%M')
|
||||
if ("date_envoi" not in retval.keys()):
|
||||
user['date_envoi'] = ""
|
||||
|
||||
delta_time_converted_in_hour = round(float(delta_time.total_seconds() / 3600), 2)
|
||||
user['time_in_hour'] = str(delta_time_converted_in_hour)
|
||||
if ("date_emargement" not in retval.keys()):
|
||||
user['date_emargement'] = ""
|
||||
|
||||
if ("mysy_manual_signature_img" not in retval.keys()):
|
||||
user['mysy_manual_signature_img'] = ""
|
||||
if ("time_in_hour" not in retval.keys()):
|
||||
delta_time = datetime.strptime(str(user['sequence_end']), '%d/%m/%Y %H:%M') - datetime.strptime(
|
||||
str(user['sequence_start']),'%d/%m/%Y %H:%M')
|
||||
|
||||
user['id'] = str(val_tmp)
|
||||
RetObject.append(mycommon.JSONEncoder().encode(user))
|
||||
val_tmp = val_tmp + 1
|
||||
delta_time_converted_in_hour = round(float(delta_time.total_seconds() / 3600), 2)
|
||||
user['time_in_hour'] = str(delta_time_converted_in_hour)
|
||||
|
||||
if ("mysy_manual_signature_img" not in retval.keys()):
|
||||
user['mysy_manual_signature_img'] = ""
|
||||
|
||||
user['id'] = str(val_tmp)
|
||||
RetObject.append(mycommon.JSONEncoder().encode(user))
|
||||
val_tmp = val_tmp + 1
|
||||
|
||||
return True, RetObject
|
||||
except Exception as e:
|
||||
|
|
@ -1014,6 +1028,20 @@ def GerneratePDFEmargementList(diction):
|
|||
local_tmp['sequence_end'] = val_tmp['sequence_end']
|
||||
local_tmp['is_present'] = val_tmp['is_present']
|
||||
|
||||
local_tmp['time_in_hour'] = val_tmp['time_in_hour']
|
||||
|
||||
sequence_title = ""
|
||||
|
||||
if ("session_formation_sequence_id" in val_tmp.keys()):
|
||||
session_formation_sequence_data = MYSY_GV.dbname['session_formation_sequence'].find_one(
|
||||
{'_id': ObjectId(str(val_tmp['session_formation_sequence_id'])),
|
||||
'partner_owner_recid': str(my_partner['recid']), }, {'sequence_title': 1})
|
||||
|
||||
if (session_formation_sequence_data and "sequence_title" in session_formation_sequence_data.keys()):
|
||||
sequence_title = session_formation_sequence_data['sequence_title']
|
||||
|
||||
local_tmp['sequence_title'] = str(sequence_title)
|
||||
|
||||
# Comptabiliser les heures de présence
|
||||
if( str(val_tmp['is_present']) == "True"):
|
||||
if ("time_in_hour" not in val_tmp.keys()):
|
||||
|
|
@ -1039,7 +1067,7 @@ def GerneratePDFEmargementList(diction):
|
|||
tab_users.append(local_tmp)
|
||||
|
||||
total_heure = round(total_heure, 2)
|
||||
#print(' ### tab_users = ' + str(tab_users))
|
||||
print(' ### tab_users = ' + str(tab_users))
|
||||
date_for_tmplate = {}
|
||||
|
||||
# Recuperation des données du partenaire
|
||||
|
|
|
|||
|
|
@ -16,6 +16,7 @@ Formaulaire :
|
|||
=> Max_note (si type = note)
|
||||
"""
|
||||
import ast
|
||||
from operator import itemgetter
|
||||
|
||||
import bson
|
||||
import pymongo
|
||||
|
|
@ -152,7 +153,7 @@ def Add_Update_Question_Formulaire(diction):
|
|||
Verification des input acceptés
|
||||
"""
|
||||
field_list = ['token', 'form_id', 'question_id', 'question', 'type', 'commentaire', 'list_choix', 'max_note',
|
||||
'list_qcm', 'list_case_cocher', 'is_statistic', 'is_alert', 'alert_seuil' ]
|
||||
'list_qcm', 'list_case_cocher', 'is_statistic', 'is_alert', 'alert_seuil', 'rang' ]
|
||||
|
||||
incom_keys = diction.keys()
|
||||
for val in incom_keys:
|
||||
|
|
@ -206,16 +207,7 @@ def Add_Update_Question_Formulaire(diction):
|
|||
mycommon.myprint(" Le type des question est invalide. Les valeurs autorisées "+ MYSY_GV.FORM_QUESTION_TYPE)
|
||||
return False, " Le type des question est invalide. Les valeurs autorisées "+ MYSY_GV.FORM_QUESTION_TYPE
|
||||
|
||||
"""
|
||||
Si la question est utilisée dans le collection 'survey', on revuse
|
||||
"""
|
||||
if( "question_id" in diction.keys() ):
|
||||
is_question_used_in_survey = MYSY_GV.dbname['survey'].count_documents(
|
||||
{'user_response.question_id': str(diction['question_id']),
|
||||
'valide': '1'})
|
||||
if (is_question_used_in_survey > 0):
|
||||
mycommon.myprint(" Il a déjà des réponses d'enquete avec cette question. Impossible de faire la mise à jour ")
|
||||
return False, " Il a déjà des réponses d'enquete avec cette question. Impossible de faire la mise à jour "
|
||||
|
||||
|
||||
"""
|
||||
Verifier que la note maximale est un entier
|
||||
|
|
@ -235,7 +227,7 @@ def Add_Update_Question_Formulaire(diction):
|
|||
return False, " Pour ce type de question, la note maximale doit être supérieure a '1' "
|
||||
|
||||
|
||||
print(" €€€€€€€€€ ")
|
||||
|
||||
|
||||
# si 'question_id', verifier qu'il est valide
|
||||
if( "question_id" in diction.keys() ):
|
||||
|
|
@ -250,7 +242,11 @@ def Add_Update_Question_Formulaire(diction):
|
|||
return False, " L'identifiant de la question est invalide "
|
||||
|
||||
# On doit faire un update
|
||||
"""
|
||||
Si la question a deja réussu des réponses, seule le rang est modifiable
|
||||
"""
|
||||
new_data = {}
|
||||
new_data['_id'] = str(diction['question_id'])
|
||||
new_data['date_update'] = str(datetime.now())
|
||||
new_data['valide'] = "1"
|
||||
new_data['update_by'] = str(my_partner['_id'])
|
||||
|
|
@ -259,6 +255,17 @@ def Add_Update_Question_Formulaire(diction):
|
|||
new_data['type'] = str(diction['type'])
|
||||
new_data['_id'] = str(diction['question_id'])
|
||||
|
||||
if ("rang" in diction.keys()):
|
||||
local_status, local_note_max = mycommon.IsInt(str(diction['rang']).strip())
|
||||
if (local_status is False):
|
||||
mycommon.myprint(
|
||||
" Le rang doit être un nombre entier ")
|
||||
return False, " Le rang doit être un nombre entier"
|
||||
|
||||
new_data['rang'] = mycommon.tryInt(str(diction['rang']))
|
||||
else:
|
||||
new_data['rang'] = 99
|
||||
|
||||
if ("commentaire" in diction.keys()):
|
||||
new_data['commentaire'] = str(diction['commentaire'])
|
||||
else:
|
||||
|
|
@ -288,11 +295,9 @@ def Add_Update_Question_Formulaire(diction):
|
|||
tab_list_choix = []
|
||||
if ("list_choix" in diction.keys() and str(diction['type']) == "qcm"):
|
||||
|
||||
print(" diction[list_choix] = ", diction['list_choix'])
|
||||
|
||||
local_JSON = ast.literal_eval(diction['list_choix'])
|
||||
for local_val in local_JSON :
|
||||
|
||||
print(" local_val ", local_val)
|
||||
reponse_qcm = {}
|
||||
if( "reponse" in local_val):
|
||||
reponse_qcm['reponse_qcm'] = local_val['reponse']
|
||||
|
|
@ -309,11 +314,9 @@ def Add_Update_Question_Formulaire(diction):
|
|||
tab_list_case_cocher = []
|
||||
if ("list_case_cocher" in diction.keys() and str(diction['type']) == "checkbox"):
|
||||
|
||||
print(" diction[list_case_cocher] = ", diction['list_case_cocher'])
|
||||
local_JSON = ast.literal_eval(diction['list_case_cocher'])
|
||||
for local_val in local_JSON :
|
||||
|
||||
print(" local_val ", local_val)
|
||||
reponse_checkbox = {}
|
||||
if( "reponse" in local_val):
|
||||
reponse_checkbox['reponse_checkbox'] = local_val['reponse']
|
||||
|
|
@ -690,6 +693,7 @@ def Get_List_Formulaire(diction):
|
|||
if( "default" not in user.keys()):
|
||||
user['default'] = "0"
|
||||
|
||||
|
||||
RetObject.append(mycommon.JSONEncoder().encode(user))
|
||||
|
||||
return True, RetObject
|
||||
|
|
@ -775,6 +779,10 @@ def Get_List_Formulaire_with_filter(diction):
|
|||
|
||||
if ("default" not in user.keys()):
|
||||
user['default'] = "0"
|
||||
|
||||
if ("rang" not in user.keys()):
|
||||
user['rang'] = "99"
|
||||
|
||||
RetObject.append(mycommon.JSONEncoder().encode(user))
|
||||
|
||||
return True, RetObject
|
||||
|
|
@ -835,14 +843,44 @@ def Get_Given_Formulaire(diction):
|
|||
RetObject = []
|
||||
val_tmp = 0
|
||||
|
||||
|
||||
qry = {"partner_owner_recid": str(my_partner['recid']), 'valide': '1', 'locked': '0', '_id':ObjectId(str(diction['form_id']))}
|
||||
for New_retVal in MYSY_GV.dbname['formulaire'].find(qry).sort([("_id", pymongo.DESCENDING), ]):
|
||||
|
||||
|
||||
for New_retVal in MYSY_GV.dbname['formulaire'].find(qry):
|
||||
user = New_retVal
|
||||
user['id'] = str(val_tmp)
|
||||
val_tmp = val_tmp + 1
|
||||
if ("default" not in user.keys()):
|
||||
user['default'] = "0"
|
||||
|
||||
if( "list_questions" in user.keys()):
|
||||
for tmp in user['list_questions']:
|
||||
if( "rang" not in tmp.keys()):
|
||||
tmp['rang'] = 99
|
||||
|
||||
sorted_data_rang = json.dumps(sorted(user['list_questions'], key=itemgetter('rang')))
|
||||
|
||||
data_list = json.loads(sorted_data_rang)
|
||||
|
||||
for question in data_list:
|
||||
|
||||
if ("_id" in question.keys()):
|
||||
is_question_used_in_survey = MYSY_GV.dbname['survey'].count_documents(
|
||||
{'user_response.question_id': str(question['_id']),
|
||||
'valide': '1'})
|
||||
if (is_question_used_in_survey > 0):
|
||||
# On a déjà des réponses pour cette question
|
||||
question['updatable'] = "0"
|
||||
else:
|
||||
question['updatable'] = "1"
|
||||
|
||||
if( "rang" not in question.keys() ):
|
||||
question['rang'] = "99"
|
||||
|
||||
user['list_questions'] = data_list
|
||||
|
||||
|
||||
RetObject.append(mycommon.JSONEncoder().encode(user))
|
||||
|
||||
return True, RetObject
|
||||
|
|
|
|||
|
|
@ -159,6 +159,8 @@ def Add_Invoice_Paiement(diction):
|
|||
if( "total_header_toutes_taxes" in is_existe_invoice_data.keys() ):
|
||||
total_invoice_amount = is_existe_invoice_data['total_header_toutes_taxes']
|
||||
|
||||
print(" ### 00 total_invoice_amount = ", total_invoice_amount)
|
||||
|
||||
local_status, local_retval = mycommon.IsFloat(total_invoice_amount)
|
||||
if (local_status is False):
|
||||
mycommon.myprint(
|
||||
|
|
@ -167,6 +169,7 @@ def Add_Invoice_Paiement(diction):
|
|||
|
||||
total_invoice_amount_float = local_retval
|
||||
|
||||
print(" ### 00 local_retval (is float) = ", local_retval)
|
||||
|
||||
"""
|
||||
Récuprer les paiement déjà effectué
|
||||
|
|
@ -180,8 +183,6 @@ def Add_Invoice_Paiement(diction):
|
|||
|
||||
list_payment = ast.literal_eval(local_list_paiement_retval[0])
|
||||
|
||||
#print(" Les payement JSON = ", list_payment)
|
||||
|
||||
|
||||
total_payed_amount = "0"
|
||||
if( "total_payed" in list_payment.keys() ):
|
||||
|
|
@ -197,6 +198,7 @@ def Add_Invoice_Paiement(diction):
|
|||
|
||||
total_relicat = total_invoice_amount_float - total_payed_amount_float
|
||||
|
||||
|
||||
if( total_relicat < 0 ):
|
||||
mycommon.myprint(
|
||||
str(inspect.stack()[0][3]) + " Le montant du "+str(total_relicat)+" est supérieur au montant payé "+str(total_payed_amount_float))
|
||||
|
|
@ -235,6 +237,24 @@ def Add_Invoice_Paiement(diction):
|
|||
"""
|
||||
Mettre à jour la facture pour dire si elle est completement payée ou pas
|
||||
"""
|
||||
|
||||
payed_amount = 0
|
||||
for retval in MYSY_GV.dbname['invoice_paiement'].find({'invoice_id': str(diction['invoice_id']),
|
||||
'partner_owner_recid': str(my_partner['recid']),
|
||||
'valide': '1',
|
||||
'locked': '0'}):
|
||||
|
||||
local_status, local_retval = mycommon.IsFloat(str(retval['paiement_amount']))
|
||||
if (local_status is False):
|
||||
mycommon.myprint(
|
||||
str(inspect.stack()[0][3]) + " Impossible d'évaluer les paiements effectués ")
|
||||
return False, " Impossible d'évaluer les paiements effectués "
|
||||
|
||||
payed_amount = payed_amount + local_retval
|
||||
|
||||
remain_to_paye = round(total_invoice_amount_float - payed_amount,2)
|
||||
|
||||
|
||||
update_data = {}
|
||||
update_data['date_update'] = str(datetime.now())
|
||||
update_data['update_by'] = str(my_partner['_id'])
|
||||
|
|
@ -243,8 +263,10 @@ def Add_Invoice_Paiement(diction):
|
|||
|
||||
if( total_relicat == 0):
|
||||
update_data['invoice_paiement_status'] = "2"
|
||||
update_data['reste_to_paye'] = str(remain_to_paye)
|
||||
else:
|
||||
update_data['invoice_paiement_status'] = "1"
|
||||
update_data['reste_to_paye'] = str(remain_to_paye)
|
||||
|
||||
result = MYSY_GV.dbname['partner_invoice_header'].find_one_and_update(
|
||||
{'_id':ObjectId(str(diction['invoice_id'])),
|
||||
|
|
@ -360,6 +382,7 @@ def Update_Invoice_Paiement(diction):
|
|||
'partner_owner_recid': str(my_partner['recid'])})
|
||||
|
||||
|
||||
existing_old_paiement = is_existe_invoice_paiement_data
|
||||
"""
|
||||
Verifier que l'_id de la facture fourni dans diction est bien l'_id de la facture contenu dans le paiement
|
||||
"""
|
||||
|
|
@ -462,8 +485,9 @@ def Update_Invoice_Paiement(diction):
|
|||
"""
|
||||
Tout est ok, alors on enregistre le paiement
|
||||
"""
|
||||
|
||||
mytoken = diction['token']
|
||||
local_paiement_id = diction['_id']
|
||||
|
||||
new_data = diction
|
||||
del diction['token']
|
||||
del diction['_id']
|
||||
|
|
@ -491,6 +515,24 @@ def Update_Invoice_Paiement(diction):
|
|||
"""
|
||||
Mettre à jour la facture pour dire si elle est completement payée ou pas
|
||||
"""
|
||||
|
||||
payed_amount = 0
|
||||
for retval in MYSY_GV.dbname['invoice_paiement'].find({'invoice_id': str(diction['invoice_id']),
|
||||
'partner_owner_recid': str(my_partner['recid']),
|
||||
'valide': '1',
|
||||
'locked': '0'}):
|
||||
|
||||
local_status, local_retval = mycommon.IsFloat(str(retval['paiement_amount']))
|
||||
if (local_status is False):
|
||||
mycommon.myprint(
|
||||
str(inspect.stack()[0][3]) + " Impossible d'évaluer les paiements effectués ")
|
||||
return False, " Impossible d'évaluer les paiements effectués "
|
||||
|
||||
payed_amount = payed_amount + local_retval
|
||||
|
||||
remain_to_paye = round(total_invoice_amount_float - payed_amount, 2)
|
||||
|
||||
|
||||
update_data = {}
|
||||
update_data['date_update'] = str(datetime.now())
|
||||
update_data['update_by'] = str(my_partner['_id'])
|
||||
|
|
@ -499,8 +541,10 @@ def Update_Invoice_Paiement(diction):
|
|||
|
||||
if( total_relicat == 0):
|
||||
update_data['invoice_paiement_status'] = "2"
|
||||
update_data['reste_to_paye'] = str(remain_to_paye)
|
||||
else:
|
||||
update_data['invoice_paiement_status'] = "1"
|
||||
update_data['reste_to_paye'] = str(remain_to_paye)
|
||||
|
||||
result = MYSY_GV.dbname['partner_invoice_header'].find_one_and_update(
|
||||
{'_id':ObjectId(str(diction['invoice_id'])),
|
||||
|
|
@ -512,6 +556,23 @@ def Update_Invoice_Paiement(diction):
|
|||
return_document=ReturnDocument.AFTER
|
||||
)
|
||||
|
||||
"""
|
||||
Ajout l'action dans l'historique
|
||||
"""
|
||||
## Add to log history
|
||||
now = str(datetime.now().strftime("%d/%m/%Y %H:%M:%S"))
|
||||
history_event_dict = {}
|
||||
history_event_dict['token'] = str(mytoken)
|
||||
history_event_dict['related_collection'] = "partner_invoice_header"
|
||||
history_event_dict['related_collection_recid'] = str(diction['invoice_id'])
|
||||
history_event_dict['action_date'] = str(now)
|
||||
history_event_dict['action_description'] = "Mise à jour paiement. Montant : " +str(existing_old_paiement['paiement_amount'])+" ==>" + str(diction['paiement_amount']) + ", Mode : " +str(existing_old_paiement['paiement_mode'])+" ==>"+ str(
|
||||
diction['paiement_mode'])
|
||||
local_status, local_retval = mycommon.Collection_Historique.Add_Historique_Event(history_event_dict)
|
||||
if (local_status is False):
|
||||
mycommon.myprint(
|
||||
" WARNING : Impossible de logguer l'historique pour l'évènement : " + str(history_event_dict))
|
||||
|
||||
return True, " Le paiement a été correctement mise à jour "
|
||||
|
||||
except Exception as e:
|
||||
|
|
@ -711,7 +772,7 @@ def Get_Invoice_Liste_Payement_And_Total_Amount(diction):
|
|||
|
||||
|
||||
"""
|
||||
Cette fonction retounne le montant total payé dans une facture ainsi que
|
||||
Cette fonction retourne le montant total payé dans une facture ainsi que
|
||||
le reste à payer
|
||||
"""
|
||||
def Get_Invoice_Total_Amount_Payed_And_Remaining_Amount(diction):
|
||||
|
|
|
|||
200
main.py
|
|
@ -417,6 +417,20 @@ def get_class():
|
|||
return jsonify(status=status, message=retval)
|
||||
|
||||
|
||||
"""
|
||||
Cette API fonction recuperer les données d'une formation indépendamment de sont affichage sur la marketplace
|
||||
"""
|
||||
@app.route('/myclass/api/get_class_without_marketplace_check/', methods=['POST','GET'])
|
||||
@crossdomain(origin='*')
|
||||
def get_class_without_marketplace_check():
|
||||
# On recupere le corps (payload) de la requete
|
||||
payload = mycommon.strip_dictionary (request.form.to_dict())
|
||||
print(" ### get_class_without_marketplace_check : payload = ",str(payload)+" IP requester = "+str(request.remote_addr))
|
||||
status, retval = cm.get_class_without_marketplace_check(payload)
|
||||
return jsonify(status=status, message=retval)
|
||||
|
||||
|
||||
|
||||
|
||||
@app.route('/myclass/api/get_class_for_partner_catalog/', methods=['POST','GET'])
|
||||
@crossdomain(origin='*')
|
||||
|
|
@ -531,7 +545,7 @@ def get_partner_class_Without_Scope_Action():
|
|||
def update_class():
|
||||
# On recupere le corps (payload) de la requete
|
||||
payload = mycommon.strip_dictionary (request.form.to_dict())
|
||||
print(" ### update_class payload = (trop long cherif) " )
|
||||
print(" ### update_class payload = (trop long cherif) ", payload )
|
||||
status, retval, class_id = cm.update_class(payload)
|
||||
|
||||
|
||||
|
|
@ -3076,6 +3090,40 @@ def ManualSendInvoiceEmailRIB_CIC_JMJFormation():
|
|||
|
||||
|
||||
|
||||
"""
|
||||
API Creation manuelle d'une facture avec RIB CIC pour France Active - perso
|
||||
"""
|
||||
@app.route('/myclass/api/ManualSendInvoiceEmailRIB_CIC_France_Active/', methods=['POST','GET'])
|
||||
@crossdomain(origin='*')
|
||||
def ManualSendInvoiceEmailRIB_CIC_France_Active():
|
||||
# On recupere le corps (payload) de la requete
|
||||
payload = mycommon.strip_dictionary (request.form.to_dict())
|
||||
print(" ### ManualSendInvoiceEmailRIB_CIC_France_Active : payload = ",str(payload))
|
||||
localStatus, message= emails.ManualSendInvoiceEmailRIB_CIC_France_Active(payload)
|
||||
return jsonify(status=localStatus, message=message )
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
"""
|
||||
API Creation manuelle d'une facture avec RIB CIC pour Bureau Vallée - perso
|
||||
"""
|
||||
@app.route('/myclass/api/ManualSendInvoiceEmailRIB_CIC_BureauVallee/', methods=['POST','GET'])
|
||||
@crossdomain(origin='*')
|
||||
def ManualSendInvoiceEmailRIB_CIC_BureauVallee():
|
||||
# On recupere le corps (payload) de la requete
|
||||
payload = mycommon.strip_dictionary (request.form.to_dict())
|
||||
print(" ### ManualSendInvoiceEmailRIB_CIC_BureauVallee : payload = ",str(payload))
|
||||
localStatus, message= emails.ManualSendInvoiceEmailRIB_CIC_BureauVallee(payload)
|
||||
return jsonify(status=localStatus, message=message )
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
"""
|
||||
API de recuperation au formation CSV de la liste des inscrits à une formation
|
||||
avec les statuts (validé ou pas)
|
||||
|
|
@ -7812,6 +7860,21 @@ def Get_Session_Sequence_List():
|
|||
return jsonify(status=status, message=retval, nb_sequence=nb_sequence)
|
||||
|
||||
|
||||
|
||||
"""
|
||||
API qui recupere le nombre de séquences d'une session de formation
|
||||
"""
|
||||
@app.route('/myclass/api/Get_Session_Nb_Sequence/', methods=['POST','GET'])
|
||||
@crossdomain(origin='*')
|
||||
def Get_Session_Nb_Sequence():
|
||||
# On recupere le corps (payload) de la requete
|
||||
payload = mycommon.strip_dictionary (request.form.to_dict())
|
||||
print(" ### Get_Session_Nb_Sequence payload = ",payload)
|
||||
status, retval = Session_Formation_Sequence.Get_Session_Nb_Sequence(payload)
|
||||
return jsonify(status=status, message=retval)
|
||||
|
||||
|
||||
|
||||
"""
|
||||
API qui recupere les données d'une séquence d'une session de formation
|
||||
"""
|
||||
|
|
@ -8300,8 +8363,8 @@ def Get_Action_Historique_List():
|
|||
# On recupere le corps (payload) de la requete
|
||||
payload = mycommon.strip_dictionary (request.form.to_dict())
|
||||
print(" ### Get_Action_Historique_List payload = ",payload)
|
||||
status, retval = Collection_Historique.Get_Action_Historique_List(payload)
|
||||
return jsonify(status=status, message=retval)
|
||||
status, retval, max_line = Collection_Historique.Get_Action_Historique_List(payload)
|
||||
return jsonify(status=status, message=retval, max_line=max_line)
|
||||
|
||||
|
||||
"""
|
||||
|
|
@ -9871,6 +9934,21 @@ def Get_Given_Survey_Data_No_Token():
|
|||
return jsonify(status=status, message=retval)
|
||||
|
||||
|
||||
"""
|
||||
API pour recuperer les données d'une enquete en passant par un QR Code
|
||||
"""
|
||||
@app.route('/myclass/api/Get_Given_Survey_Data_From_QR_Code_No_Token/', methods=['POST','GET'])
|
||||
@crossdomain(origin='*')
|
||||
def Get_Given_Survey_Data_From_QR_Code_No_Token():
|
||||
# On recupere le corps (payload) de la requete
|
||||
payload = mycommon.strip_dictionary (request.form.to_dict())
|
||||
print(" ### Get_Given_Survey_Data_From_QR_Code_No_Token payload = ",payload)
|
||||
status, retval = survey_mgt.Get_Given_Survey_Data_From_QR_Code_No_Token(payload)
|
||||
return jsonify(status=status, message=retval)
|
||||
|
||||
|
||||
|
||||
|
||||
"""
|
||||
API pour enregistrer les resultat d'une enquete
|
||||
"""
|
||||
|
|
@ -9914,6 +9992,62 @@ def Init_Survey_Tab_For_All_Session_Inscrit():
|
|||
|
||||
|
||||
|
||||
"""
|
||||
API pour initialiset (suppression et creation ) d'une enquete pour tous
|
||||
les inscrits d'un session.
|
||||
algorithm :
|
||||
On supprime tous enregistrements avec le clé :
|
||||
- session_id,
|
||||
La difference avec les autre qu'il nous ajouter 2 informations à la volée :
|
||||
|
||||
- survey_internal_code : pour identifier toutes les lignes relative à la meme évaluation
|
||||
- survey_type = 'specific'
|
||||
"""
|
||||
@app.route('/myclass/api/Init_Specific_Survey_Tab_For_All_Session_Inscrit/', methods=['POST','GET'])
|
||||
@crossdomain(origin='*')
|
||||
def Init_Specific_Survey_Tab_For_All_Session_Inscrit():
|
||||
# On recupere le corps (payload) de la requete
|
||||
payload = mycommon.strip_dictionary (request.form.to_dict())
|
||||
print(" ### Init_Specific_Survey_Tab_For_All_Session_Inscrit payload = ",payload)
|
||||
status, retval, survey_internal_code = survey_mgt.Init_Specific_Survey_Tab_For_All_Session_Inscrit(payload)
|
||||
return jsonify(status=status, message=retval, survey_internal_code=survey_internal_code)
|
||||
|
||||
|
||||
|
||||
"""
|
||||
API pour ajouter une évaluation spécifique
|
||||
"""
|
||||
@app.route('/myclass/api/Add_Specific_Survey_Tab_For_All_Session_Inscrit/', methods=['POST','GET'])
|
||||
@crossdomain(origin='*')
|
||||
def Add_Specific_Survey_Tab_For_All_Session_Inscrit():
|
||||
# On recupere le corps (payload) de la requete
|
||||
payload = mycommon.strip_dictionary (request.form.to_dict())
|
||||
print(" ### Add_Specific_Survey_Tab_For_All_Session_Inscrit payload = ",payload)
|
||||
status, retval, survey_internal_code = survey_mgt.Add_Specific_Survey_Tab_For_All_Session_Inscrit(payload)
|
||||
return jsonify(status=status, message=retval, survey_internal_code=survey_internal_code)
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
"""
|
||||
Cette API recupere l'internal_code des evaluations spécifiques
|
||||
d'une session de formation
|
||||
"""
|
||||
@app.route('/myclass/api/Get_List_Specific_Survey_Internal_Code/', methods=['POST','GET'])
|
||||
@crossdomain(origin='*')
|
||||
def Get_List_Specific_Survey_Internal_Code():
|
||||
# On recupere le corps (payload) de la requete
|
||||
payload = mycommon.strip_dictionary (request.form.to_dict())
|
||||
print(" ### Get_List_Specific_Survey_Internal_Code payload = ",payload)
|
||||
status, retval = survey_mgt.Get_List_Specific_Survey_Internal_Code(payload)
|
||||
return jsonify(status=status, message=retval)
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
"""
|
||||
API pour initialiset (suppression et creation ) d'une enquete pour tous
|
||||
|
|
@ -10363,7 +10497,6 @@ def Decale_Session_Sequence_X_days():
|
|||
|
||||
|
||||
|
||||
|
||||
"""
|
||||
API Pour ajouter une categorie de formation
|
||||
"""
|
||||
|
|
@ -11481,6 +11614,35 @@ def Create_Emargement_QR_Code_From_Inscription(token, session_id, tab_emargement
|
|||
return False
|
||||
|
||||
|
||||
|
||||
|
||||
"""
|
||||
API pour créer un fichier QR code pour les demandes d'évaluation
|
||||
"""
|
||||
@app.route('/myclass/api/Create_Evaluation_QR_Code_From_Survey/<token>/<session_id>/<tab_survey_ids>/<type_eval>', methods=['POST','GET'])
|
||||
@crossdomain(origin='*')
|
||||
def Create_Evaluation_QR_Code_From_Survey(token, session_id, tab_survey_ids, type_eval):
|
||||
# On recupere le corps (payload) de la requete
|
||||
payload = mycommon.strip_dictionary (request.form.to_dict())
|
||||
payload = {}
|
||||
payload['token'] = str(token)
|
||||
payload['session_id'] = str(session_id)
|
||||
payload['tab_survey_ids'] = str(tab_survey_ids)
|
||||
payload['type_eval'] = str(type_eval)
|
||||
|
||||
print(" ### Create_Evaluation_QR_Code_From_Survey : payload = ",str(payload))
|
||||
|
||||
localStatus, response= survey_mgt.Create_Evaluation_QR_Code_From_Survey(payload)
|
||||
if(localStatus ):
|
||||
return response
|
||||
else:
|
||||
return False
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
"""
|
||||
API :
|
||||
22/06/2024 - Nouvelle version d'envoi des demandes d'emargement par email
|
||||
|
|
@ -11674,6 +11836,20 @@ def Delete_List_Survey():
|
|||
|
||||
|
||||
|
||||
"""
|
||||
API pour recuperer la l'url d'un survey en fournissant le session_id et l'email de l'inscrit
|
||||
"""
|
||||
@app.route('/myclass/api/Get_Survey_Url_From_SessionId_Email_No_Token/', methods=['POST','GET'])
|
||||
@crossdomain(origin='*')
|
||||
def Get_Survey_Url_From_SessionId_Email_No_Token():
|
||||
# On recupere le corps (payload) de la requete
|
||||
payload = mycommon.strip_dictionary (request.form.to_dict())
|
||||
print(" ### Get_Survey_Url_From_SessionId_Email_No_Token payload = ",payload)
|
||||
status, retval = survey_mgt.Get_Survey_Url_From_SessionId_Email_No_Token(payload)
|
||||
return jsonify(status=status, message=retval)
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
"""
|
||||
|
|
@ -12123,7 +12299,7 @@ API permet de recuperer les data du partenaire proprietaire d'un sous domaine
|
|||
def Get_Partner_Data_From_Subdomain():
|
||||
# On recupere le corps (payload) de la requete
|
||||
payload = mycommon.strip_dictionary (request.form.to_dict())
|
||||
print(" ### Get_Partner_Data_From_Subdomain payload = ",payload)
|
||||
print(" ### Get_Partner_Data_From_Subdomain payload iiiiiiii = ",payload)
|
||||
status, retval = mycommon.Get_Partner_Data_From_Subdomain(payload)
|
||||
return jsonify(status=status, message=retval)
|
||||
|
||||
|
|
@ -13833,6 +14009,20 @@ def JMJ_Repise_Factures():
|
|||
return jsonify(status=localStatus, message=message )
|
||||
|
||||
|
||||
"""
|
||||
Test reprise facture JMJ update inscription invoice status
|
||||
"""
|
||||
@app.route('/myclass/api/JMJ_Repise_Factures_Update_Inscription_Status/', methods=['POST','GET'])
|
||||
@crossdomain(origin='*')
|
||||
def JMJ_Repise_Factures_Update_Inscription_Status():
|
||||
# On recupere le corps (payload) de la requete
|
||||
payload = mycommon.strip_dictionary (request.form.to_dict())
|
||||
print(" ### JMJ_Repise_Factures_Update_Inscription_Status : payload = ",payload)
|
||||
localStatus, message= tools_cherif.JMJ_Repise_Factures_Update_Inscription_Status(payload)
|
||||
return jsonify(status=localStatus, message=message )
|
||||
|
||||
|
||||
|
||||
if __name__ == '__main__':
|
||||
print(" debut api")
|
||||
|
||||
|
|
|
|||
|
|
@ -104,6 +104,10 @@ def Add_Update_Partner_Basic_Setup(diction):
|
|||
if (local_status is not True):
|
||||
return local_status, my_partner
|
||||
|
||||
print(" ### str(diction['config_name']) = ", str(diction['config_name']))
|
||||
|
||||
print(" ### MYSY_GV.PARTNER_BASE_CONFIG_NAME = ", str(MYSY_GV.PARTNER_BASE_CONFIG_NAME))
|
||||
|
||||
|
||||
if(str(diction['config_name']) not in MYSY_GV.PARTNER_BASE_CONFIG_NAME):
|
||||
mycommon.myprint(
|
||||
|
|
@ -290,7 +294,7 @@ def Get_List_Partner_Basic_Setup(diction):
|
|||
if(len(tab_related_collection) > 0 ):
|
||||
qry = {'$and': [{'partner_owner_recid':str(my_partner['recid']), 'valide':'1', 'locked':'0',}, filt_related_collection]}
|
||||
|
||||
|
||||
print(" ### Get_List_Partner_Basic_Setup QRY = ", qry)
|
||||
for New_retVal in MYSY_GV.dbname['base_partner_setup'].find(qry ):
|
||||
if( str(New_retVal['config_name']) == "smtp_user_pwd"):
|
||||
New_retVal['config_value'] = New_retVal['config_value'][:2]+"...."+str(New_retVal['config_value'])[-2:]
|
||||
|
|
|
|||
|
|
@ -202,7 +202,7 @@ def Invoice_Partner_Order(diction):
|
|||
|
||||
|
||||
# Récuperation de la sequence de l'objet "partner_invoice_header" dans la collection : "mysy_sequence"
|
||||
retval_sequence_invoice = MYSY_GV.dbname['mysy_sequence'].find_one({'partner_invoice_header': 'partner_order_header',
|
||||
retval_sequence_invoice = MYSY_GV.dbname['mysy_sequence'].find_one({'related_mysy_object': 'partner_invoice_header',
|
||||
'valide': '1', 'partner_owner_recid': str(
|
||||
my_partner['recid'])})
|
||||
|
||||
|
|
|
|||
|
|
@ -4588,8 +4588,8 @@ def Get_Dictionnary_data_For_Template(diction):
|
|||
'distantiel', 'presentiel', 'session_ondemande', 'nb_participant',
|
||||
'prix_session', 'titre', 'location_type', 'is_bpf', 'formateur_id', 'adresse',
|
||||
'code_postal', 'ville', 'pays', 'date_debut_inscription', 'date_fin_inscription',
|
||||
'formateur_nom_prenom', 'session_formation_titre', 'session_formation_objectif',
|
||||
'session_formation_description']
|
||||
'formateur_nom_prenom', 'formateur_email', 'session_formation_titre', 'session_formation_objectif',
|
||||
'session_formation_description', 'nb_participant']
|
||||
list_session_data = []
|
||||
tab_session_id = diction['list_session_id']
|
||||
|
||||
|
|
@ -4628,6 +4628,8 @@ def Get_Dictionnary_data_For_Template(diction):
|
|||
|
||||
# Recuperation des données du formation
|
||||
formateur_nom_prenom = ""
|
||||
formateur_email = ""
|
||||
|
||||
# Si il y a un code formateur_id, alors on va recuperer les nom et prenom du formation
|
||||
if ("formateur_id" in session_data.keys() and session_data['formateur_id']):
|
||||
|
||||
|
|
@ -4641,7 +4643,11 @@ def Get_Dictionnary_data_For_Template(diction):
|
|||
if (formateur_data and "nom" in formateur_data.keys() and "prenom" in formateur_data.keys()):
|
||||
formateur_nom_prenom = str(formateur_data['nom']) + " " + str(formateur_data['prenom'])
|
||||
|
||||
if (formateur_data and "email" in formateur_data.keys()):
|
||||
formateur_email = str(formateur_data['email'])
|
||||
|
||||
session_data['formateur_nom_prenom'] = formateur_nom_prenom
|
||||
session_data['formateur_email'] = formateur_email
|
||||
|
||||
new_session_data = {}
|
||||
for champ in session_liste_champ:
|
||||
|
|
@ -4806,7 +4812,8 @@ def Get_Dictionnary_data_For_Template(diction):
|
|||
list_myclass_data = []
|
||||
tab_myclass_id = diction['list_class_id']
|
||||
|
||||
myclass_liste_champ = ['certif', 'cpf', 'metier', 'objectif', 'title', 'duration', 'duration_unit', ]
|
||||
myclass_liste_champ = ['certif', 'cpf', 'metier', 'objectif', 'title', 'duration', 'duration_unit',
|
||||
'methode_pedagogique' , 'suivi_eval']
|
||||
|
||||
for myclass_data in MYSY_GV.dbname['myclass'].find({'_id': {'$in': tab_myclass_id, },
|
||||
'valide': '1',
|
||||
|
|
@ -6968,25 +6975,38 @@ def Get_Partner_Data_From_Subdomain(diction):
|
|||
|
||||
|
||||
|
||||
|
||||
print(" ## QRY = ", {'subdomaine_catalog_pub':diction['subdomain'],
|
||||
'active':'1',
|
||||
'locked':'0',
|
||||
'firstconnexion':'0',
|
||||
'is_partner_admin_account': '1'
|
||||
})
|
||||
partnair_data_count = MYSY_GV.dbname['partnair_account'].count_documents({'subdomaine_catalog_pub':diction['subdomain'],
|
||||
'active':'1',
|
||||
'locked':'0',
|
||||
'firstconnexion':'0'
|
||||
'firstconnexion':'0',
|
||||
'is_partner_admin_account':'1'
|
||||
})
|
||||
if( partnair_data_count != 1 ):
|
||||
myprint(
|
||||
str(inspect.stack()[0][3]) + " Sous Domaine invalide ")
|
||||
str(inspect.stack()[0][3]) + " Sous Domaine invalide 11 ")
|
||||
return False, " Sous Domaine invalide"
|
||||
|
||||
RetObject = []
|
||||
val_tmp = 0
|
||||
|
||||
# print(" ### data_cle = ", data_cle)
|
||||
print(" ## QTY2 = ", {'subdomaine_catalog_pub': diction['subdomain'],
|
||||
'active': '1',
|
||||
'locked': '0',
|
||||
'firstconnexion': '0',
|
||||
'is_partner_admin_account': '1'
|
||||
})
|
||||
|
||||
for retval in MYSY_GV.dbname['partnair_account'].find({'subdomaine_catalog_pub': diction['subdomain'],
|
||||
'active': '1',
|
||||
'locked': '0',
|
||||
'firstconnexion': '0'
|
||||
'firstconnexion': '0','is_partner_admin_account':'1'
|
||||
}, {'_id':1, 'recid':1, 'nom':1}):
|
||||
user = retval
|
||||
user['id'] = str(val_tmp)
|
||||
|
|
@ -7880,6 +7900,7 @@ def Push_Document_To_ENT_For_Inscrit(tab_files, Folder, diction):
|
|||
if (str(partner_own_smtp_value) == "1"):
|
||||
msg.attach(html_mime)
|
||||
msg['From'] = partner_SMTP_COUNT_From_User
|
||||
|
||||
msg['Bcc'] = "contact@mysy-training.com"
|
||||
msg['Subject'] = sujetHtml
|
||||
msg['to'] = str(email)
|
||||
|
|
@ -7894,7 +7915,22 @@ def Push_Document_To_ENT_For_Inscrit(tab_files, Folder, diction):
|
|||
|
||||
else:
|
||||
msg.attach(html_mime)
|
||||
msg['From'] = partner_SMTP_COUNT_From_User
|
||||
#msg['From'] = partner_SMTP_COUNT_From_User
|
||||
company_name = ""
|
||||
my_company_data = MYSY_GV.dbname['partnair_account'].find_one(
|
||||
{'recid': str(my_partner['recid']), 'is_partner_admin_account': '1', 'active': '1',
|
||||
'locked': '0'},
|
||||
{'_id': 1, 'nom': 1})
|
||||
|
||||
if (my_company_data and "nom" in my_company_data.keys() and my_company_data['nom']):
|
||||
company_name = my_company_data['nom']
|
||||
|
||||
if (company_name):
|
||||
msg['From'] = str(company_name) + " <" + str(partner_SMTP_COUNT_From_User) + ">"
|
||||
else:
|
||||
msg['From'] = str(partner_SMTP_COUNT_From_User)
|
||||
|
||||
|
||||
msg['Bcc'] = "contact@mysy-training.com"
|
||||
msg['Subject'] = sujetHtml
|
||||
msg['to'] = str(email)
|
||||
|
|
|
|||
|
|
@ -939,6 +939,7 @@ def Update_Ressource_Humaine(diction):
|
|||
if diction['profil']:
|
||||
profil = diction['profil']
|
||||
|
||||
#print(" ## QRY addupdate = ", {'profil_nom': str(profil), 'valide': '1', 'locked': '0'})
|
||||
Rh_profil_count = MYSY_GV.dbname['ressource_humaine_profil'].count_documents(
|
||||
{'profil_nom': str(profil), 'valide': '1', 'locked': '0'})
|
||||
|
||||
|
|
@ -1478,7 +1479,7 @@ def Get_List_Ressource_Humaine_with_filter(diction):
|
|||
Verification des input acceptés
|
||||
"""
|
||||
field_list = ['token', 'nom', 'email', 'formation',
|
||||
'session', 'type_rh']
|
||||
'session', 'type_rh', 'competence']
|
||||
|
||||
incom_keys = diction.keys()
|
||||
for val in incom_keys:
|
||||
|
|
@ -1519,28 +1520,43 @@ def Get_List_Ressource_Humaine_with_filter(diction):
|
|||
return False, str(inspect.stack()[0][3]) + " - impossible de récupérer les données de l'utilisateur. "
|
||||
|
||||
filt_nom = {}
|
||||
if ("nom" in diction.keys()):
|
||||
if ("nom" in diction.keys() and diction['nom']):
|
||||
filt_nom = {'nom': {'$regex': str(diction['nom']), "$options": "i"}}
|
||||
|
||||
filt_type_rh = {}
|
||||
if ("type_rh" in diction.keys()):
|
||||
if ("type_rh" in diction.keys() and diction['type_rh']):
|
||||
filt_type_rh = {'type_rh': str(diction['type_rh'])}
|
||||
|
||||
|
||||
filt_email = {}
|
||||
if ("email" in diction.keys()):
|
||||
if ("email" in diction.keys() and diction['email']):
|
||||
filt_email = {
|
||||
'email': {'$regex': str(diction['email']), "$options": "i"}}
|
||||
|
||||
sub_filt_formation = {}
|
||||
if ("formation" in diction.keys()):
|
||||
if ("formation" in diction.keys() and diction['formation']):
|
||||
sub_filt_formation = {
|
||||
'external_code': {'$regex': str(diction['formation']), "$options": "i"}, 'partner_owner_recid':str(my_partner['recid'])}
|
||||
|
||||
sub_filt_session = {}
|
||||
if ("session" in diction.keys()):
|
||||
if ("session" in diction.keys() and diction['session']):
|
||||
sub_filt_session = { 'code_session': {'$regex': str(diction['session']), "$options": "i"}, 'partner_owner_recid':str(my_partner['recid'])}
|
||||
|
||||
filt_competence = {}
|
||||
if( "competence" in diction.keys() and diction['competence']):
|
||||
# Aller chercher la liste des employés (ressources humaines) ayant ces compétence
|
||||
tab_competence_ids_split = str(diction['competence']).split(",")
|
||||
tab_competence_ids = []
|
||||
tab_list_competence = []
|
||||
for tmp in tab_competence_ids_split:
|
||||
if( tmp ):
|
||||
tab_competence_ids.append(str(tmp).strip())
|
||||
local_node = {}
|
||||
local_node['list_competence._id'] = str(tmp).strip()
|
||||
tab_list_competence.append(local_node)
|
||||
|
||||
filt_competence = {"$and":tab_list_competence}
|
||||
|
||||
|
||||
|
||||
"""
|
||||
|
|
@ -1549,7 +1565,7 @@ def Get_List_Ressource_Humaine_with_filter(diction):
|
|||
"""
|
||||
filt_session = {}
|
||||
Lists_session_id = []
|
||||
if ("session" in diction.keys()):
|
||||
if ("session" in diction.keys() and diction['session']):
|
||||
for Lists_session in MYSY_GV.dbname['session_formation'].find(sub_filt_session, {'_id':1}):
|
||||
Lists_session_id.append(str(Lists_session['_id']))
|
||||
|
||||
|
|
@ -1566,7 +1582,7 @@ def Get_List_Ressource_Humaine_with_filter(diction):
|
|||
"""
|
||||
filt_formation = {}
|
||||
Lists_formation_id = []
|
||||
if ("formation" in diction.keys()):
|
||||
if ("formation" in diction.keys() and diction['formation']):
|
||||
for Lists_formation in MYSY_GV.dbname['myclass'].find(sub_filt_formation, {'_id': 1}):
|
||||
Lists_formation_id.append(str(Lists_formation['_id']))
|
||||
|
||||
|
|
@ -1589,7 +1605,7 @@ def Get_List_Ressource_Humaine_with_filter(diction):
|
|||
data_cle['valide'] = "1"
|
||||
|
||||
find_qry = {'$and':[{'partner_recid': str(my_partner['recid']), 'valide':'1', 'locked':'0', 'is_partner_admin_account':'0' }, filt_nom, filt_email,
|
||||
filt_type_rh] }
|
||||
filt_type_rh, filt_competence] }
|
||||
|
||||
|
||||
new_myquery = [{'$match': find_qry},
|
||||
|
|
@ -1610,8 +1626,8 @@ def Get_List_Ressource_Humaine_with_filter(diction):
|
|||
}
|
||||
]
|
||||
|
||||
#print(" ##### new_myquery aa = ", new_myquery)
|
||||
#print(" ##### find_qry aa = ", find_qry)
|
||||
print(" ##### new_myquery aa = ", new_myquery)
|
||||
print(" ##### find_qry aa = ", find_qry)
|
||||
|
||||
New_RetObject = []
|
||||
New_val_tmp = 1
|
||||
|
|
@ -5359,7 +5375,7 @@ def Add_Update_RH_Competence(diction):
|
|||
"""
|
||||
Verification des input acceptés
|
||||
"""
|
||||
field_list = ['token', 'competence_id', 'competence', 'niveau', 'rh_id']
|
||||
field_list = ['token', 'competence_id', 'competence', 'niveau', 'rh_id', 'new_competence_id']
|
||||
|
||||
incom_keys = diction.keys()
|
||||
for val in incom_keys:
|
||||
|
|
@ -5448,7 +5464,6 @@ def Add_Update_RH_Competence(diction):
|
|||
return True, " La compétence a été mise à jour"
|
||||
|
||||
|
||||
|
||||
else:
|
||||
# Il s'agit de la creation d'une competence
|
||||
new_data = {}
|
||||
|
|
@ -5459,8 +5474,11 @@ def Add_Update_RH_Competence(diction):
|
|||
new_data['competence'] = str(diction['competence'])
|
||||
new_data['niveau'] = str(diction['niveau'])
|
||||
|
||||
new_competence_id = secrets.token_hex(5)
|
||||
new_data['_id'] = new_competence_id
|
||||
if( "new_competence_id" in diction.keys() and diction['new_competence_id']):
|
||||
new_data['_id'] = diction['new_competence_id']
|
||||
else:
|
||||
new_competence_id = secrets.token_hex(5)
|
||||
new_data['_id'] = new_competence_id
|
||||
|
||||
|
||||
update = MYSY_GV.dbname['ressource_humaine'].update_one({'_id': ObjectId(str(diction['rh_id'])),
|
||||
|
|
|
|||
1204
survey_mgt.py
|
|
@ -1,99 +0,0 @@
|
|||
%PDF-1.4
|
||||
%“Œ‹ž ReportLab Generated PDF document http://www.reportlab.com
|
||||
1 0 obj
|
||||
<<
|
||||
/F1 2 0 R /F2 3 0 R /F3 4 0 R
|
||||
>>
|
||||
endobj
|
||||
2 0 obj
|
||||
<<
|
||||
/BaseFont /Helvetica /Encoding /WinAnsiEncoding /Name /F1 /Subtype /Type1 /Type /Font
|
||||
>>
|
||||
endobj
|
||||
3 0 obj
|
||||
<<
|
||||
/BaseFont /Helvetica-Bold /Encoding /WinAnsiEncoding /Name /F2 /Subtype /Type1 /Type /Font
|
||||
>>
|
||||
endobj
|
||||
4 0 obj
|
||||
<<
|
||||
/BaseFont /Helvetica-Oblique /Encoding /WinAnsiEncoding /Name /F3 /Subtype /Type1 /Type /Font
|
||||
>>
|
||||
endobj
|
||||
5 0 obj
|
||||
<<
|
||||
/Contents 10 0 R /MediaBox [ 0 0 595.2756 841.8898 ] /Parent 9 0 R /Resources <<
|
||||
/Font 1 0 R /ProcSet [ /PDF /Text /ImageB /ImageC /ImageI ]
|
||||
>> /Rotate 0 /Trans <<
|
||||
|
||||
>>
|
||||
/Type /Page
|
||||
>>
|
||||
endobj
|
||||
6 0 obj
|
||||
<<
|
||||
/Contents 11 0 R /MediaBox [ 0 0 595.2756 841.8898 ] /Parent 9 0 R /Resources <<
|
||||
/Font 1 0 R /ProcSet [ /PDF /Text /ImageB /ImageC /ImageI ]
|
||||
>> /Rotate 0 /Trans <<
|
||||
|
||||
>>
|
||||
/Type /Page
|
||||
>>
|
||||
endobj
|
||||
7 0 obj
|
||||
<<
|
||||
/PageMode /UseNone /Pages 9 0 R /Type /Catalog
|
||||
>>
|
||||
endobj
|
||||
8 0 obj
|
||||
<<
|
||||
/Author () /CreationDate (D:20250713203048+02'00') /Creator (\(unspecified\)) /Keywords () /ModDate (D:20250713203048+02'00') /Producer (xhtml2pdf <https://github.com/xhtml2pdf/xhtml2pdf/>)
|
||||
/Subject () /Title () /Trapped /False
|
||||
>>
|
||||
endobj
|
||||
9 0 obj
|
||||
<<
|
||||
/Count 2 /Kids [ 5 0 R 6 0 R ] /Type /Pages
|
||||
>>
|
||||
endobj
|
||||
10 0 obj
|
||||
<<
|
||||
/Filter [ /ASCII85Decode /FlateDecode ] /Length 2219
|
||||
>>
|
||||
stream
|
||||
Gb"/(>?BQ=&:WeDbT#e!(gg`6iFuLM4mbfIKQLQZHT8lCJpMf9/NK[-^*D<+m)2JcKjFD'E_:.>1E+Mc1\rF8T];*,Ies_mLG><)).8gcSq>A?\hG1U2a7(eFGp0Y@^Xn<XKL#pTVq+Efs`MsX\9[QC?-V.X':<m_iH$ACb5=$[@UmG3!."EE#,pES%>%?GLb5>3eIpTKCLl;s!A2b<<h5:S)Lr,c0kRP1JHQRbc^9ifJofJASrDD(k*GS].,.#)c,clp6ogPRbl3J/]J`XbqO/c>-=`lAh31#L=^p$fAfZECVZ!nG;K);kJ<u"=2WFPpM0V<1q`DImdTc#)[nhg"YV&NCc\o)CIZW)]D9aC8`tLOQlf39"3n)e$P,TnnZ8,iADeg9Q(K6H$WK04=,-M"kb7nG?E^4&nG!I.dk'*?<R/moS)t*rcbW"P),i"E.W\0_\R[<KWKakK1tL+@7o4i9lM"=!m!bt*eOCM4SCNNd8mu[$9P5V_4Mi4<QmQN8"A<4F>u>k-m)gdmFMMOeA=hr4'?etu-Ot,/7E\O1_C_4G:t<*d,-/eV!u(s<fuqoFroAjFOhidB"^<[c-9Iq:!t,uAj6Ep18TF!%2jYWd?>Xf)AhamNTjr[pX_[#o&^&!9H!k&t4-DbCPf4WgaJ!l\S2`/sD6DYr3-_#mF<!=pNp@ai46RlF"eN+u<(baVm_Ne$4jEBfnR#K'f'ACI%U".baL/5`)V1s"6:6J!"G@I1ejC6lTT1I3SARe:,T'4*NF6lulV_S]\3s^^d3bEBHDZte)js13<u)OY[7t[Ae#R>oeF?[qntm@>%,Wj=:R-I5Mf+;1@%N&t%3cGN`ZL7uO;F)B-W/EM2@t40^mjg2\,9:^5\o&D.<a1bLbJSk':]4\_NHO+h1;TBZg3j`.hn!'e&.u4/bI8!.;dHL8Zq^e)u4(Tnbf&UuoCTm0>LTG2l46u8l5%+,eB@5*i=#CdbULHI3."juP/hfHM"irL.+F(e;/^n0CY@FrHG<Zo"=^)8[#dWe*+21Tl!dMUp.6WeU0uu6[O!4sVaPD5PE'V+&2fKbP<4uZ_6\F$]VNAd9X4i`32fTNr@N*,%l=.[H]9"kE8rQB/6^#ofblc$r)'10[fhW2-XEGcG0Ij&Fqs\a5]X;OlT(>p:WnjZjWp!\>S[G7DfS*RZrA=*'X(jRWHfOCRV,Yb4RK.=[gJT&1R7E.MJOtV5(L9J@1LN&?#O;3h9sNr=B67YR-'>")^)B]D9R"fV*=l5ia0a!O%1Uq1flCN.$&.nA^@u)3-%V#o]`g?PfA0Yd7^d(P*8+sNVMW=MUrb/6;:IAqLuc-rb2u-5+CPbtL-3bC&!r/$SS3G*GYAfa?69^!/=Ed3)<E6M)I8FY;`7A,!QB@E9sQTf8A>Q#e(2?9^NXW5^;\WghMts/Y-u^-?9BGgWd9M0<K2#)k!eGZ9-6BqC;4"2i>hG:Q!6'X5$u:q9Q`*qOI=O:``7p1W/SQUNR#Pq:&.5tAS6h)4QBU&0=d`uQ+Tj<gB>ddCMs%+IrFDZm>>%:`^co7I@l-#CQKIO$3AOMrmT5:I2T0EOf6Q?1fZQ/eD[LnE11p:%6E4QaQttnhrm^>.Og_Ci^D+X`6*$MXg]41bia[XTW>(%HYP)gc)koldhl%P<#+&9iN/^a@4rf;Z.=l49:An>7r@:\)d31R5jTn#9'$]Ho%(*h?.0=;]%Js5;4k;Uh9_ZZ/d32rs,mM-Q^-ASL9AA[WhqWhX<aVSYW:#R#a-l-+#*dAP#N!\/>p4T8-jbLCsKQ:iYbSJpB3Gb:]MoeGa&=RBJ`4f(AfXj6&(5\@5T5>M55A?=%sh^GQ@mbNnpT;?NgY+7Aq.L-6J=.1D66dDouT0bse')ARmjoM5EHM3P$t^59iD7GE@_#B6$M=Ra$CI!L6VH6JI\$+Ln8pi)6R%)&>B$9"L1XRDk7sRnXueMUE1ZJ-1]TbiZDU7C2L%#\]6K`4NDK'HSfXBnh/T$6fp_RYjpOP"'6F4o'3&8-iklPJm2%ol7[;bo%:6.4L[%R]lboKO0q8_p/-2S.k,l8>]=uK@H_m;`PdCTeqNqLTs,+RIWZ[Bl-]u^Y1iX)SJ+f*JNLF]/bVaNhHA]SA.LObHVlsROqG6#3\!2kCC"Bf.Y<C#j;:&Ce"4>0].DK"4Jt(%tBZ-kMIX)YPi*B?1eO(Or62Hiq!;26.>Q0lfQ%20,M\L^]~>endstream
|
||||
endobj
|
||||
11 0 obj
|
||||
<<
|
||||
/Filter [ /ASCII85Decode /FlateDecode ] /Length 644
|
||||
>>
|
||||
stream
|
||||
Gb!#Y995Pr&AI`dk1$8n0HT!$OCP>/V5gOR)ihVYK[$g^OV1^jq]3mjJLX=B_fg`!Af`&O2]`J8S1_1p>n6?Q!q-<o"[r*8MCF@q_jAI?m;2"+/m8BO.]kNE)),Dh8\*pEem0;d*lW^>#^s-l`WmZShe#U,Y'jJ81L-[DiB19U0Fj%q@N'ZNE^40rVXJag!Xo+YGC)*L\h0O(aPN96+YM2AT"mO@qm+B)3\?7#&3U(_+(9;nP+n`b=Nd]mMq1BN@_]2E2q'5naga\5qH=NaASG&lYdP78>'H)<h,31s#:Xs([oFsDVt@6\Qc&e/[csKAlSu#0$X*^],>jNXf%thOQa9W;P*G(d2qoD[e%B7r[15rTrbNE<p^?VeT\fSrpd0a0KX?AunV7\T6Mr6FQ?>L5!pYB98bPj4B&9?$;+8ArfH8Z#NSrg/744(/=J4i*M1>7G/=i&tL(4Y5Rf?1$BI_uUdh(4eTn7f2dJd<ImPJ^AUQeiGC2pmWc=BH#k7"c2MYQ?iMbe:.Vcc)<?l534@`SYJZ%Znt"$:Fqq4PjlL>tX(,i.DD&81UXQ&9R!69PS2VKDt'j;4oVTrsHS[HHoqMA7jV]/'-#TXN]*W.IKF=`91HlTO3^3;VUJ!KQ+9!=MfANr~>endstream
|
||||
endobj
|
||||
xref
|
||||
0 12
|
||||
0000000000 65535 f
|
||||
0000000073 00000 n
|
||||
0000000124 00000 n
|
||||
0000000231 00000 n
|
||||
0000000343 00000 n
|
||||
0000000458 00000 n
|
||||
0000000662 00000 n
|
||||
0000000866 00000 n
|
||||
0000000934 00000 n
|
||||
0000001186 00000 n
|
||||
0000001251 00000 n
|
||||
0000003562 00000 n
|
||||
trailer
|
||||
<<
|
||||
/ID
|
||||
[<9b6ff018ce684a0bb6c1fc659a2e27ec><9b6ff018ce684a0bb6c1fc659a2e27ec>]
|
||||
% ReportLab generated PDF document -- digest (http://www.reportlab.com)
|
||||
|
||||
/Info 8 0 R
|
||||
/Root 7 0 R
|
||||
/Size 12
|
||||
>>
|
||||
startxref
|
||||
4297
|
||||
%%EOF
|
||||
|
|
@ -1,99 +0,0 @@
|
|||
%PDF-1.4
|
||||
%“Œ‹ž ReportLab Generated PDF document http://www.reportlab.com
|
||||
1 0 obj
|
||||
<<
|
||||
/F1 2 0 R /F2 3 0 R /F3 4 0 R
|
||||
>>
|
||||
endobj
|
||||
2 0 obj
|
||||
<<
|
||||
/BaseFont /Helvetica /Encoding /WinAnsiEncoding /Name /F1 /Subtype /Type1 /Type /Font
|
||||
>>
|
||||
endobj
|
||||
3 0 obj
|
||||
<<
|
||||
/BaseFont /Helvetica-Bold /Encoding /WinAnsiEncoding /Name /F2 /Subtype /Type1 /Type /Font
|
||||
>>
|
||||
endobj
|
||||
4 0 obj
|
||||
<<
|
||||
/BaseFont /Helvetica-Oblique /Encoding /WinAnsiEncoding /Name /F3 /Subtype /Type1 /Type /Font
|
||||
>>
|
||||
endobj
|
||||
5 0 obj
|
||||
<<
|
||||
/Contents 10 0 R /MediaBox [ 0 0 595.2756 841.8898 ] /Parent 9 0 R /Resources <<
|
||||
/Font 1 0 R /ProcSet [ /PDF /Text /ImageB /ImageC /ImageI ]
|
||||
>> /Rotate 0 /Trans <<
|
||||
|
||||
>>
|
||||
/Type /Page
|
||||
>>
|
||||
endobj
|
||||
6 0 obj
|
||||
<<
|
||||
/Contents 11 0 R /MediaBox [ 0 0 595.2756 841.8898 ] /Parent 9 0 R /Resources <<
|
||||
/Font 1 0 R /ProcSet [ /PDF /Text /ImageB /ImageC /ImageI ]
|
||||
>> /Rotate 0 /Trans <<
|
||||
|
||||
>>
|
||||
/Type /Page
|
||||
>>
|
||||
endobj
|
||||
7 0 obj
|
||||
<<
|
||||
/PageMode /UseNone /Pages 9 0 R /Type /Catalog
|
||||
>>
|
||||
endobj
|
||||
8 0 obj
|
||||
<<
|
||||
/Author () /CreationDate (D:20250713202427+02'00') /Creator (\(unspecified\)) /Keywords () /ModDate (D:20250713202427+02'00') /Producer (xhtml2pdf <https://github.com/xhtml2pdf/xhtml2pdf/>)
|
||||
/Subject () /Title () /Trapped /False
|
||||
>>
|
||||
endobj
|
||||
9 0 obj
|
||||
<<
|
||||
/Count 2 /Kids [ 5 0 R 6 0 R ] /Type /Pages
|
||||
>>
|
||||
endobj
|
||||
10 0 obj
|
||||
<<
|
||||
/Filter [ /ASCII85Decode /FlateDecode ] /Length 2180
|
||||
>>
|
||||
stream
|
||||
Gb"/(>>s99'Ro4HS2\l%0YYJK_UGr$3pi^G6Fnh>*Ce[R:reo1=Xj=D4d,3N:7T7*f^1k!VSndBm^H!.!$-Otp"PN-5)eIeaoK>4nJ$qbeqNVo]^aCud4P>VMUQ05Zaro`JY'#[B&BnU[^'bcWKFAtY&5,S%H!5.Z*BPTC-BUlE<M#ii@^"L6=%j%;K_YrcCb:.@/LJR^I\THPleG>C:J.gZb-6B%F]JXZg0Z^2@c`ZR@?eXL*)1CYDUJ#a4!)5]dhdFVRKHKMt0>E1Q:+GQE08Ifh2."iUri"p%[#*)Xq7th2FPRH#W#aeSt0B]ir/g%BmFV4++^7"p5B2_2AR,Rr#NUc0.0"2j`<fFP`o5o0^Z/TK/<TTeSASSi%/_!IbYXq3e'iJP7H[aq10`4`m=Qla:gVRbs3ORcW8Eb1RYUdsU9LF0JJAb*3<pb$*4n/XadS.d8MoQ*p7q$#9!0rSEtJ]:WiHg8JL#>J3!h.1D5ll&<Q>7i3KYdj0oD`f_0Z<tl]9]<Y$5*Uq`2RA]lS`3T(6M*me$d;mcfE!tj+XQnTG9N5]O!=B"[mcA16J+CK^al&Q])-a=]NHR]?$5PIg`mnR?P2am(DD"0Q]b5G-AhhC56cT>k=kCfg,,Buao"`,23$Or&b$pAhEbLbr)s;q*k/r[;KBF[Pa.`+a\F/muK.`<H6X'pf-$>4+T%qS3:NO-rr7<h/li"k=QW\[9aL/5a)A[E0Rhlc+9g-[;..W+Ik[b<'GZ^#+]TH_u-,MZIKM9DB"PAN)B=(Fa-LmB.=08MpkFu9b-2C#=;=Ki?74W4R9@,^H7dGT;C2TF.)+B!)>3Y5q^3i/&nZa`M6ss4^c0h!;rZ8qIg=1+4Y:_DfkrWT/a3*ND=H;XeBnlWD/SB?&hapa,[RRaDXM):@)Hl+)B'\imd:r?W(Ep7N;iPFG3+>)d'LEuc(K`,,<cGkj"IlYsD6kf`^$QXgp"^/5G4qa68V&GGiPRUCSH'-EOjXmLW<0?P):Vn[,Bo4"_#_5E%]_R>WHuBMKaP(F9gQ_:WtNP%S%+=t0b%Q#FYVlj&Bfo8`=Slh+j#k^V?(]ELW@M[TMWQ5k?gb>N(R('5($XPD!gX@06sRqWnjZkWp!\>S[G!S#hUfFIN!M$<?^t[hRI=+Urku#;aR"t)k;rUrfL[L^nel++]4s$$lB`P5b3Ct.H9rD7Q1fa&rBu\Vnpm/FSF#/dC:AaVH'd8E4AA^P7s]d8;uTqhMXCZ==_\b/\"Xhkh\?WZ4]>@(tf]?VMWIQUrb/6;:MoFLkLJ2b2u-4+LV]rL,p(U*D=D9::,HoHV>-d>[J#_/=Eaj62:hg<Ym"q8uKcmT\'dQM+D-28@?5BD&mHcHO!n[[p_)+Td4fkg-SkfnVk\jK&+8C)s&N92kAQ:IJfH^Gr]ZW3S$tU75P',?cDA*JUX2QRGr5+eSQF*'n\(WSW0hBoF&Ls,mn@si**N@Gt.*Nq6DTZ%[tr"h"K@\]ohWhCM"S)+'I=kI@b!%K@CNW#`*s!+,6rab@pjW)h6)m<t(Oi6n8M,4Ie8M:,<EeJO^XqR=48VM8$p)&onjBDY.0?X:3.tHE.4+HsWcT\uOMhkJg!?HqUPI#6ttVeHIkZE7WBlBFJ%,Onoeo%;B!_*]:dQrH/"PSF'ukMWHV8jj^SY?.0<XFgGktTKd;:G=-E])%&9:s!8!:/h:jX(qKp\X.InpY`b5?^ueli&0t\95%5Ck84#U1ZCLb/76h,(?us>9(=.N*g_8U&5Q[TPn0eScUX:'<=mWJF"Tf''?oK8?M1g+VcC.'fDu]tirZm:(?S`*SMi]kc9KjS:AgBEg-c+jYP\6s$b/e\g1JN:`jk1rsO@4P\99=oHB2YI5c/q9`JP%=3Tl*G>#`?h_\<O(O^o#.M$!2/:=UZaMVt:Rp-r&(i\?JLj0h63teO#0KTfFGFcI1->BUF=L^kBQ7+r+:]MQ+T@N7Pdkp?>h5&C/WMM=2,Cj*>"U))c>'.?SJ9YQ+cY?Bq*LiP#T\7/?qIknIcl)X9/E]2925Fbk,V$WNZG08N/7S&Or&cpPFmX(S]4ZM;IXN$36iU]+bn^I=+)[29N+(+FZ)kdQ5j'ABa@I9V0?KH@@Vbp\'7bdYO7'@SZ8%tD1WkMIX)^\TU^]"09e95<5nR@bkZ%%=mH=B?#nIKDR2k)B~>endstream
|
||||
endobj
|
||||
11 0 obj
|
||||
<<
|
||||
/Filter [ /ASCII85Decode /FlateDecode ] /Length 644
|
||||
>>
|
||||
stream
|
||||
Gb!#Y995Pr&AI`dk1$8n0HT!$OCP>/V5gOR)ihVYK[$g^OV1^jq]3mjJLX=B_fg`!Af`&O2]`J8S1_1p>n6?Q!q-<o"[r*8MCF@q_jAI?m;2"+/m8BO.]kNE)),Dh8\*pEem0;d*lW^>#^s-l`WmZShe#U,Y'jJ81L-[DiB19U0Fj%q@N'ZNE^40rVXJag!Xo+YGC)*L\h0O(aPN96+YM2AT"mO@qm+B)3\?7#&3U(_+(9;nP+n`b=Nd]mMq1BN@_]2E2q'5naga\5qH=NaASG&lYdP78>'H)<h,31s#:Xs([oFsDVt@6\Qc&e/[csKAlSu#0$X*^],>jNXf%thOQa9W;P*G(d2qoD[e%B7r[15rTrbNE<p^?VeT\fSrpd0a0KX?AunV7\T6Mr6FQ?>L5!pYB98bPj4B&9?$;+8ArfH8Z#NSrg/744(/=J4i*M1>7G/=i&tL(4Y5Rf?1$BI_uUdh(4eTn7f2dJd<ImPJ^AUQeiGC2pmWc=BH#k7"c2MYQ?iMbe:.Vcc)<?l534@`SYJZ%Znt"$:Fqq4PjlL>tX(,i.DD&81UXQ&9R!69PS2VKDt'j;4oVTrsHS[HHoqMA7jV]/'-#TXN]*W.IKF=`91HlTO3^3;VUJ!KQ+9!=MfANr~>endstream
|
||||
endobj
|
||||
xref
|
||||
0 12
|
||||
0000000000 65535 f
|
||||
0000000073 00000 n
|
||||
0000000124 00000 n
|
||||
0000000231 00000 n
|
||||
0000000343 00000 n
|
||||
0000000458 00000 n
|
||||
0000000662 00000 n
|
||||
0000000866 00000 n
|
||||
0000000934 00000 n
|
||||
0000001186 00000 n
|
||||
0000001251 00000 n
|
||||
0000003523 00000 n
|
||||
trailer
|
||||
<<
|
||||
/ID
|
||||
[<8dd6199f74f1def4cd92576a0eb9339f><8dd6199f74f1def4cd92576a0eb9339f>]
|
||||
% ReportLab generated PDF document -- digest (http://www.reportlab.com)
|
||||
|
||||
/Info 8 0 R
|
||||
/Root 7 0 R
|
||||
/Size 12
|
||||
>>
|
||||
startxref
|
||||
4258
|
||||
%%EOF
|
||||
|
|
@ -1,99 +0,0 @@
|
|||
%PDF-1.4
|
||||
%“Œ‹ž ReportLab Generated PDF document http://www.reportlab.com
|
||||
1 0 obj
|
||||
<<
|
||||
/F1 2 0 R /F2 3 0 R /F3 4 0 R
|
||||
>>
|
||||
endobj
|
||||
2 0 obj
|
||||
<<
|
||||
/BaseFont /Helvetica /Encoding /WinAnsiEncoding /Name /F1 /Subtype /Type1 /Type /Font
|
||||
>>
|
||||
endobj
|
||||
3 0 obj
|
||||
<<
|
||||
/BaseFont /Helvetica-Bold /Encoding /WinAnsiEncoding /Name /F2 /Subtype /Type1 /Type /Font
|
||||
>>
|
||||
endobj
|
||||
4 0 obj
|
||||
<<
|
||||
/BaseFont /Helvetica-Oblique /Encoding /WinAnsiEncoding /Name /F3 /Subtype /Type1 /Type /Font
|
||||
>>
|
||||
endobj
|
||||
5 0 obj
|
||||
<<
|
||||
/Contents 10 0 R /MediaBox [ 0 0 595.2756 841.8898 ] /Parent 9 0 R /Resources <<
|
||||
/Font 1 0 R /ProcSet [ /PDF /Text /ImageB /ImageC /ImageI ]
|
||||
>> /Rotate 0 /Trans <<
|
||||
|
||||
>>
|
||||
/Type /Page
|
||||
>>
|
||||
endobj
|
||||
6 0 obj
|
||||
<<
|
||||
/Contents 11 0 R /MediaBox [ 0 0 595.2756 841.8898 ] /Parent 9 0 R /Resources <<
|
||||
/Font 1 0 R /ProcSet [ /PDF /Text /ImageB /ImageC /ImageI ]
|
||||
>> /Rotate 0 /Trans <<
|
||||
|
||||
>>
|
||||
/Type /Page
|
||||
>>
|
||||
endobj
|
||||
7 0 obj
|
||||
<<
|
||||
/PageMode /UseNone /Pages 9 0 R /Type /Catalog
|
||||
>>
|
||||
endobj
|
||||
8 0 obj
|
||||
<<
|
||||
/Author () /CreationDate (D:20250713202912+02'00') /Creator (\(unspecified\)) /Keywords () /ModDate (D:20250713202912+02'00') /Producer (xhtml2pdf <https://github.com/xhtml2pdf/xhtml2pdf/>)
|
||||
/Subject () /Title () /Trapped /False
|
||||
>>
|
||||
endobj
|
||||
9 0 obj
|
||||
<<
|
||||
/Count 2 /Kids [ 5 0 R 6 0 R ] /Type /Pages
|
||||
>>
|
||||
endobj
|
||||
10 0 obj
|
||||
<<
|
||||
/Filter [ /ASCII85Decode /FlateDecode ] /Length 2180
|
||||
>>
|
||||
stream
|
||||
Gb"/(>>s99'Ro4HS2\l%0YYJK_UGr$3pi^G6Fnh>*Ce[R:reo1=Xj=D4d,3N:7T7*f^1k!VSndBm^H!.!$-Otp"PN-5)eIeaoK>4nJ$qbeqNVo]^aCud4P>VMUQ05Zaro`JY'#[B&BnU[^'bcWKFAtY&5,S%H!5.Z*BPTC-BUlE<M#ii@^"L6=%j%;K_YrcCb:.@/LJR^I\THPleG>C:J.gZb-6B%F]JXZg0Z^2@c`ZR@?eXL*)1CYDUJ#a4!)5]dhdFVRKHKMt0>E1Q:+GQE08Ifh2."iUri"p%[#*)Xq7th2FPRH#W#aeSt0B]ir/g%BmFV4++^7"p5B2_2AR,Rr#NUc0.0"2j`<fFP`o5o0^Z/TK/<TTeSASSi%/_!IbYXq3e'iJP7H[aq10`4`m=Qla:gVRbs3ORcW8Eb1RYUdsU9LF0JJAb*3<pb$*4n/XadS.d8MoQ*p7q$#9!0rSEtJ]:WiHg8JL#>J3!h.1D5ll&<Q>7i3KYdj0oD`f_0Z<tl]9]<Y$5*Uq`2RA]lS`3T(6M*me$d;mcfE!tj+XQnTG9N5]O!=B"[mcA16J+CK^al&Q])-a=]NHR]?$5PIg`mnR?P2am(DD"0Q]b5G-AhhC56cT>k=kCfg,,Buao"`,23$Or&b$pAhEbLbr)s;q*k/r[;KBF[Pa.`+a\F/muK.`<H6X'pf-$>4+T%qS3:NO-rr7<h/li"k=QW\[9aL/5a)A[E0Rhlc+9g-[;..W+Ik[b<'GZ^#+]TH_u-,MZIKM9DB"PAN)B=(Fa-LmB.=08MpkFu9b-2C#=;=Ki?74W4R9@,^H7dGT;C2TF.)+B!)>3Y5q^3i/&nZa`M6ss4^c0h!;rZ8qIg=1+4Y:_DfkrWT/a3*ND=H;XeBnlWD/SB?&hapa,[RRaDXM):@)Hl+)B'\imd:r?W(Ep7N;iPFG3+>)d'LEuc(K`,,<cGkj"IlYsD6kf`^$QXgp"^/5G4qa68V&GGiPRUCSH'-EOjXmLW<0?P):Vn[,Bo4"_#_5E%]_R>WHuBMKaP(F9gQ_:WtNP%S%+=t0b%Q#FYVlj&Bfo8`=Slh+j#k^V?(]ELW@M[TMWQ5k?gb>N(R('5($XPD!gX@06sRqWnjZkWp!\>S[G!S#hUfFIN!M$<?^t[hRI=+Urku#;aR"t)k;rUrfL[L^nel++]4s$$lB`P5b3Ct.H9rD7Q1fa&rBu\Vnpm/FSF#/dC:AaVH'd8E4AA^P7s]d8;uTqhMXCZ==_\b/\"Xhkh\?WZ4]>@(tf]?VMWIQUrb/6;:MoFLkLJ2b2u-4+LV]rL,p(U*D=D9::,HoHV>-d>[J#_/=Eaj62:hg<Ym"q8uKcmT\'dQM+D-28@?5BD&mHcHO!n[[p_)+Td4fkg-SkfnVk\jK&+8C)s&N92kAQ:IJfH^Gr]ZW3S$tU75P',?cDA*JUX2QRGr5+eSQF*'n\(WSW0hBoF&Ls,mn@si**N@Gt.*Nq6DTZ%[tr"h"K@\]ohWhCM"S)+'I=kI@b!%K@CNW#`*s!+,6rab@pjW)h6)m<t(Oi6n8M,4Ie8M:,<EeJO^XqR=48VM8$p)&onjBDY.0?X:3.tHE.4+HsWcT\uOMhkJg!?HqUPI#6ttVeHIkZE7WBlBFJ%,Onoeo%;B!_*]:dQrH/"PSF'ukMWHV8jj^SY?.0<XFgGktTKd;:G=-E])%&9:s!8!:/h:jX(qKp\X.InpY`b5?^ueli&0t\95%5Ck84#U1ZCLb/76h,(?us>9(=.N*g_8U&5Q[TPn0eScUX:'<=mWJF"Tf''?oK8?M1g+VcC.'fDu]tirZm:(?S`*SMi]kc9KjS:AgBEg-c+jYP\6s$b/e\g1JN:`jk1rsO@4P\99=oHB2YI5c/q9`JP%=3Tl*G>#`?h_\<O(O^o#.M$!2/:=UZaMVt:Rp-r&(i\?JLj0h63teO#0KTfFGFcI1->BUF=L^kBQ7+r+:]MQ+T@N7Pdkp?>h5&C/WMM=2,Cj*>"U))c>'.?SJ9YQ+cY?Bq*LiP#T\7/?qIknIcl)X9/E]2925Fbk,V$WNZG08N/7S&Or&cpPFmX(S]4ZM;IXN$36iU]+bn^I=+)[29N+(+FZ)kdQ5j'ABa@I9V0?KH@@Vbp\'7bdYO7'@SZ8%tD1WkMIX)^\TU^]"09e95<5nR@bkZ%%=mH=B?#nIKDR2k)B~>endstream
|
||||
endobj
|
||||
11 0 obj
|
||||
<<
|
||||
/Filter [ /ASCII85Decode /FlateDecode ] /Length 644
|
||||
>>
|
||||
stream
|
||||
Gb!#Y995Pr&AI`dk1$8n0HT!$OCP>/V5gOR)ihVYK[$g^OV1^jq]3mjJLX=B_fg`!Af`&O2]`J8S1_1p>n6?Q!q-<o"[r*8MCF@q_jAI?m;2"+/m8BO.]kNE)),Dh8\*pEem0;d*lW^>#^s-l`WmZShe#U,Y'jJ81L-[DiB19U0Fj%q@N'ZNE^40rVXJag!Xo+YGC)*L\h0O(aPN96+YM2AT"mO@qm+B)3\?7#&3U(_+(9;nP+n`b=Nd]mMq1BN@_]2E2q'5naga\5qH=NaASG&lYdP78>'H)<h,31s#:Xs([oFsDVt@6\Qc&e/[csKAlSu#0$X*^],>jNXf%thOQa9W;P*G(d2qoD[e%B7r[15rTrbNE<p^?VeT\fSrpd0a0KX?AunV7\T6Mr6FQ?>L5!pYB98bPj4B&9?$;+8ArfH8Z#NSrg/744(/=J4i*M1>7G/=i&tL(4Y5Rf?1$BI_uUdh(4eTn7f2dJd<ImPJ^AUQeiGC2pmWc=BH#k7"c2MYQ?iMbe:.Vcc)<?l534@`SYJZ%Znt"$:Fqq4PjlL>tX(,i.DD&81UXQ&9R!69PS2VKDt'j;4oVTrsHS[HHoqMA7jV]/'-#TXN]*W.IKF=`91HlTO3^3;VUJ!KQ+9!=MfANr~>endstream
|
||||
endobj
|
||||
xref
|
||||
0 12
|
||||
0000000000 65535 f
|
||||
0000000073 00000 n
|
||||
0000000124 00000 n
|
||||
0000000231 00000 n
|
||||
0000000343 00000 n
|
||||
0000000458 00000 n
|
||||
0000000662 00000 n
|
||||
0000000866 00000 n
|
||||
0000000934 00000 n
|
||||
0000001186 00000 n
|
||||
0000001251 00000 n
|
||||
0000003523 00000 n
|
||||
trailer
|
||||
<<
|
||||
/ID
|
||||
[<f58327f55503402f13c5673b07f3697d><f58327f55503402f13c5673b07f3697d>]
|
||||
% ReportLab generated PDF document -- digest (http://www.reportlab.com)
|
||||
|
||||
/Info 8 0 R
|
||||
/Root 7 0 R
|
||||
/Size 12
|
||||
>>
|
||||
startxref
|
||||
4258
|
||||
%%EOF
|
||||
|
|
@ -1,91 +0,0 @@
|
|||
%PDF-1.4
|
||||
%“Œ‹ž ReportLab Generated PDF document http://www.reportlab.com
|
||||
1 0 obj
|
||||
<<
|
||||
/F1 2 0 R /F2 4 0 R /F3 5 0 R
|
||||
>>
|
||||
endobj
|
||||
2 0 obj
|
||||
<<
|
||||
/BaseFont /Helvetica /Encoding /WinAnsiEncoding /Name /F1 /Subtype /Type1 /Type /Font
|
||||
>>
|
||||
endobj
|
||||
3 0 obj
|
||||
<<
|
||||
/BitsPerComponent 8 /ColorSpace /DeviceRGB /Filter [ /ASCII85Decode /FlateDecode ] /Height 125 /Length 2752 /Subtype /Image
|
||||
/Type /XObject /Width 396
|
||||
>>
|
||||
stream
|
||||
Gb"/lCNe_d(^8U1UaN3;I$4-'fC#_Jgn@5*J.LrP(K#>I_i\eB&_CS>gWfg"!!$Q>If/m)j%"gjoDS./I0G0#q"7r<T^LS%rMapH!MD6K8X/-#e[=g"!;&Z:M>FQls(L4u!9f0[&qrpY^`m6E3bH&RW<JOgJB+GuFjPECZm&HV!$5$.U5ZZ[.0(bn9qn`S:alAm:fF*I)Gqp`aAZ69X@c>=!6A&FU5XCq.0,0<,#MCkW"]5"[#ui4G#SeKrhlGX=UdWm!+;P'6lBi,V#]F4bpCMI"tBcV:.(b7QCq+UUE^s[<b"rTJAKWq.&/r('Yq4L8X.aN<!m#8e0N1h8caI+PUI%l"TV:tU-,@g^u3:+PR!HT(`[+DnjG(j2u!BmiHfd0/EQRP,Z10*a0Vp5H,g.D$Mk,oqPFJta!&1T@kF%tq;FQ;V)a'7;-#,=U?_Z&12C4s$HT5H>D\L]$@ot?<2m;=,rHA:K-R<m$5+X?'EI(`<,/R(*O'(M2A?/L`)LKc6lg:49kl'V?p_mU)G65k&Lmt2*YEm8.oB=d:at%f9e3't?T0nr\qWZ0hOf837Sd6klMGc%\iAmEXnKrIJj2)Y.&/h&$?elpUR"+<*`b.^Wjt>B8<hX;<!r?\*#\DsW@D6Dgt!Q8,g*&"Q%D.Z;b#;rWJ:DF,>hKg:at%ZP@`7W8_9$d8jh4O+/C1)W#CqQh'coi:/Tu/];O$SceH+B4,tZeTI*N:X&(7tM]OZ(,b%c6lWr;klM_nS;+:Xa.G0F41MYfnQVuKY1aU:Z)_)$'E/'<D0;(Aj;N.\F)9kFC?jFu=;+htC44X6p=e_u5U/J4d1LsJE;3e=IYN$/Q&nNm(Q%H.1Sl&kXp_qJ:qHqf!-rJPlTMi"V`O!HWJ/&`75uFu7leO%nR86f\d`W.uM)(NQ9#2i8c)AMP;>!._m&I+NVF4QSJP*`o]#gnqAKFQ/PnKB2%k7`EEiP(53Z"fqPd3]&:at%ZdpuFAAZ1@)8sC]<*l#MrX-oS!D2Tm?e%=BD4dt]u3?Ei4'oDLWmsM<'a*J>K]f8MOXfeU0`7KCT2%MaBRu@[anlp!SH?ELD>?L]1K4GOXf6ih7b+LhBbc(C>htAjP9eP/l>Ia#HX&;J&lq!0Tjg&78ddZ#YC2Q<KBrVj["oH_^7_/HK*RkXWL(]aUOe>;i;6V_PAlRoVH<&71\!3g:Lt#B2M1XRJ2l#0[-XtO"Hg#*NR`rTg&4ri8&d>nrF[iq.B8To@bM:JZJk/D.O=3)?@tS@/qj42c72<P+-!0$i?5.'4#J3e],RTR)pPa.GGC7H,8)$$PY#7e)*5i.=b,TdF9+dW=6#i/VU>R0>O\m`TnbKnk100cpZ7=Be^u<5%-DM'apfq>>b,U[mJ-1ahc5[Nt.?OT8(`')2.&^$)!=ge1C3*3DV5+/4?pFkXTTi'J"ZX;2B[/mUPnFLEJ>&'qK-DeA);kMTTKEIKX-@FN!t9eV*,McUaoMu+!r?tWO\-Y-8Hh)hkn071cSCbHFOLV:J9.J=;'$=7&e&`0'@VY'GpH?]28B7<8hUh=Bs(@>!T"!`?W=3#jlPUp7HJhCRe6G5F<j^)KeKqLi=aM\'\GTRV_2Tice_[)Zr#[e/FE*ViOH=-nKV1]5g@sM9;4Pn^Yhk<kU:b%:l2Dd7Rd9`pA<O-4u.QGQ<'8RQVkf2k92l(eX]*R:oWTtn7q[>W3dPZB?nTJ+2.(t8r"H6atpP"Q&k`TWb-)k,qR2bQf2l??Tl:kZVN$WkOh%T2)Qj8]PD8CIp#QSgs`!l4YL/)lqY(2[srP(ZRsDp0eG2_G:IQHJ$tD8^!Y-hh\#Oa:hf]lLXfOUGt=hGjV_="$NKkIdaP2Sn+)O]cC4*nmUg!/\Z,RbKaBLL18W75^.3$2-WbUUCrTF^Qr2h[df%i:]!U):'=6e&KnoQ'dBf"Hd+[i*3I>Scs7^PViD;)%?]"?4XA\-dP'r^?gDO-+h%^rE;/'U@Mo7'7=citqE\:mFW\@ecIE=[mI@oQa.UR?OYO6P,<G<O&b'@H-<-HX:5N`G\\Kd$4RnqWKjV_3tAtGs,Nk4GAfpGWFNE0Pj!`N>Xl*>_24&YKY>(4tse<`M'N*=hKCZro:06_&=7SRa+)OVTW2^>*GVCnTeM=M(U;MBUHH?>Ej]6P8/Bhu/<YITi_QC0j_:Zi-f8`s/W7A64(&mWhZXJZanR,&X?E-,0ijS:mn_&a=+^<WKSE4s1SG'nZ&9VOZ6L#ns,N1s3aQkYRf_JNp=>D9PWIGBQO.S#B2*S+5p6"`mk[(qS3T&maZhe&`1PHAq:Y@#$t(g8/Pm^.^s:.CM$d5N`UJFFEF(!XiKCZH:O%Ke_H%BehN3%:/J9R(ZijV\drh7>+"WDmQolh@g`[*340_tSI0M28NS@=_?0:&?$(f=U+@iP*!#9<a;5l4&aF;Tu(].+7C^&u$<-A5lagMDau=/EWI18PP;`U][Phmj^3)6lcCJ"Zgb-;Fo;'OAR,h^FFq*!K9:A.YU7kN'iXUKgYs#6[(#66ii69?Rgat!K9K<.YU7kN(GZPKgYs#8J`k16ii7*^.KPG!$`_k;FhK%.'"$p"TYhXKgYrl7oQ7G-ii`BWY?'L!$Q),KgYr,Lm1LT;#l]PUJaVs!2PFL'G:QL(()OF6ihg,F-T(d!2*"iPsV2FTM._<6D=Hf%]r\;M#r2f1f5\I$393%.o#sOM#m[He7pIO8/)&gBrP!$'EC7iTh6J*!&00d.YU7k!$'"nH!#JJ~>endstream
|
||||
endobj
|
||||
4 0 obj
|
||||
<<
|
||||
/BaseFont /Times-Bold /Encoding /WinAnsiEncoding /Name /F2 /Subtype /Type1 /Type /Font
|
||||
>>
|
||||
endobj
|
||||
5 0 obj
|
||||
<<
|
||||
/BaseFont /Times-Roman /Encoding /WinAnsiEncoding /Name /F3 /Subtype /Type1 /Type /Font
|
||||
>>
|
||||
endobj
|
||||
6 0 obj
|
||||
<<
|
||||
/Contents 10 0 R /MediaBox [ 0 0 595.2756 841.8898 ] /Parent 9 0 R /Resources <<
|
||||
/Font 1 0 R /ProcSet [ /PDF /Text /ImageB /ImageC /ImageI ] /XObject <<
|
||||
/FormXob.bc9efef1b007b4280b2f3106d3fe571f 3 0 R
|
||||
>>
|
||||
>> /Rotate 0 /Trans <<
|
||||
|
||||
>>
|
||||
/Type /Page
|
||||
>>
|
||||
endobj
|
||||
7 0 obj
|
||||
<<
|
||||
/PageMode /UseNone /Pages 9 0 R /Type /Catalog
|
||||
>>
|
||||
endobj
|
||||
8 0 obj
|
||||
<<
|
||||
/Author () /CreationDate (D:20250705185411+02'00') /Creator (\(unspecified\)) /Keywords () /ModDate (D:20250705185411+02'00') /Producer (xhtml2pdf <https://github.com/xhtml2pdf/xhtml2pdf/>)
|
||||
/Subject () /Title () /Trapped /False
|
||||
>>
|
||||
endobj
|
||||
9 0 obj
|
||||
<<
|
||||
/Count 1 /Kids [ 6 0 R ] /Type /Pages
|
||||
>>
|
||||
endobj
|
||||
10 0 obj
|
||||
<<
|
||||
/Filter [ /ASCII85Decode /FlateDecode ] /Length 1380
|
||||
>>
|
||||
stream
|
||||
Gb!#[gMZ%0&:Ml+bYs^B@tn&^b"L,?amK@eF0QN0ckHlAVHb](aUt@#d')n7EdWd]a%fGfL)l/9B',UD6]N![r36$AQid3>LU/K8N'ff6-AdETmr6rEH9AdV0:UeB6R$%`"4.W-3YDLd?!:h@F<o86R3e:/`YEkc6K;nMO!u7S"oT,P,Ii\]]Oss'G>7C!0npA:!<$i_s3X>V=%@8>+VqG`,n7?&K(Gus*T3Y%$'1I(La^7.43k#",5i`.OMNWVZ&RFe;E^+(U]VYG7Y?hZXjSbTM]AME"H=#Y%=2j:4t-%nk`c?Y6Z']UW?ocN?gpTJJhK?r$[<4t,,=P@s/RCJ!@*Q&oiRm)Ai%Me%)T6&1)@-L1JTe61t<%](6DA=,3.!X`^%&2$LJBGE%Mh(%rn9-BQ&d5aV'qD(g6>G2._q`22&:dZ*7)H^$9G^4rKM;=Q'(:hs7%lW;DWG=Zo;AM3+ZtH_V8<D).tBEVuYBOXrQ:=sP?<,4r/XXjABuOX^]+SO#]s1/jFAh,JgJ>a^gVl'[F$R=b#6=*#l>n68(2%dm%HWL#bpX,]rd<GIF3\ei+t0S(_p9(>fn<`"Z09M`14_eeLL"'[6#J^j%*[]Xd.FORquo(i7t^3&?-roX'_^PSq]F`+OV?MF//n$:RBH<kA7qneR5gf?M$SPagT.:/JNW-l=*2>NK#OM9B(pT%mD&1ua8c+VPa'9a,R;ZX']fEDR?9&/eMOPWsPGVG58mjZQV/`:N<_@LTieE!,^#fW60L@aTTVMa#c`ZsOS7e(`([MHlSbbWsiH`sCYeK(Z?L$)(@<aQK!;"[k;EInf4&(]@o*8O)8/UQ-(8ORm$B&4f;8.b,1"?USsqgXW,;Mg7//)]=e\>u^3V:g:T^8YlarUmEeTWeqnl3^c2a,)TdC,8!INg":.ni9r*?t,GI6M"aWXpOe7^)dL';)u"IM<t]bGW;*,q7,q&:*C^,ZbnPT*?jM&_ku/!?SBqYqR,qa>71k#kul4Io%\2BnMN6"(,i$i?/`]99fBH!.OjN%%O(LWIUWa4eh,f;%$]jObA\"ph@B5p]8TSjAR=a+<O>-4]-]^dQQrT0gk!;OZP$oJVLZNWVg2,`&X'j9,gd+D4cUTX^`qO<gmTE]>b)6aYs)#kYDF'o40>D&&Zp[oSn06gcMiHP.gJ9\"@]adq=FCA/65^NMZ9.tO&'20E`aU4*riVQ?Ib(FLVg)I4-QYiUGpMfCb^6>_o53SKg<hu6C'`:lu_a"e0LlO"37@qW_AM@H(j8>mN>8(4""JJX?er!:F7#,6SgkRXIq_X]Ll3+gN@UlZ>R)'qn1_B^<U(,?2M=#9$W:5^Y.S[oc81WB,N!i_ZEf>\%S>4ZR`DudD(eAp[A~>endstream
|
||||
endobj
|
||||
xref
|
||||
0 11
|
||||
0000000000 65535 f
|
||||
0000000073 00000 n
|
||||
0000000124 00000 n
|
||||
0000000231 00000 n
|
||||
0000003174 00000 n
|
||||
0000003282 00000 n
|
||||
0000003391 00000 n
|
||||
0000003658 00000 n
|
||||
0000003726 00000 n
|
||||
0000003978 00000 n
|
||||
0000004037 00000 n
|
||||
trailer
|
||||
<<
|
||||
/ID
|
||||
[<d40a07d62104eb3d04d7cf889535d183><d40a07d62104eb3d04d7cf889535d183>]
|
||||
% ReportLab generated PDF document -- digest (http://www.reportlab.com)
|
||||
|
||||
/Info 8 0 R
|
||||
/Root 7 0 R
|
||||
/Size 11
|
||||
>>
|
||||
startxref
|
||||
5509
|
||||
%%EOF
|
||||
|
|
@ -1,91 +0,0 @@
|
|||
%PDF-1.4
|
||||
%“Œ‹ž ReportLab Generated PDF document http://www.reportlab.com
|
||||
1 0 obj
|
||||
<<
|
||||
/F1 2 0 R /F2 4 0 R /F3 5 0 R
|
||||
>>
|
||||
endobj
|
||||
2 0 obj
|
||||
<<
|
||||
/BaseFont /Helvetica /Encoding /WinAnsiEncoding /Name /F1 /Subtype /Type1 /Type /Font
|
||||
>>
|
||||
endobj
|
||||
3 0 obj
|
||||
<<
|
||||
/BitsPerComponent 8 /ColorSpace /DeviceRGB /Filter [ /ASCII85Decode /FlateDecode ] /Height 125 /Length 2752 /Subtype /Image
|
||||
/Type /XObject /Width 396
|
||||
>>
|
||||
stream
|
||||
Gb"/lCNe_d(^8U1UaN3;I$4-'fC#_Jgn@5*J.LrP(K#>I_i\eB&_CS>gWfg"!!$Q>If/m)j%"gjoDS./I0G0#q"7r<T^LS%rMapH!MD6K8X/-#e[=g"!;&Z:M>FQls(L4u!9f0[&qrpY^`m6E3bH&RW<JOgJB+GuFjPECZm&HV!$5$.U5ZZ[.0(bn9qn`S:alAm:fF*I)Gqp`aAZ69X@c>=!6A&FU5XCq.0,0<,#MCkW"]5"[#ui4G#SeKrhlGX=UdWm!+;P'6lBi,V#]F4bpCMI"tBcV:.(b7QCq+UUE^s[<b"rTJAKWq.&/r('Yq4L8X.aN<!m#8e0N1h8caI+PUI%l"TV:tU-,@g^u3:+PR!HT(`[+DnjG(j2u!BmiHfd0/EQRP,Z10*a0Vp5H,g.D$Mk,oqPFJta!&1T@kF%tq;FQ;V)a'7;-#,=U?_Z&12C4s$HT5H>D\L]$@ot?<2m;=,rHA:K-R<m$5+X?'EI(`<,/R(*O'(M2A?/L`)LKc6lg:49kl'V?p_mU)G65k&Lmt2*YEm8.oB=d:at%f9e3't?T0nr\qWZ0hOf837Sd6klMGc%\iAmEXnKrIJj2)Y.&/h&$?elpUR"+<*`b.^Wjt>B8<hX;<!r?\*#\DsW@D6Dgt!Q8,g*&"Q%D.Z;b#;rWJ:DF,>hKg:at%ZP@`7W8_9$d8jh4O+/C1)W#CqQh'coi:/Tu/];O$SceH+B4,tZeTI*N:X&(7tM]OZ(,b%c6lWr;klM_nS;+:Xa.G0F41MYfnQVuKY1aU:Z)_)$'E/'<D0;(Aj;N.\F)9kFC?jFu=;+htC44X6p=e_u5U/J4d1LsJE;3e=IYN$/Q&nNm(Q%H.1Sl&kXp_qJ:qHqf!-rJPlTMi"V`O!HWJ/&`75uFu7leO%nR86f\d`W.uM)(NQ9#2i8c)AMP;>!._m&I+NVF4QSJP*`o]#gnqAKFQ/PnKB2%k7`EEiP(53Z"fqPd3]&:at%ZdpuFAAZ1@)8sC]<*l#MrX-oS!D2Tm?e%=BD4dt]u3?Ei4'oDLWmsM<'a*J>K]f8MOXfeU0`7KCT2%MaBRu@[anlp!SH?ELD>?L]1K4GOXf6ih7b+LhBbc(C>htAjP9eP/l>Ia#HX&;J&lq!0Tjg&78ddZ#YC2Q<KBrVj["oH_^7_/HK*RkXWL(]aUOe>;i;6V_PAlRoVH<&71\!3g:Lt#B2M1XRJ2l#0[-XtO"Hg#*NR`rTg&4ri8&d>nrF[iq.B8To@bM:JZJk/D.O=3)?@tS@/qj42c72<P+-!0$i?5.'4#J3e],RTR)pPa.GGC7H,8)$$PY#7e)*5i.=b,TdF9+dW=6#i/VU>R0>O\m`TnbKnk100cpZ7=Be^u<5%-DM'apfq>>b,U[mJ-1ahc5[Nt.?OT8(`')2.&^$)!=ge1C3*3DV5+/4?pFkXTTi'J"ZX;2B[/mUPnFLEJ>&'qK-DeA);kMTTKEIKX-@FN!t9eV*,McUaoMu+!r?tWO\-Y-8Hh)hkn071cSCbHFOLV:J9.J=;'$=7&e&`0'@VY'GpH?]28B7<8hUh=Bs(@>!T"!`?W=3#jlPUp7HJhCRe6G5F<j^)KeKqLi=aM\'\GTRV_2Tice_[)Zr#[e/FE*ViOH=-nKV1]5g@sM9;4Pn^Yhk<kU:b%:l2Dd7Rd9`pA<O-4u.QGQ<'8RQVkf2k92l(eX]*R:oWTtn7q[>W3dPZB?nTJ+2.(t8r"H6atpP"Q&k`TWb-)k,qR2bQf2l??Tl:kZVN$WkOh%T2)Qj8]PD8CIp#QSgs`!l4YL/)lqY(2[srP(ZRsDp0eG2_G:IQHJ$tD8^!Y-hh\#Oa:hf]lLXfOUGt=hGjV_="$NKkIdaP2Sn+)O]cC4*nmUg!/\Z,RbKaBLL18W75^.3$2-WbUUCrTF^Qr2h[df%i:]!U):'=6e&KnoQ'dBf"Hd+[i*3I>Scs7^PViD;)%?]"?4XA\-dP'r^?gDO-+h%^rE;/'U@Mo7'7=citqE\:mFW\@ecIE=[mI@oQa.UR?OYO6P,<G<O&b'@H-<-HX:5N`G\\Kd$4RnqWKjV_3tAtGs,Nk4GAfpGWFNE0Pj!`N>Xl*>_24&YKY>(4tse<`M'N*=hKCZro:06_&=7SRa+)OVTW2^>*GVCnTeM=M(U;MBUHH?>Ej]6P8/Bhu/<YITi_QC0j_:Zi-f8`s/W7A64(&mWhZXJZanR,&X?E-,0ijS:mn_&a=+^<WKSE4s1SG'nZ&9VOZ6L#ns,N1s3aQkYRf_JNp=>D9PWIGBQO.S#B2*S+5p6"`mk[(qS3T&maZhe&`1PHAq:Y@#$t(g8/Pm^.^s:.CM$d5N`UJFFEF(!XiKCZH:O%Ke_H%BehN3%:/J9R(ZijV\drh7>+"WDmQolh@g`[*340_tSI0M28NS@=_?0:&?$(f=U+@iP*!#9<a;5l4&aF;Tu(].+7C^&u$<-A5lagMDau=/EWI18PP;`U][Phmj^3)6lcCJ"Zgb-;Fo;'OAR,h^FFq*!K9:A.YU7kN'iXUKgYs#6[(#66ii69?Rgat!K9K<.YU7kN(GZPKgYs#8J`k16ii7*^.KPG!$`_k;FhK%.'"$p"TYhXKgYrl7oQ7G-ii`BWY?'L!$Q),KgYr,Lm1LT;#l]PUJaVs!2PFL'G:QL(()OF6ihg,F-T(d!2*"iPsV2FTM._<6D=Hf%]r\;M#r2f1f5\I$393%.o#sOM#m[He7pIO8/)&gBrP!$'EC7iTh6J*!&00d.YU7k!$'"nH!#JJ~>endstream
|
||||
endobj
|
||||
4 0 obj
|
||||
<<
|
||||
/BaseFont /Times-Bold /Encoding /WinAnsiEncoding /Name /F2 /Subtype /Type1 /Type /Font
|
||||
>>
|
||||
endobj
|
||||
5 0 obj
|
||||
<<
|
||||
/BaseFont /Times-Roman /Encoding /WinAnsiEncoding /Name /F3 /Subtype /Type1 /Type /Font
|
||||
>>
|
||||
endobj
|
||||
6 0 obj
|
||||
<<
|
||||
/Contents 10 0 R /MediaBox [ 0 0 595.2756 841.8898 ] /Parent 9 0 R /Resources <<
|
||||
/Font 1 0 R /ProcSet [ /PDF /Text /ImageB /ImageC /ImageI ] /XObject <<
|
||||
/FormXob.f616519b2a4fb7b31b424f053fbb7643 3 0 R
|
||||
>>
|
||||
>> /Rotate 0 /Trans <<
|
||||
|
||||
>>
|
||||
/Type /Page
|
||||
>>
|
||||
endobj
|
||||
7 0 obj
|
||||
<<
|
||||
/PageMode /UseNone /Pages 9 0 R /Type /Catalog
|
||||
>>
|
||||
endobj
|
||||
8 0 obj
|
||||
<<
|
||||
/Author () /CreationDate (D:20250705192159+02'00') /Creator (\(unspecified\)) /Keywords () /ModDate (D:20250705192159+02'00') /Producer (xhtml2pdf <https://github.com/xhtml2pdf/xhtml2pdf/>)
|
||||
/Subject () /Title () /Trapped /False
|
||||
>>
|
||||
endobj
|
||||
9 0 obj
|
||||
<<
|
||||
/Count 1 /Kids [ 6 0 R ] /Type /Pages
|
||||
>>
|
||||
endobj
|
||||
10 0 obj
|
||||
<<
|
||||
/Filter [ /ASCII85Decode /FlateDecode ] /Length 1381
|
||||
>>
|
||||
stream
|
||||
Gb!#[gMZ%0&:O:SbYs^B@tn&^b"L,?amK@eF0QN0ckHlAVGf&taUt@#d')n7EdWdUa%fI\Jo-C@B',UD6W+=@?EEuD,lk[ii:N05j"Qi#P=3:GGISK3*]pk+Ab4S;,XM\j!$-'R,9cR0Q!kFn<t_Y#?D=E,>f$.E)J9G-9G%jb(aQm6_-uur4_pe)CKb$>"!#2`(jptPO$8HU.Z2uH=O<e.1u&iSp8cnhJ:fm.4CS@9U(jeCS6ffQnjbS`PCNgo771tRA>k98%4.>SWl/F-e:A<QSm`=MckrJ5TZ?cmK>M#T:5R=4e2e$)>/;3S!KXT<q!(eiJ-Vbp1>369^Igg(0Z'42N!6e/hLj%n+:K2;@hGb%j&D4-;dH/2!=AE]1B&9U":3UYTcLuPY,0#8&0%X,p,[[WC$ZH?@gbJqVMMRcJoH#bQ8U4qf=gRi-USLN975XeHe#*P])1,OX%!._KLCOL)kB=1c'ZAdnX#,%ZKODdOc28Xd*&`&7[k)[W[JEY"r1RI9MrZM;tW.n79l(2B57"]'V$bc>$*e>hm05$E+e0E2=0"#GBDUj':WX]49).r"HIRQ`EW.A5q1)54lPN1Z^mj,[T#d!WS-6H?1)1c\p+/8oA'Rtl+tX#p!q$SNN'X7Y2)jfGOr4ldI2Ru.bi'/2h_FEeIE7j<1e2gpSPm:kkXYsjASf?qI4a-YF9#f[!4qqpC$R(RlIlo"h`u*(F366EOB.?H;ai;Cdi_IEP?>lpTapNJ=F1qkP/@3<jtun5D(:_'\4"`!Pg7q3,>S-QM-oo[+m!V0<6_U?)iEDB:QY9@M4Ysoi?ohJgq3?QIs.X?)ttG4m^$2,/%#8Dph`5#Tb/m4)b5uJ%!p+M2A0gi8>N`/Q'r&R_=(9cZRLD^H+,)jRunN?%ORSPLu9KYpo*h7rc,mr#CaY0JtB8Tm8CQCPp.=?Ot&#[iF)ce94>:g`Ol5lll,3:*:L)Z_J_93't^bLUPpJgT8sDqR)7N)[d'ul?USjo"o?unI7DO(,fc9<T0^f:&88hF]-GI*C8]0r5<>BXBWQB)(:B-;o:n/Gr+(l4D9[H.'dk8W1k.ZcC4Uf?&#ST1'\$D:2q/)RE6U2ZWWS18;*f-!_G49H?A11TZC^n2^V=0=/Ec/Xj<2tC[C`Y:9*_P"RBH[V5]<BZi;0+d_X67+d(#?r]L$:Ntk*6gAbcCUD$bs*9FH37t9oW=#K%*U[H:Sc;j/YkfpFp=cAqOE3U'n+j_FBON('3cT4$90lc14^buP//7R[O;<R_E4,=R#bXo#Det<oH-^0SNOdR4(<mVge<lSp+mFo*;=WOs(qn1eDZHchF>l24$9$W:5c[9ZgqNe^4A/WG\Gm1/#4SX*Oc*#FqSUUYS!Vcs~>endstream
|
||||
endobj
|
||||
xref
|
||||
0 11
|
||||
0000000000 65535 f
|
||||
0000000073 00000 n
|
||||
0000000124 00000 n
|
||||
0000000231 00000 n
|
||||
0000003174 00000 n
|
||||
0000003282 00000 n
|
||||
0000003391 00000 n
|
||||
0000003658 00000 n
|
||||
0000003726 00000 n
|
||||
0000003978 00000 n
|
||||
0000004037 00000 n
|
||||
trailer
|
||||
<<
|
||||
/ID
|
||||
[<eff54f37b742ea7922ca372e5bf11db6><eff54f37b742ea7922ca372e5bf11db6>]
|
||||
% ReportLab generated PDF document -- digest (http://www.reportlab.com)
|
||||
|
||||
/Info 8 0 R
|
||||
/Root 7 0 R
|
||||
/Size 11
|
||||
>>
|
||||
startxref
|
||||
5510
|
||||
%%EOF
|
||||
|
|
@ -1,85 +0,0 @@
|
|||
%PDF-1.4
|
||||
%“Œ‹ž ReportLab Generated PDF document http://www.reportlab.com
|
||||
1 0 obj
|
||||
<<
|
||||
/F1 2 0 R /F2 4 0 R
|
||||
>>
|
||||
endobj
|
||||
2 0 obj
|
||||
<<
|
||||
/BaseFont /Helvetica /Encoding /WinAnsiEncoding /Name /F1 /Subtype /Type1 /Type /Font
|
||||
>>
|
||||
endobj
|
||||
3 0 obj
|
||||
<<
|
||||
/BitsPerComponent 8 /ColorSpace /DeviceRGB /Filter [ /ASCII85Decode /FlateDecode ] /Height 125 /Length 2752 /Subtype /Image
|
||||
/Type /XObject /Width 396
|
||||
>>
|
||||
stream
|
||||
Gb"/lCNe_d(^8U1UaN3;I$4-'fC#_Jgn@5*J.LrP(K#>I_i\eB&_CS>gWfg"!!$Q>If/m)j%"gjoDS./I0G0#q"7r<T^LS%rMapH!MD6K8X/-#e[=g"!;&Z:M>FQls(L4u!9f0[&qrpY^`m6E3bH&RW<JOgJB+GuFjPECZm&HV!$5$.U5ZZ[.0(bn9qn`S:alAm:fF*I)Gqp`aAZ69X@c>=!6A&FU5XCq.0,0<,#MCkW"]5"[#ui4G#SeKrhlGX=UdWm!+;P'6lBi,V#]F4bpCMI"tBcV:.(b7QCq+UUE^s[<b"rTJAKWq.&/r('Yq4L8X.aN<!m#8e0N1h8caI+PUI%l"TV:tU-,@g^u3:+PR!HT(`[+DnjG(j2u!BmiHfd0/EQRP,Z10*a0Vp5H,g.D$Mk,oqPFJta!&1T@kF%tq;FQ;V)a'7;-#,=U?_Z&12C4s$HT5H>D\L]$@ot?<2m;=,rHA:K-R<m$5+X?'EI(`<,/R(*O'(M2A?/L`)LKc6lg:49kl'V?p_mU)G65k&Lmt2*YEm8.oB=d:at%f9e3't?T0nr\qWZ0hOf837Sd6klMGc%\iAmEXnKrIJj2)Y.&/h&$?elpUR"+<*`b.^Wjt>B8<hX;<!r?\*#\DsW@D6Dgt!Q8,g*&"Q%D.Z;b#;rWJ:DF,>hKg:at%ZP@`7W8_9$d8jh4O+/C1)W#CqQh'coi:/Tu/];O$SceH+B4,tZeTI*N:X&(7tM]OZ(,b%c6lWr;klM_nS;+:Xa.G0F41MYfnQVuKY1aU:Z)_)$'E/'<D0;(Aj;N.\F)9kFC?jFu=;+htC44X6p=e_u5U/J4d1LsJE;3e=IYN$/Q&nNm(Q%H.1Sl&kXp_qJ:qHqf!-rJPlTMi"V`O!HWJ/&`75uFu7leO%nR86f\d`W.uM)(NQ9#2i8c)AMP;>!._m&I+NVF4QSJP*`o]#gnqAKFQ/PnKB2%k7`EEiP(53Z"fqPd3]&:at%ZdpuFAAZ1@)8sC]<*l#MrX-oS!D2Tm?e%=BD4dt]u3?Ei4'oDLWmsM<'a*J>K]f8MOXfeU0`7KCT2%MaBRu@[anlp!SH?ELD>?L]1K4GOXf6ih7b+LhBbc(C>htAjP9eP/l>Ia#HX&;J&lq!0Tjg&78ddZ#YC2Q<KBrVj["oH_^7_/HK*RkXWL(]aUOe>;i;6V_PAlRoVH<&71\!3g:Lt#B2M1XRJ2l#0[-XtO"Hg#*NR`rTg&4ri8&d>nrF[iq.B8To@bM:JZJk/D.O=3)?@tS@/qj42c72<P+-!0$i?5.'4#J3e],RTR)pPa.GGC7H,8)$$PY#7e)*5i.=b,TdF9+dW=6#i/VU>R0>O\m`TnbKnk100cpZ7=Be^u<5%-DM'apfq>>b,U[mJ-1ahc5[Nt.?OT8(`')2.&^$)!=ge1C3*3DV5+/4?pFkXTTi'J"ZX;2B[/mUPnFLEJ>&'qK-DeA);kMTTKEIKX-@FN!t9eV*,McUaoMu+!r?tWO\-Y-8Hh)hkn071cSCbHFOLV:J9.J=;'$=7&e&`0'@VY'GpH?]28B7<8hUh=Bs(@>!T"!`?W=3#jlPUp7HJhCRe6G5F<j^)KeKqLi=aM\'\GTRV_2Tice_[)Zr#[e/FE*ViOH=-nKV1]5g@sM9;4Pn^Yhk<kU:b%:l2Dd7Rd9`pA<O-4u.QGQ<'8RQVkf2k92l(eX]*R:oWTtn7q[>W3dPZB?nTJ+2.(t8r"H6atpP"Q&k`TWb-)k,qR2bQf2l??Tl:kZVN$WkOh%T2)Qj8]PD8CIp#QSgs`!l4YL/)lqY(2[srP(ZRsDp0eG2_G:IQHJ$tD8^!Y-hh\#Oa:hf]lLXfOUGt=hGjV_="$NKkIdaP2Sn+)O]cC4*nmUg!/\Z,RbKaBLL18W75^.3$2-WbUUCrTF^Qr2h[df%i:]!U):'=6e&KnoQ'dBf"Hd+[i*3I>Scs7^PViD;)%?]"?4XA\-dP'r^?gDO-+h%^rE;/'U@Mo7'7=citqE\:mFW\@ecIE=[mI@oQa.UR?OYO6P,<G<O&b'@H-<-HX:5N`G\\Kd$4RnqWKjV_3tAtGs,Nk4GAfpGWFNE0Pj!`N>Xl*>_24&YKY>(4tse<`M'N*=hKCZro:06_&=7SRa+)OVTW2^>*GVCnTeM=M(U;MBUHH?>Ej]6P8/Bhu/<YITi_QC0j_:Zi-f8`s/W7A64(&mWhZXJZanR,&X?E-,0ijS:mn_&a=+^<WKSE4s1SG'nZ&9VOZ6L#ns,N1s3aQkYRf_JNp=>D9PWIGBQO.S#B2*S+5p6"`mk[(qS3T&maZhe&`1PHAq:Y@#$t(g8/Pm^.^s:.CM$d5N`UJFFEF(!XiKCZH:O%Ke_H%BehN3%:/J9R(ZijV\drh7>+"WDmQolh@g`[*340_tSI0M28NS@=_?0:&?$(f=U+@iP*!#9<a;5l4&aF;Tu(].+7C^&u$<-A5lagMDau=/EWI18PP;`U][Phmj^3)6lcCJ"Zgb-;Fo;'OAR,h^FFq*!K9:A.YU7kN'iXUKgYs#6[(#66ii69?Rgat!K9K<.YU7kN(GZPKgYs#8J`k16ii7*^.KPG!$`_k;FhK%.'"$p"TYhXKgYrl7oQ7G-ii`BWY?'L!$Q),KgYr,Lm1LT;#l]PUJaVs!2PFL'G:QL(()OF6ihg,F-T(d!2*"iPsV2FTM._<6D=Hf%]r\;M#r2f1f5\I$393%.o#sOM#m[He7pIO8/)&gBrP!$'EC7iTh6J*!&00d.YU7k!$'"nH!#JJ~>endstream
|
||||
endobj
|
||||
4 0 obj
|
||||
<<
|
||||
/BaseFont /Helvetica-Bold /Encoding /WinAnsiEncoding /Name /F2 /Subtype /Type1 /Type /Font
|
||||
>>
|
||||
endobj
|
||||
5 0 obj
|
||||
<<
|
||||
/Contents 9 0 R /MediaBox [ 0 0 595.2756 841.8898 ] /Parent 8 0 R /Resources <<
|
||||
/Font 1 0 R /ProcSet [ /PDF /Text /ImageB /ImageC /ImageI ] /XObject <<
|
||||
/FormXob.2334743c725931a9ea3fbca05f2e932d 3 0 R
|
||||
>>
|
||||
>> /Rotate 0 /Trans <<
|
||||
|
||||
>>
|
||||
/Type /Page
|
||||
>>
|
||||
endobj
|
||||
6 0 obj
|
||||
<<
|
||||
/PageMode /UseNone /Pages 8 0 R /Type /Catalog
|
||||
>>
|
||||
endobj
|
||||
7 0 obj
|
||||
<<
|
||||
/Author () /CreationDate (D:20250711114758+02'00') /Creator (\(unspecified\)) /Keywords () /ModDate (D:20250711114758+02'00') /Producer (xhtml2pdf <https://github.com/xhtml2pdf/xhtml2pdf/>)
|
||||
/Subject () /Title () /Trapped /False
|
||||
>>
|
||||
endobj
|
||||
8 0 obj
|
||||
<<
|
||||
/Count 1 /Kids [ 5 0 R ] /Type /Pages
|
||||
>>
|
||||
endobj
|
||||
9 0 obj
|
||||
<<
|
||||
/Filter [ /ASCII85Decode /FlateDecode ] /Length 2000
|
||||
>>
|
||||
stream
|
||||
Gb!Sn=`<%a&:W67fU&=)!3PuZr)b=\'/YIbV<EO4K9>@sJL)cYSYNs6ZTOOHM'=BQOc;]39p%4nhopJ<S_Z.l"?n[>4ddPegDHKoTSP?[^.)(0J]<26kMsCF_)_G?6CJe9Kb=_1685a9K5U1GU(PZ=?qiUl&q(_7^sq,efI2TrF$qI3VdR@ZeQ=l5,l=Z,Tcn`6`h1ZRW<7+2!B>"PTfKqm&@2`KglqQ<$6E:ZQmkN6'+*5UioEP6RfAq+`/Jc2"eTHT/Z4_j,C]T2&eTE6@a!F=4\Gdk%^.jXDER)_BnE#J'Pq6]1G<e`E%>nZ\d-O&&Jq-AVpE:jCNoZ'UsLW%0l%)D(C[/tkSo^Ih%S;:Y18AkkuN`W$_fD8eQ"c=$CHqZbm8-1BpUPZJ7XgGLD<a""hZr7"?@2&e0Nhkd(bA`l0TriMp.+<,m,d6>^T7XPP@aiS_q[tF?UV"-.#-BVK/lJA!6+K&?03dbd:a-+sA@81eX@C&p()Gm_lL:@i;CHZq0?'q`AgC^o-[>(en*%H6!Z&8Os\cK1I.?8Z)%.10LO&9d)A^BS<f/'netX>@\1Zs&^(5ZVcRpQ8%,NWWJ(;_nU@+Vq-`L//X%'L*@lO]2oS*'F[E[+ufKnDV&RlC\0L`(G2C>R`9#@PS,SVr_IG[kq#u1p$E)\i\ZYBF^B30D]_CE<-kWBd[rP3>sukII"T_-q)hhSj0Ei=IpFc^'S^%q5',9:4]E2Qmo::0e#PU<;49&Rg>0Y,/jng+<^[lTO%-`BM6N8f5`oE%)D"-L\k,A3K;F,;2<*NpAG,0e>:,%-BgJ_!m]Rm4iX.8<f?1hiH=[cpAZM/?HG7WS_*WF0%Pc3iUl>VSluuY\.#48'R0pBnMJ)I*ZC3?cCHKC'_&I9g4q&nIh3t3]]C0FKGb4o5ArE,7Y"WVkM/Y'/+eT0d76'`<p"aBV*IV&6;ZFUplKUGB$_jm]#E#X&N<_8Q!5D8EBs^D]Zo-YXg6/Zc@k9,Y)dj51A';[pJMS8LR<fEMiiMP%G+4^KCZs'gVTT;SR<M#_Ps)i;AMT<62p^?pH1p4Y`H1\1%=36gp=8bS?aei2)GEas>>Lk$TN,>ufBZoB]jXM7L!TN1Z4!O_PpZla\59_gj,XsjIt@plr\@mF(&7=0W9b>8_j>;le1n/(JaE7CHCm>Gn:ZJ(]GPA5$,kV9RSCt5[*p/@+#_ka4Z)KAq84s3/XCh3Efle[IhWis1gt)%=pCL>"aisU,N++naotg4G1lCpUfAcRgX%Ip0kH9&P<HqZ8u0c=Jb4]n7eZP\;!O,`qNYmc[!)r9RH77p,M2*?4%Oh8?'bY9l("3_YS^t'K[JLLqd^Y4!<4WeOJ.lHKR't;FWi9pdQX+2QM4GP-98W3ah8G&8U=GkpJq]/_Riredb@sje0ih)8MI\J][[[WWZc&OZ+LU,gRD(_NY#:46BMCrb5gWi3,eMhALIm=".,Nh9p'P[>siHSoJSlX>nJN@kck1+-Y[]"h=jE^eK(hW5sbVG@j\9#3?a,8Nfk;B4*/k3P0\srR-MA*dd"3__@=)4kHf<diP.$W7sA;PXJCLqM3!6mFRjjSi.pN9hJbK.Mp!KuMQ!DaPFA"*4>fJ78#I\-a)H0/CAuVg@eS:,d9VN=JnE^>Zt'qN]12l!#X):XY:%^D,Jg+[VSA=_oFVd3qN+.0&M+b\+>oq_n[^)$O7,%Z'"DKr0;\8U&+BH&4a>)-/80l0k]-t,s!94foq?P-oFWeL!=;@U[We=oG;NA[I0oa7WgaHkT\:'d?em:-ebg1a^9:RE63_4Ke$,aCC7>j5@9Z!Z?=SZZX]kmdkf7Xm7u]RZ!FA,Gc]Z7hQCW-K:-nKi%R8dfo6?Cl;oIn#no4%3H)9loF;`=Q.J,X2?*3i``hQ-HC(mK/?n=o[<1WANrn0F"N>@]p^_;#\bR#LfmL*CCa09hV@<$Q7^'_h6/7r,c%j`V)&1a<j$3X.Y5*Z=Ps&;r>WJ2?$rWB2h+jB~>endstream
|
||||
endobj
|
||||
xref
|
||||
0 10
|
||||
0000000000 65535 f
|
||||
0000000073 00000 n
|
||||
0000000114 00000 n
|
||||
0000000221 00000 n
|
||||
0000003164 00000 n
|
||||
0000003276 00000 n
|
||||
0000003542 00000 n
|
||||
0000003610 00000 n
|
||||
0000003862 00000 n
|
||||
0000003921 00000 n
|
||||
trailer
|
||||
<<
|
||||
/ID
|
||||
[<b6139719c7306ca5b33b8f0a66121db8><b6139719c7306ca5b33b8f0a66121db8>]
|
||||
% ReportLab generated PDF document -- digest (http://www.reportlab.com)
|
||||
|
||||
/Info 7 0 R
|
||||
/Root 6 0 R
|
||||
/Size 10
|
||||
>>
|
||||
startxref
|
||||
6012
|
||||
%%EOF
|
||||
|
|
@ -1,85 +0,0 @@
|
|||
%PDF-1.4
|
||||
%“Œ‹ž ReportLab Generated PDF document http://www.reportlab.com
|
||||
1 0 obj
|
||||
<<
|
||||
/F1 2 0 R /F2 4 0 R
|
||||
>>
|
||||
endobj
|
||||
2 0 obj
|
||||
<<
|
||||
/BaseFont /Helvetica /Encoding /WinAnsiEncoding /Name /F1 /Subtype /Type1 /Type /Font
|
||||
>>
|
||||
endobj
|
||||
3 0 obj
|
||||
<<
|
||||
/BitsPerComponent 8 /ColorSpace /DeviceRGB /Filter [ /ASCII85Decode /FlateDecode ] /Height 125 /Length 2752 /Subtype /Image
|
||||
/Type /XObject /Width 396
|
||||
>>
|
||||
stream
|
||||
Gb"/lCNe_d(^8U1UaN3;I$4-'fC#_Jgn@5*J.LrP(K#>I_i\eB&_CS>gWfg"!!$Q>If/m)j%"gjoDS./I0G0#q"7r<T^LS%rMapH!MD6K8X/-#e[=g"!;&Z:M>FQls(L4u!9f0[&qrpY^`m6E3bH&RW<JOgJB+GuFjPECZm&HV!$5$.U5ZZ[.0(bn9qn`S:alAm:fF*I)Gqp`aAZ69X@c>=!6A&FU5XCq.0,0<,#MCkW"]5"[#ui4G#SeKrhlGX=UdWm!+;P'6lBi,V#]F4bpCMI"tBcV:.(b7QCq+UUE^s[<b"rTJAKWq.&/r('Yq4L8X.aN<!m#8e0N1h8caI+PUI%l"TV:tU-,@g^u3:+PR!HT(`[+DnjG(j2u!BmiHfd0/EQRP,Z10*a0Vp5H,g.D$Mk,oqPFJta!&1T@kF%tq;FQ;V)a'7;-#,=U?_Z&12C4s$HT5H>D\L]$@ot?<2m;=,rHA:K-R<m$5+X?'EI(`<,/R(*O'(M2A?/L`)LKc6lg:49kl'V?p_mU)G65k&Lmt2*YEm8.oB=d:at%f9e3't?T0nr\qWZ0hOf837Sd6klMGc%\iAmEXnKrIJj2)Y.&/h&$?elpUR"+<*`b.^Wjt>B8<hX;<!r?\*#\DsW@D6Dgt!Q8,g*&"Q%D.Z;b#;rWJ:DF,>hKg:at%ZP@`7W8_9$d8jh4O+/C1)W#CqQh'coi:/Tu/];O$SceH+B4,tZeTI*N:X&(7tM]OZ(,b%c6lWr;klM_nS;+:Xa.G0F41MYfnQVuKY1aU:Z)_)$'E/'<D0;(Aj;N.\F)9kFC?jFu=;+htC44X6p=e_u5U/J4d1LsJE;3e=IYN$/Q&nNm(Q%H.1Sl&kXp_qJ:qHqf!-rJPlTMi"V`O!HWJ/&`75uFu7leO%nR86f\d`W.uM)(NQ9#2i8c)AMP;>!._m&I+NVF4QSJP*`o]#gnqAKFQ/PnKB2%k7`EEiP(53Z"fqPd3]&:at%ZdpuFAAZ1@)8sC]<*l#MrX-oS!D2Tm?e%=BD4dt]u3?Ei4'oDLWmsM<'a*J>K]f8MOXfeU0`7KCT2%MaBRu@[anlp!SH?ELD>?L]1K4GOXf6ih7b+LhBbc(C>htAjP9eP/l>Ia#HX&;J&lq!0Tjg&78ddZ#YC2Q<KBrVj["oH_^7_/HK*RkXWL(]aUOe>;i;6V_PAlRoVH<&71\!3g:Lt#B2M1XRJ2l#0[-XtO"Hg#*NR`rTg&4ri8&d>nrF[iq.B8To@bM:JZJk/D.O=3)?@tS@/qj42c72<P+-!0$i?5.'4#J3e],RTR)pPa.GGC7H,8)$$PY#7e)*5i.=b,TdF9+dW=6#i/VU>R0>O\m`TnbKnk100cpZ7=Be^u<5%-DM'apfq>>b,U[mJ-1ahc5[Nt.?OT8(`')2.&^$)!=ge1C3*3DV5+/4?pFkXTTi'J"ZX;2B[/mUPnFLEJ>&'qK-DeA);kMTTKEIKX-@FN!t9eV*,McUaoMu+!r?tWO\-Y-8Hh)hkn071cSCbHFOLV:J9.J=;'$=7&e&`0'@VY'GpH?]28B7<8hUh=Bs(@>!T"!`?W=3#jlPUp7HJhCRe6G5F<j^)KeKqLi=aM\'\GTRV_2Tice_[)Zr#[e/FE*ViOH=-nKV1]5g@sM9;4Pn^Yhk<kU:b%:l2Dd7Rd9`pA<O-4u.QGQ<'8RQVkf2k92l(eX]*R:oWTtn7q[>W3dPZB?nTJ+2.(t8r"H6atpP"Q&k`TWb-)k,qR2bQf2l??Tl:kZVN$WkOh%T2)Qj8]PD8CIp#QSgs`!l4YL/)lqY(2[srP(ZRsDp0eG2_G:IQHJ$tD8^!Y-hh\#Oa:hf]lLXfOUGt=hGjV_="$NKkIdaP2Sn+)O]cC4*nmUg!/\Z,RbKaBLL18W75^.3$2-WbUUCrTF^Qr2h[df%i:]!U):'=6e&KnoQ'dBf"Hd+[i*3I>Scs7^PViD;)%?]"?4XA\-dP'r^?gDO-+h%^rE;/'U@Mo7'7=citqE\:mFW\@ecIE=[mI@oQa.UR?OYO6P,<G<O&b'@H-<-HX:5N`G\\Kd$4RnqWKjV_3tAtGs,Nk4GAfpGWFNE0Pj!`N>Xl*>_24&YKY>(4tse<`M'N*=hKCZro:06_&=7SRa+)OVTW2^>*GVCnTeM=M(U;MBUHH?>Ej]6P8/Bhu/<YITi_QC0j_:Zi-f8`s/W7A64(&mWhZXJZanR,&X?E-,0ijS:mn_&a=+^<WKSE4s1SG'nZ&9VOZ6L#ns,N1s3aQkYRf_JNp=>D9PWIGBQO.S#B2*S+5p6"`mk[(qS3T&maZhe&`1PHAq:Y@#$t(g8/Pm^.^s:.CM$d5N`UJFFEF(!XiKCZH:O%Ke_H%BehN3%:/J9R(ZijV\drh7>+"WDmQolh@g`[*340_tSI0M28NS@=_?0:&?$(f=U+@iP*!#9<a;5l4&aF;Tu(].+7C^&u$<-A5lagMDau=/EWI18PP;`U][Phmj^3)6lcCJ"Zgb-;Fo;'OAR,h^FFq*!K9:A.YU7kN'iXUKgYs#6[(#66ii69?Rgat!K9K<.YU7kN(GZPKgYs#8J`k16ii7*^.KPG!$`_k;FhK%.'"$p"TYhXKgYrl7oQ7G-ii`BWY?'L!$Q),KgYr,Lm1LT;#l]PUJaVs!2PFL'G:QL(()OF6ihg,F-T(d!2*"iPsV2FTM._<6D=Hf%]r\;M#r2f1f5\I$393%.o#sOM#m[He7pIO8/)&gBrP!$'EC7iTh6J*!&00d.YU7k!$'"nH!#JJ~>endstream
|
||||
endobj
|
||||
4 0 obj
|
||||
<<
|
||||
/BaseFont /Helvetica-Bold /Encoding /WinAnsiEncoding /Name /F2 /Subtype /Type1 /Type /Font
|
||||
>>
|
||||
endobj
|
||||
5 0 obj
|
||||
<<
|
||||
/Contents 9 0 R /MediaBox [ 0 0 595.2756 841.8898 ] /Parent 8 0 R /Resources <<
|
||||
/Font 1 0 R /ProcSet [ /PDF /Text /ImageB /ImageC /ImageI ] /XObject <<
|
||||
/FormXob.2334743c725931a9ea3fbca05f2e932d 3 0 R
|
||||
>>
|
||||
>> /Rotate 0 /Trans <<
|
||||
|
||||
>>
|
||||
/Type /Page
|
||||
>>
|
||||
endobj
|
||||
6 0 obj
|
||||
<<
|
||||
/PageMode /UseNone /Pages 8 0 R /Type /Catalog
|
||||
>>
|
||||
endobj
|
||||
7 0 obj
|
||||
<<
|
||||
/Author () /CreationDate (D:20250711114813+02'00') /Creator (\(unspecified\)) /Keywords () /ModDate (D:20250711114813+02'00') /Producer (xhtml2pdf <https://github.com/xhtml2pdf/xhtml2pdf/>)
|
||||
/Subject () /Title () /Trapped /False
|
||||
>>
|
||||
endobj
|
||||
8 0 obj
|
||||
<<
|
||||
/Count 1 /Kids [ 5 0 R ] /Type /Pages
|
||||
>>
|
||||
endobj
|
||||
9 0 obj
|
||||
<<
|
||||
/Filter [ /ASCII85Decode /FlateDecode ] /Length 2012
|
||||
>>
|
||||
stream
|
||||
Gb!SnD/\/e&H;*)_(W^]!bV4&.Nb"c>Dr/#WB9H6J3^N-c@p,G[aLN@qAh#AVJKCu'A"sn+L*Kfm[h%;F?G_[LqjODIn);JIN,#f(DK`$L:;sG/C<l^oR,<gd^t0>>)[%tF.n7RL(MQQc9X@59[SCQGH`Ea15Wa<5V_r?1c@t#i=&S@i@1.u7Q$L_.WI\r:T0>GT]'N?Hti[e3WPN>0Jk.Z$Y":qJ9s%QX5H:^!Aihn@3WNKN&Z0H/n][3+#2e\BYd3-ab\D*8n*8HE>0(3bE@[f0m],eJfS0;/?M,%<b[/Yi>?B?Y+:n>$Fgh\)qbJIaT33O<3+=j_GR\pk9G[eR0^-Rd'pi!8qXc2\^MQb%B<=.(n#9[8?j;[@9d/>1TQ$D/nd^^_b7V#i;tQ_e68r@Z:MdSK4,n#!eH_l3tD4IGa.#9'/Xo>oWK-On`B[a3Z05&MOXN]m\9C%81]<M+ubd6XY#`97tO8X4(bAcWY,V(Z(`jj6?B42e%6:F'T>Jnbg8JCM4;n7P0>`N2Bu<X88YN<+-2c1C6]@u#7MlVk=i0j`$cWR2iDdC`RA9q+/&_h(/th^'h+t]7JpXq4EXha^_&$OBoT6FdeNSjT4GU>mMuZ>@AcqZKOGB@7>HJgkYL9Z?g6ARc$t_f-NBf/]L(W]/W54t--`X5GGAu;cI(opM+1(&-0R7j4h.g/U3T'g<[d4YSE$d3`?L_EMf^k8kMrA>*U_CBoKo2m(@2E5D;IWkJb\)4aXXpE6Q9\&,-9]CSDuAH%VnM?JKeg8Xd05_;AgnUb>5f3a@SJD88bXg:nn474FjLsmGWjm&]&-HWE/^k&h%aR'WXj:YIRmUKjNI%\UMj`HR2cB0@D&AH(VJ6@,V#BAV+s$\XTR+gSoF`X@CCT_QpTrHka6POjo.P-)"u#<,Qn%2&J!Q+7%US,.B)O0LHI])pL`8(&!N(h?E2VjlAN"0V;nTKca:5G9@Yh@q?,a>@H7sAi]sAS^+ROkQ2aXMJNH58Qashb6lAr(^/eWio#L*%S&g^%RcZ921O@uPL="O4hB<g=^`KFSqs\Xe$l35o/Lj`ipE4J+'r8:7j$T\G?8]i4WeiYqh(TYUr7B9l-f]uqFjlMg6hkIR$'_n1]E)EK.17-8V/!9'Q2n)a[5Ain:9>%H47Ig5<]mKrT\V%nngO4bgt6nq`[I;h*V6>89i;g,E4Ip0RK;#Bc2l<)J&Z]HCM!gA9DkjY`),*AKS:,84B77M@D.[=;laV!G?6MhicXuG[Q;I!=LX8B#bE,NAA>S%Cs=q;c0fJZA3<N7(R%;7W4*$A8`OtV$uT2^E2,im4IU-ZQ.,+jSEn0#K\'rpMuoZSPsS:MdaUl(leL$:U[M7nDD(e)*7#<0J?H[0'&J2[#8I_jh1i28P\\fEc46^P2=g6]`j%Tn9u/=jL1@8eVSFn,ad@5hWbEg\fn#KZ$Zh:S"!:tNY#:86BMCrF+Eg(>h48OTSgV0^a3Wr.?`8pD5`GIhSs3(/L%$K%P*'<R`0L.I=G32h=9bD,SXWNB#8;G'4PY7.&jGW2)gM`Hqo@1<:?*97]1)=VW]Lt9iaiDs1X^<h0h_rOqO'+4plJ\anLXD=4-!ViOTO9f2'sJU5J;4C3'1Ge-n&OSXM5Q_ps=;q+'1sfhZf^G9)tURV<G^P!ta-HN_-"keP>g4c-<Z#o8d@q45a*-VuYa@i!>eN9PlBN5$a@Nk@Kgj02)4&IWk5X^?F"mko4F,r;j",oWHB54JT=Y]s2KmAB(R0_>q`8i;Xs4g"0dY,5J2qEM!L25-\s'=;!"/GI]m(0A5R<aA#rCN`X_Vk>N/&uK8F5`nf&_XWUi",uGB35D:Y*U3X.-C5P5HouBrSX!.#4L+i\dq"cg1N\WoI8q?VSKffKc;#2GA3C9J:@FLL4cf-3;MWtZWB1rTZNRC+G";RKT(U+p;$,Y^4X9*J&LR7+0B=QuhG@<Z5(p++E=@cYLAs^L8cZe%]3)nbF(*AQm99O*;,pNu2sU>HnYRR^~>endstream
|
||||
endobj
|
||||
xref
|
||||
0 10
|
||||
0000000000 65535 f
|
||||
0000000073 00000 n
|
||||
0000000114 00000 n
|
||||
0000000221 00000 n
|
||||
0000003164 00000 n
|
||||
0000003276 00000 n
|
||||
0000003542 00000 n
|
||||
0000003610 00000 n
|
||||
0000003862 00000 n
|
||||
0000003921 00000 n
|
||||
trailer
|
||||
<<
|
||||
/ID
|
||||
[<5db93bcefa4c2784599505f5e3350aff><5db93bcefa4c2784599505f5e3350aff>]
|
||||
% ReportLab generated PDF document -- digest (http://www.reportlab.com)
|
||||
|
||||
/Info 7 0 R
|
||||
/Root 6 0 R
|
||||
/Size 10
|
||||
>>
|
||||
startxref
|
||||
6024
|
||||
%%EOF
|
||||
|
|
@ -1,85 +0,0 @@
|
|||
%PDF-1.4
|
||||
%“Œ‹ž ReportLab Generated PDF document http://www.reportlab.com
|
||||
1 0 obj
|
||||
<<
|
||||
/F1 2 0 R /F2 4 0 R
|
||||
>>
|
||||
endobj
|
||||
2 0 obj
|
||||
<<
|
||||
/BaseFont /Helvetica /Encoding /WinAnsiEncoding /Name /F1 /Subtype /Type1 /Type /Font
|
||||
>>
|
||||
endobj
|
||||
3 0 obj
|
||||
<<
|
||||
/BitsPerComponent 8 /ColorSpace /DeviceRGB /Filter [ /ASCII85Decode /FlateDecode ] /Height 125 /Length 2752 /Subtype /Image
|
||||
/Type /XObject /Width 396
|
||||
>>
|
||||
stream
|
||||
Gb"/lCNe_d(^8U1UaN3;I$4-'fC#_Jgn@5*J.LrP(K#>I_i\eB&_CS>gWfg"!!$Q>If/m)j%"gjoDS./I0G0#q"7r<T^LS%rMapH!MD6K8X/-#e[=g"!;&Z:M>FQls(L4u!9f0[&qrpY^`m6E3bH&RW<JOgJB+GuFjPECZm&HV!$5$.U5ZZ[.0(bn9qn`S:alAm:fF*I)Gqp`aAZ69X@c>=!6A&FU5XCq.0,0<,#MCkW"]5"[#ui4G#SeKrhlGX=UdWm!+;P'6lBi,V#]F4bpCMI"tBcV:.(b7QCq+UUE^s[<b"rTJAKWq.&/r('Yq4L8X.aN<!m#8e0N1h8caI+PUI%l"TV:tU-,@g^u3:+PR!HT(`[+DnjG(j2u!BmiHfd0/EQRP,Z10*a0Vp5H,g.D$Mk,oqPFJta!&1T@kF%tq;FQ;V)a'7;-#,=U?_Z&12C4s$HT5H>D\L]$@ot?<2m;=,rHA:K-R<m$5+X?'EI(`<,/R(*O'(M2A?/L`)LKc6lg:49kl'V?p_mU)G65k&Lmt2*YEm8.oB=d:at%f9e3't?T0nr\qWZ0hOf837Sd6klMGc%\iAmEXnKrIJj2)Y.&/h&$?elpUR"+<*`b.^Wjt>B8<hX;<!r?\*#\DsW@D6Dgt!Q8,g*&"Q%D.Z;b#;rWJ:DF,>hKg:at%ZP@`7W8_9$d8jh4O+/C1)W#CqQh'coi:/Tu/];O$SceH+B4,tZeTI*N:X&(7tM]OZ(,b%c6lWr;klM_nS;+:Xa.G0F41MYfnQVuKY1aU:Z)_)$'E/'<D0;(Aj;N.\F)9kFC?jFu=;+htC44X6p=e_u5U/J4d1LsJE;3e=IYN$/Q&nNm(Q%H.1Sl&kXp_qJ:qHqf!-rJPlTMi"V`O!HWJ/&`75uFu7leO%nR86f\d`W.uM)(NQ9#2i8c)AMP;>!._m&I+NVF4QSJP*`o]#gnqAKFQ/PnKB2%k7`EEiP(53Z"fqPd3]&:at%ZdpuFAAZ1@)8sC]<*l#MrX-oS!D2Tm?e%=BD4dt]u3?Ei4'oDLWmsM<'a*J>K]f8MOXfeU0`7KCT2%MaBRu@[anlp!SH?ELD>?L]1K4GOXf6ih7b+LhBbc(C>htAjP9eP/l>Ia#HX&;J&lq!0Tjg&78ddZ#YC2Q<KBrVj["oH_^7_/HK*RkXWL(]aUOe>;i;6V_PAlRoVH<&71\!3g:Lt#B2M1XRJ2l#0[-XtO"Hg#*NR`rTg&4ri8&d>nrF[iq.B8To@bM:JZJk/D.O=3)?@tS@/qj42c72<P+-!0$i?5.'4#J3e],RTR)pPa.GGC7H,8)$$PY#7e)*5i.=b,TdF9+dW=6#i/VU>R0>O\m`TnbKnk100cpZ7=Be^u<5%-DM'apfq>>b,U[mJ-1ahc5[Nt.?OT8(`')2.&^$)!=ge1C3*3DV5+/4?pFkXTTi'J"ZX;2B[/mUPnFLEJ>&'qK-DeA);kMTTKEIKX-@FN!t9eV*,McUaoMu+!r?tWO\-Y-8Hh)hkn071cSCbHFOLV:J9.J=;'$=7&e&`0'@VY'GpH?]28B7<8hUh=Bs(@>!T"!`?W=3#jlPUp7HJhCRe6G5F<j^)KeKqLi=aM\'\GTRV_2Tice_[)Zr#[e/FE*ViOH=-nKV1]5g@sM9;4Pn^Yhk<kU:b%:l2Dd7Rd9`pA<O-4u.QGQ<'8RQVkf2k92l(eX]*R:oWTtn7q[>W3dPZB?nTJ+2.(t8r"H6atpP"Q&k`TWb-)k,qR2bQf2l??Tl:kZVN$WkOh%T2)Qj8]PD8CIp#QSgs`!l4YL/)lqY(2[srP(ZRsDp0eG2_G:IQHJ$tD8^!Y-hh\#Oa:hf]lLXfOUGt=hGjV_="$NKkIdaP2Sn+)O]cC4*nmUg!/\Z,RbKaBLL18W75^.3$2-WbUUCrTF^Qr2h[df%i:]!U):'=6e&KnoQ'dBf"Hd+[i*3I>Scs7^PViD;)%?]"?4XA\-dP'r^?gDO-+h%^rE;/'U@Mo7'7=citqE\:mFW\@ecIE=[mI@oQa.UR?OYO6P,<G<O&b'@H-<-HX:5N`G\\Kd$4RnqWKjV_3tAtGs,Nk4GAfpGWFNE0Pj!`N>Xl*>_24&YKY>(4tse<`M'N*=hKCZro:06_&=7SRa+)OVTW2^>*GVCnTeM=M(U;MBUHH?>Ej]6P8/Bhu/<YITi_QC0j_:Zi-f8`s/W7A64(&mWhZXJZanR,&X?E-,0ijS:mn_&a=+^<WKSE4s1SG'nZ&9VOZ6L#ns,N1s3aQkYRf_JNp=>D9PWIGBQO.S#B2*S+5p6"`mk[(qS3T&maZhe&`1PHAq:Y@#$t(g8/Pm^.^s:.CM$d5N`UJFFEF(!XiKCZH:O%Ke_H%BehN3%:/J9R(ZijV\drh7>+"WDmQolh@g`[*340_tSI0M28NS@=_?0:&?$(f=U+@iP*!#9<a;5l4&aF;Tu(].+7C^&u$<-A5lagMDau=/EWI18PP;`U][Phmj^3)6lcCJ"Zgb-;Fo;'OAR,h^FFq*!K9:A.YU7kN'iXUKgYs#6[(#66ii69?Rgat!K9K<.YU7kN(GZPKgYs#8J`k16ii7*^.KPG!$`_k;FhK%.'"$p"TYhXKgYrl7oQ7G-ii`BWY?'L!$Q),KgYr,Lm1LT;#l]PUJaVs!2PFL'G:QL(()OF6ihg,F-T(d!2*"iPsV2FTM._<6D=Hf%]r\;M#r2f1f5\I$393%.o#sOM#m[He7pIO8/)&gBrP!$'EC7iTh6J*!&00d.YU7k!$'"nH!#JJ~>endstream
|
||||
endobj
|
||||
4 0 obj
|
||||
<<
|
||||
/BaseFont /Helvetica-Bold /Encoding /WinAnsiEncoding /Name /F2 /Subtype /Type1 /Type /Font
|
||||
>>
|
||||
endobj
|
||||
5 0 obj
|
||||
<<
|
||||
/Contents 9 0 R /MediaBox [ 0 0 595.2756 841.8898 ] /Parent 8 0 R /Resources <<
|
||||
/Font 1 0 R /ProcSet [ /PDF /Text /ImageB /ImageC /ImageI ] /XObject <<
|
||||
/FormXob.2334743c725931a9ea3fbca05f2e932d 3 0 R
|
||||
>>
|
||||
>> /Rotate 0 /Trans <<
|
||||
|
||||
>>
|
||||
/Type /Page
|
||||
>>
|
||||
endobj
|
||||
6 0 obj
|
||||
<<
|
||||
/PageMode /UseNone /Pages 8 0 R /Type /Catalog
|
||||
>>
|
||||
endobj
|
||||
7 0 obj
|
||||
<<
|
||||
/Author () /CreationDate (D:20250711115343+02'00') /Creator (\(unspecified\)) /Keywords () /ModDate (D:20250711115343+02'00') /Producer (xhtml2pdf <https://github.com/xhtml2pdf/xhtml2pdf/>)
|
||||
/Subject () /Title () /Trapped /False
|
||||
>>
|
||||
endobj
|
||||
8 0 obj
|
||||
<<
|
||||
/Count 1 /Kids [ 5 0 R ] /Type /Pages
|
||||
>>
|
||||
endobj
|
||||
9 0 obj
|
||||
<<
|
||||
/Filter [ /ASCII85Decode /FlateDecode ] /Length 1984
|
||||
>>
|
||||
stream
|
||||
Gb!SngMYb8&:N/3lq:2%JC](^jKVJ.->5#TPbJZm$q?si"d5fTFQ2rY43Pf^.8_@%/$_tg[OCRhbaFm:g"E2N,4It+^S;Z5^CATD98Y,b_](uI(23IjH84c7m9RL\/S6ek\PPU96O7:iF-$ic.2pS2%b?;3-IMQ/.&Pje`^WNVS0:KZN.M@K<+G0oP3ciW)>2Aj2#Mr[:E=tD%)>:p%*]+0Js]gti1A0C.N#B00N3uK-5*DtN3ekmEqX_J#rBk\(4;pG[%'TDNqgks;+0ISM_/ROoK3-W41sQT3do;UdKDkR1"aELB3s^Ki)\d=FT]q2!>hG/X3\^nCNoZ'UsLW%0l%&C)[rT#a;^=)h%A/0.b0E=ksgUG$_fD8l`4c4'egj?RM"3AdOo%>!6ZLm%P+F#$@$eL9]T.q&<h&\6iSn[V74Vbbqh$L<t)V6CAofQN8eWlD14EfdJ7H$Q9ZCOS'&FqN_-5q6)9Ya1Xg_OM1hO(d4B9(F0#Mn]+`d1N((*Id6*ield9eecVs9j,?QWjD6C;hNL00M'bf^W$m_e79X8-I-lL(WMe&)Bdpc?"T`Nj_<"KmXD5hdmrE'f0R8tN9-)E]*Yn^(R+91;`N&T>$A&0;S'M=KAlp7K3:bWU^M;7kV\Qtp)YL0iS?aPViBH3dY;,Fcuq:57`PYRB%>2:gY-r/5.h;ksKGP4<Z0;unu-2j6Igh!ip`)CcLb\#7M*1+&XqfF-t&EnlQqqP2@%o?CO^=R)39!@j57VT.6.sM<^\."qG=qPVE8/glq-,N\4"/UJB\MjaRl'<70%@.35e:</VOO^6lCmbtQAd_5=EhAL[M(>B(<@[m7bEYrgPmq*On+gS!":O<[3lElDP;WULg#&Z#:_#@,1DO^f(!kpjBK93Tf!^6mJiDIWI2GorH8\LZG5"jdnKRq:?7dXI].sgG,S@3,49SXBXpF2rTY=c.ma0#M,kV]GTIRYXYojr8F.h.mf7#F&$1OEpSjl-bOJ/et<m[.c,oL2q6.l6j+<4Sq:'dBK.*0nhkRqOQhmV:8FBLtlDDkd$=NJ-&U9*_RSLKbJ*4gFpmd9V,Y:a1TO)NGCbBL-s%(ihD_9cRe@bQ/)ZiHpd'32S$VEYop,Z+8pIj!KR9%\WVTSEo/><%);:qIB'@/&7o6a+=e01BHer#NM!?S<G+oeMVWT:ukL+Ft+;hX],dUJ*Adh58l2$q=G1Z@&n5-L2dWSX^4V&S\K9K9f<489@A,Tqr5l,LA4(X=`@71)g6)lqf<B,:;13ph?O$-CD4b=.!L?(<7eLkk7?=MhYX5LA473p9@H:O:LjI\Xh4+U:rM.U&7B_06VN#r*a4k#O9_t25dYrAh8V_fMDBT)j^R)/SpNBPI?-iZ$LC5f>OLk,g.b-/a,oLE_hmG$[S$/^0^4Z(d*KGZWJTa[FM6/XD90!i\'b%:I*J?5qS)X6YP91Pko?P\6:eJ,fj0o-kF0`]giO3-p.oCEgAROd[>:g[?8hjpl)RKUf>`M#;Aj"kk<<r7odqWO$5ir!VU"MX<oqNL*hqD$9MI5e#:CO6jQKZ?9)_Ag1=]M0&tVq't<u,9A._K<s1$&@8#UTi&7-RT."q!*Srh^p#4oqaa-HVOkiT':*6*s+blaj':*.<3\WGkB\P9=jmM?8__se:D$!lrMlGMW!+&"t<p'9NFN$eTWN=20A0sHjU.HH5B]ecN%S4k./m`\]jma@H9`hdTjJ?sImGYb1d".P-aF]^kJ?Jaas'NY&=]Ml!U*mb'7jKM5f\UsXhpG\']+Xac<&\SZ6+&(R\%5_6X8+!Cr*6A8Kad\AVWLQ<<=U<Kc*;dCSTKPV)ik1?dAQI8NuE/>(O.gJ4AY,"8bT$fneO&XD#a)`T#L:84[[<hG)!*JTak)f??AVMN7Mo^8,mD>]8bsJ(uS;<7e@QC9^_^WOU?@@LG9K$M\"d=:`RC8[,JbmJk+P8$77s#r0cL/F:YC?._&@E5:Y\.M?~>endstream
|
||||
endobj
|
||||
xref
|
||||
0 10
|
||||
0000000000 65535 f
|
||||
0000000073 00000 n
|
||||
0000000114 00000 n
|
||||
0000000221 00000 n
|
||||
0000003164 00000 n
|
||||
0000003276 00000 n
|
||||
0000003542 00000 n
|
||||
0000003610 00000 n
|
||||
0000003862 00000 n
|
||||
0000003921 00000 n
|
||||
trailer
|
||||
<<
|
||||
/ID
|
||||
[<2ca8974d7243840a38e62207b951542e><2ca8974d7243840a38e62207b951542e>]
|
||||
% ReportLab generated PDF document -- digest (http://www.reportlab.com)
|
||||
|
||||
/Info 7 0 R
|
||||
/Root 6 0 R
|
||||
/Size 10
|
||||
>>
|
||||
startxref
|
||||
5996
|
||||
%%EOF
|
||||
|
|
@ -1,85 +0,0 @@
|
|||
%PDF-1.4
|
||||
%“Œ‹ž ReportLab Generated PDF document http://www.reportlab.com
|
||||
1 0 obj
|
||||
<<
|
||||
/F1 2 0 R /F2 4 0 R
|
||||
>>
|
||||
endobj
|
||||
2 0 obj
|
||||
<<
|
||||
/BaseFont /Helvetica /Encoding /WinAnsiEncoding /Name /F1 /Subtype /Type1 /Type /Font
|
||||
>>
|
||||
endobj
|
||||
3 0 obj
|
||||
<<
|
||||
/BitsPerComponent 8 /ColorSpace /DeviceRGB /Filter [ /ASCII85Decode /FlateDecode ] /Height 125 /Length 2752 /Subtype /Image
|
||||
/Type /XObject /Width 396
|
||||
>>
|
||||
stream
|
||||
Gb"/lCNe_d(^8U1UaN3;I$4-'fC#_Jgn@5*J.LrP(K#>I_i\eB&_CS>gWfg"!!$Q>If/m)j%"gjoDS./I0G0#q"7r<T^LS%rMapH!MD6K8X/-#e[=g"!;&Z:M>FQls(L4u!9f0[&qrpY^`m6E3bH&RW<JOgJB+GuFjPECZm&HV!$5$.U5ZZ[.0(bn9qn`S:alAm:fF*I)Gqp`aAZ69X@c>=!6A&FU5XCq.0,0<,#MCkW"]5"[#ui4G#SeKrhlGX=UdWm!+;P'6lBi,V#]F4bpCMI"tBcV:.(b7QCq+UUE^s[<b"rTJAKWq.&/r('Yq4L8X.aN<!m#8e0N1h8caI+PUI%l"TV:tU-,@g^u3:+PR!HT(`[+DnjG(j2u!BmiHfd0/EQRP,Z10*a0Vp5H,g.D$Mk,oqPFJta!&1T@kF%tq;FQ;V)a'7;-#,=U?_Z&12C4s$HT5H>D\L]$@ot?<2m;=,rHA:K-R<m$5+X?'EI(`<,/R(*O'(M2A?/L`)LKc6lg:49kl'V?p_mU)G65k&Lmt2*YEm8.oB=d:at%f9e3't?T0nr\qWZ0hOf837Sd6klMGc%\iAmEXnKrIJj2)Y.&/h&$?elpUR"+<*`b.^Wjt>B8<hX;<!r?\*#\DsW@D6Dgt!Q8,g*&"Q%D.Z;b#;rWJ:DF,>hKg:at%ZP@`7W8_9$d8jh4O+/C1)W#CqQh'coi:/Tu/];O$SceH+B4,tZeTI*N:X&(7tM]OZ(,b%c6lWr;klM_nS;+:Xa.G0F41MYfnQVuKY1aU:Z)_)$'E/'<D0;(Aj;N.\F)9kFC?jFu=;+htC44X6p=e_u5U/J4d1LsJE;3e=IYN$/Q&nNm(Q%H.1Sl&kXp_qJ:qHqf!-rJPlTMi"V`O!HWJ/&`75uFu7leO%nR86f\d`W.uM)(NQ9#2i8c)AMP;>!._m&I+NVF4QSJP*`o]#gnqAKFQ/PnKB2%k7`EEiP(53Z"fqPd3]&:at%ZdpuFAAZ1@)8sC]<*l#MrX-oS!D2Tm?e%=BD4dt]u3?Ei4'oDLWmsM<'a*J>K]f8MOXfeU0`7KCT2%MaBRu@[anlp!SH?ELD>?L]1K4GOXf6ih7b+LhBbc(C>htAjP9eP/l>Ia#HX&;J&lq!0Tjg&78ddZ#YC2Q<KBrVj["oH_^7_/HK*RkXWL(]aUOe>;i;6V_PAlRoVH<&71\!3g:Lt#B2M1XRJ2l#0[-XtO"Hg#*NR`rTg&4ri8&d>nrF[iq.B8To@bM:JZJk/D.O=3)?@tS@/qj42c72<P+-!0$i?5.'4#J3e],RTR)pPa.GGC7H,8)$$PY#7e)*5i.=b,TdF9+dW=6#i/VU>R0>O\m`TnbKnk100cpZ7=Be^u<5%-DM'apfq>>b,U[mJ-1ahc5[Nt.?OT8(`')2.&^$)!=ge1C3*3DV5+/4?pFkXTTi'J"ZX;2B[/mUPnFLEJ>&'qK-DeA);kMTTKEIKX-@FN!t9eV*,McUaoMu+!r?tWO\-Y-8Hh)hkn071cSCbHFOLV:J9.J=;'$=7&e&`0'@VY'GpH?]28B7<8hUh=Bs(@>!T"!`?W=3#jlPUp7HJhCRe6G5F<j^)KeKqLi=aM\'\GTRV_2Tice_[)Zr#[e/FE*ViOH=-nKV1]5g@sM9;4Pn^Yhk<kU:b%:l2Dd7Rd9`pA<O-4u.QGQ<'8RQVkf2k92l(eX]*R:oWTtn7q[>W3dPZB?nTJ+2.(t8r"H6atpP"Q&k`TWb-)k,qR2bQf2l??Tl:kZVN$WkOh%T2)Qj8]PD8CIp#QSgs`!l4YL/)lqY(2[srP(ZRsDp0eG2_G:IQHJ$tD8^!Y-hh\#Oa:hf]lLXfOUGt=hGjV_="$NKkIdaP2Sn+)O]cC4*nmUg!/\Z,RbKaBLL18W75^.3$2-WbUUCrTF^Qr2h[df%i:]!U):'=6e&KnoQ'dBf"Hd+[i*3I>Scs7^PViD;)%?]"?4XA\-dP'r^?gDO-+h%^rE;/'U@Mo7'7=citqE\:mFW\@ecIE=[mI@oQa.UR?OYO6P,<G<O&b'@H-<-HX:5N`G\\Kd$4RnqWKjV_3tAtGs,Nk4GAfpGWFNE0Pj!`N>Xl*>_24&YKY>(4tse<`M'N*=hKCZro:06_&=7SRa+)OVTW2^>*GVCnTeM=M(U;MBUHH?>Ej]6P8/Bhu/<YITi_QC0j_:Zi-f8`s/W7A64(&mWhZXJZanR,&X?E-,0ijS:mn_&a=+^<WKSE4s1SG'nZ&9VOZ6L#ns,N1s3aQkYRf_JNp=>D9PWIGBQO.S#B2*S+5p6"`mk[(qS3T&maZhe&`1PHAq:Y@#$t(g8/Pm^.^s:.CM$d5N`UJFFEF(!XiKCZH:O%Ke_H%BehN3%:/J9R(ZijV\drh7>+"WDmQolh@g`[*340_tSI0M28NS@=_?0:&?$(f=U+@iP*!#9<a;5l4&aF;Tu(].+7C^&u$<-A5lagMDau=/EWI18PP;`U][Phmj^3)6lcCJ"Zgb-;Fo;'OAR,h^FFq*!K9:A.YU7kN'iXUKgYs#6[(#66ii69?Rgat!K9K<.YU7kN(GZPKgYs#8J`k16ii7*^.KPG!$`_k;FhK%.'"$p"TYhXKgYrl7oQ7G-ii`BWY?'L!$Q),KgYr,Lm1LT;#l]PUJaVs!2PFL'G:QL(()OF6ihg,F-T(d!2*"iPsV2FTM._<6D=Hf%]r\;M#r2f1f5\I$393%.o#sOM#m[He7pIO8/)&gBrP!$'EC7iTh6J*!&00d.YU7k!$'"nH!#JJ~>endstream
|
||||
endobj
|
||||
4 0 obj
|
||||
<<
|
||||
/BaseFont /Helvetica-Bold /Encoding /WinAnsiEncoding /Name /F2 /Subtype /Type1 /Type /Font
|
||||
>>
|
||||
endobj
|
||||
5 0 obj
|
||||
<<
|
||||
/Contents 9 0 R /MediaBox [ 0 0 595.2756 841.8898 ] /Parent 8 0 R /Resources <<
|
||||
/Font 1 0 R /ProcSet [ /PDF /Text /ImageB /ImageC /ImageI ] /XObject <<
|
||||
/FormXob.e0a4eca9b7e93789d055f156cba63530 3 0 R
|
||||
>>
|
||||
>> /Rotate 0 /Trans <<
|
||||
|
||||
>>
|
||||
/Type /Page
|
||||
>>
|
||||
endobj
|
||||
6 0 obj
|
||||
<<
|
||||
/PageMode /UseNone /Pages 8 0 R /Type /Catalog
|
||||
>>
|
||||
endobj
|
||||
7 0 obj
|
||||
<<
|
||||
/Author () /CreationDate (D:20250715083514+02'00') /Creator (\(unspecified\)) /Keywords () /ModDate (D:20250715083514+02'00') /Producer (xhtml2pdf <https://github.com/xhtml2pdf/xhtml2pdf/>)
|
||||
/Subject () /Title () /Trapped /False
|
||||
>>
|
||||
endobj
|
||||
8 0 obj
|
||||
<<
|
||||
/Count 1 /Kids [ 5 0 R ] /Type /Pages
|
||||
>>
|
||||
endobj
|
||||
9 0 obj
|
||||
<<
|
||||
/Filter [ /ASCII85Decode /FlateDecode ] /Length 1995
|
||||
>>
|
||||
stream
|
||||
Gb!Sn=`<%a&:W67fU&=)!3PuZo%*YN;m^Q2a?^mV#`M0L$EPHbSYNs6ZTM8]M'=BQObLZV7<*N`^7"dV41d=<"Fb%\G;qnPf027+TSPAQ^I(t.Jbjkjo7#kDk6cZP5+<G6Kb=_1685a9K5<58;3,=5YU5kqM8"-u1%ht32G0_C"At%b'MLK])G=_.Ud'cuW/FuTr[63Fkl=tb!3W>1BMPcI`,(&,pLL.%_1:WtR<$5"O^K2AS6X8RPJ:`PE(hGf%jUs;a-LLN7mtK].b4#UUq#IgS]q/N(9]]`:7lU.0L8Nb"?&!dWL"J0\.uMhh10RPa$hE,kVKKrg?h'G..kYab\BK%"G8-4o#>38[fk539/U0h\eZO0JuBCDlDg@WKc*[=Act$)Yfdm/_(nQ`_honL!ZiBk'0-d5`$F,0d9f;ZjC&XqC$J.]Q2qe/:VY,n_g%gWamNan3Zj@"&niLF;jl7k0hJbuLfCZkB'QQlOUr3WRO1e>:fsU(-a#'=o4X8Zl"n3J-f/EmWFeK[._F)A&MKJ*Tmf=(JniRVb@_5rUNeJb/X,B^T@HB/LGf;N"@ZI_k7+MB?fn,_<[+aoKe&.&'i5[<s1snXf@IT%_'&(]b)e=D8S)RB0GOJ:giu&1=JG'+d?jW81lmr9'Ve*'9Xr=B5C+.nj4P+u*u8N,-V99bZFYZmq]P/?dmJhPrlFd"3h"CTHZV<<9VUc"/o!oQl,n9(cjbp+WN.rGTX$h1#Hod5cN]?)hZpo$hXh%ckO/YNLO!"B>I_ddkU+l<BEP*ZBNHu%[Sdtkpkt3(.EG)ii(.ai1f1<#d#YtgEqckl/X+&gCdG%$mSa`HG.A;;9;PuO\KW)cU?tUc52YoG@%kq<LR;]0db6r>rEGU%b+\[7-\ZCajXa^J(ZW'dDaX:JGf-Z5q`uO%F44*+p)k(eYEJ@TFe^4k/^p.u,$_aj&#d?N&^K,rICg>G6T<J6iZJ,*=aUTd5r;VS:U(Y;$"9\Gi4imQ,ap&1ZmFB<g4HOSALu"R)dj51@qag5'0*snPGn`5,u.[[9t*^QZA)-1XLkR<OBH3a=jc\";^V/sFS#.qc.UA-lZ71>#/.^ar8YHIQL.J�R\/f$gMtkc.!"b;D$QaY5#l_IrcKf`Y6j/sHLp>U\CCnY:flT&9X]5Bdt@"8qqY=8(t;i60a&dP4lV"6oQ,oI_.00LEW\IN#2N$)Y8f1gQcjBVRkZ%9D4o/L8N'Zb[h023r[;Z7.)Vp*eM!<+2a0=p1?Q"ai[L/`;1#aotg42VIWL8?GQ>D+uWAa-=gZ;0L=RKh*-l_<a&L[I!9iTo^ELjB$D,VnGBEA!TLX[9R'Um3)5R:13eFYB+H=@9^rX#c"i#p;o3F!WH<U+@@Mn$1hWVi^0f(9A;uQ=l*<.S)iXm-?g6t-L#$RgfZ=U#Tm]a8oA.>;dNR-9S15hif0O[X;Z[_)U#&*\@sEbi<XE\C_TI&[hMXSKWAjKC/e&T(qAWXD2P,Fmi#pcTssP0Bo5HTU;[V85>.`+Dn\FcMf*h4#ndTL+#77>aU']OEKl^?fpJ749g0pk@&eFn8ZgGo$hrjGSrB"UKE&ZM*Sc'3Y`]X-,X)QQe&cfjJlg@Zh8=(G/oG$tG!mY0XjlG(q5G6@3&id(3JORt;tKa\*OB,@%dlAo'/\/bTI$q3g)U7Q27-b&[\#ssN!,WmP5J?mdN^0/oJqgV,?QY.7qtNNiakbh*o:nh,]Lpn?:sD4%c2OA/U5Brb\;o[kdClss!]LjAQ@J6H3=Y)7Y4NtmA$$@/^;go>Cuj8l=NI5W:g@2=#Z%Y21NQ0SZA$bOMROE<1GD9d\2>n3#5>dQ&]g4mEknYqA<Q#;5<jX.^(%_VmGW$SA+SG]arBfU#P*\4GfsBHA.IXD%0XII3#=e^$(?:(p2ZJ%f][]M]5BG0u0XVK]j(=R,%56+r0Yc%V$o'(8&H.Tf@eOC!H[FKWS&_.n%T3/mhJ\8p@J?WIu45rW@<('o2~>endstream
|
||||
endobj
|
||||
xref
|
||||
0 10
|
||||
0000000000 65535 f
|
||||
0000000073 00000 n
|
||||
0000000114 00000 n
|
||||
0000000221 00000 n
|
||||
0000003164 00000 n
|
||||
0000003276 00000 n
|
||||
0000003542 00000 n
|
||||
0000003610 00000 n
|
||||
0000003862 00000 n
|
||||
0000003921 00000 n
|
||||
trailer
|
||||
<<
|
||||
/ID
|
||||
[<e1f8ef2bb7af8bebf51350dffa9ee682><e1f8ef2bb7af8bebf51350dffa9ee682>]
|
||||
% ReportLab generated PDF document -- digest (http://www.reportlab.com)
|
||||
|
||||
/Info 7 0 R
|
||||
/Root 6 0 R
|
||||
/Size 10
|
||||
>>
|
||||
startxref
|
||||
6007
|
||||
%%EOF
|
||||
|
|
@ -1,85 +0,0 @@
|
|||
%PDF-1.4
|
||||
%“Œ‹ž ReportLab Generated PDF document http://www.reportlab.com
|
||||
1 0 obj
|
||||
<<
|
||||
/F1 2 0 R /F2 4 0 R
|
||||
>>
|
||||
endobj
|
||||
2 0 obj
|
||||
<<
|
||||
/BaseFont /Helvetica /Encoding /WinAnsiEncoding /Name /F1 /Subtype /Type1 /Type /Font
|
||||
>>
|
||||
endobj
|
||||
3 0 obj
|
||||
<<
|
||||
/BitsPerComponent 8 /ColorSpace /DeviceRGB /Filter [ /ASCII85Decode /FlateDecode ] /Height 125 /Length 2752 /Subtype /Image
|
||||
/Type /XObject /Width 396
|
||||
>>
|
||||
stream
|
||||
Gb"/lCNe_d(^8U1UaN3;I$4-'fC#_Jgn@5*J.LrP(K#>I_i\eB&_CS>gWfg"!!$Q>If/m)j%"gjoDS./I0G0#q"7r<T^LS%rMapH!MD6K8X/-#e[=g"!;&Z:M>FQls(L4u!9f0[&qrpY^`m6E3bH&RW<JOgJB+GuFjPECZm&HV!$5$.U5ZZ[.0(bn9qn`S:alAm:fF*I)Gqp`aAZ69X@c>=!6A&FU5XCq.0,0<,#MCkW"]5"[#ui4G#SeKrhlGX=UdWm!+;P'6lBi,V#]F4bpCMI"tBcV:.(b7QCq+UUE^s[<b"rTJAKWq.&/r('Yq4L8X.aN<!m#8e0N1h8caI+PUI%l"TV:tU-,@g^u3:+PR!HT(`[+DnjG(j2u!BmiHfd0/EQRP,Z10*a0Vp5H,g.D$Mk,oqPFJta!&1T@kF%tq;FQ;V)a'7;-#,=U?_Z&12C4s$HT5H>D\L]$@ot?<2m;=,rHA:K-R<m$5+X?'EI(`<,/R(*O'(M2A?/L`)LKc6lg:49kl'V?p_mU)G65k&Lmt2*YEm8.oB=d:at%f9e3't?T0nr\qWZ0hOf837Sd6klMGc%\iAmEXnKrIJj2)Y.&/h&$?elpUR"+<*`b.^Wjt>B8<hX;<!r?\*#\DsW@D6Dgt!Q8,g*&"Q%D.Z;b#;rWJ:DF,>hKg:at%ZP@`7W8_9$d8jh4O+/C1)W#CqQh'coi:/Tu/];O$SceH+B4,tZeTI*N:X&(7tM]OZ(,b%c6lWr;klM_nS;+:Xa.G0F41MYfnQVuKY1aU:Z)_)$'E/'<D0;(Aj;N.\F)9kFC?jFu=;+htC44X6p=e_u5U/J4d1LsJE;3e=IYN$/Q&nNm(Q%H.1Sl&kXp_qJ:qHqf!-rJPlTMi"V`O!HWJ/&`75uFu7leO%nR86f\d`W.uM)(NQ9#2i8c)AMP;>!._m&I+NVF4QSJP*`o]#gnqAKFQ/PnKB2%k7`EEiP(53Z"fqPd3]&:at%ZdpuFAAZ1@)8sC]<*l#MrX-oS!D2Tm?e%=BD4dt]u3?Ei4'oDLWmsM<'a*J>K]f8MOXfeU0`7KCT2%MaBRu@[anlp!SH?ELD>?L]1K4GOXf6ih7b+LhBbc(C>htAjP9eP/l>Ia#HX&;J&lq!0Tjg&78ddZ#YC2Q<KBrVj["oH_^7_/HK*RkXWL(]aUOe>;i;6V_PAlRoVH<&71\!3g:Lt#B2M1XRJ2l#0[-XtO"Hg#*NR`rTg&4ri8&d>nrF[iq.B8To@bM:JZJk/D.O=3)?@tS@/qj42c72<P+-!0$i?5.'4#J3e],RTR)pPa.GGC7H,8)$$PY#7e)*5i.=b,TdF9+dW=6#i/VU>R0>O\m`TnbKnk100cpZ7=Be^u<5%-DM'apfq>>b,U[mJ-1ahc5[Nt.?OT8(`')2.&^$)!=ge1C3*3DV5+/4?pFkXTTi'J"ZX;2B[/mUPnFLEJ>&'qK-DeA);kMTTKEIKX-@FN!t9eV*,McUaoMu+!r?tWO\-Y-8Hh)hkn071cSCbHFOLV:J9.J=;'$=7&e&`0'@VY'GpH?]28B7<8hUh=Bs(@>!T"!`?W=3#jlPUp7HJhCRe6G5F<j^)KeKqLi=aM\'\GTRV_2Tice_[)Zr#[e/FE*ViOH=-nKV1]5g@sM9;4Pn^Yhk<kU:b%:l2Dd7Rd9`pA<O-4u.QGQ<'8RQVkf2k92l(eX]*R:oWTtn7q[>W3dPZB?nTJ+2.(t8r"H6atpP"Q&k`TWb-)k,qR2bQf2l??Tl:kZVN$WkOh%T2)Qj8]PD8CIp#QSgs`!l4YL/)lqY(2[srP(ZRsDp0eG2_G:IQHJ$tD8^!Y-hh\#Oa:hf]lLXfOUGt=hGjV_="$NKkIdaP2Sn+)O]cC4*nmUg!/\Z,RbKaBLL18W75^.3$2-WbUUCrTF^Qr2h[df%i:]!U):'=6e&KnoQ'dBf"Hd+[i*3I>Scs7^PViD;)%?]"?4XA\-dP'r^?gDO-+h%^rE;/'U@Mo7'7=citqE\:mFW\@ecIE=[mI@oQa.UR?OYO6P,<G<O&b'@H-<-HX:5N`G\\Kd$4RnqWKjV_3tAtGs,Nk4GAfpGWFNE0Pj!`N>Xl*>_24&YKY>(4tse<`M'N*=hKCZro:06_&=7SRa+)OVTW2^>*GVCnTeM=M(U;MBUHH?>Ej]6P8/Bhu/<YITi_QC0j_:Zi-f8`s/W7A64(&mWhZXJZanR,&X?E-,0ijS:mn_&a=+^<WKSE4s1SG'nZ&9VOZ6L#ns,N1s3aQkYRf_JNp=>D9PWIGBQO.S#B2*S+5p6"`mk[(qS3T&maZhe&`1PHAq:Y@#$t(g8/Pm^.^s:.CM$d5N`UJFFEF(!XiKCZH:O%Ke_H%BehN3%:/J9R(ZijV\drh7>+"WDmQolh@g`[*340_tSI0M28NS@=_?0:&?$(f=U+@iP*!#9<a;5l4&aF;Tu(].+7C^&u$<-A5lagMDau=/EWI18PP;`U][Phmj^3)6lcCJ"Zgb-;Fo;'OAR,h^FFq*!K9:A.YU7kN'iXUKgYs#6[(#66ii69?Rgat!K9K<.YU7kN(GZPKgYs#8J`k16ii7*^.KPG!$`_k;FhK%.'"$p"TYhXKgYrl7oQ7G-ii`BWY?'L!$Q),KgYr,Lm1LT;#l]PUJaVs!2PFL'G:QL(()OF6ihg,F-T(d!2*"iPsV2FTM._<6D=Hf%]r\;M#r2f1f5\I$393%.o#sOM#m[He7pIO8/)&gBrP!$'EC7iTh6J*!&00d.YU7k!$'"nH!#JJ~>endstream
|
||||
endobj
|
||||
4 0 obj
|
||||
<<
|
||||
/BaseFont /Helvetica-Bold /Encoding /WinAnsiEncoding /Name /F2 /Subtype /Type1 /Type /Font
|
||||
>>
|
||||
endobj
|
||||
5 0 obj
|
||||
<<
|
||||
/Contents 9 0 R /MediaBox [ 0 0 595.2756 841.8898 ] /Parent 8 0 R /Resources <<
|
||||
/Font 1 0 R /ProcSet [ /PDF /Text /ImageB /ImageC /ImageI ] /XObject <<
|
||||
/FormXob.cce78b71853849c73b887b8941906fa4 3 0 R
|
||||
>>
|
||||
>> /Rotate 0 /Trans <<
|
||||
|
||||
>>
|
||||
/Type /Page
|
||||
>>
|
||||
endobj
|
||||
6 0 obj
|
||||
<<
|
||||
/PageMode /UseNone /Pages 8 0 R /Type /Catalog
|
||||
>>
|
||||
endobj
|
||||
7 0 obj
|
||||
<<
|
||||
/Author () /CreationDate (D:20250717161429+02'00') /Creator (\(unspecified\)) /Keywords () /ModDate (D:20250717161429+02'00') /Producer (xhtml2pdf <https://github.com/xhtml2pdf/xhtml2pdf/>)
|
||||
/Subject () /Title () /Trapped /False
|
||||
>>
|
||||
endobj
|
||||
8 0 obj
|
||||
<<
|
||||
/Count 1 /Kids [ 5 0 R ] /Type /Pages
|
||||
>>
|
||||
endobj
|
||||
9 0 obj
|
||||
<<
|
||||
/Filter [ /ASCII85Decode /FlateDecode ] /Length 1945
|
||||
>>
|
||||
stream
|
||||
Gb!SngN)%,&:N/3i2'?u1P2mA1QQ\F2OW.d7HsH\1EK\.>\,J.eg5>5oj.%gJJ(CL[N]KJ*_@W.`LbmK>V#jW@JC)LGCN$%03rU?$3W?QIN]i5,i.A"8[nBF]"ehe]t't+C8m&$N:KLFPRX(4F<Guu%26Mlq;/u>_<Wl+C.5]Y!^O"*<B-h0.]8OXJ($L-->uHL/*Xcj!%nla(Zd?0@+7_Z2o3:B.NMQ"6R34!#f8#hW#^4)SPH&W^F$FshiEc12.2]R1?ofuCTY.TObAPT00Mn`:Ct>HWruF?4D.]tJs#I$F])W\.oR/W-nmT#%F3%TOJ,XUbq,Sd[+XS)\R+$Hnd="#_;O%?]X=`d%7,,o;RI@PWPf'A17_fX?54]c.2RiiXJAnXH9%l@=H9(t==J4M$HHL("\=5S$D/U-:OE'9@N(GM@R^0_,8WS'^J0I]pdRoJ5#"an2HiNadRL+6;QGdeP&<f%V,bFS<*pA&+b=B!!iME]&`[JEi2W=;3.$%C%D8qc*NWg_"(NWWQ7JOE9A1ED3GFVq"J(eX$9EZ9lPYP9mIag,1p/TLm0a-YLQG'&jY'4O]7Qa8#BJkNa^R`Z5PMn2s,r/oN!s/Nc-h/>OBrA3rV:Cf-F:[Uo],a0-=>3F5o\Q$X/Ej`\IsAP%!C6MG_kh1nROKAN<aHh5#ZDQ+_LlD0\mdG#4]r<4I`$oDm%C2Dluj<Y&6EULA*WZ`C$#D)ji!PBHB%")2h)3)OKgsNKgl=Wi('C1!1q(<FA\_;O>5!*c8^&^2;8R.iDc6$"1.;<=I>a-H1m@a_`Moqk98kCe;>&MmXNU-5bhU6X&ZS1j"oLW`XeE@P&FE4W*YJ=arJ[E4i;m+.tJ8;J%kd'\6Lne9^daK(3=LO09X_Egn7i"D-!rMS"Bgh%^Tt$.SS2n;2N6&*NqWmhE`"+I:5JD0P&Fl,j6K)ZfqJ17n6[o-N+BC]SBJ=I(Y,B9WiZ81&!qcj32V*#Y._&7*\ZG[!+rjX(qJZ0eR5RS&jr1r/]Th5R]:`M&^?T?c;Crc!-L5+du/b>03U\kUlW@V@_QE>*Woe,TXoM5"5qdpEM^0hcuG^Q<Rl's8Y3nuXGKf5UXqTf+9C_!]5Y-Qg`rY?>JPr"X.a0;jiXEZ.L:n&\SXaKUAPO*ile.2-fEO!0pY;/*.!Si2o#j:*AmS^YU6,8HZ\e']iPM<63e7Oc5Q#rHicYB0K-b_j:?4Wl$#;Ut%%h,pLIctu3(;oa$FD1?@V[MNCI7L4=DLp'3b)\'=dCEUCYgGnOW_q.@<P[B:?`Pr6_]PR%I7s2BCHO.f'c9iG6os>7<FTLuU@=aB&FMt[*.i4Oe8R,pQR7DO<6*F1jB<'`jd&Vi_>.M%Kn.Io\A!u-+;PuLZ/t%BV]:s'u!F$<BV)24+TlG3PlJ3'3W`^aU+DqLYe-QrQ(0(bHpbE+$GZ#5)Vqr0<<afk*,?!]eI#%tWJF6t)><M`XW$o79eRq9b`4jQJPlrJQ:rQ:4?tX=m.S'%aOck=L.OLEM]-uHubBPk6`ARAd<47#B25=>(>`s=b\4*=J`X@6O#,_[WD7mB-ZWn(WA2dCb_!=oT`3=H#icL,\4/V.YFXq&gh<j$?>UC;*Cd:W7;2DZ"J01Hc/(=/:\`PGF<#4OR1(t-?Bu4X4:!T]uI#$5<4iOa^]\L9\\4@/C%sb.E?!CG"7qf\2DH0/!dNR4ZjSr"angk9YRA'r%crVJ@(`GPa>2N.]h)?YDs!VfO\,qU:BX>@>n#Q79Y&n$Q\:b:Am'^G#5o2F*Crs,9ArXe9qc@YEE+TU=#S4#neIc+Z/<;1=_([n8/=_?iJSj<#a.mlA-gq=\T>lu#hUSJqfg/\X*g>\gD?'(Te(``h+!Y#E8'Drm`mpBQMBLFmCrQH-(14pCW<L8[BuPRWKWfLc.h(8rORIG$%!SU/;?8^jr<KtYs4d~>endstream
|
||||
endobj
|
||||
xref
|
||||
0 10
|
||||
0000000000 65535 f
|
||||
0000000073 00000 n
|
||||
0000000114 00000 n
|
||||
0000000221 00000 n
|
||||
0000003164 00000 n
|
||||
0000003276 00000 n
|
||||
0000003542 00000 n
|
||||
0000003610 00000 n
|
||||
0000003862 00000 n
|
||||
0000003921 00000 n
|
||||
trailer
|
||||
<<
|
||||
/ID
|
||||
[<171936cfd3c633e9e383a92e7b9a50db><171936cfd3c633e9e383a92e7b9a50db>]
|
||||
% ReportLab generated PDF document -- digest (http://www.reportlab.com)
|
||||
|
||||
/Info 7 0 R
|
||||
/Root 6 0 R
|
||||
/Size 10
|
||||
>>
|
||||
startxref
|
||||
5957
|
||||
%%EOF
|
||||
|
|
@ -1,85 +0,0 @@
|
|||
%PDF-1.4
|
||||
%“Œ‹ž ReportLab Generated PDF document http://www.reportlab.com
|
||||
1 0 obj
|
||||
<<
|
||||
/F1 2 0 R /F2 4 0 R
|
||||
>>
|
||||
endobj
|
||||
2 0 obj
|
||||
<<
|
||||
/BaseFont /Helvetica /Encoding /WinAnsiEncoding /Name /F1 /Subtype /Type1 /Type /Font
|
||||
>>
|
||||
endobj
|
||||
3 0 obj
|
||||
<<
|
||||
/BitsPerComponent 8 /ColorSpace /DeviceRGB /Filter [ /ASCII85Decode /FlateDecode ] /Height 125 /Length 2752 /Subtype /Image
|
||||
/Type /XObject /Width 396
|
||||
>>
|
||||
stream
|
||||
Gb"/lCNe_d(^8U1UaN3;I$4-'fC#_Jgn@5*J.LrP(K#>I_i\eB&_CS>gWfg"!!$Q>If/m)j%"gjoDS./I0G0#q"7r<T^LS%rMapH!MD6K8X/-#e[=g"!;&Z:M>FQls(L4u!9f0[&qrpY^`m6E3bH&RW<JOgJB+GuFjPECZm&HV!$5$.U5ZZ[.0(bn9qn`S:alAm:fF*I)Gqp`aAZ69X@c>=!6A&FU5XCq.0,0<,#MCkW"]5"[#ui4G#SeKrhlGX=UdWm!+;P'6lBi,V#]F4bpCMI"tBcV:.(b7QCq+UUE^s[<b"rTJAKWq.&/r('Yq4L8X.aN<!m#8e0N1h8caI+PUI%l"TV:tU-,@g^u3:+PR!HT(`[+DnjG(j2u!BmiHfd0/EQRP,Z10*a0Vp5H,g.D$Mk,oqPFJta!&1T@kF%tq;FQ;V)a'7;-#,=U?_Z&12C4s$HT5H>D\L]$@ot?<2m;=,rHA:K-R<m$5+X?'EI(`<,/R(*O'(M2A?/L`)LKc6lg:49kl'V?p_mU)G65k&Lmt2*YEm8.oB=d:at%f9e3't?T0nr\qWZ0hOf837Sd6klMGc%\iAmEXnKrIJj2)Y.&/h&$?elpUR"+<*`b.^Wjt>B8<hX;<!r?\*#\DsW@D6Dgt!Q8,g*&"Q%D.Z;b#;rWJ:DF,>hKg:at%ZP@`7W8_9$d8jh4O+/C1)W#CqQh'coi:/Tu/];O$SceH+B4,tZeTI*N:X&(7tM]OZ(,b%c6lWr;klM_nS;+:Xa.G0F41MYfnQVuKY1aU:Z)_)$'E/'<D0;(Aj;N.\F)9kFC?jFu=;+htC44X6p=e_u5U/J4d1LsJE;3e=IYN$/Q&nNm(Q%H.1Sl&kXp_qJ:qHqf!-rJPlTMi"V`O!HWJ/&`75uFu7leO%nR86f\d`W.uM)(NQ9#2i8c)AMP;>!._m&I+NVF4QSJP*`o]#gnqAKFQ/PnKB2%k7`EEiP(53Z"fqPd3]&:at%ZdpuFAAZ1@)8sC]<*l#MrX-oS!D2Tm?e%=BD4dt]u3?Ei4'oDLWmsM<'a*J>K]f8MOXfeU0`7KCT2%MaBRu@[anlp!SH?ELD>?L]1K4GOXf6ih7b+LhBbc(C>htAjP9eP/l>Ia#HX&;J&lq!0Tjg&78ddZ#YC2Q<KBrVj["oH_^7_/HK*RkXWL(]aUOe>;i;6V_PAlRoVH<&71\!3g:Lt#B2M1XRJ2l#0[-XtO"Hg#*NR`rTg&4ri8&d>nrF[iq.B8To@bM:JZJk/D.O=3)?@tS@/qj42c72<P+-!0$i?5.'4#J3e],RTR)pPa.GGC7H,8)$$PY#7e)*5i.=b,TdF9+dW=6#i/VU>R0>O\m`TnbKnk100cpZ7=Be^u<5%-DM'apfq>>b,U[mJ-1ahc5[Nt.?OT8(`')2.&^$)!=ge1C3*3DV5+/4?pFkXTTi'J"ZX;2B[/mUPnFLEJ>&'qK-DeA);kMTTKEIKX-@FN!t9eV*,McUaoMu+!r?tWO\-Y-8Hh)hkn071cSCbHFOLV:J9.J=;'$=7&e&`0'@VY'GpH?]28B7<8hUh=Bs(@>!T"!`?W=3#jlPUp7HJhCRe6G5F<j^)KeKqLi=aM\'\GTRV_2Tice_[)Zr#[e/FE*ViOH=-nKV1]5g@sM9;4Pn^Yhk<kU:b%:l2Dd7Rd9`pA<O-4u.QGQ<'8RQVkf2k92l(eX]*R:oWTtn7q[>W3dPZB?nTJ+2.(t8r"H6atpP"Q&k`TWb-)k,qR2bQf2l??Tl:kZVN$WkOh%T2)Qj8]PD8CIp#QSgs`!l4YL/)lqY(2[srP(ZRsDp0eG2_G:IQHJ$tD8^!Y-hh\#Oa:hf]lLXfOUGt=hGjV_="$NKkIdaP2Sn+)O]cC4*nmUg!/\Z,RbKaBLL18W75^.3$2-WbUUCrTF^Qr2h[df%i:]!U):'=6e&KnoQ'dBf"Hd+[i*3I>Scs7^PViD;)%?]"?4XA\-dP'r^?gDO-+h%^rE;/'U@Mo7'7=citqE\:mFW\@ecIE=[mI@oQa.UR?OYO6P,<G<O&b'@H-<-HX:5N`G\\Kd$4RnqWKjV_3tAtGs,Nk4GAfpGWFNE0Pj!`N>Xl*>_24&YKY>(4tse<`M'N*=hKCZro:06_&=7SRa+)OVTW2^>*GVCnTeM=M(U;MBUHH?>Ej]6P8/Bhu/<YITi_QC0j_:Zi-f8`s/W7A64(&mWhZXJZanR,&X?E-,0ijS:mn_&a=+^<WKSE4s1SG'nZ&9VOZ6L#ns,N1s3aQkYRf_JNp=>D9PWIGBQO.S#B2*S+5p6"`mk[(qS3T&maZhe&`1PHAq:Y@#$t(g8/Pm^.^s:.CM$d5N`UJFFEF(!XiKCZH:O%Ke_H%BehN3%:/J9R(ZijV\drh7>+"WDmQolh@g`[*340_tSI0M28NS@=_?0:&?$(f=U+@iP*!#9<a;5l4&aF;Tu(].+7C^&u$<-A5lagMDau=/EWI18PP;`U][Phmj^3)6lcCJ"Zgb-;Fo;'OAR,h^FFq*!K9:A.YU7kN'iXUKgYs#6[(#66ii69?Rgat!K9K<.YU7kN(GZPKgYs#8J`k16ii7*^.KPG!$`_k;FhK%.'"$p"TYhXKgYrl7oQ7G-ii`BWY?'L!$Q),KgYr,Lm1LT;#l]PUJaVs!2PFL'G:QL(()OF6ihg,F-T(d!2*"iPsV2FTM._<6D=Hf%]r\;M#r2f1f5\I$393%.o#sOM#m[He7pIO8/)&gBrP!$'EC7iTh6J*!&00d.YU7k!$'"nH!#JJ~>endstream
|
||||
endobj
|
||||
4 0 obj
|
||||
<<
|
||||
/BaseFont /Helvetica-Bold /Encoding /WinAnsiEncoding /Name /F2 /Subtype /Type1 /Type /Font
|
||||
>>
|
||||
endobj
|
||||
5 0 obj
|
||||
<<
|
||||
/Contents 9 0 R /MediaBox [ 0 0 595.2756 841.8898 ] /Parent 8 0 R /Resources <<
|
||||
/Font 1 0 R /ProcSet [ /PDF /Text /ImageB /ImageC /ImageI ] /XObject <<
|
||||
/FormXob.cce78b71853849c73b887b8941906fa4 3 0 R
|
||||
>>
|
||||
>> /Rotate 0 /Trans <<
|
||||
|
||||
>>
|
||||
/Type /Page
|
||||
>>
|
||||
endobj
|
||||
6 0 obj
|
||||
<<
|
||||
/PageMode /UseNone /Pages 8 0 R /Type /Catalog
|
||||
>>
|
||||
endobj
|
||||
7 0 obj
|
||||
<<
|
||||
/Author () /CreationDate (D:20250717161510+02'00') /Creator (\(unspecified\)) /Keywords () /ModDate (D:20250717161510+02'00') /Producer (xhtml2pdf <https://github.com/xhtml2pdf/xhtml2pdf/>)
|
||||
/Subject () /Title () /Trapped /False
|
||||
>>
|
||||
endobj
|
||||
8 0 obj
|
||||
<<
|
||||
/Count 1 /Kids [ 5 0 R ] /Type /Pages
|
||||
>>
|
||||
endobj
|
||||
9 0 obj
|
||||
<<
|
||||
/Filter [ /ASCII85Decode /FlateDecode ] /Length 1944
|
||||
>>
|
||||
stream
|
||||
Gb!Sn=`YcG&:WeDkTpseX,tlCa,fbQlrLFX"/k_J.Mmim%9j$QNnmEYI9L[t%1G%Fc!i.k!Q.I1rjqur<_EK"_\XSjr=L3fFNMoj&E'A]M1DCbFFPZNh:>Nj'&SfDk*?@RV'_K_as/'+2J<<CJb0F09E8/T>71Z?YKKbC($U_a!6%u<iKP7\S5trgVOpGL]HQ)aV#/^D\4cm-QGYD.;'VLb"9\+lFBFM3O[.,5#cC@iG3j3j5+.H1RbZA@5;r5lJ5sJ/W,KVf[H?=8&gF2;ocuPg+G(&'$*)d*cE(7S,M`CcUr"BXVC:q7?uG$DS<4g86`F7Y=[]#uZd!i;]s\O7's=`m_6lRSCK$uIK'F&HC,'a-M%Q[s3l/>=.RmH;/eY'b8Zg),E_\Ep*(0%r;W,V2No*kEO9EN:hFZ(dp\OL#1a_8$MY8Vl0"r9SSIGDcSX(J5S!rPW[#-?/ND*?K<ZB()h2iaOX+lb9^++@o!nEA8:'%Y#EjIcF<R-s@Al%8_0JqcEZ@T!<.a&RQ9I9(dn!paU@tMuu!!SqNWqD:g[.a>,%N8E:Zh=QTnO#hldde3NO^5fMn,p5kk@?:lj.C[*j+#0\DajpcR:aQ+-qLNGMuJ)`)3``_9)A(**g9B6hOojFOO]QR^0Ct/EdkUb4[-jrjCC"aou;VD9:dRlQ]<kQG*m)A-A2*]3hFUC^N\9O0(,mgY-7<N08:!]K>h>fIiFb&<+m=1RMh#4c5N&8#`Y(WR&HpT>@WmrDPFq0_PJl;'0Y'"EIHTY[&7Gf]d83VmTVD>K:*E,8gQ]#\_I^t]Ne+02.*BF?noJGLD\GhB;M;cHre2f1V?ft#%%n\Bft]WLQ@J)2=:RR7RYDc#*m&_bCEd"*D/"lcN!Fb6W%`"UlD$@\h\7A:o1d568X7>0cb]j2rilP5OtA>p]e[")63(aHn/Lm^hk=3In[lRhKZb&>ECG0bmDQ+`q#(o!=$XKN<C.CBn@QS;ZiaERZq^UB!^9'K,(h#2-EkWdY\6R?Dfkb2R,4uoAnqee!kP_BB81W\[_M2riFk=m4X3Kdh4U%Vb[aun<#-AeM7$A0GVLDBDhp8#?0UHOY*3JJoD1>%i/o$Jd:XkC2recmJ)iUp8_Qja1(0[0j7<SamTITSMW*<@GrfqNE++(h:uj<->$4\X,s6=jZ7Yha^XG?1&"4mB(*+690o:4MNq&]YZ(\K*R<sj^*^2Gn3@Ki8[VN?H@.YP.2-f-Oiu6o*G(]^>E%s'=Ha>KhCIS9dG%,X0#JUK0DdX;Hd2&f;%D\h@XYelJeTlm3S@9#0#/OFEgZG07V+aMK5Flor3*=i`_&:$gl%GU9=6#t1m-"W]X=D6.G-FVDCt'P_K2j7=tk1,T;SqfDJc@OS62+O_T?*2[@2Ut$\D7pX-_2C\g[7>#]\BG'Nl!V"AnB:bArLjL&u`>KG$BrMNh'.$>QWG[das/o12&5K,$Xq1@Hg/qtd6>]&D%L6u'ZSc[_8`-cAj#;-%(;D/:[lnhH8iK%VV#Pt&A64HQUg1n;NBpA7gtGOm\e=t*^>GV?QqVqAusIY\2@#.JH^\:(\g&J\h8;H(Bs;_u@rGA?,ZN)r*<k&5AmAj>,=h/lmK(iF.T9--rd[W$a=T`H[mod%*0/6Gjej>Sh-%NoK&CF2d$W8r>]eEhUEB+9-sJ&?8g+<hlt;E;@tYhkGfJ=#&kN0^8,DVN84T>KYl*,78u%tL@W85ON#q<VgD6ZMeGPbA&O]NO5$0V4r^nn,V>k-qkKIC8&I10Cm;P!&tSfT`TdgB*g$)C+TU\M_0j3J8V>Y^0A@GU9UWR>_BgjK,\,%[mU1rV7TX`T&s=-H*S:6e6QbRjqtS?+kMWQ=mW(^K43LHfKR6E5<MKF2Sqt>Fm<r</7[q"1VH\$3-e:'GmY^rs]8Vl.f>W]OOdY\ADVPdAJs%!B4`k#Jkohnc~>endstream
|
||||
endobj
|
||||
xref
|
||||
0 10
|
||||
0000000000 65535 f
|
||||
0000000073 00000 n
|
||||
0000000114 00000 n
|
||||
0000000221 00000 n
|
||||
0000003164 00000 n
|
||||
0000003276 00000 n
|
||||
0000003542 00000 n
|
||||
0000003610 00000 n
|
||||
0000003862 00000 n
|
||||
0000003921 00000 n
|
||||
trailer
|
||||
<<
|
||||
/ID
|
||||
[<8ab819ec586be2263d69f050dece040e><8ab819ec586be2263d69f050dece040e>]
|
||||
% ReportLab generated PDF document -- digest (http://www.reportlab.com)
|
||||
|
||||
/Info 7 0 R
|
||||
/Root 6 0 R
|
||||
/Size 10
|
||||
>>
|
||||
startxref
|
||||
5956
|
||||
%%EOF
|
||||
|
|
@ -1,85 +0,0 @@
|
|||
%PDF-1.4
|
||||
%“Œ‹ž ReportLab Generated PDF document http://www.reportlab.com
|
||||
1 0 obj
|
||||
<<
|
||||
/F1 2 0 R /F2 4 0 R
|
||||
>>
|
||||
endobj
|
||||
2 0 obj
|
||||
<<
|
||||
/BaseFont /Helvetica /Encoding /WinAnsiEncoding /Name /F1 /Subtype /Type1 /Type /Font
|
||||
>>
|
||||
endobj
|
||||
3 0 obj
|
||||
<<
|
||||
/BitsPerComponent 8 /ColorSpace /DeviceRGB /Filter [ /ASCII85Decode /FlateDecode ] /Height 125 /Length 2752 /Subtype /Image
|
||||
/Type /XObject /Width 396
|
||||
>>
|
||||
stream
|
||||
Gb"/lCNe_d(^8U1UaN3;I$4-'fC#_Jgn@5*J.LrP(K#>I_i\eB&_CS>gWfg"!!$Q>If/m)j%"gjoDS./I0G0#q"7r<T^LS%rMapH!MD6K8X/-#e[=g"!;&Z:M>FQls(L4u!9f0[&qrpY^`m6E3bH&RW<JOgJB+GuFjPECZm&HV!$5$.U5ZZ[.0(bn9qn`S:alAm:fF*I)Gqp`aAZ69X@c>=!6A&FU5XCq.0,0<,#MCkW"]5"[#ui4G#SeKrhlGX=UdWm!+;P'6lBi,V#]F4bpCMI"tBcV:.(b7QCq+UUE^s[<b"rTJAKWq.&/r('Yq4L8X.aN<!m#8e0N1h8caI+PUI%l"TV:tU-,@g^u3:+PR!HT(`[+DnjG(j2u!BmiHfd0/EQRP,Z10*a0Vp5H,g.D$Mk,oqPFJta!&1T@kF%tq;FQ;V)a'7;-#,=U?_Z&12C4s$HT5H>D\L]$@ot?<2m;=,rHA:K-R<m$5+X?'EI(`<,/R(*O'(M2A?/L`)LKc6lg:49kl'V?p_mU)G65k&Lmt2*YEm8.oB=d:at%f9e3't?T0nr\qWZ0hOf837Sd6klMGc%\iAmEXnKrIJj2)Y.&/h&$?elpUR"+<*`b.^Wjt>B8<hX;<!r?\*#\DsW@D6Dgt!Q8,g*&"Q%D.Z;b#;rWJ:DF,>hKg:at%ZP@`7W8_9$d8jh4O+/C1)W#CqQh'coi:/Tu/];O$SceH+B4,tZeTI*N:X&(7tM]OZ(,b%c6lWr;klM_nS;+:Xa.G0F41MYfnQVuKY1aU:Z)_)$'E/'<D0;(Aj;N.\F)9kFC?jFu=;+htC44X6p=e_u5U/J4d1LsJE;3e=IYN$/Q&nNm(Q%H.1Sl&kXp_qJ:qHqf!-rJPlTMi"V`O!HWJ/&`75uFu7leO%nR86f\d`W.uM)(NQ9#2i8c)AMP;>!._m&I+NVF4QSJP*`o]#gnqAKFQ/PnKB2%k7`EEiP(53Z"fqPd3]&:at%ZdpuFAAZ1@)8sC]<*l#MrX-oS!D2Tm?e%=BD4dt]u3?Ei4'oDLWmsM<'a*J>K]f8MOXfeU0`7KCT2%MaBRu@[anlp!SH?ELD>?L]1K4GOXf6ih7b+LhBbc(C>htAjP9eP/l>Ia#HX&;J&lq!0Tjg&78ddZ#YC2Q<KBrVj["oH_^7_/HK*RkXWL(]aUOe>;i;6V_PAlRoVH<&71\!3g:Lt#B2M1XRJ2l#0[-XtO"Hg#*NR`rTg&4ri8&d>nrF[iq.B8To@bM:JZJk/D.O=3)?@tS@/qj42c72<P+-!0$i?5.'4#J3e],RTR)pPa.GGC7H,8)$$PY#7e)*5i.=b,TdF9+dW=6#i/VU>R0>O\m`TnbKnk100cpZ7=Be^u<5%-DM'apfq>>b,U[mJ-1ahc5[Nt.?OT8(`')2.&^$)!=ge1C3*3DV5+/4?pFkXTTi'J"ZX;2B[/mUPnFLEJ>&'qK-DeA);kMTTKEIKX-@FN!t9eV*,McUaoMu+!r?tWO\-Y-8Hh)hkn071cSCbHFOLV:J9.J=;'$=7&e&`0'@VY'GpH?]28B7<8hUh=Bs(@>!T"!`?W=3#jlPUp7HJhCRe6G5F<j^)KeKqLi=aM\'\GTRV_2Tice_[)Zr#[e/FE*ViOH=-nKV1]5g@sM9;4Pn^Yhk<kU:b%:l2Dd7Rd9`pA<O-4u.QGQ<'8RQVkf2k92l(eX]*R:oWTtn7q[>W3dPZB?nTJ+2.(t8r"H6atpP"Q&k`TWb-)k,qR2bQf2l??Tl:kZVN$WkOh%T2)Qj8]PD8CIp#QSgs`!l4YL/)lqY(2[srP(ZRsDp0eG2_G:IQHJ$tD8^!Y-hh\#Oa:hf]lLXfOUGt=hGjV_="$NKkIdaP2Sn+)O]cC4*nmUg!/\Z,RbKaBLL18W75^.3$2-WbUUCrTF^Qr2h[df%i:]!U):'=6e&KnoQ'dBf"Hd+[i*3I>Scs7^PViD;)%?]"?4XA\-dP'r^?gDO-+h%^rE;/'U@Mo7'7=citqE\:mFW\@ecIE=[mI@oQa.UR?OYO6P,<G<O&b'@H-<-HX:5N`G\\Kd$4RnqWKjV_3tAtGs,Nk4GAfpGWFNE0Pj!`N>Xl*>_24&YKY>(4tse<`M'N*=hKCZro:06_&=7SRa+)OVTW2^>*GVCnTeM=M(U;MBUHH?>Ej]6P8/Bhu/<YITi_QC0j_:Zi-f8`s/W7A64(&mWhZXJZanR,&X?E-,0ijS:mn_&a=+^<WKSE4s1SG'nZ&9VOZ6L#ns,N1s3aQkYRf_JNp=>D9PWIGBQO.S#B2*S+5p6"`mk[(qS3T&maZhe&`1PHAq:Y@#$t(g8/Pm^.^s:.CM$d5N`UJFFEF(!XiKCZH:O%Ke_H%BehN3%:/J9R(ZijV\drh7>+"WDmQolh@g`[*340_tSI0M28NS@=_?0:&?$(f=U+@iP*!#9<a;5l4&aF;Tu(].+7C^&u$<-A5lagMDau=/EWI18PP;`U][Phmj^3)6lcCJ"Zgb-;Fo;'OAR,h^FFq*!K9:A.YU7kN'iXUKgYs#6[(#66ii69?Rgat!K9K<.YU7kN(GZPKgYs#8J`k16ii7*^.KPG!$`_k;FhK%.'"$p"TYhXKgYrl7oQ7G-ii`BWY?'L!$Q),KgYr,Lm1LT;#l]PUJaVs!2PFL'G:QL(()OF6ihg,F-T(d!2*"iPsV2FTM._<6D=Hf%]r\;M#r2f1f5\I$393%.o#sOM#m[He7pIO8/)&gBrP!$'EC7iTh6J*!&00d.YU7k!$'"nH!#JJ~>endstream
|
||||
endobj
|
||||
4 0 obj
|
||||
<<
|
||||
/BaseFont /Helvetica-Bold /Encoding /WinAnsiEncoding /Name /F2 /Subtype /Type1 /Type /Font
|
||||
>>
|
||||
endobj
|
||||
5 0 obj
|
||||
<<
|
||||
/Contents 9 0 R /MediaBox [ 0 0 595.2756 841.8898 ] /Parent 8 0 R /Resources <<
|
||||
/Font 1 0 R /ProcSet [ /PDF /Text /ImageB /ImageC /ImageI ] /XObject <<
|
||||
/FormXob.cce78b71853849c73b887b8941906fa4 3 0 R
|
||||
>>
|
||||
>> /Rotate 0 /Trans <<
|
||||
|
||||
>>
|
||||
/Type /Page
|
||||
>>
|
||||
endobj
|
||||
6 0 obj
|
||||
<<
|
||||
/PageMode /UseNone /Pages 8 0 R /Type /Catalog
|
||||
>>
|
||||
endobj
|
||||
7 0 obj
|
||||
<<
|
||||
/Author () /CreationDate (D:20250717162337+02'00') /Creator (\(unspecified\)) /Keywords () /ModDate (D:20250717162337+02'00') /Producer (xhtml2pdf <https://github.com/xhtml2pdf/xhtml2pdf/>)
|
||||
/Subject () /Title () /Trapped /False
|
||||
>>
|
||||
endobj
|
||||
8 0 obj
|
||||
<<
|
||||
/Count 1 /Kids [ 5 0 R ] /Type /Pages
|
||||
>>
|
||||
endobj
|
||||
9 0 obj
|
||||
<<
|
||||
/Filter [ /ASCII85Decode /FlateDecode ] /Length 1946
|
||||
>>
|
||||
stream
|
||||
Gb!SnD0$US&H9tYd$IL!ArsEH^O3+m\&l";?V%(:4QF7sEQK'%GtHfjqQB6Tkhrs4CkA&b!ur\jp=\9b<\"J!$t#*Dp.'f6dNqD]5_,'d(BTaldf#`,FBag.$[b=mRp.A<QC:pq.$'$Hfq93R#LY]`0EGF@mk#Lr]IlRR<hqf$!#/X7Ki;`bE`uW:Rbj/bGsf/M8b]=hE01.1.#246UII#N#mT6bl*)'F,(Z+I&5JW[mF^I_F>=m827]R^IVeAQ!NUm=;;[16CX&u@,Xb=Ukt1GpJd=8:-)bkE3O<`@N-#<'P7!LURA.K$J[pnYE(5#(%&I]UAeC#sbr5%4p"Dm"=1GsS#1j(@X\Fdm#c^gfWl<%R,t=Pjklg&;WYel5\O`6&-++rKb;mh_EX](f8qA3g3.>'\5S=c0GUGe,g?['$e!Q(-/)&Sp\bKV2D)1Iu2d4ArDJGoPd42/X2DS9t>&>7CF@1X.XVs[+qPrH[#uj8)3!IB(aj&t`<B9)Zp,MZ@JtWdCOUY!L<*?AKAh%M=I-7:o)A@3n!\!:1<io^SVR>$*E6u,;S@(!eN#tA)Od<a1NU.",L*+Kr5:;@,)?8Lh(B7#KH8@=4aYZWp6:#oT=S1doadC9f;pp`io9anso*0&JK<1XQpZ5$BOn7%5n)5G(-c_FuW&Gd9=n58&\TF>J[)6F$4;l'r=7L*]rk5j'428<e\[oBJ\/=)[$l0BA*Tl8a-41KV8<%6$@[aXCjZ>dRV(F%[l!8(`Elq)l=B;s(AT4qF4#"*]>F>8ON3Kbo0\Uq*L8ckji^Kj-B.B8FU6V']8]Bi8[2^_E)<DDs>3W+FFHXtMG[QgRCB<D[!I5d5qU=DUj)0kR!3Hiq1:oiKYj+!:f'A)(N#2)8Hj*B3gD"?H.$Lf5g]^[AY*]bpTUnr7:ZV+l3;8J^V^T7[Z"/T(]-H3*=$U`Z#k/q"n[pfP0@:PG$YXUuZ@oJFUMPHH1-m.97S'!+aN2k]k_^_KgUc&h2q_T(D-'H_<3!=*!M7p.:6eO)%a@-8FS>_*LW^A%q2ChNIen<;D9DPg6c5m[S&j'V"t97;']nVIraM7P@H+WmJZOL'E!=@L:Lui%L>rLH[5l&*G!EDpq1s3Abqf1XYP@/TEp=JnVh*q'4h40')7Hd=QLDgCAV+gf2C+JB.]l^le&HF!]RaUuF5!".UdDD3>2#eqd2^-J-tQL1J`[I*FUhcB=`J\Z#DAmVW]E;W)lo20\uj%blF;k[%?N0]p-Pk&#XRnonWi<TUEPt4%HNk()i)+=pt@-OngguZfN:FsQgLC2W)a^B%q/&RGmL1NT(^"//cblP=<M*"*AR!$b/L2\&f7!-k#'u=d&RlIR4>Z]oIAh1<c0K+4G;&0==1Mce1".o9.&WYY39%`^m5-i.?2kNBO"i-H?Y%PC)2[XLg'p/Fi$SX728/j4q'aaSeOW9WHSNR<ES#NLt$\q+/6RYTKAS9(/MY..Z/+goGNc0Z0sJV-,BmB<,n-;fNB/_b)q'FUnhD,MFjYl/dh@61*-m;EK0o\Q0mCTc)=YMQR(DqDUBoAnU_jW_7@C))_\AO/6>4Cfo=JqnG:WC1$kI"3$%&0NiDhYh29l]GC)7hQO/Bc)pja<'V[0!i(%Irb&fd<XuQk*Pm-uCb_-'hRdcb;P;=[Kh]Xk(:[tM00DBBE/eURj6XD6Tf+us7&K:/%>F!U!FNASDq>XB\4GuRDVW\%7oG%\tN\m@kX`#Vjm[Fj]J!;lb>QMhXZru80pXT0W=1YS9>XAX1G$D8MTF75%[U`T-ZUSGXr@>>]3&?>/N!EDPl56]MQH,3Z@$mI.(=#7q^p`_"j&%q1PBV\iG@S]tmqPdtm%CC<O3-t*[f?*e$#X\:NtF"3,A)rqj(cb97?HdG2Ic_'M_F%]e:Q]>[,V*/i?Ooj$A8)5Mg(Q-Q@JTWN`<eg>5nVJD?.E~>endstream
|
||||
endobj
|
||||
xref
|
||||
0 10
|
||||
0000000000 65535 f
|
||||
0000000073 00000 n
|
||||
0000000114 00000 n
|
||||
0000000221 00000 n
|
||||
0000003164 00000 n
|
||||
0000003276 00000 n
|
||||
0000003542 00000 n
|
||||
0000003610 00000 n
|
||||
0000003862 00000 n
|
||||
0000003921 00000 n
|
||||
trailer
|
||||
<<
|
||||
/ID
|
||||
[<cc420a16091a37dc959374438c7d30f4><cc420a16091a37dc959374438c7d30f4>]
|
||||
% ReportLab generated PDF document -- digest (http://www.reportlab.com)
|
||||
|
||||
/Info 7 0 R
|
||||
/Root 6 0 R
|
||||
/Size 10
|
||||
>>
|
||||
startxref
|
||||
5958
|
||||
%%EOF
|
||||
|
|
@ -1,85 +0,0 @@
|
|||
%PDF-1.4
|
||||
%“Œ‹ž ReportLab Generated PDF document http://www.reportlab.com
|
||||
1 0 obj
|
||||
<<
|
||||
/F1 2 0 R /F2 4 0 R
|
||||
>>
|
||||
endobj
|
||||
2 0 obj
|
||||
<<
|
||||
/BaseFont /Helvetica /Encoding /WinAnsiEncoding /Name /F1 /Subtype /Type1 /Type /Font
|
||||
>>
|
||||
endobj
|
||||
3 0 obj
|
||||
<<
|
||||
/BitsPerComponent 8 /ColorSpace /DeviceRGB /Filter [ /ASCII85Decode /FlateDecode ] /Height 125 /Length 2752 /Subtype /Image
|
||||
/Type /XObject /Width 396
|
||||
>>
|
||||
stream
|
||||
Gb"/lCNe_d(^8U1UaN3;I$4-'fC#_Jgn@5*J.LrP(K#>I_i\eB&_CS>gWfg"!!$Q>If/m)j%"gjoDS./I0G0#q"7r<T^LS%rMapH!MD6K8X/-#e[=g"!;&Z:M>FQls(L4u!9f0[&qrpY^`m6E3bH&RW<JOgJB+GuFjPECZm&HV!$5$.U5ZZ[.0(bn9qn`S:alAm:fF*I)Gqp`aAZ69X@c>=!6A&FU5XCq.0,0<,#MCkW"]5"[#ui4G#SeKrhlGX=UdWm!+;P'6lBi,V#]F4bpCMI"tBcV:.(b7QCq+UUE^s[<b"rTJAKWq.&/r('Yq4L8X.aN<!m#8e0N1h8caI+PUI%l"TV:tU-,@g^u3:+PR!HT(`[+DnjG(j2u!BmiHfd0/EQRP,Z10*a0Vp5H,g.D$Mk,oqPFJta!&1T@kF%tq;FQ;V)a'7;-#,=U?_Z&12C4s$HT5H>D\L]$@ot?<2m;=,rHA:K-R<m$5+X?'EI(`<,/R(*O'(M2A?/L`)LKc6lg:49kl'V?p_mU)G65k&Lmt2*YEm8.oB=d:at%f9e3't?T0nr\qWZ0hOf837Sd6klMGc%\iAmEXnKrIJj2)Y.&/h&$?elpUR"+<*`b.^Wjt>B8<hX;<!r?\*#\DsW@D6Dgt!Q8,g*&"Q%D.Z;b#;rWJ:DF,>hKg:at%ZP@`7W8_9$d8jh4O+/C1)W#CqQh'coi:/Tu/];O$SceH+B4,tZeTI*N:X&(7tM]OZ(,b%c6lWr;klM_nS;+:Xa.G0F41MYfnQVuKY1aU:Z)_)$'E/'<D0;(Aj;N.\F)9kFC?jFu=;+htC44X6p=e_u5U/J4d1LsJE;3e=IYN$/Q&nNm(Q%H.1Sl&kXp_qJ:qHqf!-rJPlTMi"V`O!HWJ/&`75uFu7leO%nR86f\d`W.uM)(NQ9#2i8c)AMP;>!._m&I+NVF4QSJP*`o]#gnqAKFQ/PnKB2%k7`EEiP(53Z"fqPd3]&:at%ZdpuFAAZ1@)8sC]<*l#MrX-oS!D2Tm?e%=BD4dt]u3?Ei4'oDLWmsM<'a*J>K]f8MOXfeU0`7KCT2%MaBRu@[anlp!SH?ELD>?L]1K4GOXf6ih7b+LhBbc(C>htAjP9eP/l>Ia#HX&;J&lq!0Tjg&78ddZ#YC2Q<KBrVj["oH_^7_/HK*RkXWL(]aUOe>;i;6V_PAlRoVH<&71\!3g:Lt#B2M1XRJ2l#0[-XtO"Hg#*NR`rTg&4ri8&d>nrF[iq.B8To@bM:JZJk/D.O=3)?@tS@/qj42c72<P+-!0$i?5.'4#J3e],RTR)pPa.GGC7H,8)$$PY#7e)*5i.=b,TdF9+dW=6#i/VU>R0>O\m`TnbKnk100cpZ7=Be^u<5%-DM'apfq>>b,U[mJ-1ahc5[Nt.?OT8(`')2.&^$)!=ge1C3*3DV5+/4?pFkXTTi'J"ZX;2B[/mUPnFLEJ>&'qK-DeA);kMTTKEIKX-@FN!t9eV*,McUaoMu+!r?tWO\-Y-8Hh)hkn071cSCbHFOLV:J9.J=;'$=7&e&`0'@VY'GpH?]28B7<8hUh=Bs(@>!T"!`?W=3#jlPUp7HJhCRe6G5F<j^)KeKqLi=aM\'\GTRV_2Tice_[)Zr#[e/FE*ViOH=-nKV1]5g@sM9;4Pn^Yhk<kU:b%:l2Dd7Rd9`pA<O-4u.QGQ<'8RQVkf2k92l(eX]*R:oWTtn7q[>W3dPZB?nTJ+2.(t8r"H6atpP"Q&k`TWb-)k,qR2bQf2l??Tl:kZVN$WkOh%T2)Qj8]PD8CIp#QSgs`!l4YL/)lqY(2[srP(ZRsDp0eG2_G:IQHJ$tD8^!Y-hh\#Oa:hf]lLXfOUGt=hGjV_="$NKkIdaP2Sn+)O]cC4*nmUg!/\Z,RbKaBLL18W75^.3$2-WbUUCrTF^Qr2h[df%i:]!U):'=6e&KnoQ'dBf"Hd+[i*3I>Scs7^PViD;)%?]"?4XA\-dP'r^?gDO-+h%^rE;/'U@Mo7'7=citqE\:mFW\@ecIE=[mI@oQa.UR?OYO6P,<G<O&b'@H-<-HX:5N`G\\Kd$4RnqWKjV_3tAtGs,Nk4GAfpGWFNE0Pj!`N>Xl*>_24&YKY>(4tse<`M'N*=hKCZro:06_&=7SRa+)OVTW2^>*GVCnTeM=M(U;MBUHH?>Ej]6P8/Bhu/<YITi_QC0j_:Zi-f8`s/W7A64(&mWhZXJZanR,&X?E-,0ijS:mn_&a=+^<WKSE4s1SG'nZ&9VOZ6L#ns,N1s3aQkYRf_JNp=>D9PWIGBQO.S#B2*S+5p6"`mk[(qS3T&maZhe&`1PHAq:Y@#$t(g8/Pm^.^s:.CM$d5N`UJFFEF(!XiKCZH:O%Ke_H%BehN3%:/J9R(ZijV\drh7>+"WDmQolh@g`[*340_tSI0M28NS@=_?0:&?$(f=U+@iP*!#9<a;5l4&aF;Tu(].+7C^&u$<-A5lagMDau=/EWI18PP;`U][Phmj^3)6lcCJ"Zgb-;Fo;'OAR,h^FFq*!K9:A.YU7kN'iXUKgYs#6[(#66ii69?Rgat!K9K<.YU7kN(GZPKgYs#8J`k16ii7*^.KPG!$`_k;FhK%.'"$p"TYhXKgYrl7oQ7G-ii`BWY?'L!$Q),KgYr,Lm1LT;#l]PUJaVs!2PFL'G:QL(()OF6ihg,F-T(d!2*"iPsV2FTM._<6D=Hf%]r\;M#r2f1f5\I$393%.o#sOM#m[He7pIO8/)&gBrP!$'EC7iTh6J*!&00d.YU7k!$'"nH!#JJ~>endstream
|
||||
endobj
|
||||
4 0 obj
|
||||
<<
|
||||
/BaseFont /Helvetica-Bold /Encoding /WinAnsiEncoding /Name /F2 /Subtype /Type1 /Type /Font
|
||||
>>
|
||||
endobj
|
||||
5 0 obj
|
||||
<<
|
||||
/Contents 9 0 R /MediaBox [ 0 0 595.2756 841.8898 ] /Parent 8 0 R /Resources <<
|
||||
/Font 1 0 R /ProcSet [ /PDF /Text /ImageB /ImageC /ImageI ] /XObject <<
|
||||
/FormXob.2ccb9e91594014dfb4f4bd9a52694668 3 0 R
|
||||
>>
|
||||
>> /Rotate 0 /Trans <<
|
||||
|
||||
>>
|
||||
/Type /Page
|
||||
>>
|
||||
endobj
|
||||
6 0 obj
|
||||
<<
|
||||
/PageMode /UseNone /Pages 8 0 R /Type /Catalog
|
||||
>>
|
||||
endobj
|
||||
7 0 obj
|
||||
<<
|
||||
/Author () /CreationDate (D:20250725105234+02'00') /Creator (\(unspecified\)) /Keywords () /ModDate (D:20250725105234+02'00') /Producer (xhtml2pdf <https://github.com/xhtml2pdf/xhtml2pdf/>)
|
||||
/Subject () /Title () /Trapped /False
|
||||
>>
|
||||
endobj
|
||||
8 0 obj
|
||||
<<
|
||||
/Count 1 /Kids [ 5 0 R ] /Type /Pages
|
||||
>>
|
||||
endobj
|
||||
9 0 obj
|
||||
<<
|
||||
/Filter [ /ASCII85Decode /FlateDecode ] /Length 1946
|
||||
>>
|
||||
stream
|
||||
Gb!SngMRrh&:N/3n>3&r5W%qr4P$dl"K`?l9$mkGL+KH4"dW]bP.:Je%ei;0V:@20/$_tgZ<'[/kKM0'i=+<P&br'an,<Td?b5IbPTn7HpD-VW"mZ)I::dRJeiA+k5+<G6Kb=_1685a9K5<58;28b-YU5kqM8$H,@HquLCm7?D&Y]uW.&_)W23puf8UmU]W/]Z,mT7ndlN!HQ!7%WRBMPcI`,(#+pLL_6JcX$q1ZaF$,!e<73'*U(7t46N0^JIOCgsBNJl"23]b.a5AmftK.4^W<kktVqCp8e,l.0of'e0LS%R;E(3jg_1!Oi,OXW)4KG.7gS)Jpf:>J&SN4h4l:Mcl&*Rp[qH6/J!QkX\O@Z;`&<VJ@na/;QnQ0!EE[<LE=+BguLJ$b_MX*%Z`h3in](/)]C&0Tf:b5YT%c'`DaL5@7(t1et/d?SUKuL[hjqYb,/N+g\eKM9\R8Ylrd:9N>]4G"ber"Hc;G7]-0bj9\,WU1rO2"h"c82[?M2)3;,ER5^CGCmhLS0NDLpQt3b,W87!-dh/9r0NiFRW@DdCqF*YQHi40SN2t3+qgq,d+f#]YfSe2!Y$`[S"1dsbA2-I3T6oIYJ'gW%L'@sQk/i-HRU$@<rV:Cf7^L&Jooo266+:"R^sP&rqTWtdY,":&J%Fi,4='[bGVU31`e,O4Sf'MSNcTbpQu%g2KB2kaRE`O^f9^-BY:i[(0<[SmLA0;P`C$#B,L#1'1_4@j["/p([**Rt>H&#VlKMSi%!'d5'TsE%\hn6q?j"@?D%"d`'Gb9g9!r\h-%Rn?9<kd%qDFHer6Qq9[Bs-/V-3m8&r^pgBia>s%!9qTFg6H*ce!cbeq<KVRJ!Jq#KPR'pJJ/L>H)h!8j^LnWEcVI.PRI?s7+W,=`.0629/+p13"+,KtAP!a$BSc*Bp/Mj5JcXnt!)]#/l+,XNZ]P.pVV[9GHDL-KBAi4C=g7ad19hKI&'W=\dWMK-2.<%Rp_oilK4U6$.t4dV[fV;OFPZ_D\GA.kG43d83lnkt[L8/Ip#frcIl5bD1uho]6L0^A.?jU`7MN(INglM.u;?df>X/8<i5)R/UQ^P!J"_rdem;.A;)6bGVWkgq`H4Kc3bVJDH8<L-C20?h;KjnLK"_^>(b=bAAC#IZH,15lr8V]]H&R>+&ce]1pb6)3d$/AD(@u:)5!USt$6**i[QRSX)u!8]7B+=euHu/^VAnXNBF:1+NhFoM@.oFFR#2r%q;%'22VmbLJ=Yo>?V@f(MEUAqaXdMYKg9[a@pmO9k[Dgutt$/Dh<+:js_Ak8PpBrj%`O*S'DERR:bD)%0m&f$ch8`Wa/-$O^LDUb-"]XBJlM-#mXXA.dq*"hdN'SuHaG6*HG8f?13!K88rA)QVrM>+P6(\muFimLl_R"CtXH<74m_KZ<[RWHUjgX.`B96/5@'R1mlH/ZMs2_Sa/8B5(3gSU+@6)[Wp3O%>I)MBsH-JF6t)><M`XW%>O=d3hI5^qS-F<<O\f:rcF2@V91eC00s\&HYnE<D7.eG#>b>(Wg>M9,d0kWGM%c.tX%Nd#rW,\>GI.is!1c`&iUP2I'M#=a!1Zfo=MBo_#1$@b<b"@694E*E2R=VN0>JGC)7hg'#[-$#%F3VKN=Pp_=uTRIud-MNOR2/BMg@-9ZmT8RF8f14f[>4/?KW.@EWqErUk]PJAaXGq#:i>?L>qLu9R818cG`TW:!?s/.PrQC$<!d0!e?.h^@Fc@#>o^7i'JO!X#i-uW.rJne*.\@bt7X8+!Cls-[J63]TbWAmgQV*bPfE@dbRe/I<Dg7n[<oHClaUIOY9'ja<[O!iu(0R_PUH4QGJ[XE@lN0<]N]gKkhU*2%pX$`/P(L=_"JsPk?qgYf`^$UgV$,C-CM!-'Q=R!R]@c.W>#_t,KR`1W_:FM6s3N`,7OC69%^4P5@SRh3!=GFFd?E&Ss[Jg8`O8i#~>endstream
|
||||
endobj
|
||||
xref
|
||||
0 10
|
||||
0000000000 65535 f
|
||||
0000000073 00000 n
|
||||
0000000114 00000 n
|
||||
0000000221 00000 n
|
||||
0000003164 00000 n
|
||||
0000003276 00000 n
|
||||
0000003542 00000 n
|
||||
0000003610 00000 n
|
||||
0000003862 00000 n
|
||||
0000003921 00000 n
|
||||
trailer
|
||||
<<
|
||||
/ID
|
||||
[<ffe6dd6dfa5508a2e7641c6565bd9352><ffe6dd6dfa5508a2e7641c6565bd9352>]
|
||||
% ReportLab generated PDF document -- digest (http://www.reportlab.com)
|
||||
|
||||
/Info 7 0 R
|
||||
/Root 6 0 R
|
||||
/Size 10
|
||||
>>
|
||||
startxref
|
||||
5958
|
||||
%%EOF
|
||||
|
|
@ -1,85 +0,0 @@
|
|||
%PDF-1.4
|
||||
%“Œ‹ž ReportLab Generated PDF document http://www.reportlab.com
|
||||
1 0 obj
|
||||
<<
|
||||
/F1 2 0 R /F2 4 0 R
|
||||
>>
|
||||
endobj
|
||||
2 0 obj
|
||||
<<
|
||||
/BaseFont /Helvetica /Encoding /WinAnsiEncoding /Name /F1 /Subtype /Type1 /Type /Font
|
||||
>>
|
||||
endobj
|
||||
3 0 obj
|
||||
<<
|
||||
/BitsPerComponent 8 /ColorSpace /DeviceRGB /Filter [ /ASCII85Decode /FlateDecode ] /Height 125 /Length 2752 /Subtype /Image
|
||||
/Type /XObject /Width 396
|
||||
>>
|
||||
stream
|
||||
Gb"/lCNe_d(^8U1UaN3;I$4-'fC#_Jgn@5*J.LrP(K#>I_i\eB&_CS>gWfg"!!$Q>If/m)j%"gjoDS./I0G0#q"7r<T^LS%rMapH!MD6K8X/-#e[=g"!;&Z:M>FQls(L4u!9f0[&qrpY^`m6E3bH&RW<JOgJB+GuFjPECZm&HV!$5$.U5ZZ[.0(bn9qn`S:alAm:fF*I)Gqp`aAZ69X@c>=!6A&FU5XCq.0,0<,#MCkW"]5"[#ui4G#SeKrhlGX=UdWm!+;P'6lBi,V#]F4bpCMI"tBcV:.(b7QCq+UUE^s[<b"rTJAKWq.&/r('Yq4L8X.aN<!m#8e0N1h8caI+PUI%l"TV:tU-,@g^u3:+PR!HT(`[+DnjG(j2u!BmiHfd0/EQRP,Z10*a0Vp5H,g.D$Mk,oqPFJta!&1T@kF%tq;FQ;V)a'7;-#,=U?_Z&12C4s$HT5H>D\L]$@ot?<2m;=,rHA:K-R<m$5+X?'EI(`<,/R(*O'(M2A?/L`)LKc6lg:49kl'V?p_mU)G65k&Lmt2*YEm8.oB=d:at%f9e3't?T0nr\qWZ0hOf837Sd6klMGc%\iAmEXnKrIJj2)Y.&/h&$?elpUR"+<*`b.^Wjt>B8<hX;<!r?\*#\DsW@D6Dgt!Q8,g*&"Q%D.Z;b#;rWJ:DF,>hKg:at%ZP@`7W8_9$d8jh4O+/C1)W#CqQh'coi:/Tu/];O$SceH+B4,tZeTI*N:X&(7tM]OZ(,b%c6lWr;klM_nS;+:Xa.G0F41MYfnQVuKY1aU:Z)_)$'E/'<D0;(Aj;N.\F)9kFC?jFu=;+htC44X6p=e_u5U/J4d1LsJE;3e=IYN$/Q&nNm(Q%H.1Sl&kXp_qJ:qHqf!-rJPlTMi"V`O!HWJ/&`75uFu7leO%nR86f\d`W.uM)(NQ9#2i8c)AMP;>!._m&I+NVF4QSJP*`o]#gnqAKFQ/PnKB2%k7`EEiP(53Z"fqPd3]&:at%ZdpuFAAZ1@)8sC]<*l#MrX-oS!D2Tm?e%=BD4dt]u3?Ei4'oDLWmsM<'a*J>K]f8MOXfeU0`7KCT2%MaBRu@[anlp!SH?ELD>?L]1K4GOXf6ih7b+LhBbc(C>htAjP9eP/l>Ia#HX&;J&lq!0Tjg&78ddZ#YC2Q<KBrVj["oH_^7_/HK*RkXWL(]aUOe>;i;6V_PAlRoVH<&71\!3g:Lt#B2M1XRJ2l#0[-XtO"Hg#*NR`rTg&4ri8&d>nrF[iq.B8To@bM:JZJk/D.O=3)?@tS@/qj42c72<P+-!0$i?5.'4#J3e],RTR)pPa.GGC7H,8)$$PY#7e)*5i.=b,TdF9+dW=6#i/VU>R0>O\m`TnbKnk100cpZ7=Be^u<5%-DM'apfq>>b,U[mJ-1ahc5[Nt.?OT8(`')2.&^$)!=ge1C3*3DV5+/4?pFkXTTi'J"ZX;2B[/mUPnFLEJ>&'qK-DeA);kMTTKEIKX-@FN!t9eV*,McUaoMu+!r?tWO\-Y-8Hh)hkn071cSCbHFOLV:J9.J=;'$=7&e&`0'@VY'GpH?]28B7<8hUh=Bs(@>!T"!`?W=3#jlPUp7HJhCRe6G5F<j^)KeKqLi=aM\'\GTRV_2Tice_[)Zr#[e/FE*ViOH=-nKV1]5g@sM9;4Pn^Yhk<kU:b%:l2Dd7Rd9`pA<O-4u.QGQ<'8RQVkf2k92l(eX]*R:oWTtn7q[>W3dPZB?nTJ+2.(t8r"H6atpP"Q&k`TWb-)k,qR2bQf2l??Tl:kZVN$WkOh%T2)Qj8]PD8CIp#QSgs`!l4YL/)lqY(2[srP(ZRsDp0eG2_G:IQHJ$tD8^!Y-hh\#Oa:hf]lLXfOUGt=hGjV_="$NKkIdaP2Sn+)O]cC4*nmUg!/\Z,RbKaBLL18W75^.3$2-WbUUCrTF^Qr2h[df%i:]!U):'=6e&KnoQ'dBf"Hd+[i*3I>Scs7^PViD;)%?]"?4XA\-dP'r^?gDO-+h%^rE;/'U@Mo7'7=citqE\:mFW\@ecIE=[mI@oQa.UR?OYO6P,<G<O&b'@H-<-HX:5N`G\\Kd$4RnqWKjV_3tAtGs,Nk4GAfpGWFNE0Pj!`N>Xl*>_24&YKY>(4tse<`M'N*=hKCZro:06_&=7SRa+)OVTW2^>*GVCnTeM=M(U;MBUHH?>Ej]6P8/Bhu/<YITi_QC0j_:Zi-f8`s/W7A64(&mWhZXJZanR,&X?E-,0ijS:mn_&a=+^<WKSE4s1SG'nZ&9VOZ6L#ns,N1s3aQkYRf_JNp=>D9PWIGBQO.S#B2*S+5p6"`mk[(qS3T&maZhe&`1PHAq:Y@#$t(g8/Pm^.^s:.CM$d5N`UJFFEF(!XiKCZH:O%Ke_H%BehN3%:/J9R(ZijV\drh7>+"WDmQolh@g`[*340_tSI0M28NS@=_?0:&?$(f=U+@iP*!#9<a;5l4&aF;Tu(].+7C^&u$<-A5lagMDau=/EWI18PP;`U][Phmj^3)6lcCJ"Zgb-;Fo;'OAR,h^FFq*!K9:A.YU7kN'iXUKgYs#6[(#66ii69?Rgat!K9K<.YU7kN(GZPKgYs#8J`k16ii7*^.KPG!$`_k;FhK%.'"$p"TYhXKgYrl7oQ7G-ii`BWY?'L!$Q),KgYr,Lm1LT;#l]PUJaVs!2PFL'G:QL(()OF6ihg,F-T(d!2*"iPsV2FTM._<6D=Hf%]r\;M#r2f1f5\I$393%.o#sOM#m[He7pIO8/)&gBrP!$'EC7iTh6J*!&00d.YU7k!$'"nH!#JJ~>endstream
|
||||
endobj
|
||||
4 0 obj
|
||||
<<
|
||||
/BaseFont /Helvetica-Bold /Encoding /WinAnsiEncoding /Name /F2 /Subtype /Type1 /Type /Font
|
||||
>>
|
||||
endobj
|
||||
5 0 obj
|
||||
<<
|
||||
/Contents 9 0 R /MediaBox [ 0 0 595.2756 841.8898 ] /Parent 8 0 R /Resources <<
|
||||
/Font 1 0 R /ProcSet [ /PDF /Text /ImageB /ImageC /ImageI ] /XObject <<
|
||||
/FormXob.60c02443bbdd629cd79711ed552f7585 3 0 R
|
||||
>>
|
||||
>> /Rotate 0 /Trans <<
|
||||
|
||||
>>
|
||||
/Type /Page
|
||||
>>
|
||||
endobj
|
||||
6 0 obj
|
||||
<<
|
||||
/PageMode /UseNone /Pages 8 0 R /Type /Catalog
|
||||
>>
|
||||
endobj
|
||||
7 0 obj
|
||||
<<
|
||||
/Author () /CreationDate (D:20250725151520+02'00') /Creator (\(unspecified\)) /Keywords () /ModDate (D:20250725151520+02'00') /Producer (xhtml2pdf <https://github.com/xhtml2pdf/xhtml2pdf/>)
|
||||
/Subject () /Title () /Trapped /False
|
||||
>>
|
||||
endobj
|
||||
8 0 obj
|
||||
<<
|
||||
/Count 1 /Kids [ 5 0 R ] /Type /Pages
|
||||
>>
|
||||
endobj
|
||||
9 0 obj
|
||||
<<
|
||||
/Filter [ /ASCII85Decode /FlateDecode ] /Length 1937
|
||||
>>
|
||||
stream
|
||||
Gb!SngN)%,&:N/3i2'?u1P11sQ$KGaD*2[pMqmQLB0<K<Urlf&X\4iNlan9.&<nT+Z5$NkYpGS:(416!E3TDe$,[jVI.p-ar6cl]B:No`h+r\s.S9AYEnY@n[4_!eQbC45+goh<1.EE"!bI!r:-(Lc64FSJ'`$=sJ[sBDW7?cI7tbr@Xf0)c2,lT</GY]_->i=.FMEq*>6j(A!H;0O_[&_kA9JUpI&>>#2)[i(0loX2154Gea3iRN3r3W4:GqGoOAalk%gErHrkLpVo6?oBHnrhoE\]o`)lsZO\ac1mR0lEp"4Tnr8ZYT_i1n*Ca>Gq%4$n["[5P@I7aYh;pZ-X;,750gYCcl0TY.\3d1&BaMGgi!_,On)<&1"PbccndeJ(F21b5O?R9fm)":H&MLQun9,ecAT3smSHMCEq9TKhc8kDO%J`ebGt><jgT++Kgiqsb]$9V81/3ZG2q$>C_`<N4Ng0hF;LLsi;3A?)g?SrfIWSchf.A?,j>3H/!DGa^e?]W']5#\7HJ;^GEZ'J)s)m>gY*Zq+\Yc:W&uFnVcb0+uaflb>Dm>\247(CUM'O@H%"(T!7"_9i)bEoYKf@Re@%pV+ZIP/lF<$t:tt-3KrdH8SgskJPE/bSF.*O6?,%HqNu7D/=j+SdbAT9)^'uVlS\7A,JTP-_jOW4G]?G1BlsinPZ##-JRS&+MPIJB/B2Kh=ZP]]Bdr3lauc-nDS8hGRX1^"7q0Qc(d`a@kkr*j)Q06OjY!Yp%3<@N,m'8'M;Jo\dV@+BEQ9ID%"gaOqIDRS/^kp.Y_YV.0W/>j>N:Hr6WU/[A7!tV-4'='9$sfH!9=21j"oLW`WY`(Mgj;ojF<.Zi5(Ak]g=l5*"3M8=A;,;HRoVY1@BD&r`1KIsgocPhQmd,:JbY9\]eNl)pBb9qYfdLYp4uGW>H$I&AC,!O60iC:b_J8ln-*D$9Wpa`uY]cZ?Gsf`KldYUj36/1DNGOA+"lTFm>630n)i5]fGYdV[fVQC2Qn_R?KlCFW=fd;[1lFJm8.(5HKCJ,F8+oD\$>gjC4\=!,aa]1puX@V@_QJVcL;C4L=HM5"5qdpEM^0hcuG^Q<Rl's8T\r`0efCH-dI:n&+\@/!S-a>quEAXV5TI`7dpq:%.AVh*q.JQsR^$sQj/aEM-Z1-mknQmWP'.]l\VBk+\KBHUIES2Ot#WR1"&Q?F]J1e4f+8f<peTUE]kcJ`Oo.h3*^E$;3HW_SWD`[YPODC]a#FeGMkk/S6IHQgsNKV8'spe(1ed?)JS#4d&s`aQ%g^,F--r(=%D2cc%"ANM8$Wm_-\LTha&#[p]`dluF8"i0#L"Ys-,&Ha[e/hU.!>i%k(Mt5GN?DV&U<4TE0=37(Mjjo%"9DCW/ATDQZS`7SV1C5FQ7Fu8UQ59\#1fc9'EHP.Dh%AYH=X^QuD@)uc$('`h<=Hk:AIqI!;A:RXhA+O@@;Y$L;Wj0YL^#A[mUY0YI/!;2;09^Vc\U),I@gNj#u6;MMPI8gcJ$oMNoX[o-08a>QrG!kU@:FNimD]\f@]Ojg"t!*N,#2.8`IGA(7enR0DH\/S/L+jn`'7:^*5&JDPX/fY><CS_qqALdkP1rR$te?XdK'/[s-;@R:*h_J<gaD*c9j95=,HQVX$fo$S5CZ(?@D0P93'<jKFt.JPc`X6Yc>/a0UN5gqVgX8.ZAd]N!1Z/Ze[k1uP5"Zm6Z4gBL,r$Bo+BW6H#>!/A336/?PCZ`!I*`RR=SK)Ui%Ar/%Jh(in\qeCS</)=8W/g5j)].M]7d"P1#>I#iR=ed^grfp[i^s!rAiGkoBFbEg/bN$]h0MKbQ$g40s@,%:qi__h0PBV\i:LhILmqPdtm%CC<O%Fe$g])WnoX6^H`s<L2&Mlqm5](eHaJCqNbnuJ!`L$'iC-ciZ>4K?N3N1_7\EJG*I\T$\S`30DgnaTbCTII6~>endstream
|
||||
endobj
|
||||
xref
|
||||
0 10
|
||||
0000000000 65535 f
|
||||
0000000073 00000 n
|
||||
0000000114 00000 n
|
||||
0000000221 00000 n
|
||||
0000003164 00000 n
|
||||
0000003276 00000 n
|
||||
0000003542 00000 n
|
||||
0000003610 00000 n
|
||||
0000003862 00000 n
|
||||
0000003921 00000 n
|
||||
trailer
|
||||
<<
|
||||
/ID
|
||||
[<9d4b7ea30b2d30f25403f154b483162e><9d4b7ea30b2d30f25403f154b483162e>]
|
||||
% ReportLab generated PDF document -- digest (http://www.reportlab.com)
|
||||
|
||||
/Info 7 0 R
|
||||
/Root 6 0 R
|
||||
/Size 10
|
||||
>>
|
||||
startxref
|
||||
5949
|
||||
%%EOF
|
||||
|
|
@ -1,85 +0,0 @@
|
|||
%PDF-1.4
|
||||
%“Œ‹ž ReportLab Generated PDF document http://www.reportlab.com
|
||||
1 0 obj
|
||||
<<
|
||||
/F1 2 0 R /F2 4 0 R
|
||||
>>
|
||||
endobj
|
||||
2 0 obj
|
||||
<<
|
||||
/BaseFont /Helvetica /Encoding /WinAnsiEncoding /Name /F1 /Subtype /Type1 /Type /Font
|
||||
>>
|
||||
endobj
|
||||
3 0 obj
|
||||
<<
|
||||
/BitsPerComponent 8 /ColorSpace /DeviceRGB /Filter [ /ASCII85Decode /FlateDecode ] /Height 125 /Length 2752 /Subtype /Image
|
||||
/Type /XObject /Width 396
|
||||
>>
|
||||
stream
|
||||
Gb"/lCNe_d(^8U1UaN3;I$4-'fC#_Jgn@5*J.LrP(K#>I_i\eB&_CS>gWfg"!!$Q>If/m)j%"gjoDS./I0G0#q"7r<T^LS%rMapH!MD6K8X/-#e[=g"!;&Z:M>FQls(L4u!9f0[&qrpY^`m6E3bH&RW<JOgJB+GuFjPECZm&HV!$5$.U5ZZ[.0(bn9qn`S:alAm:fF*I)Gqp`aAZ69X@c>=!6A&FU5XCq.0,0<,#MCkW"]5"[#ui4G#SeKrhlGX=UdWm!+;P'6lBi,V#]F4bpCMI"tBcV:.(b7QCq+UUE^s[<b"rTJAKWq.&/r('Yq4L8X.aN<!m#8e0N1h8caI+PUI%l"TV:tU-,@g^u3:+PR!HT(`[+DnjG(j2u!BmiHfd0/EQRP,Z10*a0Vp5H,g.D$Mk,oqPFJta!&1T@kF%tq;FQ;V)a'7;-#,=U?_Z&12C4s$HT5H>D\L]$@ot?<2m;=,rHA:K-R<m$5+X?'EI(`<,/R(*O'(M2A?/L`)LKc6lg:49kl'V?p_mU)G65k&Lmt2*YEm8.oB=d:at%f9e3't?T0nr\qWZ0hOf837Sd6klMGc%\iAmEXnKrIJj2)Y.&/h&$?elpUR"+<*`b.^Wjt>B8<hX;<!r?\*#\DsW@D6Dgt!Q8,g*&"Q%D.Z;b#;rWJ:DF,>hKg:at%ZP@`7W8_9$d8jh4O+/C1)W#CqQh'coi:/Tu/];O$SceH+B4,tZeTI*N:X&(7tM]OZ(,b%c6lWr;klM_nS;+:Xa.G0F41MYfnQVuKY1aU:Z)_)$'E/'<D0;(Aj;N.\F)9kFC?jFu=;+htC44X6p=e_u5U/J4d1LsJE;3e=IYN$/Q&nNm(Q%H.1Sl&kXp_qJ:qHqf!-rJPlTMi"V`O!HWJ/&`75uFu7leO%nR86f\d`W.uM)(NQ9#2i8c)AMP;>!._m&I+NVF4QSJP*`o]#gnqAKFQ/PnKB2%k7`EEiP(53Z"fqPd3]&:at%ZdpuFAAZ1@)8sC]<*l#MrX-oS!D2Tm?e%=BD4dt]u3?Ei4'oDLWmsM<'a*J>K]f8MOXfeU0`7KCT2%MaBRu@[anlp!SH?ELD>?L]1K4GOXf6ih7b+LhBbc(C>htAjP9eP/l>Ia#HX&;J&lq!0Tjg&78ddZ#YC2Q<KBrVj["oH_^7_/HK*RkXWL(]aUOe>;i;6V_PAlRoVH<&71\!3g:Lt#B2M1XRJ2l#0[-XtO"Hg#*NR`rTg&4ri8&d>nrF[iq.B8To@bM:JZJk/D.O=3)?@tS@/qj42c72<P+-!0$i?5.'4#J3e],RTR)pPa.GGC7H,8)$$PY#7e)*5i.=b,TdF9+dW=6#i/VU>R0>O\m`TnbKnk100cpZ7=Be^u<5%-DM'apfq>>b,U[mJ-1ahc5[Nt.?OT8(`')2.&^$)!=ge1C3*3DV5+/4?pFkXTTi'J"ZX;2B[/mUPnFLEJ>&'qK-DeA);kMTTKEIKX-@FN!t9eV*,McUaoMu+!r?tWO\-Y-8Hh)hkn071cSCbHFOLV:J9.J=;'$=7&e&`0'@VY'GpH?]28B7<8hUh=Bs(@>!T"!`?W=3#jlPUp7HJhCRe6G5F<j^)KeKqLi=aM\'\GTRV_2Tice_[)Zr#[e/FE*ViOH=-nKV1]5g@sM9;4Pn^Yhk<kU:b%:l2Dd7Rd9`pA<O-4u.QGQ<'8RQVkf2k92l(eX]*R:oWTtn7q[>W3dPZB?nTJ+2.(t8r"H6atpP"Q&k`TWb-)k,qR2bQf2l??Tl:kZVN$WkOh%T2)Qj8]PD8CIp#QSgs`!l4YL/)lqY(2[srP(ZRsDp0eG2_G:IQHJ$tD8^!Y-hh\#Oa:hf]lLXfOUGt=hGjV_="$NKkIdaP2Sn+)O]cC4*nmUg!/\Z,RbKaBLL18W75^.3$2-WbUUCrTF^Qr2h[df%i:]!U):'=6e&KnoQ'dBf"Hd+[i*3I>Scs7^PViD;)%?]"?4XA\-dP'r^?gDO-+h%^rE;/'U@Mo7'7=citqE\:mFW\@ecIE=[mI@oQa.UR?OYO6P,<G<O&b'@H-<-HX:5N`G\\Kd$4RnqWKjV_3tAtGs,Nk4GAfpGWFNE0Pj!`N>Xl*>_24&YKY>(4tse<`M'N*=hKCZro:06_&=7SRa+)OVTW2^>*GVCnTeM=M(U;MBUHH?>Ej]6P8/Bhu/<YITi_QC0j_:Zi-f8`s/W7A64(&mWhZXJZanR,&X?E-,0ijS:mn_&a=+^<WKSE4s1SG'nZ&9VOZ6L#ns,N1s3aQkYRf_JNp=>D9PWIGBQO.S#B2*S+5p6"`mk[(qS3T&maZhe&`1PHAq:Y@#$t(g8/Pm^.^s:.CM$d5N`UJFFEF(!XiKCZH:O%Ke_H%BehN3%:/J9R(ZijV\drh7>+"WDmQolh@g`[*340_tSI0M28NS@=_?0:&?$(f=U+@iP*!#9<a;5l4&aF;Tu(].+7C^&u$<-A5lagMDau=/EWI18PP;`U][Phmj^3)6lcCJ"Zgb-;Fo;'OAR,h^FFq*!K9:A.YU7kN'iXUKgYs#6[(#66ii69?Rgat!K9K<.YU7kN(GZPKgYs#8J`k16ii7*^.KPG!$`_k;FhK%.'"$p"TYhXKgYrl7oQ7G-ii`BWY?'L!$Q),KgYr,Lm1LT;#l]PUJaVs!2PFL'G:QL(()OF6ihg,F-T(d!2*"iPsV2FTM._<6D=Hf%]r\;M#r2f1f5\I$393%.o#sOM#m[He7pIO8/)&gBrP!$'EC7iTh6J*!&00d.YU7k!$'"nH!#JJ~>endstream
|
||||
endobj
|
||||
4 0 obj
|
||||
<<
|
||||
/BaseFont /Helvetica-Bold /Encoding /WinAnsiEncoding /Name /F2 /Subtype /Type1 /Type /Font
|
||||
>>
|
||||
endobj
|
||||
5 0 obj
|
||||
<<
|
||||
/Contents 9 0 R /MediaBox [ 0 0 595.2756 841.8898 ] /Parent 8 0 R /Resources <<
|
||||
/Font 1 0 R /ProcSet [ /PDF /Text /ImageB /ImageC /ImageI ] /XObject <<
|
||||
/FormXob.fc9870a6ef35a3885b8158c487e9d5f0 3 0 R
|
||||
>>
|
||||
>> /Rotate 0 /Trans <<
|
||||
|
||||
>>
|
||||
/Type /Page
|
||||
>>
|
||||
endobj
|
||||
6 0 obj
|
||||
<<
|
||||
/PageMode /UseNone /Pages 8 0 R /Type /Catalog
|
||||
>>
|
||||
endobj
|
||||
7 0 obj
|
||||
<<
|
||||
/Author () /CreationDate (D:20250727171952+02'00') /Creator (\(unspecified\)) /Keywords () /ModDate (D:20250727171952+02'00') /Producer (xhtml2pdf <https://github.com/xhtml2pdf/xhtml2pdf/>)
|
||||
/Subject () /Title () /Trapped /False
|
||||
>>
|
||||
endobj
|
||||
8 0 obj
|
||||
<<
|
||||
/Count 1 /Kids [ 5 0 R ] /Type /Pages
|
||||
>>
|
||||
endobj
|
||||
9 0 obj
|
||||
<<
|
||||
/Filter [ /ASCII85Decode /FlateDecode ] /Length 1989
|
||||
>>
|
||||
stream
|
||||
Gb!Sn=`<%a&:W67fU&=)!3PuZo%*YN;m^Q2a?^mV#`M0L$EPJ8S>3j5ZTOOHM'=BQObLZV7<*N`^7"dV41d=<"Fb%TG;qnPf027+TSPAQ^I(t.Jbjkjo7#kDk6cZP2ObT.Kb=_1685a9K5<58;3.SuYU5kqM8"-u1%ht32G0_C"At%b'MLK])G=_.,X73JW/FuTr[63Fkl=s7!3W>1BMPcI`,(&,pLL:)_1:WtR<$5"O^K2AS6X8RPJ:`PnD2G09d1>0E>`b+j9J&K)%*-K4-FdjS]q/N(9]]`:7lSX2aL8i"?&!dM3fXu\.uMhh10RPa$hE,kVKKrg?h'G..kYab\BK%"G8-4o#@J#[fk539/U0h\eZO0JuAf^EE1;c_Mfj.1BJMegLUe+?l>ck@E"I6!=o]qM4=nU@M8)SkV&[hl<t:"C#VSUQ2qe/:VY,n_g%i-:@G&43Zj@"&niLf;lSC&0hJbuLfCZkB'QQlOUr3WRNtY<:fsU(-a#'=o4YBqe(KBt:;"ac;pC!@<-G%a,$lm36N)S/"P'#6QH^8l7e'kM>HX^tCfV@G*nh<-&/8\mQ8c&II@6'A>)C%\jK:>Z<Bs]7rWc4S?<d"2"bX$h-ptkU-^CBR_,0b/Eo[,b@>UjG7pk8*d6(U,;2c8n1#XnJs6*n$)UG9oq63-%GdWFV?!;GkCEGtC@X=tLdN?$6>t=L3I#h$8P=[SO`HgiA5$^1p"M/$H5'>E<*E3f1n)3lXjk50hjSRl%bFALhm/6fioIpgAGRHI@%,Jj*&T+1?)XV8d_H&,g"b6'I1Bff'(*(F*Q3O?hO+T*Ihj5@"R1pEK$VIgIT9;IEbG86C.f#OUjmhQqD-t`aq3EZ=$\_&2`&-kIecpHBhn#=S%b5bd.;UdhBCU#P(sa4P)o>+])fDM/%k7mVRta+F@k"IoGd[BSX;`IrD4/rp'B.ZiI6\P8MK%DVlJ';Q)nMGt=8pV9Q,U3T(.;YDp(U`iRLj(7!WHjm>t*4BJ[Qh.6CSXS,`H:PAHN?mE,7No+`N#X,?"uE9:WA>Rr4GFAIY3A=a+"W+k+_mZFo(=VG,uhkiV-kS$SU9fB;A[%=3ALq8[cq/_cm+%@/B=Xf"qsd%WlWb;D$QaY5#l_IrcKf`Y6j/sHLp>U\CCnY:flT&9X]5Bdt@"8qqY<VGb9i60_]l'N1.5k=jp]h8P9N0*OpT13R,JnaX29bqCrg1ZSEK@Mk_$d%u#F>/bHNFa3=F@o-!4c2*K<EO!ejoK*h!T/uA$[?'7Ee0L;9m6Fk;C`DS>Ed7S0kI[YPT=jm+jrhI0RHNA/UP*3aCRmMq-n7-Zo=q%b]5,HQKtTR*@--g$-]";F\^19Cl9/=@FY#"52!q%^jc_2AE]g@@:$$=>f_N,[#JUfjdcRg8PU=@Eb@[VP!7I?SHXY$n8T5Ej>OG-jb:*M&hNG`DtF1.BF$)%/>#8hqPMbt,K/-:;'\Ha&jU.BY,XXb;+9GPi0(FB.?_uhCT*5GhSs3(.3c<[(-@'GC_]*\oDMNhFN^FTOALK+O9qsY:5GU(USPiR`n]'Yni79`;nZ+)C7TNN\4>0@AA!j?r:d&Si9i+IQ'AL!nPO7p:;0@8]S[Kn*cAT/EVlK_&X?n9;NoSmVe1bDi7*GA(p<R+c/5"6b^R)a\Eg@ncqKpZQHWfQG6i`Nd"7PIIM1Hl&o9$jnlqMRO.^17k:E'\@):J:W>U,BQS!K.GfO6V^b#q>.@jg-GjdMsi$J-)6p5YHAH_rG(=0:dm1_\bL-?hJWQ+YZbPIOelFni9s$q4<+r&Pn=?#hm21NQ0Su\-cOMROE<1GD9d\2>n3#5>dQ&]g4mEknYqA<Q#;5<jX.^(%_VmGW$S@nGE]amgNg\l@=:ZCUG]gBg=[YCm5^(+/C??AW:(_uLUL]=Hj`Jpb4(uR/t6M(R/9^_[VOU?@BLG9K$Mbi<(:`RC8[,uj3$;a0mTQ%W>p6B/W\pJ!_-/>Hj+*O\"@f~>endstream
|
||||
endobj
|
||||
xref
|
||||
0 10
|
||||
0000000000 65535 f
|
||||
0000000073 00000 n
|
||||
0000000114 00000 n
|
||||
0000000221 00000 n
|
||||
0000003164 00000 n
|
||||
0000003276 00000 n
|
||||
0000003542 00000 n
|
||||
0000003610 00000 n
|
||||
0000003862 00000 n
|
||||
0000003921 00000 n
|
||||
trailer
|
||||
<<
|
||||
/ID
|
||||
[<8d7b5cd86f3518bdbadf4f2d263c621b><8d7b5cd86f3518bdbadf4f2d263c621b>]
|
||||
% ReportLab generated PDF document -- digest (http://www.reportlab.com)
|
||||
|
||||
/Info 7 0 R
|
||||
/Root 6 0 R
|
||||
/Size 10
|
||||
>>
|
||||
startxref
|
||||
6001
|
||||
%%EOF
|
||||
|
|
@ -1,85 +0,0 @@
|
|||
%PDF-1.4
|
||||
%“Œ‹ž ReportLab Generated PDF document http://www.reportlab.com
|
||||
1 0 obj
|
||||
<<
|
||||
/F1 2 0 R /F2 4 0 R
|
||||
>>
|
||||
endobj
|
||||
2 0 obj
|
||||
<<
|
||||
/BaseFont /Helvetica /Encoding /WinAnsiEncoding /Name /F1 /Subtype /Type1 /Type /Font
|
||||
>>
|
||||
endobj
|
||||
3 0 obj
|
||||
<<
|
||||
/BitsPerComponent 8 /ColorSpace /DeviceRGB /Filter [ /ASCII85Decode /FlateDecode ] /Height 125 /Length 2752 /Subtype /Image
|
||||
/Type /XObject /Width 396
|
||||
>>
|
||||
stream
|
||||
Gb"/lCNe_d(^8U1UaN3;I$4-'fC#_Jgn@5*J.LrP(K#>I_i\eB&_CS>gWfg"!!$Q>If/m)j%"gjoDS./I0G0#q"7r<T^LS%rMapH!MD6K8X/-#e[=g"!;&Z:M>FQls(L4u!9f0[&qrpY^`m6E3bH&RW<JOgJB+GuFjPECZm&HV!$5$.U5ZZ[.0(bn9qn`S:alAm:fF*I)Gqp`aAZ69X@c>=!6A&FU5XCq.0,0<,#MCkW"]5"[#ui4G#SeKrhlGX=UdWm!+;P'6lBi,V#]F4bpCMI"tBcV:.(b7QCq+UUE^s[<b"rTJAKWq.&/r('Yq4L8X.aN<!m#8e0N1h8caI+PUI%l"TV:tU-,@g^u3:+PR!HT(`[+DnjG(j2u!BmiHfd0/EQRP,Z10*a0Vp5H,g.D$Mk,oqPFJta!&1T@kF%tq;FQ;V)a'7;-#,=U?_Z&12C4s$HT5H>D\L]$@ot?<2m;=,rHA:K-R<m$5+X?'EI(`<,/R(*O'(M2A?/L`)LKc6lg:49kl'V?p_mU)G65k&Lmt2*YEm8.oB=d:at%f9e3't?T0nr\qWZ0hOf837Sd6klMGc%\iAmEXnKrIJj2)Y.&/h&$?elpUR"+<*`b.^Wjt>B8<hX;<!r?\*#\DsW@D6Dgt!Q8,g*&"Q%D.Z;b#;rWJ:DF,>hKg:at%ZP@`7W8_9$d8jh4O+/C1)W#CqQh'coi:/Tu/];O$SceH+B4,tZeTI*N:X&(7tM]OZ(,b%c6lWr;klM_nS;+:Xa.G0F41MYfnQVuKY1aU:Z)_)$'E/'<D0;(Aj;N.\F)9kFC?jFu=;+htC44X6p=e_u5U/J4d1LsJE;3e=IYN$/Q&nNm(Q%H.1Sl&kXp_qJ:qHqf!-rJPlTMi"V`O!HWJ/&`75uFu7leO%nR86f\d`W.uM)(NQ9#2i8c)AMP;>!._m&I+NVF4QSJP*`o]#gnqAKFQ/PnKB2%k7`EEiP(53Z"fqPd3]&:at%ZdpuFAAZ1@)8sC]<*l#MrX-oS!D2Tm?e%=BD4dt]u3?Ei4'oDLWmsM<'a*J>K]f8MOXfeU0`7KCT2%MaBRu@[anlp!SH?ELD>?L]1K4GOXf6ih7b+LhBbc(C>htAjP9eP/l>Ia#HX&;J&lq!0Tjg&78ddZ#YC2Q<KBrVj["oH_^7_/HK*RkXWL(]aUOe>;i;6V_PAlRoVH<&71\!3g:Lt#B2M1XRJ2l#0[-XtO"Hg#*NR`rTg&4ri8&d>nrF[iq.B8To@bM:JZJk/D.O=3)?@tS@/qj42c72<P+-!0$i?5.'4#J3e],RTR)pPa.GGC7H,8)$$PY#7e)*5i.=b,TdF9+dW=6#i/VU>R0>O\m`TnbKnk100cpZ7=Be^u<5%-DM'apfq>>b,U[mJ-1ahc5[Nt.?OT8(`')2.&^$)!=ge1C3*3DV5+/4?pFkXTTi'J"ZX;2B[/mUPnFLEJ>&'qK-DeA);kMTTKEIKX-@FN!t9eV*,McUaoMu+!r?tWO\-Y-8Hh)hkn071cSCbHFOLV:J9.J=;'$=7&e&`0'@VY'GpH?]28B7<8hUh=Bs(@>!T"!`?W=3#jlPUp7HJhCRe6G5F<j^)KeKqLi=aM\'\GTRV_2Tice_[)Zr#[e/FE*ViOH=-nKV1]5g@sM9;4Pn^Yhk<kU:b%:l2Dd7Rd9`pA<O-4u.QGQ<'8RQVkf2k92l(eX]*R:oWTtn7q[>W3dPZB?nTJ+2.(t8r"H6atpP"Q&k`TWb-)k,qR2bQf2l??Tl:kZVN$WkOh%T2)Qj8]PD8CIp#QSgs`!l4YL/)lqY(2[srP(ZRsDp0eG2_G:IQHJ$tD8^!Y-hh\#Oa:hf]lLXfOUGt=hGjV_="$NKkIdaP2Sn+)O]cC4*nmUg!/\Z,RbKaBLL18W75^.3$2-WbUUCrTF^Qr2h[df%i:]!U):'=6e&KnoQ'dBf"Hd+[i*3I>Scs7^PViD;)%?]"?4XA\-dP'r^?gDO-+h%^rE;/'U@Mo7'7=citqE\:mFW\@ecIE=[mI@oQa.UR?OYO6P,<G<O&b'@H-<-HX:5N`G\\Kd$4RnqWKjV_3tAtGs,Nk4GAfpGWFNE0Pj!`N>Xl*>_24&YKY>(4tse<`M'N*=hKCZro:06_&=7SRa+)OVTW2^>*GVCnTeM=M(U;MBUHH?>Ej]6P8/Bhu/<YITi_QC0j_:Zi-f8`s/W7A64(&mWhZXJZanR,&X?E-,0ijS:mn_&a=+^<WKSE4s1SG'nZ&9VOZ6L#ns,N1s3aQkYRf_JNp=>D9PWIGBQO.S#B2*S+5p6"`mk[(qS3T&maZhe&`1PHAq:Y@#$t(g8/Pm^.^s:.CM$d5N`UJFFEF(!XiKCZH:O%Ke_H%BehN3%:/J9R(ZijV\drh7>+"WDmQolh@g`[*340_tSI0M28NS@=_?0:&?$(f=U+@iP*!#9<a;5l4&aF;Tu(].+7C^&u$<-A5lagMDau=/EWI18PP;`U][Phmj^3)6lcCJ"Zgb-;Fo;'OAR,h^FFq*!K9:A.YU7kN'iXUKgYs#6[(#66ii69?Rgat!K9K<.YU7kN(GZPKgYs#8J`k16ii7*^.KPG!$`_k;FhK%.'"$p"TYhXKgYrl7oQ7G-ii`BWY?'L!$Q),KgYr,Lm1LT;#l]PUJaVs!2PFL'G:QL(()OF6ihg,F-T(d!2*"iPsV2FTM._<6D=Hf%]r\;M#r2f1f5\I$393%.o#sOM#m[He7pIO8/)&gBrP!$'EC7iTh6J*!&00d.YU7k!$'"nH!#JJ~>endstream
|
||||
endobj
|
||||
4 0 obj
|
||||
<<
|
||||
/BaseFont /Helvetica-Bold /Encoding /WinAnsiEncoding /Name /F2 /Subtype /Type1 /Type /Font
|
||||
>>
|
||||
endobj
|
||||
5 0 obj
|
||||
<<
|
||||
/Contents 9 0 R /MediaBox [ 0 0 595.2756 841.8898 ] /Parent 8 0 R /Resources <<
|
||||
/Font 1 0 R /ProcSet [ /PDF /Text /ImageB /ImageC /ImageI ] /XObject <<
|
||||
/FormXob.fc9870a6ef35a3885b8158c487e9d5f0 3 0 R
|
||||
>>
|
||||
>> /Rotate 0 /Trans <<
|
||||
|
||||
>>
|
||||
/Type /Page
|
||||
>>
|
||||
endobj
|
||||
6 0 obj
|
||||
<<
|
||||
/PageMode /UseNone /Pages 8 0 R /Type /Catalog
|
||||
>>
|
||||
endobj
|
||||
7 0 obj
|
||||
<<
|
||||
/Author () /CreationDate (D:20250727172100+02'00') /Creator (\(unspecified\)) /Keywords () /ModDate (D:20250727172100+02'00') /Producer (xhtml2pdf <https://github.com/xhtml2pdf/xhtml2pdf/>)
|
||||
/Subject () /Title () /Trapped /False
|
||||
>>
|
||||
endobj
|
||||
8 0 obj
|
||||
<<
|
||||
/Count 1 /Kids [ 5 0 R ] /Type /Pages
|
||||
>>
|
||||
endobj
|
||||
9 0 obj
|
||||
<<
|
||||
/Filter [ /ASCII85Decode /FlateDecode ] /Length 1971
|
||||
>>
|
||||
stream
|
||||
Gb!SnD/\/e&H;*)_(W^]!G;+%WZRS9>DoV#;KpcK!.el8SVu-@D5Ao_ofMGmU23u,'A"sn+L*Kgm[h%;F?EHpLqjPGs%_\^rAmD\0.<P'NGf@C=J51+kkTJmH#Nf![%,ALk!BB.$mD!,S:dn%9[SY3GH`Ea15W^T5V[Di1c@t#nJkD`@2)C;UDcd@Q/k01O(a?@T^aBdrl"rKa8oPQ_pFo]/Vr'`"7F8tXb)+["(o[f_aK*!QuVgD?-WCE5N&#&A2K-CEl2J4NKG:kQ"D5!:84`#+m<&9#^1I3Z*aA/>EoMH``'*u\^%l>:r"[/h8g(.-V%G:;S>8X#Y39[T8s\4AKo>Z6Ji$#.1Pjf'M\mb)E"@;0f%RAO^^UUNj6<5Al`?[o:QtP%Bo+RL.e`Z;JWOHas$is%u,q2$3XfNmc<S=`09P*Q(US6`UJ`c(LJf/UpEX5Xb8.k(+rc4NPlHC,77A'f@huO"VO3Q)46i[X%"?;`JWf7P8(eda`]&7.i=1d:7\F1$Lq,LPe)V>FHrrZ$/tOc#s)j;_aum`Y*\B6Mf6dA6\IpB>>RUB<"tT()_U1>lZ+i68d(.[dt%N7:_+ZJM3EmB(;"(m+RBg-O"fodp#f.*'`EU<paa$^UW(RLQfMM\N7Va3TN,,`\1F5HiUh#Nc-cc!hlY6Nag)'*'En^Hq]NIOd:7lnrlBf\10uSs>BHI^kOE#M<4*tNZus"q)#@8/gfBng:g"pTf3,E)Y)CZH=h;8;hC\]S*T/',^4TN<U(('lUMZDe30MELNF.)R/3lta2+DV=V1CZbinsuNp6Pf?QkU.V(6iQF5:(k9=%]`p<;s:eX!09s3k`2RF'W)U(.sOmLhY6ZD%)Bo^KoNc*9us(3nSU:SgE^EC::Lnm0Oj<Dg3Q#@8KO/ehjaW>H:g5`f'21]j`hZG%Fiu9SDde%fo\_/&HQ;e@2L32tVPRbM5HLC5VIF/;V<g*%884p)V?[!WFl\AFUkEd5GMSBIgr_S?]/kXG9(QN[#$/#b9p'aV7!^M=[lggMKj!XJ%X5Rk?3BAC1f_<jh_RPfZ)^h)p2YqUtb4Qd=(VfBDV`RodqVTko341g$-4NZ<InJ5V_jVHb4l*t2'\."'#tOF8f/CcmR+a8*S8*'[T)i<8o-rHZ3*/+DRt=kPHXK.gTtV.3gb"8V[qoI_420LG\ADAqc(nYY!o1gc]fBWj^&%(=o$!Kt^L`F'FC%a-J<`KZ*F3/S.sD-/iM<WQi]!T0'n#e4N&Ee0L;I<OC&dOF3NgQ3r10bou:-@=s"66nsO2g[o>,CB;iW+8GLHp'DJm60`]Zg>kRjSE=u#K\'2k]3=kSPsS:)e-g7(nLW49=D)3E8UQt)*7#<0IPF(/n@[])Br<qH#Gu]P*:6]gfr-nV"aP&DaEh8]V!/$\ZMu/F()2="H0n1><N"d)hM*/bD4HS].%m]n8\,;'T&0c*)I6#Mft.B<)IlW\E#2ZMPN+J)epUk[rE;MMb'Zg?jAA\ZhWsXl]7L/4!&g%KECM\9NXr.Hjj:#,n5%kk,)(@bD?dtlFh5dl*S^P/\4X<ZZX^V^FNkcG@(r`UkC=VMh9c,npR7j<!9jO\/N6'eWY;Le<&KX9hle&RQcJ$;\PI,\2l<$J+),H]B/JEY/<.`1Mo6XZ3\omNrV-K!N[jGPN[l9Dc>>NhoSQ<!_&;:B$k,l$cWZIc1kMK%claA*J[>jO-n6dC&Qc'H`&$;Qe]t$NR64;&bM8o4I`?o;tL20qM59N)FsO.eorrP\"Ns'+4\W%:f+K2h5noPg_!V-Y1DApH@'haEi,KJLD$KG=?quk*WGu^UB*jV.D3To7NLb??:uose&?Ep^[5jM#qZcOr-4^TP=:4t,%Q1U+Y.]66^>(r?#c1'qJGW\T?[,>nR@X]>c,i'5%B8f4l7_e+]%&NL;IQm+oE"2A([=:O<pfb'bnrkN';s'Vu@d3VPXQ82#%R`9+n$~>endstream
|
||||
endobj
|
||||
xref
|
||||
0 10
|
||||
0000000000 65535 f
|
||||
0000000073 00000 n
|
||||
0000000114 00000 n
|
||||
0000000221 00000 n
|
||||
0000003164 00000 n
|
||||
0000003276 00000 n
|
||||
0000003542 00000 n
|
||||
0000003610 00000 n
|
||||
0000003862 00000 n
|
||||
0000003921 00000 n
|
||||
trailer
|
||||
<<
|
||||
/ID
|
||||
[<6ae516d251a61e33909666dcb951ad78><6ae516d251a61e33909666dcb951ad78>]
|
||||
% ReportLab generated PDF document -- digest (http://www.reportlab.com)
|
||||
|
||||
/Info 7 0 R
|
||||
/Root 6 0 R
|
||||
/Size 10
|
||||
>>
|
||||
startxref
|
||||
5983
|
||||
%%EOF
|
||||
|
|
@ -1,2 +0,0 @@
|
|||
formation_code_externe;code_session;date_debut;date_fin;nb_participant;adresse;code_postal;ville;pays;date_debut_inscription;date_fin_inscription;distanciel;presentiel;prix_session;session_status;lms_class_code;session_etape;formateur_email;titre;location_type;is_bpf;type_session
|
||||
IFOD_01;tttttttt;07/07/2025;18/07/2025;10;23 Bd de Reuilly;75012;Paris;France;05/01/2024;05/07/2025;1;1;2450;1;;Planifiée;;Gestion commerciale de juillet 2025;intra;1;0
|
||||
|
|
|
@ -1,6 +0,0 @@
|
|||
formation_code_externe;code_session;client_rattachement_email;client_rattachement_nom;facture_client_rattachement_email;facture_client_rattachement_nom;prenom;nom;employeur;telephone;email;adresse;code_postal;ville;pays;modefinancement;opco;status;prix
|
||||
IFOD_01;IFOD_22_Sess_AOUT_DEV_dup;;;;;part 2;part nom2;employeur 2;10101;mysytraining+apprenant1@gmail.com;adresse01;code_postal01;ville01;pays01;modefinancement;opco;0;1500
|
||||
IFOD_01;IFOD_22_Sess_AOUT_DEV_dup;mysytraining+client1@gmail.com;Client 1;mysy1000formation@gmail.com;Client FACT;part 3;part nom3_client;employeur 3;10101;mysytraining+apprenant2@gmail.com;adresse02;code_postal02;ville02;pays02;modefinancement;;0;1500
|
||||
IFOD_01;IFOD_22_Sess_AOUT_DEV_dup;mysytraining+client1@gmail.com;Client 1;mysy1000formation@gmail.com;Client FACT;part 4;part nom4_client;employeur 4;10101;mysytraining+apprenant3@gmail.com;adresse03;code_postal03;ville03;pays03;modefinancement;;0;1500
|
||||
IFOD_01;IFOD_22_Sess_AOUT_DEV_dup;mysytraining+client2@gmail.com;Client 2;mysy1000formation@gmail.com;Client FACT;part 5;part nom5_client;employeur 5;10101;mysy1000formation+01@gmail.com;adresse04;code_postal04;ville04;pays04;modefinancement;;0;1500
|
||||
IFOD_01;IFOD_22_Sess_AOUT_DEV_dup;mysytraining+client2@gmail.com;Client 2;;;part 6;part nom6_client;employeur 6;10101;mysy1000formation+02@gmail.com;adresse05;code_postal05;ville05;pays05;modefinancement;;0;1500
|
||||
|
|
|
@ -1,6 +0,0 @@
|
|||
formation_code_externe;code_session;client_rattachement_email;client_rattachement_nom;facture_client_rattachement_email;facture_client_rattachement_nom;prenom;nom;employeur;telephone;email;adresse;code_postal;ville;pays;modefinancement;opco;status;prix
|
||||
IFOD_01;IFOD_22_Sess_AOUT_DEV_dup;;;;;part 2;part nom2;employeur 2;10101;mysytraining+apprenant1@gmail.com;adresse01;code_postal01;ville01;pays01;modefinancement;opco;0;1500
|
||||
IFOD_01;IFOD_22_Sess_AOUT_DEV_dup;mysytraining+client1@gmail.com;Client 1;mysy1000formation@gmail.com;Client FACT;part 3;part nom3_client;employeur 3;10101;mysytraining+apprenant2@gmail.com;adresse02;code_postal02;ville02;pays02;modefinancement;;0;1500
|
||||
IFOD_01;IFOD_22_Sess_AOUT_DEV_dup;mysytraining+client1@gmail.com;Client 1;mysy1000formation@gmail.com;Client FACT;part 4;part nom4_client;employeur 4;10101;mysytraining+apprenant3@gmail.com;adresse03;code_postal03;ville03;pays03;modefinancement;;0;1500
|
||||
IFOD_01;IFOD_22_Sess_AOUT_DEV_dup;mysytraining+client2@gmail.com;Client 2;mysy1000formation@gmail.com;Client FACT;part 5;part nom5_client;employeur 5;10101;mysy1000formation+01@gmail.com;adresse04;code_postal04;ville04;pays04;modefinancement;;0;1500
|
||||
IFOD_01;IFOD_22_Sess_AOUT_DEV_dup;mysytraining+client2@gmail.com;Client 2;;;part 6;part nom6_client;employeur 6;10101;mysy1000formation+02@gmail.com;adresse05;code_postal05;ville05;pays05;modefinancement;;0;1500
|
||||
|
|
|
@ -1,4 +0,0 @@
|
|||
formation_code_externe;code_session;client_rattachement_email;client_rattachement_nom;facture_client_rattachement_email;facture_client_rattachement_nom;prenom;nom;employeur;telephone;email;adresse;code_postal;ville;pays;modefinancement;opco;status;prix
|
||||
IFOD_01;test_facturatop;;;;;part 2;part nom2;employeur 2;10101;mysytraining+apprenant1@gmail.com;adresse01;code_postal01;ville01;pays01;modefinancement;opco;0;1500
|
||||
IFOD_01;test_facturatop;;;;;part 3;part nom3_client;employeur 3;10101;mysytraining+apprenant2@gmail.com;adresse02;code_postal02;ville02;pays02;modefinancement;;0;1500
|
||||
IFOD_01;test_facturatop;;;;;part 4;part nom4_client;employeur 4;10101;mysytraining+apprenant3@gmail.com;adresse03;code_postal03;ville03;pays03;modefinancement;;0;1500
|
||||
|
|
|
@ -1,4 +0,0 @@
|
|||
formation_code_externe;code_session;client_rattachement_email;client_rattachement_nom;facture_client_rattachement_email;facture_client_rattachement_nom;prenom;nom;employeur;telephone;email;adresse;code_postal;ville;pays;modefinancement;opco;status;prix
|
||||
IFOD_01;test_facturatop;;;;;part 2;part nom2;employeur 2;10101;mysytraining+apprenant1@gmail.com;adresse01;code_postal01;ville01;pays01;modefinancement;opco;0;1500
|
||||
IFOD_01;test_facturatop;;;;;part 3;part nom3_client;employeur 3;10101;mysytraining+apprenant2@gmail.com;adresse02;code_postal02;ville02;pays02;modefinancement;;0;1500
|
||||
IFOD_01;test_facturatop;;;;;part 4;part nom4_client;employeur 4;10101;mysytraining+apprenant3@gmail.com;adresse03;code_postal03;ville03;pays03;modefinancement;;0;1500
|
||||
|
|
Before Width: | Height: | Size: 8.1 KiB |
|
Before Width: | Height: | Size: 8.1 KiB |
|
Before Width: | Height: | Size: 8.1 KiB |
|
Before Width: | Height: | Size: 8.1 KiB |
|
Before Width: | Height: | Size: 8.1 KiB |
|
Before Width: | Height: | Size: 8.1 KiB |
|
Before Width: | Height: | Size: 8.1 KiB |