Add Additional FIelds to Deal:GetAll to Pipedrive and easy filter selection (#2074)

* Added Aditional Fields to Deal GetAll

*  Improvements

*  Improvements

Co-authored-by: Rodrigo Correia <rodrigoscdc@gmail.com>
Co-authored-by: ricardo <ricardoespinoza105@gmail.com>
Co-authored-by: Ricardo Espinoza <ricardo@n8n.io>
This commit is contained in:
Iván Ovejero 2021-08-13 10:22:00 +02:00 committed by GitHub
parent 1825cb4515
commit 0bfc00c129
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23

View file

@ -1861,7 +1861,8 @@ export class Pipedrive implements INodeType {
},
default: 100,
description: 'How many results to return.',
}, {
},
{
displayName: 'Additional Fields',
name: 'additionalFields',
type: 'collection',
@ -3479,7 +3480,7 @@ export class Pipedrive implements INodeType {
default: {},
options: [
{
displayName: 'Filter ID',
displayName: 'Predefined Filter',
name: 'filterId',
type: 'options',
typeOptions: {
@ -3656,9 +3657,12 @@ export class Pipedrive implements INodeType {
description: 'Use the Activity due date where you wish to stop fetching Activities from. Insert due date in YYYY-MM-DD format.',
},
{
displayName: 'Filter ID ',
displayName: 'Predefined Filter',
name: 'filterId',
type: 'string',
type: 'options',
typeOptions: {
loadOptionsMethod: 'getFilters',
},
default: '',
description: 'The ID of the Filter to use (will narrow down results if used together with user_id parameter)',
},
@ -3691,6 +3695,87 @@ export class Pipedrive implements INodeType {
},
],
},
// ----------------------------------
// deal: getAll
// ----------------------------------
{
displayName: 'Filters',
name: 'filters',
type: 'collection',
placeholder: 'Add Filter',
displayOptions: {
show: {
operation: [
'getAll',
],
resource: [
'deal',
],
},
},
default: {},
options: [
{
displayName: 'Predefined Filter',
name: 'filter_id',
type: 'options',
typeOptions: {
loadOptionsMethod: 'getFilters',
},
default: '',
description: 'Predefined filter to apply to the deals to retrieve',
},
{
displayName: 'Stage ID',
name: 'stage_id',
type: 'options',
typeOptions: {
loadOptionsMethod: 'getStageIds',
},
default: '',
description: 'ID of the stage to filter deals by',
},
{
displayName: 'Status',
name: 'status',
type: 'options',
options: [
{
name: 'All Not Deleted',
value: 'all_not_deleted',
},
{
name: 'Deleted',
value: 'deleted',
},
{
name: 'Lost',
value: 'lost',
},
{
name: 'Open',
value: 'open',
},
{
name: 'Won',
value: 'won',
},
],
default: 'all_not_deleted',
description: 'Status to filter deals by. Defaults to <code>all_not_deleted</code>',
},
{
displayName: 'User ID',
name: 'user_id',
type: 'options',
typeOptions: {
loadOptionsMethod: 'getUserIds',
},
default: '',
description: 'ID of the user to filter deals by',
},
],
},
],
};
@ -3718,6 +3803,35 @@ export class Pipedrive implements INodeType {
return returnData;
},
// Get all Filters to display them to user so that he can
// select them easily
async getFilters(this: ILoadOptionsFunctions): Promise<INodePropertyOptions[]> {
const returnData: INodePropertyOptions[] = [];
const resource = this.getNodeParameter('resource') as string;
const type = {
'deal': 'deals',
'activity': 'activity',
'person': 'people',
} as { [id: string]: string };
const { data } = await pipedriveApiRequest.call(this, 'GET', '/filters', {}, { type: type[resource] as string });
for (const filter of data) {
returnData.push({
name: filter.name,
value: filter.id,
});
}
returnData.sort((a, b) => {
const aName = a.name.toLowerCase();
const bName = b.name.toLowerCase();
if (aName < bName) { return -1; }
if (aName > bName) { return 1; }
return 0;
});
return returnData;
},
// Get all Organizations to display them to user so that he can
// select them easily
async getOrganizationIds(this: ILoadOptionsFunctions): Promise<INodePropertyOptions[]> {
@ -3884,30 +3998,6 @@ export class Pipedrive implements INodeType {
return returnData;
},
// Get all the filters to display them to user so that he can
// select them easily
async getFilters(this: ILoadOptionsFunctions): Promise<INodePropertyOptions[]> {
const returnData: INodePropertyOptions[] = [];
const { data } = await pipedriveApiRequest.call(this, 'GET', '/filters', {}, { type: 'people' });
for (const filter of data) {
const filterName = filter.name;
const filterId = filter.id;
returnData.push({
name: filterName,
value: filterId,
});
}
returnData.sort((a, b) => {
const aName = a.name.toLowerCase();
const bName = b.name.toLowerCase();
if (aName < bName) { return -1; }
if (aName > bName) { return 1; }
return 0;
});
return returnData;
},
// Get all the person labels to display them to user so that he can
// select them easily
async getPersonLabels(this: ILoadOptionsFunctions): Promise<INodePropertyOptions[]> {
@ -4135,6 +4225,11 @@ export class Pipedrive implements INodeType {
const additionalFields = this.getNodeParameter('additionalFields', i) as IDataObject;
addAdditionalFields(qs, additionalFields);
if (qs.filterId) {
qs.filter_id = qs.filterId;
delete qs.filterId;
}
if (qs.type) {
qs.type = (qs.type as string[]).join(',');
}
@ -4218,6 +4313,8 @@ export class Pipedrive implements INodeType {
if (returnAll === false) {
qs.limit = this.getNodeParameter('limit', i) as number;
}
const filters = this.getNodeParameter('filters', i) as IDataObject;
addAdditionalFields(qs, filters);
endpoint = `/deals`;
@ -4718,7 +4815,7 @@ export class Pipedrive implements INodeType {
} else if (operation === 'getAll') {
// ----------------------------------
// persons:getAll
// person:getAll
// ----------------------------------
requestMethod = 'GET';