This commit is contained in:
Muhammad Fajar
2023-09-27 17:49:36 +07:00
parent 544eb32a81
commit 52783b191a
7 changed files with 435 additions and 427 deletions

View File

@@ -2,8 +2,10 @@
namespace Modules\Client\Http\Controllers\Api;
use App\Helpers\Helper;
use Illuminate\Http\Request;
use App\Http\Controllers\Controller;
use App\Models\ClaimRequest;
class ClaimReportController extends Controller
{
@@ -12,52 +14,39 @@ class ClaimReportController extends Controller
*
* @return \Illuminate\Http\Response
*/
public function index()
public function claimStatus($corporateId)
{
}
$requesteds = ClaimRequest::query()
->whereHas('member', function ($query) use ($corporateId) {
$query->whereHas('employeds', function ($corporateEmployee) use ($corporateId) {
$corporateEmployee->where('corporate_id', $corporateId);
});
})
->where('status', 'requested')
->get();
$approveds = ClaimRequest::query()
->whereHas('member', function ($query) use ($corporateId) {
$query->whereHas('employeds', function ($corporateEmployee) use ($corporateId) {
$corporateEmployee->where('corporate_id', $corporateId);
});
})
->where('status', 'approved')
->get();
/**
* Store a newly created resource in storage.
*
* @param \Illuminate\Http\Request $request
* @return \Illuminate\Http\Response
*/
public function store(Request $request)
{
//
}
$rejecteds = ClaimRequest::query()
->whereHas('member', function ($query) use ($corporateId) {
$query->whereHas('employeds', function ($corporateEmployee) use ($corporateId) {
$corporateEmployee->where('corporate_id', $corporateId);
});
})
->whereHas('claim', fn ($query) => $query->where('status', 'declined'))
->where('status', 'approved')
->get();
/**
* Display the specified resource.
*
* @param int $id
* @return \Illuminate\Http\Response
*/
public function show($id)
{
//
}
/**
* Update the specified resource in storage.
*
* @param \Illuminate\Http\Request $request
* @param int $id
* @return \Illuminate\Http\Response
*/
public function update(Request $request, $id)
{
//
}
/**
* Remove the specified resource from storage.
*
* @param int $id
* @return \Illuminate\Http\Response
*/
public function destroy($id)
{
//
return Helper::responseJson([
'requesteds' => count($requesteds),
'approveds' => count($approveds),
'rejecteds' => count($rejecteds)
]);
}
}

View File

