From 067a4acb5ce59203e6b81f7ae49087d24d2f67df Mon Sep 17 00:00:00 2001 From: dadaloop82 Date: Sun, 15 Mar 2026 17:47:29 +0000 Subject: [PATCH] Add: mostra totale aggiornato nel toast + auto-rimuovi da Bring dopo acquisto --- api/index.php | 49 ++++++++++++++++++++++++++++++++++++++++++++++- assets/js/app.js | 18 ++++++++++++++++- data/dispensa.db | Bin 155648 -> 167936 bytes index.html | 2 +- 4 files changed, 66 insertions(+), 3 deletions(-) diff --git a/api/index.php b/api/index.php index dd5681f..cf9ff8f 100644 --- a/api/index.php +++ b/api/index.php @@ -521,16 +521,63 @@ function addToInventory(PDO $db): void { $stmt = $db->prepare("UPDATE inventory SET quantity = ?, expiry_date = COALESCE(?, expiry_date), updated_at = CURRENT_TIMESTAMP WHERE id = ?"); $stmt->execute([$newQty, $expiry, $existing['id']]); } else { + $newQty = $quantity; // Insert new inventory entry $stmt = $db->prepare("INSERT INTO inventory (product_id, location, quantity, expiry_date) VALUES (?, ?, ?, ?)"); $stmt->execute([$productId, $location, $quantity, $expiry]); } + // Get total across all locations + $stmt = $db->prepare("SELECT SUM(quantity) FROM inventory WHERE product_id = ? AND quantity > 0"); + $stmt->execute([$productId]); + $totalQty = (float)($stmt->fetchColumn() ?: $newQty); + + // Get product unit info for display + $stmt = $db->prepare("SELECT unit, default_quantity, package_unit FROM products WHERE id = ?"); + $stmt->execute([$productId]); + $prodInfo = $stmt->fetch(); + // Log transaction $stmt = $db->prepare("INSERT INTO transactions (product_id, type, quantity, location) VALUES (?, 'in', ?, ?)"); $stmt->execute([$productId, $quantity, $location]); - echo json_encode(['success' => true]); + // Auto-remove from Bring! if product is on the shopping list + $removedFromBring = false; + try { + $stmt = $db->prepare("SELECT name FROM products WHERE id = ?"); + $stmt->execute([$productId]); + $prodName = $stmt->fetchColumn(); + if ($prodName) { + $auth = bringAuth(); + if ($auth) { + $listUUID = $auth['bringListUUID']; + $bringKey = italianToBring($prodName); + $listData = bringRequest('GET', "https://api.getbring.com/rest/v2/bringlists/{$listUUID}"); + if ($listData && isset($listData['purchase'])) { + foreach ($listData['purchase'] as $item) { + if (strcasecmp($item['name'] ?? '', $bringKey) === 0) { + $body = http_build_query(['uuid' => $listUUID, 'remove' => $bringKey]); + bringRequest('PUT', "https://api.getbring.com/rest/v2/bringlists/{$listUUID}", $body); + $removedFromBring = true; + break; + } + } + } + } + } + } catch (Exception $e) { + // Silently fail + } + + echo json_encode([ + 'success' => true, + 'new_qty' => $newQty, + 'total_qty' => $totalQty, + 'unit' => $prodInfo['unit'] ?? 'pz', + 'default_quantity' => (float)($prodInfo['default_quantity'] ?? 0), + 'package_unit' => $prodInfo['package_unit'] ?? null, + 'removed_from_bring' => $removedFromBring, + ]); } function useFromInventory(PDO $db): void { diff --git a/assets/js/app.js b/assets/js/app.js index bba1cc0..f731886 100644 --- a/assets/js/app.js +++ b/assets/js/app.js @@ -2948,7 +2948,23 @@ async function submitAdd(e) { showLoading(false); if (result.success) { - showToast(`✅ ${currentProduct.name} aggiunto!`, 'success'); + // Build quantity info for toast + let qtyInfo = ''; + if (result.total_qty) { + const u = result.unit || 'pz'; + const unitLabels = { 'pz': 'pz', 'kg': 'kg', 'g': 'g', 'l': 'L', 'ml': 'ml', 'conf': 'conf' }; + const uLabel = unitLabels[u] || u; + if (u === 'conf' && result.package_unit && result.default_quantity > 0) { + const pkgLabel = unitLabels[result.package_unit] || result.package_unit; + qtyInfo = ` (totale: ${result.total_qty} ${uLabel} da ${result.default_quantity}${pkgLabel})`; + } else { + qtyInfo = ` (totale: ${result.total_qty} ${uLabel})`; + } + } + showToast(`✅ ${currentProduct.name} aggiunto!${qtyInfo}`, 'success'); + if (result.removed_from_bring) { + setTimeout(() => showToast('🛒 Rimosso dalla lista della spesa', 'info'), 1500); + } if (!spesaModeAfterAdd()) showPage('dashboard'); } else { showToast(result.error || 'Errore', 'error'); diff --git a/data/dispensa.db b/data/dispensa.db index 9a64122b80867185ab419b00c5ae3b0dec18e76f..6d71cec47d6ee8f1acaad6be62a3ad8a2cb152ba 100644 GIT binary patch delta 9180 zcmeHNdvp|4n!nYZ^rI@(MUW68#1t-=1QWWdtE*q=2m}$3M*syCM<_Z?Q_|^b`Vo>q z(y4$vWrVHu^v>+)IA>g(@d-qU4}{TC*T>9wSl7{WT*p~mXI*7M=gjEY@tisP-P_L; z&HS~04u|yZ`tGgoe)oI)?svc2BR_YJJVYOv&dxvxwZk9zceKq<%{Z~?VQ!j(dk<6E zxNo_yxv#kM+<$Q&b02c=jm?~NhI6#)cIceiZ+zTxwe_&=FNU3O&pLGG`}X0wXB`@| zkA8=3tV=M<8K?7tb1FTH`O@(_<}ue%`%z}P^B6m?Zq&Yw9+d2>k9kBu4i2T zV*88zO~-fXBeZdpZ?f21j7Rxda~utH)b$hRa;DQ^WjDGuupc`A-R`m1GoLtaX6|Ai zVV`p?<=%3AVILnm&;PzQJK5T52?#<^@`-|95M==!X06RY@(Q9P%IMzw0FMy#_yj@l zdL?uyPm(0r?-PSQ$>&E03v47$&>Qdx!Jro%D3C-EUi0~a!2sG{APIsDj9@|!%I?E7 zNeDc6g_?k=>-zZDF|6X6l6adskgRL0YMVvfX6R*fLpeLBEafJ?{JVgNKTfJq*~=O;^+ zlv8WVUN3i!)d!~9P7+e?Mr>9Kh4yDjvu~I*dxuDK&o0vJ*-4t+ zgQOW9AdTKnnvor~R*K5@;m_d={v1l<&s{0}xieX7okUTC+wsFd0)O^vV=oUawA5ti zHr8;AJa`rTzw}4+ztXSL&(c4p|AF2|57NE#CVCCMi1yKK#<7vB>)0ChoNF?Dp8FyF zB&^Bj%;JryM@=OnfOly3gs0I7Px^$XkveNLReUd7`7m7hFjV=ltMXxI{$XQ&=0T^m zk=l|}quM~_pdFPDeU%TH%7=96?G)f=WzY68+o6+`#no;+fA2E7G)yyGhksFiOc);= z_BWM!la(B<0ffHxd)uk<=>D-|_iadIVWxTL2Z(!t>*GY%dGrI%PPMnK{KInE?Gq`UJh5Zg>9P`LJ`7v&He5i9SNem?B(xV^^mG zQO%Z_lH@Mhg1XBiczm5guu~NC-=t1a;6+bJ@`SvB5=rJoe@K!-l8~FrPz!S{4*2-7 zlUnf1UaH43{)L5dS#yhQ)Gu=z?9{8{n;p~*RF1MyUE`lRsijn|(M~NIPcoFxI)2_o zO=cwUs_(Z zJYdOKR$8v6zMrzONXXz3i`&SeQ{wn!r>mEFe!g?N6i#twLGH6>C1>HfQW6n8^VhiB%6EaL#kl`S*j-h#%j~&7W;-_ zrOT?b@nCbc={QOWn<1j`sd+YXNb&eq$CQ}@Hv9aRRxI3Y0po&Tg> zW;`qeMFXu^xij1l7jS*;I^l}BTG@};2iOg4Q{6jthwE;tvoJ3*I~b8ZPamTd*n8Y` zcA;(sTQoZXztG`{Vo!iCqA#yMBzP*~210?5x^xR>LSZI{icG99&`&_nYkEZvdHe-Z zwo}Y=# zsB@PU2BVdU4JOSW05*-p?M6v_*z$wCoubJ#2tJuOV93hO?=P{?35%M`3W1?(A`7y= zbnU=vAwrB4mqNohKL`Qa{=_!`|0b*?i+2-D>*|AOC;pZ#GNJwm?^abSfxn5238^bn zWHMZ0vW$pAe9ZI)2F8N@iylb8vMXKWGF0MnB>(QEo)0i7nT$?I^Had25y#IiqE@Op z2fTiQv?kenA=v|nHa}V9vU36#Z>MBZEP-JY6O7DV+lz}CEH1`!p}ZLL`Y}SAxM0!^ z2`mS;@xWhq5(3>O1{lrfYsH21=ND2)s^)k*Jtog4sD23xA@H=NrrR2?-3}R^6 zhajS7t8`#MLgQ6BFvg%$RXQNq&I;(6sy%{?p03h?Qy?@}wL|owlT|t}P@of4J7A9N z@k@J1^rEM#bl@OGPgd!`afhC$+5skcyh;ZS2lUvqWtZ69gIydwTICh&y69(BJA?rG z={We4-*F9F_dUd+i^%nB_8hyV?i1!-W{UG&$8r1Pw)3^eYCgB_vRsWW8oKih->6%+ z!zn>**r3Y|lpd5M4$2JW!fBV%tM#gI5aCl=EVEgSMb@U3q_JY`&RHY1Xg(RI2FB)h(4weD}Q=sQ5N3FX_x3Y?Z=DxcI+DU}!9UgPIqY?}ksPB$*@ zmIac;N{P@z-I0_Qg0r8o`utVK<7c?sQ|qazjVm+hq?!tA$w)`}E5E=vbAHB}yqq$m zRujV$CyOGZ@Hrb{`dkd(!+OYVNEfu$QzPP=m!~t?3eX` zUgJWo?K7M4VG^HS!Ar_T@|9Xxj z-z2gpB%5|7$Z2Gsew}UsO-U^+x?JzfYpUX+;8v|q;n!}_qA^wBZ&DSAtd$Db5wsO4 z9Pur2HMd|RC1;8JDzB=z%f zl1Y%QC#gnyI*S(+Thr-8D&%&nP(q31x|dPyOhAIT65ROG#W?Z#6yx@HUAf~c^ElK% zLcVS-TxamnSO)CdVSMyy^Li5Jp5VlU5a&afG!<88^)HwaHNwO3Vunu;X*B2fxwq&OIt7mhtR=`y|K6QzzA^WK?`qit!W8F=zgkPMI{lT1x?BuGs?X3@yT zi_on{kFK7lqg|jJxuKEe90g}83Md3`*D_Ho;X+l3hc%wW9rkrV=cE?J0_EJdP?HMf z28?^A$#D{_?t}?$W~Z05UvUT5owq$09xsFkV+<;BjR#ChKrv72izIu%2(Wk)Ur2%~ z4DG{JNDrpzgM$DiO|S!k!Zo7riu=7TC8?z&3&Gs2S~9H}^%rh!65VkB=Y|VFysH#7 z4?Bw2`0A4>#(ifd<4vU@_uVFnUY>V%4UA##o7m46x zkyJuS@=KC^N;9e_8ymiDEW?IW#;lq=XaodfvD~<_t(`iwDTln*$+Bz7`;Vj zVKrhqUX62<%6o44DtbjGl7dX47j{&23*Nkx#hLKdR0qE<5(oT;#jR@++%O*S#P7zJ z*JYm$8h5=p%Q$|r)>!@yod-bjGQVstzjn=X-~mA2gJY8KR$`f+2rr6!CocsdV4>|& zV1J3>%~Ipr7T(d`fzeYnZOdM8JkyE^NgvkhIMm$Ko{z}cWL@4Sa-qILNyU`#!b}pN z2qsM^kSpbOuA$}`cb&1d2f$E(j&Si_SjpDp+>()^=+Aj0d1N8CdNMV`m~@WI-e}4} zmabjJgQJ|_jvboWEvI$jO_AkVhZ&m40<4VOo4oJX*+>p}r z=bpZnn#`?H!(q68j_}=NEVj%I9yk1Ezzshdz}aZ!UKK2Q9R@&ZM}AF`U*@BHo5c4+ z4hUb{Ve^_pHiRM$yNo-&n4T|d!fMO~19B#d>Z(pdXg07oG@VhR_=?{ttOA)K9@po7 zyMS^`!@pc8J4^`#W4TpObtH*#?w^)WT=>R`ehxdN$CMcZ$?MUt*PSqTaC#$7*&)Ng z8GHE$5w~b@z#K>{T8ZX*aMPzOSi5M|iUn(o`rm}IFxCyfo&dE4D-t8QQd=eyN&z_a zOq7lsD5H8%cYrK1$N~vkAulZd5@R7wso~xNTp!#V&IqtEEM%0J77lBvxDwuG)W7dr zM{;1F8~=2p0y4_(SS<4uiz1MBo5KOu`veRCRt^%1-*As{I)r|TV_Wqbpc+)~#HH=S qxf7pLSL81R$eFuM{|@dXHxY*_E(M5UnY+Vf)RERMOt;OPsV4(q%?e3xxvf1pe z5g$rJ9z<#V>NQ>jm9~kA4~lKCdi{85(x@1tBKqRD#6}B7#8M2J7w3xmKlH$vIiJiq zzd5JtXWI3rvA2wsB7~|Whb6N+U>y`@h~*Tk4Kpc!IHycVy-gm@;#+~S67!X6KW z@K)WnNw`Ke4_asKCE-sR%rc{&Ew#GoHeb%N_czQBhk=O}F)~Bld7tg*4YwSNq`)P?&0;|M5%8ZWe&C`L4exFF}5flI(lC z>Spqqf@(>ClC8N+N&;Rb4!QGocYq)HA=>TV)0Fu>@CGeK+cj}PbczLhf*<1vKAYWP z``H>stxHz7wak2Lo-woJWBMQcjkeK{JNd=IntH7~N zijeL*oTmn?aApt~B~tU*$(pdz86$AfsQ_5+_3O|8PC|-Udc7J7tDxr*G%8X#W5OaF zY>em#f>2&tJHG%%a$$7g;z+bM674w)LFb#BK)neLrOR;%L>&@?D!1Ff;6>NM?KJ%` zR-wXJc~dvQD8iqs^$vLqd*uHd!(RR0Fl71*TcAoQR7m#kIdVP!5vLS2hS!rT@&V<9 N%=(CUSH4#2^mpHM3k?7O diff --git a/index.html b/index.html index 87b8345..fab7b6d 100644 --- a/index.html +++ b/index.html @@ -884,6 +884,6 @@ - +