diff --git a/Modules/CostCalculator/app/Http/Controllers/CostCalculatorController.php b/Modules/CostCalculator/app/Http/Controllers/CostCalculatorController.php index 9fdd8b5..6a3b170 100644 --- a/Modules/CostCalculator/app/Http/Controllers/CostCalculatorController.php +++ b/Modules/CostCalculator/app/Http/Controllers/CostCalculatorController.php @@ -13,8 +13,9 @@ use Modules\CourseFinder\Models\ProgramLevel; use Modules\CostCalculator\Models\CostCalculator; use Modules\CostCalculator\Services\CostCalculatorService; use Modules\CourseFinder\Models\Program; +use Yajra\DataTables\Facades\DataTables; -class ProgramController extends Controller +class CostCalculatorController extends Controller { protected $costCalculatorService; @@ -22,19 +23,39 @@ class ProgramController extends Controller { $this->costCalculatorService = $costCalculatorService; } - /** - * Display a listing of the resource. - */ + public function index(Request $request) { - $data['title'] = 'Cost Calculator List'; - $data['costs'] = $this->costCalculatorService->findAll($request); - $data['countryOptions'] = Country::where('status', 1)->pluck('title', 'id'); - $data['programLevelOptions'] = ProgramLevel::where('status', 1)->pluck('title', 'id'); - $data['programOptions'] = Program::where('status', 1)->pluck('title', 'id'); - $data['livingStatusOptions'] = config('constants.living_status'); + // $data['title'] = 'Cost Calculator List'; + // $data['costs'] = $this->costCalculatorService->findAll($request); + // $data['countryOptions'] = Country::where('status', 1)->pluck('title', 'id'); + // $data['programLevelOptions'] = ProgramLevel::where('status', 1)->pluck('title', 'id'); + // $data['programOptions'] = Program::where('status', 1)->pluck('title', 'id'); + // $data['livingStatusOptions'] = config('constants.living_status'); - return view('costCalculator::cost.index', $data); + // return view('costcalculator::cost.index', $data); + + if (request()->ajax()) { + $model = CostCalculator::query()->orderBy('order'); + return DataTables::eloquent($model) + ->addIndexColumn() + ->setRowClass('tableRow') + ->editColumn('image', function (CostCalculator $cost) { + return $cost->getRawOriginal('image') ? "{$cost->country->image}" : '-'; + }) + ->editColumn('status', function (CostCalculator $cost) { + $status = $cost->status ? 'Published' : 'Draft'; + $color = $cost->status ? 'text-success' : 'text-danger'; + return "

{$status}

"; + }) + ->addColumn('action', 'costcalculator::cost.datatable.action') + ->rawColumns(['image', 'status', 'action']) + ->toJson(); + } + + return view('costcalculator::cost.index', [ + 'title' => 'Cost Calculator List', + ]); } /** @@ -42,14 +63,14 @@ class ProgramController extends Controller */ public function create() { - $data['title'] = 'Program Create'; + $data['title'] = 'Create Cost Calculator'; $data['editable'] = false; - $data['intakeOptions'] = Program::INTAKE; - $data['institutionOptions'] = Institution::where('status', 1)->pluck('title', 'id'); + $data['countryOptions'] = Country::where('status', 1)->pluck('title', 'id'); $data['programLevelOptions'] = ProgramLevel::where('status', 1)->pluck('title', 'id'); - $data['testOptions'] = Test::where('status', 1)->where('parent_id', null)->pluck('title', 'id'); + $data['programOptions'] = Program::where('status', 1)->pluck('title', 'id'); + $data['livingStatusOptions'] = config('constants.living_status'); - return view('coursefinder::program.create', $data); + return view('costcalculator::cost.create', $data); } /** @@ -59,30 +80,21 @@ class ProgramController extends Controller { $request->validate([ - 'title' => 'required', + 'country_id' => 'required', + 'programlevel_id' => 'required', + 'living_status_id' => 'required', ]); - $input = $request->except(['prof_test_accepted']); + $input = $request->all(); DB::transaction(function () use ($input, $request) { - $program = Program::create($input); + CostCalculator::create($input); - $attachData = []; - - foreach ($request->prof_test_accepted as $item) { - $attachData[$item['test_id']] = [ - 'min_score' => $item['min_score'], - 'band_score' => $item['band_score'], - ]; - } - - $program->tests()->sync($attachData); - - flash()->success('Program has been created!'); + flash()->success('Cost Calculation has been created!'); }); - return redirect()->route('program.index'); + return redirect()->route('costCalculator.index'); } /** @@ -90,10 +102,10 @@ class ProgramController extends Controller */ public function show($id) { - $data['title'] = 'View Program'; - $data['program'] = Program::findOrFail($id); + $data['title'] = 'View Cost Calculation'; + $data['program'] = CostCalculator::findOrFail($id); $data['intakeOptions'] = Program::INTAKE; - return view('coursefinder::program.show', $data); + return view('costcalculator::cost.show', $data); } /** @@ -101,16 +113,14 @@ class ProgramController extends Controller */ public function edit($id) { - $data['title'] = 'Edit Program'; + $data['title'] = 'Edit Cost Calculator'; $data['editable'] = true; - $data['program'] = Program::findOrFail($id); - $data['intakeOptions'] = Program::INTAKE; - $data['institutionOptions'] = Institution::where('status', 1)->pluck('title', 'id'); + $data['cost'] = CostCalculator::findOrFail($id); + $data['countryOptions'] = Country::where('status', 1)->pluck('title', 'id'); $data['programLevelOptions'] = ProgramLevel::where('status', 1)->pluck('title', 'id'); - $data['testOptions'] = Test::where('status', 1)->where('parent_id', null)->pluck('title', 'id'); - $data['coopOptions'] = Coop::where('status', 1)->pluck('title', 'id'); - $data['requiredDocumentOptions'] = RequiredDocument::where('status', 1)->pluck('title', 'id'); - return view('coursefinder::program.edit', $data); + $data['programOptions'] = Program::where('status', 1)->pluck('title', 'id'); + $data['livingStatusOptions'] = config('constants.living_status'); + return view('costcalculator::cost.edit', $data); } /** @@ -118,27 +128,16 @@ class ProgramController extends Controller */ public function update(Request $request, $id) { - $input = $request->except(['prof_test_accepted']); + $input = $request->all(); DB::transaction(function () use ($input, $request, $id) { - $program = Program::findOrFail($id); + $program = CostCalculator::findOrFail($id); $program->update($input); - $attachData = []; - - foreach ($request->prof_test_accepted as $item) { - $attachData[$item['test_id']] = [ - 'min_score' => $item['min_score'], - 'band_score' => $item['band_score'], - ]; - } - - $program->tests()->sync($attachData); + flash()->success('Cost Calculation has been updated!'); }); - flash()->success('program has been updated!'); - - return redirect()->route('program.index')->withSuccess('Program has been updated!'); + return redirect()->route('costCalculator.index')->withSuccess('Program has been updated!'); } /** @@ -147,100 +146,14 @@ class ProgramController extends Controller public function destroy($id) { try { - $program = Program::findOrFail($id); + $program = CostCalculator::findOrFail($id); $program->delete(); - flash()->success('Program has been deleted!'); + flash()->success('Cost Calculator has been deleted!'); } catch (\Throwable $th) { flash()->error($th->getMessage()); } - return response()->json(['status' => 200, 'message' => 'Program has been deleted!'], 200); + return response()->json(['status' => 200, 'message' => 'Cost Calculator has been deleted!'], 200); } - public function getProgramByInstitution(Request $request) - { - try { - $program = Program::where(['institution_id' => $request->institution_id]) - ->select('id', 'title') - ->get(); - return response()->json([ - 'status' => true, - 'data' => $program, - 'msg' => 'Fetch', - ], 200); - } catch (\Throwable $th) { - return response()->json([ - 'status' => false, - 'msg' => $th->getMessage(), - ], 500); - } - } - - public function import(Request $request) - { - DB::beginTransaction(); - try { - Excel::import(new ProgramImport(), $request->file('file')->store('temp')); - DB::commit(); - return redirect()->back()->with('success', "Upload Succesfully"); - } catch (\Throwable $th) { - DB::rollback(); - return redirect()->back()->with('error', $th->getMessage()); - } - } - - public function getCoursesList(Request $request) - { - $data['intakes'] = Program::INTAKE; - - $query = Program::query(); - - if ($request->filled('countries_id')) { - $query->whereRelation('institution', 'countries_id', $request->countries_id); - } - - if ($request->filled('institution_id')) { - $query->where('institutions_id', $request->institution_id); - } - - if ($request->filled('search')) { - $query->where('title', 'like', "%{$request->search}%"); - } - - if ($request->filled('programlevels_id')) { - $query->where('programlevels_id', $request->programlevels_id); - } - - if ($request->filled('intake_id')) { - $query->whereJsonContains('intakes', $request->intake_id); - } - - if ($request->filled('preffered_location')) { - $query->where('location', 'like', "%{$request->preffered_location}%"); - } - - if ($request->filled('service_id')) { - $query->whereRelation('services', 'service_id', '=', $request->service_id); - - if ($request->filled('min_score')) { - $query->whereRelation('services', 'min_score', '<=', $request->min_score); - } - - if ($request->filled('max_score')) { - $query->whereRelation('services', 'band_score', '<=', $request->max_score); - } - } - - $data['courses'] = $query - ->orderBy('title', 'asc') - ->paginate(10) - ->withQueryString(); - - $queryCount = $data['courses']->total(); - - if ($request->ajax()) { - $view = view('client.raffles.pages.course.list', $data)->render(); - return response()->json(['html' => $view, 'queryCount' => $queryCount]); - } - } } diff --git a/Modules/CostCalculator/app/Services/CostCalculatorService.php b/Modules/CostCalculator/app/Services/CostCalculatorService.php index 39e30c2..136dcee 100644 --- a/Modules/CostCalculator/app/Services/CostCalculatorService.php +++ b/Modules/CostCalculator/app/Services/CostCalculatorService.php @@ -10,35 +10,25 @@ class CostCalculatorService { return CostCalculator::when($request, function ($query) use ($request) { if ($request->filled('country_id')) { - $query->whereRelation('institution', 'country_id', $request->country_id); - } - - if ($request->filled('institution_id')) { - $query->where("institution_id", $request->institution_id); + $query->where('country_id', $request->country_id); } if ($request->filled('programlevel_id')) { $query->where("programlevel_id", $request->programlevel_id); } - if ($request->filled('intake_id')) { - $intakeId = $request->intake_id; - $query->whereJsonContains('intakes', $intakeId); + if ($request->filled('program_id')) { + $query->where("program_id", $request->program_id); + } + + if ($request->filled('living_status_id')) { + $query->where("living_status_id", $request->living_status_id); } if ($request->filled('status')) { $query->where('status', $request->status); } - if ($request->filled('search')) { - $search = $request->search; - $query->where('title', 'like', "%{$search}%"); - } - - if ($request->filled('location')) { - $location = $request->location; - $query->where('location', 'like', "%{$location}%"); - } })->latest()->paginate(10)->withQueryString(); } diff --git a/Modules/CostCalculator/resources/views/cost/create.blade.php b/Modules/CostCalculator/resources/views/cost/create.blade.php index 50dbc42..2c3c731 100644 --- a/Modules/CostCalculator/resources/views/cost/create.blade.php +++ b/Modules/CostCalculator/resources/views/cost/create.blade.php @@ -3,8 +3,8 @@
- {{ html()->form('POST')->route('costCalculator.store')->class(['needs-validation'])->attributes(['novalidate', 'enctype' => 'multipart/form-data', 'onkeydown' => "return event.key != 'Enter';"])->open() }} - @include('costCalculator::cost.partials.form') + {{ html()->form('POST')->route('cost.store')->class(['needs-validation'])->attributes(['novalidate', 'enctype' => 'multipart/form-data', 'onkeydown' => "return event.key != 'Enter';"])->open() }} + @include('costcalculator::cost.partials.form') {{ html()->form()->close() }}
@endsection diff --git a/Modules/CostCalculator/resources/views/cost/datatable/action.blade.php b/Modules/CostCalculator/resources/views/cost/datatable/action.blade.php new file mode 100644 index 0000000..72af1b8 --- /dev/null +++ b/Modules/CostCalculator/resources/views/cost/datatable/action.blade.php @@ -0,0 +1,12 @@ +
+ + + + + + +
diff --git a/Modules/CostCalculator/resources/views/cost/index.blade.php b/Modules/CostCalculator/resources/views/cost/index.blade.php index e69de29..0c8c40e 100644 --- a/Modules/CostCalculator/resources/views/cost/index.blade.php +++ b/Modules/CostCalculator/resources/views/cost/index.blade.php @@ -0,0 +1,46 @@ +@extends('layouts.app') + +@section('content') +
+ + @if ($errors->any()) + + @endif + +
+
+
+
+
{{ $title }}
+ Create +
+
+ @php + $columns = [ + [ + 'title' => 'S.N', + 'data' => 'DT_RowIndex', + 'name' => 'DT_RowIndex', + 'orderable' => false, + 'searchable' => false, + 'sortable' => false, + ], + ['title' => 'Image', 'data' => 'image', 'name' => 'image'], + ['title' => 'Program Level', 'data' => 'program_level', 'name' => 'title'], + ['title' => 'Slug', 'data' => 'slug', 'name' => 'slug'], + ['title' => 'Status', 'data' => 'status', 'name' => 'status'], + [ + 'title' => 'Action', + 'data' => 'action', + 'orderable' => false, + 'searchable' => false, + ], + ]; + @endphp + +
+
+
+
+
+@endsection diff --git a/Modules/CostCalculator/resources/views/cost/partials/accomodation-cost.blade.php b/Modules/CostCalculator/resources/views/cost/partials/accomodation-cost.blade.php new file mode 100644 index 0000000..0176ea5 --- /dev/null +++ b/Modules/CostCalculator/resources/views/cost/partials/accomodation-cost.blade.php @@ -0,0 +1,25 @@ + + + {{ html()->select('accomodation_cost[' . $numInc . '][status]', $livingStatusOptions)->class('form-select')->placeholder('-Select-')->value($value->id ?? null)->required() }} + {{ html()->div('Please enter living status')->class('invalid-feedback') }} + + + + + {{ html()->text('accomodation_cost[' . $numInc . '][monthly]')->class('form-control')->value($value->monthly ?? null)->placeholder('Monthly') }} + + + + {{ html()->text('accomodation_cost[' . $numInc . '][yearly]')->class('form-control')->value($value->yearly ?? null)->placeholder('Yearly') }} + + + +
+ + + + +
+ + diff --git a/Modules/CostCalculator/resources/views/cost/partials/form.blade.php b/Modules/CostCalculator/resources/views/cost/partials/form.blade.php index 0f7e25d..ea3e44c 100644 --- a/Modules/CostCalculator/resources/views/cost/partials/form.blade.php +++ b/Modules/CostCalculator/resources/views/cost/partials/form.blade.php @@ -22,30 +22,22 @@
-
+
{{ html()->label('Country')->class('form-label') }} {{ html()->span('*')->class('text-danger') }} {{ html()->select('country_id', $countryOptions)->placeholder('Select')->class('form-select choices-select')->required() }} {{ html()->div('Please select country')->class('invalid-feedback') }}
-
+
{{ html()->label('Program Level')->class('form-label')->for('programlevel_id') }} {{ html()->span('*')->class('text-danger') }} {{ html()->select('programlevel_id', $programLevelOptions)->placeholder('Select')->class('form-select choices-select')->required() }} {{ html()->div('Please select program level')->class('invalid-feedback') }}
-
- {{ html()->label('Living Status')->class('form-label')->for('institution_id') }} - {{ html()->span('*')->class('text-danger') }} - {{ html()->select('living_status_id', $livingStatusOptions)->placeholder('Select')->class('form-select choices-select')->required() }} - {{ html()->div('Please select Living Status')->class('invalid-feedback') }} -
-
{{ html()->label('Program')->class('form-label')->for('program_id') }} - {{ html()->span('*')->class('text-danger') }} {{ html()->select('program_id', $programOptions)->placeholder('Select')->class('form-select choices-select')->required() }} {{ html()->div('Please select program')->class('invalid-feedback') }}
@@ -68,7 +60,7 @@