From 1747305c056dfaa7d6a796bdb62fd1393fd8d5f0 Mon Sep 17 00:00:00 2001 From: Welton Moura Date: Fri, 24 Jan 2025 17:00:55 -0300 Subject: [PATCH] =?UTF-8?q?feat:=20notifica=C3=A7=C3=A3o=20de=20pedidos=20?= =?UTF-8?q?na=20cozinha?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- gestaoRaul/db.sqlite3 | Bin 303104 -> 303104 bytes .../orders/__pycache__/urls.cpython-313.pyc | Bin 631 -> 715 bytes .../orders/__pycache__/views.cpython-313.pyc | Bin 2773 -> 6252 bytes gestaoRaul/orders/urls.py | 1 + gestaoRaul/orders/views.py | 78 ++++++++++++++++++ .../templates/static/comandas/js/comandas.js | 64 +++++++++++++- .../templates/static/orders/js/orders.js | 59 +++++++++---- 7 files changed, 187 insertions(+), 15 deletions(-) diff --git a/gestaoRaul/db.sqlite3 b/gestaoRaul/db.sqlite3 index 84b1bf8eda9ad5e19f3afa07dd21f2094ff6c2b2..732454178e28f321b6393ed64e6fa3fedf37be97 100644 GIT binary patch delta 2922 zcma)8Yit}>72cUU_NGbZ-o$ny5u0XZw^A_m1C|1_n7f{=(1YLFVZ zGrJ9b68@Y|n)}W9&OK+&IdfsP;=*dhOV!-HOEsgSE6#pKL*hNM&TWN|tz6Lo%k{9JNGkrKh@ z29oXV(ZvaGPj6zlRT*#VJmG5{G?KV&YN-9>Z13!uR3JW(2#luj%)r91n#sh^&y6pn z`|#*Fqd(Tw>p$B+N8>a743qE;_{*$(UjOvt(tpTd-@f9xc;|ZI&UNk??~@{&cA*c@PthyrdH69JLmlV{ zd<{JTUxaVN>AZ}?F!$m^POR8c@oM{dXg_8o$`^!$&>~cW ze}Z?wHSjzb2DEVN27i&y)-5-eySy%rFJ??`us?fhDcDj?NtSgg%YgIMEjMk)l1)n` z5}^uJ6^GThEsMpbN~WR8L_c8rI`&^ywgG=8iHW7?5_6>~Y8B_JUA7z=w=poRSy+(_ zY!U?{P`gaGl2}mKlCh*=L)VE-GPffsjHhNLQ&+KORx*~c9g8Ja#S$fosp%Drq;Dk| zmc~e$WU7X&DmIC1OCpx0Nmy59N-IF!vSyPCx8C5p_8g3fFZ1XodVubuYv@h(8NMxk zSA02laFrhr#J9vZbE#GS&=K){@m=w^updUCA0CG$tb;Z10EFT%#QWl3#1F+hbcqkd z*K#*j`EY@Mi@&8v$2&C}guXzs- zV&d0w?loTBEB;(u6@Mh&6t9V|K~WzR^?~5%1A!EN^FFWpz)|>`12pJ>+3A20a6s>HfcSG|N5Q|JIto8>p?{&j!N0{|-Nf_uyTont?6$tvH{P6wc=)h4VQ{;e3uVaFl_g3>;

