// Next.js API route support: https://nextjs.org/docs/api-routes/introduction import fs from 'fs'; import axios from 'axios'; import { Cookies } from 'react-cookie'; import cookie from 'cookie'; import moment from 'moment'; import jwt from 'jsonwebtoken'; import FormData from 'form-data'; import Redis from 'ioredis'; import md5 from 'md5'; import { inspect } from 'util'; import multer from 'multer'; import { get as _get, pick as _pick } from 'lodash'; import { eachSeries } from 'async'; import { fileTypeFromBuffer } from "file-type"; //import { MIMEType } from 'util'; import { cors } from '../../../lib/cors'; import RedisClient from '../../../lib/RedisClient'; const storage = multer.memoryStorage(); const upload = multer({ storage: storage }); export default async function handler(req, res) { console.log("API", "questionnaire", "send"); await cors(req, res); return new Promise((resolve) => { if(req.headers.cookie !== undefined) { const cookies = cookie.parse(req.headers?.cookie ? req.headers?.cookie : ""); if(cookies.jwt !== undefined && cookies.jwt !== null) { 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 }); console.log("JWT", cookies.jwt); console.log("CRM_JWT", crm_jwt); upload.single("file")(req, {}, async (err) => { const { file } = req; const { id } = req.body; const path = `${ process.env.CRM_API_HOST }/lk/Questionnaire/PreQuestionnaire/`; const filetype = await fileTypeFromBuffer(file.buffer); console.log("fileTypeFromBuffer", filetype); const local_filename = `${ client_jwt_decoded.acc_number }_signed_questionnaire_${ moment().format("YYYY_MM_DD_HH:mm:ss") }.${ filetype.ext }`; const key = md5(`questionnaire_${ client_jwt_decoded.acc_number }`); const questionnaire = await RedisClient.get(key); try { fs.writeFileSync(`${ __dirname }/../../../../../uploads/${ local_filename }`, file.buffer); console.log("multer.upload.single file"); console.log({ questionnaire }); const parsed = JSON.parse(questionnaire); console.log("parsed"); console.log(".".repeat(50)); console.log(inspect(parsed, true, null, true)); //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.telephone = payload.telephone.replace(/[^0-9]/g, ''); payload.individual_executive_inn = payload.individual_executive_inn.replace(/[^0-9]/g, ''); payload.individual_executive_kpp = payload.individual_executive_kpp.replace(/[^0-9]/g, ''); payload.individual_executive_docdate = payload.individual_executive_docdate !== null ? moment(payload.individual_executive_docdate).format("YYYY-MM-DD") : null; if(payload.head_person.middlename !== "" && payload.head_person.middlename !== null) { payload.head_person.no_middle_name = false; } else { payload.head_person.no_middle_name = true; } payload.head_person.identity_document.citizenship_code = payload.head_person.identity_document.citizenship.code; payload.head_person.telephone = payload.head_person.telephone.replace(/[^0-9]/g, ''); payload.head_person.identity_document.issuedate = payload.head_person.identity_document.issuedate !== null ? moment(payload.head_person.identity_document.issuedate).format("YYYY-MM-DD") : null; payload.head_person.evo_assignment_date = payload.head_person.evo_assignment_date !== null ? moment(payload.head_person.evo_assignment_date).format("YYYY-MM-DD") : null; if(payload.signatory_person.not_head_person) { if(payload.signatory_person.middlename !== "" && payload.signatory_person.middlename !== null) { payload.signatory_person.no_middle_name = false; } else { payload.signatory_person.no_middle_name = true; } } else { payload.signatory_person = { ...payload.signatory_person, ..._pick(payload.head_person, [ "lastname", "firstname", "middlename", "no_middle_name", "jobtitle", "telephone", "email", "identity_document", "evo_assignment_date", "evo_credentials_dateend", "evo_indefinite", ]) }; } payload.signatory_person.identity_document.citizenship_code = payload.signatory_person.identity_document.citizenship.code; payload.signatory_person.telephone = payload.signatory_person.telephone.replace(/[^0-9]/g, ''); payload.signatory_person.identity_document.issuedate = payload.signatory_person.identity_document.issuedate !== null ? moment(payload.signatory_person.identity_document.issuedate).format("YYYY-MM-DD") : null; payload.signatory_person.docdate = payload.signatory_person.docdate !== null ? moment(payload.signatory_person.docdate).format("YYYY-MM-DD") : null; payload.signatory_person.assignment_date = payload.signatory_person.assignment_date !== null ? moment(payload.signatory_person.assignment_date).format("YYYY-MM-DD") : null; const founder_persons = parsed.founder_persons; for(let i in founder_persons) { founder_persons[i].founder_number = parseInt(i, 10) + 1; founder_persons[i].telephone = founder_persons[i].telephone.replace(/[^0-9]/g, ''); founder_persons[i].identity_document.issuedate = founder_persons[i].identity_document.issuedate !== null ? moment(founder_persons[i].identity_document.issuedate).format("YYYY-MM-DD") : null; if(founder_persons[i].middlename !== "" && founder_persons[i].middlename !== null) { founder_persons[i].no_middle_name = false; } else { founder_persons[i].no_middle_name = true; } } payload = { ...payload, ...{ founder_persons }, ...{ revenue_source_main: parsed.non_profit.fin_source_business, revenue_source_donat: parsed.non_profit.fin_source_donate, revenue_source_entrance_fee: parsed.non_profit.fin_source_fees, revenue_source_other: parsed.non_profit.fin_source_another_description, foreign_countries_financing: parsed.non_profit.foreign_payers, purpose_use_la: parsed.non_profit.fin_goals_cars, purpose_use_lkt: parsed.non_profit.fin_goals_trucks, purpose_use_gt_sc: parsed.non_profit.fin_goals_special, } }; payload.financial_loan = parseFloat(payload.financial_loan.replace(/[^0-9.]/g, '')); console.log("=".repeat(50)); console.log(inspect(payload, true, null, true)); /* for(let i in parsed.main) { payload[i] = parsed.main[i] === null ? "" : parsed.main[i]; } */ console.log(id); console.log("path", path); console.log("*".repeat(50)); console.log(payload); const files_to_send = []; for(let i in parsed.head_person_files) { //console.log(parsed.head_person_files[i]); files_to_send.push({ ...parsed.head_person_files[i], ...{ number: 1, } }) } /* for(let i in parsed.delegation_files) { console.log(parsed.delegation_files[i]); files_to_send.push({ ...parsed.delegation_files[i], ...{ number: 1, } }) } */ for(let i in parsed.signatory_person_files) { //console.log(parsed.signatory_person_files[i]); files_to_send.push({ ...parsed.signatory_person_files[i], ...{ number: 23, } }) } for(let i in parsed.signatory_corporate_files) { //console.log(parsed.signatory_corporate_files[i]); files_to_send.push({ ...parsed.signatory_corporate_files[i], ...{ number: 22, } }) } files_to_send.push({ ...{ name: `${ client_jwt_decoded.acc_number }_questionnaire.pdf`, filename: `${ client_jwt_decoded.acc_number }_questionnaire.pdf`, }, ...{ number: 18, } }); files_to_send.push({ ...{ name: local_filename, filename: local_filename, }, ...{ number: 161, } }); console.log("@".repeat(200)); console.log(payload); axios.put(path, payload, { params: { name: id }, headers: { "Authorization": `Bearer ${ crm_jwt }`, "Content-Type": "application/json" } } ) .then((crm_response) => { console.log("crm_response for", path); console.log(inspect(crm_response.data, true, null, true)); eachSeries(files_to_send, (file_entry, callback) => { console.log({ file_entry }); const file_to_send_data = fs.readFileSync(`${ __dirname }/../../../../../uploads/${ file_entry.filename }`); const data = new FormData(); data.append("file", file_to_send_data, file_entry.name); data.append("entity", "evo_client_questionnaire"); data.append("documentTypeNumber", file_entry.number); data.append("name", id); axios.post(`${ process.env.CRM_API_HOST }/lk/document/upload/`, data, { headers: { "Content-Type": `multipart/form-data; boundary=${ data._boundary }`, "Authorization": `Bearer ${ crm_jwt }`, }, withCredentials: true, }) .then(() => { console.log("FILE", file_entry.filename, "SENT"); callback(); }) .catch((crm_file_upload_error) => { console.error("crm_file_upload_error", crm_file_upload_error); callback(); }); }, () => { res.status(200).send(); resolve(); }); }) .catch((crm_send_error) => { console.error("crm_send_error"); console.error(crm_send_error); res.status(500).send(); resolve(); }); //res.status(200).send(); } catch(upload_single_error) { console.error("upload_single_error"); console.error(upload_single_error.response.data); res.status(500).send(); resolve(); } }); } else { res.status(403).send(); resolve(); } } }); } export const config = { api: { bodyParser: false } }