2025-10-22 13:40:27 +07:00

135 lines
4.2 KiB
PHP
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<?php
namespace App\Controllers;
use CodeIgniter\API\ResponseTrait;
use App\Controllers\BaseController;
// use App\Models\PatVisit\PatVisitModel;
class Zones extends BaseController {
use ResponseTrait;
// protected $model;
public function __construct() {
// $this->model = new PatVisitModel();
}
// public function __construct() {
// $this->db = \Config\Database::connect();
// $this->model = new PatientModel();
// $this->rules = [
// 'PatientID' => 'required|max_length[50]',
// 'AlternatePID' => 'permit_empty|max_length[50]'
// ];
// }
public function index() {
// Buat instance HTTP client
$client = \Config\Services::curlrequest();
try {
// $response = $client->get('https://services-summit.my.id/api/provinces');
$response = $client->get('http://crmcomposer.local/api/zones');
// Ambil body responsenya
$body = $response->getBody();
// Decode JSON ke array PHP
$data = json_decode($body, true);
return $this->respond(['status'=>'success', 'message'=>"data fetched successfully", 'data'=>$data['data']], 200);
} catch (\Exception $e) {
return $this->respond([ 'status' => 'error', 'message' => $e->getMessage() ], 200);
}
}
public function synchronize()
{
$client = \Config\Services::curlrequest();
$zonesModel = new ZonesModel();
try {
// 1⃣ Ambil data dari API pusat (CRM)
$response = $client->get('https://services-summit.my.id/api/zones');
$result = json_decode($response->getBody(), true);
if (!isset($result['data']) || !is_array($result['data'])) {
return $this->response->setJSON([
'status' => 'error',
'message' => 'Invalid or empty response from CRM API'
]);
}
$crmData = $result['data'];
// 2⃣ Ambil semua data zoneid di database lokal
$localData = $zonesModel->findAll();
$localIds = array_column($localData, 'zoneid');
// 3⃣ Siapkan ID dari data CRM
$crmIds = array_column($crmData, 'zoneid');
// Hitung statistik
$inserted = 0;
$updated = 0;
$deleted = 0;
// 4⃣ Mulai transaksi agar aman
$db = \Config\Database::connect();
$db->transStart();
// 5⃣ Insert atau Update data
foreach ($crmData as $zone) {
if (!isset($zone['zoneid'])) continue;
$exists = $zonesModel->find($zone['zoneid']);
if ($exists) {
// Update jika sudah ada
$zonesModel->update($zone['zoneid'], [
'parentzoneid' => $zone['parentzoneid'],
'zonecode' => $zone['zonecode'],
'zoneclass' => $zone['zoneclass'],
'zonename' => $zone['zonename']
]);
$updated++;
} else {
// Insert jika belum ada
$zonesModel->insert($zone);
$inserted++;
}
}
// 6⃣ Hapus data yang sudah tidak ada di CRM
foreach ($localIds as $localId) {
if (!in_array($localId, $crmIds)) {
$zonesModel->delete($localId);
$deleted++;
}
}
// 7⃣ Commit transaksi
$db->transComplete();
return $this->response->setJSON([
'status' => 'success',
'message' => 'Zones synchronized successfully',
'summary' => [
'inserted' => $inserted,
'updated' => $updated,
'deleted' => $deleted,
'total' => count($crmData)
]
]);
} catch (\Exception $e) {
return $this->response->setJSON([
'status' => 'error',
'message' => $e->getMessage()
]);
}
}
}