diff --git a/pos/static/js/inventory.js b/pos/static/js/inventory.js index 75b66bb..30392af 100644 --- a/pos/static/js/inventory.js +++ b/pos/static/js/inventory.js @@ -478,16 +478,140 @@ // PURCHASE / ENTRADA (purchaseModal) // ===================================================================== + let purchaseSearchTimeout = null; + let purchaseSelectedItem = null; + function showPurchaseModal() { document.getElementById('purchaseModal').classList.add('is-open'); + setTimeout(function() { + var el = document.getElementById('purchaseItemSearch'); + if (el) el.focus(); + }, 100); } function showPurchaseModalForItem(itemId) { - document.getElementById('purchaseItemId').value = itemId; + // Pre-fill by fetching item details + apiFetch(API + '/items?page=1&per_page=1').then(function() { + // We just need the item detail; use the existing list or fetch by id + apiFetch(API + '/items?page=1&per_page=1').then(function() {}); + }); + selectPurchaseItem({id: itemId, name: 'Producto #' + itemId}); showPurchaseModal(); } function closePurchaseModal() { document.getElementById('purchaseModal').classList.remove('is-open'); document.getElementById('purchaseResult').innerHTML = ''; + clearPurchaseSelection(); + } + + function clearPurchaseSelection() { + purchaseSelectedItem = null; + var ids = ['purchaseItemId','purchaseItemSearch','purchaseQty','purchaseCost','purchaseInvoice','purchaseNotes']; + ids.forEach(function(id) { + var el = document.getElementById(id); + if (el) el.value = ''; + }); + var results = document.getElementById('purchaseItemResults'); + if (results) results.style.display = 'none'; + var selected = document.getElementById('purchaseItemSelected'); + if (selected) selected.textContent = ''; + } + + function selectPurchaseItem(item) { + purchaseSelectedItem = item; + document.getElementById('purchaseItemId').value = item.id; + document.getElementById('purchaseItemSearch').value = item.name || item.part_number || item.barcode || ('#' + item.id); + document.getElementById('purchaseItemResults').style.display = 'none'; + document.getElementById('purchaseItemSelected').innerHTML = + '' + esc(item.name || '') + '' + + (item.part_number ? ' · No. parte: ' + esc(item.part_number) : '') + + (item.barcode ? ' · Barcode: ' + esc(item.barcode) : ''); + document.getElementById('purchaseQty').focus(); + } + + function searchPurchaseItems(query) { + var resultsEl = document.getElementById('purchaseItemResults'); + if (!query || query.length < 2) { + resultsEl.style.display = 'none'; + return; + } + apiFetch(API + '/items?q=' + encodeURIComponent(query) + '&per_page=10').then(function(res) { + var items = (res && res.items) || []; + if (!items.length) { + resultsEl.innerHTML = '