From f8a91b5970ee598253b58891b085870f7c03572a Mon Sep 17 00:00:00 2001 From: emile Date: Wed, 10 Jul 2024 12:31:34 +0300 Subject: [PATCH] new --- osinaweb/db.sqlite3 | Bin 1536000 -> 1544192 bytes .../__pycache__/consumers.cpython-310.pyc | Bin 4057 -> 5436 bytes .../custom_context.cpython-310.pyc | Bin 2801 -> 2823 bytes .../__pycache__/routing.cpython-310.pyc | Bin 403 -> 471 bytes .../add/__pycache__/views.cpython-310.pyc | Bin 15401 -> 15413 bytes osinaweb/osinacore/add/views.py | 2 +- osinaweb/osinacore/consumers.py | 43 ++++++++++++++- osinaweb/osinacore/routing.py | 1 + .../partials/new-status-activity.html | 30 ++++++----- osinaweb/osinacore/templates/index.html | 1 - osinaweb/osinacore/templates/main.html | 1 + .../templates/recent-activities-page.html | 4 ++ osinaweb/static/dist/output.css | 8 --- osinaweb/static/js/online/online-consumer.js | 2 - .../static/js/status/new-status-consumer.js | 5 +- .../js/status/update-status-time-consumer.js | 50 ++++++++++++++++++ osinaweb/static/notifications/new-status.mp3 | Bin 0 -> 46937 bytes 17 files changed, 118 insertions(+), 29 deletions(-) create mode 100644 osinaweb/static/js/status/update-status-time-consumer.js create mode 100644 osinaweb/static/notifications/new-status.mp3 diff --git a/osinaweb/db.sqlite3 b/osinaweb/db.sqlite3 index 84b100917d2979fdc63254f3b05fa11348e87e52..5b5967cf4cb6940799357456533868f94de7f32b 100644 GIT binary patch delta 12693 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 delta 5046 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 H8yx!w8s-vJ delta 1258 zcmZ{k&rcIU6vua_`>VU#Ur zi3d60Tsgpz12O2u1Mv^=KX6aRgNYYU{sF!>tEDm8WIlQGX68HZ&3oJZzRyRaE0KsH z!LQ@%>w9lv8__hG-{>!>OwLKRxwpj#vAII$h{5OSE0TWyo%Rzm0SBBWL^D4spCKuJ zQ*JlY=n!b*Yw~U`g7YXMhR_jlggAK&Eg^*WJI#nzfK8oLeW^hbeO-J_xlKOtFG`NG zFz-=2i$;w)ggqonc&ZQT7y6AX*JlvEKl=PPhpWwxf(7To>VeR zR*kTz7p_rQmmu?4Hg6LL1Dk?)4E|P~>&94is7S-7i)@GbbYLjRpdm~?sNLX+L~5uH z0~QPYXq~7}g|7{#gMgE03<3BHt=3|KVMm<$%lV;&r6niE+x5}pAz1T``_4+`QNb-P zGuv=d{DGd$jG@FRVg!M2>MO-3#pQBv|G|a$z8H-=05FI}(j-oz{HOk|NgPEH$TzV0 zhj3m&ZJQ^IBpKt~#;IOWnhZFd3y5( zM}l``i|*Y8hY8I;jn@Nv8zK~y!X$19%^%j-D$3x%?AuC$EHcRMI7sJh z>Z^g%4=op;J{xBIV>rdXMS4~*!g^4G39xLgmVf*23?wL|5H`?Jj)Cs-%-B{4wlChqJRNaT#$1aZq`zM8j(a^+w-SKn{kB zHP%5&*DY0eZIf>#`^YrkPoAFa#Jw5<5By8X*Uvp%VU?xgc>+5yFv&tWXm1M`mygoys6~m#jAfo0)i(!dGHU2)hkF6JUGKwR8@C&sdQd}Zf1e@SIV=;@N2g&u6$6BnbSnzz1k!N5IdNPKo zP1Mn7vdm1~SS!3f%UpD0KMjP{1!3oqdFU0UaQcw>_vi?Mh5kIdF`fk&#O0zyH4Zw- zb9Ca0@`QVzCtb9PDh7Q3wy}n#fBO%frqbZEn=X--(IwJ`A}wk}SxKX9whY1-!Ip)U zdDew4B%iSSm+HN0Io3s4RJItF)ece3VPEtAC1#Tjp4_j7uFc)6hhk%oq91z{9q@^( zl?4JaQXkjj#^Bn+94H@UVcJwJV>rmxM3igAQ2#3HLFX)1Mg1Jhsy)~kLn^*`h`d@l zTpaGRVuWs_mW~dJYod_@jigBnCh$n7Z_xQ?Mw{JFDSR(0RDN-cHifYi)6N LwUaE$568q#rYnc`yQhF_1jjQ<628q6s6Kumq39eW(ut z)01Os%t8${&kizN8v@rO2zAtBl^bISjawv1kw#;gt=2*lO)nd#>5he#KS0aNC5W4M zB)^a8IFIHSfOXeU-5=i_1p4oiL`^z5&`8`yjl@fdcw8XqOyF*@b>KG7Y-*TUW1H9pXDyVDRCq9 z)LxPtAZ{Z@Ss<~$wp8%a7WUTMeGqX|4F zzG@dGzb=}3qjn)-s!5uqw37J%2^K HGtT@3!fwgY diff --git a/osinaweb/osinacore/__pycache__/routing.cpython-310.pyc b/osinaweb/osinacore/__pycache__/routing.cpython-310.pyc index f1d97082d0a96338119ed88bdf550cc322cc8e9e..f774f1566f478d16c4f7a3de9d9b719adac20ffc 100644 GIT binary patch delta 151 zcmbQte4SZ4pO=@50SMmf_oYcPGB7*_agYHUkmCTv#SRm-^~F*dQ`l137O*U2Xl6=h zj$%(?4`$Hhn3!TMTP0CmtY2D?l30?eTU?S@Qd*o^tXq})37&sVtn0XjE{s92eoTa2LMqd50d}@ delta 33 lcmdm5v9f|UpO=@50SGw%^rW5K$XlSoS_I;6?o(MV4gjg$38er4 diff --git a/osinaweb/osinacore/add/views.py b/osinaweb/osinacore/add/views.py index 0b26831c..4d6eed31 100644 --- a/osinaweb/osinacore/add/views.py +++ b/osinaweb/osinacore/add/views.py @@ -498,7 +498,7 @@ def add_note_modal(request, project_id=None): def add_daily_report(request): user = request.user today = date.today() - statuses = Status.objects.filter(staff=user.staffprofile, date=today) + statuses = Status.objects.filter(staff=user.staffprofile, date_time__date=today) if request.method == 'POST': text = request.POST.get('text') current_datetime = datetime.now() diff --git a/osinaweb/osinacore/consumers.py b/osinaweb/osinacore/consumers.py index a3387881..d0c0850d 100644 --- a/osinaweb/osinacore/consumers.py +++ b/osinaweb/osinacore/consumers.py @@ -46,7 +46,6 @@ class OnlineUserConsumer(WebsocketConsumer): offline_connections = connections.filter(online=False, last_seen__isnull=False).order_by('-last_seen')[:5] sorted_connections = list(online_connections) + list(offline_connections) online_users_ids = [connection.user.id for connection in online_connections] - online_users_ids = [connection.user.id for connection in online_connections] customer_connections = [] staff_connections = [] for connection in sorted_connections: @@ -96,11 +95,51 @@ class NewStatusConsumer(WebsocketConsumer): ) def new_status_event(self, event): + is_online = Connection.objects.all().filter(user=self.user, online=True) status_id = event['status_id'] status = Status.objects.get(id=status_id) - context = {'status': status, 'new': True} + context = {'status': status, 'new': True, 'is_online': is_online,} html = render_to_string("details_templates/partials/new-status-activity.html", context) self.send(text_data=json.dumps({ 'event_type': 'new_status', 'html': html, })) + + + + +class UpdateStatusesTimeConsumer(WebsocketConsumer): + def connect(self): + self.user = self.scope['user'] + async_to_sync(self.channel_layer.group_add)( + "new_statuses_time_group", + self.channel_name + ) + self.accept() + def disconnect(self, close_code): + async_to_sync(self.channel_layer.group_discard)( + "new_statuses_time_group", + self.channel_name + ) + def receive(self, text_data): + data = json.loads(text_data) + connections = Connection.objects.filter(online=True) + online_users_ids = [connection.user.id for connection in connections] + if data.get('event_type') == 'update_statuses_time': + event = { + 'type': 'modify_status_time_handler', + 'online_users_ids': online_users_ids, + } + async_to_sync(self.channel_layer.group_send)( + "new_statuses_time_group", event + ) + def modify_status_time_handler(self, event): + today = datetime.now().date() + latest_statuses = Status.objects.filter(date_time__date=today).order_by('-id') + context = {'latest_statuses': latest_statuses} + html = render_to_string("details_templates/partials/recent-activities.html", context) + self.send(text_data=json.dumps({ + 'event_type': 'update_statuses_time', + 'html': html, + 'online_users_ids': event.get('online_users_ids', []) + })) diff --git a/osinaweb/osinacore/routing.py b/osinaweb/osinacore/routing.py index e28f87b4..efaa935c 100644 --- a/osinaweb/osinacore/routing.py +++ b/osinaweb/osinacore/routing.py @@ -4,6 +4,7 @@ from .consumers import * websocket_urlpatterns = [ path("ws/online-users/", OnlineUserConsumer.as_asgi()), path("ws/new-statuses/", NewStatusConsumer.as_asgi()), + path("ws/update-statuses-time/", UpdateStatusesTimeConsumer.as_asgi()), diff --git a/osinaweb/osinacore/templates/details_templates/partials/new-status-activity.html b/osinaweb/osinacore/templates/details_templates/partials/new-status-activity.html index 32a8f0c9..53e97501 100644 --- a/osinaweb/osinacore/templates/details_templates/partials/new-status-activity.html +++ b/osinaweb/osinacore/templates/details_templates/partials/new-status-activity.html @@ -124,8 +124,19 @@ -
-
+ + + +
+
@@ -136,10 +147,10 @@
+ class="w-[12px] h-[12px] absolute rounded-full bg-green-600 bottom-0 right-0 border-2 border-white {% if not is_online %} hidden {% endif %}">
+ class="w-[12px] h-[12px] absolute rounded-full bg-red-500 bottom-0 right-0 border-2 border-white {% if is_online %} hidden {% endif %}">
@@ -148,7 +159,7 @@ {{status.staff.user.last_name}} {% if status.time_ago == '0min ago' %}

Just Now

- {%else %} + {% else %}

{{ status.time_ago}}

{%endif%}
@@ -192,12 +203,3 @@
- diff --git a/osinaweb/osinacore/templates/index.html b/osinaweb/osinacore/templates/index.html index 0f416a5f..4e466990 100644 --- a/osinaweb/osinacore/templates/index.html +++ b/osinaweb/osinacore/templates/index.html @@ -339,7 +339,6 @@ const html = data.html; const ticketId = data.ticket_id; - console.log(ticketId); // Remove the existing ticket row if it exists const existingTicketRows = document.querySelectorAll(`.ticket-${ticketId}`); diff --git a/osinaweb/osinacore/templates/main.html b/osinaweb/osinacore/templates/main.html index 88ed6b3e..51d1bb16 100644 --- a/osinaweb/osinacore/templates/main.html +++ b/osinaweb/osinacore/templates/main.html @@ -1216,6 +1216,7 @@ + diff --git a/osinaweb/osinacore/templates/recent-activities-page.html b/osinaweb/osinacore/templates/recent-activities-page.html index 363fac26..0387dd4d 100644 --- a/osinaweb/osinacore/templates/recent-activities-page.html +++ b/osinaweb/osinacore/templates/recent-activities-page.html @@ -732,6 +732,10 @@ + + + + diff --git a/osinaweb/static/dist/output.css b/osinaweb/static/dist/output.css index 2893aa81..39d7f4b4 100644 --- a/osinaweb/static/dist/output.css +++ b/osinaweb/static/dist/output.css @@ -1221,10 +1221,6 @@ video { height: 16px; } -.h-\[180px\] { - height: 180px; -} - .h-\[18px\] { height: 18px; } @@ -2912,10 +2908,6 @@ video { line-height: 2.5rem; } -.text-\[10px\] { - font-size: 10px; -} - .text-\[12px\] { font-size: 12px; } diff --git a/osinaweb/static/js/online/online-consumer.js b/osinaweb/static/js/online/online-consumer.js index b0573cd7..71257c10 100644 --- a/osinaweb/static/js/online/online-consumer.js +++ b/osinaweb/static/js/online/online-consumer.js @@ -38,13 +38,11 @@ document.addEventListener("DOMContentLoaded", function () { }); const onlineUsersIds = data.online_users_ids || []; - console.log(onlineUsersIds); // Update user activity containers based on online status const userActivityContainers = document.querySelectorAll(".users-activities"); userActivityContainers.forEach(container => { const userId = container.getAttribute("data-userId"); - console.log(userId); if (onlineUsersIds.map(id => id.toString()).includes(userId)) { container.querySelector("#connected").classList.remove("hidden"); diff --git a/osinaweb/static/js/status/new-status-consumer.js b/osinaweb/static/js/status/new-status-consumer.js index 34d88ba7..415e14bd 100644 --- a/osinaweb/static/js/status/new-status-consumer.js +++ b/osinaweb/static/js/status/new-status-consumer.js @@ -10,8 +10,11 @@ const data = JSON.parse(e.data); if (data.event_type === 'new_status') { const activityDiv = document.getElementById('activitiesContainer'); - console.log(activityDiv); activityDiv.insertAdjacentHTML('afterbegin', data.html); + const audio = new Audio('/static/notifications/new-status.mp3'); + audio.play().catch(error => { + console.log('Error playing notification sound:', error); + }); } }; diff --git a/osinaweb/static/js/status/update-status-time-consumer.js b/osinaweb/static/js/status/update-status-time-consumer.js new file mode 100644 index 00000000..d363f254 --- /dev/null +++ b/osinaweb/static/js/status/update-status-time-consumer.js @@ -0,0 +1,50 @@ +// WebSocket connection for new statuses +const ws_protocol = window.location.protocol === "https:" ? "wss" : "ws"; +const newStatusesTimeSocketUrl = `${ws_protocol}://${window.location.host}/ws/update-statuses-time/`; +const newStatusesTimeSocket = new WebSocket(newStatusesTimeSocketUrl); + +newStatusesTimeSocket.onopen = () => { + console.log('WebSocket connection to new statuses time established'); + + function sendUpdate() { + newStatusesTimeSocket.send(JSON.stringify({ 'event_type': 'update_statuses_time' })); + } + + // Call sendUpdate every 1 minute (60000 milliseconds) + setInterval(sendUpdate, 60000); + // Call it immediately on load + sendUpdate(); +}; + +newStatusesTimeSocket.onmessage = function(e) { + const data = JSON.parse(e.data); + + if (data.event_type === 'update_statuses_time') { + const activityDiv = document.getElementById('activitiesContainer'); + activityDiv.innerHTML = data.html; + + // Update user activity containers based on online status + const onlineUsersIds = data.online_users_ids || []; + const userActivityContainers = document.querySelectorAll(".users-activities"); + + userActivityContainers.forEach(container => { + const userId = container.getAttribute("data-userId"); + + if (onlineUsersIds.map(id => id.toString()).includes(userId)) { + container.querySelector("#connected").classList.remove("hidden"); + container.querySelector("#not-connected").classList.add("hidden"); + } else { + container.querySelector("#connected").classList.add("hidden"); + container.querySelector("#not-connected").classList.remove("hidden"); + } + }); + } +}; + +newStatusesTimeSocket.onclose = () => { + console.log('WebSocket connection to new statuses time closed'); +}; + +newStatusesTimeSocket.onerror = (error) => { + console.log('WebSocket error:', error); +}; diff --git a/osinaweb/static/notifications/new-status.mp3 b/osinaweb/static/notifications/new-status.mp3 new file mode 100644 index 0000000000000000000000000000000000000000..a1ad34acd5b5d21a9e557143b636b23668eb67a2 GIT binary patch literal 46937 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