mirror of
				https://github.com/grocy/grocy.git
				synced 2025-10-31 02:36:54 +00:00 
			
		
		
		
	
		
			
				
	
	
		
			269 lines
		
	
	
		
			7.1 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			269 lines
		
	
	
		
			7.1 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
| $('#save-purchase-button').on('click', function(e)
 | |
| {
 | |
| 	e.preventDefault();
 | |
| 
 | |
| 	var jsonForm = $('#purchase-form').serializeJSON();
 | |
| 
 | |
| 	Grocy.FetchJson('/api/stock/get-product-details/' + jsonForm.product_id,
 | |
| 		function (productDetails)
 | |
| 		{
 | |
| 			var amount = jsonForm.amount * productDetails.product.qu_factor_purchase_to_stock;
 | |
| 
 | |
| 			Grocy.FetchJson('/api/stock/add-product/' + jsonForm.product_id + '/' + amount + '?bestbeforedate=' + $('#best_before_date').val(),
 | |
| 				function(result)
 | |
| 				{
 | |
| 					var addBarcode = GetUriParam('addbarcodetoselection');
 | |
| 					if (addBarcode !== undefined)
 | |
| 					{
 | |
| 						var existingBarcodes = productDetails.product.barcode || '';
 | |
| 						if (existingBarcodes.length === 0)
 | |
| 						{
 | |
| 							productDetails.product.barcode = addBarcode;
 | |
| 						}
 | |
| 						else
 | |
| 						{
 | |
| 							productDetails.product.barcode += ',' + addBarcode;
 | |
| 						}
 | |
| 
 | |
| 						Grocy.PostJson('/api/edit-object/products/' + productDetails.product.id, productDetails.product,
 | |
| 							function (result) { },
 | |
| 							function(xhr)
 | |
| 							{
 | |
| 								console.error(xhr);
 | |
| 							}
 | |
| 						);
 | |
| 					}
 | |
| 
 | |
| 					toastr.success('Added ' + amount + ' ' + productDetails.quantity_unit_stock.name + ' of ' + productDetails.product.name + ' to stock');
 | |
| 
 | |
| 					if (addBarcode !== undefined)
 | |
| 					{
 | |
| 						window.location.href = '/purchase';
 | |
| 					}
 | |
| 					else
 | |
| 					{
 | |
| 						$('#amount').val(0);
 | |
| 						$('#best_before_date').val('');
 | |
| 						$('#product_id').val('');
 | |
| 						$('#product_id_text_input').focus();
 | |
| 						$('#product_id_text_input').val('');
 | |
| 						$('#product_id_text_input').trigger('change');
 | |
| 						$('#purchase-form').validator('validate');
 | |
| 					}
 | |
| 				},
 | |
| 				function(xhr)
 | |
| 				{
 | |
| 					console.error(xhr);
 | |
| 				}
 | |
| 			);
 | |
| 		},
 | |
| 		function(xhr)
 | |
| 		{
 | |
| 			console.error(xhr);
 | |
| 		}
 | |
| 	);
 | |
| });
 | |
| 
 | |
| $('#product_id').on('change', function(e)
 | |
| {
 | |
| 	var productId = $(e.target).val();
 | |
| 
 | |
| 	if (productId)
 | |
| 	{
 | |
| 		Grocy.Components.ProductCard.Refresh(productId);
 | |
| 
 | |
| 		Grocy.FetchJson('/api/stock/get-product-details/' + productId,
 | |
| 			function(productDetails)
 | |
| 			{
 | |
| 				$('#amount_qu_unit').text(productDetails.quantity_unit_purchase.name);
 | |
| 				
 | |
| 				if (productDetails.product.default_best_before_days.toString() !== '0')
 | |
| 				{
 | |
| 					$('#best_before_date').val(moment().add(productDetails.product.default_best_before_days, 'days').format('YYYY-MM-DD'));
 | |
| 					$('#best_before_date').trigger('change');
 | |
| 					$('#amount').focus();
 | |
| 				}
 | |
| 				else
 | |
| 				{
 | |
| 					$('#best_before_date').focus();
 | |
| 				}
 | |
| 			},
 | |
| 			function(xhr)
 | |
| 			{
 | |
| 				console.error(xhr);
 | |
| 			}
 | |
| 		);
 | |
| 	}
 | |
| });
 | |
