deal DocumentForm questionnaire creation

This commit is contained in:
merelendor 2023-11-01 02:24:33 +03:00
parent 4f0ac0464e
commit c21f912ce7
4 changed files with 156 additions and 49 deletions

View File

@ -9,6 +9,7 @@ import { eachSeries, each } from "async";
import * as actionTypes from '../constants/actionTypes';
import { getCitizenshipTitleByCode } from '../utils/citizenship';
import { questionnaire_template } from '../reducers/initialState';
import { getCompanyInfo } from './companyActions';
if(process.browser)
{
@ -26,11 +27,28 @@ if(process.browser)
};
}
export const createQuestionnaire = (deal_id) =>
{
return new Promise((resolve, reject) =>
{
axios.post(`${ process.env.NEXT_PUBLIC_SELF_API_HOST }/api/questionnaire/create`, { deal_id }, {
withCredentials: true,
})
.then(() => {}).catch(() => {}).finally(() =>
{
getCompanyInfo({ dispatch: global.store.dispatch })
.then(() => {}).catch(() => {}).finally(() =>
{
resolve();
});
});
});
}
export const getQuestionnaire = ({ dispatch, id }) =>
{
//console.log("ACTION", "support", "getAppeals()", `${ process.env.NEXT_PUBLIC_SELF_API_HOST }/api/questionnaire/get`);
return new Promise((resolve, reject) =>
{
axios.get(`${ process.env.NEXT_PUBLIC_SELF_API_HOST }/api/questionnaire/read`, {})

View File

@ -4,11 +4,96 @@ import { SpinnerCircular } from "spinners-react";
import FileDropzoneDeals from "../../FileDropzoneDeals";
import { attachDealDocument, removeDealDocument, sendDealDocuments, } from "../../../actions";
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 } = this.props;
this.setState({ loading: true, }, () =>
{
createQuestionnaire(deal_id)
.then(() =>
{
onQuestionnaire();
});
});
}
render()
{
const { loading } = this.state;
const { questionnaire_status } = this.props;
switch(questionnaire_status)
{
case "need_to_fill":
{
return (
<div className="message alert">
<p>Требуется обновить данные в анкете</p>
<button className="button button-blue" onClick={ this._handle_onQuestionnaire }>Актуализировать данные</button>
</div>
)
}
case "need_to_create":
{
return (
<div className="message alert">
<p>Требуется предоставить данные в анкете клиента</p>
<button className="button button-blue" style={{ minWidth: "130px" }} onClick={ this._handle_onCreateQuestionnaire }>
{ loading ? (
<SpinnerCircular size={24} thickness={100} speed={100} color="rgba(255, 255, 255, 1)" secondaryColor="rgba(255, 255, 255, 0.5)" style={{ marginTop: "0px" }}/>
) :
"Создать анкету"
}
</button>
</div>
)
}
case "up_to_date":
{
<div className="message ok">
<p>Вам не требуется актуализация данных анкеты Клиента</p>
</div>
}
default:
{
return (
<div className="message wait">
<p>Проводится проверка анкеты Вашей организации</p>
</div>
)
}
}
}
}
export default class DocumentsForm extends Step
{
constructor(props)
@ -20,6 +105,7 @@ export default class DocumentsForm extends Step
uploading: false,
completed: false,
loading: true,
questionnaire_loading: false,
};
this.status = 102;
}
@ -176,44 +262,39 @@ export default class DocumentsForm extends Step
});
}
_handle_onQuestionnaire = (event) =>
{
const { onQuestionnaire } = this.props;
event.preventDefault();
onQuestionnaire();
}
_checkFilesCompleted = () =>
{
const { uploaded } = this.state;
const { documents } = this.props;
const { documents, questionnaire_status, } = this.props;
let c = true;
if(documents !== undefined)
if(questionnaire_status !== "need_to_fill" && questionnaire_status !== "need_to_create")
{
for(let g in documents)
if(documents !== undefined)
{
if(!documents[g].add)
for(let g in documents)
{
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(!documents[g].add)
{
if(!uploaded[group].files[f].uploaded)
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)
{
c = false;
break;
if(!uploaded[group].files[f].uploaded)
{
c = false;
break;
}
}
}
}
@ -229,7 +310,7 @@ export default class DocumentsForm extends Step
render()
{
const { index, statuscode_id, dealSelected, documents, questionnaire_status, } = this.props;
const { index, statuscode_id, dealSelected, documents, questionnaire_status, onQuestionnaire, } = this.props;
const { open, uploaded, uploading, loading, completed } = this.state;
return (
@ -250,24 +331,11 @@ export default class DocumentsForm extends Step
<p><b>Анкета клиента:</b></p>
</div>
<div className="right">
{ questionnaire_status === "need_to_fill" ? (
<div className="message alert">
<p>Требуется обновить данные в анкете</p>
<button className="button button-blue" onClick={ this._handle_onQuestionnaire }>Актуализировать данные</button>
</div>
) : (
<>
{ questionnaire_status !== "up_to_date" ? (
<div className="message wait">
<p>Проводится проверка анкеты Вашей организации</p>
</div>
) : (
<div className="message ok">
<p>Вам не требуется актуализация данных анкеты Клиента</p>
</div>
) }
</>
) }
<QuestionnaireForm
questionnaire_status={ questionnaire_status }
onQuestionnaire={ onQuestionnaire }
deal_id={ dealSelected }
/>
</div>
</div>
{ documents === undefined ? (

View File

@ -34,6 +34,7 @@ export default async function handler(req, res)
})
.then((crm_response) =>
{
console.log("/Account/GetCompanyInfo/", "RESPONSE", { data: crm_response.data });
res.status(200).json({ ...crm_response.data, ...{ active: client_jwt_decoded.acc_number } });
})
.catch((error) =>

View File

@ -0,0 +1,20 @@
import CRMRequestPost from '../../../lib/CRMRequestPost';
export default async function handler(req, res)
{
console.log("\n\n", "API", "/questionnaire/create");
const { deal_id } = req.body;
const payload = {
opp_number: deal_id,
};
console.log({ payload });
await CRMRequestPost({ req, res,
path: `${ process.env.CRM_API_HOST }/lk/Questionnaire/Create`,
params: payload,
headers: { "Content-Type": "application/json" },
log: true,
});
}