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:
- Pilih Produk - Pengguna memilih produk yang ingin dibeli.
- Hitung Total Harga - Sistem menghitung total harga berdasarkan produk dan jumlahnya.
- Pajak dan Diskon - Kalkulasi pajak dan diskon jika ada.
- Pembayaran - Pengguna memilih metode pembayaran (Cash, Card, atau E-wallet).
- 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!
0 Comments