# Mock SAP API - Setup & Testing Guide

## 🚀 Setup

### Prerequisite
- Node.js (bisa download dari https://nodejs.org/)

### Step 1: Install Dependencies
```bash
cd PRAPR
npm install express cors mysql2 dotenv
```

### Step 2: Jalankan Mock SAP API
```bash
node sap-mock-api.js
```

Seharusnya akan keluar:
```
╔══════════════════════════════════════╗
║ Mock SAP API Server                  ║
║ Berjalan di: http://localhost:3001   ║
╚══════════════════════════════════════╝

📌 Endpoints:
  GET  /pr              - List semua PO
  GET  /pr/:no_order    - Detail PO (misal: /pr/ORD001)
  GET  /gr              - List semua GR
  GET  /gr/:no_order    - Detail GR by order
  GET  /health          - Health check
```

## 📡 Testing Endpoints

### Test 1: List semua PO dari SAP
```bash
curl http://localhost:3001/pr
```

Response (dinamis dari tabel `trs_pra_pr_header` + `trs_pr_detail`):
```json
{
  "success": true,
  "message": "List SAP PO (dynamic from DB)",
  "data": [
    {
      "no_order": "ORD001",
      "no_po": "PO-2026-001",
      "vendor": "PT Supplier A"
    },
    ...
  ]
}
```

### Test 2: Get Detail PO by Order
```bash
curl http://localhost:3001/pr/PPR%2F2026%2F0001
```

Response:
```json
{
  "success": true,
  "message": "Detail SAP PO (dynamic from DB)",
  "data": {
    "no_order": "ORD001",
    "no_po": "PO-2026-001",
    "tanggal_po": "2026-03-01",
    "vendor": "PT Supplier A",
    "items": [
      { "id_pra_pr_detail": 1, "nama_barang": "Baut M10", "qty": 100 },
      { "id_pra_pr_detail": 2, "nama_barang": "Mur M10", "qty": 100 }
    ]
  }
}
```

### Test 3: List semua GR
```bash
curl http://localhost:3001/gr
```

### Test 4: Get Detail GR by Order
```bash
curl http://localhost:3001/gr/PPR%2F2026%2F0001
```

Response (Multiple GR):
```json
{
  "success": true,
  "message": "Detail SAP GR",
  "data": [
    {
      "no_gr": "GR-2026-003",
      "items": [
        { "id_pra_pr_detail": 4 },
        { "id_pra_pr_detail": 5 }
      ]
    },
    {
      "no_gr": "GR-2026-004",
      "items": [
        { "id_pra_pr_detail": 4 }  // Parsial GR 2 untuk item yang sama
      ]
    }
  ]
}
```

## 🔗 Integrasi ke Laravel API

Update `app/Http/Controllers/Api/SapController.php` untuk panggil mock API:

```php
// Ubah dari static mock data menjadi panggil external API
private function callMockSapApi($endpoint) {
    $url = "http://localhost:3001" . $endpoint;
    $response = file_get_contents($url);
    return json_decode($response);
}
```

Kemudian dalam method, gunakan:
```php
$sapData = $this->callMockSapApi('/pr/ORD001');
```

## 🔄 Ketika sudah ada SAP yang sebenarnya

Tinggal ubah:
```php
private function callMockSapApi($endpoint) {
    $url = "http://sap-server.local" . $endpoint;  // Ganti dengan SAP real
    ...
}
```

atau update di `.env`:
```env
SAP_API_URL=http://localhost:3001  # Ganti ke SAP real
```

---

## 📝 Struktur Data Dinamis

Data tidak lagi hardcode di file JavaScript. Semua endpoint membaca dari MySQL (konfigurasi `.env` Laravel):

- PR source: `trs_pra_pr_header` + `trs_pr_detail` (+ `trs_po` jika sudah ada hasil sync)
- GR source: `trs_gr` (+ fallback GR generated jika order belum punya record GR)

Jika order belum ada di database, endpoint akan mengembalikan 404.

## 📝 Struktur Response

### PO (Purchase Order)
- 1 Order bisa punya 1 PO
- 1 PO bisa punya multiple items

**Contoh:**
```
ORD001 → PO-2026-001
  ├─ id_pra_pr_detail: 1 (Baut M10, qty 100)
  └─ id_pra_pr_detail: 2 (Mur M10, qty 100)
```

### GR (Goods Receipt)
- 1 Order bisa punya multiple GR (parsial penerimaan)
- 1 GR bisa punya 1 atau lebih items

**Contoh:**
```
ORD003 → 
  ├─ GR-2026-003 (3 pcs datang)
  │   ├─ id_pra_pr_detail: 4
  │   └─ id_pra_pr_detail: 5
  └─ GR-2026-004 (2 pcs sisa)
      └─ id_pra_pr_detail: 4  // Item 4 datang bertahap
```

---

## ⚠️ Catatan

- Mock API menjalankan port **3001**, pastikan tidak ada service lain di port ini
- Laravel API tetap di **localhost:8000**
- Untuk menghentikan mock API: **Ctrl + C**
-untuk nyalakan API pastikan di cd C:\xampp\htdocs\prapr\PRAPR
 lalu commenct di terminal node sap-mock-api.js
 - untuk mengecek curl http://localhost:3001/health
