ЦИТК-948, ЦИТК-955 - ДИАДОК - импорта документов даже если не удалось найти контрагента-отправителя в "Операторе ЭДО"/"Контрагентах", косметика (camelCase)
This commit is contained in:
parent
de03774ca4
commit
ecec0d70c1
@ -19,6 +19,7 @@ const { SDDAUTH_API_CLIENT_ID, SDEPARTMENT_NAME, SDEPARTMENT_ID } = require("./d
|
|||||||
// Список тегов которые должны содержать массив
|
// Список тегов которые должны содержать массив
|
||||||
const tag = [
|
const tag = [
|
||||||
"DocumentAttachments",
|
"DocumentAttachments",
|
||||||
|
"Metadata",
|
||||||
"Signatures",
|
"Signatures",
|
||||||
"CorrectionRequests",
|
"CorrectionRequests",
|
||||||
"Receipts",
|
"Receipts",
|
||||||
@ -55,13 +56,13 @@ const buildOrganizationsByInnKppURL = srvRoot => {
|
|||||||
//Обернуть содержимое тега в массив
|
//Обернуть содержимое тега в массив
|
||||||
const toArray = (obj, tags) => {
|
const toArray = (obj, tags) => {
|
||||||
for (const prop in obj) {
|
for (const prop in obj) {
|
||||||
const value = obj[prop];
|
let value = obj[prop];
|
||||||
|
if (typeof value === "object") {
|
||||||
|
obj[prop] = toArray(value, tag);
|
||||||
|
}
|
||||||
if (tags.indexOf(prop) != -1 && !_.isArray(obj[prop])) {
|
if (tags.indexOf(prop) != -1 && !_.isArray(obj[prop])) {
|
||||||
obj[prop] = JSON.parse("[" + JSON.stringify(value) + "]");
|
obj[prop] = JSON.parse("[" + JSON.stringify(value) + "]");
|
||||||
}
|
}
|
||||||
if (typeof value === "object") {
|
|
||||||
toArray(value, tag);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
return obj;
|
return obj;
|
||||||
};
|
};
|
||||||
@ -133,31 +134,31 @@ const buildHeaders = (sAPIClientId, sToken = null) => ({
|
|||||||
});
|
});
|
||||||
|
|
||||||
//Отбор организций
|
//Отбор организций
|
||||||
const GetOrganizations = Organizations => {
|
const getOrganizations = organizations => {
|
||||||
//Параметры отбора
|
//Параметры отбора
|
||||||
let isRoaming = false;
|
let isRoaming = false;
|
||||||
let isActive = true;
|
let isActive = true;
|
||||||
//Итоговая выборка
|
//Итоговая выборка
|
||||||
let Organization = { Organizations: [] };
|
let organization = { Organizations: [] };
|
||||||
//Найдем активную организацию не в роуминге
|
//Найдем активную организацию не в роуминге
|
||||||
Organization.Organizations[0] = Organizations.Organizations.find(Org => (Org.IsRoaming === isRoaming) && (Org.IsActive === isActive));
|
organization.Organizations[0] = organizations.Organizations.find(org => (org.IsRoaming === isRoaming) && (org.IsActive === isActive));
|
||||||
//Если не удалось получить организацию не в роуминге
|
//Если не удалось получить организацию не в роуминге
|
||||||
if (!Organization.Organizations[0]) {
|
if (!organization.Organizations[0]) {
|
||||||
//Если нет организации не в роуминге и найдено более одной организации
|
//Если нет организации не в роуминге и найдено более одной организации
|
||||||
if (Organizations.Organizations.length > 1) {
|
if (organizations.Organizations.length > 1) {
|
||||||
throw Error(`Найдено несколько организаций в роуминге.`);
|
throw Error(`Найдено несколько организаций в роуминге.`);
|
||||||
} else {
|
} else {
|
||||||
//Вернем единственную найденую организацию
|
//Вернем единственную найденую организацию
|
||||||
return Organizations[0];
|
return organizations[0];
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
//Вернем найденую организацию
|
//Вернем найденую организацию
|
||||||
return Organization;
|
return organization;
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
//Получение организации по ИНН/КПП контрагента
|
//Получение организации по ИНН/КПП контрагента
|
||||||
const GetOrganization = async (sSrvRoot, headers, nInn, nKpp) => {
|
const getOrganization = async (sSrvRoot, headers, nInn, nKpp) => {
|
||||||
//Параметры запроса
|
//Параметры запроса
|
||||||
let rqpOptions;
|
let rqpOptions;
|
||||||
let serverResp;
|
let serverResp;
|
||||||
@ -177,11 +178,11 @@ const GetOrganization = async (sSrvRoot, headers, nInn, nKpp) => {
|
|||||||
};
|
};
|
||||||
|
|
||||||
//Получение ящика организации по ИНН/КПП контрагента
|
//Получение ящика организации по ИНН/КПП контрагента
|
||||||
const GetOrganizationBoxId = async (sSrvRoot, headers, nInn, nKpp) => {
|
const getOrganizationBoxId = async (sSrvRoot, headers, nInn, nKpp) => {
|
||||||
//Параметры запроса
|
//Параметры запроса
|
||||||
let rqpOptions;
|
let rqpOptions;
|
||||||
let serverResp;
|
let serverResp;
|
||||||
let Organization = {};
|
let organization = {};
|
||||||
//Формируем запрос для получения BoxId по ИНН/КПП
|
//Формируем запрос для получения BoxId по ИНН/КПП
|
||||||
rqpOptions = {
|
rqpOptions = {
|
||||||
uri: buildOrganizationsByInnKppURL(sSrvRoot),
|
uri: buildOrganizationsByInnKppURL(sSrvRoot),
|
||||||
@ -197,13 +198,13 @@ const GetOrganizationBoxId = async (sSrvRoot, headers, nInn, nKpp) => {
|
|||||||
serverResp = await rqp(rqpOptions);
|
serverResp = await rqp(rqpOptions);
|
||||||
try {
|
try {
|
||||||
//Получим организацию не в роуминге (или единственную организацию в роуминге)
|
//Получим организацию не в роуминге (или единственную организацию в роуминге)
|
||||||
serverResp = GetOrganizations(serverResp);
|
serverResp = getOrganizations(serverResp);
|
||||||
if (!serverResp?.Organizations[0]) {
|
if (!serverResp?.Organizations[0]) {
|
||||||
throw Error(`Не удалось получить ящик получателя для контрагента с ИНН: ${nInn} и КПП: ${nKpp}`);
|
throw Error(`Не удалось получить ящик получателя для контрагента с ИНН: ${nInn} и КПП: ${nKpp}`);
|
||||||
}
|
}
|
||||||
} catch (e) {
|
} catch (e) {
|
||||||
//Получим головную организацию по ИНН/КПП
|
//Получим головную организацию по ИНН/КПП
|
||||||
serverResp = await GetOrganization(sSrvRoot, headers, nInn, nKpp);
|
serverResp = await getOrganization(sSrvRoot, headers, nInn, nKpp);
|
||||||
};
|
};
|
||||||
//Проверим соответствие КПП организации
|
//Проверим соответствие КПП организации
|
||||||
if ((serverResp?.Organizations[0]?.Kpp != nKpp) && (serverResp?.Organizations[0])) {
|
if ((serverResp?.Organizations[0]?.Kpp != nKpp) && (serverResp?.Organizations[0])) {
|
||||||
@ -212,7 +213,7 @@ const GetOrganizationBoxId = async (sSrvRoot, headers, nInn, nKpp) => {
|
|||||||
//Если найден подходящий департамент - запомним идентификатор и выходим из цикла
|
//Если найден подходящий департамент - запомним идентификатор и выходим из цикла
|
||||||
if (serverResp.Organizations[0].Departments[i]?.Kpp == nKpp) {
|
if (serverResp.Organizations[0].Departments[i]?.Kpp == nKpp) {
|
||||||
//Сохраняем полученный ответ
|
//Сохраняем полученный ответ
|
||||||
Organization.DepartmentId = serverResp.Organizations[0].Departments[i].DepartmentId;
|
organization.DepartmentId = serverResp.Organizations[0].Departments[i].DepartmentId;
|
||||||
break;
|
break;
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
@ -222,12 +223,12 @@ const GetOrganizationBoxId = async (sSrvRoot, headers, nInn, nKpp) => {
|
|||||||
throw new Error(`Не удалось получить ящик получателя для контрагента с ИНН: ${nInn} и КПП: ${nKpp}`);
|
throw new Error(`Не удалось получить ящик получателя для контрагента с ИНН: ${nInn} и КПП: ${nKpp}`);
|
||||||
}
|
}
|
||||||
//Не удалось получить департаментом с соответствующим КПП
|
//Не удалось получить департаментом с соответствующим КПП
|
||||||
if ((serverResp?.Organizations[0]?.Kpp != nKpp) && (!Organization?.DepartmentId)) {
|
if ((serverResp?.Organizations[0]?.Kpp != nKpp) && (!organization?.DepartmentId)) {
|
||||||
throw new Error(`Не удалось получить ящик получателя для контрагента с ИНН: ${nInn} и КПП: ${nKpp}, у головной организации отсутствует подразделение с КПП: ${nKpp}`);
|
throw new Error(`Не удалось получить ящик получателя для контрагента с ИНН: ${nInn} и КПП: ${nKpp}, у головной организации отсутствует подразделение с КПП: ${nKpp}`);
|
||||||
}
|
}
|
||||||
//Сохраняем полученный ответ
|
//Сохраняем полученный ответ
|
||||||
Organization.BoxId = serverResp.Organizations[0].Boxes[0].BoxId;
|
organization.BoxId = serverResp.Organizations[0].Boxes[0].BoxId;
|
||||||
return Organization;
|
return organization;
|
||||||
} catch (e) {
|
} catch (e) {
|
||||||
throw Error(`Ошибка при получении ящика получателя: ${e.message}`);
|
throw Error(`Ошибка при получении ящика получателя: ${e.message}`);
|
||||||
};
|
};
|
||||||
@ -298,7 +299,7 @@ const beforeMessagePost = async prms => {
|
|||||||
};
|
};
|
||||||
//Переменные для запросов
|
//Переменные для запросов
|
||||||
let serverResp;
|
let serverResp;
|
||||||
let Organization;
|
let organization;
|
||||||
try {
|
try {
|
||||||
//Выполним запрос
|
//Выполним запрос
|
||||||
serverResp = await rqp(rqpOptions);
|
serverResp = await rqp(rqpOptions);
|
||||||
@ -319,11 +320,11 @@ const beforeMessagePost = async prms => {
|
|||||||
throw Error(`Ошибка при получении ящика текущей организации: ${e.message}`);
|
throw Error(`Ошибка при получении ящика текущей организации: ${e.message}`);
|
||||||
}
|
}
|
||||||
//Получим ящик получателя
|
//Получим ящик получателя
|
||||||
Organization = await GetOrganizationBoxId(prms.service.sSrvRoot, buildHeaders(sAPIClientId, sToken), prms.options.inn_cs, prms.options.kpp_cs);
|
organization = await getOrganizationBoxId(prms.service.sSrvRoot, buildHeaders(sAPIClientId, sToken), prms.options.inn_cs, prms.options.kpp_cs);
|
||||||
obj.ToBoxId = Organization.BoxId;
|
obj.ToBoxId = organization.BoxId;
|
||||||
//Если не заполнен идентификатор подразделения и при получении ящика удалось его подобрать
|
//Если не заполнен идентификатор подразделения и при получении ящика удалось его подобрать
|
||||||
if ((!obj.ToDepartmentId) && (Organization.DepartmentId)) {
|
if ((!obj.ToDepartmentId) && (organization.DepartmentId)) {
|
||||||
obj.ToDepartmentId = Organization.DepartmentId;
|
obj.ToDepartmentId = organization.DepartmentId;
|
||||||
};
|
};
|
||||||
//Если пришел ответ
|
//Если пришел ответ
|
||||||
if (prms.queue.blResp && serverResp.statusCode == 200) {
|
if (prms.queue.blResp && serverResp.statusCode == 200) {
|
||||||
@ -583,6 +584,7 @@ const afterEvent = async prms => {
|
|||||||
boxIds.boxIds[i].Kpp = serverResp?.Organization?.Kpp;
|
boxIds.boxIds[i].Kpp = serverResp?.Organization?.Kpp;
|
||||||
boxIds.boxIds[i].FullName = serverResp?.Organization?.FullName;
|
boxIds.boxIds[i].FullName = serverResp?.Organization?.FullName;
|
||||||
boxIds.boxIds[i].ShortName = serverResp?.Organization?.ShortName;
|
boxIds.boxIds[i].ShortName = serverResp?.Organization?.ShortName;
|
||||||
|
boxIds.boxIds[i].FnsParticipantId = serverResp?.Organization?.FnsParticipantId;
|
||||||
} else {
|
} else {
|
||||||
//Не удалось получить информацию о контрагенте по ящику организации
|
//Не удалось получить информацию о контрагенте по ящику организации
|
||||||
throw new Error(`Не удалось получить информацию о контрагенте по ящику организации ${boxIds.boxIds[i].boxId}`);
|
throw new Error(`Не удалось получить информацию о контрагенте по ящику организации ${boxIds.boxIds[i].boxId}`);
|
||||||
@ -601,6 +603,7 @@ const afterEvent = async prms => {
|
|||||||
resp.Events[i].Message.FromKpp = box.Kpp;
|
resp.Events[i].Message.FromKpp = box.Kpp;
|
||||||
resp.Events[i].Message.FromFullName = box.FullName;
|
resp.Events[i].Message.FromFullName = box.FullName;
|
||||||
resp.Events[i].Message.FromShortName = box.ShortName;
|
resp.Events[i].Message.FromShortName = box.ShortName;
|
||||||
|
resp.Events[i].Message.FromFnsParticipantId = box.FnsParticipantId;
|
||||||
}
|
}
|
||||||
//Если надо добавить информацию по ящику-получателю
|
//Если надо добавить информацию по ящику-получателю
|
||||||
box = boxIds.boxIds.find(box => box.boxId === resp.Events[i]?.Message.ToBoxId);
|
box = boxIds.boxIds.find(box => box.boxId === resp.Events[i]?.Message.ToBoxId);
|
||||||
@ -609,6 +612,7 @@ const afterEvent = async prms => {
|
|||||||
resp.Events[i].Message.ToKpp = box.Kpp;
|
resp.Events[i].Message.ToKpp = box.Kpp;
|
||||||
resp.Events[i].Message.ToFullName = box.FullName;
|
resp.Events[i].Message.ToFullName = box.FullName;
|
||||||
resp.Events[i].Message.ToShortName = box.ShortName;
|
resp.Events[i].Message.ToShortName = box.ShortName;
|
||||||
|
resp.Events[i].Message.ToFnsParticipantId = box.FnsParticipantId;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -817,14 +821,14 @@ const beforeDepartmentIdGet = async prms => {
|
|||||||
//Обработчик "После" отправки запроса на получение списка подразделений контрагента к сервису "ДИАДОК"
|
//Обработчик "После" отправки запроса на получение списка подразделений контрагента к сервису "ДИАДОК"
|
||||||
const afterDepartmentIdGet = async prms => {
|
const afterDepartmentIdGet = async prms => {
|
||||||
let resu = null;
|
let resu = null;
|
||||||
let Organization = {};
|
let organization = {};
|
||||||
//Действие выполнено успешно
|
//Действие выполнено успешно
|
||||||
if (prms.optionsResp.statusCode == 200) {
|
if (prms.optionsResp.statusCode == 200) {
|
||||||
try {
|
try {
|
||||||
try {
|
try {
|
||||||
//Получим организацию не в роуминге (или единственную организацию в роуминге)
|
//Получим организацию не в роуминге (или единственную организацию в роуминге)
|
||||||
Organization = GetOrganizations(JSON.parse(prms.queue.blResp.toString()));
|
organization = getOrganizations(JSON.parse(prms.queue.blResp.toString()));
|
||||||
if (!Organization) {
|
if (!organization) {
|
||||||
throw Error(`Не удалось получить ящик для контрагента с ИНН: ${prms.options.nINN} и КПП: ${prms.options.nKPP}`);
|
throw Error(`Не удалось получить ящик для контрагента с ИНН: ${prms.options.nINN} и КПП: ${prms.options.nKPP}`);
|
||||||
}
|
}
|
||||||
} catch (e) {
|
} catch (e) {
|
||||||
@ -833,10 +837,10 @@ const afterDepartmentIdGet = async prms => {
|
|||||||
//Считаем токен доступа из контекста сервиса
|
//Считаем токен доступа из контекста сервиса
|
||||||
let sToken = prms.service.sCtx;
|
let sToken = prms.service.sCtx;
|
||||||
//Получим головную организацию по ИНН/КПП
|
//Получим головную организацию по ИНН/КПП
|
||||||
Organization = await GetOrganization(prms.service.sSrvRoot, buildHeaders(sAPIClientId, sToken), prms.options.nINN, prms.options.nKPP);
|
organization = await getOrganization(prms.service.sSrvRoot, buildHeaders(sAPIClientId, sToken), prms.options.nINN, prms.options.nKPP);
|
||||||
};
|
};
|
||||||
//Преобразуем JSON ответ сервиса "ДИАДОК" в XML, понятный "Парус 8"
|
//Преобразуем JSON ответ сервиса "ДИАДОК" в XML, понятный "Парус 8"
|
||||||
resu = toXML({ root: Organization });
|
resu = toXML({ root: organization });
|
||||||
} catch (e) {
|
} catch (e) {
|
||||||
throw new Error(`Неожиданный ответ сервера ЭДО "ДИАДОК". Ошибка интерпретации: ${e.message}`);
|
throw new Error(`Неожиданный ответ сервера ЭДО "ДИАДОК". Ошибка интерпретации: ${e.message}`);
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user