@@ -10,10 +10,9 @@ use Modules\Client\Http\Controllers\Api\UserController;
use Modules\Client\Http\Controllers\Api\ClaimController;
use Modules\Client\Http\Controllers\Api\TopUpController;
use Modules\Internal\Http\Controllers\ClaimEncounterController;
use App\Models\Encounter;
use Modules\Client\Http\Controllers\Api\ClaimReportController;
use Modules\Client\Http\Controllers\Api\ClaimRequestController;
use Modules\Client\Http\Controllers\Api\DataController;
use Modules\Internal\Transformers\EncounterResource;
/*
|--------------------------------------------------------------------------
@@ -54,6 +53,7 @@ Route::prefix('client')->group(function () {
Route::get('topup', [TopUpController::class, 'index']);
// Route::get('topup', [TopUpController::class, 'get']);
Route::post('topup', [TopUpController::class, 'store']);
Route::get('claim-report/claim-status', [ClaimReportController::class, 'claimStatus']);
});
Route::get('claims/{id}', [ClaimController::class, 'show']);

View File

@@ -48,6 +48,7 @@ class CorporateMemberService
$limit = $request->has('perPage') ? $request->input('perPage') : 10;
return Member::query()
->joinClaimRequests('right')
->joinCorporateEmployees('left')
->joinCorporateDivisions('left')
->with('currentPlan')
@@ -61,6 +62,11 @@ class CorporateMemberService
->orWhere('members.name', 'like', "%" . $search . "%");
});
})
->when($request->input('division'), function (Builder $division, $value) {
$division->whereHas('division', function (Builder $corporateEmployee) use ($value) {
$corporateEmployee->where('division_id', $value);
});
})
->when($request->has('orderBy'), function (Builder $query) use ($request) {
$orderBy = match ($request->orderBy) {
'memberId' => 'member_id',
@@ -74,7 +80,7 @@ class CorporateMemberService
$query->getQuery()->orderBy('corporate_divisions.name', $request->order);
}
})
->select(['members.id', 'members.person_id', 'members.member_id', 'members.name', 'corporate_divisions.name AS division_name', 'members.active'])
->select(['members.id', 'members.person_id', 'members.member_id', 'members.name', 'corporate_divisions.name AS division_name', 'members.active', 'claim_requests.id', 'claim_requests.member_id', 'claim_requests.submission_date'])
->paginate($limit);
}

View File

@@ -2,6 +2,6 @@ GENERATE_SOURCEMAP=false
PORT=8083
REACT_APP_HOST_API_URL="http://localhost:8000"
REACT_APP_HOST_API_URL="http://aso.test"
VITE_API_URL="http://localhost:8000/api/client"
VITE_API_URL="http://aso.test/api/client"

View File

@@ -20,12 +20,20 @@ import List from './List';
import ClaimItems from '../Claims/components/ClaimItems';
import DiagnosisHistory from '../Claims/components/DiagnosisHistory';
import Documents from '../Claims/components/Documents';
// theme
import palette from '../../theme/palette';
interface ClaimStatusType {
name: string;
value: number;
color: string;
}
export default function Drugs() {
const { themeStretch } = useSettings();
const { corporateValue } = useContext(UserCurrentCorporateContext);
const [listClaimStatusItems, setListClaimStatusItems] = useState([]);
const [listClaimStatusItems, setListClaimStatusItems] = useState<ClaimStatusType[]>([]);
const [listAllMemberByClaimStatus, setListAllMemberByClaimStatus] = useState([]);
/* -------------------------------------------------------------------------- */
@@ -127,6 +135,26 @@ export default function Drugs() {
(async () => {
setIsLoading(true);
const claimStatus = await axios.get(`${corporateValue}/claim-report/claim-status`);
setListClaimStatusItems([
{
name: 'Requested',
value: claimStatus.data.data.requesteds,
color: palette.dark.primary.dark,
},
{
name: 'Approval',
value: claimStatus.data.data.approveds,
color: palette.dark.warning.dark,
},
{
name: 'Rejected',
value: claimStatus.data.data.rejecteds,
color: palette.dark.error.dark,
},
]);
const parameters =
Object.keys(appliedParams).length !== 0
? appliedParams
@@ -142,7 +170,6 @@ export default function Drugs() {
setSearchParams(parameters);
setListClaimStatusItems(claim.data.data.allClaimStatus);
setListAllMemberByClaimStatus(claim.data.data.allMembersByClaimStatus.data);
setPaginationTable(claim.data.data.allMembersByClaimStatus);

View File

@@ -37,7 +37,6 @@ import {
import { HeadCell, Order, PaginationTableProps } from '../../@types/table';
import { useSearchParams, useNavigate } from 'react-router-dom';
/* ---------------------------------- types --------------------------------- */
// type PaginationTableProps = {
@@ -224,7 +223,6 @@ import {
}
};
const searchs = {
searchText: searchText,
setSearchText: setSearchText,
@@ -270,7 +268,6 @@ import {
label: '',
isSort: false,
},
];
const [open, setOpen] = useState<HTMLElement | null>(null);
@@ -298,8 +295,6 @@ import {
}; */
/* -------------------------------------------------------------------------- */
useEffect(() => {
(async () => {
setIsLoading(true);
@@ -312,21 +307,18 @@ import {
: Object.fromEntries([...searchParams.entries(), ['order', order], ['orderBy', orderBy]]);
const response = await axios.get(`${corporateValue}/members`, {
params: { ...parameters },
params: { ...parameters, type: 'claim-report' },
});
setData(
response.data.data.map((obj: any) => {
return {
response.data.data.map((obj: any) => ({
...obj,
/* memberId: <Button onClick={() => navigate ('user-profile/:id')}>{obj.memberId}</Button>, */
status:
obj.status === 1 ? (
<Button onClick={() => navigate('dialog-detail')}
<Button
onClick={() => navigate('dialog-detail')}
/* startIcon={<Iconify icon="ic:round-check" />} */
sx={{
backgroundColor: 'rgba(84, 214, 44, 0.16)',
@@ -341,7 +333,6 @@ import {
>
Request
</Button>
) : (
<Button
startIcon={<Iconify icon="fa6-solid:clock" />}
@@ -364,9 +355,7 @@ import {
<MoreVertIcon />
</IconButton>
), */
};
})
}))
);
setPaginationTable(response.data);
@@ -397,8 +386,5 @@ import {
// filters={filters}
/>
</Stack>
);
}

View File

@@ -45,7 +45,7 @@ export default function CardClaimStatus({ data }: PropsCardClaimStatus) {
<Grid container spacing={2}>
{data
? data.map(({ name, value, color }: ClaimStatusType, key) => (
<Grid item key={key} xs={6} sm={3}>
<Grid item key={key} xs={6} sm={4}>
<Card
sx={{
paddingX: 1,
@@ -71,7 +71,7 @@ export default function CardClaimStatus({ data }: PropsCardClaimStatus) {
</Grid>
))
: defaultData.map(({ name, value, color }: ClaimStatusType, key) => (
<Grid item key={key} xs={6} sm={3}>
<Grid item key={key} xs={6} sm={4}>
<Card
sx={{
paddingX: 1,