diff --git a/actions/index.js b/actions/index.js
index 015e296e..1ab22b86 100644
--- a/actions/index.js
+++ b/actions/index.js
@@ -13,6 +13,10 @@ if (process.browser) {
BASE_URL = process.env.API_ROOT || `http://localhost:${port}`;
}
+const WEBAPI_URL = "https://devcrm2016.llcdt.gov.wales/DVPINS";
+
+const API_PATH = "/api/data/v8.2/";
+
const agent = new https.Agent({
rejectUnauthorized: false,
});
@@ -24,11 +28,8 @@ const crmHeaders = {
"OData-Version": "4.0",
"Accept": "application/json",
"Prefer": 'odata.include-annotations="*"',
- agent,
- },
- auth: {
- username: "xm\bondr",
- password: "!Sky9fish1972",
+ "Authorization":
+ "Bearer eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiIsIng1dCI6IlVXelVaa0U3OEx0NVBGRkJ0LV9seVdoMjdjTSIsImtpZCI6IlVXelVaa0U3OEx0NVBGRkJ0LV9seVdoMjdjTSJ9.eyJhdWQiOiJodHRwczovL2RldmNybTIwMTYubGxjZHQuZ292LndhbGVzLyIsImlzcyI6Imh0dHA6Ly9mcy50ZXN0Lmdvdi53YWxlcy9hZGZzL3NlcnZpY2VzL3RydXN0IiwiaWF0IjoxNjMxMDAwMjUxLCJuYmYiOjE2MzEwMDAyNTEsImV4cCI6MTYzMTAyOTA1MSwidXBuIjpbIlJvYmVydC5Cb25kQHRlc3QuZ292LndhbGVzIiwicm9iZXJ0LmJvbmRAdGVzdC5nb3Yud2FsZXMiXSwicHJpbWFyeXNpZCI6IlMtMS01LTIxLTE4MDA4NDIwNzYtMjQ1NTYwNjU5LTQyMTU3NzU0NjktMTY2MjgiLCJ1bmlxdWVfbmFtZSI6IlhNXFxCb25kUiIsImFwcHR5cGUiOiJQdWJsaWMiLCJhcHBpZCI6IjQyN2ZhNzljLWI1ZmMtNDJhZC04M2Q0LTQxMGIwMzk0OGFiNiIsImF1dGhtZXRob2QiOiJodHRwOi8vc2NoZW1hcy5taWNyb3NvZnQuY29tL3dzLzIwMDgvMDYvaWRlbnRpdHkvYXV0aGVudGljYXRpb25tZXRob2Qvd2luZG93cyIsImF1dGhfdGltZSI6IjIwMjEtMDktMDdUMDc6Mzc6MjIuMzM3WiIsInZlciI6IjEuMCJ9.L8husDSMXMtZxpxKDS0cpPplG6xoHQjSdd17qMfgKZaEUPUOKPy4rznxNwAMp7WxussNeK__nOKE9vHNgc5Nk4lzxbvcYy3jeE7bLWHsB5UYFa1FIrPZpzuEdPIgoWAzhTa4k-anzsA0YNMHpV6QHT14F9wkBTsT8MUtpT2BiNfbflQQ_xtQavp_pCww-1-guysM6USv5NJkuvrHpXjA5_HpaGbprLI8Or3Htjsdgq9c4uCxfjoAGZsjUmtvaIL-jQnkR6-ndYezo12tes7ql2iV4iZT4-fvcib8sUdzHkgFvNmyzMblhogUo8QciTBcvF7-syCfNzLG2vvWSZJ9_g",
},
};
@@ -39,9 +40,17 @@ export const getBasicSearch = (searchString) => {
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 }),
- })
+ // .get(BASE_URL + "/api/searchresults2", {
+ // httpsAgent: new https.Agent({ rejectUnauthorized: false }),
+ // })
+ .get(
+ WEBAPI_URL +
+ API_PATH +
+ "incidents?$select=_accountid_value,_customerid_value,pinswg_appealcasetype,statuscode,ticketnumber,title&$filter=contains(title, '" +
+ searchString +
+ "')&$count=true",
+ crmHeaders
+ )
.then((res) => res.data)
.catch((error) => {
console.log("thiserror", error);
@@ -49,6 +58,24 @@ export const getBasicSearch = (searchString) => {
);
};
+export const getBasicSearchDetails = (appealType, caseReference) => {
+ return axios
+ .get(
+ WEBAPI_URL +
+ API_PATH +
+ "/pinswg_ " +
+ appealType +
+ "?$filter=pinswg_name eq '" +
+ caseReference +
+ "'&$count=true",
+ crmHeaders
+ )
+ .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);
@@ -62,9 +89,18 @@ export const getFormData = (whichForm) => {
//.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 }),
- })
+ // .get(BASE_URL + "/api/appealforms/pinswg_" + whichForm, {
+ // httpsAgent: new https.Agent({ rejectUnauthorized: false }),
+ // })
+
+ .get(
+ WEBAPI_URL +
+ API_PATH +
+ "systemforms?$select=formid,name,formxml,type,objecttypecode&$filter=(objecttypecode%20eq%20%27pinswg_" +
+ whichForm +
+ "%27and%20type%20eq%202)&$count=true",
+ crmHeaders
+ )
.then((res) => res.data)
.catch((error) => {
console.log("thiserror", error);
@@ -72,19 +108,59 @@ export const getFormData = (whichForm) => {
);
};
-export const getAppealsTypes = () => {
- console.log("got to axios: appeal types");
- console.log("api_root: ", BASE_URL);
+export const getMandatoryFields = (whichForm) => {
return axios
- .get(BASE_URL + "/api/lookups/pinswg_appealcasetype", {
- httpsAgent: new https.Agent({ rejectUnauthorized: false }),
- })
+ .get(
+ WEBAPI_URL +
+ API_PATH +
+ "EntityDefinitions(LogicalName='pinswg_" +
+ whichForm +
+ "')/Attributes?$count=true&$select=LogicalName,RequiredLevel",
+ crmHeaders
+ )
.then((res) => res.data)
.catch((error) => {
console.log("thiserror", error);
});
};
+export const getPickLists = (whichForm) => {
+ return axios
+ .get(
+ WEBAPI_URL +
+ API_PATH +
+ "EntityDefinitions(LogicalName='pinswg_" +
+ whichForm +
+ "')/Attributes/Microsoft.Dynamics.CRM.PicklistAttributeMetadata?$select=LogicalName&$expand=OptionSet,GlobalOptionSet&$count=true",
+ crmHeaders
+ )
+ .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 +
+ API_PATH +
+ "stringmaps?$filter=attributename%20eq%20%27pinswg_appealcasetype%27&$count=true&$select=value,stringmapid,organizationid,attributevalue",
+ crmHeaders
+ )
+ .then((res) => res.data)
+ .catch((error) => {
+ console.log("thiserror", error);
+ })
+ );
+};
+
export const getBasicSearch2 = (searchString) => {
var req = new XMLHttpRequest();
req.open(
@@ -189,17 +265,23 @@ export const getAppealTypeDetail = (caseReference, appealcasetype) => {
export const getLPA = () => {
console.log("api_root: ", BASE_URL);
- return axios
+ 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 }) }
- )
- .then((res) => res.data)
- .catch((error) => {
- console.log("thi serror", error);
- });
+ // .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 + API_PATH + "accounts?$count=true&$select=name",
+ crmHeaders
+ )
+ .then((res) => res.data)
+ .catch((error) => {
+ console.log("thi serror", error);
+ })
+ );
};
export const getPersonalAccount = () => {
diff --git a/components/elements/index.js b/components/elements/index.js
index 60e6afe2..207c2036 100644
--- a/components/elements/index.js
+++ b/components/elements/index.js
@@ -5,6 +5,7 @@ import DatePicker from "react-datepicker";
import React, { useState } from "react";
import "react-datepicker/dist/react-datepicker.css";
import moment from "moment";
+import jsonpath from "jsonpath";
const RenderTextfield = ({
id,
@@ -356,35 +357,17 @@ export function YesNofield(props) {
const RenderPickList = ({
datafieldname,
+ picklistData,
name,
label,
input,
meta: { touched, errorStr },
}) => {
- const fetcher = (url) => fetch(url).then((res) => res.json());
-
- const { data, error } = useSWR("/api/lookups/" + datafieldname, fetcher);
- if (error)
- return (
-
-
-
-
- );
- if (!data)
- return (
-
- );
- //console.log(JSON.stringify(data.GlobalOptionSet.Options));
-
- const dropdownObj = data.GlobalOptionSet.Options;
-
+ var dropdownObj = jsonpath.query(
+ picklistData,
+ "$..value[?(@.LogicalName=='" + datafieldname + "')]..Options"
+ );
+ dropdownObj = dropdownObj[0];
return (
);
diff --git a/components/newappeal/buildcheckrow.js b/components/newappeal/buildcheckrow.js
index 6eda3f21..f69218d9 100644
--- a/components/newappeal/buildcheckrow.js
+++ b/components/newappeal/buildcheckrow.js
@@ -56,44 +56,48 @@ let BuildCheckRow = (props) => {
rowXML[key].outerHTML,
"text/xml"
);
- var rows = xpath.select("//label/@description", doc);
- var fieldtype = xpath.select("//@classid", doc);
- var datafieldname = xpath.select("//@datafieldname", doc);
+ if (_.isEmpty(rowXML[key].innerHTML)) {
+ ("");
+ } else {
+ var rows = xpath.select("//label/@description", doc);
+ var fieldtype = xpath.select("//@classid", doc);
+ var datafieldname = xpath.select("//@datafieldname", doc);
- return (
-
+ );
+ }
})}
>
);
diff --git a/components/newappeal/buildfield.js b/components/newappeal/buildfield.js
index 520749ee..5d1af269 100644
--- a/components/newappeal/buildfield.js
+++ b/components/newappeal/buildfield.js
@@ -41,6 +41,7 @@ export default function BuildField(props) {
name={props.datafieldname}
label={props.label}
datafieldname={props.datafieldname}
+ picklistData={props.picklistData}
/>
);
break;
diff --git a/components/newappeal/buildrow.js b/components/newappeal/buildrow.js
index f5211c4e..458a6e75 100644
--- a/components/newappeal/buildrow.js
+++ b/components/newappeal/buildrow.js
@@ -1,4 +1,5 @@
import Link from "next/link";
+import _ from "lodash";
import { useRouter } from "next/router";
import useTranslation from "next-translate/useTranslation";
import xpath from "xpath";
@@ -21,18 +22,25 @@ export default function BuildRow(props) {
rowXML[key].outerHTML,
"text/xml"
);
- var rows = xpath.select("//label/@description", doc);
- var fieldtype = xpath.select("//@classid", doc);
- var datafieldname = xpath.select("//@datafieldname", doc);
- return (
-
- );
+ if (_.isEmpty(rowXML[key].innerHTML)) {
+ ("");
+ } else {
+ var rows = xpath.select("//label/@description", doc);
+ var fieldtype = xpath.select("//@classid", doc);
+ var datafieldname = xpath.select("//@datafieldname", doc);
+ return (
+
+ );
+ }
})}
);
diff --git a/components/newappeal/createCase.js b/components/newappeal/createCase.js
index 5450063b..27089b62 100644
--- a/components/newappeal/createCase.js
+++ b/components/newappeal/createCase.js
@@ -33,11 +33,9 @@ let CreateCase = (props) => {
? [{}]
: _.isEmpty(props.appealType.appealTypeOptions)
? [{}]
- : _.isEmpty(props.appealType.appealTypeOptions.GlobalOptionSet)
+ : _.isEmpty(props.appealType.appealTypeOptions.value)
? [{}]
- : _.isEmpty(props.appealType.appealTypeOptions.GlobalOptionSet.Options)
- ? [{}]
- : props.appealType.appealTypeOptions.GlobalOptionSet.Options;
+ : props.appealType.appealTypeOptions.value;
let lpaOptionsObj = _.isEmpty(props)
? [{}]
@@ -158,51 +156,34 @@ let CreateCase = (props) => {
);
})}
diff --git a/pages/newappeal/[appealtypes].js b/pages/newappeal/[appealtypes].js
index 544b1835..878a412b 100644
--- a/pages/newappeal/[appealtypes].js
+++ b/pages/newappeal/[appealtypes].js
@@ -22,7 +22,13 @@ import {
setCaseReference,
} from "../../store/appealType/action";
import { setForm, getFormObj } from "../../store/formData/action";
-import { getFormData, getAppealsTypes, createCase } from "../../actions";
+import {
+ getFormData,
+ getAppealsTypes,
+ getMandatoryFields,
+ createCase,
+ getPickLists,
+} from "../../actions";
import xpath from "xpath";
import { reduxForm, FormName } from "redux-form";
@@ -56,12 +62,9 @@ let Home = (props) => {
var tabs = xpath.select("//form/tabs/tab[*]", doc);
- let optionsStr = props.appealType.appealTypeOptions.GlobalOptionSet.Options;
+ let optionsStr = props.appealType.appealTypeOptions.value;
- let selectedObj = jsonpath.query(
- optionsStr,
- "$..LocalizedLabels[?(@.Label)].Label"
- );
+ let selectedObj = jsonpath.query(optionsStr, "$..value");
//let optionsTitleObj = [];
@@ -154,8 +157,15 @@ export const getServerSideProps = wrapper.getServerSideProps(
(store) =>
async ({ query, req, res }) => {
//console.log("the query", query);
- const [appealTypeData, formdata] = await Promise.all([
+ const [
+ appealTypeData,
+ mandatoryFieldsData,
+ pickListData,
+ formdata,
+ ] = await Promise.all([
await getAppealsTypes(),
+ await getMandatoryFields(query.appealtypes),
+ await getPickLists(query.appealtypes),
await getFormData(query.appealtypes),
]);
@@ -166,7 +176,7 @@ export const getServerSideProps = wrapper.getServerSideProps(
xmlStr = xmlStr.replace(/\\"/g, "");
store.dispatch(setAppealTypeID(query.appealtypes));
store.dispatch(setCaseReference(caseReference));
- store.dispatch(setForm(xmlStr));
+ store.dispatch(setForm(xmlStr, mandatoryFieldsData, pickListData));
store.dispatch(setAppealType(appealTypeData));
}
);
diff --git a/pages/searchresults.js b/pages/searchresults.js
index 5d3b4082..da9d1d07 100644
--- a/pages/searchresults.js
+++ b/pages/searchresults.js
@@ -19,7 +19,7 @@ import {
setSearchResults,
getSearchResultsObj,
} from "../store/searchOutput/action";
-import { getBasicSearch } from "../actions";
+import { getBasicSearch, getBasicSearchDetails } from "../actions";
const Home = (props) => {
const { footerLinks, pages } = props;
@@ -57,8 +57,13 @@ export const getServerSideProps = wrapper.getServerSideProps(
(store) =>
async ({ query, req, res }) => {
console.log("query-", query);
- const searchResultsObj = (await getBasicSearch(query.q)) || null;
+ const [searchResultsObj, searchDetailsObj] = await Promise.all(
+ await getBasicSearch(query.q),
+ await getBasicSearchDetails(query.d)
+ );
+
store.dispatch(setSearchResults(searchResultsObj));
+ store.dispatch(setSearchDetails(searchDetailsObj));
store.dispatch(setSearch(query.q));
}
);
diff --git a/store/formData/action.js b/store/formData/action.js
index 24fce71e..7f990954 100644
--- a/store/formData/action.js
+++ b/store/formData/action.js
@@ -10,9 +10,12 @@ export const getFormObj = () => (dispatch) => {
});
};
-export const setForm = (formData) => (dispatch) => {
- return dispatch({
- type: formDataActionTypes.SETFORMDATA,
- formData: formData,
- });
-};
+export const setForm =
+ (formData, mandatoryFieldsData, pickListData) => (dispatch) => {
+ return dispatch({
+ type: formDataActionTypes.SETFORMDATA,
+ formData: formData,
+ mandatoryFieldsData: mandatoryFieldsData,
+ pickListData: pickListData,
+ });
+ };
diff --git a/store/formData/reducer.js b/store/formData/reducer.js
index 0617d82f..b36356ac 100644
--- a/store/formData/reducer.js
+++ b/store/formData/reducer.js
@@ -2,6 +2,8 @@ import { formDataActionTypes } from "./action";
const formDataInitialState = {
formData: {},
+ mandatoryFieldsData: {},
+ pickListData: {},
};
export default function reducer(state = formDataInitialState, action) {
@@ -9,6 +11,8 @@ export default function reducer(state = formDataInitialState, action) {
case formDataActionTypes.SETFORMDATA:
return {
formData: action.formData,
+ mandatoryFieldsData: action.mandatoryFieldsData,
+ pickListData: action.pickListData,
};
default:
return state;
diff --git a/store/searchOutput/action.js b/store/searchOutput/action.js
index 9e4e57bd..d357357e 100644
--- a/store/searchOutput/action.js
+++ b/store/searchOutput/action.js
@@ -2,6 +2,7 @@ export const searchResultsActionTypes = {
GETSEARCHRESULTS: "GETSEARCHRESULTS",
SETSEARCHRESULTS: "SETSEARCHRESULTS",
UPDATESEARCHRESULTS: "UPDATESEARCHRESULTS",
+ SETSEARCHDETAILS: "SETSEARCHDETAILS",
};
export const getSearchResultshObj = () => (dispatch) => {
@@ -16,3 +17,10 @@ export const setSearchResults = (searchResults) => (dispatch) => {
searchResultsObj: searchResults,
});
};
+
+export const setSearchDetails = (searchDetails) => (dispatch) => {
+ return dispatch({
+ type: searchResultsActionTypes.SETSEARCHDETAILS,
+ searchDetailsObj: searchDetails,
+ });
+};
diff --git a/store/searchOutput/reducer.js b/store/searchOutput/reducer.js
index 16a7e104..7f66cbbe 100644
--- a/store/searchOutput/reducer.js
+++ b/store/searchOutput/reducer.js
@@ -2,14 +2,21 @@ import { searchResultsActionTypes } from "./action";
const searchResultsInitialState = {
searchResultsObj: {},
+ searchDetailsObj: {},
};
export default function reducer(state = searchResultsInitialState, action) {
switch (action.type) {
case searchResultsActionTypes.SETSEARCHRESULTS:
return {
+ ...state,
searchResultsObj: action.searchResultsObj,
};
+ case searchResultsActionTypes.SETSEARCHDETAILS:
+ return {
+ ...state,
+ searchDetailsObj: action.searchDetailsObj,
+ };
default:
return state;
}