Travel Invoice: Poprawki

This commit is contained in:
2026-05-07 19:20:10 +02:00
parent ed1d98e283
commit 103a99060f
6 changed files with 910 additions and 37 deletions

View File

@@ -0,0 +1,138 @@
<?php
$enablePrototypeComments = true;
include '../../header-admin.php';
?>
<div class="container-xxl flex-grow-1 container-p-y">
<h4 class="fw-bold py-3 mb-4">
Admin Panel <span class="text-muted fw-light">/ Firmy</span>
</h4>
<div class="card mb-4">
<div class="card-body">
<h5 class="card-title mb-1">Filtrowanie firm</h5>
<p class="text-muted small mb-3">Wyszukaj firmy na podstawie nazwy lub numeru NIP.</p>
<form onsubmit="return false;" class="row g-3">
<div class="col-md-4">
<label class="form-label" for="filter-company-name">Nazwa firmy</label>
<div class="input-group input-group-merge">
<span class="input-group-text"><i class="bx bx-buildings"></i></span>
<input type="text" id="filter-company-name" class="form-control"
placeholder="Wprowadź nazwę firmy">
</div>
</div>
<div class="col-md-4">
<label class="form-label" for="filter-nip">NIP</label>
<div class="input-group input-group-merge">
<span class="input-group-text"><i class="bx bx-id-card"></i></span>
<input type="text" id="filter-nip" class="form-control" placeholder="Wprowadź NIP">
</div>
</div>
<div class="col-md-4 d-flex align-items-end gap-2">
<button type="reset" class="btn btn-label-secondary w-50">
<i class="bx bx-reset me-1"></i> Wyczyść
</button>
<button type="submit" class="btn btn-primary w-50">
<i class="bx bx-search me-1"></i> Filtruj
</button>
</div>
</form>
</div>
</div>
<div class="card">
<h5 class="card-header border-bottom d-flex justify-content-between align-items-center">
Zarejestrowane firmy
</h5>
<div class="table-responsive text-nowrap pb-2">
<table class="table table-hover mb-0">
<thead class="table-light">
<tr>
<th>ID</th>
<th>Nazwa</th>
<th>Status</th>
<th>Dokument</th>
<th>Rejestracja</th>
<th class="text-end">Akcje</th>
</tr>
</thead>
<tbody class="table-border-bottom-0">
<tr>
<td><strong>#1024</strong></td>
<td>
<div class="d-flex justify-content-start align-items-center">
<div class="avatar avatar-sm me-3">
<span class="avatar-initial rounded-circle bg-label-primary">AB</span>
</div>
<div class="d-flex flex-column">
<h6 class="mb-0 fw-semibold">
Alpha Business Sp. z o.o.
</h6>
<small class="text-muted">NIP: 1234567890</small>
</div>
</div>
</td>
<td>
<span class="badge bg-label-success">Aktywna</span>
</td>
<td>
<span class="text-muted small"><i class="bx bx-file me-1"></i>FV-2026/05/001</span>
</td>
<td>
<span class="text-muted small">2026-05-01</span>
</td>
<td class="text-end">
<button type="button" class="btn btn-sm btn-outline-primary">
Zarządzaj
</button>
</td>
</tr>
<tr>
<td><strong>#1025</strong></td>
<td>
<div class="d-flex justify-content-start align-items-center">
<div class="avatar avatar-sm me-3">
<span class="avatar-initial rounded-circle bg-label-secondary">BM</span>
</div>
<div class="d-flex flex-column">
<h6 class="mb-0 fw-semibold">
Beta Marketing S.A.
</h6>
<small class="text-muted">NIP: 0987654321</small>
</div>
</div>
</td>
<td>
<span class="badge bg-label-secondary">Wyłączona</span>
</td>
<td>
<span class="text-muted small"><i class="bx bx-file me-1"></i>Proforma 12/2026</span>
</td>
<td>
<span class="text-muted small">2026-05-05</span>
</td>
<td class="text-end">
<button type="button" class="btn btn-sm btn-outline-primary">
Zarządzaj
</button>
</td>
</tr>
</tbody>
</table>
</div>
</div>
</div>
<div class="content-backdrop fade"></div>
<?php include '../../footer.php'; ?>
</body>
</html>

View File

