This commit is contained in:
Lheorvine 2025-06-01 17:41:00 +02:00
parent e19f942547
commit 5e0a3cfabe
7 changed files with 61 additions and 17 deletions

View file

@ -1,6 +1,6 @@
[package] [package]
name = "ksiegarnia" name = "ksiegarnia"
version = "0.1.0" version = "0.9.0"
edition = "2021" edition = "2021"
[dependencies] [dependencies]

View file

@ -0,0 +1,3 @@
ALTER TABLE zamowienia ALTER COLUMN typ_dostawy SET DEFAULT 'shipping';
UPDATE zamowienia SET typ_dostawy = 'shipping' WHERE typ_dostawy IS NULL;

View file

@ -58,19 +58,16 @@
<span class="text-primary" id="products-value">0.00 PLN</span> <span class="text-primary" id="products-value">0.00 PLN</span>
</div> </div>
<!-- Zmieniony układ dla opcji dostawy --> <div class="d-flex justify-content-between mb-3 align-items-center">
<div class="mb-3">
<div class="d-flex justify-content-between">
<div class="form-check"> <div class="form-check">
<input class="form-check-input" type="checkbox" id="localPickup"> <input class="form-check-input" type="checkbox" id="localPickup" checked>
<label class="form-check-label" for="localPickup"> <label class="form-check-label" for="localPickup">
Dostawa Dostawa (12.99 PLN)
</label> </label>
</div> </div>
<span id="delivery-value">12.99 PLN</span> <span id="delivery-value">12.99 PLN</span>
</div> </div>
</div>
<hr> <hr>
<div class="d-flex justify-content-between fw-bold fs-5"> <div class="d-flex justify-content-between fw-bold fs-5">
<span>Do zapłaty:</span> <span>Do zapłaty:</span>

View file

