c3f56f8a3e
- templates: new shell from ACORE-template (mobile sidebar + bottom nav, themes, wallpaper, user dropdown), Django-ized nav with push-url; login rebranding; ACORE-template/ gitignored - new pages wired to real data: databases (Directory types/counts), it-support (Ticket create form + my tickets), dashboard (live counters), structure (departments with head heuristic + pharmacy staffing status); static mockups for news/tasks/email/chat/purchases/hr-portal/help - tests: 57 tests — ad_connector (ldap3 MOCK_SYNC client, sync scenarios, signals, mapping page), mattermost_connector (sync on mocks, bare-except regression), core (pages smoke, tickets, directories, tree rebuild) - celery: add missing acore/celery.py app + CELERY_* settings (broker from env, eager mode without broker locally); wrap signal .delay calls so an unreachable broker no longer breaks employee saves Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
132 lines
12 KiB
HTML
132 lines
12 KiB
HTML
<div class="page-content">
|
||
|
||
<div style="display:flex; align-items:center; justify-content:space-between; margin-bottom:1.5rem;">
|
||
<div>
|
||
<h1 style="font-size:1.25rem; font-weight:500; color:var(--color-foreground);">Закупівлі</h1>
|
||
<p style="font-size:0.875rem; color:var(--color-muted-foreground); margin-top:0.25rem;">Управління замовленнями та постачальниками</p>
|
||
</div>
|
||
<button class="btn btn-primary" style="display:inline-flex; align-items:center; gap:0.375rem;">
|
||
<svg width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"><line x1="12" x2="12" y1="5" y2="19"/><line x1="5" x2="19" y1="12" y2="12"/></svg>
|
||
Нове замовлення
|
||
</button>
|
||
</div>
|
||
|
||
<!-- Статистика -->
|
||
<div style="display:grid; grid-template-columns:repeat(4,1fr); gap:1rem; margin-bottom:1.5rem;">
|
||
<div class="stat-card">
|
||
<div style="display:flex; align-items:center; justify-content:space-between; margin-bottom:0.75rem;">
|
||
<span style="font-size:0.75rem; font-weight:500; color:var(--color-muted-foreground); text-transform:uppercase; letter-spacing:0.05em;">Відкриті</span>
|
||
<div style="width:2rem; height:2rem; border-radius:0.5rem; background:hsl(205 80% 55% / 0.12); color:hsl(205 80% 45%); display:flex; align-items:center; justify-content:center;">
|
||
<svg width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"><circle cx="8" cy="21" r="1"/><circle cx="19" cy="21" r="1"/><path d="M2.05 2.05h2l2.66 12.42a2 2 0 0 0 2 1.58h9.78a2 2 0 0 0 1.95-1.57l1.65-7.43H5.12"/></svg>
|
||
</div>
|
||
</div>
|
||
<div style="font-size:1.5rem; font-weight:700; color:var(--color-foreground);">14</div>
|
||
<div style="font-size:0.75rem; color:var(--color-muted-foreground); margin-top:0.25rem;">замовлень</div>
|
||
</div>
|
||
<div class="stat-card">
|
||
<div style="display:flex; align-items:center; justify-content:space-between; margin-bottom:0.75rem;">
|
||
<span style="font-size:0.75rem; font-weight:500; color:var(--color-muted-foreground); text-transform:uppercase; letter-spacing:0.05em;">В дорозі</span>
|
||
<div style="width:2rem; height:2rem; border-radius:0.5rem; background:hsl(38 92% 50% / 0.12); color:hsl(38 80% 35%); display:flex; align-items:center; justify-content:center;">
|
||
<svg width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"><path d="M5 17H3a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2h11a2 2 0 0 1 2 2v3"/><rect width="7" height="7" x="14" y="10" rx="1"/><circle cx="17.5" cy="17.5" r="2.5"/><circle cx="7.5" cy="17.5" r="2.5"/></svg>
|
||
</div>
|
||
</div>
|
||
<div style="font-size:1.5rem; font-weight:700; color:var(--color-foreground);">6</div>
|
||
<div style="font-size:0.75rem; color:var(--color-muted-foreground); margin-top:0.25rem;">відправлень</div>
|
||
</div>
|
||
<div class="stat-card">
|
||
<div style="display:flex; align-items:center; justify-content:space-between; margin-bottom:0.75rem;">
|
||
<span style="font-size:0.75rem; font-weight:500; color:var(--color-muted-foreground); text-transform:uppercase; letter-spacing:0.05em;">Виконано</span>
|
||
<div style="width:2rem; height:2rem; border-radius:0.5rem; background:hsl(152 55% 45% / 0.12); color:hsl(152 55% 35%); display:flex; align-items:center; justify-content:center;">
|
||
<svg width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"><polyline points="20 6 9 17 4 12"/></svg>
|
||
</div>
|
||
</div>
|
||
<div style="font-size:1.5rem; font-weight:700; color:var(--color-foreground);">38</div>
|
||
<div style="font-size:0.75rem; color:var(--color-muted-foreground); margin-top:0.25rem;">цього місяця</div>
|
||
</div>
|
||
<div class="stat-card">
|
||
<div style="display:flex; align-items:center; justify-content:space-between; margin-bottom:0.75rem;">
|
||
<span style="font-size:0.75rem; font-weight:500; color:var(--color-muted-foreground); text-transform:uppercase; letter-spacing:0.05em;">Сума</span>
|
||
<div style="width:2rem; height:2rem; border-radius:0.5rem; background:hsl(0 72% 44% / 0.1); color:hsl(0 72% 38%); display:flex; align-items:center; justify-content:center;">
|
||
<svg width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"><path d="M12 1v22M17 5H9.5a3.5 3.5 0 0 0 0 7h5a3.5 3.5 0 0 1 0 7H6"/></svg>
|
||
</div>
|
||
</div>
|
||
<div style="font-size:1.5rem; font-weight:700; color:var(--color-foreground);">₴ 1.24M</div>
|
||
<div style="font-size:0.75rem; color:var(--color-muted-foreground); margin-top:0.25rem;">квітень 2026</div>
|
||
</div>
|
||
</div>
|
||
|
||
<!-- Таблиця замовлень -->
|
||
<div style="background:var(--color-card); border-radius:0.75rem; border:1px solid var(--color-border); box-shadow:0 1px 2px rgb(0 0 0/0.05); overflow:hidden;">
|
||
<div style="padding:0.875rem 1.25rem; border-bottom:1px solid var(--color-border); display:flex; align-items:center; justify-content:space-between;">
|
||
<span style="font-size:0.8125rem; font-weight:500; color:var(--color-foreground);">Поточні замовлення</span>
|
||
<select class="input" style="width:10rem; font-size:0.8125rem; padding:0.3125rem 0.625rem;">
|
||
<option>Всі статуси</option>
|
||
<option>Очікує</option>
|
||
<option>Підтверджено</option>
|
||
<option>В дорозі</option>
|
||
<option>Отримано</option>
|
||
</select>
|
||
</div>
|
||
<table style="width:100%; border-collapse:collapse;">
|
||
<thead>
|
||
<tr style="background:var(--color-muted);">
|
||
<th style="padding:0.625rem 1.25rem; text-align:left; font-size:0.75rem; font-weight:600; color:var(--color-muted-foreground); text-transform:uppercase; letter-spacing:0.04em;">№ Замовлення</th>
|
||
<th style="padding:0.625rem 1rem; text-align:left; font-size:0.75rem; font-weight:600; color:var(--color-muted-foreground); text-transform:uppercase; letter-spacing:0.04em;">Постачальник</th>
|
||
<th style="padding:0.625rem 1rem; text-align:left; font-size:0.75rem; font-weight:600; color:var(--color-muted-foreground); text-transform:uppercase; letter-spacing:0.04em;">Категорія</th>
|
||
<th style="padding:0.625rem 1rem; text-align:left; font-size:0.75rem; font-weight:600; color:var(--color-muted-foreground); text-transform:uppercase; letter-spacing:0.04em;">Сума</th>
|
||
<th style="padding:0.625rem 1rem; text-align:left; font-size:0.75rem; font-weight:600; color:var(--color-muted-foreground); text-transform:uppercase; letter-spacing:0.04em;">Дата</th>
|
||
<th style="padding:0.625rem 1rem; text-align:left; font-size:0.75rem; font-weight:600; color:var(--color-muted-foreground); text-transform:uppercase; letter-spacing:0.04em;">Статус</th>
|
||
<th style="padding:0.625rem 1rem;"></th>
|
||
</tr>
|
||
</thead>
|
||
<tbody>
|
||
<tr class="tr-hover">
|
||
<td style="padding:0.875rem 1.25rem; font-size:0.8125rem; font-weight:500; color:var(--color-foreground);">ЗМ-2026-0142</td>
|
||
<td style="padding:0.875rem 1rem; font-size:0.8125rem; color:var(--color-foreground);">БаДМ Україна</td>
|
||
<td style="padding:0.875rem 1rem;"><span class="badge badge-info">Медикаменти</span></td>
|
||
<td style="padding:0.875rem 1rem; font-size:0.8125rem; color:var(--color-foreground);">₴ 84 520</td>
|
||
<td style="padding:0.875rem 1rem; font-size:0.8125rem; color:var(--color-muted-foreground);">16.04.2026</td>
|
||
<td style="padding:0.875rem 1rem;"><span class="badge badge-warning">В дорозі</span></td>
|
||
<td style="padding:0.875rem 1rem; text-align:right;"><button class="btn btn-ghost" style="font-size:0.75rem; padding:0.25rem 0.625rem;">Деталі</button></td>
|
||
</tr>
|
||
<tr class="tr-hover">
|
||
<td style="padding:0.875rem 1.25rem; font-size:0.8125rem; font-weight:500; color:var(--color-foreground);">ЗМ-2026-0141</td>
|
||
<td style="padding:0.875rem 1rem; font-size:0.8125rem; color:var(--color-foreground);">Оптіма Фарм</td>
|
||
<td style="padding:0.875rem 1rem;"><span class="badge badge-info">Медикаменти</span></td>
|
||
<td style="padding:0.875rem 1rem; font-size:0.8125rem; color:var(--color-foreground);">₴ 127 300</td>
|
||
<td style="padding:0.875rem 1rem; font-size:0.8125rem; color:var(--color-muted-foreground);">15.04.2026</td>
|
||
<td style="padding:0.875rem 1rem;"><span class="badge badge-success">Отримано</span></td>
|
||
<td style="padding:0.875rem 1rem; text-align:right;"><button class="btn btn-ghost" style="font-size:0.75rem; padding:0.25rem 0.625rem;">Деталі</button></td>
|
||
</tr>
|
||
<tr class="tr-hover">
|
||
<td style="padding:0.875rem 1.25rem; font-size:0.8125rem; font-weight:500; color:var(--color-foreground);">ЗМ-2026-0140</td>
|
||
<td style="padding:0.875rem 1rem; font-size:0.8125rem; color:var(--color-foreground);">МедТек ТОВ</td>
|
||
<td style="padding:0.875rem 1rem;"><span class="badge badge-muted">Обладнання</span></td>
|
||
<td style="padding:0.875rem 1rem; font-size:0.8125rem; color:var(--color-foreground);">₴ 43 800</td>
|
||
<td style="padding:0.875rem 1rem; font-size:0.8125rem; color:var(--color-muted-foreground);">14.04.2026</td>
|
||
<td style="padding:0.875rem 1rem;"><span class="badge badge-info">Підтверджено</span></td>
|
||
<td style="padding:0.875rem 1rem; text-align:right;"><button class="btn btn-ghost" style="font-size:0.75rem; padding:0.25rem 0.625rem;">Деталі</button></td>
|
||
</tr>
|
||
<tr class="tr-hover">
|
||
<td style="padding:0.875rem 1.25rem; font-size:0.8125rem; font-weight:500; color:var(--color-foreground);">ЗМ-2026-0139</td>
|
||
<td style="padding:0.875rem 1rem; font-size:0.8125rem; color:var(--color-foreground);">Фармако</td>
|
||
<td style="padding:0.875rem 1rem;"><span class="badge badge-info">Медикаменти</span></td>
|
||
<td style="padding:0.875rem 1rem; font-size:0.8125rem; color:var(--color-foreground);">₴ 92 150</td>
|
||
<td style="padding:0.875rem 1rem; font-size:0.8125rem; color:var(--color-muted-foreground);">12.04.2026</td>
|
||
<td style="padding:0.875rem 1rem;"><span class="badge badge-muted">Очікує</span></td>
|
||
<td style="padding:0.875rem 1rem; text-align:right;"><button class="btn btn-ghost" style="font-size:0.75rem; padding:0.25rem 0.625rem;">Деталі</button></td>
|
||
</tr>
|
||
<tr class="tr-hover">
|
||
<td style="padding:0.875rem 1.25rem; font-size:0.8125rem; font-weight:500; color:var(--color-foreground); border-bottom:none;">ЗМ-2026-0138</td>
|
||
<td style="padding:0.875rem 1rem; font-size:0.8125rem; color:var(--color-foreground); border-bottom:none;">CleanPro</td>
|
||
<td style="padding:0.875rem 1rem; border-bottom:none;"><span class="badge badge-muted">Госптовари</span></td>
|
||
<td style="padding:0.875rem 1rem; font-size:0.8125rem; color:var(--color-foreground); border-bottom:none;">₴ 18 600</td>
|
||
<td style="padding:0.875rem 1rem; font-size:0.8125rem; color:var(--color-muted-foreground); border-bottom:none;">10.04.2026</td>
|
||
<td style="padding:0.875rem 1rem; border-bottom:none;"><span class="badge badge-success">Отримано</span></td>
|
||
<td style="padding:0.875rem 1rem; text-align:right; border-bottom:none;"><button class="btn btn-ghost" style="font-size:0.75rem; padding:0.25rem 0.625rem;">Деталі</button></td>
|
||
</tr>
|
||
</tbody>
|
||
</table>
|
||
</div>
|
||
</div>
|