25/03/2024 - 18h30

master
cherif 2024-03-25 18:21:45 +01:00
parent a0a955ed0e
commit 0d35d5c6e3
10 changed files with 5194 additions and 21 deletions

View File

@ -5,15 +5,13 @@
<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$/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$/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$/crm_opportunite.py" beforeDir="false" afterPath="$PROJECT_DIR$/crm_opportunite.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$/attached_file_mgt.py" beforeDir="false" afterPath="$PROJECT_DIR$/attached_file_mgt.py" afterDir="false" />
<change beforePath="$PROJECT_DIR$/class_mgt.py" beforeDir="false" afterPath="$PROJECT_DIR$/class_mgt.py" afterDir="false" />
<change beforePath="$PROJECT_DIR$/main.py" beforeDir="false" afterPath="$PROJECT_DIR$/main.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" />
</list>
<option name="SHOW_DIALOG" value="false" />
<option name="HIGHLIGHT_CONFLICTS" value="true" />

View File

@ -1237,7 +1237,7 @@ def Sent_E_Document_Signature_Request(diction):
msg.attach(html_mime)
msg['From'] = partner_SMTP_COUNT_From_User
msg['Bcc'] = 'contact@mysy-training.com'
msg['Subject'] = " Signature electronique document"
msg['Subject'] = " Demande signature électronique document"
# msg['to'] = "billardman01@hotmail.com"
msg['to'] = str(diction['user_email'])
@ -1251,7 +1251,7 @@ def Sent_E_Document_Signature_Request(diction):
msg.attach(html_mime)
msg['From'] = MYSY_GV.O365_SMTP_COUNT_From_User
msg['Bcc'] = 'contact@mysy-training.com'
msg['Subject'] = " Signature electronique document"
msg['Subject'] = " Demande signature électronique document"
# msg['to'] = "billardman01@hotmail.com"
msg['to'] = str(diction['user_email'])

View File

