Browse Source

bug fix export

pull/2/head
nurkomalasari 2 years ago
parent
commit
68b06b9027
  1. 2
      src/views/Master/RoleProject/index.js
  2. 26
      src/views/SimproV2/ResourceMaterial/DialogForm.js
  3. 198
      src/views/SimproV2/ResourceMaterial/index.js
  4. 103
      src/views/SimproV2/ResourceWorker/index.js

2
src/views/Master/RoleProject/index.js

@ -271,7 +271,7 @@ export default class index extends Component {
"orders": { "columns": ["id"], "ascending": false } "orders": { "columns": ["id"], "ascending": false }
} }
const result = await axios const result = await axios
.post(PROJECT_ROLE_SEARCH, payload) .post(PROJECT_ROLE_SEARCH, payload, config)
.then(res => res) .then(res => res)
.catch((error) => error.response); .catch((error) => error.response);
if (result && result.data && result.statusText == "OK") { if (result && result.data && result.statusText == "OK") {

26
src/views/SimproV2/ResourceMaterial/DialogForm.js

@ -9,7 +9,7 @@ import moment from 'moment';
import 'antd/dist/antd.css'; import 'antd/dist/antd.css';
const { Option } = Select const { Option } = Select
const DialogForm = ({openDialog, closeDialog, toggleDialog, typeDialog, dataEdit}) => { const DialogForm = ({ openDialog, closeDialog, toggleDialog, typeDialog, dataEdit, dataUom }) => {
const [id, setId] = useState(0) const [id, setId] = useState(0)
const [materialName, setMaterialName] = useState('') const [materialName, setMaterialName] = useState('')
const [uom, setUom] = useState('') const [uom, setUom] = useState('')
@ -151,7 +151,17 @@ const DialogForm = ({openDialog, closeDialog, toggleDialog, typeDialog, dataEdit
setDescription('') setDescription('')
} }
const setupSelectUom = () => {
return (
<>
{dataUom.map((val, index) => {
return (
<Option key={index} value={val.id}>{val.name}</Option>
)
})}
</>
)
}
@ -172,14 +182,20 @@ const DialogForm = ({openDialog, closeDialog, toggleDialog, typeDialog, dataEdit
<Col md={6}> <Col md={6}>
<FormGroup> <FormGroup>
<Label className="capitalize">QTY</Label> <Label className="capitalize">QTY</Label>
<Input type="text" value={qty} onChange={(e)=> setQty(e.target.value)} placeholder={`Input qty...`} /> <Input type="number" value={qty} onChange={(e) => setQty(e.target.value)} placeholder={`Input qty...`} />
</FormGroup> </FormGroup>
</Col> </Col>
<Col md={6}> <Col md={6}>
<FormGroup> <FormGroup>
<Label className="capitalize">UOM</Label> <Label className="capitalize">UOM</Label>
<Input type="text" value={uom} onChange={(e)=> setUom(e.target.value)} placeholder={`Input uom...`} />
<Select showSearch defaultValue={uom} onChange={(val) => setUom(val)} placeholder="Select Uom" style={{ width: '100%' }}>
{setupSelectUom()}
</Select>
</FormGroup> </FormGroup>
<Col md={6}>
</Col>
</Col> </Col>
</Row> </Row>
<Row> <Row>
@ -250,7 +266,7 @@ const DialogForm = ({openDialog, closeDialog, toggleDialog, typeDialog, dataEdit
<Col md={6}> <Col md={6}>
<FormGroup> <FormGroup>
<Label className="capitalize">QTY</Label> <Label className="capitalize">QTY</Label>
<Input type="number" value={qty} onChange={(e) => setQty(e.target.value)} placeholder={`Input QTY...`} disabled /> <Input type="number" min="0" value={qty} onChange={(e) => setQty(e.target.value)} placeholder={`Input QTY...`} disabled />
</FormGroup> </FormGroup>
</Col> </Col>
<Col md={6}> <Col md={6}>

198
src/views/SimproV2/ResourceMaterial/index.js

@ -14,7 +14,7 @@ import {
PROYEK_ADD, PROYEK_SEARCH, PROYEK_EDIT, PROYEK_DELETE, PROYEK_ADD, PROYEK_SEARCH, PROYEK_EDIT, PROYEK_DELETE,
MATERIAL_RESOURCE_ADD, MATERIAL_RESOURCE_EDIT, MATERIAL_RESOURCE_DELETE, MATERIAL_RESOURCE_SEARCH, MATERIAL_RESOURCE_ADD, MATERIAL_RESOURCE_EDIT, MATERIAL_RESOURCE_DELETE, MATERIAL_RESOURCE_SEARCH,
REQUEST_MATERIAL_SEARCH, REQUEST_MATERIAL_EDIT, REQUEST_MATERIAL_SEARCH, REQUEST_MATERIAL_EDIT,
REQUEST_MATERIAL_UPDATE_WAREHOUSE_SITE REQUEST_MATERIAL_UPDATE_WAREHOUSE_SITE, SATUAN_SEARCH
} from '../../../const/ApiConst'; } from '../../../const/ApiConst';
const { TabPane } = Tabs; const { TabPane } = Tabs;
@ -52,6 +52,7 @@ const Resource = ({ params }) => {
const [dataExport, setDataExport] = useState([]) const [dataExport, setDataExport] = useState([])
const [dataReqMaterial, setDataReqMaterial] = useState([]) const [dataReqMaterial, setDataReqMaterial] = useState([])
const [dataTable, setDatatable] = useState([]) const [dataTable, setDatatable] = useState([])
const [dataSatuan, setDatasatuan] = useState([])
const [idDelete, setIdDelete] = useState(0) const [idDelete, setIdDelete] = useState(0)
const [openDialog, setOpenDialog] = useState(false) const [openDialog, setOpenDialog] = useState(false)
const [rowsPerPage, setRowsPerPage] = useState(10) const [rowsPerPage, setRowsPerPage] = useState(10)
@ -62,6 +63,7 @@ const Resource = ({ params }) => {
useEffect(() => { useEffect(() => {
getDataReqMaterial() getDataReqMaterial()
getDataSatuan()
}, []) }, [])
useEffect(() => { useEffect(() => {
@ -71,7 +73,9 @@ const Resource = ({ params }) => {
useEffect(() => { useEffect(() => {
const cekData = dataExport || [] const cekData = dataExport || []
if (cekData.length > 0) { if (cekData.length > 0) {
exportExcel() exportExcelRequestMaterial()
exportExcelMaterialResource()
} }
}, [dataExport]) }, [dataExport])
@ -159,6 +163,53 @@ const Resource = ({ params }) => {
} }
} }
const getDataSatuan = async () => {
let start = 0;
if (currentPage !== 1 && currentPage > 1) {
start = (currentPage * rowsPerPage) - rowsPerPage
}
const payload = {
"columns": [
{
"name": "name",
"logic_operator": "ilike",
"value": search,
"operator": "AND"
},
{
"name": "description",
"logic_operator": "ilike",
"value": search,
"operator": "AND"
}
],
"orders": {
"ascending": true,
"columns": [
'id'
]
},
"paging": {
"length": rowsPerPage,
"start": start
}
}
const result = await axios
.post(SATUAN_SEARCH, payload, HEADER)
.then(res => res)
.catch((error) => error.response);
if (result && result.data && result.data.code == 200) {
setDatasatuan(result.data.data);
setTotalPage(result.data.totalRecord);
} else {
NotificationManager.error('Gagal Mengambil Data!!', 'Failed');
}
}
const handleSearch = e => { const handleSearch = e => {
const value = e.target.value const value = e.target.value
setSearch(value); setSearch(value);
@ -170,9 +221,9 @@ const Resource = ({ params }) => {
setTypeDialog(type) setTypeDialog(type)
} }
const exportExcel = () => { const exportExcelRequestMaterial = () => {
const dataExcel = dataExport || []; const dataExcel = dataExport || [];
const fileName = `Data ${pageName}.xlsx`; const fileName = `Data Request Material.xlsx`;
const ws = XLSX.utils.json_to_sheet(dataExcel); const ws = XLSX.utils.json_to_sheet(dataExcel);
const wb = XLSX.utils.book_new(); const wb = XLSX.utils.book_new();
XLSX.utils.book_append_sheet(wb, ws, `Data ${pageName}`); XLSX.utils.book_append_sheet(wb, ws, `Data ${pageName}`);
@ -180,24 +231,128 @@ const Resource = ({ params }) => {
setDataExport([]) setDataExport([])
} }
const exportExcelMaterialResource = () => {
const dataExcel = dataExport || [];
const fileName = `Data MaterialResource.xlsx`;
const ws = XLSX.utils.json_to_sheet(dataExcel);
const wb = XLSX.utils.book_new();
XLSX.utils.book_append_sheet(wb, ws, `Data ${pageName}`);
XLSX.writeFile(wb, fileName);
setDataExport([])
}
const handleExportExcel = async () => { const handleExportExcelMaterialDel = async () => {
const payload = { const payload = {
"paging": { "start": 0, "length": -1 }, "columns": [
"joins": [], { "name": "description", "logic_operator": "ilike", "value": "", "operator": "AND" },
"orders": { "columns": ["id"], "ascending": false } ],
"joins": [
{ "name": "m_proyek", "column_join": "proyek_id", "column_results": ["kode_sortname", "nama"] }
],
"orders": { "columns": ["id"], "ascending": true },
"paging": { "start": 0, "length": -1 }
} }
if (parseInt(role_id) !== 1) {
payload["columns"] = [ const result = await axios
{ "name": "id", "logic_operator": "=", "value": proyek_id, "operator": "AND" } .post(REQUEST_MATERIAL_SEARCH, payload, HEADER)
.then(res => res)
.catch((error) => error.response);
if (result && result.data && result.data.code == 200) {
let resData = result.data.data;
const excelData = [];
resData.map((n, index) => {
let dataRow = {
"Nama Material": n.description,
"Quantity": n.qty,
"Status": n.status,
"Price": n.price,
"Uom": n.uom,
}
excelData.push(dataRow)
})
await setDataExport(excelData);
} else {
NotificationManager.error('Gagal Export Data!!', 'Failed');
}
}
const handleExportExcelRequestMaterial = async () => {
const payload = {
"columns": [
{ "name": "description", "logic_operator": "ilike", "value": "", "operator": "AND" },
],
"joins": [
{ "name": "m_proyek", "column_join": "proyek_id", "column_results": ["kode_sortname", "nama"] }
],
"orders": { "columns": ["id"], "ascending": true },
"paging": { "start": 0, "length": -1 }
}
const result = await axios
.post(REQUEST_MATERIAL_SEARCH, payload, HEADER)
.then(res => res)
.catch((error) => error.response);
if (result && result.data && result.data.code == 200) {
let resData = result.data.data;
const excelData = [];
resData.map((n, index) => {
let dataRow = {
"Nama Material": n.description,
"Quantity": n.qty,
"Status": n.status,
"Price": n.price,
"Uom": n.uom,
}
excelData.push(dataRow)
})
await setDataExport(excelData);
} else {
NotificationManager.error('Gagal Export Data!!', 'Failed');
}
}
const handleExportExcelMatResource = async () => {
let start = 0;
if (currentPage !== 1 && currentPage > 1) {
start = (currentPage * rowsPerPage) - rowsPerPage
}
const payload = {
"columns": [
{
"name": "name",
"logic_operator": "ilike",
"value": search,
"operator": "AND"
}
],
"orders": {
"ascending": true,
"columns": [
'id'
] ]
},
"paging": {
"length": -1,
"start": start
}
} }
const result = await axios const result = await axios
.post(PROYEK_SEARCH, payload, HEADER) .post(MATERIAL_RESOURCE_SEARCH, payload, HEADER)
.then(res => res) .then(res => res)
.catch((error) => error.response); .catch((error) => error.response);
@ -207,12 +362,12 @@ const Resource = ({ params }) => {
const excelData = []; const excelData = [];
resData.map((n, index) => { resData.map((n, index) => {
let dataRow = { let dataRow = {
"Nama Proyek": n.nama, "Nama Material": n.name,
"Biaya": n.biaya, "Quantity": n.qty,
"Color Progress": n.color_progress, "Status": n.status,
"Jumlah Pekerja": n.jumlah_pekerja, "Unit Price": n.unit_price,
"Tanggal Mulai": n.mulai_proyek ? moment(n.mulai_proyek).format(format) : "-", "Uom": n.uom,
"Tanggal Selesai": n.akhir_proyek ? moment(n.akhir_proyek).format(format) : "-",
} }
excelData.push(dataRow) excelData.push(dataRow)
}) })
@ -507,7 +662,7 @@ const Resource = ({ params }) => {
<Button style={{ background: "#4caf50", color: "#fff" }} onClick={() => handleOpenDialog('Save')}><i className="fa fa-plus"></i></Button> <Button style={{ background: "#4caf50", color: "#fff" }} onClick={() => handleOpenDialog('Save')}><i className="fa fa-plus"></i></Button>
</Tooltip> </Tooltip>
<Tooltip title="Export Excel"> <Tooltip title="Export Excel">
<Button style={{ marginLeft: "5px" }} onClick={() => handleExportExcel()}><i className="fa fa-print"></i></Button> <Button style={{ marginLeft: "5px" }} onClick={() => handleExportExcelMatResource()}><i className="fa fa-print"></i></Button>
</Tooltip> </Tooltip>
</Col> </Col>
</Row> </Row>
@ -540,7 +695,7 @@ const Resource = ({ params }) => {
</Col> </Col>
<Col> <Col>
<Tooltip title="Export Excel"> <Tooltip title="Export Excel">
<Button style={{ marginLeft: "5px" }} onClick={() => handleExportExcel()}><i className="fa fa-print"></i></Button> <Button style={{ marginLeft: "5px" }} onClick={() => handleExportExcelRequestMaterial()}><i className="fa fa-print"></i></Button>
</Tooltip> </Tooltip>
</Col> </Col>
</Row> </Row>
@ -565,7 +720,7 @@ const Resource = ({ params }) => {
</Col> </Col>
<Col> <Col>
<Tooltip title="Export Excel"> <Tooltip title="Export Excel">
<Button style={{ marginLeft: "5px" }} onClick={() => handleExportExcel()}><i className="fa fa-print"></i></Button> {/* <Button style={{ marginLeft: "5px" }} onClick={() => handleExportExcel()}><i className="fa fa-print"></i></Button> */}
</Tooltip> </Tooltip>
</Col> </Col>
</Row> </Row>
@ -603,6 +758,7 @@ const Resource = ({ params }) => {
dataEdit={dataEdit} dataEdit={dataEdit}
clickOpenModal={clickOpenModal} clickOpenModal={clickOpenModal}
dataParent={allDataMenu} dataParent={allDataMenu}
dataUom={dataSatuan}
/> />
<Tabs defaultActiveKey="1"> <Tabs defaultActiveKey="1">
<TabPane tab="Material Resource Pool" key="1"> <TabPane tab="Material Resource Pool" key="1">

103
src/views/SimproV2/ResourceWorker/index.js

@ -231,23 +231,92 @@ const ResourceWorker = ({ params }) => {
const handleExportExcel = async () => { const handleExportExcel = async () => {
let start = 0;
if (currentPage !== 1 && currentPage > 1) {
start = (currentPage * rowsPerPage) - rowsPerPage
}
const payload = { const payload = {
"paging": { "start": 0, "length": -1 }, "paging": {
"start": start,
"length": -1
},
"columns": [],
"group_column": {
"operator": "AND",
"group_operator": "OR",
"where": [
{
"name": "name",
"logic_operator": "~*",
"value": search
},
{
"name": "ktp_number",
"logic_operator": "~*",
"value": search
},
{
"name": "name",
"logic_operator": "~*",
"value": search,
"table_name": "m_divisi"
},
{
"name": "employee_type",
"logic_operator": "~*",
"value": search
},
{
"name": "name",
"logic_operator": "~*",
"value": search,
"table_name": "m_roles"
},
{
"name": "phone_number",
"logic_operator": "~*",
"value": search
},
{
"name": "email",
"logic_operator": "~*",
"value": search
},
{
"name": "status_resource",
"logic_operator": "~*",
"value": search
},
]
},
"joins": [
{
"name": "m_roles",
"column_join": "role_id",
"column_results": [
"name",
"description"
]
},
{
"name": "m_divisi",
"column_join": "divisi_id",
"column_results": [
"name"
]
}
],
"orders": {
"columns": [ "columns": [
{ "name": "name", "logic_operator": "ilike", "value": search, "operator": "AND" } "id"
], ],
"joins": [], "ascending": false
"orders": { "columns": ["id"], "ascending": false }
} }
if (parseInt(role_id) !== 1) {
payload["columns"] = [
{ "name": "id", "logic_operator": "=", "value": proyek_id, "operator": "AND" }
]
} }
const result = await axios const result = await axios
.post(PROYEK_SEARCH, payload, HEADER) .post(USER_SEARCH, payload, HEADER)
.then(res => res) .then(res => res)
.catch((error) => error.response); .catch((error) => error.response);
@ -256,12 +325,12 @@ const ResourceWorker = ({ params }) => {
const excelData = []; const excelData = [];
resData.map((n, index) => { resData.map((n, index) => {
let dataRow = { let dataRow = {
"Nama Proyek": n.nama, "NIK (Nomor Induk Karyawan)": n.ktp_number,
"Biaya": n.biaya, "Employee Name": n.name,
"Color Progress": n.color_progress, "Divisi": n.join_second_name,
"Jumlah Pekerja": n.jumlah_pekerja, "Employee Type": n.employee_type,
"Tanggal Mulai": n.mulai_proyek ? moment(n.mulai_proyek).format(format) : "-", "Role": n.join_first_name,
"Tanggal Selesai": n.akhir_proyek ? moment(n.akhir_proyek).format(format) : "-", "Phone No": n.phone_number,
} }
excelData.push(dataRow) excelData.push(dataRow)
}) })

Loading…
Cancel
Save