n8n-nodes-perfexcrm 0.1.8 → 0.1.10

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,5 +1,495 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.projectFields = exports.projectOperations = void 0;
4
- exports.projectOperations = [];
5
- exports.projectFields = [];
4
+ exports.projectOperations = [
5
+ {
6
+ displayName: 'Operation',
7
+ name: 'operation',
8
+ type: 'options',
9
+ noDataExpression: true,
10
+ displayOptions: {
11
+ show: {
12
+ resource: ['project'],
13
+ },
14
+ },
15
+ options: [
16
+ {
17
+ name: 'Create',
18
+ value: 'create',
19
+ description: 'Create a new project',
20
+ action: 'Create a project',
21
+ },
22
+ {
23
+ name: 'Delete',
24
+ value: 'delete',
25
+ description: 'Delete a project',
26
+ action: 'Delete a project',
27
+ },
28
+ {
29
+ name: 'Get',
30
+ value: 'get',
31
+ description: 'Get a project',
32
+ action: 'Get a project',
33
+ },
34
+ {
35
+ name: 'Get Many',
36
+ value: 'getAll',
37
+ description: 'Get many projects',
38
+ action: 'Get many projects',
39
+ },
40
+ {
41
+ name: 'Update',
42
+ value: 'update',
43
+ description: 'Update a project',
44
+ action: 'Update a project',
45
+ },
46
+ ],
47
+ default: 'create',
48
+ },
49
+ ];
50
+ exports.projectFields = [
51
+ /* -------------------------------------------------------------------------- */
52
+ /* project:create */
53
+ /* -------------------------------------------------------------------------- */
54
+ {
55
+ displayName: 'Name',
56
+ name: 'name',
57
+ type: 'string',
58
+ required: true,
59
+ default: '',
60
+ displayOptions: {
61
+ show: {
62
+ resource: ['project'],
63
+ operation: ['create'],
64
+ },
65
+ },
66
+ description: 'Project name',
67
+ },
68
+ {
69
+ displayName: 'Client ID',
70
+ name: 'clientId',
71
+ type: 'string',
72
+ required: true,
73
+ default: '',
74
+ displayOptions: {
75
+ show: {
76
+ resource: ['project'],
77
+ operation: ['create'],
78
+ },
79
+ },
80
+ description: 'Client ID',
81
+ },
82
+ {
83
+ displayName: 'Additional Fields',
84
+ name: 'additionalFields',
85
+ type: 'collection',
86
+ placeholder: 'Add Field',
87
+ default: {},
88
+ displayOptions: {
89
+ show: {
90
+ resource: ['project'],
91
+ operation: ['create'],
92
+ },
93
+ },
94
+ options: [
95
+ {
96
+ displayName: 'Description',
97
+ name: 'description',
98
+ type: 'string',
99
+ typeOptions: {
100
+ alwaysOpenEditWindow: true,
101
+ },
102
+ default: '',
103
+ description: 'Project description',
104
+ },
105
+ {
106
+ displayName: 'Status',
107
+ name: 'status',
108
+ type: 'options',
109
+ options: [
110
+ {
111
+ name: 'Not Started',
112
+ value: 1,
113
+ },
114
+ {
115
+ name: 'In Progress',
116
+ value: 2,
117
+ },
118
+ {
119
+ name: 'On Hold',
120
+ value: 3,
121
+ },
122
+ {
123
+ name: 'Cancelled',
124
+ value: 4,
125
+ },
126
+ {
127
+ name: 'Finished',
128
+ value: 5,
129
+ },
130
+ ],
131
+ default: 1,
132
+ description: 'Project status',
133
+ },
134
+ {
135
+ displayName: 'Billing Type',
136
+ name: 'billing_type',
137
+ type: 'options',
138
+ options: [
139
+ {
140
+ name: 'Fixed Rate',
141
+ value: 1,
142
+ },
143
+ {
144
+ name: 'Project Hours',
145
+ value: 2,
146
+ },
147
+ {
148
+ name: 'Task Hours',
149
+ value: 3,
150
+ },
151
+ ],
152
+ default: 1,
153
+ description: 'Project billing type',
154
+ },
155
+ {
156
+ displayName: 'Start Date',
157
+ name: 'start_date',
158
+ type: 'dateTime',
159
+ default: '',
160
+ description: 'Project start date',
161
+ },
162
+ {
163
+ displayName: 'Deadline',
164
+ name: 'deadline',
165
+ type: 'dateTime',
166
+ default: '',
167
+ description: 'Project deadline',
168
+ },
169
+ {
170
+ displayName: 'Project Cost',
171
+ name: 'project_cost',
172
+ type: 'number',
173
+ default: 0,
174
+ description: 'Total project cost',
175
+ },
176
+ {
177
+ displayName: 'Project Rate Per Hour',
178
+ name: 'project_rate_per_hour',
179
+ type: 'number',
180
+ default: 0,
181
+ description: 'Hourly rate for project',
182
+ },
183
+ {
184
+ displayName: 'Estimated Hours',
185
+ name: 'estimated_hours',
186
+ type: 'number',
187
+ default: 0,
188
+ description: 'Estimated hours for project',
189
+ },
190
+ {
191
+ displayName: 'Progress',
192
+ name: 'progress',
193
+ type: 'number',
194
+ typeOptions: {
195
+ minValue: 0,
196
+ maxValue: 100,
197
+ },
198
+ default: 0,
199
+ description: 'Project progress percentage (0-100)',
200
+ },
201
+ ],
202
+ },
203
+ /* -------------------------------------------------------------------------- */
204
+ /* project:get */
205
+ /* -------------------------------------------------------------------------- */
206
+ {
207
+ displayName: 'Project ID',
208
+ name: 'projectId',
209
+ type: 'string',
210
+ required: true,
211
+ default: '',
212
+ displayOptions: {
213
+ show: {
214
+ resource: ['project'],
215
+ operation: ['get'],
216
+ },
217
+ },
218
+ description: 'The ID of the project',
219
+ },
220
+ /* -------------------------------------------------------------------------- */
221
+ /* project:getAll */
222
+ /* -------------------------------------------------------------------------- */
223
+ {
224
+ displayName: 'Return All',
225
+ name: 'returnAll',
226
+ type: 'boolean',
227
+ displayOptions: {
228
+ show: {
229
+ resource: ['project'],
230
+ operation: ['getAll'],
231
+ },
232
+ },
233
+ default: false,
234
+ description: 'Whether to return all results or only up to a given limit',
235
+ },
236
+ {
237
+ displayName: 'Limit',
238
+ name: 'limit',
239
+ type: 'number',
240
+ displayOptions: {
241
+ show: {
242
+ resource: ['project'],
243
+ operation: ['getAll'],
244
+ returnAll: [false],
245
+ },
246
+ },
247
+ typeOptions: {
248
+ minValue: 1,
249
+ },
250
+ default: 50,
251
+ description: 'Max number of results to return',
252
+ },
253
+ {
254
+ displayName: 'Filters',
255
+ name: 'filters',
256
+ type: 'collection',
257
+ placeholder: 'Add Filter',
258
+ default: {},
259
+ displayOptions: {
260
+ show: {
261
+ resource: ['project'],
262
+ operation: ['getAll'],
263
+ },
264
+ },
265
+ options: [
266
+ {
267
+ displayName: 'Client ID',
268
+ name: 'clientid',
269
+ type: 'string',
270
+ default: '',
271
+ description: 'Filter by client ID',
272
+ },
273
+ {
274
+ displayName: 'Status',
275
+ name: 'status',
276
+ type: 'options',
277
+ options: [
278
+ {
279
+ name: 'All',
280
+ value: '',
281
+ },
282
+ {
283
+ name: 'Not Started',
284
+ value: '1',
285
+ },
286
+ {
287
+ name: 'In Progress',
288
+ value: '2',
289
+ },
290
+ {
291
+ name: 'On Hold',
292
+ value: '3',
293
+ },
294
+ {
295
+ name: 'Cancelled',
296
+ value: '4',
297
+ },
298
+ {
299
+ name: 'Finished',
300
+ value: '5',
301
+ },
302
+ ],
303
+ default: '',
304
+ description: 'Filter by status',
305
+ },
306
+ {
307
+ displayName: 'Billing Type',
308
+ name: 'billing_type',
309
+ type: 'options',
310
+ options: [
311
+ {
312
+ name: 'All',
313
+ value: '',
314
+ },
315
+ {
316
+ name: 'Fixed Rate',
317
+ value: '1',
318
+ },
319
+ {
320
+ name: 'Project Hours',
321
+ value: '2',
322
+ },
323
+ {
324
+ name: 'Task Hours',
325
+ value: '3',
326
+ },
327
+ ],
328
+ default: '',
329
+ description: 'Filter by billing type',
330
+ },
331
+ ],
332
+ },
333
+ /* -------------------------------------------------------------------------- */
334
+ /* project:update */
335
+ /* -------------------------------------------------------------------------- */
336
+ {
337
+ displayName: 'Project ID',
338
+ name: 'projectId',
339
+ type: 'string',
340
+ required: true,
341
+ default: '',
342
+ displayOptions: {
343
+ show: {
344
+ resource: ['project'],
345
+ operation: ['update'],
346
+ },
347
+ },
348
+ description: 'The ID of the project',
349
+ },
350
+ {
351
+ displayName: 'Update Fields',
352
+ name: 'updateFields',
353
+ type: 'collection',
354
+ placeholder: 'Add Field',
355
+ default: {},
356
+ displayOptions: {
357
+ show: {
358
+ resource: ['project'],
359
+ operation: ['update'],
360
+ },
361
+ },
362
+ options: [
363
+ {
364
+ displayName: 'Name',
365
+ name: 'name',
366
+ type: 'string',
367
+ default: '',
368
+ description: 'Project name',
369
+ },
370
+ {
371
+ displayName: 'Description',
372
+ name: 'description',
373
+ type: 'string',
374
+ typeOptions: {
375
+ alwaysOpenEditWindow: true,
376
+ },
377
+ default: '',
378
+ description: 'Project description',
379
+ },
380
+ {
381
+ displayName: 'Status',
382
+ name: 'status',
383
+ type: 'options',
384
+ options: [
385
+ {
386
+ name: 'Not Started',
387
+ value: 1,
388
+ },
389
+ {
390
+ name: 'In Progress',
391
+ value: 2,
392
+ },
393
+ {
394
+ name: 'On Hold',
395
+ value: 3,
396
+ },
397
+ {
398
+ name: 'Cancelled',
399
+ value: 4,
400
+ },
401
+ {
402
+ name: 'Finished',
403
+ value: 5,
404
+ },
405
+ ],
406
+ default: 1,
407
+ description: 'Project status',
408
+ },
409
+ {
410
+ displayName: 'Billing Type',
411
+ name: 'billing_type',
412
+ type: 'options',
413
+ options: [
414
+ {
415
+ name: 'Fixed Rate',
416
+ value: 1,
417
+ },
418
+ {
419
+ name: 'Project Hours',
420
+ value: 2,
421
+ },
422
+ {
423
+ name: 'Task Hours',
424
+ value: 3,
425
+ },
426
+ ],
427
+ default: 1,
428
+ description: 'Project billing type',
429
+ },
430
+ {
431
+ displayName: 'Start Date',
432
+ name: 'start_date',
433
+ type: 'dateTime',
434
+ default: '',
435
+ description: 'Project start date',
436
+ },
437
+ {
438
+ displayName: 'Deadline',
439
+ name: 'deadline',
440
+ type: 'dateTime',
441
+ default: '',
442
+ description: 'Project deadline',
443
+ },
444
+ {
445
+ displayName: 'Project Cost',
446
+ name: 'project_cost',
447
+ type: 'number',
448
+ default: 0,
449
+ description: 'Total project cost',
450
+ },
451
+ {
452
+ displayName: 'Project Rate Per Hour',
453
+ name: 'project_rate_per_hour',
454
+ type: 'number',
455
+ default: 0,
456
+ description: 'Hourly rate for project',
457
+ },
458
+ {
459
+ displayName: 'Estimated Hours',
460
+ name: 'estimated_hours',
461
+ type: 'number',
462
+ default: 0,
463
+ description: 'Estimated hours for project',
464
+ },
465
+ {
466
+ displayName: 'Progress',
467
+ name: 'progress',
468
+ type: 'number',
469
+ typeOptions: {
470
+ minValue: 0,
471
+ maxValue: 100,
472
+ },
473
+ default: 0,
474
+ description: 'Project progress percentage (0-100)',
475
+ },
476
+ ],
477
+ },
478
+ /* -------------------------------------------------------------------------- */
479
+ /* project:delete */
480
+ /* -------------------------------------------------------------------------- */
481
+ {
482
+ displayName: 'Project ID',
483
+ name: 'projectId',
484
+ type: 'string',
485
+ required: true,
486
+ default: '',
487
+ displayOptions: {
488
+ show: {
489
+ resource: ['project'],
490
+ operation: ['delete'],
491
+ },
492
+ },
493
+ description: 'The ID of the project',
494
+ },
495
+ ];
@@ -31,6 +31,12 @@ exports.ticketOperations = [
31
31
  description: 'Delete a ticket',
32
32
  action: 'Delete a ticket',
33
33
  },
