Travel: Init + widok index faktur

This commit is contained in:
2026-04-27 00:32:50 +02:00
parent a22f219c67
commit fcc3494392
5 changed files with 613 additions and 0 deletions

151
header-travel.php Normal file
View File

@@ -0,0 +1,151 @@
<?php
$basePath = '';
if ($_SERVER['HTTP_HOST'] === 'localhost' || $_SERVER['HTTP_HOST'] === '127.0.0.1') {
$basePath = '/magico-prototype';
}
?>
<!DOCTYPE html>
<html lang="en" class="light-style layout-menu-fixed" dir="ltr" data-theme="theme-default"
data-assets-path="<?= $basePath ?>/assets/" data-template="horizontal-menu-template-starter">
<head>
<meta charset="utf-8" />
<meta name="viewport"
content="width=device-width, initial-scale=1.0, user-scalable=no, minimum-scale=1.0, maximum-scale=1.0" />
<title>TravelManager</title>
<meta name="description" content="" />
<!-- Favicon -->
<link rel="icon" type="image/x-icon" href="<?= $basePath ?>/assets/img/favicon/favicon.ico" />
<!-- Fonts -->
<link rel="preconnect" href="https://fonts.googleapis.com" />
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin />
<link
href="https://fonts.googleapis.com/css2?family=Public+Sans:ital,wght@0,300;0,400;0,500;0,600;0,700;1,300;1,400;1,500;1,600;1,700&display=swap"
rel="stylesheet" />
<link rel="stylesheet" href="<?= $basePath ?>/assets/vendor/fonts/boxicons.css" />
<!-- <link rel="stylesheet" href="<?= $basePath ?>/assets/vendor/fonts/fontawesome.css" /> -->
<!-- <link rel="stylesheet" href="<?= $basePath ?>/assets/vendor/fonts/flag-icons.css" /> -->
<!-- Core CSS -->
<link rel="stylesheet" href="<?= $basePath ?>/assets/vendor/css/rtl/core.css" />
<link rel="stylesheet" href="<?= $basePath ?>/assets/vendor/css/rtl/theme-default.css" />
<link rel="stylesheet" href="<?= $basePath ?>/assets/css/demo.css" />
<!-- Vendors CSS -->
<link rel="stylesheet" href="<?= $basePath ?>/assets/vendor/libs/perfect-scrollbar/perfect-scrollbar.css" />
<!-- Page CSS -->
<!-- Helpers -->
<script src="<?= $basePath ?>/assets/vendor/js/helpers.js"></script>
<!--! Template customizer & Theme config files MUST be included after core stylesheets and helpers.js in the <head> section -->
<script src="<?= $basePath ?>/assets/vendor/js/template-customizer.js"></script>
<!--? Config: Mandatory theme config file contain global vars & default theme options, Set your preferred theme option in this file. -->
<script src="<?= $basePath ?>/assets/js/config.js"></script>
<?php if (!empty($enablePrototypeComments) && $enablePrototypeComments): ?>
<link rel="stylesheet" href="<?= $basePath ?>/assets/css/comments.css">
<?php endif; ?>
</head>
<body>
<!-- Layout wrapper -->
<div class="layout-wrapper layout-navbar-full layout-horizontal layout-without-menu">
<div class="layout-container">
<!-- Navbar -->
<nav class="layout-navbar navbar navbar-expand-xl align-items-center bg-navbar-theme" id="layout-navbar" style="position: relative;">
<div class="container-xxl">
<div class="navbar-brand app-brand demo d-none d-xl-flex py-0 me-4">
<a href="<?= $basePath ?>/prototype/travel/index.php" class="app-brand-link gap-2">
<span class="app-brand-text demo menu-text fw-bold">travelmanager</span>
</a>
<a href="javascript:void(0);" class="layout-menu-toggle menu-link text-large ms-auto d-xl-none">
<i class="bx bx-chevron-left bx-sm align-middle"></i>
</a>
</div>
<div class="layout-menu-toggle navbar-nav align-items-xl-center me-3 me-xl-0 d-xl-none">
<a class="nav-item nav-link px-0 me-xl-4" href="javascript:void(0)">
<i class="bx bx-menu bx-sm"></i>
</a>
</div>
<div class="navbar-nav-right d-flex align-items-center" id="navbar-collapse">
<ul class="navbar-nav flex-row align-items-center ms-auto">
<li class="nav-item dropdown-style-switcher dropdown me-2 me-xl-0">
<a class="nav-link dropdown-toggle hide-arrow" href="javascript:void(0);"
data-bs-toggle="dropdown">
<i class="bx bx-sm"></i>
</a>
<ul class="dropdown-menu dropdown-menu-start dropdown-styles">
<li>
<a class="dropdown-item" href="javascript:void(0);" data-theme="light">
<span class="align-middle"><i class="bx bx-sun me-2"></i>Light</span>
</a>
</li>
<li>
<a class="dropdown-item" href="javascript:void(0);" data-theme="dark">
<span class="align-middle"><i class="bx bx-moon me-2"></i>Dark</span>
</a>
</li>
<li>
<a class="dropdown-item" href="javascript:void(0);" data-theme="system">
<span class="align-middle"><i class="bx bx-desktop me-2"></i>System</span>
</a>
</li>
</ul>
</li>
<li class="nav-item navbar-dropdown dropdown-user dropdown">
<a class="nav-link dropdown-toggle hide-arrow" href="javascript:void(0);"
data-bs-toggle="dropdown">
<div class="avatar avatar-online">
<img src="<?= $basePath ?>/assets/img/avatars/1.png" alt
class="w-px-40 h-auto rounded-circle" />
</div>
</a>
<ul class="dropdown-menu dropdown-menu-end">
<li>
<a class="dropdown-item" href="javascript:void(0);">
<div class="d-flex">
<div class="flex-grow-1">
<span class="fw-medium d-block">John Doe</span>
<small class="text-muted">Administrator</small>
</div>
</div>
</a>
</li>
<li>
<div class="dropdown-divider"></div>
</li>
<li>
<a class="dropdown-item" href="javascript:void(0);">
<i class="bx bx-power-off me-2"></i>
<span class="align-middle">Wyloguj</span>
</a>
</li>
</ul>
</li>
</ul>
</div>
</div>
</nav>
<!-- / Navbar -->
<!-- Layout container -->
<div class="layout-page" style="padding-top: 0px!important;">
<!-- Content wrapper -->
<div class="content-wrapper">
<!-- Menu -->
<?php include 'menu.php'; ?>
<!-- / Menu -->

