update for digital certificates list reading, update for download PDF generation, hotfix for digiral var in send

This commit is contained in:
merelendor 2023-04-14 04:54:29 +03:00
parent 31a9c78bbb
commit 38092fdaf9
9 changed files with 168 additions and 67 deletions

View File

@ -102,35 +102,64 @@ export const getQuestionnaire = ({ dispatch, id }) =>
questionnaire.contacts.postal_address = response.data.postal_address !== null ? response.data.postal_address : { name: null, fias_id: null };
questionnaire.contacts.legal_address = response.data.legal_address !== null ? response.data.legal_address : { name: null, fias_id: null };
const head_person_identity_document = questionnaire.head_person.identity_document;
questionnaire.head_person = { ...questionnaire.head_person, ...response.data.head_person };
if(questionnaire.head_person.identity_document === null)
{
questionnaire.head_person.identity_document = head_person_identity_document;
}
questionnaire.head_person.identity_document.citizenship = {
title: response.data.head_person !== null ? getCitizenshipTitleByCode(response.data.head_person.identity_document.citizenship_code) : null,
code: response.data.head_person !== null ? response.data.head_person.identity_document.citizenship_code : null,
title: response.data.head_person !== null && response.data.head_person.identity_document !== null ? getCitizenshipTitleByCode(response.data.head_person.identity_document.citizenship_code) : null,
code: response.data.head_person !== null && response.data.head_person.identity_document !== null ? response.data.head_person.identity_document.citizenship_code : 643,
};
const signatory_person_identity_document = questionnaire.signatory_person.identity_document;
questionnaire.signatory_person = { ...questionnaire.signatory_person, ...response.data.signatory_person };
questionnaire.signatory_person.identity_document.citizenship = {
title: response.data.signatory_person !== null ? getCitizenshipTitleByCode(response.data.signatory_person.identity_document.citizenship_code) : null,
code: response.data.signatory_person !== null ? response.data.signatory_person.identity_document.citizenship_code : null,
title: response.data.signatory_person !== null && response.data.signatory_person.identity_document !== null ? getCitizenshipTitleByCode(response.data.signatory_person.identity_document.citizenship_code) : null,
code: response.data.signatory_person !== null && response.data.signatory_person.identity_document !== null ? response.data.signatory_person.identity_document.citizenship_code : 643,
};
if(questionnaire.signatory_person.identity_document === null)
{
questionnaire.signatory_person.identity_document = signatory_person_identity_document;
}
for(let i in response.data.founder_persons)
{
console.log("response.data.founder_persons", response.data.founder_persons);
questionnaire.founder_persons[i] = response.data.founder_persons[i];
questionnaire.founder_persons[i].identity_document.citizenship = {
title: getCitizenshipTitleByCode(response.data.founder_persons[i].identity_document.citizenship_code),
code: response.data.founder_persons[i].identity_document.citizenship_code,
};
if(questionnaire.founder_persons[i] !== null)
{
if(questionnaire.founder_persons[i].identity_document !== null)
{
questionnaire.founder_persons[i].identity_document.citizenship = {
title: getCitizenshipTitleByCode(response.data.founder_persons[i].identity_document.citizenship_code),
code: response.data.founder_persons[i].identity_document.citizenship_code,
};
}
else
{
questionnaire.founder_persons[i].identity_document = { ...founder_persons_template.identity_document };
}
}
}
for(let i in response.data.client_contacts)
{
questionnaire.client_contacts[i] = response.data.client_contacts[i];
questionnaire.client_contacts[i].identity_document.citizenship = {
title: getCitizenshipTitleByCode(response.data.client_contacts[i].identity_document.citizenship_code),
code: response.data.client_contacts[i].identity_document.citizenship_code,
};
if(questionnaire.client_contacts[i] !== null)
{
if(questionnaire.client_contacts[i].identity_document !== null)
{
questionnaire.client_contacts[i].identity_document.citizenship = {
title: getCitizenshipTitleByCode(response.data.client_contacts[i].identity_document.citizenship_code),
code: response.data.client_contacts[i].identity_document.citizenship_code,
};
}
else
{
questionnaire.client_contacts[i].identity_document = { ...founder_persons_template.identity_document };
}
}
}
//questionnaire.founder_persons = { ...questionnaire.head_person, ...response.data.head_person };

View File