34
+ {
35
+ name: 'Delete Reply',
36
+ value: 'deleteReply',
37
+ description: 'Delete a reply from a ticket',
38
+ action: 'Delete reply from ticket',
39
+ },
34
40
  {
35
41
  name: 'Get',
36
42
  value: 'get',
@@ -43,12 +49,30 @@ exports.ticketOperations = [
43
49
  description: 'Get many tickets',
44
50
  action: 'Get many tickets',
45
51
  },
52
+ {
53
+ name: 'Get Reply',
54
+ value: 'getReply',
55
+ description: 'Get a reply from a ticket',
56
+ action: 'Get reply from ticket',
57
+ },
58
+ {
59
+ name: 'List Replies',
60
+ value: 'listReplies',
61
+ description: 'Get all replies from a ticket',
62
+ action: 'Get all replies from ticket',
63
+ },
46
64
  {
47
65
  name: 'Update',
48
66
  value: 'update',
49
67
  description: 'Update a ticket',
50
68
  action: 'Update a ticket',
51
69
  },
70
+ {
71
+ name: 'Update Reply',
72
+ value: 'updateReply',
73
+ description: 'Update a reply on a ticket',
74
+ action: 'Update reply on ticket',
75
+ },
52
76
  ],
53
77
  default: 'create',