View File

@@ -0,0 +1,321 @@
<?php
$enablePrototypeComments = true;
include '../../header-travel.php';
?>
<div class="container-xxl flex-grow-1 container-p-y" style="padding-top: 1rem!important">
<div class="d-flex flex-column flex-md-row justify-content-between align-items-start align-items-md-center mb-4 gap-3">
<div>
<h4 class="fw-bold mb-1">
<span class="text-muted fw-light">Koszty /</span> Faktury Zakupowe
</h4>
<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>
<button class="btn btn-primary">
<i class="bx bx-plus me-1"></i> Wgraj fakturę
</button>
</div>
</div>
<div class="alert alert-primary d-flex align-items-center" role="alert">
<i class="bx bx-move-vertical fs-4 me-2"></i>
<div>
<strong>Wskazówka:</strong> Możesz przypisywać faktury do zleceń korzystając z metody "Przeciągnij i upuść" (Drag & Drop) pomiędzy oknami, lub używając przycisków akcji w tabeli.
</div>
</div>
<div class="nav-align-top mb-4">
<ul class="nav nav-tabs nav-fill" role="tablist">
<li class="nav-item">
<button type="button" class="nav-link active" role="tab" data-bs-toggle="tab" data-bs-target="#navs-zlecenia">
<i class="bx bx-list-check me-1"></i> Zlecenia do ofakturowania
<span class="badge rounded-pill badge-center h-px-20 w-px-20 bg-danger ms-1">3</span>
</button>
</li>
<li class="nav-item">
<button type="button" class="nav-link" role="tab" data-bs-toggle="tab" data-bs-target="#navs-faktury">
<i class="bx bx-file me-1"></i> Baza faktur
</button>
</li>
</ul>
<div class="tab-content px-0 pb-0 shadow-none border-0">
<div class="tab-pane fade show active" id="navs-zlecenia" role="tabpanel">
<div class="card mb-4 border-0 shadow-sm">
<div class="card-body p-3">
<div class="row g-3">
<div class="col-md-4">
<label class="form-label small text-muted mb-1">Dostawca</label>
<select class="form-select form-select-sm">
<option value="">Wszyscy dostawcy</option>
<option value="1">Hotel Colosseum (Włochy)</option>
<option value="2">Flixbus Polska</option>
<option value="3">Przewodnik Jan Kowalski</option>
</select>
</div>
<div class="col-md-4">
<label class="form-label small text-muted mb-1">Data realizacji (Od - Do)</label>
<input type="text" class="form-control form-control-sm" placeholder="Wybierz zakres dat">
</div>
<div class="col-md-3">
<label class="form-label small text-muted mb-1">Wycieczka</label>
<input type="text" class="form-control form-control-sm" placeholder="Szukaj po ID / Nazwie">
</div>
<div class="col-md-1 d-flex align-items-end">
<button class="btn btn-sm btn-primary w-100"><i class="bx bx-search"></i></button>
</div>
</div>
</div>
</div>
<div class="card shadow-sm">
<div class="table-responsive text-nowrap">
<table class="table table-hover">
<thead class="table-light">
<tr>
<th>Zlecenie / Wycieczka</th>
<th>Dostawca</th>
<th>Data realizacji</th>
<th class="text-end">Kwota zlecenia</th>
<th class="text-center">Status faktury</th>
<th class="text-end">Akcje</th>
</tr>
</thead>
<tbody class="table-border-bottom-0">
<tr>
<td>
<div class="d-flex flex-column">
<span class="fw-semibold text-primary">ZL/2026/05/142</span>
<small class="text-muted">#WYC-102 (Rzym na Weekend)</small>
</div>
</td>
<td>
<div class="d-flex align-items-center">
<div class="avatar avatar-xs me-2"><span class="avatar-initial rounded-circle bg-label-primary">HC</span></div>
<span>Hotel Colosseum</span>
</div>
</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="Zlecenie nie ma przypiętej żadnej faktury">Brak faktury</span>
</td>
<td class="text-end">
<button class="btn btn-sm btn-outline-primary dropdown-toggle" data-bs-toggle="dropdown">Podepnij</button>
<ul class="dropdown-menu dropdown-menu-end">
<li><a class="dropdown-item" href="javascript:void(0);"><i class="bx bx-link me-1"></i> Wybierz z bazy</a></li>
<li><a class="dropdown-item" href="javascript:void(0);"><i class="bx bx-upload me-1"></i> Wgraj nową</a></li>
</ul>
</td>
</tr>
<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)</small>
</div>
</td>
<td>
<div class="d-flex align-items-center">
<div class="avatar avatar-xs me-2"><span class="avatar-initial rounded-circle bg-label-info">FL</span></div>
<span>Flixbus Polska</span>
</div>
</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="Podpięta faktura zaliczkowa. Brakuje końcowej.">Brakuje 2 000 PLN</span>
</td>
<td class="text-end">
<button class="btn btn-sm btn-outline-primary dropdown-toggle" data-bs-toggle="dropdown">Podepnij</button>
<ul class="dropdown-menu dropdown-menu-end">
<li><a class="dropdown-item" href="javascript:void(0);"><i class="bx bx-link me-1"></i> Wybierz z bazy</a></li>
<li><a class="dropdown-item" href="javascript:void(0);"><i class="bx bx-upload me-1"></i> Wgraj nową</a></li>
<li><hr class="dropdown-divider"></li>
<li><a class="dropdown-item text-muted" href="javascript:void(0);"><i class="bx bx-show me-1"></i> Zobacz zaliczkę</a></li>
</ul>
</td>
</tr>
<tr class="bg-lighter">
<td>
<div class="d-flex flex-column">
<span class="fw-semibold text-primary">ZL/2026/05/112</span>
<small class="text-muted">#WYC-102 (Rzym na Weekend)</small>
</div>
</td>
<td>
<div class="d-flex align-items-center">
<div class="avatar avatar-xs me-2"><span class="avatar-initial rounded-circle bg-label-secondary">M</span></div>
<span>Muzeum Watykańskie</span>
</div>
</td>
<td><span class="text-muted">14.05.2026</span></td>
<td class="text-end fw-semibold">850,00 EUR</td>
<td class="text-center">
<span class="badge bg-label-info"><i class="bx bx-user me-1"></i> Płatne przez Pilota</span>
</td>
<td class="text-end">
<button class="btn btn-sm btn-icon btn-text-secondary" data-bs-toggle="tooltip" title="Pilot ma obowiązek wgrać fakturę przez aplikację">
<i class="bx bx-time"></i>
</button>
</td>
</tr>
</tbody>
</table>
</div>
</div>
</div>
<div class="tab-pane fade" id="navs-faktury" role="tabpanel">
<div class="card mb-4 border-0 shadow-sm">
<div class="card-body p-3">
<div class="row g-3">
<div class="col-md-3">
<label class="form-label small text-muted mb-1">Dostawca / NIP</label>
<input type="text" class="form-control form-control-sm" placeholder="Szukaj...">
</div>
<div class="col-md-3">
<label class="form-label small text-muted mb-1">Numer faktury</label>
<input type="text" class="form-control form-control-sm" placeholder="Wpisz numer">
</div>
<div class="col-md-3">
<label class="form-label small text-muted mb-1">Status powiązania</label>
<select class="form-select form-select-sm">
<option value="">Wszystkie</option>
<option value="unassigned">Nieprzypisane</option>
<option value="assigned">Przypisane (1:1)</option>
<option value="split">Rozksięgowane (1:N)</option>
</select>
</div>
<div class="col-md-2">
<label class="form-label small text-muted mb-1">Źródło</label>
<select class="form-select form-select-sm">
<option value="">Wszystkie</option>
<option value="fakturownia">Fakturownia</option>
<option value="invoice">Invoice.Travel</option>
<option value="pilot">Aplikacja Pilota</option>
</select>
</div>
<div class="col-md-1 d-flex align-items-end">
<button class="btn btn-sm btn-primary w-100"><i class="bx bx-search"></i></button>
</div>
</div>
</div>
</div>
<div class="card shadow-sm">
<div class="table-responsive text-nowrap">
<table class="table table-hover">
<thead class="table-light">
<tr>
<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 class="text-end">Akcje</th>
</tr>
</thead>
<tbody class="table-border-bottom-0">
<tr>
<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>
</td>
<td>
<div class="d-flex flex-column">
<span>Flixbus Polska</span>
<small class="text-muted">NIP: 1234567890</small>
</div>
</td>
<td><span class="text-muted">04.05.2026</span></td>
<td class="text-end fw-bold">4 200,00 PLN</td>
<td class="text-center">
<span class="badge bg-label-danger">Nieprzypisana</span>
</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">Połącz ze zleceniem</button>
</td>
</tr>
<tr>
<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>
</td>
<td>
<div class="d-flex flex-column">
<span>Przewodnik Jan Kowalski</span>
<small class="text-muted">NIP: 0987654321</small>
</div>
</td>
<td><span class="text-muted">10.05.2026</span></td>
<td class="text-end fw-bold">3 000,00 PLN</td>
<td class="text-center">
<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 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>
<tr>
<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>
</td>
<td>
<div class="d-flex flex-column">
<span>Muzeum Watykańskie</span>
<small class="text-muted">Pilot: Tomasz S.</small>
</div>
</td>
<td><span class="text-muted">14.05.2026</span></td>
<td class="text-end fw-bold">850,00 EUR</td>
<td class="text-center">
<span class="badge bg-label-success">Przypisana (1:1)</span>
</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>
</tbody>
</table>
</div>
</div>
</div>
</div>
</div>
</div>
<?php include '../../footer.php'; ?>
</body>
</html>

