From deccc305c18c8b63cb93e0a1197b366f0a0addd7 Mon Sep 17 00:00:00 2001 From: emile Date: Tue, 9 Jul 2024 09:21:10 +0300 Subject: [PATCH] new --- osinaweb/db.sqlite3 | Bin 1462272 -> 1462272 bytes .../__pycache__/consumers.cpython-310.pyc | Bin 3337 -> 3097 bytes .../__pycache__/models.cpython-310.pyc | Bin 14870 -> 15547 bytes .../__pycache__/views.cpython-310.pyc | Bin 19846 -> 19869 bytes osinaweb/osinacore/consumers.py | 28 +++--------- .../osinacore/migrations/0094_customuser.py | 29 +++++++++++++ .../migrations/0095_delete_customuser.py | 16 +++++++ .../0094_customuser.cpython-310.pyc | Bin 0 -> 826 bytes .../0095_delete_customuser.cpython-310.pyc | Bin 0 -> 547 bytes osinaweb/osinacore/models.py | 40 ++++++++++++++++++ .../partials/recently-online.html | 14 ++++-- osinaweb/osinacore/views.py | 2 +- 12 files changed, 104 insertions(+), 25 deletions(-) create mode 100644 osinaweb/osinacore/migrations/0094_customuser.py create mode 100644 osinaweb/osinacore/migrations/0095_delete_customuser.py create mode 100644 osinaweb/osinacore/migrations/__pycache__/0094_customuser.cpython-310.pyc create mode 100644 osinaweb/osinacore/migrations/__pycache__/0095_delete_customuser.cpython-310.pyc diff --git a/osinaweb/db.sqlite3 b/osinaweb/db.sqlite3 index f316631d3bd89179a47005e5f9c8c01f86eeff4a..5686ec561454ab2a7628802da35d8ee1d8c4008b 100644 GIT binary patch delta 816 zcmZoz5ZSOGa)LDD{E0HojPo}pWa}_Kn0!XZfH7e6U!7}AjDC}^=o>KmamY+&Hwa|n zkl7qzaEM(}f<<1DF~2x7FEKg4C^fmXxFkQfv^cfMZ?mbz`RU97>>-=kFU(}(V9#Vv zVvh#$8VlC2OfI<2BH_mvz{bqTF4{j1L(% zGBz@XPHrsNUa#2{z{KPcA8k!ro zec)~Tz}NPHzwLuS+Xun64?=ApgtvVVVR2xNVOu<%-9U6B2iqIA%WS*Y76YTAaS z3!^p@dPp$_NU$*KGhqe_qd!Cf!}pASqAZM>OlZDj^xe*6F3Kb+!Nse>z(1cql3$AN z8ec7+1@AN7`MjyTDw_p2aPZdKH72k!$XhzX6N7<)rD;4yjG%hkz}(8jQqRc5(!j#p nyfGeVfHsN&CP<-;rV|*hW_sr4rY43)E{$=l+ZV@*#(n|-V^#*8 delta 295 zcmZoz5ZSOGa)LBt!9*En#)6Fr**c8(CZEwUVD#DiSLYfNqwnM^`UcFt9Hx`m4FWeu z860AtJfT2(v#G`T>C8Ut1)JF~%w*c!Sa5-5bHVi~FMtY7rn4VloDCG3#NKXlf)R+B zfS4JGS%8=oh}nP`B*y{7oZC%Ka9z00?9RkJoqYj!KTuyOV>|aEZXo8_&b^5DfUl{A zf}ydMk(rf&nVz}1rJxvl|Njfs(!sfnI}rJ<>*VcQ4Z zwhw%5ANboo2(*0=Z2KV8_Ca{t2N4zr<_LDC>Ffrg8-aFtv2ABE7iE$Z;ozOmz(1cq dl3$AN8ec7+1@AN7`I`kdwDWGCA1j*p2>>-TWVrwU diff --git a/osinaweb/osinacore/__pycache__/consumers.cpython-310.pyc b/osinaweb/osinacore/__pycache__/consumers.cpython-310.pyc index eae2be936026ce582ffff4696fa2a402b7aaff7b..a2c6de559aabdb3fb3df21e4d742353793337037 100644 GIT binary patch delta 1184 zcmZuwTWi!n6rRatGr4T9THUhxU=_M8t@TnXqSc~SL|PR4APchAowV+nCUufklq`LS zf`Wo&5D^4hM5NEY`vZLTDgFYVee*@n$+q1V8kjF_uYVuK0>sdLjMB{R}o z;CnUSl@GL{%qd6nRyFW_w;I&~Us&>!_CnhrqA0&8b<@~%+46$^wV0}Y@FX?8`7o-4 zuIr0#s4IF9dgWjJ?74n0Q>*F)pA7)3n6QD1g)$yUWw>MC;-6muz$<7yOlTwjsbbkm|4Lb9oA)7 z;SYd_)ajbCPMS2Pb(K@DyrE4cvsJEg?TxagaebX~!gDW_0%@v|9xDk2R1ScMDCn66Io6H@KB3;&Pl@V=-H&lsp>W|Phj+&vvVaX@Q65Ue3!eor&X!cLchD= zdC#noZSuD+XIYW{kq=qn9A4VSrbv_;-%wIzbZoEtOs(@?EsUzc((>dOB>j=!*_6D+ z3Ma%6Y+ExPMr&kyyFGVt9Jmw6W2*eek|7(6QocR+RGs&{Z1^b)1P2A(f0}C8Qoc6_ zR`x@9YAuSOu?#x&dCAHqpW1C9hvlA@%0Y));ttEb!NLMce;3&k1|o9#PEJhV=bb?q zM?kfuy8GDmBRCrfu&v@udU(`u6u_bmEz&M3`>bz0St=HRS+s2V%bKGTa?Cymc-=lZ zm{}HT)|btOf^l0QYJC0hV(EhyVZp delta 1451 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 delta 3210 zcmZ`*4Qx}_74~)P7bkK49LKTa{1Xyh0|_AoLZEH<87S%qVI*xap~S?G;Nm=o>z6b^ zRjD?htT0w~T3XhzrmNa5w1YvqpN`Qj>X6!M+RC~O=BX{TNE6Z~wVPCR2x&Xtb^e61 zSntcZ_nvd^x!*na+?L>^sDJ1nv(?07}^DBam9 zywvSHDoW_4^Bz%5wOXw>NM2ZAC|*6xYpyg|c}&Rp{7-IY=+x8X!}Q<600$ZHwF`@O z`^5_9=2qkW)4U1I)B9e~T5~wW~wMc{N6TB0Oa11vF7qSl0oSG{9!SGQcAY zNoTY_+-JxVbbJlaN5b#T+Xqo`IYVP6;_K%x;i1j`0tfG=Imtt>7@-^fMI~zWP*c++ zoe6{^L4+KlMS*()`&s-tTp$@;wmjisLOnw6pCZ&QCA}0VR^72y~pJL0Twl)?|7!h5_ zE^g{}iC+0_$m#M~XgE6Ak6eT9INIsPaBpldVkDit@j=s)&tc?SR9R6iF3|dlwsP<< z_W%@asZ2(5H^8Jb741#nN`3>-2Y4KC7%;Op$I$#f;AKE6;}5cUoW5FFCl1oNs#1Ek za(lyR?i;fwGuFoY2V#b0MC9u*&>3`ehs|Ci7US+8qkDuZt7@w|A=&{dMz~F7kXpXV znl6e}EewqD$Zz?Z+*pUm({hmRV?2F_`v~kt7~1tr4YwB(a6XxbaB^NEf2)f9_2rXx9DGt6_;)o!zY zVWY#ft@^M2pC`4_GK?y&hv@U#+Tfeq{+z#rn*qy3nO3#w&FLvR7Ic>W5_VYZWHGYK zhta43STwPqHSf;gv3G&Dc>ETBlbPUV=PuzB@~vs-JM?b%wDV5(^?GxVKGF5L{Y|hh zo0#R#&HKXsCfJ{!B6po$sdn9A8N-%5!@5!}c&-d{@Fy3E3uO$%qo#%W zBu`LBLxng=dmEN%--F62y6h})KF?w!U252}|IYn@4l*d@Fb1N%awh*2P3ahJ1^ga> z0+V!t#PF>AoOM>9WCBq2B(g{jF@&kjef7eW$r!nt4jlMO_rlk7IW#H#kv@s z&Vt;=uGOd*x5gz2qEB}nX*8nrTTJ%ceW5GW_(HY8D zOoe-`=up%enPhC$lDfi^JRWjQ4aiy4z0V`}(=$sp)+2}HC4gcnRoT!~oQ^_LH|GnG z-bbPbKVWh7?6g7AQ|IUdwMf3>X-CsuKB||SMzj6`!}Wlx^w`~tL^qwj`I@~tB&tLBEU0ze-zNMrPZRB#+UZ2QPClgRCK7BsWb3bNJ)ld_PRkC zMlD<)HDVE|rcwLzH>jxVq7>EdK`bSQ1-#o_>gDDZdFdQ3o=l5ZWY7i69D8Id{KWtXfC?NhF?j%>Dk1J~sjg| xoB*IqrnW{U9CAh~qOU{3>Up|+y@(>Ks`H(mbdScrpr_1}<;n0A(#cg-{{w5|@T~v< diff --git a/osinaweb/osinacore/__pycache__/views.cpython-310.pyc b/osinaweb/osinacore/__pycache__/views.cpython-310.pyc index 944577233cd22004eb79443cf1fbc5ec7a9bebf6..7630df43ca1a8f37c5f740dcffb5fbe9f3dbc9bd 100644 GIT binary patch delta 55 zcmZph%{X^9BVRr*FBbz4OuW{U#+AR3PsLtBHzlH#PmWU0CXFmL@1<%@;htSxF@gi! z<}n5sGUrryf|fM*A*e#(mzcRE7{gD#h{Ob}!y{(V-c zwuQn;XF{3{0%4QGwdqy!3X{D|eH(UKot@i>Yz3Twv0KPAz2>s*P3pa!Iu$cl*-q55 z!h|LbZQ$zLXeFT*248f8LpEG;gDK*Mx4Z;xj?!%#vr#Ow31f{C>lzrd+l;+g^Ll6l zk$?`cep^T|8YfBY)}aR8!$JwDZ6qq*mdZ|0Td(C(yTRHBvq6oDT`P;Rq)k)@n}K~L zdKY;^_`S{?%Vf~V8lbM_Ib=`3yzW((9rIc?d(V02zzZY$LN(c7XV${$a2N%Q4^Lq^ z9-P_P;h_4c}e%I-YJiV*GG){E>&qL{0}O%?_DfA9gm=We!V@MQbN8B*)<2r09~D6;Dl2_G8$1zZV0!y z{YtnEbZ))ak;R<}30gn+9SNxRvUFC)RVs6pnAEP>NCxPtivdVPIl<#}Mk5=XdCN3@ zH*BwIsoSIfUV)|CQl)vE$P%KXe*fZ(B@0!_Y@wixyz3g@BgPS&JkDSo>}!`X0~ymE zW0~X&VX)8G(;^m|iqD~doI{?Zph^n|(+5KkP{BxY5ZaRkZ1jAP(#LuoexE~gn+hRI z1%MFg3c?|%$4VCABo=Aby^RY)?o?VOG7IbR!yJ}1;PW`2$tJmkX#g`-%XZdI%c9QOUDvg7VC!~sM~_cyS#^FZpg|oxuHDOKH&^%& Lh%$fPw~p;U%M_Cp literal 0 HcmV?d00001 diff --git a/osinaweb/osinacore/models.py b/osinaweb/osinacore/models.py index 9cdf8e40..1ffa2079 100644 --- a/osinaweb/osinacore/models.py +++ b/osinaweb/osinacore/models.py @@ -10,6 +10,8 @@ from datetime import timedelta # Create your models here. + + class Reference(models.Model): name = models.CharField(max_length=50) date = models.DateField() @@ -53,6 +55,25 @@ class CustomerProfile(models.Model): new_id = str(int(max_id[-4:]) + 1).zfill(4) if max_id else '0001' # If no existing records, start with '0001' self.customer_id = current_year + new_id # Add 'p' prefix super(CustomerProfile, self).save(*args, **kwargs) + @property + def get_last_seen(self): + connection = Connection.objects.filter(user=self.user).last() + if not connection: + return "Not seen yet" + + if connection.online: + return "Online" + last_seen_time = connection.last_seen + now = timezone.now() + time_diff = now - last_seen_time + if time_diff < timedelta(days=1): + if last_seen_time.date() == now.date(): + return f"last seen today at {last_seen_time.strftime('%I:%M %p')}" + else: + return f"last seen yesterday at {last_seen_time.strftime('%I:%M %p')}" + else: + return f"last seen on {last_seen_time.strftime('%b %d at %I:%M %p')}" + @@ -124,6 +145,24 @@ class StaffProfile(models.Model): new_id = str(int(max_id[-4:]) + 1).zfill(4) if max_id else '0001' # If no existing records, start with '0001' self.staff_id = 'O' + current_year + new_id # Add 'p' prefix super(StaffProfile, self).save(*args, **kwargs) + @property + def get_last_seen(self): + connection = Connection.objects.filter(user=self.user).last() + if not connection: + return "Not seen yet" + + if connection.online: + return "Online" + last_seen_time = connection.last_seen + now = timezone.now() + time_diff = now - last_seen_time + if time_diff < timedelta(days=1): + if last_seen_time.date() == now.date(): + return f"last seen today at {last_seen_time.strftime('%I:%M %p')}" + else: + return f"last seen yesterday at {last_seen_time.strftime('%I:%M %p')}" + else: + return f"last seen on {last_seen_time.strftime('%b %d at %I:%M %p')}" @@ -394,3 +433,4 @@ class Connection(models.Model): last_seen = models.DateTimeField(null=True, blank=True) disconnected = models.BooleanField(default=False) + diff --git a/osinaweb/osinacore/templates/details_templates/partials/recently-online.html b/osinaweb/osinacore/templates/details_templates/partials/recently-online.html index 78399cab..f66b9019 100644 --- a/osinaweb/osinacore/templates/details_templates/partials/recently-online.html +++ b/osinaweb/osinacore/templates/details_templates/partials/recently-online.html @@ -26,7 +26,12 @@

{{staff_connection.user.first_name}} {{staff_connection.user.last_name}}

-

Online

+ {% if staff_connection.online %} +

Online

+ {% else %} +

{% if staff_connection.user.staffprofile %} {{staff_connection.user.staffprofile.get_last_seen}} {% else %} {{staff_connection.user.customerprofile.get_last_seen}} {% endif %}

+ {% endif %} +
{% endfor %} @@ -51,8 +56,11 @@

{{recent_logged_in_customer.first_name}} {{recent_logged_in_customer.last_name}}

-

- {{recent_logged_in_customer.last_login|date:"g:i A"}}

+ {% if staff_connection.online %} +

Online

+ {% else %} +

{% if staff_connection.user.staffprofile %} {{staff_connection.user.staffprofile.get_last_seen}} {% else %} {{staff_connection.user.customerprofile.get_last_seen}} {% endif %}

+ {% endif %}
{% endfor %} diff --git a/osinaweb/osinacore/views.py b/osinaweb/osinacore/views.py index 84f3af60..49bbb938 100644 --- a/osinaweb/osinacore/views.py +++ b/osinaweb/osinacore/views.py @@ -754,7 +754,7 @@ def get_latest_activities(request): } - recent_activities = render_to_string('recent-activities.html', response_data) + recent_activities = render_to_string('details_pages/partials/recent-activities.html', response_data) return HttpResponse(recent_activities)