54
78
  },
@@ -566,4 +590,139 @@ exports.ticketFields = [
566
590
  },
567
591
  ],
568
592
  },
593
+ /* -------------------------------------------------------------------------- */
594
+ /* ticket:getReply */
595
+ /* -------------------------------------------------------------------------- */
596
+ {
597
+ displayName: 'Ticket ID',
598
+ name: 'ticketId',
599
+ type: 'string',
600
+ required: true,
601
+ default: '',
602
+ displayOptions: {
603
+ show: {
604
+ resource: ['ticket'],
605
+ operation: ['getReply'],
606
+ },
607
+ },
608
+ description: 'The ID of the ticket',
609
+ },
610
+ {
611
+ displayName: 'Reply ID',
612
+ name: 'replyId',
613
+ type: 'string',
614
+ required: true,
615
+ default: '',
616
+ displayOptions: {
617
+ show: {
618
+ resource: ['ticket'],
619
+ operation: ['getReply'],
620
+ },
621
+ },
622
+ description: 'The ID of the reply',
623
+ },
624
+ /* -------------------------------------------------------------------------- */
625
+ /* ticket:updateReply */
626
+ /* -------------------------------------------------------------------------- */
627
+ {
628
+ displayName: 'Ticket ID',
629
+ name: 'ticketId',
630
+ type: 'string',
631
+ required: true,
632
+ default: '',
633
+ displayOptions: {
634
+ show: {
635
+ resource: ['ticket'],
636
+ operation: ['updateReply'],
637
+ },
638
+ },
639
+ description: 'The ID of the ticket',
640
+ },
641
+ {
642
+ displayName: 'Reply ID',
643
+ name: 'replyId',
644
+ type: 'string',
645
+ required: true,
646
+ default: '',
647
+ displayOptions: {
648
+ show: {
649
+ resource: ['ticket'],
650
+ operation: ['updateReply'],
651
+ },
652
+ },
653
+ description: 'The ID of the reply',
654
+ },
655
+ {
656
+ displayName: 'Update Fields',
657
+ name: 'updateFields',
658
+ type: 'collection',
659
+ placeholder: 'Add Field',
660
+ default: {},
661
+ displayOptions: {
662
+ show: {
663
+ resource: ['ticket'],
664
+ operation: ['updateReply'],
665
+ },
666
+ },
667
+ options: [
668
+ {
669
+ displayName: 'Message',
670
+ name: 'message',
671
+ type: 'string',
672
+ typeOptions: {
673
+ alwaysOpenEditWindow: true,
674
+ },
675
+ default: '',
676
+ description: 'Reply message content',
677
+ },
678
+ ],
679
+ },
680
+ /* -------------------------------------------------------------------------- */
681
+ /* ticket:deleteReply */
682
+ /* -------------------------------------------------------------------------- */
683
+ {
684
+ displayName: 'Ticket ID',
685
+ name: 'ticketId',
686
+ type: 'string',
687
+ required: true,
688
+ default: '',
689
+ displayOptions: {
690
+ show: {
691
+ resource: ['ticket'],
692
+ operation: ['deleteReply'],
693
+ },
694
+ },
695
+ description: 'The ID of the ticket',
696
+ },
697
+ {
698
+ displayName: 'Reply ID',
699
+ name: 'replyId',
700
+ type: 'string',
701
+ required: true,
702
+ default: '',
703
+ displayOptions: {
704
+ show: {
705
+ resource: ['ticket'],
706
+ operation: ['deleteReply'],
707
+ },
708
+ },
709
+ description: 'The ID of the reply',
710
+ },
711
+ /* -------------------------------------------------------------------------- */
712
+ /* ticket:listReplies */
713
+ /* -------------------------------------------------------------------------- */
714
+ {
715
+ displayName: 'Ticket ID',
716
+ name: 'ticketId',
717
+ type: 'string',
718
+ required: true,
719
+ default: '',
720
+ displayOptions: {
721
+ show: {
722
+ resource: ['ticket'],
723
+ operation: ['listReplies'],
724
+ },
725
+ },
726
+ description: 'The ID of the ticket',
727
+ },
569
728
  ];
