Advertisement

Membangun Fitur Transaksi di Aplikasi POS: Panduan Lengkap dengan Express.js dan PostgreSQL

 


Siapa bilang sistem POS (Point of Sale) itu hanya buat mencatat transaksi?  POS yang canggih bisa melakukan lebih dari itu!

Di artikel ini, kita akan membangun fitur transaksi lengkap di aplikasi POS kamu, mulai dari desain transaksi hingga fitur pengembalian produk! Semua dengan Express.js dan PostgreSQL, tentunya!

Jadi, siap untuk upgrade aplikasi POS kamu jadi lebih pintar dan responsif?

1. Desain Transaksi dan Flow Pembayaran

Sebelum mulai coding, kita harus memahami flow transaksi dalam aplikasi POS.

Flow Transaksi POS:

  1. Pilih Produk - Pengguna memilih produk yang ingin dibeli.
  2. Hitung Total Harga - Sistem menghitung total harga berdasarkan produk dan jumlahnya.
  3. Pajak dan Diskon - Kalkulasi pajak dan diskon jika ada.
  4. Pembayaran - Pengguna memilih metode pembayaran (Cash, Card, atau E-wallet).
  5. Selesai - Transaksi selesai dan riwayat transaksi disimpan.

Dengan flow ini, aplikasi POS bisa menangani transaksi dengan cepat dan akurat. 💥

2. Membuat API untuk Menghitung Total Harga dan Pajak

Sekarang, kita akan membuat API untuk menghitung total harga dan pajak setiap transaksi.

Buka file routes/transactionRoutes.js dan tambahkan endpoint ini:

const express = require("express");
const router = express.Router();

// Menghitung total harga dan pajak
router.post("/calculate", (req, res) => {
    const { items, taxRate } = req.body;
    let totalPrice = 0;

    // Menghitung total harga
    items.forEach(item => {
        totalPrice += item.price * item.quantity;
    });

    // Menghitung pajak
    const taxAmount = totalPrice * (taxRate / 100);
    const totalWithTax = totalPrice + taxAmount;

    res.json({
        totalPrice,
        taxAmount,
        totalWithTax
    });
});

module.exports = router;

Coba kirim request POST seperti ini dengan Postman atau Curl:

curl -X POST http://localhost:3000/transactions/calculate \
    -H "Content-Type: application/json" \
    -d '{"items":[{"price":10000,"quantity":2},{"price":15000,"quantity":1}],"taxRate":10}'

Hasilnya, kamu akan mendapatkan perhitungan total harga dan pajak:

{
    "totalPrice": 35000,
    "taxAmount": 3500,
    "totalWithTax": 38500
}

3. Menambahkan Fitur Keranjang Belanja (Cart)

Keranjang belanja adalah fitur yang sangat krusial dalam aplikasi POS! Keranjang memungkinkan pengguna menambah dan menghapus produk sebelum menyelesaikan transaksi.

3.1. Membuat API untuk Menambah dan Menghapus Produk di Keranjang

let cart = [];  // Menyimpan data keranjang belanja

// Menambah produk ke keranjang
router.post("/cart/add", (req, res) => {
    const { product, quantity } = req.body;
    const existingProduct = cart.find(item => item.product.id === product.id);

    if (existingProduct) {
        existingProduct.quantity += quantity;
    } else {
        cart.push({ product, quantity });
    }

    res.json(cart);
});

// Menghapus produk dari keranjang
router.delete("/cart/remove/:productId", (req, res) => {
    const { productId } = req.params;
    cart = cart.filter(item => item.product.id !== productId);

    res.json(cart);
});

Coba fitur ini:

  • Tambah produk ke keranjang: POST /cart/add
  • Hapus produk dari keranjang: DELETE /cart/remove/{productId}

4. Menyimpan dan Mengelola Riwayat Transaksi

Setiap transaksi yang berhasil harus disimpan ke dalam riwayat transaksi di database agar bisa dilihat kembali.

4.1. Membuat Tabel Riwayat Transaksi di PostgreSQL

Jalankan SQL berikut untuk membuat tabel transaksi di database:

CREATE TABLE transactions (
    id SERIAL PRIMARY KEY,
    total_price NUMERIC(10, 2),
    tax_amount NUMERIC(10, 2),
    total_with_tax NUMERIC(10, 2),
    payment_method VARCHAR(50),
    transaction_date TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);

4.2. Menyimpan Transaksi ke Database

Buat endpoint POST /transactions untuk menyimpan transaksi yang selesai:

router.post("/", async (req, res) => {
    const { totalPrice, taxAmount, totalWithTax, paymentMethod } = req.body;

    try {
        const { rows } = await pool.query(
            "INSERT INTO transactions (total_price, tax_amount, total_with_tax, payment_method) VALUES ($1, $2, $3, $4) RETURNING *",
            [totalPrice, taxAmount, totalWithTax, paymentMethod]
        );
        res.status(201).json(rows[0]);
    } catch (error) {
        res.status(500).json({ error: "Gagal menyimpan transaksi" });
    }
});

Dengan ini, setiap transaksi akan terekam di database dan dapat dilihat kapan saja!

5. Fitur Pembatalan dan Pengembalian Produk

Ada kalanya pelanggan ingin membatalkan transaksi atau mengembalikan produk. Untuk itu, kita harus menyediakan fitur ini!

5.1. Pembatalan Transaksi

Untuk membatalkan transaksi, cukup hapus entri transaksi dari tabel transactions. Buat endpoint DELETE /transactions/:id:

router.delete("/:id", async (req, res) => {
    const { id } = req.params;
    try {
        await pool.query("DELETE FROM transactions WHERE id = $1", [id]);
        res.json({ message: "Transaksi berhasil dibatalkan" });
    } catch (error) {
        res.status(500).json({ error: "Gagal membatalkan transaksi" });
    }
});

5.2. Mengembalikan Produk

Jika produk dikembalikan, kita harus mengupdate stok dan menambahkan riwayat pengembalian. Buat endpoint POST /returns untuk menangani pengembalian produk:

router.post("/returns", async (req, res) => {
    const { productId, quantity } = req.body;

    try {
        // Update stok produk
        await pool.query(
            "UPDATE products SET stock = stock + $1 WHERE id = $2",
            [quantity, productId]
        );

        // Simpan riwayat pengembalian
        await pool.query(
            "INSERT INTO returns (product_id, quantity, return_date) VALUES ($1, $2, CURRENT_TIMESTAMP)",
            [productId, quantity]
        );

        res.json({ message: "Produk berhasil dikembalikan" });
    } catch (error) {
        res.status(500).json({ error: "Gagal mengembalikan produk" });
    }
});

Kesimpulan

Aplikasi POS kamu sudah lengkap!

  • Fitur transaksi sudah ada, termasuk perhitungan harga dan pajak.
  • Keranjang belanja sudah siap digunakan untuk menambah dan menghapus produk.
  • Riwayat transaksi sudah tersimpan dengan aman di PostgreSQL.
  • Pembatalan dan pengembalian produk juga sudah diatur!

Post a Comment

0 Comments