import React, { Component } from 'react';
import { TextField, Typography, withStyles, Snackbar } from '@material-ui/core';
import { DatePicker } from '@material-ui/pickers';
import format from "date-fns/format";
import Autocomplete from '@material-ui/lab/Autocomplete';
import MuiAlert from '@material-ui/lab/Alert';
import api from '../../../api';
import * as R from 'ramda'
import { titleCase } from '../../../library/Utils';
import Images from '../../../assets/Images';
import Constant from '../../../library/Constant';
const Alert = withStyles({
})((props) => );
export default class EditMasterDataCAT extends Component {
constructor(props) {
super(props)
this.state = {
loading: true,
company: null,
parent: null,
reportType: null,
weight: '',
alert: false,
tipeAlert: '',
messageAlert: '',
listPeriode: null,
errorWeight: false,
msgErrorWeight: '',
getParent: [],
periode: null,
created_by: '',
updated_by: ''
}
}
componentDidMount() {
this.getInputType()
this.getReportType()
let date = format(new Date, 'yyyy-MM-dd')
this.setState({
startDate: date,
endDate: date
})
this.getPeriode()
this.getDetailUser()
this.getDetailMasterDataCat()
}
getDetailUser() {
let userId = localStorage.getItem(Constant.USER)
api.create().getDetailUser(userId).then((response) => {
if (response.data) {
if (response.ok) {
if (response.data.status === 'success') {
this.setState({ userCompany: response.data.data.company }, () => {
this.getCompanyActive()
})
}
}
}
})
}
getCompanyActive() {
api.create().getPerusahaanActive().then((response) => {
// console.log(response);
if (response.data) {
if (response.data.status === 'success') {
let data = response.data.data
let comID = this.props.data[8]
let companyData = data.map((item) => {
return {
company_id: item.company_id,
company_name: item.company_name,
}
})
let arrayBaru = []
this.state.userCompany.map((item, index) => {
let indexID = companyData.findIndex((val) => val.company_id == item)
if (indexID !== -1) {
arrayBaru.push(companyData[indexID])
}
})
if (arrayBaru.length > 0) {
arrayBaru = arrayBaru.sort((a,b) => a.company_name.localeCompare(b.company_name))
}
let defaultProps = {
options: arrayBaru,
getOptionLabel: (option) => titleCase(option.company_name),
};
let index = arrayBaru.findIndex((val) => val.company_id == comID)
this.setState({ listCompany: defaultProps, company: arrayBaru.length < 1 ? companyData[0] : (index == -1 ? arrayBaru[0] : arrayBaru[index]) })
} 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.problem, tipeAlert: 'error', listCompany: null, company: null })
}
})
}
getPeriode() {
api.create().getPeriodeTransaction().then(response => {
let currentYear = new Date().getFullYear()
console.log(currentYear)
console.log(response)
if (response.data) {
if (response.data.status === "success") {
let data = []
response.data.data.map((item) => {
// if (this.state.isApprover) {
if (item >= 2000 && item <= (Number(currentYear) + 1)) {
data.push(item)
}
// } else {
// if ((item >= 2000) && (item == this.state.lastPeriod || item < this.state.lastPeriod)) {
// data.push(item)
// }
// }
})
let periodeData = data.map((item) => {
return {
periode: item,
}
})
let defaultProps = {
options: periodeData,
getOptionLabel: (option) => option.periode,
};
// let periode = (this.state.lastPeriod == "" ? String(Number(currentYear) + 1) : this.state.lastPeriod)
let periode = String(Number(currentYear))
let index = data.sort((a, b) => a - b).findIndex((val) => val == this.props.data[6])
// console.log(this.props.data)
// console.log(this.state.latestPeriode)
// console.log(periodeData)
// console.log(index)
this.setState({ listPeriode: defaultProps, periode: index === -1 ? periodeData[0] : periodeData[index], loading: false })
}
}
})
}
getParentIR() {
let payload = {
"report_id": 3,
"years": this.state.periode.periode
}
api.create().getParentItemReport(payload).then(response => {
console.log(payload)
console.log(response)
if (response.data) {
if (response.data.status === "success") {
this.setState({ getParent: response.data.data.filter((val) => String(val.type_item_report_name).toLocaleLowerCase() != 'break')})
}
} else {
this.setState({ alert: true, messageAlert: response.problem, tipeAlert: 'error', loading: false })
}
})
}
handleChange(e, item) {
let dataSource = this.state.getParent
let indexID = dataSource.findIndex((val) => val.item_report_id == item.item_report_id)
// console.log(indexID)
if (indexID != -1) {
dataSource[indexID].weight = e.target.value
this.setState({getParent: dataSource}, () => {
console.log(this.state.getParent);
this.clearMessage()
})
}
}
handleReportName(item) {
let indexString = String(item).indexOf('-')
let gantiNama = indexString === -1 ? item : String(item).substr(0, indexString)
return gantiNama
}
validasi(getData) {
console.log(getData)
let jumlah = 0
getData.map((item) => {
jumlah += Number(item.weight)
})
console.log(jumlah)
if ( jumlah > 100/100 ) {
this.setState({ errorWeight: true, msgErrorWeight: 'Weight more than 100%' })
} else if (jumlah < 100/100) {
this.setState({ errorWeight: true, msgErrorWeight: 'Weight less than 100%' })
}
else {
this.addReportItems(getData)
}
}
addReportItems(getData) {
// alert("test")
let simpan = []
getData.map((item) => {
simpan.push({
"report_id": item.report_id,
"item_report_id": item.item_report_id,
"weight": item.weight
})
})
console.log(simpan)
let payload = {
"company_id": this.state.company.company_id,
"company_old": this.props.data[8],
"years": this.state.periode.periode,
"detail": simpan
}
console.log(payload)
this.props.updateReportItems(payload)
}
getInputType() {
api.create().getInputType().then((response) => {
// console.log(response.data)
if (response.data) {
if (response.ok) {
if (response.data.status === 'success') {
let data = response.data.data
let inputData = data.map((item) => {
return {
type_item_report_id: item.type_item_report_id,
type_item_report_name: item.type_item_report_name
}
})
let defaultProps = {
options: inputData,
getOptionLabel: (option) => titleCase(option.type_item_report_name),
};
this.setState({ listInputType: defaultProps, inputData: 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);
}
})
// alert(response.data.message)
}
} else {
this.setState({ alert: true, messageAlert: response.data.message, tipeAlert: 'error' })
}
} else {
this.setState({ alert: true, messageAlert: response.problem, tipeAlert: 'error' })
}
})
}
getReportType() {
api.create().getReportType().then((response) => {
// console.log(response)
if (response.data) {
if (response.ok) {
if (response.data.status === 'success') {
let data = response.data.data
let reportTypeData = data.map((item) => {
return {
report_id: item.report_id,
report_name: item.report_name,
}
})
let defaultProps = {
options: reportTypeData,
getOptionLabel: (option) => titleCase(option.report_name),
};
this.setState({ listReportType: defaultProps, reportTypeData: response.data.data })
} else {
// alert(response.data.message)
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' })
}
})
}
handleDate(item) {
let value = format(item, 'dd MMMM yyyy')
return value
}
getDetailMasterDataCat() {
this.setState({ loading: true })
api.create().getDetailMasterDataCat(this.props.data[8], this.props.data[6]).then((response) => {
// console.log(response);
if (response.data) {
if (response.data.status === "success") {
this.setState({ getParent: response.data.data.filter((val) => String(val.type_item_report_name).toLocaleLowerCase() != 'break'), created_by: response.data.data[0].created, updated_by: response.data.data[0].updated }, () => {
// console.log(this.state.getParent[0].created);
this.setState({ loading: false })
})
} else {
// alert(response.data.message)
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.problem, tipeAlert: 'error' })
}
})
}
clearMessage() {
this.setState({
errorFormula: false, msgErrorFormula: '',
errorWeight: false, msgErrorWeight: ''
})
}
closeAlert() {
this.setState({ alert: false })
}
render() {
return (
this.closeAlert()}>
this.closeAlert()} severity={this.state.tipeAlert}>
{this.state.messageAlert}
this.setState({ company: newInputValue }, () => this.getParentIR(), this.clearMessage())}
disableClearable
style={{ width: 250 }}
renderInput={(params) =>
}
value={this.state.company}
/>
this.setState({ periode: newInputValue, loading: true, previewTable: false }, () => {
this.getParentIR()
})}
disableClearable
renderInput={(params) =>
}
value={this.state.periode}
/>
{this.state.getParent.map((item, index) => {
return (
{`Item Report - ${index + 1}`}
this.handleChange(e, null)}
// value={this.state.order}
value={this.handleReportName(item.item_report_name)}
// error={this.state.errorOrder}
// helperText={this.state.msgErrorOrder}
inputProps={{
min: 0,
style: {
fontSize: 11,
fontFamily: 'Nunito Sans, sans-serif',
}
}}
InputLabelProps={{
style: {
fontSize: 11,
fontFamily: 'Nunito Sans, sans-serif',
color: '#7e8085',
}
}}
>
this.handleChange(e, item)}
inputProps={{
style: {
fontSize: 11,
fontFamily: 'Nunito Sans, sans-serif',
}
}}
InputLabelProps={{
style: {
fontSize: 11,
fontFamily: 'Nunito Sans, sans-serif',
color: '#7e8085',
}
}}
>
)
})}
Created By
{!this.state.loading && : {this.state.created_by}}
Updated By
{!this.state.loading && : {this.state.updated_by}}
)
}
}