diff --git a/Modules/Internal/Http/Controllers/Api/CorporateController.php b/Modules/Internal/Http/Controllers/Api/CorporateController.php index b9d182ea..d064d0ea 100644 --- a/Modules/Internal/Http/Controllers/Api/CorporateController.php +++ b/Modules/Internal/Http/Controllers/Api/CorporateController.php @@ -77,6 +77,7 @@ class CorporateController extends Controller */ public function store(Request $request) { + $request->validate([ 'code' => 'required|regex:/^[a-zA-Z0-9]+$/', 'name' => 'required', @@ -90,7 +91,6 @@ class CorporateController extends Controller 'policy_stop_service_percentage' => 'required_with:policy_code', 'policy_stop_service_net' => 'required_with:policy_code', ]); - try { DB::beginTransaction(); $corporate_data = $request->all(); @@ -98,7 +98,6 @@ class CorporateController extends Controller $newCorporate = Corporate::create($request->all()); if ($request->has('policy_code') && !empty($request->policy_code)) { - // dd($request->policy_code, 'fuck you'); $newCorporate->policies()->create([ 'code' => $request->policy_code ?? NULL, 'total_premi' => $request->policy_total_premi ?? NULL, @@ -521,4 +520,5 @@ class CorporateController extends Controller break; } } + } diff --git a/Modules/Internal/Http/Controllers/Api/DivisionController.php b/Modules/Internal/Http/Controllers/Api/DivisionController.php index 3584abff..df33f22c 100644 --- a/Modules/Internal/Http/Controllers/Api/DivisionController.php +++ b/Modules/Internal/Http/Controllers/Api/DivisionController.php @@ -91,7 +91,8 @@ class DivisionController extends Controller $request->validate([ 'code' => [ 'required', - Rule::unique('corporate_plans')->where('corporate_id', $corporate_id)->ignore($corporatePlan->id) + // Rule::unique('corporate_plans')->where('corporate_id', $corporate_id)->ignore($corporatePlan->id) + Rule::unique('corporate_divisions')->where('corporate_id', $corporate_id) ], 'name' => 'required' ]); diff --git a/app/Models/Plan.php b/app/Models/Plan.php index 1758a4eb..dab9b882 100644 --- a/app/Models/Plan.php +++ b/app/Models/Plan.php @@ -63,6 +63,7 @@ class Plan extends Model "currency", "max_surgery_reinstatement_days", "max_surgery_periode_days", + "active", ]; protected $hidden = [ diff --git a/frontend/dashboard/src/pages/Corporates/Division/Form.tsx b/frontend/dashboard/src/pages/Corporates/Division/Form.tsx index 2e088d92..dfdde430 100644 --- a/frontend/dashboard/src/pages/Corporates/Division/Form.tsx +++ b/frontend/dashboard/src/pages/Corporates/Division/Form.tsx @@ -64,12 +64,12 @@ export default function CorporatePlanForm({ isEdit, currentCorporatePlan }: Prop const onSubmit = async (data: any) => { if (!isEdit) { await axios - .post('/corporate/' + corporate_id + '/divisions', data) + .post('/corporates/' + corporate_id + '/divisions', data) .then((res) => { enqueueSnackbar('Division created successfully', { variant: 'success' }); }) .then((res) => { - navigate('/corporate/' + corporate_id + '/divisions', { replace: true }); + navigate('/corporates/' + corporate_id + '/divisions', { replace: true }); }) .catch(({ response }) => { if (response.status === 422) { @@ -84,12 +84,12 @@ export default function CorporatePlanForm({ isEdit, currentCorporatePlan }: Prop }); } else { await axios - .put('/corporate/' + corporate_id + '/divisions/' + currentCorporatePlan?.id , data) + .put('/corporates/' + corporate_id + '/divisions/' + currentCorporatePlan?.id , data) .then((res) => { enqueueSnackbar('Division updated successfully', { variant: 'success' }); }) .then((res) => { - navigate('/corporate/' + corporate_id + '/divisions/' , { replace: true }); + navigate('/corporates/' + corporate_id + '/divisions/' , { replace: true }); }) .catch(({ response }) => { enqueueSnackbar('Update Failed : '+ response.data.message, { variant: 'error' }); diff --git a/frontend/dashboard/src/pages/Corporates/Form.tsx b/frontend/dashboard/src/pages/Corporates/Form.tsx index 35d98d8d..ca07ce91 100644 --- a/frontend/dashboard/src/pages/Corporates/Form.tsx +++ b/frontend/dashboard/src/pages/Corporates/Form.tsx @@ -43,6 +43,7 @@ import axios from '../../utils/axios'; import { fCurrency } from '../../utils/formatNumber'; import RHFAutocomplete from '../../components/hook-form/RHFAutocomplete'; import UploadImage from '../../components/UploadImage'; +import { fPostFormat } from '@/utils/formatTime'; const LabelStyle = styled(Typography)(({ theme }) => ({ ...theme.typography.subtitle2, @@ -70,15 +71,82 @@ export default function CorporateForm({ isEdit, currentCorporate }: Props) { const NewCorporateSchema = Yup.object().shape({ name: Yup.string().required('Name is required'), - code: Yup.string().required('Corporate Code is required'), + code: Yup.string().required('Corporate Code is required').test( + 'unique-code', + 'Code must be unique', + async function (value) { + const existingCodes = await getExistingCodes(); + return !existingCodes.includes(value); + } + ), active: Yup.boolean().required('Corporate Status is required'), type: Yup.string().required('Type is required'), + welcome_message: Yup.string().required('Welcome Message is required'), + help_text: Yup.string().required('Help Text is required'), + // policy_code: Yup.string().required('Policy Code is required'), + policy_start: Yup.date().required('Start Date is required'), + policy_end: Yup.date().required('End Date is required').min(Yup.ref('policy_start'), "end date can't be before start date"), + policy_total_premi: Yup.number().required('Deposit Initial Fund is required').min(0), + // linking_rules: Yup.string().required('Link Rules is required'), + policy_minimal_deposit_percentage: + Yup.number() + .typeError("Please enter a valid number") + .required('Percentage Deposit is required') + .min(0, "Minimum atleast 0") + .max(100, "Allowed maximum is 100"), + policy_minimal_alert_percentage: + Yup.number() + .typeError("Please enter a valid number") + .required('Percentage Alert is required') + .min(0, "Minimum atleast 0") + .max(100, "Allowed maximum is 100"), + policy_stop_service_percentage: + Yup.number() + .typeError("Please enter a valid number") + .min(0, "Minimum atleast 0") + .required('Percentage Stop is required') + .test("max", "Total should not exceed 100 %", function(value) { + const { policy_minimal_alert_percentage } = this.parent; + const { policy_minimal_deposit_percentage } = this.parent; + return value == 100 - policy_minimal_alert_percentage- policy_minimal_deposit_percentage; + }), parent_id: Yup.string().when('type', { is: 'subcorporate', then: Yup.string().required('Corporate is required because type is Sub Corporate'), }), }); + async function getExistingCodes() { + // axios + // .get('/corporates/create') + // .then((res) => { + // setCorporateGroups(res.data.corporate_groups); + // }) + // .catch((err) => { + // enqueueSnackbar('Opps, failed to get Corporate Group List', { variant: 'error' }); + // }); + + try { + let response = await axios.get('/corporates'); // get data all corporate + let codeCurrent = "" + if (isEdit){ + let responseCodeCurrent = await axios.get(`/corporates/${currentCorporate?.id}/edit`); // get data current corporate + codeCurrent = responseCodeCurrent.data.code; // get data code corporate current + } + let existingCodes = response.data.data.map(item => item.code); // get data code corporate all + + existingCodes.filter(function(value) { + return value !== codeCurrent; // Menghapus elemen yang bernilai 3 + }); + + console.log(existingCodes) + return existingCodes; + } catch (error) { + console.error(error); + enqueueSnackbar('Failed to fetch existing codes', { variant: 'error' }); + } + } + const defaultValues = useMemo( () => ({ code: currentCorporate?.code || '', @@ -149,7 +217,7 @@ export default function CorporateForm({ isEdit, currentCorporate }: Props) { const [file, setFile] = useState(null); const [save, setSave] = useState(null); - console.log('save', save); + // console.log('save', save); const onSubmit = async (data: FormValuesProps) => { try { @@ -170,11 +238,12 @@ export default function CorporateForm({ isEdit, currentCorporate }: Props) { formData.append('policy_minimal_alert_net', data.policy_minimal_alert_net); formData.append('policy_stop_service_percentage', data.policy_stop_service_percentage); formData.append('policy_stop_service_net', data.policy_stop_service_net); - formData.append('policy_start', data.policy_start); - formData.append('policy_end', data.policy_end); + formData.append('policy_start', fPostFormat(data.policy_start)); + formData.append('policy_end', fPostFormat(data.policy_end)); formData.append('linking_rules', data.linking_rules); - console.log('MOTHERFUCKER', data.linking_rules) + + // console.log('MOTHERFUCKER', data.linking_rules) if (!isEdit) { const response = await axios.post('/corporates', formData); @@ -184,7 +253,7 @@ export default function CorporateForm({ isEdit, currentCorporate }: Props) { } reset(); enqueueSnackbar( - !isEdit ? 'Corporate Created Successfully!' : 'Corporate Udpated Successfully!', + !isEdit ? 'Corporate Created Successfully!' : 'Corporate Updated Successfully!', { variant: 'success' } ); navigate('/corporates');