From a06e4d2f22fc58678caa1feeb7afea757a194bde Mon Sep 17 00:00:00 2001 From: wahyun Date: Wed, 17 Apr 2024 18:28:54 +0700 Subject: [PATCH 1/3] update cluster directory --- src/views/MapMonitoring/index.js | 8 +- src/views/Report/k3/DialogForm.js | 170 +++++++++--------- src/views/Report/k3/index.js | 7 +- .../CreatedProyek/ImportActivity/index.js | 9 +- src/views/SimproV2/Presence/DialogFoto.js | 123 +++++++------ src/views/SimproV2/Presence/index.js | 8 +- 6 files changed, 169 insertions(+), 156 deletions(-) diff --git a/src/views/MapMonitoring/index.js b/src/views/MapMonitoring/index.js index aaa61b5..9b558dd 100644 --- a/src/views/MapMonitoring/index.js +++ b/src/views/MapMonitoring/index.js @@ -15,7 +15,7 @@ import "react-loader-spinner/dist/loader/css/react-spinner-loader.css"; import { ToastContainer, toast } from "react-toastify"; import "react-toastify/dist/ReactToastify.css"; import './MapMonitoring.css'; -import { BASE_SIMPRO_LUMEN_IMAGE, PROYEK_SEARCH } from '../../const/ApiConst'; +import { BASE_SIMPRO_LUMEN_IMAGE_COMPANY } from '../../const/ApiConst'; import DEFAULT_USER_ICON from '../../assets/img/avatars/user.png'; import pinRouteStart from '../../assets/img/map/pin_route_green.png'; import pinRouteEnd from '../../assets/img/map/pin_route_red.png'; @@ -27,8 +27,9 @@ import 'leaflet-control-geocoder/dist/Control.Geocoder.css' import 'leaflet-control-geocoder/dist/Control.Geocoder.js' import moment from 'moment'; import axios from "../../const/interceptorApi"; + const MapMonitoring = ({ ...props }) => { - let role_id = 0, user_id = 0, isLogin = false, token = '', company_id = 0, all_project = null, role_name='', hierarchy=[], user_name=''; + let role_id = 0, user_id = 0, isLogin = false, token = '', company_id = 0, all_project = null, role_name='', hierarchy=[], user_name='', configApp={}; if (props && props.role_id && props.user_id) { role_id = props.role_id; user_id = props.user_id; @@ -40,6 +41,7 @@ const MapMonitoring = ({ ...props }) => { isLogin = props.isLogin; hierarchy = props.hierarchy; user_name = props.user_name; + configApp = props.configApp; } const HEADER = { headers: { @@ -223,7 +225,7 @@ const MapMonitoring = ({ ...props }) => { const pointToLayerUserPoints = (feature, latlng) => { let imgSrc = DEFAULT_USER_ICON; if (feature && feature.properties && feature.properties.image && feature.properties.image !== '') { - imgSrc = `${BASE_SIMPRO_LUMEN_IMAGE}/${feature.properties.image}` + imgSrc = `${BASE_SIMPRO_LUMEN_IMAGE_COMPANY(feature.properties.image, JSON.parse(configApp).company_name, moment(feature.properties.created_at).format('YYYY-MM'))}` } let img = `` let logoMarker = L.divIcon({ diff --git a/src/views/Report/k3/DialogForm.js b/src/views/Report/k3/DialogForm.js index 95640d7..492cf0f 100644 --- a/src/views/Report/k3/DialogForm.js +++ b/src/views/Report/k3/DialogForm.js @@ -1,84 +1,86 @@ -import React, { Component } from 'react' -import { Modal, ModalHeader, ModalBody, ModalFooter } from 'reactstrap'; -import { Button, Form, FormGroup, Label, Input } from 'reactstrap'; -import { Image, Col, Row } from 'antd'; -import 'antd/dist/antd.css'; -import { BASE_SIMPRO_LUMEN_IMAGE } from '../../../const/ApiConst.js'; -export default class DialogForm extends Component { - constructor(props) { - super(props) - this.state = { - id: 0, - url:"", - ready:false, - isParentClick: false, - } - } - - async componentDidMount(){ - this.props.showDialog(this.showDialog); - } - - async componentDidUpdate (){ - if(this.state.isParentClick===true){ - this.setState({ready:false}) - const { dataImage } = this.props - this.setState({ - url:dataImage, - },() => { - this.setState({ready:true}); - }); - this.setState({isParentClick:false}); - } - } - - - showDialog = () => { - this.setState({ isParentClick : true }); - } - - handleCancel = () => { - this.setState({ready:false}) - this.props.closeDialog('cancel', 'none') - } - - renderForm = () => { - const { dataImage } = this.props; - return( -
- - - { - dataImage && dataImage.length > 0 && dataImage.map((item, idx) => - - - - ) - } - - - { !dataImage || (dataImage && dataImage.length < 1) &&
No image available
} -
-
- ) - } - - render() { - return ( - - Lihat Foto Laporan K3 - - {this.state.ready ? - this.renderForm() - : null} - - - - - - ) - } -} +import React, { Component } from 'react' +import { Modal, ModalHeader, ModalBody, ModalFooter } from 'reactstrap'; +import { Button, Form, FormGroup, Label, Input } from 'reactstrap'; +import { Image, Col, Row } from 'antd'; +import 'antd/dist/antd.css'; +import { BASE_SIMPRO_LUMEN_IMAGE_COMPANY } from '../../../const/ApiConst.js'; +import moment from 'moment'; + +export default class DialogForm extends Component { + constructor(props) { + super(props) + this.state = { + id: 0, + url:"", + ready:false, + isParentClick: false, + } + } + + async componentDidMount(){ + this.props.showDialog(this.showDialog); + } + + async componentDidUpdate (){ + if(this.state.isParentClick===true){ + this.setState({ready:false}) + const { dataImage } = this.props + this.setState({ + url:dataImage, + },() => { + this.setState({ready:true}); + }); + this.setState({isParentClick:false}); + } + } + + + showDialog = () => { + this.setState({ isParentClick : true }); + } + + handleCancel = () => { + this.setState({ready:false}) + this.props.closeDialog('cancel', 'none') + } + + renderForm = () => { + const { dataImage, companyName } = this.props; + return( +
+ + + { + dataImage && dataImage.length > 0 && dataImage.map((item, idx) => + + + + ) + } + + + { !dataImage || (dataImage && dataImage.length < 1) &&
No image available
} +
+
+ ) + } + + render() { + return ( + + Lihat Foto Laporan K3 + + {this.state.ready ? + this.renderForm() + : null} + + + + + + ) + } +} diff --git a/src/views/Report/k3/index.js b/src/views/Report/k3/index.js index 4fdc769..a9821de 100644 --- a/src/views/Report/k3/index.js +++ b/src/views/Report/k3/index.js @@ -9,7 +9,7 @@ import { NotificationContainer, NotificationManager } from 'react-notifications' import { Pagination, Tooltip } from 'antd'; import { DatePicker, Select } from 'antd'; import * as XLSX from 'xlsx'; -import { PRESENSI_SEARCH, PROYEK_SEARCH, USERPROYEK_SEARCH, K3_SEARCH, SIMPRO_BASE_IMAGE } from '../../../const/ApiConst.js'; +import { PROYEK_SEARCH, K3_SEARCH } from '../../../const/ApiConst.js'; import { withTranslation } from 'react-i18next'; const { RangePicker } = DatePicker; const { Option } = Select @@ -26,7 +26,7 @@ const LENGTH_DATA = 10 class index extends Component { constructor(props) { - let role_id = 0, user_id = 0, isLogin = false, token = '', company_id = 0, all_project = null, role_name = '', hierarchy = [], user_name = ''; + let role_id = 0, user_id = 0, isLogin = false, token = '', company_id = 0, all_project = null, role_name = '', hierarchy = [], user_name = '', configApp={}; if (props && props.role_id && props.user_id) { role_id = props.role_id; user_id = props.user_id; @@ -38,6 +38,7 @@ class index extends Component { isLogin = props.isLogin; hierarchy = props.hierarchy; user_name = props.user_name; + configApp = props.configApp; } super(props) this.config = { @@ -77,6 +78,7 @@ class index extends Component { finishSetupOption: false, company_id: company_id, role_name: role_name, + companyName: JSON.parse(configApp).company_name, role_id: role_id, hierarchy: hierarchy } @@ -583,6 +585,7 @@ class index extends Component { closeDialog={this.handleCloseDialog} toggleDialog={() => this.toggleAddDialog} dataImage={this.state.dataImage} + companyName={this.state.companyName} showDialog={showDialog => this.showChildDialog = showDialog} /> diff --git a/src/views/SimproV2/CreatedProyek/ImportActivity/index.js b/src/views/SimproV2/CreatedProyek/ImportActivity/index.js index 3826b17..54de9bd 100644 --- a/src/views/SimproV2/CreatedProyek/ImportActivity/index.js +++ b/src/views/SimproV2/CreatedProyek/ImportActivity/index.js @@ -150,9 +150,6 @@ const ImportActivity = ({ params }) => { setLoading(false) NotificationManager.error('file harus dalam format .xlsx', 'Failed'); } - // else{ - // errorHandler() - // } return false } @@ -234,7 +231,7 @@ const ImportActivity = ({ params }) => { const saveHandler = async (e) => { setIsMovePage(true); - + setLoading(true); let url = window.location.href; let urlSplitted = url.split('/') const ganttId = urlSplitted[5] @@ -254,9 +251,9 @@ const ImportActivity = ({ params }) => { if (result.data.code == 200) { const timestamp = Date.now(); const newTimestamp = timestamp + 60000; - window.location = urlSplitted[0] + '//' + urlSplitted[2] + `/#/projects/` + ganttId + '/' + result.data.projectId + '/' + newTimestamp + '/gantt' setLoading(false) - }else{ + window.location = urlSplitted[0] + '//' + urlSplitted[2] + `/#/projects/` + ganttId + '/' + result.data.projectId + '/' + newTimestamp + '/gantt' + } else { setLoading(false) } setLoading(false) diff --git a/src/views/SimproV2/Presence/DialogFoto.js b/src/views/SimproV2/Presence/DialogFoto.js index 680a0cf..c654aa4 100644 --- a/src/views/SimproV2/Presence/DialogFoto.js +++ b/src/views/SimproV2/Presence/DialogFoto.js @@ -1,59 +1,64 @@ -import React, { useEffect, useState } from 'react' -import { Modal, ModalHeader, ModalBody, ModalFooter } from 'reactstrap'; -import { Button } from 'reactstrap'; -import { Image } from 'antd' -import { BASE_SIMPRO_LUMEN_IMAGE } from '../../../const/ApiConst'; -import 'antd/dist/antd.css'; -import { useTranslation } from 'react-i18next'; - - -const DialogFoto = ({ openDialog, closeDialog, toggleDialog, dataImage }) => { - - const [urlImage, setUrlImage] = useState("") - const [dataReady, setDataReady] = useState(false) - const [hrName, setHrName] = useState(false) - const { t } = useTranslation() - useEffect(() => { - if (dataImage && dataImage != null) { - setUrlImage(dataImage.url); - setHrName(dataImage.name); - setDataReady(true) - } - }, [dataImage]) - - useEffect(() => { - if (!openDialog) { - setUrlImage("") - setHrName("") - setDataReady(false) - } - }, [openDialog]) - - const renderModalBody = () => { - return ( -
-
- -
-
- ) - } - - return ( - - {t('imageCheck')} | {t('nameHR')} {hrName} - - {dataReady ? renderModalBody() : null} - - - - - - ) - -} - -export default DialogFoto; \ No newline at end of file +import React, { useEffect, useState } from 'react' +import { Modal, ModalHeader, ModalBody, ModalFooter } from 'reactstrap'; +import { Button } from 'reactstrap'; +import { Image } from 'antd' +import { BASE_SIMPRO_LUMEN_IMAGE_COMPANY } from '../../../const/ApiConst'; +import 'antd/dist/antd.css'; +import { useTranslation } from 'react-i18next'; +import moment from 'moment'; + +const DialogFoto = ({ openDialog, closeDialog, toggleDialog, dataImage, configApp, role_name }) => { + + const [urlImage, setUrlImage] = useState("") + const [dateImage, setDateImage] = useState("") + const [companyName, setCompanyName] = useState("") + const [dataReady, setDataReady] = useState(false) + const [hrName, setHrName] = useState(false) + const { t } = useTranslation() + + useEffect(() => { + if (dataImage && dataImage != null) { + setCompanyName(role_name !== "Super Admin" ? JSON.parse(configApp).company_name : "undifined"); + setUrlImage(dataImage.url); + setDateImage(dataImage.date); + setHrName(dataImage.name); + setDataReady(true) + } + }, [dataImage]) + + useEffect(() => { + if (!openDialog) { + setUrlImage("") + setHrName("") + setDataReady(false) + } + }, [openDialog]) + + const renderModalBody = () => { + return ( +
+
+ +
+
+ ) + } + + return ( + + {t('imageCheck')} | {t('nameHR')} {hrName} + + {dataReady ? renderModalBody() : null} + + + + + + ) + +} + +export default DialogFoto; diff --git a/src/views/SimproV2/Presence/index.js b/src/views/SimproV2/Presence/index.js index 5f1a592..93bb6fe 100644 --- a/src/views/SimproV2/Presence/index.js +++ b/src/views/SimproV2/Presence/index.js @@ -12,7 +12,7 @@ import { useTranslation } from 'react-i18next'; const { RangePicker } = DatePicker; const Index = ({ params, ...props }) => { - let role_id = 0, user_id = 0, isLogin = false, token = '', company_id = 0, all_project = null, role_name = '', hierarchy = [], user_name = ''; + let role_id = 0, user_id = 0, isLogin = false, token = '', company_id = 0, all_project = null, role_name = '', hierarchy = [], user_name = '', configApp = {}; if (props && props.role_id && props.user_id) { role_id = props.role_id; user_id = props.user_id; @@ -24,6 +24,7 @@ const Index = ({ params, ...props }) => { isLogin = props.isLogin; hierarchy = props.hierarchy; user_name = props.user_name; + configApp = props.configApp; } const [dataTable, setDatatable] = useState([]) @@ -129,7 +130,8 @@ const Index = ({ params, ...props }) => { let dataRes = result.data.data let dataImage = { name, - url: dataRes.image + url: dataRes.image, + date: dataRes.created_at } await setDataImage(dataImage) setOpenImage(true) @@ -321,6 +323,8 @@ const Index = ({ params, ...props }) => { closeDialog={closeDialogImage} toggleDialog={toggleDialogImage} dataImage={dataImage} + configApp={configApp} + role_name={role_name} /> From 3839ec7159d2ccc97a0495b9c2fed10f904740ba Mon Sep 17 00:00:00 2001 From: wahyun Date: Thu, 18 Apr 2024 10:44:37 +0700 Subject: [PATCH 2/3] typo in condition project search --- src/views/SimproV2/CreatedProyek/index.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/views/SimproV2/CreatedProyek/index.js b/src/views/SimproV2/CreatedProyek/index.js index e5f9a50..e340551 100644 --- a/src/views/SimproV2/CreatedProyek/index.js +++ b/src/views/SimproV2/CreatedProyek/index.js @@ -435,7 +435,7 @@ const CreatedProyek = ({ params, ...props }) => { { name: "company_id", logic_operator: "like", value: parseInt(company_id), operator: "AND" } ); } - if (role_name !== 'Super Admin' && all_project === 'null') { + if (role_name !== 'Super Admin' && all_project === 'false') { payload.columns.push( { name: "created_by_id", logic_operator: "IN", value: [JSON.parse(hierarchy)], operator: "AND" } ); From ee1417f75cc89534967304225035ac71129fe7b2 Mon Sep 17 00:00:00 2001 From: gempar27 Date: Tue, 23 Apr 2024 14:33:39 +0700 Subject: [PATCH 3/3] fix project information --- .../SimproV2/CreatedProyek/DialogFormProyek.js | 4 ++-- src/views/SimproV2/CreatedProyek/index.js | 13 ++++++++----- 2 files changed, 10 insertions(+), 7 deletions(-) diff --git a/src/views/SimproV2/CreatedProyek/DialogFormProyek.js b/src/views/SimproV2/CreatedProyek/DialogFormProyek.js index bb4feaa..22834f2 100644 --- a/src/views/SimproV2/CreatedProyek/DialogFormProyek.js +++ b/src/views/SimproV2/CreatedProyek/DialogFormProyek.js @@ -281,7 +281,7 @@ const DialogFormProyek = ({ currency_symbol: currencySymbol, currency_code: currencyCode, currency_name: currencyName, - company_id: role_name != "Super Admin" ? parseInt(company_id) : parseInt(scompany_id) + company_id: role_name !== "Super Admin" ? parseInt(company_id) : parseInt(scompany_id) }; data.projectCharter = { checklist, issue, potentialRisks, participants, milestones, approval }; data.imageStructureOrg = organization ? organization : null; @@ -312,7 +312,7 @@ const DialogFormProyek = ({ currency_symbol: currencySymbol, currency_code: currencyCode, currency_name: currencyName, - company_id: role_name != "Super Admin" ? parseInt(company_id) : parseInt(scompany_id) + company_id: role_name !== "Super Admin" ? parseInt(company_id) : parseInt(scompany_id) }; data.projectCharter = { checklist, issue, potentialRisks, participants, milestones, approval }; data.imageStructureOrg = organization ? organization : null; diff --git a/src/views/SimproV2/CreatedProyek/index.js b/src/views/SimproV2/CreatedProyek/index.js index e340551..7a73855 100644 --- a/src/views/SimproV2/CreatedProyek/index.js +++ b/src/views/SimproV2/CreatedProyek/index.js @@ -203,12 +203,15 @@ const CreatedProyek = ({ params, ...props }) => { handleGetPhaseProject(); handleGetDivisions(); handleGetDataPm(); - if(role_name === 'Super Admin') { - getDataProyekCompany(); - } } }, [openDialogProyek]); + useEffect(() => { + if(role_name === 'Super Admin') { + getDataProyekCompany(); + } + },[]) + useEffect(() => { if (parseInt(role_id) === 44) { getDataProyekByCustomer() @@ -435,7 +438,7 @@ const CreatedProyek = ({ params, ...props }) => { { name: "company_id", logic_operator: "like", value: parseInt(company_id), operator: "AND" } ); } - if (role_name !== 'Super Admin' && all_project === 'false') { + if (role_name !== 'Super Admin' && all_project === 'false' || role_name !== 'Super Admin' && all_project === 'null') { payload.columns.push( { name: "created_by_id", logic_operator: "IN", value: [JSON.parse(hierarchy)], operator: "AND" } ); @@ -1932,7 +1935,7 @@ const CreatedProyek = ({ params, ...props }) => { dataDivisions={dataDivisions} dataPM={dataPm} projectImage={image} - company_id={companyId} + company_id={company_id} role_name={role_name} companyList={companyList} token={token}