| 
 | |
| $('.combobox').combobox({
 | |
| 	appendId: '_text_input'
 | |
| });
 | |
| 
 | |
| $('#product_id_text_input').on('change', function(e)
 | |
| {
 | |
| 	var input = $('#product_id_text_input').val().toString();
 | |
| 	var possibleOptionElement = $("#product_id option[data-additional-searchdata*='" + input + "']").first();
 | |
| 	
 | |
| 	if (GetUriParam('addbarcodetoselection') === undefined && possibleOptionElement.length > 0)
 | |
| 	{
 | |
| 		$('#product_id').val(possibleOptionElement.val());
 | |
| 		$('#product_id').data('combobox').refresh();
 | |
| 		$('#product_id').trigger('change');
 | |
| 	}
 | |
| 	else
 | |
| 	{
 | |
| 		var optionElement = $("#product_id option:contains('" + input + "')").first();
 | |
| 		if (input.length > 0 && optionElement.length === 0 && GetUriParam('addbarcodetoselection') === undefined	)
 | |
| 		{
 | |
| 			bootbox.dialog({
 | |
| 				message: '<strong>' + input + '</strong> could not be resolved to a product, how do you want to proceed?',
 | |
| 				title: 'Create or assign product',
 | |
| 				onEscape: function() { },
 | |
| 				size: 'large',
 | |
| 				backdrop: true,
 | |
| 				buttons: {
 | |
| 					cancel: {
 | |
| 						label: 'Cancel',
 | |
| 						className: 'btn-default',
 | |
| 						callback: function() { }
 | |
| 					},
 | |
| 					addnewproduct: {
 | |
| 						label: 'Add as new <u><strong>p</strong></u>roduct',
 | |
| 						className: 'btn-success add-new-product-dialog-button',
 | |
| 						callback: function()
 | |
| 						{
 | |
| 							window.location.href = '/product/new?prefillname=' + encodeURIComponent(input) + '&returnto=' + encodeURIComponent(window.location.pathname);
 | |
| 						}
 | |
| 					},
 | |
| 					addbarcode: {
 | |
| 						label: 'Add as <u><strong>b</strong></u>arcode to existing product',
 | |
| 						className: 'btn-info add-new-barcode-dialog-button',
 | |
| 						callback: function()
 | |
| 						{
 | |
| 							window.location.href = '/purchase?addbarcodetoselection=' + encodeURIComponent(input);
 | |
| 						}
 | |
| 					},
 | |
| 					addnewproductwithbarcode: {
 | |
| 						label: '<u><strong>A</strong></u>dd as new product + prefill barcode',
 | |
| 						className: 'btn-warning add-new-product-with-barcode-dialog-button',
 | |
| 						callback: function()
 | |
| 						{
 | |
| 							window.location.href = '/product/new?prefillbarcode=' + encodeURIComponent(input) + '&returnto=' + encodeURIComponent(window.location.pathname);
 | |
| 						}
 | |
| 					}
 | |
| 				}
 | |
| 			}).on('keypress', function(e)
 | |
| 			{
 | |
| 				if (e.key === 'B' || e.key === 'b')
 | |
| 				{
 | |
| 					$('.add-new-barcode-dialog-button').click();
 | |
| 				}
 | |
| 				if (e.key === 'p' || e.key === 'P')
 | |
| 				{
 | |
| 					$('.add-new-product-dialog-button').click();
 | |
| 				}
 | |
| 				if (e.key === 'a' || e.key === 'A')
 | |
| 				{
 | |
| 					$('.add-new-product-with-barcode-dialog-button').click();
 | |
| 				}
 | |
| 			});
 | |
| 		}
 | |
| 	}
 | |
| });
 | |
