Browse Source

bug fix export

pull/2/head
nurkomalasari 2 years ago
parent
commit
68b06b9027
  1. 2
      src/views/Master/RoleProject/index.js
  2. 246
      src/views/SimproV2/ResourceMaterial/DialogForm.js
  3. 200
      src/views/SimproV2/ResourceMaterial/index.js
  4. 107
      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 }
}
const result = await axios
.post(PROJECT_ROLE_SEARCH, payload)
.post(PROJECT_ROLE_SEARCH, payload, config)
.then(res => res)
.catch((error) => error.response);
if (result && result.data && result.statusText == "OK") {

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

@ -1,7 +1,7 @@
import React, { useEffect, useState } from 'react'
import {
Modal, ModalHeader, ModalBody, ModalFooter,
Button, Form, FormGroup, Label, Input, Col, Row
Modal, ModalHeader, ModalBody, ModalFooter,
Button, Form, FormGroup, Label, Input, Col, Row
} from 'reactstrap';
import { DatePicker, Tooltip, Select } from 'antd';
import { formatRupiah, formatNumber } from '../../../const/CustomFunc'
@ -9,7 +9,7 @@ import moment from 'moment';
import 'antd/dist/antd.css';
const { Option } = Select
const DialogForm = ({openDialog, closeDialog, toggleDialog, typeDialog, dataEdit}) => {
const DialogForm = ({ openDialog, closeDialog, toggleDialog, typeDialog, dataEdit, dataUom }) => {
const [id, setId] = useState(0)
const [materialName, setMaterialName] = useState('')
const [uom, setUom] = useState('')
@ -30,8 +30,8 @@ const DialogForm = ({openDialog, closeDialog, toggleDialog, typeDialog, dataEdit
useEffect(()=> {
if(typeDialog==="Edit"){
useEffect(() => {
if (typeDialog === "Edit") {
console.log("cel data Edit", dataEdit)
setId(dataEdit.id)
setQty(dataEdit.qty)
@ -73,75 +73,75 @@ const DialogForm = ({openDialog, closeDialog, toggleDialog, typeDialog, dataEdit
setReceivedDate(dataEdit.received_date ? moment(dataEdit.received_date) : null)
setDeliveryDate(dataEdit.delivery_date ? moment(dataEdit.delivery_date) : null)
}
else if (typeDialog === 'Save'){
else if (typeDialog === 'Save') {
setId(0)
}
},[dataEdit,openDialog])
}, [dataEdit, openDialog])
const handleSave = () => {
let data = '';
if(typeDialog==="Save"){
data = {
name: materialName,
qty,
uom,
description,
unit_price: typeof(unitPrice) === 'string' && unitPrice !== '' && unitPrice.includes('.') ? parseInt(unitPrice.replace(/\./g,'')) : unitPrice,
status
}
closeDialog('save', data);
let data = '';
if (typeDialog === "Save") {
data = {
name: materialName,
qty,
uom,
description,
unit_price: typeof (unitPrice) === 'string' && unitPrice !== '' && unitPrice.includes('.') ? parseInt(unitPrice.replace(/\./g, '')) : unitPrice,
status
}
else if (typeDialog === 'Edit') {
console.log('typeof', typeof(unitPrice));
data = {
id,
name: materialName,
qty,
uom,
description,
unit_price: typeof(unitPrice) === 'string' && unitPrice !== '' && unitPrice.includes('.') ? parseInt(unitPrice.replace(/\./g,'')) : unitPrice,
status
}
closeDialog('edit', data);
closeDialog('save', data);
}
else if (typeDialog === 'Edit') {
console.log('typeof', typeof (unitPrice));
data = {
id,
name: materialName,
qty,
uom,
description,
unit_price: typeof (unitPrice) === 'string' && unitPrice !== '' && unitPrice.includes('.') ? parseInt(unitPrice.replace(/\./g, '')) : unitPrice,
status
}
else if (typeDialog === 'EditMatReq') {
data = {
id,
uom,
description,
status,
required_date: requiredDate,
qty,
qty_received: qtyReceived,
fom_date: fomDate,
pr_date: prDate,
po_date: poDate,
received_date: receivedDate,
delivery_date: deliveryDate,
price: typeof(priceReq) === 'string' && priceReq !== '' && priceReq.includes('.') ? parseInt(priceReq.replace(/\./g,'')) : priceReq,
}
closeDialog('EditMatReq', data);
closeDialog('edit', data);
}
else if (typeDialog === 'EditMatReq') {
data = {
id,
uom,
description,
status,
required_date: requiredDate,
qty,
qty_received: qtyReceived,
fom_date: fomDate,
pr_date: prDate,
po_date: poDate,
received_date: receivedDate,
delivery_date: deliveryDate,
price: typeof (priceReq) === 'string' && priceReq !== '' && priceReq.includes('.') ? parseInt(priceReq.replace(/\./g, '')) : priceReq,
}
else if (typeDialog === 'EditMatDelv') {
data = {
id,
uom,
description,
status,
required_date: requiredDate,
qty,
qty_received: qtyReceived,
fom_date: fomDate,
pr_date: prDate,
po_date: poDate,
received_date: receivedDate,
delivery_date: deliveryDate
}
closeDialog('EditMatDelv', data);
closeDialog('EditMatReq', data);
}
else if (typeDialog === 'EditMatDelv') {
data = {
id,
uom,
description,
status,
required_date: requiredDate,
qty,
qty_received: qtyReceived,
fom_date: fomDate,
pr_date: prDate,
po_date: poDate,
received_date: receivedDate,
delivery_date: deliveryDate
}
setId(0)
setDescription('')
closeDialog('EditMatDelv', data);
}
setId(0)
setDescription('')
}
@ -151,58 +151,74 @@ const DialogForm = ({openDialog, closeDialog, toggleDialog, typeDialog, dataEdit
setDescription('')
}
const setupSelectUom = () => {
return (
<>
{dataUom.map((val, index) => {
return (
<Option key={index} value={val.id}>{val.name}</Option>
)
})}
</>
)
}
const renderForm = () => {
if (typeDialog === 'Save' || typeDialog === 'Edit') {
return(
return (
<Form>
<Row>
<Col md={12}>
<FormGroup>
<Label className="capitalize">Material Name</Label>
<Input type="text" value={materialName} onChange={(e)=> setMaterialName(e.target.value)} placeholder={`Input material name...`}/>
</FormGroup>
</Col>
<Col md={12}>
<FormGroup>
<Label className="capitalize">Material Name</Label>
<Input type="text" value={materialName} onChange={(e) => setMaterialName(e.target.value)} placeholder={`Input material name...`} />
</FormGroup>
</Col>
</Row>
<Row>
<Col md={6}>
<FormGroup>
<Label className="capitalize">QTY</Label>
<Input type="number" value={qty} onChange={(e) => setQty(e.target.value)} placeholder={`Input qty...`} />
</FormGroup>
</Col>
<Col md={6}>
<FormGroup>
<Label className="capitalize">UOM</Label>
<Select showSearch defaultValue={uom} onChange={(val) => setUom(val)} placeholder="Select Uom" style={{ width: '100%' }}>
{setupSelectUom()}
</Select>
</FormGroup>
<Col md={6}>
<FormGroup>
<Label className="capitalize">QTY</Label>
<Input type="text" value={qty} onChange={(e)=> setQty(e.target.value)} placeholder={`Input qty...`} />
</FormGroup>
</Col>
<Col md={6}>
<FormGroup>
<Label className="capitalize">UOM</Label>
<Input type="text" value={uom} onChange={(e)=> setUom(e.target.value)} placeholder={`Input uom...`} />
</FormGroup>
</Col>
</Col>
</Row>
<Row>
<Col md={6}>
<FormGroup>
<Label className="capitalize">Unit Price</Label>
<Input type="text" value={unitPrice} onChange={(e)=> setUnitPrice(formatNumber(e.target.value))} placeholder={`Unit Price...`} />
</FormGroup>
</Col>
<Col md={6}>
<FormGroup>
<Label className="capitalize">Status</Label>
<Input type="text" value={status} onChange={(e)=> setStatus(e.target.value)} placeholder={`Status ...`} />
</FormGroup>
</Col>
<Col md={6}>
<FormGroup>
<Label className="capitalize">Unit Price</Label>
<Input type="text" value={unitPrice} onChange={(e) => setUnitPrice(formatNumber(e.target.value))} placeholder={`Unit Price...`} />
</FormGroup>
</Col>
<Col md={6}>
<FormGroup>
<Label className="capitalize">Status</Label>
<Input type="text" value={status} onChange={(e) => setStatus(e.target.value)} placeholder={`Status ...`} />
</FormGroup>
</Col>
</Row>
<Row>
<Col md={12}>
<FormGroup>
<Label className="capitalize">Description</Label>
<Input row="2" type="textarea" value={description} onChange={(e)=> setDescription(e.target.value)} placeholder={`Description ...`} />
</FormGroup>
</Col>
<Col md={12}>
<FormGroup>
<Label className="capitalize">Description</Label>
<Input row="2" type="textarea" value={description} onChange={(e) => setDescription(e.target.value)} placeholder={`Description ...`} />
</FormGroup>
</Col>
</Row>
</Form>
)
@ -236,7 +252,7 @@ const DialogForm = ({openDialog, closeDialog, toggleDialog, typeDialog, dataEdit
<Col md={6}>
<FormGroup>
<Label className="capitalize">Description</Label>
<Input row="2" type="textarea" value={description} onChange={(e)=> setDescription(e.target.value)} placeholder={`Description ...`} />
<Input row="2" type="textarea" value={description} onChange={(e) => setDescription(e.target.value)} placeholder={`Description ...`} />
</FormGroup>
</Col>
<Col md={6}>
@ -250,7 +266,7 @@ const DialogForm = ({openDialog, closeDialog, toggleDialog, typeDialog, dataEdit
<Col md={6}>
<FormGroup>
<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>
</Col>
<Col md={6}>
@ -324,7 +340,7 @@ const DialogForm = ({openDialog, closeDialog, toggleDialog, typeDialog, dataEdit
<Col md={6}>
<FormGroup>
<Label className="capitalize">Description</Label>
<Input row="2" type="textarea" value={description} onChange={(e)=> setDescription(e.target.value)} placeholder={`Description ...`} />
<Input row="2" type="textarea" value={description} onChange={(e) => setDescription(e.target.value)} placeholder={`Description ...`} />
</FormGroup>
</Col>
<Col md={6}>
@ -398,18 +414,18 @@ const DialogForm = ({openDialog, closeDialog, toggleDialog, typeDialog, dataEdit
return (
<>
<Modal size="lg" isOpen={openDialog} toggle={toggleDialog}>
<ModalHeader className="capitalize" toggle={closeDialog}>{typeDialog=="Save" ? `Add` : "Edit"} Resource</ModalHeader>
<ModalBody>
<Modal size="lg" isOpen={openDialog} toggle={toggleDialog}>
<ModalHeader className="capitalize" toggle={closeDialog}>{typeDialog == "Save" ? `Add` : "Edit"} Resource</ModalHeader>
<ModalBody>
{renderForm()}
</ModalBody>
<ModalFooter>
<Button color="primary" onClick={() => handleSave()}>{typeDialog === 'Save' ? 'Save' : 'Edit'}</Button>{' '}
<Button className="capitalize" color="secondary" onClick={() => handleCancel()}>Batal</Button>
</ModalFooter>
</Modal>
</ModalBody>
<ModalFooter>
<Button color="primary" onClick={() => handleSave()}>{typeDialog === 'Save' ? 'Save' : 'Edit'}</Button>{' '}
<Button className="capitalize" color="secondary" onClick={() => handleCancel()}>Batal</Button>
</ModalFooter>
</Modal>
{/* <DialogMap
{/* <DialogMap
openDialog={openDialogMap}
closeDialog={handleCloseDialogMap}
toggleDialog={() => toggleMapDialog}

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

@ -14,7 +14,7 @@ import {
PROYEK_ADD, PROYEK_SEARCH, PROYEK_EDIT, PROYEK_DELETE,
MATERIAL_RESOURCE_ADD, MATERIAL_RESOURCE_EDIT, MATERIAL_RESOURCE_DELETE, MATERIAL_RESOURCE_SEARCH,
REQUEST_MATERIAL_SEARCH, REQUEST_MATERIAL_EDIT,
REQUEST_MATERIAL_UPDATE_WAREHOUSE_SITE
REQUEST_MATERIAL_UPDATE_WAREHOUSE_SITE, SATUAN_SEARCH
} from '../../../const/ApiConst';
const { TabPane } = Tabs;
@ -52,6 +52,7 @@ const Resource = ({ params }) => {
const [dataExport, setDataExport] = useState([])
const [dataReqMaterial, setDataReqMaterial] = useState([])
const [dataTable, setDatatable] = useState([])
const [dataSatuan, setDatasatuan] = useState([])
const [idDelete, setIdDelete] = useState(0)
const [openDialog, setOpenDialog] = useState(false)
const [rowsPerPage, setRowsPerPage] = useState(10)
@ -62,6 +63,7 @@ const Resource = ({ params }) => {
useEffect(() => {
getDataReqMaterial()
getDataSatuan()
}, [])
useEffect(() => {
@ -71,7 +73,9 @@ const Resource = ({ params }) => {
useEffect(() => {
const cekData = dataExport || []
if (cekData.length > 0) {
exportExcel()
exportExcelRequestMaterial()
exportExcelMaterialResource()
}
}, [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 value = e.target.value
setSearch(value);
@ -170,9 +221,9 @@ const Resource = ({ params }) => {
setTypeDialog(type)
}
const exportExcel = () => {
const exportExcelRequestMaterial = () => {
const dataExcel = dataExport || [];
const fileName = `Data ${pageName}.xlsx`;
const fileName = `Data Request Material.xlsx`;
const ws = XLSX.utils.json_to_sheet(dataExcel);
const wb = XLSX.utils.book_new();
XLSX.utils.book_append_sheet(wb, ws, `Data ${pageName}`);
@ -180,24 +231,72 @@ const Resource = ({ params }) => {
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 = {
"paging": { "start": 0, "length": -1 },
"joins": [],
"orders": { "columns": ["id"], "ascending": false }
"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 }
}
if (parseInt(role_id) !== 1) {
payload["columns"] = [
{ "name": "id", "logic_operator": "=", "value": proyek_id, "operator": "AND" }
]
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 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(PROYEK_SEARCH, payload, HEADER)
.post(REQUEST_MATERIAL_SEARCH, payload, HEADER)
.then(res => res)
.catch((error) => error.response);
@ -207,12 +306,68 @@ const Resource = ({ params }) => {
const excelData = [];
resData.map((n, index) => {
let dataRow = {
"Nama Proyek": n.nama,
"Biaya": n.biaya,
"Color Progress": n.color_progress,
"Jumlah Pekerja": n.jumlah_pekerja,
"Tanggal Mulai": n.mulai_proyek ? moment(n.mulai_proyek).format(format) : "-",
"Tanggal Selesai": n.akhir_proyek ? moment(n.akhir_proyek).format(format) : "-",
"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
.post(MATERIAL_RESOURCE_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.name,
"Quantity": n.qty,
"Status": n.status,
"Unit Price": n.unit_price,
"Uom": n.uom,
}
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>
</Tooltip>
<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>
</Col>
</Row>
@ -540,7 +695,7 @@ const Resource = ({ params }) => {
</Col>
<Col>
<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>
</Col>
</Row>
@ -565,7 +720,7 @@ const Resource = ({ params }) => {
</Col>
<Col>
<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>
</Col>
</Row>
@ -603,6 +758,7 @@ const Resource = ({ params }) => {
dataEdit={dataEdit}
clickOpenModal={clickOpenModal}
dataParent={allDataMenu}
dataUom={dataSatuan}
/>
<Tabs defaultActiveKey="1">
<TabPane tab="Material Resource Pool" key="1">

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

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

Loading…
Cancel
Save