Faktury - Dialog podglądu faktury

This commit is contained in:
2026-03-05 22:59:11 +01:00
parent 144aa81358
commit 5b1b4ec768
8 changed files with 1292 additions and 111 deletions

View File

@@ -469,8 +469,8 @@
</div>
<p style="margin-bottom:5px;">${data.comment}</p>
<div style="text-align:right; gap:5px; display:flex; justify-content:flex-end;">
<button class="btn btn-xs btn-outline-success btn-resolve" data-id="${data.id}" style="font-size:10px; padding: 2px 5px;">Rozwiąż</button>
<button class="btn btn-xs btn-outline-danger btn-delete" data-id="${data.id}" style="font-size:10px; padding: 2px 5px;">Usuń</button>
${isAuthorized ? `<button class="btn btn-xs btn-outline-success btn-resolve" data-id="${data.id}" style="font-size:10px; padding: 2px 5px;">Rozwiąż</button>
<button class="btn btn-xs btn-outline-danger btn-delete" data-id="${data.id}" style="font-size:10px; padding: 2px 5px;">Usuń</button>` : ''}
</div>
</div>
`;
@@ -646,7 +646,10 @@
// START
initUI();
loadComments();
// Sprawdź autoryzację w tle (nawet wyłączony tryb komentowania), w celu wyświetlenia przycisków
checkAuth(true).then(() => {
loadComments();
});
// Odświeżanie przy zmianie rozmiaru okna
window.addEventListener('resize', updateMarkerPositions);
@@ -835,8 +838,8 @@
Element: <code>${c.dom_selector.substring(0, 30)}...</code>
</div>
<div style="text-align:right;">
${c.is_resolved == 0 ? `<button class="btn btn-sm btn-outline-success btn-resolve-list" data-id="${c.id}">Rozwiąż</button>` : ''}
<button class="btn btn-sm btn-outline-danger btn-delete-list" data-id="${c.id}">Usuń</button>
${isAuthorized && c.is_resolved == 0 ? `<button class="btn btn-sm btn-outline-success btn-resolve-list" data-id="${c.id}">Rozwiąż</button>` : ''}
${isAuthorized ? `<button class="btn btn-sm btn-outline-danger btn-delete-list" data-id="${c.id}">Usuń</button>` : ''}
</div>
</div>
`;

View File

@@ -34,6 +34,7 @@
foreach ($structure as &$files) {
sort($files);
}
unset($files); // Break the reference with the last element
}
foreach ($structure as $folder => $files): ?>

View File

