diff --git a/actions/index.js b/actions/index.js index 015e296e..a5a3d2f7 100644 --- a/actions/index.js +++ b/actions/index.js @@ -1,5 +1,7 @@ import axios from "axios"; import https from "https"; +import CryptoJS from "crypto-js"; + //import {XMLHttpRequest} from 'xmlhttprequest'; process.env["NODE_TLS_REJECT_UNAUTHORIZED"] = 0; @@ -13,9 +15,61 @@ if (process.browser) { BASE_URL = process.env.API_ROOT || `http://localhost:${port}`; } +const API_PATH = "/api/data/v8.2/"; + +//const WEBAPI_URL = "https://devcrm2016.llcdt.gov.wales/DVPINS" + API_PATH; + +const WEBAPI_URL = + process.env.RELAY_ROOT || + "https://dev-pedw-ns.servicebus.windows.net/dev-pedw-hc/"; + const agent = new https.Agent({ rejectUnauthorized: false, }); + +export const getSASToken = () => { + var m_ResourceURI = + process.env.RELAYURI || "dev-pedw-ns.servicebus.windows.net"; + var m_Path = process.env.RELAYPATH || "dev-pedw-hc"; + var m_SasKey = + process.env.SASKEY || "Ml0Y/S/nfRcmIrHFRkO4jNm2J3iH52TSxPiak7+E1+Y="; + var m_SasKeyName = process.env.SASKEYNAME || "devpedwnspolicy"; + + var encodedResourceUri = encodeURIComponent( + "https://" + m_ResourceURI + "/" + m_Path + "/" + ); + + var t0 = new Date(1970, 1, 1, 0, 0, 0, 0); + var t1 = new Date(); + var expireInSeconds = + +(31 * 24 * 3600) + 3600 + (((t1.getTime() - t0.getTime()) / 1000) | 0); + + //the line below is a hack that converts to UTF8 + var plainSignature = JSON.parse( + JSON.stringify(encodedResourceUri + "\n" + expireInSeconds) + ); + + var hash = CryptoJS.HmacSHA256(plainSignature, m_SasKey); + var base64HashValue = CryptoJS.enc.Base64.stringify(hash); + + var token = + "SharedAccessSignature sr=" + + encodedResourceUri + + "&sig=" + + encodeURIComponent(base64HashValue) + + "&se=" + + expireInSeconds + + "&skn=" + + m_SasKeyName; + + return token; +}; + +const accessToken = + "eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiIsIng1dCI6IlVXelVaa0U3OEx0NVBGRkJ0LV9seVdoMjdjTSIsImtpZCI6IlVXelVaa0U3OEx0NVBGRkJ0LV9seVdoMjdjTSJ9.eyJhdWQiOiJodHRwczovL2RldmNybTIwMTYubGxjZHQuZ292LndhbGVzLyIsImlzcyI6Imh0dHA6Ly9mcy50ZXN0Lmdvdi53YWxlcy9hZGZzL3NlcnZpY2VzL3RydXN0IiwiaWF0IjoxNjMyMTIxMjkxLCJuYmYiOjE2MzIxMjEyOTEsImV4cCI6MTYzMjE1MDA5MSwidXBuIjpbIlJvYmVydC5Cb25kQHRlc3QuZ292LndhbGVzIiwicm9iZXJ0LmJvbmRAdGVzdC5nb3Yud2FsZXMiXSwicHJpbWFyeXNpZCI6IlMtMS01LTIxLTE4MDA4NDIwNzYtMjQ1NTYwNjU5LTQyMTU3NzU0NjktMTY2MjgiLCJ1bmlxdWVfbmFtZSI6IlhNXFxCb25kUiIsImFwcHR5cGUiOiJQdWJsaWMiLCJhcHBpZCI6IjQyN2ZhNzljLWI1ZmMtNDJhZC04M2Q0LTQxMGIwMzk0OGFiNiIsImF1dGhtZXRob2QiOiJodHRwOi8vc2NoZW1hcy5taWNyb3NvZnQuY29tL3dzLzIwMDgvMDYvaWRlbnRpdHkvYXV0aGVudGljYXRpb25tZXRob2Qvd2luZG93cyIsImF1dGhfdGltZSI6IjIwMjEtMDktMjBUMDc6MDE6MzEuNDYzWiIsInZlciI6IjEuMCJ9.W0ID2nCBYVxh8T1eQqWKk2Wh45kRbRzCICfzrZNAs-4u54yl0UJUcVihyI8EBmQeALCEc5eY99DjK0gaqzCdJqxbxol8yk5LrFvhV5UkCiZ7SO2Wq1cLReWHVsgz39qBtrZ8vlqqZsv7DsEaRJQbtj8Djnx26Wb_kcNu-tuXwUBF0uR5GLFFvJfM3PzkRCY-ZPOTbvPTb73oN_NKe6BrsVjyaR9xSXsRJjgHPmJgWgnvq-2X0Dj7LCwXSEygDDOGlF1yqqN0Lv6qplhQoH-heZlC1K6qe_92nHPswXag6uN5nxTmk1Qw6zJt_aHMnXdwa18ghh4hGx5R0Jz53X113Q"; + +const SASToken = getSASToken(); + const crmHeaders = { withCredentials: true, headers: { @@ -23,62 +77,129 @@ const crmHeaders = { "OData-MaxVersion": "4.0", "OData-Version": "4.0", "Accept": "application/json", - "Prefer": 'odata.include-annotations="*"', - agent, - }, - auth: { - username: "xm\bondr", - password: "!Sky9fish1972", + "Prefer": 'odata.include-annotations="*",return=representation', + "Authorization": "Bearer " + accessToken, }, }; +const crmHeadersReturn = { + headers: { + "OData-MaxVersion": "4.0", + "OData-Version": "4.0", + "Accept": "application/json", + "Prefer": "return=representation", + "Content-Type": "application/json", + "Authorization": "Bearer " + accessToken, + }, +}; + +const azureHeaders = { + headers: { + "OData-MaxVersion": "4.0", + "OData-Version": "4.0", + "Accept": "application/json", + "Prefer": 'odata.include-annotations="*",return=representation', + "Content-Type": "application/json", + "ServiceBusAuthorization": SASToken, + }, +}; + +// const azureHeaders = { +// headers: { +// "OData-MaxVersion": "4.0", +// "OData-Version": "4.0", +// "Accept": "application/json", +// "Prefer": 'odata.include-annotations="*",return=representation', +// "Content-Type": "application/json", +// "Authorization": "Bearer " + accessToken, +// }, +// }; + export const getBasicSearch = (searchString) => { - console.log("got to axios", searchString); - console.log("api_root: ", BASE_URL); - return ( - axios - //.get("https://devcrm2016.llcdt.gov.wales/DVPINS/api/data/v8.2/incidents?$select=_accountid_value,_customerid_value,pinswg_appealcasetype,statuscode,ticketnumber,title&$filter=contains(title, '" + searchString + "')&$count=true", crmHeaders) - //.get("https://jsonplaceholder.typicode.com/todos/1",{proxy:{protocol: 'http',host:'lon3.sme.zscloud.net',port: 80}}) - .get(BASE_URL + "/api/searchresults2", { - httpsAgent: new https.Agent({ rejectUnauthorized: false }), - }) - .then((res) => res.data) - .catch((error) => { - console.log("thiserror", error); - }) - ); + return axios + .get( + WEBAPI_URL + + "incidents?$select=_accountid_value,_customerid_value,pinswg_appealcasetype,statuscode,ticketnumber,title, _primarycontactid_value&$expand=primarycontactid($select=fullname)&$filter=contains(title, '" + + searchString + + "') and pinswg_appealcasetype ne null &$count=true", + azureHeaders + ) + .then((res) => res.data) + .catch((error) => { + console.log("thiserror", error); + }); +}; + +export const getBasicSearchDetails = (appealType, caseReference) => { + return axios + .get( + WEBAPI_URL + + appealType + + "?$filter=pinswg_name eq '" + + caseReference + + "'&$count=true", + azureHeaders + ) + .then((res) => res.data) + .catch((error) => { + console.log("thiserror", error); + }); }; export const getFormData = (whichForm) => { - console.log("got to axios", whichForm); - console.log("api_root: ", BASE_URL); - return ( - axios - //.get("api/appealforms/pinswg_dns", { - //.get("api/appealforms/pinswg_planningobligationappeals106", { - //.get("api/appealforms/pinswg_planningconditionss73s79", { - //.get("api/appealforms/pinswg_row", { - //.get("api/appealforms/pinswg_transportandworkact", { - //.get("api/appealforms/pinswg_harbourrevisionorder", { - //.get("api/appealforms/pinswg_planningappeals78", { - //.get(api/appealforms/pinswg_householderappealhas", { - .get(BASE_URL + "/api/appealforms/pinswg_" + whichForm, { - httpsAgent: new https.Agent({ rejectUnauthorized: false }), - }) - .then((res) => res.data) - .catch((error) => { - console.log("thiserror", error); - }) - ); + //console.log("got to axios", whichForm); + //console.log("api_root: ", BASE_URL); + return axios + .get( + WEBAPI_URL + + "systemforms?$select=formid,name,formxml,type,objecttypecode&$filter=(objecttypecode%20eq%20%27pinswg_" + + whichForm + + "%27and%20type%20eq%202)&$count=true", + azureHeaders + ) + .then((res) => res.data) + .catch((error) => { + console.log("thiserror", error); + }); +}; + +export const getMandatoryFields = (whichForm) => { + return axios + .get( + WEBAPI_URL + + "EntityDefinitions(LogicalName='pinswg_" + + whichForm + + "')/Attributes?$count=true&$select=LogicalName,RequiredLevel", + azureHeaders + ) + .then((res) => res.data) + .catch((error) => { + console.log("thiserror", error); + }); +}; + +export const getPickLists = (whichForm) => { + return axios + .get( + WEBAPI_URL + + "EntityDefinitions(LogicalName='pinswg_" + + whichForm + + "')/Attributes/Microsoft.Dynamics.CRM.PicklistAttributeMetadata?$select=LogicalName&$expand=OptionSet,GlobalOptionSet&$count=true", + azureHeaders + ) + .then((res) => res.data) + .catch((error) => { + console.log("thiserror", error); + }); }; export const getAppealsTypes = () => { - console.log("got to axios: appeal types"); - console.log("api_root: ", BASE_URL); return axios - .get(BASE_URL + "/api/lookups/pinswg_appealcasetype", { - httpsAgent: new https.Agent({ rejectUnauthorized: false }), - }) + .get( + WEBAPI_URL + + "stringmaps?$filter=attributename%20eq%20%27pinswg_appealcasetype%27&$count=true&$select=value,stringmapid,organizationid,attributevalue", + azureHeaders + ) .then((res) => res.data) .catch((error) => { console.log("thiserror", error); @@ -188,14 +309,9 @@ export const getAppealTypeDetail = (caseReference, appealcasetype) => { //https://devcrm2016.llcdt.gov.wales/DVPINS/api/data/v8.2/pinswg_planningappeals78s?$filter=pinswg_name eq 'CAS-00015-L7J9H1' export const getLPA = () => { - console.log("api_root: ", BASE_URL); + // console.log("api_root: ", BASE_URL); return axios - - .get( - BASE_URL + "/api/lookups/pinswg_lpa", - //.get("https://devcrm2016.llcdt.gov.wales/DVPINS/api/data/v8.2/accounts?$select=name", - { httpsAgent: new https.Agent({ rejectUnauthorized: false }) } - ) + .get(WEBAPI_URL + "accounts?$count=true&$select=name", azureHeaders) .then((res) => res.data) .catch((error) => { console.log("thi serror", error); @@ -217,99 +333,117 @@ export const getPersonalAccount = () => { }); }; -function makeid(length) { - var result = ""; - var characters = - "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789"; - var charactersLength = characters.length; - for (var i = 0; i < length; i++) { - result += characters.charAt( - Math.floor(Math.random() * charactersLength) - ); - } - return result; -} +export const getAppealID = ( + caseReference, + updateFormCollection, + primaryAttribute +) => { + const weburl = + "/api/proxy/" + + updateFormCollection + + "?$count=true&$select=_" + + primaryAttribute + + "s_value&$filter=pinswg_name eq '" + + caseReference + + "'"; -export const createCase = (lpaType, appealType) => { - console.log(); - - const lastPart = makeid(6); - - const middlePart = Math.floor(100000 + Math.random() * 900000); - - return "CAS-" + middlePart + "-" + lastPart.toUpperCase(); + console.log("proxy url", weburl); + return axios + .get(weburl, azureHeaders) + .then((res) => { + var appealID = res.data.value[0][primaryAttribute]; + return appealID; + }) + .catch((error) => { + console.log("thi serror", error); + }); }; -// var req = new XMLHttpRequest(); -// req.open("GET", Xrm.Page.context.getClientUrl() + "/api/data/v8.2/incidents?$select=_accountid_value,_customerid_value,pinswg_appealcasetype,statuscode,ticketnumber,title&$filter=contains(title, '000')&$count=true", true); -// req.setRequestHeader("OData-MaxVersion", "4.0"); -// req.setRequestHeader("OData-Version", "4.0"); -// req.setRequestHeader("Accept", "application/json"); -// req.setRequestHeader("Content-Type", "application/json; charset=utf-8"); -// req.setRequestHeader("Prefer", "odata.include-annotations=\"*\""); -// req.onreadystatechange = function() { -// if (this.readyState === 4) { -// req.onreadystatechange = null; -// if (this.status === 200) { -// var results = JSON.parse(this.response); -// var recordCount = results["@odata.count"]; -// for (var i = 0; i < results.value.length; i++) { -// var _accountid_value = results.value[i]["_accountid_value"]; -// var _accountid_value_formatted = results.value[i]["_accountid_value@OData.Community.Display.V1.FormattedValue"]; -// var _accountid_value_lookuplogicalname = results.value[i]["_accountid_value@Microsoft.Dynamics.CRM.lookuplogicalname"]; -// var _customerid_value = results.value[i]["_customerid_value"]; -// var _customerid_value_formatted = results.value[i]["_customerid_value@OData.Community.Display.V1.FormattedValue"]; -// var _customerid_value_lookuplogicalname = results.value[i]["_customerid_value@Microsoft.Dynamics.CRM.lookuplogicalname"]; -// var pinswg_appealcasetype = results.value[i]["pinswg_appealcasetype"]; -// var pinswg_appealcasetype_formatted = results.value[i]["pinswg_appealcasetype@OData.Community.Display.V1.FormattedValue"]; -// var statuscode = results.value[i]["statuscode"]; -// var ticketnumber = results.value[i]["ticketnumber"]; -// var title = results.value[i]["title"]; -// } -// } else { -// Xrm.Utility.alertDialog(this.statusText); -// } -// } -// }; -// req.send(); +export const createCase = (appealTypeId) => { + appealTypeId = parseInt(appealTypeId); + var data = JSON.stringify({ + "title": "insertion test case", + "customerid_contact@odata.bind": + "/contacts(f8b454ed-eded-eb11-aac7-00224800be9c)", + "pinswg_appealcasetype": appealTypeId, + }); -// //jquery version to get case number from an lpa and an appeal type -// var entity = {}; -// entity.caseorigincode = 3; -// entity["customerid_account@odata.bind"] = "/accounts(c75f6f84-49da-eb11-aabd-00224800d1bd)"; -// entity.pinswg_appealcasetype = 846040004; - -// $.ajax({ -// type: "POST", -// contentType: "application/json; charset=utf-8", -// datatype: "json", -// url: Xrm.Page.context.getClientUrl() + "/api/data/v8.2/incidents", -// data: JSON.stringify(entity), -// beforeSend: function(XMLHttpRequest) { -// XMLHttpRequest.setRequestHeader("OData-MaxVersion", "4.0"); -// XMLHttpRequest.setRequestHeader("OData-Version", "4.0"); -// XMLHttpRequest.setRequestHeader("Accept", "application/json"); -// XMLHttpRequest.setRequestHeader("Prefer", "odata.include-annotations=\"*\",return=representation"); -// }, -// async: true, -// success: function(data, textStatus, xhr) { -// var uri = xhr.getResponseHeader("OData-EntityId"); -// var regExp = /\(([^)]+)\)/; -// var matches = regExp.exec(uri); -// var newEntityId = matches[1]; -// //Handle returned attributes -// }, -// error: function(xhr, textStatus, errorThrown) { -// Xrm.Utility.alertDialog(textStatus + " " + errorThrown); -// } -// }); - -export const getMyCases = () => { - return axios - - .get(BASE_URL + "/api/lookups/myCases", { - httpsAgent: new https.Agent({ rejectUnauthorized: false }), + var config = { + method: "post", + url: WEBAPI_URL + "incidents", + headers: { + "OData-MaxVersion": "4.0", + "OData-Version": "4.0", + "Accept": "application/json", + "Prefer": 'odata.include-annotations="*",return=representation', + "Content-Type": "application/json", + "ServiceBusAuthorization": SASToken, + }, + data: data, + }; + // console.log(config); + return axios(config) + .then((res) => { + // console.log("posted ", res.data); + return res.data; }) + .catch((error) => { + console.log("this serror", error); + }); +}; + +export const updateCase = async ( + incidentId, + updateBody, + updateFormCollection, + primaryAttribute, + caseReference +) => { + var data = JSON.stringify(updateBody); + + var appealObj = await getAppealID( + caseReference, + updateFormCollection, + primaryAttribute + ); + + console.log("appeal obj ", appealObj); + + var config = { + method: "patch", + //url: WEBAPI_URL + updateFormCollection + "(" + incidentId + ")", + url: "/api/proxy/" + updateFormCollection + "(" + appealObj + ")", + headers: { + "OData-MaxVersion": "4.0", + "OData-Version": "4.0", + "Accept": "application/json", + "Prefer": 'odata.include-annotations="*",return=representation', + "Content-Type": "application/json", + "ServiceBusAuthorization": SASToken, + }, + data: data, + }; + + console.log(config); + return axios(config) + .then((res) => { + console.log("patched ", res.data); + return res.data; + }) + .catch((error) => { + console.log("thi serror", error); + }); +}; + +export const getMyCases = (loggedInUserId) => { + return axios + .get( + WEBAPI_URL + + "incidents?$select=ticketnumber,casetypecode,createdon,_customerid_value,description,incidentid,pinswg_appealcasetype,_pinswg_assignedinspectrids_value,statecode,statuscode,title&$filter=_customerid_value eq " + + loggedInUserId + + " and pinswg_appealcasetype ne null&$orderby=createdon desc&$count=true&$top=3", + azureHeaders + ) .then((res) => res.data) .catch((error) => { console.log("thi serror", error); @@ -317,33 +451,44 @@ export const getMyCases = () => { }; export const getMyRepresentations = () => { - return axios - - .get(BASE_URL + "/api/lookups/myRepresentations", { - httpsAgent: new https.Agent({ rejectUnauthorized: false }), - }) - .then((res) => res.data) - .catch((error) => { - console.log("thi serror", error); - }); + return ( + axios + // .get(BASE_URL + "/api/lookups/myRepresentations", { + // httpsAgent: new https.Agent({ rejectUnauthorized: false }), + // }) + .get( + WEBAPI_URL + + "incidents?$select=_accountid_value,_customerid_value,pinswg_appealcasetype,statuscode,ticketnumber,title, _primarycontactid_value&$expand=primarycontactid($select=fullname)&$filter=pinswg_appealcasetype ne null &$count=true&$top=3", + azureHeaders + ) + .then((res) => res.data) + .catch((error) => { + console.log("thi serror", error); + }) + ); }; export const getWatchedCases = () => { - return axios + return ( + axios - .get(BASE_URL + "/api/lookups/watchedCases", { - httpsAgent: new https.Agent({ rejectUnauthorized: false }), - }) - .then((res) => res.data) - .catch((error) => { - w; - console.log("thi serror", error); - }); + // .get(BASE_URL + "/api/lookups/watchedCases", { + // httpsAgent: new https.Agent({ rejectUnauthorized: false }), + // }) + .get( + WEBAPI_URL + + "incidents?$select=_accountid_value,_customerid_value,pinswg_appealcasetype,statuscode,ticketnumber,title, _primarycontactid_value&$expand=primarycontactid($select=fullname)&$filter=pinswg_appealcasetype ne null &$count=true&$top=3", + azureHeaders + ) + .then((res) => res.data) + .catch((error) => { + console.log("this serror", error); + }) + ); }; export const getAwaitingSubmission = () => { return axios - .get(BASE_URL + "/api/lookups/awaitingSubmission", { httpsAgent: new https.Agent({ rejectUnauthorized: false }), }) @@ -352,3 +497,19 @@ export const getAwaitingSubmission = () => { console.log("thi serror", error); }); }; + +export const getPortalModuelDetails = (appealType, caseReference) => { + return axios + .get( + WEBAPI_URL + + appealType + + "?$filter=pinswg_name eq '" + + caseReference + + "'&$count=true", + azureHeaders + ) + .then((res) => res.data) + .catch((error) => { + console.log("thiserror", error); + }); +}; diff --git a/components/breadcrumbs.js b/components/breadcrumbs.js index 3dd9a0b3..7b51b60a 100644 --- a/components/breadcrumbs.js +++ b/components/breadcrumbs.js @@ -69,17 +69,26 @@ const Breadcrumbs = (props) => { ) : ( "" )} - {router.pathname == "/searchresults" ? ( + {router.pathname == "/myportal/searchresults" ? ( <>