diff --git a/Modules/HospitalPortal/Routes/api.php b/Modules/HospitalPortal/Routes/api.php index ed9a8eeb..920501b8 100755 --- a/Modules/HospitalPortal/Routes/api.php +++ b/Modules/HospitalPortal/Routes/api.php @@ -133,3 +133,6 @@ Route::prefix('v1')->group(function() { }); }); +// ################## route tambahan (modular) ################## +// crm +require base_path('modules/hospitalportal/routes/primaya/api-primaya.php'); \ No newline at end of file diff --git a/Modules/HospitalPortal/Routes/primaya/api-primaya.php b/Modules/HospitalPortal/Routes/primaya/api-primaya.php new file mode 100644 index 00000000..12e57601 --- /dev/null +++ b/Modules/HospitalPortal/Routes/primaya/api-primaya.php @@ -0,0 +1,40 @@ +group(function() { + Route::prefix('primaya')->group(function () { + + Route::middleware(Authentication::class)->group(function () { + Route::controller(AuthController::class)->group(function () { + Route::post('login', 'login'); + }); + }); + + Route::middleware('auth:sanctum')->group(function () { + + Route::middleware(Authorization::class)->group(function () { + //Search Member + Route::controller(MemberController::class)->group(function () { + Route::post('search-member', 'search'); + }); + }); + }); + + + }); +}); diff --git a/Modules/Primaya/Config/.gitkeep b/Modules/Primaya/Config/.gitkeep new file mode 100644 index 00000000..e69de29b diff --git a/Modules/Primaya/Config/config.php b/Modules/Primaya/Config/config.php new file mode 100644 index 00000000..0bf47358 --- /dev/null +++ b/Modules/Primaya/Config/config.php @@ -0,0 +1,5 @@ + 'Primaya' +]; diff --git a/Modules/Primaya/Console/.gitkeep b/Modules/Primaya/Console/.gitkeep new file mode 100644 index 00000000..e69de29b diff --git a/Modules/Primaya/Database/Migrations/.gitkeep b/Modules/Primaya/Database/Migrations/.gitkeep new file mode 100644 index 00000000..e69de29b diff --git a/Modules/Primaya/Database/Seeders/.gitkeep b/Modules/Primaya/Database/Seeders/.gitkeep new file mode 100644 index 00000000..e69de29b diff --git a/Modules/Primaya/Database/Seeders/PrimayaDatabaseSeeder.php b/Modules/Primaya/Database/Seeders/PrimayaDatabaseSeeder.php new file mode 100644 index 00000000..4110136f --- /dev/null +++ b/Modules/Primaya/Database/Seeders/PrimayaDatabaseSeeder.php @@ -0,0 +1,21 @@ +call("OthersTableSeeder"); + } +} diff --git a/Modules/Primaya/Database/factories/.gitkeep b/Modules/Primaya/Database/factories/.gitkeep new file mode 100644 index 00000000..e69de29b diff --git a/Modules/Primaya/Entities/.gitkeep b/Modules/Primaya/Entities/.gitkeep new file mode 100644 index 00000000..e69de29b diff --git a/Modules/Primaya/Helpers/ApiResponse.php b/Modules/Primaya/Helpers/ApiResponse.php new file mode 100644 index 00000000..8f6f2073 --- /dev/null +++ b/Modules/Primaya/Helpers/ApiResponse.php @@ -0,0 +1,21 @@ +first(); + } + return response()->json([ + 'meta' => [ + 'status' => $status, + 'code' => $statusCode, + 'message' => $message + ], + 'data' => $data, + ], $statusCode); + } +} \ No newline at end of file diff --git a/Modules/Primaya/Http/Controllers/.gitkeep b/Modules/Primaya/Http/Controllers/.gitkeep new file mode 100644 index 00000000..e69de29b diff --git a/Modules/Primaya/Http/Controllers/Api/MemberController.php b/Modules/Primaya/Http/Controllers/Api/MemberController.php new file mode 100644 index 00000000..2ea07dcc --- /dev/null +++ b/Modules/Primaya/Http/Controllers/Api/MemberController.php @@ -0,0 +1,178 @@ + $request->no_polis, + 'birth_date' => $request->birth_date + ]; + $validator = Validator::make($request->all(), [ + 'no_polis' => 'required', + 'birth_date' => 'required' + ], [ + 'no_polis.required' => trans('Validation.required',['attribute' => 'Member ID']), + 'birth_date.required' => trans('Validation.required',['attribute' => 'Birth Date']), + ]); + if ($validator->fails()) + { + return ApiResponse::apiResponse('Bad Request', $data, $validator->errors(), 400); + } + else + { + $members = DB::table('members') + ->leftJoin('member_policies', 'member_policies.member_id','=', 'members.member_id') + ->leftJoin('persons', 'persons.id', '=', 'members.person_id') + ->where('members.member_id', '=', $request->no_polis) + ->where('members.birth_date', '=', $request->birth_date) + ->select( + 'members.id', + 'members.name', + 'members.member_id', + 'member_policies.policy_id', + 'persons.nik', + 'members.email', + 'members.birth_date', + 'members.gender', + 'members.marital_status', + 'members.language', + 'members.race', + 'members.relation_with_principal') + ->first(); + if($members) + { + $res_data['members'] = $members; + + $benefits = DB::table('member_plans') + ->leftJoin('corporate_benefits','corporate_benefits.plan_id', '=', 'member_plans.plan_id') + ->leftJoin('benefits', 'benefits.id', '=', 'corporate_benefits.benefit_id') + ->leftJoin('plans', 'plans.id', '=', 'member_plans.plan_id') + ->leftJoin('services', 'services.code', '=', 'plans.service_code') + ->where('member_plans.member_id', '=', $members->id) + ->select( + 'benefits.description', + 'benefits.code', + 'corporate_benefits.corporate_id', + 'plans.service_code' + ) + ->get(); + $res_data['benefits'] = $benefits; + + $services = DB::table('member_plans') + ->leftJoin('plans', 'plans.id', '=', 'member_plans.plan_id') + ->leftJoin('services', 'services.code', '=', 'plans.service_code') + ->where('member_plans.member_id', $members->id) + ->whereNull('member_plans.deleted_at') + ->select('plans.service_code', 'services.name') + ->get(); + $res_data['services'] = $services; + + // Group Services + $groupServices = []; + foreach ($res_data['benefits'] as $benefit) { + $serviceCode = $benefit->service_code; + $groupServices[$serviceCode][] = [ + 'description' => $benefit->description, + 'code' => $benefit->code, + ]; + } + + $res_data['groupServices'] = $groupServices; + + $res_data['type'] = $request->type; + + // Provider + $providers = DB::table('organizations') + ->where('organizations.type', '=', 'hospital') + ->where('organizations.corporate_id_partner', '!=', 8) + ->orWhere('organizations.corporate_id_partner', NULL) + ->where('status', '=', 'active') + ->orderBy('organizations.name','asc') + ->select( + 'organizations.id', + 'organizations.name' + ) + ->get(); + + $res_data['providers'] = $providers; + + //company + $companies = DB::table('corporates') + ->where('corporates.active', '=', 1) + ->select( + 'corporates.id', + 'corporates.name' + ) + ->get(); + + $res_data['companies'] = $companies; + + //company + $companies = DB::table('corporates') + ->where('corporates.active', '=', 1) + ->select( + 'corporates.id', + 'corporates.name' + ) + ->get(); + + $res_data['companies'] = $companies; + + $corporateEmployeePremi = DB::table('corporate_employees') + ->leftJoin('corporates', 'corporates.id', '=', 'corporate_employees.corporate_id') + ->leftJoin('corporate_policies', 'corporate_policies.corporate_id', '=', 'corporates.id') + ->where('corporate_employees.status', 'ACTIVE') + ->where('corporates.active', 1) + ->where('corporate_policies.active', 1) + ->where('corporate_employees.member_id', $members->id) + ->value('corporate_policies.total_premi'); + + $res_data['total_premi'] = $corporateEmployeePremi ?? 0; + + $limitRules = DB::table('member_plans') + ->leftJoin('plans', 'plans.id', '=', 'member_plans.plan_id') + ->where('member_plans.member_id', $members->id) + ->where('member_plans.status', 'active') + ->where('plans.active', 1) + ->value('plans.limit_rules'); + + $res_data['limit_rules'] = $limitRules ?? 0; + + // specialities + $specialities = DB::table('specialities') + ->select( + 'specialities.id', + 'specialities.name' + ) + ->orderBy('specialities.name','asc') + ->get(); + + $res_data['specialities'] = $specialities; + + + return ApiResponse::apiResponse("Success", $res_data, trans('Message.success'), 200); + } + else + { + return ApiResponse::apiResponse("Data Not Found", $data, trans('Message.not_found'), 404); + } + + } + } +} diff --git a/Modules/Primaya/Http/Controllers/PrimayaController.php b/Modules/Primaya/Http/Controllers/PrimayaController.php new file mode 100644 index 00000000..64be2ffe --- /dev/null +++ b/Modules/Primaya/Http/Controllers/PrimayaController.php @@ -0,0 +1,79 @@ +registerTranslations(); + $this->registerConfig(); + $this->registerViews(); + $this->loadMigrationsFrom(module_path($this->moduleName, 'Database/Migrations')); + } + + /** + * Register the service provider. + * + * @return void + */ + public function register() + { + $this->app->register(RouteServiceProvider::class); + } + + /** + * Register config. + * + * @return void + */ + protected function registerConfig() + { + $this->publishes([ + module_path($this->moduleName, 'Config/config.php') => config_path($this->moduleNameLower . '.php'), + ], 'config'); + $this->mergeConfigFrom( + module_path($this->moduleName, 'Config/config.php'), $this->moduleNameLower + ); + } + + /** + * Register views. + * + * @return void + */ + public function registerViews() + { + $viewPath = resource_path('views/modules/' . $this->moduleNameLower); + + $sourcePath = module_path($this->moduleName, 'Resources/views'); + + $this->publishes([ + $sourcePath => $viewPath + ], ['views', $this->moduleNameLower . '-module-views']); + + $this->loadViewsFrom(array_merge($this->getPublishableViewPaths(), [$sourcePath]), $this->moduleNameLower); + } + + /** + * Register translations. + * + * @return void + */ + public function registerTranslations() + { + $langPath = resource_path('lang/modules/' . $this->moduleNameLower); + + if (is_dir($langPath)) { + $this->loadTranslationsFrom($langPath, $this->moduleNameLower); + $this->loadJsonTranslationsFrom($langPath, $this->moduleNameLower); + } else { + $this->loadTranslationsFrom(module_path($this->moduleName, 'Resources/lang'), $this->moduleNameLower); + $this->loadJsonTranslationsFrom(module_path($this->moduleName, 'Resources/lang'), $this->moduleNameLower); + } + } + + /** + * Get the services provided by the provider. + * + * @return array + */ + public function provides() + { + return []; + } + + private function getPublishableViewPaths(): array + { + $paths = []; + foreach (\Config::get('view.paths') as $path) { + if (is_dir($path . '/modules/' . $this->moduleNameLower)) { + $paths[] = $path . '/modules/' . $this->moduleNameLower; + } + } + return $paths; + } +} diff --git a/Modules/Primaya/Providers/RouteServiceProvider.php b/Modules/Primaya/Providers/RouteServiceProvider.php new file mode 100644 index 00000000..e5b3fcf3 --- /dev/null +++ b/Modules/Primaya/Providers/RouteServiceProvider.php @@ -0,0 +1,69 @@ +mapApiRoutes(); + + $this->mapWebRoutes(); + } + + /** + * Define the "web" routes for the application. + * + * These routes all receive session state, CSRF protection, etc. + * + * @return void + */ + protected function mapWebRoutes() + { + Route::middleware('web') + ->namespace($this->moduleNamespace) + ->group(module_path('Primaya', '/Routes/web.php')); + } + + /** + * Define the "api" routes for the application. + * + * These routes are typically stateless. + * + * @return void + */ + protected function mapApiRoutes() + { + Route::prefix('api') + ->middleware('api') + ->namespace($this->moduleNamespace) + ->group(module_path('Primaya', '/Routes/api.php')); + } +} diff --git a/Modules/Primaya/Resources/assets/.gitkeep b/Modules/Primaya/Resources/assets/.gitkeep new file mode 100644 index 00000000..e69de29b diff --git a/Modules/Primaya/Resources/assets/js/app.js b/Modules/Primaya/Resources/assets/js/app.js new file mode 100644 index 00000000..e69de29b diff --git a/Modules/Primaya/Resources/assets/sass/app.scss b/Modules/Primaya/Resources/assets/sass/app.scss new file mode 100644 index 00000000..e69de29b diff --git a/Modules/Primaya/Resources/lang/.gitkeep b/Modules/Primaya/Resources/lang/.gitkeep new file mode 100644 index 00000000..e69de29b diff --git a/Modules/Primaya/Resources/views/.gitkeep b/Modules/Primaya/Resources/views/.gitkeep new file mode 100644 index 00000000..e69de29b diff --git a/Modules/Primaya/Resources/views/index.blade.php b/Modules/Primaya/Resources/views/index.blade.php new file mode 100644 index 00000000..adaec21e --- /dev/null +++ b/Modules/Primaya/Resources/views/index.blade.php @@ -0,0 +1,9 @@ +@extends('primaya::layouts.master') + +@section('content') +
+ This view is loaded from module: {!! config('primaya.name') !!} +
+@endsection diff --git a/Modules/Primaya/Resources/views/layouts/master.blade.php b/Modules/Primaya/Resources/views/layouts/master.blade.php new file mode 100644 index 00000000..bd251dab --- /dev/null +++ b/Modules/Primaya/Resources/views/layouts/master.blade.php @@ -0,0 +1,19 @@ + + + + + + +