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'; ?>
| ID | Ürün Adı | Adet | Toplam Fiyat | Satış Tarihi |
|---|---|---|---|---|
| Henüz hiç satış yapılmamış. | ||||
| TL | ||||