diff --git a/actions/questionnaireActions.js b/actions/questionnaireActions.js
index eb2ce00..4c222d5 100644
--- a/actions/questionnaireActions.js
+++ b/actions/questionnaireActions.js
@@ -54,7 +54,6 @@ export const getQuestionnaire = ({ dispatch, id }) =>
{
//console.log("ACTION", "questionnaire", "getQuestionnaire()", "response", response.data);
-
const founder_persons_template = {
signatory_id: null,
lastname: "",
@@ -224,6 +223,7 @@ export const getQuestionnaire = ({ dispatch, id }) =>
questionnaire.main.is_individual_executive = true;
}
+ questionnaire.licenses = response.data.licenses;
//questionnaire.founder_persons = { ...questionnaire.head_person, ...response.data.head_person };
//console.log("questionnairequestionnairequestionnaire FROM JSON", questionnaire);
@@ -445,8 +445,8 @@ export const downloadQuestionnaire = ({ filename, download = true, base64 = fals
//console.log("questionnaire", questionnaire);
- const { main, contacts, signatory_person, founder_persons, head_person, non_profit, } = questionnaire;
- const payload = { main, contacts, signatory_person, founder_persons, head_person, non_profit, };
+ const { main, contacts, signatory_person, founder_persons, head_person, non_profit, licenses, } = questionnaire;
+ const payload = { main, contacts, signatory_person, founder_persons, head_person, non_profit, licenses };
//console.log({ payload });
diff --git a/components/questionnaire/forms/Form_1_Main/index.js b/components/questionnaire/forms/Form_1_Main/index.js
index e9f6433..dced84c 100644
--- a/components/questionnaire/forms/Form_1_Main/index.js
+++ b/components/questionnaire/forms/Form_1_Main/index.js
@@ -55,6 +55,7 @@ class Form_1_Main extends QuestionnaireForm
fin_goals_trucks: "",
fin_goals_special: "",
},
+ licenses: null,
step: 1,
status: "empty",
loading: false,
@@ -63,12 +64,14 @@ class Form_1_Main extends QuestionnaireForm
this.ref_form = React.createRef();
this.ref_submit = React.createRef();
+ this.ref_licenses_field = React.createRef();
}
static getDerivedStateFromProps(nextProps, prevState)
{
return {
main: nextProps.questionnaire.main,
+ licenses: nextProps.questionnaire.licenses,
step: nextProps.questionnaire.step,
status: nextProps.questionnaire.status,
};
@@ -76,6 +79,26 @@ class Form_1_Main extends QuestionnaireForm
componentDidMount()
{
+ const { licenses } = this.state;
+ //if(licenses !== null && licenses !== undefined && licenses !== "")
+ //{
+ this.ref_licenses_field.current.style.height = (this.ref_licenses_field.current.scrollHeight + 10) + "px";
+ //}
+ }
+
+ componentDidUpdate(prevProps, prevState)
+ {
+ if(this.ref_licenses_field.current.scrollHeight - parseInt(this.ref_licenses_field.current.style.height, 10) > 6)
+ {
+ this.ref_licenses_field.current.style.height = (this.ref_licenses_field.current.scrollHeight + 6) + "px";
+ }
+ else
+ {
+ if(this.ref_licenses_field.current.scrollHeight - parseInt(this.ref_licenses_field.current.style.height, 10) > 6)
+ {
+ this.ref_licenses_field.current.style.height = (this.ref_licenses_field.current.scrollHeight + 6) + "px";
+ }
+ }
}
_handle_onNextPage = (event) =>
@@ -87,6 +110,7 @@ class Form_1_Main extends QuestionnaireForm
const { main } = this.state;
const { company } = this.props;
const check = ["title", "inn", "kpp", "email", "telephone", "financial_loan"];
+
if(company.inn.length > 10)
{
check.splice(check.indexOf("kpp"), 1);
@@ -170,7 +194,7 @@ class Form_1_Main extends QuestionnaireForm
render()
{
const { company, checking } = this.props;
- const { loading, main, status, errors, } = this.state;
+ const { loading, main, licenses, status, errors, } = this.state;
const firstLetter = /(?!.*[DFIOQU])[A-VXY]/i;
const letter = /(?!.*[DFIOQU])[A-Z]/i;
const digit = /[0-9]/;
@@ -298,6 +322,22 @@ class Form_1_Main extends QuestionnaireForm
сумма текущих ежемесячных платежей по действующим кредитам/договорам лизинга
+
+
+
+
{ company.inn.length < 11 && (
diff --git a/lib/evo_anketa_v2.pdf b/lib/evo_anketa_v2.pdf
new file mode 100644
index 0000000..bfee9d1
Binary files /dev/null and b/lib/evo_anketa_v2.pdf differ
diff --git a/pages/api/questionnaire/download.js b/pages/api/questionnaire/download.js
index e260704..75cc9a4 100644
--- a/pages/api/questionnaire/download.js
+++ b/pages/api/questionnaire/download.js
@@ -109,6 +109,7 @@ const fields = {
fin_goals_trucks: { name: "nko_object_trucks", type: "text", bind: null, size: 6 },
fin_goals_special: { name: "nko_object_special", type: "text", bind: null, size: 6 },
},
+ licenses: { name: "licenses", type: "text", bind: null, size: 6 },
};
function good(value)
@@ -128,6 +129,8 @@ export default async function handler(req, res)
console.log("-".repeat(50));
const { questionnaire, filename, base64 } = req.body;
+ console.log("API", "questionnaire", "get", { questionnaire });
+
await cors(req, res);
if(req.headers.cookie !== undefined)
@@ -140,7 +143,7 @@ export default async function handler(req, res)
var crm_jwt = jwt.sign({ acc_number: client_jwt_decoded.acc_number }, process.env.JWT_SECRET_CRM, { noTimestamp: true });
console.log("API", "download", "__dirname", __dirname);
- const formPdfBytes = fs.readFileSync(`${ __dirname }/../../../../../lib/evo_anketa.pdf`);
+ const formPdfBytes = fs.readFileSync(`${ __dirname }/../../../../../lib/evo_anketa_v2.pdf`);
const fontBytes = fs.readFileSync(`${ __dirname }/../../../../../lib/roboto.ttf`);
const pdfDoc = await PDFDocument.load(formPdfBytes);
@@ -151,7 +154,13 @@ export default async function handler(req, res)
for(let group in fields)
{
- if(group === "founder_persons")
+ if(group === "licenses")
+ {
+ fields[group].bind = form.getTextField(fields[group].name);
+ if(fields[group].size !== undefined) { fields[group].bind.setFontSize(fields[group].size); }
+ fields[group].bind.setText(`${ questionnaire[group] }`);
+ }
+ else if(group === "founder_persons")
{
for(let p in questionnaire[group])
{
diff --git a/pages/api/questionnaire/get.js b/pages/api/questionnaire/get.js
index c990300..360cf3f 100644
--- a/pages/api/questionnaire/get.js
+++ b/pages/api/questionnaire/get.js
@@ -1,62 +1,126 @@
// Next.js API route support: https://nextjs.org/docs/api-routes/introduction
+import https from 'https';
import axios from 'axios';
import { Cookies } from 'react-cookie';
import cookie from 'cookie';
import moment from 'moment';
import jwt from 'jsonwebtoken';
-import { cors } from '../../../lib/cors';
import { inspect } from 'util';
+import { get as _get, pick as _pick } from 'lodash';
+
+import { cors } from '../../../lib/cors';
+
+const keepAliveAgent = new https.Agent({ keepAlive: true });
export default async function handler(req, res)
{
console.log("API", "questionnaire", "get");
await cors(req, res);
- if(req.headers.cookie !== undefined)
+ return new Promise((resolve) =>
{
- const cookies = cookie.parse(req.headers?.cookie ? req.headers?.cookie : "");
-
- if(cookies.jwt !== undefined && cookies.jwt !== null)
+ if(req.headers.cookie !== undefined)
{
- var client_jwt_decoded = jwt.verify(cookies.jwt, process.env.JWT_SECRET_CLIENT);
- var crm_jwt = jwt.sign({ acc_number: client_jwt_decoded.acc_number }, process.env.JWT_SECRET_CRM, { noTimestamp: true });
+ const cookies = cookie.parse(req.headers?.cookie ? req.headers?.cookie : "");
- const path = `${ process.env.CRM_API_HOST }/lk/Questionnaire/InfoQuestionnaire/`;
-
- try
+ if(cookies.jwt !== undefined && cookies.jwt !== null)
{
- const { id } = req.query;
- await axios.get(path, {
- params: { name: id },
- headers: {
- "Authorization": `Bearer ${ crm_jwt }`,
- }
- })
- .then((crm_response) =>
- {
- console.log("crm_response for", path);
- console.log(inspect(crm_response.data, true, null, true));
+ var client_jwt_decoded = jwt.verify(cookies.jwt, process.env.JWT_SECRET_CLIENT);
+ var crm_jwt = jwt.sign({ acc_number: client_jwt_decoded.acc_number }, process.env.JWT_SECRET_CRM, { noTimestamp: true });
- res.status(200).json(crm_response.data);
- })
- .catch((error) =>
- {
- console.error(error);
- console.error("-".repeat(30), "error.response.data:");
- console.error(error.response.data);
+ const path = `${ process.env.CRM_API_HOST }/lk/Questionnaire/InfoQuestionnaire/`;
- res.status(500).json(error.response.data);
- });
+ try
+ {
+ const { id } = req.query;
+ axios.get(path, {
+ params: { name: id },
+ headers: {
+ "Authorization": `Bearer ${ crm_jwt }`,
+ }
+ })
+ .then((crm_response) =>
+ {
+ console.log("crm_response for", path);
+ console.log(inspect(crm_response.data, true, null, true));
+
+ if(crm_response.data.licenses === null)
+ {
+ axios.post(`https://suggestions.dadata.ru/suggestions/api/4_1/rs/findById/party`, { query: crm_response.data.inn }, {
+ httpAgent: keepAliveAgent,
+ headers: {
+ "Content-Type": "application/json",
+ "Authorization": `Token ${ process.env.DADATA_API_KEY }`,
+ "X-Secret": process.env.DADATA_SECRET_KEY
+ },
+ })
+ .then((api_response) =>
+ {
+ console.log("API", "RESPONSE", "licenses");
+ console.log(api_response.data.suggestions[0].data.licenses);
+
+ const licenses_list = _get(api_response, "data.suggestions[0].data.licenses", []);
+ const licenses_chunks = [];
+
+ if(licenses_list !== null && licenses_list.length > 0)
+ {
+ for(let i in licenses_list)
+ {
+ licenses_chunks.push(
+ `${ licenses_list[i].series !== null ? licenses_list[i].series+" " : "" }${ licenses_list[i].number } от ${ moment(licenses_list[i].issue_date).format("DD.MM.YYYY") }`
+ );
+ }
+ }
+
+ if(licenses_chunks.length > 0)
+ {
+ crm_response.data.licenses = licenses_chunks.join(", ");
+ }
+
+ res.status(200).json(crm_response.data);
+ resolve();
+ })
+ .catch((error) =>
+ {
+ console.log("error");
+ console.error(error);
+
+ res.status(500).send();
+ resolve();
+ });
+ }
+ else
+ {
+ res.status(200).json(crm_response.data);
+ resolve();
+ }
+ })
+ .catch((error) =>
+ {
+ console.error(error);
+ console.error("-".repeat(30), "error.response.data:");
+ console.error(error.response.data);
+
+ res.status(500).json(error.response.data);
+ resolve();
+ });
+ }
+ catch(e)
+ {
+ console.error(e);
+ res.status(500).send(e);
+ }
}
- catch(e)
+ else
{
- console.error(e);
- res.status(500).send(e);
+ res.status(403);
+ resolve();
}
}
else
{
res.status(403);
+ resolve();
}
- }
+ });
}
\ No newline at end of file
diff --git a/pages/api/questionnaire/licenses/get.js b/pages/api/questionnaire/licenses/get.js
new file mode 100644
index 0000000..dffcc9f
--- /dev/null
+++ b/pages/api/questionnaire/licenses/get.js
@@ -0,0 +1,84 @@
+// Next.js API route support: https://nextjs.org/docs/api-routes/introduction
+import axios from 'axios';
+import { Cookies } from 'react-cookie';
+import cookie from 'cookie';
+import moment from 'moment';
+import jwt from 'jsonwebtoken';
+import { inspect } from 'util';
+import md5 from 'md5';
+
+import { cors } from '../../../lib/cors';
+import RedisClient from '../../../lib/RedisClient';
+
+export default async function handler(req, res)
+{
+ console.log("API", "questionnaire", "read");
+ await cors(req, res);
+
+ if(req.headers.cookie !== undefined)
+ {
+ const cookies = cookie.parse(req.headers?.cookie ? req.headers?.cookie : "");
+
+ if(cookies.jwt !== undefined && cookies.jwt !== null)
+ {
+ console.log("cookies.jwt");
+ console.log(cookies.jwt);
+
+ var client_jwt_decoded = jwt.verify(cookies.jwt, process.env.JWT_SECRET_CLIENT);
+ var crm_jwt = jwt.sign({ acc_number: client_jwt_decoded.acc_number }, process.env.JWT_SECRET_CRM, { noTimestamp: true });
+
+ try
+ {
+ const key = md5(`licenses_${ client_jwt_decoded.acc_number }`);
+ const licenses = await RedisClient.get(key);
+ if(licenses !== null)
+ {
+ console.log("JSON.parse(licenses)");
+ console.log(JSON.parse(licenses));
+
+ res.status(200).json(JSON.parse(licenses));
+ }
+ else
+ {
+ const { query, } = req.body;
+
+ axios.post(`https://suggestions.dadata.ru/suggestions/api/4_1/rs/findById/party`, { query }, {
+ httpAgent: keepAliveAgent,
+ headers: {
+ "Content-Type": "application/json",
+ "Authorization": `Token ${ process.env.DADATA_API_KEY }`,
+ "X-Secret": process.env.DADATA_SECRET_KEY
+ },
+ })
+ .then((api_response) =>
+ {
+ console.log("API", "RESPONSE", "licenses");
+ console.log(api_response.data);
+
+ res.status(200).send(api_response.data);
+ resolve();
+ })
+ .catch((error) =>
+ {
+ console.log("error");
+ console.error(error);
+
+ res.status(500).send();
+ resolve();
+ });
+ }
+ }
+ catch(error)
+ {
+ console.error("error");
+ console.error(error);
+
+ res.status(500).send();
+ }
+ }
+ else
+ {
+ res.status(403);
+ }
+ }
+}
\ No newline at end of file
diff --git a/pages/api/questionnaire/send.js b/pages/api/questionnaire/send.js
index af7a50c..bbe3168 100644
--- a/pages/api/questionnaire/send.js
+++ b/pages/api/questionnaire/send.js
@@ -217,6 +217,7 @@ export default async function handler(req, res)
} };
payload.financial_loan = checkNullEmpty(payload.financial_loan) ? parseFloat(payload.financial_loan.toString().replace(/[^0-9.]/g, '')) : null;
+ payload.licenses = parsed.licenses;
console.log({ id, path });
console.log("payload", "*".repeat(100));
diff --git a/reducers/initialState.js b/reducers/initialState.js
index dedc8cf..1b24931 100644
--- a/reducers/initialState.js
+++ b/reducers/initialState.js
@@ -126,7 +126,8 @@ export const questionnaire_template = {
sent: false,
filename: null,
filedate: null,
- }
+ },
+ licenses: [],
};
export const defaultState = {