@@ -0,0 +1,198 @@
<?php
$enablePrototypeComments = true;
include '../../header-admin.php';
?>
<div class="container-xxl flex-grow-1 container-p-y">
<h4 class="fw-bold py-3 mb-4">
Admin Panel <span class="text-muted fw-light">/ Użytkownicy</span>
</h4>
<div class="card mb-4">
<div class="card-body">
<h5 class="card-title mb-1">Filtrowanie użytkowników</h5>
<p class="text-muted small mb-3">Wyszukaj użytkowników na podstawie danych, przypisanej firmy lub statusu.</p>
<form onsubmit="return false;" class="row g-3">
<div class="col-md-3">
<label class="form-label" for="filter-name">Imię i nazwisko</label>
<div class="input-group input-group-merge">
<span class="input-group-text"><i class="bx bx-user"></i></span>
<input type="text" id="filter-name" class="form-control" placeholder="Wprowadź dane">
</div>
</div>
<div class="col-md-3">
<label class="form-label" for="filter-email">Adres e-mail</label>
<div class="input-group input-group-merge">
<span class="input-group-text"><i class="bx bx-envelope"></i></span>
<input type="email" id="filter-email" class="form-control" placeholder="Wprowadź e-mail">
</div>
</div>
<div class="col-md-3">
<label class="form-label" for="filter-company">Przypisana firma</label>
<select id="filter-company" class="select2 form-select" data-allow-clear="true" data-placeholder="Wybierz firmę">
<option value=""></option>
<option value="1">Alpha Business Sp. z o.o.</option>
<option value="2">Beta Marketing S.A.</option>
<option value="3">Tech Magico</option>
</select>
</div>
<div class="col-md-3">
<label class="form-label" for="filter-status">Status</label>
<select id="filter-status" class="form-select">
<option value="">Wszystkie</option>
<option value="active">Aktywny</option>
<option value="inactive">Nieaktywny</option>
</select>
</div>
<div class="col-12 d-flex justify-content-end gap-2 mt-3">
<button type="reset" class="btn btn-label-secondary">
<i class="bx bx-reset me-1"></i> Wyczyść
</button>
<button type="submit" class="btn btn-primary px-4">
<i class="bx bx-search me-1"></i> Filtruj
</button>
</div>
</form>
</div>
</div>
<div class="card">
<h5 class="card-header border-bottom d-flex justify-content-between align-items-center">
Zarejestrowani użytkownicy
</h5>
<div class="table-responsive text-nowrap pb-2">
<table class="table table-hover mb-0">
<thead class="table-light">
<tr>
<th>ID</th>
<th>Użytkownik</th>
<th>Firma</th>
<th>Status</th>
<th>Rejestracja</th>
<th class="text-end">Akcje</th>
</tr>
</thead>
<tbody class="table-border-bottom-0">
<tr>
<td><strong>#501</strong></td>
<td>
<div class="d-flex justify-content-start align-items-center">
<div class="avatar avatar-sm me-3">
<span class="avatar-initial rounded-circle bg-label-primary">BB</span>
</div>
<div class="d-flex flex-column">
<h6 class="mb-0 fw-semibold">
Bartłomiej Banaczyk
<i class="bx bxs-badge-check text-primary ms-1" data-bs-toggle="tooltip" title="Zweryfikowane konto id.magico"></i>
</h6>
<small class="text-muted">banaczyk@magico.pl</small>
</div>
</div>
</td>
<td>Alpha Business Sp. z o.o.</td>
<td>
<span class="badge bg-label-success">Aktywny</span>
</td>
<td>
<span class="text-muted small">2026-05-01</span>
</td>
<td class="text-end">
<button type="button" class="btn btn-sm btn-outline-primary">
Zarządzaj
</button>
</td>
</tr>
<tr>
<td><strong>#502</strong></td>
<td>
<div class="d-flex justify-content-start align-items-center">
<div class="avatar avatar-sm me-3">
<span class="avatar-initial rounded-circle bg-label-secondary"><i class="bx bx-user"></i></span>
</div>
<div class="d-flex flex-column">
<h6 class="mb-0 fw-semibold">
Piotr Mierzwa
</h6>
<small class="text-muted">piotr@magico.pl</small>
</div>
</div>
</td>
<td>Beta Marketing S.A.</td>
<td>
<span class="badge bg-label-secondary">Nieaktywny</span>
</td>
<td>
<span class="text-muted small">2026-05-03</span>
</td>
<td class="text-end">
<button type="button" class="btn btn-sm btn-outline-primary">
Zarządzaj
</button>
</td>
</tr>
<tr>
<td><strong>#503</strong></td>
<td>
<div class="d-flex justify-content-start align-items-center">
<div class="avatar avatar-sm me-3">
<img src="https://ui-avatars.com/api/?name=Anna+Kowalska&background=ffe7e3&color=ff5b5c" alt="Avatar" class="rounded-circle">
</div>
<div class="d-flex flex-column">
<h6 class="mb-0 fw-semibold">
Anna Kowalska
<i class="bx bxs-badge-check text-primary ms-1" data-bs-toggle="tooltip" title="Zweryfikowane konto id.magico"></i>
</h6>
<small class="text-muted">anna.kowalska@example.com</small>
</div>
</div>
</td>
<td>Tech Magico</td>
<td>
<span class="badge bg-label-success">Aktywny</span>
</td>
<td>
<span class="text-muted small">2026-05-05</span>
</td>
<td class="text-end">
<button type="button" class="btn btn-sm btn-outline-primary">
Zarządzaj
</button>
</td>
</tr>
</tbody>
</table>
</div>
</div>
</div>
<div class="content-backdrop fade"></div>
<?php include '../../footer.php'; ?>
<!-- Scripts -->
<script>
document.addEventListener("DOMContentLoaded", function () {
if (typeof $ !== 'undefined' && $('.select2').length) {
$('.select2').select2({
placeholder: 'Wybierz firmę',
allowClear: true,
theme: 'bootstrap-5'
});
}
});
</script>
</body>
</html>

