diff --git a/actions/dealsActions.js b/actions/dealsActions.js index 83272c7..3797d44 100644 --- a/actions/dealsActions.js +++ b/actions/dealsActions.js @@ -170,7 +170,8 @@ export const getDealDocuments = ({ dispatch, deal_id }) => type: actionTypes.DEAL_DOCUMENTS_LIST, data: { deal_id, - list: response.data + documents: response.data.documents, + files: response.data.files, } }); @@ -185,7 +186,8 @@ export const getDealDocuments = ({ dispatch, deal_id }) => type: actionTypes.DEAL_DOCUMENTS_LIST, data: { deal_id, - list: [] + documents: [], + files: {}, } }); @@ -194,6 +196,32 @@ export const getDealDocuments = ({ dispatch, deal_id }) => }); } +export const sendDealDocuments = ({ deal_id }) => +{ + return new Promise((resolve, reject) => + { + const payload = { + deal_id, + }; + + axios.post(`${ process.env.NEXT_PUBLIC_SELF_API_HOST }/api/deals/upload`, payload, + { + withCredentials: true, + }) + .then(async (response) => + { + console.log("ACTION", "deals", "sendDealDocuments", "response.data", response.data); + + resolve(); + }) + .catch((error) => + { + console.error(error); + reject(); + }); + }); +} + export const getDealContracts = ({ dispatch, deal_id }) => { const url = `${ process.env.NEXT_PUBLIC_SELF_API_HOST }/api/deals/contracts`; @@ -238,7 +266,7 @@ export const getDealContracts = ({ dispatch, deal_id }) => }); } -export const uploadDocument = ({ number, entity, id, filename, file }) => +export const attachDealDocument = ({ deal_id, document_id, index, lastModified, filename, file, type }) => { return new Promise((resolve, reject) => { @@ -246,13 +274,15 @@ export const uploadDocument = ({ number, entity, id, filename, file }) => data.append('file', file); const payload = new URLSearchParams({ - number, - entity, - id, + deal_id, + document_id, filename, + index, + lastModified, + type }); - axios.post(`${ process.env.NEXT_PUBLIC_SELF_API_HOST }/api/deals/upload?${ payload.toString() }`, data, + axios.post(`${ process.env.NEXT_PUBLIC_SELF_API_HOST }/api/deals/file/attach?${ payload.toString() }`, data, { headers: { "Content-Type": "multipart/form-data", @@ -261,7 +291,34 @@ export const uploadDocument = ({ number, entity, id, filename, file }) => }) .then(async (response) => { - console.log("ACTION", "deals", "uploadDocument", "response.data", response.data); + console.log("ACTION", "deals", "attachDealDocument", "response.data", response.data); + + resolve(); + }) + .catch((error) => + { + console.error(error); + reject(); + }); + }); +} + +export const removeDealDocument = ({ deal_id, document_id, }) => +{ + return new Promise((resolve, reject) => + { + const payload = new URLSearchParams({ + deal_id, + document_id, + }); + + axios.post(`${ process.env.NEXT_PUBLIC_SELF_API_HOST }/api/deals/file/remove?${ payload.toString() }`, {}, + { + withCredentials: true, + }) + .then(async (response) => + { + console.log("ACTION", "deals", "removeDocument", "response.data", response.data); resolve(); }) diff --git a/components/DealsStatus/SingleDeal.js b/components/DealsStatus/SingleDeal.js index 5c9e344..e5e90b8 100644 --- a/components/DealsStatus/SingleDeal.js +++ b/components/DealsStatus/SingleDeal.js @@ -5,7 +5,7 @@ import { eachLimit } from "async"; import { SpinnerCircular } from "spinners-react"; import FileDropzoneDeals from "../FileDropzoneDeals"; -import { acceptDealOffers, uploadDocument } from "../../actions"; +import { acceptDealOffers, attachDealDocument, removeDealDocument, sendDealDocuments } from "../../actions"; class Step extends React.Component { @@ -28,7 +28,7 @@ class Step extends React.Component else { this.setState({ open: false }); - } + } } } @@ -266,15 +266,53 @@ class DocumentsForm extends Step files: {}, uploading: false, completed: false, + loading: true, }; this.status = [ 102 ]; } + componentDidUpdate(prevProps, prevState) + { + if(this.props.statuscode_id !== prevProps.statuscode_id) + { + if(this.status.indexOf(this.props.statuscode_id) > -1) + { + this.setState({ open: true }); + } + else + { + this.setState({ open: false }); + } + } + + if(prevProps.files !== this.props.files) + { + this.setState({ files: this.props.files, loading: false }, () => + { + this._checkFilesCompleted(); + }); + } + } + _handle_onSendFiles = (event) => { event.stopPropagation(); // event.preventDefault(); + const { dealSelected, onDealsUpdate } = this.props; + this.setState({ loading: true }, () => + { + sendDealDocuments({ deal_id: dealSelected }) + .then(() => + { + onDealsUpdate(); + }) + .catch(() => + { + + }); + }) + /* const { files } = this.state; const files_array = []; @@ -290,18 +328,16 @@ class DocumentsForm extends Step { eachLimit(files_array, 1, (file, callback) => { - console.log({ file, props: this.props }); const { opp_number } = this.props; const payload = { - number: opp_number, - entity: "opportunity", - id: file.group, + deal_id: opp_number, + document_id: file.group, filename: file.name, file, }; - uploadDocument(payload) + attachDealDocument(payload) .then(() => { this._onSendFileStats(file.group, file.index); @@ -310,13 +346,14 @@ class DocumentsForm extends Step }, 1000) }, () => { - console.log("ready"); this.setState({ uploading: false }, () => { this._checkFilesCompleted(); + onDealsUpdate(); }); }); }); + */ } _onSendFileStats = (group, index) => @@ -328,10 +365,10 @@ class DocumentsForm extends Step this.setState({ files }); } - _handle_onAddFile = (file_id, files) => + _handle_onAddFile = (document_id, files) => { const existed_files = this.state.files; - const document_files = existed_files[ file_id ] === undefined ? [] : existed_files[ file_id ]; + const document_files = existed_files[ document_id ] === undefined ? [] : existed_files[ document_id ]; for(let nf in files) { @@ -344,51 +381,77 @@ class DocumentsForm extends Step if(!e) { files[nf].index = nf; - files[nf].group = file_id; + files[nf].group = document_id; files[nf].sent = false; document_files.push(files[nf]); } - existed_files[ file_id ] = document_files; + existed_files[ document_id ] = document_files; this.setState({ files: existed_files }, () => { - this._checkFilesCompleted(); + const { opp_number } = this.props; + + const payload = { + deal_id: opp_number, + document_id: files[0].group, + filename: files[0].name, + index: files[0].index, + lastModified: files[0].lastModified, + file: files[0], + type: files[0].type, + }; + + attachDealDocument(payload) + .then(() => + { + this._onSendFileStats(document_id, 0); + this._checkFilesCompleted(); + }, 1000) + //this._checkFilesCompleted(); }); } } - _handle_onDeleteFile = (file_id, file) => + _handle_onDeleteFile = (document_id, file) => { const files = { ...this.state.files }; + const { opp_number } = this.props; + const list = []; - for(let i in files[file_id]) + for(let i in files[document_id]) { - if(files[file_id][i].name !== file.name) + if(files[document_id][i].name !== file.name) { - list.push(files[file_id][i]); + list.push(files[document_id][i]); } } if(list.length > 0) { - files[file_id] = list; + files[document_id] = list; } else { - delete files[file_id]; + delete files[document_id]; } this.setState({ files }, () => { this._checkFilesCompleted(); + + removeDealDocument({ deal_id: opp_number, document_id }); }); } _checkFilesCompleted = () => { - //Object.keys(files).length > 0 + const documents_length = this.props.documents.length; + const files_length = Object.keys(this.state.files).length; + + const c = files_length >= documents_length ? true : false; + /* const { files } = this.state; const { documents } = this.props; @@ -414,33 +477,16 @@ class DocumentsForm extends Step } } } - - /* - if(c) - { - for(let g in files) - { - for(let f in files[g]) - { - if(!files[g][f].sent) - { - c = false; - break; - } - } - } - } */ - console.log({ c }) this.setState({ completed: c }); } _renderHeaderButtons = () => { - const { open, uploading, completed, } = this.state; + const { open, uploading, completed, loading, } = this.state; - if(open && !uploading && !completed) + if(open && !uploading && !loading && completed) { return (
@@ -455,9 +501,7 @@ class DocumentsForm extends Step render() { const { index, statuscode_id, dealSelected, documents, questionnaire_status } = this.props; - const { open, files, uploading } = this.state; - -// console.log("DocumentsForm", { documents }); + const { open, files, uploading, loading } = this.state; return (
-1 ? "current" : statuscode_id > this.status[ 0 ] ? "done" : "" }`}> @@ -466,69 +510,77 @@ class DocumentsForm extends Step
{ this._renderHeader("Сборка пакета документов") }
-
-
-

Устав организации:

+ { loading ? ( +
+
-
- { questionnaire_status === "need_to_fill" ? ( -
-

Требуется обновить данные в анкете

- -
- ) : ( - <> - { questionnaire_status !== "up_to_date" ? ( -
-

Проводится проверка анкеты Вашей организации

-
- ) : ( -
-

Вам не требуется актуализация данных анкеты Клиента

-
- ) } - - ) } -
-
- { documents === undefined ? ( - <> ) : ( <> - { documents.map((document, index) => ( -
-
-

{ document.name }:

+
+
+

Анкета клиента:

+
+
+ { questionnaire_status === "need_to_fill" ? ( +
+

Требуется обновить данные в анкете

+ +
+ ) : ( + <> + { questionnaire_status !== "up_to_date" ? ( +
+

Проводится проверка анкеты Вашей организации

+
+ ) : ( +
+

Вам не требуется актуализация данных анкеты Клиента

+
+ ) } + + ) } +
+
+ { documents === undefined ? ( + <> + ) : ( + <> + { documents.map((document, index) => ( +
+
+

{ document.name }:

+
+
+ { this._handle_onAddFile(document.doc_id, file) } } + onDeleteFile={ (file) => this._handle_onDeleteFile(document.doc_id, file) } + /> +
+
+ )) } + + ) } + {/*} +
+
+
+
+

№123/2023 от 01.01.2023

+
-
- { this._handle_onAddFile(document.doc_id, file) } } - onDeleteFile={ (file) => this._handle_onDeleteFile(document.doc_id, file) } - /> +
+
+

№123/2023 от 01.01.2023

+
- )) } +

Документы, отправленные Вами принадлежат другой организации бла бла коммент от менеджера

+
+ {*/} ) } - {/*} -
-
-
-
-

№123/2023 от 01.01.2023

-
-
-
-
-

№123/2023 от 01.01.2023

-
-
-
-

Документы, отправленные Вами принадлежат другой организации бла бла коммент от менеджера

-
- {*/}
@@ -923,10 +975,10 @@ export default class SingleDeal extends React.Component render() { const { index, status, deals, dealSelected, onCloseDeal, } = this.props; - console.log({ "deals": deals }); const offers = deals.details[ dealSelected ] !== undefined ? deals.details[ dealSelected ].offers : undefined; const documents = deals.details[ dealSelected ] !== undefined ? deals.details[ dealSelected ].documents : undefined; + const files = deals.details[ dealSelected ] !== undefined ? deals.details[ dealSelected ].files : undefined; const contracts = deals.details[ dealSelected ] !== undefined ? deals.details[ dealSelected ].contracts : undefined; return ( @@ -940,7 +992,7 @@ export default class SingleDeal extends React.Component
- + diff --git a/components/FileDropzoneDeals/index.js b/components/FileDropzoneDeals/index.js index dd3e1da..cf125a5 100644 --- a/components/FileDropzoneDeals/index.js +++ b/components/FileDropzoneDeals/index.js @@ -4,7 +4,7 @@ import moment from "moment"; import { SpinnerCircular } from 'spinners-react'; const LIMIT = 10000000; -const LIMIT_FILES = 10; +const LIMIT_FILES = 1; export default class FileDropzoneDeals extends FileDropzone { @@ -19,21 +19,13 @@ export default class FileDropzoneDeals extends FileDropzone { files.map((file, index) => (
{ file.sent ? ( -
-
+
onDeleteFile(file) }> +
) : ( - <> - { uploading ? ( -
- -
- ) : ( -
onDeleteFile(file) }> -
-
- ) } - +
+ +
) }
PDF @@ -50,7 +42,7 @@ export default class FileDropzoneDeals extends FileDropzone
) } { !uploading && files.length < LIMIT_FILES && ( - onAddFile(acceptedFiles) } maxFiles={ LIMIT_FILES }> + onAddFile(acceptedFiles) } maxFiles={ LIMIT_FILES } multiple={ false }> { ({getRootProps, getInputProps}) => (
diff --git a/pages/api/deals/accept.js b/pages/api/deals/accept.js index 8d92d9f..16a1922 100644 --- a/pages/api/deals/accept.js +++ b/pages/api/deals/accept.js @@ -2,6 +2,7 @@ 2.7.3 - Метод согласования Предложений Клиентом по Лизинговой сделке в CRM POST /lk/ConsiderationOpportunity/quote */ + import CRMRequestPost from '../../../lib/CRMRequestPost'; export default async function handler(req, res) diff --git a/pages/api/deals/documents.js b/pages/api/deals/documents.js index 2963777..0e706ea 100644 --- a/pages/api/deals/documents.js +++ b/pages/api/deals/documents.js @@ -3,15 +3,85 @@ GET /lk/ConsiderationOpportunity/document */ -import CRMRequestGet from '../../../lib/CRMRequestGet'; +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 RedisClient from '../../../lib/RedisClient'; export default async function handler(req, res) { - console.log("API", "DEALS", "documents"); - console.log(req.body); - console.log("-".repeat(50)); - + await cors(req, res); const { deal_id } = req.body; - await CRMRequestGet(req, res, `${ process.env.CRM_API_HOST }/lk/ConsiderationOpportunity/document`, { ...{ opp_number: deal_id } }); + 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(client_jwt_decoded, process.env.JWT_SECRET_CRM, { noTimestamp: true }); + + try + { + axios.get(`${ process.env.CRM_API_HOST }/lk/ConsiderationOpportunity/document`, { + params: { opp_number: deal_id }, + headers: { + "Authorization": `Bearer ${ crm_jwt }`, + } + }) + .then(async (crm_response) => + { + const documents = crm_response.data; + + const key = `deals_${ client_jwt_decoded.acc_number }`; + var deals = await RedisClient.get(key); + + console.log({ key }) + + var files = {}; + if(deals !== null) + { + deals = JSON.parse(deals); + + if(deals[ deal_id ] !== undefined) + { + files = deals[ deal_id ].files; + } + } + + res.status(200).send({ documents, files }); + resolve(); + }) + .catch((error) => + { + console.error(error); + res.status(500).send(); + resolve(); + }); + } + catch(e) + { + console.error(e); + res.status(500).send(); + resolve(); + } + } + else + { + res.status(403).send(); + resolve(); + } + } + else + { + res.status(403).send(); + resolve(); + } + }); } \ No newline at end of file diff --git a/pages/api/deals/file/attach.js b/pages/api/deals/file/attach.js new file mode 100644 index 0000000..98e64ad --- /dev/null +++ b/pages/api/deals/file/attach.js @@ -0,0 +1,105 @@ +// 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 Redis from 'ioredis'; +import md5 from 'md5'; +import { inspect } from 'util'; +import multer from 'multer'; + +import { cors } from '../../../../lib/cors'; +import RedisClient from '../../../../lib/RedisClient'; + +const storage = multer.memoryStorage(); +const upload = multer({ storage: storage, limits: { fileSize: 1024 * 1024 * 300 } }); + +export default async function handler(req, res) +{ + console.log("API", "DEALS", "FILE", "upload"); + await cors(req, res); + + return new Promise(async (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); + + upload.single("file")(req, {}, async (err) => + { + const { file, } = req; + const { deal_id, document_id, type, index, lastModified } = req.query; + + const local_filename = `${ client_jwt_decoded.acc_number }_${ deal_id }_${ document_id }`; + + const file_payload = { + name: Buffer.from(file.originalname, 'latin1').toString('utf8'), + filename: local_filename, + group: document_id, + index, + type, + lastModified, + sent: true + }; + + try + { + fs.writeFileSync(`${ __dirname }/../../../../../../uploads/deals/${ local_filename }`, file.buffer); + console.log("multer.upload.single file"); + console.log({ file_payload }); + + const key = `deals_${ client_jwt_decoded.acc_number }`; + var deals = await RedisClient.get(key); + + var files = {}; + if(deals !== null) + { + deals = JSON.parse(deals); + + if(deals[ deal_id ] !== undefined) + { + files = deals[ deal_id ].files; + } + } + else + { + deals = {}; + } + + files[ document_id ] = [ file_payload ]; + deals[ deal_id ] = { files }; + + await RedisClient.set(key, JSON.stringify(deals)); + + res.status(200).json(file_payload); + resolve(); + } + catch(upload_single_error) + { + console.error("upload_single_error"); + console.error(upload_single_error); + res.status(500).send(); + resolve(); + } + }); + } + else + { + res.status(403).send(); + resolve(); + } + } + }); +} + +export const config = { + api: { + bodyParser: false + } +} \ No newline at end of file diff --git a/pages/api/deals/file/remove.js b/pages/api/deals/file/remove.js new file mode 100644 index 0000000..0ec25cb --- /dev/null +++ b/pages/api/deals/file/remove.js @@ -0,0 +1,99 @@ +// 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 Redis from 'ioredis'; +import md5 from 'md5'; +import { inspect } from 'util'; +import multer from 'multer'; + +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", "DEALS", "FILE", "remove"); + await cors(req, res); + + return new Promise(async (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); + + const { deal_id, document_id } = req.query; + const local_filename = `${ client_jwt_decoded.acc_number }_${ deal_id }_${ document_id }`; + + try + { + console.log("local_filename", local_filename); + const filename = `${ __dirname }/../../../../../../uploads/deals/${ local_filename }`; + + if (fs.existsSync(filename)) + { + fs.unlinkSync(filename); + + const key = `deals_${ client_jwt_decoded.acc_number }`; + var deals = await RedisClient.get(key); + + var files = {}; + if(deals !== null) + { + deals = JSON.parse(deals); + + if(deals[ deal_id ] !== undefined) + { + files = deals[ deal_id ].files; + } + } + else + { + deals = {}; + } + + delete files[ document_id ]; + deals[ deal_id ] = { files }; + + await RedisClient.set(key, JSON.stringify(deals)); + } + else + { + console.error("NOT exists filename", filename); + } + + res.status(200).send(); + resolve(); + } + catch(remove_single_error) + { + console.error("remove_single_error"); + console.error(remove_single_error); + + res.status(500).send(); + resolve(); + } + } + else + { + res.status(403).send(); + resolve(); + } + } + }); +} + +export const config = { + api: { + bodyParser: false + } +} \ No newline at end of file diff --git a/pages/api/deals/upload.js b/pages/api/deals/upload.js index 905c406..ed3c5df 100644 --- a/pages/api/deals/upload.js +++ b/pages/api/deals/upload.js @@ -2,7 +2,7 @@ 2.7.5 - Метод отправки документов по Сделке на проверку POST /lk/document */ - +import fs from 'fs'; import axios from 'axios'; import { Cookies } from 'react-cookie'; import cookie from 'cookie'; @@ -11,19 +11,28 @@ import jwt from 'jsonwebtoken'; import { inspect } from 'util'; import FormData from 'form-data'; import multer from 'multer'; +import { eachLimit } from 'async'; import { cors } from '../../../lib/cors'; +import RedisClient from '../../../lib/RedisClient'; -const storage = multer.memoryStorage(); -const upload = multer({ storage: storage }); +const uploads = `${ __dirname }/../../../../../uploads/deals/`; + +/* +function uploadFiles() +{ + return new Promise(() => ) +} +*/ export default async function handler(req, res) { await cors(req, res); - const { number, entity, id, filename } = req.query; +// const { number, entity, id, filename } = req.query; + const { deal_id } = req.body; - return new Promise((resolve) => + return new Promise(async (resolve) => { if(req.headers.cookie !== undefined) { @@ -34,13 +43,112 @@ export default async function handler(req, res) 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 key = `deals_${ client_jwt_decoded.acc_number }`; + var deals = await RedisClient.get(key); + + var files = []; + if(deals !== null) + { + deals = JSON.parse(deals); + + if(deals[ deal_id ] !== undefined) + { + for(let i in deals[ deal_id ].files) + { + files.push(deals[ deal_id ].files[i]); + } + + console.log({ files }); + console.log(files[0]) + + eachLimit(files, 5, (file_entry, callback) => + { + const file = file_entry[0]; + try + { + if(fs.existsSync(`${ uploads }${ file.filename }`)) + { + const file_to_send_data = fs.readFileSync(`${ uploads }${ file.filename }`); + const data = new FormData(); + data.append("file", file_to_send_data, file.name); + + const payload = new URLSearchParams({ + name: deal_id, + entity: "opportunity", + documentTypeNumber: file.group, + documentName: file.name, + }); + + const file_upload_url = `${ process.env.CRM_API_HOST }/lk/document/upload?${ payload.toString() }`; + console.log( file_upload_url ); + + axios.post(file_upload_url, data, + { + headers: { + "Content-Type": `multipart/form-data; boundary=${ data._boundary }`, + "Authorization": `Bearer ${ crm_jwt }`, + }, + withCredentials: true, + }) + .then(() => + { + console.log("FILE", file.filename, "SENT"); + callback(); + }) + .catch(() => + { + callback(); + }); + } + else + { + callback(); + } + /* + console.log({ file_upload_url }); + + + */ + } + catch(e) + { + console.error(e) + callback(); + } + }, () => + { + console.log("ALL FILES SENT"); + res.status(200).json({}); + resolve(); + }); + } + else + { + res.status(403).json({}); + resolve(); + } + } + else + { + res.status(403).json({}); + resolve(); + } + } + else + { + res.status(403).json({}); + resolve(); + } + + /* + const payload = new URLSearchParams({ name: number, entity: entity, documentTypeNumber: id, documentName: filename, }); - const path = `${ process.env.CRM_API_HOST }/lk/Document/upload?${ payload.toString() }`; + const path = `${ process.env.CRM_API_HOST }/lk/document/upload?${ payload.toString() }`; console.log({ path }); upload.single("file")(req, {}, err => @@ -63,6 +171,7 @@ export default async function handler(req, res) }) .then((crm_response) => { + console.log("/lk/document/upload SUCCESS"); res.status(200).json(crm_response.data); resolve(); }) @@ -88,6 +197,7 @@ export default async function handler(req, res) res.status(403).send(); resolve(); } + */ } else { @@ -95,10 +205,4 @@ export default async function handler(req, res) resolve(); } }); -} - -export const config = { - api: { - bodyParser: false - } } \ No newline at end of file diff --git a/pages/contract/services.js b/pages/contract/services.js index 2e7c5a4..fb6c369 100644 --- a/pages/contract/services.js +++ b/pages/contract/services.js @@ -29,7 +29,7 @@ class Insurance extends React.Component render() { - const { type, title, entry, index, } = this.props; + const { type, title, entry, index, number } = this.props; return ( @@ -312,16 +312,16 @@ class ContractServicesPage extends React.Component { this._checkInsuranceAvailable() ? (
{ insurance.kasko !== undefined && insurance.kasko !== null && insurance.kasko !== "" && insurance.kasko.map !== undefined && insurance.kasko.map((entry, index) => ( - + )) } { insurance.osago !== undefined && insurance.osago !== null && insurance.osago !== "" && insurance.osago.map !== undefined && insurance.osago.map((entry, index) => ( - + )) } { insurance.nsib !== undefined && insurance.nsib !== null && insurance.nsib !== "" && insurance.nsib.map !== undefined && insurance.nsib.map((entry, index) => ( - + )) } { insurance.fingap !== undefined && insurance.fingap !== null && insurance.fingap !== "" && insurance.fingap.map !== undefined && insurance.fingap.map((entry, index) => ( - + )) }
) : ( diff --git a/reducers/dealsReducer.js b/reducers/dealsReducer.js index e03a337..56019b6 100644 --- a/reducers/dealsReducer.js +++ b/reducers/dealsReducer.js @@ -55,7 +55,7 @@ const dealsReducer = (state = initialState.deals, action) => console.log("ACTION", actionTypes.DEAL_DOCUMENTS_LIST, { action }); const details = state.details; - details[action.data.deal_id] = { ...details[action.data.deal_id], ...{ documents: action.data.list } }; + details[action.data.deal_id] = { ...details[action.data.deal_id], ...{ documents: action.data.documents, files: action.data.files } }; return { ...state,