costCalculatorService = $costCalculatorService; } public function formatCostForStayType(CostCalculator $cost, string $stayTypeTitle) { $living = optional($cost->stayTypeLiving->firstWhere('title', $stayTypeTitle))->pivot; $accomodation = optional($cost->stayTypeAccomodation->firstWhere('title', $stayTypeTitle))->pivot; $onetime = optional($cost->stayTypeOnetime->firstWhere('title', $stayTypeTitle))->pivot; $service = optional($cost->stayTypeService->firstWhere('title', $stayTypeTitle))->pivot; $html = "
{$cost->country?->title}
{$status}
"; }) ->addColumn('action', 'costcalculator::cost.datatable.action') ->rawColumns(['country', 'alone', 'with_spouse', 'with_spouse_and_child', 'status', 'action']) ->toJson(); } return view('costcalculator::cost.index', [ 'title' => 'Estimated Cost Calculation', ]); } /** * Show the form for creating a new resource. */ public function create() { $data['title'] = 'Create Estimated Cost Calculation'; $data['editable'] = false; $data['countryOptions'] = Country::where('status', 1)->where('parent_id', null)->pluck('title', 'id'); $data['livingStatusOptions'] = StayType::where('status', 1)->pluck('title', 'id'); return view('costcalculator::cost.create', $data); } /** * Store a newly created resource in storage. */ public function store(Request $request) { $request->validate([ 'country_id' => 'required', ]); $input = $request->except(['living_cost', 'accomodation_cost', 'onetime_cost', 'service_cost']); DB::transaction(function () use ($input, $request) { $costs = CostCalculator::create($input); $attachLivingData = []; $attachAccData = []; $attachOnetimeData = []; $attachServiceData = []; foreach ($request->living_cost as $item) { $attachLivingData[$item['stay_type_id']] = [ 'monthly' => $item['monthly'], 'yearly' => $item['yearly'], ]; } foreach ($request->accomodation_cost as $item) { $attachAccData[$item['stay_type_id']] = [ 'monthly' => $item['monthly'], 'yearly' => $item['yearly'], ]; } foreach ($request->onetime_cost as $item) { $attachOnetimeData[$item['stay_type_id']] = [ 'visa' => $item['visa'], 'biometrics' => $item['biometrics'], 'sevis' => $item['sevis'], 'application' => $item['application'], ]; } foreach ($request->service_cost as $item) { $attachServiceData[$item['stay_type_id']] = [ 'flight_ticket' => $item['flight_ticket'], 'insurance' => $item['insurance'], 'extra' => $item['extra'], ]; } $costs->stayTypeLiving()->sync($attachLivingData); $costs->stayTypeAccomodation()->sync($attachAccData); $costs->stayTypeOnetime()->sync($attachOnetimeData); $costs->stayTypeService()->sync($attachServiceData); flash()->success('Cost Calculation has been created!'); }); return redirect()->route('cost.index'); } /** * Show the specified resource. */ public function show($id) { $cost = CostCalculator::with([ 'stayTypeLiving', 'stayTypeAccomodation', 'stayTypeOnetime', 'stayTypeService' ])->findOrFail($id); $data['title'] = 'View Cost Calculation'; $data['cost'] = $cost; $getBreakdown = function ($stayTypeTitle) use ($cost) { $living = optional($cost->stayTypeLiving->firstWhere('title', $stayTypeTitle))->pivot; $accomodation = optional($cost->stayTypeAccomodation->firstWhere('title', $stayTypeTitle))->pivot; $onetime = optional($cost->stayTypeOnetime->firstWhere('title', $stayTypeTitle))->pivot; $service = optional($cost->stayTypeService->firstWhere('title', $stayTypeTitle))->pivot; return [ 'living' => [ 'monthly' => $living->monthly ?? 0, 'yearly' => $living->yearly ?? 0, ], 'accomodation' => [ 'monthly' => $accomodation->monthly ?? 0, 'yearly' => $accomodation->yearly ?? 0, ], 'onetime' => [ 'visa' => $onetime->visa ?? 0, 'biometrics' => $onetime->biometrics ?? 0, 'sevis' => $onetime->sevis ?? 0, 'application' => $onetime->application ?? 0, 'total' => ($onetime->visa ?? 0) + ($onetime->biometrics ?? 0) + ($onetime->sevis ?? 0) + ($onetime->application ?? 0), ], 'service' => [ 'flight_ticket' => $service->flight_ticket ?? 0, 'insurance' => $service->insurance ?? 0, 'extra' => $service->extra ?? 0, 'total' => ($service->flight_ticket ?? 0) + ($service->insurance ?? 0) + ($service->extra ?? 0), ] ]; }; $data['breakdowns'] = [ 'alone' => $getBreakdown('Alone'), 'with_spouse' => $getBreakdown('With Spouse'), 'with_spouse_and_child' => $getBreakdown('With Spouse and Child'), ]; return view('costcalculator::cost.show', $data); } /** * Show the form for editing the specified resource. */ public function edit($id) { $data['title'] = 'Edit Cost Calculator'; $data['editable'] = true; $data['cost'] = CostCalculator::findOrFail($id); $data['countryOptions'] = Country::where('status', 1)->where('parent_id', null)->pluck('title', 'id'); $data['livingStatusOptions'] = StayType::where('status', 1)->pluck('title', 'id'); return view('costcalculator::cost.edit', $data); } /** * Update the specified resource in storage. */ public function update(Request $request, $id) { $input = $request->except(['living_cost', 'accomodation_cost', 'onetime_cost', 'service_cost']); DB::transaction(function () use ($input, $request, $id) { $costs = CostCalculator::findOrFail($id); $costs->update($input); $attachLivingData = []; $attachAccData = []; $attachOnetimeData = []; $attachServiceData = []; foreach ($request->living_cost as $item) { $attachLivingData[$item['stay_type_id']] = [ 'monthly' => $item['monthly'], 'yearly' => $item['yearly'], ]; } foreach ($request->accomodation_cost as $item) { $attachAccData[$item['stay_type_id']] = [ 'monthly' => $item['monthly'], 'yearly' => $item['yearly'], ]; } foreach ($request->onetime_cost as $item) { $attachOnetimeData[$item['stay_type_id']] = [ 'visa' => $item['visa'], 'biometrics' => $item['biometrics'], 'sevis' => $item['sevis'], 'application' => $item['application'], ]; } foreach ($request->service_cost as $item) { $attachServiceData[$item['stay_type_id']] = [ 'flight_ticket' => $item['flight_ticket'], 'insurance' => $item['insurance'], 'extra' => $item['extra'], ]; } $costs->stayTypeLiving()->sync($attachLivingData); $costs->stayTypeAccomodation()->sync($attachAccData); $costs->stayTypeOnetime()->sync($attachOnetimeData); $costs->stayTypeService()->sync($attachServiceData); flash()->success('Cost Calculation has been updated!'); }); return redirect()->route('cost.index')->withSuccess('Program has been updated!'); } /** * Remove the specified resource from storage. */ public function destroy($id) { try { $program = CostCalculator::findOrFail($id); $program->delete(); flash()->success('Cost Calculator has been deleted!'); } catch (\Throwable $th) { flash()->error($th->getMessage()); } return response()->json(['status' => 200, 'message' => 'Cost Calculator has been deleted!'], 200); } }