From 479f30b0a4d1e1d09696b6d50c780f4e49e5cc47 Mon Sep 17 00:00:00 2001 From: rdbsolutions Date: Mon, 31 Mar 2025 17:19:50 +0100 Subject: [PATCH] 15439 sips advanced search --- components/search/searchresults.js | 27 +- .../endpoint/getadvancedsearchpaged_api.js | 387 +++++++++++++----- 2 files changed, 297 insertions(+), 117 deletions(-) diff --git a/components/search/searchresults.js b/components/search/searchresults.js index 2ae424c7..71442be0 100644 --- a/components/search/searchresults.js +++ b/components/search/searchresults.js @@ -253,6 +253,8 @@ const SearchResults = (props) => { searchDetailsObj ); + Object.assign(item, item.pinswg_sipscase); + detailsObj = detailsObj[0] || {}; return (
{ {item.title} - {detailsObj.hasOwnProperty( - "_pinswg_projecttype_value@OData.Community.Display.V1.FormattedValue" - ) && ( -
- { - detailsObj[ - "_pinswg_projecttype_value@OData.Community.Display.V1.FormattedValue" - ] - } -
- )} + {item.hasOwnProperty( + "pinswg_sipscase" + ) && + item.hasOwnProperty( + "_pinswg_projecttype_value@OData.Community.Display.V1.FormattedValue" + ) && ( +
+ { + item[ + "_pinswg_projecttype_value@OData.Community.Display.V1.FormattedValue" + ] + } +
+ )} diff --git a/pages/api/endpoint/getadvancedsearchpaged_api.js b/pages/api/endpoint/getadvancedsearchpaged_api.js index 506e13dd..9767a6e8 100644 --- a/pages/api/endpoint/getadvancedsearchpaged_api.js +++ b/pages/api/endpoint/getadvancedsearchpaged_api.js @@ -1,51 +1,51 @@ -/** - * @swagger - * /api/endpoint/getadvancedsearchpaged_api: - * get: - * tags: [Search] - * description: Advanced search paged - * parameters: - * - name: searchstring - * description: search string - * in: query - * required: false - * example: { - * "q":"cas-", - * "lpa":"744c69f4-48da-eb11-aac5-00224800be9c", - * "apt":"846040000", - * "statuscode":"1"} - * schema: - * type: string - * - name: pageNumber - * in: query - * required: true - * example: 1 - * schema: - * type: string - * - name: orderby - * in: query - * required: true - * example: createdon - * schema: - * type: string - * - name: fieldSort - * in: query - * required: true - * description: asc or desc - * example: asc - * schema: - * type: string - * - name: showNumberOfRecords - * in: query - * required: true - * description: number of records to return per page - * example: 10 - * schema: - * type: string - * responses: - * 200: - * description: Success - */ +// /** +// * @swagger +// * /api/endpoint/getadvancedsearchpaged_api: +// * get: +// * tags: [Search] +// * description: Advanced search paged +// * parameters: +// * - name: searchstring +// * description: search string +// * in: query +// * required: false +// * example: { +// * "q":"cas-", +// * "lpa":"744c69f4-48da-eb11-aac5-00224800be9c", +// * "apt":"846040000", +// * "statuscode":"1"} +// * schema: +// * type: string +// * - name: pageNumber +// * in: query +// * required: true +// * example: 1 +// * schema: +// * type: string +// * - name: orderby +// * in: query +// * required: true +// * example: createdon +// * schema: +// * type: string +// * - name: fieldSort +// * in: query +// * required: true +// * description: asc or desc +// * example: asc +// * schema: +// * type: string +// * - name: showNumberOfRecords +// * in: query +// * required: true +// * description: number of records to return per page +// * example: 10 +// * schema: +// * type: string +// * responses: +// * 200: +// * description: Success +// */ import axios from "axios"; import CryptoJS from "crypto-js"; @@ -53,6 +53,7 @@ import _ from "lodash"; import { azureHeadersPagedCustom, azureHeadersPaged, + azureHeaders, consoleLogger, getToken, } from "../../../actions"; @@ -127,7 +128,29 @@ export default async function ApiProxy(req, res) { ? "&$skiptoken=" + ('') : ""); - //console.log("adv qu: ", queryUrl); + if (_.has(searchString, "projecttype")) { + queryUrl = + "pinswg_sipses?$count=true&$expand=pinswg_sipscase&$filter=_pinswg_projecttype_value eq " + + searchString.projecttype + + (searchString.hasOwnProperty("q") + ? " and contains(pinswg_projectname, '" + searchString.q + "')" + : "") + + (searchString.hasOwnProperty("lpa") + ? " and _pinswg_associatedlpa_value eq " + + searchString.lpa + + " " + : "") + + "&$orderby=" + + orderby + + " " + + fieldSort + + (typeof pageNumber != "undefined" + ? "&$skiptoken=" + + ('') + : ""); + } + + console.log("adv qu: ", queryUrl); var apiResponse = _.isEmpty(searchString) ? res.status(400).json() @@ -146,63 +169,57 @@ export default async function ApiProxy(req, res) { (data["@odata.nextLink"] = dataStr.split("/v8.2/")[1])); if (_.has(searchString, "projecttype")) { - await updateValueArray(data, token); - - async function updateValueArray(data, token) { - for (let i = 0; i < data.value.length; i++) { - const item = data.value[i]; - - try { - // Axios call using the `incidentid` to fetch additional data - const response = await axios.get( - WEBAPI_URL + - "pinswg_sipses?$filter=_pinswg_sipscase_value eq " + - item.incidentid + - " and _pinswg_projecttype_value eq " + - searchString.projecttype + - "&$select=_pinswg_projecttype_value" + - hashAPIPath( - "pinswg_sipses?$filter=_pinswg_sipscase_value eq " + - item.incidentid + - " and _pinswg_projecttype_value eq " + - searchString.projecttype + - "&$select=_pinswg_projecttype_value" - ), - azureHeadersPaged(token.access_token) - ); - - // Assuming the response contains the additional data you want to add - // console.log(response.data.value[0]); - console.log(response.data.value); - - if ( - response.data.value.length > 0 && - response.data.value[0] - ._pinswg_projecttype_value != null - ) { - Object.assign( - item, - response.data.value[0] - ); // Update item with new data - } else { - console.log( - `No project type found for incident ID ${item.incidentid}` - ); - } - } catch (error) { - console.error( - `Error fetching data for incident ID ${item.incidentid}:`, - error - ); - } - } - } - - data.value = data.value.filter( - (item) => item._pinswg_projecttype_value != null - ); - - data["@odata.count"] = data.value.length; + // await updateValueArray(data, token); + // async function updateValueArray(data, token) { + // for (let i = 0; i < data.value.length; i++) { + // const item = data.value[i]; + // try { + // // Axios call using the `incidentid` to fetch additional data + // const response = await axios.get( + // WEBAPI_URL + + // "pinswg_sipses?$filter=_pinswg_sipscase_value eq " + + // item.incidentid + + // " and _pinswg_projecttype_value eq " + + // searchString.projecttype + + // "&$select=_pinswg_projecttype_value" + + // hashAPIPath( + // "pinswg_sipses?$filter=_pinswg_sipscase_value eq " + + // item.incidentid + + // " and _pinswg_projecttype_value eq " + + // searchString.projecttype + + // "&$select=_pinswg_projecttype_value" + // ), + // azureHeadersPaged(token.access_token) + // ); + // // Assuming the response contains the additional data you want to add + // // console.log(response.data.value[0]); + // console.log(response.data.value); + // if ( + // response.data.value.length > 0 && + // response.data.value[0] + // ._pinswg_projecttype_value != null + // ) { + // Object.assign( + // item, + // response.data.value[0] + // ); // Update item with new data + // } else { + // console.log( + // `No project type found for incident ID ${item.incidentid}` + // ); + // } + // } catch (error) { + // console.error( + // `Error fetching data for incident ID ${item.incidentid}:`, + // error + // ); + // } + // } + // } + // data.value = data.value.filter( + // (item) => item._pinswg_projecttype_value != null + // ); + // data["@odata.count"] = data.value.length; } res.status(200).json(data); @@ -214,3 +231,161 @@ export default async function ApiProxy(req, res) { return apiResponse; } + +// export default async function ApiProxy(req, res) { +// var searchString = req.query.searchstring; +// var pageNumber = req.query.pageNumber; +// var token = await getToken(); + +// var orderby = req.query.orderby; +// var fieldSort = req.query.fieldSort; +// var showNumberOfRecords = req.query.showNumberOfRecords; + +// searchString = _.isEmpty(searchString) +// ? searchString +// : JSON.parse(decodeURI(searchString)); + +// var queryString = ""; + +// queryString += +// _.has(searchString, "q") && searchString.q != null +// ? "(contains(title, '" + +// searchString.q.replace(/\'/g, "''") + +// "') or contains(ticketnumber,'" + +// searchString.q.replace(/\'/g, "''") + +// "')) and" +// : ""; + +// queryString += +// (_.has(searchString, "lpa") || _.has(searchString, "LPA")) && +// searchString.lpa != null +// ? " _pinswg_associatedlpa_value eq " + searchString.lpa + " and" +// : ""; + +// queryString += +// _.has(searchString, "apt") && searchString.apt != null +// ? " pinswg_appealcasetype eq " + searchString.apt + " and" +// : ""; + +// queryString += +// _.has(searchString, "statuscode") && searchString.statuscode != null +// ? " statuscode eq " + searchString.statuscode + " and" +// : ""; + +// var queryUrl = +// "incidents?$select=pinswg_caseaddress,modifiedon,description,numberofchildincidents,_accountid_value,_customerid_value,_pinswg_associatedlpa_value,_ownerid_value,pinswg_appealcasetype,statuscode,ticketnumber,title,_primarycontactid_value,pinswg_lpareference,pinswg_appellantagent,pinswg_appellantfirstname,pinswg_appellantlastname&$expand=primarycontactid($select=fullname)&$filter=" + +// queryString + +// " pinswg_appealcasetype ne null and pinswg_publishtoweb eq true&$orderby=" + +// orderby + +// " " + +// fieldSort + +// "&$count=true"; + +// console.log(WEBAPI_URL + queryUrl + hashAPIPath(queryUrl)); + +// var apiResponse = _.isEmpty(searchString) +// ? res.status(400).json() +// : axios +// .get( +// WEBAPI_URL + queryUrl + hashAPIPath(queryUrl), +// azureHeadersPagedCustom( +// token.access_token, +// showNumberOfRecords +// ) +// ) +// .then(async ({ data }) => { +// var dataStr; +// _.has(data, "@odata.nextLink") == true && +// ((dataStr = JSON.stringify(data["@odata.nextLink"])), +// (data["@odata.nextLink"] = dataStr.split("/v8.2/")[1])); + +// if (_.has(searchString, "projecttype")) { +// await updateValueArray(data, token); + +// async function updateValueArray(data, token) { +// let hasNextPage = true; +// let nextPageUrl = data["@odata.nextLink"]; + +// // Loop through all pages +// while (hasNextPage) { +// // Iterate through current data and process it +// for (let i = 0; i < data.value.length; i++) { +// const item = data.value[i]; + +// try { +// // Axios call using the `incidentid` to fetch additional data +// const response = await axios.get( +// WEBAPI_URL + +// "pinswg_sipses?$filter=_pinswg_sipscase_value eq " + +// item.incidentid + +// " and _pinswg_projecttype_value eq " + +// searchString.projecttype + +// "&$select=_pinswg_projecttype_value" + +// hashAPIPath( +// "pinswg_sipses?$filter=_pinswg_sipscase_value eq " + +// item.incidentid + +// " and _pinswg_projecttype_value eq " + +// searchString.projecttype + +// "&$select=_pinswg_projecttype_value" +// ), +// azureHeadersPaged(token.access_token) +// ); + +// if ( +// response.data.value.length > 0 && +// response.data.value[0] +// ._pinswg_projecttype_value != null +// ) { +// Object.assign( +// item, +// response.data.value[0] +// ); // Update item with new data +// } else { +// console.log( +// `No project type found for incident ID ${item.incidentid}` +// ); +// } +// } catch (error) { +// console.error( +// `Error fetching data for incident ID ${item.incidentid}:`, +// error +// ); +// } +// } + +// // If there's a next page, fetch it +// if (nextPageUrl) { +// const nextPageData = await axios.get( +// WEBAPI_URL + +// nextPageUrl + +// hashAPIPath(nextPageUrl), +// azureHeadersPaged(token.access_token) +// ); +// data.value = [ +// ...data.value, +// ...nextPageData.data.value, +// ]; +// nextPageUrl = +// nextPageData.data["@odata.nextLink"]; +// } else { +// hasNextPage = false; +// } +// } +// } + +// data.value = data.value.filter( +// (item) => item._pinswg_projecttype_value != null +// ); + +// data["@odata.count"] = data.value.length; +// } + +// res.status(200).json(data); +// }) +// .catch((error) => { +// consoleLogger(error); +// res.status(400).json(error); +// }); + +// return apiResponse; +// }