@ -38,11 +38,15 @@ export default class DigitalSignaturesList extends React.Component
for(let i in certificates)
{
const certificate = certificates[i];
let today = moment();
if(today < moment(certificate.info.validToDate))
if(certificate?.info?.subjectFields['ИНН ЮЛ'] !== null || certificate?.info?.subjectFields['ИНН'] !== null)
{
certificate.info.validToDate = moment(certificate.info.validToDate).format('DD.MM.YYYY');
certificates_list.push(certificate);
let today = moment();
if(today < moment(certificate.info.validToDate))
{
certificate.info.validToDate = moment(certificate.info.validToDate).format('DD.MM.YYYY');
certificates_list.push(certificate);
}
}
}
@ -174,6 +178,15 @@ export default class DigitalSignaturesList extends React.Component
<p className="item_title">{ certificate?.info?.subjectName.replace(/\""/g, '@').replace(/"/g, '').replace(/@/g, '"') }</p>
<p className="item_desc">
{ certificate.info.subjectFields['SN'] || certificate.info.subjectFields['SN'] ? (<span>{ certificate.info.subjectFields['SN'] } { certificate.info.subjectFields['G'] }</span>) : null }
</p>
<p className="item_desc">
<span>ИНН { certificate?.info?.subjectFields['ИНН ЮЛ'] !== null ? certificate?.info?.subjectFields['ИНН ЮЛ'] : certificate.info.subjectFields['ИНН'] }</span>
</p>
<p className="item_desc">
{ certificate?.info?.subjectFields['ОГРНИП'] && (<span>ОГРНИП { certificate.info.subjectFields['ОГРНИП'] }</span>) }
{ certificate?.info?.subjectFields['ОГРН'] && (<span>ОГРНИП { certificate.info.subjectFields['ОГРН'] }</span>) }
</p>
<p className="item_desc">
<span>Подпись действительна до { certificate?.info?.validToDate }</span>
</p>
</div>

View File

@ -23,7 +23,6 @@ class Form_2_Contacts extends QuestionnaireForm
super(props);
this.state = {
contacts: {
mail_delivery_address_type: 100000000,
loading: false,
fact_address: {
@ -144,38 +143,38 @@ class Form_2_Contacts extends QuestionnaireForm
<div className="form_field checkbox">
<input type="radio" hidden=""
value={ 100000000 }
id="contacts.address_type_legal"
id="main.mail_delivery_address_type.legal"
name="main.mail_delivery_address_type"
checked={ parseInt(mail_delivery_address_type, 10) === 100000000 ? true : false }
onChange={ (event) => { this._removeError("contacts.postal_address"); this._handle_onCheckboxFieldChange(event.target.name, event.target.value); } }
onChange={ (event) => { this._removeError("contacts.postal_address"); this._handle_onCheckboxFieldChange(event.target.name, parseInt(event.target.value, 10)); } }
disabled={ checking }
/>
<label htmlFor="contacts.address_type_legal" className="unselectable">По юридическому адресу, указанному в ЕГРЮЛ</label>
<label htmlFor="main.mail_delivery_address_type.legal" className="unselectable">По юридическому адресу, указанному в ЕГРЮЛ</label>
</div>
) }
<div className="form_field checkbox">
<input type="radio" hidden=""
value={ 100000001 }
id="contacts.address_type_fact"
id="main.mail_delivery_address_type.fact"
name="main.mail_delivery_address_type"
checked={ parseInt(mail_delivery_address_type, 10) === 100000001 ? true : false }
onChange={ (event) => { this._removeError("contacts.postal_address"); this._handle_onCheckboxFieldChange(event.target.name, event.target.value); } }
onChange={ (event) => { this._removeError("contacts.postal_address"); this._handle_onCheckboxFieldChange(event.target.name, parseInt(event.target.value, 10)); } }
disabled={ checking }
/>
<label htmlFor="contacts.address_type_fact" className="unselectable">По фактическому адресу, указанному в настоящей анкете</label>
<label htmlFor="main.mail_delivery_address_type.fact" className="unselectable">По фактическому адресу, указанному в настоящей анкете</label>
</div>
<div className="form_field checkbox">
<input type="radio" hidden=""
value={ 100000002 }
id="contacts.address_type_postal"
id="main.mail_delivery_address_type.postal"
name="main.mail_delivery_address_type"
checked={ parseInt(mail_delivery_address_type, 10) === 100000002 ? true : false }
onChange={ (event) => this._handle_onCheckboxFieldChange(event.target.name, event.target.value) }
onChange={ (event) => this._handle_onCheckboxFieldChange(event.target.name, parseInt(event.target.value, 10)) }
disabled={ checking }
/>
<label htmlFor="contacts.address_type_postal" className="unselectable" style={{ width: "100%" }}>
<label htmlFor="main.mail_delivery_address_type.postal" className="unselectable" style={{ width: "100%" }}>
<span>По следующему адресу { parseInt(mail_delivery_address_type, 10) === 100000002 && <sup className="required_label">*</sup> }</span>
<AddressSuggests
className={ errors.indexOf("contacts.postal_address") > -1 ? "error" : "" }

View File

@ -547,6 +547,8 @@ class Form_3_Signer extends QuestionnaireForm
delegation_files,
} = this.state;
console.log({ errors });
let head_person_citizenship = { label: getCitizenshipTitleByCode(head_person.identity_document.citizenship.code), code: head_person.identity_document.citizenship.code };
let signatory_person_citizenship = { label: getCitizenshipTitleByCode(signatory_person.identity_document.citizenship.code), code: signatory_person.identity_document.citizenship.code };

View File

@ -323,7 +323,7 @@ class ShareholderForm extends React.Component
id={ `founder_persons[${ index }].is_beneficial_1` }
name={ `founder_persons[${ index }].is_beneficial` }
checked={ shareholder.is_beneficial ? true : false }
onChange={ (event) => this._handle_onCheckboxFieldChange(event.target.name, parseInt(event.target.value, 10)) }
onChange={ (event) => this._handle_onCheckboxFieldChange(event.target.name, true) }
disabled={ checking }
/>
<label className="unselectable" htmlFor={ `founder_persons[${ index }].is_beneficial_1` }>Да</label>
@ -334,7 +334,7 @@ class ShareholderForm extends React.Component
id={ `founder_persons[${ index }].is_beneficial_0` }
name={ `founder_persons[${ index }].is_beneficial` }
checked={ shareholder.is_beneficial ? false : true }
onChange={ (event) => this._handle_onCheckboxFieldChange(event.target.name, parseInt(event.target.value, 10)) }
onChange={ (event) => this._handle_onCheckboxFieldChange(event.target.name, false) }
disabled={ checking }
/>
<label className="unselectable" htmlFor={ `founder_persons[${ index }].is_beneficial_0` }>Нет</label>
@ -504,7 +504,7 @@ class Form_4_Shareholders extends QuestionnaireForm
placebirth: null,
citizenship: {
title: null,
code: null,
code: 643,
},
registration_address: {
name: null,

View File

@ -221,8 +221,19 @@ export default async function handler(req, res)
}
else
{
if(group === "signatory_person" && !questionnaire[group].not_head_person) { continue; }
for(let field in fields[group])
{
if(group === "main")
{
if(!questionnaire[group].is_individual_executive)
{
const r = ["individual_executive_oop", "individual_executive_inn", "individual_executive_kpp", "individual_executive_docnum", "individual_executive_docdate"];
if(r.indexOf(field) > -1) { continue; }
}
}
if(field === "fullname")
{
fields[group][field].bind = form.getTextField(fields[group][field].name);

View File

@ -54,7 +54,9 @@ export default async function handler(req, res)
upload.single("file")(req, {}, async (err) =>
{
const { file } = req;
const { id, digital } = req.body;
const id = parseInt(req.body.id, 10);
const digital = req.body.digital == "true" ? true : false;
console.log("id, digital", { id, digital });
const path = `${ process.env.CRM_API_HOST }/lk/Questionnaire/PreQuestionnaire/`;
@ -83,7 +85,7 @@ export default async function handler(req, res)
//const main = _pick(parsed.main, ["title", "inn", "kpp", "email", "telephone", "websiteurl", "financial_loan"]);
let payload = { ...parsed.main, ...{ head_person: parsed.head_person }, ...{ signatory_person: parsed.signatory_person }, };
payload.mail_delivery_address_type = parseInt(payload.mail_delivery_address_type, 10);
payload.questionnaire_sign_type = digital ? "eds" : "paper";
payload.telephone = checkNullEmpty(payload.telephone) ? payload.telephone.replace(/[^0-9]/g, '') : null;
@ -267,7 +269,7 @@ export default async function handler(req, res)
});
await RedisClient.del(key);
res.status(200).send();
res.status(200).json({ payload, id, digital });
resolve();
});
})
@ -275,7 +277,7 @@ export default async function handler(req, res)
{
console.error("crm_send_error", { status: crm_send_error.response.status, data: crm_send_error.response.data });
res.status(500).json({ payload });
res.status(500).json({ payload, id, digital });
resolve();
});
@ -286,7 +288,7 @@ export default async function handler(req, res)
console.error("upload_single_error");
console.error(upload_single_error);
res.status(500).send();
res.status(500).json({ id, digital });
resolve();
}
});

