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); } } }