From 37428e8cc72df042cb41ba418991d075cc42a123 Mon Sep 17 00:00:00 2001 From: Welton Moura Date: Tue, 22 Jul 2025 18:22:41 -0300 Subject: [PATCH] =?UTF-8?q?feat:=20criado=20func=C3=A7=C3=B5es=20de=20movi?= =?UTF-8?q?menta=C3=A7=C3=A3o=20de=20estoque?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../__pycache__/htmx_views.cpython-312.pyc | Bin 5674 -> 6878 bytes gestaoRaul/balcao/htmx_views.py | 47 +++++++++++- .../__pycache__/admin.cpython-312.pyc | Bin 444 -> 644 bytes .../__pycache__/htmx_views.cpython-312.pyc | Bin 5418 -> 5609 bytes .../__pycache__/models.cpython-312.pyc | Bin 6359 -> 8765 bytes .../__pycache__/views.cpython-312.pyc | Bin 12078 -> 12525 bytes gestaoRaul/comandas/admin.py | 4 +- gestaoRaul/comandas/htmx_views.py | 29 ++++++- gestaoRaul/comandas/models.py | 72 +++++++++++++++++- gestaoRaul/comandas/views.py | 19 ++++- gestaoRaul/db.sqlite3 | Bin 425984 -> 425984 bytes .../__pycache__/admin.cpython-312.pyc | Bin 349 -> 548 bytes .../__pycache__/models.cpython-312.pyc | Bin 4366 -> 3948 bytes gestaoRaul/products/admin.py | 7 +- gestaoRaul/products/models.py | 9 --- 15 files changed, 164 insertions(+), 23 deletions(-) diff --git a/gestaoRaul/balcao/__pycache__/htmx_views.cpython-312.pyc b/gestaoRaul/balcao/__pycache__/htmx_views.cpython-312.pyc index 8fa7aeb74ee95790f92be3e8e8cb8591a4af6dfb..47e273384ef50ef489a9edcc4b84dd4002ce67b3 100644 GIT binary patch delta 2888 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 diff --git a/gestaoRaul/balcao/htmx_views.py b/gestaoRaul/balcao/htmx_views.py index 8fa028e..5ab531a 100644 --- a/gestaoRaul/balcao/htmx_views.py +++ b/gestaoRaul/balcao/htmx_views.py @@ -6,7 +6,7 @@ from django.contrib.auth.models import User -from comandas.models import Comanda, ProductComanda +from comandas.models import Comanda, ProductComanda, StockMovementType, StockMovement from mesas.models import Mesa from products.models import Product from payments.models import Payments @@ -30,7 +30,19 @@ def addProductBalcao(request, product_id, comanda_id, qtd): for i in range(qtd): product_comanda = ProductComanda(comanda_id=comanda_id, product_id=product_id) product_comanda.save() - Product.subStock(Product.objects.get(id=product_id), qtd) + product = Product.objects.get(id=product_id) + comanda = Comanda.objects.get(id=comanda_id) + user = User.objects.get(id=request.user.id) + typeMovement = StockMovementType.objects.get(name="Venda - Balcao") + + StockMovement.subTransactionStock( + product=product, + movement_type=typeMovement, + comanda=comanda, + user=user, + qtd=1, + obs= "Vendido no balcão" + ) consumo = ProductComanda.objects.filter(comanda=comanda_id) total = 0 @@ -44,7 +56,20 @@ def addProductBalcaoTeclado(request, product_id, comanda_id, qtd): for i in range(qtd): product_comanda = ProductComanda(comanda_id=comanda_id, product_id=product_id) product_comanda.save() - Product.subStock(Product.objects.get(id=product_id), qtd) + product = Product.objects.get(id=product_id) + comanda = Comanda.objects.get(id=comanda_id) + user = User.objects.get(id=request.user.id) + typeMovement = StockMovementType.objects.get(name="Venda - Balcao") + + StockMovement.subTransactionStock( + product=product, + movement_type=typeMovement, + comanda=comanda, + user=user, + qtd=1, + obs= "Vendido no balcão" + ) + consumo = ProductComanda.objects.filter(comanda=comanda_id) total = 0 for produto in consumo: @@ -54,9 +79,23 @@ def addProductBalcaoTeclado(request, product_id, comanda_id, qtd): @group_required(groupName='Garçom') def removeProductBalcao(request, productComanda_id): product_comanda = ProductComanda.objects.get(id=productComanda_id) + comanda = product_comanda.comanda + product = product_comanda.product + user = User.objects.get(id=request.user.id) + typeMovement = StockMovementType.objects.get(name="Estorno") + consumo = ProductComanda.objects.filter(comanda=product_comanda.comanda) + StockMovement.sumTransactionStock( + product=product, + movement_type=typeMovement, + comanda=comanda, + user=user, + qtd=1, + obs= "Excluido do balcão" + ) + + product_comanda.delete() - Product.addStock(Product.objects.get(id=product_comanda.product.id), 1) total = 0 for produto in consumo: diff --git a/gestaoRaul/comandas/__pycache__/admin.cpython-312.pyc b/gestaoRaul/comandas/__pycache__/admin.cpython-312.pyc index ac25a4db9c1e16af3461b512c2ec7e42dd047ca2..30aaef4981b506fac5b130f25e472722f243bb2f 100644 GIT binary patch delta 350 zcmdnP+``ItnwOW00SJEHuFqg)oX97^#K1UFLry7|HHtNtEsBkiA(b(U52OMWWC>18 zP!z>3F-4AW(b`;nNd;q3WM?u2G(}2My~4&!WS8YFNmmKVNgR6n&5ktL8*urs2>2J C$U?{f delta 143 zcmZo+-NVdxnwOW00SLAze@&msFp*D!sfS^rhMW{5Ln>nySOz4E09m{fGZaO!OU#p- ztidSE$TZo8QIgqDlYMd(qrv1YjOh}*K>dtBT&xcyJ}@&fGTvoSc+Oxv*^Eh%<0^x4 I5jRjA0B=(k{r~^~ diff --git a/gestaoRaul/comandas/__pycache__/htmx_views.cpython-312.pyc b/gestaoRaul/comandas/__pycache__/htmx_views.cpython-312.pyc index 63744908534697844750cd62726e2ab346de32e3..c57a7db3ec8cbe46268eb234d682597310464855 100644 GIT binary patch delta 2382 zcmbtWU1%It6rS0go&B4c{h8e~o83(|f34Fbn_#OCHI~+-sg?eOCat;%VX}9cZo0D* z@66UlCu|;k5dZ2(5BEB?KNEo`*f(k{1776gZOe-7Yc$d7DQbtNP46Y zarORkRF4&6E*~hzb-5tBe6XC*lZB+-R%mnOP;C5 zIjeUTI$6fUXdOsejjXT~O^yCg^j&5JpwU(6a?P=(nQBmcn>F`@Ro-Upe!`mAX6;!_ zDs2xSh{8G?QZ0?{WSSisr{XD7!wTp4#|&MqAk~p3v4N^Zt0l*#ETeetm~mdywTd;p zxS%=WV=8imy~OS#dpyTHwwK%&5}75=_Ra?&-s5Y@XNAb1FH2@T2`@7*kguXLD-nUu za7(-uZJOi}#I5?=8qwoRew&+*KYkBLh(GrX!+gl%cdP^)?B4ODkIk+6H}46M1D>uI z|II6CrCRscL7Q9gG^C{vWCVEA9WDFTjsk!MuaZe_@5E|wGi2E6YB|m4THMxd`)rz= z&7%+suL>)C!@@E&R4=(NX7W~l%NdDCLJ<_T!}C&0x3!}f)$as!yC{x-t}C>Wu6dDs zmEQy=KrL!dU5m=APoLNpI`Xp^Cwuw-fx{YT-DWc=VSDV59e}Tfl2?5z-iB?8S!9&9 z;|^!37u1Oxtm7#m$A8GQ3|ui_94cN_*T~nrGXA!F=t8kvEg>U^)LgMK4+`)27a9}c zhwuPI)<4}?&&o--xnmehoPq_x2Z z!75_SSkNlXHx?hEI*sfX4zgpnmW8k<2BSHFbChC;jLIb%ig%1MQ*5)BR{cYWLZevx*2_g<#TYhoy6kZwPV1Zq(lkg zEu3!sT!;I+ z{bQ6nuJn>4^3iMunpZ1xM!sm!bW5{&wQ8Ns>ju)wCJvB`a~4Xo0)$i#8dlh|34!9!5Z zxf0gSwwIB+S+p(qE$oeOY@)gY%&Y)q$Ug)EKE!{|eErsI&xLNuow)PX;Q5N~&-gJSh`0)p9>@d)b{Awlm@RfaotaL7r9zi}By$8K8`9z=uqAI|NR1E) z-b9-Xh%(*WI~6CPHn-B|?h%{Yz2P=*!t%0S9CIFBi>6}iWju~;>{Hyu?&FW}+w67Q z6}GONVQEJk``Cy*;dGQ8d5QIgqrT5eb!TWp~*Ly(h|s zbJO1NEub}&3eVLYruwFO@eZ!ra-{A^&ri>B?9P^SmF>H_*;%)N#V zOWj?%me;bTQMWH?CiQR=1viD+sk;nQHCGKP3FUgOU}}^GKyk0o5?Rff{QT9Nkt=Ex z+Dc(ws2>76Dj^GIDZ5Oap!#xT(b^(8imI+r7q_Q;>>E#F;y8o^oBl;$TqLUC!4s)8 zn^Oyvk1e7D5a=vXqS3ltH@%1(Qiea~_L6J-3xzVM#ze;~&`D7{mv$;qmm{Jc~f z7_SbD*9Io51Cu*)@}4}kerb>O`OL9Bsk*ZJA>!t@2& z!IhM=(S{Vq^aO~L5aKY@H?)+UJ`IYmS);`q5oI!96ncAm=?MEuiZ~~^HqXA3rtm0B zDqY+Cfj_VUUxM-V~qDv o*FNgrNBuvcCx1a_SU#2vrEuU+JF*>rWaH@f3}&}ummP52UpD@z4FCWD diff --git a/gestaoRaul/comandas/__pycache__/models.cpython-312.pyc b/gestaoRaul/comandas/__pycache__/models.cpython-312.pyc index 3c572ee514e6a6be879b6ce1759fa9af18d2fd37..793c12ed56734817ee32a06d5016d583b54c2fb0 100644 GIT binary patch delta 3561 zcmcImU2Gf25#Hs`@%Vd3@mCT_(fSQ5MTrt7mK@t?V#7%rTXA9sa8;xN#XCEs`6KTg z9V?~F0P%wzIJJc}Vj~YhUV>Jzkv!-n4+)U>Jj6_E@NjM5w#bXo7q)iVqCaSN_DDyP zBRfu!1^M0V?A*@m+|2B>ras;s_|)(BAU5{?tMT$bqRW9e7MI6%O_aTJUW^o^2qjD~7{# z0zcAkGhO>hRjK85Q|=JEs^!IMMXjtJ!IQSWAhXhRRBEM?>0Bt~Dn~Om0zA?~Kd?uI z9w0;XQ~Lmpum0ISgt3Q8&J_02N#_fh0eD%^^qgMPOuMENGQ>D5h>XB%g8+UGbjA6l zhcjWGUk*lAuL#3?2?UlYX^cr{dIC5|pXvFb zY{fNOAt8W6^imHIIP(ydLwmf3fNQyWH5cl|0{^-L^tJFrFwNH1JNx7CFB;s>go}YA zcx0IN>Vifl+0?Wj)0MoysP1qx0%GgtQ_TE}NbmAdv2&c;3`P{4YiAZ+M_2G=h8cJ#1ft~a`h%;2#aD?$Z* zX`ZOZY6YSyrbEjeR|)LD;@%Lg?f~W zjbwildG55w@J3qRMAMu2tvB_%7lkC#j`h&D;_=XXv-)Vx#(VYU+@}oZ%ZC;%Hu6L`?;L` z(A}Co&}2XPz%@C$X7S;s{O~pTk#-EF9=O$qIeLOFUG6uSNA+-KZpy@n{Y#Q5i8{L-$bIB-pjGsZdJ8Q+@$UaY^lO6>ghRRa9^ z^;lmf?olNuuM)q!OO@Drw<_`d*9dm4+<%QYf7cpupGI$9AvW5!d4)iz!7BtQu;5yO%$zYS5YTR#9b%WbTj<%B1&E)j|mr#cx-M)238Oii_ zODDQL@{`8;hRzhLL{Ukha%4j{W;*t%dXD^@Iqfa*9(3)ekP#lf8X7qxT3y>o#>?1d zZ@{&iN!_ET;;o{{J~bk|SLD5cgS|-}0^o&~cale8$~&qTfPx#q^!=!!t4CC_r=XS; zUa!d>j$4%o*Vv_Y7|g~0(DPpypUJJIWnb`*tT zh8+BhH|>nQ`*a(zhY=lX+u8FEa;)uS&$fX4a@z%zhyp!rH&7nNy9qC~XYqI6B4zFI z_uUvfNB@c#SgrAZO0gYff8S!@#|>hD^Wmr@H%>oo{djO UUcz|v{GN+@m-l{!fab>j53HN*UH||9 delta 1439 zcmah}OKcNI7~b)7z25cum4-mDVdiFVEiGk-A|Rnj)UxZm+IXjc#faiFCKkY$uAX*fA&B)T_F*Deow@ zdQPzul$w-3(rn8bx3EF%@C)gx;EkSsE0a|va-aAVs zLQ`oG8jrXg$Klas$8t|sLVz4(1e_;aw>o~S=C(erS+;#XBx%U9-@`@H-y@L`GL*m_ z;xqe>&Fq_fn@5_|vmhdO?RXSGW3$osDg`8Bo^SabkB2=UU>NsTpe$ZcLeM3!E73nS zN#eZT&Ghwtij~QjfnF0KhwzesN*Mal#z-NHu$k#9E6TItZJDGGMd9#>fT7@+VfLeX zh?IL;;yXg7*+p$k_r z*oF{B*p5&^co{)vGLF_Bgh_T;-@1Pq&7A^x!fLmjM%{9Km_iaO0q-Kbj_{-+yK#yz zAcl9A{bg=qUly~hZN%BUu@ICA{a7Y;$+$rb_Ic`P0jt7e9k=mehw{V6JNI;TqV7B`UkRKirExmPJbT?eAR(ZGLG{@2v`Jlm z5l|%D^pLDI*I5q*%`Rm3rXR~X5X%z#Hw!UIE-}c>C6~n4>ow|K%MFm2Y*~T*k$)xg ze3goQpOP|*6^^eys|c>Pz^2e}Pi|-@kIYlwf)B(g3u1WqS2(BK%9nr6jeem9ZC?@G zk;>*5R9uQo6-xm{whA)N2+k)EUPV9+aucW{TTyQ{E!Va{*8V8^m(i~uaD94`!d!zo zHdx3XN2nrTGXWbDbP+?_kP*C(oQC*@7~b7=g`BFI*xn4|_0lCe3yH zMR*gy``X4HAId1>} diff --git a/gestaoRaul/comandas/__pycache__/views.cpython-312.pyc b/gestaoRaul/comandas/__pycache__/views.cpython-312.pyc index 4ba729169134720ae14c5fbd052fcde0ea8656df..53182cc2b132f502c5b275befc38db193ea912bc 100644 GIT binary patch delta 3585 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 delta 3226 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 str: return f"{self.name}" - def subStock(self, qtd): - self.quantity -= qtd - self.save() - - def addStock(self, qtd): - self.quantity += qtd - self.save() - class ProductComponent(models.Model):