From 8f532e655f7a87068de2cb7feb3a98478cc39dd4 Mon Sep 17 00:00:00 2001 From: Tb Fajri Date: Tue, 13 Jun 2023 11:33:42 +0700 Subject: [PATCH] update --- .../Http/Controllers/Api/MemberController.php | 8 +- app/Http/Resources/OLDLMS/MemberResource.php | 3 +- app/Models/Plan.php | 1 + ...451_add_service_code_to_claim_requests.php | 2 +- .../src/components/dialogs/DialogReason.tsx | 0 .../layouts/dashboard/navbar/NavConfig.tsx | 5 +- frontend/dashboard/src/pages/Claims/List.tsx | 2 +- .../src/pages/Service/Membership/List.tsx | 267 ++++++++++++++++++ .../src/pages/Service/Membership/index.tsx | 30 ++ frontend/dashboard/src/routes/index.tsx | 9 +- 10 files changed, 320 insertions(+), 7 deletions(-) create mode 100644 frontend/dashboard/src/components/dialogs/DialogReason.tsx create mode 100755 frontend/dashboard/src/pages/Service/Membership/List.tsx create mode 100644 frontend/dashboard/src/pages/Service/Membership/index.tsx diff --git a/Modules/Internal/Http/Controllers/Api/MemberController.php b/Modules/Internal/Http/Controllers/Api/MemberController.php index 96925c7b..f288252e 100755 --- a/Modules/Internal/Http/Controllers/Api/MemberController.php +++ b/Modules/Internal/Http/Controllers/Api/MemberController.php @@ -13,10 +13,14 @@ class MemberController extends Controller * Display a listing of the resource. * @return Renderable */ - public function index() + public function index(Request $request) { return Member::query() - ->with('currentPlan') + ->when($request->search, function ($query, $search) { + return $query->where('name', 'LIKE', '%' . $search . '%') + ->orWhere('member_id', 'LIKE', '%' . $search . '%'); + }) + ->with('currentPlan', 'currentCorporate') ->paginate(); } diff --git a/app/Http/Resources/OLDLMS/MemberResource.php b/app/Http/Resources/OLDLMS/MemberResource.php index 4f4edc7e..6a497512 100755 --- a/app/Http/Resources/OLDLMS/MemberResource.php +++ b/app/Http/Resources/OLDLMS/MemberResource.php @@ -29,7 +29,8 @@ class MemberResource extends JsonResource 'code' => $currentMemberPlan->plan->code ?? null, 'start' => $currentMemberPlan->start, 'end' => $currentMemberPlan->end, - 'limit' => $this->currentPlan->limit_rules + 'limit' => $this->currentPlan->limit_rules, + 'limit_consultation' => 6 ] : null, 'policy_code' => $this->currentPolicy?->code ?? null, 'corporate' => [ diff --git a/app/Models/Plan.php b/app/Models/Plan.php index 8950724a..439433e2 100755 --- a/app/Models/Plan.php +++ b/app/Models/Plan.php @@ -224,6 +224,7 @@ class Plan extends Model return $this->belongsTo(CorporatePlan::class); } + // public function Corporate() // { // return $this->belongsTo(Corporate::class); diff --git a/database/migrations/2023_06_09_151451_add_service_code_to_claim_requests.php b/database/migrations/2023_06_09_151451_add_service_code_to_claim_requests.php index 259670e8..ce185355 100644 --- a/database/migrations/2023_06_09_151451_add_service_code_to_claim_requests.php +++ b/database/migrations/2023_06_09_151451_add_service_code_to_claim_requests.php @@ -16,7 +16,7 @@ return new class extends Migration Schema::table('claim_requests', function (Blueprint $table) { // $table->string('service_code')->after('payment_type')->nullable(); - $table->string('policy_id')->after('service_code')->nullable(); + $table->unsignedBigInteger('policy_id')->after('service_code')->nullable(); }); } diff --git a/frontend/dashboard/src/components/dialogs/DialogReason.tsx b/frontend/dashboard/src/components/dialogs/DialogReason.tsx new file mode 100644 index 00000000..e69de29b diff --git a/frontend/dashboard/src/layouts/dashboard/navbar/NavConfig.tsx b/frontend/dashboard/src/layouts/dashboard/navbar/NavConfig.tsx index 8be86e5c..8390f1e1 100755 --- a/frontend/dashboard/src/layouts/dashboard/navbar/NavConfig.tsx +++ b/frontend/dashboard/src/layouts/dashboard/navbar/NavConfig.tsx @@ -74,7 +74,10 @@ const navConfig = [ }, { title: 'CUSTOMER SERVICES', - children: [{ title: 'Request', path: '/cs-request' }], + children: [ + { title: 'Request', path: '/cs-request' }, + { title: 'Membership', path: '/cs-membership' }, + ], }, { title: 'REPORT', diff --git a/frontend/dashboard/src/pages/Claims/List.tsx b/frontend/dashboard/src/pages/Claims/List.tsx index ba58f679..cac972bd 100755 --- a/frontend/dashboard/src/pages/Claims/List.tsx +++ b/frontend/dashboard/src/pages/Claims/List.tsx @@ -84,7 +84,7 @@ export default function List() { onChange={handleSearchChange} value={searchText} /> - + */} + + + ); + } + + // Dummy Default Data + const [dataTableIsLoading, setDataTableLoading] = useState(true); + const [dataTableData, setDataTableData] = useState( + LaravelPaginatedDataDefault + ); + + const loadDataTableData = async (appliedFilter: any | null = null) => { + setDataTableLoading(true); + const filter = appliedFilter ? appliedFilter : Object.fromEntries([...searchParams.entries()]); + const response = await axios.get('/members', { params: filter }); + // console.log(response.data); + setDataTableLoading(false); + + setDataTableData(response.data); + }; + + const applyFilter = async (searchFilter: { search: string }) => { + await loadDataTableData(searchFilter); + setSearchParams(searchFilter); + }; + + const handlePageChange = (event: ChangeEvent, value: number): void => { + const filter = Object.fromEntries([...searchParams.entries(), ['page', value]]); + loadDataTableData(filter); + setSearchParams(filter); + }; + + useEffect(() => { + loadDataTableData(); + }, []); + + const headStyle = { + fontWeight: 'bold', + }; + + // Called on every row to map the data to the columns + function createData(data: any): any { + return { + ...data, + }; + } + + { + /* ------------------ TABLE ROW ------------------ */ + } + function Row(props: { row: ReturnType }) { + const { row } = props; + const [open, setOpen] = React.useState(false); + + return ( + + *': { borderBottom: 'unset' } }}> + {/* + setOpen(!open)}> + {open ? : } + + */} + {row.member_id} + {row.person?.name} + {row.current_corporate?.name} + {row.person?.nik} + {row.current_plan?.code} + {row.active == 1 ? 'Active' : 'Inactive'} + + {row.member_id == 'draft' && ()} + {row.member_id == 'requested' && ()} + {row.member_id == 'received' && ()} + {row.member_id == 'approved' && ()} + {row.member_id == 'postpone' && ()} + {row.member_id == 'paid' && ()} + {row.member_id == 'declined' && ()} + + + {/* COLLAPSIBLE ROW */} + + + + {/* + + Description : {row.description} + + */} + + + + + ); + } + { + /* ------------------ END TABLE ROW ------------------ */ + } + + function TableContent() { + return ( + + {/* ------------------ TABLE HEADER ------------------ */} + + + {/* Detail */} + MemberID + Name + Corporate Name + NIK + Plan + Status + + + {/* ------------------ END TABLE HEADER ------------------ */} + + {/* ------------------ TABLE ROW ------------------ */} + {dataTableIsLoading ? ( + + + + Loading + + + + ) : dataTableData.data.length === 0 ? ( + + + + No Data + + + + ) : ( + + {dataTableData.data.map((row) => ( + + ))} + + )} + {/* ------------------ END TABLE ROW ------------------ */} +
+ ); + } + + return ( + + + + } + /> + + ); +} diff --git a/frontend/dashboard/src/pages/Service/Membership/index.tsx b/frontend/dashboard/src/pages/Service/Membership/index.tsx new file mode 100644 index 00000000..d26903b0 --- /dev/null +++ b/frontend/dashboard/src/pages/Service/Membership/index.tsx @@ -0,0 +1,30 @@ +import { Card, Stack } from "@mui/material"; +import HeaderBreadcrumbs from "../../../components/HeaderBreadcrumbs"; +import Page from "../../../components/Page"; +import List from "./List"; + + + +export default function Claims() { + + const pageTitle = 'Claim Request'; + return ( + + + + + {/* */} + + {/* */} + + ); +} diff --git a/frontend/dashboard/src/routes/index.tsx b/frontend/dashboard/src/routes/index.tsx index 3c0a4ec1..83df9b7d 100755 --- a/frontend/dashboard/src/routes/index.tsx +++ b/frontend/dashboard/src/routes/index.tsx @@ -310,6 +310,10 @@ export default function Router() { path: 'profile', element: , }, + { + path: 'cs-membership', + element: , + }, ], }, // { @@ -440,4 +444,7 @@ const Claims = Loadable(lazy(() => import('../pages/Claims/Index'))); const ClaimsCreate = Loadable(lazy(() => import('../pages/Claims/CreateUpdate'))); const ClaimShow = Loadable(lazy(() => import('../pages/Claims/Show'))); -const ClaimRequests = Loadable(lazy(() => import('../pages/ClaimRequests/Index'))); \ No newline at end of file +const ClaimRequests = Loadable(lazy(() => import('../pages/ClaimRequests/Index'))); + + +const Membership = Loadable(lazy(() => import('../pages/Service/Membership/index'))); \ No newline at end of file