@@ -134,8 +134,10 @@ include '../../header-invoice.php';
title="KSeF: Nie wysłano"></span> <a href="#"
class="btn btn-icon btn-sm text-success" title="Wyślij e-mail"><i
class="bx bx-send"></i></a>
<a href="app-invoice-preview.php" class="btn btn-icon btn-sm text-secondary"
title="Podgląd"><i class="bx bx-show"></i></a>
<a href="javascript:void(0);" data-bs-toggle="modal"
data-bs-target="#invoicePreviewModal"
class="btn btn-icon btn-sm text-secondary" title="Podgląd"><i
class="bx bx-show"></i></a>
<div class="dropdown">
<button type="button" class="btn p-0 dropdown-toggle hide-arrow"
data-bs-toggle="dropdown">
@@ -232,8 +234,10 @@ include '../../header-invoice.php';
title="KSeF: Nie wysłano"></span>
<a href="#" class="btn btn-icon btn-sm text-secondary" title="Wyślij e-mail"><i
class="bx bx-send"></i></a>
<a href="app-invoice-preview.php" class="btn btn-icon btn-sm text-secondary"
title="Podgląd"><i class="bx bx-show"></i></a>
<a href="javascript:void(0);" data-bs-toggle="modal"
data-bs-target="#invoicePreviewModal"
class="btn btn-icon btn-sm text-secondary" title="Podgląd"><i
class="bx bx-show"></i></a>
<div class="dropdown">
<button type="button" class="btn btn-sm p-0 dropdown-toggle hide-arrow"
data-bs-toggle="dropdown"><i
@@ -267,8 +271,9 @@ include '../../header-invoice.php';
<span class="badge badge-dot bg-success me-1" title="KSeF: Wysłano"></span>
<a href="#" class="btn btn-icon btn-sm text-secondary"><i
class="bx bx-send"></i></a>
<a href="app-invoice-preview.php" class="btn btn-icon btn-sm text-secondary"><i
class="bx bx-show"></i></a>
<a href="javascript:void(0);" data-bs-toggle="modal"
data-bs-target="#invoicePreviewModal"
class="btn btn-icon btn-sm text-secondary"><i class="bx bx-show"></i></a>
<div class="dropdown">
<button type="button" class="btn btn-sm p-0 dropdown-toggle hide-arrow"
data-bs-toggle="dropdown"><i
@@ -304,8 +309,10 @@ include '../../header-invoice.php';
title="KSeF: Nie wysłano"></span> <a href="#"
class="btn btn-icon btn-sm text-success" title="Wyślij e-mail"><i
class="bx bx-send"></i></a>
<a href="app-invoice-preview.php" class="btn btn-icon btn-sm text-secondary"
title="Podgląd"><i class="bx bx-show"></i></a>
<a href="javascript:void(0);" data-bs-toggle="modal"
data-bs-target="#invoicePreviewModal"
class="btn btn-icon btn-sm text-secondary" title="Podgląd"><i
class="bx bx-show"></i></a>
<div class="dropdown">
<button type="button" class="btn btn-sm p-0 dropdown-toggle hide-arrow"
data-bs-toggle="dropdown"><i
@@ -341,8 +348,10 @@ include '../../header-invoice.php';
<span class="badge badge-dot bg-success me-1" title="KSeF: Wysłano"></span>
<a href="#" class="btn btn-icon btn-sm text-secondary" title="Wyślij e-mail"><i
class="bx bx-send"></i></a>
<a href="app-invoice-preview.php" class="btn btn-icon btn-sm text-secondary"
title="Podgląd"><i class="bx bx-show"></i></a>
<a href="javascript:void(0);" data-bs-toggle="modal"
data-bs-target="#invoicePreviewModal"
class="btn btn-icon btn-sm text-secondary" title="Podgląd"><i
class="bx bx-show"></i></a>
<div class="dropdown">
<button type="button" class="btn btn-sm p-0 dropdown-toggle hide-arrow"
data-bs-toggle="dropdown"><i
@@ -374,8 +383,9 @@ include '../../header-invoice.php';
title="KSeF: Przetwarzanie"></span>
<a href="#" class="btn btn-icon btn-sm text-secondary"><i
class="bx bx-send"></i></a>
<a href="app-invoice-preview.php" class="btn btn-icon btn-sm text-secondary"><i
class="bx bx-show"></i></a>
<a href="javascript:void(0);" data-bs-toggle="modal"
data-bs-target="#invoicePreviewModal"
class="btn btn-icon btn-sm text-secondary"><i class="bx bx-show"></i></a>
<div class="dropdown">
<button type="button" class="btn btn-sm p-0 dropdown-toggle hide-arrow"
data-bs-toggle="dropdown"><i
@@ -407,8 +417,9 @@ include '../../header-invoice.php';
<span class="badge badge-dot bg-danger me-1" title="KSeF: Błąd"></span>
<a href="#" class="btn btn-icon btn-sm text-secondary"><i
class="bx bx-send"></i></a>
<a href="app-invoice-preview.php" class="btn btn-icon btn-sm text-secondary"><i
class="bx bx-show"></i></a>
<a href="javascript:void(0);" data-bs-toggle="modal"
data-bs-target="#invoicePreviewModal"
class="btn btn-icon btn-sm text-secondary"><i class="bx bx-show"></i></a>
<div class="dropdown">
<button type="button" class="btn btn-sm p-0 dropdown-toggle hide-arrow"
data-bs-toggle="dropdown"><i
@@ -439,8 +450,9 @@ include '../../header-invoice.php';
<span class="badge badge-dot bg-success me-1" title="KSeF: Wysłano"></span>
<a href="#" class="btn btn-icon btn-sm text-secondary"><i
class="bx bx-send"></i></a>
<a href="app-invoice-preview.php" class="btn btn-icon btn-sm text-secondary"><i
class="bx bx-show"></i></a>
<a href="javascript:void(0);" data-bs-toggle="modal"
data-bs-target="#invoicePreviewModal"
class="btn btn-icon btn-sm text-secondary"><i class="bx bx-show"></i></a>
<div class="dropdown">
<button type="button" class="btn btn-sm p-0 dropdown-toggle hide-arrow"
data-bs-toggle="dropdown"><i
@@ -567,6 +579,279 @@ include '../../header-invoice.php';
</div>
<div class="content-backdrop fade"></div>
<!-- Modal: Invoice Preview -->
<div class="modal fade" id="invoicePreviewModal" tabindex="-1" aria-hidden="true">
<div class="modal-dialog modal-xl modal-dialog-centered modal-dialog-scrollable" role="document">
<div class="modal-content">
<div class="modal-header border-bottom py-3 d-flex justify-content-between align-items-center">
<div class="d-flex align-items-center gap-3">
<h4 class="modal-title fw-bold mb-0">FV/1/01/2026/KB</h4>
<span class="badge bg-label-success fs-6">Opłacona</span>
</div>
<div class="d-flex align-items-center gap-2">
<button type="button" class="btn btn-icon btn-label-secondary" data-bs-toggle="tooltip"
title="Drukuj PDF">
<i class="bx bx-printer"></i>
</button>
<button type="button" class="btn btn-icon btn-label-secondary" data-bs-toggle="tooltip"
title="Edytuj">
<i class="bx bx-edit-alt"></i>
</button>
<div class="dropdown">
<button class="btn btn-primary" type="button" id="dropdownInvoiceActions"
data-bs-toggle="dropdown" aria-expanded="false">
Więcej akcji <i class="bx bx-chevron-down ms-1"></i>
</button>
<ul class="dropdown-menu dropdown-menu-end" aria-labelledby="dropdownInvoiceActions">
<h6 class="dropdown-header text-uppercase ps-3">Finanse</h6>
<li><button class="dropdown-item"><i class="bx bx-money me-2"></i> Rozlicz fakturę </button>
</li>
<li><a href="#" class="dropdown-item"><i class="bx bx-revision me-2"></i> Wystaw korektę
</a></li>
<div class="dropdown-divider"></div>
<h6 class="dropdown-header text-uppercase ps-3">Wysyłka i KSeF</h6>
<li>
<a class="dropdown-item d-flex justify-content-between align-items-center" href="#">
<span><i class="bx bx-cloud-upload me-2"></i> Wyślij do KSeF </span>
</a>
</li>
<li>
<button class="dropdown-item d-flex justify-content-between align-items-center">
<span><i class="bx bx-envelope me-2"></i> Wyślij fakturę e-mail</span>
<span class="ms-2 text-success" title="Wysłano: 2026-01-30 15:38:32"><i
class="bx bx-check-circle"></i></span>
</button>
</li>
<li><button class="dropdown-item"><i class="bx bx-check-shield me-2"></i> Wyślij
potwierdzenie </button></li>
<li><button class="dropdown-item"><i class="bx bx-bell me-2 text-warning"></i> Wyślij
ponaglenie </button></li>
<div class="dropdown-divider"></div>
<h6 class="dropdown-header text-uppercase ps-3">System</h6>
<li><button class="dropdown-item"><i class="bx bx-duplicate me-2"></i> Duplikuj jako nową
</button></li>
<li><button class="dropdown-item text-danger"><i class="bx bx-trash me-2"></i> Usuń fakturę
</button></li>
</ul>
</div>
<button type="button" class="btn-close ms-2" data-bs-dismiss="modal" aria-label="Close"></button>
</div>
</div>
<div class="modal-body bg-lighter p-4">
<div class="card shadow-none border border-success mb-4"
style="border-left: 5px solid #71dd37 !important;">
<div class="card-body p-3 d-flex justify-content-between align-items-center flex-wrap gap-3">
<div class="d-flex align-items-center">
<div class="avatar avatar-sm me-3">
<span class="avatar-initial rounded-circle bg-label-success"><i
class="bx bx-cloud-check fs-4"></i></span>
</div>
<div>
<h6 class="mb-0 text-success fw-bold">Dokument pomyślnie przetworzony w KSeF</h6>
<small class="text-muted">Data wysyłki: 2026-01-30 15:36:12</small>
</div>
</div>
<div class="d-flex align-items-center gap-3">
<div class="text-end me-3">
<small class="d-block text-muted mb-0">Numer KSeF</small>
<span class="fw-medium user-select-all">1234567890-20260130-1A2B3C4D5E-6F</span>
</div>
<button class="btn btn-outline-success btn-sm"><i class="bx bx-download me-1"></i> Pobierz
UPO</button>
</div>
</div>
</div>
<div class="row g-4 mb-4">
<div class="col-lg-4">
<div class="card h-100 shadow-sm border-0">
<div class="card-body p-4">
<h6 class="card-title m-0 mb-3"><i class="bx bx-store me-2"></i> Sprzedawca</h6>
<h6 class="mb-1">MARIUSZ BANACZYK "BURGER BAR"</h6>
<p class="mb-1 text-muted small">KARCZMA BIESIADA, KULTOWA ZAPIEKANKA</p>
<p class="mb-1 mt-2">ul. Ofiar Katynia 2</p>
<p class="mb-2">37-450 Stalowa Wola, Polska</p>
<span class="badge bg-label-secondary">NIP: 865 000 14 51</span>
</div>
</div>
</div>
<div class="col-lg-4">
<div class="card h-100 shadow-sm border-0">
<div class="card-body p-4">
<h6 class="card-title m-0 mb-3"><i class="bx bx-user me-2"></i> Kontrahent</h6>
<h6 class="mb-1">COCA-COLA HBC POLSKA SP. Z O.O.</h6>
<p class="mb-1 mt-2">ul. Żwirki i Wigury 16</p>
<p class="mb-2">02-092 Warszawa, Polska</p>
<span class="badge bg-label-secondary">NIP: 5242106963</span>
</div>
</div>
</div>
<div class="col-lg-4">
<div class="card h-100 shadow-sm border-0 bg-white">
<div class="card-body p-4">
<h6 class="card-title m-0 mb-3"><i class="bx bx-info-circle me-2"></i> Szczegóły</h6>
<table class="table table-borderless table-sm m-0 px-0">
<tbody>
<tr>
<td class="text-muted ps-0 py-1">Data wystawienia:</td>
<td class="fw-medium text-end pe-0 py-1">2026-01-30</td>
</tr>
<tr>
<td class="text-muted ps-0 py-1">Data dostawy:</td>
<td class="fw-medium text-end pe-0 py-1">2026-01-30</td>
</tr>
<tr>
<td class="text-muted ps-0 py-1">Termin płatności:</td>
<td class="fw-bold text-end pe-0 py-1">2026-03-01</td>
</tr>
<tr>
<td class="text-muted ps-0 py-1">Metoda:</td>
<td class="fw-medium text-end pe-0 py-1">Przelew</td>
</tr>
<tr>
<td class="text-muted ps-0 py-1">Waluta / Język:</td>
<td class="fw-medium text-end pe-0 py-1">PLN / Polski</td>
</tr>
</tbody>
</table>
</div>
</div>
</div>
</div>
<div class="card shadow-sm border-0 mb-4">
<div class="table-responsive text-nowrap">
<table class="table table-hover mb-0">
<thead class="table-light">
<tr>
<th style="width: 50px;">Lp</th>
<th>Towar / Usługa</th>
<th>J.m.</th>
<th class="text-center">Ilość</th>
<th class="text-end">Cena netto</th>
<th class="text-end">Cena brutto</th>
<th class="text-center">VAT</th>
<th class="text-end">Wartość netto</th>
<th class="text-end">Wartość brutto</th>
</tr>
</thead>
<tbody>
<tr>
<td class="text-muted">1</td>
<td>
<div class="d-flex flex-column">
<span class="fw-medium">Usługa marketingowa</span>
<small class="text-muted">Kod: -</small>
</div>
</td>
<td>szt.</td>
<td class="text-center">1</td>
<td class="text-end">6 423,61 zł</td>
<td class="text-end">7 901,04 zł</td>
<td class="text-center"><span class="badge bg-label-secondary">23%</span></td>
<td class="text-end fw-medium">6 423,61 zł</td>
<td class="text-end fw-bold text-heading">7 901,04 zł</td>
</tr>
</tbody>
</table>
</div>
</div>
<div class="row mb-4 g-4">
<div class="col-md-7">
<div class="card shadow-sm border-0 h-100 bg-white p-4">
<h6 class="text-uppercase text-muted fw-bold mb-2">Uwagi do dokumentu</h6>
<p class="mb-0 text-body">
Nota informacyjna nr : 0009131250<br>
Nota informacyjna nr : 0009131045
</p>
</div>
</div>
<div class="col-md-5">
<div class="card shadow-sm border-0 h-100 bg-white p-4">
<h6 class="text-uppercase text-muted fw-bold mb-3 border-bottom pb-2">Suma</h6>
<div class="d-flex justify-content-between mb-2">
<span class="text-muted">Wartość netto:</span>
<span class="fw-medium">6 423,61 zł</span>
</div>
<div class="d-flex justify-content-between mb-3 border-bottom pb-3">
<span class="text-muted">Wartość VAT:</span>
<span class="fw-medium">1 477,43 zł</span>
</div>
<div class="d-flex justify-content-between align-items-center mb-3">
<span class="fs-5 text-body">Wartość brutto:</span>
<span class="fs-4 fw-bold text-primary">7 901,04 zł</span>
</div>
<div class="d-flex justify-content-between text-success">
<span>Zapłacono:</span>
<span class="fw-bold">7 901,04 zł</span>
</div>
<div class="d-flex justify-content-between text-muted mt-1 small">
<span>Pozostało do zapłaty:</span>
<span>0,00 zł</span>
</div>
</div>
</div>
</div>
<div class="card shadow-sm border-0">
<div class="card-header bg-white border-bottom py-3">
<h6 class="card-title m-0"><i class="bx bx-history me-2"></i>Historia operacji na dokumencie
</h6>
</div>
<div class="card-body p-4">
<ul class="timeline mb-0">
<li class="timeline-item timeline-item-transparent">
<span class="timeline-point timeline-point-success"></span>
<div class="timeline-event">
<div class="timeline-header mb-1">
<h6 class="mb-0 fw-bold">Wysłano fakturę</h6>
<small class="text-muted">2026-01-30 15:38:32</small>
</div>
<p class="mb-2 text-muted">Wysłano na email: e-faktura.pl@cchellenic.com</p>
<div class="d-flex align-items-center">
<div class="avatar avatar-xs me-2">
<span class="avatar-initial rounded-circle bg-label-primary">GB</span>
</div>
<span class="small fw-medium">Grażyna Banaczyk</span>
</div>
</div>
</li>
<li class="timeline-item timeline-item-transparent border-transparent pb-0">
<span class="timeline-point timeline-point-info"></span>
<div class="timeline-event pb-0">
<div class="timeline-header mb-1">
<h6 class="mb-0 fw-bold">Utworzono fakturę</h6>
<small class="text-muted">2026-01-30 15:35:48</small>
</div>
<div class="d-flex align-items-center mt-2">
<div class="avatar avatar-xs me-2">
<span class="avatar-initial rounded-circle bg-label-primary">GB</span>
</div>
<span class="small fw-medium">Grażyna Banaczyk</span>
</div>
</div>
</li>
</ul>
</div>
</div>
</div>
</div>
</div>
</div>
<?php include '../../footer.php'; ?>

