From 6090ac621efc24c96705be8230a293f4d4d55c23 Mon Sep 17 00:00:00 2001 From: Bernd Bestel Date: Tue, 2 Oct 2018 18:17:26 +0200 Subject: [PATCH] Prevent deletion of products with current stock (closes #81) --- localization/de.php | 2 ++ public/viewjs/products.js | 71 +++++++++++++++++++++++++-------------- 2 files changed, 48 insertions(+), 25 deletions(-) diff --git a/localization/de.php b/localization/de.php index 60503791..50e8d46c 100644 --- a/localization/de.php +++ b/localization/de.php @@ -265,6 +265,8 @@ return array( 'The current picture will be deleted when you save the product' => 'Das aktuelle Bild wird beim Speichern des Produkts gelöscht', 'Select file' => 'Datei auswählen', 'Image of product #1' => 'Bild des Produkts #1', + 'This product cannot be deleted because it is in stock, please remove the stock amount first.' => 'Dieses Produkt kann nicht gelöscht werden, da es auf Lager ist, bitte zuerst den Bestand entfernen.', + 'Delete not possible' => 'Löschen nicht möglich', //Constants 'manually' => 'Manuell', diff --git a/public/viewjs/products.js b/public/viewjs/products.js index 79aec640..838c725d 100644 --- a/public/viewjs/products.js +++ b/public/viewjs/products.js @@ -35,33 +35,54 @@ $(document).on('click', '.product-delete-button', function (e) var objectName = $(e.currentTarget).attr('data-product-name'); var objectId = $(e.currentTarget).attr('data-product-id'); - bootbox.confirm({ - message: L('Are you sure to delete product "#1"?', objectName), - buttons: { - confirm: { - label: L('Yes'), - className: 'btn-success' - }, - cancel: { - label: L('No'), - className: 'btn-danger' + Grocy.Api.Get('stock/get-product-details/' + objectId, + function(productDetails) + { + var stockAmount = productDetails.stock_amount || '0'; + + if (stockAmount.toString() == "0") + { + bootbox.confirm({ + message: L('Are you sure to delete product "#1"?', objectName), + buttons: { + confirm: { + label: L('Yes'), + className: 'btn-success' + }, + cancel: { + label: L('No'), + className: 'btn-danger' + } + }, + callback: function (result) + { + if (result === true) + { + Grocy.Api.Get('delete-object/products/' + objectId, + function (result) + { + window.location.href = U('/products'); + }, + function (xhr) + { + console.error(xhr); + } + ); + } + } + }); + } + else + { + bootbox.alert({ + title: L('Delete not possible'), + message: L('This product cannot be deleted because it is in stock, please remove the stock amount first.') + '

' + L('Stock amount') + ': ' + stockAmount + ' ' + Pluralize(stockAmount, productDetails.quantity_unit_stock.name, productDetails.quantity_unit_stock.name_plural) + }); } }, - callback: function(result) + function(xhr) { - if (result === true) - { - Grocy.Api.Get('delete-object/products/' + objectId, - function(result) - { - window.location.href = U('/products'); - }, - function(xhr) - { - console.error(xhr); - } - ); - } + console.error(xhr); } - }); + ); });