Commit 25e3c70f authored by Hardiansyah's avatar Hardiansyah

master report type on approval matrix

parent c0f39076
......@@ -165,6 +165,7 @@ const create = (type = "") => {
const getApprovedByAM = () => api.get('approval_matrix/get_all_approver')
const getTypeAM = () => api.get('approval_type/get_all_approval_type')
const getOperatorAM = () => api.get('operator_type/get_all_operator_type')
const getMasterReportType = () => api.get('masterreporttype/get_all_master_report_type')
const getDetailAM = (id) => api.get(`approval_matrix/get_approval_matrix_by_id/${id}`)
const searchAM = (body) => api.post('/approval_matrix/search_approval_matrix', body)
const createAM = (body) => api.post('/approval_matrix/create_approval_matrix', body)
......@@ -633,6 +634,7 @@ const create = (type = "") => {
getApprovedByAM,
getTypeAM,
getOperatorAM,
getMasterReportType,
getDetailAM,
searchAM,
createAM,
......
......@@ -8,6 +8,8 @@ import localeID from "date-fns/locale/id"
import api from "../../api";
import Images from '../../assets/Images';
import Constant from '../../library/Constant';
import AutocompleteField from '../../library/AutocompleteField';
import { fetchMasterReportType } from '../../utils/services';
export default class CreateApprovalMatrix extends Component {
constructor(props) {
......@@ -36,7 +38,12 @@ export default class CreateApprovalMatrix extends Component {
errorStartDate: false,
errorEndDate: false,
msgErrorStartDate: "",
msgErrorEndDate: ""
msgErrorEndDate: "",
master_report_type_id: null,
listMasterReportType: [],
errorMasterReportTypeId: false,
msgErrMasterReportTypeId: '',
}
}
......@@ -44,6 +51,7 @@ export default class CreateApprovalMatrix extends Component {
this.getUserData()
this.getTypeData()
this.getOperatorData()
this.getMasterBudgetType()
let date = format(new Date, 'yyyy-MM-dd')
this.setState({
startDate: date,
......@@ -51,23 +59,37 @@ export default class CreateApprovalMatrix extends Component {
})
}
getMasterBudgetType = async () => {
const { data } = await fetchMasterReportType();
if (data) {
const list = data.map((item) => ({
id: item.master_report_type_id,
name: item.master_report_type_name
}));
this.setState({ listMasterReportType: list });
} else {
this.setState({ listMasterReportType: [] });
}
}
getUserData() {
api.create().getApprovedByAM().then((response) => {
if(response.data) {
if (response.data) {
if (response.ok) {
if (response.data.status == 'success') {
let data = response.data.data
let userData = data.map((item) => {
return {
user_id: item.user_id,
fullname: item.fullname == null? "(NO_NAME)" : item.fullname
fullname: item.fullname == null ? "(NO_NAME)" : item.fullname
}
})
let defaultProps = {
options: userData,
getOptionLabel: (option) => option.fullname,
};
this.setState({ approvedBy: defaultProps, userData: response.data.data})
this.setState({ approvedBy: defaultProps, userData: response.data.data })
} else {
if (response.data.message.includes("Someone Logged In") || response.data.message.includes("Token Expired")) {
this.setState({ alert: true, messageAlert: response.data.message, tipeAlert: 'warning' }, () => {
......@@ -174,7 +196,7 @@ export default class CreateApprovalMatrix extends Component {
// console.log(this.state.startDate)
})
} else if (isDate && type == 'end_date') {
this.setState({ endDate: format(e, 'yyyy-MM-dd')}, () => {
this.setState({ endDate: format(e, 'yyyy-MM-dd') }, () => {
this.clearError()
// console.log(this.state.endDate)
})
......@@ -184,6 +206,15 @@ export default class CreateApprovalMatrix extends Component {
}
handleChangeDropdown = (newValue, name) => {
this.setState(prevState => ({
...prevState,
[name]: newValue,
}), () => {
this.clearError();
})
}
clearError() {
this.setState({
errorOrder: false,
......@@ -197,7 +228,9 @@ export default class CreateApprovalMatrix extends Component {
errorStartDate: false,
errorEndDate: false,
msgErrorStartDate: "",
msgErrorEndDate: ""
msgErrorEndDate: "",
errorMasterReportTypeId: false,
msgErrMasterReportTypeId: '',
})
}
......@@ -206,7 +239,7 @@ export default class CreateApprovalMatrix extends Component {
this.setState({ errorType: true, msgErrType: 'Approval Type Cannot be Empty' })
}
else if (R.isEmpty(this.state.order)) {
this.setState({ errorOrder: true, msgErrOrder: 'Order Cannot be Empty'})
this.setState({ errorOrder: true, msgErrOrder: 'Order Cannot be Empty' })
}
else if (R.isNil(this.state.userId)) {
this.setState({ errorApproved: true, msgErrApproved: 'Approver Name Cannot be Empty' })
......@@ -214,6 +247,9 @@ export default class CreateApprovalMatrix extends Component {
else if (R.isNil(this.state.operatorId)) {
this.setState({ errorOperator: true, msgErrOperator: 'Operator Cannot be Empty. Please Choose - Option' })
}
else if (R.isNil(this.state.master_report_type_id)) {
this.setState({ errorMasterReportTypeId: true, msgErrMasterReportTypeId: 'Master Report Type Cannot be Empty. Please Choose - Option' })
}
else if (R.isNil(this.state.startDate)) {
this.setState({ errorStartDate: true, msgErrorStartDate: 'Valid From Cannot be Empty' })
} else if (R.isNil(this.state.endDate)) {
......@@ -224,6 +260,7 @@ export default class CreateApprovalMatrix extends Component {
"orders": this.state.order,
"user_id": this.state.userId.user_id,
"operator_type_id": this.state.operatorId.operator_type_id,
"master_report_type_id": this.state.master_report_type_id?.id ?? null,
"start_date": this.state.startDate,
"end_date": this.state.endDate
}
......@@ -247,7 +284,7 @@ export default class CreateApprovalMatrix extends Component {
className="btn btn-circle btn-white"
onClick={() => this.props.onClickClose()}
>
<img src={Images.close}/>
<img src={Images.close} />
</button>
</div>
</div>
......@@ -281,7 +318,7 @@ export default class CreateApprovalMatrix extends Component {
<Autocomplete
{...this.state.types}
id="tipe"
onChange={(event, newInputValue) => this.setState({typeId:newInputValue}, ()=> this.clearError())}
onChange={(event, newInputValue) => this.setState({ typeId: newInputValue }, () => this.clearError())}
debug
renderInput={(params) =>
<TextField
......@@ -318,11 +355,12 @@ export default class CreateApprovalMatrix extends Component {
helperText={this.state.msgErrOrder}
// onChange={(e) => this.setState({ order: e.target.value }, () => this.clearError())}
onChange={(e) => {
let coba = String(e.target.value).replace(/[^\d]/g,'');
let coba = String(e.target.value).replace(/[^\d]/g, '');
this.setState({
order: coba
},
() => this.clearError())}
() => this.clearError())
}
// this.handleChange(coba, 'value')}
}
inputProps={{
......@@ -345,7 +383,7 @@ export default class CreateApprovalMatrix extends Component {
<Autocomplete
{...this.state.approvedBy}
id="approvedby"
onChange={(event, newInputValue) => this.setState({userId:newInputValue}, ()=> this.clearError())}
onChange={(event, newInputValue) => this.setState({ userId: newInputValue }, () => this.clearError())}
// disableClearable
debug
renderInput={(params) =>
......@@ -375,7 +413,7 @@ export default class CreateApprovalMatrix extends Component {
id="operator"
// disableClearable
debug
onChange={(event, newInputValue) => this.setState({operatorId:newInputValue}, ()=> this.clearError())}
onChange={(event, newInputValue) => this.setState({ operatorId: newInputValue }, () => this.clearError())}
renderInput={(params) =>
<TextField {...params}
label="Operator"
......@@ -395,7 +433,18 @@ export default class CreateApprovalMatrix extends Component {
</div>
</div>
<div className="column-2">
<div className="margin-top-10px" style={{ padding: 10, borderRadius: 5 }}>
<AutocompleteField
options={this.state.listMasterReportType}
value={this.state.master_report_type_id}
onChange={(event, newValue) => this.handleChangeDropdown(newValue, 'master_report_type_id')}
label="Master Report Type"
minSizeBox={true}
error={this.state.errorMasterReportTypeId}
helperText={this.state.msgErrMasterReportTypeId}
disableClearable={false}
/>
</div>
</div>
</div>
<div className="grid grid-2x grid-mobile-none gap-15px">
......@@ -502,12 +551,12 @@ export default class CreateApprovalMatrix extends Component {
</div>
<div className="border-top grid grid-2x" style={{ height: 56, backgroundColor: '#f5f5f5', paddingLeft: 20, paddingRight: 20 }}>
<div className="column-1" style={{ alignSelf: 'center' }}>
<div onClick={() => this.props.onClickClose()} style={{ width: 102, height: 30, border: 'solid 1px #354960', borderRadius: 5, alignItems: 'center', display: 'flex', justifyContent: 'center', cursor:"pointer" }}>
<div onClick={() => this.props.onClickClose()} style={{ width: 102, height: 30, border: 'solid 1px #354960', borderRadius: 5, alignItems: 'center', display: 'flex', justifyContent: 'center', cursor: "pointer" }}>
<span style={{ color: '#354960', fontSize: 11 }} >Cancel</span>
</div>
</div>
<div className="column-2" style={{display: 'flex', justifyContent: 'flex-end', alignItems: 'center'}}>
<div onClick={() => this.validasi()} style={{ width: 102, height: 30, backgroundColor: '#354960', borderRadius: 5, alignItems: 'center', display: 'flex', justifyContent: 'center', cursor:"pointer" }}>
<div className="column-2" style={{ display: 'flex', justifyContent: 'flex-end', alignItems: 'center' }}>
<div onClick={() => this.validasi()} style={{ width: 102, height: 30, backgroundColor: '#354960', borderRadius: 5, alignItems: 'center', display: 'flex', justifyContent: 'center', cursor: "pointer" }}>
<span style={{ color: '#fff', fontSize: 11 }}>Save</span>
</div>
</div>
......
import React, { Component } from 'react';
import { TextField, Typography } from '@material-ui/core';
import { DateTimePicker, KeyboardDatePicker, DatePicker} from "@material-ui/pickers";
import { DateTimePicker, KeyboardDatePicker, DatePicker } from "@material-ui/pickers";
import Autocomplete from '@material-ui/lab/Autocomplete';
import * as R from 'ramda'
import format from "date-fns/format";
import api from "../../api";
import Images from '../../assets/Images';
import Constant from '../../library/Constant';
import { fetchMasterReportType } from '../../utils/services';
import AutocompleteField from '../../library/AutocompleteField';
import { convertSelect } from '../../library/Utils';
export default class EditApprovalMatrix extends Component {
constructor(props) {
......@@ -35,7 +38,12 @@ export default class EditApprovalMatrix extends Component {
errorStartDate: false,
errorEndDate: false,
msgErrorStartDate: "",
msgErrorEndDate: ""
msgErrorEndDate: "",
master_report_type_id: null,
listMasterReportType: [],
errorMasterReportTypeId: false,
msgErrMasterReportTypeId: '',
}
}
......@@ -49,6 +57,21 @@ export default class EditApprovalMatrix extends Component {
}
}
getMasterBudgetType = async () => {
const { data } = await fetchMasterReportType();
if (data) {
const list = data.map((item) => ({
id: item.master_report_type_id,
name: item.master_report_type_name
}));
this.setState({ listMasterReportType: list });
} else {
this.setState({ listMasterReportType: [] });
}
}
getDetailAM() {
api.create().getDetailAM(this.props.data[1]).then(response => {
console.log(response)
......@@ -66,8 +89,9 @@ export default class EditApprovalMatrix extends Component {
getOperatorId: data.operator_type_id,
status: data.status,
created: data.created,
updated: data.updated === null ? "" : data.updated
}, () => this.getUserData(), this.getTypeData(), this.getOperatorData())
updated: data.updated === null ? "" : data.updated,
master_report_type_id: convertSelect(data?.master_report_type_id, data?.master_report_type_name)
}, () => this.getUserData(), this.getTypeData(), this.getOperatorData(), this.getMasterBudgetType())
} else {
this.setState({ alert: true, messageAlert: response.data.message, tipeAlert: 'warning' }, () => {
if (response.data.message.includes("Someone Logged In") || response.data.message.includes("Token Expired")) {
......@@ -98,7 +122,7 @@ export default class EditApprovalMatrix extends Component {
let userData = data.map((item) => {
return {
user_id: item.user_id,
fullname: item.fullname == null? "(NO_NAME)" : item.fullname
fullname: item.fullname == null ? "(NO_NAME)" : item.fullname
}
})
let index = userData.findIndex((val) => val.user_id == this.state.getUserId)
......@@ -107,7 +131,7 @@ export default class EditApprovalMatrix extends Component {
getOptionLabel: (option) => option.fullname,
};
// this.setState({ approvedBy: defaultProps, userData: response.data.data, getApprovedBy: index == -1 ? userData[0]: userData[index] })
this.setState({ approvedBy: defaultProps, userData: response.data.data, getApprovedBy: index == -1 ? this.setState({ errorApproved: true, msgErrApproved: 'Approver Name has been Inactive.' }): userData[index] })
this.setState({ approvedBy: defaultProps, userData: response.data.data, getApprovedBy: index == -1 ? this.setState({ errorApproved: true, msgErrApproved: 'Approver Name has been Inactive.' }) : userData[index] })
} else {
// alert('Pemberi Persetujuan: ' +response.data.message)
......@@ -119,7 +143,7 @@ export default class EditApprovalMatrix extends Component {
}, 1000);
})
} else {
this.setState({ alert: true, messageAlert: 'Pemberi Persetujuan: ' +response.data.message, tipeAlert: 'error' })
this.setState({ alert: true, messageAlert: 'Pemberi Persetujuan: ' + response.data.message, tipeAlert: 'error' })
}
}
} else {
......@@ -148,7 +172,7 @@ export default class EditApprovalMatrix extends Component {
options: operatorData,
getOptionLabel: (option) => option.operator_type_name,
};
this.setState({ operators: operatorProps, operatorData: response.data.data, getOperators: index == -1 ? operatorData[0]: operatorData[index] })
this.setState({ operators: operatorProps, operatorData: response.data.data, getOperators: index == -1 ? operatorData[0] : operatorData[index] })
} else {
// alert('Operator: ' +response.data.message)
if (response.data.message.includes("Someone Logged In") || response.data.message.includes("Token Expired")) {
......@@ -159,7 +183,7 @@ export default class EditApprovalMatrix extends Component {
}, 1000);
})
} else {
this.setState({ alert: true, messageAlert: 'Operator: ' +response.data.message, tipeAlert: 'error' })
this.setState({ alert: true, messageAlert: 'Operator: ' + response.data.message, tipeAlert: 'error' })
}
}
} else {
......@@ -188,7 +212,7 @@ export default class EditApprovalMatrix extends Component {
options: typeData,
getOptionLabel: (option) => option.approval_type_name,
};
this.setState({ types: typeProps, typeData: response.data.data, getTypes: index == -1 ? typeData[0]: typeData[index] })
this.setState({ types: typeProps, typeData: response.data.data, getTypes: index == -1 ? typeData[0] : typeData[index] })
} else {
// alert('Approval Type: ' +response.data.message)
if (response.data.message.includes("Someone Logged In") || response.data.message.includes("Token Expired")) {
......@@ -199,7 +223,7 @@ export default class EditApprovalMatrix extends Component {
}, 1000);
})
} else {
this.setState({ alert: true, messageAlert: 'Approval Type: ' +response.data.message, tipeAlert: 'error' })
this.setState({ alert: true, messageAlert: 'Approval Type: ' + response.data.message, tipeAlert: 'error' })
}
}
} else {
......@@ -231,6 +255,15 @@ export default class EditApprovalMatrix extends Component {
}
handleChangeDropdown = (newValue, name) => {
this.setState(prevState => ({
...prevState,
[name]: newValue,
}), () => {
this.clearError();
})
}
clearError() {
this.setState({
errorType: false,
......@@ -244,7 +277,9 @@ export default class EditApprovalMatrix extends Component {
errorStartDate: false,
errorEndDate: false,
msgErrorStartDate: "",
msgErrorEndDate: ""
msgErrorEndDate: "",
errorMasterReportTypeId: false,
msgErrMasterReportTypeId: '',
})
}
......@@ -253,7 +288,7 @@ export default class EditApprovalMatrix extends Component {
this.setState({ errorType: true, msgErrType: 'Approval Type Cannot be Empty' })
}
else if (R.isEmpty(this.state.order)) {
this.setState({ errorOrder: true, msgErrOrder: 'Order Cannot be Empty'})
this.setState({ errorOrder: true, msgErrOrder: 'Order Cannot be Empty' })
}
else if (R.isNil(this.state.getApprovedBy)) {
this.setState({ errorApproved: true, msgErrApproved: 'Approver Name Cannot be Empty' })
......@@ -261,6 +296,9 @@ export default class EditApprovalMatrix extends Component {
else if (R.isNil(this.state.getOperators)) {
this.setState({ errorOperator: true, msgErrOperator: 'Operator Cannot be Empty' })
}
else if (R.isNil(this.state.master_report_type_id)) {
this.setState({ errorMasterReportTypeId: true, msgErrMasterReportTypeId: 'Master Report Type Cannot be Empty. Please Choose - Option' })
}
else if (R.isEmpty(this.state.startDate)) {
this.setState({ errorStartDate: true, msgErrorStartDate: 'Valid From Cannot be Empty' })
} else if (R.isEmpty(this.state.endDate)) {
......@@ -273,6 +311,7 @@ export default class EditApprovalMatrix extends Component {
"orders": this.state.order,
"user_id": this.state.getApprovedBy.user_id,
"operator_type_id": this.state.getOperators.operator_type_id,
"master_report_type_id": this.state.master_report_type_id?.id ?? null,
"start_date": this.state.startDate,
"end_date": this.state.endDate
}
......@@ -297,7 +336,7 @@ export default class EditApprovalMatrix extends Component {
className="btn btn-circle btn-white"
onClick={() => this.props.onClickClose()}
>
<img src={Images.close}/>
<img src={Images.close} />
</button>
</div>
</div>
......@@ -333,7 +372,7 @@ export default class EditApprovalMatrix extends Component {
option
debug
id="tipe"
onChange={(event, newInputValue) => this.setState({getTypes:newInputValue}, ()=> this.clearError())}
onChange={(event, newInputValue) => this.setState({ getTypes: newInputValue }, () => this.clearError())}
renderInput={(params) =>
<TextField {...params}
label="Approval Type"
......@@ -365,11 +404,12 @@ export default class EditApprovalMatrix extends Component {
helperText={this.state.msgErrOrder}
// onChange={(e) => this.setState({ order: e.target.value }, () => this.clearError())}
onChange={(e) => {
let coba = String(e.target.value).replace(/[^\d]/g,'');
let coba = String(e.target.value).replace(/[^\d]/g, '');
this.setState({
order: coba
},
() => this.clearError())}
() => this.clearError())
}
// this.handleChange(coba, 'value')}
}
inputProps={{
......@@ -395,7 +435,7 @@ export default class EditApprovalMatrix extends Component {
option
debug
id="approvedby"
onChange={(event, newInputValue) => this.setState({getApprovedBy: newInputValue}, ()=> this.clearError())}
onChange={(event, newInputValue) => this.setState({ getApprovedBy: newInputValue }, () => this.clearError())}
renderInput={(params) =>
<TextField {...params}
label="Approver Name"
......@@ -423,7 +463,7 @@ export default class EditApprovalMatrix extends Component {
option
debug
id="operator"
onChange={(event, newInputValue) => this.setState({getOperators: newInputValue}, ()=> this.clearError())}
onChange={(event, newInputValue) => this.setState({ getOperators: newInputValue }, () => this.clearError())}
renderInput={(params) =>
<TextField {...params}
label="Operator"
......@@ -443,7 +483,18 @@ export default class EditApprovalMatrix extends Component {
</div>
</div>
<div className="column-2">
<div className="margin-top-10px" style={{ padding: 10, borderRadius: 5 }}>
<AutocompleteField
options={this.state.listMasterReportType}
value={this.state.master_report_type_id}
onChange={(event, newValue) => this.handleChangeDropdown(newValue, 'master_report_type_id')}
label="Master Report Type"
minSizeBox={true}
error={this.state.errorMasterReportTypeId}
helperText={this.state.msgErrMasterReportTypeId}
disableClearable={false}
/>
</div>
</div>
</div>
<div className="grid grid-2x grid-mobile-none gap-15px">
......@@ -472,7 +523,7 @@ export default class EditApprovalMatrix extends Component {
}}
error={this.state.errorStartDate}
helperText={this.state.msgErrorStartDate}
style={{padding: 0, margin: 0, width: '100%'}}
style={{ padding: 0, margin: 0, width: '100%' }}
/>
</div>
</div>
......@@ -502,7 +553,7 @@ export default class EditApprovalMatrix extends Component {
color: '#7e8085'
}
}}
style={{padding: 0, margin: 0, width: '100%'}}
style={{ padding: 0, margin: 0, width: '100%' }}
/>
</div>
</div>
......@@ -568,12 +619,12 @@ export default class EditApprovalMatrix extends Component {
</div>
<div className="border-top grid grid-2x" style={{ height: 56, backgroundColor: '#f5f5f5', paddingLeft: 20, paddingRight: 20 }}>
<div className="column-1" style={{ alignSelf: 'center' }}>
<div onClick={() => this.props.onClickClose()} style={{ width: 102, height: 30, border: 'solid 1px #354960', borderRadius: 5, alignItems: 'center', display: 'flex', justifyContent: 'center', cursor:"pointer" }}>
<div onClick={() => this.props.onClickClose()} style={{ width: 102, height: 30, border: 'solid 1px #354960', borderRadius: 5, alignItems: 'center', display: 'flex', justifyContent: 'center', cursor: "pointer" }}>
<span style={{ color: '#354960', fontSize: 11 }} >Cancel</span>
</div>
</div>
<div className="column-2" style={{display: 'flex', justifyContent: 'flex-end', alignItems: 'center'}}>
<div onClick={() => this.validasi()} style={{ width: 102, height: 30, backgroundColor: '#354960', borderRadius: 5, alignItems: 'center', display: 'flex', justifyContent: 'center', cursor:"pointer" }}>
<div className="column-2" style={{ display: 'flex', justifyContent: 'flex-end', alignItems: 'center' }}>
<div onClick={() => this.validasi()} style={{ width: 102, height: 30, backgroundColor: '#354960', borderRadius: 5, alignItems: 'center', display: 'flex', justifyContent: 'center', cursor: "pointer" }}>
<span style={{ color: '#fff', fontSize: 11 }}>Save</span>
</div>
</div>
......
......@@ -27,21 +27,29 @@ const AutocompleteField = ({
multiple = false,
showCheckbox = false,
isLoading = false,
minSizeBox = false,
...props
}) => {
const defaultRenderInput = (params) => (
<TextField
{...params}
label={label}
margin={margin}
style={{ marginTop: 7 }}
margin={minSizeBox ? 'none' : margin}
style={minSizeBox ? {} : { marginTop: 7 }}
disabled={disabled}
required={required}
error={error}
helperText={helperText}
fullWidth
InputLabelProps={minSizeBox ? {
style: {
fontSize: 11,
color: '#7e8085'
}
} : {}}
InputProps={{
...params.InputProps,
style: minSizeBox ? { fontSize: 11 } : {},
endAdornment: (
<>
{isLoading ? (
......
......@@ -73,3 +73,11 @@ export const createMonthData = (item, startIdx, formatFn) => {
});
return months;
};
export const convertSelect = (id, name) => {
const obj = id ? {
id,
name,
} : null
return obj
};
\ No newline at end of file
......@@ -69,3 +69,4 @@ export const fetchHierarkiCreateReportPLMB = (payload) => wrapService(api.create
export const fetchFRID = (payload) => wrapService(api.create().getFRID(payload));
export const fetchDownloadFile = (payload) => wrapService(api.create().createDownloadFile(payload));
export const fetchZipReport = (downloadedFileReportId) => wrapService(api.create().createZipReport(downloadedFileReportId));
export const fetchMasterReportType = () => wrapService(api.create().getMasterReportType());
\ No newline at end of file
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment