From de1e128fbc075b2b1426c71af39683071b996bf9 Mon Sep 17 00:00:00 2001 From: Mikhail Chechnev Date: Mon, 16 Jan 2023 22:55:42 +0300 Subject: [PATCH] =?UTF-8?q?=D0=A6=D0=98=D0=A2=D0=9A-584=20-=20=D0=BF=D0=BE?= =?UTF-8?q?=D0=B4=D0=B1=D0=BE=D1=80=20=D1=8F=D1=89=D0=B8=D0=BA=D0=B0=20?= =?UTF-8?q?=D0=BF=D0=BE=20=D0=98=D0=9D=D0=9D/=D0=9A=D0=9F=D0=9F=20=D0=BA?= =?UTF-8?q?=D0=BE=D0=BD=D1=82=D1=80=D0=B0=D0=B3=D0=B5=D0=BD=D1=82=D0=B0-?= =?UTF-8?q?=D0=BE=D1=82=D0=BF=D1=80=D0=B0=D0=B2=D0=B8=D1=82=D0=B5=D0=BB?= =?UTF-8?q?=D1=8F=20=D0=BF=D0=B5=D1=80=D0=B5=D0=B4=D0=B0=D0=B2=D0=B0=D0=B5?= =?UTF-8?q?=D0=BC=D0=BE=D0=B3=D0=BE=20=D0=B4=D0=BE=D0=BA=D1=83=D0=BC=D0=B5?= =?UTF-8?q?=D0=BD=D1=82=D0=B0/=D0=BA=D0=BE=D0=BD=D1=82=D1=80=D0=B0=D0=B3?= =?UTF-8?q?=D0=B5=D0=BD=D1=82=D0=B0=20=D0=BF=D0=BE=D0=BB=D1=8C=D0=B7=D0=BE?= =?UTF-8?q?=D0=B2=D0=B0=D1=82=D0=B5=D0=BB=D1=8C=D1=81=D0=BA=D0=BE=D0=B3?= =?UTF-8?q?=D0=BE=20=D0=B7=D0=B0=D0=B4=D0=B0=D0=BD=D0=B8=D1=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- modules/diadoc.js | 89 ++++++++++++++++++++++++++++------------------- 1 file changed, 53 insertions(+), 36 deletions(-) diff --git a/modules/diadoc.js b/modules/diadoc.js index 2729df4..394e6e7 100644 --- a/modules/diadoc.js +++ b/modules/diadoc.js @@ -153,14 +153,21 @@ const beforeMessagePost = async prms => { try { //Выполним запрос serverResp = await rqp(rqpoptions); - //Не удалось получить ящик отправителя - if (!serverResp.Organizations[0].Boxes[0].BoxId) { - throw new Error("Не удалось получить ящик отправителя"); + //Получим идентификатор организации по ИНН/КПП поставщика документа + for (let i in serverResp.Organizations) { + //Если найдена подходящая организация - запомним идентификатор и выходим из цикла + if (serverResp.Organizations[i].Inn == prms.options.inn_pr && serverResp.Organizations[i].Kpp == prms.options.kpp_pr) { + //Сохраняем полученный ответ + obj.FromBoxId = serverResp.Organizations[i].Boxes[0].BoxId; + break; + } + } + //Не удалось получить ящик отправителя + if (!obj.FromBoxId) { + throw new Error(`Не удалось получить ящик текущей организации с ИНН: ${prms.options.inn_pr} и КПП: ${prms.options.kpp_pr}`); } - //Сохраняем полученный ответ - obj.FromBoxId = serverResp.Organizations[0].Boxes[0].BoxId; } catch (e) { - throw Error(`Не удалось получить ящик отправителя: ${e.message}`); + throw Error(`Ошибка при получении ящика текущей организации: ${e.message}`); } //Очистим предыдущий запрос rqpoptions = null; @@ -169,8 +176,8 @@ const beforeMessagePost = async prms => { rqpoptions = { uri: "https://diadoc-api.kontur.ru/GetOrganizationsByInnKpp", qs: { - inn: prms.options.inn, - kpp: prms.options.kpp + inn: prms.options.inn_cs, + kpp: prms.options.kpp_cs }, headers: buildHeaders(SDDAUTH_API_CLIENT_ID, sToken), json: true @@ -180,12 +187,12 @@ const beforeMessagePost = async prms => { serverResp = await rqp(rqpoptions); //Не удалось получить ящик получателя if (!serverResp.Organizations[0].Boxes[0].BoxId) { - throw new Error(`Не удалось получить ящик получателя для контрагента с ИНН: ${prms.options.inn} и КПП: ${prms.options.kpp}`); + throw new Error(`Не удалось получить ящик получателя для контрагента с ИНН: ${prms.options.inn_cs} и КПП: ${prms.options.kpp_cs}`); } //Сохраняем полученный ответ obj.ToBoxId = serverResp.Organizations[0].Boxes[0].BoxId; } catch (e) { - throw Error(`Не удалось получить ящик получателя для контрагента с ИНН: ${prms.options.inn} и КПП: ${prms.options.kpp}: ${e.message}`); + throw Error(`Ошибка при получении ящика получателя: ${e.message}`); } //Если пришел ответ if (prms.queue.blResp && serverResp.statusCode == 200) { @@ -296,6 +303,7 @@ const beforeEvent = async prms => { let serverResp; //Результат запроса информации по текущей организации let obj; //Тело запроса (JSON) let rblMsg; //Буфер тела запроса + let sBoxId; //Идентификатор ящика текущей организации let sDepartmentId; //Идентификатор подразделения //Считаем токен доступа из контекста сервиса if (prms.service.sCtx) { @@ -312,34 +320,43 @@ const beforeEvent = async prms => { try { //Выполним запрос serverResp = await rqp(rqpoptions); - //Не удалось получить ящик получателя - if (!serverResp.Organizations[0].Boxes[0].BoxId) { - throw new Error(`Не удалось получить ящик текущей организации.`); + //Получим идентификатор организации по ИНН/КПП контрагента организации + for (let i in serverResp.Organizations) { + //Если найдена подходящая организация - запомним идентификатор и выходим из цикла + if (serverResp.Organizations[i].Inn == prms.options.inn && serverResp.Organizations[i].Kpp == prms.options.kpp) { + //Сохраняем полученный ответ + sBoxId = serverResp.Organizations[i].Boxes[0].BoxId; + //Если задано подразделение + if (prms.options.sdepartment_name) { + if (prms.options.sdepartment_name == "Головное подразделение") { + sDepartmentId = "00000000-0000-0000-0000-000000000000"; + } else { + //Получим идентификатор подразделения + for (let j in serverResp.Organizations[i].Departments) { + //Если нашлось подразделение - запомним идентификатор и выходим из цикла + if (serverResp.Organizations[i].Departments[j].Name == prms.options.sdepartment_name) { + sDepartmentId = serverResp.Organizations[i].Departments[j].DepartmentId; + break; + } + } + //Не удалось получить идентификатор подразделения + if (!sDepartmentId) { + throw new Error(`Не удалось получить идентификатор подразделения с наименованием "${prms.options.sdepartment_name}"`); + } + } + } + break; + } + } + //Не удалось получить ящик текущей организации + if (!sBoxId) { + throw new Error(`Не удалось получить ящик текущей организации с ИНН: ${prms.options.inn} и КПП: ${prms.options.kpp}`); } } catch (e) { - throw Error(`Не удалось получить ящик текущей организации: ${e.message}`); - } - //Сохраняем полученный ответ - surl = surl + "?" + "boxId=" + serverResp.Organizations[0].Boxes[0].BoxId; - //Если задано подразделение - if (prms.options.sdepartment_name) { - if (prms.options.sdepartment_name == "Головное подразделение") { - sDepartmentId = "00000000-0000-0000-0000-000000000000"; - } else { - //Получим идентификатор подразделения - for (let i in serverResp.Organizations[0].Departments) { - //Если нашлось подразделение - запомним идентификато и выходим из цикла - if (serverResp.Organizations[0].Departments[i].Name == prms.options.sdepartment_name) { - sDepartmentId = serverResp.Organizations[0].Departments[i].DepartmentId; - break; - } - } - //Не удалось получить идентификатор подразделения - if (!sDepartmentId) { - throw new Error(`Не удалось получить идентификатор подразделения с наименованием "${prms.options.sdepartment_name}"`); - } - } + throw Error(`Ошибка при получении ящика текущей организации: ${e.message}`); } + //Сформируем адрес запроса + surl = surl + "?" + "boxId=" + sBoxId; //Если действие не "Документооборот" if (prms.options.saction != "DOCFLOWS") { //Заполним параметры для отбора последних событий @@ -365,7 +382,7 @@ const beforeEvent = async prms => { headers: buildHeaders(SDDAUTH_API_CLIENT_ID, sToken), simple: false, url: surl, - boxId: serverResp.Organizations[0].Boxes[0].BoxId + boxId: sBoxId }, blMsg: rblMsg };