Go refactoring: - Split handlers/pricing.go (2446→291 lines) into 5 focused files - Split services/stock_import.go (1334→~400 lines) into stock_mappings.go + stock_parse.go - Split services/sync/service.go (1290→~250 lines) into 3 files JS extraction: - Move all inline <script> blocks to web/static/js/ (6 files) - Templates reduced: admin_pricing 2873→521, lot 1531→304, vendor_mappings 1063→169, etc. Competitor pricelists (migrations 033-039): - qt_competitors + partnumber_log_competitors tables - Excel import with column mapping, dedup, bulk insert - p/n→lot resolution via weighted_median, discount applied - Unmapped p/ns written to qt_vendor_partnumber_seen - Quote counts (unique/total) shown on /admin/competitors - price_method="weighted_median", price_period_days=0 stored explicitly Fix price_method/price_period_days for warehouse items: - warehouse: weighted_avg, period=0 - competitor: weighted_median, period=0 - Removes misleading DB defaults (was: median/90) Update bible: architecture.md, pricelist.md, history.md Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
73 lines
3.5 KiB
HTML
73 lines
3.5 KiB
HTML
{{define "title"}}Прайслисты - PriceForge{{end}}
|
|
|
|
{{define "content"}}
|
|
<div class="space-y-6">
|
|
<div class="flex justify-between items-center">
|
|
<h1 class="text-2xl font-bold text-gray-900">Прайслисты</h1>
|
|
<div id="create-btn-container"></div>
|
|
</div>
|
|
|
|
<div class="bg-white rounded-lg shadow overflow-hidden">
|
|
<table class="min-w-full divide-y divide-gray-200">
|
|
<thead class="bg-gray-50">
|
|
<tr>
|
|
<th class="px-6 py-3 text-left text-xs font-medium text-gray-500 uppercase">Версия</th>
|
|
<th class="px-6 py-3 text-left text-xs font-medium text-gray-500 uppercase">Дата</th>
|
|
<th class="px-6 py-3 text-left text-xs font-medium text-gray-500 uppercase">Автор</th>
|
|
<th class="px-6 py-3 text-center text-xs font-medium text-gray-500 uppercase">Позиций</th>
|
|
<th class="px-6 py-3 text-center text-xs font-medium text-gray-500 uppercase">Исп.</th>
|
|
<th class="px-6 py-3 text-center text-xs font-medium text-gray-500 uppercase">Статус</th>
|
|
<th class="px-6 py-3 text-right text-xs font-medium text-gray-500 uppercase">Действия</th>
|
|
</tr>
|
|
</thead>
|
|
<tbody id="pricelists-body" class="bg-white divide-y divide-gray-200">
|
|
<tr>
|
|
<td colspan="7" class="px-6 py-4 text-center text-gray-500">Загрузка...</td>
|
|
</tr>
|
|
</tbody>
|
|
</table>
|
|
</div>
|
|
|
|
<div id="pagination" class="flex justify-center space-x-2"></div>
|
|
</div>
|
|
|
|
<!-- Create Modal -->
|
|
<div id="create-modal" class="fixed inset-0 bg-black bg-opacity-50 hidden items-center justify-center z-50">
|
|
<div class="bg-white rounded-lg p-6 max-w-md w-full mx-4">
|
|
<h2 class="text-xl font-bold mb-4">Создать прайслист</h2>
|
|
<p class="text-sm text-gray-600 mb-4">
|
|
Будет создан снимок текущих цен из базы данных.<br>
|
|
Автор прайслиста: <span id="db-username" class="font-medium">загрузка...</span>
|
|
</p>
|
|
<form id="create-form" class="space-y-4">
|
|
<div class="flex justify-end space-x-3">
|
|
<button type="button" onclick="closeCreateModal()"
|
|
class="px-4 py-2 text-gray-700 border border-gray-300 rounded-md hover:bg-gray-50">
|
|
Отмена
|
|
</button>
|
|
<button type="submit"
|
|
class="px-4 py-2 bg-orange-600 text-white rounded-md hover:bg-orange-700">
|
|
Создать
|
|
</button>
|
|
</div>
|
|
</form>
|
|
</div>
|
|
</div>
|
|
|
|
<!-- Price Changes Modal -->
|
|
<div id="price-changes-modal" class="fixed inset-0 bg-black bg-opacity-50 hidden items-center justify-center z-50">
|
|
<div class="bg-white rounded-lg p-6 max-w-4xl w-full mx-4 max-h-[85vh] overflow-hidden flex flex-col">
|
|
<div class="flex items-center justify-between mb-4">
|
|
<h2 class="text-xl font-bold">Изменения цен</h2>
|
|
<button type="button" onclick="closePriceChangesModal()" class="text-gray-500 hover:text-gray-700">Закрыть</button>
|
|
</div>
|
|
<div id="price-changes-summary" class="text-sm text-gray-600 mb-4"></div>
|
|
<div id="price-changes-content" class="overflow-auto space-y-4"></div>
|
|
</div>
|
|
</div>
|
|
|
|
<script src="/static/js/pricelists.js"></script>
|
|
{{end}}
|
|
|
|
{{template "base" .}}
|