View File

@@ -0,0 +1,462 @@
<?php
$enablePrototypeComments = true;
include '../../header-invoice.php';
?>
<div class="container-fluid flex-grow-1 container-p-y">
<div
class="d-flex flex-column flex-md-row justify-content-between align-items-start align-items-md-center mb-4 gap-3">
<div class="d-flex flex-column justify-content-center">
<h4 class="mb-1 text-body">
<span class="text-muted fw-light">Sprzedaż /</span> Towary i Usługi
</h4>
<p class="text-muted mb-0">Zarządzaj bazą swoich produktów i usług</p>
</div>
</div>
<div class="row">
<div class="col-lg-9 transition-width" id="product-list-col">
<div class="card">
<div
class="card-header border-bottom d-flex justify-content-between align-items-center flex-wrap gap-2">
<div class="me-2 flex-grow-1" style="max-width: 300px;">
<div class="input-group input-group-merge">
<span class="input-group-text" id="basic-addon-search31"><i class="bx bx-search"></i></span>
<input type="text" class="form-control" placeholder="Szukaj nazwy, kodu..."
aria-label="Search...">
</div>
</div>
<div class="d-flex align-items-center gap-2">
<button type="button" class="btn btn-label-secondary d-flex align-items-center gap-2"
id="filter-toggle-btn">
<i class="bx bx-filter-alt"></i> Filtry
</button>
<select class="form-select" style="width: 80px;">
<option value="40">40</option>
<option value="60">60</option>
<option value="100">100</option>
</select>
<div class="dropdown">
<button type="button" class="btn btn-icon btn-label-secondary" data-bs-toggle="dropdown"
aria-expanded="false">
<i class="bx bx-dots-vertical-rounded"></i>
</button>
<ul class="dropdown-menu dropdown-menu-end">
<li><a class="dropdown-item" href="javascript:void(0);"><i
class="bx bx-import me-2"></i> Importuj z pliku CSV</a></li>
<li><a class="dropdown-item" href="javascript:void(0);"><i
class="bx bx-export me-2"></i> Eksportuj listę (.csv)</a></li>
</ul>
</div>
<button class="btn btn-primary" data-bs-toggle="modal" data-bs-target="#addProductModal">
<i class="bx bx-plus me-1"></i> Dodaj pozycję
</button>
</div>
</div>
<div class="table-responsive text-nowrap" style="min-height: 400px;">
<table class="table table-hover table-striped align-middle">
<thead class="table-light">
<tr>
<th style="width: 50px;">
<div class="form-check m-0">
<input class="form-check-input" type="checkbox" id="checkAll">
</div>
</th>
<th style="width: 50px;">Typ</th>
<th>Nazwa i Kod</th>
<th>J.m.</th>
<th class="text-end">Cena Netto</th>
<th class="text-center">VAT</th>
<th class="text-end">Cena Brutto</th>
<th class="text-center">Akcje</th>
</tr>
</thead>
<tbody class="table-border-bottom-0">
<tr>
<td>
<div class="form-check m-0"><input class="form-check-input" type="checkbox"></div>
</td>
<td>
<div class="avatar avatar-sm" data-bs-toggle="tooltip" title="Usługa">
<span class="avatar-initial rounded bg-label-info"><i
class="bx bx-briefcase"></i></span>
</div>
</td>
<td>
<span class="fw-medium text-heading">Konsultacje IT</span>
<br><small class="text-muted">Kod: USL-IT-01</small>
</td>
<td>godz.</td>
<td class="text-end">150,00 zł</td>
<td class="text-center"><span class="badge bg-label-secondary">23%</span></td>
<td class="text-end">184,50 zł</td>
<td class="text-center">
<div class="d-flex justify-content-center align-items-center gap-1">
<button class="btn btn-icon btn-sm btn-text-secondary" data-bs-toggle="tooltip"
title="Edytuj"><i class="bx bx-edit-alt"></i></button>
<div class="dropdown">
<button type="button" class="btn p-0 dropdown-toggle hide-arrow"
data-bs-toggle="dropdown"><i
class="bx bx-dots-vertical-rounded"></i></button>
<div class="dropdown-menu dropdown-menu-end">
<a class="dropdown-item" href="javascript:void(0);"><i
class="bx bx-duplicate me-1"></i> Duplikuj</a>
<div class="dropdown-divider"></div>
<a class="dropdown-item text-danger" href="javascript:void(0);"><i
class="bx bx-trash me-1"></i> Usuń</a>
</div>
</div>
</div>
</td>
</tr>
<tr>
<td>
<div class="form-check m-0"><input class="form-check-input" type="checkbox"></div>
</td>
<td>
<div class="avatar avatar-sm" data-bs-toggle="tooltip" title="Towar">
<span class="avatar-initial rounded bg-label-success"><i
class="bx bx-box"></i></span>
</div>
</td>
<td>
<span class="fw-medium text-heading">Licencja Oprogramowania B</span>
<br><small class="text-muted">Kod: LIC-002</small>
</td>
<td>szt.</td>
<td class="text-end">400,00 zł</td>
<td class="text-center"><span class="badge bg-label-secondary">23%</span></td>
<td class="text-end">492,00 zł</td>
<td class="text-center">
<div class="d-flex justify-content-center align-items-center gap-1">
<button class="btn btn-icon btn-sm btn-text-secondary" data-bs-toggle="tooltip"
title="Edytuj"><i class="bx bx-edit-alt"></i></button>
<div class="dropdown">
<button type="button" class="btn p-0 dropdown-toggle hide-arrow"
data-bs-toggle="dropdown"><i
class="bx bx-dots-vertical-rounded"></i></button>
<div class="dropdown-menu dropdown-menu-end">
<a class="dropdown-item" href="javascript:void(0);"><i
class="bx bx-duplicate me-1"></i> Duplikuj</a>
<div class="dropdown-divider"></div>
<a class="dropdown-item text-danger" href="javascript:void(0);"><i
class="bx bx-trash me-1"></i> Usuń</a>
</div>
</div>
</div>
</td>
</tr>
<tr>
<td>
<div class="form-check m-0"><input class="form-check-input" type="checkbox"></div>
</td>
<td>
<div class="avatar avatar-sm" data-bs-toggle="tooltip" title="Usługa">
<span class="avatar-initial rounded bg-label-info"><i
class="bx bx-briefcase"></i></span>
</div>
</td>
<td>
<span class="fw-medium text-heading">Szkolenie wstępne</span>
<br><small class="text-muted">Kod: SZK-01</small>
</td>
<td>usł.</td>
<td class="text-end">1 000,00 zł</td>
<td class="text-center"><span class="badge bg-label-secondary">ZW</span></td>
<td class="text-end">1 000,00 zł</td>
<td class="text-center">
<div class="d-flex justify-content-center align-items-center gap-1">
<button class="btn btn-icon btn-sm btn-text-secondary" data-bs-toggle="tooltip"
title="Edytuj"><i class="bx bx-edit-alt"></i></button>
<div class="dropdown">
<button type="button" class="btn p-0 dropdown-toggle hide-arrow"
data-bs-toggle="dropdown"><i
class="bx bx-dots-vertical-rounded"></i></button>
<div class="dropdown-menu dropdown-menu-end">
<a class="dropdown-item" href="javascript:void(0);"><i
class="bx bx-duplicate me-1"></i> Duplikuj</a>
<div class="dropdown-divider"></div>
<a class="dropdown-item text-danger" href="javascript:void(0);"><i
class="bx bx-trash me-1"></i> Usuń</a>
</div>
</div>
</div>
</td>
</tr>
</tbody>
</table>
</div>
<div class="card-footer d-flex justify-content-center border-top">
<nav aria-label="Page navigation">
<ul class="pagination pagination-sm mb-0">
<li class="page-item prev"><a class="page-link" href="javascript:void(0);"><i
class="tf-icon bx bx-chevron-left"></i></a></li>
<li class="page-item active"><a class="page-link" href="javascript:void(0);">1</a></li>
<li class="page-item"><a class="page-link" href="javascript:void(0);">2</a></li>
<li class="page-item next"><a class="page-link" href="javascript:void(0);"><i
class="tf-icon bx bx-chevron-right"></i></a></li>
</ul>
</nav>
</div>
</div>
</div>
<div class="col-lg-3" id="product-filters-col">
<div class="card sticky-top" style="top: 20px;">
<div class="card-header border-bottom">
<h5 class="card-title mb-0">Filtry</h5>
</div>
<div class="card-body pt-4">
<div class="mb-3">
<label class="form-label">Typ pozycji</label>
<div class="d-flex flex-column gap-2">
<div class="form-check">
<input name="type-radio" class="form-check-input" type="radio" value="" id="typeAll"
checked>
<label class="form-check-label" for="typeAll"> Wszystkie </label>
</div>
<div class="form-check">
<input name="type-radio" class="form-check-input" type="radio" value="towar"
id="typeProduct">
<label class="form-check-label" for="typeProduct"> Tylko towary </label>
</div>
<div class="form-check">
<input name="type-radio" class="form-check-input" type="radio" value="usluga"
id="typeService">
<label class="form-check-label" for="typeService"> Tylko usługi </label>
</div>
</div>
</div>
<div class="mb-3">
<label class="form-label">Stawka VAT</label>
<select class="form-select">
<option value="">Wszystkie stawki</option>
<option value="23">23%</option>
<option value="8">8%</option>
<option value="5">5%</option>
<option value="0">0%</option>
<option value="zw">ZW (Zwolnione)</option>
<option value="np">NP (Nie podlega)</option>
</select>
</div>
<div class="mb-4">
<label class="form-label">Cena Netto</label>
<div class="row g-2">
<div class="col-6">
<input type="number" class="form-control" placeholder="Od">
</div>
<div class="col-6">
<input type="number" class="form-control" placeholder="Do">
</div>
</div>
</div>
<div class="d-grid gap-2">
<button class="btn btn-primary">Filtruj</button>
<button class="btn btn-outline-secondary">Wyczyść</button>
</div>
</div>
</div>
</div>
</div>
</div>
<div class="content-backdrop fade"></div>
<div class="modal fade" id="addProductModal" tabindex="-1" aria-hidden="true">
<div class="modal-dialog modal-lg modal-dialog-centered" role="document">
<div class="modal-content">
<div class="modal-header border-bottom">
<h5 class="modal-title fs-5">Nowy towar / usługa</h5>
<button type="button" class="btn-close" data-bs-dismiss="modal" aria-label="Close"></button>
</div>
<form id="addProductForm" onsubmit="return false">
<div class="modal-body pb-3">
<div class="mb-4">
<label class="form-label d-block mb-2">Rodzaj pozycji</label>
<div class="btn-group w-100" role="group">
<input type="radio" class="btn-check" name="itemType" id="type_product" autocomplete="off"
checked>
<label class="btn btn-outline-primary" for="type_product"><i class="bx bx-box me-1"></i>
Towar</label>
<input type="radio" class="btn-check" name="itemType" id="type_service" autocomplete="off">
<label class="btn btn-outline-primary" for="type_service"><i
class="bx bx-briefcase me-1"></i> Usługa</label>
</div>
</div>
<div class="row g-3 mb-3">
<div class="col-md-8">
<label class="form-label">Nazwa <span class="text-danger">*</span></label>
<input type="text" class="form-control" placeholder="np. Konsultacje marketingowe" required>
</div>
<div class="col-md-4">
<label class="form-label">Kod / PKWiU</label>
<input type="text" class="form-control" placeholder="np. KM-01">
</div>
</div>
<div class="bg-label-secondary p-3 rounded mb-3">
<div class="row g-3 align-items-end">
<div class="col-md-3">
<label class="form-label">Jednostka</label>
<select class="form-select">
<option value="szt">szt.</option>
<option value="usl">usł.</option>
<option value="godz">godz.</option>
<option value="km">km</option>
<option value="kg">kg</option>
</select>
</div>
<div class="col-md-3">
<label class="form-label">Cena Netto</label>
<div class="input-group input-group-merge bg-white">
<input type="number" class="form-control" id="modal_netto" step="0.01"
placeholder="0.00">
</div>
</div>
<div class="col-md-3">
<label class="form-label">Stawka VAT</label>
<select class="form-select" id="modal_vat_rate">
<option value="0.23" selected>23%</option>
<option value="0.08">8%</option>
<option value="0.05">5%</option>
<option value="0">0%</option>
<option value="zw">ZW</option>
<option value="np">NP</option>
</select>
</div>
<div class="col-md-3">
<label class="form-label fw-bold">Cena Brutto</label>
<div class="input-group input-group-merge bg-white">
<input type="number" class="form-control fw-bold" id="modal_brutto" step="0.01"
placeholder="0.00">
</div>
</div>
</div>
<div class="mt-2 text-end">
<small class="text-muted"><i class="bx bx-info-circle"></i> Kwoty przeliczają się
automatycznie.</small>
</div>
</div>
<div class="mb-3">
<label class="form-label">Opis dodatkowy (opcjonalny)</label>
<textarea class="form-control" rows="2"
placeholder="Ten opis może się drukować pod nazwą na fakturze..."></textarea>
</div>
</div>
<div class="modal-footer bg-light">
<button type="button" class="btn btn-outline-secondary" data-bs-dismiss="modal">Anuluj</button>
<button type="submit" class="btn btn-primary">
<i class="bx bx-save me-1"></i> Zapisz do bazy
</button>
</div>
</form>
</div>
</div>
</div>
<?php include '../../footer.php'; ?>
<script>
document.addEventListener('DOMContentLoaded', function () {
// Tooltipy
var tooltipTriggerList = [].slice.call(document.querySelectorAll('[data-bs-toggle="tooltip"]'))
var tooltipList = tooltipTriggerList.map(function (tooltipTriggerEl) {
return new bootstrap.Tooltip(tooltipTriggerEl)
});
// Obsługa zwijania filtrów
const filterBtn = document.getElementById('filter-toggle-btn');
const filtersCol = document.getElementById('product-filters-col');
const listCol = document.getElementById('product-list-col');
if (filterBtn && filtersCol && listCol) {
filterBtn.addEventListener('click', function (e) {
e.preventDefault();
filtersCol.classList.toggle('d-none');
if (filtersCol.classList.contains('d-none')) {
listCol.classList.remove('col-lg-9');
listCol.classList.add('col-12');
} else {
listCol.classList.remove('col-12');
listCol.classList.add('col-lg-9');
}
});
}
// Check All w tabeli
const checkAll = document.getElementById('checkAll');
if (checkAll) {
checkAll.addEventListener('change', function () {
const checkboxes = document.querySelectorAll('tbody .form-check-input');
checkboxes.forEach(cb => cb.checked = this.checked);
});
}
// --- Logika Modala Dodawania (Przeliczanie Netto/Brutto) ---
const modNetto = document.getElementById('modal_netto');
const modBrutto = document.getElementById('modal_brutto');
const modVatRate = document.getElementById('modal_vat_rate');
function calculateModalValues(source) {
let rateVal = modVatRate.value;
let rate = parseFloat(rateVal);
// Jeśli wybrano ZW lub NP, traktujemy stawkę jako 0 do obliczeń matematycznych
if (isNaN(rate) || rateVal === 'zw' || rateVal === 'np') rate = 0;
if (source === 'netto') {
let netVal = parseFloat(modNetto.value) || 0;
let grossVal = netVal + (netVal * rate);
modBrutto.value = grossVal.toFixed(2);
}
else if (source === 'brutto') {
let grossVal = parseFloat(modBrutto.value) || 0;
let netVal = grossVal / (1 + rate);
modNetto.value = netVal.toFixed(2);
}
else if (source === 'rate') {
// Przy zmianie stawki priorytet ma wpisane Netto
if (modNetto.value) calculateModalValues('netto');
else if (modBrutto.value) calculateModalValues('brutto');
}
}
if (modNetto && modBrutto && modVatRate) {
modNetto.addEventListener('input', () => calculateModalValues('netto'));
modBrutto.addEventListener('input', () => calculateModalValues('brutto'));
modVatRate.addEventListener('change', () => calculateModalValues('rate'));
}
});
</script>
</body>
</html>

