From eb8ac34d83794d59b25859a3886f033809d28af7 Mon Sep 17 00:00:00 2001 From: Mikhail Chusavitin Date: Fri, 6 Feb 2026 19:39:39 +0300 Subject: [PATCH] Fix stock mappings JSON fields and enable row selection for editing --- internal/models/lot.go | 6 +++--- web/templates/admin_pricing.html | 20 +++++++++++++++----- 2 files changed, 18 insertions(+), 8 deletions(-) diff --git a/internal/models/lot.go b/internal/models/lot.go index 4a849b9..7990f38 100644 --- a/internal/models/lot.go +++ b/internal/models/lot.go @@ -57,9 +57,9 @@ func (StockLog) TableName() string { // LotPartnumber maps external part numbers to internal lots. type LotPartnumber struct { - Partnumber string `gorm:"column:partnumber;size:255;primaryKey"` - LotName string `gorm:"column:lot_name;size:255;primaryKey"` - Description *string `gorm:"column:description;size:10000"` + Partnumber string `gorm:"column:partnumber;size:255;primaryKey" json:"partnumber"` + LotName string `gorm:"column:lot_name;size:255;primaryKey" json:"lot_name"` + Description *string `gorm:"column:description;size:10000" json:"description,omitempty"` } func (LotPartnumber) TableName() string { diff --git a/web/templates/admin_pricing.html b/web/templates/admin_pricing.html index 4f2ca52..f64d742 100644 --- a/web/templates/admin_pricing.html +++ b/web/templates/admin_pricing.html @@ -308,6 +308,7 @@ let isCreatingPricelist = false; let cachedDbUsername = null; let syncUsersStatusTimer = null; let stockMappingsPage = 1; +let stockMappingsCache = []; async function loadTab(tab) { currentTab = tab; @@ -1109,16 +1110,17 @@ async function loadStockMappings(page = 1) { const data = await resp.json(); if (!resp.ok) throw new Error(data.error || 'Ошибка загрузки'); const items = data.items || []; + stockMappingsCache = items; if (items.length === 0) { body.innerHTML = 'Нет сопоставлений'; } else { body.innerHTML = items.map(item => ` - - ${escapeHtml(item.partnumber)} - ${escapeHtml(item.description || '—')} - ${escapeHtml(item.lot_name || '—')} + + ${escapeHtml(item.partnumber || item.Partnumber || '—')} + ${escapeHtml(item.description || item.Description || '—')} + ${escapeHtml(item.lot_name || item.LotName || '—')} - + `).join(''); @@ -1141,6 +1143,14 @@ async function loadStockMappings(page = 1) { } } +function selectStockMappingRow(partnumber) { + const normalized = (partnumber || '').trim().toLowerCase(); + const row = stockMappingsCache.find(item => ((item.partnumber || item.Partnumber || '').trim().toLowerCase() === normalized)); + if (!row) return; + document.getElementById('mapping-partnumber').value = (row.partnumber || row.Partnumber || '').trim(); + document.getElementById('mapping-lotname').value = (row.lot_name || row.LotName || '').trim(); +} + async function saveStockMapping() { const partnumber = document.getElementById('mapping-partnumber').value.trim(); const lotName = document.getElementById('mapping-lotname').value.trim();