From d7fe5cd02b29863d9698b3de820e2d1eb6afc1c7 Mon Sep 17 00:00:00 2001 From: wahyu Date: Wed, 18 Oct 2023 09:16:45 +0700 Subject: [PATCH 01/10] report analysis init --- .../SimproV2/CreatedProyek/ReportAnalysis.js | 26 ++++++++++++++++++ src/views/SimproV2/CreatedProyek/index.js | 27 ++++++++++++++++++- 2 files changed, 52 insertions(+), 1 deletion(-) create mode 100644 src/views/SimproV2/CreatedProyek/ReportAnalysis.js diff --git a/src/views/SimproV2/CreatedProyek/ReportAnalysis.js b/src/views/SimproV2/CreatedProyek/ReportAnalysis.js new file mode 100644 index 0000000..44b6406 --- /dev/null +++ b/src/views/SimproV2/CreatedProyek/ReportAnalysis.js @@ -0,0 +1,26 @@ +import React from 'react' +import { Modal, ModalHeader, ModalBody, ModalFooter } from 'reactstrap'; +import { Button } from 'reactstrap'; +import 'antd/dist/antd.css'; +import './style.css' + + + const ReportAnalysis = ({ openDialog, closeDialog, toggleDialog }) => { + + return ( + <> + + Project + +
Report Analysis
+
+ + + +
+ + ) + +} + +export default ReportAnalysis; diff --git a/src/views/SimproV2/CreatedProyek/index.js b/src/views/SimproV2/CreatedProyek/index.js index 6c2f44b..9e59876 100644 --- a/src/views/SimproV2/CreatedProyek/index.js +++ b/src/views/SimproV2/CreatedProyek/index.js @@ -87,6 +87,7 @@ import AssignHrProject from "./AsignHrProject"; import AssignCustProject from "./AsignCustProject"; import AssignK3Project from "./AssignK3Project"; import ViewProject from "./ViewProject"; +import ReportAnalysis from "./ReportAnalysis"; import { Icon } from "@iconify/react"; // import { Link } from 'react-router-dom'; // import SubProyekComp from './SubProyekComp'; @@ -122,6 +123,7 @@ const CreatedProyek = ({ params, ...props }) => { const [totalPage, setTotalPage] = useState(0); const [openDialog, setOpenDialog] = useState(false); const [openDialogViewDetail, setOpenDialogViewDetail] = useState(false); + const [openDialogRA, setOpenDialogRA] = useState(false); const [openDialogMaterial, setOpenDialogMaterial] = useState(false); const [openDialogTools, setOpenDialogTools] = useState(false); const [openDialogGantt, setOpenDialogGantt] = useState(false); @@ -591,6 +593,12 @@ const CreatedProyek = ({ params, ...props }) => { getProjectDetail(data.id); }; + const handleOpenReport = async (data) => { + setOpenDialogRA(true); + } + const handleCloseReport = async (data) => { + setOpenDialogRA(false); + } const getDataProject = async (proyek_id) => { const url = PROYEK_GET_ID(proyek_id); const result = await axios @@ -849,6 +857,7 @@ const CreatedProyek = ({ params, ...props }) => { const toggleAddDialog = () => setOpenDialog(!openDialog); const toggleAddDialogProyek = () => setOpenDialogProyek(!openDialogProyek); + const toggleAddDialogRA = () => setOpenDialogRA(!openDialogRA); const toggleAddDialogView = () => { if (openDialogViewDetail) { setProjectApproval(null); @@ -1504,6 +1513,12 @@ const CreatedProyek = ({ params, ...props }) => { S Curve +
handleOpenReport(text)}> + + + + Report Analysis +
{/* */}
{ ), [openDialogViewDetail] ); - + const renderReportAnalysis = useMemo( + () => ( + + ), + [openDialogRA] + ); const renderDialogGantt = useMemo( () => ( { Delete this data {ViewProyek} + {renderReportAnalysis} {RenderDialogForm} {RenderDialogFormProyek} {RenderDialogFormMaterial} From fc4b41b6730ec447ba79d9bfecbb1383e9e45a68 Mon Sep 17 00:00:00 2001 From: wahyu Date: Wed, 18 Oct 2023 11:10:45 +0700 Subject: [PATCH 02/10] Report analysis mockup --- .../SimproV2/CreatedProyek/ReportAnalysis.js | 152 +++++++++++++++++- 1 file changed, 149 insertions(+), 3 deletions(-) diff --git a/src/views/SimproV2/CreatedProyek/ReportAnalysis.js b/src/views/SimproV2/CreatedProyek/ReportAnalysis.js index 44b6406..d797a83 100644 --- a/src/views/SimproV2/CreatedProyek/ReportAnalysis.js +++ b/src/views/SimproV2/CreatedProyek/ReportAnalysis.js @@ -1,18 +1,164 @@ -import React from 'react' -import { Modal, ModalHeader, ModalBody, ModalFooter } from 'reactstrap'; +import React, {useState} from 'react' +import { Modal, ModalHeader, ModalBody, ModalFooter, Card, CardHeader, CardBody, Table } from 'reactstrap'; +import { TabContent, TabPane, Nav, NavItem, NavLink, Row, Col, Input } from 'reactstrap'; import { Button } from 'reactstrap'; import 'antd/dist/antd.css'; import './style.css' const ReportAnalysis = ({ openDialog, closeDialog, toggleDialog }) => { + const [activeTab, setActiveTab] = useState('1'); + const [search, setSearch] = useState(''); + const toggle = (tab) => { + if (activeTab !== tab) { + setActiveTab(tab); + } + }; + + const handleSearch = (e) => { + const value = e.target.value; + setSearch(value); + }; return ( <> Project -
Report Analysis
+
+ + + + + + + + + + + + +
+

+ Hello World +

+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
#First NameLast NameUsername
1MarkOtto@mdo
2JacobThornton@fat
3Larrythe Bird@twitter
+
+
+
+ + + + + + + + + + + + + + + + +
+

+ Hello World +

+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
#First NameLast NameUsername
1MarkOtto@mdo
2JacobThornton@fat
3Larrythe Bird@twitter
+
+
+
+
+
From cd698c92f8807c906ee160c31c663fe4773becbe Mon Sep 17 00:00:00 2001 From: wahyu Date: Wed, 18 Oct 2023 11:50:08 +0700 Subject: [PATCH 03/10] fix endline --- .../SimproV2/CreatedProyek/FormAsignHr.js | 492 +++++++++--------- 1 file changed, 246 insertions(+), 246 deletions(-) diff --git a/src/views/SimproV2/CreatedProyek/FormAsignHr.js b/src/views/SimproV2/CreatedProyek/FormAsignHr.js index b02909d..a080fa0 100644 --- a/src/views/SimproV2/CreatedProyek/FormAsignHr.js +++ b/src/views/SimproV2/CreatedProyek/FormAsignHr.js @@ -1,246 +1,246 @@ -import React, { useEffect, useState } from 'react' -import { Modal, ModalHeader, ModalBody, ModalFooter } from 'reactstrap'; -import { Button, Form, FormGroup, Label, Input, Col, Row } from 'reactstrap'; -import { DatePicker, Select } from 'antd'; -import 'antd/dist/antd.css'; -import { formatNumber } from '../../../const/CustomFunc'; -const { Option } = Select - -const FormAsignHr = ({ openDialog, closeDialog, toggleDialog, idTask, dataEdit, dataHr, dataCurrentHr, dataRole }) => { - const [id, setId] = useState(null) - const [typeForm, setTypeForm] = useState('add') - const [user, setUser] = useState(null) - const [rbs, setRbs] = useState("") - const [projectRole, setProjectRole] = useState(null) - const [groupR, setGroupR] = useState("") - const [maxUsed, setMaxUsed] = useState("") - const [standartRate, setStandartRate] = useState("") - const [uomStandartRate, setUomStandartRate] = useState(null) - const [overTimeRate, setOverTimeRate] = useState("") - const [overTimeRateUom, setOverTimeRateUom] = useState(null) - const [costPerUsed, setCostPerUsed] = useState("") - const [accrue, setAccrue] = useState("") - const [baseCalender, setBaseCalender] = useState("") - const [listHr, setListHr] = useState([]) - const [isCustomer, setIsCustomer] = useState(false) - - const handleClearData = () => { - setUser(null) - setRbs("") - setProjectRole(null) - setGroupR("") - setMaxUsed("") - setIsCustomer(false) - setStandartRate("") - setUomStandartRate(null) - setOverTimeRate("") - setOverTimeRateUom(null) - setCostPerUsed("") - setAccrue("") - setBaseCalender("") - } - - useEffect(() => { - let data = dataHr || [] - let availableHr = [] - data.map((val, index) => { - if(dataEdit && dataEdit.user_id){ - if(parseInt(val.id)===parseInt(dataEdit.user_id)){ - availableHr.push(val); - } - } - let check = dataCurrentHr.some(function (x) { - return parseInt(val.id)==parseInt(x.user_id) - }); - if(!check){ - availableHr.push(val); - } - }); - setListHr(availableHr) - }, [dataHr, dataCurrentHr, dataEdit]) - - useEffect(() => { - if (idTask && idTask > 0) { - if(dataEdit && dataEdit!=""){ - setTypeForm('edit') - setId(dataEdit.id) - setUser(dataEdit.user_id) - setRbs(dataEdit.rbs) - setProjectRole(dataEdit.project_role) - setGroupR(dataEdit.group_r) - setMaxUsed(dataEdit.max_used ? formatNumber(dataEdit.max_used.toString()) : '') - setIsCustomer(dataEdit.is_customer) - setStandartRate(dataEdit.standart_rate ? formatNumber(dataEdit.standart_rate.toString()) : '') - setUomStandartRate(dataEdit.uom_standart_rate) - setOverTimeRate(dataEdit.overtime_rate ? formatNumber(dataEdit.overtime_rate.toString()) : '') - setOverTimeRateUom(dataEdit.uom_overtime_rate) - setCostPerUsed(dataEdit.cost_per_used) - setAccrue(dataEdit.accrue_at) - setBaseCalender(dataEdit.base_calender) - }else{ - handleClearData() - setTypeForm('add') - } - } else { - handleClearData() - } - }, [openDialog]) - - const handleSave = () => { - let data = ''; - if (typeForm=="edit") { - data = { - id, - proyek_id: idTask, - user_id:user, - project_role:projectRole, - is_customer: isCustomer, - max_used:maxUsed.replaceAll(".", ""), - standart_rate:standartRate.replaceAll(".", ""), - uom_standart_rate:uomStandartRate, - overtime_rate:overTimeRate.replaceAll(".", ""), - uom_overtime_rate:overTimeRateUom, - } - - closeDialog('edit', data); - } else { - data = { - proyek_id: idTask, - user_id:user, - project_role:projectRole, - is_customer: isCustomer, - max_used:maxUsed.replaceAll(".", ""), - standart_rate:standartRate.replaceAll(".", ""), - uom_standart_rate:uomStandartRate, - overtime_rate:overTimeRate.replaceAll(".", ""), - uom_overtime_rate:overTimeRateUom, - } - closeDialog('add', data); - } - handleClearData() - } - - const handleCancel = () => { - closeDialog('cancel', 'none') - handleClearData() - } - - - const renderForm = () => { - return ( -
- - - - - - - - - - - - - - - - - setMaxUsed(formatNumber(e.target.value))} value={maxUsed} placeholder='' required/> - - - - - - - -
- setStandartRate(formatNumber(e.target.value))} value={standartRate} placeholder='1.000...' /> - -
- / -
- - - - -
- -
- - - setOverTimeRate(formatNumber(e.target.value))} value={overTimeRate} placeholder='1.000...' /> - -
- / -
- - - - -
- - ) - } - - return ( - <> - - {typeForm=="add" ? "Add" : "Edit" } Assign Human Resource - - {renderForm()} - - - {' '} - - - - - ) - -} - -export default FormAsignHr; +import React, { useEffect, useState } from 'react' +import { Modal, ModalHeader, ModalBody, ModalFooter } from 'reactstrap'; +import { Button, Form, FormGroup, Label, Input, Col, Row } from 'reactstrap'; +import { DatePicker, Select } from 'antd'; +import 'antd/dist/antd.css'; +import { formatNumber } from '../../../const/CustomFunc'; +const { Option } = Select + +const FormAsignHr = ({ openDialog, closeDialog, toggleDialog, idTask, dataEdit, dataHr, dataCurrentHr, dataRole }) => { + const [id, setId] = useState(null) + const [typeForm, setTypeForm] = useState('add') + const [user, setUser] = useState(null) + const [rbs, setRbs] = useState("") + const [projectRole, setProjectRole] = useState(null) + const [groupR, setGroupR] = useState("") + const [maxUsed, setMaxUsed] = useState("") + const [standartRate, setStandartRate] = useState("") + const [uomStandartRate, setUomStandartRate] = useState(null) + const [overTimeRate, setOverTimeRate] = useState("") + const [overTimeRateUom, setOverTimeRateUom] = useState(null) + const [costPerUsed, setCostPerUsed] = useState("") + const [accrue, setAccrue] = useState("") + const [baseCalender, setBaseCalender] = useState("") + const [listHr, setListHr] = useState([]) + const [isCustomer, setIsCustomer] = useState(false) + + const handleClearData = () => { + setUser(null) + setRbs("") + setProjectRole(null) + setGroupR("") + setMaxUsed("") + setIsCustomer(false) + setStandartRate("") + setUomStandartRate(null) + setOverTimeRate("") + setOverTimeRateUom(null) + setCostPerUsed("") + setAccrue("") + setBaseCalender("") + } + + useEffect(() => { + let data = dataHr || [] + let availableHr = [] + data.map((val, index) => { + if(dataEdit && dataEdit.user_id){ + if(parseInt(val.id)===parseInt(dataEdit.user_id)){ + availableHr.push(val); + } + } + let check = dataCurrentHr.some(function (x) { + return parseInt(val.id)==parseInt(x.user_id) + }); + if(!check){ + availableHr.push(val); + } + }); + setListHr(availableHr) + }, [dataHr, dataCurrentHr, dataEdit]) + + useEffect(() => { + if (idTask && idTask > 0) { + if(dataEdit && dataEdit!=""){ + setTypeForm('edit') + setId(dataEdit.id) + setUser(dataEdit.user_id) + setRbs(dataEdit.rbs) + setProjectRole(dataEdit.project_role) + setGroupR(dataEdit.group_r) + setMaxUsed(dataEdit.max_used ? formatNumber(dataEdit.max_used.toString()) : '') + setIsCustomer(dataEdit.is_customer) + setStandartRate(dataEdit.standart_rate ? formatNumber(dataEdit.standart_rate.toString()) : '') + setUomStandartRate(dataEdit.uom_standart_rate) + setOverTimeRate(dataEdit.overtime_rate ? formatNumber(dataEdit.overtime_rate.toString()) : '') + setOverTimeRateUom(dataEdit.uom_overtime_rate) + setCostPerUsed(dataEdit.cost_per_used) + setAccrue(dataEdit.accrue_at) + setBaseCalender(dataEdit.base_calender) + }else{ + handleClearData() + setTypeForm('add') + } + } else { + handleClearData() + } + }, [openDialog]) + + const handleSave = () => { + let data = ''; + if (typeForm=="edit") { + data = { + id, + proyek_id: idTask, + user_id:user, + project_role:projectRole, + is_customer: isCustomer, + max_used:maxUsed.replaceAll(".", ""), + standart_rate:standartRate.replaceAll(".", ""), + uom_standart_rate:uomStandartRate, + overtime_rate:overTimeRate.replaceAll(".", ""), + uom_overtime_rate:overTimeRateUom, + } + + closeDialog('edit', data); + } else { + data = { + proyek_id: idTask, + user_id:user, + project_role:projectRole, + is_customer: isCustomer, + max_used:maxUsed.replaceAll(".", ""), + standart_rate:standartRate.replaceAll(".", ""), + uom_standart_rate:uomStandartRate, + overtime_rate:overTimeRate.replaceAll(".", ""), + uom_overtime_rate:overTimeRateUom, + } + closeDialog('add', data); + } + handleClearData() + } + + const handleCancel = () => { + closeDialog('cancel', 'none') + handleClearData() + } + + + const renderForm = () => { + return ( +
+ + + + + + + + + + + + + + + + + setMaxUsed(formatNumber(e.target.value))} value={maxUsed} placeholder='' required/> + + + + + + + +
+ setStandartRate(formatNumber(e.target.value))} value={standartRate} placeholder='1.000...' /> + +
+ / +
+ + + + +
+ +
+ + + setOverTimeRate(formatNumber(e.target.value))} value={overTimeRate} placeholder='1.000...' /> + +
+ / +
+ + + + +
+ + ) + } + + return ( + <> + + {typeForm=="add" ? "Add" : "Edit" } Assign Human Resource + + {renderForm()} + + + {' '} + + + + + ) + +} + +export default FormAsignHr; From 28a6615a1445e337ff34b73c845d83e4aa6dc7e0 Mon Sep 17 00:00:00 2001 From: wahyu Date: Wed, 18 Oct 2023 13:25:27 +0700 Subject: [PATCH 04/10] report analysis no sum --- .../SimproV2/CreatedProyek/ReportAnalysis.js | 215 ++++++++++++------ 1 file changed, 144 insertions(+), 71 deletions(-) diff --git a/src/views/SimproV2/CreatedProyek/ReportAnalysis.js b/src/views/SimproV2/CreatedProyek/ReportAnalysis.js index d797a83..581cb0c 100644 --- a/src/views/SimproV2/CreatedProyek/ReportAnalysis.js +++ b/src/views/SimproV2/CreatedProyek/ReportAnalysis.js @@ -1,25 +1,142 @@ -import React, {useState} from 'react' -import { Modal, ModalHeader, ModalBody, ModalFooter, Card, CardHeader, CardBody, Table } from 'reactstrap'; +import React, {useState, useEffect} from 'react' +import { Modal, ModalHeader, ModalBody, ModalFooter, Card, CardHeader, CardBody } from 'reactstrap'; import { TabContent, TabPane, Nav, NavItem, NavLink, Row, Col, Input } from 'reactstrap'; import { Button } from 'reactstrap'; +import axios from "../../../const/interceptorApi"; +import { + NotificationManager, +} from "react-notifications"; +import { BASE_SIMPRO_LUMEN } from "../../../const/ApiConst"; import 'antd/dist/antd.css'; import './style.css' +import { Select, Table } from 'antd'; +const { Option } = Select - - const ReportAnalysis = ({ openDialog, closeDialog, toggleDialog }) => { +const ReportAnalysis = ({ openDialog, closeDialog, toggleDialog }) => { + const token = localStorage.getItem("token"); const [activeTab, setActiveTab] = useState('1'); const [search, setSearch] = useState(''); + const [dataTable, setDatatable] = useState([]); + const [dataTableActivityToHr, setDataTableActivityToHr] = useState([]); + const [hrList, setHrList] = useState([]); + const [selectedHr, setSelectedHr] = useState(null); + const toggle = (tab) => { if (activeTab !== tab) { setActiveTab(tab); } }; + const HEADER = { + headers: { + "Content-Type": "application/json", + Authorization: `Bearer ${token}`, + }, + }; + + const columns = [ + {title: "Activity Name", dataIndex: "name", key: "name"} + ] + + const columnActivityToHr = [ + {title: "Activity Name", dataIndex: "join_first_name", key: "join_first_name"} + ] + + useEffect(() => { + if (search) { + getDataActivity() + } + }, [search]); + + useEffect(() => { + if (selectedHr) { + getDataActivityToHr() + } + }, [selectedHr]); + + useEffect(() => { + getDataHr() + }, []); + const handleSearch = (e) => { const value = e.target.value; setSearch(value); }; + const getDataHr = async () => { + const result = await axios + .get(`${BASE_SIMPRO_LUMEN}/human-resource/list`, HEADER) + .then((res) => res) + .catch((error) => error.response); + + if (result && result.data && result.data.code == 200) { + let dataRes = result.data.data || []; + setHrList(dataRes); + } else { + NotificationManager.error("Gagal Mengambil Data!!", "Failed"); + } + } + const getDataActivityToHr = async () => { + const payload = { + columns: [ + { + name: "user_id", + logic_operator: "=", + value: selectedHr, + operator: "AND", + }, + ], + joins: [ + { + name: "m_activity", + column_join: "activity_id", + column_results: ["name"] + } + ], + orders: { columns: ["id"], ascending: false }, + paging: { start: 0, length: -1 }, + }; + + const result = await axios + .post(`${BASE_SIMPRO_LUMEN}/user-to-activity/search-analysis`, payload, HEADER) + .then((res) => res) + .catch((error) => error.response); + + if (result && result.data && result.data.code == 200) { + let dataRes = result.data.data || []; + setDataTableActivityToHr(dataRes); + } else { + NotificationManager.error("Gagal Mengambil Data!!", "Failed"); + } + }; + + const getDataActivity = async () => { + const payload = { + columns: [ + { + name: "name", + logic_operator: "ilike", + value: search, + operator: "AND", + }, + ], + orders: { columns: ["id"], ascending: false }, + paging: { start: 0, length: -1 }, + }; + + const result = await axios + .post(`${BASE_SIMPRO_LUMEN}/activity/search`, payload, HEADER) + .then((res) => res) + .catch((error) => error.response); + + if (result && result.data && result.data.code == 200) { + let dataRes = result.data.data || []; + + setDatatable(dataRes); + } else { + NotificationManager.error("Gagal Mengambil Data!!", "Failed"); + } + }; return ( <> @@ -55,6 +172,8 @@ import './style.css'
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
#First NameLast NameUsername
1MarkOtto@mdo
2JacobThornton@fat
3Larrythe Bird@twitter
+ @@ -108,13 +204,13 @@ import './style.css' - - - - - - - + @@ -124,36 +220,13 @@ import './style.css' Hello World -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - -
#First NameLast NameUsername
1MarkOtto@mdo
2JacobThornton@fat
3Larrythe Bird@twitter
+ From 11fff21f3eb96c6c8750a9f054673bdd552c6476 Mon Sep 17 00:00:00 2001 From: wahyu Date: Wed, 18 Oct 2023 14:19:39 +0700 Subject: [PATCH 05/10] add sum --- .../SimproV2/CreatedProyek/ReportAnalysis.js | 21 +++++++++++++++++-- 1 file changed, 19 insertions(+), 2 deletions(-) diff --git a/src/views/SimproV2/CreatedProyek/ReportAnalysis.js b/src/views/SimproV2/CreatedProyek/ReportAnalysis.js index 581cb0c..cb16993 100644 --- a/src/views/SimproV2/CreatedProyek/ReportAnalysis.js +++ b/src/views/SimproV2/CreatedProyek/ReportAnalysis.js @@ -16,6 +16,7 @@ const ReportAnalysis = ({ openDialog, closeDialog, toggleDialog }) => { const token = localStorage.getItem("token"); const [activeTab, setActiveTab] = useState('1'); const [search, setSearch] = useState(''); + const [avgActivity, setAvgActivity] = useState(0); const [dataTable, setDatatable] = useState([]); const [dataTableActivityToHr, setDataTableActivityToHr] = useState([]); const [hrList, setHrList] = useState([]); @@ -77,6 +78,8 @@ const ReportAnalysis = ({ openDialog, closeDialog, toggleDialog }) => { } } const getDataActivityToHr = async () => { + setAvgActivity(0); + let sum = 0; const payload = { columns: [ { @@ -104,6 +107,10 @@ const ReportAnalysis = ({ openDialog, closeDialog, toggleDialog }) => { if (result && result.data && result.data.code == 200) { let dataRes = result.data.data || []; + dataRes.forEach(element => { + element.persentase_progress ? sum += parseInt(element.persentase_progress) : sum += 0; + }); + setAvgActivity(sum / dataRes.length); setDataTableActivityToHr(dataRes); } else { NotificationManager.error("Gagal Mengambil Data!!", "Failed"); @@ -111,6 +118,8 @@ const ReportAnalysis = ({ openDialog, closeDialog, toggleDialog }) => { }; const getDataActivity = async () => { + setAvgActivity(0); + let sum = 0; const payload = { columns: [ { @@ -132,6 +141,10 @@ const ReportAnalysis = ({ openDialog, closeDialog, toggleDialog }) => { if (result && result.data && result.data.code == 200) { let dataRes = result.data.data || []; + dataRes.forEach(element => { + element.persentase_progress ? sum += parseInt(element.persentase_progress) : sum += 0; + }); + setAvgActivity(sum / dataRes.length); setDatatable(dataRes); } else { NotificationManager.error("Gagal Mengambil Data!!", "Failed"); @@ -186,7 +199,9 @@ const ReportAnalysis = ({ openDialog, closeDialog, toggleDialog }) => {

- Hello World + { + search && avgActivity ? `Activity ${search} adalah ${avgActivity.toFixed(2)} %` : null + }

{

- Hello World + { + selectedHr && avgActivity ? `Activity user ini adalah ${avgActivity.toFixed(2)} %` : null + }

Date: Thu, 19 Oct 2023 09:09:49 +0700 Subject: [PATCH 06/10] report analysis hr data --- .../SimproV2/CreatedProyek/ReportAnalysis.js | 34 +++++++++++++++---- src/views/SimproV2/CreatedProyek/index.js | 3 ++ 2 files changed, 31 insertions(+), 6 deletions(-) diff --git a/src/views/SimproV2/CreatedProyek/ReportAnalysis.js b/src/views/SimproV2/CreatedProyek/ReportAnalysis.js index cb16993..02b4d33 100644 --- a/src/views/SimproV2/CreatedProyek/ReportAnalysis.js +++ b/src/views/SimproV2/CreatedProyek/ReportAnalysis.js @@ -12,7 +12,7 @@ import './style.css' import { Select, Table } from 'antd'; const { Option } = Select -const ReportAnalysis = ({ openDialog, closeDialog, toggleDialog }) => { +const ReportAnalysis = ({ openDialog, closeDialog, toggleDialog, projectId }) => { const token = localStorage.getItem("token"); const [activeTab, setActiveTab] = useState('1'); const [search, setSearch] = useState(''); @@ -40,7 +40,12 @@ const ReportAnalysis = ({ openDialog, closeDialog, toggleDialog }) => { ] const columnActivityToHr = [ - {title: "Activity Name", dataIndex: "join_first_name", key: "join_first_name"} + {title: "Activity", dataIndex: "join_third_name", key: "join_third_name"}, + {title: "Human Resource", dataIndex: "join_second_name", key: "join_second_name"}, + {title: "Report Date", dataIndex: "report_date", key: "report_date"}, + {title: "Volume Actual", dataIndex: "qty", key: "qty"}, + {title: "Volume Planned", dataIndex: "join_first_qty_planning", key: "join_first_qty_planning"}, + {title: "Description", dataIndex: "description", key: "description"} ] useEffect(() => { @@ -88,12 +93,29 @@ const ReportAnalysis = ({ openDialog, closeDialog, toggleDialog }) => { value: selectedHr, operator: "AND", }, + { + name: "proyek_id", + logic_operator: "=", + value: projectId, + table_name: "m_activity", + operator: "AND", + } ], joins: [ + { + name: "assign_material_to_activity", + column_join: "assign_material_id", + column_results: ["qty_planning"] + }, + { + name: "m_users", + column_join: "user_id", + column_results: ["name"] + }, { name: "m_activity", column_join: "activity_id", - column_results: ["name"] + column_results: ["name", "persentase_progress"] } ], orders: { columns: ["id"], ascending: false }, @@ -101,14 +123,14 @@ const ReportAnalysis = ({ openDialog, closeDialog, toggleDialog }) => { }; const result = await axios - .post(`${BASE_SIMPRO_LUMEN}/user-to-activity/search-analysis`, payload, HEADER) + .post(`${BASE_SIMPRO_LUMEN}/report-activity-material/search`, payload, HEADER) .then((res) => res) .catch((error) => error.response); if (result && result.data && result.data.code == 200) { let dataRes = result.data.data || []; dataRes.forEach(element => { - element.persentase_progress ? sum += parseInt(element.persentase_progress) : sum += 0; + element.join_third_persentase_progress ? sum += parseInt(element.join_third_persentase_progress) : sum += 0; }); setAvgActivity(sum / dataRes.length); setDataTableActivityToHr(dataRes); @@ -190,7 +212,7 @@ const ReportAnalysis = ({ openDialog, closeDialog, toggleDialog }) => { type="text" name="search" id="search" - placeholder={`Search Project Name`} + placeholder={`Search Activity Name`} style={{ width: 200 }} /> diff --git a/src/views/SimproV2/CreatedProyek/index.js b/src/views/SimproV2/CreatedProyek/index.js index 9e59876..485b32c 100644 --- a/src/views/SimproV2/CreatedProyek/index.js +++ b/src/views/SimproV2/CreatedProyek/index.js @@ -117,6 +117,7 @@ const CreatedProyek = ({ params, ...props }) => { }; const [idTask, setidTask] = useState(0); + const [projectId, setProjectId] = useState(0); const [dataTable, setDatatable] = useState([]); const [search, setSearch] = useState(""); const [currentPage, setCurrentPage] = useState(1); @@ -595,6 +596,7 @@ const CreatedProyek = ({ params, ...props }) => { const handleOpenReport = async (data) => { setOpenDialogRA(true); + setProjectId(data.id); } const handleCloseReport = async (data) => { setOpenDialogRA(false); @@ -1907,6 +1909,7 @@ const CreatedProyek = ({ params, ...props }) => { openDialog={openDialogRA} closeDialog={handleCloseReport} toggleDialog={toggleAddDialogRA} + projectId={projectId} /> ), [openDialogRA] From 0ba624379afaaf864fe654d82f1838dd6a194f1a Mon Sep 17 00:00:00 2001 From: wahyu Date: Thu, 19 Oct 2023 10:23:23 +0700 Subject: [PATCH 07/10] report analysis activity data --- src/views/SimproV2/CreatedProyek/ReportAnalysis.js | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) diff --git a/src/views/SimproV2/CreatedProyek/ReportAnalysis.js b/src/views/SimproV2/CreatedProyek/ReportAnalysis.js index 02b4d33..a6aef4e 100644 --- a/src/views/SimproV2/CreatedProyek/ReportAnalysis.js +++ b/src/views/SimproV2/CreatedProyek/ReportAnalysis.js @@ -36,7 +36,10 @@ const ReportAnalysis = ({ openDialog, closeDialog, toggleDialog, projectId }) => }; const columns = [ - {title: "Activity Name", dataIndex: "name", key: "name"} + {title: "Activity", dataIndex: "name", key: "name"}, + {title: "Gantt", dataIndex: "name_version", key: "name_version"}, + {title: "Assign HR", dataIndex: "user_name", key: "user_name"}, + {title: "Progress (%)", dataIndex: "persentase_progress", key: "persentase_progress"}, ] const columnActivityToHr = [ @@ -150,13 +153,19 @@ const ReportAnalysis = ({ openDialog, closeDialog, toggleDialog, projectId }) => value: search, operator: "AND", }, + { + name: "proyek_id", + logic_operator: "=", + value: projectId, + operator: "AND", + }, ], orders: { columns: ["id"], ascending: false }, paging: { start: 0, length: -1 }, }; const result = await axios - .post(`${BASE_SIMPRO_LUMEN}/activity/search`, payload, HEADER) + .post(`${BASE_SIMPRO_LUMEN}/activity/search-analysis`, payload, HEADER) .then((res) => res) .catch((error) => error.response); From 86e1bf92f14305130fe45dd6768b5f83a4838361 Mon Sep 17 00:00:00 2001 From: wahyuun Date: Thu, 19 Oct 2023 12:33:36 +0700 Subject: [PATCH 08/10] update project value by division --- src/views/Dashboard/DashboardBOD.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/views/Dashboard/DashboardBOD.js b/src/views/Dashboard/DashboardBOD.js index 87625f3..344faf5 100644 --- a/src/views/Dashboard/DashboardBOD.js +++ b/src/views/Dashboard/DashboardBOD.js @@ -666,8 +666,8 @@ const DashboardBOD = () => { label: "", // data: [50, 120, 72, 60], data: PROJECT_VALUE_PER_DIVISION ? PROJECT_VALUE_PER_DIVISION.map((item, idx) => item.total).filter(value => value !== 0) : [], - borderColor: ["#023E8A", "#C851B7", "#FD7034", "#3A0CA3", "#A36A16"], - backgroundColor: ["#023E8A", "#C851B7", "#FD7034", "#3A0CA3", "#A36A16"], + borderColor: PROJECT_VALUE_PER_DIVISION ? PROJECT_VALUE_PER_DIVISION.map((item, idx) => item.color) : [], + backgroundColor: PROJECT_VALUE_PER_DIVISION ? PROJECT_VALUE_PER_DIVISION.map((item, idx) => item.color) : [], borderWidth: 2, borderSkipped: false }, From a19a76a9d5678b6cbd92ccc1cc39b98b7b2e2757 Mon Sep 17 00:00:00 2001 From: wahyuun Date: Thu, 19 Oct 2023 13:36:11 +0700 Subject: [PATCH 09/10] hidden financial & info total invoice,dll --- src/views/Dashboard/DashboardProject.js | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/src/views/Dashboard/DashboardProject.js b/src/views/Dashboard/DashboardProject.js index 4acf02a..2cf31c8 100644 --- a/src/views/Dashboard/DashboardProject.js +++ b/src/views/Dashboard/DashboardProject.js @@ -1018,7 +1018,7 @@ const DashboardProject = () => { - +
{
- + {/*
{
- + */}
{ - + {/*
{ marginBottom: 5, marginRight: 2, }} - > + > */} {/*
Health By Schedule
On Budget
*/} - + {/*
Total Invoice{isReadyIntegrationInvoice ? ( @@ -1626,7 +1626,7 @@ const DashboardProject = () => { - + */}
Date: Thu, 19 Oct 2023 15:48:22 +0700 Subject: [PATCH 10/10] update filter by company id --- src/views/Master/MasterMenu/DialogForm.js | 14 ++--- src/views/Master/MasterMenu/index.js | 21 ++++---- src/views/Master/MasterRoles/DialogForm.js | 25 +++++---- src/views/Master/MasterRoles/index.js | 17 ++++--- src/views/Master/ProjectPhase/DialogForm.js | 7 ++- src/views/Master/ProjectPhase/index.js | 8 +++ src/views/Master/RoleProject/DialogForm.js | 12 +++-- src/views/Master/RoleProject/index.js | 12 +++-- src/views/Pages/Login/Login.js | 29 ++++++----- src/views/SimproV2/Divisi/index.js | 51 +++++++++++-------- src/views/SimproV2/ProjectType/DialogForm.js | 7 ++- src/views/SimproV2/ProjectType/index.js | 7 +++ .../SimproV2/ResourceWorker/DialogForm.js | 27 +++++----- src/views/SimproV2/ResourceWorker/index.js | 10 +++- src/views/SimproV2/Satuan/DialogForm.js | 7 ++- src/views/SimproV2/Satuan/index.js | 8 +++ 16 files changed, 167 insertions(+), 95 deletions(-) diff --git a/src/views/Master/MasterMenu/DialogForm.js b/src/views/Master/MasterMenu/DialogForm.js index 60b8134..0aed72e 100644 --- a/src/views/Master/MasterMenu/DialogForm.js +++ b/src/views/Master/MasterMenu/DialogForm.js @@ -7,7 +7,7 @@ import 'antd/dist/antd.css'; import { useTranslation } from 'react-i18next'; const { Option } = Select - +const company_id = window.localStorage.getItem('company_id'); const DialogForm = ({ openDialog, closeDialog, toggleDialog, typeDialog, dataEdit, dataMenu }) => { const [id, setId] = useState(0) const [name, setName] = useState('') @@ -68,7 +68,8 @@ const DialogForm = ({ openDialog, closeDialog, toggleDialog, typeDialog, dataEdi url, sequence: parseInt(sequence), icon, - alias_name: aliasName + alias_name: aliasName, + company_id } if (parentId && parentId > 0) { @@ -83,7 +84,8 @@ const DialogForm = ({ openDialog, closeDialog, toggleDialog, typeDialog, dataEdi url, sequence: parseInt(sequence), icon, - alias_name: aliasName + alias_name: aliasName, + company_id } if (parentId && parentId > 0) { @@ -133,9 +135,9 @@ const DialogForm = ({ openDialog, closeDialog, toggleDialog, typeDialog, dataEdi return (
-
- * Wajib diisi. - + + * Wajib diisi. + diff --git a/src/views/Master/MasterMenu/index.js b/src/views/Master/MasterMenu/index.js index 7c0e9bc..a5343c0 100644 --- a/src/views/Master/MasterMenu/index.js +++ b/src/views/Master/MasterMenu/index.js @@ -10,7 +10,7 @@ import { NotificationContainer, NotificationManager } from 'react-notifications' import { Pagination, Tooltip, Table } from 'antd'; import { useTranslation } from 'react-i18next'; const token = window.localStorage.getItem('token'); - +const company_id = window.localStorage.getItem('company_id'); const column = [ { name: "Nama" }, { name: "Url" }, @@ -68,20 +68,20 @@ const Index = ({ params }) => { const getDataAllMenu = async () => { const result = await axios - .get(MENU_LIST, config) - .then(res => res) - .catch((error) => error.response); + .get(MENU_LIST, config) + .then(res => res) + .catch((error) => error.response); if (result && result.data && result.data.code == 200) { let arr = [] let dataRes = result.data.data; for (const v in dataRes) { - arr.push(dataRes[v]) - } + arr.push(dataRes[v]) + } setAllDataMenu(arr); - }else { - NotificationManager.error('Gagal Mengambil Data!!', 'Failed'); - } + } else { + NotificationManager.error('Gagal Mengambil Data!!', 'Failed'); + } } const getDataMenu = async () => { @@ -94,7 +94,8 @@ const Index = ({ params }) => { const payload = { "paging": { "start": start, "length": rowsPerPage }, "columns": [ - { "name": "name", "logic_operator": "ilike", "value": search, "operator": "AND" } + { "name": "name", "logic_operator": "ilike", "value": search, "operator": "AND" }, + { "name": "company_id", "logic_operator": "=", "value": company_id, "operator": "AND" }, ], "joins": [{ "name": "m_menu", diff --git a/src/views/Master/MasterRoles/DialogForm.js b/src/views/Master/MasterRoles/DialogForm.js index a33f686..4bc3ab1 100644 --- a/src/views/Master/MasterRoles/DialogForm.js +++ b/src/views/Master/MasterRoles/DialogForm.js @@ -9,6 +9,7 @@ import { MENU_SEARCH } from '../../../const/ApiConst.js'; const { Option } = Select const token = window.localStorage.getItem('token'); +const company_id = localStorage.getItem("company_id") const config = { headers: { @@ -27,7 +28,8 @@ class DialogForm extends Component { openDialog: false, isParentClick: false, menu: [], - selectedMenu: null + selectedMenu: null, + company_id } } @@ -44,7 +46,8 @@ class DialogForm extends Component { id: dataEdit.id, name: dataEdit.name, description: dataEdit.description, - selectedMenu: dataEdit.default_page + selectedMenu: dataEdit.default_page, + company_id }) } else { this.setState({ @@ -96,26 +99,30 @@ class DialogForm extends Component { id, name, description, - selectedMenu + selectedMenu, + company_id } = this.state let data = ''; const err = this.validation(); - if(!err) { + if (!err) { if (this.props.typeDialog === "Save") { data = { id, name, description, - selectedMenu + selectedMenu, + company_id } + // console.log('data', data); this.props.closeDialog('save', data); } else { data = { id, name, description, - selectedMenu + selectedMenu, + company_id } this.props.closeDialog('edit', data); } @@ -144,13 +151,13 @@ class DialogForm extends Component { this.setState({ name: e.target.value })} placeholder={this.props.t('inputName')} /> - + this.setState({ description: e.target.value })} placeholder={this.props.t('inputDescription')} /> - + @@ -165,7 +172,7 @@ class DialogForm extends Component { ))} - + ) diff --git a/src/views/Master/MasterRoles/index.js b/src/views/Master/MasterRoles/index.js index 332f3c8..6331d38 100644 --- a/src/views/Master/MasterRoles/index.js +++ b/src/views/Master/MasterRoles/index.js @@ -12,6 +12,8 @@ import { ROLE_ADD, ROLE_SEARCH, ROLE_EDIT, ROLE_DELETE, ROLEMENU_ADD, ROLEMENU_S import { withTranslation } from 'react-i18next'; const token = window.localStorage.getItem('token'); +const company_id = window.localStorage.getItem('company_id'); + const BASE_URL = "http://siopas.co.id/custom-php/api/geohr/"; @@ -55,6 +57,7 @@ class index extends Component { tooltipTambah: false, totalPage: 0, typeDialog: 'Save', + company_id: company_id } this.columns = [ @@ -108,7 +111,8 @@ class index extends Component { const formData = { "paging": { "start": start, "length": this.state.rowsPerPage }, "columns": [ - { "name": "name", "logic_operator": "ilike", "value": this.state.search, "operator": "AND" } + { "name": "name", "logic_operator": "ilike", "value": this.state.search, "operator": "AND" }, + { "name": "company_id", "logic_operator": "=", "value": this.state.company_id, "operator": "AND" } ], "joins": [], "orders": { "columns": ["id"], "ascending": false } @@ -165,9 +169,9 @@ class index extends Component { .catch((error) => error.response); if (result && result.data && result.data.code === 200) { - await this.deleteCurrentRoleMenu(idDelete); - this.getDataRoles(); - this.setState({ idDelete: 0, alertDelete: false }) + await this.deleteCurrentRoleMenu(idDelete); + this.getDataRoles(); + this.setState({ idDelete: 0, alertDelete: false }) NotificationManager.success(`Data role berhasil dihapus`, 'Success!!'); } else { this.setState({ idDelete: 0, alertDelete: false }) @@ -180,7 +184,8 @@ class index extends Component { const formData = { name: data.name, description: data.description, - default_page : data.selectedMenu + default_page: data.selectedMenu, + company_id: company_id } const result = await axios.post(ROLE_ADD, formData, config) @@ -200,7 +205,7 @@ class index extends Component { const formData = { name: data.name, description: data.description, - default_page: data.selectedMenu + default_page: data.selectedMenu } const url = ROLE_EDIT(data.id) const result = await axios.put(url, formData, config) diff --git a/src/views/Master/ProjectPhase/DialogForm.js b/src/views/Master/ProjectPhase/DialogForm.js index 6010f09..c079bba 100644 --- a/src/views/Master/ProjectPhase/DialogForm.js +++ b/src/views/Master/ProjectPhase/DialogForm.js @@ -8,6 +8,7 @@ import InputColor from "./InputColor"; import "./styles.css"; import "rc-color-picker/assets/index.css"; import { useTranslation } from 'react-i18next'; +const company_id = localStorage.getItem("company_id") const DialogForm = ({ openDialog, closeDialog, toggleDialog, typeDialog, dataEdit }) => { const [id, setId] = useState(0) const [projectType, setProjectType] = useState('') @@ -31,14 +32,16 @@ const DialogForm = ({ openDialog, closeDialog, toggleDialog, typeDialog, dataEdi if (typeDialog === "Save") { data = { name: projectType, - color + color, + company_id } closeDialog('save', data); } else { data = { id, name: projectType, - color + color, + company_id } closeDialog('edit', data); } diff --git a/src/views/Master/ProjectPhase/index.js b/src/views/Master/ProjectPhase/index.js index 5df51ef..fb05186 100644 --- a/src/views/Master/ProjectPhase/index.js +++ b/src/views/Master/ProjectPhase/index.js @@ -10,6 +10,7 @@ import { PROJECT_PHASE_ADD, PROJECT_PHASE_EDIT, PROJECT_PHASE_DELETE, PROJECT_PH import { Pagination, Button, Tooltip, Table } from 'antd'; import { useTranslation } from 'react-i18next'; const token = window.localStorage.getItem('token'); +const company_id = window.localStorage.getItem('company_id'); const config = { headers: { @@ -20,6 +21,7 @@ const config = { const ProjectPhase = ({ params }) => { const token = localStorage.getItem("token") + const company_id = localStorage.getItem("company_id") /*const HEADER = { headers: { "Content-Type": "application/x-www-form-urlencoded; charset=UTF-8", @@ -74,6 +76,12 @@ const ProjectPhase = ({ params }) => { "logic_operator": "ilike", "value": search, "operator": "AND" + }, + { + "name": "company_id", + "logic_operator": "=", + "value": company_id, + "operator": "AND" } ], "orders": { diff --git a/src/views/Master/RoleProject/DialogForm.js b/src/views/Master/RoleProject/DialogForm.js index 307ed1b..c7a417e 100644 --- a/src/views/Master/RoleProject/DialogForm.js +++ b/src/views/Master/RoleProject/DialogForm.js @@ -3,7 +3,7 @@ import { Modal, ModalHeader, ModalBody, ModalFooter } from 'reactstrap'; import { Button, Form, FormGroup, Label, Input } from 'reactstrap'; import 'antd/dist/antd.css'; import { withTranslation } from 'react-i18next'; - +const company_id = localStorage.getItem("company_id") class DialogForm extends Component { constructor(props) { super(props) @@ -13,6 +13,7 @@ class DialogForm extends Component { description: "", openDialog: false, isParentClick: false, + company_id } } @@ -27,7 +28,8 @@ class DialogForm extends Component { this.setState({ id: dataEdit.id, name: dataEdit.name, - description: dataEdit.description + description: dataEdit.description, + company_id }) } else { this.setState({ @@ -58,14 +60,16 @@ class DialogForm extends Component { data = { id, name, - description + description, + company_id } this.props.closeDialog('save', data); } else { data = { id, name, - description + description, + company_id } this.props.closeDialog('edit', data); } diff --git a/src/views/Master/RoleProject/index.js b/src/views/Master/RoleProject/index.js index 01b6663..0337895 100644 --- a/src/views/Master/RoleProject/index.js +++ b/src/views/Master/RoleProject/index.js @@ -10,7 +10,7 @@ import { PROJECT_ROLE_ADD, PROJECT_ROLE_SEARCH, PROJECT_ROLE_EDIT, PROJECT_ROLE_ import { Pagination, Tooltip, Table } from 'antd'; import { withTranslation } from 'react-i18next'; const token = window.localStorage.getItem('token'); - +const company_id = localStorage.getItem("company_id") const BASE_URL = "http://siopas.co.id/custom-php/api/geohr/"; const config = { @@ -60,6 +60,7 @@ class index extends Component { tooltipTambah: false, totalPage: 0, typeDialog: 'Save', + company_id } this.columns = [ { @@ -108,7 +109,8 @@ class index extends Component { const formData = { "paging": { "start": start, "length": this.state.rowsPerPage }, "columns": [ - { "name": "name", "logic_operator": "ilike", "value": this.state.search, "operator": "AND" } + { "name": "name", "logic_operator": "ilike", "value": this.state.search, "operator": "AND" }, + { "name": "company_id", "logic_operator": "=", "value": this.state.company_id, "operator": "AND" } ], "joins": [], "orders": { "columns": ["id"], "ascending": false } @@ -178,7 +180,8 @@ class index extends Component { const formData = { name: data.name, - description: data.description + description: data.description, + company_id } const result = await axios.post(PROJECT_ROLE_ADD, formData, config) @@ -198,7 +201,8 @@ class index extends Component { const formData = { name: data.name, - description: data.description + description: data.description, + company_id } const url = PROJECT_ROLE_EDIT(data.id) const result = await axios.put(url, formData, config) diff --git a/src/views/Pages/Login/Login.js b/src/views/Pages/Login/Login.js index 7bda490..fd210fc 100644 --- a/src/views/Pages/Login/Login.js +++ b/src/views/Pages/Login/Login.js @@ -66,7 +66,7 @@ class Login extends Component { }, loader: false, type: 'password', - defaultPage: '' + defaultPage: '' } this.handleChange = this.handleChange.bind(this); this.showHide = this.showHide.bind(this); @@ -98,8 +98,8 @@ class Login extends Component { }); } - getDataRole = async (token, role_id) => { - const config = { + getDataRole = async (token, role_id) => { + const config = { headers: { Authorization: `Bearer ${token}`, @@ -113,12 +113,12 @@ class Login extends Component { { "name": "id", "logic_operator": "=", "value": `${role_id}`, "operator": "AND" } ], "joins": [ - { - "name": "m_menu", - "column_join": "default_page", - "column_results": ["id", "name", "url"], - }, - ], + { + "name": "m_menu", + "column_join": "default_page", + "column_results": ["id", "name", "url"], + }, + ], "orders": { "columns": ["id"], "ascending": false } } @@ -129,9 +129,9 @@ class Login extends Component { if (result && result.data && result.data.code == 200) { let resData = result.data.data - this.setState({defaultPage: resData[0].join_first_url}) + this.setState({ defaultPage: resData[0].join_first_url }) } - } + } getDataMenu = async (token, role_id) => { const config = { @@ -159,9 +159,9 @@ class Login extends Component { else { this.props.history.push("/dashboard"); } - if (this.state.defaultPage) { + if (this.state.defaultPage) { this.props.history.push(this.state.defaultPage); - } else if (role_id == 28) { + } else if (role_id == 28) { this.props.history.push("/dashboard-customer/58/63"); } else { @@ -208,13 +208,14 @@ class Login extends Component { if (doLogin && doLogin.data && doLogin.data.code === 200) { const { access_token, data_user } = doLogin.data.data - this.getDataRole(access_token, data_user.role_id) + this.getDataRole(access_token, data_user.role_id) this.getDataMenu(access_token, data_user.role_id) window.localStorage.setItem('isLogin', true); window.localStorage.setItem('token', access_token); window.localStorage.setItem('user_id', data_user.id); window.localStorage.setItem('user_name', data_user.name); window.localStorage.setItem('role_id', data_user.role_id); + window.localStorage.setItem('company_id', data_user.company_id); } else { console.log("kode : ", doLogin.data.code); // NotificationManager.error('Cek username atau password anda!', 'Gagal Login!'); diff --git a/src/views/SimproV2/Divisi/index.js b/src/views/SimproV2/Divisi/index.js index 17e576a..a24594f 100644 --- a/src/views/SimproV2/Divisi/index.js +++ b/src/views/SimproV2/Divisi/index.js @@ -12,6 +12,7 @@ import { useTranslation } from 'react-i18next'; const url = ""; const proyek_id = localStorage.getItem('proyek_id'); const role_id = localStorage.getItem('role_id'); +const company_id = localStorage.getItem("company_id") const format = "DD-MM-YYYY"; const token = window.localStorage.getItem('token'); const config = { @@ -55,7 +56,7 @@ const ProjectType = ({ params }) => { const { t } = useTranslation() useEffect(() => { - getDataProjectType(); + getDataProjectType(); }, [currentPage, rowsPerPage, search]) useEffect(() => { @@ -73,9 +74,9 @@ const ProjectType = ({ params }) => { if (listDivions && listDivions.data && listDivions.data.code == 200) { let arr = [] - let dataRes = listDivions.data.data; - const filteredData = dataRes.filter(item => item.parent === null); - for (const v in filteredData) { + let dataRes = listDivions.data.data; + const filteredData = dataRes.filter(item => item.parent === null); + for (const v in filteredData) { arr.push(filteredData[v]) } setDataDivisions(arr); @@ -86,8 +87,8 @@ const ProjectType = ({ params }) => { const getDataProjectType = async () => { let start = 0; if (currentPage !== 1 && currentPage > 1) { - start = currentPage * rowsPerPage - rowsPerPage; - } + start = currentPage * rowsPerPage - rowsPerPage; + } const payload = { columns: [ { @@ -95,6 +96,12 @@ const ProjectType = ({ params }) => { logic_operator: "ilike", value: search, operator: "AND" + }, + { + name: "company_id", + logic_operator: "=", + value: company_id, + operator: "AND" } ], "orders": { @@ -114,9 +121,9 @@ const ProjectType = ({ params }) => { .catch((error) => error.response); if (result && result.data && result.data.code == 200) { - let dataRes = result.data.data || []; - setDatatable(dataRes); - setTotalPage(result.data.totalRecord); + let dataRes = result.data.data || []; + setDatatable(dataRes); + setTotalPage(result.data.totalRecord); } else { NotificationManager.error('Gagal Mengambil Data!!', 'Failed'); } @@ -186,8 +193,8 @@ const ProjectType = ({ params }) => { }; const handleOpenDialog = (type) => { - setOpenDialog(true) - getListDivision(); + setOpenDialog(true) + getListDivision(); setTypeDialog(type) } @@ -277,7 +284,7 @@ const ProjectType = ({ params }) => { if (dataTable.length === 0) { return ( - + ) } @@ -352,16 +359,16 @@ const ProjectType = ({ params }) => { - - {n.color != null ? ( - - ): ( - - )} + + {n.color != null ? ( + + ) : ( + + )} ) })} diff --git a/src/views/SimproV2/ProjectType/DialogForm.js b/src/views/SimproV2/ProjectType/DialogForm.js index 24a7ca1..054e8fb 100644 --- a/src/views/SimproV2/ProjectType/DialogForm.js +++ b/src/views/SimproV2/ProjectType/DialogForm.js @@ -9,6 +9,7 @@ import moment from 'moment'; import 'antd/dist/antd.css'; import { useTranslation } from 'react-i18next'; const { Option } = Select +const company_id = window.localStorage.getItem('company_id'); const DialogForm = ({ openDialog, closeDialog, toggleDialog, typeDialog, dataEdit }) => { const [id, setId] = useState(0) @@ -39,7 +40,8 @@ const DialogForm = ({ openDialog, closeDialog, toggleDialog, typeDialog, dataEdi if (typeDialog === "Save") { data = { name: projectType, - description + description, + company_id } closeDialog('save', data); @@ -47,7 +49,8 @@ const DialogForm = ({ openDialog, closeDialog, toggleDialog, typeDialog, dataEdi data = { id, name: projectType, - description + description, + company_id } closeDialog('edit', data); } diff --git a/src/views/SimproV2/ProjectType/index.js b/src/views/SimproV2/ProjectType/index.js index c770f8a..a352a11 100644 --- a/src/views/SimproV2/ProjectType/index.js +++ b/src/views/SimproV2/ProjectType/index.js @@ -16,6 +16,7 @@ const proyek_id = localStorage.getItem('proyek_id'); const role_id = localStorage.getItem('role_id'); const format = "DD-MM-YYYY"; const token = window.localStorage.getItem('token'); +const company_id = window.localStorage.getItem('company_id'); const config = { headers: { @@ -81,6 +82,12 @@ const ProjectType = ({ params }) => { "logic_operator": "like", "value": search, "operator": "AND" + }, + { + "name": "company_id", + "logic_operator": "like", + "value": company_id, + "operator": "AND" } ], "orders": { diff --git a/src/views/SimproV2/ResourceWorker/DialogForm.js b/src/views/SimproV2/ResourceWorker/DialogForm.js index 5c4bb67..16f108a 100644 --- a/src/views/SimproV2/ResourceWorker/DialogForm.js +++ b/src/views/SimproV2/ResourceWorker/DialogForm.js @@ -12,6 +12,7 @@ import { useTranslation } from 'react-i18next'; const { Option } = Select const token = window.localStorage.getItem('token'); +const company_id = localStorage.getItem("company_id") const config = { headers: { @@ -117,7 +118,8 @@ const DialogForm = ({ openDialog, closeDialog, toggleDialog, typeDialog, dataEdi divisi_id: divisionId, address, status_resource: statusResource, - status_boundary: statusRestriction + status_boundary: statusRestriction, + company_id: company_id } console.log(data) @@ -165,7 +167,8 @@ const DialogForm = ({ openDialog, closeDialog, toggleDialog, typeDialog, dataEdi divisi_id: divisionId, address, status_resource: statusResource, - status_boundary: statusRestriction + status_boundary: statusRestriction, + company_id: company_id } if (birthDate && birthDate != "") { @@ -254,11 +257,11 @@ const DialogForm = ({ openDialog, closeDialog, toggleDialog, typeDialog, dataEdi setEmail(e.target.value)} placeholder={t('inputEmail')} - onBlur={(e) => { - if (!isValidEmail(e.target.value)) { - alert("Masukkan email yang valid."); - } - }} + onBlur={(e) => { + if (!isValidEmail(e.target.value)) { + alert("Masukkan email yang valid."); + } + }} /> @@ -341,11 +344,11 @@ const DialogForm = ({ openDialog, closeDialog, toggleDialog, typeDialog, dataEdi setEmail(e.target.value)} placeholder={`Email...`} - onBlur={(e) => { - if (!isValidEmail(e.target.value)) { - alert("Masukkan email yang valid."); - } - }} + onBlur={(e) => { + if (!isValidEmail(e.target.value)) { + alert("Masukkan email yang valid."); + } + }} /> diff --git a/src/views/SimproV2/ResourceWorker/index.js b/src/views/SimproV2/ResourceWorker/index.js index f4f6af5..4451a32 100644 --- a/src/views/SimproV2/ResourceWorker/index.js +++ b/src/views/SimproV2/ResourceWorker/index.js @@ -28,6 +28,7 @@ const config = { const ResourceWorker = ({ params }) => { const token = localStorage.getItem("token") + const company_id = localStorage.getItem("company_id") const HEADER = { headers: { "Content-Type": "application/json", @@ -171,6 +172,11 @@ const ResourceWorker = ({ params }) => { "logic_operator": "~*", "value": search }, + { + "name": "company_id", + "logic_operator": "=", + "value": company_id + }, ] }, "joins": [ @@ -232,7 +238,7 @@ const ResourceWorker = ({ params }) => { const handleSync = async () => { await axios.get(USER_SYNC, HEADER) .then(res => res) - .catch((error)=>error.response) + .catch((error) => error.response) } const handleExportExcel = async () => { @@ -560,7 +566,7 @@ const ResourceWorker = ({ params }) => { - + diff --git a/src/views/SimproV2/Satuan/DialogForm.js b/src/views/SimproV2/Satuan/DialogForm.js index 4ab7a35..6636c55 100644 --- a/src/views/SimproV2/Satuan/DialogForm.js +++ b/src/views/SimproV2/Satuan/DialogForm.js @@ -6,6 +6,7 @@ import { import 'antd/dist/antd.css'; import { useTranslation } from 'react-i18next'; +const company_id = localStorage.getItem("company_id") const DialogForm = ({ openDialog, closeDialog, toggleDialog, typeDialog, dataEdit }) => { const [id, setId] = useState(0) @@ -31,7 +32,8 @@ const DialogForm = ({ openDialog, closeDialog, toggleDialog, typeDialog, dataEdi if (typeDialog === "Save") { data = { name: name, - description + description, + company_id } closeDialog('save', data); @@ -39,7 +41,8 @@ const DialogForm = ({ openDialog, closeDialog, toggleDialog, typeDialog, dataEdi data = { id, name: name, - description + description, + company_id } closeDialog('edit', data); } diff --git a/src/views/SimproV2/Satuan/index.js b/src/views/SimproV2/Satuan/index.js index b864493..d28fea6 100644 --- a/src/views/SimproV2/Satuan/index.js +++ b/src/views/SimproV2/Satuan/index.js @@ -10,6 +10,7 @@ import { SATUAN_ADD, SATUAN_EDIT, SATUAN_DELETE, SATUAN_SEARCH } from '../../../ import { useTranslation } from 'react-i18next'; const token = window.localStorage.getItem('token'); +const company_id = window.localStorage.getItem('company_id'); const config = { headers: { @@ -20,6 +21,7 @@ const config = { const Satuan = ({ params }) => { const token = localStorage.getItem("token") + const company_id = localStorage.getItem("company_id") const HEADER = { headers: { "Content-Type": "application/json", @@ -72,6 +74,12 @@ const Satuan = ({ params }) => { "logic_operator": "ilike", "value": search, "operator": "AND" + }, + { + "name": "company_id", + "logic_operator": "=", + "value": company_id, + "operator": "AND" } ], "orders": {
{t('noData')}{t('noData')}
{n.name}{n.description ?? '-'} - - - - No color set{n.description ?? '-'} + + + + No color set