View File

@@ -0,0 +1,155 @@
<?php
$enablePrototypeComments = true;
include '../../header-admin.php';
?>
<div class="container-xxl flex-grow-1 container-p-y">
<h4 class="fw-bold py-3 mb-4">
Admin Panel <span class="text-muted fw-light">/ Kokpit</span>
</h4>
<!-- Baner Informacyjny -->
<div class="row mb-4">
<div class="col-12">
<div class="card bg-primary text-white text-center text-md-start"
style="background: linear-gradient(135deg, #696cff 0%, #a481ff 100%);">
<div
class="card-body d-flex flex-column flex-md-row justify-content-between align-items-center py-4 px-5">
<div class="mb-3 mb-md-0 d-flex gap-4 align-items-center">
<div
class="avatar avatar-lg bg-white rounded flex-shrink-0 d-flex align-items-center justify-content-center shadow-sm">
<i class="bx bx-buildings text-primary fs-2"></i>
</div>
<div>
<h4 class="text-white fw-bold mb-1">Centrum Zarządzania magico.pro</h4>
<p class="mb-0 text-white-50" style="max-width: 650px;">
Główny panel administracyjny ekosystemu. Monitoruj aktywność klientów, zarządzaj
modułami sync, helpdesk oraz delivery, a także udzielaj bezpośredniego wsparcia
technicznego użytkownikom platformy.
</p>
</div>
<div>
<a href="https://magico.pl/kontakt" target=" _blank"
class="btn btn-white text-primary shadow-sm fw-bold">
<i class="bx bx-cog me-2"></i> Wsparcie techniczne Magico
</a>
</div>
</div>
</div>
</div>
</div>
<!-- 1. Sekcja KPI (Karty informacyjne) -->
<div class="row g-4 mb-4">
<div class="col-sm-6 col-xl-3">
<div class="card h-100 shadow-sm border-0">
<div class="card-body">
<div class="d-flex align-items-start justify-content-between">
<div class="content-left">
<span class="text-muted text-uppercase small fw-bold" style="letter-spacing: 0.5px;">
Firmy w bazie
</span>
<div class="d-flex align-items-end mt-2">
<h3 class="mb-0 me-2 text-dark">142</h3>
</div>
<small class="text-success">
<i class="bx bx-trending-up me-1"></i>+12 w tym miesiącu
</small>
</div>
<span class="badge bg-label-primary rounded p-2">
<i class="bx bx-briefcase fs-4"></i>
</span>
</div>
</div>
</div>
</div>
<div class="col-sm-6 col-xl-3">
<div class="card h-100 shadow-sm border-0">
<div class="card-body">
<div class="d-flex align-items-start justify-content-between">
<div class="content-left">
<span class="text-muted text-uppercase small fw-bold" style="letter-spacing: 0.5px;">
Użytkownicy
</span>
<div class="d-flex align-items-end mt-2">
<h3 class="mb-0 me-2 text-dark">584</h3>
</div>
<small class="text-muted">
<i class="bx bx-user me-1"></i>Zarejestrowane konta id
</small>
</div>
<span class="badge bg-label-info rounded p-2">
<i class="bx bx-group fs-4"></i>
</span>
</div>
</div>
</div>
</div>
<div class="col-sm-6 col-xl-3">
<div class="card h-100 shadow-sm border-0">
<div class="card-body">
<div class="d-flex align-items-start justify-content-between">
<div class="content-left">
<span class="text-muted text-uppercase small fw-bold" style="letter-spacing: 0.5px;">
Wystawione faktury
</span>
<div class="d-flex align-items-end mt-2">
<h3 class="mb-0 me-2 text-dark">12 450 <span
class="fs-6 fw-normal text-muted">zł</span>
</h3>
</div>
<small class="text-muted">
<i class="bx bx-calendar me-1"></i>Poprzedni miesiąc
</small>
</div>
<span class="badge bg-label-success rounded p-2">
<i class="bx bx-receipt fs-4"></i>
</span>
</div>
</div>
</div>
</div>
<div class="col-sm-6 col-xl-3">
<div class="card h-100 shadow-sm border-0 border-start border-danger border-3">
<div class="card-body">
<div class="d-flex align-items-start justify-content-between">
<div class="content-left">
<span class="text-muted text-uppercase small fw-bold" style="letter-spacing: 0.5px;">
Zaległości
</span>
<div class="d-flex align-items-end mt-2">
<h3 class="mb-0 me-2 text-danger">1 820 <span
class="fs-6 fw-normal text-danger">zł</span></h3>
</div>
<small class="text-danger fw-semibold">
<i class="bx bx-error-circle me-1"></i>Wymaga kontaktu
</small>
</div>
<span class="badge bg-label-danger rounded p-2">
<i class="bx bx-wallet fs-4"></i>
</span>
</div>
</div>
</div>
</div>
</div>
</div>
<div class="content-backdrop fade"></div>
<?php include '../../footer.php'; ?>
</body>
</html>

