From f470cebfac41ab4b4230f1fd1ca708d4b113f560 Mon Sep 17 00:00:00 2001 From: fatima Date: Mon, 27 Apr 2026 14:27:07 +0200 Subject: [PATCH] =?UTF-8?q?Premi=C3=A8re=20groose=20modification?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .gitignore | 3 + SIRH/__pycache__/__init__.cpython-312.pyc | Bin 0 -> 131 bytes SIRH/__pycache__/settings.cpython-312.pyc | Bin 0 -> 3233 bytes SIRH/__pycache__/urls.cpython-312.pyc | Bin 0 -> 1922 bytes SIRH/__pycache__/views.cpython-312.pyc | Bin 0 -> 1794 bytes SIRH/__pycache__/wsgi.cpython-312.pyc | Bin 0 -> 612 bytes SIRH/settings.py | 24 +-- SIRH/templates/SIRH/parts/menu_principal.html | 14 ++ .../fonctions_utilitaire.cpython-312.pyc | Bin 0 -> 3141 bytes fonction_utilitaire/fonctions_utilitaire.py | 40 +++- .../__pycache__/__init__.cpython-312.pyc | Bin 0 -> 140 bytes .../__pycache__/admin.cpython-312.pyc | Bin 0 -> 184 bytes .../__pycache__/apps.cpython-312.pyc | Bin 0 -> 459 bytes .../__pycache__/forms.cpython-312.pyc | Bin 0 -> 1076 bytes .../__pycache__/models.cpython-312.pyc | Bin 0 -> 1905 bytes .../__pycache__/urls.cpython-312.pyc | Bin 0 -> 733 bytes .../__pycache__/views.cpython-312.pyc | Bin 0 -> 12073 bytes .../__pycache__/0001_initial.cpython-312.pyc | Bin 0 -> 1946 bytes .../__pycache__/__init__.cpython-312.pyc | Bin 0 -> 151 bytes .../static/gestion_conge/js/detail_conges.js | 6 +- .../gestion_conge/parts/modalDetailConge.html | 2 +- .../__pycache__/__init__.cpython-312.pyc | Bin 0 -> 142 bytes .../__pycache__/admin.cpython-312.pyc | Bin 0 -> 857 bytes .../__pycache__/forms.cpython-312.pyc | Bin 0 -> 3958 bytes .../__pycache__/models.cpython-312.pyc | Bin 0 -> 8040 bytes .../__pycache__/urls.cpython-312.pyc | Bin 0 -> 2304 bytes .../__pycache__/views.cpython-312.pyc | Bin 0 -> 27462 bytes .../__pycache__/0001_initial.cpython-312.pyc | Bin 0 -> 7179 bytes .../__pycache__/__init__.cpython-312.pyc | Bin 0 -> 153 bytes .../static/gestion_employe/js/index.js | 48 ++++- .../static/gestion_employe/js/mon_profil.js | 37 ++-- .../templates/gestion_employe/monprofil.html | 32 ++- .../parts/modalDetailEmploye.html | 13 +- .../gestion_employe/parts/modalDocument.html | 4 + .../tags_personnaliser.cpython-312.pyc | Bin 0 -> 1619 bytes gestion_employe/urls.py | 6 + gestion_employe/views.py | 193 +++++++++++------- .../__pycache__/__init__.cpython-312.pyc | Bin 0 -> 141 bytes .../__pycache__/admin.cpython-312.pyc | Bin 0 -> 549 bytes .../__pycache__/forms.cpython-312.pyc | Bin 0 -> 6555 bytes .../__pycache__/models.cpython-312.pyc | Bin 0 -> 10994 bytes .../__pycache__/urls.cpython-312.pyc | Bin 0 -> 3309 bytes .../__pycache__/views.cpython-312.pyc | Bin 0 -> 31316 bytes .../__pycache__/0001_initial.cpython-312.pyc | Bin 0 -> 7776 bytes .../__pycache__/__init__.cpython-312.pyc | Bin 0 -> 152 bytes .../js/enregistrement_bailleur.js | 30 ++- .../parts/creation_bailleur.html | 55 +++-- .../parts/modalDetailProjet.html | 7 +- gestion_projet/urls.py | 11 +- gestion_projet/views.py | 18 ++ .../__pycache__/__init__.cpython-312.pyc | Bin 0 -> 140 bytes .../__pycache__/admin.cpython-312.pyc | Bin 0 -> 184 bytes .../__pycache__/apps.cpython-312.pyc | Bin 0 -> 398 bytes .../__pycache__/forms.cpython-312.pyc | Bin 0 -> 2203 bytes .../__pycache__/models.cpython-312.pyc | Bin 0 -> 2355 bytes .../__pycache__/urls.cpython-312.pyc | Bin 0 -> 1273 bytes .../__pycache__/views.cpython-312.pyc | Bin 0 -> 11801 bytes .../__pycache__/0001_initial.cpython-312.pyc | Bin 0 -> 2412 bytes .../__pycache__/__init__.cpython-312.pyc | Bin 0 -> 151 bytes .../parts/modalCreationReservation.html | 4 +- .../parts/modalDetailResevation.html | 17 +- gestion_salle/views.py | 33 ++- 62 files changed, 437 insertions(+), 160 deletions(-) create mode 100644 .gitignore create mode 100644 SIRH/__pycache__/__init__.cpython-312.pyc create mode 100644 SIRH/__pycache__/settings.cpython-312.pyc create mode 100644 SIRH/__pycache__/urls.cpython-312.pyc create mode 100644 SIRH/__pycache__/views.cpython-312.pyc create mode 100644 SIRH/__pycache__/wsgi.cpython-312.pyc create mode 100644 fonction_utilitaire/__pycache__/fonctions_utilitaire.cpython-312.pyc create mode 100644 gestion_conge/__pycache__/__init__.cpython-312.pyc create mode 100644 gestion_conge/__pycache__/admin.cpython-312.pyc create mode 100644 gestion_conge/__pycache__/apps.cpython-312.pyc create mode 100644 gestion_conge/__pycache__/forms.cpython-312.pyc create mode 100644 gestion_conge/__pycache__/models.cpython-312.pyc create mode 100644 gestion_conge/__pycache__/urls.cpython-312.pyc create mode 100644 gestion_conge/__pycache__/views.cpython-312.pyc create mode 100644 gestion_conge/migrations/__pycache__/0001_initial.cpython-312.pyc create mode 100644 gestion_conge/migrations/__pycache__/__init__.cpython-312.pyc create mode 100644 gestion_employe/__pycache__/__init__.cpython-312.pyc create mode 100644 gestion_employe/__pycache__/admin.cpython-312.pyc create mode 100644 gestion_employe/__pycache__/forms.cpython-312.pyc create mode 100644 gestion_employe/__pycache__/models.cpython-312.pyc create mode 100644 gestion_employe/__pycache__/urls.cpython-312.pyc create mode 100644 gestion_employe/__pycache__/views.cpython-312.pyc create mode 100644 gestion_employe/migrations/__pycache__/0001_initial.cpython-312.pyc create mode 100644 gestion_employe/migrations/__pycache__/__init__.cpython-312.pyc create mode 100644 gestion_employe/templatetags/__pycache__/tags_personnaliser.cpython-312.pyc create mode 100644 gestion_projet/__pycache__/__init__.cpython-312.pyc create mode 100644 gestion_projet/__pycache__/admin.cpython-312.pyc create mode 100644 gestion_projet/__pycache__/forms.cpython-312.pyc create mode 100644 gestion_projet/__pycache__/models.cpython-312.pyc create mode 100644 gestion_projet/__pycache__/urls.cpython-312.pyc create mode 100644 gestion_projet/__pycache__/views.cpython-312.pyc create mode 100644 gestion_projet/migrations/__pycache__/0001_initial.cpython-312.pyc create mode 100644 gestion_projet/migrations/__pycache__/__init__.cpython-312.pyc create mode 100644 gestion_salle/__pycache__/__init__.cpython-312.pyc create mode 100644 gestion_salle/__pycache__/admin.cpython-312.pyc create mode 100644 gestion_salle/__pycache__/apps.cpython-312.pyc create mode 100644 gestion_salle/__pycache__/forms.cpython-312.pyc create mode 100644 gestion_salle/__pycache__/models.cpython-312.pyc create mode 100644 gestion_salle/__pycache__/urls.cpython-312.pyc create mode 100644 gestion_salle/__pycache__/views.cpython-312.pyc create mode 100644 gestion_salle/migrations/__pycache__/0001_initial.cpython-312.pyc create mode 100644 gestion_salle/migrations/__pycache__/__init__.cpython-312.pyc diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..10a233e --- /dev/null +++ b/.gitignore @@ -0,0 +1,3 @@ +db.sqlite3 +venv/* +media/* \ No newline at end of file diff --git a/SIRH/__pycache__/__init__.cpython-312.pyc b/SIRH/__pycache__/__init__.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..d7a38f5d7f115d3684dba539b68374b5c8b1ed2e GIT binary patch literal 131 zcmX@j%ge<81a}X-$OO@kK?FMZ%mNgd&QQsq$>_I|p@<2{`wUX^OG!T?KQ~oBEwLms zH&MShvnWG9*fYpOKR!M)FS8^*Uaz3?7l%!5eoARhs$CH)Pzxgv7lRldnHd=wiG{60oe|F)6A{z6mKF@-3RLNs!zv`E9-t-2a+(M?k>3cIoAHOSb{ zez^A@K415d{m3x22VX}M{m3H*kXH;MUyT++H46EEq{T1_h!KE;05d2gMo}2k`?s#K zIe(Rg{V0MM6nX9G@oF^kq9|A!`;k^?6#L!-p2pF*7)Nn5@w4nEUb}iW(d73og%&5! z6q*K`Q)tFHKXJ|*3SIMv2{bECqB(I2vYUqA47w?P08(IVAE8Z zH6vNo^rVoLO54enuI=NB$%aB(xQTVy#3;FUl)Q@^jTIR+lxET}W!>yc-c7a*u#xPW zTw@=w4?%kqEH*S9CzU1`Z^)*iHIwjX))jE4sQ4G)9f#_s*)o2aP9v>iust7x2r615 zjhksOm^QVRQZdqlaML~WW*sN1ZBSa1|6M-YF=*a_FZDZr-_|kE8$kBi7 z&J|KL@$ATE-CFOLL1`Me($?|H$|2hO%DngJk$!L_R~Drg^Ubx|;g?@5-PiBkUs~E< zeYAS;RegR%THKfGh9xhrl?lC^3R{VuCAOk9OG9?v#WZEmb?hgc%UPX$_O;0Ck#VUa}2Y zRk1Z`D4>TW!_ZjxNe0#ruuiQ7}5(0+0r)K)>Xqw_f42~ zFJX__J3rd@`%i3O#hsIoop&w3J?Zaw~3OL?WK zG}?_EZr05DrT%X|R=>9gJN+0h4Ltc+1BG@2>q_OS1#eYfsp`bNTi&qz@RfjlNRx06 z=-n{B9%A{^4U7~yO}x(Ay4m*))TxHqVtJdk z-WzZ$Vi@XuRy(M(O>8Qs@WI=JtEt^;X}ZZO=93E6t4fX4^co3mIPin}57tt5iC>c7 zLnKMWr5VKEf*W5|_H;M2nFJ)sP5^j*9UGc@fQhdK7g*CIfpt#c?U5rPf!`?cW$7vZ zJL1jo>$_Wo;c~g+b3P+&7lpDwqS=B_1`-fpP6ZOo6=9&H-BON(^4Ux#$3N#vJc*Qw z#j;J^C>Az}$Bu+}_BEwRf@MCxljF*~Kw{5@t*mV(m)+p(NhiS!SLW(ua47rSd?`4n+`h!)Q4tkg-cG2}DX{Vu&!vn_RfxEEV&TBk?!tgZ)weX(3(L z8aQ2rA#KQML(%JL`<}S?__M8}p8~&vVQj1TvAzx}_P?;kAK~n}X_|iL3elbqGZY>A z7d7+FM@3@a1^)c_ZFv4PJpU$q=WTfTG`##aym}g5?F70}Dq5mDp{|b#G9B;vc;Y*6 zhj|}}#9f_ecaCBbo#1;A55+=+JGzC`F>iWqcq#Lj}i9Vq(|r0t*2L*%?NDJB*Zi$Rso8I-zE|OVs#G zhdGaocY^2Pu}VzR{FY~8wPd(G1odCrc_+h3x!82y^ zmH(8v4OvI1skIX-ejfXEhdEFoB3AE#X DCesrJ literal 0 HcmV?d00001 diff --git a/SIRH/__pycache__/urls.cpython-312.pyc b/SIRH/__pycache__/urls.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..6a4d43bd51bfb47dd8536d4ba15431578439536c GIT binary patch literal 1922 zcmb7E&u<$=6rQzr?e#j2LlRmyB4I#H9iwDdR6;@#pay8wNI)Si67t2}c*piyyF1p* z7!q^h)}DIgU!bIa1QJIsL_s916mj4}Z?!@%y}+AUud<}61bf(h^Sy7r_ha7dPnC*= z;5q)`Pyg2fLVw6b`bYJv5qzTI)d}EH;bE zHUcv&HA`R@ykcO5793T_m~wD@ly(yT6oOC3c!i*95&H zDfRL596(=x9(`0x_m05XoZY?DSa83F(yY(7KEiDpb^Pv-xx%Lr?oftrZ*JYh14jF# zEo{rW(pQ!j~1u0x}iCRw%Z&Qm?O0 z>gv&utm4QG$-8xF*BjOcfy?>YHWcP%R9}<@6+OaaBDTsnP3IGn!3VYMpSZDM!t(a7J?}DFMzXaW@FEN@|^O3aSwf)KY=~{y5+!rL)<$%PckFS5YxzU0#i><`mx^?SLT+ZC3hv)<} z(X%B--W#U_XBxT=_gT-8{~2|&?ZNId^PP}-!+^ZUUIn^5X#O|6p5!%68|SK;{uCqa zwcpY5F?!<|;im7%Q6rTODy|JCzkwa3NpbQOCvO=sYaj4W<2&spZOA1Zl;7hdZPT~#wV`gSk z8f~K>Rl;y-Dh^3+IW`JM4jhqkL_!XZ)M}N|0zS02irjkQ%{rSnNL68^eKY&!&G&xh zd-KcSU>?DE{PQzsD1*>n;wK&Q(cgY4dQdhGC7GeZm{V1aTcZ^bQk_5=nfOwGt-{J3|-9QmqN_YBZTl!)eA=-i6G@riRC4up; zVaq#5UT#bO0Flb1C$amab0b2r9I56qAH_A>9FeCe_a&K6s*!q)7fD zyCZUjaa)O$wb%Q|rC6`_5h+V&dYJw4Kg6%S9-9xPm=TJUKKn|lw+GV7LAI}`f}Rh* z2m3sRF|+%C66~7T3Vfe@?94A=I zyW7-R5KQdBV0X&2EYjpB3KKU2*Wu2WA;I=k>IKY=1R+*GzBYFwRz1^kQ^CV{z+v;k z%`%~?PzuWHYMi443dT4b5S5{VU$H9kW5P__6E8i znMaj#8?}42hn2~_%H-B;r}BPF`=k8E{po|^@ZH&OXE!gl-r^hZ zix;}3vCWwW2bX%Q1gpAOsmrYbQdD+D6ZyP0B+73k)pcL2e= zoNDKgE{9Wa=(tJj-R=H90S5H3$Vl!?m#L_1@9HEf8j}f+n2vyq%QiVi=-tIRP@fl8 z!ywjBSIxIB-nn*AsI1R)3gc~coSub^S-lWf>?PA*3=9C^)cM>HPk+Lj9$AE2!0*|x zMnJh0a@J#)AX0qh^!bE?2^FY_VH+imk}zLtH7~G3mwZ4cU`xc$#z4GKBuRRLF7Khs WPtbdh(d6Iin4}+GQlz(%!~Xz^cdO|D literal 0 HcmV?d00001 diff --git a/SIRH/__pycache__/wsgi.cpython-312.pyc b/SIRH/__pycache__/wsgi.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..fded293043b114bc220fc9b012060640f0008341 GIT binary patch literal 612 zcmYjP&ubGw6rS0QP1%?zVtbT9yaaRyga|x6 zj)Rx|PM5@5B_bt>E=a%o{4vQ3J%-qZLD01XUgg?=A$A00QO%@eyAlX9gpo}1JqfoY zOhA$eE5tmdSO%O7hb+&fh?x~y4To;tBS(?x0*FwKEt@BZR&Ka3BoPvB5(5y7tj*0` zO1X|r$j3~jdZ{Va83jc*!aH=N_pPQJa;c{oC` +
+ {% if user.employe.photo %} + + {% else %} + + {% endif %} +
+ {{ user.username }} +
+
Mon profil diff --git a/fonction_utilitaire/__pycache__/fonctions_utilitaire.cpython-312.pyc b/fonction_utilitaire/__pycache__/fonctions_utilitaire.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..99904e8fd68af1793766e57ffd3edc214fc0f361 GIT binary patch literal 3141 zcmbtWO>7&-6`tkpa{0R=B}yhNS6ao26}k!K#4Xx1PElE=WTP(a$Z`@BRTpdSNM34x z)csLHfkIUvhZrbeRP{5}saZsSSv~Pw#QXHX3 z(E&O8_I+>O-@bV>e@!N12*&31FN}Xj5&AoQ>5fo`c=8({-bXspITKl2iQ_08GD8+$ z;u+1Gf+dzjMhj-xl1dVzMKfYWOHrW1rI;?2;(DZ%(4(cK9(xCsWId@T-r-7p)p$;R zOpWC@67dZSuQ@gbTAFrj-_?8|MIe_bFX~}iS1rvj;UzwYJ?yS(zTw!9M?k^j2%Rp_ zsRUD*gQ+{hK=AN?@-cAVM}C)&D&0VP9E2+3k(Ulxg9JPXZFi(A(sw0ve!F9_0?B-O zYc1`JiMpVRdicZ84df@f*#F?6m)dRV5* zIeb2dY}4GqSP%Ip+7v>y&?R(_FNc;;IkX@H#@F~twu>G<-wXXAC4kI&FF)%-P4G{4 zC6<4UkV_+vwjS_O?)Wa#MXQmjh36`ipkhyG%8KSGJ6k?jDLbx<%RaU+m~yf0VPnb0ZeDpE2Zm|l zHR_HJcCo9N*rQ%~PT-b-yc0l4+t|xfhrFN+Jda2g%-Ry3&+#r~7m>`WW*Xoe#H;EC zwFMNBnY)XIt*TY5xxoVSIPes06-;Wrj}00+R&2+*4RKi7+lHk&qri-zm@BzBl{m+n26mK))1=Pe>ohzK+`!h3;55=SkO{?~3^o1apruN7wt z>Qu3Kvv4&hw(}*?e1p>@OzQx9L}X8rY5Uk_c3gEmYF44+n^!0AI2N8A#udvc*E7aMZ%ll47$p(&Rea(Pe28?!A*-uT`9rRK=F-H~(qCr%xNP__{IQsh&y z1H?yTU&oLwVJBiP~AP%Z>rUXTCFF?_L6HG zGoKBQ{3ZOi(b+!*n_^RWX-|1+cXW1d_;Ovy?n}cDM_=5PUIb&U6RU@o4iYGn{VaR7 z{=!rvJJlLJ|D_}(!UsqY!~gm!jg-rrNBir?69dzyBE@p2R{#eg+9z4xeTMa2om=PO zFF^le@VBQA;9vpdn2!7b`Xj$CLJ#JbpM&y<>H_EyYa*-&10vY7fJq%J(!-(*dl|4; z2aETx1jBv^Sh9o3J*Zb;HDy$2B?*ypv(7gtZ@Apfb zo_R31-8pSIR7JU=B0+>xNE+Hh_i$6oF2*=`1}sfGHtZOS?L@kBS6OdzceZ-MYmtkN zO)Fdp&ccG{j}cL{PRqi!iW72cE*yeS$a7y5nh z6Bd79D^#!pb@JK~QFb?6!%%mOk#W0sX~utx?OtKj>F&k2TU8Nm5?_IEja}}Dw%C2 zPdAdM>xuErsme2Mu3+C;q07?6YrncUS5U7{ z&0Z-^&0o1zB#BFfi#O-hxvA^d3s*_{(#^R-L7ll$q(|ZW+|)cfdf12CLhj3;gnig= zA{W3@*d;%Ar-4WBtKN@cI^a2udxXXwp|g+B8TNaAfAB;d^|vyEb(C)Pr8g3-%n*=Y P2}4}?>vN-An5q2_5}t+E literal 0 HcmV?d00001 diff --git a/fonction_utilitaire/fonctions_utilitaire.py b/fonction_utilitaire/fonctions_utilitaire.py index 1ccdba0..de18744 100644 --- a/fonction_utilitaire/fonctions_utilitaire.py +++ b/fonction_utilitaire/fonctions_utilitaire.py @@ -1,7 +1,8 @@ from django.utils import timezone from gestion_employe.models import Contrat from gestion_conge.models import Conge - +from django.core.mail import send_mail +from gestion_salle.models import Reservation QUOTA_CONGE_ANNUEL = 30 NOMBRE_PAGINATION = 8 @@ -11,7 +12,6 @@ DUREE_FIN_CONTRAT = 90 def solde_conge(employe): """Fonction de calcul du solde de congé restant l'employé""" contrat = Contrat.objects.filter(employe=employe, statut='actif').order_by('-date_debut').first() - if contrat is None or not contrat.date_debut: return { "success": False, @@ -31,4 +31,38 @@ def solde_conge(employe): "success": True, "quota_annuel": QUOTA_CONGE_ANNUEL - jours_conges_valider, "nombre_jours_valide": jours_conges_valider - } \ No newline at end of file + } + +def envoyer_email(type_notification, utilisateur, contexte=None): + sujet = "" + message = "" + nom = f"{utilisateur.first_name} {utilisateur.last_name}" + + if type_notification == "reservation_creee": + sujet = "Confirmation de votre réservation" + message = f"Bonjour {nom}, votre réservation a été enregistrée." + + elif type_notification == "reservation_validee": + sujet = "Réservation validée" + message = f"Bonjour {nom}, votre réservation a été validée." + + elif type_notification == "reservation_refusee": + sujet = "Réservation refusée" + message = f"Bonjour {nom}, votre réservation a été refusée." + + elif type_notification == "reservation_annulee": + sujet = "Réservation annulée" + message = f"Bonjour {nom}, votre réservation a été annulée." + + elif type_notification == "lien_zoom": + sujet = "Lien Zoom ajouté" + message = f"Bonjour {nom}, un lien Zoom a été ajouté à votre réservation : {Reservation.lien_zoom}" + + send_mail( + sujet, + message, + "admin@tonsite.com", + [utilisateur.email], + fail_silently=False, + ) + diff --git a/gestion_conge/__pycache__/__init__.cpython-312.pyc b/gestion_conge/__pycache__/__init__.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..316317142a9483c5e857b76a575043cfe23c086f GIT binary patch literal 140 zcmX@j%ge<81a}X-$OO@kK?FMZ%mNgd&QQsq$>_I|p@<2{`wUX^OItr9KQ~oBEwLms zH&MShvnWG9J+-(bGe0jrIX^EwRX;vHGcU6wK3=b&@)w6qZhlH>PO4oID^M>Z5Ep|O NADI~$8H<>KEC8ILAvyp6 literal 0 HcmV?d00001 diff --git a/gestion_conge/__pycache__/admin.cpython-312.pyc b/gestion_conge/__pycache__/admin.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..fc5338f196aaa3f193ee759a98374d0b00622df6 GIT binary patch literal 184 zcmX@j%ge<81a}X-$aDhIk3k$5V1hC}3ji6@8B!Qh7;_kM8KW2(87i4HnO}mWH5qTQ zCZ^R5$YPn=NsaPFK8CU(^*@xI3GpY` zSs1HGomgN)3M`$l<1pai?mgeV^ZC7+W(UMsy?pRTk>4fxJFNy(M*=K>0!0CY$VCV= z7y;GhKy`+mb=Bu;Gs9|qN@AgMbC@I-apZA-qRJ|whEzKOEP#QFD7YF$u1+=AnCX^L z_D3wsc^nD3&(w^&1A0RuKep+$9mbRenSIXvVUfpIoCUNreI>yYsTo_XvW;;>LWXhK z!B|L&K;j<8w*?8BN}n>16hV%O7=*ogk|AqPP{}>l$Idhknd6b1hs4QvI(7a%|~ZotLk6~keMRPVL3Q?Gj^BVz5B~l-qiK6rI+32FH)RJ^OU?NQQf#D(7Ju9wmwU@ b1(m*K(z7oeA+&Ed`r^O#&(6KtQn3E_#ZP%6YqqF{O{?+waZ1d2im&d@K|UBxL{nS9elE z=nE*vq8^dnxFB6b5Wybuv4t@r5|KU0mn|712|YwanL|XSxRp6ReDdFrQ*Nmp&D6hv zVq&f~Lgq)`@R4>e44Sl_8m6cmDZNXAbP+`sCdiTqw&WzDBqGWi;?5wJ(osy6XA?K$ z!gISURukemE~8}vpYH_8zg!p5KCD+x#nZr#klvbrlXz6Nl%~jh4O^;&sMabbR;K`} zL6jBgt-1mE2>DOTzVy_;NHn6m_{1a0tjJcDWQpNo%jo3H{9*BLwv|a5JEqK)xHCh! zL7bS{gif_%o=JGa4Y&eqHV#&)9b0_|&$!VcUL4+8*${ZNF$cUb@3z z!ni6nsmHa3OFa@Xm=>PBFE0Bim=PIhkCQ8K{gq3aG>*9DIaAb&)=^JbqQfiI>CmUu zh7-HKQ;l3UU2W1RcEiAiHj5n?w8~6}D^Mkt6^EeL(Q^TFXs_?=yvqA-&TF5C&85q$ z)#d8Db6b_28_#x!t-YbKC3Us5T-toORotmO*&TYiH&|YH(4APEc%yHQZjasB9lZNp zR|brE{h){nBikd_4rHm{c&)J!;h&8PsF^A|14=)@fB>%BHVNyto$Rw=SWnC^0Mm~F zo9?v~XHd%qXpFb`mNJuORh#I?iF{R@#=^ k?4oc5lN-S$4rGk+J{sCb=YJ{%Y%HkV(qics5;O_?2f&N}hyVZp literal 0 HcmV?d00001 diff --git a/gestion_conge/__pycache__/models.cpython-312.pyc b/gestion_conge/__pycache__/models.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..3f9a896bd533cbc72a7e75caa5d46c6c08ef703a GIT binary patch literal 1905 zcma)6O=ufO6rR=Y>ThK!mK7ybjime#P@potnEp{WmF%R6>lES^Dk$5vW@O3TA7yqo zjZ6YM}Qw=`$Vu6a(X##;>nwyK$OHO^WYq_F0&=Hz>@6Gq# zym{}N{bgh%ieNn1{CE|IfjzGzq!3{W(kBahARA>kl^H8t& zKEpE(6A4E)qlc%)Um8!rvCWZjjZT4egey6LZn2vrx5eHLAp>3c%-=6N3n4 zVrV8NJa5f)EY-BWP&JG_*c@0xnA9{^cbH_lx()_;LD$UB=_rJ$9?%3tge3TLp6`DT z(<-`+mSFwwpe3*$G7$-zlGe zQ5dgV1{tpbFAQzmZqWMpBC$D1RF4(o{*x~@TP$W;#sVd(=f9lvXi^-uM`fBQ-^X;8)?mSMVSLYtgt)+g*t>+%$pN*f4ZfbUA`tex$zWeo?yRlPyGRnWU zGPMuBsBnUXRgX2Q%A%?Y3Aj1|Ii{*NTutYc11+Sg*s5~#{3jnytEJ1=-Y-pGr@Wyo zI%84NSTwJa7Uf-Lq0+_crHkch8s=JrQ)#9_bWGEr(-WStRM)6yWRe5CWU+(VdTe8{ z_bf{%n&~4>+|=|2?DI0!8-!}KT5sHN2}=!a;07gC4q=gba?9~O6~l5GHIxkxfI;Z%=DdkO^W%jQy-9^7i7xscEQrMFtsbG6{FO3rUm0B;J>%?>Y zaH5|)xmtWs>>tlQ4@rq&`_f(%CC}VX_eM{5Mo;gKPjyG%ZC~jpaw|7`iCia%?zvV|}UHsN7wHa!U{i{K^Tu2sYfeoxZ_S{{6mias&@{>t!` zBf4L-3Gn{6kT1e-`viK2PQnI%|28l7o+t>y?`Z4^di4pq@Lb9X*_D}lvtQ2sjX?DL F{{i=R)`b87 literal 0 HcmV?d00001 diff --git a/gestion_conge/__pycache__/urls.cpython-312.pyc b/gestion_conge/__pycache__/urls.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..c39278b79e997b88ef49414b744fdcdf3e7fe8d3 GIT binary patch literal 733 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 literal 0 HcmV?d00001 diff --git a/gestion_conge/migrations/__pycache__/0001_initial.cpython-312.pyc b/gestion_conge/migrations/__pycache__/0001_initial.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..939005564a881eaeb14fa156b49f090c33caad86 GIT binary patch literal 1946 zcma)7J#5=X6ecN&vSis79Y^w?EV(ey(y%SN1zMqX8aQ@jC#};sannW%LF-Nu9g4I` z%85LsK!%Rl>M>&iYv|}s4Ui>3mm?s6!U07CbZIsLPM1u*J4%V#I6!aUy`S&>+S?1C;-1BE~}SP1f*z^!v2@PGqB z7}#arI(D7yIN%e7P@R`UFDY|P7I3txl`YlLOvA=v)dWztiyaHLNgd`iF3{+ZMJ@<{ zF9d*4<_kfAgQ4A6uZd5C0HC_?Zu|@#4|os)Vk3MU^tB}c^fC1C8R$qOdd$DU^}iPv z`xkD2;YQBzH(2Ju5QsOVZcRw^;rDvw!MVoBF*!Y51bLnz6F%Sj1qr}6l0C@L|BW1D z$kASJK27SxH^zH>PB7&7yGS^=JN2$~ckm2Z<_y^f@5;agm~5op)~Fn5Om#CMogc0z zfQX#lGc-q2bsSnXjWWc72J%?AvL**{OszSl zQnaAzK!E%AEUl_qb>$AMRm*fG4FC^^x*^vf6VQO{q=tD{Q33F6k_Y5? z#EurMqCrcwiWP0Y2I;*F16WdPx`Ts8P1o^A4-{w?EK(!fUo{=Aq*$<2vx!Y;M^}wI z)&xC%xYL2dRa-1+PzSbr4)-Zct0*|C zDCDWA>5$MdMcJ>ZI>iz$+--FXz&%JxVH7oJTlDS0{j03aoAi;f=)K3WOImq_3_zZS zz!6%s4!K%UEuV~CGEE(-Mn|y??>Rmh&6^g~%Enh@Rz$F?8f6m;V23oG9*LGGyt;C8 zb!F``j+%RROA;Z8|p?)B%{idlu(5|LKbtgTs@-#i*UJMT3UvG7}+KOaCNxnta*;p65?Rj-UR6`{_I|p@<2{`wUX^%S=BbKQ~oBEwLms zH&MShvnWG9J+-(bGe0jrIX^EwRX;Z~y$C3opI59OAD@|*SrQ+wS5Wzj!zMRBr8Fni Xu80+A3?mR1gBTx~85tRin1L(+dvqnS literal 0 HcmV?d00001 diff --git a/gestion_conge/static/gestion_conge/js/detail_conges.js b/gestion_conge/static/gestion_conge/js/detail_conges.js index fd39b94..d7aff14 100644 --- a/gestion_conge/static/gestion_conge/js/detail_conges.js +++ b/gestion_conge/static/gestion_conge/js/detail_conges.js @@ -36,14 +36,12 @@ if(bouton_enregistrer_detail){ if(document.getElementById("validation_hierarchique_refuse")){ document.getElementById("validation_hierarchique_refuse").addEventListener('click', function(){ if(this.checked){ - alert("coucou"); document.getElementById("motif_refus_container").className="d-block form-group mt-3"; }else{ document.getElementById("motif_refus_container").className="d-none"; } }) } - if(document.getElementById("validation_hierarchique_refuse")){ document.getElementById("validation_hierarchique_refuse").addEventListener('click', function(){ if(this.checked){ @@ -67,9 +65,9 @@ if(document.getElementById("validation_hierarchique_valide")){ if(document.getElementById("validation_direction_valide")){ document.getElementById("validation_direction_valide").addEventListener('click', function(){ if(this.checked){ - document.getElementById("motif_refus_container").className="d-block form-group mt-3"; - }else{ document.getElementById("motif_refus_container").className="d-none"; + }else{ + document.getElementById("motif_refus_container").className="d-block form-group mt-3"; } }) } \ No newline at end of file diff --git a/gestion_conge/templates/gestion_conge/parts/modalDetailConge.html b/gestion_conge/templates/gestion_conge/parts/modalDetailConge.html index d3d3051..5c81ca0 100644 --- a/gestion_conge/templates/gestion_conge/parts/modalDetailConge.html +++ b/gestion_conge/templates/gestion_conge/parts/modalDetailConge.html @@ -65,7 +65,7 @@
Validation par le directeur
- +
diff --git a/gestion_employe/__pycache__/__init__.cpython-312.pyc b/gestion_employe/__pycache__/__init__.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..cc1b99e35fa40f54b16c97f47861da0c8d8cb7ec GIT binary patch literal 142 zcmX@j%ge<81a}X-$OO@kK?FMZ%mNgd&QQsq$>_I|p@<2{`wUX^OIJT5KQ~oBEwLms zH&MShvnWG9J+-(bGe0jrHMbxqzcN)nK0Y%qvm`!Vub}c5hfQvNN@-52T@fo#HzN=i PgBTx~85tRin1L(+_LL$k literal 0 HcmV?d00001 diff --git a/gestion_employe/__pycache__/admin.cpython-312.pyc b/gestion_employe/__pycache__/admin.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..10d005f794b23fe45e8d89bfd99039ec179b6961 GIT binary patch literal 857 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 literal 0 HcmV?d00001 diff --git a/gestion_employe/__pycache__/models.cpython-312.pyc b/gestion_employe/__pycache__/models.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..25334f8d9aef2cbbf061b98c1f68db620f806de3 GIT binary patch literal 8040 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 ZC)KWq6=)D65Ep|OADI~$8H<>KECAowCZYfU literal 0 HcmV?d00001 diff --git a/gestion_employe/static/gestion_employe/js/index.js b/gestion_employe/static/gestion_employe/js/index.js index 95eb1d8..0d04aaa 100644 --- a/gestion_employe/static/gestion_employe/js/index.js +++ b/gestion_employe/static/gestion_employe/js/index.js @@ -1,6 +1,7 @@ const $ = (element) => document.getElementById(element); const url_liste_employe = $("tableau_liste_employe").dataset.url; + const tableau_liste_employe = new Tabulator("#tableau_liste_employe", { columns: [ {"title": "Matricule", "field": "matricule"}, @@ -12,6 +13,8 @@ const tableau_liste_employe = new Tabulator("#tableau_liste_employe", { // ajaxURL: url_liste_employe, pagination: true, paginationSize: 10, + + }) fetch(url_liste_employe) @@ -44,6 +47,8 @@ tableau_liste_employe.on("rowClick", function (row, rowData) { document.getElementById('document-diplome').href = data.diplome; document.getElementById('document-diplome').textContent = data.diplome || "Aucun diplôme"; + document.getElementById('document-photo').href = data.photo; + document.getElementById('document-photo').textContent = data.photo || "Aucune photo"; document.getElementById('document-cv').href = data.CV; document.getElementById('document-cv').textContent = data.CV || "Aucun CV"; document.getElementById('document-rib').href = data.rib; @@ -123,6 +128,7 @@ tableau_liste_employe.on("rowClick", function (row, rowData) {
` }; + const supprimerButtons = document.getElementsByClassName("btn-supprimer-contrat"); Array.from(supprimerButtons).forEach(button => { @@ -144,8 +150,46 @@ tableau_liste_employe.on("rowClick", function (row, rowData) { location.reload(); }) }); - }) + }), + + document.addEventListener("click", function (e) { + if (e.target.closest(".btn-modifier-contrat")) { + + const button = e.target.closest(".btn-modifier-contrat"); + const parent = button.closest(".col-6"); + + const contratId = button.dataset.contratid; + + const data = { + type_contrat: parent.querySelector("select").value, + date_debut: parent.querySelectorAll("input")[1].value, + date_fin: parent.querySelectorAll("input")[2].value, + salaire_mensuel: parent.querySelectorAll("input")[3].value, + statut: parent.querySelectorAll("input")[4].value, + }; + + fetch(`/contrat/modifier/${contratId}/`, { + method: "POST", + headers: { + "Content-Type": "application/json", + "X-CSRFToken": document.querySelector('[name=csrfmiddlewaretoken]').value + }, + body: JSON.stringify(data) + }) + .then(response => response.json()) + .then(data => { + if (data.message) { + alert(data.message); + } else { + alert(data.error || "Erreur"); + } + }) + .catch(error => { + console.error("Erreur:", error); + }); + } + }); document.getElementById("affectation-nom-employe").textContent = data.employe || "Employé inconnu"; document.getElementById("affecter_employe_id").value = data.id; @@ -204,7 +248,7 @@ tableau_liste_employe.on("rowClick", function (row, rowData) { const modal = new bootstrap.Modal($("modalDetailEmploye")); modal.show(); }) - + $("enregistrerDetail").addEventListener("click", function() { const id_ = document.getElementById('detail-id').value; const fonction = document.getElementById('detail-fonction').value; diff --git a/gestion_employe/static/gestion_employe/js/mon_profil.js b/gestion_employe/static/gestion_employe/js/mon_profil.js index 64c77f9..186e5a4 100644 --- a/gestion_employe/static/gestion_employe/js/mon_profil.js +++ b/gestion_employe/static/gestion_employe/js/mon_profil.js @@ -16,27 +16,36 @@ const tableau_certificat = new Tabulator("#tableau-certificat", { ], ajaxURL: url_certificat, }) - const enregistrerProfil = $("enregistrerProfil"); + enregistrerProfil.addEventListener("click", (e) => { + const url = $("information-personnelles").dataset.url; const csrftoken = document.querySelector("[name='csrfmiddlewaretoken']").value; + + const formData = new FormData(); + + formData.append("nom", $("nom").value); + formData.append("prenom", $("prenom").value); + formData.append("email", $("email").value); + formData.append("telephone", $("telephone").value); + formData.append("adresse", $("adresse").value); + formData.append("sexe", $("sexe").value); + formData.append("date_naissance", $("date_naissance").value); + + const photoInput = $("photo"); + if (photoInput.files.length > 0) { + formData.append("photo", photoInput.files[0]); + } + fetch(url, { - method: 'POST', + method: "POST", headers: { - 'Content-Type': 'application/json', - 'X-CSRFToken': csrftoken + "X-CSRFToken": csrftoken }, - body: JSON.stringify({ - "nom": $("nom").value, - "prenom": $("prenom").value, - "email": $("email").value, - "telephone": $("telephone").value, - "adresse": $("adresse").value, - "sexe": $("sexe").value, - "date_naissance": $("date_naissance").value, - }) + body: formData }) .then(response => response.json()) .then(data => alert(data.message)) -}) \ No newline at end of file + .catch(error => console.error("Erreur:", error)); +}); \ No newline at end of file diff --git a/gestion_employe/templates/gestion_employe/monprofil.html b/gestion_employe/templates/gestion_employe/monprofil.html index 410fd7f..850837f 100644 --- a/gestion_employe/templates/gestion_employe/monprofil.html +++ b/gestion_employe/templates/gestion_employe/monprofil.html @@ -19,17 +19,14 @@ {% endfor %} {% endif %} - -{% if expiration_contrat %} - {% if contrat_nb_jours_restant %} +{% if not expiration_contrat %} +
+ Important : Les informations sur votre contrat n'ont pas été renseignées, veuillez contacter les ressources humaines. +
+{% elif contrat_nb_jours_restant %}
Important : Votre contrat de travail expire dans {{ contrat_nb_jours_restant }} jours, veuillez contacter les ressources humaines.
- {% endif %} -{% else %} -
- Important : Les informations sur votre contrat n'ont pas été renseignées, veuillez contacter les ressources humaines. -
{% endif %}
@@ -44,6 +41,13 @@
{% csrf_token %}
+
@@ -63,12 +67,13 @@
+ +
+
-
-
@@ -167,6 +172,13 @@ {% csrf_token %}
+
{% if employe.CV %} diff --git a/gestion_employe/templates/gestion_employe/parts/modalDetailEmploye.html b/gestion_employe/templates/gestion_employe/parts/modalDetailEmploye.html index 187ef49..e2db54f 100644 --- a/gestion_employe/templates/gestion_employe/parts/modalDetailEmploye.html +++ b/gestion_employe/templates/gestion_employe/parts/modalDetailEmploye.html @@ -88,22 +88,23 @@
-
+
G Liste des Contrats
{% if user|has_group:"ressource_humaine" %}
- -
+ +
{% endif %}
{% csrf_token %} -
+
+

diff --git a/gestion_employe/templates/gestion_employe/parts/modalDocument.html b/gestion_employe/templates/gestion_employe/parts/modalDocument.html index 4eeb124..c8aa90e 100644 --- a/gestion_employe/templates/gestion_employe/parts/modalDocument.html +++ b/gestion_employe/templates/gestion_employe/parts/modalDocument.html @@ -11,6 +11,10 @@
    +
  • + Photo : + +
  • Diplôme : diff --git a/gestion_employe/templatetags/__pycache__/tags_personnaliser.cpython-312.pyc b/gestion_employe/templatetags/__pycache__/tags_personnaliser.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..19f72ad7a62f1a3073e11dda840ca8a78b0359b6 GIT binary patch literal 1619 zcma)6L5tf)6rPb}uh!#D+HK>7ZkH%*!$y#`Pa&ZxrEb$+TK2Lf5MP8Mjcv)Yq|Qiq z9X25?g{G(8x;^f(CjAi&z7$Gf&6b*qE(CgMZ@YC1Wlwn{S+QAC=z!mR@4b0%-hA)L zKQ1km5Uiu`|8PE(5&B&y`I4q!@-=`xWTOVMu`PMHD>Wo6uMqahIkF3%qvvNz|8b@`cZT#AbT$47;y*T9Tnj1Vf$y81!-oS< zgP3U^4})^;ei#)@%{>KXb-f$O4x} zn&%7$+Hk+*nOci-ksb1A-iB#e!*Aho$QeftR0p-hjB94RquEZgIUF#!6TG1ban;hF zf)E`iYF>DXoi4o>_!KayH=ERo()z8uMEf&Nf)p$4@SP=9{Osnt; z#W%ZDmy=@Z=1H;XcoAhuk?uG=;<}V5F$cYr`VDcKi^po(>8)Bj=+asf80eZc?yz=k zO1L3f9rS4}r%p7nCWJ9J9h6nWezMp$xsfJkVpx~p$1j6;h>nY>{L)u9zq~mnYa_C@ z|KaToppnzt?&DqjqR-HlJ690eM(gtxmh(Kb{SCxqjP9Vm)I&S+9n{0R zvIT8fnR09xqCc4w-AP`vVX%#+;~Ta)n^41OMf8J&SZ&%gvM)tfnRtD&5ZrZPka;4v zXv7p@lKr5UC?Zi(z7JzSR#Dw}{--jyB^ zF%m0dvN|HG-`pROs|U)}fB!C|w)GKN{|n*5g%w+vUWwZtC zP{tM^Pddlxn+J%U7Y0GfsrnYg#vXl}t%E9NmT!ZAS}{J66s-JHM)>t3bm<6HpOV!_ tH?nsglC_8GQ@r@a#ZNDuND{s=k&*QBu|UTvl1iDqfHzb7i3BLU^cg>ul}i8s literal 0 HcmV?d00001 diff --git a/gestion_employe/urls.py b/gestion_employe/urls.py index 992dbd7..d9befdb 100644 --- a/gestion_employe/urls.py +++ b/gestion_employe/urls.py @@ -34,6 +34,12 @@ urlpatterns = [ views.suppression_contrat, name='supprimer-contrat' ), + + path( + "contrat/modifier/", + views.modifier_contrat, + name="modifier-contrat" + ), path( 'Affectation/affectation/', views.affecter_employe_projet, diff --git a/gestion_employe/views.py b/gestion_employe/views.py index 4740abf..56e78cf 100644 --- a/gestion_employe/views.py +++ b/gestion_employe/views.py @@ -1,12 +1,12 @@ import json -from datetime import timedelta, datetime +from datetime import date, timedelta, datetime from dateutil.relativedelta import relativedelta from django.utils import timezone from django.contrib import messages from django.contrib.auth.models import User from django.contrib.auth import authenticate -from django.shortcuts import render, redirect +from django.shortcuts import get_object_or_404, render, redirect from django.contrib.auth.decorators import login_required from django.http import JsonResponse @@ -124,8 +124,8 @@ def mon_profil(request): except Employe.DoesNotExist: messages.error(request, "Impossible d'acceder au menu 'Mon profil' car votre profil Utilisateur n'est lié à aucun profil Employé. Veuillez contacter l'Administrateur.") return redirect("gestion_conges:conge") - contrats = Contrat.objects.filter(employe=employe, statut='actif').first() + projets = Affectation.objects.filter( employe = employe, date_fin_daffectation__gte = timezone.now().date() @@ -140,6 +140,7 @@ def mon_profil(request): **model_to_dict(contrats), "type_contrat": dict(Contrat.TYPE_CONTRAT).get(contrats.type_contrat), "statut": dict(Contrat.STATUT_CONTRAT).get(contrats.statut), + # "salaire_mensuel": dict(Contrat.SALAIRR_MENSSUEL).get(contrats.salaire_mensuel), "fichier_contrat": contrats.fichier_contrat.url if contrats.fichier_contrat else "", } if contrats else []], 'projets': [ @@ -192,7 +193,8 @@ def modifier_employer(request): employe.telephone = data['telephone'] employe.adresse = data['adresse'] employe.sexe = data['sexe'] - + if request.FILES.get("photo"): + employe.photo = request.FILES["photo"] if data['date_naissance']: difference = relativedelta(timezone.now().date(), datetime.strptime(data['date_naissance'], "%Y-%m-%d").date()) if difference.years >= 18: @@ -201,18 +203,18 @@ def modifier_employer(request): return JsonResponse({"message": "Veuillez entrez une date de naissance correcte."}) employe.save() user.save() - return JsonResponse({"message": "Profil mis à jour avec succès."}) def enregistrement_document(request): - employe = Employe.objects.get(user__username=request.user) + employe = Employe.objects.get(user=request.user) if request.method == "POST": - employe.CV = request.FILES["cv"] if 'cv' in request.FILES else employe.CV - employe.diplome = request.FILES["diplome"] if 'diplome' in request.FILES else employe.diplome - employe.rib = request.FILES["rib"] if 'rib' in request.FILES else employe.rib - employe.casier_judiciaire = request.FILES["casier_judiciaire"] if 'casier_judiciaire' in request.FILES else employe.casier_judiciaire - messages.success(request, "Documents enregistrés avec succès.") + if request.FILES.get("photo"):employe.photo = request.FILES["photo"] + if "cv" in request.FILES:employe.CV = request.FILES["cv"] + if "diplome" in request.FILES: employe.diplome = request.FILES["diplome"] + if "rib" in request.FILES: employe.rib = request.FILES["rib"] + if "casier_judiciaire" in request.FILES:employe.casier_judiciaire = request.FILES["casier_judiciaire"] employe.save() + messages.success(request, "Documents enregistrés avec succès.") return redirect("gestion_employe:mon-profil") @@ -240,14 +242,25 @@ def suppression_affectation(request): return JsonResponse({"message": "Affectation supprimée avec succès."}) def creation_contrat(request): - """Vue pour permettre à un utilisateur de créer un contrat pour un employé""" + """Créer un contrat pour un employé (avec contrôle d'existence de contrat actif)""" + try: employe = Employe.objects.get(id=request.POST.get('employe_id')) except Employe.DoesNotExist: messages.error(request, "Employé non trouvé.") return redirect('employe-index') - + contrat_actif = Contrat.objects.filter( + employe=employe, + date_fin__gte=date.today() + ).exists() + if request.method == "POST": + if contrat_actif: + messages.error( + request, + "Impossible de créer un contrat : cet employé a déjà un contrat actif." + ) + return redirect('gestion_employe:index') form = ContratForm(request.POST, request.FILES) if form.is_valid(): contrat = form.save(commit=False) @@ -256,9 +269,13 @@ def creation_contrat(request): messages.success(request, "Contrat créé avec succès.") return redirect('gestion_employe:index') messages.error(request, "Formulaire non valide") + else: form = ContratForm(initial={'employe': employe}) - return render(request, 'gestion_employe/index.html', {'contrat_form': form}) + + return render(request, 'gestion_employe/index.html', { + 'contrat_form': form + }) @login_required def enregistrer_detail_employe(request): @@ -281,76 +298,106 @@ def enregistrer_detail_employe(request): @login_required def liste_employe(request): """ Vue pour retourner la liste de tous les employés """ + + employes = Employe.objects.exclude(user__first_name = '', user__last_name = '') data = [] for employe in employes: - if employe.user.first_name == ' ' and employe.user.last_name == ' ': - projets = [ - ", ".join([ - a.projet.nom_projet for a in Affectation.objects.filter( - employe=employe, - date_fin_daffectation__gte=timezone.now().date() - ) - ]) - ] - formations = [ - { - "titre": formation.titre, - "organisme": formation.organisme, - "description": formation.description, - "date_obtention": formation.date_obtention, - "date_fin": formation.date_fin, - "certificat": formation.certificat.url if formation.certificat else "", - } for formation in Formation.objects.filter(employe=employe) - ] - - contrats = [ - { - "numero_contrat": contrat.numero_contrat, - "type_contrat": contrat.type_contrat, - "date_debut": contrat.date_debut, - "date_fin": contrat.date_fin, - "salaire_mensuel": contrat.salaire_mensuel, - "statut": contrat.statut, - "fichier_contrat": contrat.fichier_contrat.url if contrat.fichier_contrat else "", - } for contrat in Contrat.objects.filter(employe=employe, statut='actif') - ] - - affectations = [ - {**model_to_dict(affectation), "projet": affectation.projet.nom_projet} - for affectation in Affectation.objects.filter( + projets = [ + ", ".join([ + a.projet.nom_projet for a in Affectation.objects.filter( employe=employe, date_fin_daffectation__gte=timezone.now().date() ) - ] + ]) + ] + formations = [ + { + "titre": formation.titre, + "organisme": formation.organisme, + "description": formation.description, + "date_obtention": formation.date_obtention, + "date_fin": formation.date_fin, + "certificat": formation.certificat.url if formation.certificat else "", + } for formation in Formation.objects.filter(employe=employe) + ] - data.append( - { - "id": employe.id, - "employe": f"{employe.user.first_name} {employe.user.last_name}", - "matricule": employe.matricule, - "email": employe.user.email, - "formations": formations, - "affectations": affectations, - "projet": projets, - "contrats": contrats, - "departement": employe.departement.nom if employe.departement else "", - "fonction": employe.fonction, - "date_embauche": employe.date_embauche, - "adresse": employe.adresse, - "telephone": employe.telephone, - "sexe": employe.sexe, - "CV": employe.CV.url if employe.CV else "", - "diplome": employe.diplome.url if employe.diplome else "", - "rib": employe.rib.url if employe.rib else "", - "photo": employe.photo.url if employe.photo else "", - "casier_judiciaire": employe.casier_judiciaire.url if employe.casier_judiciaire else "", - "date_naissance": employe.date_naissance, - } + contrats = [ + { + "numero_contrat": contrat.numero_contrat, + "type_contrat": contrat.type_contrat, + "date_debut": contrat.date_debut, + "date_fin": contrat.date_fin, + "salaire_mensuel": contrat.salaire_mensuel, + "statut": contrat.statut, + "fichier_contrat": contrat.fichier_contrat.url if contrat.fichier_contrat else "", + } for contrat in Contrat.objects.filter(employe=employe, statut='actif') + ] + + affectations = [ + {**model_to_dict(affectation), "projet": affectation.projet.nom_projet} + for affectation in Affectation.objects.filter( + employe=employe, + date_fin_daffectation__gte=timezone.now().date() ) + ] + + data.append( + { + "id": employe.id, + "employe": f"{employe.user.first_name} {employe.user.last_name}", + "matricule": employe.matricule, + "email": employe.user.email, + "formations": formations, + "affectations": affectations, + "projet": projets, + "contrats": contrats, + "departement": employe.departement.nom if employe.departement else "", + "fonction": employe.fonction, + "date_embauche": employe.date_embauche, + "adresse": employe.adresse, + "telephone": employe.telephone, + "sexe": employe.sexe, + "CV": employe.CV.url if employe.CV else "", + "diplome": employe.diplome.url if employe.diplome else "", + "rib": employe.rib.url if employe.rib else "", + "photo": employe.photo.url if employe.photo else "", + "casier_judiciaire": employe.casier_judiciaire.url if employe.casier_judiciaire else "", + "date_naissance": employe.date_naissance, + } + ) return JsonResponse({'success': True, 'data': data}, safe=False) + + +@login_required +def modifier_contrat(request): + + """vue pour la modification du contrat """ + + id_contrat = json.loads(request.body)['id'] + try: + contrat = Contrat.objects.get(numero_contrat = id_contrat) + except Contrat.DoesNotExist: + messages.error(request, "Contrat non trouvé.") + return JsonResponse({"message": "Contrat non trouvé."}, status=404) + + try: + data = json.loads(request.body) + id_contrat = data.get("id") + contrat = get_object_or_404(Contrat, id=id_contrat) + contrat.type_contrat = data.get("type_contrat") + contrat.date_debut = data.get("date_debut") + contrat.date_fin = data.get("date_fin") + contrat.salaire_mensuel = data.get("salaire_mensuel") + contrat.statut = data.get("statut") + contrat.save() + + return JsonResponse({"message": "Contrat modifié avec succès"}) + + except Exception as e: + return JsonResponse({"message": str(e)}, status=400) @login_required def ajouter_formation(request): """Vue pour permettre à un employé d'ajouter une formation à son profil""" diff --git a/gestion_projet/__pycache__/__init__.cpython-312.pyc b/gestion_projet/__pycache__/__init__.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..a02ff8303811cf3eab9fe655e3f3eedc7441e578 GIT binary patch literal 141 zcmX@j%ge<81a}X-$OO@kK?FMZ%mNgd&QQsq$>_I|p@<2{`wUX^OGiH=KQ~oBEwLms zH&MShvnWG9J+-(bGe0lBpeR2pwM0KYJ~J<~BtBlRpz;@oO>TZlX-=wL5i3wLBM=vZ O7$2D#85xV1fh+*bq#?rq literal 0 HcmV?d00001 diff --git a/gestion_projet/__pycache__/admin.cpython-312.pyc b/gestion_projet/__pycache__/admin.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..af6943cbecc6e6cf1f471237fdcb7241e7eba185 GIT binary patch literal 549 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 literal 0 HcmV?d00001 diff --git a/gestion_projet/__pycache__/models.cpython-312.pyc b/gestion_projet/__pycache__/models.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..877ce9e264747d70ea4a23a76f64b49e69c0aea6 GIT binary patch literal 10994 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 literal 0 HcmV?d00001 diff --git a/gestion_projet/__pycache__/urls.cpython-312.pyc b/gestion_projet/__pycache__/urls.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..a9d89350a425e5e741ea8377e64c778cd6a99903 GIT binary patch literal 3309 zcmZ{lK~LjW5XWso7L#BCge8!W5FiNz2&UUrr6RQb20iw`CGy4(Fp8bX&!NTYp*{B0 zV?RUH9{K@#?Wrf9){3-JrJh#3>}q@3Q^)Ul9Ovz;4~aeh-^{$3H_!f4*9!_}}LxJ?PSE^r&b zZArMYz-j~UBaL*;2A#fMKeJ0^PnQ^z3>)pp^-A~`dSXZ4cj!pmWjmjVL4>tLlPFHUU_3e?{ zAA6&F;!l-n-gYhWO^myyLxK}$WZ5@1@p?D5Yq|sC5Z5=ZY}dcc82YyL!U#5HY_P^d z8v~D+aVjGy;cbsgLE)uo4~JypQ4ohV^+_+a1kJ=BgY)Fv$n%y^!gxB5kvIk`*~efv zG1JL->=8=iC9!%~4I5nTWz?XWc$oL2i9g?oX*n_WGu;T*(*m)K-~eOX+>n9K8^N-2 zdt69RF_{P%h%+9J9tqa7gU;~+dKT$fqrrr2M6ia7LQ}Axz?hmESJd||XL*cZ*&O)x zgY6Ro{F7UX$=1wDph*GC^H;G9+Fcl;6#u657z_p&#uB zGMQGPDX3#q!?7vpnLX&G2ieEOrLX}{9pd|*Xb&#tN=)VfYB9ZJpTu1aDtx&qnhX<7 z$2U$-F+UF=D5C zNqW@Lu*z21$Kjlox%Ysb2!!~7#ixzTSwve^a_mq`Pv0y{db0XSdyuVQ92^%E_-iPQ zK&P{Vf=KF%8;rts+7VHyBs1R^1wOQ?nPRBKj;l-Ud^Y=zz9;ZHbm`B^dl&@e!?AHUa)@yQd+C@4 zwY@uI{_|qQ<8(fL{GeSyi{Lfz!aD-T_>)AxT2Pd?IaO6(E4#0i@?XW;ciOurN`5)g z3X!J&Sp16`y9E#{xRD=_nOFu&5eq1KJ`!>mwcLOs;#k>1D(n^B?ks?Z1vjc9d` z3o9(t3G>(wwSB>(!h~w5RU^HY4b@>nGt`=qzMmCZOgIj;<48Zq3N8j(Kd!ISeGb3&VWbV98otm=O~c9=&i)LN0= z=F8n;P2{2G1iswQGdYevE|4dmTh$TsI1RPaNN;65E}0mG=LEiSaPVQT^wD5h= IYr}l~2ag`2z5oCK literal 0 HcmV?d00001 diff --git a/gestion_projet/__pycache__/views.cpython-312.pyc b/gestion_projet/__pycache__/views.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..a00a3b8433735b1cd41c3e0fa175f6b0a81cd0eb GIT binary patch literal 31316 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 Ysn$d4cB>n2wxb?zZrH=GVW0H>0&+BRvH$=8 literal 0 HcmV?d00001 diff --git a/gestion_projet/migrations/__pycache__/0001_initial.cpython-312.pyc b/gestion_projet/migrations/__pycache__/0001_initial.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..bb11fee94c3d44065f02e98a98157abd72c3b24c GIT binary patch literal 7776 zcmcgxTTC0-8TR;w%`F~6Lb#htNKA-=NP-HW#+ZWb8ATA-2bv3md#` zcPnkH_HEyqN_~j>R1{04Po+;q;svQMXCzBwjZ}5jzLYoGO<(q*?SIaUjm?@(R@-i* zc+TZN|M}1N{g*StpX%zW9q{kZ+kY4Htq#ZENT=}6V>iB-hQ==($bp!IV~K&MGvQ3S zmRw2qlACcj9WxH(`qY8kf@_s(D=4s@FI?7h$+OOcJbR=wA99-2Nii<-swkxt)0>o# zkWgZlp!M5qcfJVJklh8k^O6%WORl(M$?bFqp4HmY1y&n5kqhRkRs$907{nkq@?^a) z+}7-}6ID^^h6>U?Wa26$NsAOXWNuswlTUR(KXsxHRCo9Mv%LZOBMV;)Cat&p2 z$En<@3i{lrF?*uK%9CGfWmB1zr@mIUxlFc&%C=OnpcS>DcGQvWEI~E+3hAyg>Fy)# z=qW`ZUX$%DoD^16=Ku6JgZ~Hg|WU0V`slQhThIzKJbLN z`!!g22VFUe1;`fQFTenUCbCywc&+{5M3YCZ@S&+Poc`DO<=T-uhtPD{&NWoBQWl&k zja790D2?EQv*3g80tWA8=Sp(M4Z5OohM7k`6RSlK)CMC50sPPBwjTrnv7AvqKep;R*UKZ6p@T1vaxvp#>;at_ zT{-60vLBW(b7XY>ADFpQn(e<^yi0eEyU|m$zQTyiK~0YPmYUZyp^r@ejl%tT(X5|{ zsp6Wb3K3aa6;#tHqG{7PI~8)9wY;WETuc^tRX}DY#skxy$rK6MX8i=}u{hgtfjJfsq^%qME9aVm$?2vJUNRz)*;>q~*4#vzT zODeX)r{Y3VNU2;@LvcaPwA;c$@L-M@YfYQA){{%i!kV^6ULs`jvv&-BG=kPuswSA0 zcQ)2EAgUe-G2kY_r4xKiP~;|%ftMtJ7>RLFRV<_HZM8^93n@j=$XkxB2~Z+qI~!(e zR8S-_#mR!ANSYiIxFjGci$WqHXkBClohQ~7MU)`O>}*&<3b5;@uHapURY);?S9y`F zmd(19l;k8i&Zk5rDTJIdF~Rg|De;LWm{l<;rGk^}As7w0WKt)ngiL5LJwg)n?ERax z-D!SZF&m~N7)l9K!h#T65oGvpx?qct8*E^em?)$G4Nj3_;HrZ1C41W*3KoWlC#HB+ zlgaTEvwFVRh8f?AM%BX!uG=jb1$QTSq<9g|PhIWK&IUcbHI!+zt+F7p?FxC|cq@`f z*dd3O;lkG7%|Epv~$9(O*CLC4{hsAS0Pog1SPo5zTcI zX;>4b37&XsOiGFn>5$|>oJzq0S|nvrvC6=4AW_-9Squ}HsVit9 zsuP*If&$u=X91*4px}r_C|#B-(j-Q_5KyOy+VV&%8fhIZhM*QKE_Rm$I&~Dfs*YCW zHMmY7xQA#gXf0G{dvIqX(@;>N*fFaNYUG>Nw3W$%JI{l_O=4#QN~#HyO~DsCv*Eghrjb@)rPM__jTmiuFu&MxT*iMHKVCt zZ|dK2@Al#)4yWW?lY#?ko;`(I`k(a~E&X~+|7Hwdf0%3GaNtp%?ZCmI=UyW?qz8vK z)$LyV{*zo##sMYIw&TvhXKP01px!x%-@cLSoX3HidA1d|pMQ48Xg{yFpWk{r*FK8_ z@8;PS+&1`Z+Grcp+XlBhc#hAtMR6dOXM6DJH=f@yPQRg_eq(EDTg6MM+-V61(s{NY z4~+k2+87wu2gbKA?xKB%Bg#xTUpgG;uR5W_PCD~!C+@oV{G`!!QSZ9AJ+b=)KY(-n zFxT}X9QYUxj(bL*j~YFrde7)Kk8dqtj)#>`m`S3hcZ#aH25Q21=*p(o7`mblUBUBD zazo^d`%Sft^)Efg{MGxxGCW&fg=Y|VUwGbUbYIZBFKoqjdvo14aUeor7$7hV=xqa= z7q=&OQLgPa4lGgz&JhOA=`H6rd$&h+7jrEOIB+}9HsR*bvy(=1NN)~py0?$-Ud%N| zaNyQ{jh9&G2kRQktULWVdlH{I`^;;cI;)>L`%j1CLWUf4#`UfX9`{_|Cyy0Zl01Ik zT5tmt&9~jqVHe%|E@xvsxKGzu{>^fA6od(#!vB$}=$MwE(d?l9aLpUJpH`ftr0zgf788xrWMCG>P z#b~b6@(u{}VG`)Wde<=E_0|VoFlWX4m^?Dxxhk-#`$iRX*!ik*bT`%A^SPkqegNP( z0^m8l)ebZKNXxaZ;lPJ^wk&EJx2N#k)m-;u97vSAEgpLhFR8gU4F}dJB?Cm`fZjT= zx%T_@->n;CGy2$!F&5FsBF5M~ee52NTM*tPs6BKp6A0Vl6v7qfKICl>WL^`E2WqaBfJXy( zzuv)iW4x?z;`r~T2P@UzEKn!kC zv~a^by-3izgH_I|p@<2{`wUX^%UnMrKQ~oBEwLms zH&MShvnWG9J+-(bGe0lBpeR2pwM0KRGrb5Xo1a&#A0MBYmst`YuUAm{i^C>2KczG$ Y)vkyYXbvL~7lRldnHd=wi
-
\ No newline at end of file +
diff --git a/gestion_projet/urls.py b/gestion_projet/urls.py index 6e3f087..06e898e 100644 --- a/gestion_projet/urls.py +++ b/gestion_projet/urls.py @@ -19,6 +19,12 @@ urlpatterns = [ views.creation_projet, name='creation-projet' ), + path( + 'bailleurs/', + views.liste_bailleur, + name='liste-bailleurs' + ), + path( 'projet/modifier//', views.modification_projet, @@ -84,6 +90,7 @@ urlpatterns = [ views.liste_activites_projet, name='liste-activites-projet' ), + # path( # 'projet/ajout-de-document/', # views.ajouter_document_projet, @@ -119,4 +126,6 @@ urlpatterns = [ views.mises_a_jour_projet, name='mises-a-jour-projet' ) -] \ No newline at end of file + +] + diff --git a/gestion_projet/views.py b/gestion_projet/views.py index 69bd619..80a4ba4 100644 --- a/gestion_projet/views.py +++ b/gestion_projet/views.py @@ -2,6 +2,7 @@ from datetime import date from decimal import Decimal, InvalidOperation from django.http import JsonResponse from django.shortcuts import redirect, render +from django.urls import reverse from django.utils import timezone from django.contrib import messages from django.contrib.auth.decorators import login_required @@ -143,6 +144,22 @@ def creation_bailleur(request): return JsonResponse({'success': True}) return JsonResponse({'success': False}) +@login_required +def liste_bailleur(request): + """ Vue pour retourner la liste de tous les bailleurs """ + bailleurs = Bailleur.objects.all().order_by('-id') + data = [] + for b in bailleurs: + data.append({ + "id": b.id, + "nom_organisme": b.nom_organisme, + "contact": b.contact, + "email": b.email, + "pays": b.pays, + }) + return JsonResponse(data, safe=False) + + @login_required def ajouter_financement_projet(request): """Ajoute un financement à un projet en vérifiant que le total ne dépasse pas 100%""" @@ -318,6 +335,7 @@ def activites_projet(request): } return render(request, 'gestion_projet/suivi_activite.html', context) + @login_required def ajouter_activite_projet(request): """Vue pour ajouter une activité à un projet spécifique via un formulaire""" diff --git a/gestion_salle/__pycache__/__init__.cpython-312.pyc b/gestion_salle/__pycache__/__init__.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..ea217540443684a374b9475d742a15a0bdd4670e GIT binary patch literal 140 zcmX@j%ge<81a}X-$OO@kK?FMZ%mNgd&QQsq$>_I|p@<2{`wUX^OItr9KQ~oBEwLms zH&MShvnWG9J+-(bGe0lBI58(DRX;vHGcU6wK3=b&@)w6qZhlH>PO4oID^M>Z5Ep|O NADI~$8H<>KEC8LOAwK{B literal 0 HcmV?d00001 diff --git a/gestion_salle/__pycache__/admin.cpython-312.pyc b/gestion_salle/__pycache__/admin.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..e59353e476111c0761d6150189b252100e27c9de GIT binary patch literal 184 zcmX@j%ge<81a}X-$aDhIk3k$5V1hC}3ji6@8B!Qh7;_kM8KW2(87i4HnO}mWH5qTQ zCZ^OA8;XgWEj6%hIuk9!=XIwxT{#WC0vPWDr^mL%XzmyE-0nITcy@ zK;xJjf8|A{Mx-u|e5dLXlG20|QuPQ)GB%4f?-TMoqjB4Dbbf0xU!4E| literal 0 HcmV?d00001 diff --git a/gestion_salle/__pycache__/forms.cpython-312.pyc b/gestion_salle/__pycache__/forms.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..d0dd40a92cbf41fb321103ad43d38391f142b1f9 GIT binary patch literal 2203 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 literal 0 HcmV?d00001 diff --git a/gestion_salle/__pycache__/urls.cpython-312.pyc b/gestion_salle/__pycache__/urls.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..f47b22316c0e79e25f5af8b0c9fe3604efe84779 GIT binary patch literal 1273 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 Xu80+A3?mR1gBTx~85tRin1L(+e61z6 literal 0 HcmV?d00001 diff --git a/gestion_salle/templates/gestion_salle/parts/modalCreationReservation.html b/gestion_salle/templates/gestion_salle/parts/modalCreationReservation.html index 0db15f8..c49142e 100644 --- a/gestion_salle/templates/gestion_salle/parts/modalCreationReservation.html +++ b/gestion_salle/templates/gestion_salle/parts/modalCreationReservation.html @@ -20,4 +20,6 @@
-
\ No newline at end of file + + + diff --git a/gestion_salle/templates/gestion_salle/parts/modalDetailResevation.html b/gestion_salle/templates/gestion_salle/parts/modalDetailResevation.html index fb84ee8..27d7d1f 100644 --- a/gestion_salle/templates/gestion_salle/parts/modalDetailResevation.html +++ b/gestion_salle/templates/gestion_salle/parts/modalDetailResevation.html @@ -21,8 +21,12 @@
- - + + +
+
+ +
@@ -48,10 +52,6 @@
-
- - -
{% if appartient_au_departement_informatique %} @@ -59,8 +59,9 @@ {% if appartient_direction and reservation.statut == "en_attente" %} {% endif %} + - {% if appartient_direction %} + {% if appartient_direction and reservation.statut == "en_attente" %} {% endif %}
@@ -68,4 +69,4 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/gestion_salle/views.py b/gestion_salle/views.py index de589cf..2f8aeb9 100644 --- a/gestion_salle/views.py +++ b/gestion_salle/views.py @@ -16,8 +16,7 @@ def index(request:HttpRequest): employe = Employe.objects.get(user=request.user) except Employe.DoesNotExist: messages.error(request, "Impossible d'accéder au menu 'Reservation de salle' car votre profil Utilisateur n'est lié à aucun profil Employe. Veuillez contacter l'administrateur.") - return redirect('gestion_conges:conge') - + return redirect('gestion_conges:conge') if request.method == "POST": form = ReservationForm(request.POST) if form.is_valid(): @@ -29,7 +28,7 @@ def index(request:HttpRequest): motif_reservation = form.cleaned_data.get('motif_reservation') besoin_zoom = form.cleaned_data.get('besoin_zoom') besoin_ordi = form.cleaned_data.get('besoin_ordi') - + while date_debut <= date_fin : reservation = Reservation( employe = employe, @@ -42,12 +41,24 @@ def index(request:HttpRequest): besoin_ordi = besoin_ordi, motif_reservation=motif_reservation, ) - reservation.save() - date_debut = date_debut + timedelta(days=1) - + if heure_fin <= heure_debut: + messages.error( + request, + "Erreur : l'heure de fin ne peut pas être inférieure ou égale à l'heure de début." + ) + return redirect('gestion_salle:reservation-salle') + first_name = (employe.user.first_name or "").strip() + last_name = (employe.user.last_name or "").strip() + if not first_name or not last_name: + messages.error( + request, + "Vous devez renseigner un nom et prénom valides avant de faire une réservation." + ) + return redirect('gestion_salle:reservation-salle') + reservation.save() + date_debut = date_debut + timedelta(days=1) messages.success(request, "Réservation(s) créées avec succès.") return redirect('gestion_salle:reservation-salle') - formulaire_reservation = ReservationForm() departement = Employe.objects.get(user__username=request.user).departement appartient_direction = 'direction' in request.user.groups.values_list('name', flat=True) @@ -86,7 +97,6 @@ def liste_reservation(request:HttpRequest): "end": reservation.heure_fin, "color": color, }) - return JsonResponse(liste_reservation, safe=False) @login_required @@ -105,21 +115,22 @@ def liste_reservation_attente(request): def detail_reservation(request:HttpRequest, reservation_id:int): reservation = Reservation.objects.get(id=reservation_id) employe = reservation.employe.user + reservation_json = { + 'id_reservation': reservation_id, 'employe': f"{employe.first_name} {employe.last_name}", 'salle': reservation.salle, 'statut': reservation.statut, - 'date_evenement': reservation.date_debut.strftime('%Y-%m-%d'), + 'date_debut': reservation.date_debut.strftime('%Y-%m-%d'), + 'date_fin': reservation.date_fin.strftime('%Y-%m-%d'), 'heure_debut': reservation.heure_debut.strftime('%H:%M'), 'heure_fin': reservation.heure_fin.strftime('%H:%M'), 'motif_reservation': reservation.motif_reservation, 'besoin_zoom': reservation.besoin_zoom, 'besoin_ordinateur': reservation.besoin_ordi, 'lien_zoom': reservation.lien_zoom or '', - 'motif_refus': reservation.motif_refus or '', } - return JsonResponse(reservation_json, safe=True) @login_required