xKwmF%N971+_e z)1X<2c{lJj{#8j)s3|L3{A0qp+QgXkqF|ir*unp!-X<99=6Wa2#aQ^5>e$F`QYMO} zQ3-3RNi^nPe>VKcKfh_x7RR27iJ{^3{#kCQJzX_jQFM9ZiN=PYE*Vr)WsQwW;aIjc z=m@yB$$x1WD%gkqE|8~oNsAHAI2tW?@xDibnorRLVq z4hf=GX{E^2Ae+i)S3r^2pP#BxmLSXhl^qh4{Xf4Gwn7B`l-~(uYp*aT#T{XoEb#TU zGT6VVU2>IbtX;O8D26PV)X+79`6s*TTwg3D>VNg3U8~%yIpNE#I~BdO`ySI-cK?vV J#J7c<`#*Y0eV70M delta 1193 zcmaizT}&KR6vt=o9XhbXoWrhSBCO2_C00_Fnc11yoqZ4n*acRWhP93xy*~P2RjrmwDnf0}?;nbt`@dmddDS?n~h7`qTnz|_) z$)g88^(a9}(L;Vcq?kU_ubG;X3XWZuyrratfji<->6Ea)DCKG`sp9{n!<$w}3wJiv zRknqsTBhSf+Sk{A#6M(c!TqB_eO&1u8hmkNY~awic5uk-OAH=NP9;;(-u7MNAuH~W zjCG9+9!_-Ejd!ZnV0UCR5DAR$3GB8enuEr^U17CvLOBxe8&hRfuang}S^H;X)hElE zVfa(23tcX6DTEnp!%=t>!kEVIu^Ojg1Qy{tSWhW(4J4&GF4-|HC5Pu~YyNM z^!;_V@+ysS^EQ8l%sh00JHdU-y~ge3bPnl#x=i0mFI^#%#C~aklnJ_O1Qn5)uRh*x zCl*Mhpy|39$b+^GAp5lfXe|IIrl6X4L<&H4k}EjE8$i`HGw*0A07W-DY0NDr_ zdC-&xhO8@^o(C4g@INvZ!;(S}N-hXh4*89cZ2E#`?)3occ3fXD>G?&nQ}D#ZRe}rn z0N3y{{L;zcnq840-3BbdJbVIou?`La4+$8CKG+Ki)WQykK?E8g2-V<)asY8n{7qa1 zMtoprGNj4QX2|9=`G(AtMlLZ7=>_tEBRxRgcjOtMA@nijKut#gXwVTJXkZg%36L4b zA_IBbktaR0DOdB*^y&>F5gHS3+I*Jy?MRjk*_kZqv9npHRmCkbQW^z~;iGh0?wBZf z1Cc#kOinxU0{aR%<>;`ZuRGcsrLy>wtAk<>vsn@CqI&vQaSc{6_y_)Om&vqTS-{Kq5x$2P z@jPmH7Ej}GJc_$9juV)`5qut>#SV;MBRbcKTd^wTPGrHZYM}R=$-Oq;NJH*3>k;VQ4HwQmcBX^M?P!RyP_9=M) delta 99 zcmX@j`kh7nGcPX}0}z;+wWh~1GB7*_abSQG%J{ruqWV$}eU>7QbY4xqiQnci`)P7c l-o$7z`8{Jimk>}DP$xritQMEAgi@bnz-2pSN1U(xcyRmDUio8;0`92tnvAY8t}B_vVNFQn2EhY%TBP^%b7Mj;v6p#Z{L}JqC^C_>656?$M@Hv0%rNO?w{-L3PSNi8q3yI7!$4laTBr-NJ zKEDX2;zA^zNza!$HUCzMyDElOexz7bPMtgvHGx$tF&~CvjVd*$W zUxFv@25@i!H%;UiPtoT3@Y4I2WSbw`{JEZ!IVf$ftxXoKuIn#vPJjAJ_Pe>GBYEp+ zjv3tnYcSSvVKv1s#Q`2B6&^G3WiC-a=T&5k0ABV(Mnp%fK1nc(v^tB=oc|i8qMCHo zN>mf6&V9{l<+Jip&&E{EW}RL`%}#{_oN5TtRGez-FkK&qvU0>(d8<}OwJZZ8WaePG zDN&SSb*w(h)Z_HFVFseCNhJ}1IwDhwNM~020GV&c62dZk!~`F`B{=k|;&e)sVkJQg z;22k7timm5R^f_>Q$@STNh+if>7Qa+LEK6lrT9gK5#w)h$VI$0l7fKwwhnoSno%_z zOC=SZ${{b&P_ay=0I=-yp#wzbs}#ii&MFjZ)IY4w52xRsmaT2r+P2k{v$o}|N7p8b z-a{MdkJ2~zwTX9U3ykT#@K3_;p8L|U&9%X7tfu)oVO-&OadJQ_upU?f&jGF z`uycFirTJKq+ z%qSgV{t8pP-&R$(IlyZrijc)|7rn4U%rm#YryPIaurs9LwY3A#969Nz6x9rt$6l#n zJFIS&b$Z&$^GfZbqEv(|^1CQPzUE!DSHD<2YZ#&c{2StFLvk+PIvdD*uFq|EtJEbyc*%ZW-0HOc{F+XV$ehrc~_RdJgQlp1_`Q zuP8^2D)v%O#a?v|_Iz8rm-LGxFS?(d7m2#+h*)>1`n5cPuzHMEwf7q7zWsjAFK=Hv zU(5La_eKtYfazu^AQX-#8r%^MAA@yQ-$ZgTLh>qb596or7yQnZE zsZtmTWw=$_c`lhs3O>l3;={g&WP1(j6bmm%sfAP`o`?&mm%OcCK>{xcie5@dnY5tj z5&~L*Y9XE$xu6#HgOaL=1_(zA=v-AAbk+{kr4uwck*ax|nxZMX70BEqMVsb$g~`B0 zf}&S*bGVV<-iCZogtUEjcIxZ|t7t(Hk&jz3r;;RxjPuDjBI~y*fQ}|J2`Ok&^F1}a zQ_Q7oa*~YOTH?=_#$#PXnH8aYBcNE+795nps#1DXj+$ag2*M9joT%Ecl^Z1^q6vJf ziDNB!R7XyV5d6h8xF*@>8pG+`Xj^ZSot@a(nd=+NLFpV{3m4r@8>8!^vbzhryK)1k zbFa_mfN@`1J6B{(KW)Eu<%8aPOmm4(=glqmnAQjG=8ci{5!rnNyN}539_;SP4&~fE zIXBojjoqj7?#Z=t1=qoi?)7fj)rno5va1`ry0gKYt2^f!kzM21HJ*1(tW6c3%hm&f z`?_?`&{D8CufM(#TaV=}9mVFh&BafIp9`NZ;6sD?=Hu6W`BPQcaLKKN!foE`_Ib$8SJ0gw&**(JCwfZz#~fUJn*@LYU(I-g?2gFHZVks zAzBP*S*b=}p~YWpJg{lLF^UxbPGQd}*)xeflO#TN5+4VNkK^-3%F$YAdC@M~ zhzkdCVRERs(@fB%Sd&-c{Gt%bNU5|~x)XJjMdFfxq(nv%)hi>#QWh`46|=hHAd=81 zw$cg`S{5Lu6H6DU6${DB6*0N+RXnvD&rp(sH8U;=NJM18P%k-4mrQW@DJ6R9f_b}? z=BbxZig5(IWYXM8Gy_Uxc@{HJJkruM{ZGn&pKAXb)&E#e(Z2iCq5IUaf9bXK$!#;G lacl-L-Lb9F(@A5m*weYE2`L(`=Q{u`Z+DR2M) delta 724 zcmb7BJ#W)s5PmPt>#xL4_(;=~l7gVc=y zDS8)#_yb*7@<-^vVku)c1`2#pWD0aPB^huw& z>+pWo>m?oG3%|Utdj=W>m;0t?p+#KZ5NID*UEv$Pxd*%$Lz&=2;w5_JW{N?GPvRh#1;fi+!Ob#m)#1PfYwh1q zQ%~h_xk<i4l>#-R_m&rB*8$Rf}c{Mm39YyJ2GLDmsZ=~)wTXm;cR5o~( zl39jQO`B^|oj%DMQJ9TK>BG?^83f_;6i4F}Gc>p-|H$PIi`%i`$2| z;($^>Pj*P~T?2qKacv>C&&1Y3v=?IMhpxf!+!m$!hyE#CKQHN^+Uxf!OadsT{{`}C Bh8zF@ diff --git a/gestaoRaul/orders/urls.py b/gestaoRaul/orders/urls.py index 957ecee..ee8d837 100644 --- a/gestaoRaul/orders/urls.py +++ b/gestaoRaul/orders/urls.py @@ -7,6 +7,7 @@ urlpatterns = [ path('preparing//', views.preparing, name='preparing'), path('finished//', views.finished, name='finished'), path('delivered//', views.delivered, name='delivered'), + path('notificacao/', views.notificacao, name='notificacao'), ] \ No newline at end of file diff --git a/gestaoRaul/orders/views.py b/gestaoRaul/orders/views.py index 37c9ce1..01a5c9a 100644 --- a/gestaoRaul/orders/views.py +++ b/gestaoRaul/orders/views.py @@ -1,6 +1,8 @@ # from datetime import timezone from django.utils import timezone from django.shortcuts import render +from django.http import JsonResponse, HttpResponse + from orders.models import Order from django.db.models import Q @@ -39,3 +41,79 @@ def delivered(request, order_id): fifteen_hours_ago = timezone.now() - timezone.timedelta(hours=15) orders = Order.objects.filter(queue__gte=fifteen_hours_ago ) return render(request, 'htmx_components/orders/htmx_list_orders_fila.html',{'orders': orders}) + + +def notificacao(request): + fifteen_hours_ago = timezone.now() - timezone.timedelta(hours=15) + ordersFila = Order.objects.filter(queue__gte=fifteen_hours_ago) + ordersPronto = Order.objects.filter(queue__gte=fifteen_hours_ago, finished__isnull=False) + print(len(ordersFila)) + print(len(ordersPronto)) + + grupoCozinha = request.user.groups.filter(name='Cozinha').exists() + grupoGarcom = request.user.groups.filter(name='Garçom').exists() + grupoGerente = request.user.groups.filter(name='Gerente').exists() + + if grupoCozinha == True: + if 'fila' in request.COOKIES: + cookiesFila = int(request.COOKIES['fila']) + if len(ordersFila) > cookiesFila: + return JsonResponse({ + 'notificacao': 'true', + 'fila': len(ordersFila), + 'pronto':len(ordersPronto), + 'titulo': 'Pedido para: '+ ordersFila[len(ordersFila)-1].id_comanda.name, + 'corpo': ordersFila[len(ordersFila)-1].id_product.name, + }) + else: + return JsonResponse({ + 'notificacao': 'false', + 'fila': len(ordersFila), + 'pronto':len(ordersPronto), + }) + else: + return JsonResponse({ + 'notificacao': 'true', + 'fila': len(ordersFila), + 'pronto':len(ordersPronto), + 'titulo': 'Pedido para: '+ ordersFila[len(ordersFila)-1].id_comanda.name, + 'corpo': ordersFila[len(ordersFila)-1].id_product.name, + }) + + elif grupoGarcom == True and grupoGerente == False: + + if 'pronto' in request.COOKIES: + cookiesPronto = int(request.COOKIES['pronto']) + if len(ordersPronto) > cookiesPronto: + return JsonResponse({ + 'notificacao': 'true', + 'fila': len(ordersPronto), + 'pronto':len(ordersPronto), + 'titulo': ordersPronto[len(ordersPronto)-1].id_comanda.name, + 'corpo': ordersPronto[len(ordersPronto)-1].id_product.name, + }) + else: + return JsonResponse({ + 'notificacao': 'false', + 'fila': len(ordersPronto), + }) + else: + return JsonResponse({ + 'notificacao': 'false', + 'fila': len(ordersPronto), + 'pronto':len(ordersPronto), + 'titulo': ordersPronto[len(ordersPronto)-1].id_comanda.name, + 'corpo': ordersPronto[len(ordersPronto)-1].id_product.name, + }) + + + else: + return JsonResponse({ + 'notificacao': 'false', + 'fila': len(ordersPronto), + 'pronto':len(ordersPronto), + 'titulo': ordersPronto[len(ordersPronto)-1].id_comanda.name, + 'corpo': ordersPronto[len(ordersPronto)-1].id_product.name, + }) + + \ No newline at end of file diff --git a/gestaoRaul/templates/static/comandas/js/comandas.js b/gestaoRaul/templates/static/comandas/js/comandas.js index 7c26dd5..57a19dc 100644 --- a/gestaoRaul/templates/static/comandas/js/comandas.js +++ b/gestaoRaul/templates/static/comandas/js/comandas.js @@ -1,3 +1,8 @@ + +document.cookie = `pronto=0`; + + + function openModal() { document.getElementById('Modal-create-comanda').style.display = 'block'; // HTMLDialogElement.show() @@ -20,4 +25,61 @@ document.getElementById('openModal').addEventListener('click', openModal); // closeModal(); // } // ); - \ No newline at end of file + + + +function mostrarNotificacao(titulo,corpo,grupo) { + if (Notification.permission != 'granted') { + Notification.requestPermission().then(function(permission) { + if (permission == 'granted') { + var notification = new Notification(titulo, { + body: corpo, + icon: 'https://example.com/icon.png' + }); + } + }); + } else { + var notification = new Notification(titulo, { + body: corpo, + icon: 'https://imagecolorpicker.com/imagecolorpicker-preview_b.avif', + image: 'https://imagecolorpicker.com/imagecolorpicker-preview_b.avif', + + }); + } +} + +function notificacao(){ + + var resposta = fetch(`/pedidos/notificacao/`, {method: 'GET', + headers: {'Content-Type': 'application/json', + },}) + .then(response => response.json()) + .then(data => { + if (data['notificacao'] == 'true'){ + console.log('verdadeiro') + document.cookie = `pronto=${data['pronto']}`; + // navigator.vibrate(200); + // navigator.vibrate([200, 100, 200]); + mostrarNotificacao(data['titulo'], data['corpo'],'Cozinha') + console.log(data['notificacao']) + + }else{ + document.cookie = `pronto=${data['pronto']}`; + console.log('falso') + console.log(data['notificacao']) + console.log('notificação foi false') + } + // var produtos_mais_vendidos = data.produtos_mais_vendidos + + }) + .catch(error => { + alert('Erro verificar notificação:', error) + console.error('Erro verificar notificação:', error); + }); + + } + + +setInterval(()=> { + notificacao() +}, 10000) diff --git a/gestaoRaul/templates/static/orders/js/orders.js b/gestaoRaul/templates/static/orders/js/orders.js index e7197f9..0d38715 100644 --- a/gestaoRaul/templates/static/orders/js/orders.js +++ b/gestaoRaul/templates/static/orders/js/orders.js @@ -1,4 +1,4 @@ - +document.cookie = `fila=0`; function openTab(evt, etapa) { @@ -48,33 +48,64 @@ function openTab(evt, etapa) { - function mostrarNotificacao() { + function mostrarNotificacao(titulo,corpo,grupo) { if (Notification.permission != 'granted') { Notification.requestPermission().then(function(permission) { if (permission == 'granted') { - var notification = new Notification('Nova Mensagem', { - body: 'Você tem uma nova mensagem!', + var notification = new Notification(titulo, { + body: corpo, icon: 'https://example.com/icon.png' }); } }); } else { - var notification = new Notification('Nova Mensagem', { - body: 'Você tem uma nova mensagem!', - icon: 'https://example.com/icon.png' + var notification = new Notification(titulo, { + body: corpo, + icon: 'https://imagecolorpicker.com/imagecolorpicker-preview_b.avif', + image: 'https://imagecolorpicker.com/imagecolorpicker-preview_b.avif', + }); } } +function notificacao(){ + + var resposta = fetch(`/pedidos/notificacao/`, {method: 'GET', + headers: {'Content-Type': 'application/json', + },}) + .then(response => response.json()) + .then(data => { + if (data['notificacao'] == 'true'){ + document.cookie = `fila=${data['fila']}`; + // navigator.vibrate(200); + // navigator.vibrate([200, 100, 200]); + mostrarNotificacao(data['titulo'], data['corpo'],'Cozinha') + + }else{ + console.log(data['notificacao']) + console.log('notificação foi false') + } + // var produtos_mais_vendidos = data.produtos_mais_vendidos + + }) + .catch(error => { + alert('Erro verificar notificação:', error) + console.error('Erro verificar notificação:', error); + }); + + } -let i = 0; -while (i < 10) { - setTimeout(function() { - mostrarNotificacao();}, 3000); -} +setInterval(()=> { + notificacao() +}, 10000) -setTimeout(function() { - mostrarNotificacao();}, 3000); + +// setTimeout(function() { +// mostrarNotificacao();}, 2000); + + + // mostrarNotificacao() + // notificacao() \ No newline at end of file