@ -4,7 +4,7 @@ import { Button, Form } from 'reactstrap';
import { Table , Tooltip } from 'antd' ;
import 'antd/dist/antd.css' ;
import moment from 'moment' ;
import { ASSIGN _HR _PROJECT _SEARCH , ASSIGN _HR _PROJECT _DELETE , USER _LIST , PROJECT _ROLE _SEARCH , ASSIGN _HR _PROJECT _ADD , ASSIGN _HR _PROJECT _EDIT } from '../../../const/ApiConst' ;
import { API _ADW , TOKEN _ADW , A SSIGN _HR _PROJECT _SEARCH , ASSIGN _HR _PROJECT _DELETE , USER _LIST , PROJECT _ROLE _SEARCH , ASSIGN _HR _PROJECT _ADD , ASSIGN _HR _PROJECT _EDIT } from '../../../const/ApiConst' ;
import axios from "../../../const/interceptorApi"
import { NotificationContainer , NotificationManager } from 'react-notifications' ;
import SweetAlert from 'react-bootstrap-sweetalert' ;
@ -12,287 +12,291 @@ import FormAsignHr from './FormAsignHr';
import { formatThousand } from '../../../const/CustomFunc' ;
const AssignHrProject = ( { openDialog , closeDialog , toggleDialog , idTask , toolsResource , proyekName } ) => {
const token = localStorage . getItem ( "token" )
const HEADER = {
headers : {
"Content-Type" : "application/json" ,
"Authorization" : ` Bearer ${ token } `
}
}
const [ dataUserToProject , setdataUserToProject ] = useState ( [ ] )
const [ alertDelete , setAlertDelete ] = useState ( false )
const [ idDelete , setIdDelete ] = useState ( 0 )
const [ openDialogFormTools , setOpenDialogFormTools ] = useState ( false )
const [ dataEdit , setDataEdit ] = useState ( null )
const [ listUser , setListUser ] = useState ( [ ] )
const [ listRole , setListRole ] = useState ( [ ] )
useEffect ( ( ) => {
if ( idTask > 0 ) {
getDataAssignHr ( ) ;
}
} , [ openDialog ] ) ;
useEffect ( ( ) => {
getDataUser ( ) ;
getDataProjectRole ( ) ;
} , [ ] )
const getDataAssignHr = async ( ) => {
const payload = {
"paging" : {
"start" : 0 ,
"length" : - 1
} ,
"columns" : [
{ "name" : "name" , "logic_operator" : "ilike" , "value" : "" , "table_name" : "m_users" } ,
{ "name" : "proyek_id" , "logic_operator" : "=" , "value" : idTask }
] ,
"joins" : [
{ "name" : "m_users" , "column_join" : "user_id" , "column_results" : [ "name" ] } ,
{ "name" : "m_role_proyek" , "column_join" : "project_role" , "column_results" : [ "name" ] } ,
] ,
"orders" : {
"columns" : [
"id"
] ,
"ascending" : false
}
}
const URL = ASSIGN _HR _PROJECT _SEARCH
const result = await axios
. post ( URL , payload , HEADER )
. then ( res => res )
. catch ( ( error ) => error . response ) ;
if ( result && result . data && result . data . code == 200 ) {
let dataRes = result . data . data || [ ]
setdataUserToProject ( dataRes ) ;
} else {
NotificationManager . error ( 'Gagal Mengambil Data!!' , 'Failed' ) ;
}
}
const getDataUser = async ( ) => {
const result = await axios
. get ( USER _LIST , HEADER )
. then ( res => res )
. catch ( ( error ) => error . response ) ;
if ( result && result . data && result . data . code == 200 ) {
let dataRes = result . data . data
setListUser ( dataRes )
} else {
}
}
const getDataProjectRole = async ( ) => {
const payload = {
"paging" : {
"start" : 0 ,
"length" : - 1
} ,
"columns" : [
{ "name" : "created_by" , "logic_operator" : "ilike" , "value" : "" } ,
] ,
"joins" : [ ] ,
"orders" : {
"columns" : [
"id"
] ,
"ascending" : false
}
}
const result = await axios
. post ( PROJECT _ROLE _SEARCH , payload , HEADER )
. then ( res => res )
. catch ( ( error ) => error . response ) ;
if ( result && result . data && result . data . code == 200 ) {
let dataRes = result . data . data || [ ]
setListRole ( dataRes ) ;
} else {
}
}
const handleDelete = ( id ) => {
setIdDelete ( id )
setAlertDelete ( true )
}
const cancelDelete = ( ) => {
setAlertDelete ( false )
setIdDelete ( 0 )
}
const onConfirmDelete = async ( ) => {
let urlDel = ASSIGN _HR _PROJECT _DELETE ( idDelete )
const result = await axios . delete ( urlDel , HEADER )
. then ( res => res )
. catch ( ( error ) => error . response ) ;
if ( result && result . data && result . data . code === 200 ) {
getDataAssignHr ( )
setIdDelete ( 0 )
setAlertDelete ( false )
NotificationManager . success ( ` Data assign human resource berhasil dihapus ` , 'Success!!' ) ;
} else {
setIdDelete ( 0 )
setAlertDelete ( false )
NotificationManager . error ( ` Data assign human resource gagal dihapus ` , 'Failed!!' ) ;
}
}
const handleEdit = async ( data ) => {
await setDataEdit ( data )
setOpenDialogFormTools ( true )
}
const handleOpenDialogFormTools = ( ) => {
setOpenDialogFormTools ( true )
}
const handleCancel = ( ) => {
closeDialog ( 'cancel' , 'none' )
}
const RenderTable = useMemo ( ( ) => {
const columns = [
{
title : 'Action' ,
dataIndex : '' ,
key : 'x' ,
className : "nowrap" ,
render : ( text , record ) => < > < Tooltip title = "Delete Request Resource" >
< Button size = { "sm" } color = 'danger' onClick = { ( ) => handleDelete ( text . id ) } > < i className = "fa fa-trash" > < / i > < / B u t t o n >
< / T o o l t i p > { " " } < T o o l t i p t i t l e = " E d i t R e q u e s t R e s o u r c e " >
< Button size = { "sm" } color = 'primary' onClick = { ( ) => handleEdit ( text ) } > < i className = "fa fa-edit" > < / i > < / B u t t o n >
< /Tooltip></ > ,
} ,
{ title : 'Name Human Resource' , dataIndex : 'join_first_name' , key : 'join_first_name' , className : "nowrap" } ,
{ title : 'Role Human Resource' , dataIndex : 'join_second_name' , key : 'join_second_name' , className : "nowrap" } ,
{ title : 'Percentage Available User' , dataIndex : 'max_used' , key : 'max_used' , className : "nowrap" , render : ( text , record ) => record . max _used ? formatThousand ( record . max _used ) : '-' } ,
{ title : 'Standard Rate' , dataIndex : 'standart_rate' , key : 'standart_rate' , className : "nowrap" , render : ( text , record ) => record . standart _rate ? formatThousand ( record . standart _rate ) : '-' } ,
{ title : 'UOM Standard Rate' , dataIndex : 'uom_standart_rate' , key : 'uom_standart_rate' , className : "nowrap" } ,
{ title : 'Overtime Rate' , dataIndex : 'overtime_rate' , key : 'overtime_rate' , className : "nowrap" , render : ( text , record ) => record . overtime _rate ? formatThousand ( record . overtime _rate ) : '-' } ,
{ title : 'UOM Overtime Rate' , dataIndex : 'uom_overtime_rate' , key : 'uom_overtime_rate' , className : "nowrap" } ,
] ;
return (
< Table
size = "small"
columns = { columns }
dataSource = { dataUserToProject }
pagination = { { position : [ "bottomLeft" ] } }
/ >
)
} , [ dataUserToProject ] )
const renderForm = ( ) => {
return (
< div style = { { "overflowX" : "scroll" } } >
{ RenderTable }
< / d i v >
)
}
const handleCloseDialogFormTools = ( type , data ) => {
if ( type == "add" ) {
addDataAssignHr ( data ) ;
} else if ( type == "edit" ) {
editDataAssignHr ( data ) ;
} else {
setDataEdit ( null )
setOpenDialogFormTools ( false )
}
}
const addDataAssignHr = async ( payload ) => {
const result = await axios
. post ( ASSIGN _HR _PROJECT _ADD , payload , HEADER )
. then ( res => res )
. catch ( ( error ) => error . response ) ;
if ( result && result . data && result . data . code == 200 ) {
getDataAssignHr ( ) ;
NotificationManager . success ( 'assign human resource berhasil!!' , 'Success' ) ;
setDataEdit ( null )
setOpenDialogFormTools ( false )
} else {
NotificationManager . error ( 'assign human resource gagal!!' , 'Failed' ) ;
}
}
const editDataAssignHr = async ( payload ) => {
let url = ASSIGN _HR _PROJECT _EDIT ( payload . id )
const result = await axios
. put ( url , payload , HEADER )
. then ( res => res )
. catch ( ( error ) => error . response ) ;
if ( result && result . data && result . data . code == 200 ) {
getDataAssignHr ( ) ;
NotificationManager . success ( 'assign human resource berhasil diedit!!' , 'Success' ) ;
setDataEdit ( null )
setOpenDialogFormTools ( false )
} else {
NotificationManager . error ( 'assign human resource gagal diedit!!' , 'Failed' ) ;
}
}
const toogleDialogFormTools = ( ) => {
if ( openDialogFormTools ) {
setDataEdit ( null )
}
setOpenDialogFormTools ( ! openDialogFormTools )
}
return (
< >
< NotificationContainer / >
< SweetAlert
show = { alertDelete }
warning
showCancel
confirmBtnText = "Delete"
confirmBtnBsStyle = "danger"
title = { ` Are you sure? ` }
onConfirm = { onConfirmDelete }
onCancel = { ( ) => cancelDelete ( ) }
focusCancelBtn
>
Delete this data
< / S w e e t A l e r t >
< Modal size = "xl" isOpen = { openDialog } toggle = { toggleDialog } >
< ModalHeader className = "capitalize withBtn" toggle = { closeDialog } >
< div > Assign Human Resource - { proyekName } < /div> <Button onClick={handleOpenDialogFormTools} size='sm' color="primary"><i className='fa fa-plus'></i > < / B u t t o n >
< / M o d a l H e a d e r >
< ModalBody >
{ renderForm ( ) }
< / M o d a l B o d y >
{ / * < M o d a l F o o t e r >
< Button className = "capitalize" color = "secondary" onClick = { ( ) => handleCancel ( ) } > Close < / B u t t o n >
< /ModalFooter> */ }
< / M o d a l >
< FormAsignHr
openDialog = { openDialogFormTools }
closeDialog = { handleCloseDialogFormTools }
toggleDialog = { toogleDialogFormTools }
idTask = { idTask }
dataEdit = { dataEdit }
dataHr = { listUser }
dataRole = { listRole }
dataCurrentHr = { dataUserToProject }
/ >
< / >
)
const token = localStorage . getItem ( "token" )
const HEADER = {
headers : {
"Content-Type" : "application/json" ,
"Authorization" : ` Bearer ${ token } `
}
}
const [ dataUserToProject , setdataUserToProject ] = useState ( [ ] )
const [ alertDelete , setAlertDelete ] = useState ( false )
const [ idDelete , setIdDelete ] = useState ( 0 )
const [ openDialogFormTools , setOpenDialogFormTools ] = useState ( false )
const [ dataEdit , setDataEdit ] = useState ( null )
const [ listUser , setListUser ] = useState ( [ ] )
const [ listRole , setListRole ] = useState ( [ ] )
useEffect ( ( ) => {
if ( idTask > 0 ) {
getDataAssignHr ( ) ;
}
} , [ openDialog ] ) ;
useEffect ( ( ) => {
getDataUser ( ) ;
getDataProjectRole ( ) ;
} , [ ] )
const getDataAssignHr = async ( ) => {
const payload = {
"paging" : {
"start" : 0 ,
"length" : - 1
} ,
"columns" : [
{ "name" : "name" , "logic_operator" : "ilike" , "value" : "" , "table_name" : "m_users" } ,
{ "name" : "proyek_id" , "logic_operator" : "=" , "value" : idTask }
] ,
"joins" : [
{ "name" : "m_users" , "column_join" : "user_id" , "column_results" : [ "name" ] } ,
{ "name" : "m_role_proyek" , "column_join" : "project_role" , "column_results" : [ "name" ] } ,
] ,
"orders" : {
"columns" : [
"id"
] ,
"ascending" : false
}
}
const URL = ASSIGN _HR _PROJECT _SEARCH
const result = await axios
. post ( URL , payload , HEADER )
. then ( res => res )
. catch ( ( error ) => error . response ) ;
if ( result && result . data && result . data . code == 200 ) {
let dataRes = result . data . data || [ ]
setdataUserToProject ( dataRes ) ;
} else {
NotificationManager . error ( 'Gagal Mengambil Data!!' , 'Failed' ) ;
}
}
const getDataUser = async ( ) => {
const HEADER _ADW = {
headers : {
"Authorization" : ` ${ TOKEN _ADW } `
}
}
const result = await axios
. get ( ` ${ API _ADW } employees ` , HEADER _ADW )
// .get(USER_LIST, HEADER)
. then ( res => res )
. catch ( ( error ) => error . response ) ;
if ( result && result . data && result . data . data . length != 0 ) {
let dataRes = result . data . data
setListUser ( dataRes )
}
}
const getDataProjectRole = async ( ) => {
const payload = {
"paging" : {
"start" : 0 ,
"length" : - 1
} ,
"columns" : [
{ "name" : "created_by" , "logic_operator" : "ilike" , "value" : "" } ,
] ,
"joins" : [ ] ,
"orders" : {
"columns" : [
"id"
] ,
"ascending" : false
}
}
const result = await axios
. post ( PROJECT _ROLE _SEARCH , payload , HEADER )
. then ( res => res )
. catch ( ( error ) => error . response ) ;
if ( result && result . data && result . data . code == 200 ) {
let dataRes = result . data . data || [ ]
setListRole ( dataRes ) ;
} else {
}
}
const handleDelete = ( id ) => {
setIdDelete ( id )
setAlertDelete ( true )
}
const cancelDelete = ( ) => {
setAlertDelete ( false )
setIdDelete ( 0 )
}
const onConfirmDelete = async ( ) => {
let urlDel = ASSIGN _HR _PROJECT _DELETE ( idDelete )
const result = await axios . delete ( urlDel , HEADER )
. then ( res => res )
. catch ( ( error ) => error . response ) ;
if ( result && result . data && result . data . code === 200 ) {
getDataAssignHr ( )
setIdDelete ( 0 )
setAlertDelete ( false )
NotificationManager . success ( ` Data assign human resource berhasil dihapus ` , 'Success!!' ) ;
} else {
setIdDelete ( 0 )
setAlertDelete ( false )
NotificationManager . error ( ` Data assign human resource gagal dihapus ` , 'Failed!!' ) ;
}
}
const handleEdit = async ( data ) => {
await setDataEdit ( data )
setOpenDialogFormTools ( true )
}
const handleOpenDialogFormTools = ( ) => {
setOpenDialogFormTools ( true )
}
const handleCancel = ( ) => {
closeDialog ( 'cancel' , 'none' )
}
const RenderTable = useMemo ( ( ) => {
const columns = [
{
title : 'Action' ,
dataIndex : '' ,
key : 'x' ,
className : "nowrap" ,
render : ( text , record ) => < > < Tooltip title = "Delete Request Resource" >
< Button size = { "sm" } color = 'danger' onClick = { ( ) => handleDelete ( text . id ) } > < i className = "fa fa-trash" > < / i > < / B u t t o n >
< / T o o l t i p > { " " } < T o o l t i p t i t l e = " E d i t R e q u e s t R e s o u r c e " >
< Button size = { "sm" } color = 'primary' onClick = { ( ) => handleEdit ( text ) } > < i className = "fa fa-edit" > < / i > < / B u t t o n >
< /Tooltip></ > ,
} ,
{ title : 'Name Human Resource' , dataIndex : 'join_first_name' , key : 'join_first_name' , className : "nowrap" } ,
{ title : 'Role Human Resource' , dataIndex : 'join_second_name' , key : 'join_second_name' , className : "nowrap" } ,
{ title : 'Percentage Available User' , dataIndex : 'max_used' , key : 'max_used' , className : "nowrap" , render : ( text , record ) => record . max _used ? formatThousand ( record . max _used ) : '-' } ,
{ title : 'Standard Rate' , dataIndex : 'standart_rate' , key : 'standart_rate' , className : "nowrap" , render : ( text , record ) => record . standart _rate ? formatThousand ( record . standart _rate ) : '-' } ,
{ title : 'UOM Standard Rate' , dataIndex : 'uom_standart_rate' , key : 'uom_standart_rate' , className : "nowrap" } ,
{ title : 'Overtime Rate' , dataIndex : 'overtime_rate' , key : 'overtime_rate' , className : "nowrap" , render : ( text , record ) => record . overtime _rate ? formatThousand ( record . overtime _rate ) : '-' } ,
{ title : 'UOM Overtime Rate' , dataIndex : 'uom_overtime_rate' , key : 'uom_overtime_rate' , className : "nowrap" } ,
] ;
return (
< Table
size = "small"
columns = { columns }
dataSource = { dataUserToProject }
pagination = { { position : [ "bottomLeft" ] } }
/ >
)
} , [ dataUserToProject ] )
const renderForm = ( ) => {
return (
< div style = { { "overflowX" : "scroll" } } >
{ RenderTable }
< / d i v >
)
}
const handleCloseDialogFormTools = ( type , data ) => {
if ( type == "add" ) {
addDataAssignHr ( data ) ;
} else if ( type == "edit" ) {
editDataAssignHr ( data ) ;
} else {
setDataEdit ( null )
setOpenDialogFormTools ( false )
}
}
const addDataAssignHr = async ( payload ) => {
const result = await axios
. post ( ASSIGN _HR _PROJECT _ADD , payload , HEADER )
. then ( res => res )
. catch ( ( error ) => error . response ) ;
if ( result && result . data && result . data . code == 200 ) {
getDataAssignHr ( ) ;
NotificationManager . success ( 'assign human resource berhasil!!' , 'Success' ) ;
setDataEdit ( null )
setOpenDialogFormTools ( false )
} else {
NotificationManager . error ( 'assign human resource gagal!!' , 'Failed' ) ;
}
}
const editDataAssignHr = async ( payload ) => {
let url = ASSIGN _HR _PROJECT _EDIT ( payload . id )
const result = await axios
. put ( url , payload , HEADER )
. then ( res => res )
. catch ( ( error ) => error . response ) ;
if ( result && result . data && result . data . code == 200 ) {
getDataAssignHr ( ) ;
NotificationManager . success ( 'assign human resource berhasil diedit!!' , 'Success' ) ;
setDataEdit ( null )
setOpenDialogFormTools ( false )
} else {
NotificationManager . error ( 'assign human resource gagal diedit!!' , 'Failed' ) ;
}
}
const toogleDialogFormTools = ( ) => {
if ( openDialogFormTools ) {
setDataEdit ( null )
}
setOpenDialogFormTools ( ! openDialogFormTools )
}
return (
< >
< NotificationContainer / >
< SweetAlert
show = { alertDelete }
warning
showCancel
confirmBtnText = "Delete"
confirmBtnBsStyle = "danger"
title = { ` Are you sure? ` }
onConfirm = { onConfirmDelete }
onCancel = { ( ) => cancelDelete ( ) }
focusCancelBtn
>
Delete this data
< / S w e e t A l e r t >
< Modal size = "xl" isOpen = { openDialog } toggle = { toggleDialog } >
< ModalHeader className = "capitalize withBtn" toggle = { closeDialog } >
< div > Assign Human Resource - { proyekName } < /div> <Button onClick={handleOpenDialogFormTools} size='sm' color="primary"><i className='fa fa-plus'></i > < / B u t t o n >
< / M o d a l H e a d e r >
< ModalBody >
{ renderForm ( ) }
< / M o d a l B o d y >
{ / * < M o d a l F o o t e r >
< Button className = "capitalize" color = "secondary" onClick = { ( ) => handleCancel ( ) } > Close < / B u t t o n >
< /ModalFooter> */ }
< / M o d a l >
< FormAsignHr
openDialog = { openDialogFormTools }
closeDialog = { handleCloseDialogFormTools }
toggleDialog = { toogleDialogFormTools }
idTask = { idTask }
dataEdit = { dataEdit }
dataHr = { listUser }
dataRole = { listRole }
dataCurrentHr = { dataUserToProject }
/ >
< / >
)
}
export default AssignHrProject ;
export default AssignHrProject ;