+ + + + + + + + \ No newline at end of file diff --git a/products.php b/products.php new file mode 100644 index 0000000..45fcdf2 --- /dev/null +++ b/products.php @@ -0,0 +1,161 @@ +prepare("INSERT INTO products (name, type, stock_quantity, purchase_price, sale_price, low_stock_threshold) VALUES (?, ?, ?, ?, ?, ?)"); + $stmt->execute([$name, $type, $stock_quantity, $purchase_price, $sale_price, $low_stock_threshold]); + $_SESSION['notification'] = "Ürün başarıyla eklendi!"; + } catch (PDOException $e) { + $_SESSION['error'] = "Veritabanı hatası: " . $e->getMessage(); + } + } else { + $_SESSION['error'] = "Lütfen tüm alanları doğru bir şekilde doldurun."; + } + } + + // Ürün silme işlemi + if (isset($_POST['action']) && $_POST['action'] === 'delete') { + $product_id = $_POST['product_id'] ?? null; + if ($product_id) { + try { + $stmt = $pdo->prepare("DELETE FROM products WHERE id = ?"); + $stmt->execute([$product_id]); + $_SESSION['notification'] = "Ürün başarıyla silindi."; + } catch (PDOException $e) { + $_SESSION['error'] = "Hata: Ürün silinemedi. İlişkili satış kayıtları olabilir."; + } + } + } + + // PRG Pattern: Sayfayı yeniden yönlendirerek formun tekrar gönderilmesini engelle + header("Location: products.php"); + exit(); +} + +// Ürünleri veritabanından çek +$products = []; +try { + $pdo = db(); + $stmt = $pdo->query("SELECT * FROM products ORDER BY created_at DESC"); + $products = $stmt->fetchAll(PDO::FETCH_ASSOC); +} catch (PDOException $e) { + // Hata mesajını oturuma kaydet ve sayfayı yenilemekten kaçın + $_SESSION['error'] = "Ürünler çekilirken hata oluştu: " . $e->getMessage(); +} + +require_once 'partials/header.php'; +?> + +

Ürün Yönetimi

+ + +
+
+ Yeni Ürün Ekle +
+
+
+
+
+ + +
+
+ + +
+
+
+
+ + +
+
+ + +
+
+ + +
+
+ + +
+
+ +
+
+
+ + +
+
+ Mevcut Ürünler +
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
IDAdTipStokAlış FiyatıSatış FiyatıEklendiği Tarihİşlemler
Henüz hiç ürün eklenmemiş.
+ Düzenle +
+ + + +
+
+
+
+
+ + diff --git a/sales.php b/sales.php new file mode 100644 index 0000000..142829a --- /dev/null +++ b/sales.php @@ -0,0 +1,162 @@ +beginTransaction(); + + try { + // 1. Ürün bilgilerini ve stok durumunu kontrol et + $stmt = $pdo->prepare("SELECT name, sale_price, purchase_price, stock_quantity FROM products WHERE id = ? FOR UPDATE"); + $stmt->execute([$product_id]); + $product = $stmt->fetch(PDO::FETCH_ASSOC); + + if (!$product) { + throw new Exception("Ürün bulunamadı."); + } + + if ($product['stock_quantity'] < $quantity) { + throw new Exception("Yetersiz stok! Mevcut stok: " . $product['stock_quantity']); + } + + // 2. Satış hesaplamalarını yap + $total_amount = $product['sale_price'] * $quantity; + $profit_amount = ($product['sale_price'] - $product['purchase_price']) * $quantity; + + // 3. 'sales' tablosuna ana satış kaydını ekle + $stmt = $pdo->prepare("INSERT INTO sales (total_amount, profit_amount) VALUES (?, ?)"); + $stmt->execute([$total_amount, $profit_amount]); + $sale_id = $pdo->lastInsertId(); + + // 4. 'sale_items' tablosuna satılan ürünü ekle + $stmt = $pdo->prepare("INSERT INTO sale_items (sale_id, product_id, quantity, unit_price, total_price) VALUES (?, ?, ?, ?, ?)"); + $stmt->execute([$sale_id, $product_id, $quantity, $product['sale_price'], $total_amount]); + + // 5. Ürün stoğunu güncelle + $stmt = $pdo->prepare("UPDATE products SET stock_quantity = stock_quantity - ? WHERE id = ?"); + $stmt->execute([$quantity, $product_id]); + + // Her şey yolundaysa işlemi onayla + $pdo->commit(); + $_SESSION['notification'] = "Satış başarıyla kaydedildi."; + + } catch (Exception $e) { + // Bir hata olursa tüm işlemleri geri al + $pdo->rollBack(); + $_SESSION['error'] = "Hata: " . $e->getMessage(); + } + + header("Location: sales.php"); + exit(); +} + +// Sayfa içeriğini hazırlama +$pdo = db(); + +// Form için ürünleri çek +$products_for_form = []; +try { + $products_stmt = $pdo->query("SELECT id, name, sale_price, stock_quantity FROM products WHERE stock_quantity > 0 ORDER BY name ASC"); + $products_for_form = $products_stmt->fetchAll(PDO::FETCH_ASSOC); +} catch (PDOException $e) { + $_SESSION['error'] = "Ürünler getirilemedi: " . $e->getMessage(); +} + +// Görüntülemek için geçmiş satışları çek (JOIN ile) +$sales_list = []; +try { + $sales_stmt = $pdo->query(" + SELECT si.id, p.name AS product_name, si.quantity, si.total_price, s.created_at AS sale_date + FROM sale_items si + JOIN sales s ON si.sale_id = s.id + JOIN products p ON si.product_id = p.id + ORDER BY s.created_at DESC + "); + $sales_list = $sales_stmt->fetchAll(PDO::FETCH_ASSOC); +} catch (PDOException $e) { + $_SESSION['error'] = "Satışlar getirilemedi: " . $e->getMessage(); +} + +require_once 'partials/header.php'; +?> + +

Satış Yönetimi

+ + +
+
Yeni Satış Ekle
+
+
+ +
+
+ + +
+
+ + +
+
+ +
+
+
+ + +
+
Geçmiş Satışlar
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + +
IDÜrün AdıAdetToplam FiyatSatış Tarihi
Henüz hiç satış yapılmamış.
TL
+
+
+
+ + \ No newline at end of file