23/11/2023 - 21h30

master
cherif 2023-11-23 21:43:20 +01:00
parent fc4e13ff8d
commit e04568b072
7 changed files with 2198 additions and 73 deletions

View File

@ -1,12 +1,14 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="ChangeListManager">
<list default="true" id="c6d0259a-16e1-410d-91a1-830590ee2a08" name="Changes" comment="22/11/2023 - 23h00">
<list default="true" id="c6d0259a-16e1-410d-91a1-830590ee2a08" name="Changes" comment="23/11/23 - 13:30">
<change beforePath="$PROJECT_DIR$/.idea/workspace.xml" beforeDir="false" afterPath="$PROJECT_DIR$/.idea/workspace.xml" afterDir="false" />
<change beforePath="$PROJECT_DIR$/Emargement/test_emargement.pdf" beforeDir="false" afterPath="$PROJECT_DIR$/Emargement/test_emargement.pdf" 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_Sequence.py" beforeDir="false" afterPath="$PROJECT_DIR$/Session_Formation_Sequence.py" afterDir="false" />
<change beforePath="$PROJECT_DIR$/base_config_modele_journee.py" beforeDir="false" afterPath="$PROJECT_DIR$/base_config_modele_journee.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$/main.py" beforeDir="false" afterPath="$PROJECT_DIR$/main.py" afterDir="false" />
<change beforePath="$PROJECT_DIR$/prj_common.py" beforeDir="false" afterPath="$PROJECT_DIR$/prj_common.py" afterDir="false" />
</list>
<option name="SHOW_DIALOG" value="false" />
<option name="HIGHLIGHT_CONFLICTS" value="true" />
@ -76,13 +78,6 @@
<option name="presentableId" value="Default" />
<updated>1680804787304</updated>
</task>
<task id="LOCAL-00107" summary="15/09/2023 - 18h">
<created>1694793521821</created>
<option name="number" value="00107" />
<option name="presentableId" value="LOCAL-00107" />
<option name="project" value="LOCAL" />
<updated>1694793521822</updated>
</task>
<task id="LOCAL-00108" summary="22/09/2023 - 12h53">
<created>1695380023775</created>
<option name="number" value="00108" />
@ -419,7 +414,14 @@
<option name="project" value="LOCAL" />
<updated>1700691598344</updated>
</task>
<option name="localTasksCounter" value="156" />
<task id="LOCAL-00156" summary="23/11/23 - 13:30">
<created>1700742130513</created>
<option name="number" value="00156" />
<option name="presentableId" value="LOCAL-00156" />
<option name="project" value="LOCAL" />
<updated>1700742130514</updated>
</task>
<option name="localTasksCounter" value="157" />
<servers />
</component>
<component name="Vcs.Log.Tabs.Properties">
@ -434,7 +436,6 @@
</option>
</component>
<component name="VcsManagerConfiguration">
<MESSAGE value="17/10/2023 - 22h40" />
<MESSAGE value="17/10/2023 - 22h45" />
<MESSAGE value="zzz" />
<MESSAGE value="22/10/2023 - 12h" />
@ -459,6 +460,7 @@
<MESSAGE value="18/11/2023 - 17h00" />
<MESSAGE value="20/11/2023 - 21h00" />
<MESSAGE value="22/11/2023 - 23h00" />
<option name="LAST_COMMIT_MESSAGE" value="22/11/2023 - 23h00" />
<MESSAGE value="23/11/23 - 13:30" />
<option name="LAST_COMMIT_MESSAGE" value="23/11/23 - 13:30" />
</component>
</project>

View File

