2023-09-27 13:16:42 +03:00

208 lines
7.7 KiB
JavaScript
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

import React from "react";
import Head from "next/head";
import Image from "next/image";
import Link from "next/link";
import cookie from "cookie";
import numeral from "numeral";
import pluralize from "pluralize-ru";
import { SpinnerCircular } from "spinners-react";
import { connect } from "react-redux";
import { withRouter } from 'next/router';
import moment from "moment";
import QuestionnaireForm from "../QuestionnaireForm";
import { reduxWrapper } from '../../../../store';
import DigitalSignaturesList from "../DigitalSignaturesList";
import { downloadQuestionnaire, uploadSignedFile } from "../../../../actions";
import FormMessage from "../FormMessage";
class Form_9_Status extends QuestionnaireForm
{
constructor(props)
{
super(props);
this.state = {
sign: {},
uploading: false,
file: null,
sent: null,
company: {},
error_file_size: false,
error_send: false,
};
this.ref_file_input = React.createRef();
}
static getDerivedStateFromProps(nextProps, prevState)
{
return {
sign: nextProps.questionnaire.sign,
step: nextProps.questionnaire.step,
company: nextProps.company,
};
}
componentDidMount()
{
}
_handle_onFileUpload = () =>
{
this.ref_file_input.current.click();
}
_handle_onFileChange = (event) =>
{
const file = event.target.files[0];
const error_file_size = file.size > ( 1024 * 1024 * process.env.NEXT_PUBLIC_UPLOAD_SCAN_FILESIZE_LIMIT_MB) ? true : false;
this.setState({ file: file, error_file_size, filename: file.name });
}
_handle_onSend = () =>
{
const { file, company, uploading } = this.state;
if(!uploading)
{
this.setState({ uploading: true, error_send: false, }, () =>
{
uploadSignedFile(file, company.questionnaire_id)
.then(() =>
{
this.setState({ uploading: false, sent: true, error_send: false, }, () =>
{
this.props.onSuccess();
});
})
.catch(() =>
{
this.setState({ uploading: false, sent: false, error_send: true, });
});
});
}
}
render()
{
const { sign, file, uploading, sent, error_file_size, error_send, filename } = this.state;
//console.log("Form_9_Status", "render", { sign });
return (
<React.Fragment>
{ sign.digital && (
<React.Fragment>
<FormMessage
type="success"
title="Анкета заполнена и подписана"
message="Вы заполнили и подписали анкету лизингополучателя посредством ЭЦП. Анкета передана в обрабатывающий центр. Если у сотрудников возникнут вопросы мы свяжемся с Вами. Спасибо!"
/>
<div className="questionnaire status_action">
<button className="button button-blue" style={{ width: "100%", minWidth: "255px" }} onClick={ () => this.props.router.push("/") }>Перейти на главную страницу </button>
</div>
</React.Fragment>
) }
{ !sign.digital && (
<React.Fragment>
<input type="file" id="file" multiple={ false } ref={ this.ref_file_input } style={{ display: "none" }} onChange={ this._handle_onFileChange }/>
{ file === null ? (
<React.Fragment>
<FormMessage
type="moderate"
title="Анкета заполнена и ожидает вашего подписания"
message="Вы заполнили анкету лизингополучателя для подписания в режиме загрузки скана анкеты. Пожалуйста, загрузите скан подписанной анкеты."
/>
<div className="questionnaire status_action">
<>
<button className="button button-blue" style={{ width: "100%", minWidth: "255px" }} onClick={ this._handle_onFileUpload }>Загрузить подписанный документ</button>
</>
</div>
</React.Fragment>
) : (
<React.Fragment>
{ !sent ? (
<React.Fragment>
{ !error_file_size && !error_send ? (
<FormMessage
type="moderate"
title="Анкета заполнена, подписана и ожидает отправки"
message="Вы заполнили и подписали анкету лизингополучателя в режиме загрузки скана анкеты. Пожалуйста, отправьте подписанный документ."
/>
) : (
<React.Fragment>
{ error_file_size && (
<FormMessage
type="error"
title="Ошибка"
message={`Файл «${ filename }» превышает допустимый лимит в ${ process.env.NEXT_PUBLIC_UPLOAD_SCAN_FILESIZE_LIMIT_MB }мб и не может быть загружен.`}
style={{ marginLeft: "0px" }}
/>
) }
{ error_send && (
<FormMessage
type="error"
title="Ошибка"
message="К сожалению в процессе отправки документа возникла ошибка. Пожалуйста, обратитесь к сотруднику Отдела по работе с клиентами или попробуйте еще раз."
style={{ marginLeft: "0px" }}
/>
) }
</React.Fragment>
) }
<div className="questionnaire status_action" style={{ width: "100%" }}>
<div className="docs_list medium-icon">
<div className="row">
<p className="doc_name i-pdf extension">
{ file.name }
<span style={{width: "100%"}}>Подписанный скан анкеты</span>
</p>
{ error_file_size ? (
<button className="button button-blue" style={{ width: "100%", minWidth: "255px" }} onClick={ this._handle_onFileUpload }>Загрузить другой документ</button>
) : (
<button className="button button-blue" style={{ width: "130px" }} onClick={ this._handle_onSend }>
{ uploading ? (
<SpinnerCircular size={ 24 } thickness={ 50 } speed={ 100 } color="rgba(28, 1, 169, 1)" secondaryColor="rgba(236, 239, 244, 1)" />
) : "Отправить" }
</button>
) }
</div>
</div>
</div>
</React.Fragment>
) : (
<React.Fragment>
<FormMessage
type="success"
title="Анкета заполнена и подписана"
message="Вы заполнили и подписали анкету лизингополучателя посредством загрузки скана анкеты. Анкета передана в обрабатывающий центр. Если у сотрудников возникнут вопросы мы свяжемся с Вами. Спасибо!"
/>
<div className="questionnaire status_action">
<button className="button button-blue" style={{ width: "100%", minWidth: "255px" }} onClick={ () => this.props.router.push("/") }>Перейти на главную страницу </button>
</div>
</React.Fragment>
) }
</React.Fragment>
)}
</React.Fragment>
) }
</React.Fragment>
);
}
}
function mapStateToProps(state, ownProps)
{
return {
questionnaire: state.questionnaire,
company: state.company,
}
}
export const getServerSideProps = reduxWrapper.getServerSideProps(store =>
async ({ req, res, query }) =>
{
}
);
export default connect(mapStateToProps)(Form_9_Status);