@ -667,4 +667,9 @@ Gestion des sequences de formation ( en rapport avec les emargements) :
- option = 1 ==> on prend la demi-journée
- option = 2 ==> on prend la journée
"""
EMARGEMENT_OPTION = ["0", "1", "2"]
EMARGEMENT_OPTION = ["0", "1", "2"]
"""
Taille maximale des nom de fichier
"""
FILE_NAME_MAX_SIZE = 250

File diff suppressed because one or more lines are too long

View File

@ -151,7 +151,7 @@ def Store_User_Downloaded_File(file=None, Folder=None, diction=None):
if diction['document_display_order']:
document_display_order = diction['document_display_order']
if (len(str(file.filename)) > 100):
if (len(str(file.filename)) > MYSY_GV.FILE_NAME_MAX_SIZE):
mycommon.myprint(
str(inspect.stack()[0][
3]) + " - Fichier invalide, trop long = " + str(
@ -242,7 +242,7 @@ def Get_Stored_Downloaded_File(diction):
if diction['file_name']:
file_name = diction['file_name']
if(len(str(file_name)) > 100 ):
if(len(str(file_name)) > MYSY_GV.FILE_NAME_MAX_SIZE ):
mycommon.myprint(
str(inspect.stack()[0][
3]) + " - Fichier invalide, trop long = "+ str(file_name)+ ". le nom doit faire moins de 100 caractère")
@ -472,7 +472,7 @@ def Delete_Stored_Downloaded_File(diction):
if diction['file_name']:
file_name = diction['file_name']
if(len(str(file_name)) > 100 ):
if(len(str(file_name)) > MYSY_GV.FILE_NAME_MAX_SIZE ):
mycommon.myprint(
str(inspect.stack()[0][
3]) + " - Fichier invalide, trop long = "+ str(file_name)+ ". le nom doit faire moins de 100 caractère")

View File

@ -57,7 +57,7 @@ def add_class(diction):
'internal_url', 'zone_diffusion', 'metier', 'published', 'img_url', 'objectif',
'programme', 'prerequis', 'note', 'cpf', 'certif', 'class_inscription_url', 'pourqui',
'support', 'img_banner_detail_class', 'source', 'lms_class_code', 'formateur_id',
'class_level']
'class_level', 'methode_pedagogique', 'condition_handicape']
incom_keys = diction.keys()
for val in incom_keys:
@ -277,6 +277,36 @@ def add_class(diction):
mydata['programme'] = programme
methode_pedagogique = ""
if ("methode_pedagogique" in diction.keys()):
if diction['methode_pedagogique']:
programme = diction['methode_pedagogique']
if (len(mycommon.cleanhtml(diction['methode_pedagogique'])) > MYSY_GV.CLASS_ZONE_PROGRAM_LIMIT):
mycommon.myprint(
str(inspect.stack()[0][3]) + " : le champ 'methode pedagogique' de La formation " + str(
mydata['external_code']) + " a plus de " + str(
MYSY_GV.CLASS_ZONE_PROGRAM_LIMIT) + " caractères")
return False, " le champ 'methode pedagogique' de La formation " + str(
mydata['external_code']) + " a plus de " + str(MYSY_GV.CLASS_ZONE_PROGRAM_LIMIT) + " caractères"
mydata['methode_pedagogique'] = methode_pedagogique
condition_handicape = ""
if ("condition_handicape" in diction.keys()):
if diction['condition_handicape']:
condition_handicape = diction['condition_handicape']
if (len(mycommon.cleanhtml(diction['condition_handicape'])) > MYSY_GV.CLASS_ZONE_PROGRAM_LIMIT):
mycommon.myprint(
str(inspect.stack()[0][3]) + " : le champ 'condition handicape' de La formation " + str(
mydata['external_code']) + " a plus de " + str(
MYSY_GV.CLASS_ZONE_PROGRAM_LIMIT) + " caractères")
return False, " le champ 'condition handicape' de La formation " + str(
mydata['external_code']) + " a plus de " + str(MYSY_GV.CLASS_ZONE_PROGRAM_LIMIT) + " caractères"
mydata['condition_handicape'] = condition_handicape
prerequis = ""
if ("prerequis" in diction.keys()):
if diction['prerequis']:
@ -614,7 +644,7 @@ def update_class(diction):
'domaine', 'internal_code', 'internal_url','zone_diffusion', 'metier',
'published', 'img_url', 'objectif', 'programme', 'prerequis', 'note',
'cpf', 'certif', 'class_inscription_url','pourqui', 'support', 'img_banner_detail_class',
'duration_unit', 'source', 'lms_class_code', 'formateur_id', 'class_level']
'duration_unit', 'source', 'lms_class_code', 'formateur_id', 'class_level','methode_pedagogique', 'condition_handicape']
incom_keys = diction.keys()
for val in incom_keys:
@ -746,6 +776,29 @@ def update_class(diction):
diction['external_code']) + " a plus de " + str(MYSY_GV.CLASS_ZONE_PROGRAM_LIMIT) + " caractères"
if ("methode_pedagogique" in diction.keys()):
mydata['methode_pedagogique'] = diction['methode_pedagogique']
if (len(mycommon.cleanhtml(diction['methode_pedagogique'])) > MYSY_GV.CLASS_ZONE_PROGRAM_LIMIT):
mycommon.myprint(
str(inspect.stack()[0][3]) + " : le champ 'methode pedagogique' de La formation " + str(
diction['external_code']) + " a plus de " + str(
MYSY_GV.CLASS_ZONE_PROGRAM_LIMIT) + " caractères")
return False, " le champ 'methode pedagogique' de La formation " + str(
diction['external_code']) + " a plus de " + str(MYSY_GV.CLASS_ZONE_PROGRAM_LIMIT) + " caractères"
if ("condition_handicape" in diction.keys()):
mydata['condition_handicape'] = diction['condition_handicape']
if (len(mycommon.cleanhtml(diction['condition_handicape'])) > MYSY_GV.CLASS_ZONE_PROGRAM_LIMIT):
mycommon.myprint(
str(inspect.stack()[0][3]) + " : le champ 'condition handicape' de La formation " + str(
diction['external_code']) + " a plus de " + str(
MYSY_GV.CLASS_ZONE_PROGRAM_LIMIT) + " caractères")
return False, " le champ 'condition handicape' de La formation " + str(
diction['external_code']) + " a plus de " + str(MYSY_GV.CLASS_ZONE_PROGRAM_LIMIT) + " caractères"
if ("cpf" in diction.keys()):
mydata['cpf'] = diction['cpf']
@ -2087,6 +2140,29 @@ def get_class(diction):
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 ("pedagogie" in retVal.keys()):
tmp_str = retVal['pedagogie']
no_html = mycommon.cleanhtml(retVal['pedagogie'])
@ -3024,7 +3100,8 @@ def add_class_mass(file=None, Folder=None, diction=None):
'distantiel', 'presentiel', 'prix', 'domaine', 'url','duree', 'duree_unite', 'plus_produit',
'mots_cle', 'zone_diffusion', 'metier', 'publie', 'img_url',
'objectif', 'programme', 'prerequis', 'formateur', 'note', 'cpf', 'certif',
'class_inscription_url', 'pourqui', 'support', 'img_banner_detail_class', 'formateur_email']
'class_inscription_url', 'pourqui', 'support', 'img_banner_detail_class', 'formateur_email',
'methode_pedagogique', 'condition_handicape']
total_rows = len(df)
@ -3225,6 +3302,22 @@ def add_class_mass(file=None, Folder=None, diction=None):
mydata['programme'] = programme
methode_pedagogique = ""
if ("methode_pedagogique" in df.keys()):
if (str(df['methode_pedagogique'].values[n])):
methode_pedagogique = str(df['methode_pedagogique'].values[n]).strip()
methode_pedagogique = mycommon.format_MySy_Text_Tag(methode_pedagogique)
mydata['methode_pedagogique'] = methode_pedagogique
condition_handicape = ""
if ("condition_handicape" in df.keys()):
if (str(df['condition_handicape'].values[n])):
condition_handicape = str(df['condition_handicape'].values[n]).strip()
condition_handicape = mycommon.format_MySy_Text_Tag(condition_handicape)
mydata['condition_handicape'] = condition_handicape
prerequis = ""
if ("prerequis" in df.keys()):
if (str(df['prerequis'].values[n])):
@ -3452,7 +3545,7 @@ def Controle_add_class_mass(saved_file=None, Folder=None, diction=None):
'distantiel', 'presentiel', 'prix', 'domaine', 'url', 'duree', 'duree_unite', 'plus_produit',
'mots_cle', 'zone_diffusion', 'metier', 'publie', 'img_url',
'objectif', 'programme', 'prerequis', 'formateur', 'note', 'cpf', 'certif',
'class_inscription_url', 'pourqui', 'support', 'img_banner_detail_class', 'formateur_email']
'class_inscription_url', 'pourqui', 'support', 'img_banner_detail_class', 'formateur_email' ,'methode_pedagogique', 'condition_handicape']
total_rows = len(df)
@ -3919,6 +4012,20 @@ def get_class_by_metier(diction):
if (len(no_html) > MYSY_GV.MAX_CARACT):
retVal['programme'] = no_html[:MYSY_GV.MAX_CARACT] + " ..."
if ("methode_pedagogique" in retVal.keys()):
tmp_str = retVal['methode_pedagogique']
no_html = mycommon.cleanhtml(retVal['methode_pedagogique'])
if (len(no_html) > MYSY_GV.MAX_CARACT):
retVal['methode_pedagogique'] = no_html[:MYSY_GV.MAX_CARACT] + " ..."
if ("condition_handicape" in retVal.keys()):
tmp_str = retVal['condition_handicape']
no_html = mycommon.cleanhtml(retVal['condition_handicape'])
if (len(no_html) > MYSY_GV.MAX_CARACT):
retVal['condition_handicape'] = no_html[:MYSY_GV.MAX_CARACT] + " ..."
if ("pedagogie" in retVal.keys()):
tmp_str = retVal['pedagogie']
no_html = mycommon.cleanhtml(retVal['pedagogie'])

View File

@ -8040,7 +8040,7 @@ def Create_E_Signature_For_E_Document():
file_img = None
if request.method == 'POST':
# Create variable for uploaded file
if ('signature_img' in request.files.keys()):
if ('signature_img' in request.files.keys() and request.files['signature_img']):
file_img = request.files['signature_img']
@ -8049,6 +8049,8 @@ def Create_E_Signature_For_E_Document():
user_ip = headers_list[0] if headers_list else request.remote_addr
payload['user_ip'] = user_ip
if( "signature_img" in payload.keys() ):
del payload['signature_img']
status, retval = E_Sign_Document.Create_E_Signature_For_E_Document(file_img, MYSY_GV.TEMPORARY_DIRECTORY_V2, payload)
return jsonify(status=status, message=retval)

View File

@ -461,6 +461,7 @@ def Add_Partner_Order(diction):
la sequence par defaut dont partner_owner_recid = 'default'
"""
# Rcuperation de la sequence de l'objet "partner_order_header" dans la collection : "mysy_sequence"
retval_sequence_order = MYSY_GV.dbname['mysy_sequence'].find_one({'related_mysy_object': 'partner_order_header',
'valide': '1', 'partner_owner_recid':str(my_partner['recid'])})

