import axios from 'axios'; import { Cookies } from 'react-cookie'; import Router from 'next/router'; import moment from 'moment'; import { nSQL } from "@nano-sql/core"; import fileDownload from 'js-file-download'; import { eachSeries, each } from "async"; import * as actionTypes from '../constants/actionTypes'; import { getCitizenshipTitleByCode } from '../utils/citizenship'; import { questionnaire_template } from '../reducers/initialState'; if(process.browser) { FormData.prototype.appendObject = function(obj, namespace) { let keyName; for (var key in obj) { if (obj.hasOwnProperty(key)) { keyName = [namespace, '[', key, ']'].join(''); this.append(keyName, obj[key]); } } }; } 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`, {}) .then((response_read) => { console.log("ACTION", "getQuestionnaire", "/api/questionnaire/read", response_read.data); if(response_read.data !== "") { updateQuestionnaire({ dispatch, questionnaire: response_read.data }); resolve(); } else { */ axios.get(`${ process.env.NEXT_PUBLIC_SELF_API_HOST }/api/questionnaire/get`, { params: { id } }) .then((response) => { console.log("ACTION", "questionnaire", "getQuestionnaire()", "response", response.data); const founder_persons_template = { signatory_id: null, lastname: "", firstname: "", middlename: "", no_middle_name: false, jobtitle: "", telephone: "", email: "", founder_from_list: true, founder_number: 0, founder_part: "", is_beneficial: false, identity_document: { doctype: "", seria: "", docnumber: "", issuedate: "", icode: "", issueby: "", issueby_search_dadata: "", placebirth: "", citizenship: { title: "", code: "", }, registration_address: { title: "", fias_id: "", } } }; const questionnaire = JSON.parse(JSON.stringify(global.store.getState().questionnaire)); if(questionnaire.status === "empty") { questionnaire.main.title = response.data.title; questionnaire.main.inn = response.data.inn; questionnaire.main.kpp = response.data.kpp; questionnaire.main.telephone = response.data.telephone; questionnaire.main.email = response.data.email; questionnaire.main.websiteurl = response.data.websiteurl !== null ? response.data.websiteurl : ""; questionnaire.main.financial_loan = response.data.financial_loan !== null ? response.data.financial_loan : ""; questionnaire.contacts.address_type = response.data.inn.length > 10 ? "fact" : "legal"; questionnaire.contacts.fact_address = response.data.fact_address; questionnaire.contacts.postal_address = response.data.postal_address; questionnaire.contacts.legal_address = response.data.legal_address; questionnaire.head_person = { ...questionnaire.head_person, ...response.data.head_person }; questionnaire.head_person.identity_document.citizenship = { title: getCitizenshipTitleByCode(response.data.head_person.identity_document.citizenship_code), code: response.data.head_person.identity_document.citizenship_code, }; questionnaire.signatory_person = { ...questionnaire.signatory_person, ...response.data.signatory_person }; questionnaire.signatory_person.identity_document.citizenship = { title: getCitizenshipTitleByCode(response.data.signatory_person.identity_document.citizenship_code), code: response.data.signatory_person.identity_document.citizenship_code, }; 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, }; } //questionnaire.founder_persons = { ...questionnaire.head_person, ...response.data.head_person }; console.log("questionnairequestionnairequestionnaire FROM JSON", questionnaire); updateQuestionnaire({ dispatch, questionnaire }) .then(() => {}) .catch(() => {}); //dispatch({ type: actionTypes.SUPPORT_APPEALS, data: { appeals: { list: response.data.appeals, new: response.data.new, } } }); resolve(); } else { resolve(); } /* }) .catch((error) => { console.log("error"); console.error(error); reject(); }); } */ }) .catch(() => { }); }); } export const saveQuestionnaire = () => { return new Promise((resolve, reject) => { const questionnaire = JSON.parse(JSON.stringify(global.store.getState().questionnaire)); axios.post(`${ process.env.NEXT_PUBLIC_SELF_API_HOST }/api/questionnaire/save`, { questionnaire }, { withCredentials: true, }) .then((response) => { resolve(); }) .catch(() => { reject(); }); }); } export const updateQuestionnaire = ({ dispatch, questionnaire }) => { console.log("ACTION", "questionnaireActions", "updateQuestionnaire()", { questionnaire }); return new Promise((resolve, reject) => { dispatch({ type: actionTypes.QUESTIONNAIRE_UPDATE, data: { questionnaire, } }); /* setTimeout(() => { console.log("ACTION", "questionnaireActions", "updateQuestionnaire", global.store.getState(), { dispatch: dispatch }); resolve(); }, 500); */ }); } export const resetQuestionnaire = ({ dispatch, id }) => { const template = JSON.parse(JSON.stringify(questionnaire_template)); dispatch({ type: actionTypes.QUESTIONNAIRE_UPDATE, data: { questionnaire: template, } }); saveQuestionnaire(); setTimeout(() => { getQuestionnaire({ dispatch, id }); }, 10); } export const uploadAttachmentFile = (file) => { console.log("ACTION", "questionnaireActions", "uploadAttachmentFile()", { file }); return new Promise((resolve, reject) => { let data = new FormData(); data.append('file', file); axios.post(`${ process.env.NEXT_PUBLIC_SELF_API_HOST }/api/questionnaire/file/upload`, data, { headers: { "Content-Type": "multipart/form-data; charset=utf-8", }, withCredentials: true, }) .then(async (response) => { console.log("questionnaireActions", "uploadAttachmentFile()", "response.data", response.data); resolve(response.data); }) .catch((error) => { console.error(error); reject(); }); }); } export const removeAttachmentFiles = (files) => { for(let i in files) { removeAttachmentFile(files[i].id); } } export const removeAttachmentFile = (id) => { console.log("ACTION", "questionnaireActions", "removeAttachmentFile()", { id }); return new Promise((resolve, reject) => { axios.delete(`${ process.env.NEXT_PUBLIC_SELF_API_HOST }/api/questionnaire/file/remove`, { params: { id }, withCredentials: true, }) .then(async (response) => { console.log("questionnaireActions", "removeAttachmentFile()", "complete"); resolve(); }) .catch((error) => { console.error(error); reject(); }); }); } export const downloadQuestionnaire = (download = true) => { console.log("ACTION", "questionnaireActions", "downloadQuestionnaire()", ); //{ questionnaire } //questionnaire return new Promise((resolve, reject) => { let cookies = new Cookies(); let cookies_list = cookies.getAll(); const { questionnaire } = global.store.getState(); console.log("questionnaire", questionnaire); const { main, contacts, signatory_person, founder_persons, head_person, non_profit, } = questionnaire; const playload = { main, contacts, signatory_person, founder_persons, head_person, non_profit, }; console.log({ playload }); /* axios.post(`${ process.env.NEXT_PUBLIC_INT_API_HOST }/questionnaire/download`, { questionnaire: playload }, { headers: { "Authorization": `Bearer ${ cookies_list.jwt }`, }, }) */ axios.post(`${ process.env.NEXT_PUBLIC_SELF_API_HOST }/api/questionnaire/download`, { questionnaire: playload }, { headers: { 'Content-Type': 'application/json', 'Accept': 'application/pdf' }, responseType: 'arraybuffer', }) .then((response) => { if(download) { console.log("downloadQuestionnaire", "response.data"); fileDownload(response.data, response.headers.filename); resolve(); } else { resolve({ file: response.data, filename: response.headers.filename }); } //dispatch({ type: actionTypes.SUPPORT_APPEALS, data: { appeals: { list: response.data.appeals, new: response.data.new, } } }); }) .catch((error) => { console.log("error"); console.error(error); reject(); }); }); }