2019-09-16 09:35:20 +02:00
|
|
|
Grocy.Components.ProductAmountPicker = {};
|
|
|
|
Grocy.Components.ProductAmountPicker.AllowAnyQuEnabled = false;
|
|
|
|
|
|
|
|
Grocy.Components.ProductAmountPicker.Reload = function(productId, destinationQuId, forceInitialDisplayQu = false)
|
|
|
|
{
|
2019-09-21 13:08:42 +02:00
|
|
|
var conversionsForProduct = FindAllObjectsInArrayByPropertyValue(Grocy.QuantityUnitConversionsResolved, 'product_id', productId);
|
|
|
|
|
2019-09-16 09:35:20 +02:00
|
|
|
if (!Grocy.Components.ProductAmountPicker.AllowAnyQuEnabled)
|
|
|
|
{
|
|
|
|
$("#qu_id").find("option").remove().end();
|
|
|
|
$("#qu_id").attr("data-destination-qu-name", FindObjectInArrayByPropertyValue(Grocy.QuantityUnits, 'id', destinationQuId).name);
|
2020-11-10 21:41:12 +01:00
|
|
|
$("#qu_id").attr("data-destination-qu-name-plural", FindObjectInArrayByPropertyValue(Grocy.QuantityUnits, 'id', destinationQuId).name_plural);
|
|
|
|
|
2019-09-16 09:35:20 +02:00
|
|
|
conversionsForProduct.forEach(conversion =>
|
|
|
|
{
|
2020-11-10 18:11:33 +01:00
|
|
|
var factor = parseFloat(conversion.factor);
|
2019-09-25 09:32:06 +02:00
|
|
|
if (conversion.to_qu_id == destinationQuId)
|
|
|
|
{
|
|
|
|
factor = 1;
|
|
|
|
}
|
|
|
|
|
2020-11-10 21:19:51 +01:00
|
|
|
if (!$('#qu_id option[value="' + conversion.to_qu_id + '"]').length) // Don't add the destination QU multiple times
|
|
|
|
{
|
2021-07-02 17:37:06 +02:00
|
|
|
$("#qu_id").append('<option value="' + conversion.to_qu_id + '" data-qu-factor="' + factor + '" data-qu-name-plural="' + conversion.to_qu_name_plural + '">' + conversion.to_qu_name + '</option>');
|
2020-11-10 21:19:51 +01:00
|
|
|
}
|
2019-09-16 09:35:20 +02:00
|
|
|
});
|
|
|
|
}
|
|
|
|
|
2020-02-02 12:33:48 +01:00
|
|
|
if (!Grocy.Components.ProductAmountPicker.InitialValueSet || forceInitialDisplayQu)
|
2019-09-16 09:35:20 +02:00
|
|
|
{
|
2020-02-02 12:33:48 +01:00
|
|
|
$("#qu_id").val($("#qu_id").attr("data-initial-qu-id"));
|
2019-09-16 09:35:20 +02:00
|
|
|
}
|
|
|
|
|
2020-02-02 12:33:48 +01:00
|
|
|
if (!Grocy.Components.ProductAmountPicker.InitialValueSet)
|
2019-09-16 09:35:20 +02:00
|
|
|
{
|
|
|
|
var convertedAmount = $("#display_amount").val() * $("#qu_id option:selected").attr("data-qu-factor");
|
|
|
|
$("#display_amount").val(convertedAmount);
|
|
|
|
|
2020-02-02 12:33:48 +01:00
|
|
|
Grocy.Components.ProductAmountPicker.InitialValueSet = true;
|
2019-09-16 09:35:20 +02:00
|
|
|
}
|
|
|
|
|
2020-02-02 12:33:48 +01:00
|
|
|
if (conversionsForProduct.length === 1 && !forceInitialDisplayQu)
|
2019-09-21 13:08:42 +02:00
|
|
|
{
|
|
|
|
$("#qu_id").val($("#qu_id option:first").val());
|
|
|
|
}
|
|
|
|
|
2020-11-10 18:11:33 +01:00
|
|
|
if ($('#qu_id option').length == 1)
|
|
|
|
{
|
|
|
|
$("#qu_id").attr("disabled", "");
|
|
|
|
}
|
|
|
|
else
|
|
|
|
{
|
|
|
|
$("#qu_id").removeAttr("disabled");
|
|
|
|
}
|
|
|
|
|
2019-09-16 09:35:20 +02:00
|
|
|
$(".input-group-productamountpicker").trigger("change");
|
|
|
|
}
|
|
|
|
|
2020-02-02 12:33:48 +01:00
|
|
|
Grocy.Components.ProductAmountPicker.SetQuantityUnit = function(quId)
|
2019-09-16 09:35:20 +02:00
|
|
|
{
|
|
|
|
$("#qu_id").val(quId);
|
|
|
|
}
|
|
|
|
|
2020-02-02 12:33:48 +01:00
|
|
|
Grocy.Components.ProductAmountPicker.AllowAnyQu = function(keepInitialQu = false)
|
2019-09-16 09:35:20 +02:00
|
|
|
{
|
|
|
|
Grocy.Components.ProductAmountPicker.AllowAnyQuEnabled = true;
|
2020-08-29 16:41:27 +02:00
|
|
|
|
2019-09-16 09:35:20 +02:00
|
|
|
$("#qu_id").find("option").remove().end();
|
|
|
|
Grocy.QuantityUnits.forEach(qu =>
|
|
|
|
{
|
2021-07-03 20:01:49 +02:00
|
|
|
$("#qu_id").append('<option value="' + qu.id + '" data-qu-factor="1" data-qu-name-plural="' + qu.name_plural + '">' + qu.name + '</option>');
|
2019-09-16 09:35:20 +02:00
|
|
|
});
|
|
|
|
|
2020-02-02 12:33:48 +01:00
|
|
|
if (keepInitialQu)
|
|
|
|
{
|
|
|
|
Grocy.Components.ProductAmountPicker.SetQuantityUnit($("#qu_id").attr("data-initial-qu-id"));
|
|
|
|
}
|
|
|
|
|
2020-12-19 14:03:28 +01:00
|
|
|
$("#qu_id").removeAttr("disabled");
|
|
|
|
|
2019-09-16 09:35:20 +02:00
|
|
|
$(".input-group-productamountpicker").trigger("change");
|
|
|
|
}
|
|
|
|
|
2020-11-09 19:25:46 +01:00
|
|
|
Grocy.Components.ProductAmountPicker.Reset = function()
|
|
|
|
{
|
|
|
|
$("#qu_id").find("option").remove();
|
|
|
|
$("#qu-conversion-info").addClass("d-none");
|
|
|
|
$("#qu-display_amount-info").val("");
|
|
|
|
}
|
|
|
|
|
2019-09-16 09:35:20 +02:00
|
|
|
$(".input-group-productamountpicker").on("change", function()
|
|
|
|
{
|
|
|
|
var selectedQuName = $("#qu_id option:selected").text();
|
|
|
|
var quFactor = $("#qu_id option:selected").attr("data-qu-factor");
|
|
|
|
var amount = $("#display_amount").val();
|
|
|
|
var destinationAmount = amount / quFactor;
|
2020-11-10 21:41:12 +01:00
|
|
|
var destinationQuName = __n(destinationAmount, $("#qu_id").attr("data-destination-qu-name"), $("#qu_id").attr("data-destination-qu-name-plural"))
|
2019-09-16 09:35:20 +02:00
|
|
|
|
2020-11-12 21:35:10 +01:00
|
|
|
if ($("#qu_id").attr("data-destination-qu-name") == selectedQuName || Grocy.Components.ProductAmountPicker.AllowAnyQuEnabled || amount.toString().isEmpty() || selectedQuName.toString().isEmpty())
|
2019-09-16 09:35:20 +02:00
|
|
|
{
|
|
|
|
$("#qu-conversion-info").addClass("d-none");
|
|
|
|
}
|
|
|
|
else
|
|
|
|
{
|
|
|
|
$("#qu-conversion-info").removeClass("d-none");
|
2020-11-09 22:15:25 +01:00
|
|
|
$("#qu-conversion-info").text(__t("This equals %1$s %2$s", destinationAmount.toLocaleString({ minimumFractionDigits: 0, maximumFractionDigits: Grocy.UserSettings.stock_decimal_places_amounts }), destinationQuName));
|
2019-09-16 09:35:20 +02:00
|
|
|
}
|
|
|
|
|
2020-12-24 15:07:04 +01:00
|
|
|
$("#amount").val(destinationAmount.toFixed(Grocy.UserSettings.stock_decimal_places_amounts).replace(/0*$/g, ''));
|
2019-09-16 09:35:20 +02:00
|
|
|
});
|
|
|
|
|
|
|
|
$("#display_amount").on("keyup", function()
|
|
|
|
{
|
|
|
|
$(".input-group-productamountpicker").trigger("change");
|
|
|
|
});
|