From e15dda095575da947378d30618635dcb79d0e4ab Mon Sep 17 00:00:00 2001 From: pajri Date: Fri, 23 Dec 2022 17:16:31 +0700 Subject: [PATCH] bugs checked, exclusin age, masih ada bugs value --- .../Api/CorporateServiceController.php | 211 +++++++++++++++--- .../CorporateServiceConfigResource.php | 42 ++-- .../src/pages/Corporates/Services/Create.tsx | 161 +++++++++---- 3 files changed, 313 insertions(+), 101 deletions(-) diff --git a/Modules/Internal/Http/Controllers/Api/CorporateServiceController.php b/Modules/Internal/Http/Controllers/Api/CorporateServiceController.php index f2c3e561..9d4fe2b3 100755 --- a/Modules/Internal/Http/Controllers/Api/CorporateServiceController.php +++ b/Modules/Internal/Http/Controllers/Api/CorporateServiceController.php @@ -12,6 +12,7 @@ use Illuminate\Contracts\Support\Renderable; use Illuminate\Http\Request; use Illuminate\Routing\Controller; use Modules\Internal\Transformers\CorporateServiceConfigResource; +use Termwind\Components\Dd; class CorporateServiceController extends Controller { @@ -98,7 +99,19 @@ class CorporateServiceController extends Controller public function corporateServiceIndex($corporate_id, $service_code) { - $corporate = Corporate::findOrFail($corporate_id); + $corporate = Corporate::findOrFail($corporate_id)->with(['plans'])->first(); + $plans = $corporate['plans']->map(function ($plan) { + return [ + 'id' => $plan['id'], + 'code' => $plan['code'], + 'corporate_id' => $plan['corporate_id'], + 'corporate_plan_id' => $plan['corporate_plan_id'], + ]; + }); + + unset($corporate['plans']); + $corporate['plans'] = $plans; + $corporateService = CorporateService::query() ->where('corporate_id', $corporate_id) ->where('service_code', $service_code) @@ -111,7 +124,6 @@ class CorporateServiceController extends Controller 'specialities.exclusions.rules' ]) ->first(); - // $service = CorporateServiceConfigResource::make($corporateService); $specialities = Speciality::get(); @@ -144,7 +156,7 @@ class CorporateServiceController extends Controller { - // return response()->json([$request->msc, $request->name, $request->speciality_id]); + // return response()->json([$request->checked, $request->value, $request->speciality_id]); $corporateService = CorporateService::query() ->where('corporate_id', $corporate_id) @@ -191,53 +203,164 @@ class CorporateServiceController extends Controller $corporateServiceSpeciality = CorporateServiceSpeciality::where('corporate_service_id', $corporateService->id) ->where('speciality_id', $request->speciality_id) + ->with('exclusions.rules') ->first(); - // return ([$corporateServiceSpeciality, $request->msc, $request->name, $request->speciality_id, $request->type]); - - $exclusion = $corporateServiceSpeciality->exclusions()->updateOrCreate([ - 'corporate_id' => $corporate_id, - 'service_code' => $service_code, - ], [ - 'corporate_id' => $corporate_id, - 'service_code' => $service_code, - 'type' => 'speciality', - ]); - + $exclusion = $corporateServiceSpeciality->exclusions()->where('corporate_id', $corporate_id)->where('service_code', $service_code)->first(); + // dd($exclusion); + // ->updateOrCreate([ + // 'corporate_id' => $corporate_id, + // 'service_code' => $service_code, + // ], [ + // 'corporate_id' => $corporate_id, + // 'service_code' => $service_code, + // 'type' => 'speciality', + // ]); if ($request->type == 'msc') { - if ($request->name == 'member' && $request->msc == "1") { - $m = "m"; + + $value_input = $request->value; + $current_msc = $exclusion->rules()->where('name', 'msc')->first()->values ?? null; + + if (!empty($current_msc)) { + + $values = ""; + if ($request->value == 'm' && $request->checked == "1") { + $values = $current_msc . "," . $value_input; + } + + if ($request->value == 's' && $request->checked == "1") { + $values = $current_msc . "," . $value_input; + } + + if ($request->value == 'c' && $request->checked == "1") { + $values = $current_msc . "," . $value_input; + } + + if ($request->value == 'm' && $request->checked == "0") { + $values = str_replace($value_input, "", $current_msc); + $values = str_replace(",,", ",", $values); + $values = trim($values, ","); + } + + if ($request->value == 's' && $request->checked == "0") { + $values = str_replace($value_input, "", $current_msc); + $values = str_replace(",,", ",", $values); + $values = trim($values, ","); + } + + if ($request->value == 'c' && $request->checked == "0") { + $values = str_replace($value_input, "", $current_msc); + $values = str_replace(",,", ",", $values); + $values = trim($values, ","); + } + + $exclusion_rule = $exclusion->rules()->updateOrCreate([ + 'exclusion_id' => $exclusion->id, + 'name' => 'msc', + ], [ + 'name' => 'msc', + 'values' => $values, + ]); } else { - $m = ""; - } + if ($request->value == 'm' && $request->checked == "1") { + $values = $value_input; + } - if ($request->name == 'spouse' && $request->msc == "1") { - $s = "s"; + if ($request->value == 's' && $request->checked == "1") { + $values = $value_input; + } + + if ($request->value == 'c' && $request->checked == "1") { + $values = $value_input; + } + + $exclusion_rule = $exclusion->rules()->updateOrCreate([ + 'exclusion_id' => $exclusion->id, + 'name' => 'msc', + ], [ + 'name' => 'msc', + 'values' => $values, + ]); + } + } + + if ($request->type == 'gender') { + $value_input = $request->value; + $current_gender = $exclusion->rules()->where('name', 'gender')->first()->values ?? null; + + if (!empty($current_gender)) { + $values = ""; + if ($request->value == 'male' && $request->checked == "1") { + $values = $current_gender . "," . $value_input; + } + + if ($request->value == 'female' && $request->checked == "1") { + $values = $current_gender . "," . $value_input; + } + + if ($request->value == 'male' && $request->checked == "0") { + if (substr($current_gender, 0, 4) == "male") { + $values = str_replace($value_input, "", $value_input) . substr($current_gender, 5, 10); + } else { + $values = str_replace($value_input, "", $value_input) . substr($current_gender, 0, 6); + } + } + + if ($request->value == 'female' && $request->checked == "0") { + $values = str_replace($value_input, "", $current_gender); + $values = str_replace(",,", ",", $values); + $values = trim($values, ","); + } + + $exclusion_rule = $exclusion->rules()->updateOrCreate([ + 'exclusion_id' => $exclusion->id, + 'name' => 'gender', + ], [ + 'name' => 'gender', + 'values' => $values, + ]); } else { - $s = ""; + if ($request->value == 'male' && $request->checked == "1") { + $values = $value_input; + } + + if ($request->value == 'female' && $request->checked == "1") { + $values = $value_input; + } + + $exclusion_rule = $exclusion->rules()->updateOrCreate([ + 'exclusion_id' => $exclusion->id, + 'name' => 'gender', + ], [ + 'name' => 'gender', + 'values' => $values, + ]); } + } - if ($request->name == 'child' && $request->msc == "1") { - $c = "c"; - } else { - $c = ""; - } - - $values = $m . $s . $c; - - - - + if ($request->type == "min_age") { $exclusion_rule = $exclusion->rules()->updateOrCreate([ 'exclusion_id' => $exclusion->id, - 'name' => 'msc', + 'name' => 'min_age', ], [ - 'name' => 'msc', - 'values' => $values, + 'name' => 'min_age', + 'values' => $request->value, ]); } + if ($request->type == "max_age") { + $exclusion_rule = $exclusion->rules()->updateOrCreate([ + 'exclusion_id' => $exclusion->id, + 'name' => 'max_age', + ], [ + 'name' => 'max_age', + 'values' => $request->value, + ]); + } + + + $selected_specialities = CorporateServiceSpeciality::query() ->where('corporate_service_id', $corporateService->id) ->where('active', true) @@ -245,6 +368,22 @@ class CorporateServiceController extends Controller ->get() ->pluck('speciality.name', 'speciality.id'); - return response()->json($selected_specialities); + $corporateService = CorporateService::query() + ->where('corporate_id', $corporate_id) + ->where('service_code', $service_code) + ->with([ + 'configs', 'service', + 'specialities' => function ($speciality) { + $speciality->where('active', true); + }, + 'specialities.speciality', + 'specialities.exclusions.rules' + ]) + ->first(); + + return response()->json([ + 'selected_specialities' => $selected_specialities, + 'service' => CorporateServiceConfigResource::make($corporateService), + ]); } } diff --git a/Modules/Internal/Transformers/CorporateServiceConfigResource.php b/Modules/Internal/Transformers/CorporateServiceConfigResource.php index 50b4ed20..3c94db55 100755 --- a/Modules/Internal/Transformers/CorporateServiceConfigResource.php +++ b/Modules/Internal/Transformers/CorporateServiceConfigResource.php @@ -27,21 +27,21 @@ class CorporateServiceConfigResource extends JsonResource 'exclusions' => $this->specialities->map(function ($speciality) { return [ 'speciality_id' => $speciality->speciality_id, - 'rules' => $speciality->exclusions->first()->rules->map( - function ($rule) { - return [ - 'name' => $rule->name, - 'value' => explode(',', $rule->values) - ]; - } - ), + // 'rules' => $speciality->exclusions->first()->rules->map( + // function ($rule) { + // return [ + // 'name' => $rule->name, + // 'value' => explode(',', $rule->values) + // ]; + // } + // ), ]; }), ]; $list_msc = $this->specialities->map(function ($speciality) { - return explode(',', $speciality->exclusions->first()->rules->where('name', 'msc')->first()->values); + return explode(',', $speciality->exclusions->first()->rules->where('name', 'msc')->first()->values ?? ''); })->map(function ($item) { return [ 'm' => in_array('m', $item), @@ -49,16 +49,26 @@ class CorporateServiceConfigResource extends JsonResource 'c' => in_array('c', $item), ]; }); - // $msc = $cek->map(function ($item) { - // return [ - // 'name' => $item, - // 'value' => true - // ]; - // }); - $data['exclusions'] = $data['exclusions']->map(function ($item, $key) use ($list_msc) { + $list_gender = $this->specialities->map(function ($speciality) { + // dd($speciality->exclusions->first()->rules); + return explode(',', $speciality->exclusions->first()->rules->where('name', 'gender')->first()->values ?? ''); + })->map(function ($item) { + return [ + 'male' => in_array('male', $item), + 'female' => in_array('female', $item), + ]; + }); + + $min_age = $this->specialities->map(function ($speciality) { + return $speciality->exclusions->first()->rules->where('name', 'min_age')->first()->values ?? ''; + }); + + $data['exclusions'] = $data['exclusions']->map(function ($item, $key) use ($list_msc, $list_gender, $min_age) { $item['msc'] = $list_msc[$key]; + $item['gender'] = $list_gender[$key]; + $item['min_age'] = $min_age[$key]; return $item; }); diff --git a/frontend/dashboard/src/pages/Corporates/Services/Create.tsx b/frontend/dashboard/src/pages/Corporates/Services/Create.tsx index c2046df5..e99dba6a 100755 --- a/frontend/dashboard/src/pages/Corporates/Services/Create.tsx +++ b/frontend/dashboard/src/pages/Corporates/Services/Create.tsx @@ -1,6 +1,7 @@ import * as Yup from 'yup'; import { yupResolver } from '@hookform/resolvers/yup'; import { + Autocomplete, Box, Card, Checkbox, @@ -49,16 +50,23 @@ export default function Divisions() { }); const [specialities, setSpecialities] = useState([]); + const [plans, setPlans] = useState([]); // console.log('specialities', specialities); useEffect(() => { axios.get('/corporates/' + corporate_id + '/services/' + service_code).then((res) => { setService(res.data.service); + setPlans( + res.data.corporate.plans.map((item: any) => ({ + value: item.code, + label: item.code, + })) + ); setSpecialities(res.data.specialities); setExclusion(res.data.service?.exclusions); }); - }, []); + }, [corporate_id, service_code]); const handleConfigChange = (event: ChangeEvent, service: any) => { axios @@ -98,30 +106,26 @@ export default function Divisions() { event: ChangeEvent, service: any, speciality: any, - name: string, + value: string, type: string ) => { - console.log(event.target.checked, service, speciality, name, type); + console.log(event.target.checked, service, speciality, value, type); axios .post(`/corporates/${corporate_id}/services/${service_code}/specialities/exclusion`, { // service_code: service.service_code, speciality_id: speciality.id, - msc: event.target.checked ? '1' : '0', - name: name, + checked: event.target.checked ? '1' : '0', + value: value, type: type, }) .then((res) => { + console.log('update', res.data); setService({ ...service, - selected_specialities: res.data, + selected_specialities: res.data?.selected_specialities, + exclusions: res.data?.service?.exclusions, }); - setExclusion({ - ...exclusion, - [event.target.name]: event.target.checked, - }); - // let newConfigurations = service.configurations - // newConfigurations[res.data.name] = res.data.value == true }); }; @@ -188,6 +192,33 @@ export default function Divisions() { }, ]; + const [minAge, setMinAge] = useState(''); + const [maxAge, setMaxAge] = useState(''); + + const handleMinAge = (event: ChangeEvent) => { + setMinAge(event.target.value); + }; + + const handleMaxAge = (event: ChangeEvent) => { + setMaxAge(event.target.value); + }; + + const getMinAge = (service: any, speciality: any) => { + let minAge = ''; + if (service.exclusions) { + service.exclusions.map((exclusion: any) => { + if (exclusion.speciality_id == speciality.id) { + minAge = exclusion.min_age; + } + }); + } + + return minAge; + }; + + console.log('minAge', minAge); + console.log('maxAge', maxAge); + console.log('Service _exclusions', service.exclusions); return ( @@ -405,7 +436,7 @@ export default function Divisions() { Specialities - +
Covered @@ -465,15 +496,8 @@ export default function Divisions() { item.speciality_id == row.id && item.msc?.m == '1' )} onChange={(event) => { - handleConfigExclusion( - event, - service, - row, - 'member', - 'msc' - ); + handleConfigExclusion(event, service, row, 'm', 'msc'); }} - name="member" /> } label="Member" @@ -486,15 +510,8 @@ export default function Divisions() { item.speciality_id == row.id && item.msc?.s == '1' )} onChange={(event) => { - handleConfigExclusion( - event, - service, - row, - 'spouse', - 'msc' - ); + handleConfigExclusion(event, service, row, 's', 'msc'); }} - name="spouse" /> } label="Spouse" @@ -507,15 +524,8 @@ export default function Divisions() { item.speciality_id == row.id && item.msc?.c == '1' )} onChange={(event) => { - handleConfigExclusion( - event, - service, - row, - 'child', - 'msc' - ); + handleConfigExclusion(event, service, row, 'c', 'msc'); }} - name="child" /> } label="Child" @@ -527,13 +537,19 @@ export default function Divisions() { + item.speciality_id == row.id && item.gender?.male == '1' + )} onChange={(event) => { - handleConfigChange(event, service); + handleConfigExclusion( + event, + service, + row, + 'male', + 'gender' + ); }} - name="sp_external_doctor_online" /> } label="Male" @@ -541,24 +557,71 @@ export default function Divisions() { + item.speciality_id == row.id && + item.gender?.female == '1' + )} onChange={(event) => { - handleConfigChange(event, service); + handleConfigExclusion( + event, + service, + row, + 'female', + 'gender' + ); }} - name="sp_external_doctor_online" /> } label="Female" /> + - + item.speciality_id == row.id) + // ?.min_age + // } + + onChange={(event) => { + handleMinAge(event); + }} + onKeyDown={(event) => { + if (event.key === 'Enter') { + handleConfigExclusion(event, service, row, minAge, 'min_age'); + } + }} + /> - + { + handleMaxAge(event); + }} + onKeyDown={(event) => { + if (event.key === 'Enter') { + handleConfigExclusion(event, service, row, maxAge, 'max_age'); + } + }} + /> + + + option.label} + style={{ width: 200 }} + renderInput={(params) => ( + + )} + /> ))}