menambah validasi saat input corporate

This commit is contained in:
2023-04-18 15:28:54 +07:00
parent 85f7eeda18
commit 0d73222a04
5 changed files with 84 additions and 13 deletions

View File

@@ -77,6 +77,7 @@ class CorporateController extends Controller
*/ */
public function store(Request $request) public function store(Request $request)
{ {
$request->validate([ $request->validate([
'code' => 'required|regex:/^[a-zA-Z0-9]+$/', 'code' => 'required|regex:/^[a-zA-Z0-9]+$/',
'name' => 'required', 'name' => 'required',
@@ -90,7 +91,6 @@ class CorporateController extends Controller
'policy_stop_service_percentage' => 'required_with:policy_code', 'policy_stop_service_percentage' => 'required_with:policy_code',
'policy_stop_service_net' => 'required_with:policy_code', 'policy_stop_service_net' => 'required_with:policy_code',
]); ]);
try { try {
DB::beginTransaction(); DB::beginTransaction();
$corporate_data = $request->all(); $corporate_data = $request->all();
@@ -98,7 +98,6 @@ class CorporateController extends Controller
$newCorporate = Corporate::create($request->all()); $newCorporate = Corporate::create($request->all());
if ($request->has('policy_code') && !empty($request->policy_code)) { if ($request->has('policy_code') && !empty($request->policy_code)) {
// dd($request->policy_code, 'fuck you');
$newCorporate->policies()->create([ $newCorporate->policies()->create([
'code' => $request->policy_code ?? NULL, 'code' => $request->policy_code ?? NULL,
'total_premi' => $request->policy_total_premi ?? NULL, 'total_premi' => $request->policy_total_premi ?? NULL,
@@ -521,4 +520,5 @@ class CorporateController extends Controller
break; break;
} }
} }
} }

View File

@@ -91,7 +91,8 @@ class DivisionController extends Controller
$request->validate([ $request->validate([
'code' => [ 'code' => [
'required', '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' 'name' => 'required'
]); ]);

View File

@@ -63,6 +63,7 @@ class Plan extends Model
"currency", "currency",
"max_surgery_reinstatement_days", "max_surgery_reinstatement_days",
"max_surgery_periode_days", "max_surgery_periode_days",
"active",
]; ];
protected $hidden = [ protected $hidden = [

View File

@@ -64,12 +64,12 @@ export default function CorporatePlanForm({ isEdit, currentCorporatePlan }: Prop
const onSubmit = async (data: any) => { const onSubmit = async (data: any) => {
if (!isEdit) { if (!isEdit) {
await axios await axios
.post('/corporate/' + corporate_id + '/divisions', data) .post('/corporates/' + corporate_id + '/divisions', data)
.then((res) => { .then((res) => {
enqueueSnackbar('Division created successfully', { variant: 'success' }); enqueueSnackbar('Division created successfully', { variant: 'success' });
}) })
.then((res) => { .then((res) => {
navigate('/corporate/' + corporate_id + '/divisions', { replace: true }); navigate('/corporates/' + corporate_id + '/divisions', { replace: true });
}) })
.catch(({ response }) => { .catch(({ response }) => {
if (response.status === 422) { if (response.status === 422) {
@@ -84,12 +84,12 @@ export default function CorporatePlanForm({ isEdit, currentCorporatePlan }: Prop
}); });
} else { } else {
await axios await axios
.put('/corporate/' + corporate_id + '/divisions/' + currentCorporatePlan?.id , data) .put('/corporates/' + corporate_id + '/divisions/' + currentCorporatePlan?.id , data)
.then((res) => { .then((res) => {
enqueueSnackbar('Division updated successfully', { variant: 'success' }); enqueueSnackbar('Division updated successfully', { variant: 'success' });
}) })
.then((res) => { .then((res) => {
navigate('/corporate/' + corporate_id + '/divisions/' , { replace: true }); navigate('/corporates/' + corporate_id + '/divisions/' , { replace: true });
}) })
.catch(({ response }) => { .catch(({ response }) => {
enqueueSnackbar('Update Failed : '+ response.data.message, { variant: 'error' }); enqueueSnackbar('Update Failed : '+ response.data.message, { variant: 'error' });

View File

@@ -43,6 +43,7 @@ import axios from '../../utils/axios';
import { fCurrency } from '../../utils/formatNumber'; import { fCurrency } from '../../utils/formatNumber';
import RHFAutocomplete from '../../components/hook-form/RHFAutocomplete'; import RHFAutocomplete from '../../components/hook-form/RHFAutocomplete';
import UploadImage from '../../components/UploadImage'; import UploadImage from '../../components/UploadImage';
import { fPostFormat } from '@/utils/formatTime';
const LabelStyle = styled(Typography)(({ theme }) => ({ const LabelStyle = styled(Typography)(({ theme }) => ({
...theme.typography.subtitle2, ...theme.typography.subtitle2,
@@ -70,15 +71,82 @@ export default function CorporateForm({ isEdit, currentCorporate }: Props) {
const NewCorporateSchema = Yup.object().shape({ const NewCorporateSchema = Yup.object().shape({
name: Yup.string().required('Name is required'), 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'), active: Yup.boolean().required('Corporate Status is required'),
type: Yup.string().required('Type 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', { parent_id: Yup.string().when('type', {
is: 'subcorporate', is: 'subcorporate',
then: Yup.string().required('Corporate is required because type is Sub Corporate'), 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( const defaultValues = useMemo(
() => ({ () => ({
code: currentCorporate?.code || '', code: currentCorporate?.code || '',
@@ -149,7 +217,7 @@ export default function CorporateForm({ isEdit, currentCorporate }: Props) {
const [file, setFile] = useState(null); const [file, setFile] = useState(null);
const [save, setSave] = useState(null); const [save, setSave] = useState(null);
console.log('save', save); // console.log('save', save);
const onSubmit = async (data: FormValuesProps) => { const onSubmit = async (data: FormValuesProps) => {
try { 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_minimal_alert_net', data.policy_minimal_alert_net);
formData.append('policy_stop_service_percentage', data.policy_stop_service_percentage); 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_stop_service_net', data.policy_stop_service_net);
formData.append('policy_start', data.policy_start); formData.append('policy_start', fPostFormat(data.policy_start));
formData.append('policy_end', data.policy_end); formData.append('policy_end', fPostFormat(data.policy_end));
formData.append('linking_rules', data.linking_rules); formData.append('linking_rules', data.linking_rules);
console.log('MOTHERFUCKER', data.linking_rules)
// console.log('MOTHERFUCKER', data.linking_rules)
if (!isEdit) { if (!isEdit) {
const response = await axios.post('/corporates', formData); const response = await axios.post('/corporates', formData);
@@ -184,7 +253,7 @@ export default function CorporateForm({ isEdit, currentCorporate }: Props) {
} }
reset(); reset();
enqueueSnackbar( enqueueSnackbar(
!isEdit ? 'Corporate Created Successfully!' : 'Corporate Udpated Successfully!', !isEdit ? 'Corporate Created Successfully!' : 'Corporate Updated Successfully!',
{ variant: 'success' } { variant: 'success' }
); );
navigate('/corporates'); navigate('/corporates');