feat: improve admin pricing modal quote count display to show period and total counts

This commit is contained in:
2026-02-02 21:34:51 +03:00
parent f25477a25e
commit 2c75a7ccb8
2 changed files with 45 additions and 13 deletions

View File

@@ -708,8 +708,8 @@ func (h *PricingHandler) PreviewPrice(c *gin.Context) {
medianAllTime = &median medianAllTime = &median
} }
// Get quote count (from all relevant lots) // Get quote count (from all relevant lots) - total count
var quoteCount int64 var quoteCountTotal int64
for _, lotName := range lotNames { for _, lotName := range lotNames {
var count int64 var count int64
if strings.HasSuffix(lotName, "*") { if strings.HasSuffix(lotName, "*") {
@@ -718,7 +718,25 @@ func (h *PricingHandler) PreviewPrice(c *gin.Context) {
} else { } else {
h.db.Model(&models.LotLog{}).Where("lot = ?", lotName).Count(&count) h.db.Model(&models.LotLog{}).Where("lot = ?", lotName).Count(&count)
} }
quoteCount += count quoteCountTotal += count
}
// Get quote count for specified period (if period is > 0)
var quoteCountPeriod int64
if req.PeriodDays > 0 {
for _, lotName := range lotNames {
var count int64
if strings.HasSuffix(lotName, "*") {
pattern := strings.TrimSuffix(lotName, "*") + "%"
h.db.Raw(`SELECT COUNT(*) FROM lot_log WHERE lot LIKE ? AND date >= DATE_SUB(NOW(), INTERVAL ? DAY)`, pattern, req.PeriodDays).Scan(&count)
} else {
h.db.Raw(`SELECT COUNT(*) FROM lot_log WHERE lot = ? AND date >= DATE_SUB(NOW(), INTERVAL ? DAY)`, lotName, req.PeriodDays).Scan(&count)
}
quoteCountPeriod += count
}
} else {
// If no period specified, period count equals total count
quoteCountPeriod = quoteCountTotal
} }
// Get last received price (from the main lot only) // Get last received price (from the main lot only)
@@ -773,14 +791,15 @@ func (h *PricingHandler) PreviewPrice(c *gin.Context) {
} }
c.JSON(http.StatusOK, gin.H{ c.JSON(http.StatusOK, gin.H{
"lot_name": req.LotName, "lot_name": req.LotName,
"current_price": comp.CurrentPrice, "current_price": comp.CurrentPrice,
"median_all_time": medianAllTime, "median_all_time": medianAllTime,
"new_price": newPrice, "new_price": newPrice,
"quote_count": quoteCount, "quote_count_total": quoteCountTotal,
"manual_price": comp.ManualPrice, "quote_count_period": quoteCountPeriod,
"last_price": lastPrice.Price, "manual_price": comp.ManualPrice,
"last_price_date": lastPrice.Date, "last_price": lastPrice.Price,
"last_price_date": lastPrice.Date,
}) })
} }

View File

@@ -591,8 +591,21 @@ async function fetchPreview() {
document.getElementById('modal-new-price').textContent = document.getElementById('modal-new-price').textContent =
data.new_price ? '$' + parseFloat(data.new_price).toFixed(2) : '—'; data.new_price ? '$' + parseFloat(data.new_price).toFixed(2) : '—';
// Update quote count // Update quote count with new format "N (всего: M)"
document.getElementById('modal-quote-count').textContent = data.quote_count || 0; let quoteCountText = '';
if (data.quote_count_period !== undefined && data.quote_count_total !== undefined) {
if (data.quote_count_period === data.quote_count_total) {
// If period count equals total count, just show the total
quoteCountText = data.quote_count_total;
} else {
// Show both counts in format "N (всего: M)"
quoteCountText = data.quote_count_period + ' (всего: ' + data.quote_count_total + ')';
}
} else {
// Fallback for older API responses
quoteCountText = data.quote_count || 0;
}
document.getElementById('modal-quote-count').textContent = quoteCountText;
} }
} catch(e) { } catch(e) {
console.error('Preview fetch error:', e); console.error('Preview fetch error:', e);