View File

@@ -0,0 +1,25 @@
<?php
$enablePrototypeComments = true;
include '../../header-travel.php';
?>
<div class="container-xxl flex-grow-1 container-p-y" style="padding-top: 1rem!important">
<h4 class="fw-bold py-3 mb-4">
Travel Manager <span class="text-muted fw-light">/ Faktury</span>
</h4>
<!-- CONTENT -->
<div class="row mb-4">
</div>
</div>
<?php include '../../footer.php'; ?>
</body>
</html>

View File

@@ -0,0 +1,25 @@
<?php
$enablePrototypeComments = true;
include '../../header-travel.php';
?>
<div class="container-xxl flex-grow-1 container-p-y" style="padding-top: 1rem!important">
<h4 class="fw-bold py-3 mb-4">
Travel Manager <span class="text-muted fw-light">/ Kokpit</span>
</h4>
<!-- Baner Informacyjny -->
<div class="row mb-4">
</div>
</div>
<?php include '../../footer.php'; ?>
</body>
</html>

91
prototype/travel/menu.php Normal file
View File

@@ -0,0 +1,91 @@
<?php
$currentPage = basename($_SERVER['PHP_SELF']);
$clientsPages = ['app-organization.php', 'app-client.php'];
$systemPages = ['app-dictionary.php', 'app-template.php', 'app-employee.php', 'app-settings.php'];
?>
<aside id="layout-menu" class="layout-menu-horizontal menu-horizontal menu bg-menu-theme flex-grow-0" style="position: relative; top: 0px; padding-top: 0px;">
<div class="container-xxl d-flex h-100">
<ul class="menu-inner py-1">
<li class="menu-item <?php echo ($currentPage == 'app-task-kanban.php') ? 'active' : ''; ?>">
<a href="app-task-kanban.php" class="menu-link">
<i class="menu-icon tf-icons bx bx-task"></i>
<div data-i18n="Zadania">Zadania</div>
</a>
</li>
<li class="menu-item <?php echo ($currentPage == 'app-inquiry-kanban.php') ? 'active' : ''; ?>">
<a href="app-inquiry-kanban.php" class="menu-link">
<i class="menu-icon tf-icons bx bx-paper-plane"></i>
<div data-i18n="Zapytania">Zapytania</div>
</a>
</li>
<li class="menu-item <?php echo ($currentPage == 'index.php' || $currentPage == 'app-trip.php') ? 'active' : ''; ?>">
<a href="index.php" class="menu-link">
<i class="menu-icon tf-icons bx bx-calendar-check"></i>
<div data-i18n="Wycieczki">Wycieczki</div>
</a>
</li>
<li class="menu-item <?php echo ($currentPage == 'app-supplier.php') ? 'active' : ''; ?>">
<a href="app-supplier.php" class="menu-link">
<i class="menu-icon tf-icons bx bx-home"></i>
<div data-i18n="Dostawcy usług">Dostawcy usług</div>
</a>
</li>
<li class="menu-item <?php echo in_array($currentPage, $clientsPages, true) ? 'active open' : ''; ?>">
<a href="javascript:void(0);" class="menu-link menu-toggle">
<i class="menu-icon tf-icons bx bx-user"></i>
<div data-i18n="Klienci">Klienci</div>
</a>
<ul class="menu-sub">
<li class="menu-item <?php echo ($currentPage == 'app-organization.php') ? 'active' : ''; ?>">
<a href="app-organization.php" class="menu-link">
<div data-i18n="Organizacje">Organizacje</div>
</a>
</li>
<li class="menu-item <?php echo ($currentPage == 'app-client.php') ? 'active' : ''; ?>">
<a href="app-client.php" class="menu-link">
<div data-i18n="Przedstawiciele">Przedstawiciele</div>
</a>
</li>
</ul>
</li>
<li class="menu-item <?php echo ($currentPage == 'app-invoice.php') ? 'active' : ''; ?>">
<a href="app-invoice.php" class="menu-link">
<i class="menu-icon tf-icons bx bx-coin"></i>
<div data-i18n="Faktury">Faktury</div>
</a>
</li>
<li class="menu-item <?php echo in_array($currentPage, $systemPages, true) ? 'active open' : ''; ?>">
<a href="javascript:void(0);" class="menu-link menu-toggle">
<i class="menu-icon tf-icons bx bx-cog"></i>
<div data-i18n="System">System</div>
</a>
<ul class="menu-sub">
<li class="menu-item <?php echo ($currentPage == 'app-dictionary.php') ? 'active' : ''; ?>">
<a href="app-dictionary.php" class="menu-link">
<div data-i18n="Słowniki">Słowniki</div>
</a>
</li>
<li class="menu-item <?php echo ($currentPage == 'app-template.php') ? 'active' : ''; ?>">
<a href="app-template.php" class="menu-link">
<div data-i18n="Szablony">Szablony</div>
</a>
</li>
<li class="menu-item <?php echo ($currentPage == 'app-employee.php') ? 'active' : ''; ?>">
<a href="app-employee.php" class="menu-link">
<div data-i18n="Pracownicy">Pracownicy</div>
</a>
</li>
<li class="menu-item <?php echo ($currentPage == 'app-settings.php') ? 'active' : ''; ?>">
<a href="app-settings.php" class="menu-link">
<div data-i18n="Ustawienia">Ustawienia</div>
</a>
</li>
</ul>
</li>
</ul>
</div>
</aside>