import React, { Component } from "react";
import { Container, Row, Col } from "react-bootstrap";
import { makeStyles, createMuiTheme, MuiThemeProvider } from '@material-ui/core/styles';
import SearchIcon from '@material-ui/icons/Search';
import Images from "../../../assets/Images";
import UploadFile from "../../../library/Upload";
import MUIDataTable from "mui-datatables";
import CreateUnitBisnis from "./CreateUnitBisnis";
import ReactTooltip from 'react-tooltip';
import MuiAlert from '@material-ui/lab/Alert';
import { TextField, InputBase, Snackbar, withStyles, LinearProgress, Tooltip } from "@material-ui/core";
import { ExcelRenderer } from 'react-excel-renderer';
import api from "../../../api";
import { isThisSecond } from "date-fns";
import PopUpFailedSave from "../../../library/PopUpFailedSave";
import PopUpDelete from "../../../library/PopUpDelete";
import Constant from "../../../library/Constant";
import { css } from "@emotion/core";
import PropagateLoader from "react-spinners/PropagateLoader"
const LightTooltip = withStyles((theme) => ({
tooltip: {
backgroundColor: theme.palette.common.white,
color: 'rgba(0, 0, 0, 0.87)',
boxShadow: theme.shadows[1],
fontSize: 11,
},
}))(Tooltip);
var ct = require("../../../library/CustomTable");
const getMuiTheme = () => createMuiTheme(ct.customTable());
const options = ct.customOptions();
const options2 = ct.customOptions2();
const Alert = withStyles({
})((props) => );
export default class UnitBisnis extends Component {
constructor(props) {
super(props)
this.state = {
visibleCreate: false,
visibleEdit: false,
visibleDelete: false,
dataTable: [],
listData: [],
data: [],
search: "",
visibleUnitBisnis: true,
cols: null,
rows: null,
dataLoaded: false,
popupError: false,
alert: false,
tipeAlert: '',
messageAlert: '',
create: false,
edit: false,
delete: false,
load: false,
judul: '',
rowData: [],
unitBisnisName: '',
// visibleLoad: true,
loading: false,
sizeUpload: "1"
}
this.fileHandler = this.fileHandler.bind(this);
}
fileHandler = (event) => {
let fileObj = event
ExcelRenderer(fileObj, (err, resp) => {
// console.log(resp)
if (err) {
console.log(err);
}
else {
let isi = resp.rows.slice(3)
console.log(isi);
let payload = []
isi.map((item, index) => {
if (item.length > 0) {
payload.push({
id: index + 1,
business_unit_name: item[0] === undefined ? "" : item[0],
start_date: item[1] == undefined ? "" : item[1],
end_date: item[2] === undefined ? "" : item[2],
})
}
})
let body = {
business_unit: payload
}
console.log(resp.rows[1])
this.setState({ payload: body, buttonError: false, judul: resp.rows[1][0] })
}
});
}
checkUpload() {
api.create().checkUploadUnitBisnis(this.state.payload).then(response => {
// console.log(response)
let dataRow = []
if (response.data) {
if (response.ok) {
if (response.data.status === "success") {
dataRow = response.data.data.map((item, index) => {
return [
item.business_unit_name,
item.start_date,
item.end_date,
item.error
]
})
let columns = [
{
name: "Business Unit",
options: {
customBodyRender: (val, tableMeta) => {
let check = null
if (tableMeta.rowData[3] != null) {
check = tableMeta.rowData[3].findIndex((val) => val.field.includes('business_unit_name'))
if (check > -1) {
this.setState({ buttonError: true })
}
}
return (
{tableMeta.rowData[3] != null && check > -1 ?
-1 ? "red" : 'black' }}>{val === "" ? "Empty" : val}
:
-1 ? "red" : 'black' }}>{val === "" ? "Empty" : val}
}
);
}
}
},
{
name: "Valid From",
options: {
customBodyRender: (val, tableMeta) => {
let check = null
if (tableMeta.rowData[3] != null) {
check = tableMeta.rowData[3].findIndex((val) => val.field.includes('start_date'))
if (check > -1) {
this.setState({ buttonError: true })
}
}
return (
{tableMeta.rowData[3] != null && check > -1 ?
-1 ? "red" : 'black' }}>{val === "" ? "Empty" : val}
:
-1 ? "red" : 'black' }}>{val === "" ? "Empty" : val}
}
);
}
}
},
{
name: "Valid To",
options: {
customBodyRender: (val, tableMeta) => {
let check = null
if (tableMeta.rowData[3] != null) {
check = tableMeta.rowData[3].findIndex((val) => val.field.includes('end_date'))
if (check > -1) {
this.setState({ buttonError: true })
}
}
return (
{tableMeta.rowData[3] != null && check > -1 ?
-1 ? "red" : 'black' }}>{val === "" ? "Empty" : val}
:
-1 ? "red" : 'black' }}>{val === "" ? "Empty" : val}
}
);
}
}
},
{
name: "",
options: {
display: false
}
}
]
// console.log(dataRow);
this.setState({
dataLoaded: true,
cols: columns,
rows: dataRow, visibleUpload: false,
visibleUnitBisnis: false
});
} 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")) {
setTimeout(() => {
localStorage.removeItem(Constant.TOKEN)
window.location.reload();
}, 1000);
}
})
}
} else {
this.setState({ alert: true, messageAlert: response.data.message, tipeAlert: 'error' })
}
} else {
this.setState({
dataLoaded: false,
alert: true, messageAlert: response.problem, tipeAlert: 'error'
});
}
})
}
componentDidMount() {
this.getData()
this.getPermission()
this.getSizeUpload()
}
getSizeUpload(){
let body = {
group: 'MAX_FILE_SIZE',
company_id: 0,
type: 'MAX_FILE_SIZE'
}
api.create().getAllSettingByType(body).then(response => {
// console.log(response);
if (response.data) {
if (response.data.status === "success") {
this.setState({
sizeUpload: response.data.data[0] ? response.data.data[0].value === undefined ? "1" : response.data.data[0].value : "1"
})
}
}
})
}
getPermission() {
let payload = {
menu: "business unit"
}
api.create().getPermission(payload).then(response => {
// console.log(response)
if (response.data) {
if (response.data.status === "success") {
this.setState({
create: response.data.data.create,
edit: response.data.data.edit,
delete: response.data.data.delete,
load: true
})
} else {
this.setState({
load: true
})
}
} else {
this.setState({ load: true })
}
})
}
getData() {
this.setState({loading: true})
api.create().getUnitBisnis().then((response) => {
// console.log(response)
if (response.data) {
if (response.ok) {
if (response.data.status == 'success') {
let data = response.data.data
let listData = data.sort((a, b) => a.business_unit_id - b.business_unit_id).map((item, index) => {
return [index, item.business_unit_id, item.business_unit_name, item.status]
})
this.setState({ dataTable: listData, listData: response.data.data }, () => {
setTimeout(() => {
this.setState({loading: false})
}, 2000);
})
} else {
this.setState({ alert: true, messageAlert: response.data.message, tipeAlert: 'warning', loading: false }, () => {
if (response.data.message.includes("Someone Logged In") || response.data.message.includes("Token Expired")) {
setTimeout(() => {
localStorage.removeItem(Constant.TOKEN)
window.location.reload();
}, 1000);
}
})
}
} else {
this.setState({ alert: true, messageAlert: response.data.message, tipeAlert: 'error', loading: false })
}
} else {
this.setState({ alert: true, messageAlert: response.problem, tipeAlert: 'error', loading: false })
}
})
}
openPopUp(rowData, type) {
if (type === 'edit') {
this.setState({
rowData: rowData,
visibleEdit: true
})
} else if (type === 'delete') {
this.setState({
rowData: rowData,
unitBisnisName: String(rowData[2]),
visibleDelete: true
})
} else {
this.setState({
rowData: rowData,
visibleCreate: true
})
}
}
handleInputChange(e) {
this.setState({ search: e })
let body = {
"keyword": e
}
api.create().searchUnitBisnis(body).then(response => {
// console.log(response.data);
if (response.data) {
if (response.ok) {
if (response.data.status == 'success') {
let data = response.data.data
let listData = data.map((item, index) => {
return [index, item.business_unit_id, item.business_unit_name, item.status]
})
this.setState({ dataTable: listData, listData: response.data.data })
} 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")) {
setTimeout(() => {
localStorage.removeItem(Constant.TOKEN)
window.location.reload();
}, 1000);
}
})
}
} else {
this.setState({ alert: true, messageAlert: response.data.message, tipeAlert: 'error' })
}
} else {
this.setState({ alert: true, messageAlert: response.problem, tipeAlert: 'error' })
}
})
}
updateUnitBisnis = (payload) => {
this.setState({ visibleEdit: false })
api.create().updateUnitBisnis(payload).then(response => {
if (response.data) {
if (response.ok) {
if (response.data.status == 'success') {
this.getData()
this.setState({ alert: true, messageAlert: response.data.message, tipeAlert: 'success' })
} 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")) {
setTimeout(() => {
localStorage.removeItem(Constant.TOKEN)
window.location.reload();
}, 1000);
}
})
}
} else {
this.setState({ alert: true, messageAlert: response.data.message, tipeAlert: 'error' })
}
} else {
this.setState({ alert: true, messageAlert: response.problem, tipeAlert: 'error' })
}
})
}
createUnitBisnis = (payload) => {
this.setState({ visibleCreate: false })
api.create().createUnitBisnis(payload).then(response => {
if (response.data) {
if (response.ok) {
if (response.data.status == 'success') {
this.getData()
this.setState({ alert: true, messageAlert: response.data.message, tipeAlert: 'success' })
} 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")) {
setTimeout(() => {
localStorage.removeItem(Constant.TOKEN)
window.location.reload();
}, 1000);
}
})
}
} else {
this.setState({ alert: true, messageAlert: response.data.message, tipeAlert: 'error' })
}
} else {
this.setState({ alert: true, messageAlert: response.problem, tipeAlert: 'error' })
}
})
}
downloadFile = async () => {
let res = await fetch(
`${process.env.REACT_APP_URL_MAIN_BE}/public/attachment/download_file?fileName=BusinessUnitTemplate&&fileType=xlsx`
)
res = await res.blob()
console.log(res)
if (res.size > 0) {
let url = window.URL.createObjectURL(res);
let a = document.createElement('a');
a.href = url;
a.download = 'Template Business Unit.xlsx';
a.click();
}
}
downloadDataTable = async () => {
let res = await fetch(
`${process.env.REACT_APP_URL_MAIN_BE}/public/business_unit/export_business_unit`
)
res = await res.blob()
console.log(res)
if (res.size > 0) {
let url = window.URL.createObjectURL(res);
let a = document.createElement('a');
a.href = url;
a.download = 'Business Unit.xlsx';
a.click();
}
}
uploadUnitBisnis() {
api.create().uploadUnitBisnis(this.state.payload).then(response => {
// console.log(response)
if (response.data) {
if (response.ok) {
if (response.data.status === "success") {
this.getData()
this.setState({ visibleUnitBisnis: true, alert: true, messageAlert: response.data.message, tipeAlert: 'success' })
} 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")) {
setTimeout(() => {
localStorage.removeItem(Constant.TOKEN)
window.location.reload();
}, 1000);
}
})
}
} else {
this.setState({ alert: true, messageAlert: response.data.message, tipeAlert: 'error' })
}
} else {
this.setState({ alert: true, messageAlert: response.problem, tipeAlert: 'error' })
}
})
}
closeAlert() {
this.setState({ alert: false })
}
deleteUnitBisnis(payload) {
// console.log(payload);
let id = String(payload[1])
api.create().deleteUnitBisnis(id).then(response => {
if (response.data) {
if (response.ok) {
if (response.data.status === "success") {
this.getData()
this.setState({ visibleDelete: false, alert: true, messageAlert: response.data.message, tipeAlert: 'success' })
} 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")) {
setTimeout(() => {
localStorage.removeItem(Constant.TOKEN)
window.location.reload();
}, 1000);
}
})
}
} else {
this.setState({ alert: true, messageAlert: response.data.message, tipeAlert: 'error' })
}
} else {
this.setState({ alert: true, messageAlert: response.problem, tipeAlert: 'error' })
}
})
}
render() {
const columns = [{
name: "Action",
options: {
filter: false,
sort: false,
customBodyRender: (val, tableMeta) => {
return (
);
}
}
}, {
name: "ID",
options: {
customBodyRender: (val, tableMeta) => {
return (
{val}
);
}
}
}, {
name: "Business Unit",
options: {
customBodyRender: (val, tableMeta) => {
return (
{val}
);
}
}
}, {
name: "Status",
options: {
customBodyRender: (val, tableMeta) => {
return (
{val}
);
}
}
}]
const data = [
["", "1", "Agribisnis", "Aktif"],
["", "2", "Manufacturing", "Aktif"],
["", "3", "Trading", "Aktif"],
["", "4", "Service", "Non Aktif"],
["", "-", "-", "-"],
]
const loadingComponent = (
);
return (
{/*
*/}
this.closeAlert()}>
this.closeAlert()} severity={this.state.tipeAlert}>
{this.state.messageAlert}
{this.state.visibleUnitBisnis === true ?
this.state.load && (
{/*
this.handleInputChange(e.target.value)}
inputProps={{ 'aria-label': 'naked' }}
/>
*/}
{this.state.loading && loadingComponent}
)
:
{this.state.dataLoaded && (
)}
}
{this.state.visibleCreate && (
this.setState({ visibleCreate: false })}
type={"create"}
createUnitBisnis={this.createUnitBisnis.bind(this)}
/>
)}
{this.state.visibleEdit && (
this.setState({ visibleEdit: false })}
data={this.state.rowData}
updateUnitBisnis={this.updateUnitBisnis.bind(this)}
/>
)}
{this.state.popupError && (
this.setState({ popupError: false })} />
)}
{this.state.visibleUpload && (
{
this.fileHandler(dt)
this.setState({ uploadStatus: 'idle', percentage: '0' })
}}
onUpload={() => {
String(this.state.judul).includes("MASTER") && String(this.state.judul).includes("DATA") && String(this.state.judul).includes("BUSINESS") && String(this.state.judul).includes("UNIT") ?
this.checkUpload() :
this.setState({ alert: true, messageAlert: "Invalid Template", tipeAlert: 'warning' })
}}
/>
)}
{this.state.visibleDelete && (
this.setState({ visibleDelete: false })}
onClickDelete={this.deleteUnitBisnis.bind(this)}
/>
)}
{/* {this.state.visibleLoad && (
)} */}
);
}
}