View File

@ -4925,7 +4925,7 @@ ensuite de faire la mise à jour manuellement.
Mais ca permet d'envoir un systeme pleinement operationnel des l'activation du compte.
Liste des points de configuration à ajoouter
- Les document : Il faut créer à minima les documents suivants :
- Les documents : Il faut créer à minima les documents suivants :
-> Demande d'inscription
-> Confirmation Inscription
-> Convention individuelle
@ -5006,7 +5006,8 @@ def Configure_Partner_Init_Setup_No_Token(diction):
liste_document_ref_interne = ['CONF_PRE_INSCRIPTION', 'CONF_INSCRIPTION', 'REFUS_INSCRIPTION','ANNULE_INSCRIPTION',
'EMARGEMENT_FORMATION', 'TABLEAU EMARGEMENT', 'EMPLOYEE_CREDENTIALS', 'EMARGEMENT'
'CONVOCATION_STAGIAIRE', 'EMPLOYEE_CREDENTIALS_FOR_LMS', 'ATTESTATION_FORMATION',
'PART_INVOICE', 'PART_ORDER', 'CONVENTION_STAGIAIRE']
'PART_INVOICE', 'PART_ORDER', 'CONVENTION_STAGIAIRE', 'E_DOCUMENT_SIGNATURE_REQUEST', 'E_DOCUMENT_SIGNATURE_CODE',
'E_DOCUMENT_SIGNED']
"""
Supprimer les eventuel ancienne information de ce type pour ce partenaire

View File

@ -335,7 +335,7 @@ def Add_Ressource_Humaine(diction):
field_list = ['token', "nom", "email", "telephone", "website", "comment",'adr_adresse', 'adr_code_postal',
'adr_ville', 'adr_pays', 'profil', 'telephone_mobile', 'linkedin',
'facebook', 'twitter', 'prenom', 'fonction', 'civilite', 'superieur_hierarchie_id', 'ismanager',
'groupe_prix_achat_id', 'prix_achat', 'type_contrat', 'gategorie', 'date_naissance'
'groupe_prix_achat_id', 'prix_achat', 'type_contrat', 'gategorie', 'date_naissance', 'competence'
]
incom_keys = diction.keys()
@ -589,6 +589,12 @@ def Add_Ressource_Humaine(diction):
twitter = diction['twitter']
data['twitter'] = twitter
competence = ""
if ("competence" in diction.keys()):
if diction['competence']:
competence = diction['competence']
data['competence'] = competence
profil = ""
if ("profil" in diction.keys()):
@ -666,7 +672,7 @@ def Update_Ressource_Humaine(diction):
'adr_ville', 'adr_pays', 'profil', 'telephone_mobile', 'linkedin',
'facebook', 'twitter', '_id', 'prenom', 'fonction', 'civilite',
'superieur_hierarchie_id', 'ismanager', 'groupe_prix_achat_id', 'prix_achat', 'type_contrat',
'gategorie', 'date_naissance']
'gategorie', 'date_naissance', 'competence']
incom_keys = diction.keys()
@ -943,6 +949,10 @@ def Update_Ressource_Humaine(diction):
twitter = diction['twitter']
data_update['twitter'] = diction['twitter']
competence = ""
if ("competence" in diction.keys()):
data_update['competence'] = diction['competence']
"""