diff --git a/modules/diadoc.js b/modules/diadoc.js index 5bee4ad..f55bfea 100644 --- a/modules/diadoc.js +++ b/modules/diadoc.js @@ -136,15 +136,23 @@ const buildHeaders = (sAPIClientId, sToken = null) => ({ }); //Отбор организций -const getOrganizations = organizations => { +const getOrganizations = (organizations, sNumEdo = null) => { //Параметры отбора let isRoaming = false; let isActive = true; //Итоговая выборка let organization = { Organizations: [] }; - //Найдем активную организацию не в роуминге - organization.Organizations[0] = organizations.Organizations.find(org => (org.IsRoaming === isRoaming) && (org.IsActive === isActive)); - //Если не удалось получить организацию не в роуминге + //Задан код участника ЭДО + if (sNumEdo) { + //Найдем активную организацию не в роуминге + organization.Organizations[0] = organizations.Organizations.find(org => (org.FnsParticipantId === sNumEdo)); + }; + //Не удалось получить организацию по коду участника ЭДО + if (!organization.Organizations[0]) { + //Найдем активную организацию не в роуминге + organization.Organizations[0] = organizations.Organizations.find(org => (org.IsRoaming === isRoaming) && (org.IsActive === isActive)); + }; + //Не удалось получить организацию не в роуминге if (!organization.Organizations[0]) { //Найдем активную организацию organization.Organizations[0] = organizations.Organizations.find(org => (org.IsActive === isActive)); @@ -185,7 +193,7 @@ const getOrganization = async (sSrvRoot, headers, nInn, nKpp) => { }; //Получение ящика организации по ИНН/КПП контрагента -const getOrganizationBoxId = async (sSrvRoot, headers, nInn, nKpp) => { +const getOrganizationBoxId = async (sSrvRoot, headers, nInn, nKpp, sNumEdo) => { //Параметры запроса let rqpOptions; let serverResp; @@ -205,9 +213,9 @@ const getOrganizationBoxId = async (sSrvRoot, headers, nInn, nKpp) => { serverResp = await rqp(rqpOptions); try { //Получим организацию не в роуминге (или единственную организацию в роуминге) - serverResp = getOrganizations(serverResp); + serverResp = getOrganizations(serverResp, sNumEdo); if (!serverResp?.Organizations[0]) { - throw Error(`Не удалось получить ящик получателя для контрагента с ИНН: ${nInn} и КПП: ${nKpp}`); + throw Error(`Не удалось получить ящик получателя для контрагента с ${sNumEdo ? `кодом участника ЭДО: ${sNumEdo}, ` : ""}ИНН: ${nInn} и КПП: ${nKpp}`); } } catch (e) { //Получим головную организацию по ИНН/КПП @@ -329,7 +337,7 @@ const beforeMessagePost = async prms => { throw Error(`Ошибка при получении ящика текущей организации: ${e.message}`); } //Получим ящик получателя - organization = await getOrganizationBoxId(prms.service.sSrvRoot, buildHeaders(sAPIClientId, sToken), optionsData.inn_cs, optionsData.kpp_cs); + organization = await getOrganizationBoxId(prms.service.sSrvRoot, buildHeaders(sAPIClientId, sToken), optionsData.inn_cs, optionsData.kpp_cs, optionsData.num_cs); obj.ToBoxId = organization.BoxId; //Если не заполнен идентификатор подразделения и при получении ящика удалось его подобрать if ((!obj.ToDepartmentId) && (organization.DepartmentId)) { @@ -844,9 +852,9 @@ const afterDepartmentIdGet = async prms => { try { try { //Получим организацию не в роуминге (или единственную организацию в роуминге) - organization = getOrganizations(JSON.parse(prms.queue.blResp.toString())); + organization = getOrganizations(JSON.parse(prms.queue.blResp.toString()), optionsData.sNumEdo); if (!organization) { - throw Error(`Не удалось получить ящик для контрагента с ИНН: ${optionsData.nINN} и КПП: ${optionsData.nKPP}`); + throw Error(`Не удалось получить ящик для контрагента с ${optionsData.sNumEdo ? `кодом участника ЭДО: ${optionsData.sNumEdo}, ` : ""}ИНН: ${optionsData.nINN} и КПП: ${optionsData.nKPP}`); } } catch (e) { //Получим ключ разработчика