163 lines
5.3 KiB
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);
|
|
}
|
|
}
|
|
}
|