-- Membuat database aplikasi_kasir
CREATE DATABASE IF NOT EXISTS aplikasi_kasir;

-- Menggunakan database aplikasi_kasir
USE aplikasi_kasir;

-- Tabel pelanggan
CREATE TABLE IF NOT EXISTS pelanggan (
    id_pelanggan INT AUTO_INCREMENT PRIMARY KEY,
    nama_pelanggan VARCHAR(100) NOT NULL,
    alamat TEXT,
    no_hp VARCHAR(20)
);

-- Tabel barang
CREATE TABLE IF NOT EXISTS barang (
    id_barang INT AUTO_INCREMENT PRIMARY KEY,
    nama_barang VARCHAR(100) NOT NULL,
    harga_jual DECIMAL(10,2) NOT NULL,
    harga_beli DECIMAL(10,2) NOT NULL,
    stok INT NOT NULL DEFAULT 0,
    deskripsi TEXT,
    tanggal_ditambah DATETIME DEFAULT CURRENT_TIMESTAMP
);

-- Tabel transaksi
CREATE TABLE IF NOT EXISTS transaksi (
    id_transaksi INT AUTO_INCREMENT PRIMARY KEY,
    id_user INT NOT NULL,
    id_pelanggan INT DEFAULT NULL,
    tanggal DATETIME DEFAULT CURRENT_TIMESTAMP,
    total DECIMAL(10,2) NOT NULL,
    bayar DECIMAL(10,2) NOT NULL,
    kembalikan DECIMAL(10,2) GENERATED ALWAYS AS (bayar - total) STORED,
    keterangan TEXT,
    FOREIGN KEY (id_user) REFERENCES user(id_user) ON DELETE CASCADE,
    FOREIGN KEY (id_pelanggan) REFERENCES pelanggan(id_pelanggan) ON DELETE SET NULL
);

-- Tabel detail_transaksi
CREATE TABLE IF NOT EXISTS detail_transaksi (
    id_detail INT AUTO_INCREMENT PRIMARY KEY,
    id_transaksi INT NOT NULL,
    id_barang INT NOT NULL,
    jumlah INT NOT NULL,
    harga_satuan DECIMAL(10,2) NOT NULL,
    subtotal DECIMAL(10,2) GENERATED ALWAYS AS (jumlah * harga_satuan) STORED,
    FOREIGN KEY (id_transaksi) REFERENCES transaksi(id_transaksi) ON DELETE CASCADE,
    FOREIGN KEY (id_barang) REFERENCES barang(id_barang) ON DELETE CASCADE
);

-- Insert sample barang
INSERT IGNORE INTO barang (nama_barang, harga_jual, harga_beli, stok, deskripsi) VALUES
('Buku Tulis', 5000.00, 4000.00, 100, 'Buku tulis 40 lembar'),
('Pensil 2B', 2000.00, 1500.00, 50, 'Pensil kayu grade 2B'),
('Penghapus', 1500.00, 1000.00, 75, 'Penghapus putih');
-- Membuat database aplikasi_kasir
CREATE DATABASE IF NOT EXISTS aplikasi_kasir;

-- Menggunakan database aplikasi_kasir
USE aplikasi_kasir;

-- Tabel pelanggan
CREATE TABLE IF NOT EXISTS pelanggan (
    id_pelanggan INT AUTO_INCREMENT PRIMARY KEY,
    nama_pelanggan VARCHAR(100) NOT NULL,
    alamat TEXT,
    no_hp VARCHAR(20)
);

-- Tabel barang
CREATE TABLE IF NOT EXISTS barang (
    id_barang INT AUTO_INCREMENT PRIMARY KEY,
    nama_barang VARCHAR(100) NOT NULL,
    harga_jual DECIMAL(10,2) NOT NULL,
    harga_beli DECIMAL(10,2) NOT NULL,
    stok INT NOT NULL DEFAULT 0,
    deskripsi TEXT,
    tanggal_ditambah DATETIME DEFAULT CURRENT_TIMESTAMP
);

-- Tabel transaksi
CREATE TABLE IF NOT EXISTS transaksi (
    id_transaksi INT AUTO_INCREMENT PRIMARY KEY,
    id_user INT NOT NULL,
    id_pelanggan INT DEFAULT NULL,
    tanggal DATETIME DEFAULT CURRENT_TIMESTAMP,
    total DECIMAL(10,2) NOT NULL,
    bayar DECIMAL(10,2) NOT NULL,
    kembalikan DECIMAL(10,2) GENERATED ALWAYS AS (bayar - total) STORED,
    keterangan TEXT,
    FOREIGN KEY (id_user) REFERENCES user(id_user) ON DELETE CASCADE,
    FOREIGN KEY (id_pelanggan) REFERENCES pelanggan(id_pelanggan) ON DELETE SET NULL
);

-- Tabel detail_transaksi
CREATE TABLE IF NOT EXISTS detail_transaksi (
    id_detail INT AUTO_INCREMENT PRIMARY KEY,
    id_transaksi INT NOT NULL,
    id_barang INT NOT NULL,
    jumlah INT NOT NULL,
    harga_satuan DECIMAL(10,2) NOT NULL,
    subtotal DECIMAL(10,2) GENERATED ALWAYS AS (jumlah * harga_satuan) STORED,
    FOREIGN KEY (id_transaksi) REFERENCES transaksi(id_transaksi) ON DELETE CASCADE,
    FOREIGN KEY (id_barang) REFERENCES barang(id_barang) ON DELETE CASCADE
);

-- Insert sample barang
INSERT IGNORE INTO barang (nama_barang, harga_jual, harga_beli, stok, deskripsi) VALUES
('Buku Tulis', 5000.00, 4000.00, 100, 'Buku tulis 40 lembar'),
('Pensil 2B', 2000.00, 1500.00, 50, 'Pensil kayu grade 2B'),
('Penghapus', 1500.00, 1000.00, 75, 'Penghapus putih');

