parent
21bacab87b
commit
461f267746
|
|
@ -4,11 +4,21 @@
|
|||
<option name="autoReloadType" value="SELECTIVE" />
|
||||
</component>
|
||||
<component name="ChangeListManager">
|
||||
<list default="true" id="c6d0259a-16e1-410d-91a1-830590ee2a08" name="Changes" comment="12/10/2025 - 17:14 - Elyos V1.2">
|
||||
<list default="true" id="c6d0259a-16e1-410d-91a1-830590ee2a08" name="Changes" comment="14/10/2025 - 23h">
|
||||
<change beforePath="$PROJECT_DIR$/.idea/workspace.xml" beforeDir="false" afterPath="$PROJECT_DIR$/.idea/workspace.xml" 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_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$/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$/apprenant_mgt.py" beforeDir="false" afterPath="$PROJECT_DIR$/apprenant_mgt.py" afterDir="false" />
|
||||
<change beforePath="$PROJECT_DIR$/base_class_calcul_note.py" beforeDir="false" afterPath="$PROJECT_DIR$/base_class_calcul_note.py" afterDir="false" />
|
||||
<change beforePath="$PROJECT_DIR$/email_mgt.py" beforeDir="false" afterPath="$PROJECT_DIR$/email_mgt.py" afterDir="false" />
|
||||
<change beforePath="$PROJECT_DIR$/internal_email_mgt.py" beforeDir="false" afterPath="$PROJECT_DIR$/internal_email_mgt.py" afterDir="false" />
|
||||
<change beforePath="$PROJECT_DIR$/main.py" beforeDir="false" afterPath="$PROJECT_DIR$/main.py" afterDir="false" />
|
||||
<change beforePath="$PROJECT_DIR$/partner_invoice.py" beforeDir="false" afterPath="$PROJECT_DIR$/partner_invoice.py" afterDir="false" />
|
||||
<change beforePath="$PROJECT_DIR$/prj_common.py" beforeDir="false" afterPath="$PROJECT_DIR$/prj_common.py" afterDir="false" />
|
||||
<change beforePath="$PROJECT_DIR$/temp_directAttestation_.pdf" beforeDir="false" />
|
||||
</list>
|
||||
<option name="SHOW_DIALOG" value="false" />
|
||||
<option name="HIGHLIGHT_CONFLICTS" value="true" />
|
||||
|
|
@ -451,7 +461,7 @@
|
|||
<option name="project" value="LOCAL" />
|
||||
<updated>1747251650255</updated>
|
||||
</task>
|
||||
<option name="localTasksCounter" value="499" />
|
||||
<option name="localTasksCounter" value="500" />
|
||||
<servers />
|
||||
</component>
|
||||
<component name="Vcs.Log.Tabs.Properties">
|
||||
|
|
@ -493,7 +503,6 @@
|
|||
</option>
|
||||
</component>
|
||||
<component name="VcsManagerConfiguration">
|
||||
<MESSAGE value="02/06/2025 - 20h" />
|
||||
<MESSAGE value="04/06/2025 - 21h" />
|
||||
<MESSAGE value="05/06/2025 - 20h" />
|
||||
<MESSAGE value="05/06/2025 - 22h" />
|
||||
|
|
@ -518,6 +527,7 @@
|
|||
<MESSAGE value="sss" />
|
||||
<MESSAGE value="10/10/2025 - 17:30" />
|
||||
<MESSAGE value="12/10/2025 - 17:14 - Elyos V1.2" />
|
||||
<option name="LAST_COMMIT_MESSAGE" value="12/10/2025 - 17:14 - Elyos V1.2" />
|
||||
<MESSAGE value="14/10/2025 - 23h" />
|
||||
<option name="LAST_COMMIT_MESSAGE" value="14/10/2025 - 23h" />
|
||||
</component>
|
||||
</project>
|
||||
|
|
@ -82,7 +82,7 @@ def AddStagiairetoClass(diction):
|
|||
'tuteur2_nom', 'tuteur2_prenom', 'tuteur2_email', 'tuteur2_telephone', 'tuteur2_adresse',
|
||||
'tuteur2_cp', 'tuteur2_ville', 'tuteur2_pays', 'tuteur2_include_com','date_naissance',
|
||||
'financeur_rattachement_id', 'tuteur1_civilite', 'tuteur2_civilite', 'quotation_id',
|
||||
'facture_client_rattachement_id', 'tab_ue_ids',
|
||||
'facture_client_rattachement_id', 'tab_ue_ids','memo', 'comment'
|
||||
]
|
||||
|
||||
incom_keys = diction.keys()
|
||||
|
|
@ -175,6 +175,19 @@ def AddStagiairetoClass(diction):
|
|||
session_id = str(diction['session_id']).strip()
|
||||
mydata['session_id'] = session_id
|
||||
|
||||
memo = ""
|
||||
if ("memo" in diction.keys()):
|
||||
if diction['memo']:
|
||||
memo = str(diction['memo']).strip()
|
||||
mydata['memo'] = memo
|
||||
|
||||
comment = ""
|
||||
if ("comment" in diction.keys()):
|
||||
if diction['comment']:
|
||||
comment = str(diction['comment']).strip()
|
||||
mydata['comment'] = comment
|
||||
|
||||
|
||||
|
||||
"""
|
||||
Verififier l'existance et la valididé de la session
|
||||
|
|
@ -917,7 +930,7 @@ def UpdateStagiairetoClass(diction):
|
|||
'tuteur1_cp', 'tuteur1_ville', 'tuteur1_pays', 'tuteur1_include_com',
|
||||
'tuteur2_nom', 'tuteur2_prenom', 'tuteur2_email', 'tuteur2_telephone', 'tuteur2_adresse',
|
||||
'tuteur2_cp', 'tuteur2_ville', 'tuteur2_pays', 'tuteur2_include_com', 'type_apprenant', 'civilite',
|
||||
'date_naissance', 'financeur_rattachement_id', 'facture_client_rattachement_id'
|
||||
'date_naissance', 'financeur_rattachement_id', 'facture_client_rattachement_id', 'memo'
|
||||
]
|
||||
|
||||
incom_keys = diction.keys()
|
||||
|
|
@ -1149,6 +1162,9 @@ def UpdateStagiairetoClass(diction):
|
|||
if ("comment" in diction.keys()):
|
||||
mydata['comment'] = str(diction['comment']).strip()
|
||||
|
||||
if ("memo" in diction.keys()):
|
||||
mydata['memo'] = str(diction['memo']).strip()
|
||||
|
||||
|
||||
if ("client_rattachement_id" in diction.keys()):
|
||||
mydata['client_rattachement_id'] = str(diction['client_rattachement_id']).strip()
|
||||
|
|
@ -1300,6 +1316,11 @@ def UpdateStagiairetoClass(diction):
|
|||
if diction['comment']:
|
||||
email_data['comment'] = diction['comment']
|
||||
|
||||
if ("memo" in diction.keys()):
|
||||
if diction['memo']:
|
||||
email_data['memo'] = diction['memo']
|
||||
|
||||
|
||||
if ("code_session" in local_tmp_session_data.keys()):
|
||||
if local_tmp_session_data['code_session']:
|
||||
email_data['code_session'] = local_tmp_session_data['code_session']
|
||||
|
|
@ -8022,11 +8043,6 @@ def Get_Statgaire_List_Partner_with_filter(diction):
|
|||
|
||||
|
||||
|
||||
#print(" #### recyclage_warning = ", str(recyclage_warning), " ### recyclage_warning_lead_time = ", str(recyclage_warning_lead_time))
|
||||
|
||||
|
||||
|
||||
|
||||
"""
|
||||
Etape 1 : si on a le champ 'code session' saisie par l'utilisateur,
|
||||
alors on va commencer par aller cherche toutes les session avec un regex de la valeur saisie filter sur le partner_recid
|
||||
|
|
@ -8071,20 +8087,20 @@ def Get_Statgaire_List_Partner_with_filter(diction):
|
|||
|
||||
filt_class_title = {}
|
||||
if ("class_title" in diction.keys()):
|
||||
filt_class_title = {'title': {'$regex': str(diction['class_title']), "$options": "i"}}
|
||||
filt_class_title = {'title': {'$regex': mycommon.regex_replace_cartere(str(diction['class_title'])), "$options": "i"}}
|
||||
|
||||
filt_class_internal_url = {}
|
||||
if ("class_internal_url" in diction.keys()):
|
||||
filt_class_internal_url = {
|
||||
'class_internal_url': {'$regex': str(diction['class_internal_url']), "$options": "i"}}
|
||||
'class_internal_url': {'$regex': mycommon.regex_replace_cartere(str(diction['class_internal_url'])), "$options": "i"}}
|
||||
|
||||
filt_email = {}
|
||||
if ("email" in diction.keys()):
|
||||
filt_email = {'email': {'$regex': str(diction['email']), "$options": "i"}}
|
||||
filt_email = {'email': {'$regex': mycommon.regex_replace_cartere(str(diction['email'])), "$options": "i"}}
|
||||
|
||||
filt_nom = {}
|
||||
if ("nom" in diction.keys()):
|
||||
filt_nom = {'nom': {'$regex': str(diction['nom']), "$options": "i"}}
|
||||
filt_nom = {'nom': {'$regex': mycommon.regex_replace_cartere(str(diction['nom'])), "$options": "i"}}
|
||||
|
||||
filt_class_partner_recid = {'partner_owner_recid': str(partner_recid)}
|
||||
|
||||
|
|
@ -8804,6 +8820,19 @@ def GetAttendeeDetail_perSession_from_line_id(diction):
|
|||
local_employeur = local_Insc_retval['employeur']
|
||||
my_retrun_dict['employeur'] = local_employeur
|
||||
|
||||
memo = ""
|
||||
if ("memo" in local_Insc_retval.keys()):
|
||||
memo = local_Insc_retval['memo']
|
||||
my_retrun_dict['memo'] = memo
|
||||
|
||||
|
||||
comment = ""
|
||||
if ("comment" in local_Insc_retval.keys()):
|
||||
comment = local_Insc_retval['comment']
|
||||
my_retrun_dict['comment'] = comment
|
||||
|
||||
|
||||
|
||||
local_telephone = ""
|
||||
if ("telephone" in local_Insc_retval.keys()):
|
||||
local_telephone = local_Insc_retval['telephone']
|
||||
|
|
@ -12532,12 +12561,12 @@ def Export_Inscription_To_Excel_From_from_List_Id(diction):
|
|||
tab_exported_fields_header = ["apprenant_id", "nom", "email", "prenom", "civilite", "date_naissance", "telephone", "employeur", "client_rattachement_id", "adresse", "code_postal", "ville", "pays", "tuteur1_nom", "tuteur1_prenom",
|
||||
"tuteur1_email", "tuteur1_telephone", "tuteur2_nom", "tuteur2_prenom", "tuteur2_email", "tuteur2_telephone", "opco", "comment", "tuteur1_adresse", "tuteur1_cp", "tuteur1_ville", "tuteur1_pays",
|
||||
"tuteur1_include_com", "tuteur2_adresse", "tuteur2_cp", "tuteur2_ville", "tuteur2_pays", "tuteur2_include_com",
|
||||
"client_nom", "client_raison_sociale", "Session_titre", "code_session", "session_date_debut", "session_date_fin"]
|
||||
"client_nom", "client_raison_sociale", "Session_titre", "code_session", "session_date_debut", "session_date_fin", "memo"]
|
||||
|
||||
|
||||
tab_exported_fields = ["nom", "email", "prenom", "civilite", "date_naissance", "telephone", "employeur", "client_rattachement_id", "adresse", "code_postal", "ville", "pays", "tuteur1_nom", "tuteur1_prenom",
|
||||
"tuteur1_email", "tuteur1_telephone", "tuteur2_nom", "tuteur2_prenom", "tuteur2_email", "tuteur2_telephone", "opco", "comment", "tuteur1_adresse", "tuteur1_cp", "tuteur1_ville", "tuteur1_pays",
|
||||
"tuteur1_include_com", "tuteur2_adresse", "tuteur2_cp", "tuteur2_ville", "tuteur2_pays", "tuteur2_include_com"]
|
||||
"tuteur1_include_com", "tuteur2_adresse", "tuteur2_cp", "tuteur2_ville", "tuteur2_pays", "tuteur2_include_com", "memo"]
|
||||
|
||||
# Create a workbook and add a worksheet.
|
||||
workbook = xlsxwriter.Workbook(outputFilename)
|
||||
|
|
|
|||
|
|
@ -858,8 +858,6 @@ def Sent_Convocation_Stagiaire_By_Email(tab_files, Folder, diction):
|
|||
new_file['object_owner_collection'] = "partner_client"
|
||||
new_file['object_owner_id'] = str(inscription_data['client_rattachement_id'])
|
||||
|
||||
|
||||
|
||||
new_file['file_name_to_store'] = outputFilename
|
||||
|
||||
# print(" ### new_file new_file = ", new_file)
|
||||
|
|
|
|||
36031
Log/log_file.log
36031
Log/log_file.log
File diff suppressed because one or more lines are too long
|
|
@ -69,7 +69,8 @@ def Add_Update_SessionFormation(diction):
|
|||
'attestation_certif', "distantiel", "presentiel", "prix_session", 'contenu_ftion', 'lms_class_code',
|
||||
'session_ondemande', 'source', 'session_id', 'session_etape', 'pays', 'formateur_id',
|
||||
'titre', 'location_type', 'is_bpf', 'site_formation_id', 'price_by', 'mode_animation', 'archive',
|
||||
'ent_account_automatic', 'lms_account_automatic', 'type_session', 'entre_scolaire', 'entre_scolaire']
|
||||
'ent_account_automatic', 'lms_account_automatic', 'type_session', 'entre_scolaire',
|
||||
'memo', 'comment']
|
||||
|
||||
incom_keys = diction.keys()
|
||||
for val in incom_keys:
|
||||
|
|
@ -313,6 +314,20 @@ def Add_Update_SessionFormation(diction):
|
|||
mycommon.myprint(str(inspect.stack()[0][3]) + " - Le champ 'location_type' est incorrecte.")
|
||||
return False, "Le champ 'location_type' est incorrect."
|
||||
|
||||
if ("memo" in diction.keys()):
|
||||
mydata['memo'] = str(diction['memo'])
|
||||
if (len(str(diction['memo'])) > 1000 ):
|
||||
mycommon.myprint(str(inspect.stack()[0][3]) + " - Le champ 'memo' ne doit pas faire plus 1000 caractères.")
|
||||
return False, "Le champ 'memo' ne doit pas faire plus 500 caractères."
|
||||
|
||||
if ("comment" in diction.keys()):
|
||||
mydata['comment'] = str(diction['comment'])
|
||||
if (len(str(diction['comment'])) > 1000 ):
|
||||
mycommon.myprint(str(inspect.stack()[0][3]) + " - Le champ 'commentaire' ne doit pas faire plus 1000 caractères.")
|
||||
return False, "Le champ 'commentaire' ne doit pas faire plus 500 caractères."
|
||||
|
||||
|
||||
|
||||
if ("entre_scolaire" in diction.keys()):
|
||||
mydata['entre_scolaire'] = str(diction['entre_scolaire']).lower()
|
||||
if (str(diction['entre_scolaire']).lower() not in MYSY_GV.TRAINING_ENTREE_SCOLAIRE):
|
||||
|
|
@ -1780,6 +1795,18 @@ def GetAllValideSessionPartner_List_Without_Scope_Action(diction):
|
|||
else:
|
||||
val['entre_scolaire'] = ""
|
||||
|
||||
if ("memo" in retVal.keys()):
|
||||
val['memo'] = retVal['memo']
|
||||
else:
|
||||
val['memo'] = ""
|
||||
|
||||
|
||||
if ("comment" in retVal.keys()):
|
||||
val['comment'] = retVal['comment']
|
||||
else:
|
||||
val['comment'] = ""
|
||||
|
||||
|
||||
if ("is_bpf" in retVal.keys()):
|
||||
val['is_bpf'] = retVal['is_bpf']
|
||||
else:
|
||||
|
|
@ -1960,6 +1987,16 @@ def GetAllValideSessionPartner_List(diction):
|
|||
else:
|
||||
val['entre_scolaire'] = ""
|
||||
|
||||
if ("memo" in retVal.keys()):
|
||||
val['memo'] = retVal['memo']
|
||||
else:
|
||||
val['memo'] = ""
|
||||
|
||||
if ("comment" in retVal.keys()):
|
||||
val['comment'] = retVal['comment']
|
||||
else:
|
||||
val['comment'] = ""
|
||||
|
||||
|
||||
if ("is_bpf" in retVal.keys()):
|
||||
val['is_bpf'] = retVal['is_bpf']
|
||||
|
|
@ -2256,21 +2293,21 @@ def GetAllValideSessionPartner_List_filter_like(diction):
|
|||
|
||||
filt_class_title = {}
|
||||
if ("class_title" in diction.keys()):
|
||||
filt_class_title = {'title': {'$regex': str(diction['class_title']),"$options": "i"}}
|
||||
filt_class_title = {'title': {'$regex': mycommon.regex_replace_cartere(str(diction['class_title'])),"$options": "i"}}
|
||||
|
||||
|
||||
filt_class_internal_url = {}
|
||||
if ("class_internal_url" in diction.keys()):
|
||||
filt_class_internal_url = {'internal_url': {'$regex': str(diction['class_internal_url']),"$options": "i"}}
|
||||
filt_class_internal_url = {'internal_url': {'$regex': mycommon.regex_replace_cartere(str(diction['class_internal_url'])),"$options": "i"}}
|
||||
|
||||
|
||||
filt_class_external_code = {}
|
||||
if ("class_external_code" in diction.keys()):
|
||||
filt_class_external_code = {'external_code': {'$regex': str(diction['class_external_code']), "$options": "i"}}
|
||||
filt_class_external_code = {'external_code': {'$regex': mycommon.regex_replace_cartere(str(diction['class_external_code'])), "$options": "i"}}
|
||||
|
||||
filt_code_session = {}
|
||||
if ("code_session" in diction.keys()):
|
||||
filt_code_session = {'code_session': {'$regex': str(diction['code_session']), "$options": "i"}}
|
||||
filt_code_session = {'code_session': {'$regex': mycommon.regex_replace_cartere(str(diction['code_session'])), "$options": "i"}}
|
||||
|
||||
filt_session_start_date = ""
|
||||
if ("session_start_date" in diction.keys()):
|
||||
|
|
@ -2372,6 +2409,18 @@ def GetAllValideSessionPartner_List_filter_like(diction):
|
|||
else:
|
||||
val['entre_scolaire'] = ""
|
||||
|
||||
|
||||
if ("memo" in retVal.keys()):
|
||||
val['memo'] = retVal['memo']
|
||||
else:
|
||||
val['memo'] = ""
|
||||
|
||||
if ("comment" in retVal.keys()):
|
||||
val['comment'] = retVal['comment']
|
||||
else:
|
||||
val['comment'] = ""
|
||||
|
||||
|
||||
if ("is_bpf" in retVal.keys()):
|
||||
val['is_bpf'] = retVal['is_bpf']
|
||||
else:
|
||||
|
|
@ -2747,6 +2796,16 @@ def GetAllValideSessionPartner_List_no_filter(diction):
|
|||
else:
|
||||
val['entre_scolaire'] = ""
|
||||
|
||||
if ("memo" in retVal.keys()):
|
||||
val['memo'] = retVal['memo']
|
||||
else:
|
||||
val['memo'] = ""
|
||||
|
||||
if ("comment" in retVal.keys()):
|
||||
val['comment'] = retVal['comment']
|
||||
else:
|
||||
val['comment'] = ""
|
||||
|
||||
if ("is_bpf" in retVal.keys()):
|
||||
val['is_bpf'] = retVal['is_bpf']
|
||||
else:
|
||||
|
|
@ -3057,7 +3116,7 @@ def Add_Update_SessionFormation_mass(file=None, Folder=None, diction=None):
|
|||
'session_status', 'date_debut_inscription', 'date_fin_inscription', 'attestation', 'formateur',
|
||||
'code_session', "distanciel", "presentiel", "mode_animation", "prix_session", 'contenu_ftion', 'lms_class_code',
|
||||
'session_ondemande', 'session_etape', 'formation_code_externe', 'formateur_email', 'titre', 'location_type',
|
||||
'is_bpf', 'type_session', 'entre_scolaire']
|
||||
'is_bpf', 'type_session', 'entre_scolaire', 'memo', 'comment']
|
||||
|
||||
# Controle du nombre de lignes dans le fichier.
|
||||
total_rows = len(df)
|
||||
|
|
@ -3548,7 +3607,7 @@ def Controle_Add_Update_SessionFormation_mass(saved_file=None, Folder=None, dict
|
|||
'session_status', 'date_debut_inscription', 'date_fin_inscription', 'attestation',
|
||||
'code_session', "distanciel", "presentiel", "mode_animation", "prix_session", 'contenu_ftion', 'lms_class_code',
|
||||
'session_ondemande', 'session_etape', 'formation_code_externe','formateur_email', 'titre', 'location_type',
|
||||
'is_bpf', 'type_session', 'entre_scolaire']
|
||||
'is_bpf', 'type_session', 'entre_scolaire', 'memo', 'comment']
|
||||
|
||||
# Controle du nombre de lignes dans le fichier.
|
||||
total_rows = len(df)
|
||||
|
|
@ -3720,6 +3779,19 @@ def Controle_Add_Update_SessionFormation_mass(saved_file=None, Folder=None, dict
|
|||
return False, "Le champ 'entre_scolaire' est incorrect."
|
||||
|
||||
|
||||
if ("memo" in df.keys()):
|
||||
mydata['memo'] = str(df['memo'].values[n]).strip()
|
||||
if (len( mydata['memo']) > 1000):
|
||||
mycommon.myprint(str(inspect.stack()[0][3]) + " - Le champ 'memo' ne doit faire plus de 1000 caractères ")
|
||||
return False, "Le champ 'memo' ne doit faire plus de 1000 caractères "
|
||||
|
||||
if ("comment" in df.keys()):
|
||||
mydata['comment'] = str(df['comment'].values[n]).strip()
|
||||
if (len( mydata['comment']) > 1000):
|
||||
mycommon.myprint(str(inspect.stack()[0][3]) + " - Le champ 'comment' ne doit faire plus de 1000 caractères ")
|
||||
return False, "Le champ 'comment' ne doit faire plus de 1000 caractères "
|
||||
|
||||
|
||||
|
||||
if ("is_bpf" in df.keys()):
|
||||
if (str(df['is_bpf'].values[n]).strip() not in ['0', '1']):
|
||||
|
|
@ -4120,7 +4192,7 @@ def Add_Update_SessionFormation_mass_for_many_class(file=None, Folder=None, dict
|
|||
'session_status', 'date_debut_inscription', 'date_fin_inscription', 'attestation',
|
||||
'code_session', "distanciel", "presentiel", "mode_animation", "prix_session", 'contenu_ftion', 'lms_class_code',
|
||||
'session_ondemande', 'session_etape', 'formation_code_externe', 'formateur_email', 'titre', 'location_type',
|
||||
'is_bpf', 'type_session', 'entre_scolaire']
|
||||
'is_bpf', 'type_session', 'entre_scolaire', 'memo', 'comment']
|
||||
|
||||
# Controle du nombre de lignes dans le fichier.
|
||||
total_rows = len(df)
|
||||
|
|
@ -4251,6 +4323,20 @@ def Add_Update_SessionFormation_mass_for_many_class(file=None, Folder=None, dict
|
|||
mycommon.myprint(str(inspect.stack()[0][3]) + " - Le champ 'entre_scolaire' est incorrecte.")
|
||||
return False, "Le champ 'entre_scolaire' est incorrect."
|
||||
|
||||
if ("memo" in df.keys()):
|
||||
mydata['memo'] = str(df['memo'].values[n]).strip()
|
||||
if (len(mydata['memo']) > 1000):
|
||||
mycommon.myprint(
|
||||
str(inspect.stack()[0][3]) + " - Le champ 'memo' ne doit faire plus de 1000 caractères ")
|
||||
return False, "Le champ 'memo' ne doit faire plus de 1000 caractères "
|
||||
|
||||
if ("comment" in df.keys()):
|
||||
mydata['comment'] = str(df['comment'].values[n]).strip()
|
||||
if (len(mydata['comment']) > 1000):
|
||||
mycommon.myprint(
|
||||
str(inspect.stack()[0][3]) + " - Le champ 'comment' ne doit faire plus de 1000 caractères ")
|
||||
return False, "Le champ 'comment' ne doit faire plus de 1000 caractères "
|
||||
|
||||
|
||||
if ("is_bpf" in df.keys()):
|
||||
is_bpf = str(df['is_bpf'].values[n]).strip()
|
||||
|
|
@ -4668,7 +4754,7 @@ def Controle_Add_Update_SessionFormation_mass_for_many_class(saved_file=None, Fo
|
|||
'session_status', 'date_debut_inscription', 'date_fin_inscription', 'attestation',
|
||||
'code_session', "distanciel", "presentiel", "mode_animation", "prix_session", 'contenu_ftion', 'lms_class_code',
|
||||
'session_ondemande', 'session_etape', 'formation_code_externe', 'formateur_email', 'titre', 'location_type',
|
||||
'is_bpf', 'type_session', 'entre_scolaire']
|
||||
'is_bpf', 'type_session', 'entre_scolaire', 'memo', 'comment']
|
||||
|
||||
# Controle du nombre de lignes dans le fichier.
|
||||
total_rows = len(df)
|
||||
|
|
@ -4866,6 +4952,19 @@ def Controle_Add_Update_SessionFormation_mass_for_many_class(saved_file=None, Fo
|
|||
mycommon.myprint(str(inspect.stack()[0][3]) + " - Le champ 'entre_scolaire' est incorrecte. Les valeurs acceptés sont : "+str(MYSY_GV.TRAINING_ENTREE_SCOLAIRE))
|
||||
return False, "Le champ 'entre_scolaire' est incorrect. . Les valeurs acceptés sont : "+str(MYSY_GV.TRAINING_ENTREE_SCOLAIRE)+ " "
|
||||
|
||||
if ("memo" in df.keys()):
|
||||
mydata['memo'] = str(df['memo'].values[n]).strip()
|
||||
if (len(mydata['memo']) > 1000):
|
||||
mycommon.myprint(
|
||||
str(inspect.stack()[0][3]) + " - Le champ 'memo' ne doit faire plus de 1000 caractères ")
|
||||
return False, "Le champ 'memo' ne doit faire plus de 1000 caractères "
|
||||
|
||||
if ("comment" in df.keys()):
|
||||
mydata['comment'] = str(df['comment'].values[n]).strip()
|
||||
if (len(mydata['comment']) > 1000):
|
||||
mycommon.myprint(
|
||||
str(inspect.stack()[0][3]) + " - Le champ 'comment' ne doit faire plus de 1000 caractères ")
|
||||
return False, "Le champ 'comment' ne doit faire plus de 1000 caractères "
|
||||
|
||||
|
||||
if ("is_bpf" in df.keys()):
|
||||
|
|
@ -10985,7 +11084,7 @@ def Invoice_Partner_From_Session( diction):
|
|||
|
||||
partner_invoice_line_data['order_line_formation'] = class_data[0]['internal_url']
|
||||
partner_invoice_line_data['order_line_class_id'] = str(class_data[0]['_id'])
|
||||
|
||||
partner_invoice_line_data['order_line_session_id'] = str(diction['session_id'])
|
||||
partner_invoice_line_data['order_line_qty'] = str(nb_participant_du_client)
|
||||
partner_invoice_line_data['order_line_prix_unitaire'] = str(prix_session)
|
||||
partner_invoice_line_data['order_line_montant_hors_taxes'] = str(total_ht)
|
||||
|
|
@ -10993,12 +11092,13 @@ def Invoice_Partner_From_Session( diction):
|
|||
partner_invoice_line_data['invoice_header_id'] = str(inserted_invoice_id)
|
||||
partner_invoice_line_data['invoice_line_type'] = "facture"
|
||||
partner_invoice_line_data['invoice_header_ref_interne'] = partner_invoice_header_data['invoice_header_ref_interne']
|
||||
partner_invoice_line_data['tab_inscription_ids'] = tab_participant
|
||||
partner_invoice_line_data['update_by'] = str(my_partner['_id'])
|
||||
partner_invoice_line_data['valide'] = "1"
|
||||
partner_invoice_line_data['locked'] = "0"
|
||||
partner_invoice_line_data['partner_owner_recid'] = str(my_partner['recid'])
|
||||
|
||||
print(" #### partner_invoice_line_data = ", partner_invoice_line_data)
|
||||
print(" #### partner_invoice_line_data 00 = ", partner_invoice_line_data)
|
||||
inserted_invoice_id = MYSY_GV.dbname['partner_invoice_line'].insert_one(
|
||||
partner_invoice_line_data).inserted_id
|
||||
if (not inserted_invoice_id):
|
||||
|
|
@ -13378,13 +13478,14 @@ def Invoice_Partner_From_Session_By_Inscription_Id( diction):
|
|||
order_line_formation = titre formation
|
||||
order_line_qty = nb participants
|
||||
order_line_comment = la liste des personnes participans
|
||||
tab_inscription_ids = contient l'_id des inscrits (tab_participant)
|
||||
"""
|
||||
|
||||
partner_invoice_line_data = {}
|
||||
list_partner_invoice_line_champ = ['order_line_formation', 'order_line_qty', 'order_line_prix_unitaire', 'order_line_tax', 'order_line_tax_amount', 'order_line_montant_toutes_taxes',
|
||||
'order_line_montant_hors_taxes', 'order_line_type_reduction', 'order_line_type_valeur', 'order_line_montant_reduction', 'order_header_ref_interne',
|
||||
'order_line_comment', 'order_header_id', 'valide', 'locked', 'date_update', 'partner_owner_recid', 'invoice_header_ref_interne', 'invoice_line_type',
|
||||
'invoice_date', 'invoice_header_id', 'order_line_is_include_bpf', 'order_line_class_id']
|
||||
'invoice_date', 'invoice_header_id', 'order_line_is_include_bpf', 'order_line_class_id', 'tab_inscription_ids']
|
||||
|
||||
|
||||
# PreRemplir les champs
|
||||
|
|
@ -13412,6 +13513,7 @@ def Invoice_Partner_From_Session_By_Inscription_Id( diction):
|
|||
|
||||
nom_prenom_email_participant += local_nom+" "+local_prenom+" "+local_email+"\n"
|
||||
|
||||
partner_invoice_line_data['order_line_session_id'] = str(diction['session_id'])
|
||||
partner_invoice_line_data['order_line_formation'] = class_data[0]['internal_url']
|
||||
partner_invoice_line_data['order_line_class_id'] = str(class_data[0]['_id'])
|
||||
partner_invoice_line_data['order_line_qty'] = str(nb_participant_du_client)
|
||||
|
|
@ -13421,6 +13523,7 @@ def Invoice_Partner_From_Session_By_Inscription_Id( diction):
|
|||
partner_invoice_line_data['invoice_header_id'] = str(inserted_invoice_id)
|
||||
partner_invoice_line_data['invoice_line_type'] = "facture"
|
||||
partner_invoice_line_data['invoice_header_ref_interne'] = partner_invoice_header_data['invoice_header_ref_interne']
|
||||
partner_invoice_line_data['tab_inscription_ids'] = tab_participant
|
||||
partner_invoice_line_data['update_by'] = str(my_partner['_id'])
|
||||
partner_invoice_line_data['valide'] = "1"
|
||||
partner_invoice_line_data['locked'] = "0"
|
||||
|
|
@ -13432,7 +13535,7 @@ def Invoice_Partner_From_Session_By_Inscription_Id( diction):
|
|||
partner_invoice_line_data['order_line_is_include_bpf'] = order_line_is_include_bpf
|
||||
|
||||
|
||||
print(" #### partner_invoice_line_data = ", partner_invoice_line_data)
|
||||
print(" #### partner_invoice_line_data 33 = ", partner_invoice_line_data)
|
||||
inserted_invoice_id = MYSY_GV.dbname['partner_invoice_line'].insert_one(
|
||||
partner_invoice_line_data).inserted_id
|
||||
if (not inserted_invoice_id):
|
||||
|
|
@ -13460,6 +13563,14 @@ def Invoice_Partner_From_Session_By_Inscription_Id( diction):
|
|||
partner_invoice_line_data_detail = {}
|
||||
partner_invoice_line_data_detail['order_line_inscription_id'] = str(tmp_inscription_dat['_id'])
|
||||
partner_invoice_line_data_detail['order_line_inscription_type_apprenant'] = str(tmp_inscription_dat['type_apprenant'])
|
||||
partner_invoice_line_data_detail['order_line_inscription_comment'] = str(tmp_inscription_dat['comment'])
|
||||
partner_invoice_line_data_detail['order_line_inscription_memo'] = str(tmp_inscription_dat['memo'])
|
||||
partner_invoice_line_data_detail['order_line_inscription_price'] = str(tmp_inscription_dat['price'])
|
||||
partner_invoice_line_data_detail['order_line_inscription_email'] = str(tmp_inscription_dat['email'])
|
||||
partner_invoice_line_data_detail['order_line_inscription_civilite'] = str(tmp_inscription_dat['civilite'])
|
||||
partner_invoice_line_data_detail['order_line_inscription_nom'] = str(tmp_inscription_dat['nom'])
|
||||
partner_invoice_line_data_detail['order_line_inscription_prenom'] = str(tmp_inscription_dat['prenom'])
|
||||
|
||||
|
||||
if( "modefinancement" in tmp_inscription_dat.keys()):
|
||||
partner_invoice_line_data_detail['order_line_inscription_modefinancement'] = str(tmp_inscription_dat['modefinancement'])
|
||||
|
|
@ -13468,6 +13579,7 @@ def Invoice_Partner_From_Session_By_Inscription_Id( diction):
|
|||
|
||||
partner_invoice_line_data_detail['order_line_formation'] = class_data[0]['internal_url']
|
||||
partner_invoice_line_data_detail['order_line_class_id'] = str(class_data[0]['_id'])
|
||||
partner_invoice_line_data['order_line_session_id'] = str(diction['session_id'])
|
||||
|
||||
partner_invoice_line_data_detail['order_line_prix_unitaire'] = str(prix_session)
|
||||
partner_invoice_line_data_detail['order_line_qty'] = "1"
|
||||
|
|
@ -13489,7 +13601,7 @@ def Invoice_Partner_From_Session_By_Inscription_Id( diction):
|
|||
partner_invoice_line_data_detail['locked'] = "0"
|
||||
partner_invoice_line_data_detail['partner_owner_recid'] = str(my_partner['recid'])
|
||||
|
||||
print(" #### partner_invoice_line_data = ", partner_invoice_line_data)
|
||||
print(" #### partner_invoice_line_data 77 = ", partner_invoice_line_data)
|
||||
inserted_invoice_id = MYSY_GV.dbname['partner_invoice_line_detail'].insert_one(
|
||||
partner_invoice_line_data_detail).inserted_id
|
||||
|
||||
|
|
@ -13970,7 +14082,7 @@ def Invoice_Splited_Partner_From_Session_By_Inscription_Id( diction):
|
|||
list_partner_invoice_line_champ = ['order_line_formation', 'order_line_qty', 'order_line_prix_unitaire', 'order_line_tax', 'order_line_tax_amount', 'order_line_montant_toutes_taxes',
|
||||
'order_line_montant_hors_taxes', 'order_line_type_reduction', 'order_line_type_valeur', 'order_line_montant_reduction', 'order_header_ref_interne',
|
||||
'order_line_comment', 'order_header_id', 'valide', 'locked', 'date_update', 'partner_owner_recid', 'invoice_header_ref_interne', 'invoice_line_type',
|
||||
'invoice_date', 'invoice_header_id', 'order_line_class_id']
|
||||
'invoice_date', 'invoice_header_id', 'order_line_class_id', 'order_line_session_id']
|
||||
|
||||
|
||||
# PreRemplir les champs
|
||||
|
|
@ -14001,6 +14113,8 @@ def Invoice_Splited_Partner_From_Session_By_Inscription_Id( diction):
|
|||
partner_invoice_line_data['order_line_formation'] = class_data[0]['internal_url']
|
||||
partner_invoice_line_data['order_line_class_id'] = str(class_data[0]['_id'])
|
||||
|
||||
partner_invoice_line_data['order_line_session_id'] = str(diction['session_id'])
|
||||
|
||||
partner_invoice_line_data['order_line_qty'] = str(nb_participant_du_client)
|
||||
partner_invoice_line_data['order_line_prix_unitaire'] = str(prix_session)
|
||||
partner_invoice_line_data['order_line_montant_hors_taxes'] = str(total_ht)
|
||||
|
|
@ -14008,6 +14122,7 @@ def Invoice_Splited_Partner_From_Session_By_Inscription_Id( diction):
|
|||
partner_invoice_line_data['invoice_header_id'] = str(inserted_invoice_id)
|
||||
partner_invoice_line_data['invoice_line_type'] = "facture"
|
||||
partner_invoice_line_data['invoice_header_ref_interne'] = partner_invoice_header_data['invoice_header_ref_interne']
|
||||
partner_invoice_line_data['tab_inscription_ids'] = tab_participant
|
||||
|
||||
order_line_is_include_bpf = ""
|
||||
if ("is_bpf" in session_data.keys()):
|
||||
|
|
@ -14019,7 +14134,7 @@ def Invoice_Splited_Partner_From_Session_By_Inscription_Id( diction):
|
|||
partner_invoice_line_data['locked'] = "0"
|
||||
partner_invoice_line_data['partner_owner_recid'] = str(my_partner['recid'])
|
||||
|
||||
print(" #### partner_invoice_line_data = ", partner_invoice_line_data)
|
||||
print(" #### partner_invoice_line_data 11 = ", partner_invoice_line_data)
|
||||
inserted_invoice_id = MYSY_GV.dbname['partner_invoice_line'].insert_one(
|
||||
partner_invoice_line_data).inserted_id
|
||||
if (not inserted_invoice_id):
|
||||
|
|
@ -14031,11 +14146,9 @@ def Invoice_Splited_Partner_From_Session_By_Inscription_Id( diction):
|
|||
tab_date_invoice.append(str(now))
|
||||
|
||||
"""
|
||||
27/08/2024 - update pour faire le BPF
|
||||
|
||||
on va créer une table de detail qui reprend le detail des inscription
|
||||
|
||||
"""
|
||||
27/08/2024 - update pour faire le BPF
|
||||
on va créer une table de detail qui reprend le detail des inscription
|
||||
"""
|
||||
|
||||
order_line_montant_hors_taxes_par_apprenant = round(total_ht , 2)
|
||||
for tmp_inscription_dat in MYSY_GV.dbname['inscription'].find({'session_id': str(diction['session_id']),
|
||||
|
|
@ -14050,9 +14163,19 @@ def Invoice_Splited_Partner_From_Session_By_Inscription_Id( diction):
|
|||
partner_invoice_line_data_detail = {}
|
||||
partner_invoice_line_data_detail['order_line_inscription_id'] = str(tmp_inscription_dat['_id'])
|
||||
partner_invoice_line_data_detail['order_line_inscription_type_apprenant'] = str(tmp_inscription_dat['type_apprenant'])
|
||||
partner_invoice_line_data_detail['order_line_inscription_comment'] = str(tmp_inscription_dat['comment'])
|
||||
partner_invoice_line_data_detail['order_line_inscription_memo'] = str(tmp_inscription_dat['memo'])
|
||||
partner_invoice_line_data_detail['order_line_inscription_price'] = str(tmp_inscription_dat['price'])
|
||||
partner_invoice_line_data_detail['order_line_inscription_email'] = str(tmp_inscription_dat['email'])
|
||||
partner_invoice_line_data_detail['order_line_inscription_civilite'] = str(
|
||||
tmp_inscription_dat['civilite'])
|
||||
partner_invoice_line_data_detail['order_line_inscription_nom'] = str(tmp_inscription_dat['nom'])
|
||||
partner_invoice_line_data_detail['order_line_inscription_prenom'] = str(tmp_inscription_dat['prenom'])
|
||||
|
||||
partner_invoice_line_data_detail['order_line_inscription_modefinancement'] = str(tmp_inscription_dat['modefinancement'])
|
||||
partner_invoice_line_data_detail['order_line_formation'] = class_data[0]['internal_url']
|
||||
partner_invoice_line_data_detail['order_line_class_id'] = str(class_data[0]['_id'])
|
||||
partner_invoice_line_data['order_line_session_id'] = str(diction['session_id'])
|
||||
|
||||
partner_invoice_line_data_detail['order_line_prix_unitaire'] = str(prix_session)
|
||||
partner_invoice_line_data_detail['order_line_montant_hors_taxes'] = str(total_ht)
|
||||
|
|
@ -14074,7 +14197,7 @@ def Invoice_Splited_Partner_From_Session_By_Inscription_Id( diction):
|
|||
partner_invoice_line_data_detail['locked'] = "0"
|
||||
partner_invoice_line_data_detail['partner_owner_recid'] = str(my_partner['recid'])
|
||||
|
||||
print(" #### partner_invoice_line_data = ", partner_invoice_line_data)
|
||||
print(" #### partner_invoice_line_data 22= ", partner_invoice_line_data)
|
||||
inserted_invoice_id = MYSY_GV.dbname['partner_invoice_line_detail'].insert_one(
|
||||
partner_invoice_line_data_detail).inserted_id
|
||||
"""
|
||||
|
|
@ -14417,11 +14540,41 @@ def Invoice_Create_Secure_E_Document(diction):
|
|||
"""
|
||||
user['order_line_type_article'] = "formation"
|
||||
|
||||
"""
|
||||
19/10/2025 - aller recuperer les données des inscrits en faisant un lien entre partner_invoice_line['tab_inscription_ids']
|
||||
et partner_invoice_line_detail['order_line_inscription_id']
|
||||
"""
|
||||
tab_inscription = []
|
||||
for inscription_id in retval['tab_inscription_ids']:
|
||||
print(" ## ICI QURYYY = ", {'order_line_inscription_id':str(inscription_id),
|
||||
'valide':'1', 'locked':'0',
|
||||
'partner_owner_recid':str(retval['partner_owner_recid']),
|
||||
'invoice_header_ref_interne':str(retval['invoice_header_ref_interne'])})
|
||||
|
||||
invoice_inscription_id_data = MYSY_GV.dbname['partner_invoice_line_detail'].find_one({'order_line_inscription_id':str(inscription_id),
|
||||
'valide':'1', 'locked':'0',
|
||||
'partner_owner_recid':str(retval['partner_owner_recid']),
|
||||
'invoice_header_ref_interne':str(retval['invoice_header_ref_interne'])},
|
||||
{'order_line_inscription_type_apprenant':1,
|
||||
'order_line_inscription_comment':1,
|
||||
'order_line_inscription_memo':1,
|
||||
'order_line_inscription_price':1,
|
||||
'order_line_inscription_modefinancement':1,
|
||||
'order_line_inscription_nom':1,
|
||||
'order_line_inscription_prenom': 1,
|
||||
'order_line_inscription_email': 1,
|
||||
'order_line_inscription_civilite': 1,
|
||||
})
|
||||
tab_inscription.append(invoice_inscription_id_data)
|
||||
|
||||
print(" UUU tab_inscription = ", tab_inscription)
|
||||
user['inscription_data'] = tab_inscription
|
||||
|
||||
Order_header_lines_data.append(user)
|
||||
|
||||
"""
|
||||
Recuperation des produits et services
|
||||
"""
|
||||
Recuperation des produits et services
|
||||
"""
|
||||
query = query = [{'$match': {'$and': [filt_order_header_order_id,
|
||||
{'partner_owner_recid': str(my_partner['recid'])}]}},
|
||||
{'$lookup': {
|
||||
|
|
@ -14577,7 +14730,7 @@ def Invoice_Create_Secure_E_Document(diction):
|
|||
convention_dictionnary_data['order_header'] = Order_header_data
|
||||
convention_dictionnary_data['order_lines'] = Order_header_lines_data
|
||||
|
||||
#print(" ### Order_header_lines_data === ", Order_header_lines_data)
|
||||
print(" ### Order_header_lines_data === ", Order_header_lines_data)
|
||||
|
||||
# sourceHtml = contenu_doc_Template.render(params=Order_header_data, param_order_lines=Order_header_lines_data, company_data=company_data)
|
||||
|
||||
|
|
@ -15651,7 +15804,7 @@ def Add_SessionFormation_From_Quotation_Line(diction):
|
|||
'lms_class_code',
|
||||
'session_ondemande', 'source', 'session_etape', 'pays', 'formateur_id',
|
||||
'titre', 'location_type', 'is_bpf', 'site_formation_id', 'price_by',
|
||||
'quotation_line_id', 'resa_inscrit', 'entre_scolaire']
|
||||
'quotation_line_id', 'resa_inscrit', 'entre_scolaire', 'memo', 'comment']
|
||||
|
||||
incom_keys = diction.keys()
|
||||
for val in incom_keys:
|
||||
|
|
|
|||
|
|
@ -10,13 +10,13 @@
|
|||
<div style="width:100%">
|
||||
<div style="text-align:center;">
|
||||
<nav style="text-align:center;font-weight: bold;"> Facture </nav>
|
||||
<hr/>
|
||||
<hr />
|
||||
<div
|
||||
style="padding:12px 0px;text-align:right;font-family:Georgia, 'Times New Roman', Times, serif;color:#454349;font-size:0.9rem;">
|
||||
{{json_data.client_name}}<br />
|
||||
{{json_data.client_address}}<br />
|
||||
{{json_data.client_zip_ville}}<br />
|
||||
{{json_data.client_pays}}<br />
|
||||
{{json_data.client_pays}}
|
||||
|
||||
</div>
|
||||
|
||||
|
|
@ -28,7 +28,7 @@
|
|||
|
||||
|
||||
</div>
|
||||
|
||||
|
||||
|
||||
|
||||
<table style="width:100%;padding: 5px;">
|
||||
|
|
@ -42,7 +42,7 @@
|
|||
|
||||
<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}} <br/>
|
||||
Origine : {{json_data.orign_order}} <br />
|
||||
<b>Période : {{json_data.periode}} </b>
|
||||
</div>
|
||||
|
||||
|
|
@ -51,22 +51,23 @@
|
|||
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 (HT)</th>
|
||||
<th style="text-align:center;border: 1px solid black;">Montant (HT)</th>
|
||||
<th style="text-align:center;border: 1px solid black; width: 50%;">Description</th>
|
||||
<th style="text-align:center;border: 1px solid black;width: 10%;">Quantité</th>
|
||||
<th style="text-align:center;border: 1px solid black;width: 20%;">Prix unitaire (HT)</th>
|
||||
<th style="text-align:center;border: 1px solid black;width: 20%;">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>
|
||||
<nav style="text-align:left;font-size:0.6rem; font-style:italic;"> {{json_data.detail_packs}} </nav>
|
||||
</td>
|
||||
<td style="text-align:center;border: 1px solid black;">{{json_data.qty}}</td>
|
||||
<td style="text-align:center;border: 1px solid black;">{{json_data.unit_price}}</td>
|
||||
<td style="text-align:center;border: 1px solid black;">{{json_data.montant}}</td>
|
||||
<td style="text-align:center;border: 1px solid black; width: 50%;"> {{json_data.packs}} <br>
|
||||
<nav style="text-align:left;font-size:0.6rem; font-style:italic;">
|
||||
{{json_data.detail_packs}} </nav>
|
||||
</td>
|
||||
<td style="text-align:center;border: 1px solid black;width: 10%;">{{json_data.qty}}</td>
|
||||
<td style="text-align:center;border: 1px solid black;width: 20%;">{{json_data.unit_price}}</td>
|
||||
<td style="text-align:center;border: 1px solid black;width: 20%;">{{json_data.montant}}</td>
|
||||
</tr>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<tr style="border: none;padding: 0px; padding-top:5px;">
|
||||
<th style="text-align:center;border: none;" colspan="4"> </th>
|
||||
|
||||
|
|
@ -100,18 +101,14 @@
|
|||
<td style="text-align:center;">{{json_data.total_ttc}} €</td>
|
||||
</tr>
|
||||
</table>
|
||||
|
||||
<br/>
|
||||
<br/>
|
||||
|
||||
|
||||
<hr />
|
||||
|
||||
<p
|
||||
style="font-weight:bold; font-size:1rem;text-align: center;width: 80%;margin-left: auto;margin-right: auto;">
|
||||
Règlement : Virement bancaire</p>
|
||||
|
||||
|
||||
|
||||
|
||||
<p style="font-size:0.7rem; margin-left: auto;width: 100%;">
|
||||
> Relevé d'identité bancaire
|
||||
</p>
|
||||
|
|
@ -172,10 +169,22 @@
|
|||
</div>
|
||||
|
||||
</div>
|
||||
|
||||
|
||||
<hr />
|
||||
<br/>
|
||||
<br />
|
||||
|
||||
<div
|
||||
style="padding:20px 0px;text-align:left;font-family:'DM Sans', 'Times New Roman', Times, serif;color:#454349;font-size:0.9rem;">
|
||||
|
||||
<b>Termes et conditions</b><br />
|
||||
|
||||
Pas d'escompte accordé pour paiement anticipé.<br />
|
||||
En cas de non-paiement à la date d'échéance, des pénalités calculées à trois fois le taux d'intérêt légal
|
||||
seront appliquées.<br />
|
||||
Tout retard de paiement entraînera une indemnité forfaitaire pour frais de recouvrement de 40€.<br />
|
||||
|
||||
</div>
|
||||
|
||||
<footer>
|
||||
<div
|
||||
style="padding:20px 0px;text-align:center;font-family:Georgia, 'Times New Roman', Times, serif;color:#454349;font-size:0.8rem;font-style: italic;">
|
||||
|
|
|
|||
|
|
@ -918,15 +918,15 @@ def Get_Apprenant_List_Partner_with_filter(diction):
|
|||
|
||||
filt_email = {}
|
||||
if ("email" in diction.keys()):
|
||||
filt_email = {'email': {'$regex': str(diction['email']), "$options": "i"}}
|
||||
filt_email = {'email': {'$regex': mycommon.regex_replace_cartere(str(diction['email'])), "$options": "i"}}
|
||||
|
||||
filt_nom = {}
|
||||
if ("nom" in diction.keys()):
|
||||
filt_nom = {'nom': {'$regex': str(diction['nom']), "$options": "i"}}
|
||||
filt_nom = {'nom': {'$regex': mycommon.regex_replace_cartere(str(diction['nom'])), "$options": "i"}}
|
||||
|
||||
filt_prenom = {}
|
||||
if ("prenom" in diction.keys()):
|
||||
filt_prenom = {'prenom': {'$regex': str(diction['prenom']), "$options": "i"}}
|
||||
filt_prenom = {'prenom': {'$regex': mycommon.regex_replace_cartere(str(diction['prenom'])), "$options": "i"}}
|
||||
|
||||
filt_archive = {}
|
||||
if ("archive" in diction.keys() and (diction["archive"] == "0" or diction["archive"] == "")):
|
||||
|
|
|
|||
|
|
@ -2927,6 +2927,15 @@ def Prepare_and_Send_Inscrit_Bulletin_Note_By_PDF(diction):
|
|||
"""
|
||||
Cette fonction créer le PDF bulletin pour chaque inscrit et retourne l'url complet du fichier pdf
|
||||
"""
|
||||
from spire.pdf.common import *
|
||||
from spire.pdf import *
|
||||
|
||||
from reportlab.pdfgen.canvas import Canvas
|
||||
from pdfrw import PdfReader
|
||||
from pdfrw.toreportlab import makerl
|
||||
from pdfrw.buildxobj import pagexobj
|
||||
|
||||
|
||||
def Create_Bulletin_By_Inscrit_PDF(diction):
|
||||
try:
|
||||
field_list_obligatoire = ['token', 'courrier_template_id', 'inscription_id', 'class_id', 'session_id']
|
||||
|
|
@ -2992,8 +3001,6 @@ def Create_Bulletin_By_Inscrit_PDF(diction):
|
|||
tab_apprenant.append(ObjectId(str(statgiaire_data['apprenant_id'])))
|
||||
|
||||
|
||||
|
||||
|
||||
# Recuperer les notes des UE dans la collection 'session_formation_final_note_classement'
|
||||
session_formation_final_note_classement_data = []
|
||||
for note_classement_data in MYSY_GV.dbname['session_formation_final_note_classement'].find({'inscription_id': str(diction['inscription_id']),
|
||||
|
|
@ -3053,7 +3060,7 @@ def Create_Bulletin_By_Inscrit_PDF(diction):
|
|||
session_formation_final_note_classement_data.append(local_node)
|
||||
|
||||
|
||||
print(" ### session_formation_final_note_classement_data = ",session_formation_final_note_classement_data )
|
||||
#print(" ### session_formation_final_note_classement_data = ",session_formation_final_note_classement_data )
|
||||
|
||||
|
||||
tab_session = []
|
||||
|
|
@ -3106,7 +3113,7 @@ def Create_Bulletin_By_Inscrit_PDF(diction):
|
|||
# open output file for writing (truncated binary)
|
||||
resultFile = open(outputFilename, "w+b")
|
||||
|
||||
# convert HTML to PDF
|
||||
# convert HTML to PDF #
|
||||
pisaStatus = pisa.CreatePDF(
|
||||
src=sourceHtml, # the HTML to convert
|
||||
dest=resultFile) # file handle to receive result
|
||||
|
|
@ -3114,6 +3121,72 @@ def Create_Bulletin_By_Inscrit_PDF(diction):
|
|||
# close output file
|
||||
resultFile.close()
|
||||
|
||||
"""
|
||||
# Create a PdfDocument object
|
||||
doc = PdfDocument()
|
||||
|
||||
# Load a PDF file
|
||||
doc.LoadFromFile(outputFilename)
|
||||
|
||||
# Create font and brush
|
||||
font = PdfTrueTypeFont("DM Sans", 24.0, PdfFontStyle.Bold, True)
|
||||
brush = PdfBrushes.get_DarkBlue()
|
||||
|
||||
# Specify text to add to header
|
||||
headerText = "ABC INC."
|
||||
|
||||
# Iterate through the pages in the document
|
||||
for i in range(doc.Pages.Count):
|
||||
# Get a specific page
|
||||
page = doc.Pages[i]
|
||||
|
||||
# Draw a string at the specified position
|
||||
page.Canvas.DrawString(headerText, font, brush, 54.0, 25.0)
|
||||
print(" iiii ")
|
||||
|
||||
# Save the changes to a different PDF file
|
||||
doc.SaveToFile(str(MYSY_GV.TEMPORARY_DIRECTORY) + "/iiiiiii.pdf")
|
||||
|
||||
# Dispose resources
|
||||
doc.Dispose()
|
||||
"""
|
||||
####
|
||||
|
||||
|
||||
input_file = outputFilename
|
||||
output_file = outputFilename
|
||||
# Récupérer les pages
|
||||
reader = PdfReader(input_file)
|
||||
pages = [pagexobj(p) for p in reader.pages]
|
||||
# Composer le nouveau pdf
|
||||
canvas = Canvas(output_file)
|
||||
for page_num, page in enumerate(pages, start=1):
|
||||
# Ajouter la page
|
||||
canvas.setPageSize((page.BBox[2], page.BBox[3]))
|
||||
# canvas.setPageSize((300, 300))
|
||||
canvas.doForm(makerl(canvas, page))
|
||||
|
||||
# Dessiner le pied de page
|
||||
pied_page_html = """
|
||||
Votre société bla bla bla bla
|
||||
Page %s sur %s </p>
|
||||
"""% (page_num, len(pages))
|
||||
|
||||
print(" ## pied_page_html = ", pied_page_html)
|
||||
|
||||
footer_text = "Page %s sur %s" % (page_num, len(pages))
|
||||
x = 128
|
||||
canvas.saveState()
|
||||
canvas.setStrokeColorRGB(0, 0, 0)
|
||||
canvas.setLineWidth(0.5)
|
||||
canvas.line(66, 78, page.BBox[2] - 66, 78)
|
||||
canvas.setFont('Times-Roman', 10)
|
||||
canvas.drawString(page.BBox[2] - x, 65, pied_page_html)
|
||||
canvas.restoreState()
|
||||
|
||||
canvas.showPage()
|
||||
|
||||
canvas.save()
|
||||
|
||||
|
||||
return True, outputFilename
|
||||
|
|
|
|||
10
email_mgt.py
10
email_mgt.py
|
|
@ -2490,7 +2490,7 @@ def ManualSendInvoiceEmailRIB_CIC_JMJFormation(diction):
|
|||
body = {
|
||||
"params": {"order_id": "MTT/2025_N°0012/JMJ FORMATION",
|
||||
"date_order": ": 14/07/2025",
|
||||
"periode":"14/09/2025 au 13/10/2025",
|
||||
"periode":"14/10/2025 au 13/11/2025",
|
||||
"total_ht": "130",
|
||||
"tva": "11.05",
|
||||
"total_ttc": "141,05 ",
|
||||
|
|
@ -2506,9 +2506,9 @@ def ManualSendInvoiceEmailRIB_CIC_JMJFormation(diction):
|
|||
"montant": "130 €",
|
||||
|
||||
|
||||
"invoice_id": "FACT_20250910",
|
||||
"invoice_date": "14/09/2025",
|
||||
"due_date": "14/09/2025",
|
||||
"invoice_id": "FACT_20251012",
|
||||
"invoice_date": "19/10/2025",
|
||||
"due_date": "19/10/2025",
|
||||
"orign_order": "Contrat MTT/2025_N°0012/JMJ FORMATION",
|
||||
}
|
||||
}
|
||||
|
|
@ -2542,7 +2542,7 @@ def ManualSendInvoiceEmailRIB_CIC_JMJFormation(diction):
|
|||
#print(" ### body 22 = ", body)
|
||||
|
||||
sourceHtml = template.render(json_data=body["params"])
|
||||
orig_file_name = "invoice_FACT_20250910.pdf"
|
||||
orig_file_name = "invoice_FACT_20251012.pdf"
|
||||
outputFilename = str(MYSY_GV.INVOICE_DIRECTORY) + str(orig_file_name)
|
||||
|
||||
# open output file for writing (truncated binary)
|
||||
|
|
|
|||
|
|
@ -237,7 +237,7 @@ def Add_Message_To_Internal_Mail(tab_files, diction):
|
|||
Mise à jour d'un message, par exemple les status
|
||||
"""
|
||||
|
||||
def Update_Message_To_Internal_Mail(diction):
|
||||
def Update_Message_To_Internal_Mail(tab_files, Folder, diction):
|
||||
try:
|
||||
diction = mycommon.strip_dictionary(diction)
|
||||
|
||||
|
|
@ -258,7 +258,7 @@ def Update_Message_To_Internal_Mail(diction):
|
|||
"""
|
||||
Verification des champs obligatoires
|
||||
"""
|
||||
field_list_obligatoire = ['token', 'tab_message_id']
|
||||
field_list_obligatoire = ['token', 'tab_message_id', 'to', 'subject']
|
||||
|
||||
for val in field_list_obligatoire:
|
||||
if val not in diction:
|
||||
|
|
@ -275,6 +275,61 @@ def Update_Message_To_Internal_Mail(diction):
|
|||
if diction['token']:
|
||||
token = diction['token']
|
||||
|
||||
if( diction['to'] == ""):
|
||||
mycommon.myprint(
|
||||
str(inspect.stack()[0][
|
||||
3]) + " Aucun destinataire n'est précisé ")
|
||||
return False, " Aucun destinataire n'est précisé"
|
||||
|
||||
if (diction['subject'] == ""):
|
||||
mycommon.myprint(
|
||||
str(inspect.stack()[0][
|
||||
3]) + " Aucun sujet n'est précisé ")
|
||||
return False, " Aucun sujet n'est précisé"
|
||||
|
||||
if( len(diction['subject']) > 300 ):
|
||||
mycommon.myprint(
|
||||
str(inspect.stack()[0][
|
||||
3]) + " Le sujet ne doit pas faire plus de 300 caractères ")
|
||||
return False, " Le sujet ne doit pas faire plus de 300 caractères "
|
||||
|
||||
|
||||
# Sauvegarde des fichiers joints depuis le front
|
||||
tab_saved_file_full_path = []
|
||||
for file in tab_files:
|
||||
status, saved_file_full_path = mycommon.Upload_Save_PDF_IMG_File(file, Folder)
|
||||
if (status is False):
|
||||
mycommon.myprint("Impossible de récupérer correctement le fichier à importer")
|
||||
return False, "Impossible de récupérer correctement le fichier à importer"
|
||||
|
||||
if (saved_file_full_path):
|
||||
new_file = {}
|
||||
new_file['token'] = diction['token']
|
||||
type_document = "email"
|
||||
|
||||
new_file['file_business_object'] = str(file.filename)
|
||||
|
||||
new_file['file_name'] = str(file.filename)
|
||||
new_file['status'] = "1"
|
||||
new_file['type_document'] = str(type_document)
|
||||
|
||||
new_file['object_owner_collection'] = "internal_mail"
|
||||
new_file['object_owner_id'] = str(diction['tab_message_id'])
|
||||
|
||||
new_file['file_name_to_store'] = saved_file_full_path
|
||||
|
||||
# print(" ### new_file new_file = ", new_file)
|
||||
local_status, local_retval = attached_file_mgt.Internal_Usage_Store_User_Downloaded_File(
|
||||
MYSY_GV.upload_folder, new_file)
|
||||
|
||||
if (local_status is False):
|
||||
print(" ## WARINNGGG Impossible de stocker le fichier de Convocation ")
|
||||
|
||||
|
||||
tab_saved_file_full_path.append(saved_file_full_path)
|
||||
|
||||
|
||||
|
||||
local_status, my_partner = mycommon.Check_Connexion_And_Return_Partner_Data(diction)
|
||||
if (local_status is not True):
|
||||
return local_status, my_partner
|
||||
|
|
@ -309,9 +364,10 @@ def Update_Message_To_Internal_Mail(diction):
|
|||
|
||||
for local_message_id in tab_message_id:
|
||||
local_id = str(local_message_id)
|
||||
|
||||
|
||||
new_data = diction
|
||||
|
||||
new_data['from'] = str(my_partner['email'])
|
||||
new_data['sent'] = str(datetime.now())
|
||||
new_data['date_update'] = str(datetime.now())
|
||||
new_data['update_by'] = str(my_partner['_id'])
|
||||
|
||||
|
|
@ -444,23 +500,30 @@ def Get_List_User_Internal_Mail(diction):
|
|||
return local_status, my_partner
|
||||
|
||||
"""
|
||||
Clés de mise à jour
|
||||
"""
|
||||
Clés de mise à jour
|
||||
"""
|
||||
data_cle = {}
|
||||
data_cle['partner_owner_recid'] = str(my_partner['recid'])
|
||||
data_cle['valide'] = "1"
|
||||
data_cle['locked'] = "0"
|
||||
data_cle['related_collection_recid'] = str(diction['related_collection_recid'])
|
||||
|
||||
print(" ### data_cle = ", data_cle)
|
||||
filt_to_user_or_cc_user = {'to': {'$regex': mycommon.regex_replace_cartere(str(my_partner['email'])), "$options": "i"}}
|
||||
|
||||
query_qet_email_to_or_cc = [{'$match': {'$and': [data_cle, filt_to_user_or_cc_user]}}, {'$sort': {'_id': -1}},]
|
||||
|
||||
RetObject = []
|
||||
val_tmp = 0
|
||||
|
||||
for retval in MYSY_GV.dbname['internal_mail'].find(data_cle).sort([("_id", pymongo.DESCENDING), ]):
|
||||
for retval in MYSY_GV.dbname['internal_mail'].aggregate(query_qet_email_to_or_cc):
|
||||
user = retval
|
||||
user['id'] = str(val_tmp)
|
||||
val_tmp = val_tmp + 1
|
||||
|
||||
if( "liste_user_id_read" in retval.keys() and str(my_partner['_id']) in retval['liste_user_id_read']):
|
||||
user['read'] = "1"
|
||||
else:
|
||||
user['read'] = "0"
|
||||
|
||||
RetObject.append(mycommon.JSONEncoder().encode(user))
|
||||
|
||||
return True, RetObject
|
||||
|
|
@ -523,12 +586,12 @@ def Get_List_Internal_Mail_Sent_By_User(diction):
|
|||
data_cle['locked'] = "0"
|
||||
data_cle['creation_by'] = str(diction['creation_by'])
|
||||
|
||||
print(" ### data_cle = ", data_cle)
|
||||
qry = {"$and": [data_cle, {'from': {'$exists': True}},]}
|
||||
|
||||
RetObject = []
|
||||
val_tmp = 0
|
||||
|
||||
for retval in MYSY_GV.dbname['internal_mail'].find(data_cle).sort([("_id", pymongo.DESCENDING), ]):
|
||||
for retval in MYSY_GV.dbname['internal_mail'].find(qry).sort([("_id", pymongo.DESCENDING), ]):
|
||||
user = retval
|
||||
user['id'] = str(val_tmp)
|
||||
val_tmp = val_tmp + 1
|
||||
|
|
@ -548,6 +611,7 @@ def Get_List_Internal_Mail_Sent_By_User(diction):
|
|||
"""
|
||||
Cette fonction recupere le nombre d'email non lu pour un user
|
||||
"""
|
||||
|
||||
def Get_Nb_User_Internal_Mail_Not_Read(diction):
|
||||
try:
|
||||
diction = mycommon.strip_dictionary(diction)
|
||||
|
|
@ -588,19 +652,23 @@ def Get_Nb_User_Internal_Mail_Not_Read(diction):
|
|||
return local_status, my_partner
|
||||
|
||||
"""
|
||||
Clés de mise à jour
|
||||
"""
|
||||
Clés de mise à jour
|
||||
"""
|
||||
data_cle = {}
|
||||
data_cle['partner_owner_recid'] = str(my_partner['recid'])
|
||||
data_cle['valide'] = "1"
|
||||
data_cle['locked'] = "0"
|
||||
data_cle['is_read'] = "0"
|
||||
data_cle['related_collection_recid'] = str(diction['related_collection_recid'])
|
||||
data_cle['liste_user_id_read'] = {'$ne':str(my_partner['_id'])}
|
||||
|
||||
nb_no_read_internal_mail = MYSY_GV.dbname['internal_mail'].count_documents(data_cle)
|
||||
filt_to_user_or_cc_user = {'to': {'$regex': mycommon.regex_replace_cartere(str(my_partner['email'])), "$options": "i"}}
|
||||
|
||||
query_qet_email_to_or_cc = [{'$match': {'$and': [data_cle, filt_to_user_or_cc_user]}}, { '$count': "nb_mail_non_lus" }]
|
||||
|
||||
return True, str(nb_no_read_internal_mail)
|
||||
nb_mail_non_lu = "0"
|
||||
for line in MYSY_GV.dbname['internal_mail'].aggregate(query_qet_email_to_or_cc):
|
||||
nb_mail_non_lu = str(line['nb_mail_non_lus'])
|
||||
|
||||
return True, str(nb_mail_non_lu)
|
||||
|
||||
|
||||
except Exception as e:
|
||||
|
|
@ -609,6 +677,7 @@ def Get_Nb_User_Internal_Mail_Not_Read(diction):
|
|||
return False, " Impossible de récupérer le nombre de messages non lu(s)"
|
||||
|
||||
|
||||
|
||||
"""
|
||||
Récuperation des données d'un email
|
||||
"""
|
||||
|
|
@ -651,6 +720,7 @@ def Get_Given_Internal_Mail(diction):
|
|||
if (local_status is not True):
|
||||
return local_status, my_partner
|
||||
|
||||
liste_user_id_read = []
|
||||
|
||||
RetObject = []
|
||||
val_tmp = 0
|
||||
|
|
@ -660,8 +730,45 @@ def Get_Given_Internal_Mail(diction):
|
|||
user = retval
|
||||
user['id'] = str(val_tmp)
|
||||
val_tmp = val_tmp + 1
|
||||
|
||||
if( "liste_user_id_read" in retval.keys() ):
|
||||
for user_id in retval['liste_user_id_read']:
|
||||
liste_user_id_read.append(str(user_id))
|
||||
|
||||
"""
|
||||
Recuperer les eventuels _id des fichiers joints stocké dans la collection : 'download_files'
|
||||
"""
|
||||
tab_saved_file_id = []
|
||||
|
||||
for download_files_data in MYSY_GV.dbname['download_files'].find({'type_document':'email', 'object_owner_collection':'internal_mail',
|
||||
'object_owner_id':str(retval['_id'])},
|
||||
{'_id':1, 'file_business_object':1, 'file_name':1},):
|
||||
|
||||
local_node = {}
|
||||
local_node['download_files_id'] = str(download_files_data['_id'])
|
||||
local_node['download_files_file_business_object'] = str(download_files_data['file_business_object'])
|
||||
local_node['download_files_file_name'] = str(download_files_data['file_name'])
|
||||
tab_saved_file_id.append(local_node)
|
||||
|
||||
user['tab_saved_file_id'] = tab_saved_file_id
|
||||
RetObject.append(mycommon.JSONEncoder().encode(user))
|
||||
|
||||
"""
|
||||
Mettre à jour pour dire que le mail est lu par ce user connecté
|
||||
"""
|
||||
current_user_id = str(my_partner['_id'])
|
||||
|
||||
if( current_user_id not in liste_user_id_read ):
|
||||
liste_user_id_read.append(str(current_user_id))
|
||||
|
||||
updata_data = {}
|
||||
updata_data['liste_user_id_read'] = liste_user_id_read
|
||||
|
||||
MYSY_GV.dbname['internal_mail'].find_one_and_update(
|
||||
{'_id':ObjectId(str(diction['internal_mail_id'])), 'valide':'1', 'locked':'0'},
|
||||
{'$set': updata_data})
|
||||
|
||||
|
||||
return True, RetObject
|
||||
|
||||
|
||||
|
|
|
|||
11
main.py
11
main.py
|
|
@ -14224,7 +14224,16 @@ def Update_Message_To_Internal_Mail():
|
|||
# On recupere le corps (payload) de la requete
|
||||
payload = mycommon.strip_dictionary (request.form.to_dict())
|
||||
print(" ### Update_Message_To_Internal_Mail payload = ",payload)
|
||||
status, retval = internal_email_mgt.Update_Message_To_Internal_Mail(payload)
|
||||
|
||||
file = []
|
||||
if request.method == 'POST':
|
||||
# Create variable for uploaded file
|
||||
tab_files = []
|
||||
for tmp in request.files.getlist("File"):
|
||||
tab_files.append(tmp)
|
||||
|
||||
|
||||
status, retval = internal_email_mgt.Update_Message_To_Internal_Mail(tab_files, MYSY_GV.TEMPORARY_DIRECTORY_V2, payload)
|
||||
return jsonify(status=status, message=retval)
|
||||
|
||||
|
||||
|
|
|
|||
|
|
@ -785,7 +785,31 @@ def Get_Given_Partner_Invoice_Lines(diction):
|
|||
"""
|
||||
user['order_line_type_article'] = "formation"
|
||||
|
||||
"""
|
||||
19/10/2025 - aller recuperer les données des inscrits en faisant un lien entre partner_invoice_line['tab_inscription_ids']
|
||||
et partner_invoice_line_detail['order_line_inscription_id']
|
||||
"""
|
||||
tab_inscription = []
|
||||
for inscription_id in retval['tab_inscription_ids']:
|
||||
invoice_inscription_id_data = MYSY_GV.dbname['partner_invoice_line_detail'].find_one(
|
||||
{'order_line_inscription_id': str(inscription_id),
|
||||
'valide': '1', 'locked': '0',
|
||||
'partner_owner_recid': str(retval['partner_owner_recid']),
|
||||
'invoice_header_ref_interne': str(retval['invoice_header_ref_interne'])
|
||||
},
|
||||
{'order_line_inscription_type_apprenant': 1,
|
||||
'order_line_inscription_comment': 1,
|
||||
'order_line_inscription_memo': 1,
|
||||
'order_line_inscription_price': 1,
|
||||
'order_line_inscription_modefinancement': 1,
|
||||
'order_line_inscription_nom': 1,
|
||||
'order_line_inscription_prenom': 1,
|
||||
'order_line_inscription_email': 1,
|
||||
'order_line_inscription_civilite': 1,
|
||||
})
|
||||
tab_inscription.append(invoice_inscription_id_data)
|
||||
|
||||
user['inscription_data'] = tab_inscription
|
||||
RetObject.append(mycommon.JSONEncoder().encode(user))
|
||||
|
||||
"""
|
||||
|
|
@ -1102,6 +1126,31 @@ def Get_Given_Partner_Invoice_Lines_From_Invoice_ref_interne(diction):
|
|||
a 'formation'
|
||||
"""
|
||||
user['order_line_type_article'] = "formation"
|
||||
"""
|
||||
19/10/2025 - aller recuperer les données des inscrits en faisant un lien entre partner_invoice_line['tab_inscription_ids']
|
||||
et partner_invoice_line_detail['order_line_inscription_id']
|
||||
"""
|
||||
tab_inscription = []
|
||||
for inscription_id in retval['tab_inscription_ids']:
|
||||
invoice_inscription_id_data = MYSY_GV.dbname['partner_invoice_line_detail'].find_one(
|
||||
{'order_line_inscription_id': str(inscription_id),
|
||||
'valide': '1', 'locked': '0',
|
||||
'partner_owner_recid': str(retval['partner_owner_recid']),
|
||||
'invoice_header_ref_interne': str(retval['invoice_header_ref_interne'])
|
||||
},
|
||||
{'order_line_inscription_type_apprenant': 1,
|
||||
'order_line_inscription_comment': 1,
|
||||
'order_line_inscription_memo': 1,
|
||||
'order_line_inscription_price': 1,
|
||||
'order_line_inscription_modefinancement': 1,
|
||||
'order_line_inscription_nom': 1,
|
||||
'order_line_inscription_prenom': 1,
|
||||
'order_line_inscription_email': 1,
|
||||
'order_line_inscription_civilite': 1,
|
||||
})
|
||||
tab_inscription.append(invoice_inscription_id_data)
|
||||
|
||||
user['inscription_data'] = tab_inscription
|
||||
|
||||
RetObject.append(mycommon.JSONEncoder().encode(user))
|
||||
|
||||
|
|
@ -2319,6 +2368,33 @@ def GerneratePDF_Partner_Invoice(diction):
|
|||
"""
|
||||
user['order_line_type_article'] = "formation"
|
||||
|
||||
"""
|
||||
19/10/2025 - aller recuperer les données des inscrits en faisant un lien entre partner_invoice_line['tab_inscription_ids']
|
||||
et partner_invoice_line_detail['order_line_inscription_id']
|
||||
"""
|
||||
tab_inscription = []
|
||||
for inscription_id in retval['tab_inscription_ids']:
|
||||
invoice_inscription_id_data = MYSY_GV.dbname['partner_invoice_line_detail'].find_one(
|
||||
{'order_line_inscription_id': str(inscription_id),
|
||||
'valide': '1', 'locked': '0',
|
||||
'partner_owner_recid': str(retval['partner_owner_recid']),
|
||||
'invoice_header_ref_interne': str(retval['invoice_header_ref_interne'])
|
||||
},
|
||||
{'order_line_inscription_type_apprenant': 1,
|
||||
'order_line_inscription_comment': 1,
|
||||
'order_line_inscription_memo': 1,
|
||||
'order_line_inscription_price': 1,
|
||||
'order_line_inscription_modefinancement': 1,
|
||||
'order_line_inscription_nom': 1,
|
||||
'order_line_inscription_prenom': 1,
|
||||
'order_line_inscription_email': 1,
|
||||
'order_line_inscription_civilite': 1,
|
||||
})
|
||||
tab_inscription.append(invoice_inscription_id_data)
|
||||
|
||||
user['inscription_data'] = tab_inscription
|
||||
|
||||
|
||||
|
||||
Order_header_lines_data.append(user)
|
||||
|
||||
|
|
@ -2772,12 +2848,37 @@ def Send_Partner_Invoice_By_Email(tab_files, Folder, diction):
|
|||
a 'formation'
|
||||
"""
|
||||
user['order_line_type_article'] = "formation"
|
||||
"""
|
||||
19/10/2025 - aller recuperer les données des inscrits en faisant un lien entre partner_invoice_line['tab_inscription_ids']
|
||||
et partner_invoice_line_detail['order_line_inscription_id']
|
||||
"""
|
||||
tab_inscription = []
|
||||
for inscription_id in retval['tab_inscription_ids']:
|
||||
invoice_inscription_id_data = MYSY_GV.dbname['partner_invoice_line_detail'].find_one(
|
||||
{'order_line_inscription_id': str(inscription_id),
|
||||
'valide': '1', 'locked': '0',
|
||||
'partner_owner_recid': str(retval['partner_owner_recid']),
|
||||
'invoice_header_ref_interne': str(retval['invoice_header_ref_interne'])
|
||||
},
|
||||
{'order_line_inscription_type_apprenant': 1,
|
||||
'order_line_inscription_comment': 1,
|
||||
'order_line_inscription_memo': 1,
|
||||
'order_line_inscription_price': 1,
|
||||
'order_line_inscription_modefinancement': 1,
|
||||
'order_line_inscription_nom': 1,
|
||||
'order_line_inscription_prenom': 1,
|
||||
'order_line_inscription_email': 1,
|
||||
'order_line_inscription_civilite': 1,
|
||||
})
|
||||
tab_inscription.append(invoice_inscription_id_data)
|
||||
|
||||
user['inscription_data'] = tab_inscription
|
||||
|
||||
Order_header_lines_data.append(user)
|
||||
|
||||
"""
|
||||
Recuperation des produits et services
|
||||
"""
|
||||
Recuperation des produits et services
|
||||
"""
|
||||
query = [{'$match': {'$and': [filt_order_header_order_id,
|
||||
{'partner_owner_recid': str(my_partner['recid'])}]}},
|
||||
|
||||
|
|
|
|||
|
|
@ -597,10 +597,12 @@ def get_connected_data_from_token(connected_token = ""):
|
|||
if( token_data and "type" in token_data.keys() and ( str(token_data['type']) == "user" or str(token_data['type']) == "student" ) ):
|
||||
coll_token = MYSY_GV.dbname['user_account']
|
||||
tmp_val = coll_token.find_one({'token': str(connected_token), 'active': '1', 'locked': '0'})
|
||||
tmp_val['type_user_collection'] = "user_account"
|
||||
|
||||
else:
|
||||
coll_token = MYSY_GV.dbname['partnair_account']
|
||||
tmp_val = coll_token.find_one({'token': str(connected_token), 'active': '1', 'locked': '0'})
|
||||
tmp_val['type_user_collection'] = "partnair_account"
|
||||
|
||||
return True, tmp_val
|
||||
|
||||
|
|
@ -3541,6 +3543,17 @@ def GetAttendeeDetail_perSession(diction):
|
|||
local_employeur = local_Insc_retval['employeur']
|
||||
my_retrun_dict['employeur'] = local_employeur
|
||||
|
||||
memo = ""
|
||||
if ("memo" in local_Insc_retval.keys()):
|
||||
memo = local_Insc_retval['memo']
|
||||
my_retrun_dict['memo'] = memo
|
||||
|
||||
comment = ""
|
||||
if ("comment" in local_Insc_retval.keys()):
|
||||
comment = local_Insc_retval['comment']
|
||||
my_retrun_dict['comment'] = comment
|
||||
|
||||
|
||||
local_telephone = ""
|
||||
if ("telephone" in local_Insc_retval.keys()):
|
||||
local_telephone = local_Insc_retval['telephone']
|
||||
|
|
@ -4783,7 +4796,8 @@ def Get_Dictionnary_data_For_Template(diction):
|
|||
'tuteur1_pays', 'tuteur1_telephone', 'tuteur1_ville', 'tuteur1_prenom',
|
||||
'tuteur2_adresse', 'tuteur2_cp', 'tuteur2_email', 'tuteur2_nom', 'tuteur2_pays',
|
||||
'tuteur2_prenom','civilite',
|
||||
'tuteur2_telephone', 'tuteur2_ville','adresse', 'code_postal', 'ville', 'pays']
|
||||
'tuteur2_telephone', 'tuteur2_ville','adresse', 'code_postal', 'ville', 'pays',
|
||||
'memo', 'comment']
|
||||
|
||||
|
||||
for stagiaire_data in MYSY_GV.dbname['inscription'].find({'_id': {'$in': tab_stagiaire_id, },
|
||||
|
|
@ -8017,3 +8031,20 @@ def Get_Note_Categorie_Code( note, partner_owner_recid ):
|
|||
return True, code_note
|
||||
except ValueError:
|
||||
return False, '?'
|
||||
|
||||
"""
|
||||
Pour les recherche en mode regex. par exemple : "$regex":"mysylaplumedepierrot+04@gmail.com", "$options":"i"
|
||||
Pour eviter l'interpretation des caractères speciaux comme le '+', '*', '$', il faut ajouter des \\ devant
|
||||
"""
|
||||
def regex_replace_cartere( chaine ):
|
||||
try:
|
||||
|
||||
new_chaine = str(chaine)
|
||||
lis_cartere_speciaux = ['+', '*', '-', '$']
|
||||
|
||||
for carac in lis_cartere_speciaux:
|
||||
new_chaine = new_chaine.replace(carac, str("\\"+carac))
|
||||
|
||||
return new_chaine
|
||||
except ValueError:
|
||||
return chaine
|
||||
File diff suppressed because one or more lines are too long
Loading…
Reference in New Issue