import React from "react"; import { eachSeries } from "async"; import { SpinnerCircular } from "spinners-react"; import FileDropzoneDeals from "../../FileDropzoneDeals"; import { attachDealDocument, createQuestionnaire, removeDealDocument, sendDealDocuments, } from "../../../actions"; import Step from "./Step"; import md5 from "md5"; class QuestionnaireForm extends React.Component { constructor(props) { super(props); this.state = { loading: false } } _handle_onQuestionnaire = (event) => { event.preventDefault(); const { onQuestionnaire } = this.props; onQuestionnaire(); } _handle_onCreateQuestionnaire = (event) => { event.preventDefault(); const { onQuestionnaire, deal_id, last_deal_id } = this.props; this.setState({ loading: true, }, () => { createQuestionnaire(last_deal_id) .then(() => { onQuestionnaire(); }); }); } render() { const { loading } = this.state; const { questionnaire_status } = this.props; switch(questionnaire_status) { case "need_to_fill": { return (

Требуется обновить данные в анкете

) } case "need_to_create": { return (

Требуется предоставить данные в анкете клиента

) } case "up_to_date": { return (

Вам не требуется актуализация данных анкеты Клиента

) } default: { return (

Проводится проверка анкеты Вашей организации

) } } } } export default class DocumentsForm extends Step { constructor(props) { super(props); this.state = { open: false, uploaded: {}, uploading: false, completed: false, loading: true, questionnaire_loading: false, }; this.status = 102; } componentDidMount() { if(this.status === this.props.statuscode_id) { this.setState({ open: true, }); } } componentDidUpdate(prevProps, prevState) { if(this.props.statuscode_id !== prevProps.statuscode_id) { if(this.status === this.props.statuscode_id) { this.setState({ open: true }); } else { this.setState({ open: false }); } } if(prevProps.uploaded !== this.props.uploaded) { this.setState({ uploaded: this.props.uploaded, loading: false }, () => { const completed = this._checkFilesCompleted(); this.setState({ completed }); }); } } _handle_onSendFiles = (event) => { event.stopPropagation(); const { dealSelected, onDealsUpdate } = this.props; this.props.onFocusDeal(); setTimeout(() => { this.setState({ loading: true }, () => { sendDealDocuments({ deal_id: dealSelected }) .then(() => { onDealsUpdate(); }) .catch(() => { }); }); }, 100); } _onSendFileStats = (group, index) => { return new Promise((resolve) => { const uploaded = { ...this.state.uploaded }; uploaded[group].files[index].uploaded = true; this.setState({ uploaded }, () => { resolve(); }); }) } _handle_onAddFile = ({ document_id, document_name, files, update }) => { const existed_files = { ...this.state.uploaded }; const group = md5(`${ document_id }_${ document_name }`); const document_files = existed_files[ group ] === undefined ? [] : existed_files[ group ].files; if(existed_files[ group ] === undefined) { existed_files[ group ] = { files: [], }; } let index = parseInt(existed_files[ group ].files.length, 10); for(let nf in files) { files[nf].document_id = document_id; files[nf].group = group; files[nf].group_name = document_name; files[nf].uploaded = false; files[nf].update = update; document_files.push(files[nf]); existed_files[ group ].files = document_files; } this.setState({ uploaded: existed_files, uploading: true }, () => { const { opp_number } = this.props; eachSeries(files, (file, callback) => { const payload = { deal_id: opp_number, document_id: file.document_id, group: file.group, document_name: file.group_name, filename: file.name, lastModified: file.lastModified, type: file.type, file, update, index, }; attachDealDocument(payload) .then(async () => { await this._onSendFileStats(group, index); index++; callback(); }, 1000) }, () => { const completed = this._checkFilesCompleted(); this.setState({ uploading: false, completed }); }); }); } _handle_onDeleteFile = (group, index) => { const uploaded = { ...this.state.uploaded }; const { opp_number } = this.props; const list = [ ...uploaded[group].files ]; list.splice(index, 1); uploaded[group].files = list; this.setState({ uploaded }, () => { const completed = this._checkFilesCompleted(); this.setState({ completed }, () => { removeDealDocument({ deal_id: opp_number, group, index }); }); }); } _checkFilesCompleted = () => { const { uploaded } = this.state; const { documents, questionnaire_status, } = this.props; let c = true; if(questionnaire_status !== "need_to_fill" && questionnaire_status !== "need_to_create") { if(documents !== undefined) { for(let g in documents) { if(!documents[g].add) { continue; } const group = md5(`${ documents[g].doc_id }_${ documents[g].name }`); if(uploaded[group] === undefined || uploaded[group].files.length === 0) { c = false; break; } else { for(let f in uploaded[group].files) { if(!uploaded[group].files[f].uploaded) { c = false; break; } } } } } } else { c = false; } return c; } render() { const { index, statuscode_id, dealSelected, documents, questionnaire_status, onQuestionnaire, } = this.props; const { open, uploaded, uploading, loading, completed } = this.state; console.log("DocumentsForm", "render", { props: this.props }); return (
this.status ? "done" : "" }`}>

№ { dealSelected }

{ this._renderHeader("Сборка пакета документов") }
{ loading ? (
) : ( <>

Анкета клиента:

{ documents === undefined ? ( <> ) : ( <> { documents.map((document, index) => { const group = md5(`${ document.doc_id }_${ document.name }`); return (

{ document.name }:

{ document.add ? ( { this._handle_onAddFile({ document_id: document.doc_id, document_name: document.name, files, update }) } } onDeleteFile={ this._handle_onDeleteFile } document={ document } /> ) : ( <> { document.check === "Документ принят" ? (

{ document.check }

) : (

{ document.check }

) } ) }
) } ) } ) } {/*}

Документы, отправленные Вами принадлежат другой организации бла бла коммент от менеджера

{*/} ) }
{ open && !loading && (
{ this.status === statuscode_id && (
) }
) }
) } }