Skip to content

Commit 19ed945

Browse files
committed
NetSuite Contact Search update
1 parent 8b5d8e7 commit 19ed945

File tree

2 files changed

+78
-26
lines changed

2 files changed

+78
-26
lines changed

src/adapters/manifest.json

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1722,7 +1722,8 @@
17221722
"required": true
17231723
}
17241724
]
1725-
}
1725+
},
1726+
"useContactSearch": true
17261727
}
17271728
},
17281729
"googleSheets": {

src/adapters/netsuite/index.js

Lines changed: 76 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -385,31 +385,82 @@ async function findContact({ user, authHeader, phoneNumber, overridingFormat })
385385
}
386386
async function findContactWithName({ user, authHeader, name }) {
387387
const matchedContactInfo = [];
388-
const contactQuery = `SELECT id,firstName,middleName,lastName,entitytitle,phone FROM contact WHERE firstname ='${name}'`;
389-
const personInfo = await axios.post(
390-
`https://${user.hostname.split(".")[0]}.suitetalk.api.netsuite.com/services/rest/query/v1/suiteql`,
391-
{
392-
q: contactQuery
393-
},
394-
{
395-
headers: { 'Authorization': authHeader, 'Content-Type': 'application/json', 'Prefer': 'transient' }
396-
});
397-
if (personInfo.data.items.length > 0) {
398-
for (var result of personInfo.data.items) {
399-
let firstName = result.firstname ?? '';
400-
let middleName = result.middlename ?? '';
401-
let lastName = result.lastname ?? '';
402-
const contactName = (firstName + middleName + lastName).length > 0 ? `${firstName} ${middleName} ${lastName}` : result.entitytitle;
403-
matchedContactInfo.push({
404-
id: result.id,
405-
name: contactName,
406-
phone: result.phone ?? '',
407-
homephone: result.homephone ?? '',
408-
mobilephone: result.mobilephone ?? '',
409-
officephone: result.officephone ?? '',
410-
additionalInfo: null,
411-
type: 'contact'
412-
})
388+
const contactSearch = user.userSettings?.contactsSearchId?.value ?? [];
389+
if (contactSearch.length === 0) {
390+
contactSearch.push('contact', 'customer');
391+
}
392+
const { enableSalesOrderLogging = false } = user.userSettings;
393+
// const contactQuery = `SELECT id,firstName,middleName,lastName,entitytitle,phone FROM contact WHERE firstname ='${name}' OR lastname ='${name}' OR (firstname || ' ' || lastname) ='${name}'`;
394+
const contactQuery = `SELECT * FROM contact WHERE LOWER(firstname) =LOWER('${name}') OR LOWER(lastname) =LOWER('${name}') OR LOWER(entitytitle) =LOWER('${name}')`;
395+
const customerQuery = `SELECT * FROM customer WHERE LOWER(firstname) =LOWER('${name}') OR LOWER(lastname) =LOWER('${name}') OR LOWER(entitytitle) =LOWER('${name}')`;
396+
if (contactSearch.includes('contact')) {
397+
const personInfo = await axios.post(
398+
`https://${user.hostname.split(".")[0]}.suitetalk.api.netsuite.com/services/rest/query/v1/suiteql`,
399+
{
400+
q: contactQuery
401+
},
402+
{
403+
headers: { 'Authorization': authHeader, 'Content-Type': 'application/json', 'Prefer': 'transient' }
404+
});
405+
if (personInfo.data.items.length > 0) {
406+
for (var result of personInfo.data.items) {
407+
let firstName = result.firstname ?? '';
408+
let middleName = result.middlename ?? '';
409+
let lastName = result.lastname ?? '';
410+
const contactName = (firstName + middleName + lastName).length > 0 ? `${firstName} ${middleName} ${lastName}` : result.entitytitle;
411+
matchedContactInfo.push({
412+
id: result.id,
413+
name: contactName,
414+
phone: result.phone ?? '',
415+
homephone: result.homephone ?? '',
416+
mobilephone: result.mobilephone ?? '',
417+
officephone: result.officephone ?? '',
418+
additionalInfo: null,
419+
type: 'contact'
420+
})
421+
}
422+
}
423+
}
424+
if (contactSearch.includes('customer')) {
425+
const customerInfo = await axios.post(
426+
`https://${user.hostname.split(".")[0]}.suitetalk.api.netsuite.com/services/rest/query/v1/suiteql`,
427+
{
428+
q: customerQuery
429+
},
430+
{
431+
headers: { 'Authorization': authHeader, 'Content-Type': 'application/json', 'Prefer': 'transient' }
432+
});
433+
if (customerInfo.data.items.length > 0) {
434+
for (const result of customerInfo.data.items) {
435+
let salesOrders = [];
436+
try {
437+
if (enableSalesOrderLogging.value) {
438+
const salesOrderResponse = await findSalesOrdersAgainstContact({ user, authHeader, contactId: result.id });
439+
for (const salesOrder of salesOrderResponse?.data?.items) {
440+
salesOrders.push({
441+
const: salesOrder?.id,
442+
title: salesOrder?.trandisplayname
443+
});
444+
}
445+
}
446+
} catch (e) {
447+
console.log({ message: "Error in SalesOrder search" });
448+
}
449+
let firstName = result.firstname ?? '';
450+
let middleName = result.middlename ?? '';
451+
let lastName = result.lastname ?? '';
452+
const customerName = (firstName + middleName + lastName).length > 0 ? `${firstName} ${middleName} ${lastName}` : result.entitytitle;
453+
matchedContactInfo.push({
454+
id: result.id,
455+
name: customerName,
456+
phone: result.phone ?? '',
457+
homephone: result.homephone ?? '',
458+
mobilephone: result.mobilephone ?? '',
459+
altphone: result.altphone ?? '',
460+
additionalInfo: salesOrders.length > 0 ? { salesorder: salesOrders } : {},
461+
type: 'custjob'
462+
})
463+
}
413464
}
414465
}
415466
return {

0 commit comments

Comments
 (0)