Commit a0ad902e authored by Internship UKSW 2019's avatar Internship UKSW 2019

Initial commit

parent d86e9c9a
......@@ -5,6 +5,7 @@ import CreatorDocumentRoute from './CreatorDocumentRoute';
import ApproverDocumentRoute from './ApproverDocumentRoute';
import YourDocumentRoute from './YourDocumentRoute';
import ManageUserRoute from './ManageUserRoute';
import PublishDocumentRoute from './PublishDocumentRoute';
import FormLogin from './FormLogin';
import Home from './Home';
import PreviewDocument from './PreviewDocument';
......@@ -14,6 +15,7 @@ import FormCreateUpdateRole from './FormCreateUpdateRole';
import FormCreateDocument from './FormCreateDocument';
import FormApprover from './FormApproverDocument';
import FormRevision from './FormRevisionDocument';
import FormPublish from './FormPublishDocument';
import NotFoundPage from './NotFoundPage';
import './App.css';
......@@ -31,6 +33,7 @@ class App extends Component {
<CreatorDocumentRoute exact path="/formcreatedocument" component={FormCreateDocument} />
<ApproverDocumentRoute exact path="/formapprover" component={FormApprover} />
<CreatorDocumentRoute exact path="/formrevision" component={FormRevision} />
<PublishDocumentRoute exact path="/Formpublish" component={FormPublish} />
<Route path='*' component={NotFoundPage} />
</Switch>
</BrowserRouter>
......
......@@ -9,6 +9,7 @@ const ApproverDocumentRoute = ({ component: Component, ...rest }) => {
props =>
localStorage.getItem("user") && (
JSON.parse(localStorage.getItem('dataLogin')).user_role[0].includes("Approver") ||
JSON.parse(localStorage.getItem('dataLogin')).user_role[0].includes("Additional Approver") ||
JSON.parse(localStorage.getItem('dataLogin')).user_role[0].includes("Compliance Officer") ||
JSON.parse(localStorage.getItem('dataLogin')).user_role[0].includes("Manager Representative")) ? (
<Component {...props} />
......
import React, { Component } from 'react';
import axios from 'axios';
const $ = require('jquery');
$.DataTable = require('datatables.net');
export class DataTablePublishDocument extends Component {
componentDidMount = () => {
this.$el = $(this.el)
var table = this.$el.DataTable({
scrollY: "250px",
scrollCollapse: true,
paging: false,
data: this.props.data,
columns: [
{ title: "No", width: 30 },
{ title: "Code" },
{ title: "Subject" },
{ title: "Status" },
{ title: "Tracking" },
{ title: "Creator" },
],
columnDefs: [
{
searchable: false,
orderable: false,
targets: 0
},
{
orderable: false,
targets: 1,
render: function (data, type, row) {
return "<a class='text-decoration-none' href='#'>" + data + "</a>";
}
},
{
orderable: false,
targets: 2
},
{
orderable: false,
targets: 3
},
{
orderable: false,
targets: 4
},
{
orderable: false,
targets: 5
},
],
order: [[1, "asc"]],
lengthMenu: [[25, 50, 75, 100], [25, 50, 75, 100]]
})
table.on("order.dt search.dt", function () {
table.column(0, { search: "applied", order: "applied" }).nodes().each(function (cell, i) {
cell.innerHTML = i + 1;
});
}).draw();
table.on("click", "a", function (e) {
e.preventDefault();
let data = table.row($(this).parents("tr")).data();
window.open("http://10.10.86.48:3000/formpublish?subject=" + data[2], "_self");
})
}
componentWillUnmount = () => {
this.$el.DataTable.destroy(true);
}
render() {
return (
<div>
<table className="display" width="100%" ref={el => this.el = el}></table>
</div>
)
}
}
\ No newline at end of file
This diff is collapsed.
......@@ -669,20 +669,10 @@ class FormCreate extends Component {
}
handleChangeContentTitle = (e, index) => {
this.state.contents[index].title = e.target.value
// if (part == "title") {
// this.state.contents[index].title = e.target.value
// }
// else if (part == "file") {
// this.state.contents[index].file = URL.createObjectURL(e.target.files[0])
// }
// else {
// this.state.contents[index].description = e.target.getContent()
// }
this.setState({ contents: this.state.contents })
this.checkValidInputPage4();
}
handleChangeContentDescription = (e, editor, index) => {
//this.state.contents[index].description = e.target.getContent();//Bisa dipake saat ada image (tidak delay) tapi tidak bisa dipake onKeyup
this.state.contents[index].description = editor.getContent();//Bisa dipake onChange dan onKeyup tapi saat ada image jadi delay
this.setState({ contents: this.state.contents })
this.checkValidInputPage4();
......@@ -766,9 +756,10 @@ class FormCreate extends Component {
let dataRevision = {
"doc_id": doc_id,
"rev_code": this.state.revisionCode,
"remark": null,
"remark": "Dokumen Original",
"user_id": user_id,
"status": "Waiting for Approval - " + dataApprover[0].EmpFullName[0]
"status": "Waiting for Approval - " + dataApprover[0].EmpFullName[0],
"approval": ""
}
let postDataRevision = js2xmlparser.parse("_postrevisioninsert", dataRevision);
//Insert Data Revision
......@@ -1046,7 +1037,7 @@ class FormCreate extends Component {
<label className="col-xl-3 col-lg-4 col-md-4 col-sm-3 control-label">Purpose : *</label>
<div className="col-xl-7 col-lg-5 col-md-5 col-sm-7"></div>
<div className="col-xl-2 col-lg-3 col-md-3 col-sm-2">
<Button color="success" onClick={(e) => this.addPurpose(e)}>Add</Button>
<Button color="success" onClick={() => this.addPurpose()}>Add</Button>
</div>
</div>
<div className="form-group row">
......
......@@ -11,7 +11,7 @@ class FormCreateUpdateRole extends Component {
this.state = {
isFetched: false,
isEdit: false,
optionRoles: ["Admin", "Approver", "Compliance Officer", "Creator", "Manager Representative", "Viewer"],
optionRoles: ["Admin", "Approver", "Additional Approver", "Compliance Officer", "Creator", "Manager Representative", "Viewer"],
validFormUser: false,
userid: "",
username: "",
......
This diff is collapsed.
......@@ -88,7 +88,7 @@ class FormRevision extends Component {
for (let i = 0; i < dataRevision.length; i++) {
if (dataRevision[i].rev_code == revisionCode) {
let remark = dataRevision[i].remark;
if (remark == "null") {
if (!dataRevision[i].status.includes("Document Rejected By")) {
remark = "-";
}
let dataRevisionTable = {
......@@ -132,7 +132,7 @@ class FormRevision extends Component {
if (revisionDate.includes("+00:00")) {
revisionDate = revisionDate.replace("+00:00", "");
}
if (dataRevision[dataRevision.length - 1].status.includes("Waiting for Approval")) {
if (!dataRevision[dataRevision.length - 1].status.includes("Document Rejected By")) {
revisionDate = "-";
}
if (effectiveDate.includes("+00:00")) {
......@@ -838,20 +838,10 @@ class FormRevision extends Component {
}
handleChangeContentTitle = (e, index) => {
this.state.contents[index].title = e.target.value
// if (part == "title") {
// this.state.contents[index].title = e.target.value
// }
// else if (part == "file") {
// this.state.contents[index].file = URL.createObjectURL(e.target.files[0])
// }
// else {
// this.state.contents[index].description = e.target.getContent()
// }
this.setState({ contents: this.state.contents })
this.checkValidInputPage4();
}
handleChangeContentDescription = (e, editor, index) => {
//this.state.contents[index].description = e.target.getContent();//Bisa dipake saat ada image (tidak delay) tapi tidak bisa dipake onKeyup
this.state.contents[index].description = editor.getContent();//Bisa dipake onChange dan onKeyup tapi saat ada image jadi delay
this.setState({ contents: this.state.contents })
this.checkValidInputPage4();
......@@ -896,9 +886,10 @@ class FormRevision extends Component {
let dataUpdateRevision = {
"doc_id": this.state.doc_id,
"rev_code": this.state.revisionCode,
"remark": null,
"remark": dataRevision[i].remark,
"user_id": this.state.user_id,
"status": tracking,
"approval": dataRevision[i].approval,
"rev_id": dataRevision[i].rev_id
}
let putDataRevision = js2xmlparser.parse("_putrevisionupdate", dataUpdateRevision);
......@@ -1427,7 +1418,7 @@ class FormRevision extends Component {
<label className="col-xl-3 col-lg-4 col-md-4 col-sm-3 control-label">Purpose : *</label>
<div className="col-xl-7 col-lg-5 col-md-5 col-sm-7"></div>
<div className="col-xl-2 col-lg-3 col-md-3 col-sm-2">
<Button color="success" onClick={(e) => this.addPurpose(e)}>Add</Button>
<Button color="success" onClick={() => this.addPurpose()}>Add</Button>
</div>
</div>
<div className="form-group row">
......
......@@ -14,7 +14,7 @@ class Home extends Component {
}
}
componentDidMount = async () => {
console.log(JSON.parse(localStorage.getItem("dataLogin")).user_id[0]);
console.log(JSON.parse(localStorage.getItem("dataLogin")).user_name[0]);
try {
let response = await axios.get(process.env.REACT_APP_MAIN_APIURL +'/DocumentManagement/home', { headers: { 'accept': 'application/xml' } });
var parseString = require('xml2js').parseString;
......
......@@ -23,7 +23,8 @@ class PreviewDocument extends Component {
definitions: [],
references: [],
revisions: [],
contents: []
contents: [],
approvalDocument: []
}
}
componentDidMount = async () => {
......@@ -39,6 +40,11 @@ class PreviewDocument extends Component {
dataDocument = result.documentCollection.document;
})
if (dataDocument != undefined) {
let responseDataRevision = await axios.get(process.env.REACT_APP_MAIN_APIURL + '/DocumentManagement/revisionkey/' + dataDocument[0].doc_id[0], { headers: { 'accept': 'application/xml' } })
let dataRevision;
parseString(responseDataRevision.data, function (err, result) {
dataRevision = result.revisionCollection.revision;
})
let documentType = dataDocument[0].doc_type[0];
let documentCode = dataDocument[0].doc_code[0];
let revisionDate = dataDocument[0].rev_date[0];
......@@ -50,7 +56,7 @@ class PreviewDocument extends Component {
if (revisionDate.includes("+00:00")) {
revisionDate = revisionDate.replace("+00:00", "");
}
if (documentCode.includes("R0")) {
if (!dataRevision[dataRevision.length - 1].status.includes("Document Rejected By")) {
revisionDate = "-";
}
if (effectiveDate.includes("+00:00")) {
......@@ -60,15 +66,11 @@ class PreviewDocument extends Component {
documentType: documentType, documentCode: documentCode, revisionDate: revisionDate,
effectiveDate: effectiveDate, purpose: purpose, scopes: scopes, definitions: definitions, references: references
})
let responseDataRevision = await axios.get(process.env.REACT_APP_MAIN_APIURL + '/DocumentManagement/revisionkey/' + dataDocument[0].doc_id[0], { headers: { 'accept': 'application/xml' } })
let dataRevision;
parseString(responseDataRevision.data, function (err, result) {
dataRevision = result.revisionCollection.revision;
})
for (let i = 0; i < dataRevision.length; i++) {
let datarow1 = {
"revision_code": dataRevision[i].rev_code[0],
"remark": dataRevision[i].remark[0]
"remark": dataRevision[i].remark[0],
"approval": dataRevision[i].approval[0]
}
this.state.revisions.push(datarow1);
}
......@@ -98,6 +100,40 @@ class PreviewDocument extends Component {
console.log(error + "");
}
}
showApproval = (approval) => {
let approvalDocument;
if (approval != "") {
approvalDocument = approval + "";
if (approvalDocument.includes(", ")) {
approvalDocument = approvalDocument.split(", ");
for (let i = 0; i < approvalDocument.length; i++) {
this.state.approvalDocument.push(approvalDocument[i]);
}
} else {
this.state.approvalDocument.push(approvalDocument);
}
}
return (
<div>
{
this.state.approvalDocument.length == 0 &&
<div>
<label>-</label>
</div>
}
{
this.state.approvalDocument.length !=0 &&
this.state.approvalDocument.map((approval, index) => {
return (
<div key={index}>
<label>{approval}</label>
</div>
)
})
}
</div>
)
}
handleShowDocumentType = () => {
let showText = "";
if (this.state.documentType == "SOP") {
......@@ -150,7 +186,7 @@ class PreviewDocument extends Component {
<Button color="primary">Download</Button>
</div>
<div className="col-xl-9 col-lg-10 col-md-11 col-sm-12 border p-5">
<img src="logo-visionet.png" alt="visionet" width="240px" height="120px" />
<img src="logo-visionet.png" alt="visionet" width="210px" height="70px" />
<h2 className="text-center">PT. VISIONET DATA INTERNASIONAL</h2><hr />
{this.handleShowDocumentType()}<br /><br />
<h2 className="text-center">{this.state.subject}</h2><br />
......@@ -171,8 +207,9 @@ class PreviewDocument extends Component {
<table className="my-table table table-bordered">
<thead>
<tr>
<th className="col-xl-4 col-lg-4 col-md-4 col-sm-4">Revisi</th>
<th className="col-xl-8 col-lg-8 col-md-8 col-sm-8">Keterangan Revisi</th>
<th className="col-xl-3 col-lg-3 col-md-3 col-sm-3">Revisi</th>
<th className="col-xl-5 col-lg-5 col-md-5 col-sm-5">Keterangan Revisi</th>
<th className="col-xl-4 col-lg-4 col-md-4 col-sm-4">Persetujuan</th>
</tr>
</thead>
<tbody>
......@@ -182,6 +219,7 @@ class PreviewDocument extends Component {
<tr key={index}>
<td>{revision.revision_code}</td>
<td>{revision.remark}</td>
<td>{this.showApproval(revision.approval)}</td>
</tr>
)
})
......
import React from 'react'
import { Redirect, Route } from 'react-router-dom'
const PublishDocumentRoute = ({ component: Component, ...rest }) => {
return (
<Route
{...rest}
render={
props =>
localStorage.getItem("user") && JSON.parse(localStorage.getItem('dataLogin')).user_role[0].includes("Compliance Officer") ? (
<Component {...props} />
) : (
<Redirect to={{ pathname: '/', state: { from: props.location } }} />
)
}
/>
)
}
export default PublishDocumentRoute;
\ No newline at end of file
......@@ -5,6 +5,7 @@ import Navbar1 from './Navbar';
import ReactLoading from 'react-loading';
import { DataTableMyDocument } from './DataTableMyDocument';
import { DataTableApprovalDocument } from './DataTableApprovalDocument';
import { DataTablePublishDocument } from './DataTablePublishDocument';
class YourDocument extends Component {
constructor(props) {
......@@ -13,6 +14,7 @@ class YourDocument extends Component {
fetchStatus: false,
dataDocument: [],
dataApprovalDocument: [],
dataPublishDocument: []
}
}
componentDidMount = async () => {
......@@ -44,11 +46,13 @@ class YourDocument extends Component {
datarow.push(JSON.parse(localStorage.getItem("user"))["Full Name"]);
this.state.dataDocument.push(datarow);
}
if (dataRevision[dataRevision.length - 1].status.includes("Waiting for Approval") && dataAllDocument[i].doc_status[0] == "New") {
if ((dataRevision[dataRevision.length - 1].status.includes("Waiting for Approval") || dataRevision[dataRevision.length - 1].status.includes("Waiting for Approver") || dataRevision[dataRevision.length - 1].status.includes("Additional Approver")) && dataAllDocument[i].doc_status[0] == "New") {
if (
(dataRevision[dataRevision.length - 1].status == "Waiting for Approval - " + JSON.parse(localStorage.getItem("dataLogin")).user_name[0] && JSON.parse(localStorage.getItem('dataLogin')).user_role[0].includes("Approver") && JSON.parse(localStorage.getItem("dataLDAP"))["Login Name"] == JSON.parse(dataAllDocument[i].approver[0]).LoginName) ||
(dataRevision[dataRevision.length - 1].status == "Waiting for Approval - Compliance Officer" && JSON.parse(localStorage.getItem('dataLogin')).user_role[0].includes("Compliance Officer")) ||
(dataRevision[dataRevision.length - 1].status == "Waiting for Approval - " + JSON.parse(dataAllDocument[i].approver[0]).EmpFullName && JSON.parse(localStorage.getItem('dataLogin')).user_role[0].includes("Approver") && JSON.parse(localStorage.getItem("dataLDAP"))["Login Name"] == JSON.parse(dataAllDocument[i].approver[0]).LoginName) ||
(dataRevision[dataRevision.length - 1].status == "Waiting for Approval - Manager Representative" && JSON.parse(localStorage.getItem('dataLogin')).user_role[0].includes("Manager Representative"))
(dataRevision[dataRevision.length - 1].status == "Waiting for Approval - Manager Representative" && JSON.parse(localStorage.getItem('dataLogin')).user_role[0].includes("Manager Representative")) ||
(dataRevision[dataRevision.length - 1].status == "Waiting for Additional Approver" && JSON.parse(localStorage.getItem('dataLogin')).user_role[0].includes("Compliance Officer") ||
(dataRevision[dataRevision.length - 1].status.includes(JSON.parse(localStorage.getItem('dataLogin')).user_name[0])) && JSON.parse(localStorage.getItem('dataLogin')).user_role[0].includes("Additional Approver"))
) {
let datarow2 = [];
let user_name = "";
......@@ -67,6 +71,23 @@ class YourDocument extends Component {
this.state.dataApprovalDocument.push(datarow2);
}
}
if (dataRevision[dataRevision.length - 1].status.includes("Waiting for Publish") || dataAllDocument[i].doc_status[0] == "Publish") {
let datarow3 = [];
let user_name2 = "";
for (let j = 0; j < dataUser.length; j++) {
if (dataUser[j].user_id[0] == dataAllDocument[i].user_id[0]) {
user_name2 = dataUser[j].user_name[0];
break;
}
}
datarow3.push("");
datarow3.push(dataAllDocument[i].doc_code[0]);
datarow3.push(dataAllDocument[i].subject[0]);
datarow3.push(dataAllDocument[i].doc_status[0]);
datarow3.push(dataRevision[dataRevision.length - 1].status);
datarow3.push(user_name2);
this.state.dataPublishDocument.push(datarow3);
}
}
}
await this.setState({ fetchStatus: true });
......@@ -114,6 +135,7 @@ class YourDocument extends Component {
this.state.fetchStatus == true &&
(
JSON.parse(localStorage.getItem('dataLogin')).user_role[0].includes("Approver") ||
JSON.parse(localStorage.getItem('dataLogin')).user_role[0].includes("Additional Approver") ||
JSON.parse(localStorage.getItem('dataLogin')).user_role[0].includes("Compliance Officer") ||
JSON.parse(localStorage.getItem('dataLogin')).user_role[0].includes("Manager Representative")
) &&
......@@ -127,6 +149,18 @@ class YourDocument extends Component {
<DataTableApprovalDocument data={this.state.dataApprovalDocument}></DataTableApprovalDocument>
</div>
}
{
this.state.fetchStatus == true && JSON.parse(localStorage.getItem('dataLogin')).user_role[0].includes("Compliance Officer") &&
<div>
<hr />
<div className="form-group row">
<div className="col-xl-12 col-lg-12 col-md-12 col-sm-12">
<h3>Publish Document</h3>
</div>
</div>
<DataTablePublishDocument data={this.state.dataPublishDocument}></DataTablePublishDocument>
</div>
}
</div>
</div>
)
......
......@@ -9,6 +9,7 @@ const YourDocumentRoute = ({ component: Component, ...rest }) => {
props =>
localStorage.getItem("user") && (
JSON.parse(localStorage.getItem('dataLogin')).user_role[0].includes("Approver") ||
JSON.parse(localStorage.getItem('dataLogin')).user_role[0].includes("Additional Approver") ||
JSON.parse(localStorage.getItem('dataLogin')).user_role[0].includes("Compliance Officer") ||
JSON.parse(localStorage.getItem('dataLogin')).user_role[0].includes("Creator") ||
JSON.parse(localStorage.getItem('dataLogin')).user_role[0].includes("Manager Representative")) ? (
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment