{"version":3,"sources":["UserContext.ts","authconfig.ts","Constants.tsx","components/Home.tsx","Enums.ts","components/Navmenu.tsx","components/Footer.tsx","Layout.tsx","api/agent.ts","components/LoadingComponent.tsx","components/Alert.tsx","components/HubChart.tsx","components/PTPChart.tsx","components/UserHome.tsx","components/DuplicateFeeReport.tsx","components/FeeReport.tsx","components/CreateFeeReport.tsx","components/theme.tsx","components/PTPDeviceLog.tsx","components/CreateDeviceLog.tsx","App.tsx","reportWebVitals.ts","index.tsx"],"names":["UserContext","createContext","user","userId","firstName","lastName","email","username","companyId","subCompanyId","companyName","subCompanyName","userType","setUser","b2cPolicies","signUpSignIn","forgotPassword","editProfile","authority","msalConfig","auth","clientId","knownAuthorities","redirectUri","process","AZURE_AD_REDIRECT_URI","postLogoutRedirectUri","navigateToLoginRequestUrl","cache","cacheLocation","storeAuthStateInCookie","system","loggerOptions","loggerCallback","level","message","containsPii","LogLevel","Error","console","error","Info","info","Verbose","debug","Warning","warn","loginRequest","scopes","protectedResources","apiNPLTime","NPLTime","style","fontWeight","NPLTimeText","NPLTimeAccess","NPLTimeCertified","DigitalStaticURL","Home","Grid","className","item","xs","src","alt","width","id","eFeeReportStatus","eUserType","NavMenu","props","loginLinks","useMsal","instance","accounts","React","User","Admin","NPLAdmin","log","Link","href","onClick","logoutRedirect","NavLinks","loginRedirect","AppBar","position","background","height","Toolbar","Typography","variant","Box","sx","marginLeft","name","Footer","Container","fixed","container","rel","target","Date","getFullYear","Layout","account","useAccount","undefined","SubLayout","children","axios","defaults","baseURL","responseBody","response","data","requests","url","accessToken","get","headers","then","method","responseType","body","post","put","delete","agent","time","GetTimeData","filter","downloadPDF","year","month","GetHubAvailabilityData","GetPTPData","endpoint","location","distributorId","fileId","deviceLog","GetAllLogs","distributor","create","details","Update","values","all","report","createfee","getReport","filters","getDistributions","getLocations","distributionId","getLocationEndpoints","locationId","duplicateFeeReport","duplicateQuarter","deleteReport","submitReports","useStyles","makeStyles","theme","createStyles","root","top","left","transform","LoadingComponent","classes","CircularProgress","AlertDialog","open","onClose","handleClose","messageType","Dialog","DialogContent","DialogContentText","title","listStyleType","DialogActions","Button","color","DialogTitle","HubChart","useState","datasets","setDataSets","loading","setLoading","GetGraph","useCallback","acquireTokenSilent","resp","dataDaisy1","dataDaisy2","dataTele1","dataTele2","forEach","e","label","push","timestamp","value1","value2","hcConf","ptpData","ppsData","dsc","i","length","text","series","type","xAxis","labels","format","yAxis","tooltip","formatter","xVal","this","x","Highcharts","dateFormat","y","chart","zoomType","credits","enabled","useEffect","Boost","spacing","md","Paper","elevation","display","justifyContent","alignItems","highcharts","options","PTPChart","datasetsHC","setDataSetsHC","loadingState","setLoadingState","errorState","setErrorState","locations","setLocations","file","localAccountId","chartTitle","find","chartType","value","l","initialValues","getMonth","distribution","UserHome","stitle","useContext","years","fileInfoText","setFileInfoText","fileInfoTitle","setFileInfoTitle","distributions","setDistributions","endpoints","setEndpoints","selectedDistribution","setSelectedDistribution","selectedLocation","setSelectedLocation","selectedEndpoint","setSelectedEndpoint","selectedFile","setSelectedFile","document","itemData","setItemData","currentYear","toString","ShowFileTypeInfo","setAlertProps","alertValues","ShowLocationInfo","ShowEndpointInfo","alertProps","setYear","setMonth","reportValidationSchema","object","number","required","min","max","handleLocationChange","event","handleDistributionChange","handleEndpointChange","handleFileIDChange","onYearChange","onMonthChange","imageList","imageURLs","webPage","AccessUser","validationSchema","enableReinitialize","onSubmit","formikHelpers","setSubmitting","errors","touched","isSubmitting","marginBottom","FormGroup","as","TextField","select","onChange","helperText","map","key","disabled","endPoint","fullWidth","component","fontSize","Accordion","marginTop","AccordionSummary","expandIcon","AccordionDetails","my","DuplicateFeeReportDialog","onUpdateGrid","periods","completed","setCompleted","UpdateGrid","duplicateReport","fromYear","fromQuarter","toYear","toQuarter","res","period","FeeReportComponent","feeReports","setFeeReports","navigate","useHistory","filterValues","customerType","quarter","setFilters","setCustomerType","setQuarter","total","setTotal","setOpen","isSubmitted","setIsSubmitted","GetFeeReport","feeReportResponse","status","parseInt","Submitted","finalTotal","DuplicateFeeReport","FeeReportId","reportId","GetReport","DeleteFeeReport","columnsCoLocCustomer","field","flex","headerName","renderHeader","params","Tooltip","renderCell","toLocaleString","readonly","getValue","size","documentId","columnsEnterpriseCustomer","setValue","tableStyling","maxHeight","overflow","lineHeight","whiteSpace","handleSelect","FormControl","minWidth","InputLabel","Select","labelId","MenuItem","FormLabel","RadioGroup","FormControlLabel","control","Radio","rowHeight","getRowId","row","rows","columns","pagination","components","alert","distributorIDs","CreateFeeReport","setDistributor","selectedCustomerType","setSelectedCustomerType","search","useLocation","dataSaved","setDataSaved","feeReportId","URLSearchParams","distributorName","customerName","numberOfPorts","numberOfCertifiedEndPointDevices","numberOfSecondaryDistributionPoints","mrc","distributorOrderNumber","firstBillingMonth","monthlyNPLFee","numberOfMonths","totalFeeForEndpointDevices","totalFeeForRedistributionPoints","feeReport","setFeeReport","feeReportValidationSchema","shape","string","when","is","billingDate","date","includes","dist","ICE","a","token","feeReportModel","slice","handoverDate","cancellationDate","to","pathname","InputProps","startAdornment","InputAdornment","createTheme","palette","primary","main","secondary","typography","fontFamily","borderRadius","overrides","MuiButton","textTransform","padding","maxWidth","margin","MuiCheckbox","disableRipple","MuiTextField","InputLabelProps","shrink","MuiPaper","MuiCard","PTPDeviceLogHome","pageName","deviceLogs","setDeviceLogs","distributors","setDistributors","selectedDistributor","setSelectedDistributor","selectedEndPoint","setSelectedEndPoint","GetLogs","allLogs","dt","toLocaleDateString","toLocaleTimeString","hide","LogID","CreateDeviceLog","deviceId","endpointName","dataPointType","comments","logNumber","distributorRef","setDeviceLog","deviceLogValidationSchema","deviceLogModels","deviceLogModel","App","GetUserData","Promise","resolve","reject","getAllAccounts","userDataResponse","catch","err","logout","callbackId","addEventCallback","eventType","EventType","LOGIN_FAILURE","errorMessage","indexOf","LOGIN_SUCCESS","ACQUIRE_TOKEN_SUCCESS","user1","payload","idTokenClaims","window","removeEventCallback","Provider","ThemeProvider","exact","path","reportWebVitals","onPerfEntry","Function","getCLS","getFID","getFCP","getLCP","getTTFB","msalInstance","PublicClientApplication","ReactDOM","render","StrictMode","getElementById"],"mappings":"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","file":"static/js/main.103c4521.chunk.js","sourcesContent":["import { createContext } from \"react\";\nimport { NPLTimeUser } from \"./models/NPLTimeUser\";\n\n\nexport type GlobalContent = {\n user: NPLTimeUser,\n setUser:(user: NPLTimeUser) => void\n }\n\n export const UserContext = createContext( {\n user: {\n userId: '',\n firstName: '',\n lastName: '',\n email: '',\n username: '',\n companyId: 0,\n subCompanyId: 0,\n companyName: '',\n subCompanyName: '',\n userType: 0,\n \n },\n setUser: (user: NPLTimeUser) => {},\n });\n\n\n// export const UserGlobalContext = () => useContext(UserContext)\n","/*\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License.\n */\n\nimport { LogLevel } from \"@azure/msal-browser\";\n\n/**\n * Enter here the user flows and custom policies for your B2C application\n * To learn more about user flows, visit: https://docs.microsoft.com/en-us/azure/active-directory-b2c/user-flow-overview\n * To learn more about custom policies, visit: https://docs.microsoft.com/en-us/azure/active-directory-b2c/custom-policy-overview\n */\nexport const b2cPolicies = {\n names: {\n signUpSignIn: \"B2C_1_signup_signin_1\",\n forgotPassword: \"B2C_1_b2c_reset_password\",\n editProfile: \"B2C_1_b2c_profileedit\"\n },\n authorities: {\n signUpSignIn: {\n authority: \"https://nplb2c.b2clogin.com/nplb2c.onmicrosoft.com/B2C_1_signup_signin_1\",\n },\n forgotPassword: {\n authority: \"https://nplb2c.b2clogin.com/nplb2c.onmicrosoft.com/B2C_1_b2c_reset_password\",\n },\n editProfile: {\n authority: \"https://nplb2c.b2clogin.com/nplb2c.onmicrosoft.com/B2C_1_b2c_profileedit\"\n }\n },\n authorityDomain: \"nplb2c.b2clogin.com\"\n}\n\nexport const forgotPassword = {\n redirectUri: '/',\n authority: \"https://nplb2c.b2clogin.com/nplb2c.onmicrosoft.com/B2C_1_b2c_reset_password\"\n}\n\n\n/**\n * Configuration object to be passed to MSAL instance on creation. \n * For a full list of MSAL.js configuration parameters, visit:\n * https://github.com/AzureAD/microsoft-authentication-library-for-js/blob/dev/lib/msal-browser/docs/configuration.md \n */\nexport const msalConfig = {\n auth: {\n clientId: \"4337951a-a56a-46bb-bb6a-69995adf18b4\", // This is the ONLY mandatory field that you need to supply.\n authority: b2cPolicies.authorities.signUpSignIn.authority, // Choose SUSI as your default authority.\n knownAuthorities: [b2cPolicies.authorityDomain], // Mark your B2C tenant's domain as trusted.\n redirectUri: process.env.AZURE_AD_REDIRECT_URI, // You must register this URI on Azure Portal/App Registration. Defaults to window.location.origin\n postLogoutRedirectUri: \"/\", // Indicates the page to navigate after logout.\n navigateToLoginRequestUrl: false, // If \"true\", will navigate back to the original request location before processing the auth code response.\n },\n cache: {\n cacheLocation: \"sessionStorage\", // Configures cache location. \"sessionStorage\" is more secure, but \"localStorage\" gives you SSO between tabs.\n storeAuthStateInCookie: false, // Set this to \"true\" if you are having issues on IE11 or Edge\n },\n system: {\n loggerOptions: {\n loggerCallback: (level :any, message:any, containsPii: any) => {\n if (containsPii) {\n return;\n }\n switch (level) {\n case LogLevel.Error:\n console.error(message);\n return;\n case LogLevel.Info:\n console.info(message);\n return;\n case LogLevel.Verbose:\n console.debug(message);\n return;\n case LogLevel.Warning:\n console.warn(message);\n return;\n }\n }\n }\n }\n};\n\n/**\n * Scopes you add here will be prompted for user consent during sign-in.\n * By default, MSAL.js will add OIDC scopes (openid, profile, email) to any login request.\n * For more information about OIDC scopes, visit: \n * https://docs.microsoft.com/en-us/azure/active-directory/develop/v2-permissions-and-consent#openid-connect-scopes\n */\nexport const loginRequest = {\n scopes: [\"https://fabrikamb2c.onmicrosoft.com/helloapi/demo.read\"]\n};\n\n/**\n * Add here the endpoints and scopes when obtaining an access token for protected web APIs. For more information, see:\n * https://github.com/AzureAD/microsoft-authentication-library-for-js/blob/dev/lib/msal-browser/docs/resources-and-scopes.md\n */\nexport const protectedResources = {\n apiNPLTime: {\n //endpoint: \"http://localhost:5000/hello\",\n scopes: [\"https://nplb2c.onmicrosoft.com/b2244454-8ec4-4af4-ace3-37c0ab6e4753/data.access\"], // e.g. api://xxxxxx/access_as_user\n },\n}\n","const NPLTime = (<>NPLTime);\nexport const NPLTimeText = () => (<>{NPLTime}®);\nexport const NPLTimeAccess = () => (<>{NPLTime} Access®);\nexport const NPLTimeCertified = () => (<>{NPLTime} Certified®);\n\nexport const DigitalStaticURL = \"https://nplstdigitalprod.blob.core.windows.net/npl-st-static-prod\";\n","import { Grid } from '@material-ui/core';\nimport { DigitalStaticURL, NPLTimeText } from '../Constants';\nimport '../css/application.css';\nimport '../css/site.css';\n\nexport default function Home() {\n return \n \n \"\"\n
\n services by NPL offer access to terrestrial, UTC-traceable and resilient timing signals to help users across\n multiple sectors meet their timing requirements\n
\n
\n
\n}\n","export enum eFeeReportStatus {\n New = 0,\n Submitted = 99\n}\n\nexport enum eUserType {\n User = 1,\n Admin = 2,\n AccessUser = 3,\n NPLAdmin = 999\n}\n","import * as React from 'react';\nimport '../css/navbar.css';\n//import { AuthContext } from '../AzureADB2C/auth-context'\nimport {AppBar, Box, Toolbar, Typography, Link} from \"@material-ui/core\"\n\nimport { AuthenticatedTemplate, UnauthenticatedTemplate, useMsal } from '@azure/msal-react';\nimport { loginRequest } from '../authconfig';\nimport '../css/site.css';\nimport { UserContext } from '../UserContext';\nimport { eUserType } from '../Enums';\nimport { DigitalStaticURL, NPLTimeText } from '../Constants';\n\n// function ListItemLink(props: any) {\n// return ;\n// }\n\nfunction NavMenu(props: any) {\n\n const { instance, accounts } = useMsal();\n \n // const account = useAccount(accounts[0] || {}) || undefined;\n const { user } = React.useContext(UserContext);\n \n // const[IsAdmin, setIsAdmin] = React.useState(false);\n let loginLinks; \n\n if(user.userType === eUserType.User || user.userType === eUserType.Admin || user.userType === eUserType.NPLAdmin) {\n console.log(\"inside is admin in navmenu\");\n loginLinks = \n }\n else\n {\n loginLinks = \n }\n\n \n\n\n \n const NavLinks = (\n
\n \n \n {loginLinks}\n \n\n \n
    \n
  • Home
  • \n
  • \n
\n
\n
\n );\n\n return (\n
\n \n \n \n \n \"NPL \n \n \n\n {user.userType === eUserType.User || user.userType === eUserType.Admin || user.userType === eUserType.NPLAdmin ?\n \n Welcome {accounts[0]?.name}\n \n : null}\n\n {NavLinks}\n \n \n \n\n \n {/* sx={{\n top: 56,\n left: 0, \n width: 1980,\n height: 201,\n background: '#E5F5FC 0% 0% no-repeat padding-box';\n opacity: 1;\n // bgcolor: 'primary.dark',\n // '&:hover': {\n // backgroundColor: 'primary.main',\n // opacity: 1,\n // },\n }}\n /> */}\n \n
\n\n );\n \n}\n\n//NavMenu.contextType = AuthContext;\n\nexport default NavMenu;\n\n\n\n\n","import * as React from 'react'\nimport { Box, Container, Grid } from \"@material-ui/core\";\nimport '../css/site.css'\nimport { DigitalStaticURL } from '../Constants';\n\nexport function Footer() {\n return \n \n \n
\"NPL
\n \n
Support
\n
\n \n
\n
\n \n
Useful Links
\n \n
\n \n \n \n \n
© National Physical Laboratory {new Date().getFullYear()}
\n
National Physical Laboratory\n
Hampton Road\n
Teddington\n
Middlesex\n
TW11 0LW\n
Tel: 020 8977 3222
\n \n
\n \n
\n
\n
\n \n}\n","import { AuthenticatedTemplate, UnauthenticatedTemplate, useAccount, useMsal } from \"@azure/msal-react\";\nimport Home from './components/Home';\nimport NavMenu from './components/Navmenu';\nimport './css/site.css';\nimport { Footer } from './components/Footer';\n\nfunction Layout(props: any) {\n const { accounts } = useMsal();\n \n const account = useAccount(accounts[0] || {}) || undefined;\n \n //const account = accounts[0];\n console.log(\"account:\" + account);\n console.log(props);\n // const { user, setUser } = useContext(UserContext);\n \n \n // React.useEffect(() => {\n // console.log(user);\n // if(account)\n // {\n // console.log(\"inside account\")\n // instance.acquireTokenSilent({\n // scopes: protectedResources.apiNPLTime.scopes,\n // account: account\n // }).then((response) => {\n // agent.user.details(account.localAccountId, response.accessToken) //get a list of all pure components(pure and mixed), \n // .then(userDataResponse => {\n // console.log(userDataResponse);\n // //if(userDataResponse.userType === 999)\n // //{\n // setUser(userDataResponse);\n // // }\n // })\n // }); \n // }\n // }, []);\n\n \n \n \n console.log(\"child:\" + props);\n let SubLayout =
\n \n \n \n \n \n \n \n {props.children}\n \n
;\n \n \n \n return (\n
\n \n \n {SubLayout} \n \n
\n
\n );\n }\n \n \n //Layout.contextType = AuthContext;\n export default Layout;\n ","import axios, { AxiosResponse } from 'axios';\nimport { NPLTimeUser } from '../models/NPLTimeUser';\nimport { DataFilter, Distribution, feeReportFilter, Location, LocationEndPoint } from '../models/filter';\nimport { FeeReport } from '../models/FeeReport';\nimport {DuplicateReport} from '../models/DuplicateReport';\nimport { PTPChartData, TimeChartData } from '../models/ChartData';\nimport { PTPDeviceLog } from '../models/PTPDeviceLog';\n\naxios.defaults.baseURL = process.env.REACT_APP_API_URL; //'https://localhost:44327/api';\n\nconst responseBody = (response: AxiosResponse) => response.data;\n\nconst requests = {\n get: (url: string) => axios.get(url).then(responseBody),\n getWithToken: (url: string, accessToken: string) => axios.get(url, {headers: {\n 'Content-Type': 'application/json',\n 'Authorization': `Bearer ${accessToken}`\n }}).then(responseBody), \n getFileWithToken: (url: string, accessToken: string) => axios({\n url: url , //'https://localhost:44327/api/patientsessions/0/documents/32',\n method: 'GET',\n responseType: 'blob', // important\n headers: { 'Authorization': `Bearer ${accessToken}`},\n }).then(responseBody), \n\n post: (url: string, body: {}) => axios.post(url, body).then(responseBody), \n put: (url: string, body: {}) => axios.put(url, body).then(responseBody), \n\n postWithToken: (url: string, body: {}, accessToken: string) => axios.post(url, body, {headers: {\n 'Content-Type': 'application/json',\n 'Authorization': `Bearer ${accessToken}`\n }}).then(responseBody), \n putWithToken: (url: string, body: {}, accessToken: string) => axios.put(url, body, {headers: {\n 'Content-Type': 'application/json',\n 'Authorization': `Bearer ${accessToken}`\n }}).then(responseBody), \n\n del: (url: string) => axios.delete(url).then(responseBody), \n delWithToken: (url: string, body: {}, accessToken: string) => axios.delete(url, {headers: {\n 'Content-Type': 'application/json',\n 'Authorization': `Bearer ${accessToken}`\n }}).then(responseBody),\n}\n\nconst time = {\n GetTimeData: (id: number, filter: DataFilter, accessToken: string) => requests.postWithToken(`/NPLTime/GetFiles/${id}`, filter, accessToken),\n downloadPDF:(year: number, month: number, accessToken: string) => (requests.getFileWithToken(`/Admin/GetFile/${year}/${month}`, accessToken )),\n GetHubAvailabilityData:(accessToken: string) => (requests.getWithToken('/NPLTime/GetHubAvailabilityData', accessToken)),\n GetPTPData:(year: number, month: number, endpoint: number, location: number, distributorId: number, fileId: number, userId: string, accessToken: string) => (\n requests.getWithToken(`/NPLTime/GetPTPDataPoints?year=${year}&month=${month}&endpoint=${endpoint}&fileId=${fileId}&userId=${userId}&location=${location}&distributorId=${distributorId}`, accessToken)\n ), \n}\n\nconst deviceLog = {\n GetAllLogs: (distributor :number = 0, location :number = 0, endpoint :number = 0, accessToken: string) => requests.getWithToken(\n `/PTPDeviceLog?DistributorId=${distributor}&LocationId=${location}&EndPointId=${endpoint}`, accessToken\n ),\n create: (id: string, data:PTPDeviceLog, accessToken: string) => (requests.postWithToken(`/PTPDeviceLog/${id}`, data, accessToken)),\n delete: (id: number, accessToken:string) => (requests.delWithToken(`/PTPDeviceLog/${id}`, {}, accessToken)),\n}\n\nconst user = {\n details: (id: string, accessToken: string) => requests.getWithToken(`/User/${id}`, accessToken),\n Update: (id: string, values: NPLTimeUser, accessToken: string) => requests.putWithToken(`/User/${id}`, values, accessToken),\n all: (accessToken: string) => requests.getWithToken(`/User/`, accessToken),\n}\nconst report = {\n createfee: (id: string, data:FeeReport, accessToken: string) => (requests.postWithToken(`/Admin/${id}`, data, accessToken)),\n getReport:(id: string, filters: feeReportFilter, accessToken: string) => (requests.postWithToken(`/Admin/GetReport`, filters, accessToken)),\n data:(id:number, accessToken: string) => (requests.getWithToken(`/Admin/${id}`, accessToken)),\n getDistributions: (accessToken:string) => (requests.getWithToken(`Admin/GetDistributors`, accessToken)),\n getLocations:(distributionId:number, accessToken:string) => (requests.getWithToken(`Admin/GetLocations/${distributionId}`, accessToken)),\n getLocationEndpoints:(distributionId:number, locationId:number, accessToken:string) => (requests.getWithToken(`Admin/GetLocationEndpoints/${distributionId}/${locationId}`, accessToken)),\n duplicateFeeReport: (id: number, accessToken: string) => (requests.postWithToken(`/Admin/DuplicateFeeReport/${id}`, {}, accessToken)),\n duplicateQuarter: (duplicateFeeReport: DuplicateReport, accessToken: string) => (requests.postWithToken(`Admin/DuplicateFeeReportToCurrentQuarter`, duplicateFeeReport, accessToken)),\n deleteReport: (id: number, accessToken:string) => (requests.delWithToken(`/Admin/${id}`, {}, accessToken)),\n submitReports: (filters: feeReportFilter, accessToken: string) => (requests.postWithToken(`/Admin/SubmitFeeReport`, filters, accessToken)),\n}\n\n\n\nconst agent = {\n time,\n deviceLog,\n user,\n report\n}\n\nexport default agent;\n\n","import React from 'react'\nimport { CircularProgress, createStyles, makeStyles, Theme } from '@material-ui/core'\n\n// interface Props {\n// loadPercent: number;\n// }\n\nconst useStyles = makeStyles((theme: Theme) =>\n createStyles({\n root: {\n position: 'absolute',\n top: '80%',\n left: '50%',\n transform: 'translate(-50%, -50%)',\n\n },\n }),\n);\n\n\nexport default function LoadingComponent()\n{\n const classes = useStyles();\n return
\n \n}","import Button from '@material-ui/core/Button';\nimport Dialog from '@material-ui/core/Dialog';\nimport DialogActions from '@material-ui/core/DialogActions';\nimport DialogContent from '@material-ui/core/DialogContent';\nimport DialogContentText from '@material-ui/core/DialogContentText';\nimport DialogTitle from '@material-ui/core/DialogTitle';\nimport { AlertProps } from '../models/alert'\n\nexport default function AlertDialog(props: AlertProps) {\n const { open, onClose } = props;\n\n const handleClose = () => {\n onClose();\n };\n\n // const [open, setOpen] = React.useState(props.open);\n\n // const handleClickOpen = () => {\n // setOpen(true);\n // };\n\n if(props.messageType === 4) {\n return (\n {/* */}\n \n \n

{props.title}

\n
    \n
  • 01 = Primary Timing Device
  • \n
  • 02 = Secondary Timing Device
  • \n
\n\n
\n
\n \n \n {/* */}\n \n );\n } else if(props.messageType === 3) {\n return (\n {/* */}\n \n \n

{props.title}

\n
    \n
  • B5P = Basildon
  • \n
  • LD4 = Equinix LD4
  • \n
  • IX = Interxion
  • \n
  • TLH = Telehouse
  • \n
\n\n\n
\n
\n \n \n {/* */}\n \n );\n} else if(props.messageType === 2) {\n return (\n {/* */}\n \n \n

{props.title}

\n

PTP Offset

\n

These graphs indicate the amount of time the PTP signal was unavailable, at each endpoint. If nothing is displayed, this indicates 100% availability. An outage of four hours or less does not affect traceability. Where incidents are shown, these will be described and explained below the graph.

\n\n

PTP Path Delay

\n

PTP Path Delay indicates the time taken for the PTP signal to get from the NPL hub to the endpoint, calculated as half the round-trip time. This is measured by PTP Delay Request messages, which are continually exchanged between the endpoint and its grandmaster. The value itself is not important, only deviations indicating a potential change of network topology and therefore network asymmetry. A single deviation of less than 300 ns is not considered to affect traceability, however multiple deviations, or a single large change, may cause loss of traceability and necessitate recalibration of the endpoint. A certain amount of variability is to be expected; however, large changes may indicate a problem.

\n\n\n
\n
\n \n \n {/* */}\n \n );\n\n } else {\n return (\n {props.title}\n \n \n {props.message}\n \n \n \n \n {/* */}\n \n \n );\n}\n}\n","import { useCallback, useEffect, useState } from \"react\";\nimport { useAccount, useMsal } from \"@azure/msal-react\";\nimport { protectedResources } from \"../authconfig\";\nimport agent from \"../api/agent\";\nimport { Box, CircularProgress, Grid, Paper } from \"@material-ui/core\";\nimport Highcharts from 'highcharts';\nimport HighchartsReact from 'highcharts-react-official';\nimport Boost from 'highcharts/modules/boost';\n\nconst HubChart = () => {\n const [ datasets, setDataSets ] = useState([]);\n const [ loading, setLoading ] = useState(true);\n const { instance, accounts } = useMsal();\n const account = useAccount(accounts[0] || {}) || undefined;\n\n const GetGraph = useCallback(() => {\n if(account)\n {\n\n instance.acquireTokenSilent({\n scopes: protectedResources.apiNPLTime.scopes,\n account: account\n }).then((response) => {\n agent.time.GetHubAvailabilityData(response.accessToken)\n .then((resp) => {\n let dataDaisy1: [Date, number][] = [];\n let dataDaisy2: [Date, number][] = [];\n let dataTele1: [Date, number][] = [];\n let dataTele2: [Date, number][] = [];\n\n resp.forEach(e => {\n if (e.label === 'Daisy') {\n dataDaisy1.push([ new Date(e.timestamp), e.value1]);\n dataDaisy2.push([ new Date(e.timestamp), e.value2]);\n } else if (e.label === 'Telehouse') {\n dataTele1.push([ new Date(e.timestamp), e.value1]);\n dataTele2.push([ new Date(e.timestamp), e.value2]);\n }\n });\n\n // data.sort((a:any, b:any) => a.timestamp - b.timestamp);\n\n let hcConf = [\n {\n title: 'Daisy Loopback',\n ptpData: dataDaisy1,\n ppsData: dataDaisy2\n },\n {\n title: 'Telehouse Loopback',\n ptpData: dataTele1,\n ppsData: dataTele2\n }\n ];\n\n let dsc:Highcharts.Options[] = [];\n for (let i = 0; i < hcConf.length; i++) {\n // https://api.highcharts.com/highcharts/\n dsc.push({\n title: {\n text: hcConf[i]['title'],\n },\n series: [{\n name: 'PTP Offset',\n type: 'line',\n data: hcConf[i]['ptpData'],\n color: \"#404080\",\n },\n {\n name: 'PPS reference',\n type: 'line',\n data: hcConf[i]['ppsData'],\n color: \"#c28484\"\n }],\n xAxis: {\n title: { text: \"Date\" },\n type: 'datetime',\n labels: { format: '{value:%d/%m }' },\n },\n yAxis: {\n title: { text: \"Value (Nanoseconds)\" },\n },\n tooltip: {\n formatter: function() {\n const xVal = this.x as number;\n const cLabel = '';//`\\u25CF `;\n return `${Highcharts.dateFormat('%Y-%m-%d, %H:%M:%S UTC', xVal, true)}
${cLabel}${this.series.name}: ${this.y}`;\n },\n },\n chart: {\n height: \"400px\",\n zoomType: \"x\",\n },\n credits: {\n enabled: false\n },\n }); \n }\n\n setDataSets(dsc);\n setLoading(false);\n });\n });\n }\n }, [account, instance]);\n\n useEffect(() => { GetGraph() }, [GetGraph]);\n \n Boost(Highcharts); // Greatly improves the load time of huge datasets.\n return(\n \n \n \n {!loading ?\n \n :\n \n \n \n }\n \n \n \n \n {!loading ?\n \n :\n \n \n \n }\n \n \n \n );\n};\n\nexport default HubChart;\n","import { useAccount, useMsal } from \"@azure/msal-react\";\nimport { useCallback, useEffect, useState } from \"react\";\nimport agent from \"../api/agent\";\nimport { protectedResources } from \"../authconfig\";\nimport { CircularProgress } from \"@material-ui/core\";\nimport Highcharts from 'highcharts';\nimport HighchartsReact from 'highcharts-react-official';\nimport Boost from 'highcharts/modules/boost';\nimport { ddOptions } from \"../models/helper\";\n\ninterface Props {\n year: number;\n month: number;\n endpoint: number;\n location: number;\n distributor: number;\n file: number;\n}\n\nconst PTPChart = (props: Props) => {\n const[datasetsHC, setDataSetsHC] = useState({});\n const[loadingState, setLoadingState] = useState(true);\n const[errorState, setErrorState] = useState(false);\n const[locations, setLocations] = useState([]);\n const { instance, accounts } = useMsal();\n const account = useAccount(accounts[0] || {}) || undefined;\n\n const GetGraph = useCallback(() => {\n if(account && locations.length > 0 ) {\n instance.acquireTokenSilent({\n scopes: protectedResources.apiNPLTime.scopes,\n account: account\n }).then((response) => {\n agent.time.GetPTPData(\n props.year,\n props.month,\n props.endpoint,\n props.location,\n props.distributor,\n props.file,\n account.localAccountId,\n response.accessToken\n )\n .then((resp) => {\n if (resp.length > 0) {\n let data: [Date, number][] = [];\n let chartTitle: string = ( locations.find(x => x.id === resp[0].location)?.name ?? '' ) + `-${resp[0].endpoint}`;\n let chartType: string = (props.file === 1) ? 'PTP Offset' : 'PTP Path Delay';\n\n //resp.sort((a, b) => (new Date(a.timestamp).getTime() - new Date(b.timestamp).getTime()));\n\n resp.forEach(e => {\n data.push([ new Date(e.timestamp), e.value ]);\n });\n\n // https://api.highcharts.com/highcharts/\n setDataSetsHC({\n title: {\n text: `${chartType} - ${chartTitle}`,\n },\n series: [{\n name: chartType,\n type: 'line',\n data: data,\n color: \"#002f6c\",\n }],\n yAxis: {\n title: { text: `${chartType} / ns` },\n },\n xAxis: {\n title: { text: \"Date\" },\n type: 'datetime',\n labels: { format: '{value:%Y/%m/%d }' },\n },\n tooltip: {\n formatter: function() {\n const xVal = this.x as number;\n return `${Highcharts.dateFormat('%Y-%m-%d, %H:%M:%S UTC', xVal, true)}
${this.series.name}: ${this.y}`;\n },\n },\n chart: {\n height: \"600px\",\n zoomType: \"x\",\n },\n credits: {\n enabled: false\n },\n });\n\n setLoadingState(false);\n } else {\n setErrorState(true);\n }\n });\n });\n }\n }, [account, instance, locations, props.year, props.month, props.distributor,\n props.endpoint, props.location, props.file\n ]);\n\n useEffect(() => {\n if(account) {\n instance.acquireTokenSilent({\n scopes: protectedResources.apiNPLTime.scopes,\n account: account\n }).then((response) => {\n // TODO - Method that works for multiple distributions.\n agent.report.getLocations(1, response.accessToken)\n .then((l:ddOptions[]) => (setLocations(l)));\n });\n }\n }, [account, instance]);\n\n useEffect(() => { GetGraph() }, [GetGraph]);\n\n if (errorState) {\n return (No data was found.);\n } else if (loadingState) {\n return ();\n } else {\n Boost(Highcharts); // Greatly improves the load time of huge datasets.\n\n return(\n \n );\n }\n}\n\nexport default PTPChart;\n","import { useAccount, useMsal } from '@azure/msal-react';\nimport { Field, Form, Formik } from 'formik';\nimport { useContext, useEffect, useState } from 'react'\nimport { protectedResources } from '../authconfig';\nimport agent from \"../api/agent\";\nimport { DataFilter, Distribution, Location, LocationEndPoint } from \"../models/filter\";\nimport { Accordion, AccordionDetails, AccordionSummary, Box, Button, Container, FormGroup, Grid, TextField, Typography } from \"@material-ui/core\";\nimport { ddOptions } from \"../models/helper\";\nimport { NPLTimeData } from '../models/NPLTimeData';\nimport InfoTwoToneIcon from '@material-ui/icons/InfoTwoTone';\nimport ExpandMoreIcon from '@material-ui/icons/ExpandMore';\n//import AdminHome from '../components/AdminHome';\n\nimport LoadingComponent from '../components/LoadingComponent'\nimport { UserContext } from '../UserContext';\nimport \"../css/site.css\";\nimport \"../css/application.css\";\nimport AlertDialog from './Alert';\nimport { AlertValues } from '../models/alert';\nimport { number, object } from 'yup';\n//import axios from 'axios';\nimport HubChart from './HubChart';\nimport PTPChart from './PTPChart';\nimport { eUserType } from '../Enums';\nimport { DigitalStaticURL, NPLTimeAccess, NPLTimeCertified, NPLTimeText } from '../Constants';\n\nconst initialValues: DataFilter = {\n year: new Date().getFullYear(),\n month: new Date().getMonth(),\n distribution: 0,\n location: 0,\n endpoint: 0,\n userId: \"\",\n fileId: 0,\n companyName: \"\",\n}\n\nexport default function UserHome(props: any) {\n console.log(\"properties\" + props.stitle);\n const { instance, accounts } = useMsal();\n const account = useAccount(accounts[0] || {}) || undefined;\n const { user } = useContext(UserContext);\n //const[isAdmin, setIsAdmin] = useState(false);\n\n console.log(user);\n let years: ddOptions[] = [];\n\n const [loading, setLoading] = useState(false);\n\n const PTPAvail: string = \"This parameter displays how well the internal OCXO is tracking the PTP signal. It is an indicator of the stability of the PTP signal.\";\n const PTPDelay: string = \"PTP Path Delay indicates the time taken for the PTP signal to get from the NPL hub to the endpoint, calculated as half the round trip time. This is measured by PTP Delay Request messages, which are continually exchanged between the endpoint and its grandmaster. The value itself is not important, only deviations indicating a potential change of network topology and therefore network asymmetry. A single deviation of less than 300 ns is not considered to affect traceability, however multiple deviations, or a single large change, may cause loss of traceability and necessitate recalibration of the endpoint. A certain amount of variability is to be expected; however, large changes may indicate a problem.\";\n const ClockSync: string = \"These graphs display the offset between the incoming PTP signal and the internal OCXO oscillator, for each endpoint. It is an indicator of the amount of jitter on the PTP signal. The oscillator is continually tracking the incoming signal, and will smooth out small amounts of jitter so that it does not get passed on to the customer side.\";\n\n const [fileInfoText, setFileInfoText] = useState(\"\");\n const [fileInfoTitle, setFileInfoTitle] = useState(\"\");\n\n const [distributions, setDistributions] = useState([]);\n const [locations, setLocations] = useState([]);\n const [endpoints, setEndpoints] = useState([]);\n\n const [selectedDistribution, setSelectedDistribution] = useState(0);\n const [selectedLocation, setSelectedLocation] = useState(0);\n const [selectedEndpoint, setSelectedEndpoint] = useState(0);\n const [selectedFile, setSelectedFile] = useState(0);\n\n useEffect(() => {\n document.title = \"Service Status Reports - NPL Time\";\n }, []);\n\n useEffect(() => {\n // console.log(\"inside react effect\");\n //console.log(user);\n\n\n if (account) {\n instance.acquireTokenSilent({\n scopes: protectedResources.apiNPLTime.scopes,\n account: account\n }).then((response) => {\n agent.report.getDistributions(response.accessToken)\n .then((data: Distribution[]) => {\n setDistributions(data);\n });\n\n if (selectedDistribution !== 0) {\n agent.report.getLocations(selectedDistribution, response.accessToken)\n .then((data: Location[]) => {\n setLocations(data);\n });\n }\n\n if (selectedDistribution !== 0 && selectedLocation !== 0) {\n agent.report.getLocationEndpoints(selectedDistribution, selectedLocation, response.accessToken)\n .then((data: LocationEndPoint[]) => {\n setEndpoints(data);\n });\n }\n });\n }\n }, [account, instance, user.userId, user.subCompanyId, user.userType,\n selectedDistribution, selectedEndpoint, selectedLocation\n ]);\n\n const [itemData, setItemData] = useState();\n //const [isDataAvailable, setIsDataAvailable] = useState(false);\n\n let currentYear = new Date().getFullYear();\n for (let i = currentYear - 1; i <= currentYear; i++) {\n years.push({ id: i, name: i.toString() });\n }\n\n\n const ShowFileTypeInfo = () => {\n // setDialogOpen(true);\n // setMessageType(2)\n // console.log(\"Dialog Open flag:\" + dialogOpen);\n // //alert(\"onclick\");\n\n alertValues = {\n message: '',\n messageType: 2,\n title: 'File Types',\n open: true,\n //onClose: handleClose\n }\n\n setAlertProps(alertValues);\n\n\n };\n\n const ShowLocationInfo = () => {\n alertValues = {\n message: '',\n messageType: 3,\n title: 'Locations',\n open: true,\n }\n\n setAlertProps(alertValues);\n };\n\n const ShowEndpointInfo = () => {\n alertValues = {\n message: '',\n messageType: 4,\n title: 'EndPoints',\n open: true,\n }\n\n setAlertProps(alertValues);\n };\n\n const handleClose = () => {\n alertValues = {\n message: '',\n messageType: 2,\n title: 'File Types',\n open: false,\n //onClose: handleClose\n }\n\n setAlertProps(alertValues);\n };\n\n let alertValues: AlertValues = {\n message: '',\n messageType: 1,\n title: '',\n open: false,\n\n }\n\n const [alertProps, setAlertProps] = useState(alertValues);\n\n\n const [year, setYear] = useState(new Date().getFullYear());\n const [month, setMonth] = useState(1);\n\n const reportValidationSchema = object({\n year: number().required('Year Required'),\n month: number().required('Month Required').min(1, 'Month Required').max(12, 'Month Required'),\n distribution: number().required('Distribution Required').min(1, 'Distribution Required'),\n location: number().required('Location Required').min(1, 'Location Required'),\n endpoint: number().required('EndPoint Required').min(1, 'EndPoint Required'),\n fileId: number().required('File Required').min(1, 'File Required'),\n })\n\n const handleLocationChange = (event: any) => {\n // console.log(\"yes\");\n //alert(\"location changed\");\n setItemData(undefined);\n setSelectedLocation(event.target.value);\n initialValues.location = event.target.value;\n\n setSelectedEndpoint(0);\n initialValues.endpoint = 0;\n }\n\n /*const DownloadPDF = () => {\n\n setLoading(true);\n // auth.getTokenDirect(tokenRequest).then(function(accessToken: any) {\n // const Headers = {\n // 'Authorization': `Bearer ${accessToken}`\n // }\n // setLoadingPDF(true);\n // //console.log(props.sessionId);\n // axios({\n // url: process.env.REACT_APP_API_URL + '/patientsessions/' + props.sessionId + '/GetPDFReporting' , //'https://localhost:44327/api/patientsessions/0/documents/32',\n // method: 'GET',\n // responseType: 'blob', // important\n // headers: Headers,\n // }).then((response) => {\n\n if (selectedDistribution === 0 || year === 0 || month === 0) {\n alertValues.messageType = 1;\n alertValues.message = \"Distribution, Month and year should be selected in order to download PDF\";\n alertValues.open = true;\n alertValues.title = \"More data required\";\n\n setAlertProps(alertValues);\n\n setLoading(false);\n\n return;\n\n }\n\n if (account) {\n // filterValues.userId = account.localAccountId;\n\n instance.acquireTokenSilent({\n scopes: protectedResources.apiNPLTime.scopes,\n account: account\n })\n .then((response) => {\n // agent.report.downloadPDF(year, month, response.accessToken).then((resp1) => {\n\n const Headers = {\n 'Authorization': `Bearer ${response.accessToken}`\n }\n axios({\n url: process.env.REACT_APP_API_URL + '/Admin/GetFile/' + selectedDistribution + '/' + year + '/' + month, //'https://localhost:44327/api/patientsessions/0/documents/32',\n method: 'GET',\n responseType: 'blob', // important\n headers: Headers,\n })\n .then((resp1) => {\n\n console.log(resp1);\n console.log(resp1.headers['Content-Disposition']);\n if (resp1 === null || resp1 === undefined) {\n alertValues.messageType = 1;\n alertValues.message = \"The status report couldnt be found\";\n alertValues.open = true;\n alertValues.title = \"Download status report\";\n\n setAlertProps(alertValues);\n }\n else {\n const url = window.URL.createObjectURL(new Blob([resp1.data]));\n console.log(resp1.data);\n const fileName1 = resp1.headers['content-disposition'].split('\"')[1];\n // var fileName1: string | undefined = \"report\" + \"_\" + year + \".pdf\";\n\n const link = document.createElement('a');\n link.href = url;\n if (fileName1 !== undefined)\n link.setAttribute('download', fileName1);\n\n document.body.appendChild(link);\n link.click();\n //console.log(\"inside sessions react efftec\");\n //console.log(response);\n //setPDFReport(response);\n // setLoadingPDF(false);\n }\n\n }).catch(err => {\n console.log(err.message)\n alertValues.messageType = 1;\n alertValues.message = \"File Not Found. Try a different month or contact System admin.\";\n alertValues.open = true;\n alertValues.title = \"Download status report\";\n\n setAlertProps(alertValues);\n }).finally(() => setLoading(false));\n\n\n });\n }\n\n };*/\n\n const handleDistributionChange = (event: any) => {\n setItemData(undefined);\n setSelectedDistribution(event.target.value);\n initialValues.distribution = event.target.value;\n\n setSelectedLocation(0);\n initialValues.location = 0;\n setSelectedEndpoint(0);\n initialValues.endpoint = 0;\n\n }\n\n const handleEndpointChange = (event: any) => {\n setItemData(undefined);\n setSelectedEndpoint(event.target.value);\n initialValues.endpoint = event.target.value;\n }\n\n const handleFileIDChange = (event: any) => {\n setItemData(undefined);\n setSelectedFile(event.target.value);\n initialValues.fileId = event.target.value;\n }\n\n const onYearChange = (event: any) => {\n setItemData(undefined);\n setYear(event.target.value)\n initialValues.year = event.target.value;\n }\n\n const onMonthChange = (event: any) => {\n setItemData(undefined);\n setMonth(event.target.value);\n initialValues.month = event.target.value;\n }\n\n let imageList =
;\n\n if (loading)\n imageList = \n else\n if (itemData !== undefined && itemData.imageURLs.length > 0) {\n imageList = \n }\n\n let webPage = <>\n if (user.userType !== eUserType.AccessUser) {\n webPage = (
\n

End point device data

\n

\n Use the drop down menus below to view PTP offset or PTP path delay information for specific end point devices. Data is\n updated daily.\n

\n

\n Note: This is not a report of the accuracy of the service delivered.\n

\n\n {\n console.log(\"upon submit\");\n setLoading(true);\n console.log(\"loading is\" + loading);\n // console.log(values);\n console.log(formikHelpers);\n formikHelpers.setSubmitting(false)\n if (values.fileId === 1) {\n setFileInfoTitle(\"PTP Offset\");\n setFileInfoText(PTPAvail);\n }\n else if (values.fileId === 2) {\n setFileInfoTitle(\"PTP Path Delay\");\n setFileInfoText(PTPDelay);\n }\n else if (values.fileId === 3) {\n setFileInfoTitle(\"Main Clock Sync to PTP Reference\");\n setFileInfoText(ClockSync);\n }\n\n instance.acquireTokenSilent({\n scopes: protectedResources.apiNPLTime.scopes,\n account: account\n }).then((response) => {\n setLoading(true);\n console.log(\"after acquiring token\");\n if (account) {\n values.userId = account?.localAccountId;\n }\n values.location = selectedLocation;\n values.year = year;\n values.month = month;\n\n setItemData({ year: 1, month: 1, imageURLs: ['a'] });\n setLoading(false);\n }\n\n );\n }}>\n {({ values, errors, touched, isSubmitting }) => (\n
\n \n \n

Filters

\n \n \n \n \n {distributions && distributions.map((e, key) => {\n return ;\n })}\n \n \n\n \n \n {years && years.map((e, key) => {\n return ;\n })}\n \n \n\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n\n \n \n \n {locations && locations.map((e, key) => {\n return ;\n })}\n \n \n \n\n \n \n \n {endpoints && endpoints.map((e, key) => {\n return ;\n })}\n \n \n \n\n \n \n \n \n \n \n \n \n \n
\n
\n \n \n \n \n \n \n {/*\n \n */}\n \n \n \n {/*
{JSON.stringify(values, null, 4)}
*/}\n
\n )}\n\n
\n
\n

{fileInfoTitle}

\n

{fileInfoText}

\n {imageList}\n
\n
\n );\n }\n\n //if(isAdmin)\n // webPage = \n\n\n if (user.userId === \"\")\n return
\n\n return
\n\n\n {/* // */}\n \n\n \n \n \n \n \n \n \n\n \n Service Status Reports\n\n

\n services are commercial time dissemination services that are delivered over fibre links to users and\n service providers in the UK. uses the UK's national time scale as the time source (managed by NPL at\n Teddington) and is delivered on a dark fibre link to the NPL service nodes (Telehouse and Daisy, Reading) and then on\n to users and/or service providers.\n

\n\n \n }\n aria-controls=\"panel1bh-content\"\n id=\"panel1bh-header\"\n >\n More Information\n \n \n

\n The service includes a holdover caesium clock at both service nodes. In the case of a fault on the main\n fibre link from Teddington, the caesium clock will automatically become the reference for any connected timing devices.\n The caesium clock is disciplined daily to maintain alignment with the PTP time signal from UTC(NPL) to within tens of ns.\n The clock stability of approximately 10 ns/day ensures that the UTC-traceable timing service is kept well within the\n ±1 μs to UTC(NPL) SLA for several months (independent of GPS). This automatic holdover clock adds resiliency to the  \n service.\n

\n\n \n \n \n \"\"\n \n \n \n \"\"\n \n \n
\n
\n\n

\n

\n The service offers users access to UTC(NPL) from the two NPL Service nodes in Telehouse, North and\n Daisy, Reading. The specifications of the service are 1μs accuracy to UTC(NPL) and 99.9% availability.\n The graphs below compare the incoming signal from NPL Teddington (1PPS) to the outgoing signal from each service node (PTP).\n The comparison provides not only confidence with regards to signal availability but also demonstrates accuracy to UTC(NPL) at\n each node.\n

\n\n

\n Use the cursor to view data for a specific time period in the graph then click the \"Reset zoom\" button to reset the graph.\n Data is updated on a daily basis.\n

\n\n

Note: This is not a report of the accuracy of the service delivered.

\n\n \n \n \n\n {webPage}\n\n
\n\n
\n}\n\n\n","import { useAccount, useMsal } from '@azure/msal-react';\nimport { Box, Button, FormGroup, TextField, DialogContent, Dialog, DialogContentText, DialogActions } from \"@material-ui/core\";\nimport { Field, Form, Formik } from 'formik';\nimport {ddOptions} from \"../models/helper\";\nimport { protectedResources } from '../authconfig';\nimport agent from '../api/agent'\nimport { DuplicateReport } from '../models/DuplicateReport';\nimport { useState } from 'react';\n\nexport default function DuplicateFeeReportDialog(props: any) {\n const {onClose, onUpdateGrid} = props;\n\n interface IPeriod {\n value: number;\n label: string;\n }\n\n const periods:IPeriod[] = [\n {value: 1, label: 'Q1 (January - March)' },\n {value: 2, label: 'Q2 (April - June)' },\n {value: 3, label: 'Q3 (July - September)' },\n {value: 4, label: 'Q4 (October - December)' },\n ];\n\n const[completed, setCompleted] = useState(false);\n\n let years: ddOptions[] = [];\n const { instance, accounts } = useMsal();\n const account = useAccount(accounts[0] || {}) || undefined;\n\n for (let i = 2021; i <= new Date().getFullYear(); i++) {\n years.push({id: i, name: i.toString()});\n }\n\n const handleClose = () => {\n UpdateGrid();\n setCompleted(false);\n onClose();\n };\n\n const UpdateGrid = () => {\n onUpdateGrid();\n }\n\n const duplicateReport: DuplicateReport = {\n userId:'',\n fromYear: new Date().getFullYear(),\n fromQuarter: 0,\n toYear: new Date().getFullYear(),\n toQuarter: 0\n }\n\n return (\n <>\n \n \n {\n console.log(\"here\");\n\n console.log(values);\n console.log(formikHelpers);\n formikHelpers.setSubmitting(false)\n\n instance.acquireTokenSilent({\n scopes: protectedResources.apiNPLTime.scopes,\n account: account\n }).then((response) => {\n console.log(\"after acquiring token\");\n console.log(values);\n\n if(account) {\n values.userId = account?.localAccountId;\n }\n\n agent.report.duplicateQuarter(values, response.accessToken)\n .then((res) => {\n console.log(res);\n\n setCompleted(true);\n });\n });\n }}\n >\n {({values, errors, isSubmitting}) => (\n
\n \n \n\n \n {years && years.map((e, key) => {\n return ;\n })}\n \n\n \n {periods.map((period, key) => {\n return \n })}\n \n\n \n {years && years.map((e, key) => {\n return ;\n })}\n \n\n \n {periods.map((period, key) => {\n return \n })}\n \n\n \n \n \n \n \n \n \n
\n )}\n
\n
\n \n\n \n \n \n The reports for the selected period have been duplicated.\n \n \n \n \n \n \n \n );\n}\n","import { useAccount, useMsal } from \"@azure/msal-react\";\nimport { Grid, Box, Button, Container, FormControl, FormControlLabel, FormLabel,\n InputLabel, MenuItem, Radio, RadioGroup, Select, makeStyles, Tooltip, Typography,\n} from \"@material-ui/core\";\nimport { DataGrid, GridCellParams, GridCellValue, GridColumnHeaderParams } from \"@material-ui/data-grid\";\n\nimport { useContext, useState, useEffect, useCallback } from \"react\";\nimport { useHistory } from \"react-router-dom\";\nimport agent from \"../api/agent\";\nimport { protectedResources } from \"../authconfig\";\nimport { FeeReport } from \"../models/FeeReport\";\nimport { feeReportFilter } from \"../models/filter\";\nimport { ddOptions } from \"../models/helper\";\nimport { eFeeReportStatus, eUserType } from \"../Enums\";\n\nimport \"../css/site.css\";\nimport { UserContext } from \"../UserContext\";\nimport DuplicateFeeReportDialog from './DuplicateFeeReport'\nimport { NPLTimeText } from \"../Constants\";\n\nexport default function FeeReportComponent()\n{\n const[feeReports, setFeeReports] = useState([]);\n //const feeReports1: FeeReport[] = [];\n const { instance, accounts } = useMsal();\n const[loading, setLoading] = useState(false);\n const { user } = useContext(UserContext);\n const navigate = useHistory();\n\n useEffect(() => {\n document.title = \"Fee Reports - NPL Time\";\n }, []);\n \n const account = useAccount(accounts[0] || {}) || undefined;\n const filterValues: feeReportFilter = {\n customerType:1,\n year:new Date().getFullYear(),\n quarter:0,\n distributor:0,\n userId: '',\n }\n\n if (user.userType === eUserType.Admin || user.userType === eUserType.AccessUser) {\n navigate.push('/');\n }\n\n const[filters, setFilters] = useState(filterValues);\n\n const[customerType, setCustomerType] = useState(1);\n const[year, setYear] = useState(new Date().getFullYear());\n const[quarter, setQuarter] = useState(1);\n const[total, setTotal] = useState(0);\n const[open, setOpen] = useState(false);\n const[isSubmitted, setIsSubmitted] = useState(false);\n\n let years: ddOptions[] = [];\n for (let i = 2021; i <= new Date().getFullYear(); i++) {\n years.push({id: i, name: i.toString()});\n } \n\n const GetFeeReport = useCallback(() => {\n if(account)\n {\n filters.userId = account.localAccountId;\n filters.year = year;\n filters.quarter = quarter;\n instance.acquireTokenSilent({\n scopes: protectedResources.apiNPLTime.scopes,\n account: account\n }).then((response) => {\n // console.log(\"before getreport:\" + response.accessToken);\n agent.report.getReport(account.localAccountId, filters, response.accessToken) //get a list of all pure components(pure and mixed), \n .then(feeReportResponse => {\n console.log(feeReportResponse);\n setFeeReports(feeReportResponse);\n if(feeReportResponse[0]) {\n setIsSubmitted((feeReportResponse[0].status === parseInt(eFeeReportStatus.Submitted.toString())) ? true : false);\n setTotal(feeReportResponse[0].finalTotal);\n } else {\n setIsSubmitted(false);\n }\n })\n });\n }\n }, [account, instance, quarter, year, filters]);\n \n function DuplicateFeeReport(FeeReportId: number) {\n // alert(\"Duplicate Fee Report\");\n instance.acquireTokenSilent({\n scopes: protectedResources.apiNPLTime.scopes,\n account: account\n }).then((response) => {\n console.log(\"before getreport:\" + response.accessToken);\n agent.report.duplicateFeeReport(FeeReportId, response.accessToken) //get a list of all pure components(pure and mixed), \n .then(reportId => {\n GetReport(year, quarter, customerType);\n })\n });\n\n \n }\n\n function DeleteFeeReport(FeeReportId: number) {\n // alert(\"Duplicate Fee Report\");\n instance.acquireTokenSilent({\n scopes: protectedResources.apiNPLTime.scopes,\n account: account\n }).then((response) => {\n console.log(\"before delreport:\" + response.accessToken);\n agent.report.deleteReport(FeeReportId, response.accessToken) //get a list of all pure components(pure and mixed), \n .then(reportId => {\n console.log(reportId);\n GetReport(year, quarter, customerType);\n })\n });\n \n \n }\n\n useEffect(() => {\n console.log(\"inside react effect\");\n GetFeeReport();\n // if(account)\n // {\n // filterValues.userId = account.localAccountId;\n // instance.acquireTokenSilent({\n // scopes: protectedResources.apiNPLTime.scopes,\n // account: account\n // }).then((response) => {\n // // console.log(\"before getreport:\" + response.accessToken);\n \n // agent.report.getReport(account.localAccountId, filterValues, response.accessToken) //get a list of all pure components(pure and mixed), \n // .then(feeReportResponse => {\n // console.log(feeReportResponse);\n // setFeeReports(feeReportResponse);\n // if(feeReportResponse[0])\n // setTotal(feeReportResponse[0].finalTotal);\n // })\n // });\n // }\n }, [GetFeeReport]);\n\n const columnsCoLocCustomer = [\n { field: 'customerName', flex:0.5, headerName: 'Customer Name'},\n { field: 'location', flex:0.5, headerName: 'Location' },\n \n { field: 'numberOfPorts', flex:0.5, headerName: '# of Ports' },\n { field: 'mrc', flex:0.5, headerName: 'MRC', renderHeader: (params: GridColumnHeaderParams) => ( MRC ), renderCell: (params: GridCellParams) => { return (params.value != null) ? `£${params.value.toLocaleString()}` : '' } },\n { field: 'firstBillingMonth', flex:0.5, headerName: 'First Billing Month' },\n { field: 'monthlyNPLFee', flex:0.5, headerName: 'Monthly NPL Fee', renderCell: (params: GridCellParams) => { return (params.value != null) ? `£${params.value.toLocaleString()}` : '' } },\n { field: 'total', flex:0.5, headerName: 'Quarterly NPL Fee', renderCell: (params: GridCellParams) => { return (params.value != null) ? `£${params.value.toLocaleString()}` : '' } },\n \n\n { field : 'edit', flex:0.75, headerName:'Actions',\n renderCell: (params: GridCellParams) => {\n const CreateDuplicateReport = () => {\n let documentId: GridCellValue = params.getValue(params.id, \"id\");\n DuplicateFeeReport(documentId != null ? +documentId : 0);\n\n }\n const DeleteReport = () => {\n let documentId: GridCellValue = params.getValue(params.id, \"id\");\n DeleteFeeReport(documentId != null ? +documentId : 0);\n }\n let readonly = (params.getValue(params.id, \"status\") === parseInt(eFeeReportStatus.Submitted.toString())) ? true : false;\n return
\n \n \n \n \n \n
\n }\n }\n ]\n\n const columnsEnterpriseCustomer = [\n { field: 'customerName', flex:0.5, headerName: 'Customer Name'},\n { field: 'location', flex:0.5, headerName: 'Location' },\n { field: 'numberOfCertifiedEndPointDevices', flex:0.5, headerName: '# of end point devices' },\n { field: 'numberOfSecondaryDistributionPoints', flex:0.5, headerName: '# Secondary Distribution points' },\n { field: 'totalFeeForEndpointDevices', flex:0.5, headerName: 'Monthly Fee for End Point Devices', renderCell: (params: GridCellParams) => { return (params.value != null) ? `£${params.value.toLocaleString()}` : '' } },\n { field: 'totalFeeForRedistributionPoints', flex:0.5, headerName: 'Monthly Fee for Redistribution Points', renderCell: (params: GridCellParams) => { return (params.value != null) ? `£${params.value.toLocaleString()}` : '' } },\n { field: 'total', flex:0.5, headerName: 'Monthly NPL Fee', renderCell: (params: GridCellParams) => { return (params.value != null) ? `£${params.value.toLocaleString()}` : '' } },\n \n { field : 'edit', flex:0.85, headerName:'Actions',\n renderCell: (params: GridCellParams) => {\n const CreateDuplicateReport = () => {\n let documentId: GridCellValue = params.getValue(params.id, \"id\");\n DuplicateFeeReport(documentId != null ? +documentId : 0);\n\n }\n const DeleteReport = () => {\n let documentId: GridCellValue = params.getValue(params.id, \"id\");\n DeleteFeeReport(documentId != null ? +documentId : 0);\n }\n let readonly = (params.getValue(params.id, \"status\") === parseInt(eFeeReportStatus.Submitted.toString())) ? true : false;\n return
\n \n \n \n \n \n
\n }\n }\n ]\n\n const [value, setValue] = useState('1');\n\n const tableStyling = makeStyles({\n root: {\n \"& .MuiDataGrid-columnsContainer\": {\n maxHeight: \"65px!important\",\n },\n \"& .MuiDataGrid-columnHeaderTitle\": {\n overflow: \"visible\",\n lineHeight: \"1rem\",\n whiteSpace: \"normal\",\n }\n }\n });\n \n const handleSelect = (event: any) => {\n //setValue(event.target.value);\n //alert(event.target.value);\n //alert(event.target.name);\n \n if(event.target.name === \"year-select\")\n {\n setYear(event.target.value)\n filterValues.year = event.target.value;\n //filterValues.year = event.target.value; \n GetReport(event.target.value, quarter, customerType);\n }\n\n if(event.target.name === \"quarter-select\")\n {\n setQuarter(event.target.value);\n filterValues.quarter = event.target.value;\n \n // filterValues.quarter = event.target.value; \n GetReport(year, event.target.value, customerType);\n }\n \n setFilters(filterValues);\n };\n\n const handleChange = (event: any) => {\n \n //alert(event.target.value);\n setValue(event.target.value);\n \n setCustomerType(event.target.value);\n setLoading(true);\n GetReport(year, quarter, event.target.value);\n }\n\n const DuplicateQuarter = () => {\n\n setOpen(true);\n\n }\n\n \n const handleClose = () => {\n setOpen(false);\n };\n\n const SubmitReport = () => {\n console.log(filters);\n if (account) {\n filters.userId = account.localAccountId;\n instance.acquireTokenSilent({\n scopes: protectedResources.apiNPLTime.scopes,\n account: account\n }).then((response) => {\n agent.report.submitReports(filters, response.accessToken)\n .then(feeReportResponse => {\n alert(\"Reports for this quarter have been submitted.\");\n })\n });\n }\n }\n\n\n function GetReport(year: number, quarter: number, customerType: number)\n {\n setTotal(0);\n //alert(\"Calling get report\");\n if(account)\n {\n filterValues.year = year;\n filterValues.userId = account?.localAccountId;\n filterValues.quarter = quarter;\n filterValues.customerType = customerType;\n\n instance.acquireTokenSilent({\n scopes: protectedResources.apiNPLTime.scopes,\n account: account\n }).then((response) => {\n //console.log(\"before GetReport\" + response.accessToken);\n agent.report.getReport(account.localAccountId, filterValues, response.accessToken) //get a list of all pure components(pure and mixed), \n .then(feeReportResponse => {\n console.log(feeReportResponse);\n setLoading(false);\n setFeeReports(feeReportResponse);\n if(feeReportResponse[0])\n setTotal(feeReportResponse[0].finalTotal);\n\n //console.log(feeReportResponse);\n });\n });\n };\n };\n\n return (
\n \n \n \n \n \n \n \n \n \n \n\n Fee Reports\n\n

\n As outlined in the Distributor Agreement, fee reports must be submitted by {user.companyName} on\n or before the 10th day of each calendar quarter to show the fees payable by {user.companyName} to NPL\n in relation to the previous quarter. Upon submission of the fee report, NPL will issue an invoice quarterly\n on the last day of the month after the end of each quarter. The fees payable by {user.companyName}, must be\n paid within 30 days after receipt of the NPL invoice. For more information on fee reporting or invoicing\n please contact: elena.parsons@npl.co.uk or tahir.maqba@npl.co.uk.\n

\n\n

Filters

\n \n \n \n Year\n \n {years && years.map((e, key) => {\n return {e.name};\n })}\n \n \n \n \n \n \n \n \n \n \n Quarter\n \n Q1(Jan - Mar)\n Q2(Apr - June)\n Q3(July - Sept)\n Q4(Oct - Dec)\n \n \n \n \n \n \n \n \n

Customer Type

\n \n \n \n } label=\"Colocation Customer\" style={{width:300}} />\n \n \n } label=\"Enterprise Customer\" style={{width:300}} />\n \n \n \n \n
\n \n\n \n \n\n \n \n row.id} \n rows={feeReports}\n // eslint-disable-next-line\n columns={customerType == 1 ? columnsCoLocCustomer : columnsEnterpriseCustomer}\n loading={loading}\n pagination\n //pageSize={5}\n //rowCount={100}\n \n components={{\n // Toolbar: CustomToolbar,\n Footer: props => {\n return (\n
Quarterly Total: £{total.toLocaleString()}
\n );\n },\n }}\n /> \n\n \n \n Create Entry\n \n\n \n Duplicate Report From Previous Quarter\n \n\n \n Submit Quarter\n \n\n\n
\n
)\n\n}\n\n\n\n","import { useAccount, useMsal } from \"@azure/msal-react\";\nimport { FeeReport } from \"../models/FeeReport\";\nimport agent from \"../api/agent\";\nimport { useState, useEffect, useContext } from \"react\";\nimport { Field, Form, Formik } from 'formik';\nimport { protectedResources } from \"../authconfig\";\nimport { Box, Button, Container, FormGroup, Grid, InputAdornment, TextField, Typography } from \"@material-ui/core\";\nimport { ddOptions } from '../models/helper'\nimport { useLocation } from \"react-router\";\nimport { Redirect, useHistory } from \"react-router-dom\";\nimport { number, object, string, date } from 'yup'\nimport { eFeeReportStatus, eUserType } from \"../Enums\";\nimport { UserContext } from \"../UserContext\";\nimport { NPLTimeText } from \"../Constants\";\nimport { Distribution } from \"../models/filter\";\n\n// enum used to check distributor IDs against the ones returned by agent.report.getDistributions()\nenum distributorIDs {\n ICE = 1,\n UBS = 2,\n Telehouse = 3,\n}\n\nexport default function CreateFeeReport(props: any)\n{\n const { instance, accounts } = useMsal();\n const account = useAccount(accounts[0] || {}) || undefined;\n const[locations, setLocations] = useState([]);\n const [distributor, setDistributor] = useState({} as Distribution)\n const[selectedCustomerType, setSelectedCustomerType] = useState(1);\n // const { user, setUser } = useContext(UserContext);\n const {search} = useLocation();\n const[dataSaved, setDataSaved] = useState(false);\n const { user } = useContext(UserContext);\n const navigate = useHistory();\n\n if (user.userType === eUserType.Admin || user.userType === eUserType.AccessUser) {\n navigate.push('/');\n }\n\n let feeReportId: string | null = new URLSearchParams(search).get('id');\n let initialValues: FeeReport = {\n id: 0,\n distributorName: '',\n location:'',\n customerType: 1,\n customerName: '',\n locationId: 1,\n quarter: '1',\n year: new Date().getFullYear(),\n month: new Date().getMonth(),\n numberOfPorts: 1,\n numberOfCertifiedEndPointDevices: 0,\n numberOfSecondaryDistributionPoints: 0,\n mrc: 0,\n distributorOrderNumber: '0',\n firstBillingMonth: 1,\n monthlyNPLFee: 0,\n numberOfMonths: 0,\n total: 0,\n userId: '',\n finalTotal: 0,\n totalFeeForEndpointDevices: 0,\n totalFeeForRedistributionPoints: 0,\n status: 0,\n }\n const[feeReport, setFeeReport] = useState(initialValues);\n\n const feeReportValidationSchema = object().shape({\n customerType: number(),\n customerName: string().required(\"Customer name must be specified.\"),\n locationId: string().required(\"Location must be specified.\"),\n quarter: number().required(\"Quarter must be specified.\"),\n numberOfPorts: string().required(\"Solution type must be specified.\"),\n mrc: number().when('customerType', {\n is: 1,\n then: number().min(1).required(\"Monthly recurring costs must be specified.\"),\n }),\n numberOfCertifiedEndPointDevices: number().when('customerType', {\n is: 2,\n then: number().min(1).required(),\n }),\n numberOfSecondaryDistributionPoints: number().when('customerType', {\n is: 2,\n then: number().min(1).required(),\n }),\n numberOfMonths: number().when('customerType', {\n is: 1,\n then: number().min(1).required(),\n }),\n firstBillingMonth: number().when('customerType', {\n is: 2,\n then: number().min(1).required(),\n }),\n distributorOrderNumber: string().when('customerType', {\n is: 1,\n then: string().required(),\n }),\n billingDate: date().when('customerType', {\n is: 1,\n then: date().required(),\n }),\n\n });\n\n useEffect(() => {\n document.title = ((feeReportId === null || feeReportId === \"0\") ? 'Create' : 'Edit') + \" Fee Reports - NPL Time\";\n }, [feeReportId]);\n\n useEffect(() => {\n instance.acquireTokenSilent({\n scopes: protectedResources.apiNPLTime.scopes,\n account: account\n }).then((response) => {\n agent.report.getDistributions(response.accessToken)\n .then(distributions => {\n // users with company ICE or UBS have two distributors. We want to only use ICE for fee reports\n let selectedDistribution: Distribution; \n if(distributions.includes({id: 1, name: \"ICE\"}) && distributions.includes({id: 2, name: \"UBS\"})) {\n selectedDistribution = distributions.find(dist => dist.id === distributorIDs.ICE)! //NON-NULL ASSERTION: we know that ICE is in the list of distributors if code execution reaches this point\n } else selectedDistribution = distributions[0]\n setDistributor(selectedDistribution)\n });\n \n });\n }, [account, instance, user.companyId]);\n\n // Gets the list of locations for the user's distributor\n useEffect(() => {\n if(distributor.id !== undefined) {\n (async () => {\n const token = await instance.acquireTokenSilent({\n scopes: protectedResources.apiNPLTime.scopes,\n account: account\n })\n\n const locations = await agent.report.getLocations(distributor.id, token.accessToken)\n setLocations(locations)\n })()\n }\n }, [account, instance, distributor])\n \n useEffect(() => {\n \n setDataSaved(false);\n //alert(feeReportId);\n instance.acquireTokenSilent({\n scopes: protectedResources.apiNPLTime.scopes,\n account: account\n }).then((response) => {\n console.log(\"after acquiring token\");\n if(feeReportId != null)\n {\n initialValues.id = parseInt(feeReportId);\n }\n // if(user.subCompanyId == 1)\n // {\n // initialValues.distributorName = \"ICE\";\n // }\n // else\n // {\n // initialValues.distributorName = \"UBS\";\n // }\n if(account)\n initialValues.userId = account.localAccountId\n\n if(feeReportId !== null && feeReportId !== \"0\")\n {\n agent.report.data(parseInt(feeReportId), response.accessToken)\n .then((feeReportModel) => {\n console.log(feeReportModel);\n feeReportModel.billingDate = feeReportModel.billingDate?.slice(0, 10)\n feeReportModel.handoverDate = feeReportModel.handoverDate?.slice(0, 10)\n feeReportModel.cancellationDate = feeReportModel.cancellationDate?.slice(0, 10)\n setSelectedCustomerType(feeReportModel.customerType)\n setFeeReport(feeReportModel)\n \n });\n }\n else\n {\n setFeeReport(initialValues);\n }\n\n })\n // eslint-disable-next-line react-hooks/exhaustive-deps\n },[account, instance, feeReportId]);\n\n if(dataSaved)\n {\n \n return
\n {/* */}\n \n
\n }\n return
\n {/* */}\n \n \n \n \n \n \n \n \n Create Fee Report\n All fields are required.\n {\n console.log(\"here\");\n values.distributorName = \"1\"; \n console.log(values);\n console.log(formikHelpers);\n formikHelpers.setSubmitting(false)\n\n instance.acquireTokenSilent({\n scopes: protectedResources.apiNPLTime.scopes,\n account: account\n }).then((response) => {\n console.log(\"after acquiring token\");\n console.log(values);\n if(account)\n {\n values.userId = account?.localAccountId;\n }\n agent.report.createfee(values.userId, values, response.accessToken)\n .then((res) => {\n setDataSaved(true);\n return \n\n });\n }\n \n );\n }}>\n {({values, errors, touched, isSubmitting}) => {\n let readonly = (user.userType !== eUserType.NPLAdmin) ? ((values.status === parseInt(eFeeReportStatus.Submitted.toString())) ? true : false) : true;\n return( \n
\n \n \n \n \n {/* \n \n \n */}\n\n {\n setSelectedCustomerType(event.target.value);\n values.customerType = event.target.value;\n }}\n disabled={readonly}\n >\n \n \n \n \n \n\n \n {locations && locations.map((e, key) => {\n return ;\n })}\n \n\n \n \n \n \n \n \n \n { values.customerType !== 1 ? \n <>\n \n \n \n : null\n }\n\n { values.customerType === 1 ?\n <>\n \n \n \n \n \n\n £}}\n disabled={readonly}\n error={errors.mrc && touched.mrc}\n helperText={errors.mrc && touched.mrc ? errors.mrc : null}\n >\n \n\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n : null\n }\n\n {/* \n */}\n \n { values.customerType === 1 ?\n <>\n \n \n \n \n \n \n\n \n\n \n\n \n\n \n \n : null\n }\n \n \n \n \n \n \n Submit\n \n \n \n {/*
{JSON.stringify(values, null, 4)}
*/}\n\n
\n );}}\n\n
\n
\n\n\n
\n}\n\n","import { createTheme } from \"@material-ui/core/styles\"\n\n\nexport const theme = createTheme ({\n palette: {\n primary: {\n main: \"#702F8A\"\n },\n secondary: {\n main: \"#C6ABD0\"\n }\n },\n typography: {\n fontFamily: \"'Myriad W01', sans-serif\",\n },\n shape: {\n borderRadius: 10,\n },\n\n spacing: 10,\n overrides: {\n MuiButton: {\n root: {\n textTransform: \"none\", \n padding: \"10px\", \n minWidth:\"30px\",\n },\n fullWidth: {\n maxWidth: \"300px\"\n \n }\n }\n },\n props: {\n MuiButton: {\n //disableRipple: true,\n variant: 'contained',\n color: \"primary\",\n \n style: {padding:10, margin: 10},\n \n },\n MuiCheckbox: {\n disableRipple: true,\n },\n \n MuiTextField: {\n \n variant: 'outlined',\n InputLabelProps: {\n shrink: true,\n },\n style: {margin:10},\n },\n MuiPaper: {\n elevation: 12,\n },\n MuiCard: {\n elevation: 12,\n }\n }\n})","import { useAccount, useMsal } from \"@azure/msal-react\";\nimport { Box, Button, Container, FormControl, Grid, InputLabel, makeStyles, MenuItem, Select, Typography } from \"@material-ui/core\";\nimport { DataGrid, GridCellParams, GridCellValue } from \"@material-ui/data-grid\";\nimport { useCallback, useContext, useEffect, useState } from \"react\";\nimport { useHistory } from \"react-router-dom\";\nimport agent from \"../api/agent\";\nimport { protectedResources } from \"../authconfig\";\nimport { NPLTimeText } from \"../Constants\";\nimport { eUserType } from \"../Enums\";\nimport { Distribution, LocationEndPoint, Location } from \"../models/filter\";\nimport { PTPDeviceLog } from \"../models/PTPDeviceLog\";\nimport { UserContext } from \"../UserContext\";\n\nexport default function PTPDeviceLogHome() {\n const pageName = \"Event Log\";\n const [deviceLogs, setDeviceLogs] = useState([]);\n const { instance, accounts } = useMsal();\n const [loading, setLoading] = useState(true);\n const account = useAccount(accounts[0] || {}) || undefined;\n const { user } = useContext(UserContext);\n\n const[distributors, setDistributors] = useState([]);\n const[locations, setLocations] = useState([]);\n const[endpoints, setEndpoints] = useState([]);\n const[selectedDistributor, setSelectedDistributor] = useState(0);\n const[selectedLocation, setSelectedLocation] = useState(0);\n const[selectedEndPoint, setSelectedEndPoint] = useState(0);\n const navigate = useHistory();\n\n if (user.userType === eUserType.AccessUser) {\n navigate.push('/');\n }\n\n useEffect(() => { document.title = `${pageName} - NPL Time` }, []);\n\n const tableStyling = makeStyles({\n root: {\n \"& .MuiDataGrid-columnsContainer\": {\n maxHeight: \"65px!important\",\n },\n \"& .MuiDataGrid-columnHeaderTitle\": {\n overflow: \"visible\",\n lineHeight: \"1rem\",\n whiteSpace: \"normal\",\n }\n }\n });\n\n const GetLogs = useCallback(() => {\n if(account) {\n setLoading(true);\n instance.acquireTokenSilent({\n scopes: protectedResources.apiNPLTime.scopes,\n account: account\n }).then((response) => {\n agent.deviceLog.GetAllLogs(selectedDistributor, selectedLocation, selectedEndPoint, response.accessToken)\n .then(feeReportResponse => {\n setLoading(false);\n console.warn(feeReportResponse);\n const allLogs: PTPDeviceLog[] = feeReportResponse.map(report => {\n const distributorName = report.distributor === 0 ? \"All\" : report.distributorName\n return {...report, distributorName: distributorName}\n })\n setDeviceLogs(allLogs);\n });\n });\n }\n }, [account, instance, selectedDistributor, selectedLocation, selectedEndPoint]);\n\n useEffect(() => { GetLogs() }, [GetLogs]);\n\n useEffect(() => {\n instance.acquireTokenSilent({\n scopes: protectedResources.apiNPLTime.scopes,\n account: account\n }).then((response) => {\n agent.report.getDistributions(response.accessToken)\n .then((res) => (setDistributors(res)));\n });\n }, [account, instance]);\n\n useEffect(() => {\n instance.acquireTokenSilent({\n scopes: protectedResources.apiNPLTime.scopes,\n account: account\n }).then((response) => {\n agent.report.getLocations(selectedDistributor, response.accessToken)\n .then((res) => (setLocations(res)));\n });\n }, [account, instance, selectedDistributor]);\n\n useEffect(() => {\n instance.acquireTokenSilent({\n scopes: protectedResources.apiNPLTime.scopes,\n account: account\n }).then((response) => {\n agent.report.getLocationEndpoints(selectedDistributor, selectedLocation, response.accessToken)\n .then((res) => (setEndpoints(res)));\n });\n }, [account, instance, selectedDistributor, selectedLocation]);\n\n function DeleteFeeReport(LogID: number) {\n instance.acquireTokenSilent({\n scopes: protectedResources.apiNPLTime.scopes,\n account: account\n }).then((response) => {\n agent.deviceLog.delete(LogID, response.accessToken)\n .then(() => {\n alert(\"Log entry has been deleted.\");\n GetLogs();\n });\n });\n }\n\n const columns = [\n { field: 'logNumber', flex:0.5, headerName: 'Log Number',\n renderCell: (params: GridCellParams) => (\n
\n {params.value}\n {params.getValue(params.id, \"distributorRef\")}\n
\n )\n },\n { field: 'timestamp', flex:0.5, headerName: 'Entry Timestamp',\n renderCell: (params: GridCellParams) => {\n let dt = new Date(params.value?.toString() ?? '');\n return `${dt.toLocaleDateString()} ${dt.toLocaleTimeString()}`;\n }\n },\n { field: 'distributorName', flex:0.3, headerName: 'Distributor' },\n { field: 'endPoint', flex:0.5, headerName: 'Location', renderCell: (params: GridCellParams) => {\n let location = (params.getValue(params.id, \"locationId\") === 0) ? 'All Locations' : params.getValue(params.id, \"location\");\n let endpoint = (params.getValue(params.id, \"endPoint\") === 0) ? '' : ` - ${params.getValue(params.id, \"endpointName\")}`; \n return `${location}${endpoint}`;\n }},\n { field: 'comments', flex:0.75, headerName: 'Comment(s)'},\n { field : 'edit', flex:0.5, hide: (user.userType === eUserType.NPLAdmin) ? false : true, headerName:'Actions', renderCell: (params: GridCellParams) => {\n if (user.userType === eUserType.NPLAdmin) {\n const DeleteLog = () => {\n let documentId: GridCellValue = params.getValue(params.id, \"id\");\n DeleteFeeReport(documentId != null ? +documentId : 0);\n }\n\n return (\n
\n \n Edit\n \n \n Delete\n \n
\n );\n }\n }}\n ];\n\n return(\n
\n \n \n \n \n \n \n \n \n {pageName}\n

\n The Event log page is used to report any events or incidents on specific end point devices. Use the column headings\n to sort the data in the table accordng to date, location, log number, etc. For any further information on any of the\n events listed below, please contact npltimetechnical@npl.co.uk quoting\n the log number linked to the event.\n

\n\n

Filters

\n \n \n \n Distributor\n {\n setSelectedDistributor(event.target.value);\n setSelectedLocation(0);\n setSelectedEndPoint(0);\n }}\n >\n All\n {distributors && distributors.map((e:Distribution, key:number) => {\n return {e.name};\n })}\n \n \n \n \n \n Location\n {\n setSelectedLocation(event.target.value);\n setSelectedEndPoint(0);\n }}\n disabled={(selectedDistributor === 0)}\n >\n All\n {locations && locations.map((e:Location, key:number) => {\n return {e.name};\n })}\n \n \n \n \n \n Endpoint\n {\n setSelectedEndPoint(event.target.value);\n }}\n disabled={(selectedLocation === 0)}\n >\n All\n {endpoints && endpoints.map((e:LocationEndPoint, key:number) => {\n return {e.endPoint};\n })}\n \n \n \n \n\n row.id}\n rows={deviceLogs}\n columns={columns}\n loading={loading}\n pagination\n />\n\n {(user.userType === eUserType.NPLAdmin) ?\n \n Create Log\n \n : null}\n
\n
\n );\n}\n","import { useAccount, useMsal } from \"@azure/msal-react\";\nimport { Box, Button, Container, FormGroup, Grid, TextField, Typography } from \"@material-ui/core\";\nimport { Field, Form, Formik } from \"formik\";\nimport { useContext, useEffect, useState } from \"react\";\nimport { Redirect, useHistory, useLocation } from \"react-router-dom\";\nimport { object, date, number, string } from \"yup\";\nimport agent from \"../api/agent\";\nimport { protectedResources } from \"../authconfig\";\nimport { NPLTimeText } from \"../Constants\";\nimport { eUserType } from \"../Enums\";\nimport { Distribution, Location, LocationEndPoint } from \"../models/filter\";\nimport { PTPDeviceLog } from \"../models/PTPDeviceLog\";\nimport { UserContext } from \"../UserContext\";\n\nexport default function CreateDeviceLog(props: any) {\n const { instance, accounts } = useMsal();\n const { search } = useLocation();\n const account = useAccount(accounts[0] || {}) || undefined;\n const[distributors, setDistributors] = useState([]);\n const[locations, setLocations] = useState([]);\n const[endpoints, setEndpoints] = useState([]);\n const[selectedDistributor, setSelectedDistributor] = useState(0);\n const[selectedLocation, setSelectedLocation] = useState(0);\n const[selectedEndPoint, setSelectedEndPoint] = useState(0);\n const[dataSaved, setDataSaved] = useState(false);\n const { user } = useContext(UserContext);\n const navigate = useHistory();\n\n if (user.userType === eUserType.AccessUser) {\n navigate.push('/');\n }\n\n let deviceId: string | null = new URLSearchParams(search).get('id');\n let initialValues: PTPDeviceLog = {\n id: 0,\n userId: '',\n timestamp: '',\n endPoint: 0,\n endpointName: '',\n locationId: 0,\n location: '',\n distributor: 0,\n dataPointType: 0,\n comments: '',\n logNumber: '',\n distributorRef: '',\n distributorName: \"\",\n }\n const[deviceLog, setDeviceLog] = useState(initialValues);\n\n const deviceLogValidationSchema = object().shape({\n timestamp: date().required(),\n distributor: number().required(),\n comments: string().required(),\n logNumber: string().required(),\n distributorRef: string().required(),\n });\n\n useEffect(() => {\n document.title = ((deviceId === null || deviceId === \"0\") ? 'Create' : 'Edit') + \" Event Log - NPL Time\";\n }, [deviceId]);\n\n useEffect(() => {\n instance.acquireTokenSilent({\n scopes: protectedResources.apiNPLTime.scopes,\n account: account\n }).then((response) => {\n agent.report.getLocations(selectedDistributor, response.accessToken)\n .then((res) => (setLocations(res)));\n });\n }, [account, instance, selectedDistributor]);\n\n useEffect(() => {\n instance.acquireTokenSilent({\n scopes: protectedResources.apiNPLTime.scopes,\n account: account\n }).then((response) => {\n agent.report.getLocationEndpoints(selectedDistributor, selectedLocation, response.accessToken)\n .then((res) => (setEndpoints(res)));\n });\n }, [account, instance, selectedDistributor, selectedLocation]);\n\n useEffect(() => {\n instance.acquireTokenSilent({\n scopes: protectedResources.apiNPLTime.scopes,\n account: account\n }).then((response) => {\n if(deviceId != null) {\n initialValues.id = parseInt(deviceId);\n }\n\n agent.report.getDistributions(response.accessToken)\n .then((res) => (setDistributors(res)));\n\n if(deviceId !== null && deviceId !== \"0\") {\n agent.deviceLog.GetAllLogs(0, 0, 0, response.accessToken)\n .then((deviceLogModels:PTPDeviceLog[]) => {\n let deviceLogModel = deviceLogModels.find(x => x.id === parseInt(deviceId || \"0\"));\n if (deviceLogModel !== undefined) {\n console.log(\"DLM\", deviceLogModel);\n setSelectedDistributor(deviceLogModel.distributor);\n setSelectedLocation(deviceLogModel.locationId);\n setSelectedEndPoint(deviceLogModel.endPoint);\n setDeviceLog(deviceLogModel);\n } else {\n console.log(`DLM was missing for ${deviceId}.`);\n }\n });\n } else {\n setDeviceLog(initialValues);\n }\n\n setDeviceLog(initialValues);\n });\n // eslint-disable-next-line react-hooks/exhaustive-deps\n },[account, instance, deviceId]);\n\n const onSubmit = (values: PTPDeviceLog, formikHelpers: any) => {\n console.log(values);\n console.log(formikHelpers);\n formikHelpers.setSubmitting(false)\n\n instance.acquireTokenSilent({\n scopes: protectedResources.apiNPLTime.scopes,\n account: account\n }).then((response) => {\n if(account) {\n values.userId = account?.localAccountId;\n }\n\n values.distributor = selectedDistributor;\n values.location = selectedLocation.toString();\n values.locationId = selectedLocation;\n values.endPoint = selectedEndPoint;\n\n agent.deviceLog.create(values.userId, values, response.accessToken)\n .then((res) => {\n console.log(res);\n\n alert(\"Data Saved successfully\");\n\n setDataSaved(true);\n return ();\n\n });\n }\n\n );\n };\n\n if (dataSaved) {\n return ();\n }\n\n return(\n
\n \n \n \n \n \n \n \n \n Create Event Log\n All fields are required.\n \n {({values, errors, touched, isSubmitting}) => {\n let readonly = (user.userType === eUserType.NPLAdmin || user.userType === eUserType.User) ? false : true;\n return (\n
\n \n \n {\n setSelectedDistributor(event.target.value);\n setSelectedLocation(0);\n setSelectedEndPoint(0);\n }}\n disabled={readonly}\n error={errors.distributor && touched.distributor}\n helperText={errors.distributor && touched.distributor ? errors.distributor : null}\n >\n \n {distributors && distributors.map((e:Distribution, key:number) => {\n return ;\n })}\n \n\n {\n setSelectedLocation(event.target.value);\n setSelectedEndPoint(0);\n }}\n disabled={readonly || selectedDistributor === 0}\n error={errors.locationId && touched.locationId}\n helperText={errors.locationId && touched.locationId ? errors.locationId : null}\n >\n \n {locations && locations.map((e:Location, key:number) => {\n return ;\n })}\n \n\n {\n setSelectedEndPoint(event.target.value);\n }}\n disabled={readonly || selectedLocation === 0}\n error={errors.endPoint && touched.endPoint}\n helperText={errors.endPoint && touched.endPoint ? errors.endPoint : null}\n >\n \n {endpoints && endpoints.map((e:LocationEndPoint, key:number) => {\n return ;\n })}\n \n\n \n\n \n\n \n\n \n \n \n\n \n \n \n Submit\n \n \n \n
\n );\n }}\n \n
\n
\n );\n}","/*\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License.\n */\n\nimport { useCallback, useEffect, useState } from \"react\";\nimport { BrowserRouter, Switch, Route } from 'react-router-dom';\n\nimport { MsalProvider } from \"@azure/msal-react\";\nimport { EventType } from \"@azure/msal-browser\";\nimport { UserContext } from \"./UserContext\";\n\n// import { PageLayout } from \"./components/PageLayout\";\n// import { Hello } from \"./pages/Hello\";\nimport { b2cPolicies, protectedResources } from \"./authconfig\";\nimport Layout from \"./Layout\";\nimport UserHome from \"./components/UserHome\";\nimport FeeReportComponent from \"./components/FeeReport\";\nimport CreateFeeReport from \"./components/CreateFeeReport\";\nimport { ThemeProvider } from '@material-ui/core'\nimport { theme } from \"./components/theme\"\nimport { NPLTimeUser } from \"./models/NPLTimeUser\";\nimport agent from \"./api/agent\";\nimport PTPDeviceLogHome from \"./components/PTPDeviceLog\";\nimport CreateDeviceLog from \"./components/CreateDeviceLog\";\n\nconst App = ({ instance }: any) => {\n\n const initialValues: NPLTimeUser = {\n userId: '',\n firstName: '',\n lastName: '',\n email: '',\n username: '',\n companyId: 0,\n subCompanyId: 0,\n companyName: '',\n subCompanyName: '',\n userType: 0,\n \n};\nconst[user, setUser] = useState(initialValues);\n\n//const userData = function(): Promise<{nplUser: NPLTimeUser}>{\n // return new Promise((resolve, reject)=> {\n const GetUserData = useCallback(() => {\n \n return new Promise((resolve, reject) => {\n const accounts = instance.getAllAccounts();\n const account = accounts[0];\n console.log(account);\n \n if(account)\n {\n console.log(\"inside account\")\n \n instance.acquireTokenSilent({\n scopes: protectedResources.apiNPLTime.scopes,\n account: account\n }).then((response: any) => {\n agent.user.details(account.localAccountId, response.accessToken) //get a list of all pure components(pure and mixed), \n .then(userDataResponse => {\n console.log(userDataResponse);\n resolve(userDataResponse);\n }).catch(err => {\n alert(\"User doesn't have any access. Please contact System Admin to grant you access to the web application\");\n instance.logout();\n });\n }).catch((err: any) => {\n alert(\"Your account information has changed and requires re-authentication. Please sign in again.\");\n instance.logout();\n }); \n }\n else\n {\n reject(null)\n }\n })\n }, [instance]);\n\n \n\n /**\n * useMsal is hook that returns the PublicClientApplication instance, \n * an array of all accounts currently signed in and an inProgress value \n * that tells you what msal is currently doing. For more, visit:\n * https://github.com/AzureAD/microsoft-authentication-library-for-js/blob/dev/lib/msal-react/docs/hooks.md\n */\n //const { instance } = useMsal();\n \n /**\n * Using the event API, you can register an event callback that will do something when an event is emitted. \n * When registering an event callback in a react component you will need to make sure you do 2 things.\n * 1) The callback is registered only once\n * 2) The callback is unregistered before the component unmounts.\n * For more, visit: https://github.com/AzureAD/microsoft-authentication-library-for-js/blob/dev/lib/msal-react/docs/events.md\n */\n useEffect(() => {\n \n const callbackId = instance.addEventCallback(async (event: any) => {\n //console.log(\"beofre checking for error\" + event.eventType);\n if (event.eventType === EventType.LOGIN_FAILURE) {\n // console.log(\"before checking for error\")\n if (event.error && event.error.errorMessage.indexOf(\"AADB2C90118\") > -1) {\n // if (event.interactionType === InteractionType.Redirect) {\n //console.log(\"inside error\")\n instance.loginRedirect(b2cPolicies.authorities.forgotPassword);\n //}\n }\n }\n \n if (event.eventType === EventType.LOGIN_SUCCESS || event.eventType === EventType.ACQUIRE_TOKEN_SUCCESS) {\n console.log(\"inside App\");\n let user1 = await GetUserData();\n console.log(user1 + \"user\");\n if(user1 != null)\n {\n setUser(user1);\n }\n else\n {\n //alert(\"User doesn't have any access. Please contact System Admin to grant you access to the web application\");\n //return instance.logout();\n }\n // GetUserData().then((response: NPLTimeUser) => {\n // console.log(response);\n // // if(response === null)\n // // {\n // // alert(\"User doesnt have any access. Please contact System Admin to grant you access to the web application\");\n // // return instance.logout();\n // // };\n\n // setUser(response);\n // }).catch((err: any) => {\n // alert(\"User doesn't have any access. Please contact System Admin to grant you access to the web application\");\n // //return instance.logout();\n // });\n \n if (event?.payload) {\n /**\n * We need to reject id tokens that were not issued with the default sign-in policy.\n * \"acr\" claim in the token tells us what policy is used (NOTE: for new policies (v2.0), use \"tfp\" instead of \"acr\").\n * To learn more about B2C tokens, visit https://docs.microsoft.com/en-us/azure/active-directory-b2c/tokens-overview\n */\n if (event.payload.idTokenClaims[\"tfp\"] === b2cPolicies.names.forgotPassword) {\n window.alert(\"Password has been reset successfully. \\nPlease sign-in with your new password.\");\n return instance.logout();\n } else if (event.payload.idTokenClaims[\"tfp\"] === b2cPolicies.names.editProfile) {\n window.alert(\"Profile has been edited successfully. \\nPlease sign-in again.\");\n return instance.logout();\n }\n else\n {\n \n }\n \n }\n }\n })\n \n return () => {\n if (callbackId) {\n instance.removeEventCallback(callbackId);\n }\n };\n }, [instance, GetUserData]);\n \n return (\n \n \n \n \n \n \n \n \n {/* (\n \n )} /> */}\n\n \n \n \n \n \n \n \n \n \n \n \n \n \n );\n}\n\nexport default (App);","import { ReportHandler } from 'web-vitals';\n\nconst reportWebVitals = (onPerfEntry?: ReportHandler) => {\n if (onPerfEntry && onPerfEntry instanceof Function) {\n import('web-vitals').then(({ getCLS, getFID, getFCP, getLCP, getTTFB }) => {\n getCLS(onPerfEntry);\n getFID(onPerfEntry);\n getFCP(onPerfEntry);\n getLCP(onPerfEntry);\n getTTFB(onPerfEntry);\n });\n }\n};\n\nexport default reportWebVitals;\n","import React from 'react';\nimport ReactDOM from 'react-dom';\nimport './index.css';\nimport App from './App';\nimport reportWebVitals from './reportWebVitals';\nimport { PublicClientApplication } from '@azure/msal-browser';\nimport { msalConfig } from './authconfig';\n\n\nconst msalInstance = new PublicClientApplication(msalConfig);\nReactDOM.render(\n \n \n ,\n document.getElementById('root')\n);\n\n// If you want to start measuring performance in your app, pass a function\n// to log results (for example: reportWebVitals(console.log))\n// or send to an analytics endpoint. Learn more: https://bit.ly/CRA-vitals\nreportWebVitals();\n"],"sourceRoot":""}