471 lines
14 KiB
JavaScript
471 lines
14 KiB
JavaScript
const ZohoClient = require('../../integrations/zoho/client');
|
|
|
|
class IntegrationService {
|
|
constructor(userId) {
|
|
this.userId = userId;
|
|
this.clients = {
|
|
zoho: new ZohoClient(userId)
|
|
};
|
|
}
|
|
|
|
async getData(provider, service, resource, params = {}) {
|
|
const client = this.clients[provider];
|
|
if (!client) {
|
|
throw new Error(`Provider ${provider} not supported`);
|
|
}
|
|
|
|
const method = this.getMethodName(service, resource);
|
|
|
|
if (!client[method]) {
|
|
throw new Error(`Resource ${resource} not supported for ${provider} ${service}`);
|
|
}
|
|
|
|
// Handle special cases that require additional parameters
|
|
if (method === 'getTasks' && service === 'projects' && params.projectId) {
|
|
return await client.getProjectTasks(params.projectId, params);
|
|
}
|
|
|
|
// Handle getAllProjectTasks for projects tasks without projectId
|
|
if (method === 'getTasks' && service === 'projects' && !params.projectId) {
|
|
return await client.getAllProjectTasks(params);
|
|
}
|
|
|
|
// Handle CRM tasks (no special parameters needed)
|
|
if (method === 'getTasks' && service === 'crm') {
|
|
return await client[method](params);
|
|
}
|
|
|
|
return await client[method](params);
|
|
}
|
|
|
|
getMethodName(service, resource) {
|
|
const resourceMap = {
|
|
// CRM
|
|
'leads': 'Leads',
|
|
'contacts': 'Contacts',
|
|
'deals': 'Deals',
|
|
'sales_orders': 'SalesOrders',
|
|
'purchase_orders': 'PurchaseOrders',
|
|
'invoices': 'Invoices',
|
|
// People
|
|
'employees': 'Employees',
|
|
'departments': 'Departments',
|
|
'timesheets': 'Timesheets',
|
|
'leave_requests': 'LeaveRequests',
|
|
'attendance': 'Attendance',
|
|
// Books
|
|
'organizations': 'Organizations',
|
|
'customers': 'Customers',
|
|
'vendors': 'Vendors',
|
|
'items': 'Items',
|
|
'estimates': 'Estimates',
|
|
'bills': 'Bills',
|
|
'expenses': 'Expenses',
|
|
'bank_accounts': 'BankAccounts',
|
|
'bank_transactions': 'BankTransactions',
|
|
'reports': 'Reports',
|
|
// Projects
|
|
'projects': 'Projects',
|
|
'tasks': 'Tasks'
|
|
};
|
|
|
|
const resourceName = resourceMap[resource] || resource;
|
|
return `get${resourceName}`;
|
|
}
|
|
|
|
async getAvailableServices(provider) {
|
|
const client = this.clients[provider];
|
|
if (!client) {
|
|
throw new Error(`Provider ${provider} not supported`);
|
|
}
|
|
return client.getAvailableServices();
|
|
}
|
|
|
|
async getAvailableResources(provider, service) {
|
|
const client = this.clients[provider];
|
|
if (!client) {
|
|
throw new Error(`Provider ${provider} not supported`);
|
|
}
|
|
return client.getAvailableResources(service);
|
|
}
|
|
|
|
async getPortals(provider) {
|
|
const client = this.clients[provider];
|
|
if (!client) {
|
|
throw new Error(`Provider ${provider} not supported`);
|
|
}
|
|
if (provider !== 'zoho') {
|
|
throw new Error('Portals are only available for Zoho provider');
|
|
}
|
|
return await client.getPortals();
|
|
}
|
|
|
|
async getAllProjects(provider, params = {}) {
|
|
const client = this.clients[provider];
|
|
if (!client) {
|
|
throw new Error(`Provider ${provider} not supported`);
|
|
}
|
|
if (provider !== 'zoho') {
|
|
throw new Error('All projects are only available for Zoho provider');
|
|
}
|
|
return await client.getAllProjects(params);
|
|
}
|
|
|
|
async getAllProjectTasks(provider, portalId, params = {}) {
|
|
const client = this.clients[provider];
|
|
if (!client) {
|
|
throw new Error(`Provider ${provider} not supported`);
|
|
}
|
|
if (provider !== 'zoho') {
|
|
throw new Error('All project tasks are only available for Zoho provider');
|
|
}
|
|
return await client.getAllProjectTasks(portalId, params);
|
|
}
|
|
|
|
async getAllProjectTaskLists(provider, portalId, params = {}) {
|
|
const client = this.clients[provider];
|
|
if (!client) {
|
|
throw new Error(`Provider ${provider} not supported`);
|
|
}
|
|
if (provider !== 'zoho') {
|
|
throw new Error('All project task lists are only available for Zoho provider');
|
|
}
|
|
return await client.getAllProjectTaskLists(portalId, params);
|
|
}
|
|
|
|
async getAllProjectIssues(provider, portalId, params = {}) {
|
|
const client = this.clients[provider];
|
|
if (!client) {
|
|
throw new Error(`Provider ${provider} not supported`);
|
|
}
|
|
if (provider !== 'zoho') {
|
|
throw new Error('All project issues are only available for Zoho provider');
|
|
}
|
|
return await client.getAllProjectIssues(portalId, params);
|
|
}
|
|
|
|
async getAllProjectPhases(provider, portalId, params = {}) {
|
|
const client = this.clients[provider];
|
|
if (!client) {
|
|
throw new Error(`Provider ${provider} not supported`);
|
|
}
|
|
if (provider !== 'zoho') {
|
|
throw new Error('All project phases are only available for Zoho provider');
|
|
}
|
|
return await client.getAllProjectPhases(portalId, params);
|
|
}
|
|
|
|
async getSalesOrders(provider, params = {}) {
|
|
const client = this.clients[provider];
|
|
if (!client) {
|
|
throw new Error(`Provider ${provider} not supported`);
|
|
}
|
|
if (provider !== 'zoho') {
|
|
throw new Error('Sales Orders are only available for Zoho provider');
|
|
}
|
|
return await client.getSalesOrders(params);
|
|
}
|
|
|
|
async getPurchaseOrders(provider, params = {}) {
|
|
const client = this.clients[provider];
|
|
if (!client) {
|
|
throw new Error(`Provider ${provider} not supported`);
|
|
}
|
|
if (provider !== 'zoho') {
|
|
throw new Error('Purchase Orders are only available for Zoho provider');
|
|
}
|
|
return await client.getPurchaseOrders(params);
|
|
}
|
|
|
|
async getInvoices(provider, params = {}) {
|
|
const client = this.clients[provider];
|
|
if (!client) {
|
|
throw new Error(`Provider ${provider} not supported`);
|
|
}
|
|
if (provider !== 'zoho') {
|
|
throw new Error('Invoices are only available for Zoho provider');
|
|
}
|
|
return await client.getInvoices(params);
|
|
}
|
|
|
|
// Zoho People specific methods
|
|
async getDepartments(provider, params = {}) {
|
|
const client = this.clients[provider];
|
|
if (!client) {
|
|
throw new Error(`Provider ${provider} not supported`);
|
|
}
|
|
if (provider !== 'zoho') {
|
|
throw new Error('Departments are only available for Zoho provider');
|
|
}
|
|
return await client.getDepartments(params);
|
|
}
|
|
|
|
async getLeaveRequests(provider, params = {}) {
|
|
const client = this.clients[provider];
|
|
if (!client) {
|
|
throw new Error(`Provider ${provider} not supported`);
|
|
}
|
|
if (provider !== 'zoho') {
|
|
throw new Error('Leave Requests are only available for Zoho provider');
|
|
}
|
|
return await client.getLeaveRequests(params);
|
|
}
|
|
|
|
async getAttendance(provider, params = {}) {
|
|
const client = this.clients[provider];
|
|
if (!client) {
|
|
throw new Error(`Provider ${provider} not supported`);
|
|
}
|
|
if (provider !== 'zoho') {
|
|
throw new Error('Attendance is only available for Zoho provider');
|
|
}
|
|
return await client.getAttendance(params);
|
|
}
|
|
|
|
// Zoho Books specific methods
|
|
async getOrganizations(provider, params = {}) {
|
|
const client = this.clients[provider];
|
|
if (!client) {
|
|
throw new Error(`Provider ${provider} not supported`);
|
|
}
|
|
if (provider !== 'zoho') {
|
|
throw new Error('Organizations are only available for Zoho provider');
|
|
}
|
|
return await client.getOrganizations(params);
|
|
}
|
|
|
|
async getCustomers(provider, params = {}) {
|
|
const client = this.clients[provider];
|
|
if (!client) {
|
|
throw new Error(`Provider ${provider} not supported`);
|
|
}
|
|
if (provider !== 'zoho') {
|
|
throw new Error('Customers are only available for Zoho provider');
|
|
}
|
|
return await client.getCustomers(params);
|
|
}
|
|
|
|
async getVendors(provider, params = {}) {
|
|
const client = this.clients[provider];
|
|
if (!client) {
|
|
throw new Error(`Provider ${provider} not supported`);
|
|
}
|
|
if (provider !== 'zoho') {
|
|
throw new Error('Vendors are only available for Zoho provider');
|
|
}
|
|
return await client.getVendors(params);
|
|
}
|
|
|
|
async getItems(provider, params = {}) {
|
|
const client = this.clients[provider];
|
|
if (!client) {
|
|
throw new Error(`Provider ${provider} not supported`);
|
|
}
|
|
if (provider !== 'zoho') {
|
|
throw new Error('Items are only available for Zoho provider');
|
|
}
|
|
return await client.getItems(params);
|
|
}
|
|
|
|
async getEstimates(provider, params = {}) {
|
|
const client = this.clients[provider];
|
|
if (!client) {
|
|
throw new Error(`Provider ${provider} not supported`);
|
|
}
|
|
if (provider !== 'zoho') {
|
|
throw new Error('Estimates are only available for Zoho provider');
|
|
}
|
|
return await client.getEstimates(params);
|
|
}
|
|
|
|
async getBills(provider, params = {}) {
|
|
const client = this.clients[provider];
|
|
if (!client) {
|
|
throw new Error(`Provider ${provider} not supported`);
|
|
}
|
|
if (provider !== 'zoho') {
|
|
throw new Error('Bills are only available for Zoho provider');
|
|
}
|
|
return await client.getBills(params);
|
|
}
|
|
|
|
async getExpenses(provider, params = {}) {
|
|
const client = this.clients[provider];
|
|
if (!client) {
|
|
throw new Error(`Provider ${provider} not supported`);
|
|
}
|
|
if (provider !== 'zoho') {
|
|
throw new Error('Expenses are only available for Zoho provider');
|
|
}
|
|
return await client.getExpenses(params);
|
|
}
|
|
|
|
async getBankAccounts(provider, params = {}) {
|
|
const client = this.clients[provider];
|
|
if (!client) {
|
|
throw new Error(`Provider ${provider} not supported`);
|
|
}
|
|
if (provider !== 'zoho') {
|
|
throw new Error('Bank Accounts are only available for Zoho provider');
|
|
}
|
|
return await client.getBankAccounts(params);
|
|
}
|
|
|
|
async getBankTransactions(provider, params = {}) {
|
|
const client = this.clients[provider];
|
|
if (!client) {
|
|
throw new Error(`Provider ${provider} not supported`);
|
|
}
|
|
if (provider !== 'zoho') {
|
|
throw new Error('Bank Transactions are only available for Zoho provider');
|
|
}
|
|
return await client.getBankTransactions(params);
|
|
}
|
|
|
|
async getReports(provider, params = {}) {
|
|
const client = this.clients[provider];
|
|
if (!client) {
|
|
throw new Error(`Provider ${provider} not supported`);
|
|
}
|
|
if (provider !== 'zoho') {
|
|
throw new Error('Reports are only available for Zoho provider');
|
|
}
|
|
return await client.getReports(params);
|
|
}
|
|
|
|
async getBooksSalesOrders(provider, params = {}) {
|
|
const client = this.clients[provider];
|
|
if (!client) {
|
|
throw new Error(`Provider ${provider} not supported`);
|
|
}
|
|
if (provider !== 'zoho') {
|
|
throw new Error('Books Sales Orders are only available for Zoho provider');
|
|
}
|
|
return await client.getBooksSalesOrders(params);
|
|
}
|
|
|
|
async getBooksPurchaseOrders(provider, params = {}) {
|
|
const client = this.clients[provider];
|
|
if (!client) {
|
|
throw new Error(`Provider ${provider} not supported`);
|
|
}
|
|
if (provider !== 'zoho') {
|
|
throw new Error('Books Purchase Orders are only available for Zoho provider');
|
|
}
|
|
return await client.getBooksPurchaseOrders(params);
|
|
}
|
|
|
|
async getContacts(provider, params = {}) {
|
|
const client = this.clients[provider];
|
|
if (!client) {
|
|
throw new Error(`Provider ${provider} not supported`);
|
|
}
|
|
if (provider !== 'zoho') {
|
|
throw new Error('Contacts are only available for Zoho provider');
|
|
}
|
|
return await client.getContacts(params);
|
|
}
|
|
|
|
async getBooksContacts(provider, params = {}) {
|
|
const client = this.clients[provider];
|
|
if (!client) {
|
|
throw new Error(`Provider ${provider} not supported`);
|
|
}
|
|
if (provider !== 'zoho') {
|
|
throw new Error('Books Contacts are only available for Zoho provider');
|
|
}
|
|
return await client.getBooksContacts(params);
|
|
}
|
|
|
|
async getBooksInvoices(provider, params = {}) {
|
|
const client = this.clients[provider];
|
|
if (!client) {
|
|
throw new Error(`Provider ${provider} not supported`);
|
|
}
|
|
if (provider !== 'zoho') {
|
|
throw new Error('Books Invoices are only available for Zoho provider');
|
|
}
|
|
return await client.getBooksInvoices(params);
|
|
}
|
|
|
|
// Zoho People Forms API methods
|
|
async getEmployeeForms(provider, params = {}) {
|
|
const client = this.clients[provider];
|
|
if (!client) {
|
|
throw new Error(`Provider ${provider} not supported`);
|
|
}
|
|
if (provider !== 'zoho') {
|
|
throw new Error('Employee Forms are only available for Zoho provider');
|
|
}
|
|
return await client.getEmployeeForms(params);
|
|
}
|
|
|
|
async getEmployeeById(provider, recordId, formLinkName = 'employee') {
|
|
const client = this.clients[provider];
|
|
if (!client) {
|
|
throw new Error(`Provider ${provider} not supported`);
|
|
}
|
|
if (provider !== 'zoho') {
|
|
throw new Error('Employee Details are only available for Zoho provider');
|
|
}
|
|
return await client.getEmployeeById(recordId, formLinkName);
|
|
}
|
|
|
|
async getAttendanceEntries(provider, params = {}) {
|
|
const client = this.clients[provider];
|
|
if (!client) {
|
|
throw new Error(`Provider ${provider} not supported`);
|
|
}
|
|
if (provider !== 'zoho') {
|
|
throw new Error('Attendance Entries are only available for Zoho provider');
|
|
}
|
|
return await client.getAttendanceEntries(params);
|
|
}
|
|
|
|
async getShiftConfiguration(provider, params = {}) {
|
|
const client = this.clients[provider];
|
|
if (!client) {
|
|
throw new Error(`Provider ${provider} not supported`);
|
|
}
|
|
if (provider !== 'zoho') {
|
|
throw new Error('Shift Configuration is only available for Zoho provider');
|
|
}
|
|
return await client.getShiftConfiguration(params);
|
|
}
|
|
|
|
async getLeaveData(provider, formLinkName = 'leave', params = {}) {
|
|
const client = this.clients[provider];
|
|
if (!client) {
|
|
throw new Error(`Provider ${provider} not supported`);
|
|
}
|
|
if (provider !== 'zoho') {
|
|
throw new Error('Leave Data is only available for Zoho provider');
|
|
}
|
|
return await client.getLeaveData(formLinkName, params);
|
|
}
|
|
|
|
async getGoalsData(provider, formLinkName = 'goals', params = {}) {
|
|
const client = this.clients[provider];
|
|
if (!client) {
|
|
throw new Error(`Provider ${provider} not supported`);
|
|
}
|
|
if (provider !== 'zoho') {
|
|
throw new Error('Goals Data is only available for Zoho provider');
|
|
}
|
|
return await client.getGoalsData(formLinkName, params);
|
|
}
|
|
|
|
async getPerformanceData(provider, formLinkName = 'performance', params = {}) {
|
|
const client = this.clients[provider];
|
|
if (!client) {
|
|
throw new Error(`Provider ${provider} not supported`);
|
|
}
|
|
if (provider !== 'zoho') {
|
|
throw new Error('Performance Data is only available for Zoho provider');
|
|
}
|
|
return await client.getPerformanceData(formLinkName, params);
|
|
}
|
|
}
|
|
|
|
module.exports = IntegrationService;
|