View File

@ -22,10 +22,10 @@ export const questionnaire_template = {
other_control: null,
nko: false,
accept: false,
mail_delivery_address_type: 100000000,
},
delegation_files: [],
contacts: {
mail_delivery_address_type: 100000000,
legal_address: {
name: null,
fias_id: null,
@ -58,7 +58,7 @@ export const questionnaire_template = {
placebirth: null,
citizenship: {
title: null,
code: null,
code: 643,
},
registration_address: {
name: null,
@ -95,7 +95,7 @@ export const questionnaire_template = {
placebirth: null,
citizenship: {
title: null,
code: null,
code: 643,
},
registration_address: {
name: null,

View File

@ -73,7 +73,7 @@ export function getCertificates()
index: i+1,
certificate: certificate,
info: {
subjectName: parseSubjectNameToObj(yield certificate.SubjectName)['name'],
subjectName: parseSubjectNameToObj(yield certificate.SubjectName)['CN'],
subjectFields: parseSubjectNameToObj(yield certificate.SubjectName), //parseSubjectNameToArray(yield certificate.SubjectName),
issuerName: yield certificate.IssuerName,
validFromDate: yield certificate.ValidFromDate,
@ -185,37 +185,82 @@ function parseSubjectNameToArray(string)
* }
*
*/
function parseSubjectNameToObj(string)
{
let outputData = [];
console.log("parseSubjectNameToObj", string);
let fieldsNames = {
'CN': 'name',
'E': 'email',
'C': 'country',
'S': 'state',
'L': 'city',
'O': 'organization',
'OU': 'subdivision',
'SN': 'SN',
'G': 'G',
};
// 'C=RU, S="Область, штат"' -> [['C', 'RU'], ['S', '"Область, штат"']]
let reg = RegExp('[а-яА-Я\\w]*=.*?((?=, [а-яА-Я\\w]+=)|$)','g');
let fields = string.matchAll(reg);
fields = Array.from(fields, x => x[0]);
fields = fields.map(field => field.split('='));
fields.forEach(field => {
if (field[0] in fieldsNames)
const marks = [
{
let fieldName = fieldsNames[field[0]];
outputData[fieldName] = field[1];
}
});
r: new RegExp(/CN\=\"{0,}(.*?)\"{0,},\s{0,}/gm),
field: "CN",
},
{
r: new RegExp(/\sSN\=(.*?)[,\s]|[$]/gm),
field: "SN",
},
{
r: new RegExp(/\sG\=(.*?)[,\s]|[$]/gm),
field: "G",
},
{
r: new RegExp(/\sC\=(.*?)[,\s]|[$]/gm),
field: "C",
},
{
r: new RegExp(/\sS\=(.*?)[,\s]|[$]/gm),
field: "S",
},
{
r: new RegExp(/\sL\=(.*?)[,\s]|[$]/gm),
field: "L",
},
{
r: new RegExp(/\sSTREET\=\"(.*?)\"[,\s]|[$]/gm),
field: "STREET",
},
{
r: new RegExp(/\sO\=\"(.*?)\"[,\s]|[$]/gm),
field: "O",
},
{
r: new RegExp(/\sT\=(.*?)[,\s]|[$]/gm),
field: "T",
},
{
r: new RegExp(/\sОГРН\=(\d+)[,\s]|[$]/gm),
field: "ОГРН",
},
{
r: new RegExp(/\sОГРНИП\=(\d+)[,\s]|[$]/gm),
field: "ОГРНИП",
},
{
r: new RegExp(/\sСНИЛС\=(\d+)[,\s]|[$]/gm),
field: "СНИЛС",
},
{
r: new RegExp(/\sИНН\=(\d+)[,\s]|[$]/gm),
field: "ИНН",
},
{
r: new RegExp(/\sE\=(.*?)[,\s]|[$]/gm),
field: "E",
},
{
r: new RegExp(/\sИНН ЮЛ\=(\d+)[,\s]|[$]/gm),
field: "ИНН ЮЛ",
},
];
return outputData;
const fields = {};
for(let i in marks)
{
const chunk = Array.from(`${ string }, `.matchAll(marks[i].r));
fields[marks[i].field] = chunk[0] !== undefined ? chunk[0][1] : null;
}
return fields;
}
/**