@ -37,7 +37,7 @@ endobj
endobj
7 0 obj
<<
/Author () /CreationDate (D:20230822120813-01'00') /Creator (\(unspecified\)) /Keywords () /ModDate (D:20230822120813-01'00') /Producer (xhtml2pdf <https://github.com/xhtml2pdf/xhtml2pdf/>)
/Author () /CreationDate (D:20231123213045-01'00') /Creator (\(unspecified\)) /Keywords () /ModDate (D:20231123213045-01'00') /Producer (xhtml2pdf <https://github.com/xhtml2pdf/xhtml2pdf/>)
/Subject () /Title () /Trapped /False
>>
endobj
@ -48,10 +48,10 @@ endobj
endobj
9 0 obj
<<
/Filter [ /ASCII85Decode /FlateDecode ] /Length 3651
/Filter [ /ASCII85Decode /FlateDecode ] /Length 1859
>>
stream
Gb!;h?'F'P&U_?#_7/'r3f!dNrMJ4F,*ct;niiqnV2EQuF(J.h=YB[OOPD,d`:0N,@Kh@ZZd+KsSfVWn%XZ6McLUtD*rl,@F-cdlPWa;p1MsGHDj`4XR@RYqcV?G!]m8(VkUYAoW[R2=cC1n8Fkmfrf3-\XXhHunnuAeG2Z%mN.r/?_CSa+0WpFiQN6,'sR(@eBoKLa3C7At:qW,1)E!,=59UR62H6$R3e!*l4GM@UFAWIq=DdM9"n`_ZQs-L@h]>kG+kIZLFhe&eDH[\9Ym.AorG$_0:lHRu3S!Di6UIn7oII9=+hW,pJmGDh'`_Xl_<OAc@:"0-g^U%9J`VS"W="IUTr:5s7b0K4RY<nl+/m2>UWlW42VCSdK-82N'XA[ccA@^.cfBi=Ra7Ho=pE(K_n$:P`T:TA:s5M^-=o[[J=3mLfJ,9!5O(WC'^4,Tg]TU1OCH>JZc?,DAhu)uH^Z=;Fs)q3/p5-mc0`oCR>i_o%47FF1rP*PTjR)%Q>V>I)LR[OBR#b$1A"SDf?hJ7MX]@mjp[!bI$b(hY*aZCCg8MY7/se?OiXO..rN7uU:#/$ZqASm/rq,`nA(">)Ksn*.RXG)/c_Ahu]2jiel('Ze5us!1lFa13+@&0bl$9L/qRPNV%qVG7X_W>]&*!pLq?qUoqObg?5I)C"hqq?W1Y&m&g.IW)=WZ$_eNX:sH5[VdNVmhsiSiUj59F_lDs*iFI>h+#c;h@/K,MCHD"c5*F_T&RT"J]c!W!iAkH3>6+*a<o[/9^iY#">d7d'0B"[$!u3em%MHo]9N.93;CdC/PG7a5T<20C7S4'p?P_%)cA>8V!FdA_478j'HJ4DFhK#>.+r\6GCLLU`=(9i>iDcB:R7(ak1.?X2//nglNb/;\("Cj-N@EPV#'+M0Ak8\-M+M3;Z_K1FBJ.kfVj`fUn_D:nh5VW319b!C1q:6]i^Qj-0g*K9TcW@rt"%[=X[TeoSTg'uc27!1'<UE!i(k!VeM"ZoVFD./q`<ANS[P1.4[8L1bgqiWVA)KUKUl.uo2']"gkUF9*B@t27hKSN&k]4$&KR#V:B+pZe\3D%Y9_2a^i>8V"12CeR4@.B?ld;@g5,bj=\IE=3e@nr8!40Sf5eIDeE]$m[<rXIKe*@OeP#459^3gT53Nj9UDU*SO21fDb=@@Sc@Y$u<Hn;.e(CtK4DU>^V3at[dD:6SWrYd5V&#0'54Ft/RPEi4Y)8PHa)]9AVB"*Q$sfo8!fdVZfqP[mu8B8UD&oH+Y),:0)=_#6hm`uuCdA*h4*.*6X?#>2!:N:S<u<?6L\2"3beBfBjh'%:j9*p"NV0dfT)/_H2KC^Ym9To6)RQ,lXUC,]sq'%M$<2WZ@%&Z87</PK(hh%g3UFfC8^\"g=o:l4EpBV,pdY^Dp\OP>T_,i&s-EKY,CK?(8okmWc3B#F<i&If!3:6'<5EL%m)^beY]D;]G1gK/@X8Vc3PQIqTQ0b"BC,^YL)W->VFg&^$WQ=pMU8(Dtjh`?=d8PHU%4-Q%l"1BN]fo7sedd:G2-cpL=ZBr8Nhs#O5_<g@TPg(s:00fAX%bn@O%;0QR7rd\j_p6r*HX-"V:Uoh7"Q!1%_B:mu[c"'um]*FF='5ShQ:)QXLXA4Aa-N]N6nu??$Ee1k#V&Y^CerRN3fL+%+'qMB)mBqX'rWmr-gGq.LGMrriC-\L!@pH4JLY/VU9<+V</hc%*sEUf&e7m6lE`WN+P$SrJrhXaY%A]*eG3YqT,kR_MD0hrkJ?1ddgpF(KBR9G2#2aGUd.b-.]5q'0/,Wu";RkU\hs3a"/J1YJL[RUPE-Y*"U?MRATVYW"U5)Q?W,_$3WpqD9@2i06l=PMpbTEf!3Fa!_RR>#T>BXB#-/>aKRmkoQ9<>u;50+*:i448B,<*koFV;-bub!L`JP<,!X$tXQ9:XE;)!Zpg2[rfQ?71n=82NJo8D)o*hRLsA%Gj9YdD-bk8Z=@?o;C+$rl7d1m)0C@M0)Kj&@jt?r:AG$rl7d30@<?@QH2>ND\(kJjmKe/u`\u&HS<&<qR0Lq4]/I#16j96%Com=;#$R*Cc6*=&@RB&6,=Ff^^R$$s3gf$<.mISo'#Z.m[!_.Ur]o*B.@P*2l-QB?RV70H^YsK'I+%&P,i+hSFV`n@g?g+?H"tO+U.k`$#P`_g0\k$S%>A5m=9Y/ks'q!%AIYTZZNIj9lBX!^R!iS1[Q#DL`E@W'HWqV9'Mj&;5F&FX-2`W%->?S)LI]B7^+55"RF:[_*/aJcI8a8Y14?/1F7`>gqlYo8Zm"KaETOqHS<sn`lo(+`U5K)j#-N3[n/VY3Brf)98f<@HO#ZRGJ)]`UjhEI(i&YJcI9j#)7TM$S_ngW,S1Vhfr;`',&pXCg"LBlGP%qY0#A&I,ib6:In`SZ\A40WtXAVigPfXb;W`J&+btH7]%>jenY'?Xg^hHMa;G%9b@:u5=Ddo7#01N=Vk$a#n%KH1:B=6!Ws]VT`S66Q=jN3J0Z[FTZYmf\]5/@"@33k5$OV,JH8'X(KB"m^(8UsIX0iGfti$4*"8RZH13fGoOBlk#1;BlC%;FmXb$WiW,fI+q#UY!_1;qm3F/)$JH;h05R"0X/l"TJ^acijJL[EfP:nU4#l0YKHIafIh5O&s]d9CX&c3If75,!*Hk>Csf[oU@nuT_d8`0r/'g8EVj)A]F\,p)-O"&C5>abeu5ZlED#%SW(9`bt><h(u-=b]SeTk0*sg"fd`gWTK9cPGgc+iM)!B0jr%n3M:clt^R+,fO^s@M9;RjCCi>iR5Xk+KWZ+Oqbg1M+p6;Ocr3_7S=EL!Q'_Q/4hR$)@l.ti^S)7OD0pgn9g?h(5(g)RNUg`IY_MhL^p3%ZRr+L&f)rnAScY3"U7N763XBJ/^M#D!(g:k5aASV163@s$%`L`IC;98!X"%90;u$d*J!5$jh9hi#Oe-+%&1Xbn2T(m6QErc3h.Ql^7[51&6,=Fl-eW#%$1NV"fe(F9tnCC.1fIOb3@pHis&&jJI5?o?(-.l!C=en<&_+CJ-Nu.eE9Jj1*Q?K4GmMXD"t6!$*g\m;<1l8CKc8q#V13pH,egk<aZ!GMB5]fD7HqfR"2E8`sg$G>1s<c+KRP8b-MMCL-s,u=0fHE>SjE/DFSVI/=Z^P$B,)+HJO4-'4=mmE?sd;$X,=E:d%:5,T!Ruab3%S(fc`&[&t\g%b5&g;.@AQQL*O+4eF2q.p<_ukCVQ*7KH%om(k+A,s&6Gpi"GaeaPS<PW*tlL.1HEp`+!giL4imMXaJIfMhFAde(DQl0K)DT<ti#kYn;aL.g!`-cSAZ@8G:KMGoJ"VR'$VJ$QqoU.:Iq)(lARQ7K+LG8FXD*H3c<Edh9<hSQt+_+7tD2ge^/+ndc18X<krVK3+N4',idO`=qmL.aV;I^&DYp(SBGQ=IG3F3=eMB44SuEJ6DB909V/Yk&WR'n*59a)G`PZjVblf``LbPNq:k>&_3rFHCI+QYTcD^;k>WdY&f5/2[ZT*.g#,81dKZ5ok_'9cd3U;KG[T+c'&$e?[RDeKKN$;+N8a4>S!26Z;mD='J[hFZI+TZr([?[I[<RF`sghO/T]@laC(Y5uW!FG>3i[=6oDU[HYb+4l!ujI:D?iM6PQ6e#KRqs3K!S/C/`o\LJVLTDO\9FLLAT0H7s9S,WKmNEDn~>endstream
Gb!;g?#SIU'Rf_Zi7lrd@JD#2UMj;)Camdj8c;a"#SndY0ftrd+b,!;**l14ADZVh;q34t/"LbL\V/7fCrVVEqcD@0Ik;Q8D9e0f,a4,1n!M=D`o\*(F?]S7G%JGM$X/g#B6ffLU<7_PQeHIaV^4Ef01WN+=^IE\H"N<f'U+^'8h.a@9;[s3>-$F"T&2;ko<L'QlLC9_3![$)>SY+X*NjE_AB+UQg*_WWn(F1gLSrCKh>X]^hQ6/^bJe5fQHd0K^@lq4s-4UI/(q).lE78oH7K`VV!m^(IXdlE)Ku)VCfN]&18@K[8laODr6;qcMV6EHV0`tMC_-%cX-B]%(&tAAA=;RLMgE@<Ok^X;^T<g]ZFse#bOh6o4g(,1Rto$!HcIbB:Zgj/cVHb]qt9(1m,\-CbP[FMl]]N`ds<=riY<3[Z;T5]k*ll?G0/VrV2qH8<^Q$h=>-rq]IYSo,25##<Jkh/#i!=(hp7b7:t1i*Jr?klF5)FK7GVZj7GWeFm2gm[m9Y7!Mb7oSEf\1\br>S21al@A0-4>-4I;Z^QO/kufEu2XO(e*)rCn6A8m9b6@@\+_JZL>-je=N6#gargSeYN&?,;(51+dc(F*XE"l4K]M.sa2NZ!KPt:CjoF^6+H@:a;gq=cm9NBuJY>;!6*=fW1.<&,3,oc+e$bj\]*$TT=DVLn*X>dFX$1.a`nIku&ogSq="M,CR2o.6?KF3DRT$]3.75KL??9Z)t;RJ$)^kg<Z#d\Q'NNU`F/4=#8Dho05l0@`bl1h%jCk9XY,fd</=>580G2UY=PL&ui+aA5onE:NuIJG*j8lm"iPi_C[U^A@a?PO*P>EE:r'lrJ\'n9XhC`P-LR@mRdt"G/QBrh%#l.1>*/-a%R#V5l2FSaG=H-[j*,$V;@.N`p/@)A?lY$'4e*P30-]&8rrZ=LnRS*1#:8q6cO:A\d^Z]fb%l<F?=/jaCIAO*dKL")^FDm18\:@NQ@JnWHTNkniGbIR;N8S(n"V6MLDiq^\a"7BD/mmI[=3V938+#$P1;5ApgpT0>bW/:&>V`f\]3ND>(tm<VI>h:.4F<@iouf]8\"d+&;qH7OOpaC>P73P&'GCL%_\9,lgP6NS'r'pZfb`&8k-SDZa;ITENf$*K#0HRJUQRh!P(,D88dEPb8r"6d_4O1?4(/Rll$:n.Hd7:^u*OBKF]I",)d1W"*G\!>/pjX13!)6W5%Yd></4ENmoQkBID)-g"9i:T3Up4HuKWe#CG:)"7kR8l1N3eDq8OGQeU(W5`q"o'lps646C^NTemQ'+>F=hP[q0lPP^^I#31D'Mo]9=sK[O#/Lck5\UdDNIX@A3k?XD1dJEW^nbT_>oEha+BgL-d^+oc%0?tMXV`bda>C=^#QPF<fO`L;N%U)"D59.Qh8JP_F-FAO8njmu\-F8o+q?*R_]AgG!D/!$6V/r>+HS_rWu"V^ai2g7ZH$DH+t=nHfXa?A336FS,pa=0(W\0J<\L7HdYb/b%;1aY?q(`i9_%7F7J@KM!0Ph<3Tqm[n,Wq_UbtIK27_q>^]tuc0r.^rM_5Hd!2:2q.Q,'+d_H)1=tuh9;iE:;Hk/Uq##o?#dA>6aN>75SRfk.MIG]A8_1<Jb88CU=A@QjY!.m_:2'NYba68sWpHZ)p`22Q4>oMoJLfTJEZlGi6"5O(,M@l2B@r,kP[t&/2OA!bO\hlIT4c4mF76n:C9\lKB)bb\(T)GKrPl#4t=JV<9,W29_,!Zl6SJHdF7SGD,$D^FT5YW;s(/P04VaV`+$rID2!it>fe3m_[@D^L@l1ka2s/1j9i_l072'5n<ImC^?!V7<nh7J,q".X)MPnsD+1VX0eoV_%r\,>2L%*rPc!Hn5_ao~>endstream
endobj
xref
0 10
@ -68,7 +68,7 @@ xref
trailer
<<
/ID
[<44c9cae7153c77931f6c043a6c6a4568><44c9cae7153c77931f6c043a6c6a4568>]
[<435940486b7b055693a3310f4a22df67><435940486b7b055693a3310f4a22df67>]
% ReportLab generated PDF document -- digest (http://www.reportlab.com)
/Info 7 0 R
@ -76,5 +76,5 @@ trailer
/Size 10
>>
startxref
4772
2980
%%EOF

File diff suppressed because one or more lines are too long

View File

@ -1817,10 +1817,8 @@ def SendEmargementMail( diction):
# Recuperation des infos de l'emargement
print("my_emarge_id = " + str(my_emarge_id))
val_emarge = MYSY_GV.dbname['emargement'].find_one({'_id':ObjectId(my_emarge_id)})
print("val_emarge = "+str(val_emarge))
print("ID = " + str(val_emarge['_id']))
print("email = " + str(val_emarge['email']))
val_emarge = MYSY_GV.dbname['emargement'].find_one({'_id':ObjectId(my_emarge_id), 'partner_owner_recid':str(partner_recid)})
# recuperation du titre de la formation
local_class_title = MYSY_GV.dbname['myclass'].find_one({'internal_url':str(val_emarge['class_internal_url']),
@ -1852,7 +1850,7 @@ def SendEmargementMail( diction):
# JINJA2
templateLoader = jinja2.FileSystemLoader(searchpath="./")
templateEnv = jinja2.Environment(loader=templateLoader)
TEMPLATE_FILE = "Template/ MySy_Emargement.html"
TEMPLATE_FILE = "Template/MySy_Emargement.html"
template = templateEnv.get_template(TEMPLATE_FILE)
# This data can come from database query
# envoie de l'emargement du matin
@ -1872,7 +1870,7 @@ def SendEmargementMail( diction):
"email": str(val_emarge['email']),
"class_title": str(local_class_title['title']),
"date": str(val_emarge['date']),
"session": "Matinée",
"session": str(val_emarge['sequence_start'])+" - "+str(val_emarge['sequence_end']),
"code_session":str(local_session_data['code_session']),
"mysyurl": str(myurl),
@ -1884,7 +1882,7 @@ def SendEmargementMail( diction):
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] : Emargement Matinée du "+str(val_emarge['date'])
msg['Subject'] = "[MySy Training Technology] : Emargement "+str(val_emarge['sequence_start'])+" - "+str(val_emarge['sequence_end'])
msg['To'] = str(val_emarge['email'])
smtpserver.ehlo()
@ -1894,6 +1892,7 @@ def SendEmargementMail( diction):
#smtpserver.close()
print(" Email matinée envoyé " + str(my_emarge_id))
"""
# envoie de l'emargement de l'apres midi
myurl = "http://127.0.0.1:5001/myclass/api/UserEmargementValidation/" + str(val_emarge['_id']) + "/2"
@ -1935,6 +1934,7 @@ def SendEmargementMail( diction):
smtpserver.close()
print(" Email Apres midi envoyé " + str(my_emarge_id))
"""
return True, "Email envoyé "

View File

@ -209,6 +209,177 @@ def CreateTableauEmargement(diction):
return False, "Impossible de créer le tableau d'emargement"
"""
23/11/2023 : Evolution en prenant les sequences.
Evolution de la fonction de création du tableau d'emargement.
Dans cette evolution, on plutot recuperer les sequence déjà créesq
"""
def CreateTableauEmargement_From_Sequence(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 = ['class_internal_url', 'session_id', 'token']
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'est pas autorisé, Creation partenaire annulée")
return False, "Impossible de créer la liste d'emargement. Toutes les informations fournies ne sont pas valables"
"""
Verification de la liste des champs obligatoires
"""
field_list_obligatoire = ['class_internal_url', 'session_id', '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 liste ")
return False, "Impossible de créer la liste d'emargement, Toutes les informations necessaires n'ont pas été fournies"
mydata = {}
my_token = ""
if ("token" in diction.keys()):
if diction['token']:
my_token = diction['token']
# Verifier la validité du token
retval = mycommon.check_partner_token_validity("", my_token)
if retval is False:
return "Err_Connexion", " La session de connexion n'est pas valide"
class_internal_url = ""
if ("class_internal_url" in diction.keys()):
if diction['class_internal_url']:
class_internal_url = diction['class_internal_url']
partner_recid = mycommon.get_parnter_recid_from_token(my_token)
if (partner_recid is False):
mycommon.myprint(str(inspect.stack()[0][3]) + " - Impossible de créer la liste d'emargement ")
return False, "Impossible de créer la liste d'emargement "
session_id = ""
if ("session_id" in diction.keys()):
if diction['session_id']:
mydata['session_id'] = diction['session_id']
session_id = diction['session_id']
"""
Recuperation des info de la session de formation
"""
date_du = ""
date_au = ""
ville = ""
code_postal = ""
adresse = ""
qry = {"_id":ObjectId(str(session_id)), "valide": "1", 'partner_owner_recid':str(partner_recid)}
session_formation_count = MYSY_GV.dbname['session_formation'].count_documents(qry)
if( session_formation_count <= 0 ):
mycommon.myprint(
str(inspect.stack()[0][3]) + " - Aucune session de formation valide ")
return False, "Aucune session de formation valide "
session_data = MYSY_GV.dbname['session_formation'].find_one({"_id":ObjectId(str(session_id)), "valide": "1"})
# Recuperation de la liste des sequences associées à la session
i = 0 # compteur de securité
# On vide la collection emargement pour la session = str(session_id)
local_myquery = {"session_id": str(session_id), 'partner_owner_recid':str(partner_recid)}
x = MYSY_GV.dbname['emargement'].delete_many(local_myquery)
mycommon.myprint(
str(inspect.stack()[0][
3]) + " - INFO : "+str(x.deleted_count)+" Documents supprimés de la collection : emargement : session = "+str(session_id) )
# Verification qu'il y a bien des séquences de formation pour cette session
session_sequence_count = MYSY_GV.dbname['session_formation_sequence'].count_documents({'session_id': str(session_id),
'locked': '0',
'valide': '1',
'partner_owner_recid': str(
partner_recid)})
if( session_sequence_count <= 0 ):
mycommon.myprint(
str(inspect.stack()[0][3]) + " - Cette session de formation n'a aucune séquence valide ")
return False, " Cette session de formation n'a aucune séquence valide "
#print("#### Liste Date = "+str(liste_date))
coll_emargement = MYSY_GV.dbname['emargement']
#Recuperation de la liste des participants dont l'inscription est validée
for tmp_val in MYSY_GV.dbname['inscription'].find({'session_id':str(session_id),
'class_internal_url':str(class_internal_url),
'status':'1',
'partner_owner_recid':str(partner_recid)} ):
my_local_data = {}
my_local_data['email'] = tmp_val['email']
my_local_data['nom'] = tmp_val['nom']
my_local_data['prenom'] = tmp_val['prenom']
my_local_data['session_id'] = tmp_val['session_id']
my_local_data['class_internal_url'] = tmp_val['class_internal_url']
my_local_data['date_update'] = str(datetime.now())
# Recuperation de liste des sequences
for session_sequence in MYSY_GV.dbname['session_formation_sequence'].find({'session_id':str(session_id),
'locked':'0',
'valide':'1',
'partner_owner_recid':str(partner_recid)} ):
query_key = {}
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['date'] = str(session_sequence['sequence_start'])[0:10]
query_key['sequence_start'] = str(session_sequence['sequence_start'])
query_key['sequence_end'] = str(session_sequence['sequence_end'])
new_my_local_data = {}
new_my_local_data['email'] = tmp_val['email']
new_my_local_data['nom'] = tmp_val['nom']
new_my_local_data['prenom'] = tmp_val['prenom']
new_my_local_data['session_id'] = tmp_val['session_id']
new_my_local_data['class_internal_url'] = tmp_val['class_internal_url']
new_my_local_data['date_update'] = str(datetime.now())
query_key['date'] = str(session_sequence['sequence_start'])[0:10]
new_my_local_data['is_present'] = False
new_my_local_data['matin'] = False
new_my_local_data['apresmidi'] = False
new_my_local_data['partner_owner_recid'] = str(str(partner_recid))
#print("### emargement insertion de : "+str(new_my_local_data))
local_ret_val = coll_emargement.find_one_and_update(
query_key,
{"$set": new_my_local_data},
upsert=True,
return_document=ReturnDocument.AFTER
)
return True, "ok"
except Exception as e:
exc_type, exc_obj, exc_tb = sys.exc_info()
mycommon.myprint(str(inspect.stack()[0][3]) + " -" + str(e) + " - ERRORRRR AT Line : " + str(exc_tb.tb_lineno))
return False, "Impossible de créer le tableau d'emargement"
"""
Cette fonction récupérer la liste d'emargement
"""
@ -271,7 +442,7 @@ def GetTableauEmargement(diction):
val_tmp = 1
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),]):
'class_internal_url':str(class_internal_url)}).sort([("date",pymongo.ASCENDING), ("sequence_start",pymongo.ASCENDING), ("sequence_end",pymongo.ASCENDING),]):
user = retval
user['id'] = str(val_tmp)
RetObject.append(mycommon.JSONEncoder().encode(user))
@ -294,7 +465,7 @@ def UpdateUserEmargementDate(diction):
# Ici on doit mettre tous les champs possible (obligatoire ou non) de la BDD dans la liste
# field_list.
'''
field_list = [ 'session_id', 'token', 'email', 'date', 'matin', 'apresmidi', 'class_internal_url']
field_list = [ 'session_id', 'token', 'email', 'date', 'matin', 'apresmidi', 'class_internal_url', 'is_present', '_id']
incom_keys = diction.keys()
for val in incom_keys:
if val not in field_list and val.startswith('my_') is False:
@ -305,7 +476,7 @@ def UpdateUserEmargementDate(diction):
"""
Verification de la liste des champs obligatoires
"""
field_list_obligatoire = [ 'session_id', 'token', 'email', 'date']
field_list_obligatoire = [ 'session_id', 'token', 'email', 'date', '_id']
for val in field_list_obligatoire:
if val not in diction:
@ -313,8 +484,6 @@ def UpdateUserEmargementDate(diction):
str(inspect.stack()[0][3]) + " - : La valeur '" + val + "' n'est pas presente dans liste ")
return False, "Impossible de créer la liste d'emargement, Toutes les informations necessaires n'ont pas été fournies"
mydata = {}
my_token = ""
if ("token" in diction.keys()):
if diction['token']:
@ -327,48 +496,30 @@ def UpdateUserEmargementDate(diction):
my_email = ""
if ("email" in diction.keys()):
if diction['email']:
my_email = diction['email']
mydata['email'] = diction['email']
is_present = ""
if ("is_present" in diction.keys()):
if diction['is_present']:
is_present = diction['is_present']
my_date = ""
if ("date" in diction.keys()):
if diction['date']:
my_date = diction['date']
mydata['date'] = diction['date']
my_matin = ""
if ("matin" in diction.keys()):
if diction['matin']:
my_matin = diction['matin']
my_apresmidi = ""
if ("apresmidi" in diction.keys()):
if diction['apresmidi']:
my_apresmidi = diction['apresmidi']
class_internal_url = ""
if ("class_internal_url" in diction.keys()):
if diction['class_internal_url']:
class_internal_url = diction['class_internal_url']
mydata['class_internal_url'] = class_internal_url
partner_recid = mycommon.get_parnter_recid_from_token(my_token)
if (partner_recid is False):
mycommon.myprint(str(inspect.stack()[0][3]) + " - Impossible de valider l'emargement ")
return False, "Impossible de valider l'emargement "
session_id = ""
if ("session_id" in diction.keys()):
if diction['session_id']:
mydata['session_id'] = diction['session_id']
session_id = diction['session_id']
mydata = {}
mydata['date_update'] = str(datetime.now())
if( my_matin == "1"):
if (is_present == "1"):
mydata['is_present'] = True
elif (is_present == "0"):
mydata['is_present'] = False
"""if( my_matin == "1"):
mydata['matin'] = True
elif (my_matin == "0"):
mydata['matin'] = False
@ -377,13 +528,16 @@ def UpdateUserEmargementDate(diction):
mydata['apresmidi'] = True
elif (my_apresmidi == "0"):
mydata['apresmidi'] = False
"""
query_key = {}
query_key['email'] = mydata['email']
query_key['session_id'] = mydata['session_id']
query_key['date'] = str(my_date)
query_key['class_internal_url'] = str(class_internal_url)
query_key['_id'] = ObjectId(str(diction['_id']))
query_key['partner_owner_recid'] = str(partner_recid)
print(" #### query_key = ", query_key)
print(" #### mydata = ", mydata)
coll_emargement = MYSY_GV.dbname['emargement']
local_ret_val = coll_emargement.find_one_and_update(
@ -393,7 +547,7 @@ def UpdateUserEmargementDate(diction):
return_document=ReturnDocument.AFTER
)
mycommon.myprint(str(inspect.stack()[0][3]) + " OK, la liste d'emargement de la session "+str( mydata['session_id'])+" a été mise à jour")
return True, "OK"
except Exception as e:
exc_type, exc_obj, exc_tb = sys.exc_info()
@ -468,7 +622,7 @@ def GerneratePDFEmargementList(diction):
print("### query_get_data = " + str(query_get_data))
tab_users = []
for val_tmp in coll_emargement.find(query_get_data).sort([("date", pymongo.ASCENDING)]):
for val_tmp in coll_emargement.find(query_get_data).sort([("date", pymongo.ASCENDING), ("sequence_start", pymongo.ASCENDING), ("sequence_end", pymongo.ASCENDING)]):
local_tmp = {}
local_tmp['email'] = val_tmp['email']
local_tmp['nom'] = val_tmp['nom']
@ -477,6 +631,11 @@ def GerneratePDFEmargementList(diction):
local_tmp['apresmidi'] = val_tmp['apresmidi']
local_tmp['date'] = val_tmp['date']
local_tmp['sequence_start'] = val_tmp['sequence_start']
local_tmp['sequence_end'] = val_tmp['sequence_end']
local_tmp['is_present'] = val_tmp['is_present']
tab_users.append(local_tmp)
#print(' ### tab_users = ' + str(tab_users))

20
main.py
View File

@ -1905,6 +1905,26 @@ def CreateTableauEmargement():
localStatus, message= emargement.CreateTableauEmargement(payload)
return jsonify(status=localStatus, message=message )
"""
Cette API Crée la liste d'emargement en partant des sequences déjà crée
23/11/2023 : Evolution en prenant les sequences.
Evolution de la fonction de création du tableau d'emargement.
Dans cette evolution, on plutot recuperer les sequence déjà créesq
"""
@app.route('/myclass/api/CreateTableauEmargement_From_Sequence/', methods=['POST','GET'])
@crossdomain(origin='*')
def CreateTableauEmargement_From_Sequence():
# On recupere le corps (payload) de la requete
payload = mycommon.strip_dictionary (request.form.to_dict())
print(" ### CreateTableauEmargement_From_Sequence : payload = ",str(payload))
localStatus, message= emargement.CreateTableauEmargement_From_Sequence(payload)
return jsonify(status=localStatus, message=message )
"""
API de recuperation du tableau d'emargement d'un session de formation
"""

View File

@ -2778,10 +2778,7 @@ def UserEmargementValidation(diction):
str(inspect.stack()[0][3]) + " - La valeur '" + val + "' n'est pas presente dans liste ")
return False, " Impossible de valider l'emargement"
"""
Si session == 1 => alors c'est l'emargement de la session du matin
Si session == 2 => alors c'est l'emargement de la session du apres midi
"""
value = la valeur du "_id" de la ligne concernée
"""
@ -2792,7 +2789,7 @@ def UserEmargementValidation(diction):
ret_val = coll_emargement.find_one_and_update({'_id': ObjectId(str( diction['value']))},
{"$set":
{"date_update": str(now),
'matin': True,
'is_present': True,
}
},
return_document=ReturnDocument.AFTER
@ -2800,17 +2797,20 @@ def UserEmargementValidation(diction):
print(ret_val)
elif (diction['session'] == "2"):
"""elif (diction['session'] == "2"):
print(" ### emargement l'apres midi")
ret_val = coll_emargement.find_one_and_update({'_id': ObjectId(str(diction['value']))},
{"$set":
{"date_update": str(now),
'apresmidi': True,
'is_present': True,
}
},
return_document=ReturnDocument.AFTER
)
print(ret_val)
"""
return True, " Emargement ok "