@tuanltntu/n8n-nodes-bitrix24
Version:
Comprehensive n8n community node for Bitrix24 API integration with CRM, Tasks, Chat, Telephony, and more
312 lines • 12.2 kB
JavaScript
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.ActivityResourceHandler = void 0;
const n8n_workflow_1 = require("n8n-workflow");
const ResourceHandlerBase_1 = require("./ResourceHandlerBase");
const GenericFunctions_1 = require("../GenericFunctions");
/**
* Handle Bitrix24 CRM Activity operations
*/
class ActivityResourceHandler extends ResourceHandlerBase_1.ResourceHandlerBase {
constructor(executeFunctions, returnData, options = {}) {
super(executeFunctions, returnData, options);
this.resourceEndpoints = {
add: "crm.activity.add",
update: "crm.activity.update",
delete: "crm.activity.delete",
get: "crm.activity.get",
list: "crm.activity.list",
fields: "crm.activity.fields",
};
}
/**
* Process activity operations
*/
async process() {
for (let i = 0; i < this.items.length; i++) {
try {
const operation = this.getNodeParameter("operation", i);
switch (operation) {
case "create":
await this.handleCreate(i);
break;
case "update":
await this.handleUpdate(i);
break;
case "delete":
await this.handleDelete(i);
break;
case "get":
await this.handleGet(i);
break;
case "getAll":
await this.handleGetAll(i);
break;
case "getFields":
await this.handleGetFields(i);
break;
default:
throw new n8n_workflow_1.NodeOperationError(this.executeFunctions.getNode(), `Unsupported operation "${operation}" for Activity resource`, { itemIndex: i });
}
}
catch (error) {
if (this.executeFunctions.continueOnFail()) {
this.returnData.push({ json: { error: error.message } });
continue;
}
throw error;
}
}
return this.returnData;
}
/**
* Get endpoint for the specified operation
*/
getEndpoint(operation) {
const endpointMap = {
create: "add",
update: "update",
delete: "delete",
get: "get",
getAll: "list",
getFields: "fields",
};
const endpoint = this.resourceEndpoints[endpointMap[operation]];
if (!endpoint) {
throw new n8n_workflow_1.NodeOperationError(this.executeFunctions.getNode(), `Unsupported operation "${operation}" for Activity resource`);
}
return endpoint;
}
/**
* Format communications array for Bitrix24 API
*/
formatCommunications(communications) {
if (!Array.isArray(communications) || communications.length === 0) {
return [];
}
return communications.map((comm) => {
const { type, value } = comm.communicationValues;
return {
TYPE: type,
VALUE: value,
};
});
}
/**
* Handle getting activity fields
*/
async handleGetFields(itemIndex) {
const endpoint = this.getEndpoint("getFields");
const responseData = await GenericFunctions_1.makeStandardBitrix24Call.call(this.executeFunctions, endpoint, {}, itemIndex);
this.returnData.push({
json: responseData,
});
}
/**
* Handle creating an activity
*/
async handleCreate(itemIndex) {
const fields = {};
// Get main fields
fields.SUBJECT = this.getNodeParameter("subject", itemIndex);
fields.OWNER_TYPE_ID = this.getNodeParameter("ownerType", itemIndex);
fields.OWNER_ID = this.getNodeParameter("ownerId", itemIndex);
fields.TYPE_ID = this.getNodeParameter("type", itemIndex);
// Get optional fields
const direction = this.getNodeParameter("direction", itemIndex, null);
if (direction) {
fields.DIRECTION = direction;
}
const startTime = this.getNodeParameter("startTime", itemIndex, null);
if (startTime) {
fields.START_TIME = startTime;
}
const endTime = this.getNodeParameter("endTime", itemIndex, null);
if (endTime) {
fields.END_TIME = endTime;
}
const completed = this.getNodeParameter("completed", itemIndex, false);
fields.COMPLETED = completed ? "Y" : "N";
const description = this.getNodeParameter("description", itemIndex, null);
if (description) {
fields.DESCRIPTION = description;
}
const responsibleId = this.getNodeParameter("responsibleId", itemIndex, null);
if (responsibleId) {
fields.RESPONSIBLE_ID = responsibleId;
}
const priority = this.getNodeParameter("priority", itemIndex, null);
if (priority) {
fields.PRIORITY = priority;
}
const status = this.getNodeParameter("status", itemIndex, null);
if (status) {
fields.STATUS = status;
}
// Handle additional fields
const additionalFields = this.getNodeParameter("additionalFields", itemIndex, {});
// Process communications
if (additionalFields.communications &&
typeof additionalFields.communications === "object" &&
additionalFields.communications.communicationValues) {
const communications = additionalFields.communications
.communicationValues;
if (Array.isArray(communications) && communications.length > 0) {
fields.COMMUNICATIONS = this.formatCommunications(communications);
}
}
// Set notify
if (additionalFields.notify !== undefined) {
fields.NOTIFY_TYPE = additionalFields.notify ? 1 : 0;
}
// Make API call
const endpoint = this.getEndpoint("create");
const responseData = await GenericFunctions_1.makeStandardBitrix24Call.call(this.executeFunctions, endpoint, { fields }, itemIndex);
this.returnData.push({
json: responseData,
});
}
/**
* Handle updating an activity
*/
async handleUpdate(itemIndex) {
const activityId = this.getNodeParameter("activityId", itemIndex);
const fields = {};
// Get main fields
const subject = this.getNodeParameter("subject", itemIndex, null);
if (subject) {
fields.SUBJECT = subject;
}
const type = this.getNodeParameter("type", itemIndex, null);
if (type) {
fields.TYPE_ID = type;
}
// Get optional fields
const direction = this.getNodeParameter("direction", itemIndex, null);
if (direction) {
fields.DIRECTION = direction;
}
const startTime = this.getNodeParameter("startTime", itemIndex, null);
if (startTime) {
fields.START_TIME = startTime;
}
const endTime = this.getNodeParameter("endTime", itemIndex, null);
if (endTime) {
fields.END_TIME = endTime;
}
const completed = this.getNodeParameter("completed", itemIndex, null);
if (completed !== null) {
fields.COMPLETED = completed ? "Y" : "N";
}
const description = this.getNodeParameter("description", itemIndex, null);
if (description) {
fields.DESCRIPTION = description;
}
const responsibleId = this.getNodeParameter("responsibleId", itemIndex, null);
if (responsibleId) {
fields.RESPONSIBLE_ID = responsibleId;
}
const priority = this.getNodeParameter("priority", itemIndex, null);
if (priority) {
fields.PRIORITY = priority;
}
const status = this.getNodeParameter("status", itemIndex, null);
if (status) {
fields.STATUS = status;
}
// Handle additional fields
const additionalFields = this.getNodeParameter("additionalFields", itemIndex, {});
// Process communications
if (additionalFields.communications &&
typeof additionalFields.communications === "object" &&
additionalFields.communications.communicationValues) {
const communications = additionalFields.communications
.communicationValues;
if (Array.isArray(communications) && communications.length > 0) {
fields.COMMUNICATIONS = this.formatCommunications(communications);
}
}
// Set notify
if (additionalFields.notify !== undefined) {
fields.NOTIFY_TYPE = additionalFields.notify ? 1 : 0;
}
// Make API call
const endpoint = this.getEndpoint("update");
const responseData = await GenericFunctions_1.makeStandardBitrix24Call.call(this.executeFunctions, endpoint, {
id: activityId,
fields,
}, itemIndex);
this.returnData.push({
json: responseData,
});
}
/**
* Handle deleting an activity
*/
async handleDelete(itemIndex) {
const activityId = this.getNodeParameter("activityId", itemIndex);
const endpoint = this.getEndpoint("delete");
const responseData = await GenericFunctions_1.makeStandardBitrix24Call.call(this.executeFunctions, endpoint, { id: activityId }, itemIndex);
this.returnData.push({
json: responseData,
});
}
/**
* Handle getting an activity
*/
async handleGet(itemIndex) {
const activityId = this.getNodeParameter("activityId", itemIndex);
// Get options
const options = this.getNodeParameter("options", itemIndex, {});
const params = { id: activityId };
// Add select fields if specified
if (options.select) {
params.select = options.select;
}
const endpoint = this.getEndpoint("get");
const responseData = await GenericFunctions_1.makeStandardBitrix24Call.call(this.executeFunctions, endpoint, params, {}, itemIndex);
this.addResponseToReturnData(responseData, itemIndex);
}
/**
* Handle getting all activities
*/
async handleGetAll(itemIndex) {
const options = this.getNodeParameter("options", itemIndex, {});
const params = {};
// Add filter if provided
if (options.filter) {
try {
params.filter =
typeof options.filter === "string"
? JSON.parse(options.filter)
: options.filter;
}
catch (error) {
throw new n8n_workflow_1.NodeOperationError(this.executeFunctions.getNode(), "Filter must be a valid JSON", { itemIndex });
}
}
// Add order if provided
if (options.order) {
try {
params.order =
typeof options.order === "string"
? JSON.parse(options.order)
: options.order;
}
catch (error) {
throw new n8n_workflow_1.NodeOperationError(this.executeFunctions.getNode(), "Order must be a valid JSON", { itemIndex });
}
}
// Add select fields if specified
if (options.select) {
params.select = options.select;
}
const endpoint = this.getEndpoint("getAll");
const responseData = await GenericFunctions_1.makeStandardBitrix24Call.call(this.executeFunctions, endpoint, params, itemIndex);
this.returnData.push({
json: responseData,
});
}
}
exports.ActivityResourceHandler = ActivityResourceHandler;
//# sourceMappingURL=ActivityResourceHandler.js.map