feat: auto-aggiunta a Bring! quando un prodotto finisce

- useFromInventory controlla se il prodotto è esaurito ovunque (qty=0 in tutte le location)
- Se finito, lo aggiunge automaticamente alla lista Bring! con nome e marca
- Toast notifica '🛒 Prodotto finito → aggiunto a Bring!' in tutte le UI (ricetta, uso diretto, usa tutto)
- Prosciutto crudo light e Philadelphia Light aggiunti manualmente a Bring!
This commit is contained in:
dadaloop82
2026-03-10 18:18:40 +00:00
parent b9f3eb3301
commit 77ed2d6964
3 changed files with 45 additions and 1 deletions
+36 -1
View File
@@ -456,7 +456,42 @@ function useFromInventory(PDO $db): void {
$stmt = $db->prepare("INSERT INTO transactions (product_id, type, quantity, location) VALUES (?, 'out', ?, ?)");
$stmt->execute([$productId, $quantity, $location]);
echo json_encode(['success' => true, 'remaining' => $newQty]);
// Auto-add to Bring! if product is completely finished (no inventory left anywhere)
$addedToBring = false;
if ($newQty <= 0) {
$stmt = $db->prepare("SELECT SUM(quantity) as total FROM inventory WHERE product_id = ? AND quantity > 0");
$stmt->execute([$productId]);
$totalLeft = (float)($stmt->fetchColumn() ?: 0);
if ($totalLeft <= 0) {
// Get product name and brand for Bring!
$stmt = $db->prepare("SELECT name, brand FROM products WHERE id = ?");
$stmt->execute([$productId]);
$product = $stmt->fetch();
if ($product) {
try {
$auth = bringAuth();
if ($auth) {
$listUUID = $auth['bringListUUID'];
$bringName = italianToBring($product['name']);
$spec = $product['brand'] ?: '';
$body = http_build_query([
'uuid' => $listUUID,
'purchase' => $bringName,
'specification' => $spec,
]);
$result = bringRequest('PUT', "https://api.getbring.com/rest/v2/bringlists/{$listUUID}", $body);
$addedToBring = ($result !== null);
}
} catch (Exception $e) {
// Silently fail — don't block inventory operation
}
}
}
}
echo json_encode(['success' => true, 'remaining' => $newQty, 'added_to_bring' => $addedToBring]);
}
function updateInventory(PDO $db): void {
+9
View File
@@ -1845,6 +1845,9 @@ async function submitUseAll() {
showLoading(false);
if (result.success) {
showToast(`📤 ${currentProduct.name} terminato!`, 'success');
if (result.added_to_bring) {
setTimeout(() => showToast('🛒 Prodotto finito → aggiunto a Bring!', 'info'), 1500);
}
showPage('dashboard');
} else {
showToast(result.error || 'Errore', 'error');
@@ -1868,6 +1871,9 @@ async function submitUse(e) {
showLoading(false);
if (result.success) {
showToast(`📤 Usato ${qty} di ${currentProduct.name}. Rimasti: ${result.remaining}`, 'success');
if (result.added_to_bring) {
setTimeout(() => showToast('🛒 Prodotto finito → aggiunto a Bring!', 'info'), 1500);
}
showPage('dashboard');
} else {
showToast(result.error || 'Errore', 'error');
@@ -2701,6 +2707,9 @@ async function useRecipeIngredient(idx, productId, location, qtyNumber, btn) {
} catch (e) { /* ignore */ }
showToast('📦 Ingrediente scalato dalla dispensa!', 'success');
if (result.added_to_bring) {
setTimeout(() => showToast('🛒 Prodotto finito → aggiunto a Bring!', 'info'), 1500);
}
} else {
btn.disabled = false;
btn.textContent = '📦 Usa';
BIN
View File
Binary file not shown.