From 61c71b1a6acfde8aae28dce2e5984d964a03d40c Mon Sep 17 00:00:00 2001 From: emile Date: Wed, 20 Mar 2024 23:30:31 +0200 Subject: [PATCH] Hello --- .DS_Store | Bin 6148 -> 6148 bytes osinaweb/.DS_Store | Bin 8196 -> 8196 bytes .../billing/__pycache__/tasks.cpython-310.pyc | Bin 0 -> 878 bytes osinaweb/celerybeat-schedule.db | Bin 0 -> 16384 bytes osinaweb/db.sqlite3 | Bin 909312 -> 929792 bytes osinaweb/dump.rdb | Bin 0 -> 89 bytes osinaweb/osinacore/.DS_Store | Bin 10244 -> 10244 bytes .../__pycache__/admin.cpython-310.pyc | Bin 1412 -> 1438 bytes .../__pycache__/models.cpython-310.pyc | Bin 11158 -> 11458 bytes .../__pycache__/tasks.cpython-310.pyc | Bin 0 -> 920 bytes .../__pycache__/urls.cpython-310.pyc | Bin 3260 -> 3260 bytes .../__pycache__/views.cpython-310.pyc | Bin 10537 -> 10537 bytes osinaweb/osinacore/admin.py | 1 + .../osinacore/migrations/0062_connection.py | 25 +++++++++++++++ .../migrations/0063_alter_connection_date.py | 18 +++++++++++ .../0062_connection.cpython-310.pyc | Bin 0 -> 1078 bytes ...0063_alter_connection_date.cpython-310.pyc | Bin 0 -> 637 bytes osinaweb/osinacore/models.py | 11 +++++++ osinaweb/osinacore/tasks.py | 24 +++++++++++++++ osinaweb/osinacore/templates/.DS_Store | Bin 10244 -> 10244 bytes osinaweb/osinacore/views.py | 4 ++- .../__pycache__/celery.cpython-310.pyc | Bin 0 -> 806 bytes .../__pycache__/middleware.cpython-310.pyc | Bin 0 -> 1103 bytes .../__pycache__/settings.cpython-310.pyc | Bin 2687 -> 2786 bytes osinaweb/osinaweb/celery.py | 23 ++++++++++++++ osinaweb/osinaweb/middleware.py | 29 ++++++++++++++++++ osinaweb/osinaweb/settings.py | 5 +++ 27 files changed, 139 insertions(+), 1 deletion(-) create mode 100644 osinaweb/billing/__pycache__/tasks.cpython-310.pyc create mode 100644 osinaweb/celerybeat-schedule.db create mode 100644 osinaweb/dump.rdb create mode 100644 osinaweb/osinacore/__pycache__/tasks.cpython-310.pyc create mode 100644 osinaweb/osinacore/migrations/0062_connection.py create mode 100644 osinaweb/osinacore/migrations/0063_alter_connection_date.py create mode 100644 osinaweb/osinacore/migrations/__pycache__/0062_connection.cpython-310.pyc create mode 100644 osinaweb/osinacore/migrations/__pycache__/0063_alter_connection_date.cpython-310.pyc create mode 100644 osinaweb/osinacore/tasks.py create mode 100644 osinaweb/osinaweb/__pycache__/celery.cpython-310.pyc create mode 100644 osinaweb/osinaweb/__pycache__/middleware.cpython-310.pyc create mode 100644 osinaweb/osinaweb/celery.py create mode 100644 osinaweb/osinaweb/middleware.py diff --git a/.DS_Store b/.DS_Store index bb919ea2f3e8101c5b4b9c542fd144924d2b4ee1..ed253b7baee08de6485ab4025c4dba6d2a78ef95 100644 GIT binary patch delta 20 bcmZoMXffE}!OCuAX`rKEWVG3zb*m5nJWK_K delta 20 bcmZoMXffE}!OCuIXsM%MXt~*+b*m5nJbeX@ diff --git a/osinaweb/.DS_Store b/osinaweb/.DS_Store index ccb02c8a7b8096aed074f19eae59431d7705f68e..477d3a9ca057790800866f6b1bdcec496cd96081 100644 GIT binary patch delta 20 bcmZp1XmQwZK#1MQ(m+SS$Y}F%AzNMmM_dLo delta 20 bcmZp1XmQwZK#1Mg&{9Xi&~o!}AzNMmM~wzM diff --git a/osinaweb/billing/__pycache__/tasks.cpython-310.pyc b/osinaweb/billing/__pycache__/tasks.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..f39edd2e250ccb3f40d51c88fb27c1f1366455eb GIT binary patch literal 878 zcmZuv&2AGh5VpO)X_7Vv1cC$f0#cCZ-Z)hVsXd}{NV!CU)n+|Sck5jj+i8_*BO$@H z;uVr3FT(>^;>4*>fK&;IakhmXu;tM=yEC7^8ISDuHwdmD->>1TN61g-++FyMyvCz< z(Qv}4AQc@`>M#?m^2Xj8d%~}Rae&z8fd~%?P#*H=3;9gP5syb?*ttRmGNiVvk23{4 zHJLs^H#S8D7qSM#9fvsxlU>m^m_E;4+U*Jugn0JwXobd*C0&svTag7ZUg?(sr?}ZA zThNB?llRXStYKxijJUU=%NXOl##1jFuk1ABgd!ql10%X+kNfus4=(8gvhYnGxi%Y@ zyVdwSyu>m;4miO=qJzUBvtgE-;tXs@K|WKesHYd57kmaO&kS5WMrl}&&$GE6dN$Ia z&Wao`tCF+Y*!VVbI8d&|)~n^Y3pZe+(M@n9Cne-Y+wiCm29({%v2#;MH6Vjj98@}) z+u*2B+NeI#DBp2y{gssF^IYJqm8{J%^6ahiZI~;-n^e!K3~XQ|>a-8riqe1CH>$Pj zI@+$tv`JeDwpYV>dRxRdqFlk(ACh;Nq7$eJ0U$&%hh!i0iIJztC=*4s{U$qg&RboW zTvmzHMV%!`wFbP*>Zxo$p2H-W6i87|6E`S&=X7qLwz_XL==4ac|EP^nihhKq#|AWJ z1GdTTv(RJIr;LWb*(d*(+Q#1p!x%dO0@PeF^lh&duro7-(CxFt?nT^Cww=XB;&keD e`nu#h=82<-cQIln;FTL+?fToJZpW0dP5K8}C;BJ= literal 0 HcmV?d00001 diff --git a/osinaweb/celerybeat-schedule.db b/osinaweb/celerybeat-schedule.db new file mode 100644 index 0000000000000000000000000000000000000000..939508deb66c6447f46a1ba0b5b72e860594363b GIT binary patch literal 16384 zcmeI%zi-n(6bJA#NgKD&xC2F0>c&!#VpZbDKTt8CiUsJ>#j>3je5!kn>~lpcMe0;_ zxB;oxf1zSwW<&f9-5C%I1OGw`?@|{w(y3C=_oVYZ-w(g%kF!P0F2zEKTSBzYgjnQI z+!4a#!FAy`0k4lITFto1W81|iYV@5)*W4c0Z@l^AQg1vh5<&n15P$##AOHafKmY;| zfB*!hM!**r!O!4Z@HIFKJ_nzI)9(B3X?JSMN1+ga00bZa0SG_<0uX=z1R!udfrIu@ zSnD(*6(>3M585Z4=Adb9zFD`S-sicwtGSt{;p6a`4Wnq6%1Rb0ig@{B^Z)C}uA2K5 z>0U7yf^EpshZWliTT=~(NM zOEms|p-8Gh!QmE%FI>p;b5X5^GTqL}9@e5l+?6%wOKswRG$iC_16KNIYN00bZa v0SG_<0uX=z1Rwwb2tZ((1z{}fB*y_009U<00Izz00bcLzYF{ZHhHqX literal 0 HcmV?d00001 diff --git a/osinaweb/db.sqlite3 b/osinaweb/db.sqlite3 index 05c51d67a994fe8a28b8148be7cc45e52755ec22..cdee30b2afcca7c191689ffbe0fd73dc9a279b6e 100644 GIT binary patch delta 12438 zcmcIqdvqMtd7s&xoyYFZj9#`RKcv;el4WUE^M0&Y+p;kjV{9YGHsFUWTY@MU+1L)y z7CI6v21*OW!t5bUXgCq!G;L^7hb|B|xKK_G27*x_kTd}k3wn4YF*z-1N@)7c-qqgK z`VJ@mL^}F@tKHxC-8zB_Zj+3}P1_!;NE1vTw2Q51C+{)#{J-Cyd_LhUboXZKWd zxFdFUl1r?o&mONHza`caZ=rhlv5^}G2Zz5fG$vk7H8rdYoAmxeqhmvR_a7V?+`E5l zY-I1@(fwn4CqM1}1ASuh)1Liw+vIi0_4Jkr0%2dn!KTRC!L&pwYQtU zDGEa;V@D=AMGwV}98W9jVvP+GUzv1s{Y|6qS1f1H=TO*2d#vxC{nY+}|i7c$Ek zhtZfGrXzpP3?s&J&acDY&Hd-ov|J4yXCh%CL|2ROG8wx)$DO3F48?ATq1$4O^+|?m zZYiY#&p7|k3-r~@0zrP!AM~vJiTtsAPJUmWk>8Zxkf-Gr^G&De$7B{hd@!55WBM%` z{zC8Q^cS`4S+?mLwtn^#yob+C9_nAm4ci>Ef&);(ko^IBl6{i> zXZ9c1DfX-E1MI!*o$Lhr=jK4PmcvCPRA= z3?bN!U=YDB1UnJzK(HObRS2#`a0P;G2(}{Fg5YxqHX|57a5?Mw>I!W_|87LE0l{Sm z)+4wS!8!z&AXtmwVgwf9j{eOcxBx*Pf;0jbfrG$C zU?DIO7zlI(8Uhu8f}j^c3PBRUgW-G7zugFyA?QM|6hS9~4g^aOv?FLk(2Af1K>|TD zf+hru5ulO|E%g8MlA#6Y-9`ir23@GMVfa}ULZ ztQ2eWmylR%!M5ZTQF!%W*ruj(+_=!ZDf*4*8evA55{89#eukfd0&VAJxG8R!YiDPm zT87#7$V_A^G8}1VW|%2vm}w8sgr~y8;r7r>Xeu-uYNu!DDSDW0r)H?B$sr}>WwJ?u zs&;9S7W#E%b!ml8?BDYRSgR9Db)_qu)D+D~Dmq|7Q_`lA*4310xSFP9vOU;eCHbp? z{*I$~S|;0#18AfGT5tf}Rx{aU*k334>%sntr+7Y<;M0vLe-Y|8@wrP$vj`J2K1 zp04ScY$pz2kpftO0W8;nQ_z9^ZIZto=Xj00v2fMz9D?OK~&VR_sp_p%ElP&ooR;hY7Uc03;C_!6Gyq%gAIC*qEW-XI z5gJ4hdWD5VbNwS&hy##BXatK;vou&o7GQsp2n~`5J+zW(5FwLoECn!0A~b_VsJbdt zQ3LiTiO?j7&?_#bD#$pKt;YdKA~b_VsA`In$t5y1pyR3zTfroBcZ~d@;mLzwE8Y|$u~XDtTsRb>o~Q22!yC_4hx;km zb)EwzJ)b%U_mWrdYnu>Qsy{^06}O94T2)f2?Z6^So!Yr_g7;bdOa%)n(McJKJF{N(el3cYEt)-Pa zw#TFJ7t3#t$NzqEz96oloEqbeNicrn{{iR*KqFDOi z(7wYX2g_O=gTq6IN6HQd(yl{7%#;Evp6%K zmA?s(un*_BuZhp{u!(+!eS&=$cEc}62In($cPM$oDD-3YmhS4Q6AcXA8%hq3`1vUR z;CtwUy`LW%yJpS@Pt9ZKu26Dlc(|PY3+z~ z&62lt;(`c8ck7iiSUohB@F$hPlj@o118T2*{;Yg5n(7>S8qv?2t4~L7CUhLWW5NY~ zms)WMJ{bv3d>}OBnr8&Q#@{3@-zE(PW+L$m@85zm&cvl#E-;9xu1NKSui=yR!<(_lDUmf3(+lyN3R=6Y}m4X zeb+?GtrAzi%?wTSkB$wG+(ZgI_{Bp|7o)?2x@OozhP{VGqTb4>|Hw3YCBdHO)tcD2 zA<;_mZA~m~EsoLJb?dxaMXug7L$_UecxcbQ5t0MxJ?ib%18e$oπX`y)~i#VN?2 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 NOs)}(L6?eW0s!^nAcX(` delta 72 zcmZn(XbG6$&nUk!U^hRb{AM13Q%swggwq%&&k#AvVQgrrqhM%hIQfB~!{();Nn8^f PVm7lY{9-|u+06t1Os*G6 diff --git a/osinaweb/osinacore/__pycache__/admin.cpython-310.pyc b/osinaweb/osinacore/__pycache__/admin.cpython-310.pyc index 91fda7cc0ef71264a110f32f0d271b299a532bc7..e78d25ac30ddba23a85e48bbe197813bbcdae7a1 100644 GIT binary patch delta 75 zcmZqSp2y9b&&$ij00hC-zf*5dP-%1)t%hH$^rn>YZK7` delta 52 zcmbQo-NMbA&&$ij00ei>{Yu?Ekyn;cX`{9x%O{nb8{bTck?3xB2EN!fQcp>!hl$REOqw|E_Ao$?JaDw zge8CqINUrsB0)0Ls1v6G+azO&3-}SikNCIx!x;bYPvaj0iTXaLj7{T`^YlIM*Lm-G zpYv{P$CYOS3BNzz!GGu4ZW({B7!6d3U(UCFFG5c^^au3ihaLKIL+lP5az*R)6M5^#EIbS5qfv{B?4F*<~>(j|S_6 zEw`69F&0N2lGEiIMOxk}Zwd{ud!|4)QaxlQZ8Kp}S2jUgMRo2Wh==9R;ZWoVi*N8s z`53$opYVzxFQ1?zoUvL?R_tkb0q%YV%{k%BxI2@EMZ>)1O>TQUk>a{vk!wN`K6<_? zvbq88F9LP}Ou!J}B|x?eNZSBM0gLt29OwO6Ua2Am)Z-RKZq(!xMS_m2n*I(Y`KV;& zx*{9Vi+PU8&nj0{jG_N~}aa){tj1vz87n4$&ojNq16cv?nI?__Gq)e6Q6x%QVJCP5GPD$Y@ zmG@We6({A{sx~nsf2vxWtD=vpZk^_!D+pZZRzQ^U&4dJWE_#`N zCY(3(cO+;J^R2eiqPJN^Cjf^ch$@0L9w(A#GvEmQAYIO)y@NCxX>tT>e;hFC*x>tbW^LC)uRAHRnx#N5ZacPxK|@hRqyB>*y^Q znYWu`Y4COiI`v?)*MV(X&eab_Cg7M8Elws(%Z~Nf=04LN=uR0neJHm!w3dNkQSX9* zK0)Mp`9ooen3V4|Je@lP#hdc4hEVZ1#BB^2w;fCEp-J>oOv&|)m5dk>)VPlseWP)_ z;8XZ+1kB3Umd&mF0OC0YZl{2J2Uww;FG1T5j~pt4d`TW|npr&s5r@*p0M!?8j^-FL z{tao0VJvJijkumoq^@*cUFobGX^x0l#i{w`Zl+_cw#>7iBReMiOzX0R&)cQdi!T(X zud?wTF7A(oSLb75h6P={oy5D2z+BCnDcBG*;{#iaWP*-Uy_x*>gk>4rM`e>Fn)Q`)_e7 zn9@Zf5btByL>6O*=BK-%ssq#m)bw*gQWH_lLDh!E3FCrQHR(BgUd?shKgyqXd%|G$ z`S^ts^c`A*+}LvAar}!R^%OC?)ho<;FYd;b9gM6tEF%m;ydvwzL+B4N0@#e`VV!V8Fxo0$0EtH#7P^uhV=LR;PBd^=~(%$zwh z-`vGl^1FOluXk;k{C>H8Phadj<%_AGF16oL&h(=%m1&)Yfa9`HX}skBO=bAFH_SI` z?uwKT%vFO6#W=J0y(bIH@ zFV-GbhY?ko{A)ua-}E-}blo-4%?27pw=dWt*xMH8&Gk`U3T{;vdqXYZ35iv7r*(6P zjGSd;Gt`e1OnxyGcTPflgL^8%^;06Ak!5-WTxA~RQUO^WMN@Xv>!IPMBQW<0XpVVD zvAidzXXqW-%Es9}k~JmK6Pyg!S6HG<@*}MwzEf54*qd22oX>| z6;yQ6cHS86i=2WR-qb&@s1qAIdCkYUaFiFL!RR!UalrrcMd2bda`LsT*cJBf)C<`Pc!K=R)imHNk(xo^#sXN8zYu zd3!t}2(t!%6;H+vZIuHFez$HExh^smNz42i|(7h|MQ;KpT5z;Qh z0ECfQa_&ftf{*A7y#^?~6q3ca6R)dJczaVsea3oId)?=v9&n|GEMv^D#_3B~U1Swo zr!Me9Q?Jve>{<3Vhim3=2AUPit&}-T7wqXNh~ghv%hMxNb%Ll=kR-!A)jTFN{k!>` z`wING0v7nA4c|UK5Ajn0>6C)J45F}&uR_}miwdfPe3kPpSGsUziSHmd*;hg#0pkl|6Ofxsp9n4yT{0Iw3|6J&1rq(-Iw)oB)HYO(iAi$a zE1a!+P>4fXLfxU2wDhj_H3T6OV}j;9^Ls(%62h;Lc| diff --git a/osinaweb/osinacore/__pycache__/tasks.cpython-310.pyc b/osinaweb/osinacore/__pycache__/tasks.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..ba4d670b0a2a6872fc20b33ace27f7db2a98e07f GIT binary patch literal 920 zcmZuwy-wUf5Z+n;oH@7zks=LBXr1EB10WO$iWCtfI-*EckYl`i;A8DIyL-BT?kdt! z)9SZJc_r5iH$SntXMa`u7|L>BF(!5c1wyy$a?tnH}>lo(q|4~mNl}hO_phs zo2f1U(cBA?L>wt2RK14g7-1a-3z)-%e4}S{M83O;{i)_Erj`yj?Ev319%qe`<5F-H zU{`B?e@;GNl}>nt=ZK~}=gBVDr$#o(C>Le5@iuQxEOMc@(Ydd+z5Om3 zdp7J?us+KTS8hdd-v*6BhV077P4=!E%=YBbgcn9zFBii0_?JRV8CPzzw!b6m8k420 zZCEId@3N68D}EtsZoOL0Vn1EOK1cckSvpUPlwrKKL{O|MrO=LF9!%!D;l@zg5q%U@s04HplIqE5~8F+HSy+J**_- rLfh4D9Yc0>chU~tc0a<MukGu)b;43Fy0T3`wN~tAVGoL4(Z@!t7OG}Z1YyRLTd~zM7>_2scCt4pJ(E@kc{@})K;qE&<|2ux~^oR*GRFy1J z-J>STWvX~3%R(DJF9l@!Rbt~VFUxNew?4rGoR|nFrr>_|pf&Z+h#)DA+n6g5RJagM zBg~HsgfH5s-h_$(v5p8ulv2^bo9?NL=n{mVyJrqsSMYubu1uGw;dEuXYF`!0r*uM7 zPpq8Ml*DUd6)RXX;qE`W$UQ8zEO=5Xi2EBG_wO>ERiIeK^$~+YFu^OhjOmK2szyyT zEQIYj549y-kVHne+B*TUoGgGc5+zC1T-qo-?I#gv^q3iG0!sNS;EGf zW1_mcf?+!VAzGCPculs6giPpHy{jf*H37y<#2EH&o&nlj#@^0(W`h}1I8ctcrjPk- z#>aRsV208_kt`IoSIb)mZ=SJ({q5ImcW<=)(sVB(B$Dh5Ybkc^U?@9?ru#&uTPV_w zrD4M1Ay?<-2-!Dgw1Yj7Y4HMO^Tm`GX=$h!o1m`8YTh1h?GLv`+a@Y!a6W%u9CaHr z)W?tc-~eUN1IT3tkY#cKgAwSXs+u?zXlmwaZOJuR!G%m?)>3<@}|jV5UW9>cgX z?4%6-&-(yp<{nEf2BAM&s1_0kaO)ej5xJCjzdfIlYjmANZ|&y{c2S(lJ8G{<0sD8kL2u%BIk%+ct8pmaLYPg^G?)) zvzH76$gd0}@{Rl=YYFOsV+_bz6&M-_ZKwwy~);d4N4S zK-U@!gP=8H@!XC$yhvRJnF6ch1Zp~*VzKZ&{v+la8}3lWq<(#_-US>&g`Kg8)|v~f zjxl@~eP5k6)^zt@HGOj41T(h2tEQbRhv$<4o5rpE96ZOf*+`63*N3Qxo5#9I^X)LC z6Dj-s#gOiuP7-dD%9)VrN@aozUU2m%znbzVrHacLYah<0ji)WA6x62>iYPyPkG@UR{L literal 0 HcmV?d00001 diff --git a/osinaweb/osinacore/models.py b/osinaweb/osinacore/models.py index 4a4cb71e..a593b39d 100644 --- a/osinaweb/osinacore/models.py +++ b/osinaweb/osinacore/models.py @@ -311,3 +311,14 @@ class DailyReport(models.Model): date = models.CharField(max_length=40) time = models.CharField(max_length=40) staff = models.ForeignKey(StaffProfile, on_delete=models.CASCADE, null=True,blank=True, related_name='dailyreport_staff') + + + +class Connection(models.Model): + STATUS_CHOICES = ( + ('Online', 'Online'), + ('Offline', 'Offline'), + ) + status = models.CharField(max_length=200, choices=STATUS_CHOICES, null=True) + date = models.DateTimeField(null=True) + user = models.ForeignKey(User, on_delete=models.CASCADE) \ No newline at end of file diff --git a/osinaweb/osinacore/tasks.py b/osinaweb/osinacore/tasks.py new file mode 100644 index 00000000..c623df84 --- /dev/null +++ b/osinaweb/osinacore/tasks.py @@ -0,0 +1,24 @@ +# tasks.py +from celery import shared_task +from osinacore.models import * +from django.db.models import Q + +@shared_task +def set_offline(): + print('Hello') + all_staff_profiles = StaffProfile.objects.all() + + staff_without_working_points = all_staff_profiles.exclude( + Q(task__point__status='Working On') + ) + + users_without_working_points = [staff_profile.user for staff_profile in staff_without_working_points] + print(users_without_working_points) + + # Create a new connection record for each user with status set to 'Offline' + for user in users_without_working_points: + Connection.objects.create( + status='Offline', + date=timezone.now(), + user=user + ) \ No newline at end of file diff --git a/osinaweb/osinacore/templates/.DS_Store b/osinaweb/osinacore/templates/.DS_Store index 2c3a58552dd2f9f033eb19bd4621b77ddff58051..a1d4d95ffd8ed03f39aae80ec1f462b19a1b9622 100644 GIT binary patch delta 21 dcmZn(XbITxT7c1T^BaMUjErHM=Lw~W0svt02pj+a delta 21 dcmZn(XbITxT7c1D^BaMUjEt_E=Lw~W0svrt2nqlI diff --git a/osinaweb/osinacore/views.py b/osinaweb/osinacore/views.py index be7dbf97..bc20f416 100644 --- a/osinaweb/osinacore/views.py +++ b/osinaweb/osinacore/views.py @@ -498,4 +498,6 @@ def customer_invoices(request, *args, **kwargs): } - return render(request, 'customer_dashboard/listing_pages/customer-invoices.html', context) \ No newline at end of file + return render(request, 'customer_dashboard/listing_pages/customer-invoices.html', context) + + diff --git a/osinaweb/osinaweb/__pycache__/celery.cpython-310.pyc b/osinaweb/osinaweb/__pycache__/celery.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..50db7250a1af5b3cfb3d7d2044a259ec12a276b5 GIT binary patch literal 806 zcmYjOU2oGc6iu8gO}n=HV45cJ!UHcwTC)v_iD^QNts0=QNwj+)FTss(hdU>(YeIeXMUOj1)`G7662eW+KWNz1Kt=yp^=eXq-!9EC3 zSBNU9lDVOMgjK^cU?2>QR}bFq9Uq<~-A=Ff=J>FiygNBKJ?c!Bq~YrDOHb93j})9vTc2HsukD|rqo87nbaVMCgq$#yF9!OrX+l+-!u zy#HWz3X4i_kSJ>&Vm}X&*B#r0uZ~*9(&h5=V|1!P=?F3|0EFOI5FLO%H*yqpso>e8 zBRaCdiRLDiSyb8<<#1VoX(y&h?CL*o|M<~W5$fjN5Vaj=H@j@ns&GJn5E7@As@*$6s8W%*KzpdTL`YT|yIU_#(%O!eqVzD9H)=iktNj!Dbt#n}U%< zQbP)ol7gm`;+`2+L}^6HYa%1b&xz!pS;}R+PbR%q3PATB(fBCNvCp zs8EG^u5!Ba|EpZg8v)vK-@~FImr(K*J!1`B&;_$wKDy*r}QhgC!4!|pJVz<@a4e?IGD;Zxv>l=p6-o1VTF@VK>q08DU7kXXB zlPK^SSPKJ`fe>@ALeKfk*KQKoyYR@4!32)ilRGWn?Qs}uC$icfsnY8lE~P~-LR3~u zi^8;^SQ7fx!2(nS@eZ}|5GOv=*7?xOtwO|}?YC}Lozx1>lU0YqIIpb*aIw;7y6KO! z^{3)b2_l1i zzfU>)PcJ*9-ARnFWmW)ZVJJjV$=cw0B*aObneN7-knJNh7<c;?+ZX z?7DwY&_B>M=ui(2&M?2<%9-? z68Kh#1_b*B2SKGF(3t!fevdFO1eSP{2Sp`Y7`zY?>hKD21d#<1o1zeG$kSp1)ABMDlV~Dn}r>k+w@9HO!Kfy z3m{)f`(?L`S}3KD8SqK7QmGx*jjHfk^Z2OVs8n6RC4?0BO&+2>!0r!^u07&5Ydf~hhR@uw-A{5aqvHHTIg8S8+w7RVyZ(8vdujIiH@%MgqI{tIt#~Gp aR8>JCnRv(+!9?D|1S=jzBmQ~Iclr+oH(W&k delta 286 zcmX|6u};H442|!u&5`EXv`w0}Nm>dEh?M~rME?K@iNPx`io(Lq!ob8>b?wkpu(0NL znD_uDCKfn#h$X*gThGt(SM(Q}M`Jw4#`*Ve{{;%j z!#()9dT4kLwd!QvD(pL~i{q q@2S3M-AJ0RU-fnUsXr*avrj9>_caAlxk@P67E0)rHp*MSc~}3|4?%nY diff --git a/osinaweb/osinaweb/celery.py b/osinaweb/osinaweb/celery.py new file mode 100644 index 00000000..3c37056b --- /dev/null +++ b/osinaweb/osinaweb/celery.py @@ -0,0 +1,23 @@ + +import os +from celery import Celery +from celery.schedules import crontab +from datetime import timedelta +# Set the default Django settings module for the 'celery' program. +os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'osinaweb.settings') + +# Create a Celery instance. +celery_app = Celery('osinaweb', broker_url='redis://127.0.0.1:6379/0') + +# Load task modules from all registered Django app configs. +celery_app.config_from_object('django.conf:settings', namespace='CELERY') + +# Autodiscover tasks from all registered apps +celery_app.autodiscover_tasks() + +celery_app.conf.beat_schedule = { + 'set-offline-every-minute': { + 'task': 'osinacore.tasks.set_offline', # Assuming your task is in tasks.py in your_app + 'schedule': crontab(minute='*/1'), # Run every minute + }, +} diff --git a/osinaweb/osinaweb/middleware.py b/osinaweb/osinaweb/middleware.py new file mode 100644 index 00000000..45f628eb --- /dev/null +++ b/osinaweb/osinaweb/middleware.py @@ -0,0 +1,29 @@ +from datetime import datetime, timedelta +from osinacore.models import Connection + +class OnlineConnectionMiddleware: + def __init__(self, get_response): + self.get_response = get_response + + def __call__(self, request): + # Call the view function or next middleware in the stack + response = self.get_response(request) + + # If user is authenticated, create or update the Connection instance + if request.user.is_authenticated: + current_datetime = datetime.now() + + thirty_minutes_ago = current_datetime - timedelta(minutes=30) + + # Check if an online Connection instance exists within the last 30 minutes + existing_connection = Connection.objects.filter( + user=request.user, + date__gte=thirty_minutes_ago, + status='Online' + ).first() + + # If there is no online connection within the last 30 minutes, create a new one + if not existing_connection: + Connection.objects.create(user=request.user, status='Online', date=current_datetime) + + return response diff --git a/osinaweb/osinaweb/settings.py b/osinaweb/osinaweb/settings.py index 109622dc..5875a970 100644 --- a/osinaweb/osinaweb/settings.py +++ b/osinaweb/osinaweb/settings.py @@ -17,6 +17,10 @@ import os BASE_DIR = Path(__file__).resolve().parent.parent +# settings.py + +CELERY_BROKER_URL = 'redis://127.0.0.1:6379/0' + # Quick-start development settings - unsuitable for production # See https://docs.djangoproject.com/en/4.1/howto/deployment/checklist/ @@ -56,6 +60,7 @@ MIDDLEWARE = [ 'django.contrib.auth.middleware.AuthenticationMiddleware', 'django.contrib.messages.middleware.MessageMiddleware', 'django.middleware.clickjacking.XFrameOptionsMiddleware', + 'osinaweb.middleware.OnlineConnectionMiddleware', ] ROOT_URLCONF = 'osinaweb.urls'