View File

@@ -0,0 +1,66 @@
<?php
$currentPage = basename($_SERVER['PHP_SELF']);
?>
<aside id="layout-menu" class="layout-menu menu-vertical menu bg-menu-theme">
<div class="app-brand demo">
<a href="index.php" class="app-brand-link">
<span class="app-brand-text demo menu-text fw-bold ms-2">Admin Panel</span>
</a>
<a href="javascript:void(0);" class="layout-menu-toggle menu-link text-large ms-auto">
<i class="bx bx-chevron-left bx-sm align-middle"></i>
</a>
</div>
<div class="menu-inner-shadow"></div>
<ul class="menu-inner py-1">
<li class="menu-header small text-uppercase">
<span class="menu-header-text" data-i18n="Podgląd">Podgląd</span>
</li>
<li class="menu-item <?php echo ($currentPage == 'index.php') ? 'active' : ''; ?>">
<a href="index.php" class="menu-link">
<i class="menu-icon tf-icons bx bx-home-circle"></i>
<div class="text-truncate" data-i18n="Kokpit">Kokpit</div>
</a>
</li>
<li class="menu-header small text-uppercase">
<span class="menu-header-text" data-i18n="Zarządzanie">Zarządzanie systemem</span>
</li>
<li class="menu-item <?php echo ($currentPage == 'admin-companies.php') ? 'active' : ''; ?>">
<a href="admin-companies.php" class="menu-link">
<i class="menu-icon tf-icons bx bx-buildings"></i>
<div class="text-truncate" data-i18n="Firmy">Firmy</div>
</a>
</li>
<li class="menu-item <?php echo ($currentPage == 'admin-users.php') ? 'active' : ''; ?>">
<a href="admin-users.php" class="menu-link">
<i class="menu-icon tf-icons bx bx-group"></i>
<div class="text-truncate" data-i18n="Użytkownicy">Użytkownicy</div>
</a>
</li>
<li class="menu-item <?php echo ($currentPage == 'admin-apps.php') ? 'active' : ''; ?>">
<a href="admin-apps.php" class="menu-link">
<i class="menu-icon tf-icons bx bx-grid-alt"></i>
<div class="text-truncate" data-i18n="Aplikacje">Aplikacje</div>
</a>
</li>
<li class="menu-header small text-uppercase">
<span class="menu-header-text" data-i18n="Finanse">Finanse</span>
</li>
<li class="menu-item <?php echo ($currentPage == 'admin-billing.php') ? 'active' : ''; ?>">
<a href="admin-billing.php" class="menu-link">
<i class="menu-icon tf-icons bx bx-receipt"></i>
<div class="text-truncate" data-i18n="Rozliczenia">Rozliczenia</div>
</a>
</li>
</ul>
</aside>

View File