@ -1,3 +1,5 @@
import { formatCurrency } from "./utils.js"
document.addEventListener('DOMContentLoaded', function() { document.addEventListener('DOMContentLoaded', function() {
const urlParams = new URLSearchParams(window.location.search); const urlParams = new URLSearchParams(window.location.search);
const bookId = urlParams.get('id'); const bookId = urlParams.get('id');
@ -38,9 +40,11 @@ async function loadBookDetails(bookId) {
} }
function displayBookDetails(book) { function displayBookDetails(book) {
const price = formatCurrency(book.cena);
document.getElementById('book-title').textContent = book.tytul; document.getElementById('book-title').textContent = book.tytul;
document.getElementById('book-author').textContent = book.autor; document.getElementById('book-author').textContent = book.autor;
document.getElementById('book-price').textContent = `${book.cena} PLN`; document.getElementById('book-price').textContent = price;
document.getElementById('book-description').textContent = book.opis; document.getElementById('book-description').textContent = book.opis;
const bookCover = document.getElementById('book-cover'); const bookCover = document.getElementById('book-cover');
@ -51,6 +55,14 @@ function displayBookDetails(book) {
} }
async function addToCart(bookId) { async function addToCart(bookId) {
const response = await fetch('/api/check-auth');
const data = await response.json();
if (!data.authenticated) {
window.location.href = '/login.html';
return;
}
try { try {
const response = await fetch('/api/add-to-cart', { const response = await fetch('/api/add-to-cart', {
method: 'POST', method: 'POST',

View file

@ -1,3 +1,5 @@
import { formatCurrency } from './utils.js';
document.addEventListener('DOMContentLoaded', function() { document.addEventListener('DOMContentLoaded', function() {
const booksContainer = document.getElementById('books-container'); const booksContainer = document.getElementById('books-container');
const searchInput = document.getElementById('searchInput'); const searchInput = document.getElementById('searchInput');
@ -72,6 +74,8 @@ function displayBooks(books) {
booksContainer.innerHTML = ''; booksContainer.innerHTML = '';
books.forEach(book => { books.forEach(book => {
const price = formatCurrency(book.cena);
const bookCard = ` const bookCard = `
<div class="book-card"> <div class="book-card">
<a href="/book.html?id=${book.id}" class="book-cover-link"> <a href="/book.html?id=${book.id}" class="book-cover-link">
@ -80,7 +84,7 @@ function displayBooks(books) {
<div class="book-overlay"> <div class="book-overlay">
<h5>${book.tytul}</h5> <h5>${book.tytul}</h5>
<p>${book.autor}</p> <p>${book.autor}</p>
<p class="price">${book.cena} PLN</p> <p class="price">${price}</p>
</div> </div>
</div> </div>
</a> </a>
@ -101,8 +105,15 @@ function displayBooks(books) {
}); });
} }
// Funkcja dodająca do koszyka
async function addToCart(bookId) { async function addToCart(bookId) {
const response = await fetch('/api/check-auth');
const data = await response.json();
if (!data.authenticated) {
window.location.href = '/login.html';
return;
}
try { try {
const response = await fetch('/api/add-to-cart', { const response = await fetch('/api/add-to-cart', {
method: 'POST', method: 'POST',

View file

@ -8,7 +8,6 @@ document.addEventListener('DOMContentLoaded', function() {
// Dodaj event listeners // Dodaj event listeners
if (localPickupCheckbox) { if (localPickupCheckbox) {
// JEDEN listener dla checkboxa
localPickupCheckbox.addEventListener('change', function() { localPickupCheckbox.addEventListener('change', function() {
// Pobierz aktualny stan koszyka i zaktualizuj podsumowanie // Pobierz aktualny stan koszyka i zaktualizuj podsumowanie
const cartItems = Array.from(document.querySelectorAll('.card.mb-3')).map(card => { const cartItems = Array.from(document.querySelectorAll('.card.mb-3')).map(card => {
@ -60,6 +59,13 @@ async function loadCart() {
const cartItems = await response.json(); const cartItems = await response.json();
displayCartItems(cartItems); displayCartItems(cartItems);
// Ustaw checkbox jako odznaczony domyślnie (dostawa)
const localPickupCheckbox = document.getElementById('localPickup');
if (localPickupCheckbox) {
localPickupCheckbox.checked = false;
}
updateSummary(cartItems); updateSummary(cartItems);
} catch (error) { } catch (error) {
console.error('Błąd ładowania koszyka:', error); console.error('Błąd ładowania koszyka:', error);
@ -179,7 +185,6 @@ async function updateCartItemQuantity(bookId, change) {
} }
} }
// Funkcja do aktualizacji podsumowania na podstawie DOM
function updateSummaryFromDOM() { function updateSummaryFromDOM() {
const cartItems = Array.from(document.querySelectorAll('.card.mb-3')).map(card => { const cartItems = Array.from(document.querySelectorAll('.card.mb-3')).map(card => {
const bookId = card.querySelector('.decrease-btn').dataset.bookId; const bookId = card.querySelector('.decrease-btn').dataset.bookId;
@ -218,8 +223,8 @@ function updateSummary(cartItems) {
productsValueEl.textContent = productsValue.toFixed(2) + ' PLN'; productsValueEl.textContent = productsValue.toFixed(2) + ' PLN';
// Oblicz koszt dostawy // Oblicz koszt dostawy: jeśli checkbox ZAZNACZONY to 0 (odbiór lokalny), w przeciwnym razie 12.99 (dostawa)
const deliveryCost = localPickupCheckbox && localPickupCheckbox.checked ? 0 : 12.99; const deliveryCost = localPickupCheckbox && localPickupCheckbox.checked ? 12.99 : 0;
deliveryValueEl.textContent = deliveryCost.toFixed(2) + ' PLN'; deliveryValueEl.textContent = deliveryCost.toFixed(2) + ' PLN';
const totalValue = productsValue + deliveryCost; const totalValue = productsValue + deliveryCost;
@ -272,6 +277,7 @@ async function handleCheckout() {
quantity: item.quantity quantity: item.quantity
})), })),
total: parseFloat(document.getElementById('total-value').textContent), total: parseFloat(document.getElementById('total-value').textContent),
// Odwrócona logika: checked = odbiór lokalny, unchecked = dostawa
delivery_type: localPickupCheckbox.checked ? "local" : "shipping" delivery_type: localPickupCheckbox.checked ? "local" : "shipping"
}; };

View file

@ -50,13 +50,27 @@ function displayOrderHistory(orders) {
orders.forEach(order => { orders.forEach(order => {
const orderDate = new Date(order.data_zamowienia).toLocaleDateString(); const orderDate = new Date(order.data_zamowienia).toLocaleDateString();
// Poprawione mapowanie typów dostawy
let deliveryType = order.typ_dostawy || 'shipping';
let deliveryText = '';
if (deliveryType === 'local') {
deliveryText = 'Odbiór lokalny';
} else if (deliveryType === 'shipping') {
deliveryText = 'Dostawa';
} else {
// Dla starych zamówień bez typu
deliveryText = 'Dostawa';
}
const orderElement = ` const orderElement = `
<div class="card mb-3 order-card"> <div class="card mb-3 order-card">
<div class="card-header"> <div class="card-header">
<h5>Zamówienie #${order.id} - ${orderDate}</h5> <h5>Zamówienie #${order.id} - ${orderDate}</h5>
<p class="mb-0">Status: ${order.status || 'W realizacji'}</p> <p class="mb-0">Status: ${order.status || 'W realizacji'}</p>
<p class="mb-0">Suma: ${order.suma_totalna} PLN</p> <p class="mb-0">Suma: ${order.suma_totalna} PLN</p>
<p class="mb-0">Typ dostawy: ${order.typ_dostawy === 'local' ? 'Odbiór lokalny' : 'Dostawa'}</p> <p class="mb-0">Typ: ${deliveryText}</p>
</div> </div>
<div class="card-body"> <div class="card-body">
<h6>Produkty:</h6> <h6>Produkty:</h6>
@ -78,3 +92,4 @@ function displayOrderHistory(orders) {
orderHistoryContainer.innerHTML += orderElement; orderHistoryContainer.innerHTML += orderElement;
}); });
} }