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

Initial commit

parent 0494aa8e
...@@ -59,14 +59,13 @@ export class DataTableManageUser extends Component { ...@@ -59,14 +59,13 @@ export class DataTableManageUser extends Component {
let data = table.row($(this).parents("tr")).data(); let data = table.row($(this).parents("tr")).data();
let isDelete = window.confirm("Are you sure want to delete " + data[1] + "?"); let isDelete = window.confirm("Are you sure want to delete " + data[1] + "?");
if (isDelete) { if (isDelete) {
// process.env.REACT_APP_MAIN_APIURL
fetch(process.env.REACT_APP_MAIN_APIURL + '/user/', { fetch(process.env.REACT_APP_MAIN_APIURL + '/user/', {
headers: { 'Content-Type': 'application/x-www-form-urlencoded; charset=UTF-8' }, headers: { 'Content-Type': 'application/x-www-form-urlencoded; charset=UTF-8' },
method: 'DELETE', method: 'DELETE',
body: 'email=' + data[5] body: 'email=' + data[5]
}).then(res => { }).then(res => {
window.location.reload(); window.location.reload();
alert("Data has been deleted!"); alert("Data has been successfully deleted!");
}).catch(err => { }).catch(err => {
alert(err + ""); alert(err + "");
}) })
......
import React, { Component } from 'react'; import React, { Component } from 'react';
import axios from 'axios';
const $ = require('jquery'); const $ = require('jquery');
$.DataTable = require('datatables.net'); $.DataTable = require('datatables.net');
...@@ -15,6 +16,7 @@ export class DataTableYourDocument extends Component { ...@@ -15,6 +16,7 @@ export class DataTableYourDocument extends Component {
{ title: "Status" }, { title: "Status" },
{ title: "Tracking" }, { title: "Tracking" },
{ title: "Creator" }, { title: "Creator" },
{ title: "Withdraw" }
], ],
columnDefs: [ columnDefs: [
{ {
...@@ -44,21 +46,70 @@ export class DataTableYourDocument extends Component { ...@@ -44,21 +46,70 @@ export class DataTableYourDocument extends Component {
{ {
orderable: false, orderable: false,
targets: 5 targets: 5
},
{
orderable: false,
targets: 6,
render: function (data, type, row) {
return "&nbsp;&nbsp;<svg style='width:24px;height:24px' viewBox='0 0 24 24'><path fill='currentColor' d='M9,3V4H4V6H5V19A2,2 0 0,0 7,21H17A2,2 0 0,0 19,19V6H20V4H15V3H9M7,6H17V19H7V6M9,8V17H11V8H9M13,8V17H15V8H13Z' /></svg>";
}
} }
], ],
order: [[ 1, "asc" ]], order: [[1, "asc"]],
lengthMenu: [[25, 50, 75, 100], [25, 50, 75, 100]] lengthMenu: [[25, 50, 75, 100], [25, 50, 75, 100]]
}) })
table.on("order.dt search.dt", function () { table.on("order.dt search.dt", function () {
table.column(0, {search:"applied", order:"applied"}).nodes().each( function (cell, i) { table.column(0, { search: "applied", order: "applied" }).nodes().each(function (cell, i) {
cell.innerHTML = i+1; cell.innerHTML = i + 1;
} ); });
} ).draw(); }).draw();
table.on("click", "a", function (e) { table.on("click", "a", function (e) {
e.preventDefault(); e.preventDefault();
let data = table.row($(this).parents("tr")).data(); let data = table.row($(this).parents("tr")).data();
window.open("http://10.10.86.48:3000/previewdocument?subject=" + data[2], "_blank"); window.open("http://10.10.86.48:3000/previewdocument?subject=" + data[2], "_blank");
}) })
table.on("click", "svg", function (e) {
e.preventDefault();
let data = table.row($(this).parents("tr")).data();
var parseString = require('xml2js').parseString;
let isDelete = window.confirm("Are you sure want to withdraw document " + data[2] + "?");
if (isDelete) {
axios.get(process.env.REACT_APP_MAIN_APIURL + '/DocumentManagement/document/' + data[2], { headers: { 'accept': 'application/xml' } })
.then(res => {
let dataDocument;
parseString(res.data, function (err, result) {
dataDocument = result.documentCollection.document;
})
let dataUpdate = {
"doc_code": dataDocument[0].doc_code[0],
"user_id": dataDocument[0].user_id[0],
"doc_type": dataDocument[0].doc_type[0],
"rev_date": dataDocument[0].rev_date[0],
"eff_date": dataDocument[0].eff_date[0],
"subject": dataDocument[0].subject[0],
"information": dataDocument[0].information[0],
"approver": null,
"doc_status": dataDocument[0].doc_status[0],
"cancelled": 1,
"doc_id": dataDocument[0].doc_id[0]
};
//
fetch(process.env.REACT_APP_MAIN_APIURL + '/document', {
headers: { 'Content-Type': 'application/json' },
method: 'PUT',
body: JSON.stringify(dataUpdate)
})
.then(res => {
window.location.reload();
alert("Data has been successfully withdraw!");
}).catch(err => {
alert(err + "");
})
}).catch(err => {
alert(err + "");
})
}
})
} }
componentWillUnmount = () => { componentWillUnmount = () => {
this.$el.DataTable.destroy(true); this.$el.DataTable.destroy(true);
......
...@@ -22,6 +22,9 @@ ...@@ -22,6 +22,9 @@
.button-1 { .button-1 {
width: 90px; width: 90px;
} }
.button-2 {
width: 100px;
}
.background-grey { .background-grey {
background: rgb(50, 50, 50); background: rgb(50, 50, 50);
width: 100%; width: 100%;
......
...@@ -15,7 +15,7 @@ class FormCreate extends Component { ...@@ -15,7 +15,7 @@ class FormCreate extends Component {
checkedOptionScopes: [false, false, false], checkedOptionScopes: [false, false, false],
pageScope: false, pageScope: false,
pageReference: false, pageReference: false,
businessUnit: "SAM",//doc businessUnit: localStorage.getItem('loginUserDpt'),//doc
documentType: "",//doc documentType: "",//doc
revisionCode: "R0",//doc revisionCode: "R0",//doc
revisionDate: "-",//doc revisionDate: "-",//doc
...@@ -46,8 +46,6 @@ class FormCreate extends Component { ...@@ -46,8 +46,6 @@ class FormCreate extends Component {
contents: [{ title: "", description: "" }],//cont contents: [{ title: "", description: "" }],//cont
submitForm: false submitForm: false
}; };
//this.handleChangeContentDescription = this.handleChangeContentDescription.bind(this);
//this.handleChangeContentDescription = this.handleChangeContentDescription.bind(this);
} }
changePage = (action, index) => { changePage = (action, index) => {
let clonePage = this.state.page.slice(); let clonePage = this.state.page.slice();
...@@ -114,9 +112,18 @@ class FormCreate extends Component { ...@@ -114,9 +112,18 @@ class FormCreate extends Component {
this.checkValidInputPage1(); this.checkValidInputPage1();
} }
handleChangeEffectiveDate = (e) => { handleChangeEffectiveDate = (e) => {
let q = new Date();
let todayDate = new Date(q.getFullYear(),q.getMonth(),q.getDate());
let inputDate = new Date(e.target.value);
if (todayDate > inputDate) {
alert("The input date must be bigger or equal to today date!");
return false;
} else {
this.state.effectiveDate = e.target.value; this.state.effectiveDate = e.target.value;
this.setState({ effectiveDate: this.state.effectiveDate }) this.setState({ effectiveDate: this.state.effectiveDate })
this.checkValidInputPage1(); this.checkValidInputPage1();
return true;
}
} }
handleChangeSubject = (e) => { handleChangeSubject = (e) => {
this.state.subject = e.target.value; this.state.subject = e.target.value;
...@@ -1307,7 +1314,6 @@ class FormCreate extends Component { ...@@ -1307,7 +1314,6 @@ class FormCreate extends Component {
&nbsp;{this.state.labelChangePage[0]}&nbsp;</Button> &nbsp;{this.state.labelChangePage[0]}&nbsp;</Button>
</div> </div>
<div className="col-xl-9 col-lg-9 col-md-9 col-sm-9 text-right"> <div className="col-xl-9 col-lg-9 col-md-9 col-sm-9 text-right">
<Button color="primary" disabled>&nbsp; Preview &nbsp;</Button>&nbsp;
<Button color="primary" onClick={() => this.handleSubmitForm()}>&nbsp;&nbsp;Submit <Button color="primary" onClick={() => this.handleSubmitForm()}>&nbsp;&nbsp;Submit
{ {
this.state.submitForm && this.state.submitForm &&
......
import React, { Component } from 'react'; import React, { Component } from 'react';
import { Button } from 'reactstrap'; import { Button } from 'reactstrap';
import { connect } from 'react-redux';
import queryString from 'query-string'; import queryString from 'query-string';
import axios from 'axios'; import axios from 'axios';
import Navbar1 from './Navbar'; import Navbar1 from './Navbar';
...@@ -12,7 +11,7 @@ class FormCreateUpdateRole extends Component { ...@@ -12,7 +11,7 @@ class FormCreateUpdateRole extends Component {
this.state = { this.state = {
isFetched: false, isFetched: false,
isEdit: false, isEdit: false,
optionRoles: ["Admin", "Approver", "Compliance Officer", "Creator", "Manager Representative", "View"], optionRoles: ["Admin", "Approver", "Compliance Officer", "Creator", "Manager Representative", "Viewer"],
validFormUser: false, validFormUser: false,
userid: "", userid: "",
username: "", username: "",
...@@ -115,6 +114,13 @@ class FormCreateUpdateRole extends Component { ...@@ -115,6 +114,13 @@ class FormCreateUpdateRole extends Component {
this.setState({ email: this.state.email }); this.setState({ email: this.state.email });
this.checkValidForm(); this.checkValidForm();
} }
handleShowButtonName = () => {
let name = "Add User"
if (this.state.isEdit) {
name = "Save"
}
return name;
}
handleSubmitForm = async () => { handleSubmitForm = async () => {
var js2xmlparser = require('js2xmlparser'); var js2xmlparser = require('js2xmlparser');
var parseString = require('xml2js').parseString; var parseString = require('xml2js').parseString;
...@@ -139,7 +145,9 @@ class FormCreateUpdateRole extends Component { ...@@ -139,7 +145,9 @@ class FormCreateUpdateRole extends Component {
let postDataEdit = js2xmlparser.parse("_putuserupdate_user_id", dataEdit); let postDataEdit = js2xmlparser.parse("_putuserupdate_user_id", dataEdit);
axios.put(process.env.REACT_APP_MAIN_APIURL + '/DocumentManagement/userupdate/' + this.state.userid, postDataEdit, { headers: { 'Content-Type': 'text/xml' } }) axios.put(process.env.REACT_APP_MAIN_APIURL + '/DocumentManagement/userupdate/' + this.state.userid, postDataEdit, { headers: { 'Content-Type': 'text/xml' } })
.then(res => { .then(res => {
this.setState({ submitForm: false }) if (this.state.email == localStorage.getItem('loginEmail')) {
localStorage.setItem('loginUserRole', userRole1);
}
alert("User role has been successfully edited"); alert("User role has been successfully edited");
this.props.history.push("/manageuser") this.props.history.push("/manageuser")
}) })
...@@ -151,7 +159,6 @@ class FormCreateUpdateRole extends Component { ...@@ -151,7 +159,6 @@ class FormCreateUpdateRole extends Component {
try { try {
await this.setState({ submitForm: true }) await this.setState({ submitForm: true })
let responseCheckDataUser = await axios.get(process.env.REACT_APP_MAIN_APIURL + '/DocumentManagement/userkey/' + this.state.email, { headers: { 'accept': 'application/xml' } }) let responseCheckDataUser = await axios.get(process.env.REACT_APP_MAIN_APIURL + '/DocumentManagement/userkey/' + this.state.email, { headers: { 'accept': 'application/xml' } })
console.log();
let checkDataUser; let checkDataUser;
parseString(responseCheckDataUser.data, function (err, result) { parseString(responseCheckDataUser.data, function (err, result) {
checkDataUser = result.user_dataCollection.user_data; checkDataUser = result.user_dataCollection.user_data;
...@@ -220,11 +227,11 @@ class FormCreateUpdateRole extends Component { ...@@ -220,11 +227,11 @@ class FormCreateUpdateRole extends Component {
<div className="col-xl-12 col-lg-12 col-md-12 col-sm-12"> <div className="col-xl-12 col-lg-12 col-md-12 col-sm-12">
{ {
this.state.isEdit == true && this.state.isEdit == true &&
<h2>Form Edit Data</h2> <h2>Form Edit User</h2>
} }
{ {
this.state.isEdit == false && this.state.isEdit == false &&
<h2>Form Insert Data</h2> <h2>Form Add User</h2>
} }
</div> </div>
</div> </div>
...@@ -273,8 +280,8 @@ class FormCreateUpdateRole extends Component { ...@@ -273,8 +280,8 @@ class FormCreateUpdateRole extends Component {
</div> </div>
<div className="form-group row"> <div className="form-group row">
<div className="col-xl-12 col-lg-12 col-md-12 col-sm-12 text-right"> <div className="col-xl-12 col-lg-12 col-md-12 col-sm-12 text-right">
<Button className="center-block" color="danger" href="/manageuser">&nbsp;Cancel&nbsp;</Button> &nbsp;&nbsp; <Button className="button-2 center-block" color="danger" href="/manageuser">Cancel</Button>&nbsp;
<Button className="center-block" color="success" disabled={!this.state.validFormUser} onClick={() => this.handleSubmitForm()}>&nbsp;&nbsp; Save &nbsp; <Button className="button-2 center-block" color="success" disabled={!this.state.validFormUser} onClick={() => this.handleSubmitForm()}> {this.handleShowButtonName()}
{ {
this.state.submitForm && this.state.submitForm &&
<img src="data:image/gif;base64,R0lGODlhEAAQAPIAAP///wAAAMLCwkJCQgAAAGJiYoKCgpKSkiH/C05FVFNDQVBFMi4wAwEAAAAh/hpDcmVhdGVkIHdpdGggYWpheGxvYWQuaW5mbwAh+QQJCgAAACwAAAAAEAAQAAADMwi63P4wyklrE2MIOggZnAdOmGYJRbExwroUmcG2LmDEwnHQLVsYOd2mBzkYDAdKa+dIAAAh+QQJCgAAACwAAAAAEAAQAAADNAi63P5OjCEgG4QMu7DmikRxQlFUYDEZIGBMRVsaqHwctXXf7WEYB4Ag1xjihkMZsiUkKhIAIfkECQoAAAAsAAAAABAAEAAAAzYIujIjK8pByJDMlFYvBoVjHA70GU7xSUJhmKtwHPAKzLO9HMaoKwJZ7Rf8AYPDDzKpZBqfvwQAIfkECQoAAAAsAAAAABAAEAAAAzMIumIlK8oyhpHsnFZfhYumCYUhDAQxRIdhHBGqRoKw0R8DYlJd8z0fMDgsGo/IpHI5TAAAIfkECQoAAAAsAAAAABAAEAAAAzIIunInK0rnZBTwGPNMgQwmdsNgXGJUlIWEuR5oWUIpz8pAEAMe6TwfwyYsGo/IpFKSAAAh+QQJCgAAACwAAAAAEAAQAAADMwi6IMKQORfjdOe82p4wGccc4CEuQradylesojEMBgsUc2G7sDX3lQGBMLAJibufbSlKAAAh+QQJCgAAACwAAAAAEAAQAAADMgi63P7wCRHZnFVdmgHu2nFwlWCI3WGc3TSWhUFGxTAUkGCbtgENBMJAEJsxgMLWzpEAACH5BAkKAAAALAAAAAAQABAAAAMyCLrc/jDKSatlQtScKdceCAjDII7HcQ4EMTCpyrCuUBjCYRgHVtqlAiB1YhiCnlsRkAAAOwAAAAAAAAAAAA==" /> <img src="data:image/gif;base64,R0lGODlhEAAQAPIAAP///wAAAMLCwkJCQgAAAGJiYoKCgpKSkiH/C05FVFNDQVBFMi4wAwEAAAAh/hpDcmVhdGVkIHdpdGggYWpheGxvYWQuaW5mbwAh+QQJCgAAACwAAAAAEAAQAAADMwi63P4wyklrE2MIOggZnAdOmGYJRbExwroUmcG2LmDEwnHQLVsYOd2mBzkYDAdKa+dIAAAh+QQJCgAAACwAAAAAEAAQAAADNAi63P5OjCEgG4QMu7DmikRxQlFUYDEZIGBMRVsaqHwctXXf7WEYB4Ag1xjihkMZsiUkKhIAIfkECQoAAAAsAAAAABAAEAAAAzYIujIjK8pByJDMlFYvBoVjHA70GU7xSUJhmKtwHPAKzLO9HMaoKwJZ7Rf8AYPDDzKpZBqfvwQAIfkECQoAAAAsAAAAABAAEAAAAzMIumIlK8oyhpHsnFZfhYumCYUhDAQxRIdhHBGqRoKw0R8DYlJd8z0fMDgsGo/IpHI5TAAAIfkECQoAAAAsAAAAABAAEAAAAzIIunInK0rnZBTwGPNMgQwmdsNgXGJUlIWEuR5oWUIpz8pAEAMe6TwfwyYsGo/IpFKSAAAh+QQJCgAAACwAAAAAEAAQAAADMwi6IMKQORfjdOe82p4wGccc4CEuQradylesojEMBgsUc2G7sDX3lQGBMLAJibufbSlKAAAh+QQJCgAAACwAAAAAEAAQAAADMgi63P7wCRHZnFVdmgHu2nFwlWCI3WGc3TSWhUFGxTAUkGCbtgENBMJAEJsxgMLWzpEAACH5BAkKAAAALAAAAAAQABAAAAMyCLrc/jDKSatlQtScKdceCAjDII7HcQ4EMTCpyrCuUBjCYRgHVtqlAiB1YhiCnlsRkAAAOwAAAAAAAAAAAA==" />
...@@ -294,10 +301,4 @@ class FormCreateUpdateRole extends Component { ...@@ -294,10 +301,4 @@ class FormCreateUpdateRole extends Component {
} }
} }
const mapStateToProps = (state) => { export default FormCreateUpdateRole;
return { \ No newline at end of file
session: state.session
}
}
export default connect(mapStateToProps)(FormCreateUpdateRole);
\ No newline at end of file
...@@ -50,6 +50,7 @@ class FormLogin extends Component { ...@@ -50,6 +50,7 @@ class FormLogin extends Component {
}) })
if (dataUser != undefined) { if (dataUser != undefined) {
localStorage.setItem('loginUserDpt', dataUser[0].user_dpt[0]); localStorage.setItem('loginUserDpt', dataUser[0].user_dpt[0]);
localStorage.setItem('loginEmail', dataUser[0].email[0]);
localStorage.setItem('loginUserRole', dataUser[0].user_role[0]); localStorage.setItem('loginUserRole', dataUser[0].user_role[0]);
let store = createStore(sessionReducer); let store = createStore(sessionReducer);
let todoAction = { type: "add_session", payload: responseDataLoginLDAP.data }; let todoAction = { type: "add_session", payload: responseDataLoginLDAP.data };
......
...@@ -25,7 +25,10 @@ const Navbar1 = (props) => { ...@@ -25,7 +25,10 @@ const Navbar1 = (props) => {
</NavLink> </NavLink>
</NavItem> </NavItem>
{ {
localStorage.getItem("loginUserRole") != "View" && (localStorage.getItem("loginUserRole").includes("Approver") ||
localStorage.getItem("loginUserRole").includes("Compliance Officer") ||
localStorage.getItem("loginUserRole").includes("Creator") ||
localStorage.getItem("loginUserRole").includes("Manager Representative")) &&
<NavItem> <NavItem>
<NavLink className={"text-" + (props.menu == "yourdocument" ? "warning" : "light")} href="/yourdocument"> <NavLink className={"text-" + (props.menu == "yourdocument" ? "warning" : "light")} href="/yourdocument">
<SvgIcon> <SvgIcon>
......
...@@ -2,6 +2,7 @@ import React, { Component } from 'react'; ...@@ -2,6 +2,7 @@ import React, { Component } from 'react';
import { connect } from 'react-redux'; import { connect } from 'react-redux';
import queryString from 'query-string'; import queryString from 'query-string';
import axios from 'axios'; import axios from 'axios';
import { Button } from 'reactstrap';
import ReactLoading from 'react-loading'; import ReactLoading from 'react-loading';
import './DocumentManagement.css'; import './DocumentManagement.css';
...@@ -145,7 +146,10 @@ class PreviewDocument extends Component { ...@@ -145,7 +146,10 @@ class PreviewDocument extends Component {
this.state.isFetched == true && this.state.isDocumentNotFound == false && this.state.isFetched == true && this.state.isDocumentNotFound == false &&
<div className="container"> <div className="container">
<div className="row justify-content-center"> <div className="row justify-content-center">
<div className="col-xl-9 col-lg-10 col-md-11 col-sm-12 border my-5 p-5"> <div className="col-xl-9 col-lg-10 col-md-11 col-sm-12 text-right my-2">
<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="240px" height="120px" />
<h2 className="text-center">PT. VISIONET DATA INTERNASIONAL</h2><hr /> <h2 className="text-center">PT. VISIONET DATA INTERNASIONAL</h2><hr />
{this.handleShowDocumentType()}<br /><br /> {this.handleShowDocumentType()}<br /><br />
......
...@@ -20,13 +20,11 @@ class YourDocument extends Component { ...@@ -20,13 +20,11 @@ class YourDocument extends Component {
parseString(response1.data, function (err, result) { parseString(response1.data, function (err, result) {
user_id = result.user_dataCollection.user_data[0].user_id[0]; user_id = result.user_dataCollection.user_data[0].user_id[0];
}) })
console.log("User id", user_id);
let response2 = await axios.get(process.env.REACT_APP_MAIN_APIURL + '/DocumentManagement/yourdocument/' + user_id, { headers: { 'accept': 'application/xml' } }); let response2 = await axios.get(process.env.REACT_APP_MAIN_APIURL + '/DocumentManagement/yourdocument/' + user_id, { headers: { 'accept': 'application/xml' } });
let data; let data;
parseString(response2.data, function (err, result) { parseString(response2.data, function (err, result) {
data = result.documentCollection.document; data = result.documentCollection.document;
}) })
console.log("Data", data);
if (data != undefined) { if (data != undefined) {
for (let i = 0; i < data.length; i++) { for (let i = 0; i < data.length; i++) {
let datarow = []; let datarow = [];
......
...@@ -7,7 +7,10 @@ const YourDocumentRoute = ({ component: Component, ...rest }) => { ...@@ -7,7 +7,10 @@ const YourDocumentRoute = ({ component: Component, ...rest }) => {
{...rest} {...rest}
render={ render={
props => props =>
localStorage.getItem("user") && localStorage.getItem("loginUserRole") != "View" ? ( localStorage.getItem("user") && (localStorage.getItem("loginUserRole").includes("Approver") ||
localStorage.getItem("loginUserRole").includes("Compliance Officer") ||
localStorage.getItem("loginUserRole").includes("Creator") ||
localStorage.getItem("loginUserRole").includes("Manager Representative")) ? (
<Component {...props} /> <Component {...props} />
) : ( ) : (
<Redirect to={{ pathname: '/', state: { from: props.location } }} /> <Redirect to={{ pathname: '/', state: { from: props.location } }} />
......
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