import React, {Component} from 'react'; import {connect} from 'react-redux'; import Dropzone from 'react-dropzone'; import {Row, Col, Button} from 'reactstrap'; import {fetchCustomerAcceptance, uploadAcceptance, acceptDeclineInstallation, badFile} from '../../../../actions/orders/customerAcceptanceActions'; import {setDialogContent, setDialogOpenFlag} from '../../../../actions/dialog/dialogActions'; import AcceptanceDeclineReason from './AcceptanceDeclineReason.jsx'; import FileDownloader from '../../../../helpers/FileDownloader'; import {orderTexts} from '../../../../constants/ordersConstants'; import '../../style/CustomerAcceptance.css'; const fileHandler = new FileDownloader(); class CustomerAcceptance extends Component { constructor(props){ super(props); this.state = { reason : '', actionType : '' } this.acceptDeclineInstallation = this.acceptDeclineInstallation.bind(this); this.onEditorChange = this.onEditorChange.bind(this); } downloadDocument(document){ //const fileUrl = `${API_SERVER}/utils/api/downloadFile?idDocument=${document.idDocument}&fileName=${document.documentName}.${document.extension}` const fileUrl = document.url; const fileName = document.name + '.' + document.extension; fileHandler.download(fileUrl, fileName); } uploadFile(idEntry, acceptedFiles, rejectedFiles) { if(acceptedFiles && acceptedFiles.length){ const file = acceptedFiles[0]; this.props.dispatch(uploadAcceptance(idEntry, file)); } if(rejectedFiles && rejectedFiles.length) { this.props.dispatch(badFile()); } } getAcceptanceStatusClass(acceptance, daysDiff) { const statuses = { 0 : 'waiting', 1 : 'accepted', '-1' : 'declined' }; if(acceptance === 0 && daysDiff <= 0){ return 'danger'; } else if(acceptance === 0 && daysDiff <= 3) { return 'warning'; }else{ return statuses[acceptance]; } } acceptDeclineInstallation() { const {idProcess} = this.props.step; const {actionType, reason} = this.state; this.props.dispatch(acceptDeclineInstallation(idProcess, actionType, reason)); this.setState({reason: ''}); } getAcceptanceMessage(customerAcceptance){ const messages = { 0 : orderTexts.labels.NOT_ACCEPTED + (customerAcceptance.acceptanceDueDate || orderTexts.labels.NOT_SET), 1 : orderTexts.labels.ACCEPTED, '-1' : orderTexts.labels.DECLINED } return messages[customerAcceptance.status]; } onEditorChange(reason) { this.setState({reason}); } openDialog(actionType) { const dialogContent = this.getAcceptanceDialog(actionType); this.setState({actionType}); this.props.dispatch(setDialogOpenFlag(true)); this.props.dispatch(setDialogContent(dialogContent)); } getAcceptanceDialog(actionType) { return { buttons: [ { color: 'success', action: this.acceptDeclineInstallation, name: orderTexts.buttons.SEND, id: 'confirm-acceptance' }, { color: 'secondary', name: orderTexts.buttons.CANCEL, id: 'cancel-acceptance' } ], header: orderTexts.labels.ACCEPTANCE_HEADER, TagName: AcceptanceDeclineReason, params: {onEditorChange: this.onEditorChange, actionType} }; } componentDidMount(){ const {idProcess} = this.props.step; this.props.dispatch(fetchCustomerAcceptance(idProcess)); } render() { const {step} = this.props; const customerAcceptance = this.props.customerAcceptance || null; return (
{ customerAcceptance && {this.getAcceptanceMessage(customerAcceptance)}
} { (customerAcceptance && customerAcceptance.status === -1) && {orderTexts.labels.REASON}: {customerAcceptance.decline_reason} } {this.uploadFile(step.idProcess, acceptedFiles, rejectedFiles)}}>
{orderTexts.labels.UPLOAD_ACCEPTANCE_LABEL}
{ (customerAcceptance && customerAcceptance.documents && customerAcceptance.documents.length > 0) &&
{ customerAcceptance.documents.map((document, index) =>
{document.name} ({document.extension}) {document.validation}
) }
} { (customerAcceptance && (!customerAcceptance.documents || customerAcceptance.documents.length === 0) ) &&
{orderTexts.labels.NO_DOCUMENTS_UPLOADED}
}
{orderTexts.labels.ACCEPTANCE_LABEL}
); } } const mapStateToProps = (state) => ({ customerAcceptance: state.processReducer.customerAcceptance }); export default connect(mapStateToProps)(CustomerAcceptance);