diff --git a/actions/dealsActions.js b/actions/dealsActions.js index bd3b91a..55991fc 100644 --- a/actions/dealsActions.js +++ b/actions/dealsActions.js @@ -329,13 +329,14 @@ export const attachDealDocument = ({ deal_id, document_id, index, lastModified, }); } -export const removeDealDocument = ({ deal_id, document_id, }) => +export const removeDealDocument = ({ deal_id, document_id, index, }) => { return new Promise((resolve, reject) => { const payload = new URLSearchParams({ deal_id, document_id, + index, }); axios.post(`${ process.env.NEXT_PUBLIC_SELF_API_HOST }/api/deals/file/remove?${ payload.toString() }`, {}, diff --git a/components/DealsStatus/DealContractsSignPaper.js b/components/DealsStatus/DealContractsSignPaper.js new file mode 100644 index 0000000..dfc124c --- /dev/null +++ b/components/DealsStatus/DealContractsSignPaper.js @@ -0,0 +1,485 @@ +import React from "react"; +import { connect } from "react-redux"; +import moment from "moment"; +import { SpinnerCircular } from "spinners-react"; +import { concatSeries } from "async"; +import { eachSeries } from 'async'; +import Select from 'react-select'; + +import { createEDOProject, docEDOCancel, signCheckEDOCreatePrintForm, signCheckPowerAttorneyClient, signDownloadFile, signGetGUIDEntity, signGetPowerAttorneyClient, signGetWMDoc, docEDOSign, docEDOStatus, docEDOConnect } from "../../actions"; + +export default class DealContractsSignPaper extends React.Component +{ + constructor(props) + { + super(props) + this.state = { + finished: false, + loading: false, + disabled: false, + documents: [], + operator_selected: {}, + statuses: {}, + step: 0, + } + } + + componentDidMount() + { + const docs = []; + for(let i in this.props.documents) + { + docs.push({ ...this.props.documents[i], ...{ index: i, loading: true, ready: false, attorney: false } }); + } + this.setState({ documents: docs, loading: true }); + } + + _updateDocs = (id, update) => + { + return new Promise((resolve) => + { + const docs = [ ...this.state.documents ]; + docs[ id ] = { ...docs[id], ...update }; + + this.setState({ documents: docs }, () => + { + resolve(); + }); + }); + } + + _checkDocumentsCompleted = () => + { + const { documents } = this.state; + let completed = true; + + for(let i in documents) + { + console.log({ fin: documents[i] }); + if(!documents[i].completed) + completed = false; + break; + } + + return completed; + } + + _sign = () => + { + //const { documents } = this.props; + const { operator_selected, step } = this.state; + const documents = [ ...this.state.documents ]; + + console.log("_handle_onFormSubmit"); + console.log({ documents, operator_selected }); + + this.setState({ loading: true }, () => + { + eachSeries(documents, async (document, callback) => + { + if(document.completed) + { + callback(); + } + else if(document.signing) + { + await this._updateDocs(document.index, { loading: true, }); + + const status_result = await docEDOStatus({ contract_number: document.id }); + if(status_result.status === 3) + { + await this._updateDocs(document.index, { loading: false, signing: false, ready: false, completed: true, }); + } + else + { + await this._updateDocs(document.index, { loading: false, signing: true, ready: false, }); + } + + callback(); + } + else if(document.ready) + { + console.log({ document }) + await this._updateDocs(document.index, { loading: true, }); + + const status_result = await docEDOStatus({ contract_number: document.id }); + console.log({ status_result }); + + if(status_result.status > 0) + { + const sign_result = await docEDOSign({ edoid: status_result.edoid }); + } + + await this._updateDocs(document.index, { loading: false, signing: true, ready: false, error: false, }); + callback(); + } + else + { + console.log({ document }) + await this._updateDocs(document.index, { loading: true }); + + if(document.attorney && document.attorney_selected !== undefined) + { + const create_edo_project_result = await createEDOProject({ + contract_number: document.id, + power_attorney: document.attorney_selected.value, + power_attorney_number: document.attorney_selected.label, + edo_box: operator_selected.edo_box, + }); + + console.log("\n\nIMPORTANT !!!!!!!!!!\n\n"); + console.log({ create_edo_project_result }); + + const get_guid_entity_result = await signGetGUIDEntity({ + contract_number: document.id, + }); + + console.log("\n\nENTITY !!!!!!!!!!\n\n"); + console.log({ get_guid_entity_result }); + + await this._updateDocs(document.index, { + entity_id: get_guid_entity_result.entityid, + ready: true, + loading: false, + attorney: false, + }); + + callback(); + } + else + { + const create_print_form_result = await signCheckEDOCreatePrintForm({ contract_number: document.id, sign_type: "EDO" }); + console.log({ create_print_form_result }); + + const docs = { status: create_print_form_result.status }; + + if(create_print_form_result.status !== "success") + { + docs.loading = false; + docs.error = true; + docs.ready = true; + docs.message = create_print_form_result.message; + } + + await this._updateDocs(document.index, docs); + + if(create_print_form_result.status === "success") + { + const check_attorney_client_result = await signCheckPowerAttorneyClient({ contract_number: document.id }) + console.log({ check_attorney_client_result }); + + await this._updateDocs(document.index, { attorney: check_attorney_client_result.power_attorney_required, }); + + if(check_attorney_client_result.power_attorney_required) + { + const get_attorney_client_result = await signGetPowerAttorneyClient({ contract_number: document.id }); + console.log({ get_attorney_client_result }); + + if(get_attorney_client_result === null) + { + await this._updateDocs(document.index, { loading: false, error: true, ready: true, message: "Возникла ошибка при создании документа для подписания." }); + callback(); + } + else + { + if(get_attorney_client_result.length === null) + { + await this._updateDocs(document.index, { loading: false, error: true, ready: true, message: "Не обнаружена доверенность на подписанта. Для продолжения подписания обратитесь к своему персональному менеджеру" }); + callback(); + } + else + { + const attorneys = []; + for(let i in get_attorney_client_result) + { + attorneys.push({ + value: get_attorney_client_result[i].power_attorney, + label: get_attorney_client_result[i].power_attorney_number, + }); + } + + await this._updateDocs(document.index, { loading: false, error: false, attorneys, attorney_selected: undefined }); + + callback(); + } + } + } + else + { + const create_edo_project_result = await createEDOProject({ + contract_number: document.id, + edo_box: operator_selected.edo_box, + }); + + const get_guid_entity_result = await signGetGUIDEntity({ + contract_number: document.id, + }); + + const wmdoc_result = await signGetWMDoc({ + entity_name: "evo_contract", + entity_id: get_guid_entity_result.entityid, + sign_type: "EDO", + evo_id: "144", + }); + console.log({ wmdoc_result }); + + const connect_result = await docEDOConnect({ contract_number: document.id }); + + await this._updateDocs(document.index, { + entity_id: get_guid_entity_result.entityid, + ready: true, + loading: false, + attorney: false, + }); + + callback(); + } + } + else + { + callback(); + } + } + } + }, () => + { + if(this._checkDocumentsCompleted()) + { + this.setState({ loading: false, finished: true, }); + } + else + { + this.setState({ loading: false }); + } + }); + }); + } + + _handle_onFormSubmit = (event) => + { + event.preventDefault(); + + const { onFinish } = this.props; + const { finished } = this.state; + const documents = [ ...this.state.documents ]; + + console.log("_handle_onFormSubmit"); + console.log({ documents, }); + + if(finished) + { + onFinish(); + } + else + { + this._sign(); + } + } + + _handle_onAttorneyChange = (index, attorney) => + { + console.log("_handle_onAttorneyChange", { index, attorney }); + this._updateDocs(index, { attorney_selected: attorney }); + } + + _handle_onDownloadFile = (index, entity_id, name) => + { + console.log("_handle_onDownloadFile", { index, entity_id }); + this.setState({ loading: true, disabled: true, }, async () => + { + await this._updateDocs(index, { loading: true }); + + const wmdoc_result = await signDownloadFile({ + payload: { entity_name: "evo_contract", entity_id, sign_type: "EDO", evo_id: "144", }, + filename: `ЛК ЭВОЛЮЦИЯ ${ name }.pdf`, + }); + + await this._updateDocs(index, { loading: false, disabled: false, }); + }); + } + + _handle_onCancelFile = async (index) => + { + const { onCancel } = this.props; + const { documents } = this.state; + await this._updateDocs(index, { loading: true }); + + this.setState({ loading: true, disabled: true }, async () => + { + await docEDOCancel({ contract_number: documents[index].id, doc_type_id: "144" }); + const docs = [ ...this.state.documents ]; + docs.splice(index, 1); + + if(docs.length > 0) + { + this.setState({ documents: docs, loading: false, disabled: false, }); + } + else + { + onCancel(true); + } + }); + } + + _handle_onCancel = () => + { + const { onCancel } = this.props; + const { documents } = this.state; + + console.log("documents", documents, "LEN", documents.length); + + var clean = false; + if(documents.length === 0) + { + clean = true; + } + + onCancel(clean); + } + + _handle_onCheckEDOStatus = async (index) => + { + await this._updateDocs(index, { loading: true }); + + this.setState({ loading: true, disabled: true }, async () => + { + const status_result = await docEDOStatus({ contract_number: document.id }); + console.log({ status_result }); + + if(status_result.status === 3) + { + await this._updateDocs(index, { loading: false, disabled: false, signing: false, completed: true, }); + } + else + { + await this._updateDocs(index, { loading: false, disabled: false, signing: true, completed: false, }); + } + }); + } + + _handle_onGoToEDO = () => + { + + } + + render() + { + const { documents, loading, disabled, finished, operator_selected } = this.state; + const { onCancel, } = this.props; + console.log({ documents }); + + return ( +
+
+

Подписание в бумажном виде

+
+
+ { documents.map((document, index) => + { + console.log({ document }); + return ( +
+
+

+ { document.name } от { moment(document.date).format("DD.MM.YYYY") } + { document.type !== undefined && ({ document.type }) } +

+
+
+ { document.loading ? ( + <> + { loading && ( + + ) } + + ) : ( + <> + { document.error ? ( + <> +
+ { document.message !== undefined && document.message !== null ? document.message : "" } + + ) : ( + <> + { document.attorney && ( + <> +
+
+