| 
 | |
| $('#amount').val(0);
 | |
| $('#best_before_date').val('');
 | |
| $('#product_id').val('');
 | |
| $('#product_id_text_input').focus();
 | |
| $('#product_id_text_input').val('');
 | |
| $('#product_id_text_input').trigger('change');
 | |
| 
 | |
| $('#purchase-form').validator({
 | |
| 	custom: {
 | |
| 		'isodate': function($el)
 | |
| 		{
 | |
| 			if ($el.val().length !== 0 && !moment($el.val(), 'YYYY-MM-DD', true).isValid())
 | |
| 			{
 | |
| 				return 'Wrong date format, needs to be YYYY-MM-DD';
 | |
| 			}
 | |
| 			else if (moment($el.val()).isValid())
 | |
| 			{
 | |
| 				if (moment($el.val()).isBefore(moment(), 'day'))
 | |
| 				{
 | |
| 					return 'This value cannot be before today.';
 | |
| 				}
 | |
| 			}
 | |
| 		}
 | |
| 	}
 | |
| });
 | |
| $('#purchase-form').validator('validate');
 | |
| 
 | |
| $('#best_before_date').on('focus', function(e)
 | |
| {
 | |
| 	if ($('#product_id_text_input').val().length === 0)
 | |
| 	{
 | |
| 		$('#product_id_text_input').focus();
 | |
| 	}
 | |
| });
 | |
| 
 | |
| $('#amount').on('focus', function(e)
 | |
| {
 | |
| 	if ($('#product_id_text_input').val().length === 0)
 | |
| 	{
 | |
| 		$('#product_id_text_input').focus();
 | |
| 	}
 | |
| 	else
 | |
| 	{
 | |
| 		$(this).select();
 | |
| 	}
 | |
| });
 | |
| 
 | |
| $('#purchase-form input').keydown(function(event)
 | |
| {
 | |
| 	if (event.keyCode === 13) //Enter
 | |
| 	{
 | |
| 		if ($('#purchase-form').validator('validate').has('.has-error').length !== 0) //There is at least one validation error
 | |
| 		{
 | |
| 			event.preventDefault();
 | |
| 			return false;
 | |
| 		}
 | |
| 	}
 | |
| });
 | |
| 
 | |
| var prefillProduct = GetUriParam('createdproduct');
 | |
| if (prefillProduct !== undefined)
 | |
| {
 | |
| 	var possibleOptionElement = $("#product_id option[data-additional-searchdata*='" + prefillProduct + "']").first();
 | |
| 	if (possibleOptionElement.length === 0)
 | |
| 	{
 | |
| 		possibleOptionElement = $("#product_id option:contains('" + prefillProduct + "')").first();
 | |
| 	}
 | |
| 
 | |
| 	if (possibleOptionElement.length > 0)
 | |
| 	{
 | |
| 		$('#product_id').val(possibleOptionElement.val());
 | |
| 		$('#product_id').data('combobox').refresh();
 | |
| 		$('#product_id').trigger('change');
 | |
| 		$('#best_before_date').focus();
 | |
| 	}
 | |
| }
 | |
| 
 | |
| var addBarcode = GetUriParam('addbarcodetoselection');
 | |
| if (addBarcode !== undefined)
 | |
| {
 | |
| 	$('#addbarcodetoselection').text(addBarcode);
 | |
| 	$('#flow-info-addbarcodetoselection').removeClass('hide');
 | |
| 	$('#barcode-lookup-disabled-hint').removeClass('hide');
 | |
| }
 | |
| 
 | |
| $('#best_before_date').on('change', function(e)
 | |
| {
 | |
| 	$('#purchase-form').validator('validate');
 | |
| });
 | |
| 
 | |
| $('#best_before_date').on('keypress', function(e)
 | |
| {
 | |
| 	$('#purchase-form').validator('validate');
 | |
| });
 |