View File

@@ -4,6 +4,24 @@ include '../../header-invoice.php';
?>
<link rel="stylesheet" href="../../assets/vendor/libs/fullcalendar/fullcalendar.css" />
<style>
/* Custom darker event colors for white text contrast */
.fc-event-dark-success {
background-color: #1b5e20 !important;
border-color: #1b5e20 !important;
color: #ffffff !important;
}
.fc-event-dark-danger {
background-color: #b71c1c !important;
border-color: #b71c1c !important;
color: #ffffff !important;
}
.fc-event-dark-warning {
background-color: #e65100 !important;
border-color: #e65100 !important;
color: #ffffff !important;
}
</style>
<div class="container-fluid flex-grow-1 container-p-y">
@@ -11,6 +29,18 @@ include '../../header-invoice.php';
<span class="text-muted fw-light">Faktury i sprzedaż /</span> Kalendarz płatności
</h4>
<div class="d-flex mb-3 gap-2 align-items-center flex-nowrap overflow-auto pb-2">
<button type="button" class="btn btn-label-primary text-nowrap tab-filter-btn" data-filter="all">
Wszystkie
</button>
<button type="button" class="btn btn-label-secondary text-nowrap tab-filter-btn" data-filter="paid">
Zapłacone
</button>
<button type="button" class="btn btn-label-secondary text-nowrap tab-filter-btn" data-filter="unpaid">
Do zapłaty
</button>
</div>
<div class="card app-calendar-wrapper">
<div class="row g-0">
<!-- Calendar Sidebar -->
@@ -22,23 +52,6 @@ include '../../header-invoice.php';
<!-- Calendar & Tabs -->
<div class="col app-calendar-content">
<div class="card shadow-none border-0">
<div class="card-header border-bottom d-flex justify-content-between align-items-center">
<h5 class="mb-0">Kalendarz płatności</h5>
<ul class="nav nav-pills" role="tablist">
<li class="nav-item">
<button type="button" class="nav-link active" role="tab" data-bs-toggle="tab"
data-filter="all">Wszystkie</button>
</li>
<li class="nav-item">
<button type="button" class="nav-link" role="tab" data-bs-toggle="tab"
data-filter="paid">Zapłacone</button>
</li>
<li class="nav-item">
<button type="button" class="nav-link" role="tab" data-bs-toggle="tab"
data-filter="unpaid">Do zapłaty</button>
</li>
</ul>
</div>
<div class="card-body pb-0">
<div id="calendar"></div>
</div>
@@ -72,7 +85,7 @@ include '../../header-invoice.php';
start: new Date(y, m, 5),
allDay: true,
extendedProps: { status: 'paid', amount: '1230.00 PLN' },
className: 'bg-label-success'
className: 'fc-event-dark-success'
},
{
id: 2,
@@ -80,7 +93,7 @@ include '../../header-invoice.php';
start: new Date(y, m, 10),
allDay: true,
extendedProps: { status: 'paid', amount: '50.00 USD' },
className: 'bg-label-success'
className: 'fc-event-dark-success'
},
// UNPAID (Future / Current)
@@ -90,7 +103,7 @@ include '../../header-invoice.php';
start: new Date(y, m, 24), // Due date
allDay: true,
extendedProps: { status: 'unpaid', amount: '553.50 PLN' },
className: 'bg-label-danger'
className: 'fc-event-dark-danger'
},
{
id: 4,
@@ -98,7 +111,7 @@ include '../../header-invoice.php';
start: new Date(y, m, 28), // Due date
allDay: true,
extendedProps: { status: 'unpaid', amount: '120.00 PLN' },
className: 'bg-label-warning'
className: 'fc-event-dark-warning'
},
{
id: 5,
@@ -106,7 +119,7 @@ include '../../header-invoice.php';
start: new Date(y, m + 1, 5), // Next month
allDay: true,
extendedProps: { status: 'unpaid', amount: '1500.00 PLN' },
className: 'bg-label-warning'
className: 'fc-event-dark-warning'
}
];
@@ -118,6 +131,13 @@ include '../../header-invoice.php';
center: 'title',
right: 'dayGridMonth,listMonth'
},
buttonText: {
today: 'Dzisiaj',
month: 'Miesiąc',
week: 'Tydzień',
day: 'Dzień',
list: 'Lista'
},
events: allEvents,
locale: 'pl',
firstDay: 1, // Start week on Monday
@@ -137,10 +157,19 @@ include '../../header-invoice.php';
calendar.render();
// Tabs Filtering
const tabBtns = document.querySelectorAll('[data-bs-toggle="tab"]');
const tabBtns = document.querySelectorAll('.tab-filter-btn');
tabBtns.forEach(btn => {
btn.addEventListener('shown.bs.tab', function (e) {
const filter = e.target.getAttribute('data-filter');
btn.addEventListener('click', function (e) {
// Remove active class from all
tabBtns.forEach(b => {
b.classList.remove('btn-label-primary');
b.classList.add('btn-label-secondary');
});
// Add active class to clicked
this.classList.remove('btn-label-secondary');
this.classList.add('btn-label-primary');
const filter = this.getAttribute('data-filter');
console.log("Filtering by:", filter);
// Remove all events first

View File

@@ -190,8 +190,9 @@ include '../../header-invoice.php';
<button type="button" class="btn btn-label-primary w-100 mb-4" id="btn-ocr-read">
<i class="bx bx-scan me-1"></i> Odczytaj dane z pliku (OCR)
</button>
<h6 class="mb-3 text-muted small text-uppercase fw-bold border-bottom pb-2">Dane z faktury</h6>
<h6 class="mb-3 text-muted small text-uppercase fw-bold border-bottom pb-2">Dane z
faktury</h6>
<div class="row g-3 mb-3">
<div class="col-md-7">
@@ -354,6 +355,11 @@ include '../../header-invoice.php';
<table class="table table-hover table-striped align-middle">
<thead class="table-light">
<tr>
<th style="width: 50px;">
<div class="form-check m-0">
<input class="form-check-input" type="checkbox" id="checkAll">
</div>
</th>
<th style="width: 50px;">#</th>
<th>Nr dokumentu</th>
<th>Dostawca</th>
@@ -367,6 +373,11 @@ include '../../header-invoice.php';
<tbody class="table-border-bottom-0">
<tr>
<td>
<div class="form-check m-0">
<input class="form-check-input" type="checkbox" value="1">
</div>
</td>
<td>1</td>
<td>
<span class="fw-medium">FZ/2026/02/001</span>
@@ -403,6 +414,11 @@ include '../../header-invoice.php';
</tr>
<tr>
<td>
<div class="form-check m-0">
<input class="form-check-input" type="checkbox" value="2">
</div>
</td>
<td>2</td>
<td>
<span class="fw-medium">FV/TAURON/22/05</span>
@@ -444,6 +460,11 @@ include '../../header-invoice.php';
</tr>
<tr>
<td>
<div class="form-check m-0">
<input class="form-check-input" type="checkbox" value="3">
</div>
</td>
<td>3</td>
<td>
<span class="fw-medium">102/K/2026</span>
@@ -483,6 +504,11 @@ include '../../header-invoice.php';
</tr>
<tr>
<td>
<div class="form-check m-0">
<input class="form-check-input" type="checkbox" value="4">
</div>
</td>
<td>4</td>
<td>
<span class="fw-medium">FV/22/09/2026</span>
@@ -523,7 +549,7 @@ include '../../header-invoice.php';
</tr>
<tr class="bg-label-secondary">
<td colspan="5" class="text-end fw-bold">Suma (PLN):</td>
<td colspan="6" class="text-end fw-bold">Suma (PLN):</td>
<td class="text-end fw-bold">6 893,20 zł</td>
<td colspan="2"></td>
</tr>
@@ -810,71 +836,71 @@ include '../../header-invoice.php';
});
</script>
<!-- OCR Simulation Script -->
<script>
document.addEventListener('DOMContentLoaded', function() {
const ocrBtn = document.getElementById('btn-ocr-read');
if (ocrBtn) {
ocrBtn.addEventListener('click', function() {
const btn = this;
const originalContent = btn.innerHTML;
// 1. Loader state
btn.disabled = true;
btn.innerHTML = '<span class="spinner-border spinner-border-sm me-1" role="status" aria-hidden="true"></span> Przetwarzanie obrazu...';
<!-- OCR Simulation Script -->
<script>
document.addEventListener('DOMContentLoaded', function () {
const ocrBtn = document.getElementById('btn-ocr-read');
if (ocrBtn) {
ocrBtn.addEventListener('click', function () {
const btn = this;
const originalContent = btn.innerHTML;
// 2. Simulate delay
setTimeout(() => {
// 3. Fill form data
// Dostawca: Tauron (value=1)
const supplierSelect = document.querySelector('#quickAddModal select.select2-modal');
if (supplierSelect) {
$(supplierSelect).val('1').trigger('change');
// 1. Loader state
btn.disabled = true;
btn.innerHTML = '<span class="spinner-border spinner-border-sm me-1" role="status" aria-hidden="true"></span> Przetwarzanie obrazu...';
// 2. Simulate delay
setTimeout(() => {
// 3. Fill form data
// Dostawca: Tauron (value=1)
const supplierSelect = document.querySelector('#quickAddModal select.select2-modal');
if (supplierSelect) {
$(supplierSelect).val('1').trigger('change');
}
// Numer dokumentu
document.querySelector('#quickAddModal input[placeholder="np. FV/2026/02/10"]').value = 'FV/AUT/2026/02/194';
// Daty
const dates = document.querySelectorAll('#quickAddModal .date-picker-modal');
if (dates.length >= 3) {
dates[0].value = '2026-02-15'; // Wystawienia
dates[1].value = '2026-02-15'; // Zakupu
dates[2].value = '2026-02-22'; // Płatności
}
// Netto
document.getElementById('qa_netto').value = '1250.00';
// VAT Rate
document.getElementById('qa_vat_rate').value = '0.23';
// VAT Amount (manual calc for demo or trigger calculation if logic exists)
document.getElementById('qa_vat_amount').value = '287.50';
// Brutto
document.getElementById('qa_brutto').value = '1537.50';
// Opis
document.querySelector('#quickAddModal input[placeholder="np. Paliwo Ford Mondeo"]').value = 'Energia elektryczna - Luty 2026';
// 4. Restore button
btn.disabled = false;
btn.innerHTML = '<i class="bx bx-check me-1"></i> Dane odczytane poprawnie';
btn.classList.remove('btn-label-primary');
btn.classList.add('btn-label-success');
// Opcjonalnie: animacja pól
const inputs = document.querySelectorAll('#quickAddModal input');
inputs.forEach(input => {
if (input.value) {
input.classList.add('animate__animated', 'animate__flash');
setTimeout(() => input.classList.remove('animate__animated', 'animate__flash'), 1000);
}
});
// Numer dokumentu
document.querySelector('#quickAddModal input[placeholder="np. FV/2026/02/10"]').value = 'FV/AUT/2026/02/194';
// Daty
const dates = document.querySelectorAll('#quickAddModal .date-picker-modal');
if (dates.length >= 3) {
dates[0].value = '2026-02-15'; // Wystawienia
dates[1].value = '2026-02-15'; // Zakupu
dates[2].value = '2026-02-22'; // Płatności
}
// Netto
document.getElementById('qa_netto').value = '1250.00';
// VAT Rate
document.getElementById('qa_vat_rate').value = '0.23';
// VAT Amount (manual calc for demo or trigger calculation if logic exists)
document.getElementById('qa_vat_amount').value = '287.50';
// Brutto
document.getElementById('qa_brutto').value = '1537.50';
// Opis
document.querySelector('#quickAddModal input[placeholder="np. Paliwo Ford Mondeo"]').value = 'Energia elektryczna - Luty 2026';
// 4. Restore button
btn.disabled = false;
btn.innerHTML = '<i class="bx bx-check me-1"></i> Dane odczytane poprawnie';
btn.classList.remove('btn-label-primary');
btn.classList.add('btn-label-success');
// Opcjonalnie: animacja pól
const inputs = document.querySelectorAll('#quickAddModal input');
inputs.forEach(input => {
if(input.value) {
input.classList.add('animate__animated', 'animate__flash');
setTimeout(() => input.classList.remove('animate__animated', 'animate__flash'), 1000);
}
});
}, 2000);
});
}
});
</script>
}, 2000);
});
}
});
</script>
</body>
</html>

View File

@@ -0,0 +1,188 @@
<?php
$enablePrototypeComments = true;
include '../../header-invoice.php';
?>
<div class="container-fluid flex-grow-1 container-p-y">
<div class="d-flex justify-content-between align-items-center mb-4">
<h4 class="py-3 mb-0">
<span class="text-muted fw-light">System / Ustawienia /</span> Kategorie kosztów
</h4>
<div>
<!-- Breadcrumbs or other header actions can go here if needed -->
</div>
</div>
<div class="row">
<!-- Settings Navigation -->
<div class="col-md-3 mb-4 mb-md-0">
<div class="card bg-white">
<div class="card-body p-2">
<ul class="nav nav-pills flex-column">
<li class="nav-item">
<a class="nav-link w-100 text-start text-body" href="sys-settings.php">Dane firmy</a>
</li>
<li class="nav-item mt-1">
<a class="nav-link w-100 text-start text-body" href="javascript:void(0);">Dokumenty</a>
</li>
<li class="nav-item mt-1">
<a class="nav-link w-100 text-start router-link-active router-link-exact-active btn btn-label-primary"
href="sys-settings-categories.php">Kategorie kosztów</a>
</li>
<li class="nav-item mt-1">
<a class="nav-link w-100 text-start text-body" href="javascript:void(0);">Wysyłka e-mail</a>
</li>
</ul>
</div>
</div>
</div>
<!-- Settings Content - Categories List -->
<div class="col-md-9">
<div class="card">
<div class="card-header border-bottom d-flex justify-content-between align-items-center">
<h5 class="card-title mb-0">Kategorie kosztów</h5>
<button type="button" class="btn btn-primary" data-bs-toggle="modal"
data-bs-target="#addCategoryModal">
<i class="bx bx-plus me-1"></i> Dodaj
</button>
</div>
<div class="card-body pt-4 pb-0">
<div class="alert alert-primary alert-dismissible d-flex align-items-center mb-0" role="alert">
<span class="alert-icon text-primary me-2">
<i class="bx bx-info-circle bx-sm"></i>
</span>
Kategorie kosztów mają cele statystyczne. Po przypisaniu faktur kosztowych do odpowiedniej
kategorii będzie można generować szczegółowe raporty kosztów firmy.
<button type="button" class="btn-close" data-bs-dismiss="alert" aria-label="Close"></button>
</div>
</div>
<div class="table-responsive text-nowrap mt-3">
<table class="table table-hover">
<thead class="table-light">
<tr>
<th>Nazwa kategorii</th>
<th>Domyślna</th>
<th class="text-end">Akcje</th>
</tr>
</thead>
<tbody class="table-border-bottom-0">
<tr>
<td>
<strong>Materiały biurowe</strong>
</td>
<td><span class="badge bg-label-success">TAK</span></td>
<td class="text-end">
<div class="d-flex justify-content-end align-items-center gap-1">
<button type="button" class="btn btn-icon btn-sm text-secondary" title="Edytuj">
<i class="bx bx-edit-alt"></i>
</button>
<button type="button" class="btn btn-icon btn-sm text-danger" title="Usuń">
<i class="bx bx-trash"></i>
</button>
</div>
</td>
</tr>
<tr>
<td>
<strong>Usługi informatyczne</strong>
</td>
<td><span class="badge bg-label-secondary">NIE</span></td>
<td class="text-end">
<div class="d-flex justify-content-end align-items-center gap-1">
<button type="button" class="btn btn-icon btn-sm text-secondary" title="Edytuj">
<i class="bx bx-edit-alt"></i>
</button>
<button type="button" class="btn btn-icon btn-sm text-danger" title="Usuń">
<i class="bx bx-trash"></i>
</button>
</div>
</td>
</tr>
<tr>
<td>
<strong>Delegacje i podróże</strong>
</td>
<td><span class="badge bg-label-secondary">NIE</span></td>
<td class="text-end">
<div class="d-flex justify-content-end align-items-center gap-1">
<button type="button" class="btn btn-icon btn-sm text-secondary" title="Edytuj">
<i class="bx bx-edit-alt"></i>
</button>
<button type="button" class="btn btn-icon btn-sm text-danger" title="Usuń">
<i class="bx bx-trash"></i>
</button>
</div>
</td>
</tr>
<tr>
<td>
<strong>Koszty reprezentacji</strong>
</td>
<td><span class="badge bg-label-secondary">NIE</span></td>
<td class="text-end">
<div class="d-flex justify-content-end align-items-center gap-1">
<button type="button" class="btn btn-icon btn-sm text-secondary" title="Edytuj">
<i class="bx bx-edit-alt"></i>
</button>
<button type="button" class="btn btn-icon btn-sm text-danger" title="Usuń">
<i class="bx bx-trash"></i>
</button>
</div>
</td>
</tr>
</tbody>
</table>
</div>
</div>
</div>
</div>
</div>
<div class="content-backdrop fade"></div>
<!-- Add Category Modal -->
<div class="modal fade" id="addCategoryModal" tabindex="-1" aria-hidden="true">
<div class="modal-dialog modal-dialog-centered" role="document">
<div class="modal-content">
<div class="modal-header">
<h5 class="modal-title" id="addCategoryModalLabel">Dodaj nową kategorię kosztów</h5>
<button type="button" class="btn-close" data-bs-dismiss="modal" aria-label="Close"></button>
</div>
<div class="modal-body">
<div class="row">
<div class="col mb-3">
<label for="categoryName" class="form-label">Nazwa kategorii</label>
<input type="text" id="categoryName" class="form-control" placeholder="Wprowadź nazwę..." />
</div>
</div>
<div class="row">
<div class="col mb-0">
<div class="form-check form-switch mt-2">
<input class="form-check-input" type="checkbox" id="isDefaultCategory">
<label class="form-check-label" for="isDefaultCategory">Ustaw jako domyślną
kategorię</label>
<div class="form-text mt-1">Jeśli zaznaczysz tę opcję, poprzednia kategoria domyślna
zostanie nadpisana i straci ten status (tylko jedna kategoria może być domyślna).</div>
</div>
</div>
</div>
</div>
<div class="modal-footer">
<button type="button" class="btn btn-outline-secondary" data-bs-dismiss="modal">Anuluj</button>
<button type="button" class="btn btn-primary">Dodaj</button>
</div>
</div>
</div>
</div>
<?php include '../../footer.php'; ?>
</body>
</html>

View File

@@ -0,0 +1,187 @@
<?php
$enablePrototypeComments = true;
include '../../header-invoice.php';
?>
<div class="container-fluid flex-grow-1 container-p-y">
<h4 class="py-3 mb-4">
<span class="text-muted fw-light">System /</span> Ustawienia
</h4>
<div class="row">
<!-- Settings Navigation -->
<div class="col-md-3 mb-4 mb-md-0">
<div class="card bg-white">
<div class="card-body p-2">
<ul class="nav nav-pills flex-column">
<li class="nav-item">
<a class="nav-link w-100 text-start router-link-active router-link-exact-active btn btn-label-primary"
href="javascript:void(0);">Dane
firmy</a>
</li>
<li class="nav-item mt-1">
<a class="nav-link w-100 text-start text-body" href="javascript:void(0);">Dokumenty</a>
</li>
<li class="nav-item mt-1">
<a class="nav-link w-100 text-start text-body" href="sys-settings-categories.php">Kategorie
kosztów</a>
</li>
<li class="nav-item mt-1">
<a class="nav-link w-100 text-start text-body" href="javascript:void(0);">Wysyłka e-mail</a>
</li>
</ul>
</div>
</div>
</div>
<!-- Settings Content -->
<div class="col-md-9">
<div class="card mb-4">
<div class="row m-0 mb-3 p-2">
<div class="col-md-6 px-0">
<h5 class="mb-3 border-bottom p-3 pb-2">Dane</h5>
<div class="pt-2 px-3">
<div class="mb-3"><label for="input446" class="form-label d-flex align-items-center">Nazwa
firmy</label>
<div class="input-group"><input type="text" class="form-control" id="input446"
value="Magico Software sp. z o.o."><!----><!----><!----></div>
</div>
<div class="mb-3"><label for="input446"
class="form-label d-flex align-items-center">nip</label>
<div class="input-group"><input type="text" class="form-control" id="input446"
value="PL 865 258 23 86"><!----><!----><!----></div>
</div>
<div class="mb-3"><label for="input446"
class="form-label d-flex align-items-center">regon</label>
<div class="input-group"><input type="text" class="form-control" id="input446"
value="524220457"><!----><!----><!----></div>
</div>
<div class="mb-3"><label for="input446" class="form-label d-flex align-items-center">Nazwa
banku</label>
<div class="input-group"><input type="text" class="form-control" id="input446"
value="mBank (SWIFT BREXPLPWMBK)"><!----><!----><!----></div>
</div>
<div class="mb-3"><label for="input446" class="form-label d-flex align-items-center">Numer
konta</label>
<div class="input-group"><input type="text" class="form-control" id="input446"
value="24 1140 2004 0000 3502 8330 0117"><!----><!----><!----></div>
</div>
</div>
<div class="px-3">
<div class="mb-3"><label for="input446"
class="form-label d-flex align-items-center">telefon</label>
<div class="input-group"><input type="text" class="form-control" id="input446"
value="+48 726 322 202"><!----><!----><!----></div>
</div>
<div class="mb-3"><label for="input446"
class="form-label d-flex align-items-center">email</label>
<div class="input-group"><input type="text" class="form-control" id="input446"
value="kontakt@magico.pl"><!----><!----><!----></div>
</div>
</div>
</div>
<div class="col-md-6 px-0">
<h5 class="mb-3 border-bottom p-3 pb-2">Adres firmy</h5>
<div class="py-2 px-3">
<div class="mb-3"><label for="input446"
class="form-label d-flex align-items-center">Ulica</label>
<div class="input-group"><input type="text" class="form-control" id="input446"
value="Przemysłowa"><!----><!----><!----></div>
</div>
<div class="row">
<div class="col-lg-6">
<div class="mb-3"><label for="input446"
class="form-label d-flex align-items-center">Numer budynku</label>
<div class="input-group"><input type="text" class="form-control" id="input446"
value="11"><!----><!----><!----></div>
</div>
</div>
<div class="col-lg-6">
<div class="mb-3"><label for="input446"
class="form-label d-flex align-items-center">Numer lokalu</label>
<div class="input-group"><input type="text" class="form-control" id="input446"
value=""><!----><!----><!----></div>
</div>
</div>
</div>
<div class="row">
<div class="col-lg-6">
<div class="mb-3"><label for="input446"
class="form-label d-flex align-items-center">Kod pocztowy</label>
<div class="input-group"><input type="text" class="form-control" id="input446"
value="37-450"><!----><!----><!----></div>
</div>
</div>
<div class="col-lg-6">
<div class="mb-3"><label for="input446"
class="form-label d-flex align-items-center">Miasto</label>
<div class="input-group"><input type="text" class="form-control" id="input446"
value="Stalowa Wola"><!----><!----><!----></div>
</div>
</div>
</div>
<div class="mb-3"><label for="input446"
class="form-label d-flex align-items-center">Gmina</label>
<div class="input-group"><input type="text" class="form-control" id="input446"
value="Stalowa Wola"><!----><!----><!----></div>
</div>
<div class="mb-3"><label for="input446"
class="form-label d-flex align-items-center">Powiat</label>
<div class="input-group"><input type="text" class="form-control" id="input446"
value="Stalowowolski"><!----><!----><!----></div>
</div>
<div class="mb-3"><label for="input446"
class="form-label d-flex align-items-center">Województwo</label>
<div class="input-group"><input type="text" class="form-control" id="input446"
value="Podkarpackie"><!----><!----><!----></div>
</div>
<div class="mb-3"><label for="input446"
class="form-label d-flex align-items-center">Kraj</label>
<div class="input-group"><input type="text" class="form-control" id="input446"
value="Polska"><!----><!----><!----></div>
</div>
</div>
</div>
</div>
</div>
<div class="card">
<div class="card-header border-bottom">
<h5 class="card-title mb-0">Logo na dokumentach</h5>
</div>
<div class="card-body pt-4">
<div class="d-flex align-items-start align-items-sm-center gap-4">
<!-- Placeholder na logo, jeśli jest jakaś ścieżka ogólna to można zmienić, tutaj dałem szary kwadrat -->
<div class="bg-label-secondary rounded d-flex align-items-center justify-content-center"
style="width: 100px; height: 100px;">
<i class="bx bx-image fs-1 text-secondary"></i>
</div>
<div class="button-wrapper">
<label for="upload" class="btn btn-primary me-2 mb-4" tabindex="0">
<span class="d-none d-sm-block">Wgraj nowe logo</span>
<i class="bx bx-upload d-block d-sm-none"></i>
<input type="file" id="upload" class="account-file-input" hidden
accept="image/png, image/jpeg" />
</label>
<button type="button" class="btn btn-outline-secondary account-image-reset mb-4">
<i class="bx bx-reset d-block d-sm-none"></i>
<span class="d-none d-sm-block">Resetuj</span>
</button>
<p class="text-muted mb-0">Dozwolone formaty: JPG, PNG. Maksymalny rozmiar: 800 KB.
Rekomentowany wymiar: 300x150 px</p>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
<div class="content-backdrop fade"></div>
<?php include '../../footer.php'; ?>
</body>
</html>