Company: Widok wyboru firmy
This commit is contained in:
@@ -13,9 +13,6 @@ include '../../header-travel.php';
|
||||
<p class="text-muted small mb-0">Zarządzaj fakturami od dostawców i przypisuj je do wycieczek.</p>
|
||||
</div>
|
||||
<div class="d-flex gap-2">
|
||||
<button class="btn btn-label-secondary btn-icon" data-bs-toggle="tooltip" title="Ustawienia integracji">
|
||||
<i class="bx bx-cog"></i>
|
||||
</button>
|
||||
<div class="btn-group" id="filtersButtonGroup">
|
||||
<button class="btn btn-outline-secondary d-flex align-items-center position-relative"
|
||||
id="btnToggleFilters" onclick="toggleFilters()">
|
||||
@@ -69,26 +66,32 @@ include '../../header-travel.php';
|
||||
<div class="col-md-3">
|
||||
<label class="form-label small mb-1">Status rozliczenia</label>
|
||||
<div class="dropdown w-100" id="statusDropdown">
|
||||
<button class="btn btn-white border form-select text-start fw-normal d-flex align-items-center justify-content-between w-100"
|
||||
type="button" id="statusDropdownBtn"
|
||||
onclick="toggleStatusDropdown(event)"
|
||||
<button
|
||||
class="btn btn-white border form-select text-start fw-normal d-flex align-items-center justify-content-between w-100"
|
||||
type="button" id="statusDropdownBtn" onclick="toggleStatusDropdown(event)"
|
||||
style="background-color:#fff;">
|
||||
<span id="statusDropdownLabel" class="text-truncate">Wszystkie statusy</span>
|
||||
</button>
|
||||
<ul class="dropdown-menu w-100 p-2 shadow-sm" id="statusDropdownMenu" style="min-width:100%;">
|
||||
<li>
|
||||
<label class="dropdown-item d-flex align-items-center gap-2 py-1 px-2 rounded cursor-pointer">
|
||||
<input type="checkbox" class="status-check form-check-input mt-0" value="settled"> Rozliczone
|
||||
<label
|
||||
class="dropdown-item d-flex align-items-center gap-2 py-1 px-2 rounded cursor-pointer">
|
||||
<input type="checkbox" class="status-check form-check-input mt-0" value="settled">
|
||||
Rozliczone
|
||||
</label>
|
||||
</li>
|
||||
<li>
|
||||
<label class="dropdown-item d-flex align-items-center gap-2 py-1 px-2 rounded cursor-pointer">
|
||||
<input type="checkbox" class="status-check form-check-input mt-0" value="partial"> Częściowo rozliczone
|
||||
<label
|
||||
class="dropdown-item d-flex align-items-center gap-2 py-1 px-2 rounded cursor-pointer">
|
||||
<input type="checkbox" class="status-check form-check-input mt-0" value="partial">
|
||||
Częściowo rozliczone
|
||||
</label>
|
||||
</li>
|
||||
<li>
|
||||
<label class="dropdown-item d-flex align-items-center gap-2 py-1 px-2 rounded cursor-pointer">
|
||||
<input type="checkbox" class="status-check form-check-input mt-0" value="unsettled"> Nierozliczone
|
||||
<label
|
||||
class="dropdown-item d-flex align-items-center gap-2 py-1 px-2 rounded cursor-pointer">
|
||||
<input type="checkbox" class="status-check form-check-input mt-0" value="unsettled">
|
||||
Nierozliczone
|
||||
</label>
|
||||
</li>
|
||||
</ul>
|
||||
@@ -190,7 +193,8 @@ include '../../header-travel.php';
|
||||
<td class="text-center"><span class="badge bg-label-danger" data-bs-toggle="tooltip"
|
||||
title="Brak przypiętej faktury">Nierozliczone</span></td>
|
||||
<td class="text-end">
|
||||
<button class="btn btn-sm btn-primary" href="javascript:void(0);"><i class="bx bx-link me-1"></i> Przypisz fakturę</button>
|
||||
<button class="btn btn-sm btn-primary" href="javascript:void(0);"><i
|
||||
class="bx bx-link me-1"></i> Przypisz fakturę</button>
|
||||
</td>
|
||||
</tr>
|
||||
|
||||
@@ -216,7 +220,8 @@ include '../../header-travel.php';
|
||||
</td>
|
||||
<td class="text-end">
|
||||
<div class="btn-group">
|
||||
<button class="btn btn-sm btn-outline-secondary"
|
||||
<button class="btn btn-sm btn-outline-secondary" data-bs-toggle="modal"
|
||||
data-bs-target="#modalLinkedInvoicePreview"
|
||||
href="javascript:void(0);"><i class="bx bx-show me-1"></i>
|
||||
Szczegóły</button>
|
||||
<button type="button"
|
||||
@@ -251,11 +256,18 @@ include '../../header-travel.php';
|
||||
<td class="text-center"><span class="badge bg-label-success">Rozliczone</span></td>
|
||||
<td class="text-end">
|
||||
<div class="btn-group">
|
||||
<button class="btn btn-sm btn-outline-secondary" href="javascript:void(0);"><i class="bx bx-show me-1"></i> Szczegóły</button>
|
||||
<button type="button" class="btn btn-sm btn-outline-secondary dropdown-toggle dropdown-toggle-split" data-bs-toggle="dropdown"></button>
|
||||
<button class="btn btn-sm btn-outline-secondary" data-bs-toggle="modal"
|
||||
data-bs-target="#modalLinkedInvoicePreview"
|
||||
href="javascript:void(0);"><i class="bx bx-show me-1"></i>
|
||||
Szczegóły</button>
|
||||
<button type="button"
|
||||
class="btn btn-sm btn-outline-secondary dropdown-toggle dropdown-toggle-split"
|
||||
data-bs-toggle="dropdown"></button>
|
||||
<ul class="dropdown-menu dropdown-menu-end">
|
||||
<li><a class="dropdown-item disabled" href="javascript:void(0);"><i class="bx bx-link me-1"></i> Przypisz fakturę</a></li>
|
||||
<li><a class="dropdown-item" href="javascript:void(0);"><i class="bx bx-edit me-1"></i> Edytuj</a></li>
|
||||
<li><a class="dropdown-item disabled" href="javascript:void(0);"><i
|
||||
class="bx bx-link me-1"></i> Przypisz fakturę</a></li>
|
||||
<li><a class="dropdown-item" href="javascript:void(0);"><i
|
||||
class="bx bx-edit me-1"></i> Edytuj</a></li>
|
||||
</ul>
|
||||
</div>
|
||||
</td>
|
||||
@@ -280,11 +292,18 @@ include '../../header-travel.php';
|
||||
<td class="text-center"><span class="badge bg-label-success">Rozliczone</span></td>
|
||||
<td class="text-end">
|
||||
<div class="btn-group">
|
||||
<button class="btn btn-sm btn-outline-secondary" href="javascript:void(0);"><i class="bx bx-show me-1"></i> Szczegóły</button>
|
||||
<button type="button" class="btn btn-sm btn-outline-secondary dropdown-toggle dropdown-toggle-split" data-bs-toggle="dropdown"></button>
|
||||
<button class="btn btn-sm btn-outline-secondary" data-bs-toggle="modal"
|
||||
data-bs-target="#modalLinkedInvoicePreview"
|
||||
href="javascript:void(0);"><i class="bx bx-show me-1"></i>
|
||||
Szczegóły</button>
|
||||
<button type="button"
|
||||
class="btn btn-sm btn-outline-secondary dropdown-toggle dropdown-toggle-split"
|
||||
data-bs-toggle="dropdown"></button>
|
||||
<ul class="dropdown-menu dropdown-menu-end">
|
||||
<li><a class="dropdown-item disabled" href="javascript:void(0);"><i class="bx bx-link me-1"></i> Przypisz fakturę</a></li>
|
||||
<li><a class="dropdown-item" href="javascript:void(0);"><i class="bx bx-edit me-1"></i> Edytuj</a></li>
|
||||
<li><a class="dropdown-item disabled" href="javascript:void(0);"><i
|
||||
class="bx bx-link me-1"></i> Przypisz fakturę</a></li>
|
||||
<li><a class="dropdown-item" href="javascript:void(0);"><i
|
||||
class="bx bx-edit me-1"></i> Edytuj</a></li>
|
||||
</ul>
|
||||
</div>
|
||||
</td>
|
||||
@@ -309,7 +328,8 @@ include '../../header-travel.php';
|
||||
<td class="text-center"><span class="badge bg-label-danger">Nierozliczone</span>
|
||||
</td>
|
||||
<td class="text-end">
|
||||
<button class="btn btn-sm btn-primary" href="javascript:void(0);"><i class="bx bx-link me-1"></i> Przypisz fakturę</button>
|
||||
<button class="btn btn-sm btn-primary" href="javascript:void(0);"><i
|
||||
class="bx bx-link me-1"></i> Przypisz fakturę</button>
|
||||
</td>
|
||||
</tr>
|
||||
|
||||
@@ -334,7 +354,8 @@ include '../../header-travel.php';
|
||||
rozliczone</span></td>
|
||||
<td class="text-end">
|
||||
<div class="btn-group">
|
||||
<button class="btn btn-sm btn-outline-secondary"
|
||||
<button class="btn btn-sm btn-outline-secondary" data-bs-toggle="modal"
|
||||
data-bs-target="#modalLinkedInvoicePreview"
|
||||
href="javascript:void(0);"><i class="bx bx-show me-1"></i>
|
||||
Szczegóły</button>
|
||||
<button type="button"
|
||||
@@ -369,11 +390,18 @@ include '../../header-travel.php';
|
||||
<td class="text-center"><span class="badge bg-label-success">Rozliczone</span></td>
|
||||
<td class="text-end">
|
||||
<div class="btn-group">
|
||||
<button class="btn btn-sm btn-outline-secondary" href="javascript:void(0);"><i class="bx bx-show me-1"></i> Szczegóły</button>
|
||||
<button type="button" class="btn btn-sm btn-outline-secondary dropdown-toggle dropdown-toggle-split" data-bs-toggle="dropdown"></button>
|
||||
<button class="btn btn-sm btn-outline-secondary" data-bs-toggle="modal"
|
||||
data-bs-target="#modalLinkedInvoicePreview"
|
||||
href="javascript:void(0);"><i class="bx bx-show me-1"></i>
|
||||
Szczegóły</button>
|
||||
<button type="button"
|
||||
class="btn btn-sm btn-outline-secondary dropdown-toggle dropdown-toggle-split"
|
||||
data-bs-toggle="dropdown"></button>
|
||||
<ul class="dropdown-menu dropdown-menu-end">
|
||||
<li><a class="dropdown-item disabled" href="javascript:void(0);"><i class="bx bx-link me-1"></i> Przypisz fakturę</a></li>
|
||||
<li><a class="dropdown-item" href="javascript:void(0);"><i class="bx bx-edit me-1"></i> Edytuj</a></li>
|
||||
<li><a class="dropdown-item disabled" href="javascript:void(0);"><i
|
||||
class="bx bx-link me-1"></i> Przypisz fakturę</a></li>
|
||||
<li><a class="dropdown-item" href="javascript:void(0);"><i
|
||||
class="bx bx-edit me-1"></i> Edytuj</a></li>
|
||||
</ul>
|
||||
</div>
|
||||
</td>
|
||||
@@ -398,7 +426,8 @@ include '../../header-travel.php';
|
||||
<td class="text-center"><span class="badge bg-label-danger">Nierozliczone</span>
|
||||
</td>
|
||||
<td class="text-end">
|
||||
<button class="btn btn-sm btn-primary" href="javascript:void(0);"><i class="bx bx-link me-1"></i> Przypisz fakturę</button>
|
||||
<button class="btn btn-sm btn-primary" href="javascript:void(0);"><i
|
||||
class="bx bx-link me-1"></i> Przypisz fakturę</button>
|
||||
</td>
|
||||
</tr>
|
||||
|
||||
@@ -424,7 +453,8 @@ include '../../header-travel.php';
|
||||
rozliczone</span></td>
|
||||
<td class="text-end">
|
||||
<div class="btn-group">
|
||||
<button class="btn btn-sm btn-outline-secondary"
|
||||
<button class="btn btn-sm btn-outline-secondary" data-bs-toggle="modal"
|
||||
data-bs-target="#modalLinkedInvoicePreview"
|
||||
href="javascript:void(0);"><i class="bx bx-show me-1"></i>
|
||||
Szczegóły</button>
|
||||
<button type="button"
|
||||
@@ -459,11 +489,17 @@ include '../../header-travel.php';
|
||||
<td class="text-center"><span class="badge bg-label-success">Rozliczone</span></td>
|
||||
<td class="text-end">
|
||||
<div class="btn-group">
|
||||
<button class="btn btn-sm btn-outline-secondary" href="javascript:void(0);"><i class="bx bx-show me-1"></i> Szczegóły</button>
|
||||
<button type="button" class="btn btn-sm btn-outline-secondary dropdown-toggle dropdown-toggle-split" data-bs-toggle="dropdown"></button>
|
||||
<button class="btn btn-sm btn-outline-secondary"
|
||||
href="javascript:void(0);"><i class="bx bx-show me-1"></i>
|
||||
Szczegóły</button>
|
||||
<button type="button"
|
||||
class="btn btn-sm btn-outline-secondary dropdown-toggle dropdown-toggle-split"
|
||||
data-bs-toggle="dropdown"></button>
|
||||
<ul class="dropdown-menu dropdown-menu-end">
|
||||
<li><a class="dropdown-item disabled" href="javascript:void(0);"><i class="bx bx-link me-1"></i> Przypisz fakturę</a></li>
|
||||
<li><a class="dropdown-item" href="javascript:void(0);"><i class="bx bx-edit me-1"></i> Edytuj</a></li>
|
||||
<li><a class="dropdown-item disabled" href="javascript:void(0);"><i
|
||||
class="bx bx-link me-1"></i> Przypisz fakturę</a></li>
|
||||
<li><a class="dropdown-item" href="javascript:void(0);"><i
|
||||
class="bx bx-edit me-1"></i> Edytuj</a></li>
|
||||
</ul>
|
||||
</div>
|
||||
</td>
|
||||
@@ -582,6 +618,122 @@ include '../../header-travel.php';
|
||||
|
||||
</div>
|
||||
|
||||
<div class="modal fade" id="modalLinkedInvoicePreview" tabindex="-1" aria-hidden="true">
|
||||
<div class="modal-dialog modal-lg modal-dialog-centered">
|
||||
<div class="modal-content border-0 shadow-lg">
|
||||
<div class="modal-header border-bottom">
|
||||
<h5 class="modal-title"><i class="bx bx-receipt text-primary me-2"></i>Podgląd powiązanej faktury</h5>
|
||||
<button type="button" class="btn-close" data-bs-dismiss="modal" aria-label="Close"></button>
|
||||
</div>
|
||||
<div class="modal-body p-4">
|
||||
<div class="card shadow-none border mb-3">
|
||||
<div class="card-body">
|
||||
<div class="row g-3">
|
||||
<div class="col-md-6">
|
||||
<div class="small text-muted">Numer faktury</div>
|
||||
<div class="fw-semibold">FV/2026/05/1234</div>
|
||||
</div>
|
||||
<div class="col-md-6">
|
||||
<div class="small text-muted">Dostawca</div>
|
||||
<div class="fw-semibold">Flixbus Polska Sp. z o.o.</div>
|
||||
</div>
|
||||
<div class="col-md-4">
|
||||
<div class="small text-muted">Data wystawienia</div>
|
||||
<div class="fw-semibold">04.05.2026</div>
|
||||
</div>
|
||||
<div class="col-md-4">
|
||||
<div class="small text-muted">Kwota brutto</div>
|
||||
<div class="fw-bold text-primary">4 200,00 PLN</div>
|
||||
</div>
|
||||
<div class="col-md-4">
|
||||
<div class="small text-muted">Status</div>
|
||||
<span class="badge bg-label-success">Powiązana</span>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<h6 class="mb-2">Pozycje faktury</h6>
|
||||
<div class="table-responsive">
|
||||
<table class="table table-sm modal-linked-table">
|
||||
<thead class="table-light">
|
||||
<tr>
|
||||
<th>Pozycja</th>
|
||||
<th class="text-end">Kwota brutto</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<tr>
|
||||
<td>Przejazd autokarowy Warszawa–Zakopane</td>
|
||||
<td class="text-end">2 808,00 PLN</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Przejazd autokarowy Zakopane–Warszawa</td>
|
||||
<td class="text-end">648,00 PLN</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Opłata za rezerwację + obsługa</td>
|
||||
<td class="text-end">744,00 PLN</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
<tfoot>
|
||||
<tr>
|
||||
<th>Razem</th>
|
||||
<th class="text-end text-primary">4 200,00 PLN</th>
|
||||
</tr>
|
||||
</tfoot>
|
||||
</table>
|
||||
</div>
|
||||
|
||||
<h6 class="mb-2 mt-4">Powiązane zlecenia</h6>
|
||||
<div class="table-responsive">
|
||||
<table class="table table-sm modal-linked-table">
|
||||
<thead class="table-light">
|
||||
<tr>
|
||||
<th>Zlecenie / Wycieczka</th>
|
||||
<th>Data realizacji</th>
|
||||
<th class="text-end">Przypisana kwota</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<tr>
|
||||
<td>
|
||||
<div class="d-flex flex-column">
|
||||
<span class="fw-semibold text-primary">ZL/2026/05/089</span>
|
||||
<small class="text-muted">#WYC-098 (Tatry Maj)</small>
|
||||
</div>
|
||||
</td>
|
||||
<td>05.05.2026</td>
|
||||
<td class="text-end">2 100,00 PLN</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>
|
||||
<div class="d-flex flex-column">
|
||||
<span class="fw-semibold text-primary">ZL/2026/05/156</span>
|
||||
<small class="text-muted">#WYC-103 (Kraków)</small>
|
||||
</div>
|
||||
</td>
|
||||
<td>08.05.2026</td>
|
||||
<td class="text-end">2 100,00 PLN</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
<tfoot>
|
||||
<tr>
|
||||
<th colspan="2">Razem przypisano</th>
|
||||
<th class="text-end text-primary">4 200,00 PLN</th>
|
||||
</tr>
|
||||
</tfoot>
|
||||
</table>
|
||||
</div>
|
||||
</div>
|
||||
<div class="modal-footer">
|
||||
<button type="button" class="btn btn-label-secondary" data-bs-dismiss="modal">Zamknij</button>
|
||||
<button type="button" class="btn btn-primary">Przejdź do faktury</button>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="modal fade" id="modalUploadInvoice" tabindex="-1" aria-hidden="true" data-bs-backdrop="static">
|
||||
<div class="modal-dialog modal-xl modal-dialog-centered">
|
||||
<div class="modal-content border-0 shadow-lg">
|
||||
@@ -747,7 +899,7 @@ include '../../header-travel.php';
|
||||
<label class="form-label">Kwota brutto <span
|
||||
class="text-danger">*</span></label>
|
||||
<input type="number" class="form-control fw-bold text-primary"
|
||||
value="4200.00">
|
||||
id="invoiceGrossAmount" value="4200.00">
|
||||
</div>
|
||||
<div class="col-sm-4">
|
||||
<label class="form-label">Waluta</label>
|
||||
@@ -821,6 +973,104 @@ include '../../header-travel.php';
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- Card: Podsumowanie odczytanej faktury -->
|
||||
<div class="card shadow-none border mb-3" id="invoiceSummaryCard">
|
||||
<div class="card-header py-2 px-3 d-flex align-items-center justify-content-between"
|
||||
style="background: linear-gradient(135deg, #f0f4ff 0%, #e8f0fe 100%); border-bottom: 1px solid #d0deff;">
|
||||
<div class="d-flex align-items-center gap-2">
|
||||
<i class="bx bx-receipt text-primary fs-5"></i>
|
||||
<span class="fw-semibold text-dark small">Dane odczytane z faktury</span>
|
||||
</div>
|
||||
<div class="d-flex align-items-center gap-3">
|
||||
<div class="d-flex align-items-center gap-2">
|
||||
<span class="text-muted small">Nr faktury:</span>
|
||||
<span class="badge bg-label-primary fw-semibold">FV/2026/05/123</span>
|
||||
</div>
|
||||
<div class="d-flex align-items-center gap-2">
|
||||
<span class="text-muted small">Dostawca:</span>
|
||||
<span class="fw-semibold small text-dark">Flixbus Polska Sp. z o.o.</span>
|
||||
</div>
|
||||
<div class="vr opacity-25"></div>
|
||||
<div class="d-flex align-items-center gap-2">
|
||||
<span class="text-muted small">Netto:</span>
|
||||
<span class="fw-semibold small">3 414,63 PLN</span>
|
||||
</div>
|
||||
<div class="d-flex align-items-center gap-2">
|
||||
<span class="text-muted small">VAT:</span>
|
||||
<span class="fw-semibold small">785,37 PLN</span>
|
||||
</div>
|
||||
<div class="d-flex align-items-center gap-2">
|
||||
<span class="text-muted small">Brutto:</span>
|
||||
<span class="fw-bold text-primary">4 200,00 PLN</span>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="table-responsive">
|
||||
<table class="table table-sm mb-0" style="font-size: 0.82rem;">
|
||||
<thead style="background-color: #f8f9ff;">
|
||||
<tr>
|
||||
<th class="px-3 py-2 text-muted fw-semibold" style="width: 40%;">Nazwa
|
||||
pozycji</th>
|
||||
<th class="px-3 py-2 text-muted fw-semibold text-center" style="width: 8%;">
|
||||
Ilość</th>
|
||||
<th class="px-3 py-2 text-muted fw-semibold text-center" style="width: 8%;">
|
||||
J.m.</th>
|
||||
<th class="px-3 py-2 text-muted fw-semibold text-end" style="width: 13%;">
|
||||
Cena netto</th>
|
||||
<th class="px-3 py-2 text-muted fw-semibold text-center" style="width: 6%;">
|
||||
VAT</th>
|
||||
<th class="px-3 py-2 text-muted fw-semibold text-end" style="width: 12%;">
|
||||
Kwota VAT</th>
|
||||
<th class="px-3 py-2 text-muted fw-semibold text-end" style="width: 13%;">
|
||||
Kwota brutto</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<tr class="border-top">
|
||||
<td class="px-3 py-2">Przejazd autokarowy Warszawa–Zakopane (gr. 24 os.)
|
||||
</td>
|
||||
<td class="px-3 py-2 text-center">24</td>
|
||||
<td class="px-3 py-2 text-center text-muted">os.</td>
|
||||
<td class="px-3 py-2 text-end">2 600,00</td>
|
||||
<td class="px-3 py-2 text-center"><span
|
||||
class="badge bg-label-secondary">8%</span></td>
|
||||
<td class="px-3 py-2 text-end">208,00</td>
|
||||
<td class="px-3 py-2 text-end fw-semibold">2 808,00</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="px-3 py-2">Przejazd autokarowy Zakopane–Warszawa (gr. 24 os.)
|
||||
</td>
|
||||
<td class="px-3 py-2 text-center">24</td>
|
||||
<td class="px-3 py-2 text-center text-muted">os.</td>
|
||||
<td class="px-3 py-2 text-end">600,00</td>
|
||||
<td class="px-3 py-2 text-center"><span
|
||||
class="badge bg-label-secondary">8%</span></td>
|
||||
<td class="px-3 py-2 text-end">48,00</td>
|
||||
<td class="px-3 py-2 text-end fw-semibold">648,00</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="px-3 py-2">Opłata za rezerwację + obsługa</td>
|
||||
<td class="px-3 py-2 text-center">1</td>
|
||||
<td class="px-3 py-2 text-center text-muted">szt.</td>
|
||||
<td class="px-3 py-2 text-end">214,63</td>
|
||||
<td class="px-3 py-2 text-center"><span
|
||||
class="badge bg-label-secondary">23%</span></td>
|
||||
<td class="px-3 py-2 text-end">49,37</td>
|
||||
<td class="px-3 py-2 text-end fw-semibold">264,00</td>
|
||||
</tr>
|
||||
<tr class="table-light border-top">
|
||||
<td class="px-3 py-2 fw-semibold" colspan="3">Razem</td>
|
||||
<td class="px-3 py-2 text-end fw-semibold">3 414,63</td>
|
||||
<td class="px-3 py-2"></td>
|
||||
<td class="px-3 py-2 text-end fw-semibold">785,37</td>
|
||||
<td class="px-3 py-2 text-end fw-bold text-primary">4 200,00 PLN</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
</div>
|
||||
<!-- /Card: Podsumowanie odczytanej faktury -->
|
||||
|
||||
<div class="card shadow-sm border">
|
||||
<div
|
||||
class="card-header bg-label-secondary d-flex justify-content-between align-items-center py-3">
|
||||
@@ -832,7 +1082,7 @@ include '../../header-travel.php';
|
||||
</div>
|
||||
<div class="table-responsive" style="max-height: 300px;">
|
||||
<table class="table table-hover mb-0">
|
||||
<thead class="table-light sticky-top">
|
||||
<thead class="table-light sticky-top text-nowrap">
|
||||
<tr>
|
||||
<th width="40"></th>
|
||||
<th>Zlecenie / Wycieczka</th>
|
||||
@@ -842,45 +1092,67 @@ include '../../header-travel.php';
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<tr>
|
||||
<tr class="assign-order-row" data-order-amount="4200.00">
|
||||
<td><input class="form-check-input" type="checkbox" name="orderSelect"></td>
|
||||
<td>
|
||||
<div class="d-flex flex-column">
|
||||
<span class="fw-semibold text-primary">ZL/2026/05/089</span>
|
||||
<span
|
||||
class="fw-semibold text-primary d-flex align-items-center gap-2">ZL/2026/05/089
|
||||
<span
|
||||
class="badge bg-label-success order-suggestion-badge">Sugerowane
|
||||
zlecenie</span>
|
||||
</span>
|
||||
<small class="text-muted">#WYC-098 (Tatry)</small>
|
||||
</div>
|
||||
</td>
|
||||
<td>05.05.2026</td>
|
||||
<td class="text-end fw-semibold">4 200,00 PLN</td>
|
||||
<td class="split-col d-none text-end"><input type="number"
|
||||
class="form-control form-control-sm text-end" placeholder="0.00">
|
||||
class="form-control form-control-sm text-end split-amount-input"
|
||||
placeholder="0.00" min="0" step="0.01">
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<tr class="assign-order-row" data-order-amount="2100.00">
|
||||
<td><input class="form-check-input" type="checkbox" name="orderSelect"></td>
|
||||
<td>
|
||||
<div class="d-flex flex-column">
|
||||
<span class="fw-semibold text-primary">ZL/2026/05/156</span>
|
||||
<span
|
||||
class="fw-semibold text-primary d-flex align-items-center gap-2">ZL/2026/05/156
|
||||
<span
|
||||
class="badge bg-label-success order-suggestion-badge d-none">Sugerowane
|
||||
zlecenie</span>
|
||||
</span>
|
||||
<small class="text-muted">#WYC-103 (Kraków)</small>
|
||||
</div>
|
||||
</td>
|
||||
<td>08.05.2026</td>
|
||||
<td class="text-end fw-semibold">2 100,00 PLN</td>
|
||||
<td class="split-col d-none text-end"><input type="number"
|
||||
class="form-control form-control-sm text-end" placeholder="0.00">
|
||||
class="form-control form-control-sm text-end split-amount-input"
|
||||
placeholder="0.00" min="0" step="0.01">
|
||||
</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
<tfoot>
|
||||
<tr id="splitTotalRow" class="table-light d-none">
|
||||
<td colspan="4" class="text-end fw-semibold">Suma przypisanych kwot:</td>
|
||||
<td class="text-end fw-bold" id="splitTotalValue">0,00 PLN</td>
|
||||
</tr>
|
||||
</tfoot>
|
||||
</table>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="alert alert-danger d-none mt-3 mb-0" id="splitValidationAlert" role="alert">
|
||||
Suma przypisanych pozycji musi być równa kwocie faktury.
|
||||
</div>
|
||||
|
||||
<div class="d-flex justify-content-between mt-4 pt-3 border-top">
|
||||
<button type="button" class="btn btn-label-secondary"
|
||||
onclick="prevTab('step-validate-tab')">
|
||||
<i class="bx bx-chevron-left me-1"></i> Wróć
|
||||
</button>
|
||||
<button type="button" class="btn btn-success">
|
||||
<button type="button" class="btn btn-success" id="btnSaveAssign">
|
||||
<i class="bx bx-check me-1"></i> Zapisz i Powiąż
|
||||
</button>
|
||||
</div>
|
||||
@@ -1041,7 +1313,115 @@ include '../../header-travel.php';
|
||||
// Zmiana na radio w tabeli, aby można było wybrać tylko jedno
|
||||
document.querySelectorAll('input[name="orderSelect"]').forEach(el => el.type = 'radio');
|
||||
}
|
||||
|
||||
updateSplitAmountSummary();
|
||||
}
|
||||
|
||||
function formatPln(value) {
|
||||
return value.toLocaleString('pl-PL', {
|
||||
minimumFractionDigits: 2,
|
||||
maximumFractionDigits: 2
|
||||
}) + ' PLN';
|
||||
}
|
||||
|
||||
function getInvoiceGrossAmount() {
|
||||
const invoiceInput = document.getElementById('invoiceGrossAmount');
|
||||
const amount = parseFloat(invoiceInput ? invoiceInput.value : 0);
|
||||
return Number.isFinite(amount) ? amount : 0;
|
||||
}
|
||||
|
||||
function updateSplitAmountSummary() {
|
||||
const isSplit = document.getElementById('assignSplit')?.checked;
|
||||
const totalRow = document.getElementById('splitTotalRow');
|
||||
const totalValue = document.getElementById('splitTotalValue');
|
||||
const alertBox = document.getElementById('splitValidationAlert');
|
||||
const saveBtn = document.getElementById('btnSaveAssign');
|
||||
|
||||
if (!isSplit) {
|
||||
totalRow?.classList.add('d-none');
|
||||
alertBox?.classList.add('d-none');
|
||||
if (saveBtn) saveBtn.disabled = false;
|
||||
return;
|
||||
}
|
||||
|
||||
let sum = 0;
|
||||
document.querySelectorAll('#step-assign .table-responsive table tbody tr').forEach(function (row) {
|
||||
const selector = row.querySelector('input[name="orderSelect"]');
|
||||
const amountInput = row.querySelector('.split-amount-input');
|
||||
if (!selector || !amountInput || !selector.checked) return;
|
||||
const value = parseFloat(amountInput.value);
|
||||
if (Number.isFinite(value)) sum += value;
|
||||
});
|
||||
|
||||
const invoiceAmount = getInvoiceGrossAmount();
|
||||
const isMatch = Math.abs(sum - invoiceAmount) < 0.01;
|
||||
|
||||
totalRow?.classList.remove('d-none');
|
||||
if (totalValue) {
|
||||
totalValue.textContent = formatPln(sum);
|
||||
totalValue.classList.toggle('text-danger', !isMatch);
|
||||
totalValue.classList.toggle('text-success', isMatch);
|
||||
}
|
||||
|
||||
alertBox?.classList.toggle('d-none', isMatch);
|
||||
if (saveBtn) saveBtn.disabled = !isMatch;
|
||||
}
|
||||
|
||||
function updateSuggestedOrder() {
|
||||
const tbody = document.querySelector('#step-assign .table-responsive table tbody');
|
||||
if (!tbody) return;
|
||||
|
||||
const rows = Array.from(tbody.querySelectorAll('.assign-order-row'));
|
||||
if (!rows.length) return;
|
||||
|
||||
const invoiceAmount = getInvoiceGrossAmount();
|
||||
let bestRow = null;
|
||||
let bestDiff = Number.POSITIVE_INFINITY;
|
||||
|
||||
rows.forEach(function (row) {
|
||||
row.classList.remove('table-success');
|
||||
row.querySelectorAll('.order-suggestion-badge').forEach(function (badge) {
|
||||
badge.classList.add('d-none');
|
||||
});
|
||||
|
||||
const orderAmount = parseFloat(row.dataset.orderAmount || '0');
|
||||
const diff = Math.abs(orderAmount - invoiceAmount);
|
||||
if (diff < bestDiff) {
|
||||
bestDiff = diff;
|
||||
bestRow = row;
|
||||
}
|
||||
});
|
||||
|
||||
if (!bestRow) return;
|
||||
tbody.prepend(bestRow);
|
||||
bestRow.classList.add('table-success');
|
||||
bestRow.querySelectorAll('.order-suggestion-badge').forEach(function (badge) {
|
||||
badge.classList.remove('d-none');
|
||||
});
|
||||
}
|
||||
|
||||
document.querySelectorAll('input[name="orderSelect"], .split-amount-input').forEach(function (el) {
|
||||
el.addEventListener('change', updateSplitAmountSummary);
|
||||
el.addEventListener('input', updateSplitAmountSummary);
|
||||
});
|
||||
|
||||
document.querySelectorAll('.split-amount-input').forEach(function (input) {
|
||||
input.addEventListener('input', function () {
|
||||
const row = input.closest('tr');
|
||||
const selector = row ? row.querySelector('input[name="orderSelect"]') : null;
|
||||
const value = parseFloat(input.value);
|
||||
if (selector && Number.isFinite(value) && value > 0) {
|
||||
selector.checked = true;
|
||||
}
|
||||
});
|
||||
});
|
||||
|
||||
document.getElementById('invoiceGrossAmount')?.addEventListener('input', function () {
|
||||
updateSplitAmountSummary();
|
||||
updateSuggestedOrder();
|
||||
});
|
||||
updateSuggestedOrder();
|
||||
updateSplitAmountSummary();
|
||||
</script>
|
||||
|
||||
<style>
|
||||
@@ -1099,6 +1479,17 @@ include '../../header-travel.php';
|
||||
.option-card:hover {
|
||||
border-color: #696cff !important;
|
||||
}
|
||||
|
||||
/* Spójne rozmiary i odstępy dla tabel w podglądzie powiązanej faktury */
|
||||
#modalLinkedInvoicePreview .modal-linked-table {
|
||||
font-size: 0.82rem;
|
||||
}
|
||||
|
||||
#modalLinkedInvoicePreview .modal-linked-table th,
|
||||
#modalLinkedInvoicePreview .modal-linked-table td {
|
||||
padding: 0.5rem 0.75rem;
|
||||
vertical-align: middle;
|
||||
}
|
||||
</style>
|
||||
|
||||
<script>
|
||||
@@ -1115,19 +1506,19 @@ include '../../header-travel.php';
|
||||
if (checks.length === 0) {
|
||||
label.textContent = 'Wszystkie statusy';
|
||||
} else {
|
||||
var names = Array.from(checks).map(function(c) {
|
||||
var names = Array.from(checks).map(function (c) {
|
||||
return c.closest('label').textContent.trim();
|
||||
});
|
||||
label.textContent = names.join(', ');
|
||||
}
|
||||
}
|
||||
|
||||
document.querySelectorAll('.status-check').forEach(function(cb) {
|
||||
document.querySelectorAll('.status-check').forEach(function (cb) {
|
||||
cb.addEventListener('change', updateStatusLabel);
|
||||
});
|
||||
|
||||
// Zamknij po kliknięciu poza dropdownem
|
||||
document.addEventListener('click', function(e) {
|
||||
document.addEventListener('click', function (e) {
|
||||
var dropdown = document.getElementById('statusDropdown');
|
||||
if (dropdown && !dropdown.contains(e.target)) {
|
||||
document.getElementById('statusDropdownMenu').classList.remove('show');
|
||||
|
||||
Reference in New Issue
Block a user