@@ -1,5 +1,10 @@
1
- <?xml version="1.0" encoding="UTF-8"?>
2
- <svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="60" height="60" viewBox="0 0 60 60">
3
- <rect width="60" height="60" fill="#ffffff"/>
4
- <image xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAN0AAAAwCAYAAACVHn9GAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAyZpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuNi1jMDY3IDc5LjE1Nzc0NywgMjAxNS8wMy8zMC0yMzo0MDo0MiAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENDIDIwMTUgKFdpbmRvd3MpIiB4bXBNTTpJbnN0YW5jZUlEPSJ4bXAuaWlkOjI2NzU2QzNBODY3OTExRTdBM0Y2REU0NjhCOERENzIwIiB4bXBNTTpEb2N1bWVudElEPSJ4bXAuZGlkOjI2NzU2QzNCODY3OTExRTdBM0Y2REU0NjhCOERENzIwIj4gPHhtcE1NOkRlcml2ZWRGcm9tIHN0UmVmOmluc3RhbmNlSUQ9InhtcC5paWQ6MjY3NTZDMzg4Njc5MTFFN0EzRjZERTQ2OEI4REQ3MjAiIHN0UmVmOmRvY3VtZW50SUQ9InhtcC5kaWQ6MjY3NTZDMzk4Njc5MTFFN0EzRjZERTQ2OEI4REQ3MjAiLz4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/eHBhY2tldCBlbmQ9InIiPz6pmWKdAAAHQklEQVR42uxd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" x="5" y="20" width="50" height="20" preserveAspectRatio="xMidYMid meet"/>
5
- </svg>
1
+ <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 60 60" width="60" height="60">
2
+ <defs>
3
+ <linearGradient id="perfexGradient" x1="0%" y1="0%" x2="100%" y2="100%">
4
+ <stop offset="0%" style="stop-color:#4e73df;stop-opacity:1" />
5
+ <stop offset="100%" style="stop-color:#224abe;stop-opacity:1" />
6
+ </linearGradient>
7
+ </defs>
8
+ <rect width="60" height="60" rx="8" ry="8" fill="url(#perfexGradient)"/>
9
+ <text x="30" y="42" font-family="Arial, sans-serif" font-size="36" font-weight="bold" fill="white" text-anchor="middle">P</text>
10
+ </svg>