# 📊 Transaction System Documentation

## Overview

Project ini sekarang memiliki sistem transaksi yang lengkap dan terintegrasi dengan database. Setiap pembelian paket akan otomatis disimpan ke tabel `transactions` dengan detail lengkap.

## 📋 Tabel Transactions

```sql
CREATE TABLE IF NOT EXISTS transactions (
    id              INTEGER PRIMARY KEY AUTOINCREMENT,
    user_id         INTEGER,
    package_type    TEXT,
    package_label   TEXT,
    harga_bayar     INTEGER,
    promo_used      TEXT,
    status          TEXT DEFAULT 'approved',
    created_at      TEXT DEFAULT (datetime('now', 'localtime'))
);
```

### Kolom-kolom:

- `id`: ID unik transaksi
- `user_id`: ID user yang melakukan transaksi
- `package_type`: Tipe paket ('single', 'take_several', 'take_all')
- `package_label`: Nama/label paket untuk display
- `harga_bayar`: Harga yang dibayar (dalam Rupiah)
- `promo_used`: Kode promo yang digunakan (nullable)
- `status`: Status transaksi ('approved', 'rejected', 'pending')
- `created_at`: Timestamp transaksi dibuat

## 🔧 API/Service yang Tersedia

### `services/transaction_service.py`

Fungsi-fungsi untuk mengelola transactions:

#### 1. **save_transaction()** - Menyimpan transaksi baru

```python
from services.transaction_service import save_transaction

transaction_id = save_transaction(
    user_id=123456,
    package_type="single",
    package_label="VIP Gold - 1 Bulan",
    harga_bayar=50000,
    promo_used="PROMO10",
    status="approved"
)
```

#### 2. **get_transaction()** - Mengambil detail transaksi

```python
transaction = get_transaction(transaction_id=1)
# Returns: {
#     'id': 1,
#     'user_id': 123456,
#     'package_label': 'VIP Gold - 1 Bulan',
#     'harga_bayar': 50000,
#     'promo_used': 'PROMO10',
#     'status': 'approved',
#     'created_at': '2026-07-04 10:30:45'
# }
```

#### 3. **get_user_transactions()** - Mengambil history transaksi user

```python
transactions = get_user_transactions(
    user_id=123456,
    limit=10,
    offset=0  # untuk pagination
)
# Returns: List of transactions
```

#### 4. **get_user_transaction_count()** - Menghitung total transaksi user

```python
count = get_user_transaction_count(user_id=123456)
# Returns: 5
```

#### 5. **update_transaction_status()** - Update status transaksi

```python
success = update_transaction_status(
    transaction_id=1,
    status="rejected"  # atau "approved", "pending"
)
```

#### 6. **get_transaction_summary()** - Ringkasan transaksi user

```python
summary = get_transaction_summary(user_id=123456)
# Returns: {
#     'total_transactions': 5,
#     'approved_count': 4,
#     'rejected_count': 1,
#     'pending_count': 0,
#     'total_spent': 300000
# }
```

#### 7. **get_all_transactions()** - Mengambil semua transaksi (admin)

```python
all_transactions = get_all_transactions(limit=50, offset=0)
```

#### 8. **get_transaction_stats()** - Statistik transaksi keseluruhan (admin)

```python
stats = get_transaction_stats()
# Returns: {
#     'total_transactions': 100,
#     'total_users': 45,
#     'approved_count': 95,
#     'rejected_count': 5,
#     'pending_count': 0,
#     'total_revenue': 5000000
# }
```

## 🎨 UI Views/Format

### `utils/transaction_view.py` - User Transaction Views

Untuk menampilkan transaksi kepada user:

```python
from utils.transaction_view import format_transaction_list, format_transaction_summary

# Tampilkan daftar transaksi user
result = format_transaction_list(user_id=123456, page=0, per_page=5)
text = result['text']  # HTML formatted text
has_next = result['has_next']  # untuk pagination

# Tampilkan ringkasan transaksi
summary_text = format_transaction_summary(user_id=123456)
```

### `utils/admin_transaction_report.py` - Admin Reports

Untuk dashboard admin:

```python
from utils.admin_transaction_report import (
    format_transaction_report,
    format_transaction_statistics
)

# Laporan transaksi
report = format_transaction_report(limit=20, offset=0)

# Statistik keseluruhan
stats = format_transaction_statistics()
```

## 🔄 Integrasi dengan Payment Flow

Sistem transaksi sudah otomatis terintegrasi dengan `services/payment_service.py`:

### Saat Order di-APPROVE:

1. User mengirim foto bukti transfer
2. Admin approve order
3. ✅ **Transaksi otomatis disimpan dengan status "approved"**
4. User menerima link VIP

### Saat Order di-REJECT:

1. Admin menolak order
2. ✅ **Transaksi otomatis disimpan dengan status "rejected"**
3. Promo (jika ada) dilepas
4. User menerima notifikasi penolakan

## 📊 Contoh Query Langsung ke Database

Jika ingin query langsung (advanced):

```python
from db.database import cursor

# Dapatkan total revenue dari user tertentu
cursor.execute("""
    SELECT SUM(harga_bayar) as total
    FROM transactions
    WHERE user_id = ? AND status = 'approved'
""", (user_id,))
result = cursor.fetchone()
```

## 🚀 Fitur-fitur yang Bisa Ditambahkan

1. **Export/Import** transaksi ke CSV
2. **Refund handler** - menangani pengembalian dana
3. **Recurring billing** - langganan otomatis
4. **Email receipts** - kirim bukti transaksi
5. **Tax reporting** - laporan pajak
6. **Payment gateway integration** - integrasi Stripe/PayPal

## 🔒 Catatan Penting

- Semua transaksi tercatat di database secara permanen
- Tidak bisa dihapus, hanya di-update statusnya
- Semua query sudah menggunakan parameterized queries (aman dari SQL injection)
- Logs tercatat dengan detail di console

---

**Status**: ✅ Sistem transaksi sudah berjalan dan terintegrasi penuh!
