n8n-nodes-aivencerealtycrm 2.0.3 → 2.1.0
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.
|
@@ -68,6 +68,22 @@ class AivenceRealty {
|
|
|
68
68
|
name: 'Agent',
|
|
69
69
|
value: 'agent',
|
|
70
70
|
},
|
|
71
|
+
{
|
|
72
|
+
name: 'Owner (Propietario)',
|
|
73
|
+
value: 'owner',
|
|
74
|
+
},
|
|
75
|
+
{
|
|
76
|
+
name: 'Tasación',
|
|
77
|
+
value: 'tasacion',
|
|
78
|
+
},
|
|
79
|
+
{
|
|
80
|
+
name: 'DocuSeal (Firma Digital)',
|
|
81
|
+
value: 'docuseal',
|
|
82
|
+
},
|
|
83
|
+
{
|
|
84
|
+
name: 'Mariana (Transferencia)',
|
|
85
|
+
value: 'mariana',
|
|
86
|
+
},
|
|
71
87
|
],
|
|
72
88
|
default: 'lead',
|
|
73
89
|
description: 'Recurso del CRM a operar',
|
|
@@ -1640,6 +1656,12 @@ class AivenceRealty {
|
|
|
1640
1656
|
description: 'Actualizar estado de cita',
|
|
1641
1657
|
action: 'Actualizar estado',
|
|
1642
1658
|
},
|
|
1659
|
+
{
|
|
1660
|
+
name: 'Reschedule',
|
|
1661
|
+
value: 'reschedule',
|
|
1662
|
+
description: 'Reprogramar cita (cambiar fecha y hora)',
|
|
1663
|
+
action: 'Reprogramar cita',
|
|
1664
|
+
},
|
|
1643
1665
|
{
|
|
1644
1666
|
name: 'Delete',
|
|
1645
1667
|
value: 'delete',
|
|
@@ -1840,7 +1862,7 @@ class AivenceRealty {
|
|
|
1840
1862
|
default: '',
|
|
1841
1863
|
description: 'Origen de la cita (máximo 50 caracteres)',
|
|
1842
1864
|
},
|
|
1843
|
-
// Appointment ID para get, updateStatus y delete
|
|
1865
|
+
// Appointment ID para get, updateStatus, reschedule y delete
|
|
1844
1866
|
{
|
|
1845
1867
|
displayName: 'Appointment ID',
|
|
1846
1868
|
name: 'appointmentId',
|
|
@@ -1849,7 +1871,7 @@ class AivenceRealty {
|
|
|
1849
1871
|
displayOptions: {
|
|
1850
1872
|
show: {
|
|
1851
1873
|
resource: ['appointment'],
|
|
1852
|
-
operation: ['get', 'updateStatus', 'delete'],
|
|
1874
|
+
operation: ['get', 'updateStatus', 'reschedule', 'delete'],
|
|
1853
1875
|
},
|
|
1854
1876
|
},
|
|
1855
1877
|
default: '',
|
|
@@ -1888,6 +1910,51 @@ class AivenceRealty {
|
|
|
1888
1910
|
default: 'pending',
|
|
1889
1911
|
description: 'Nuevo estado de la cita',
|
|
1890
1912
|
},
|
|
1913
|
+
// Parámetros para Reschedule (Reprogramar)
|
|
1914
|
+
{
|
|
1915
|
+
displayName: 'Nueva Fecha',
|
|
1916
|
+
name: 'reschedule_fecha',
|
|
1917
|
+
type: 'string',
|
|
1918
|
+
required: true,
|
|
1919
|
+
displayOptions: {
|
|
1920
|
+
show: {
|
|
1921
|
+
resource: ['appointment'],
|
|
1922
|
+
operation: ['reschedule'],
|
|
1923
|
+
},
|
|
1924
|
+
},
|
|
1925
|
+
default: '',
|
|
1926
|
+
placeholder: '2026-01-20',
|
|
1927
|
+
description: 'Nueva fecha para la cita (formato: YYYY-MM-DD)',
|
|
1928
|
+
},
|
|
1929
|
+
{
|
|
1930
|
+
displayName: 'Nueva Hora',
|
|
1931
|
+
name: 'reschedule_hora',
|
|
1932
|
+
type: 'string',
|
|
1933
|
+
required: true,
|
|
1934
|
+
displayOptions: {
|
|
1935
|
+
show: {
|
|
1936
|
+
resource: ['appointment'],
|
|
1937
|
+
operation: ['reschedule'],
|
|
1938
|
+
},
|
|
1939
|
+
},
|
|
1940
|
+
default: '',
|
|
1941
|
+
placeholder: '14:30',
|
|
1942
|
+
description: 'Nueva hora para la cita (formato: HH:mm, ejemplo: 14:30)',
|
|
1943
|
+
},
|
|
1944
|
+
{
|
|
1945
|
+
displayName: 'Notas',
|
|
1946
|
+
name: 'reschedule_notas',
|
|
1947
|
+
type: 'string',
|
|
1948
|
+
required: false,
|
|
1949
|
+
displayOptions: {
|
|
1950
|
+
show: {
|
|
1951
|
+
resource: ['appointment'],
|
|
1952
|
+
operation: ['reschedule'],
|
|
1953
|
+
},
|
|
1954
|
+
},
|
|
1955
|
+
default: '',
|
|
1956
|
+
description: 'Motivo o notas de la reprogramación (opcional)',
|
|
1957
|
+
},
|
|
1891
1958
|
// Appointment List Filters
|
|
1892
1959
|
{
|
|
1893
1960
|
displayName: 'Filtro por Propiedad',
|
|
@@ -2410,224 +2477,1025 @@ class AivenceRealty {
|
|
|
2410
2477
|
placeholder: 'Palermo',
|
|
2411
2478
|
description: 'Filtrar agentes por zona (opcional)',
|
|
2412
2479
|
},
|
|
2413
|
-
],
|
|
2414
|
-
};
|
|
2415
|
-
}
|
|
2416
|
-
async execute() {
|
|
2417
|
-
const items = this.getInputData();
|
|
2418
|
-
const returnData = [];
|
|
2419
|
-
const credentials = await this.getCredentials('aivenceRealtyApi');
|
|
2420
|
-
const baseUrl = credentials.baseUrl;
|
|
2421
|
-
for (let i = 0; i < items.length; i++) {
|
|
2422
|
-
try {
|
|
2423
|
-
const resource = this.getNodeParameter('resource', i);
|
|
2424
|
-
const operation = this.getNodeParameter('operation', i);
|
|
2425
|
-
let responseData;
|
|
2426
|
-
// ============================================
|
|
2427
|
-
// LEAD RESOURCE
|
|
2428
|
-
// ============================================
|
|
2429
|
-
if (resource === 'lead') {
|
|
2430
|
-
if (operation === 'list') {
|
|
2431
|
-
responseData = await this.helpers.httpRequest({
|
|
2432
|
-
method: 'GET',
|
|
2433
|
-
url: `${baseUrl}/api/v1/leads`,
|
|
2434
|
-
json: true,
|
|
2435
|
-
});
|
|
2436
|
-
}
|
|
2437
|
-
else if (operation === 'create') {
|
|
2438
|
-
const useJsonInput = this.getNodeParameter('useJsonInput', i, false);
|
|
2439
|
-
let body = {};
|
|
2440
|
-
if (useJsonInput) {
|
|
2441
|
-
// Usar JSON del nodo anterior
|
|
2442
|
-
body = items[i].json;
|
|
2443
|
-
}
|
|
2444
|
-
else {
|
|
2445
|
-
// Construir body con campos estructurados
|
|
2446
|
-
body = {
|
|
2447
|
-
name: this.getNodeParameter('name', i),
|
|
2448
|
-
email: this.getNodeParameter('email', i),
|
|
2449
|
-
phone: this.getNodeParameter('phone', i),
|
|
2450
|
-
message: this.getNodeParameter('message', i, ''),
|
|
2451
|
-
interest: this.getNodeParameter('interest', i, 'compra'),
|
|
2452
|
-
budget_min: this.getNodeParameter('budget_min', i, 0),
|
|
2453
|
-
budget_max: this.getNodeParameter('budget_max', i, 0),
|
|
2454
|
-
property_type: this.getNodeParameter('property_type', i, 'apartamento'),
|
|
2455
|
-
conversation_id: this.getNodeParameter('conversation_id', i, ''),
|
|
2456
|
-
status: this.getNodeParameter('status', i, 'new'),
|
|
2457
|
-
score: this.getNodeParameter('score', i, 0),
|
|
2458
|
-
category: this.getNodeParameter('category', i, 'warm'),
|
|
2459
|
-
notes: this.getNodeParameter('notes', i, ''),
|
|
2460
|
-
crm_id: this.getNodeParameter('crm_id', i, ''),
|
|
2461
|
-
};
|
|
2462
|
-
// Procesar preferred_areas (convertir string separado por comas a array)
|
|
2463
|
-
const areasString = this.getNodeParameter('preferred_areas', i, '');
|
|
2464
|
-
if (areasString) {
|
|
2465
|
-
body.preferred_areas = areasString.split(',').map((area) => area.trim());
|
|
2466
|
-
}
|
|
2467
|
-
// Procesar tags (convertir string separado por comas a array)
|
|
2468
|
-
const tagsString = this.getNodeParameter('tags', i, '');
|
|
2469
|
-
if (tagsString) {
|
|
2470
|
-
body.tags = tagsString.split(',').map((tag) => tag.trim());
|
|
2471
|
-
}
|
|
2472
|
-
// Remover campos vacíos opcionales
|
|
2473
|
-
if (!body.message)
|
|
2474
|
-
delete body.message;
|
|
2475
|
-
if (body.budget_min === 0)
|
|
2476
|
-
delete body.budget_min;
|
|
2477
|
-
if (body.budget_max === 0)
|
|
2478
|
-
delete body.budget_max;
|
|
2479
|
-
if (!body.preferred_areas || body.preferred_areas.length === 0)
|
|
2480
|
-
delete body.preferred_areas;
|
|
2481
|
-
if (!body.conversation_id)
|
|
2482
|
-
delete body.conversation_id;
|
|
2483
|
-
if (!body.notes)
|
|
2484
|
-
delete body.notes;
|
|
2485
|
-
if (!body.crm_id)
|
|
2486
|
-
delete body.crm_id;
|
|
2487
|
-
if (!body.tags || body.tags.length === 0)
|
|
2488
|
-
delete body.tags;
|
|
2489
|
-
if (body.score === 0)
|
|
2490
|
-
delete body.score;
|
|
2491
|
-
}
|
|
2492
|
-
responseData = await this.helpers.httpRequest({
|
|
2493
|
-
method: 'POST',
|
|
2494
|
-
url: `${baseUrl}/api/v1/leads`,
|
|
2495
|
-
body,
|
|
2496
|
-
json: true,
|
|
2497
|
-
});
|
|
2498
|
-
}
|
|
2499
|
-
else if (operation === 'update') {
|
|
2500
|
-
const leadId = this.getNodeParameter('leadId', i);
|
|
2501
|
-
const useJsonInput = this.getNodeParameter('useJsonInput', i, false);
|
|
2502
|
-
let body = {};
|
|
2503
|
-
if (useJsonInput) {
|
|
2504
|
-
// Usar JSON del nodo anterior
|
|
2505
|
-
body = items[i].json;
|
|
2506
|
-
}
|
|
2507
|
-
else {
|
|
2508
|
-
// Construir body con campos estructurados (solo enviar campos proporcionados)
|
|
2509
|
-
const name = this.getNodeParameter('name', i, '');
|
|
2510
|
-
const email = this.getNodeParameter('email', i, '');
|
|
2511
|
-
const phone = this.getNodeParameter('phone', i, '');
|
|
2512
|
-
const message = this.getNodeParameter('message', i, '');
|
|
2513
|
-
const interest = this.getNodeParameter('interest', i, '');
|
|
2514
|
-
const budget_min = this.getNodeParameter('budget_min', i, 0);
|
|
2515
|
-
const budget_max = this.getNodeParameter('budget_max', i, 0);
|
|
2516
|
-
const property_type = this.getNodeParameter('property_type', i, '');
|
|
2517
|
-
const areasString = this.getNodeParameter('preferred_areas', i, '');
|
|
2518
|
-
const conversation_id = this.getNodeParameter('conversation_id', i, '');
|
|
2519
|
-
const status = this.getNodeParameter('status', i, '');
|
|
2520
|
-
const score = this.getNodeParameter('score', i, 0);
|
|
2521
|
-
const category = this.getNodeParameter('category', i, '');
|
|
2522
|
-
const notes = this.getNodeParameter('notes', i, '');
|
|
2523
|
-
const crm_id = this.getNodeParameter('crm_id', i, '');
|
|
2524
|
-
const tagsString = this.getNodeParameter('tags', i, '');
|
|
2525
|
-
if (name)
|
|
2526
|
-
body.name = name;
|
|
2527
|
-
if (email)
|
|
2528
|
-
body.email = email;
|
|
2529
|
-
if (phone)
|
|
2530
|
-
body.phone = phone;
|
|
2531
|
-
if (message)
|
|
2532
|
-
body.message = message;
|
|
2533
|
-
if (interest)
|
|
2534
|
-
body.interest = interest;
|
|
2535
|
-
if (budget_min > 0)
|
|
2536
|
-
body.budget_min = budget_min;
|
|
2537
|
-
if (budget_max > 0)
|
|
2538
|
-
body.budget_max = budget_max;
|
|
2539
|
-
if (property_type)
|
|
2540
|
-
body.property_type = property_type;
|
|
2541
|
-
if (conversation_id)
|
|
2542
|
-
body.conversation_id = conversation_id;
|
|
2543
|
-
if (status)
|
|
2544
|
-
body.status = status;
|
|
2545
|
-
if (score > 0)
|
|
2546
|
-
body.score = score;
|
|
2547
|
-
if (category)
|
|
2548
|
-
body.category = category;
|
|
2549
|
-
if (notes)
|
|
2550
|
-
body.notes = notes;
|
|
2551
|
-
if (crm_id)
|
|
2552
|
-
body.crm_id = crm_id;
|
|
2553
|
-
if (areasString) {
|
|
2554
|
-
body.preferred_areas = areasString.split(',').map((area) => area.trim());
|
|
2555
|
-
}
|
|
2556
|
-
if (tagsString) {
|
|
2557
|
-
body.tags = tagsString.split(',').map((tag) => tag.trim());
|
|
2558
|
-
}
|
|
2559
|
-
}
|
|
2560
|
-
responseData = await this.helpers.httpRequest({
|
|
2561
|
-
method: 'PATCH',
|
|
2562
|
-
url: `${baseUrl}/api/v1/leads/${leadId}`,
|
|
2563
|
-
body,
|
|
2564
|
-
json: true,
|
|
2565
|
-
});
|
|
2566
|
-
}
|
|
2567
|
-
else if (operation === 'get') {
|
|
2568
|
-
const leadId = this.getNodeParameter('leadId', i);
|
|
2569
|
-
responseData = await this.helpers.httpRequest({
|
|
2570
|
-
method: 'GET',
|
|
2571
|
-
url: `${baseUrl}/api/v1/leads/${leadId}`,
|
|
2572
|
-
json: true,
|
|
2573
|
-
});
|
|
2574
|
-
}
|
|
2575
|
-
else if (operation === 'addActivity') {
|
|
2576
|
-
const leadId = this.getNodeParameter('leadId', i);
|
|
2577
|
-
const activityType = this.getNodeParameter('activity_type', i);
|
|
2578
|
-
const description = this.getNodeParameter('activity_description', i);
|
|
2579
|
-
const body = {
|
|
2580
|
-
activity_type: activityType,
|
|
2581
|
-
description: description,
|
|
2582
|
-
};
|
|
2583
|
-
responseData = await this.helpers.httpRequest({
|
|
2584
|
-
method: 'POST',
|
|
2585
|
-
url: `${baseUrl}/api/v1/mariana/leads/${leadId}/activity`,
|
|
2586
|
-
body,
|
|
2587
|
-
json: true,
|
|
2588
|
-
});
|
|
2589
|
-
}
|
|
2590
|
-
}
|
|
2591
2480
|
// ============================================
|
|
2592
|
-
//
|
|
2481
|
+
// OWNER (PROPIETARIO) OPERATIONS
|
|
2593
2482
|
// ============================================
|
|
2594
|
-
|
|
2595
|
-
|
|
2596
|
-
|
|
2597
|
-
|
|
2598
|
-
|
|
2599
|
-
|
|
2600
|
-
|
|
2601
|
-
|
|
2602
|
-
|
|
2603
|
-
|
|
2604
|
-
|
|
2605
|
-
|
|
2606
|
-
|
|
2607
|
-
|
|
2608
|
-
|
|
2609
|
-
|
|
2610
|
-
|
|
2611
|
-
|
|
2612
|
-
|
|
2613
|
-
|
|
2614
|
-
|
|
2615
|
-
|
|
2616
|
-
|
|
2617
|
-
|
|
2618
|
-
|
|
2619
|
-
|
|
2620
|
-
|
|
2621
|
-
|
|
2622
|
-
|
|
2623
|
-
|
|
2624
|
-
|
|
2625
|
-
|
|
2626
|
-
|
|
2627
|
-
|
|
2628
|
-
}
|
|
2629
|
-
|
|
2630
|
-
|
|
2483
|
+
{
|
|
2484
|
+
displayName: 'Operación',
|
|
2485
|
+
name: 'operation',
|
|
2486
|
+
type: 'options',
|
|
2487
|
+
noDataExpression: true,
|
|
2488
|
+
displayOptions: {
|
|
2489
|
+
show: {
|
|
2490
|
+
resource: ['owner'],
|
|
2491
|
+
},
|
|
2492
|
+
},
|
|
2493
|
+
options: [
|
|
2494
|
+
{
|
|
2495
|
+
name: 'Create',
|
|
2496
|
+
value: 'create',
|
|
2497
|
+
description: 'Crear nuevo propietario',
|
|
2498
|
+
action: 'Crear propietario',
|
|
2499
|
+
},
|
|
2500
|
+
{
|
|
2501
|
+
name: 'Get',
|
|
2502
|
+
value: 'get',
|
|
2503
|
+
description: 'Obtener propietario por ID',
|
|
2504
|
+
action: 'Obtener propietario',
|
|
2505
|
+
},
|
|
2506
|
+
{
|
|
2507
|
+
name: 'Search',
|
|
2508
|
+
value: 'search',
|
|
2509
|
+
description: 'Buscar propietario por email, teléfono o CUIT',
|
|
2510
|
+
action: 'Buscar propietario',
|
|
2511
|
+
},
|
|
2512
|
+
{
|
|
2513
|
+
name: 'Update',
|
|
2514
|
+
value: 'update',
|
|
2515
|
+
description: 'Actualizar datos de propietario',
|
|
2516
|
+
action: 'Actualizar propietario',
|
|
2517
|
+
},
|
|
2518
|
+
{
|
|
2519
|
+
name: 'List',
|
|
2520
|
+
value: 'list',
|
|
2521
|
+
description: 'Listar todos los propietarios',
|
|
2522
|
+
action: 'Listar propietarios',
|
|
2523
|
+
},
|
|
2524
|
+
],
|
|
2525
|
+
default: 'create',
|
|
2526
|
+
},
|
|
2527
|
+
// Owner ID (for get, update)
|
|
2528
|
+
{
|
|
2529
|
+
displayName: 'Owner ID',
|
|
2530
|
+
name: 'ownerId',
|
|
2531
|
+
type: 'number',
|
|
2532
|
+
required: true,
|
|
2533
|
+
displayOptions: {
|
|
2534
|
+
show: {
|
|
2535
|
+
resource: ['owner'],
|
|
2536
|
+
operation: ['get', 'update'],
|
|
2537
|
+
},
|
|
2538
|
+
},
|
|
2539
|
+
default: 0,
|
|
2540
|
+
description: 'ID del propietario',
|
|
2541
|
+
},
|
|
2542
|
+
// Owner Create - Nombre
|
|
2543
|
+
{
|
|
2544
|
+
displayName: 'Nombre Completo',
|
|
2545
|
+
name: 'ownerNombre',
|
|
2546
|
+
type: 'string',
|
|
2547
|
+
required: true,
|
|
2548
|
+
displayOptions: {
|
|
2549
|
+
show: {
|
|
2550
|
+
resource: ['owner'],
|
|
2551
|
+
operation: ['create'],
|
|
2552
|
+
},
|
|
2553
|
+
},
|
|
2554
|
+
default: '',
|
|
2555
|
+
placeholder: 'Juan Pérez',
|
|
2556
|
+
description: 'Nombre completo del propietario',
|
|
2557
|
+
},
|
|
2558
|
+
// Owner Create - Email
|
|
2559
|
+
{
|
|
2560
|
+
displayName: 'Email',
|
|
2561
|
+
name: 'ownerEmail',
|
|
2562
|
+
type: 'string',
|
|
2563
|
+
required: true,
|
|
2564
|
+
displayOptions: {
|
|
2565
|
+
show: {
|
|
2566
|
+
resource: ['owner'],
|
|
2567
|
+
operation: ['create'],
|
|
2568
|
+
},
|
|
2569
|
+
},
|
|
2570
|
+
default: '',
|
|
2571
|
+
placeholder: 'juan@ejemplo.com',
|
|
2572
|
+
description: 'Email del propietario',
|
|
2573
|
+
},
|
|
2574
|
+
// Owner Create - Teléfono
|
|
2575
|
+
{
|
|
2576
|
+
displayName: 'Teléfono',
|
|
2577
|
+
name: 'ownerTelefono',
|
|
2578
|
+
type: 'string',
|
|
2579
|
+
required: true,
|
|
2580
|
+
displayOptions: {
|
|
2581
|
+
show: {
|
|
2582
|
+
resource: ['owner'],
|
|
2583
|
+
operation: ['create'],
|
|
2584
|
+
},
|
|
2585
|
+
},
|
|
2586
|
+
default: '',
|
|
2587
|
+
placeholder: '+54 11 1234-5678',
|
|
2588
|
+
description: 'Teléfono del propietario',
|
|
2589
|
+
},
|
|
2590
|
+
// Owner Create - CUIT/CUIL
|
|
2591
|
+
{
|
|
2592
|
+
displayName: 'CUIT/CUIL',
|
|
2593
|
+
name: 'ownerCuit',
|
|
2594
|
+
type: 'string',
|
|
2595
|
+
displayOptions: {
|
|
2596
|
+
show: {
|
|
2597
|
+
resource: ['owner'],
|
|
2598
|
+
operation: ['create', 'update'],
|
|
2599
|
+
},
|
|
2600
|
+
},
|
|
2601
|
+
default: '',
|
|
2602
|
+
placeholder: '20-12345678-9',
|
|
2603
|
+
description: 'CUIT o CUIL del propietario (opcional)',
|
|
2604
|
+
},
|
|
2605
|
+
// Owner Create - Tipo Persona
|
|
2606
|
+
{
|
|
2607
|
+
displayName: 'Tipo de Persona',
|
|
2608
|
+
name: 'ownerTipoPersona',
|
|
2609
|
+
type: 'options',
|
|
2610
|
+
displayOptions: {
|
|
2611
|
+
show: {
|
|
2612
|
+
resource: ['owner'],
|
|
2613
|
+
operation: ['create', 'update'],
|
|
2614
|
+
},
|
|
2615
|
+
},
|
|
2616
|
+
options: [
|
|
2617
|
+
{ name: 'Persona Física', value: 'fisica' },
|
|
2618
|
+
{ name: 'Persona Jurídica', value: 'juridica' },
|
|
2619
|
+
],
|
|
2620
|
+
default: 'fisica',
|
|
2621
|
+
description: 'Tipo de persona',
|
|
2622
|
+
},
|
|
2623
|
+
// Owner Create - Dirección
|
|
2624
|
+
{
|
|
2625
|
+
displayName: 'Dirección',
|
|
2626
|
+
name: 'ownerDireccion',
|
|
2627
|
+
type: 'string',
|
|
2628
|
+
displayOptions: {
|
|
2629
|
+
show: {
|
|
2630
|
+
resource: ['owner'],
|
|
2631
|
+
operation: ['create', 'update'],
|
|
2632
|
+
},
|
|
2633
|
+
},
|
|
2634
|
+
default: '',
|
|
2635
|
+
placeholder: 'Av. Corrientes 1234, CABA',
|
|
2636
|
+
description: 'Dirección del propietario (opcional)',
|
|
2637
|
+
},
|
|
2638
|
+
// Owner Create - Notas
|
|
2639
|
+
{
|
|
2640
|
+
displayName: 'Notas',
|
|
2641
|
+
name: 'ownerNotas',
|
|
2642
|
+
type: 'string',
|
|
2643
|
+
typeOptions: {
|
|
2644
|
+
rows: 3,
|
|
2645
|
+
},
|
|
2646
|
+
displayOptions: {
|
|
2647
|
+
show: {
|
|
2648
|
+
resource: ['owner'],
|
|
2649
|
+
operation: ['create', 'update'],
|
|
2650
|
+
},
|
|
2651
|
+
},
|
|
2652
|
+
default: '',
|
|
2653
|
+
description: 'Notas adicionales sobre el propietario (opcional)',
|
|
2654
|
+
},
|
|
2655
|
+
// Owner Search - Email
|
|
2656
|
+
{
|
|
2657
|
+
displayName: 'Buscar por Email',
|
|
2658
|
+
name: 'searchEmail',
|
|
2659
|
+
type: 'string',
|
|
2660
|
+
displayOptions: {
|
|
2661
|
+
show: {
|
|
2662
|
+
resource: ['owner'],
|
|
2663
|
+
operation: ['search'],
|
|
2664
|
+
},
|
|
2665
|
+
},
|
|
2666
|
+
default: '',
|
|
2667
|
+
placeholder: 'juan@ejemplo.com',
|
|
2668
|
+
description: 'Email a buscar (opcional)',
|
|
2669
|
+
},
|
|
2670
|
+
// Owner Search - Teléfono
|
|
2671
|
+
{
|
|
2672
|
+
displayName: 'Buscar por Teléfono',
|
|
2673
|
+
name: 'searchTelefono',
|
|
2674
|
+
type: 'string',
|
|
2675
|
+
displayOptions: {
|
|
2676
|
+
show: {
|
|
2677
|
+
resource: ['owner'],
|
|
2678
|
+
operation: ['search'],
|
|
2679
|
+
},
|
|
2680
|
+
},
|
|
2681
|
+
default: '',
|
|
2682
|
+
placeholder: '11 1234-5678',
|
|
2683
|
+
description: 'Teléfono a buscar (opcional)',
|
|
2684
|
+
},
|
|
2685
|
+
// Owner Search - CUIT
|
|
2686
|
+
{
|
|
2687
|
+
displayName: 'Buscar por CUIT',
|
|
2688
|
+
name: 'searchCuit',
|
|
2689
|
+
type: 'string',
|
|
2690
|
+
displayOptions: {
|
|
2691
|
+
show: {
|
|
2692
|
+
resource: ['owner'],
|
|
2693
|
+
operation: ['search'],
|
|
2694
|
+
},
|
|
2695
|
+
},
|
|
2696
|
+
default: '',
|
|
2697
|
+
placeholder: '20-12345678-9',
|
|
2698
|
+
description: 'CUIT a buscar (opcional)',
|
|
2699
|
+
},
|
|
2700
|
+
// Owner Update - Nombre
|
|
2701
|
+
{
|
|
2702
|
+
displayName: 'Nombre (nuevo)',
|
|
2703
|
+
name: 'updateNombre',
|
|
2704
|
+
type: 'string',
|
|
2705
|
+
displayOptions: {
|
|
2706
|
+
show: {
|
|
2707
|
+
resource: ['owner'],
|
|
2708
|
+
operation: ['update'],
|
|
2709
|
+
},
|
|
2710
|
+
},
|
|
2711
|
+
default: '',
|
|
2712
|
+
description: 'Nuevo nombre (dejar vacío para no cambiar)',
|
|
2713
|
+
},
|
|
2714
|
+
// Owner Update - Email
|
|
2715
|
+
{
|
|
2716
|
+
displayName: 'Email (nuevo)',
|
|
2717
|
+
name: 'updateEmail',
|
|
2718
|
+
type: 'string',
|
|
2719
|
+
displayOptions: {
|
|
2720
|
+
show: {
|
|
2721
|
+
resource: ['owner'],
|
|
2722
|
+
operation: ['update'],
|
|
2723
|
+
},
|
|
2724
|
+
},
|
|
2725
|
+
default: '',
|
|
2726
|
+
description: 'Nuevo email (dejar vacío para no cambiar)',
|
|
2727
|
+
},
|
|
2728
|
+
// Owner Update - Teléfono
|
|
2729
|
+
{
|
|
2730
|
+
displayName: 'Teléfono (nuevo)',
|
|
2731
|
+
name: 'updateTelefono',
|
|
2732
|
+
type: 'string',
|
|
2733
|
+
displayOptions: {
|
|
2734
|
+
show: {
|
|
2735
|
+
resource: ['owner'],
|
|
2736
|
+
operation: ['update'],
|
|
2737
|
+
},
|
|
2738
|
+
},
|
|
2739
|
+
default: '',
|
|
2740
|
+
description: 'Nuevo teléfono (dejar vacío para no cambiar)',
|
|
2741
|
+
},
|
|
2742
|
+
// Owner List - Paginación
|
|
2743
|
+
{
|
|
2744
|
+
displayName: 'Por Página',
|
|
2745
|
+
name: 'ownerPerPage',
|
|
2746
|
+
type: 'number',
|
|
2747
|
+
displayOptions: {
|
|
2748
|
+
show: {
|
|
2749
|
+
resource: ['owner'],
|
|
2750
|
+
operation: ['list'],
|
|
2751
|
+
},
|
|
2752
|
+
},
|
|
2753
|
+
default: 20,
|
|
2754
|
+
description: 'Cantidad de resultados por página',
|
|
2755
|
+
},
|
|
2756
|
+
// ============================================
|
|
2757
|
+
// TASACIÓN OPERATIONS
|
|
2758
|
+
// ============================================
|
|
2759
|
+
{
|
|
2760
|
+
displayName: 'Operación',
|
|
2761
|
+
name: 'operation',
|
|
2762
|
+
type: 'options',
|
|
2763
|
+
noDataExpression: true,
|
|
2764
|
+
displayOptions: {
|
|
2765
|
+
show: {
|
|
2766
|
+
resource: ['tasacion'],
|
|
2767
|
+
},
|
|
2768
|
+
},
|
|
2769
|
+
options: [
|
|
2770
|
+
{
|
|
2771
|
+
name: 'Generate',
|
|
2772
|
+
value: 'generate',
|
|
2773
|
+
description: 'Generar tasación estimada de propiedad',
|
|
2774
|
+
action: 'Generar tasación',
|
|
2775
|
+
},
|
|
2776
|
+
{
|
|
2777
|
+
name: 'Get',
|
|
2778
|
+
value: 'get',
|
|
2779
|
+
description: 'Obtener tasación por ID',
|
|
2780
|
+
action: 'Obtener tasación',
|
|
2781
|
+
},
|
|
2782
|
+
{
|
|
2783
|
+
name: 'List by Owner',
|
|
2784
|
+
value: 'listByOwner',
|
|
2785
|
+
description: 'Listar tasaciones de un propietario',
|
|
2786
|
+
action: 'Listar tasaciones de propietario',
|
|
2787
|
+
},
|
|
2788
|
+
],
|
|
2789
|
+
default: 'generate',
|
|
2790
|
+
},
|
|
2791
|
+
// Tasación ID
|
|
2792
|
+
{
|
|
2793
|
+
displayName: 'Tasación ID',
|
|
2794
|
+
name: 'tasacionId',
|
|
2795
|
+
type: 'number',
|
|
2796
|
+
required: true,
|
|
2797
|
+
displayOptions: {
|
|
2798
|
+
show: {
|
|
2799
|
+
resource: ['tasacion'],
|
|
2800
|
+
operation: ['get'],
|
|
2801
|
+
},
|
|
2802
|
+
},
|
|
2803
|
+
default: 0,
|
|
2804
|
+
description: 'ID de la tasación',
|
|
2805
|
+
},
|
|
2806
|
+
// Tasación - Owner ID (for listByOwner)
|
|
2807
|
+
{
|
|
2808
|
+
displayName: 'Owner ID',
|
|
2809
|
+
name: 'tasacionOwnerId',
|
|
2810
|
+
type: 'number',
|
|
2811
|
+
required: true,
|
|
2812
|
+
displayOptions: {
|
|
2813
|
+
show: {
|
|
2814
|
+
resource: ['tasacion'],
|
|
2815
|
+
operation: ['listByOwner'],
|
|
2816
|
+
},
|
|
2817
|
+
},
|
|
2818
|
+
default: 0,
|
|
2819
|
+
description: 'ID del propietario para listar sus tasaciones',
|
|
2820
|
+
},
|
|
2821
|
+
// Tasación Generate - Owner ID (opcional)
|
|
2822
|
+
{
|
|
2823
|
+
displayName: 'Owner ID (Guardar)',
|
|
2824
|
+
name: 'tasacionOwnerIdSave',
|
|
2825
|
+
type: 'number',
|
|
2826
|
+
displayOptions: {
|
|
2827
|
+
show: {
|
|
2828
|
+
resource: ['tasacion'],
|
|
2829
|
+
operation: ['generate'],
|
|
2830
|
+
},
|
|
2831
|
+
},
|
|
2832
|
+
default: 0,
|
|
2833
|
+
description: 'ID del propietario para guardar la tasación (0 = no guardar)',
|
|
2834
|
+
},
|
|
2835
|
+
// Tasación Generate - Tipo Propiedad
|
|
2836
|
+
{
|
|
2837
|
+
displayName: 'Tipo de Propiedad',
|
|
2838
|
+
name: 'tasacionTipo',
|
|
2839
|
+
type: 'options',
|
|
2840
|
+
required: true,
|
|
2841
|
+
displayOptions: {
|
|
2842
|
+
show: {
|
|
2843
|
+
resource: ['tasacion'],
|
|
2844
|
+
operation: ['generate'],
|
|
2845
|
+
},
|
|
2846
|
+
},
|
|
2847
|
+
options: [
|
|
2848
|
+
{ name: 'Departamento', value: 'departamento' },
|
|
2849
|
+
{ name: 'Casa', value: 'casa' },
|
|
2850
|
+
{ name: 'PH', value: 'ph' },
|
|
2851
|
+
{ name: 'Local Comercial', value: 'local' },
|
|
2852
|
+
{ name: 'Oficina', value: 'oficina' },
|
|
2853
|
+
{ name: 'Terreno', value: 'terreno' },
|
|
2854
|
+
{ name: 'Cochera', value: 'cochera' },
|
|
2855
|
+
],
|
|
2856
|
+
default: 'departamento',
|
|
2857
|
+
description: 'Tipo de propiedad a tasar',
|
|
2858
|
+
},
|
|
2859
|
+
// Tasación Generate - Barrio
|
|
2860
|
+
{
|
|
2861
|
+
displayName: 'Barrio/Zona',
|
|
2862
|
+
name: 'tasacionBarrio',
|
|
2863
|
+
type: 'string',
|
|
2864
|
+
required: true,
|
|
2865
|
+
displayOptions: {
|
|
2866
|
+
show: {
|
|
2867
|
+
resource: ['tasacion'],
|
|
2868
|
+
operation: ['generate'],
|
|
2869
|
+
},
|
|
2870
|
+
},
|
|
2871
|
+
default: '',
|
|
2872
|
+
placeholder: 'Palermo, Recoleta, Belgrano...',
|
|
2873
|
+
description: 'Barrio o zona de la propiedad',
|
|
2874
|
+
},
|
|
2875
|
+
// Tasación Generate - Metros Cuadrados
|
|
2876
|
+
{
|
|
2877
|
+
displayName: 'Metros Cuadrados',
|
|
2878
|
+
name: 'tasacionMetros',
|
|
2879
|
+
type: 'number',
|
|
2880
|
+
required: true,
|
|
2881
|
+
displayOptions: {
|
|
2882
|
+
show: {
|
|
2883
|
+
resource: ['tasacion'],
|
|
2884
|
+
operation: ['generate'],
|
|
2885
|
+
},
|
|
2886
|
+
},
|
|
2887
|
+
default: 50,
|
|
2888
|
+
description: 'Superficie en metros cuadrados',
|
|
2889
|
+
},
|
|
2890
|
+
// Tasación Generate - Ambientes
|
|
2891
|
+
{
|
|
2892
|
+
displayName: 'Ambientes',
|
|
2893
|
+
name: 'tasacionAmbientes',
|
|
2894
|
+
type: 'number',
|
|
2895
|
+
displayOptions: {
|
|
2896
|
+
show: {
|
|
2897
|
+
resource: ['tasacion'],
|
|
2898
|
+
operation: ['generate'],
|
|
2899
|
+
},
|
|
2900
|
+
},
|
|
2901
|
+
default: 2,
|
|
2902
|
+
description: 'Cantidad de ambientes',
|
|
2903
|
+
},
|
|
2904
|
+
// Tasación Generate - Dormitorios
|
|
2905
|
+
{
|
|
2906
|
+
displayName: 'Dormitorios',
|
|
2907
|
+
name: 'tasacionDormitorios',
|
|
2908
|
+
type: 'number',
|
|
2909
|
+
displayOptions: {
|
|
2910
|
+
show: {
|
|
2911
|
+
resource: ['tasacion'],
|
|
2912
|
+
operation: ['generate'],
|
|
2913
|
+
},
|
|
2914
|
+
},
|
|
2915
|
+
default: 1,
|
|
2916
|
+
description: 'Cantidad de dormitorios',
|
|
2917
|
+
},
|
|
2918
|
+
// Tasación Generate - Baños
|
|
2919
|
+
{
|
|
2920
|
+
displayName: 'Baños',
|
|
2921
|
+
name: 'tasacionBanos',
|
|
2922
|
+
type: 'number',
|
|
2923
|
+
displayOptions: {
|
|
2924
|
+
show: {
|
|
2925
|
+
resource: ['tasacion'],
|
|
2926
|
+
operation: ['generate'],
|
|
2927
|
+
},
|
|
2928
|
+
},
|
|
2929
|
+
default: 1,
|
|
2930
|
+
description: 'Cantidad de baños',
|
|
2931
|
+
},
|
|
2932
|
+
// Tasación Generate - Antigüedad
|
|
2933
|
+
{
|
|
2934
|
+
displayName: 'Antigüedad (años)',
|
|
2935
|
+
name: 'tasacionAntiguedad',
|
|
2936
|
+
type: 'number',
|
|
2937
|
+
displayOptions: {
|
|
2938
|
+
show: {
|
|
2939
|
+
resource: ['tasacion'],
|
|
2940
|
+
operation: ['generate'],
|
|
2941
|
+
},
|
|
2942
|
+
},
|
|
2943
|
+
default: 10,
|
|
2944
|
+
description: 'Antigüedad en años de la propiedad',
|
|
2945
|
+
},
|
|
2946
|
+
// Tasación Generate - Estado
|
|
2947
|
+
{
|
|
2948
|
+
displayName: 'Estado',
|
|
2949
|
+
name: 'tasacionEstado',
|
|
2950
|
+
type: 'options',
|
|
2951
|
+
displayOptions: {
|
|
2952
|
+
show: {
|
|
2953
|
+
resource: ['tasacion'],
|
|
2954
|
+
operation: ['generate'],
|
|
2955
|
+
},
|
|
2956
|
+
},
|
|
2957
|
+
options: [
|
|
2958
|
+
{ name: 'Excelente', value: 'excelente' },
|
|
2959
|
+
{ name: 'Muy Bueno', value: 'muy_bueno' },
|
|
2960
|
+
{ name: 'Bueno', value: 'bueno' },
|
|
2961
|
+
{ name: 'Regular', value: 'regular' },
|
|
2962
|
+
{ name: 'A Refaccionar', value: 'a_refaccionar' },
|
|
2963
|
+
],
|
|
2964
|
+
default: 'bueno',
|
|
2965
|
+
description: 'Estado de conservación',
|
|
2966
|
+
},
|
|
2967
|
+
// Tasación Generate - Amenidades
|
|
2968
|
+
{
|
|
2969
|
+
displayName: 'Amenidades',
|
|
2970
|
+
name: 'tasacionAmenidades',
|
|
2971
|
+
type: 'string',
|
|
2972
|
+
displayOptions: {
|
|
2973
|
+
show: {
|
|
2974
|
+
resource: ['tasacion'],
|
|
2975
|
+
operation: ['generate'],
|
|
2976
|
+
},
|
|
2977
|
+
},
|
|
2978
|
+
default: '',
|
|
2979
|
+
placeholder: 'pileta, gym, sum, parrilla...',
|
|
2980
|
+
description: 'Amenidades separadas por coma (aumentan el valor)',
|
|
2981
|
+
},
|
|
2982
|
+
// ============================================
|
|
2983
|
+
// DOCUSEAL (FIRMA DIGITAL) OPERATIONS
|
|
2984
|
+
// ============================================
|
|
2985
|
+
{
|
|
2986
|
+
displayName: 'Operación',
|
|
2987
|
+
name: 'operation',
|
|
2988
|
+
type: 'options',
|
|
2989
|
+
noDataExpression: true,
|
|
2990
|
+
displayOptions: {
|
|
2991
|
+
show: {
|
|
2992
|
+
resource: ['docuseal'],
|
|
2993
|
+
},
|
|
2994
|
+
},
|
|
2995
|
+
options: [
|
|
2996
|
+
{
|
|
2997
|
+
name: 'Create Mandato',
|
|
2998
|
+
value: 'createMandato',
|
|
2999
|
+
description: 'Crear mandato para firma digital',
|
|
3000
|
+
action: 'Crear mandato',
|
|
3001
|
+
},
|
|
3002
|
+
{
|
|
3003
|
+
name: 'Get Status',
|
|
3004
|
+
value: 'getStatus',
|
|
3005
|
+
description: 'Verificar estado de firma',
|
|
3006
|
+
action: 'Verificar estado de firma',
|
|
3007
|
+
},
|
|
3008
|
+
{
|
|
3009
|
+
name: 'List Templates',
|
|
3010
|
+
value: 'listTemplates',
|
|
3011
|
+
description: 'Listar templates disponibles',
|
|
3012
|
+
action: 'Listar templates',
|
|
3013
|
+
},
|
|
3014
|
+
{
|
|
3015
|
+
name: 'Health Check',
|
|
3016
|
+
value: 'health',
|
|
3017
|
+
description: 'Verificar conexión con DocuSeal',
|
|
3018
|
+
action: 'Health check DocuSeal',
|
|
3019
|
+
},
|
|
3020
|
+
],
|
|
3021
|
+
default: 'createMandato',
|
|
3022
|
+
},
|
|
3023
|
+
// DocuSeal - Submission ID
|
|
3024
|
+
{
|
|
3025
|
+
displayName: 'Submission ID',
|
|
3026
|
+
name: 'docusealSubmissionId',
|
|
3027
|
+
type: 'number',
|
|
3028
|
+
required: true,
|
|
3029
|
+
displayOptions: {
|
|
3030
|
+
show: {
|
|
3031
|
+
resource: ['docuseal'],
|
|
3032
|
+
operation: ['getStatus'],
|
|
3033
|
+
},
|
|
3034
|
+
},
|
|
3035
|
+
default: 0,
|
|
3036
|
+
description: 'ID de la submission en DocuSeal',
|
|
3037
|
+
},
|
|
3038
|
+
// DocuSeal - Tipo Mandato
|
|
3039
|
+
{
|
|
3040
|
+
displayName: 'Tipo de Mandato',
|
|
3041
|
+
name: 'docusealTipo',
|
|
3042
|
+
type: 'options',
|
|
3043
|
+
required: true,
|
|
3044
|
+
displayOptions: {
|
|
3045
|
+
show: {
|
|
3046
|
+
resource: ['docuseal'],
|
|
3047
|
+
operation: ['createMandato'],
|
|
3048
|
+
},
|
|
3049
|
+
},
|
|
3050
|
+
options: [
|
|
3051
|
+
{ name: 'Venta', value: 'venta' },
|
|
3052
|
+
{ name: 'Alquiler', value: 'alquiler' },
|
|
3053
|
+
],
|
|
3054
|
+
default: 'venta',
|
|
3055
|
+
description: 'Tipo de mandato a crear',
|
|
3056
|
+
},
|
|
3057
|
+
// DocuSeal - Owner ID
|
|
3058
|
+
{
|
|
3059
|
+
displayName: 'Owner ID',
|
|
3060
|
+
name: 'docusealOwnerId',
|
|
3061
|
+
type: 'number',
|
|
3062
|
+
required: true,
|
|
3063
|
+
displayOptions: {
|
|
3064
|
+
show: {
|
|
3065
|
+
resource: ['docuseal'],
|
|
3066
|
+
operation: ['createMandato'],
|
|
3067
|
+
},
|
|
3068
|
+
},
|
|
3069
|
+
default: 0,
|
|
3070
|
+
description: 'ID del propietario que firmará',
|
|
3071
|
+
},
|
|
3072
|
+
// DocuSeal - Property ID
|
|
3073
|
+
{
|
|
3074
|
+
displayName: 'Property ID',
|
|
3075
|
+
name: 'docusealPropertyId',
|
|
3076
|
+
type: 'number',
|
|
3077
|
+
displayOptions: {
|
|
3078
|
+
show: {
|
|
3079
|
+
resource: ['docuseal'],
|
|
3080
|
+
operation: ['createMandato'],
|
|
3081
|
+
},
|
|
3082
|
+
},
|
|
3083
|
+
default: 0,
|
|
3084
|
+
description: 'ID de la propiedad (opcional)',
|
|
3085
|
+
},
|
|
3086
|
+
// DocuSeal - Duración
|
|
3087
|
+
{
|
|
3088
|
+
displayName: 'Duración (meses)',
|
|
3089
|
+
name: 'docusealDuracion',
|
|
3090
|
+
type: 'number',
|
|
3091
|
+
displayOptions: {
|
|
3092
|
+
show: {
|
|
3093
|
+
resource: ['docuseal'],
|
|
3094
|
+
operation: ['createMandato'],
|
|
3095
|
+
},
|
|
3096
|
+
},
|
|
3097
|
+
default: 6,
|
|
3098
|
+
description: 'Duración del mandato en meses',
|
|
3099
|
+
},
|
|
3100
|
+
// DocuSeal - Comisión
|
|
3101
|
+
{
|
|
3102
|
+
displayName: 'Comisión (%)',
|
|
3103
|
+
name: 'docusealComision',
|
|
3104
|
+
type: 'number',
|
|
3105
|
+
displayOptions: {
|
|
3106
|
+
show: {
|
|
3107
|
+
resource: ['docuseal'],
|
|
3108
|
+
operation: ['createMandato'],
|
|
3109
|
+
},
|
|
3110
|
+
},
|
|
3111
|
+
default: 3,
|
|
3112
|
+
description: 'Porcentaje de comisión',
|
|
3113
|
+
},
|
|
3114
|
+
// DocuSeal - Precio
|
|
3115
|
+
{
|
|
3116
|
+
displayName: 'Precio Sugerido (USD)',
|
|
3117
|
+
name: 'docusealPrecio',
|
|
3118
|
+
type: 'number',
|
|
3119
|
+
displayOptions: {
|
|
3120
|
+
show: {
|
|
3121
|
+
resource: ['docuseal'],
|
|
3122
|
+
operation: ['createMandato'],
|
|
3123
|
+
},
|
|
3124
|
+
},
|
|
3125
|
+
default: 0,
|
|
3126
|
+
description: 'Precio sugerido de publicación (0 = a convenir)',
|
|
3127
|
+
},
|
|
3128
|
+
// ============================================
|
|
3129
|
+
// MARIANA (TRANSFERENCIA) OPERATIONS
|
|
3130
|
+
// ============================================
|
|
3131
|
+
{
|
|
3132
|
+
displayName: 'Operación',
|
|
3133
|
+
name: 'operation',
|
|
3134
|
+
type: 'options',
|
|
3135
|
+
noDataExpression: true,
|
|
3136
|
+
displayOptions: {
|
|
3137
|
+
show: {
|
|
3138
|
+
resource: ['mariana'],
|
|
3139
|
+
},
|
|
3140
|
+
},
|
|
3141
|
+
options: [
|
|
3142
|
+
{
|
|
3143
|
+
name: 'Transfer Lead',
|
|
3144
|
+
value: 'transferLead',
|
|
3145
|
+
description: 'Transferir lead/conversación al departamento de Mariana',
|
|
3146
|
+
action: 'Transferir a Mariana',
|
|
3147
|
+
},
|
|
3148
|
+
{
|
|
3149
|
+
name: 'Get Queue Status',
|
|
3150
|
+
value: 'getQueueStatus',
|
|
3151
|
+
description: 'Ver estado de la cola de Mariana',
|
|
3152
|
+
action: 'Ver cola de Mariana',
|
|
3153
|
+
},
|
|
3154
|
+
],
|
|
3155
|
+
default: 'transferLead',
|
|
3156
|
+
},
|
|
3157
|
+
// Mariana - Lead ID
|
|
3158
|
+
{
|
|
3159
|
+
displayName: 'Lead ID',
|
|
3160
|
+
name: 'marianaLeadId',
|
|
3161
|
+
type: 'number',
|
|
3162
|
+
required: true,
|
|
3163
|
+
displayOptions: {
|
|
3164
|
+
show: {
|
|
3165
|
+
resource: ['mariana'],
|
|
3166
|
+
operation: ['transferLead'],
|
|
3167
|
+
},
|
|
3168
|
+
},
|
|
3169
|
+
default: 0,
|
|
3170
|
+
description: 'ID del lead a transferir',
|
|
3171
|
+
},
|
|
3172
|
+
// Mariana - Conversation ID
|
|
3173
|
+
{
|
|
3174
|
+
displayName: 'Conversation ID',
|
|
3175
|
+
name: 'marianaConversationId',
|
|
3176
|
+
type: 'number',
|
|
3177
|
+
displayOptions: {
|
|
3178
|
+
show: {
|
|
3179
|
+
resource: ['mariana'],
|
|
3180
|
+
operation: ['transferLead'],
|
|
3181
|
+
},
|
|
3182
|
+
},
|
|
3183
|
+
default: 0,
|
|
3184
|
+
description: 'ID de la conversación en Chatwoot (opcional)',
|
|
3185
|
+
},
|
|
3186
|
+
// Mariana - Motivo
|
|
3187
|
+
{
|
|
3188
|
+
displayName: 'Motivo de Transferencia',
|
|
3189
|
+
name: 'marianaMotivo',
|
|
3190
|
+
type: 'options',
|
|
3191
|
+
required: true,
|
|
3192
|
+
displayOptions: {
|
|
3193
|
+
show: {
|
|
3194
|
+
resource: ['mariana'],
|
|
3195
|
+
operation: ['transferLead'],
|
|
3196
|
+
},
|
|
3197
|
+
},
|
|
3198
|
+
options: [
|
|
3199
|
+
{ name: 'Captación de Propiedad', value: 'captacion' },
|
|
3200
|
+
{ name: 'Tasación Requerida', value: 'tasacion' },
|
|
3201
|
+
{ name: 'Documentación Pendiente', value: 'documentacion' },
|
|
3202
|
+
{ name: 'Firma de Mandato', value: 'mandato' },
|
|
3203
|
+
{ name: 'Consulta Específica', value: 'consulta' },
|
|
3204
|
+
{ name: 'Otro', value: 'otro' },
|
|
3205
|
+
],
|
|
3206
|
+
default: 'captacion',
|
|
3207
|
+
description: 'Motivo por el cual se transfiere',
|
|
3208
|
+
},
|
|
3209
|
+
// Mariana - Notas
|
|
3210
|
+
{
|
|
3211
|
+
displayName: 'Notas para Mariana',
|
|
3212
|
+
name: 'marianaNotas',
|
|
3213
|
+
type: 'string',
|
|
3214
|
+
typeOptions: {
|
|
3215
|
+
rows: 3,
|
|
3216
|
+
},
|
|
3217
|
+
displayOptions: {
|
|
3218
|
+
show: {
|
|
3219
|
+
resource: ['mariana'],
|
|
3220
|
+
operation: ['transferLead'],
|
|
3221
|
+
},
|
|
3222
|
+
},
|
|
3223
|
+
default: '',
|
|
3224
|
+
placeholder: 'Contexto importante para Mariana...',
|
|
3225
|
+
description: 'Notas adicionales sobre el lead/propiedad',
|
|
3226
|
+
},
|
|
3227
|
+
// Mariana - Urgencia
|
|
3228
|
+
{
|
|
3229
|
+
displayName: 'Urgencia',
|
|
3230
|
+
name: 'marianaUrgencia',
|
|
3231
|
+
type: 'options',
|
|
3232
|
+
displayOptions: {
|
|
3233
|
+
show: {
|
|
3234
|
+
resource: ['mariana'],
|
|
3235
|
+
operation: ['transferLead'],
|
|
3236
|
+
},
|
|
3237
|
+
},
|
|
3238
|
+
options: [
|
|
3239
|
+
{ name: 'Normal', value: 'normal' },
|
|
3240
|
+
{ name: 'Alta', value: 'alta' },
|
|
3241
|
+
{ name: 'Urgente', value: 'urgente' },
|
|
3242
|
+
],
|
|
3243
|
+
default: 'normal',
|
|
3244
|
+
description: 'Nivel de urgencia de la transferencia',
|
|
3245
|
+
},
|
|
3246
|
+
// Mariana - Datos de Propiedad
|
|
3247
|
+
{
|
|
3248
|
+
displayName: 'Dirección Propiedad',
|
|
3249
|
+
name: 'marianaDireccion',
|
|
3250
|
+
type: 'string',
|
|
3251
|
+
displayOptions: {
|
|
3252
|
+
show: {
|
|
3253
|
+
resource: ['mariana'],
|
|
3254
|
+
operation: ['transferLead'],
|
|
3255
|
+
},
|
|
3256
|
+
},
|
|
3257
|
+
default: '',
|
|
3258
|
+
placeholder: 'Av. Santa Fe 1234, Palermo',
|
|
3259
|
+
description: 'Dirección de la propiedad a captar (si aplica)',
|
|
3260
|
+
},
|
|
3261
|
+
// Mariana - Tipo Operación
|
|
3262
|
+
{
|
|
3263
|
+
displayName: 'Tipo de Operación',
|
|
3264
|
+
name: 'marianaOperacion',
|
|
3265
|
+
type: 'options',
|
|
3266
|
+
displayOptions: {
|
|
3267
|
+
show: {
|
|
3268
|
+
resource: ['mariana'],
|
|
3269
|
+
operation: ['transferLead'],
|
|
3270
|
+
},
|
|
3271
|
+
},
|
|
3272
|
+
options: [
|
|
3273
|
+
{ name: 'Venta', value: 'venta' },
|
|
3274
|
+
{ name: 'Alquiler', value: 'alquiler' },
|
|
3275
|
+
{ name: 'Ambas', value: 'ambas' },
|
|
3276
|
+
{ name: 'No Definido', value: 'undefined' },
|
|
3277
|
+
],
|
|
3278
|
+
default: 'undefined',
|
|
3279
|
+
description: 'Tipo de operación que busca el propietario',
|
|
3280
|
+
},
|
|
3281
|
+
],
|
|
3282
|
+
};
|
|
3283
|
+
}
|
|
3284
|
+
async execute() {
|
|
3285
|
+
const items = this.getInputData();
|
|
3286
|
+
const returnData = [];
|
|
3287
|
+
const credentials = await this.getCredentials('aivenceRealtyApi');
|
|
3288
|
+
const baseUrl = credentials.baseUrl;
|
|
3289
|
+
for (let i = 0; i < items.length; i++) {
|
|
3290
|
+
try {
|
|
3291
|
+
const resource = this.getNodeParameter('resource', i);
|
|
3292
|
+
const operation = this.getNodeParameter('operation', i);
|
|
3293
|
+
let responseData;
|
|
3294
|
+
// ============================================
|
|
3295
|
+
// LEAD RESOURCE
|
|
3296
|
+
// ============================================
|
|
3297
|
+
if (resource === 'lead') {
|
|
3298
|
+
if (operation === 'list') {
|
|
3299
|
+
responseData = await this.helpers.httpRequest({
|
|
3300
|
+
method: 'GET',
|
|
3301
|
+
url: `${baseUrl}/api/v1/leads`,
|
|
3302
|
+
json: true,
|
|
3303
|
+
});
|
|
3304
|
+
}
|
|
3305
|
+
else if (operation === 'create') {
|
|
3306
|
+
const useJsonInput = this.getNodeParameter('useJsonInput', i, false);
|
|
3307
|
+
let body = {};
|
|
3308
|
+
if (useJsonInput) {
|
|
3309
|
+
// Usar JSON del nodo anterior
|
|
3310
|
+
body = items[i].json;
|
|
3311
|
+
}
|
|
3312
|
+
else {
|
|
3313
|
+
// Construir body con campos estructurados
|
|
3314
|
+
body = {
|
|
3315
|
+
name: this.getNodeParameter('name', i),
|
|
3316
|
+
email: this.getNodeParameter('email', i),
|
|
3317
|
+
phone: this.getNodeParameter('phone', i),
|
|
3318
|
+
message: this.getNodeParameter('message', i, ''),
|
|
3319
|
+
interest: this.getNodeParameter('interest', i, 'compra'),
|
|
3320
|
+
budget_min: this.getNodeParameter('budget_min', i, 0),
|
|
3321
|
+
budget_max: this.getNodeParameter('budget_max', i, 0),
|
|
3322
|
+
property_type: this.getNodeParameter('property_type', i, 'apartamento'),
|
|
3323
|
+
conversation_id: this.getNodeParameter('conversation_id', i, ''),
|
|
3324
|
+
status: this.getNodeParameter('status', i, 'new'),
|
|
3325
|
+
score: this.getNodeParameter('score', i, 0),
|
|
3326
|
+
category: this.getNodeParameter('category', i, 'warm'),
|
|
3327
|
+
notes: this.getNodeParameter('notes', i, ''),
|
|
3328
|
+
crm_id: this.getNodeParameter('crm_id', i, ''),
|
|
3329
|
+
};
|
|
3330
|
+
// Procesar preferred_areas (convertir string separado por comas a array)
|
|
3331
|
+
const areasString = this.getNodeParameter('preferred_areas', i, '');
|
|
3332
|
+
if (areasString) {
|
|
3333
|
+
body.preferred_areas = areasString.split(',').map((area) => area.trim());
|
|
3334
|
+
}
|
|
3335
|
+
// Procesar tags (convertir string separado por comas a array)
|
|
3336
|
+
const tagsString = this.getNodeParameter('tags', i, '');
|
|
3337
|
+
if (tagsString) {
|
|
3338
|
+
body.tags = tagsString.split(',').map((tag) => tag.trim());
|
|
3339
|
+
}
|
|
3340
|
+
// Remover campos vacíos opcionales
|
|
3341
|
+
if (!body.message)
|
|
3342
|
+
delete body.message;
|
|
3343
|
+
if (body.budget_min === 0)
|
|
3344
|
+
delete body.budget_min;
|
|
3345
|
+
if (body.budget_max === 0)
|
|
3346
|
+
delete body.budget_max;
|
|
3347
|
+
if (!body.preferred_areas || body.preferred_areas.length === 0)
|
|
3348
|
+
delete body.preferred_areas;
|
|
3349
|
+
if (!body.conversation_id)
|
|
3350
|
+
delete body.conversation_id;
|
|
3351
|
+
if (!body.notes)
|
|
3352
|
+
delete body.notes;
|
|
3353
|
+
if (!body.crm_id)
|
|
3354
|
+
delete body.crm_id;
|
|
3355
|
+
if (!body.tags || body.tags.length === 0)
|
|
3356
|
+
delete body.tags;
|
|
3357
|
+
if (body.score === 0)
|
|
3358
|
+
delete body.score;
|
|
3359
|
+
}
|
|
3360
|
+
responseData = await this.helpers.httpRequest({
|
|
3361
|
+
method: 'POST',
|
|
3362
|
+
url: `${baseUrl}/api/v1/leads`,
|
|
3363
|
+
body,
|
|
3364
|
+
json: true,
|
|
3365
|
+
});
|
|
3366
|
+
}
|
|
3367
|
+
else if (operation === 'update') {
|
|
3368
|
+
const leadId = this.getNodeParameter('leadId', i);
|
|
3369
|
+
const useJsonInput = this.getNodeParameter('useJsonInput', i, false);
|
|
3370
|
+
let body = {};
|
|
3371
|
+
if (useJsonInput) {
|
|
3372
|
+
// Usar JSON del nodo anterior
|
|
3373
|
+
body = items[i].json;
|
|
3374
|
+
}
|
|
3375
|
+
else {
|
|
3376
|
+
// Construir body con campos estructurados (solo enviar campos proporcionados)
|
|
3377
|
+
const name = this.getNodeParameter('name', i, '');
|
|
3378
|
+
const email = this.getNodeParameter('email', i, '');
|
|
3379
|
+
const phone = this.getNodeParameter('phone', i, '');
|
|
3380
|
+
const message = this.getNodeParameter('message', i, '');
|
|
3381
|
+
const interest = this.getNodeParameter('interest', i, '');
|
|
3382
|
+
const budget_min = this.getNodeParameter('budget_min', i, 0);
|
|
3383
|
+
const budget_max = this.getNodeParameter('budget_max', i, 0);
|
|
3384
|
+
const property_type = this.getNodeParameter('property_type', i, '');
|
|
3385
|
+
const areasString = this.getNodeParameter('preferred_areas', i, '');
|
|
3386
|
+
const conversation_id = this.getNodeParameter('conversation_id', i, '');
|
|
3387
|
+
const status = this.getNodeParameter('status', i, '');
|
|
3388
|
+
const score = this.getNodeParameter('score', i, 0);
|
|
3389
|
+
const category = this.getNodeParameter('category', i, '');
|
|
3390
|
+
const notes = this.getNodeParameter('notes', i, '');
|
|
3391
|
+
const crm_id = this.getNodeParameter('crm_id', i, '');
|
|
3392
|
+
const tagsString = this.getNodeParameter('tags', i, '');
|
|
3393
|
+
if (name)
|
|
3394
|
+
body.name = name;
|
|
3395
|
+
if (email)
|
|
3396
|
+
body.email = email;
|
|
3397
|
+
if (phone)
|
|
3398
|
+
body.phone = phone;
|
|
3399
|
+
if (message)
|
|
3400
|
+
body.message = message;
|
|
3401
|
+
if (interest)
|
|
3402
|
+
body.interest = interest;
|
|
3403
|
+
if (budget_min > 0)
|
|
3404
|
+
body.budget_min = budget_min;
|
|
3405
|
+
if (budget_max > 0)
|
|
3406
|
+
body.budget_max = budget_max;
|
|
3407
|
+
if (property_type)
|
|
3408
|
+
body.property_type = property_type;
|
|
3409
|
+
if (conversation_id)
|
|
3410
|
+
body.conversation_id = conversation_id;
|
|
3411
|
+
if (status)
|
|
3412
|
+
body.status = status;
|
|
3413
|
+
if (score > 0)
|
|
3414
|
+
body.score = score;
|
|
3415
|
+
if (category)
|
|
3416
|
+
body.category = category;
|
|
3417
|
+
if (notes)
|
|
3418
|
+
body.notes = notes;
|
|
3419
|
+
if (crm_id)
|
|
3420
|
+
body.crm_id = crm_id;
|
|
3421
|
+
if (areasString) {
|
|
3422
|
+
body.preferred_areas = areasString.split(',').map((area) => area.trim());
|
|
3423
|
+
}
|
|
3424
|
+
if (tagsString) {
|
|
3425
|
+
body.tags = tagsString.split(',').map((tag) => tag.trim());
|
|
3426
|
+
}
|
|
3427
|
+
}
|
|
3428
|
+
responseData = await this.helpers.httpRequest({
|
|
3429
|
+
method: 'PATCH',
|
|
3430
|
+
url: `${baseUrl}/api/v1/leads/${leadId}`,
|
|
3431
|
+
body,
|
|
3432
|
+
json: true,
|
|
3433
|
+
});
|
|
3434
|
+
}
|
|
3435
|
+
else if (operation === 'get') {
|
|
3436
|
+
const leadId = this.getNodeParameter('leadId', i);
|
|
3437
|
+
responseData = await this.helpers.httpRequest({
|
|
3438
|
+
method: 'GET',
|
|
3439
|
+
url: `${baseUrl}/api/v1/leads/${leadId}`,
|
|
3440
|
+
json: true,
|
|
3441
|
+
});
|
|
3442
|
+
}
|
|
3443
|
+
else if (operation === 'addActivity') {
|
|
3444
|
+
const leadId = this.getNodeParameter('leadId', i);
|
|
3445
|
+
const activityType = this.getNodeParameter('activity_type', i);
|
|
3446
|
+
const description = this.getNodeParameter('activity_description', i);
|
|
3447
|
+
const body = {
|
|
3448
|
+
activity_type: activityType,
|
|
3449
|
+
description: description,
|
|
3450
|
+
};
|
|
3451
|
+
responseData = await this.helpers.httpRequest({
|
|
3452
|
+
method: 'POST',
|
|
3453
|
+
url: `${baseUrl}/api/v1/mariana/leads/${leadId}/activity`,
|
|
3454
|
+
body,
|
|
3455
|
+
json: true,
|
|
3456
|
+
});
|
|
3457
|
+
}
|
|
3458
|
+
}
|
|
3459
|
+
// ============================================
|
|
3460
|
+
// PROPERTY RESOURCE
|
|
3461
|
+
// ============================================
|
|
3462
|
+
else if (resource === 'property') {
|
|
3463
|
+
if (operation === 'search') {
|
|
3464
|
+
// ============================================
|
|
3465
|
+
// PROPERTY SEARCH - Smart Zone Logic compatible
|
|
3466
|
+
// ============================================
|
|
3467
|
+
const qs = {};
|
|
3468
|
+
// Property ID (búsqueda directa por ID)
|
|
3469
|
+
const propertyId = this.getNodeParameter('searchPropertyId', i, 0);
|
|
3470
|
+
if (propertyId > 0) {
|
|
3471
|
+
qs.id = propertyId;
|
|
3472
|
+
}
|
|
3473
|
+
// Operación -> Estado (Laravel espera "estado": "for_rent" o "for_sale")
|
|
3474
|
+
const operacion = this.getNodeParameter('searchOperacion', i, '');
|
|
3475
|
+
if (operacion && operacion !== 'NULL' && operacion !== '') {
|
|
3476
|
+
qs.estado = operacion;
|
|
3477
|
+
}
|
|
3478
|
+
// Tipo de Propiedad
|
|
3479
|
+
const tipoPropiedad = this.getNodeParameter('searchTipoPropiedad', i, '');
|
|
3480
|
+
if (tipoPropiedad && tipoPropiedad !== '' && tipoPropiedad !== 'NULL') {
|
|
3481
|
+
qs.tipo_propiedad = tipoPropiedad;
|
|
3482
|
+
}
|
|
3483
|
+
// Zonas (barrios) - Smart Zone Logic aplicado desde workflow
|
|
3484
|
+
const zonas = this.getNodeParameter('searchZonas', i, '');
|
|
3485
|
+
if (zonas && zonas !== '' && zonas !== 'NULL' && zonas !== 'null') {
|
|
3486
|
+
qs.barrio = zonas; // Formato: "Núñez, Saavedra, Belgrano"
|
|
3487
|
+
}
|
|
3488
|
+
// Dormitorios
|
|
3489
|
+
const dormitoriosMin = this.getNodeParameter('searchDormitoriosMin', i, 0);
|
|
3490
|
+
if (dormitoriosMin > 0) {
|
|
3491
|
+
qs.dormitorios_minimo = dormitoriosMin;
|
|
3492
|
+
}
|
|
3493
|
+
const dormitoriosMax = this.getNodeParameter('searchDormitoriosMax', i, 0);
|
|
3494
|
+
if (dormitoriosMax > 0) {
|
|
3495
|
+
qs.dormitorios_maximo = dormitoriosMax;
|
|
3496
|
+
}
|
|
3497
|
+
// Baños
|
|
3498
|
+
const banos = this.getNodeParameter('searchBanos', i, 0);
|
|
2631
3499
|
if (banos > 0) {
|
|
2632
3500
|
qs.banos_minimo = banos;
|
|
2633
3501
|
}
|
|
@@ -3180,6 +4048,25 @@ class AivenceRealty {
|
|
|
3180
4048
|
json: true,
|
|
3181
4049
|
});
|
|
3182
4050
|
}
|
|
4051
|
+
else if (operation === 'reschedule') {
|
|
4052
|
+
const appointmentId = this.getNodeParameter('appointmentId', i);
|
|
4053
|
+
const fecha = this.getNodeParameter('reschedule_fecha', i);
|
|
4054
|
+
const hora = this.getNodeParameter('reschedule_hora', i);
|
|
4055
|
+
const notas = this.getNodeParameter('reschedule_notas', i, '');
|
|
4056
|
+
const body = {
|
|
4057
|
+
fecha,
|
|
4058
|
+
hora,
|
|
4059
|
+
};
|
|
4060
|
+
if (notas) {
|
|
4061
|
+
body.notas = notas;
|
|
4062
|
+
}
|
|
4063
|
+
responseData = await this.helpers.httpRequest({
|
|
4064
|
+
method: 'PUT',
|
|
4065
|
+
url: `${baseUrl}/api/v1/reservas/${appointmentId}/reprogramar`,
|
|
4066
|
+
body,
|
|
4067
|
+
json: true,
|
|
4068
|
+
});
|
|
4069
|
+
}
|
|
3183
4070
|
else if (operation === 'delete') {
|
|
3184
4071
|
const appointmentId = this.getNodeParameter('appointmentId', i);
|
|
3185
4072
|
responseData = await this.helpers.httpRequest({
|
|
@@ -3329,6 +4216,266 @@ class AivenceRealty {
|
|
|
3329
4216
|
});
|
|
3330
4217
|
}
|
|
3331
4218
|
}
|
|
4219
|
+
// ============================================
|
|
4220
|
+
// OWNER RESOURCE
|
|
4221
|
+
// ============================================
|
|
4222
|
+
else if (resource === 'owner') {
|
|
4223
|
+
if (operation === 'create') {
|
|
4224
|
+
const body = {
|
|
4225
|
+
nombre: this.getNodeParameter('ownerNombre', i),
|
|
4226
|
+
email: this.getNodeParameter('ownerEmail', i),
|
|
4227
|
+
telefono: this.getNodeParameter('ownerTelefono', i),
|
|
4228
|
+
cuit_cuil: this.getNodeParameter('ownerCuit', i) || undefined,
|
|
4229
|
+
tipo_persona: this.getNodeParameter('ownerTipoPersona', i),
|
|
4230
|
+
direccion: this.getNodeParameter('ownerDireccion', i) || undefined,
|
|
4231
|
+
notas: this.getNodeParameter('ownerNotas', i) || undefined,
|
|
4232
|
+
};
|
|
4233
|
+
responseData = await this.helpers.httpRequest({
|
|
4234
|
+
method: 'POST',
|
|
4235
|
+
url: `${baseUrl}/api/v1/owners`,
|
|
4236
|
+
headers: {
|
|
4237
|
+
'Authorization': `Bearer ${credentials.apiKey}`,
|
|
4238
|
+
'Accept': 'application/json',
|
|
4239
|
+
'Content-Type': 'application/json',
|
|
4240
|
+
},
|
|
4241
|
+
body,
|
|
4242
|
+
json: true,
|
|
4243
|
+
});
|
|
4244
|
+
}
|
|
4245
|
+
else if (operation === 'get') {
|
|
4246
|
+
const ownerId = this.getNodeParameter('ownerId', i);
|
|
4247
|
+
responseData = await this.helpers.httpRequest({
|
|
4248
|
+
method: 'GET',
|
|
4249
|
+
url: `${baseUrl}/api/v1/owners/${ownerId}`,
|
|
4250
|
+
headers: {
|
|
4251
|
+
'Authorization': `Bearer ${credentials.apiKey}`,
|
|
4252
|
+
'Accept': 'application/json',
|
|
4253
|
+
},
|
|
4254
|
+
json: true,
|
|
4255
|
+
});
|
|
4256
|
+
}
|
|
4257
|
+
else if (operation === 'search') {
|
|
4258
|
+
const searchEmail = this.getNodeParameter('searchEmail', i);
|
|
4259
|
+
const searchTelefono = this.getNodeParameter('searchTelefono', i);
|
|
4260
|
+
const searchCuit = this.getNodeParameter('searchCuit', i);
|
|
4261
|
+
const params = new URLSearchParams();
|
|
4262
|
+
if (searchEmail)
|
|
4263
|
+
params.append('email', searchEmail);
|
|
4264
|
+
if (searchTelefono)
|
|
4265
|
+
params.append('telefono', searchTelefono);
|
|
4266
|
+
if (searchCuit)
|
|
4267
|
+
params.append('cuit', searchCuit);
|
|
4268
|
+
responseData = await this.helpers.httpRequest({
|
|
4269
|
+
method: 'GET',
|
|
4270
|
+
url: `${baseUrl}/api/v1/owners/search?${params.toString()}`,
|
|
4271
|
+
headers: {
|
|
4272
|
+
'Authorization': `Bearer ${credentials.apiKey}`,
|
|
4273
|
+
'Accept': 'application/json',
|
|
4274
|
+
},
|
|
4275
|
+
json: true,
|
|
4276
|
+
});
|
|
4277
|
+
}
|
|
4278
|
+
else if (operation === 'update') {
|
|
4279
|
+
const ownerId = this.getNodeParameter('ownerId', i);
|
|
4280
|
+
const body = {};
|
|
4281
|
+
const updateNombre = this.getNodeParameter('updateNombre', i);
|
|
4282
|
+
const updateEmail = this.getNodeParameter('updateEmail', i);
|
|
4283
|
+
const updateTelefono = this.getNodeParameter('updateTelefono', i);
|
|
4284
|
+
const ownerCuit = this.getNodeParameter('ownerCuit', i);
|
|
4285
|
+
const ownerTipoPersona = this.getNodeParameter('ownerTipoPersona', i);
|
|
4286
|
+
const ownerDireccion = this.getNodeParameter('ownerDireccion', i);
|
|
4287
|
+
const ownerNotas = this.getNodeParameter('ownerNotas', i);
|
|
4288
|
+
if (updateNombre)
|
|
4289
|
+
body.nombre = updateNombre;
|
|
4290
|
+
if (updateEmail)
|
|
4291
|
+
body.email = updateEmail;
|
|
4292
|
+
if (updateTelefono)
|
|
4293
|
+
body.telefono = updateTelefono;
|
|
4294
|
+
if (ownerCuit)
|
|
4295
|
+
body.cuit_cuil = ownerCuit;
|
|
4296
|
+
if (ownerTipoPersona)
|
|
4297
|
+
body.tipo_persona = ownerTipoPersona;
|
|
4298
|
+
if (ownerDireccion)
|
|
4299
|
+
body.direccion = ownerDireccion;
|
|
4300
|
+
if (ownerNotas)
|
|
4301
|
+
body.notas = ownerNotas;
|
|
4302
|
+
responseData = await this.helpers.httpRequest({
|
|
4303
|
+
method: 'PATCH',
|
|
4304
|
+
url: `${baseUrl}/api/v1/owners/${ownerId}`,
|
|
4305
|
+
headers: {
|
|
4306
|
+
'Authorization': `Bearer ${credentials.apiKey}`,
|
|
4307
|
+
'Accept': 'application/json',
|
|
4308
|
+
'Content-Type': 'application/json',
|
|
4309
|
+
},
|
|
4310
|
+
body,
|
|
4311
|
+
json: true,
|
|
4312
|
+
});
|
|
4313
|
+
}
|
|
4314
|
+
else if (operation === 'list') {
|
|
4315
|
+
const perPage = this.getNodeParameter('ownerPerPage', i);
|
|
4316
|
+
responseData = await this.helpers.httpRequest({
|
|
4317
|
+
method: 'GET',
|
|
4318
|
+
url: `${baseUrl}/api/v1/owners?per_page=${perPage}`,
|
|
4319
|
+
headers: {
|
|
4320
|
+
'Authorization': `Bearer ${credentials.apiKey}`,
|
|
4321
|
+
'Accept': 'application/json',
|
|
4322
|
+
},
|
|
4323
|
+
json: true,
|
|
4324
|
+
});
|
|
4325
|
+
}
|
|
4326
|
+
}
|
|
4327
|
+
// ============================================
|
|
4328
|
+
// TASACIÓN RESOURCE
|
|
4329
|
+
// ============================================
|
|
4330
|
+
else if (resource === 'tasacion') {
|
|
4331
|
+
if (operation === 'generate') {
|
|
4332
|
+
const body = {
|
|
4333
|
+
tipo_propiedad: this.getNodeParameter('tasacionTipo', i),
|
|
4334
|
+
barrio: this.getNodeParameter('tasacionBarrio', i),
|
|
4335
|
+
metros_cuadrados: this.getNodeParameter('tasacionMetros', i),
|
|
4336
|
+
ambientes: this.getNodeParameter('tasacionAmbientes', i) || undefined,
|
|
4337
|
+
dormitorios: this.getNodeParameter('tasacionDormitorios', i) || undefined,
|
|
4338
|
+
banos: this.getNodeParameter('tasacionBanos', i) || undefined,
|
|
4339
|
+
antiguedad: this.getNodeParameter('tasacionAntiguedad', i) || undefined,
|
|
4340
|
+
estado: this.getNodeParameter('tasacionEstado', i) || undefined,
|
|
4341
|
+
amenidades: this.getNodeParameter('tasacionAmenidades', i) || undefined,
|
|
4342
|
+
owner_id: this.getNodeParameter('tasacionOwnerIdSave', i) || undefined,
|
|
4343
|
+
};
|
|
4344
|
+
responseData = await this.helpers.httpRequest({
|
|
4345
|
+
method: 'POST',
|
|
4346
|
+
url: `${baseUrl}/api/v1/tasaciones/generate`,
|
|
4347
|
+
headers: {
|
|
4348
|
+
'Authorization': `Bearer ${credentials.apiKey}`,
|
|
4349
|
+
'Accept': 'application/json',
|
|
4350
|
+
'Content-Type': 'application/json',
|
|
4351
|
+
},
|
|
4352
|
+
body,
|
|
4353
|
+
json: true,
|
|
4354
|
+
});
|
|
4355
|
+
}
|
|
4356
|
+
else if (operation === 'get') {
|
|
4357
|
+
const tasacionId = this.getNodeParameter('tasacionId', i);
|
|
4358
|
+
responseData = await this.helpers.httpRequest({
|
|
4359
|
+
method: 'GET',
|
|
4360
|
+
url: `${baseUrl}/api/v1/tasaciones/${tasacionId}`,
|
|
4361
|
+
headers: {
|
|
4362
|
+
'Authorization': `Bearer ${credentials.apiKey}`,
|
|
4363
|
+
'Accept': 'application/json',
|
|
4364
|
+
},
|
|
4365
|
+
json: true,
|
|
4366
|
+
});
|
|
4367
|
+
}
|
|
4368
|
+
else if (operation === 'listByOwner') {
|
|
4369
|
+
const ownerId = this.getNodeParameter('tasacionOwnerId', i);
|
|
4370
|
+
responseData = await this.helpers.httpRequest({
|
|
4371
|
+
method: 'GET',
|
|
4372
|
+
url: `${baseUrl}/api/v1/tasaciones/owner/${ownerId}`,
|
|
4373
|
+
headers: {
|
|
4374
|
+
'Authorization': `Bearer ${credentials.apiKey}`,
|
|
4375
|
+
'Accept': 'application/json',
|
|
4376
|
+
},
|
|
4377
|
+
json: true,
|
|
4378
|
+
});
|
|
4379
|
+
}
|
|
4380
|
+
}
|
|
4381
|
+
// ============================================
|
|
4382
|
+
// DOCUSEAL RESOURCE
|
|
4383
|
+
// ============================================
|
|
4384
|
+
else if (resource === 'docuseal') {
|
|
4385
|
+
if (operation === 'createMandato') {
|
|
4386
|
+
const body = {
|
|
4387
|
+
tipo: this.getNodeParameter('docusealTipo', i),
|
|
4388
|
+
owner_id: this.getNodeParameter('docusealOwnerId', i),
|
|
4389
|
+
property_id: this.getNodeParameter('docusealPropertyId', i) || undefined,
|
|
4390
|
+
duracion_meses: this.getNodeParameter('docusealDuracion', i) || undefined,
|
|
4391
|
+
comision_porcentaje: this.getNodeParameter('docusealComision', i) || undefined,
|
|
4392
|
+
precio_sugerido: this.getNodeParameter('docusealPrecio', i) || undefined,
|
|
4393
|
+
};
|
|
4394
|
+
responseData = await this.helpers.httpRequest({
|
|
4395
|
+
method: 'POST',
|
|
4396
|
+
url: `${baseUrl}/api/v1/docuseal/mandatos`,
|
|
4397
|
+
headers: {
|
|
4398
|
+
'Authorization': `Bearer ${credentials.apiKey}`,
|
|
4399
|
+
'Accept': 'application/json',
|
|
4400
|
+
'Content-Type': 'application/json',
|
|
4401
|
+
},
|
|
4402
|
+
body,
|
|
4403
|
+
json: true,
|
|
4404
|
+
});
|
|
4405
|
+
}
|
|
4406
|
+
else if (operation === 'getStatus') {
|
|
4407
|
+
const submissionId = this.getNodeParameter('docusealSubmissionId', i);
|
|
4408
|
+
responseData = await this.helpers.httpRequest({
|
|
4409
|
+
method: 'GET',
|
|
4410
|
+
url: `${baseUrl}/api/v1/docuseal/submissions/${submissionId}`,
|
|
4411
|
+
headers: {
|
|
4412
|
+
'Authorization': `Bearer ${credentials.apiKey}`,
|
|
4413
|
+
'Accept': 'application/json',
|
|
4414
|
+
},
|
|
4415
|
+
json: true,
|
|
4416
|
+
});
|
|
4417
|
+
}
|
|
4418
|
+
else if (operation === 'listTemplates') {
|
|
4419
|
+
responseData = await this.helpers.httpRequest({
|
|
4420
|
+
method: 'GET',
|
|
4421
|
+
url: `${baseUrl}/api/v1/docuseal/templates`,
|
|
4422
|
+
headers: {
|
|
4423
|
+
'Authorization': `Bearer ${credentials.apiKey}`,
|
|
4424
|
+
'Accept': 'application/json',
|
|
4425
|
+
},
|
|
4426
|
+
json: true,
|
|
4427
|
+
});
|
|
4428
|
+
}
|
|
4429
|
+
else if (operation === 'health') {
|
|
4430
|
+
responseData = await this.helpers.httpRequest({
|
|
4431
|
+
method: 'GET',
|
|
4432
|
+
url: `${baseUrl}/api/v1/docuseal/health`,
|
|
4433
|
+
headers: {
|
|
4434
|
+
'Authorization': `Bearer ${credentials.apiKey}`,
|
|
4435
|
+
'Accept': 'application/json',
|
|
4436
|
+
},
|
|
4437
|
+
json: true,
|
|
4438
|
+
});
|
|
4439
|
+
}
|
|
4440
|
+
}
|
|
4441
|
+
// ============================================
|
|
4442
|
+
// MARIANA RESOURCE
|
|
4443
|
+
// ============================================
|
|
4444
|
+
else if (resource === 'mariana') {
|
|
4445
|
+
if (operation === 'transferLead') {
|
|
4446
|
+
const body = {
|
|
4447
|
+
lead_id: this.getNodeParameter('marianaLeadId', i),
|
|
4448
|
+
conversation_id: this.getNodeParameter('marianaConversationId', i) || undefined,
|
|
4449
|
+
motivo: this.getNodeParameter('marianaMotivo', i),
|
|
4450
|
+
notas: this.getNodeParameter('marianaNotas', i) || undefined,
|
|
4451
|
+
urgencia: this.getNodeParameter('marianaUrgencia', i),
|
|
4452
|
+
direccion_propiedad: this.getNodeParameter('marianaDireccion', i) || undefined,
|
|
4453
|
+
tipo_operacion: this.getNodeParameter('marianaOperacion', i) || undefined,
|
|
4454
|
+
};
|
|
4455
|
+
responseData = await this.helpers.httpRequest({
|
|
4456
|
+
method: 'POST',
|
|
4457
|
+
url: `${baseUrl}/api/v1/mariana/transfer`,
|
|
4458
|
+
headers: {
|
|
4459
|
+
'Authorization': `Bearer ${credentials.apiKey}`,
|
|
4460
|
+
'Accept': 'application/json',
|
|
4461
|
+
'Content-Type': 'application/json',
|
|
4462
|
+
},
|
|
4463
|
+
body,
|
|
4464
|
+
json: true,
|
|
4465
|
+
});
|
|
4466
|
+
}
|
|
4467
|
+
else if (operation === 'getQueueStatus') {
|
|
4468
|
+
responseData = await this.helpers.httpRequest({
|
|
4469
|
+
method: 'GET',
|
|
4470
|
+
url: `${baseUrl}/api/v1/mariana/queue`,
|
|
4471
|
+
headers: {
|
|
4472
|
+
'Authorization': `Bearer ${credentials.apiKey}`,
|
|
4473
|
+
'Accept': 'application/json',
|
|
4474
|
+
},
|
|
4475
|
+
json: true,
|
|
4476
|
+
});
|
|
4477
|
+
}
|
|
4478
|
+
}
|
|
3332
4479
|
// Formatear respuesta
|
|
3333
4480
|
const executionData = this.helpers.constructExecutionMetaData(this.helpers.returnJsonArray(responseData), { itemData: { item: i } });
|
|
3334
4481
|
returnData.push(...executionData);
|