NIM_E31222518/app/Http/Controllers/LocationController.php

163 lines
5.3 KiB
PHP

<?php
namespace App\Http\Controllers;
use App\Models\Ongkir;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Log;
class LocationController extends Controller
{
public function getProvinces()
{
try {
$provinces = Ongkir::select('province_id', 'province_name')
->distinct()
->orderBy('province_name')
->get();
return response()->json($provinces);
} catch (\Exception $e) {
Log::error('Error getting provinces:', [
'error' => $e->getMessage(),
'trace' => $e->getTraceAsString()
]);
return response()->json([
'error' => 'Gagal mengambil data provinsi',
'message' => $e->getMessage()
], 500);
}
}
public function getCities(Request $request)
{
try {
$cities = Ongkir::where('province_id', $request->province_id)
->select('city_id', 'city_name')
->distinct()
->orderBy('city_name')
->get();
return response()->json($cities);
} catch (\Exception $e) {
Log::error('Error getting cities:', [
'error' => $e->getMessage(),
'trace' => $e->getTraceAsString()
]);
return response()->json([
'error' => 'Gagal mengambil data kota',
'message' => $e->getMessage()
], 500);
}
}
public function calculateCost(Request $request)
{
try {
$ongkir = Ongkir::where('province_id', $request->province_id)
->where('city_id', $request->city_id)
->first();
if (!$ongkir) {
return response()->json([
'success' => false,
'message' => 'Data ongkos kirim tidak ditemukan'
], 404);
}
$shippingOptions = [];
// JNE Options
if ($ongkir->jne_reg) {
$shippingOptions[] = [
'service' => 'JNE Regular',
'description' => 'Pengiriman reguler menggunakan JNE',
'cost' => $ongkir->jne_reg,
'etd' => '2-3'
];
}
if ($ongkir->jne_oke) {
$shippingOptions[] = [
'service' => 'JNE OKE',
'description' => 'Pengiriman ekonomis menggunakan JNE',
'cost' => $ongkir->jne_oke,
'etd' => '3-4'
];
}
if ($ongkir->jne_yes) {
$shippingOptions[] = [
'service' => 'JNE YES',
'description' => 'Pengiriman cepat menggunakan JNE',
'cost' => $ongkir->jne_yes,
'etd' => '1-2'
];
}
// POS Options
if ($ongkir->pos_reg) {
$shippingOptions[] = [
'service' => 'POS Regular',
'description' => 'Pengiriman reguler menggunakan POS Indonesia',
'cost' => $ongkir->pos_reg,
'etd' => '3-4'
];
}
if ($ongkir->pos_express) {
$shippingOptions[] = [
'service' => 'POS Express',
'description' => 'Pengiriman cepat menggunakan POS Indonesia',
'cost' => $ongkir->pos_express,
'etd' => '2-3'
];
}
// TIKI Options
if ($ongkir->tiki_reg) {
$shippingOptions[] = [
'service' => 'TIKI Regular',
'description' => 'Pengiriman reguler menggunakan TIKI',
'cost' => $ongkir->tiki_reg,
'etd' => '2-3'
];
}
if ($ongkir->tiki_eco) {
$shippingOptions[] = [
'service' => 'TIKI ECO',
'description' => 'Pengiriman ekonomis menggunakan TIKI',
'cost' => $ongkir->tiki_eco,
'etd' => '3-4'
];
}
if ($ongkir->tiki_express) {
$shippingOptions[] = [
'service' => 'TIKI Express',
'description' => 'Pengiriman cepat menggunakan TIKI',
'cost' => $ongkir->tiki_express,
'etd' => '1-2'
];
}
if (empty($shippingOptions)) {
return response()->json([
'success' => false,
'message' => 'Tidak ada opsi pengiriman yang tersedia'
], 404);
}
return response()->json([
'success' => true,
'options' => $shippingOptions
]);
} catch (\Exception $e) {
Log::error('Error calculating cost:', [
'error' => $e->getMessage(),
'trace' => $e->getTraceAsString()
]);
return response()->json([
'success' => false,
'message' => 'Gagal menghitung ongkos kirim',
'error' => $e->getMessage()
], 500);
}
}
}