@@ -168,7 +168,7 @@ include '../../header-travel.php';
<th>Dostawca</th>
<th>Data realizacji</th>
<th class="text-end">Kwota zlecenia</th>
<th class="text-center">Status faktury</th>
<th class="text-center">Status zlecenia</th>
<th class="text-end">Akcje</th>
</tr>
</thead>
@@ -190,8 +190,8 @@ include '../../header-travel.php';
</td>
<td><span class="text-muted">12.05.2026</span></td>
<td class="text-end fw-semibold">12 500,00 PLN</td>
<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-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>
@@ -214,9 +214,7 @@ include '../../header-travel.php';
</td>
<td><span class="text-muted">05.05.2026</span></td>
<td class="text-end fw-semibold">4 200,00 PLN</td>
<td class="text-center"><span class="badge bg-label-warning"
data-bs-toggle="tooltip"
title="Faktura zaliczkowa. Brakuje końcowej.">Częściowo rozliczone</span>
<td class="text-center"><span class="badge bg-label-warning">Zaliczkowane</span>
</td>
<td class="text-end">
<div class="btn-group">
@@ -349,9 +347,8 @@ include '../../header-travel.php';
</td>
<td><span class="text-muted">02.05.2026</span></td>
<td class="text-end fw-semibold">1 920,00 EUR</td>
<td class="text-center"><span class="badge bg-label-warning"
data-bs-toggle="tooltip" title="Rozliczono 60% kwoty zlecenia">Częściowo
rozliczone</span></td>
<td class="text-center"><span class="badge bg-label-warning">Zaliczkowane</span>
</td>
<td class="text-end">
<div class="btn-group">
<button class="btn btn-sm btn-outline-secondary" data-bs-toggle="modal"
@@ -518,21 +515,27 @@ include '../../header-travel.php';
<table class="table table-hover">
<thead class="table-light">
<tr>
<th style="width: 48px;"><input class="form-check-input" type="checkbox" id="selectAllInvoices"></th>
<th>Numer Faktury</th>
<th>Dostawca (Triada)</th>
<th>Data wyst.</th>
<th class="text-end">Kwota Brutto</th>
<th class="text-center">Status powiązania</th>
<th>Źródło dokumentu</th>
<th class="text-end">Akcje</th>
</tr>
</thead>
<tbody class="table-border-bottom-0">
<tr>
<td><input class="form-check-input invoice-checkbox" type="checkbox"></td>
<td>
<div class="d-flex align-items-center">
<i class="bx bxs-file-pdf text-danger fs-4 me-2"></i>
<span class="fw-semibold text-dark">FV/2026/05/1234</span>
<div class="d-flex flex-column">
<span class="fw-semibold text-dark">FV/2026/05/1234</span>
<small class="text-muted">Faktura VAT</small>
</div>
</div>
</td>
<td>
@@ -546,18 +549,31 @@ include '../../header-travel.php';
<td class="text-center">
<span class="badge bg-label-danger">Nieprzypisana</span>
</td>
<td>
<div class="d-flex align-items-center gap-2">
<span class="avatar avatar-xs">
<span class="avatar-initial rounded-circle bg-label-secondary"><i class="bx bx-user fs-6"></i></span>
</span>
<span class="small">Anna Kowalska</span>
</div>
</td>
<td class="text-end">
<button class="btn btn-sm btn-icon btn-text-secondary" data-bs-toggle="tooltip"
title="Podgląd dokumentu"><i class="bx bx-show"></i></button>
<button class="btn btn-sm btn-primary ms-1" data-bs-toggle="modal" data-bs-target="#modalLinkExistingInvoice">Połącz ze zleceniem</button>
<button class="btn btn-sm btn-primary ms-1" data-bs-toggle="modal"
data-bs-target="#modalLinkExistingInvoice">Połącz ze zleceniem</button>
</td>
</tr>
<tr>
<td><input class="form-check-input invoice-checkbox" type="checkbox"></td>
<td>
<div class="d-flex align-items-center">
<i class="bx bx-receipt text-success fs-4 me-2"></i>
<span class="fw-semibold text-dark">F-2026-999</span>
<div class="d-flex flex-column">
<span class="fw-semibold text-dark">F-2026-999</span>
<small class="text-muted">Faktura VAT z KSeF</small>
</div>
</div>
</td>
<td>
@@ -572,6 +588,14 @@ include '../../header-travel.php';
<span class="badge bg-label-info" data-bs-toggle="tooltip"
title="Przypisano do 3 różnych zleceń/wycieczek">Rozksięgowana (1:N)</span>
</td>
<td>
<div class="d-flex align-items-center gap-2">
<span class="avatar avatar-xs">
<span class="avatar-initial rounded-circle bg-label-info"><i class="bx bx-cloud-download fs-6"></i></span>
</span>
<span class="small">KSeF</span>
</div>
</td>
<td class="text-end">
<button class="btn btn-sm btn-icon btn-text-secondary" data-bs-toggle="tooltip"
title="Szczegóły rozksięgowania"><i class="bx bx-list-ul"></i></button>
@@ -581,11 +605,15 @@ include '../../header-travel.php';
</tr>
<tr>
<td><input class="form-check-input invoice-checkbox" type="checkbox"></td>
<td>
<div class="d-flex align-items-center">
<i class="bx bx-image text-warning fs-4 me-2" data-bs-toggle="tooltip"
title="Skan z aplikacji pilota"></i>
<span class="fw-semibold text-dark">Paragon/FV 12</span>
<div class="d-flex flex-column">
<span class="fw-semibold text-dark">Paragon/FV 12</span>
<small class="text-muted">Faktura zaliczkowa</small>
</div>
</div>
</td>
<td>
@@ -599,12 +627,177 @@ include '../../header-travel.php';
<td class="text-center">
<span class="badge bg-label-success">Przypisana (1:1)</span>
</td>
<td>
<div class="d-flex align-items-center gap-2">
<span class="avatar avatar-xs">
<span class="avatar-initial rounded-circle bg-label-warning"><i class="bx bx-walk fs-6"></i></span>
</span>
<div class="d-flex flex-column">
<span class="small">Pilot</span>
<small class="text-muted">Jan Kowalski</small>
</div>
</div>
</td>
<td class="text-end">
<button class="btn btn-sm btn-icon btn-text-secondary" data-bs-toggle="tooltip"
title="Podgląd skanu"><i class="bx bx-show"></i></button>
</td>
</tr>
<tr>
<td><input class="form-check-input invoice-checkbox" type="checkbox"></td>
<td>
<div class="d-flex align-items-center">
<i class="bx bxs-file-pdf text-danger fs-4 me-2"></i>
<div class="d-flex flex-column">
<span class="fw-semibold text-dark">PRF/2026/05/088</span>
<small class="text-muted">Proforma</small>
</div>
</div>
</td>
<td>
<div class="d-flex flex-column">
<span>Hotel Colosseum Roma</span>
<small class="text-muted">NIP: 5566778899</small>
</div>
</td>
<td><span class="text-muted">02.05.2026</span></td>
<td class="text-end fw-bold">12 500,00 PLN</td>
<td class="text-center">
<span class="badge bg-label-danger">Nieprzypisana</span>
</td>
<td>
<div class="d-flex align-items-center gap-2">
<span class="avatar avatar-xs">
<span class="avatar-initial rounded-circle bg-label-secondary"><i class="bx bx-user fs-6"></i></span>
</span>
<span class="small">Anna Kowalska</span>
</div>
</td>
<td class="text-end">
<button class="btn btn-sm btn-icon btn-text-secondary" data-bs-toggle="tooltip"
title="Podgląd dokumentu"><i class="bx bx-show"></i></button>
<button class="btn btn-sm btn-primary ms-1" data-bs-toggle="modal"
data-bs-target="#modalLinkExistingInvoice">Połącz ze zleceniem</button>
</td>
</tr>
<tr>
<td><input class="form-check-input invoice-checkbox" type="checkbox"></td>
<td>
<div class="d-flex align-items-center">
<i class="bx bx-receipt text-primary fs-4 me-2"></i>
<div class="d-flex flex-column">
<span class="fw-semibold text-dark">FVZ/2026/04/311</span>
<small class="text-muted">Faktura zaliczkowa</small>
</div>
</div>
</td>
<td>
<div class="d-flex flex-column">
<span>Air Corsica S.A.</span>
<small class="text-muted">NIP: 3344556677</small>
</div>
</td>
<td><span class="text-muted">22.04.2026</span></td>
<td class="text-end fw-bold">8 760,00 PLN</td>
<td class="text-center">
<span class="badge bg-label-success">Przypisana (1:1)</span>
</td>
<td>
<div class="d-flex align-items-center gap-2">
<span class="avatar avatar-xs">
<span class="avatar-initial rounded-circle bg-label-info"><i class="bx bx-cloud-download fs-6"></i></span>
</span>
<span class="small">KSeF</span>
</div>
</td>
<td class="text-end">
<button class="btn btn-sm btn-icon btn-text-secondary" data-bs-toggle="tooltip"
title="Podgląd dokumentu"><i class="bx bx-show"></i></button>
</td>
</tr>
<tr>
<td><input class="form-check-input invoice-checkbox" type="checkbox"></td>
<td>
<div class="d-flex align-items-center">
<i class="bx bxs-file-pdf text-info fs-4 me-2"></i>
<div class="d-flex flex-column">
<span class="fw-semibold text-dark">KSEF/2026/05/0042</span>
<small class="text-muted">Faktura VAT z KSeF</small>
</div>
</div>
</td>
<td>
<div class="d-flex flex-column">
<span>TAP Air Portugal</span>
<small class="text-muted">NIP: 9988776655</small>
</div>
</td>
<td><span class="text-muted">18.05.2026</span></td>
<td class="text-end fw-bold">5 400,00 PLN</td>
<td class="text-center">
<span class="badge bg-label-warning">Zaliczkowana</span>
</td>
<td>
<div class="d-flex align-items-center gap-2">
<span class="avatar avatar-xs">
<span class="avatar-initial rounded-circle bg-label-warning"><i class="bx bx-walk fs-6"></i></span>
</span>
<div class="d-flex flex-column">
<span class="small">Pilot</span>
<small class="text-muted">Tomasz S.</small>
</div>
</div>
</td>
<td class="text-end">
<button class="btn btn-sm btn-icon btn-text-secondary" data-bs-toggle="tooltip"
title="Podgląd dokumentu"><i class="bx bx-show"></i></button>
<button class="btn btn-sm btn-primary ms-1" data-bs-toggle="modal"
data-bs-target="#modalLinkExistingInvoice">Połącz ze zleceniem</button>
</td>
</tr>
<tr>
<td><input class="form-check-input invoice-checkbox" type="checkbox"></td>
<td>
<div class="d-flex align-items-center">
<i class="bx bx-receipt text-secondary fs-4 me-2"></i>
<div class="d-flex flex-column">
<span class="fw-semibold text-dark">PRF/2026/05/102</span>
<small class="text-muted">Proforma</small>
</div>
</div>
</td>
<td>
<div class="d-flex flex-column">
<span>Venezia Apartments S.r.l.</span>
<small class="text-muted">NIP: 1122334455</small>
</div>
</td>
<td><span class="text-muted">08.05.2026</span></td>
<td class="text-end fw-bold">3 680,00 EUR</td>
<td class="text-center">
<span class="badge bg-label-info" data-bs-toggle="tooltip"
title="Przypisano do 2 zleceń">Rozksięgowana (1:N)</span>
</td>
<td>
<div class="d-flex align-items-center gap-2">
<span class="avatar avatar-xs">
<span class="avatar-initial rounded-circle bg-label-secondary"><i class="bx bx-user fs-6"></i></span>
</span>
<span class="small">Anna Kowalska</span>
</div>
</td>
<td class="text-end">
<button class="btn btn-sm btn-icon btn-text-secondary" data-bs-toggle="tooltip"
title="Szczegóły rozksięgowania"><i class="bx bx-list-ul"></i></button>
<button class="btn btn-sm btn-icon btn-text-secondary"><i
class="bx bx-show"></i></button>
</td>
</tr>
</tbody>
</table>
</div>
@@ -1350,37 +1543,51 @@ include '../../header-travel.php';
<h6 class="mb-3">Wybierz sposób rozliczenia dokumentu</h6>
<div class="row g-3 mb-4">
<div class="col-md-3">
<label class="card border border-2 shadow-none cursor-pointer h-100 option-card-existing border-primary" for="assignSingleExisting">
<label
class="card border border-2 shadow-none cursor-pointer h-100 option-card-existing border-primary"
for="assignSingleExisting">
<div class="card-body text-center p-3">
<input type="radio" name="assignTypeExisting" id="assignSingleExisting" value="single" class="form-check-input mb-3" checked onchange="toggleAssignTypeExisting('single')">
<h6 class="mb-1"><i class="bx bx-link-alt fs-4 d-block mb-2 text-primary"></i>Pojedyncze (1:1)</h6>
<input type="radio" name="assignTypeExisting" id="assignSingleExisting" value="single"
class="form-check-input mb-3" checked onchange="toggleAssignTypeExisting('single')">
<h6 class="mb-1"><i class="bx bx-link-alt fs-4 d-block mb-2 text-primary"></i>Pojedyncze
(1:1)</h6>
<small class="text-muted">Faktura na jedno zlecenie.</small>
</div>
</label>
</div>
<div class="col-md-3">
<label class="card border shadow-none cursor-pointer h-100 option-card-existing bg-lighter" for="assignSplitExisting">
<label class="card border shadow-none cursor-pointer h-100 option-card-existing bg-lighter"
for="assignSplitExisting">
<div class="card-body text-center p-3">
<input type="radio" name="assignTypeExisting" id="assignSplitExisting" value="split" class="form-check-input mb-3" onchange="toggleAssignTypeExisting('split')">
<h6 class="mb-1"><i class="bx bx-git-branch fs-4 d-block mb-2 text-primary"></i>Rozksięgowanie (1:N)</h6>
<input type="radio" name="assignTypeExisting" id="assignSplitExisting" value="split"
class="form-check-input mb-3" onchange="toggleAssignTypeExisting('split')">
<h6 class="mb-1"><i
class="bx bx-git-branch fs-4 d-block mb-2 text-primary"></i>Rozksięgowanie (1:N)
</h6>
<small class="text-muted">Faktura na kilka zleceń.</small>
</div>
</label>
</div>
<div class="col-md-3">
<label class="card border shadow-none cursor-pointer h-100 option-card-existing bg-lighter" for="assignPartialExisting">
<label class="card border shadow-none cursor-pointer h-100 option-card-existing bg-lighter"
for="assignPartialExisting">
<div class="card-body text-center p-3">
<input type="radio" name="assignTypeExisting" id="assignPartialExisting" value="partial" class="form-check-input mb-3" onchange="toggleAssignTypeExisting('partial')">
<h6 class="mb-1"><i class="bx bx-layer-plus fs-4 d-block mb-2 text-primary"></i>Cząstkowe (N:1)</h6>
<input type="radio" name="assignTypeExisting" id="assignPartialExisting" value="partial"
class="form-check-input mb-3" onchange="toggleAssignTypeExisting('partial')">
<h6 class="mb-1"><i
class="bx bx-layer-plus fs-4 d-block mb-2 text-primary"></i>Cząstkowe (N:1)</h6>
<small class="text-muted">Zaliczka do zlecenia.</small>
</div>
</label>
</div>
<div class="col-md-3">
<label class="card border shadow-none cursor-pointer h-100 option-card-existing bg-lighter" for="assignGeneralExisting">
<label class="card border shadow-none cursor-pointer h-100 option-card-existing bg-lighter"
for="assignGeneralExisting">
<div class="card-body text-center p-3">
<input type="radio" name="assignTypeExisting" id="assignGeneralExisting" value="general" class="form-check-input mb-3" onchange="toggleAssignTypeExisting('general')">
<h6 class="mb-1"><i class="bx bx-buildings fs-4 d-block mb-2 text-primary"></i>Koszty ogólne</h6>
<input type="radio" name="assignTypeExisting" id="assignGeneralExisting" value="general"
class="form-check-input mb-3" onchange="toggleAssignTypeExisting('general')">
<h6 class="mb-1"><i class="bx bx-buildings fs-4 d-block mb-2 text-primary"></i>Koszty
ogólne</h6>
<small class="text-muted">Bez przypisania do zlecenia.</small>
</div>
</label>
@@ -1389,7 +1596,8 @@ include '../../header-travel.php';
<!-- Podsumowanie faktury -->
<div class="card shadow-none border mb-3">
<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="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">Szczegóły wybranej faktury</span>
@@ -1437,29 +1645,38 @@ include '../../header-travel.php';
<td><input class="form-check-input" type="radio" name="orderSelectExisting"></td>
<td>
<div class="d-flex flex-column">
<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
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-existing d-none text-end"><input type="number" class="form-control form-control-sm text-end split-amount-input-existing" placeholder="0.00" min="0" step="0.01"></td>
<td class="split-col-existing d-none text-end"><input type="number"
class="form-control form-control-sm text-end split-amount-input-existing"
placeholder="0.00" min="0" step="0.01"></td>
</tr>
<tr class="assign-order-row-existing" data-order-amount="2100.00">
<td><input class="form-check-input" type="radio" name="orderSelectExisting"></td>
<td>
<div class="d-flex flex-column">
<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
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-existing d-none text-end"><input type="number" class="form-control form-control-sm text-end split-amount-input-existing" placeholder="0.00" min="0" step="0.01"></td>
<td class="split-col-existing d-none text-end"><input type="number"
class="form-control form-control-sm text-end split-amount-input-existing"
placeholder="0.00" min="0" step="0.01"></td>
</tr>
</tbody>
<tfoot>
@@ -1471,14 +1688,15 @@ include '../../header-travel.php';
</table>
</div>
</div>
<div class="alert alert-danger d-none mt-3 mb-0" id="splitValidationAlertExisting" role="alert">
Suma przypisanych pozycji musi być równa kwocie faktury.
</div>
</div>
<div class="modal-footer border-top pt-3">
<button type="button" class="btn btn-label-secondary" data-bs-dismiss="modal">Anuluj</button>
<button type="button" class="btn btn-success" id="btnSaveAssignExisting"><i class="bx bx-check me-1"></i> Zapisz powiązanie</button>
<button type="button" class="btn btn-success" id="btnSaveAssignExisting"><i
class="bx bx-check me-1"></i> Zapisz powiązanie</button>
</div>
</div>
</div>
@@ -1780,10 +1998,10 @@ include '../../header-travel.php';
splitCols.forEach(col => col.classList.add('d-none'));
document.querySelectorAll('input[name="orderSelectExisting"]').forEach(el => el.type = 'radio');
}
updateSplitAmountSummaryExisting();
}
function updateSplitAmountSummaryExisting() {
const isSplit = document.getElementById('assignSplitExisting')?.checked;
const totalRow = document.getElementById('splitTotalRowExisting');
@@ -1818,7 +2036,7 @@ include '../../header-travel.php';
if (saveBtn) saveBtn.disabled = false;
}
}
document.querySelectorAll('input[name="orderSelectExisting"], .split-amount-input-existing').forEach(el => {
el.addEventListener('change', updateSplitAmountSummaryExisting);
el.addEventListener('input', updateSplitAmountSummaryExisting);
@@ -1938,6 +2156,24 @@ include '../../header-travel.php';
document.getElementById('statusDropdownMenu').classList.remove('show');
}
});
// Zaznacz / odznacz wszystkie faktury
const selectAll = document.getElementById('selectAllInvoices');
if (selectAll) {
selectAll.addEventListener('change', function () {
document.querySelectorAll('.invoice-checkbox').forEach(cb => {
cb.checked = this.checked;
});
});
document.querySelectorAll('.invoice-checkbox').forEach(cb => {
cb.addEventListener('change', function () {
const all = document.querySelectorAll('.invoice-checkbox');
const checked = document.querySelectorAll('.invoice-checkbox:checked');
selectAll.indeterminate = checked.length > 0 && checked.length < all.length;
selectAll.checked = checked.length === all.length;
});
});
}
</script>
<?php include '../../footer.php'; ?>