{"version":3,"sources":["components/ReportEmbedComponent/ReportEmbedComponent.module.css","components/ActivityLogModal/ActivityLogModal.module.css","components/ReportSubmission/ReportSubmission.module.css","components/ReportLineItemRow/ReportLineItemRow.module.css","images/HeaderImages/defaultUserIcon.png","config/powerBiReportDetails.ts","config/msalConfig.ts","components/Header/Header.tsx","images/HeaderImages/PepsicoLogo.png","components/constants.ts","components/NavigationTab/NavigationTab.tsx","images/NavigationTabImages/HomeIcon.png","images/NavigationTabImages/ReportIcon.png","components/authentication.ts","components/PowerBIEmbedded/PowerBIConstants.ts","components/PowerBIEmbedded/PowerBiMethods.ts","components/PowerBIEmbedded/ReportNavigationTab.tsx","images/PowerBIEmbed/excel.png","components/ReportEmbedComponent/ReportEmbedComponent.tsx","components/PowerBIEmbedded/PowerBIEmbedded.tsx","components/FilterSection/FilterSection.tsx","components/ActivityLogComponent/ActivityLogComponent.tsx","components/ActivityLogModal/ActivityLogModal.tsx","components/ReportComment/ReportComment.tsx","components/ReportLineItemContainer/DeleteConfirmation.tsx","components/ReportLineItemRow/ReportLineItemRow.tsx","images/ReportLineItems/editIcon.png","images/ReportLineItems/deleteIcon.png","images/ReportLineItems/saveIcon.png","images/ReportLineItems/addIcon.png","components/ReportLineItemContainer/ReportLineItemContainer.tsx","components/ReportSubmission/ApproveRejectionModal.tsx","components/ReportSubmission/SaveModal.tsx","components/ReportSubmission/ReportSubmission.tsx","components/ReportDetails/ReportDetails.tsx","components/ProgressStepper/ProgressStepper.tsx","components/apiCalls.ts","components/FinalSubmissionLevelInput/FinalSubmissionLevelInput.tsx","components/UtilContainer/DefaultScreen.tsx","images/FinalOutcomeReportImages/Default View Icon.png","components/UtilContainer/DisabledScreen.tsx","images/FinalOutcomeReportImages/Disabled View Icon.png","components/UtilContainer/ErrorScreen.tsx","images/FinalOutcomeReportImages/Error View.png","components/ReportLineItemContainer/TableView.tsx","components/FinalOutcomeReport/FinalOutcomeReport.tsx","images/FinalOutcomeReportImages/Activity Log.png","components/HandleLogin/HandleLogin.tsx","components/UtilContainer/ErrorContainer.tsx","App.tsx","reportWebVitals.js","index.tsx","components/ReportDetails/ReportDetails.module.css","components/ProgressStepper/ProgressStepper.module.css","components/UtilContainer/Util.module.css","components/Header/Header.module.css","components/NavigationTab/NavigationTab.module.css","components/ReportLineItemContainer/ReportLineItemContainer.module.css","components/PowerBIEmbedded/ReportNavigationTab.module.css","components/FilterSection/FilterSection.module.css","components/FinalOutcomeReport/FinalOutcomeReport.module.css","components/ActivityLogComponent/ActivityLogComponent.module.css","components/FinalSubmissionLevelInput/FinalSubmissionLevel.module.css"],"names":["module","exports","SHARE_POINT_LINKS","excelTemplateSharepointLocation","POWER_BI_PAGE_DETAILS","REPORT_SPLIT_DETAILS","groupId","heatmapReportId","helperReportId","assetsReportId","liabilitiesReportId","prodCredentials","msalConfig","auth","clientId","authority","redirectUri","postLogoutRedirectUri","cache","cacheLocation","msalScopes","scopes","powerbiScopes","msalInstance","PublicClientApplication","msalLogout","localStorage","clear","logoutRedirect","e","console","log","Header","useState","defaultUserIcon","imageUrl","setImageUrl","useEffect","token","sessionStorage","getItem","axios","url","method","timeout","responseType","headers","Authorization","then","response","arrayBufferView","Uint8Array","data","blob","Blob","type","imageURL","window","URL","webkitURL","createObjectURL","catch","getImage","Navbar","className","styles","bsrHeader","Brand","id","navBrand","src","alt","pepsiLogo","headerTitle","Nav","DropdownButton","menuAlign","title","Image","profileImage","roundedCircle","dropdownMenu","Dropdown","Item","userName","disabled","Divider","onClick","DISPLAY","ERRORS","REPORTLINESTATUS","REPORTSTATUSCODE","REPORTSTATUSSTRING","USERROLECODE","USERROLESTRING","OUTCOME","GMCFOMAILINGFLAG","MAILINGTYPE","REPORTINGLEVELCODE","REPORTINGLEVElSTRING","getUserRoleCode","userRole","getUserRoleString","userRoleCode","Number","getReportStatusCode","status","getReportStatusString","statusCode","getReportingLevelCode","reportingLevelString","FINALSUBMISSIONCODE","FINALSUBMISSIONSTRING","getReportStatusAfterSubmit","currentReportStatus","finalSubmissionLevel","statusAfterApproval","getMailSubjectAndBody","mailType","reportingLevel","unitCode","yearQuarter","comment","yearQuarterString","Math","floor","year","quarter","bsrUrl","replaceAll","nextReportStatus","nextLevelUserRole","statusText","length","DEFAULT_EMAIL_GM_CFO_LIST","approveCcList","rejectCcList","rejectToList","approveToList","dcListForGmCfo","gmCfoCount","dcCount","NavigationTab","props","location","useLocation","navigate","useNavigate","pathname","includes","setSelectedView","Tabs","activeKey","selectedView","transition","onSelect","k","Tab","eventKey","tabClassName","ActiveTab","InActiveTab","tabIcons","tabTitle","getPowerBiAccessToken","a","loginRequest","acquireTokenSilent","account","getAllAccounts","loginPopup","accessToken","expiry","expiresOn","REPORT_TYPES","POWER_BI_VISUAL_TYPE","SLICER_TABLES_COLUMNS","POWER_BI_SLICER_CONSTANTS","VALIDATION_SCREEN_PAGE_NAME","REPORT_PAGE_MAPPING","reportId","pageId","pageDisplayName","getInitialSlicerValue","defaultValue","defaultPeriod","MONTH_FORMAT","dateToday","Date","currentMonthNo","getMonth","currentYear","getFullYear","defaultMonth","currentPeriod","comparisonPeriod","computeDeafualtPeriod","currentPeriodOperator","comparisonPeriodOperator","sectorName","sectorNameOperator","buName","buNameOperator","mktUnitName","mktUnitNameOperator","company","compName","companyOperator","currencyValue","currencyValueOperator","currencyUnit","currencyUnitOperator","entity","entityOperator","profitCenter","profitCenterOperator","reportingLevelOperator","getSlicerConfig","slicerData","basicFilter","$schema","target","table","column","operator","values","filterType","models","FilterType","Basic","selector","state","filters","ReportNavigationTab","collapseOnSelect","expand","navigationArea","Toggle","Collapse","reportLinks","NavDropdown","endsWith","activeTab","filter","item","map","toString","to","as","Link","displayHelperSchedules","href","excelOption","ReportEmbedComponent","embeddedReport","params","useParams","embedDetails","document","updateReportSlicerValues","visuals","slicerList","visual","temporarySlicerValues","Object","assign","JSON","parse","Promise","all","slicer","getSlicerState","slicerState","filterSize","slicerTarget","targets","slicerValue","setItem","stringify","eventHandlersMap","Map","getPages","pages","activePage","page","isActive","getVisuals","embedConfig","embedUrl","tokenType","TokenType","Aad","pageName","settings","bars","actionBar","visible","persistentFiltersEnabled","navContentPaneEnabled","slicers","cssClassName","Embeddedreport","eventHandlers","getEmbeddedComponent","embedObject","PowerBIEmbedded","setAccessToken","tokenExpiry","setTokenExpiry","userDataList","setdisplayHelperSchedules","userList","userRolesList","role","isPreparerOrReviewer","tokenResponse","getAccessToken","setInterval","currentTime","getTime","path","element","FilterSection","initFilter","lastTwoYears","yrRange","i","push","reportingLevelOptions","isValidYear","isValidReportingLevel","isValidUnitCode","unitCodeInformation","items","CompCode","Market","BU","Sector","isFilterFromParams","setIsFilterFromParams","curYear","setYear","curQuarter","setQuarter","curReportingLevel","setReportingLevel","curUnitCode","setUnitCode","availableQuarters","setAvailQuarters","availableUnitCodes","setAvailableUnitCodes","month","tempQu","avail","obj","index","self","indexOf","updateFilter","setCurrentFilters","Container","fluid","Row","Col","sm","inputLabels","aria-label","onChange","event","value","md","val","Button","searchButton","variant","ActivityLogComponent","tableContainer","Table","striped","bordered","hover","size","logs","userEmail","dateValues","dateString","timeStamp","toLocaleString","ActivityLogModal","Modal","onHide","setActivityView","show","showState","animation","dialogClassName","centered","closeButton","Title","Body","selection","currentFilter","Footer","ReportComment","content","comments","join","style","font","InputGroup","height","FormControl","DeleteConfirmation","setModal","confirmDelete","ReportLineItemRow","styleForInput","backgroundColor","itemReadMode","setItemReadMode","reviewerPeriod","newReviewerPeriod","setNewReviewerPeriod","schedule","newSchedule","setNewSchedule","bsrObservation","newBsrObservation","setNewBsrObservation","financialImpact","newFinancialImpact","setNewFinancialImpact","newStatus","setNewStatus","newComments","setNewComments","reviewPeriodInput","useRef","scheduleInput","ObservationInput","impactInput","commentInput","resizeTextBox","elementRef","current","scrollHeight","lg","ref","rows","maxLength","readOnly","isCarriedForward","invalidInput","inputField","counterLabel","buttonSection","reportEditMode","setUnsavedItemCounter","unsavedItemCounter","actionButton","icon","deleteItem","isExistingRecord","newLineItem","isUpdated","updateItem","saveLineItem","ReportLineItemContainer","maxId","lineItems","reduce","previous","showDeleteModal","setModalDisplay","curRow","setCurRow","defaultItemId","setDefaultItemId","updateLineItem","newSample","finalSample","sort","item1","item2","setLineItems","deleteLineItem","lineItemId","isExisting","addNewLineItem","selectedFilter","lineItemAddSection","AddIcon","lineItemHeaderSection","alertDisplay","setDeletedLineItemList","deletedLineItemList","ApproveRejectionModal","setComment","alertMessage","setAlertDisplay","outcome","toLowerCase","Form","Label","rejectMessage","Control","toMailList","setToMailList","ccMailList","setCcMailList","submitOutcome","SaveModal","saveUpdate","ReportSubmission","showSaveModal","setSaveModalDisplay","showApproveRejectModal","setApproveRejectModal","setOutcome","finalToList","setFinalToList","finalCcList","setFinalCcList","submitAction","actionType","isDataValid","handleValidate","emailList","handleSave","outcomeValue","handleSubmit","ReportDetails","subjectText","summaryInput","attendeesInput","Inputlables","reportDetails","dateOfReview","updatedDetails","setDetails","reviewPeriod","attendees","summary","ProgressStepper","isNotPrepared","isPrepared","isReviewed","isApproved","isInterAccepted","isAccepted","isSubmitted","checkPrep","checkRev","checkInter","checkApp","checkAcc","checkSub","roleandStatusSection","currentRole","workflowStatus","flowChart","stepper","active","notPrep","prep","reviewed","approved","interAccepted","accepted","submitted","partial","partialActive","getLoggedInUserDetails","username","emailId","getReportDetails","getReportLineItems","getActivityLogDetails","getReportComments","commentRecipient","userRole1","userRole2","InsertOrUpdateReportLineItems","reportLineItems","DeleteLineItems","itemIdList","lineItemIds","insertActivityLog","activityLog","updateReportDetails","reportDetail","submissionForApprovers","details","getAcceptanceFlagForGmCfo","getMailListAndGmCfoCount","sendMailToUsers","emailObject","FinalSubmissionLevelInput","gmcfoNotPresent","dcNotPresent","gmCFONotPresent","alertLabels","DefaultScreen","screen","icons","DisabledScreen","ErrorScreen","TableView","FinalOutcomeReport","displayStatus","setDisplayStatus","showActivitylog","setActivityLogView","activityLogLoading","setLoading","setFilter","activityLogs","setActivityLogs","setUserRole","reportStatus","setReportStatus","setReportDetails","setReportLineItems","reportComments","setReportComments","setReportEditMode","reportSubmissionMode","setReportSubmissionMode","validationFlag","setValidationFlag","setAlertMessage","emailListAndGmCfoDcCount","setemailListAndGmCfoDcCount","fetchData","useCallback","responseReport","temporaryState","possibleRole","userData","compCode","temporaryUserRole","max","temporaryEditMode","temporarySubmissionMode","acceptanceFlag","responseLineItems","responseReportComments","responseEmailList","responseActivityLogs","displayLogs","saveUpdates","submitUpdates","outcomeStatus","totalGMCFOCount","responseMailingFlag","commentFor","initiatorID","initiatorRole","subject","body","toList","ccList","mailSignature","isLoading","isSuccess","isDefault","isDisabled","isError","Alert","onClose","dismissible","activityLogLink","logOption","activityLogIcon","Spinner","CompanyName","loadingScreen","scrollTo","emptyLineItem","lineItem","saveToSessionStorage","msalAccessToken","HandleLogin","handleRedirectPromise","accountObj","name","setAuthenticationState","loginRedirect","ErrorContainer","Heading","message","App","authenticationState","errorMessage","setErrorMessage","userDetails","setUserDetails","userDataResponse","String","errorOccurred","isSucess","replace","reportWebVitals","onPerfEntry","Function","getCLS","getFID","getFCP","getLCP","getTTFB","ReactDOM","render","StrictMode","getElementById"],"mappings":"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","file":"static/js/main.b10b6186.chunk.js","sourcesContent":["// extracted by mini-css-extract-plugin\nmodule.exports = {\"Embeddedreport\":\"ReportEmbedComponent_Embeddedreport__SZX-k\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"selection\":\"ActivityLogModal_selection__1PT24\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"rejectMessage\":\"ReportSubmission_rejectMessage__2JoJ7\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"icon\":\"ReportLineItemRow_icon__2kTS_\",\"inputLabels\":\"ReportLineItemRow_inputLabels__y-QIN\",\"counterLabel\":\"ReportLineItemRow_counterLabel__3zAOC\",\"invalidInput\":\"ReportLineItemRow_invalidInput__MVDqp\",\"inputField\":\"ReportLineItemRow_inputField__1uT4x\",\"buttonSection\":\"ReportLineItemRow_buttonSection__1psKM\",\"actionButton\":\"ReportLineItemRow_actionButton__2obPD\"};","export default \"data:image/png;base64,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\"","// For updating between Dev and Prod use isProd\r\nexport const isProd = true;\r\n\r\n// Below links are for Dev and Prod WebApp\r\n\r\nconst devWebAppLink =\r\n 'https://balancesheetreviewdev.ext.mypepsico.com/OutcomeReport';\r\nconst prodWebAppLink =\r\n 'https://balancesheetreview.ext.mypepsico.com/OutcomeReport';\r\n\r\nexport const webAppLink = isProd ? prodWebAppLink : devWebAppLink;\r\n\r\n// Below credentials for Dev and Prod are for Pakistan report\r\n\r\nconst devSharePointLocation = {\r\n excelTemplateSharepointLocation:\r\n 'https://pepsico.sharepoint.com/teams/BSR365/Shared%20Documents/Forms/AllItems.aspx?FolderCTID=0x01200072965000E5F7044BA42AE055391666D8&viewid=9ae2ec2c%2D0015%2D44ae%2Db5b7%2Df97b66edc761&id=%2Fteams%2FBSR365%2FShared%20Documents%2FGeneral%2FBSR%5FPOC%20Files%2FSnapshot%20Approach',\r\n};\r\n\r\nconst prodSharePointLocation = {\r\n excelTemplateSharepointLocation:\r\n 'https://pepsico.sharepoint.com/teams/BalanceSheetReviewReport/Shared%20Documents/Forms/AllItems.aspx?RootFolder=%2Fteams%2FBalanceSheetReviewReport%2FShared%20Documents%2FGeneral&FolderCTID=0x012000E799905A6DA489469E544B18558F4D13',\r\n};\r\n\r\nexport const SHARE_POINT_LINKS = isProd\r\n ? prodSharePointLocation\r\n : devSharePointLocation;\r\n\r\nexport const POWER_BI_PAGE_DETAILS = {\r\n heatmap: 'ReportSection',\r\n summaryBS: 'ReportSectione38117f1c58fe814678b',\r\n hfmSapRecon: 'ReportSectiond518d3e2d52a0d40d4a0',\r\n cccWatchouts: 'ReportSection74901ba335ae7ce58419',\r\n blacklineSummary: 'ReportSectionce2d7ada7d487dd934d8',\r\n gcsSummary: 'ReportSectionf1c735225eeddc575182',\r\n cashflow: 'ReportSection0769182ed4708107512c',\r\n helper: 'ReportSection2e4a75b2a090ee2e013e',\r\n ccst: 'ReportSection1418506c3a23c8071545',\r\n ar: 'ReportSection64b321e45d5741ec501c',\r\n noar: 'ReportSection56ecb3c29abc6cad7c2c',\r\n inventory: 'ReportSectionb5a19ed96009a57c402a',\r\n prepaid: 'ReportSection070def86ea0ce40916e1',\r\n icar: 'ReportSectionb9ebbdeb5e9790a00672',\r\n capex: 'ReportSectionbc40a05019921838d155',\r\n rou: 'ReportSection2117750b0cc408488239',\r\n goodwill_otherAssets: 'ReportSection0c982297f72b54008e31',\r\n dta: 'ReportSectionc4e0c9e09ca90504e06d',\r\n currentDebt_leaseSt_leaseLt: 'ReportSection82e553aa016a22e7ad72',\r\n ap: 'ReportSection7c273897745c6d72a1c0',\r\n accruedTax: 'ReportSection8cf66029c60ede56ac97',\r\n dtl: 'ReportSection9719c1bbc3ccac040032',\r\n oal: 'ReportSectiond4a963aa94f3bd1e078b',\r\n icap: 'ReportSection5277805e007edcb66d0a',\r\n oltl: 'ReportSectionb08cbb65e7b39e6c9988',\r\n capitalStock_re_nci_cta: 'ReportSection1374d4ba754b97743296',\r\n validationScreen: 'ReportSection6d4e25e8c98178d00a41',\r\n pendingUload: 'ReportSection57a644ece4aa9529e0db',\r\n existingUload: 'ReportSectionff928f434b0d658b5707',\r\n};\r\n\r\nconst devReportCredentials = {\r\n //QA Reports\r\n groupId: '25b8d35f-9262-46db-97c4-09f82f633e30',\r\n heatmapReportId: '993ef998-a39a-4dbc-b20c-495219bc86b5',\r\n helperReportId: 'be434885-b0da-47ae-9250-acdf534c11b0',\r\n assetsReportId: '6f633dc0-f374-44f9-a777-a9b67a3d8171',\r\n liabilitiesReportId: '6fe5dd31-b7f1-4b28-8d22-a5980b37581c',\r\n};\r\n\r\nconst prodReportCredentials = {\r\n groupId: '9c01f71d-0176-4da9-85b8-20359a8e1103',\r\n heatmapReportId: 'cdee7692-9a0a-4a44-85ef-fbe0b36c90f1',\r\n helperReportId: '2db52041-bada-4cfc-a0e6-5f8be9dc46ea',\r\n assetsReportId: '230e0ff6-2e14-4e28-b781-e05b984fa1bc',\r\n liabilitiesReportId: 'b075188e-c69c-4b13-8d91-aa4c36131f70',\r\n};\r\n\r\nexport const REPORT_SPLIT_DETAILS = isProd\r\n ? prodReportCredentials\r\n : devReportCredentials;\r\n","import { PublicClientApplication } from '@azure/msal-browser';\r\n\r\n// For updating between Dev and Prod use isProd\r\nconst isProd = true;\r\n\r\nconst devCredentials = {\r\n clientId: 'ecd9a883-d5a5-4a36-b53e-1468d5f6ad7f',\r\n authority:\r\n 'https://login.microsoftonline.com/42cc3295-cd0e-449c-b98e-5ce5b560c1d3',\r\n};\r\n\r\nconst prodCredentials = {\r\n clientId: 'a2760efc-a573-4b54-8a8d-11272005c83f',\r\n authority:\r\n 'https://login.microsoftonline.com/42cc3295-cd0e-449c-b98e-5ce5b560c1d3',\r\n};\r\n\r\n// Msal Configurations\r\nconst msalConfig = {\r\n auth: {\r\n clientId: isProd ? prodCredentials.clientId : devCredentials.clientId,\r\n authority: isProd ? prodCredentials.authority : devCredentials.authority,\r\n redirectUri: '/',\r\n postLogoutRedirectUri: '/',\r\n },\r\n cache: {\r\n cacheLocation: 'sessionStorage',\r\n },\r\n};\r\n\r\n// Authentication Parameters\r\nexport const msalScopes = {\r\n scopes: ['https://graph.microsoft.com/.default'],\r\n};\r\n\r\nexport const powerbiScopes = {\r\n scopes: [\r\n 'https://analysis.windows.net/powerbi/api/Dataset.Read.All',\r\n 'https://analysis.windows.net/powerbi/api/Dashboard.Read.All',\r\n 'https://analysis.windows.net/powerbi/api/Group.Read',\r\n 'https://analysis.windows.net/powerbi/api/Report.ReadWrite.All',\r\n 'https://analysis.windows.net/powerbi/api/UserState.ReadWrite.All',\r\n 'https://analysis.windows.net/powerbi/api/Workspace.Read.All',\r\n ],\r\n};\r\n\r\nexport const msalInstance = new PublicClientApplication(msalConfig);\r\n\r\nexport const msalLogout = (): void => {\r\n try {\r\n localStorage.clear();\r\n msalInstance.logoutRedirect();\r\n } catch (e) {\r\n console.log(e);\r\n }\r\n};\r\n","import React, { useEffect, useState } from 'react';\r\nimport axios from 'axios';\r\nimport defaultUserIcon from '../../images/HeaderImages/defaultUserIcon.png';\r\nimport { Navbar, Nav, DropdownButton, Dropdown, Image } from 'react-bootstrap';\r\nimport styles from './Header.module.css';\r\nimport PepsicoLogo from '../../images/HeaderImages/PepsicoLogo.png';\r\nimport { isProd } from '../../config/powerBiReportDetails';\r\nimport { msalLogout } from '../../config/msalConfig';\r\n\r\n// Header section with Report Name, User Profile\r\nconst Header: React.FC = () => {\r\n const [imageUrl, setImageUrl] = useState(defaultUserIcon);\r\n\r\n /* \r\n Description: Get user image from Microsoft Graph API using Access Token\r\n */\r\n const getImage = () => {\r\n const token = sessionStorage.getItem('msalAccessToken');\r\n axios({\r\n url: 'https://graph.microsoft.com/beta/me/photo/$value',\r\n method: 'GET',\r\n timeout: 0,\r\n responseType: 'arraybuffer',\r\n headers: {\r\n Authorization: 'Bearer ' + token,\r\n },\r\n })\r\n .then((response) => {\r\n const arrayBufferView = new Uint8Array(response.data);\r\n const blob = new Blob([arrayBufferView], {\r\n type: 'image/jpeg',\r\n });\r\n const urlCreator = window.URL || window.webkitURL;\r\n const imageURL = urlCreator.createObjectURL(blob);\r\n setImageUrl(imageURL);\r\n })\r\n\r\n // In case of an error or unavailability of message, display a default user image\r\n .catch(() => {\r\n setImageUrl(defaultUserIcon);\r\n });\r\n };\r\n\r\n useEffect(() => {\r\n getImage();\r\n }, []);\r\n\r\n return (\r\n \r\n \r\n \r\n |\r\n \r\n BSR Report {!isProd && '(Dev Environment)'}\r\n \r\n \r\n \r\n \r\n );\r\n};\r\n\r\nexport default Header;\r\n","export default \"data:image/png;base64,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\"","import { webAppLink } from '../config/powerBiReportDetails';\r\nimport { EmailRecipientAndGmCfoDcCountObject } from './interfaces';\r\n\r\nexport const DISPLAY = {\r\n POWERBI: 'embedded',\r\n WORKFLOW: 'workflowReport',\r\n AUTHENTICATED: 'authenticated',\r\n NOT_AUTH: 'unauthenticated',\r\n SUCCESS: 'success',\r\n LOADING: 'loading',\r\n ERROR: 'error',\r\n DISABLED: 'disabled',\r\n DEFAULT: 'default',\r\n ACTIVITY_LOAD: 'activityload',\r\n ACTIVITY_VIEW: 'activityview',\r\n};\r\n\r\nexport const AUTHDISPLAY = {\r\n AUTHENTICATED: 'authenticated',\r\n NOT_AUTH: 'unauthenticated',\r\n};\r\n\r\nexport const ERRORS = {\r\n ACCESS_ON_REPORT:\r\n 'Please check your access permissions. It seems like you dont have access on Balance Sheet Review.',\r\n AUTHENTICATION_ERROR:\r\n 'You are not authenticated. Please check your credentials.',\r\n INVALID_SUBMIT_ALERT:\r\n 'Please fill all the fields and save line items before submission.',\r\n INVALID_SAVE_ALERT: 'Please save line items before submission.',\r\n};\r\n\r\nexport const REPORTLINESTATUS = {\r\n INPROGRESS: 'In Progress',\r\n CLOSED: 'Closed',\r\n};\r\n\r\nexport const REPORTSTATUSCODE = {\r\n REJECTED: -1,\r\n NOTPREPARED: 0,\r\n PREPARED: 1,\r\n REVIEWED: 2,\r\n APPROVED: 3,\r\n INTER_ACCEPTED: 4,\r\n ACCEPTED: 5,\r\n SUBMITTED: 6,\r\n DEFAULT: 100,\r\n};\r\n\r\nexport const REPORTSTATUSSTRING = {\r\n REJECTED: 'Rejected',\r\n NOTPREPARED: 'Not Prepared',\r\n PREPARED: 'Prepared',\r\n REVIEWED: 'Reviewed',\r\n APPROVED: 'Approved',\r\n INTER_ACCEPTED: 'Acceptance in Progress',\r\n ACCEPTED: 'Accepted',\r\n SUBMITTED: 'Submitted',\r\n};\r\n\r\nexport const USERROLECODE = {\r\n PREPARER: 0,\r\n REVIEWER: 1,\r\n APPROVER: 2,\r\n GM_CFO: 3,\r\n CONTROLLER: 5,\r\n VIEWER: 6,\r\n DEFAULT: 100,\r\n};\r\n\r\nexport const USERROLESTRING = {\r\n PREPARER: 'Preparer',\r\n REVIEWER: 'Reviewer',\r\n APPROVER: 'Controller',\r\n GM_CFO: 'GM & CFO',\r\n CONTROLLER: 'Designated Controller',\r\n VIEWER: 'Viewer',\r\n};\r\n\r\nexport const OUTCOME = {\r\n APPROVE: 'Submit',\r\n REJECT: 'Reject',\r\n SAVE: 'Save',\r\n};\r\n\r\nexport const GMCFOMAILINGFLAG = {\r\n SEND_IN_PROGRESS_MAIL: 0,\r\n SEND_ACCEPTED_MAIL: 1,\r\n SEND_SUBMITTED_MAIL: 2,\r\n NOT_GM_CFO: -1,\r\n};\r\n\r\nexport const MAILINGTYPE = {\r\n FINAL_SUBMISSION_MAIL: 1,\r\n APPROVAL_MAIL: 0,\r\n REJECTION_MAIL: -1,\r\n};\r\n\r\nexport const REPORTINGLEVELCODE = {\r\n COMPANY: 1,\r\n MARKET: 2,\r\n BU: 3,\r\n SECTOR: 4,\r\n};\r\n\r\nexport const REPORTINGLEVElSTRING = {\r\n COMPANY: 'Company Code',\r\n MARKET: 'Market',\r\n BU: 'BU',\r\n SECTOR: 'Sector',\r\n};\r\n\r\nexport const getUserRoleCode = (userRole: string): number => {\r\n switch (userRole) {\r\n case USERROLESTRING.PREPARER:\r\n return USERROLECODE.PREPARER;\r\n case USERROLESTRING.REVIEWER:\r\n return USERROLECODE.REVIEWER;\r\n case USERROLESTRING.APPROVER:\r\n return USERROLECODE.APPROVER;\r\n case USERROLESTRING.GM_CFO:\r\n return USERROLECODE.GM_CFO;\r\n case USERROLESTRING.CONTROLLER:\r\n return USERROLECODE.CONTROLLER;\r\n case USERROLESTRING.VIEWER:\r\n return USERROLECODE.VIEWER;\r\n }\r\n return 100;\r\n};\r\n\r\nexport const getUserRoleString = (userRoleCode: number): string => {\r\n switch (Number(userRoleCode)) {\r\n case USERROLECODE.PREPARER:\r\n return USERROLESTRING.PREPARER;\r\n case USERROLECODE.REVIEWER:\r\n return USERROLESTRING.REVIEWER;\r\n case USERROLECODE.APPROVER:\r\n return USERROLESTRING.APPROVER;\r\n case USERROLECODE.GM_CFO:\r\n return USERROLESTRING.GM_CFO;\r\n case USERROLECODE.CONTROLLER:\r\n return USERROLESTRING.CONTROLLER;\r\n case USERROLECODE.VIEWER:\r\n return USERROLESTRING.VIEWER;\r\n }\r\n return '';\r\n};\r\n\r\nexport const getReportStatusCode = (status: string): number => {\r\n switch (status) {\r\n case REPORTSTATUSSTRING.REJECTED:\r\n return REPORTSTATUSCODE.REJECTED;\r\n case REPORTSTATUSSTRING.NOTPREPARED:\r\n return REPORTSTATUSCODE.NOTPREPARED;\r\n case REPORTSTATUSSTRING.PREPARED:\r\n return REPORTSTATUSCODE.PREPARED;\r\n case REPORTSTATUSSTRING.REVIEWED:\r\n return REPORTSTATUSCODE.REVIEWED;\r\n case REPORTSTATUSSTRING.APPROVED:\r\n return REPORTSTATUSCODE.APPROVED;\r\n case REPORTSTATUSSTRING.INTER_ACCEPTED:\r\n return REPORTSTATUSCODE.INTER_ACCEPTED;\r\n case REPORTSTATUSSTRING.ACCEPTED:\r\n return REPORTSTATUSCODE.ACCEPTED;\r\n case REPORTSTATUSSTRING.SUBMITTED:\r\n return REPORTSTATUSCODE.SUBMITTED;\r\n }\r\n return 100;\r\n};\r\n\r\nexport const getReportStatusString = (statusCode: number): string => {\r\n switch (Number(statusCode)) {\r\n case REPORTSTATUSCODE.REJECTED:\r\n return REPORTSTATUSSTRING.REJECTED;\r\n case REPORTSTATUSCODE.NOTPREPARED:\r\n return REPORTSTATUSSTRING.NOTPREPARED;\r\n case REPORTSTATUSCODE.PREPARED:\r\n return REPORTSTATUSSTRING.PREPARED;\r\n case REPORTSTATUSCODE.REVIEWED:\r\n return REPORTSTATUSSTRING.REVIEWED;\r\n case REPORTSTATUSCODE.APPROVED:\r\n return REPORTSTATUSSTRING.APPROVED;\r\n case REPORTSTATUSCODE.INTER_ACCEPTED:\r\n return REPORTSTATUSSTRING.INTER_ACCEPTED;\r\n case REPORTSTATUSCODE.ACCEPTED:\r\n return REPORTSTATUSSTRING.ACCEPTED;\r\n case REPORTSTATUSCODE.SUBMITTED:\r\n return REPORTSTATUSSTRING.SUBMITTED;\r\n }\r\n return '';\r\n};\r\n\r\nexport const getReportingLevelCode = (reportingLevelString: string): number => {\r\n switch (reportingLevelString) {\r\n case REPORTINGLEVElSTRING.COMPANY:\r\n return REPORTINGLEVELCODE.COMPANY;\r\n case REPORTINGLEVElSTRING.MARKET:\r\n return REPORTINGLEVELCODE.MARKET;\r\n case REPORTINGLEVElSTRING.BU:\r\n return REPORTINGLEVELCODE.BU;\r\n case REPORTINGLEVElSTRING.SECTOR:\r\n return REPORTINGLEVELCODE.SECTOR;\r\n }\r\n return 100;\r\n};\r\n\r\nexport const getReportingLevelString = (reportingLevelCode: number): string => {\r\n switch (Number(reportingLevelCode)) {\r\n case REPORTINGLEVELCODE.COMPANY:\r\n return REPORTINGLEVElSTRING.COMPANY;\r\n case REPORTINGLEVELCODE.MARKET:\r\n return REPORTINGLEVElSTRING.MARKET;\r\n case REPORTINGLEVELCODE.BU:\r\n return REPORTINGLEVElSTRING.BU;\r\n case REPORTINGLEVELCODE.SECTOR:\r\n return REPORTINGLEVElSTRING.SECTOR;\r\n }\r\n return '';\r\n};\r\n\r\nexport const FINALSUBMISSIONCODE = {\r\n CONTROLLER: 1,\r\n GM_CFO: 2,\r\n DESIGNATED_CONTROLLER: 3,\r\n GM_CFO_DESIGNATED_CONTROLLER: 4,\r\n};\r\n\r\nexport const FINALSUBMISSIONSTRING = {\r\n CONTROLLER: 'Controller',\r\n GM_CFO: 'GM and CFO',\r\n DESIGNATED_CONTROLLER: 'Designated Controller',\r\n GM_CFO_DESIGNATED_CONTROLLER: 'GM and CFO, Designated Controller',\r\n};\r\n\r\nexport const getReportStatusAfterSubmit = (\r\n userRole: number,\r\n currentReportStatus: number,\r\n finalSubmissionLevel: number\r\n): string => {\r\n let statusAfterApproval = currentReportStatus + 1;\r\n if (userRole === USERROLECODE.APPROVER) {\r\n switch (finalSubmissionLevel) {\r\n case FINALSUBMISSIONCODE.CONTROLLER:\r\n statusAfterApproval = REPORTSTATUSCODE.SUBMITTED;\r\n break;\r\n case FINALSUBMISSIONCODE.GM_CFO:\r\n statusAfterApproval = REPORTSTATUSCODE.APPROVED;\r\n break;\r\n case FINALSUBMISSIONCODE.DESIGNATED_CONTROLLER:\r\n statusAfterApproval = REPORTSTATUSCODE.ACCEPTED;\r\n break;\r\n case FINALSUBMISSIONCODE.GM_CFO_DESIGNATED_CONTROLLER:\r\n statusAfterApproval = REPORTSTATUSCODE.APPROVED;\r\n break;\r\n }\r\n }\r\n return getReportStatusString(statusAfterApproval);\r\n};\r\n\r\n// needs to be checked again - check how the url should be updated, reporting level to be added in the link\r\nexport const getMailSubjectAndBody = (\r\n mailType: number,\r\n reportingLevel: string,\r\n unitCode: string,\r\n yearQuarter: number,\r\n statusAfterApproval: string,\r\n userName: string,\r\n userRole: string,\r\n comment: string\r\n): string[] => {\r\n let subject = '';\r\n let body = '';\r\n const yearQuarterString = `${Math.floor(yearQuarter / 100)} Q-${\r\n yearQuarter % 100\r\n }`;\r\n const year = Math.floor(yearQuarter / 100);\r\n const quarter = yearQuarter % 100;\r\n let bsrUrl = `${webAppLink}/${year}/${quarter}/${reportingLevel}/${unitCode}`;\r\n bsrUrl = bsrUrl.replaceAll(' ', '%20');\r\n let nextReportStatus = getReportStatusCode(statusAfterApproval);\r\n nextReportStatus =\r\n nextReportStatus === REPORTSTATUSCODE.INTER_ACCEPTED\r\n ? REPORTSTATUSCODE.APPROVED\r\n : nextReportStatus;\r\n let nextLevelUserRole = getUserRoleString(nextReportStatus);\r\n nextLevelUserRole =\r\n nextLevelUserRole === USERROLESTRING.GM_CFO ? 'GM/CFO' : nextLevelUserRole;\r\n const statusText =\r\n mailType === MAILINGTYPE.FINAL_SUBMISSION_MAIL\r\n ? `Completed`\r\n : mailType === MAILINGTYPE.REJECTION_MAIL\r\n ? `${REPORTSTATUSSTRING.REJECTED}`\r\n : statusAfterApproval === REPORTSTATUSSTRING.INTER_ACCEPTED\r\n ? `Accepted (Require approval from remaining GM & CFO)`\r\n : statusAfterApproval;\r\n\r\n // needs to be checked again - unit code and reporting level to be added in the meeting subject\r\n subject = `${\r\n mailType === MAILINGTYPE.FINAL_SUBMISSION_MAIL ? `Submission for ` : ``\r\n }${unitCode} BSR Report for ${yearQuarterString} has been ${statusText}.`;\r\n\r\n // needs to be checked again - unit code and reporting level to be added in the meeting subject\r\n body = `\r\n

Dear ${\r\n mailType === MAILINGTYPE.FINAL_SUBMISSION_MAIL\r\n ? `Team`\r\n : `${nextLevelUserRole}`\r\n },

\r\n

BSR Report for ${unitCode} ${yearQuarterString} has been ${\r\n mailType === MAILINGTYPE.FINAL_SUBMISSION_MAIL\r\n ? `submitted successfully.
\r\n The report has been approved by ${userName} (${userRole}).

`\r\n : `${statusText} by ${userName} (${userRole}).

`\r\n } ${\r\n comment.length === 0\r\n ? ``\r\n : `

Following comment has been provided:

${comment}

`\r\n } ${\r\n mailType === MAILINGTYPE.FINAL_SUBMISSION_MAIL\r\n ? ``\r\n : `

As a ${nextLevelUserRole}, you need to continue with the required actions.

`\r\n }

You may view the report using this link: Link
(Preferred browsers to access the link - Google Chrome, Microsoft Edge).

\r\n

Thanks a lot for your efforts!

\r\n

Regards,
BSR Team

\r\n `;\r\n\r\n const signature = `Regards, \\n BSR Team`;\r\n\r\n return [subject, body, signature];\r\n};\r\n\r\nexport const DEFAULT_EMAIL_GM_CFO_LIST: EmailRecipientAndGmCfoDcCountObject = {\r\n approveCcList: '',\r\n rejectCcList: '',\r\n rejectToList: '',\r\n approveToList: '',\r\n dcListForGmCfo: '',\r\n gmCfoCount: 0,\r\n dcCount: 0,\r\n};\r\n","import { Tabs, Tab } from 'react-bootstrap';\r\nimport styles from './NavigationTab.module.css';\r\nimport HomeIcon from '../../images/NavigationTabImages/HomeIcon.png';\r\nimport ReportIcon from '../../images/NavigationTabImages/ReportIcon.png';\r\nimport React, { useEffect } from 'react';\r\nimport { NavigationTabProps } from '../interfaces';\r\nimport { DISPLAY } from '../constants';\r\nimport { useNavigate, useLocation } from 'react-router-dom';\r\n\r\n// Navigation tabs to swith between Power BI embedded report and Final Outcome report\r\nconst NavigationTab: React.FC = (\r\n props: NavigationTabProps\r\n) => {\r\n const location = useLocation();\r\n const navigate = useNavigate();\r\n useEffect(() => {\r\n if (location.pathname.includes('/Report')) {\r\n props.setSelectedView(DISPLAY.POWERBI);\r\n } else if (location.pathname.includes('/OutcomeReport')) {\r\n props.setSelectedView(DISPLAY.WORKFLOW);\r\n }\r\n }, [location, props]);\r\n return (\r\n {\r\n k && props.setSelectedView(k);\r\n if (k === DISPLAY.POWERBI) {\r\n navigate('/Report');\r\n } else {\r\n navigate('/OutcomeReport');\r\n }\r\n }}\r\n >\r\n \r\n Home Icon\r\n Power BI\r\n \r\n }\r\n />\r\n \r\n \r\n Final Outcome Report\r\n \r\n }\r\n />\r\n \r\n );\r\n};\r\n\r\nexport default NavigationTab;\r\n","export default \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABUAAAAXCAYAAADk3wSdAAAABHNCSVQICAgIfAhkiAAAAaxJREFUOE/tlT1SAkEQhb8m00QDAjK9gZixJHoD8QSyJ3A4gXoCxxMIJxBPICSsIUfAKg+AVVaR7VjNLOysLD8aWnayNT/9prtf91thm9XNIXs8IrRwYkjuH7a5yMYLTVMHHgH9enP0mREzttN1vutBG6ZNhXvgsMR5DMSMrH5XrBw0MhbhOoiuh2CBLnCS7U9J6fBqda9gRVCt3z4vhXRT4oJjZLoIV8GDlsR2QtQctGHOqfC0TNfxNienLEUtjUYuHGRgY1IuebUTXXvQyBhkXr8FGUNmtDaRgZKopAlHQTkUeCB8TwfuGNnbbW0zP/fl0ppeLO+nxELTuKxVPoA2ie3vBBheahoN4ibDGeagP4mw7NXIDBDOcGwA9a9rW632qUMJ6RSy2gk0MtOA3bLYnhnZ1vJgJ9BirfPJ0RTVHEMSe/5b0KJz/tg/6N+pqaNHYtvLFlnH8nr2J3NxySZKe3AhvGMc/jch+B7067BPy/aPEY6z+w+qUkXZy+XPC6PKTSjl39ers3a60NMWQhsXzHnqalSoonMu8pn7uipQw8k7kmXlDzV9q6L+BQ/pGS5nyf8jAAAAAElFTkSuQmCC\"","export default \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABkAAAAYCAYAAAAPtVbGAAAABHNCSVQICAgIfAhkiAAAAw5JREFUSEul1ntIU1EcB/DvbQ+dmukCH5SPXoSVoBLmA4QyAt9TMSyxBJM0RRemaPRHZgS97A6UEKH2R2NRFpYllUULxJUhTZPUpBQirTRn5APH3Il7dWtu9zZt5697zzn397m/87vn3kuBadFyOYAyUAhmz51vOhDUQEu3MKEoFqBwzfm4nBHC0UnrGGQEFIJA8AuAEhSmnATDAKQtxahBJ32WQoycsB0ECmhpZtmcb+aYgA2y1OG8AFhunBeJLNkNgTBjRZgRd/CW1tnNdZhJTKEPjK5bVoQsCIbQfXVi9ciKonNPmps3qESCNc+FcaducBfeyZrMzxtuDY9NZgT6SQUnrjSLlW1djMNTeIc1IaPQKuqtc2GAke962Z5jtHuwvxSa+mLIFS1QtnXxII5qQpEZvFH0mhGDwage/vYzhQGmpufY7rBtG6CpL0HTQ+2Dipx9sr/75D+WixASoP8929Pa0ed59LxaYJ0dA3VcLzW6S8QFDhFCSDyAAI5SS+68eFd0/NLd0H51taG9a1BwpFZlgfISI9FQnmlycxUn2CM2NclPicry8fbYyiAVh/fC29ON9Z68HkBCeSN77OUhwcDtarR3DSL3nAoM0Fh5EGIRa6baIzY1eVxXcNnb0y2WmR2xfSNcxEK0dX5AUkXTsuRYSF2Nj1/GEbUzCCKhJSkOxGZdCCGtAJLN3fdf9SLz9E3OjZJzIAJNVdmQuIisx1eHNL/sQdYZJSeQHhcKxckMBPh42Y6vDCGEJN/T9PIC2fHhuFicgkBfb64bcIyYTKZHqqfdSbm1Ks4MGICWp8NXupbvhWSFELRAS6fbzhydmHqfWN60Szf01S7Iof0RqCuTwY8fsDxdzHfY/CWzC/SMLkRlQytsERYolcFvPW8G5lhsJmEg0IDCOq58uZDE6BAUyWIte4ZvnaSebggJ9k2lFl82ci9IkAcKdo9Gy4X8tE9jEyHj+mn0fR4V/NDPkk3+0hmTyTTPF5wCteAiFup3bPabrMqNL11E/tEIIUJg2a+SiKKofkfXWY//AWtmXI+Xb/5gAAAAAElFTkSuQmCC\"","import { msalInstance, powerbiScopes } from '../config/msalConfig';\r\nimport { TokenDetails } from './interfaces';\r\n\r\nexport const getPowerBiAccessToken = async (): Promise => {\r\n let response;\r\n const loginRequest = {\r\n scopes: powerbiScopes.scopes,\r\n };\r\n try {\r\n response = await msalInstance.acquireTokenSilent({\r\n account: msalInstance.getAllAccounts()[0],\r\n scopes: powerbiScopes.scopes,\r\n });\r\n } catch (err) {\r\n response = await msalInstance.loginPopup(loginRequest);\r\n }\r\n return { accessToken: response.accessToken, expiry: response.expiresOn };\r\n};\r\n","import {\r\n POWER_BI_PAGE_DETAILS,\r\n REPORT_SPLIT_DETAILS,\r\n} from '../../config/powerBiReportDetails';\r\nimport { EmbeddedReportSlicerValues, PowerBIEmbedDetails } from '../interfaces';\r\n\r\nexport const REPORT_TYPES = {\r\n HEATMAP: 0,\r\n ASSETS: 1,\r\n LIABILITIES: 2,\r\n HELPER_SCHEDULE: 3,\r\n};\r\n\r\nexport const INITIAL_SLICER_VALUES: EmbeddedReportSlicerValues = {\r\n currentPeriod: [''],\r\n currentPeriodOperator: 'In',\r\n comparisonPeriod: [''],\r\n comparisonPeriodOperator: 'In',\r\n sectorName: [''],\r\n sectorNameOperator: 'In',\r\n buName: [''],\r\n buNameOperator: 'In',\r\n mktUnitName: [''],\r\n mktUnitNameOperator: 'In',\r\n company: [''],\r\n companyOperator: 'In',\r\n currencyValue: [''],\r\n currencyValueOperator: 'In',\r\n currencyUnit: [''],\r\n currencyUnitOperator: 'In',\r\n entity: [''],\r\n entityOperator: 'In',\r\n profitCenter: [''],\r\n profitCenterOperator: 'In',\r\n reportingLevel: [''],\r\n reportingLevelOperator: 'In',\r\n};\r\n\r\nexport const POWER_BI_VISUAL_TYPE = {\r\n SLICER: 'slicer',\r\n};\r\n\r\nexport const SLICER_TABLES_COLUMNS = {\r\n CURRENT_PERIOD_TABLE: 'Current Period Table',\r\n CURRENT_PERIOD_COLUMN: 'Current Period',\r\n COMPARISON_PERIOD_TABLE: 'Comparison Period Table',\r\n COMPARISON_PERIOD_COLUMN: 'Comparison Period',\r\n BSR_SECTOR_TABLE: 'BSR Sector Mapping',\r\n SECTOR_NAME_COLUMN: 'Sector Name',\r\n BU_NAME_COLUMN: 'BU Name',\r\n MARKET_COLUMN: 'Market Unit Name',\r\n COMPANY_COLUMN: 'Company',\r\n CURRENCY_VALUE_TABLE: 'Currency Values',\r\n CURRENCY_VALUE_COLUMN: 'Currency',\r\n CURRENCY_UNIT_TABLE: 'Currency Units',\r\n CURRENCY_UNIT_COLUMN: 'Units',\r\n ENTITY_TABLE: 'Entity Mapping',\r\n ENTITY_COLUMN: 'Entity Name',\r\n PROFIT_CENTER_TABLE: 'Profit Center Mapping',\r\n PROFIT_CENTER_COLUMN: 'Profit Center',\r\n REPORTING_LEVEL_TABLE: 'Reporting Level',\r\n REPORTING_LEVEL_COLUMN: 'Reporting Level Desription',\r\n};\r\n\r\nexport const POWER_BI_SLICER_CONSTANTS = {\r\n CURRENCY_VALUE_USD: 'USD',\r\n CURRENCY_UNIT_MILLIONS: 'Millions',\r\n CURRENCY_UNIT_THOUSANDS: 'Thousands',\r\n};\r\n\r\nexport const VALIDATION_SCREEN_PAGE_NAME = 'Validation Dashboard';\r\n\r\nexport const REPORT_PAGE_MAPPING: PowerBIEmbedDetails[] = [\r\n {\r\n id: 1,\r\n groupId: REPORT_SPLIT_DETAILS.groupId,\r\n reportId: REPORT_SPLIT_DETAILS.heatmapReportId,\r\n pageId: POWER_BI_PAGE_DETAILS.heatmap,\r\n pageDisplayName: 'Heatmap Homepage',\r\n type: REPORT_TYPES.HEATMAP,\r\n },\r\n {\r\n id: 2,\r\n groupId: REPORT_SPLIT_DETAILS.groupId,\r\n reportId: REPORT_SPLIT_DETAILS.assetsReportId,\r\n pageId: POWER_BI_PAGE_DETAILS.ccst,\r\n pageDisplayName: 'Cash And Short Term Inv.',\r\n type: REPORT_TYPES.ASSETS,\r\n },\r\n {\r\n id: 3,\r\n groupId: REPORT_SPLIT_DETAILS.groupId,\r\n reportId: REPORT_SPLIT_DETAILS.assetsReportId,\r\n pageId: POWER_BI_PAGE_DETAILS.ar,\r\n pageDisplayName: 'Net Trade Receivable',\r\n type: REPORT_TYPES.ASSETS,\r\n },\r\n {\r\n id: 4,\r\n groupId: REPORT_SPLIT_DETAILS.groupId,\r\n reportId: REPORT_SPLIT_DETAILS.assetsReportId,\r\n pageId: POWER_BI_PAGE_DETAILS.noar,\r\n pageDisplayName: 'Net Other Notes Rec & AR Other',\r\n type: REPORT_TYPES.ASSETS,\r\n },\r\n {\r\n id: 5,\r\n groupId: REPORT_SPLIT_DETAILS.groupId,\r\n reportId: REPORT_SPLIT_DETAILS.assetsReportId,\r\n pageId: POWER_BI_PAGE_DETAILS.inventory,\r\n pageDisplayName: 'Net Inventories',\r\n type: REPORT_TYPES.ASSETS,\r\n },\r\n {\r\n id: 6,\r\n groupId: REPORT_SPLIT_DETAILS.groupId,\r\n reportId: REPORT_SPLIT_DETAILS.assetsReportId,\r\n pageId: POWER_BI_PAGE_DETAILS.prepaid,\r\n pageDisplayName: 'Prepaid Expenses & Other',\r\n type: REPORT_TYPES.ASSETS,\r\n },\r\n {\r\n id: 7,\r\n groupId: REPORT_SPLIT_DETAILS.groupId,\r\n reportId: REPORT_SPLIT_DETAILS.assetsReportId,\r\n pageId: POWER_BI_PAGE_DETAILS.icar,\r\n pageDisplayName: 'Intercompany Receivables',\r\n type: REPORT_TYPES.ASSETS,\r\n },\r\n {\r\n id: 8,\r\n groupId: REPORT_SPLIT_DETAILS.groupId,\r\n reportId: REPORT_SPLIT_DETAILS.assetsReportId,\r\n pageId: POWER_BI_PAGE_DETAILS.capex,\r\n pageDisplayName: 'Net Fixed Assets (Include CIP)',\r\n type: REPORT_TYPES.ASSETS,\r\n },\r\n {\r\n id: 9,\r\n groupId: REPORT_SPLIT_DETAILS.groupId,\r\n reportId: REPORT_SPLIT_DETAILS.assetsReportId,\r\n pageId: POWER_BI_PAGE_DETAILS.rou,\r\n pageDisplayName: 'ROU Asset Operating Lease',\r\n type: REPORT_TYPES.ASSETS,\r\n },\r\n {\r\n id: 10,\r\n groupId: REPORT_SPLIT_DETAILS.groupId,\r\n reportId: REPORT_SPLIT_DETAILS.assetsReportId,\r\n pageId: POWER_BI_PAGE_DETAILS.goodwill_otherAssets,\r\n pageDisplayName: 'Goodwill & Other Intangibles',\r\n type: REPORT_TYPES.ASSETS,\r\n },\r\n {\r\n id: 11,\r\n groupId: REPORT_SPLIT_DETAILS.groupId,\r\n reportId: REPORT_SPLIT_DETAILS.assetsReportId,\r\n pageId: POWER_BI_PAGE_DETAILS.goodwill_otherAssets,\r\n pageDisplayName: 'Other Assets (Deposit)',\r\n type: REPORT_TYPES.ASSETS,\r\n },\r\n {\r\n id: 12,\r\n groupId: REPORT_SPLIT_DETAILS.groupId,\r\n reportId: REPORT_SPLIT_DETAILS.assetsReportId,\r\n pageId: POWER_BI_PAGE_DETAILS.dta,\r\n pageDisplayName: 'Deferred Tax Assets',\r\n type: REPORT_TYPES.ASSETS,\r\n },\r\n {\r\n id: 13,\r\n groupId: REPORT_SPLIT_DETAILS.groupId,\r\n reportId: REPORT_SPLIT_DETAILS.liabilitiesReportId,\r\n pageId: POWER_BI_PAGE_DETAILS.currentDebt_leaseSt_leaseLt,\r\n pageDisplayName: 'Current L/T Debt',\r\n type: REPORT_TYPES.LIABILITIES,\r\n },\r\n {\r\n id: 14,\r\n groupId: REPORT_SPLIT_DETAILS.groupId,\r\n reportId: REPORT_SPLIT_DETAILS.liabilitiesReportId,\r\n pageId: POWER_BI_PAGE_DETAILS.currentDebt_leaseSt_leaseLt,\r\n pageDisplayName: 'Lease Liability (ST)',\r\n type: REPORT_TYPES.LIABILITIES,\r\n },\r\n {\r\n id: 15,\r\n groupId: REPORT_SPLIT_DETAILS.groupId,\r\n reportId: REPORT_SPLIT_DETAILS.liabilitiesReportId,\r\n pageId: POWER_BI_PAGE_DETAILS.ap,\r\n pageDisplayName: 'Accounts Payable',\r\n type: REPORT_TYPES.LIABILITIES,\r\n },\r\n {\r\n id: 16,\r\n groupId: REPORT_SPLIT_DETAILS.groupId,\r\n reportId: REPORT_SPLIT_DETAILS.liabilitiesReportId,\r\n pageId: POWER_BI_PAGE_DETAILS.accruedTax,\r\n pageDisplayName: 'Accrued Taxes (inc & other)',\r\n type: REPORT_TYPES.LIABILITIES,\r\n },\r\n {\r\n id: 17,\r\n groupId: REPORT_SPLIT_DETAILS.groupId,\r\n reportId: REPORT_SPLIT_DETAILS.liabilitiesReportId,\r\n pageId: POWER_BI_PAGE_DETAILS.oal,\r\n pageDisplayName: 'Other Accrued Liabilities',\r\n type: REPORT_TYPES.LIABILITIES,\r\n },\r\n {\r\n id: 18,\r\n groupId: REPORT_SPLIT_DETAILS.groupId,\r\n reportId: REPORT_SPLIT_DETAILS.liabilitiesReportId,\r\n pageId: POWER_BI_PAGE_DETAILS.icap,\r\n pageDisplayName: 'Intercompany Payables',\r\n type: REPORT_TYPES.LIABILITIES,\r\n },\r\n {\r\n id: 19,\r\n groupId: REPORT_SPLIT_DETAILS.groupId,\r\n reportId: REPORT_SPLIT_DETAILS.liabilitiesReportId,\r\n pageId: POWER_BI_PAGE_DETAILS.currentDebt_leaseSt_leaseLt,\r\n pageDisplayName: 'Lease Liability (LT)',\r\n type: REPORT_TYPES.LIABILITIES,\r\n },\r\n {\r\n id: 20,\r\n groupId: REPORT_SPLIT_DETAILS.groupId,\r\n reportId: REPORT_SPLIT_DETAILS.liabilitiesReportId,\r\n pageId: POWER_BI_PAGE_DETAILS.oltl,\r\n pageDisplayName: 'Other Long Term Liabilities',\r\n type: REPORT_TYPES.LIABILITIES,\r\n },\r\n {\r\n id: 21,\r\n groupId: REPORT_SPLIT_DETAILS.groupId,\r\n reportId: REPORT_SPLIT_DETAILS.liabilitiesReportId,\r\n pageId: POWER_BI_PAGE_DETAILS.dtl,\r\n pageDisplayName: 'Deferred Income Taxes (DTL)',\r\n type: REPORT_TYPES.LIABILITIES,\r\n },\r\n {\r\n id: 22,\r\n groupId: REPORT_SPLIT_DETAILS.groupId,\r\n reportId: REPORT_SPLIT_DETAILS.liabilitiesReportId,\r\n pageId: POWER_BI_PAGE_DETAILS.capitalStock_re_nci_cta,\r\n pageDisplayName: 'Capital Stock & Pd in Capital',\r\n type: REPORT_TYPES.LIABILITIES,\r\n },\r\n {\r\n id: 23,\r\n groupId: REPORT_SPLIT_DETAILS.groupId,\r\n reportId: REPORT_SPLIT_DETAILS.liabilitiesReportId,\r\n pageId: POWER_BI_PAGE_DETAILS.capitalStock_re_nci_cta,\r\n pageDisplayName: 'Retained Earnings',\r\n type: REPORT_TYPES.LIABILITIES,\r\n },\r\n {\r\n id: 24,\r\n groupId: REPORT_SPLIT_DETAILS.groupId,\r\n reportId: REPORT_SPLIT_DETAILS.liabilitiesReportId,\r\n pageId: POWER_BI_PAGE_DETAILS.capitalStock_re_nci_cta,\r\n pageDisplayName: 'Cumulative Translation Adj.',\r\n type: REPORT_TYPES.LIABILITIES,\r\n },\r\n {\r\n id: 25,\r\n groupId: REPORT_SPLIT_DETAILS.groupId,\r\n reportId: REPORT_SPLIT_DETAILS.liabilitiesReportId,\r\n pageId: POWER_BI_PAGE_DETAILS.capitalStock_re_nci_cta,\r\n pageDisplayName: 'Non Controlling Interest',\r\n type: REPORT_TYPES.LIABILITIES,\r\n },\r\n {\r\n id: 26,\r\n groupId: REPORT_SPLIT_DETAILS.groupId,\r\n reportId: REPORT_SPLIT_DETAILS.heatmapReportId,\r\n pageId: POWER_BI_PAGE_DETAILS.summaryBS,\r\n pageDisplayName: 'Summary BS',\r\n type: REPORT_TYPES.HEATMAP,\r\n },\r\n {\r\n id: 27,\r\n groupId: REPORT_SPLIT_DETAILS.groupId,\r\n reportId: REPORT_SPLIT_DETAILS.heatmapReportId,\r\n pageId: POWER_BI_PAGE_DETAILS.cccWatchouts,\r\n pageDisplayName: 'CCC Watchouts',\r\n type: REPORT_TYPES.HEATMAP,\r\n },\r\n {\r\n id: 28,\r\n groupId: REPORT_SPLIT_DETAILS.groupId,\r\n reportId: REPORT_SPLIT_DETAILS.heatmapReportId,\r\n pageId: POWER_BI_PAGE_DETAILS.cashflow,\r\n pageDisplayName: 'Cashflow',\r\n type: REPORT_TYPES.HEATMAP,\r\n },\r\n {\r\n id: 29,\r\n groupId: REPORT_SPLIT_DETAILS.groupId,\r\n reportId: REPORT_SPLIT_DETAILS.heatmapReportId,\r\n pageId: POWER_BI_PAGE_DETAILS.gcsSummary,\r\n pageDisplayName: 'GCS Summary',\r\n type: REPORT_TYPES.HEATMAP,\r\n },\r\n {\r\n id: 30,\r\n groupId: REPORT_SPLIT_DETAILS.groupId,\r\n reportId: REPORT_SPLIT_DETAILS.heatmapReportId,\r\n pageId: POWER_BI_PAGE_DETAILS.hfmSapRecon,\r\n pageDisplayName: 'Recon. SAP-HFM',\r\n type: REPORT_TYPES.HEATMAP,\r\n },\r\n {\r\n id: 31,\r\n groupId: REPORT_SPLIT_DETAILS.groupId,\r\n reportId: REPORT_SPLIT_DETAILS.heatmapReportId,\r\n pageId: POWER_BI_PAGE_DETAILS.blacklineSummary,\r\n pageDisplayName: 'Blackline Summary',\r\n type: REPORT_TYPES.HEATMAP,\r\n },\r\n {\r\n id: 32,\r\n groupId: REPORT_SPLIT_DETAILS.groupId,\r\n reportId: REPORT_SPLIT_DETAILS.helperReportId,\r\n pageId: POWER_BI_PAGE_DETAILS.validationScreen,\r\n pageDisplayName: VALIDATION_SCREEN_PAGE_NAME,\r\n type: REPORT_TYPES.HELPER_SCHEDULE,\r\n },\r\n {\r\n id: 33,\r\n groupId: REPORT_SPLIT_DETAILS.groupId,\r\n reportId: REPORT_SPLIT_DETAILS.helperReportId,\r\n pageId: POWER_BI_PAGE_DETAILS.pendingUload,\r\n pageDisplayName: 'Pending ULOAD',\r\n type: REPORT_TYPES.HELPER_SCHEDULE,\r\n },\r\n {\r\n id: 34,\r\n groupId: REPORT_SPLIT_DETAILS.groupId,\r\n reportId: REPORT_SPLIT_DETAILS.helperReportId,\r\n pageId: POWER_BI_PAGE_DETAILS.existingUload,\r\n pageDisplayName: 'Existing ULOAD',\r\n type: REPORT_TYPES.HELPER_SCHEDULE,\r\n },\r\n];\r\n\r\nexport const INITIAL_EMBED_DETAILS: PowerBIEmbedDetails =\r\n REPORT_PAGE_MAPPING[0];\r\n","import { models } from 'powerbi-client';\r\nimport { REPORTINGLEVElSTRING, USERROLESTRING } from '../constants';\r\nimport {\r\n DefautPeriod,\r\n EmbeddedReportSlicerValues,\r\n UserDetailsObject,\r\n} from '../interfaces';\r\nimport {\r\n POWER_BI_SLICER_CONSTANTS,\r\n SLICER_TABLES_COLUMNS,\r\n VALIDATION_SCREEN_PAGE_NAME,\r\n} from './PowerBIConstants';\r\n\r\nexport const computeDeafualtPeriod = (): DefautPeriod => {\r\n const MONTH_FORMAT = [\r\n 'JAN',\r\n 'FEB',\r\n 'MAR',\r\n 'APR',\r\n 'MAY',\r\n 'JUN',\r\n 'JUL',\r\n 'AUG',\r\n 'SEP',\r\n 'OCT',\r\n 'NOV',\r\n 'DEC',\r\n ];\r\n const dateToday = new Date();\r\n const currentMonthNo = dateToday.getMonth();\r\n const currentYear =\r\n currentMonthNo === 0\r\n ? dateToday.getFullYear() - 1\r\n : dateToday.getFullYear();\r\n const defaultMonth =\r\n currentMonthNo !== 0 ? MONTH_FORMAT[currentMonthNo - 1] : MONTH_FORMAT[11];\r\n const comparisonYear = currentYear - 1;\r\n\r\n const defaultCurrentPeriod = defaultMonth + ' ' + currentYear;\r\n const defaultComparisonPeriod = defaultMonth + ' ' + comparisonYear;\r\n\r\n return {\r\n currentPeriod: defaultCurrentPeriod,\r\n comparisonPeriod: defaultComparisonPeriod,\r\n };\r\n};\r\n\r\nexport const isPreparerOrReviewer = (\r\n userList: UserDetailsObject[]\r\n): boolean => {\r\n const userRolesList = userList.map((item) => item.role);\r\n if (\r\n userRolesList.includes(USERROLESTRING.PREPARER) ||\r\n userRolesList.includes(USERROLESTRING.REVIEWER)\r\n ) {\r\n return true;\r\n }\r\n return true;\r\n};\r\n\r\nexport const getInitialSlicerValue = (\r\n defaultValue: UserDetailsObject\r\n): EmbeddedReportSlicerValues => {\r\n const defaultPeriod = computeDeafualtPeriod();\r\n return {\r\n //Set the period dynamically\r\n currentPeriod: [defaultPeriod.currentPeriod],\r\n currentPeriodOperator: 'In',\r\n comparisonPeriod: [defaultPeriod.comparisonPeriod],\r\n comparisonPeriodOperator: 'In',\r\n sectorName: [defaultValue.sectorName],\r\n sectorNameOperator: 'In',\r\n buName: [defaultValue.buName],\r\n buNameOperator: 'In',\r\n mktUnitName: [defaultValue.mktUnitName],\r\n mktUnitNameOperator: 'In',\r\n company: [defaultValue.compName],\r\n companyOperator: 'In',\r\n currencyValue: [POWER_BI_SLICER_CONSTANTS.CURRENCY_VALUE_USD],\r\n currencyValueOperator: 'In',\r\n currencyUnit: [POWER_BI_SLICER_CONSTANTS.CURRENCY_UNIT_MILLIONS],\r\n currencyUnitOperator: 'In',\r\n entity: [],\r\n entityOperator: 'All',\r\n profitCenter: [],\r\n profitCenterOperator: 'All',\r\n reportingLevel: [REPORTINGLEVElSTRING.COMPANY],\r\n reportingLevelOperator: 'In',\r\n };\r\n};\r\n\r\nexport const getSlicerConfig = (\r\n slicerData: EmbeddedReportSlicerValues,\r\n pageDisplayName: string\r\n): models.ISlicer[] => {\r\n //Defining Filters for the slicers\r\n const basicFilter: models.ISlicerFilter[] = [\r\n {\r\n $schema: 'http://powerbi.com/product/schema#basic',\r\n target: {\r\n table: SLICER_TABLES_COLUMNS.CURRENT_PERIOD_TABLE,\r\n column: SLICER_TABLES_COLUMNS.CURRENT_PERIOD_COLUMN,\r\n },\r\n operator: slicerData.currentPeriodOperator as models.BasicFilterOperators,\r\n values: slicerData.currentPeriod,\r\n filterType: models.FilterType.Basic,\r\n },\r\n {\r\n $schema: 'http://powerbi.com/product/schema#basic',\r\n target: {\r\n table: SLICER_TABLES_COLUMNS.COMPARISON_PERIOD_TABLE,\r\n column: SLICER_TABLES_COLUMNS.COMPARISON_PERIOD_COLUMN,\r\n },\r\n operator: slicerData.comparisonPeriodOperator as models.BasicFilterOperators,\r\n values: slicerData.comparisonPeriod,\r\n filterType: models.FilterType.Basic,\r\n },\r\n {\r\n $schema: 'http://powerbi.com/product/schema#basic',\r\n target: {\r\n table: SLICER_TABLES_COLUMNS.BSR_SECTOR_TABLE,\r\n column: SLICER_TABLES_COLUMNS.SECTOR_NAME_COLUMN,\r\n },\r\n operator: slicerData.sectorNameOperator as models.BasicFilterOperators,\r\n values: slicerData.sectorName,\r\n filterType: models.FilterType.Basic,\r\n },\r\n {\r\n $schema: 'http://powerbi.com/product/schema#basic',\r\n target: {\r\n table: SLICER_TABLES_COLUMNS.BSR_SECTOR_TABLE,\r\n column: SLICER_TABLES_COLUMNS.BU_NAME_COLUMN,\r\n },\r\n operator: slicerData.buNameOperator as models.BasicFilterOperators,\r\n values: slicerData.buName,\r\n filterType: models.FilterType.Basic,\r\n },\r\n {\r\n $schema: 'http://powerbi.com/product/schema#basic',\r\n target: {\r\n table: SLICER_TABLES_COLUMNS.BSR_SECTOR_TABLE,\r\n column: SLICER_TABLES_COLUMNS.MARKET_COLUMN,\r\n },\r\n operator: slicerData.mktUnitNameOperator as models.BasicFilterOperators,\r\n values: slicerData.mktUnitName,\r\n filterType: models.FilterType.Basic,\r\n },\r\n {\r\n $schema: 'http://powerbi.com/product/schema#basic',\r\n target: {\r\n table: SLICER_TABLES_COLUMNS.BSR_SECTOR_TABLE,\r\n column: SLICER_TABLES_COLUMNS.COMPANY_COLUMN,\r\n },\r\n operator: slicerData.companyOperator as models.BasicFilterOperators,\r\n values: slicerData.company,\r\n filterType: models.FilterType.Basic,\r\n },\r\n {\r\n $schema: 'http://powerbi.com/product/schema#basic',\r\n target: {\r\n table: SLICER_TABLES_COLUMNS.CURRENCY_VALUE_TABLE,\r\n column: SLICER_TABLES_COLUMNS.CURRENCY_VALUE_COLUMN,\r\n },\r\n operator: slicerData.currencyValueOperator as models.BasicFilterOperators,\r\n values: slicerData.currencyValue,\r\n filterType: models.FilterType.Basic,\r\n },\r\n {\r\n $schema: 'http://powerbi.com/product/schema#basic',\r\n target: {\r\n table: SLICER_TABLES_COLUMNS.CURRENCY_UNIT_TABLE,\r\n column: SLICER_TABLES_COLUMNS.CURRENCY_UNIT_COLUMN,\r\n },\r\n operator: slicerData.currencyUnitOperator as models.BasicFilterOperators,\r\n values:\r\n pageDisplayName === VALIDATION_SCREEN_PAGE_NAME\r\n ? [POWER_BI_SLICER_CONSTANTS.CURRENCY_UNIT_THOUSANDS]\r\n : slicerData.currencyUnit,\r\n\r\n filterType: models.FilterType.Basic,\r\n },\r\n {\r\n $schema: 'http://powerbi.com/product/schema#basic',\r\n target: {\r\n table: SLICER_TABLES_COLUMNS.ENTITY_TABLE,\r\n column: SLICER_TABLES_COLUMNS.ENTITY_COLUMN,\r\n },\r\n operator: slicerData.entityOperator as models.BasicFilterOperators,\r\n values: slicerData.entity,\r\n filterType: models.FilterType.Basic,\r\n },\r\n {\r\n $schema: 'http://powerbi.com/product/schema#basic',\r\n target: {\r\n table: SLICER_TABLES_COLUMNS.PROFIT_CENTER_TABLE,\r\n column: SLICER_TABLES_COLUMNS.PROFIT_CENTER_COLUMN,\r\n },\r\n operator: slicerData.profitCenterOperator as models.BasicFilterOperators,\r\n values: slicerData.profitCenter,\r\n filterType: models.FilterType.Basic,\r\n },\r\n {\r\n $schema: 'http://powerbi.com/product/schema#basic',\r\n target: {\r\n table: SLICER_TABLES_COLUMNS.REPORTING_LEVEL_TABLE,\r\n column: SLICER_TABLES_COLUMNS.REPORTING_LEVEL_COLUMN,\r\n },\r\n operator: slicerData.reportingLevelOperator as models.BasicFilterOperators,\r\n values: slicerData.reportingLevel,\r\n filterType: models.FilterType.Basic,\r\n },\r\n ];\r\n //Defining slicer states\r\n const GlobalSlicers: models.ISlicer[] = [\r\n {\r\n selector: {\r\n $schema: 'http://powerbi.com/product/schema#slicerTargetSelector',\r\n target: {\r\n table: SLICER_TABLES_COLUMNS.CURRENT_PERIOD_TABLE,\r\n column: SLICER_TABLES_COLUMNS.CURRENT_PERIOD_COLUMN,\r\n },\r\n },\r\n state: {\r\n filters: [basicFilter[0]],\r\n },\r\n },\r\n {\r\n selector: {\r\n $schema: 'http://powerbi.com/product/schema#slicerTargetSelector',\r\n target: {\r\n table: SLICER_TABLES_COLUMNS.COMPARISON_PERIOD_TABLE,\r\n column: SLICER_TABLES_COLUMNS.COMPARISON_PERIOD_COLUMN,\r\n },\r\n },\r\n state: {\r\n filters: [basicFilter[1]],\r\n },\r\n },\r\n {\r\n selector: {\r\n $schema: 'http://powerbi.com/product/schema#slicerTargetSelector',\r\n target: {\r\n table: SLICER_TABLES_COLUMNS.BSR_SECTOR_TABLE,\r\n column: SLICER_TABLES_COLUMNS.SECTOR_NAME_COLUMN,\r\n },\r\n },\r\n state: {\r\n filters:\r\n slicerData.sectorNameOperator === 'All' ? [] : [basicFilter[2]],\r\n },\r\n },\r\n {\r\n selector: {\r\n $schema: 'http://powerbi.com/product/schema#slicerTargetSelector',\r\n target: {\r\n table: SLICER_TABLES_COLUMNS.BSR_SECTOR_TABLE,\r\n column: SLICER_TABLES_COLUMNS.BU_NAME_COLUMN,\r\n },\r\n },\r\n state: {\r\n filters: slicerData.buNameOperator === 'All' ? [] : [basicFilter[3]],\r\n },\r\n },\r\n {\r\n selector: {\r\n $schema: 'http://powerbi.com/product/schema#slicerTargetSelector',\r\n target: {\r\n table: SLICER_TABLES_COLUMNS.BSR_SECTOR_TABLE,\r\n column: SLICER_TABLES_COLUMNS.MARKET_COLUMN,\r\n },\r\n },\r\n state: {\r\n filters:\r\n slicerData.mktUnitNameOperator === 'All' ? [] : [basicFilter[4]],\r\n },\r\n },\r\n {\r\n selector: {\r\n $schema: 'http://powerbi.com/product/schema#slicerTargetSelector',\r\n target: {\r\n table: SLICER_TABLES_COLUMNS.BSR_SECTOR_TABLE,\r\n column: SLICER_TABLES_COLUMNS.COMPANY_COLUMN,\r\n },\r\n },\r\n state: {\r\n filters: slicerData.companyOperator === 'All' ? [] : [basicFilter[5]],\r\n },\r\n },\r\n {\r\n selector: {\r\n $schema: 'http://powerbi.com/product/schema#slicerTargetSelector',\r\n target: {\r\n table: SLICER_TABLES_COLUMNS.CURRENCY_VALUE_TABLE,\r\n column: SLICER_TABLES_COLUMNS.CURRENCY_VALUE_COLUMN,\r\n },\r\n },\r\n state: {\r\n filters: [basicFilter[6]],\r\n },\r\n },\r\n {\r\n selector: {\r\n $schema: 'http://powerbi.com/product/schema#slicerTargetSelector',\r\n target: {\r\n table: SLICER_TABLES_COLUMNS.CURRENCY_UNIT_TABLE,\r\n column: SLICER_TABLES_COLUMNS.CURRENCY_UNIT_COLUMN,\r\n },\r\n },\r\n state: {\r\n filters: [basicFilter[7]],\r\n },\r\n },\r\n {\r\n selector: {\r\n $schema: 'http://powerbi.com/product/schema#slicerTargetSelector',\r\n target: {\r\n table: SLICER_TABLES_COLUMNS.ENTITY_TABLE,\r\n column: SLICER_TABLES_COLUMNS.ENTITY_COLUMN,\r\n },\r\n },\r\n state: {\r\n filters: slicerData.entityOperator === 'All' ? [] : [basicFilter[8]],\r\n },\r\n },\r\n {\r\n selector: {\r\n $schema: 'http://powerbi.com/product/schema#slicerTargetSelector',\r\n target: {\r\n table: SLICER_TABLES_COLUMNS.PROFIT_CENTER_TABLE,\r\n column: SLICER_TABLES_COLUMNS.PROFIT_CENTER_COLUMN,\r\n },\r\n },\r\n state: {\r\n filters:\r\n slicerData.profitCenterOperator === 'All' ? [] : [basicFilter[9]],\r\n },\r\n },\r\n {\r\n selector: {\r\n $schema: 'http://powerbi.com/product/schema#slicerTargetSelector',\r\n target: {\r\n table: SLICER_TABLES_COLUMNS.REPORTING_LEVEL_TABLE,\r\n column: SLICER_TABLES_COLUMNS.REPORTING_LEVEL_COLUMN,\r\n },\r\n },\r\n state: {\r\n filters: [basicFilter[10]],\r\n },\r\n },\r\n ];\r\n return GlobalSlicers;\r\n};\r\n\r\nexport const getEmbedUrl = (groupId: string, reportId: string): string => {\r\n return `https://app.powerbi.com/reportEmbed?reportId=${reportId}&groupId=${groupId}`;\r\n};\r\n","import React from 'react';\r\nimport { Nav, Navbar, NavDropdown } from 'react-bootstrap';\r\nimport { SHARE_POINT_LINKS } from '../../config/powerBiReportDetails';\r\nimport { PowerBINavBarProps } from '../interfaces';\r\nimport { REPORT_TYPES, REPORT_PAGE_MAPPING } from './PowerBIConstants';\r\nimport styles from './ReportNavigationTab.module.css';\r\nimport ExcelIcon from '../../images/PowerBIEmbed/excel.png';\r\nimport { Link, useLocation } from 'react-router-dom';\r\n\r\n// Navigation tab to switch between different Power BI report\r\nconst ReportNavigationTab: React.FC = (\r\n props: PowerBINavBarProps\r\n) => {\r\n const location = useLocation();\r\n return (\r\n \r\n \r\n\r\n \r\n \r\n \r\n \r\n \r\n );\r\n};\r\n\r\nexport default ReportNavigationTab;\r\n","export default \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABkAAAAZCAYAAADE6YVjAAAABHNCSVQICAgIfAhkiAAAAyxJREFUSEvFlltIU3Ecx7//nbOb5jaHTc2s0QrKUogKKcJ0GBaGpkUQ9WAEkURlD1mRXaS7QT2UKdoeBHuLgqiHgkSIoIceeutiUSjVQPOyzU13OaffObs4azvbXur/sP//nJ3z+/y/v9v/MPyDwZIwOFPDuv3031KlPegMWVCp+KSPiBBDojjzICHEXL+h2Lh77Vd6m1OCGAoXgtdpFH3hH3XdSQgx2tfYzAc2fU7lyXQg3iGn4z9DmjYmUEJ7ittWWko+/nCwRR2N90QIq0TJNwL9igJEUdQztbqcFpDv0yyvCaA1GMFn62VYWpD3BCm4Xk9vzxkjQNigNBNCmuPvCbMBgolgnAo5SxaD1xNQYQS+jTlY/rW6MCRqXNp75DreeHQt+PyAioFpuPQhlis7Ih4RsKfUjraqJhx7cgsDX97iZMU+7Fy9BQ19rXC6xsKqvAFKbIJo+Qwgl2vpXcldIjRUWE+bbpK7GZof3cDg4W6ce96N3jeP59T5gmC8KjNI3qXt89xlt61H/952DE864Zn1ovZ+C6ZpljNASgpfSHZVRkry2mtiSqRYqBjDq+YerLRYcebZXXS9fhjOLso8STHzBMCHpJjw4IrMYDq1YuCDI5MOZr64NaZEMtJAMehsPIWh0WGoOR41XUcw5XNH0ps2MeGH1kMwgvgLtBB0ip0HIafbwXLPVxNErg3k6nMwQHF49/0DOl72YfBoL66+cOD2QH9EiQBuMgDtNJVJJhBTW1VMSVv1Qewqs6Ou9wSGx3/iwrZDqC+tRF33cYzQNQSCTAWh9YXdlbYS09lKUZQrPa4II9dybUTXkZlzBaGboeySIIXkLm0a7jKerpjLLgXj0eDLkACfmRJD6+ZOCkmJbAQUmxAFNSjq4Z4N9y5Bbl5hRTTUbgGaLD2YWllBNOX8457ErV5bbLTprZb5XVhqwFSE3AIduGyN3LvSGf7x6SSQ5Rabsazo71Yv9SwyznhSkezg/oPsn/Alh+SWWxOfjFSsmYykEN2K/GWmcuunVGd8OjD/L29Psm3ps0sKW8g1il8rKSEMQsjp6lfSLp1Gyb93UhJiD8z8BrURyZDIOB00AAAAAElFTkSuQmCC\"","import React from 'react';\r\nimport { PowerBIEmbed } from 'powerbi-client-react';\r\nimport { Embed, models, Report, VisualDescriptor } from 'powerbi-client';\r\nimport styles from './ReportEmbedComponent.module.css';\r\nimport {\r\n EmbeddedReportSlicerValues,\r\n ReportEmbedComponentProps,\r\n} from '../interfaces';\r\nimport {\r\n POWER_BI_VISUAL_TYPE,\r\n REPORT_PAGE_MAPPING,\r\n VALIDATION_SCREEN_PAGE_NAME,\r\n SLICER_TABLES_COLUMNS,\r\n} from '../PowerBIEmbedded/PowerBIConstants';\r\nimport {\r\n getEmbedUrl,\r\n getSlicerConfig,\r\n} from '../PowerBIEmbedded/PowerBiMethods';\r\nimport { useParams } from 'react-router';\r\n\r\nconst ReportEmbedComponent: React.FC = (\r\n props: ReportEmbedComponentProps\r\n) => {\r\n const params = useParams();\r\n\r\n const embedDetails = params.pageDisplayName\r\n ? REPORT_PAGE_MAPPING.filter(\r\n (item) => item.pageDisplayName === params.pageDisplayName\r\n )[0]\r\n : REPORT_PAGE_MAPPING[0];\r\n document.title = 'BSR | ' + embedDetails.pageDisplayName;\r\n let embeddedReport: Report;\r\n\r\n // Update or set slicer values\r\n const updateReportSlicerValues = async (visuals: VisualDescriptor[]) => {\r\n const slicerList = visuals.filter(\r\n (visual) => visual.type === POWER_BI_VISUAL_TYPE.SLICER\r\n );\r\n\r\n const temporarySlicerValues: EmbeddedReportSlicerValues = Object.assign(\r\n {},\r\n JSON.parse(\r\n localStorage.getItem('slicers') || ''\r\n ) as EmbeddedReportSlicerValues\r\n );\r\n\r\n await Promise.all(\r\n slicerList.map(async (slicer) => {\r\n const slicerState = await slicer.getSlicerState();\r\n let slicerValue: string | string[];\r\n const filterSize = slicerState.filters.length;\r\n const slicerTarget = (slicerState.targets as models.IFilterColumnTarget[])[0];\r\n switch (slicerTarget.table + '/' + slicerTarget.column) {\r\n case SLICER_TABLES_COLUMNS.CURRENT_PERIOD_TABLE +\r\n '/' +\r\n SLICER_TABLES_COLUMNS.CURRENT_PERIOD_COLUMN:\r\n slicerValue =\r\n filterSize > 0\r\n ? ((slicerState.filters[0] as models.IBasicFilter)\r\n .values as string[])\r\n : ([] as string[]);\r\n temporarySlicerValues.currentPeriod = slicerValue;\r\n temporarySlicerValues.currentPeriodOperator =\r\n filterSize > 0\r\n ? (slicerState.filters[0] as models.IBasicFilter).operator\r\n : 'All';\r\n break;\r\n case SLICER_TABLES_COLUMNS.COMPARISON_PERIOD_TABLE +\r\n '/' +\r\n SLICER_TABLES_COLUMNS.COMPARISON_PERIOD_COLUMN:\r\n slicerValue =\r\n filterSize > 0\r\n ? ((slicerState.filters[0] as models.IBasicFilter)\r\n .values as string[])\r\n : ([] as string[]);\r\n temporarySlicerValues.comparisonPeriod = slicerValue;\r\n temporarySlicerValues.comparisonPeriodOperator =\r\n filterSize > 0\r\n ? (slicerState.filters[0] as models.IBasicFilter).operator\r\n : 'All';\r\n break;\r\n case SLICER_TABLES_COLUMNS.BSR_SECTOR_TABLE +\r\n '/' +\r\n SLICER_TABLES_COLUMNS.SECTOR_NAME_COLUMN:\r\n slicerValue =\r\n filterSize > 0\r\n ? ((slicerState.filters[0] as models.IBasicFilter)\r\n .values as string[])\r\n : ([] as string[]);\r\n temporarySlicerValues.sectorName = slicerValue;\r\n temporarySlicerValues.sectorNameOperator =\r\n filterSize > 0\r\n ? (slicerState.filters[0] as models.IBasicFilter).operator\r\n : 'All';\r\n break;\r\n case SLICER_TABLES_COLUMNS.BSR_SECTOR_TABLE +\r\n '/' +\r\n SLICER_TABLES_COLUMNS.BU_NAME_COLUMN:\r\n slicerValue =\r\n filterSize > 0\r\n ? ((slicerState.filters[0] as models.IBasicFilter)\r\n .values as string[])\r\n : ([] as string[]);\r\n temporarySlicerValues.buName = slicerValue;\r\n temporarySlicerValues.buNameOperator =\r\n filterSize > 0\r\n ? (slicerState.filters[0] as models.IBasicFilter).operator\r\n : 'All';\r\n break;\r\n case SLICER_TABLES_COLUMNS.BSR_SECTOR_TABLE +\r\n '/' +\r\n SLICER_TABLES_COLUMNS.MARKET_COLUMN:\r\n slicerValue =\r\n filterSize > 0\r\n ? ((slicerState.filters[0] as models.IBasicFilter)\r\n .values as string[])\r\n : ([] as string[]);\r\n temporarySlicerValues.mktUnitName = slicerValue;\r\n temporarySlicerValues.mktUnitNameOperator =\r\n filterSize > 0\r\n ? (slicerState.filters[0] as models.IBasicFilter).operator\r\n : 'All';\r\n break;\r\n case SLICER_TABLES_COLUMNS.BSR_SECTOR_TABLE +\r\n '/' +\r\n SLICER_TABLES_COLUMNS.COMPANY_COLUMN:\r\n slicerValue =\r\n filterSize > 0\r\n ? ((slicerState.filters[0] as models.IBasicFilter)\r\n .values as string[])\r\n : ([] as string[]);\r\n temporarySlicerValues.company = slicerValue;\r\n temporarySlicerValues.companyOperator =\r\n filterSize > 0\r\n ? (slicerState.filters[0] as models.IBasicFilter).operator\r\n : 'All';\r\n break;\r\n case SLICER_TABLES_COLUMNS.CURRENCY_VALUE_TABLE +\r\n '/' +\r\n SLICER_TABLES_COLUMNS.CURRENCY_VALUE_COLUMN:\r\n slicerValue =\r\n filterSize > 0\r\n ? ((slicerState.filters[0] as models.IBasicFilter)\r\n .values as string[])\r\n : ([] as string[]);\r\n slicerValue =\r\n filterSize > 0\r\n ? ((slicerState.filters[0] as models.IBasicFilter)\r\n .values as string[])\r\n : ([] as string[]);\r\n temporarySlicerValues.currencyValue = slicerValue;\r\n temporarySlicerValues.currencyValueOperator =\r\n filterSize > 0\r\n ? (slicerState.filters[0] as models.IBasicFilter).operator\r\n : 'All';\r\n break;\r\n case SLICER_TABLES_COLUMNS.CURRENCY_UNIT_TABLE +\r\n '/' +\r\n SLICER_TABLES_COLUMNS.CURRENCY_UNIT_COLUMN:\r\n if (embedDetails.pageDisplayName !== VALIDATION_SCREEN_PAGE_NAME) {\r\n slicerValue =\r\n filterSize > 0\r\n ? ((slicerState.filters[0] as models.IBasicFilter)\r\n .values as string[])\r\n : ([] as string[]);\r\n temporarySlicerValues.currencyUnit = slicerValue;\r\n temporarySlicerValues.currencyUnitOperator =\r\n filterSize > 0\r\n ? (slicerState.filters[0] as models.IBasicFilter).operator\r\n : 'All';\r\n }\r\n break;\r\n case SLICER_TABLES_COLUMNS.ENTITY_TABLE +\r\n '/' +\r\n SLICER_TABLES_COLUMNS.ENTITY_COLUMN:\r\n slicerValue =\r\n filterSize > 0\r\n ? ((slicerState.filters[0] as models.IBasicFilter)\r\n .values as string[])\r\n : ([] as string[]);\r\n temporarySlicerValues.entity = slicerValue;\r\n temporarySlicerValues.entityOperator =\r\n filterSize > 0\r\n ? (slicerState.filters[0] as models.IBasicFilter).operator\r\n : 'All';\r\n break;\r\n case SLICER_TABLES_COLUMNS.PROFIT_CENTER_TABLE +\r\n '/' +\r\n SLICER_TABLES_COLUMNS.PROFIT_CENTER_COLUMN:\r\n slicerValue =\r\n filterSize > 0\r\n ? ((slicerState.filters[0] as models.IBasicFilter)\r\n .values as string[])\r\n : ([] as string[]);\r\n temporarySlicerValues.profitCenter = slicerValue;\r\n temporarySlicerValues.profitCenterOperator =\r\n filterSize > 0\r\n ? (slicerState.filters[0] as models.IBasicFilter).operator\r\n : 'All';\r\n break;\r\n case SLICER_TABLES_COLUMNS.REPORTING_LEVEL_TABLE +\r\n '/' +\r\n SLICER_TABLES_COLUMNS.REPORTING_LEVEL_COLUMN:\r\n slicerValue =\r\n filterSize > 0\r\n ? ((slicerState.filters[0] as models.IBasicFilter)\r\n .values as string[])\r\n : ([] as string[]);\r\n temporarySlicerValues.reportingLevel = slicerValue;\r\n temporarySlicerValues.reportingLevelOperator =\r\n filterSize > 0\r\n ? (slicerState.filters[0] as models.IBasicFilter).operator\r\n : 'All';\r\n break;\r\n default:\r\n break;\r\n }\r\n })\r\n );\r\n localStorage.setItem('slicers', JSON.stringify(temporarySlicerValues));\r\n };\r\n\r\n const eventHandlersMap = new Map([\r\n [\r\n 'loaded',\r\n function () {\r\n console.clear();\r\n },\r\n ],\r\n [\r\n 'rendered',\r\n async () => {\r\n const pages = await embeddedReport.getPages();\r\n // Getting the visuals for the active page\r\n const activePage = pages.filter((page) => page.isActive)[0];\r\n const visuals = await activePage.getVisuals();\r\n await updateReportSlicerValues(visuals);\r\n },\r\n ],\r\n ]);\r\n\r\n return (\r\n <>\r\n {\r\n embeddedReport = embedObject as Report;\r\n }}\r\n />\r\n \r\n );\r\n};\r\n\r\nexport default ReportEmbedComponent;\r\n","import React, { useEffect, useState } from 'react';\r\nimport { getPowerBiAccessToken } from '../authentication';\r\nimport { PowerBIProps } from '../interfaces';\r\nimport { getInitialSlicerValue, isPreparerOrReviewer } from './PowerBiMethods';\r\nimport ReportNavigationTab from './ReportNavigationTab';\r\nimport ReportEmbedComponent from '../ReportEmbedComponent/ReportEmbedComponent';\r\nimport { Navigate, Route, Routes } from 'react-router-dom';\r\n\r\nconst PowerBIEmbedded: React.FC = (props: PowerBIProps) => {\r\n const [accessToken, setAccessToken] = useState('');\r\n const [tokenExpiry, setTokenExpiry] = useState(new Date());\r\n if (!localStorage.getItem('slicers')) {\r\n localStorage.setItem(\r\n 'slicers',\r\n JSON.stringify(getInitialSlicerValue(props.userDataList[0]))\r\n );\r\n }\r\n const [displayHelperSchedules, setdisplayHelperSchedules] = useState(false);\r\n\r\n useEffect(() => {\r\n setdisplayHelperSchedules(isPreparerOrReviewer(props.userDataList));\r\n const getAccessToken = async () => {\r\n try {\r\n const tokenResponse = await getPowerBiAccessToken();\r\n setAccessToken(tokenResponse.accessToken);\r\n setTokenExpiry(tokenResponse.expiry);\r\n } catch (err) {\r\n console.log('You do not have access to view the report');\r\n console.log(err);\r\n }\r\n };\r\n getAccessToken();\r\n }, [props.userDataList]);\r\n\r\n const checkAndUpdateToken = async () => {\r\n const currentTime = Date.parse(Date());\r\n const expiration = tokenExpiry.getTime();\r\n if (expiration <= currentTime) {\r\n const tokenResponse = await getPowerBiAccessToken();\r\n setAccessToken(tokenResponse.accessToken);\r\n setTokenExpiry(tokenResponse.expiry);\r\n }\r\n };\r\n const INTERVAL_TIME = 300000;\r\n setInterval(checkAndUpdateToken, INTERVAL_TIME);\r\n return (\r\n <>\r\n \r\n \r\n }\r\n />\r\n }\r\n />\r\n \r\n \r\n );\r\n};\r\n\r\nexport default PowerBIEmbedded;\r\n","import React, { useEffect, useState } from 'react';\r\nimport styles from './FilterSection.module.css';\r\nimport { Container, Row, Col, Button } from 'react-bootstrap';\r\nimport { companyDetails, FilterSectionProps } from '../interfaces';\r\nimport {\r\n getReportingLevelCode,\r\n REPORTINGLEVELCODE,\r\n REPORTINGLEVElSTRING,\r\n} from '../constants';\r\nimport { useParams, useNavigate } from 'react-router';\r\n\r\n// Filter section to select Current Period, Reporting Level and Unit Code\r\nconst FilterSection: React.FC = (\r\n props: FilterSectionProps\r\n) => {\r\n /* \r\n Description: Function to get the array of current and previous 2 years \r\n Output: Array of current and previous 2 years. Array size will be 3 \r\n */\r\n const initFilter = useParams();\r\n const navigate = useNavigate();\r\n const lastTwoYears = () => {\r\n const dateToday = new Date();\r\n const year = dateToday.getFullYear();\r\n const yrRange: number[] = [];\r\n for (let i = year; i >= year - 2; i--) {\r\n yrRange.push(i);\r\n }\r\n return yrRange;\r\n };\r\n\r\n // Available options for Reporting Level as a string\r\n const reportingLevelOptions: string[] = [\r\n REPORTINGLEVElSTRING.COMPANY,\r\n REPORTINGLEVElSTRING.MARKET,\r\n REPORTINGLEVElSTRING.BU,\r\n REPORTINGLEVElSTRING.SECTOR,\r\n ];\r\n\r\n /*\r\n initFilter will contain the relevant filter values when the values are passed through URL.\r\n isValidYear and isValidMkt checks if any invalid values are passed through URL.\r\n isValidYear checks if the year in the range of last 2 years since Workflow tool shows reports only for 2 Years.\r\n isValidMkt checks if the user has access to the market passed in the URL\r\n */\r\n const isValidYear =\r\n initFilter && lastTwoYears().includes(Number(initFilter.year));\r\n\r\n const isValidReportingLevel =\r\n initFilter.reportingLevel &&\r\n reportingLevelOptions.includes(initFilter.reportingLevel);\r\n const isValidUnitCode =\r\n props.unitCodeInformation.filter((items: companyDetails) => {\r\n if (\r\n initFilter.reportingLevel === REPORTINGLEVElSTRING.COMPANY &&\r\n items.CompCode === initFilter.unitCode\r\n ) {\r\n return items;\r\n } else if (\r\n initFilter.reportingLevel === REPORTINGLEVElSTRING.MARKET &&\r\n items.Market === initFilter.unitCode\r\n ) {\r\n return items;\r\n } else if (\r\n initFilter.reportingLevel === REPORTINGLEVElSTRING.BU &&\r\n items.BU === initFilter.unitCode\r\n ) {\r\n return items;\r\n } else if (\r\n initFilter.reportingLevel === REPORTINGLEVElSTRING.SECTOR &&\r\n items.Sector === initFilter.unitCode\r\n ) {\r\n return items;\r\n }\r\n return false;\r\n }).length > 0\r\n ? true\r\n : false;\r\n // Checking if correct filter values have been set through URL\r\n const [isFilterFromParams, setIsFilterFromParams] = useState(\r\n isValidYear &&\r\n isValidUnitCode &&\r\n isValidReportingLevel &&\r\n initFilter.unitCode\r\n ? true\r\n : false\r\n );\r\n\r\n //Current values of the dropdown\r\n const [curYear, setYear] = useState(\r\n isValidYear ? Number(initFilter.year) : 0\r\n );\r\n const [curQuarter, setQuarter] = useState(Number(initFilter.quarter));\r\n const [curReportingLevel, setReportingLevel] = useState(\r\n initFilter.reportingLevel ?? ''\r\n );\r\n const [curUnitCode, setUnitCode] = useState(\r\n initFilter.unitCode ?? ''\r\n );\r\n\r\n /*\r\n Array for availabe quarters and unit codes\r\n The Array is modified as the Year and Reporting Level dropdown selection respectively\r\n */\r\n const [availableQuarters, setAvailQuarters] = useState([]);\r\n const [availableUnitCodes, setAvailableUnitCodes] = useState([]);\r\n\r\n /*\r\n Description: Populating the array availableQuarters as per the selected Year. The userEffect is called whenever curYear Value changes.\r\n */\r\n useEffect(() => {\r\n const dateToday = new Date();\r\n const month = dateToday.getMonth() + 1;\r\n if (!curYear) {\r\n setAvailQuarters([]);\r\n } else if (curYear === dateToday.getFullYear()) {\r\n if (month <= 2) {\r\n setAvailQuarters([1]);\r\n } else if (month <= 5) {\r\n setAvailQuarters([2, 1]);\r\n } else if (month <= 8) {\r\n setAvailQuarters([3, 2, 1]);\r\n } else {\r\n setAvailQuarters([4, 3, 2, 1]);\r\n }\r\n } else {\r\n setAvailQuarters([4, 3, 2, 1]);\r\n }\r\n const tempQu = Number(initFilter.quarter);\r\n if (curYear === Number(initFilter.year) && tempQu > 0 && tempQu < 5)\r\n setQuarter(tempQu);\r\n else setQuarter(0);\r\n }, [curYear, initFilter.quarter, initFilter.year]);\r\n\r\n /*\r\n Description: Populating the array availableUnitCodes as per the selected Reporting Level. The useEffect is called whenever curReportingLevel Value changes.\r\n */\r\n useEffect(() => {\r\n const avail = props.unitCodeInformation.map((obj: companyDetails) => {\r\n switch (curReportingLevel) {\r\n case REPORTINGLEVElSTRING.SECTOR:\r\n return obj.Sector;\r\n case REPORTINGLEVElSTRING.BU:\r\n return obj.BU;\r\n case REPORTINGLEVElSTRING.MARKET:\r\n return obj.Market;\r\n default:\r\n return obj.CompCode;\r\n }\r\n });\r\n setAvailableUnitCodes(\r\n avail.filter((item, index, self) => self.indexOf(item) === index)\r\n );\r\n if (initFilter.unitCode && curReportingLevel === initFilter.reportingLevel)\r\n setUnitCode(initFilter.unitCode);\r\n else setUnitCode('');\r\n // eslint-disable-next-line react-hooks/exhaustive-deps\r\n }, [curReportingLevel, initFilter.unitCode, initFilter.reportingLevel]);\r\n\r\n /*\r\n Description: Sets the filter values in Final Outcome Report state variable. The method is called on clicking the launch BSR button.\r\n */\r\n const updateFilter = () => {\r\n if (\r\n curYear &&\r\n curQuarter !== 0 &&\r\n getReportingLevelCode(curReportingLevel) >= REPORTINGLEVELCODE.COMPANY &&\r\n getReportingLevelCode(curReportingLevel) <= REPORTINGLEVELCODE.SECTOR &&\r\n curUnitCode !== ''\r\n ) {\r\n props.setCurrentFilters({\r\n yearQuarter: curYear * 100 + curQuarter,\r\n reportingLevel: curReportingLevel,\r\n unitCode: curUnitCode,\r\n });\r\n navigate(\r\n `/OutcomeReport/${curYear}/${curQuarter}/${curReportingLevel}/${curUnitCode}`\r\n );\r\n }\r\n };\r\n\r\n // Launch BSR button will be clicked automatically if URL with corrects filters are used\r\n useEffect(() => {\r\n if (isFilterFromParams) {\r\n updateFilter();\r\n }\r\n // eslint-disable-next-line react-hooks/exhaustive-deps\r\n }, []);\r\n\r\n return (\r\n \r\n \r\n \r\n \r\n {\r\n setYear(Number(event.target.value));\r\n setIsFilterFromParams(false);\r\n }}\r\n value={curYear}\r\n >\r\n \r\n {lastTwoYears().map((item: number, index: number) => (\r\n \r\n ))}\r\n \r\n \r\n \r\n \r\n {\r\n setQuarter(Number(event.target.value));\r\n setIsFilterFromParams(false);\r\n }}\r\n >\r\n \r\n {availableQuarters.map((item: number, index: number) => (\r\n \r\n ))}\r\n \r\n \r\n \r\n \r\n {\r\n setReportingLevel(event.target.value);\r\n setIsFilterFromParams(false);\r\n }}\r\n >\r\n \r\n {reportingLevelOptions.map((item: string, index: number) => (\r\n \r\n ))}\r\n \r\n \r\n\r\n {getReportingLevelCode(curReportingLevel) >=\r\n REPORTINGLEVELCODE.COMPANY &&\r\n getReportingLevelCode(curReportingLevel) <=\r\n REPORTINGLEVELCODE.SECTOR && (\r\n \r\n \r\n {\r\n setUnitCode(event.target.value);\r\n setIsFilterFromParams(false);\r\n }}\r\n >\r\n \r\n {availableUnitCodes.map((val: string, index: number) => (\r\n \r\n ))}\r\n \r\n \r\n )}\r\n \r\n \r\n Launch BSR\r\n \r\n \r\n \r\n \r\n );\r\n};\r\n\r\nexport default FilterSection;\r\n","import React from 'react';\r\nimport { Container, Table } from 'react-bootstrap';\r\nimport { ActivityLogComponentProps } from '../interfaces';\r\nimport styles from './ActivityLogComponent.module.css';\r\n\r\n// Grid displaying details for each Activity Log item\r\nconst ActivityLogComponent: React.FC = (\r\n props: ActivityLogComponentProps\r\n) => {\r\n /* \r\n Description: Function to convert system (UTC) time to User's local time\r\n Input: UTC time \r\n Output: User's local time\r\n */\r\n const getLocalTimeStamp = (dateString: string): string => {\r\n const localdate = new Date(dateString);\r\n return localdate.toLocaleString();\r\n };\r\n\r\n return (\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n {props.logs.map((item) => {\r\n return (\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n );\r\n })}\r\n \r\n
UserRoleStatusCommentTimestamp
{item.userEmail}{item.userRole}{item.status}{item.comment}\r\n {getLocalTimeStamp(item.timeStamp)}\r\n
\r\n
\r\n );\r\n};\r\n\r\nexport default ActivityLogComponent;\r\n","import React from 'react';\r\nimport { Button, Modal } from 'react-bootstrap';\r\nimport ActivityLogComponent from '../ActivityLogComponent/ActivityLogComponent';\r\nimport { ActivityLogModalProps } from '../interfaces';\r\nimport styles from './ActivityLogModal.module.css';\r\n\r\n// Popup screen to display activity logs\r\nconst ActivityLogModal: React.FC = (\r\n props: ActivityLogModalProps\r\n) => {\r\n const getActivityLogTitle = (\r\n unitCode: string,\r\n yearQuarter: number,\r\n reportingLevel: string\r\n ): string => {\r\n return `${unitCode} BSR Report ${Math.floor(yearQuarter / 100)} Q-${\r\n yearQuarter % 100\r\n } (Reporting at ${reportingLevel})`;\r\n };\r\n\r\n return (\r\n \r\n \r\n Activity Log\r\n \r\n \r\n
\r\n {getActivityLogTitle(\r\n props.currentFilter.unitCode,\r\n props.currentFilter.yearQuarter,\r\n props.currentFilter.reportingLevel\r\n )}\r\n
\r\n \r\n
\r\n \r\n \r\n \r\n \r\n );\r\n};\r\n\r\nexport default ActivityLogModal;\r\n","import React from 'react';\r\nimport { InputGroup, FormControl, Container } from 'react-bootstrap';\r\nimport { ReportCommentProps } from '../interfaces';\r\n\r\n// Latest comments from 2 neighboring user roles (D+1 and D-1), if there are any comments\r\n// Editable: No\r\n// Viewable: If user has edit access on complete report\r\nconst ReportComment: React.FC = (\r\n props: ReportCommentProps\r\n) => {\r\n const content = props.comments\r\n .map((item) => {\r\n return `(${item.userRole}) ${item.userEmail}: ${item.comment}`;\r\n })\r\n .join('\\n');\r\n\r\n return (\r\n \r\n \r\n \r\n \r\n \r\n \r\n );\r\n};\r\n\r\nexport default ReportComment;\r\n","import React from 'react';\r\nimport { Modal, Button } from 'react-bootstrap';\r\nimport { DeleteModalProps } from '../interfaces';\r\n\r\n// Popup window for Rejection, Submission and Approval\r\nconst DeleteConfirmation: React.FC = (\r\n props: DeleteModalProps\r\n) => {\r\n return (\r\n \r\n \r\n Delete Confirmation\r\n \r\n \r\n

Are you sure you want to to delete the report line item?

\r\n
\r\n \r\n \r\n \r\n \r\n \r\n );\r\n};\r\nexport default DeleteConfirmation;\r\n","import React, { useEffect, useRef, useState } from 'react';\r\nimport { Col, FormControl, Row } from 'react-bootstrap';\r\nimport { ReportLineItemRowProps } from '../interfaces';\r\nimport styles from './ReportLineItemRow.module.css';\r\nimport EditIcon from '../../images/ReportLineItems/editIcon.png';\r\nimport DeleteIcon from '../../images/ReportLineItems/deleteIcon.png';\r\nimport SaveIcon from '../../images/ReportLineItems/saveIcon.png';\r\nimport { REPORTLINESTATUS } from '../constants';\r\n\r\n// View for each line item\r\nconst ReportLineItemRow: React.FC = (\r\n props: ReportLineItemRowProps\r\n) => {\r\n const styleForInput = { backgroundColor: '#FFFFFF' };\r\n const [itemReadMode, setItemReadMode] = useState(true);\r\n const [newReviewerPeriod, setNewReviewerPeriod] = useState(\r\n props.data.reviewerPeriod\r\n );\r\n const [newSchedule, setNewSchedule] = useState(props.data.schedule);\r\n const [newBsrObservation, setNewBsrObservation] = useState(\r\n props.data.bsrObservation\r\n );\r\n const [newFinancialImpact, setNewFinancialImpact] = useState(\r\n props.data.financialImpact\r\n );\r\n const [newStatus, setNewStatus] = useState(props.data.status);\r\n const [newComments, setNewComments] = useState(props.data.comments);\r\n\r\n const reviewPeriodInput = useRef(null);\r\n const scheduleInput = useRef(null);\r\n const ObservationInput = useRef(null);\r\n const impactInput = useRef(null);\r\n const commentInput = useRef(null);\r\n\r\n /* \r\n Description: Function to update height of textbox based upon the content\r\n Input: Reference of the UI element\r\n */\r\n const resizeTextBox = (elementRef: React.RefObject) => {\r\n if (elementRef.current) {\r\n elementRef.current.style.height = elementRef.current.scrollHeight + 'px';\r\n }\r\n };\r\n\r\n useEffect(() => {\r\n if (reviewPeriodInput.current) {\r\n reviewPeriodInput.current.style.height =\r\n reviewPeriodInput.current.scrollHeight + 'px';\r\n }\r\n if (scheduleInput.current) {\r\n scheduleInput.current.style.height =\r\n scheduleInput.current.scrollHeight + 'px';\r\n }\r\n if (ObservationInput.current) {\r\n ObservationInput.current.style.height =\r\n ObservationInput.current.scrollHeight + 'px';\r\n }\r\n if (impactInput.current) {\r\n impactInput.current.style.height =\r\n impactInput.current.scrollHeight + 'px';\r\n }\r\n if (commentInput.current) {\r\n commentInput.current.style.height =\r\n commentInput.current.scrollHeight + 'px';\r\n }\r\n }, []);\r\n // const resetValues = () => {\r\n // setNewReviewerPeriod(props.data.reviewerPeriod);\r\n // setNewSchedule(props.data.schedule);\r\n // setNewBsrObservation(props.data.bsrObservation);\r\n // setNewFinancialImpact(props.data.financialImpact);\r\n // setNewStatus(props.data.status);\r\n // setNewComments(props.data.comments);\r\n // setReadMode(true);\r\n // };\r\n\r\n /* \r\n Description: Function to save changes for current line item\r\n Input: Using state variable\r\n Output: Updates state variable\r\n */\r\n const saveLineItem = () => {\r\n const newLineItem = {\r\n ...props.data,\r\n reviewerPeriod: newReviewerPeriod,\r\n schedule: newSchedule,\r\n bsrObservation: newBsrObservation,\r\n financialImpact: newFinancialImpact,\r\n status: newStatus,\r\n comments: newComments,\r\n isUpdated: 1,\r\n };\r\n props.updateItem(newLineItem);\r\n };\r\n\r\n return (\r\n \r\n \r\n \r\n {\r\n resizeTextBox(reviewPeriodInput);\r\n setNewReviewerPeriod(event.target.value);\r\n }}\r\n className={\r\n newReviewerPeriod.length === 0\r\n ? styles.invalidInput + ' ' + styles.inputField\r\n : styles.inputField\r\n }\r\n style={styleForInput}\r\n title={newReviewerPeriod}\r\n />\r\n \r\n \r\n \r\n \r\n {\r\n resizeTextBox(scheduleInput);\r\n setNewSchedule(event.target.value);\r\n }}\r\n className={\r\n newSchedule.length === 0\r\n ? styles.invalidInput + ' ' + styles.inputField\r\n : styles.inputField\r\n }\r\n style={styleForInput}\r\n title={newSchedule}\r\n />\r\n \r\n \r\n \r\n \r\n {\r\n resizeTextBox(ObservationInput);\r\n setNewBsrObservation(event.target.value);\r\n }}\r\n className={\r\n newBsrObservation.length === 0\r\n ? styles.invalidInput + ' ' + styles.inputField\r\n : styles.inputField\r\n }\r\n style={styleForInput}\r\n title={newBsrObservation}\r\n />\r\n \r\n \r\n \r\n \r\n {\r\n resizeTextBox(impactInput);\r\n setNewFinancialImpact(event.target.value);\r\n }}\r\n className={\r\n newFinancialImpact.length === 0\r\n ? styles.invalidInput + ' ' + styles.inputField\r\n : styles.inputField\r\n }\r\n style={styleForInput}\r\n title={newFinancialImpact}\r\n />\r\n \r\n \r\n \r\n \r\n {\r\n event.target.value === 'Closed'\r\n ? setNewStatus(true)\r\n : setNewStatus(false);\r\n }}\r\n style={styleForInput}\r\n >\r\n \r\n \r\n \r\n \r\n \r\n \r\n {\r\n resizeTextBox(commentInput);\r\n setNewComments(event.target.value);\r\n }}\r\n style={styleForInput}\r\n className={styles.inputField}\r\n title={newComments}\r\n />\r\n \r\n \r\n \r\n {!props.reportEditMode ? null : itemReadMode ? (\r\n <>\r\n {\r\n props.setUnsavedItemCounter(props.unsavedItemCounter + 1);\r\n setItemReadMode(false);\r\n }}\r\n className={styles.actionButton + ' ml-auto mb-1'}\r\n >\r\n edit item\r\n {' '}\r\n {props.data.isCarriedForward ? null : (\r\n {\r\n props.deleteItem(props.data.id, props.data.isExistingRecord);\r\n }}\r\n className={styles.actionButton + ' ml-auto mb-1'}\r\n >\r\n \r\n \r\n )}\r\n \r\n ) : (\r\n <>\r\n {\r\n props.setUnsavedItemCounter(props.unsavedItemCounter - 1);\r\n saveLineItem();\r\n setItemReadMode(true);\r\n }}\r\n className={styles.invalidInput + ' ml-2 mb-1'}\r\n >\r\n save change\r\n {' '}\r\n \r\n )}\r\n \r\n \r\n );\r\n};\r\n\r\nexport default ReportLineItemRow;\r\n","export default \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAABHNCSVQICAgIfAhkiAAAAYdJREFUSEvllf1VgzAUxc0EdgLACcQJxAlkA9sJxA3sBNUN2MBuYDuB7QaBBcQFwHs5L5wUCwTof3IOh4+8/G5ecvOiri5wBUGwKMtyo5SKgSuqqkrzPF8TrebyCQfwE5zQZkHsXWud1AIIihD0jNdFnyA6rdBJm5gW/Ij2iDiwvurRK3WjEBTjx4dLJiKQyqDskddwaBci+i0Cd8r3/QM+bhHwgiffu64CgLr93MgJZ5vneSlYT3g9ZlkWUqBiAz6c1sMR/iMZHUYJjIXX0+SawRS4s8BUuJPAHPigwFz4oAAst4UbHmk54/OWFRu3iH25m2lnbbzeu8gwAL19zR1pOlk+b8O58bjB9rB8NCiA6QllyyM+w2dT0JbofAKX0bPcsCY5CyTosGHKuJmyKWZ/4JMErPk32fK5x3QlpmTYDVIwR2cQA7gDaAcon53XaIE+2Lm2fyCAuX4YmueBNTAH16lNO9wydgmaeB5cGOhbs9Gk3mzx434yVToCvgb81eY4nWJzhH8BMRyHOHpRCCoAAAAASUVORK5CYII=\"","export default \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABkAAAAcCAYAAACUJBTQAAAABHNCSVQICAgIfAhkiAAAAdtJREFUSEvtls9KAnEQx/upaSSWkCcNXcR79gTZG/gGFXTv3wNkD1B265j0BPYGnbpmF6EOonsJocjYimpJ+0yobLbqunaqBgZ/7s58v/ObnRlGTQwQTdPCzWYzr5TKYha2MW20Wq2ix+PZqlarjX5Qqt8LIQDggvfaoEDa70q1Wm3RDckmJHkcL7lJxi5SAtHkJtgsYLOGTcGOqO9N4vF4AceVQc4CCE8Ool3s9iDJjUSSSCTOcFjCeRlnOduKIxLAzvFOoAF0BjXQFzSC+tE79LVvvpUKcZMQwRj8iu8UKv+lKEzOVwqSloMPO46JoaLRaMTr9fopwx2QttEDynbfLWovDtjP3Q/vJLdOiO1w/hgJPbNBqu51XT/ppIyCWaeCJinvI2saXaUrFovN+Xy+WyllRoeU9adAImXtDwaDgXK5/NZ5/k/yn67uVB7ajL+nulKpVMA0zRv6QKdP0pZ+uGaUT/NsfuxmFIBkMjlbqVQeOb53AIXcMAxfvV5/+hESJ9N3rI4fhUBsh42VVXJ8jJ4yCGXPciXMtBKOsr10dwNrCafbe5aAFzmL8UgCsBSGBPjAWeusUV9WIq56CLiM9XFECLLWDefb3gWRRJNB7dbSYeRVyULvIvgBHeECFQez6xIAAAAASUVORK5CYII=\"","export default \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABcAAAAXCAYAAADgKtSgAAAABHNCSVQICAgIfAhkiAAAAVBJREFUSEvtVcERgjAQNDSgT18QO7AEOlA70Aq0A7ECxw6wAztQO9AOAi+fPH2Bu05wEAiE8eM4MpMhmdztXe727kQPn5RylWXZklueu3zQC+M4XtTpCA287QJYljUZEJ7nKQh7QoiZUuoAYwGE1zhvcA6ajEJ2DNkTZPp1BgieESCKIqFDZA2u5Y0GPgZvMmAE5zMdxwlbcnFF6BKTASO4TYLLeSnmgDmsA5dpmga4bKQlXpbgZQE8vxQdKRKiAm7jcQuDXoT4IXDETCKerNiBbYiQnx0LsFwnH7GlYPyMIvStweH93oLnrE6+shu4ZW/xAX78g78RCMT6grAggSNwVXUcFhXPXdc9AGvybFz5Ae9VyDwvxtiTsyc9ZRpbCeTnWjfUulMq0FnO0Ncksa3INrmcxvloY6nTY66hXjf8721AuGdr5sDgYvu9MLzUewAtmqiHHUi+3wAAAABJRU5ErkJggg==\"","export default \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAA8AAAAPCAYAAAA71pVKAAAABHNCSVQICAgIfAhkiAAAAEpJREFUKFNjZMAB/v79OxUolQXE05iZmbOxKWPEo/k/TA6oGau6EakZKVRxhR0u8WmMQM3wUCVVN0gzLD5J1TttREYVrdI2wVwFAKXrPx6kdRkeAAAAAElFTkSuQmCC\"","import React, { useState } from 'react';\r\nimport { Container, Row, Col, Button } from 'react-bootstrap';\r\nimport DeleteConfirmation from './DeleteConfirmation';\r\nimport {\r\n ReportLineItemContainerProps,\r\n ReportLineItemObject,\r\n DeleteObjectProperties,\r\n} from '../interfaces';\r\nimport styles from './ReportLineItemContainer.module.css';\r\nimport ReportLineItemRow from '../ReportLineItemRow/ReportLineItemRow';\r\nimport AddIcon from '../../images/ReportLineItems/addIcon.png';\r\nimport { getReportingLevelCode } from '../constants';\r\n\r\n// Grid for displaying line items\r\n// Displayed in case user has edit access\r\nconst ReportLineItemContainer: React.FC = (\r\n props: ReportLineItemContainerProps\r\n) => {\r\n // maxId stores maximum id among all report line items\r\n let maxId = 1;\r\n if (props.lineItems.length !== 0) {\r\n maxId = props.lineItems.reduce((previous, current) =>\r\n previous.id > current.id ? previous : current\r\n ).id;\r\n }\r\n const [showDeleteModal, setModalDisplay] = useState(false);\r\n const [curRow, setCurRow] = useState();\r\n const [defaultItemId, setDefaultItemId] = useState(maxId + 1);\r\n\r\n /* \r\n Description: Function to update existing line item\r\n Input: Line Item to be updated\r\n */\r\n const updateLineItem = (newLineItem: ReportLineItemObject) => {\r\n const newSample = props.lineItems.filter(\r\n (item) => item.id !== newLineItem.id\r\n );\r\n const finalSample = [...newSample, newLineItem].sort(\r\n (item1, item2) => item1.id - item2.id\r\n );\r\n props.setLineItems(finalSample);\r\n };\r\n\r\n /* \r\n Description: Function to delete line item\r\n Input: taken from curRow state variable\r\n In case existing item is deleted, it is added to deletedLineItemList\r\n Delete popup is disabled after performing delete\r\n */\r\n const deleteAfterConfirmation = () => {\r\n const newSample = props.lineItems.filter((item) => item.id !== curRow?.id);\r\n props.setLineItems(newSample);\r\n if (curRow?.isExisting === 1) {\r\n props.setDeletedLineItemList([...props.deletedLineItemList, curRow.id]);\r\n }\r\n setModalDisplay(false);\r\n };\r\n\r\n /* \r\n Description: Function to open confirmation popup to delete line item\r\n Input: lineItemId, isExistingRecord\r\n Delete popup is enabled\r\n */\r\n const deleteLineItem = (lineItemId: number, isExistingRecord: number) => {\r\n setCurRow({\r\n id: lineItemId,\r\n isExisting: isExistingRecord,\r\n });\r\n setModalDisplay(true);\r\n };\r\n\r\n /* \r\n Description: Function to add new line item\r\n */\r\n const addNewLineItem = () => {\r\n const newLineItem: ReportLineItemObject = {\r\n id: defaultItemId,\r\n reviewerPeriod: '',\r\n schedule: '',\r\n bsrObservation: '',\r\n financialImpact: '',\r\n status: false,\r\n comments: '',\r\n isCarriedForward: false,\r\n reportingLevel: getReportingLevelCode(\r\n props.selectedFilter.reportingLevel\r\n ),\r\n unitCode: props.selectedFilter.unitCode,\r\n yearQuarter: props.selectedFilter.yearQuarter,\r\n isExistingRecord: 0,\r\n isUpdated: 1,\r\n };\r\n props.setLineItems([...props.lineItems, newLineItem]);\r\n setDefaultItemId(defaultItemId + 1);\r\n };\r\n\r\n return (\r\n \r\n {/*Mobile View for adding line items*/}\r\n
\r\n \r\n \r\n Line Items\r\n \r\n {props.reportEditMode && (\r\n \r\n \r\n add items\r\n \r\n \r\n )}\r\n \r\n
\r\n {/*Desktop and Table view for line item header and adding items*/}\r\n
\r\n \r\n \r\n Reviewer Period\r\n \r\n \r\n Schedule\r\n \r\n \r\n BSR Observation\r\n \r\n \r\n Financial Impact\r\n
\r\n (in USD)\r\n \r\n \r\n Status\r\n \r\n \r\n Comments\r\n \r\n {props.reportEditMode && (\r\n \r\n \r\n add items\r\n \r\n \r\n )}\r\n
\r\n
\r\n {/* Display message in case there are no line items */}\r\n {props.lineItems.length === 0 && (\r\n \r\n )}\r\n
\r\n {props.lineItems.map((item) => {\r\n return (\r\n
\r\n \r\n
\r\n );\r\n })}\r\n {curRow && (\r\n setModalDisplay(false)}\r\n confirmDelete={deleteAfterConfirmation}\r\n />\r\n )}\r\n
\r\n );\r\n};\r\n\r\nexport default ReportLineItemContainer;\r\n","import React, { useState } from 'react';\r\nimport { Button, Modal, Form } from 'react-bootstrap';\r\nimport { OUTCOME } from '../constants';\r\nimport { ApproveRejectProps } from '../interfaces';\r\nimport styles from './ReportSubmission.module.css';\r\n\r\n// Popup window for accepatance/rejection confirmation\r\nconst ApproveRejectionModal: React.FC = (\r\n props: ApproveRejectProps\r\n) => {\r\n // State variable to store the comment entered by user\r\n const [comment, setComment] = useState('');\r\n /*\r\n Comments are mandatory when the report is rejected.\r\n The alert message is displayed when the user tries to confrim rejection without comments.\r\n This state variable handles the display of the alert message.\r\n */\r\n const [alertMessage, setAlertDisplay] = useState(false);\r\n\r\n return (\r\n {\r\n setAlertDisplay(false);\r\n props.setModal();\r\n }}\r\n show={props.showState}\r\n animation={false}\r\n centered\r\n >\r\n \r\n {props.outcome} the Report\r\n \r\n \r\n

\r\n Are you sure you want to {props.outcome.toLowerCase()} the report?\r\n

\r\n \r\n Comments\r\n {alertMessage && (\r\n

Please provide comments.

\r\n )}\r\n
\r\n setComment(event.target.value)}\r\n />\r\n To:\r\n props.setToMailList(event.target.value)}\r\n />\r\n CC:\r\n props.setCcMailList(event.target.value)}\r\n />\r\n
\r\n \r\n {\r\n if (props.outcome === OUTCOME.REJECT && comment === '') {\r\n setAlertDisplay(true);\r\n } else {\r\n props.submitOutcome(\r\n props.outcome,\r\n comment,\r\n props.toMailList,\r\n props.ccMailList\r\n );\r\n }\r\n }}\r\n variant='success'\r\n >\r\n Yes\r\n \r\n {\r\n setAlertDisplay(false);\r\n props.setModal();\r\n }}\r\n variant='danger'\r\n >\r\n No\r\n \r\n \r\n \r\n );\r\n};\r\n\r\nexport default ApproveRejectionModal;\r\n","import React from 'react';\r\nimport { Modal, Button } from 'react-bootstrap';\r\nimport { SaveModalProps } from '../interfaces';\r\n\r\n// Popup window for save confirmation\r\nconst SaveModal: React.FC = (props: SaveModalProps) => {\r\n return (\r\n \r\n \r\n Save\r\n \r\n \r\n

Are you sure you want to save your progress?

\r\n

\r\n All the data entered will be saved. To submit click on Save and\r\n Submit.\r\n

\r\n
\r\n \r\n \r\n \r\n \r\n \r\n );\r\n};\r\n\r\nexport default SaveModal;\r\n","import React, { useState } from 'react';\r\nimport { Button, Container } from 'react-bootstrap';\r\nimport { OUTCOME, USERROLECODE } from '../constants';\r\nimport { ReportSubmissionProps } from '../interfaces';\r\nimport ApproveRejectionModal from './ApproveRejectionModal';\r\nimport SaveModal from './SaveModal';\r\n\r\n// Report Submission section has the buttons to Save, Accept and Reject a report\r\nconst ReportSubmission: React.FC = (\r\n props: ReportSubmissionProps\r\n) => {\r\n // State variables to handle the display for Modal used for confirmation\r\n const [showSaveModal, setSaveModalDisplay] = useState(false);\r\n const [showApproveRejectModal, setApproveRejectModal] = useState(\r\n false\r\n );\r\n\r\n //State variable to hold the value of outcome in case of approval/rejection: Acceptance and Rejection\r\n const [outcome, setOutcome] = useState(OUTCOME.APPROVE);\r\n\r\n //State variable to hold the value of To and CC email list which can be editted by the users before submission/rejection\r\n const [finalToList, setFinalToList] = useState('');\r\n const [finalCcList, setFinalCcList] = useState('');\r\n\r\n /*\r\n Description: This function is called when the user clicks on Accept/Reject button. \r\n The funciton first validates if all the required fields are filled and \r\n only then displays the Modal where user can edit the mail list and add comments.\r\n Input: Action type i.e. Acceptance or rejection\r\n Sets the display of Approve/reject popup to true.\r\n */\r\n const submitAction = (actionType: string) => {\r\n const isDataValid = props.handleValidate(actionType);\r\n if (isDataValid === 1 && actionType === OUTCOME.SAVE) {\r\n setSaveModalDisplay(true);\r\n } else if (\r\n isDataValid === 1 &&\r\n (actionType === OUTCOME.APPROVE || actionType === OUTCOME.REJECT)\r\n ) {\r\n setApproveRejectModal(true);\r\n }\r\n };\r\n\r\n /*\r\n Description: This function is called when the user confirms the submit(Acceptance/Rejection) action.\r\n props.handleSubmit function in the Final Outcome report component is called which makes \r\n the required API calls to inser the data into backend \r\n Input: outcomeValue - Accept/Reject\r\n comment - Comment provided by the user for next role users\r\n toMailList and ccMailList - list of email Ids which is edittable by users\r\n */\r\n const handleSubmit = (\r\n outcomeValue: string,\r\n comment: string,\r\n toMailList: string,\r\n ccMailList: string\r\n ) => {\r\n setApproveRejectModal(false);\r\n props.handleSubmit(outcomeValue, comment, toMailList, ccMailList);\r\n };\r\n\r\n /*\r\n Description: This function is call when the user confirms save action in the popup\r\n props.handleSave function in the Final Outcome report component is called which makes \r\n the required API calls to inser the data into backend \r\n */\r\n const handleSave = () => {\r\n setSaveModalDisplay(false);\r\n props.handleSave();\r\n };\r\n\r\n return (\r\n \r\n {props.userRole <= USERROLECODE.APPROVER && (\r\n submitAction(OUTCOME.SAVE)}\r\n disabled={!props.reportEditMode}\r\n >\r\n Save\r\n \r\n )}{' '}\r\n {\r\n setFinalToList(props.emailList.approveToList);\r\n setFinalCcList(props.emailList.approveCcList);\r\n setOutcome(OUTCOME.APPROVE);\r\n submitAction(OUTCOME.APPROVE);\r\n }}\r\n disabled={!props.reportEditMode}\r\n >\r\n {props.userRole < USERROLECODE.GM_CFO ? 'Save & Submit' : 'Approve'}\r\n {' '}\r\n {props.userRole !== USERROLECODE.PREPARER && (\r\n {\r\n setFinalToList(props.emailList.rejectToList);\r\n setFinalCcList(props.emailList.rejectCcList);\r\n setOutcome(OUTCOME.REJECT);\r\n submitAction(OUTCOME.REJECT);\r\n }}\r\n disabled={!props.reportEditMode}\r\n >\r\n Reject\r\n \r\n )}{' '}\r\n setSaveModalDisplay(false)}\r\n saveUpdate={handleSave}\r\n />\r\n setApproveRejectModal(false)}\r\n submitOutcome={handleSubmit}\r\n outcome={outcome}\r\n toMailList={finalToList}\r\n ccMailList={finalCcList}\r\n setToMailList={setFinalToList}\r\n setCcMailList={setFinalCcList}\r\n />\r\n \r\n );\r\n};\r\n\r\nexport default ReportSubmission;\r\n","import React, { useEffect, useRef } from 'react';\r\nimport { InputGroup, FormControl, Container, Row, Col } from 'react-bootstrap';\r\nimport { ReportDetailsProps } from '../interfaces';\r\nimport styles from './ReportDetails.module.css';\r\n\r\n// Report details section includes: Subject, Date of Review, Review Period, Attendees List and Report Summary\r\nconst ReportDetails: React.FC = (\r\n props: ReportDetailsProps\r\n) => {\r\n const styleForInput = { backgroundColor: '#FFFFFF' };\r\n\r\n //Text for subject line is constructed based on the market and current period. This text is uneditable.\r\n const subjectText =\r\n props.selectedFilter.unitCode +\r\n ' BSR Report ' +\r\n Math.floor(props.selectedFilter.yearQuarter / 100) +\r\n ' Q-' +\r\n (props.selectedFilter.yearQuarter % 100);\r\n\r\n // Defining reference variables for Summary and Attendees input as the height of the input has to be increased based on content\r\n const summaryInput = useRef(null);\r\n const attendeesInput = useRef(null);\r\n\r\n // Setting initial height of the input field based on the content\r\n useEffect(() => {\r\n if (summaryInput.current) {\r\n summaryInput.current.style.height =\r\n summaryInput.current.scrollHeight + 'px';\r\n }\r\n if (attendeesInput.current) {\r\n attendeesInput.current.style.height =\r\n attendeesInput.current.scrollHeight + 'px';\r\n }\r\n }, []);\r\n\r\n /* \r\n Description: This function updates the input field height based on the input text. It is called in the OnCHange event of the input field\r\n */\r\n const resizeTextBox = (elementRef: React.RefObject) => {\r\n if (elementRef.current) {\r\n elementRef.current.style.height = elementRef.current.scrollHeight + 'px';\r\n }\r\n };\r\n return (\r\n \r\n \r\n \r\n \r\n \r\n {props.reportEditMode && (\r\n \r\n )}\r\n \r\n \r\n \r\n {\r\n const updatedDetails = Object.assign({}, props.reportDetails);\r\n updatedDetails.dateOfReview = event.target.value;\r\n props.setDetails(updatedDetails);\r\n }}\r\n className={\r\n props.reportDetails.dateOfReview.length === 0\r\n ? styles.invalidInput\r\n : ''\r\n }\r\n style={styleForInput}\r\n />\r\n {props.reportEditMode && (\r\n \r\n )}\r\n \r\n \r\n \r\n {\r\n const updatedDetails = Object.assign({}, props.reportDetails);\r\n updatedDetails.reviewPeriod = event.target.value;\r\n props.setDetails(updatedDetails);\r\n }}\r\n className={\r\n props.reportDetails.reviewPeriod.length === 0\r\n ? styles.invalidInput\r\n : ''\r\n }\r\n style={styleForInput}\r\n />\r\n {props.reportEditMode && (\r\n \r\n )}\r\n \r\n \r\n \r\n \r\n \r\n {\r\n const updatedDetails = Object.assign({}, props.reportDetails);\r\n updatedDetails.attendees = event.target.value;\r\n resizeTextBox(attendeesInput);\r\n props.setDetails(updatedDetails);\r\n }}\r\n className={\r\n props.reportDetails.attendees.length === 0\r\n ? styles.invalidInput + ' ' + styles.inputField\r\n : styles.inputField\r\n }\r\n style={styleForInput}\r\n />\r\n {props.reportEditMode && (\r\n \r\n )}\r\n \r\n \r\n \r\n \r\n {\r\n const updatedDetails = Object.assign({}, props.reportDetails);\r\n updatedDetails.summary = event.target.value;\r\n resizeTextBox(summaryInput);\r\n props.setDetails(updatedDetails);\r\n }}\r\n maxLength={3000}\r\n readOnly={!props.reportEditMode}\r\n className={\r\n props.reportDetails.summary.length === 0\r\n ? styles.invalidInput + ' ' + styles.inputField\r\n : styles.inputField\r\n }\r\n style={styleForInput}\r\n />\r\n \r\n {props.reportEditMode && (\r\n \r\n )}\r\n \r\n );\r\n};\r\n\r\nexport default ReportDetails;\r\n","import { Container, Row, Col } from 'react-bootstrap';\r\nimport styles from './ProgressStepper.module.css';\r\nimport React from 'react';\r\nimport { CurrentRoleAndStatusProps } from '../interfaces';\r\nimport {\r\n getReportStatusString,\r\n getUserRoleString,\r\n REPORTSTATUSCODE,\r\n} from '../constants';\r\n\r\n// Indicates the state of Final Outcome Report for the selected filter values and the role of the user\r\nconst ProgressStepper: React.FC = (\r\n props: CurrentRoleAndStatusProps\r\n) => {\r\n // Variables to check the current state\r\n const isNotPrepared =\r\n props.currentReportStatus === REPORTSTATUSCODE.NOTPREPARED;\r\n const isPrepared = props.currentReportStatus === REPORTSTATUSCODE.PREPARED;\r\n const isReviewed = props.currentReportStatus === REPORTSTATUSCODE.REVIEWED;\r\n const isApproved = props.currentReportStatus === REPORTSTATUSCODE.APPROVED;\r\n const isInterAccepted =\r\n props.currentReportStatus === REPORTSTATUSCODE.INTER_ACCEPTED;\r\n const isAccepted = props.currentReportStatus === REPORTSTATUSCODE.ACCEPTED;\r\n const isSubmitted = props.currentReportStatus === REPORTSTATUSCODE.SUBMITTED;\r\n const checkPrep = props.currentReportStatus < REPORTSTATUSCODE.PREPARED;\r\n const checkRev = props.currentReportStatus < REPORTSTATUSCODE.REVIEWED;\r\n const checkInter =\r\n props.currentReportStatus < REPORTSTATUSCODE.INTER_ACCEPTED;\r\n const checkApp = props.currentReportStatus < REPORTSTATUSCODE.APPROVED;\r\n const checkAcc = props.currentReportStatus < REPORTSTATUSCODE.ACCEPTED;\r\n const checkSub = props.currentReportStatus < REPORTSTATUSCODE.SUBMITTED;\r\n\r\n /*\r\n Every state is assigned a color (Refer the css file). \r\n For a give state, all the proceeding state will have color of the current state and succeeding states will be inactive.\r\n */\r\n return (\r\n \r\n \r\n \r\n Viewing as {': '} {getUserRoleString(props.currentRole)}\r\n \r\n \r\n \r\n \r\n \r\n Workflow Status {': '}\r\n {getReportStatusString(props.currentReportStatus)}\r\n \r\n \r\n \r\n\r\n \r\n \r\n \r\n
    \r\n \r\n Not Prepared\r\n \r\n \r\n Prepared\r\n \r\n \r\n Reviewed\r\n \r\n \r\n Approved\r\n \r\n \r\n {isInterAccepted && 'In progress'}\r\n \r\n \r\n Accepted\r\n \r\n \r\n Submitted\r\n \r\n
\r\n \r\n
\r\n
\r\n
\r\n );\r\n};\r\n\r\nexport default ProgressStepper;\r\n","import axios from 'axios';\r\nimport {\r\n ActivityLogItem,\r\n EmailNotificationObject,\r\n EmailRecipientAndGmCfoDcCountObject,\r\n ReportCommentObject,\r\n ReportDetailsObject,\r\n ReportLineItemObject,\r\n SubmissionObjectForApprovers,\r\n UserDetailsObject,\r\n} from './interfaces';\r\nimport { USERROLESTRING } from './constants';\r\n\r\nexport const getLoggedInUserDetails = async (\r\n username: string\r\n): Promise => {\r\n const response = await axios({\r\n url: '/Workflow/GetUserDetails',\r\n method: 'POST',\r\n timeout: 0,\r\n params: {\r\n emailId: username,\r\n },\r\n });\r\n return response.data;\r\n};\r\n\r\nexport const getReportDetails = async (\r\n yearQuarter: number,\r\n reportingLevel: number,\r\n unitCode: string\r\n): Promise => {\r\n const response = await axios({\r\n url: '/Workflow/GetReportStatus',\r\n method: 'POST',\r\n timeout: 0,\r\n params: {\r\n yearQuarter: yearQuarter,\r\n reportingLevel: reportingLevel,\r\n unitCode: unitCode,\r\n },\r\n });\r\n return response.data[0];\r\n};\r\n\r\nexport const getReportLineItems = async (\r\n yearQuarter: number,\r\n unitCode: string\r\n): Promise => {\r\n const response = await axios({\r\n url: `/Workflow/GetReportLineItems`,\r\n method: 'POST',\r\n timeout: 0,\r\n params: {\r\n yearQuarter: yearQuarter,\r\n unitCode: unitCode,\r\n },\r\n });\r\n return response.data;\r\n};\r\n\r\nexport const getActivityLogDetails = async (\r\n yearQuarter: number,\r\n unitCode: string\r\n): Promise => {\r\n const response = await axios({\r\n url: `/Workflow/GetActivityLogs`,\r\n method: 'POST',\r\n timeout: 0,\r\n params: {\r\n yearQuarter: yearQuarter,\r\n unitCode: unitCode,\r\n },\r\n });\r\n return response.data;\r\n};\r\n\r\nexport const getReportComments = async (\r\n yearQuarter: number,\r\n unitCode: string,\r\n commentRecipient: string\r\n): Promise => {\r\n let userRole1 = '';\r\n let userRole2 = '';\r\n switch (commentRecipient) {\r\n case USERROLESTRING.PREPARER:\r\n userRole1 = USERROLESTRING.REVIEWER;\r\n break;\r\n case USERROLESTRING.REVIEWER:\r\n userRole1 = USERROLESTRING.PREPARER;\r\n userRole2 = USERROLESTRING.APPROVER;\r\n break;\r\n case USERROLESTRING.APPROVER:\r\n userRole1 = USERROLESTRING.REVIEWER;\r\n userRole2 = USERROLESTRING.CONTROLLER;\r\n break;\r\n default:\r\n userRole1 = '';\r\n userRole2 = '';\r\n }\r\n const response = await axios({\r\n url: `/Workflow/GetComments`,\r\n method: 'POST',\r\n timeout: 0,\r\n params: {\r\n yearQuarter: yearQuarter,\r\n unitCode: unitCode,\r\n commentRecipient: commentRecipient,\r\n userRole1: userRole1,\r\n userRole2: userRole2,\r\n },\r\n });\r\n return response.data;\r\n};\r\n\r\nexport const InsertOrUpdateReportLineItems = async (\r\n reportLineItems: ReportLineItemObject[]\r\n): Promise => {\r\n await axios({\r\n url: '/Workflow/InsertOrUpdateLineItems',\r\n method: 'POST',\r\n timeout: 0,\r\n data: reportLineItems,\r\n headers: {\r\n 'content-type': 'application/json; utf-8',\r\n },\r\n });\r\n};\r\n\r\nexport const DeleteLineItems = async (itemIdList: number[]): Promise => {\r\n await axios({\r\n url: '/Workflow/DeleteLineItems',\r\n method: 'DELETE',\r\n timeout: 0,\r\n params: { lineItemIds: itemIdList.join() },\r\n });\r\n};\r\n\r\nexport const insertActivityLog = async (\r\n activityLog: ActivityLogItem\r\n): Promise => {\r\n await axios({\r\n url: `/Workflow/InsertActivityLog`,\r\n method: 'POST',\r\n timeout: 0,\r\n data: activityLog,\r\n headers: {\r\n 'content-type': 'application/json; utf-8',\r\n },\r\n });\r\n};\r\n\r\nexport const updateReportDetails = async (\r\n reportDetail: ReportDetailsObject\r\n): Promise => {\r\n await axios({\r\n url: `/Workflow/UpdateReportStatus`,\r\n method: 'POST',\r\n timeout: 0,\r\n data: reportDetail,\r\n headers: {\r\n 'content-type': 'application/json; utf-8',\r\n },\r\n });\r\n};\r\n\r\nexport const submissionForApprovers = async (\r\n details: SubmissionObjectForApprovers\r\n): Promise => {\r\n const response = await axios({\r\n url: `/Workflow/SubmissionAction`,\r\n method: 'POST',\r\n timeout: 0,\r\n data: details,\r\n headers: {\r\n 'content-type': 'application/json; utf-8',\r\n },\r\n });\r\n return response.data;\r\n};\r\n\r\nexport const getAcceptanceFlagForGmCfo = async (\r\n yearQuarter: number,\r\n unitCode: string,\r\n userEmail: string\r\n): Promise<0 | 1> => {\r\n const response = await axios({\r\n url: `/Workflow/CheckAcceptanceState`,\r\n method: 'POST',\r\n timeout: 0,\r\n params: {\r\n yearQuarter: yearQuarter,\r\n unitCode: unitCode,\r\n emailId: userEmail,\r\n },\r\n });\r\n return response.data;\r\n};\r\n\r\nexport const getMailListAndGmCfoCount = async (\r\n reportingLevel: number,\r\n unitCode: string,\r\n userRole: string,\r\n finalSubmissionLevel: number\r\n): Promise => {\r\n const response = await axios({\r\n url: `/Workflow/GetMailListAndGmCfoCount`,\r\n method: 'POST',\r\n timeout: 0,\r\n params: {\r\n reportingLevel: reportingLevel,\r\n unitCode: unitCode,\r\n userRole: userRole,\r\n finalSubmissionLevel: finalSubmissionLevel,\r\n },\r\n });\r\n return response.data;\r\n};\r\n\r\nexport const sendMailToUsers = async (\r\n emailObject: EmailNotificationObject\r\n): Promise => {\r\n await axios({\r\n url: `/Workflow/SendMail`,\r\n method: 'POST',\r\n timeout: 0,\r\n data: emailObject,\r\n headers: {\r\n 'content-type': 'application/json; utf-8',\r\n },\r\n });\r\n};\r\n","import React from 'react';\r\nimport { Container, Row, Col } from 'react-bootstrap';\r\nimport styles from './FinalSubmissionLevel.module.css';\r\nimport { FinalSubmissionProps } from '../interfaces';\r\nimport { FINALSUBMISSIONSTRING } from '../constants';\r\n\r\n// Dropdown menu to select final submission level\r\n// Editable by: Preparers, Reviewers, Controllers\r\n// Viewable by: All\r\nconst FinalSubmissionLevelInput: React.FC = (\r\n props: FinalSubmissionProps\r\n) => {\r\n const styleForInput = { backgroundColor: '#FFFFFF' };\r\n const getAlertForGmCfoDc = (\r\n gmcfoNotPresent: boolean,\r\n dcNotPresent: boolean\r\n ): string => {\r\n const base = '* Few options are disabled as there are no ';\r\n const ending =\r\n gmcfoNotPresent && dcNotPresent\r\n ? 'GM/CFO(s) and Designated Controllers'\r\n : gmcfoNotPresent\r\n ? 'GM/CFO(s)'\r\n : dcNotPresent\r\n ? 'Designated Controllers'\r\n : '';\r\n return base + ending;\r\n };\r\n return (\r\n \r\n \r\n \r\n \r\n {/* If no users are present in GM&CFO role, then display message */}\r\n {(props.gmCFONotPresent || props.dcNotPresent) &&\r\n props.reportEditMode && (\r\n

\r\n {getAlertForGmCfoDc(props.gmCFONotPresent, props.dcNotPresent)}\r\n

\r\n )}\r\n {\r\n const updatedDetails = Object.assign({}, props.reportDetails);\r\n updatedDetails.finalSubmissionLevel = Number(event.target.value);\r\n props.setDetails(updatedDetails);\r\n }}\r\n disabled={!props.reportEditMode}\r\n style={styleForInput}\r\n >\r\n \r\n\r\n {/* If no users are present in GM&CFO role, then hide GM&CFO options*/}\r\n {(!props.reportEditMode || !props.gmCFONotPresent) && (\r\n \r\n )}\r\n {/* If no users are present in Designated Controller role, then hide Designated Controller option*/}\r\n {(!props.reportEditMode || !props.dcNotPresent) && (\r\n \r\n )}\r\n {/* If no users are present in GM&CFO and Designated Controller role, then hide GM&CFO and Designated Controller option*/}\r\n {(!props.reportEditMode ||\r\n (!props.gmCFONotPresent && !props.dcNotPresent)) && (\r\n \r\n )}\r\n \r\n \r\n
\r\n
\r\n );\r\n};\r\n\r\nexport default FinalSubmissionLevelInput;\r\n","import React from 'react';\r\nimport { Container } from 'react-bootstrap';\r\nimport DefaultIcon from '../../images/FinalOutcomeReportImages/Default View Icon.png';\r\nimport styles from './Util.module.css';\r\n\r\n// Initial default screen in the Final Outcome Report asking user to make filter selections\r\n\r\nconst DefaultScreen: React.FC = () => {\r\n return (\r\n \r\n \r\n Default Icon\r\n
Please make the selections.
\r\n
\r\n
\r\n );\r\n};\r\n\r\nexport default DefaultScreen;\r\n","export default \"data:image/png;base64,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\"","import React from 'react';\r\nimport { Container } from 'react-bootstrap';\r\nimport DisabledIcon from '../../images/FinalOutcomeReportImages/Disabled View Icon.png';\r\nimport styles from './Util.module.css';\r\n\r\n// Screen displayed when Final Outcome Report has not reached user's role for selected filter.\r\n\r\nconst DisabledScreen: React.FC = () => {\r\n return (\r\n \r\n Disable Icon\r\n
Please wait for the report to reach your level.
\r\n
\r\n );\r\n};\r\n\r\nexport default DisabledScreen;\r\n","export default \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACEAAAAmCAYAAABK4fLXAAAABHNCSVQICAgIfAhkiAAAA01JREFUWEfNmI9xWjEMxsMETSYomaBlgsIETSYomaB0gpIJEiboywRNJihMkGSCvkxQOkH7/TjJJxvz58gR0B33eJYtff4syYLO6ejx38lhZdY5RhB3IqV5A2Ju5eOD+Vli4np+2xvvG4TYn8rHpwii1ct7G7gTiOEhQGSoBKL/BiD+yMep+ZkQmJzPVxuYC8TZPkHIX1f2fwcfV4CA/h9h8FxAOKK9iPxdyPDPYLwHCGiBHpdvAgE7exH5a2T4ixl/ka9uhxcp7vX4bIqpFIOIQPqR3t/tgOpZtrCdRLayeJB+5CCGmhWPpCflk6+sULgNnr+a1C/slH4WR78AYWy0enqq3kt5WeygNLAOCAAuZGNa2CAguzb2ID3xcRJBlE4uK1SyqNFn3dG8GIDEpG1yrOf3ACqxnUDYRJB7JZvrOxNhKIkFMufs86Kasj/SGtbGNR/18hiGJsSCv5cgoIod+E75PiiNVgAzlBl2BwINgF/6eHF61ndiJQHNQJjxvi1yO0zmaKbF7gDsRYcY6FYYGGr8JgBYClZsLoEwICyO2cJwY7uNWdNqjGCexXKv3bMRzp+nSxXAShAGpBaEpTPYITay27fSo1SD1dFVmXCl1XkceeruAmKm9aRrFqyBofpxBBCcZ4riCu3bMDGXl/H8pjeJjjeCsDQkoonsKFm/EZqTVeNxbSM2rmpAatlBKpUAoHRYqRneJD9J14sOLDhjG4e6CqQGgqwYBoPVls8uNY7LhXrC8SQxRgHitya6pVu6LFacfzS8CkBf8+gJvABhvNWHepKVaxTF9c1QBjjeHV0pKa1uOF0wxe7I/3EcC9/JAHbalHoBAZx32K3mnPucCIKFTttSBTRq2T0sbJKls7fyHe+PxLL3E7CQ9X1xN2uyZR2YGpC40cSGgyB4vNmtsVAG6yYmXJ8FYa3JZbMOIjYb2W1oqUbK7iLECN1TqpZFbCzijka3vOuzZkZ6AGwTB6tAlvdKmYFngCDSU8cjZDFYS4A7sSGb6bdMhdkBIOiSvNOmO06lulKQdgHBmqwuFLfsNSCmmpR+nBZ9ASy95igcNJlCZixEPls9/GZ+KP+fONivcr+EAHkUIKCJz76FuPPr4Xj+LiL4Dintf/izyjWl3PKcAAAAAElFTkSuQmCC\"","import React from 'react';\r\nimport { Container } from 'react-bootstrap';\r\nimport ErrorIcon from '../../images/FinalOutcomeReportImages/Error View.png';\r\nimport styles from './Util.module.css';\r\n\r\n// Default screen to display error.\r\n\r\nconst ErrorScreen: React.FC = () => {\r\n return (\r\n \r\n Error Icon\r\n
Something went wrong.
\r\n
\r\n );\r\n};\r\n\r\nexport default ErrorScreen;\r\n","export default \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADAAAAAqCAYAAAD1T9h6AAAABHNCSVQICAgIfAhkiAAAAzdJREFUWEfdWe1VHDEM9FWQo4OjAz4KyFJBoAKggpAKclQQUkGWCiAVZFNAEqiAK4E0QDKzWe55dy1bsn1/4vfu3Q/LkkayxrJ34XYwfjl3/se5NVSv8NssnGsPnbvegSkH3XXHDzgOpR+nWgGoPXbusq41VxcAIn8AR/EXHgB2gkx0NUFUzcBP577BuSbi4MORc8BQb1QDgLCfIvp3Kdcg8wFb6SYlp52vBgDRfxqKNmX7GUb3kYbnlKBmvgoAqXAlB5CFz8jClcbBlEwxAGydJRxi9JcpY/78kIWNZU1IthgAtk4LxecZjnQo6JOMdaMlRQAQ/QbRJ/NkjRq0WgRAQZspYBtkYT8lFJvPBoDoXyD6X0qMcy10XKOg17l6sgAMhcsTd5Vr2FtXRKtZAKy0qQB5i610oZCbiZgBIOyrod+RaPMW8yF6XMLYe8lJzB3icHuwgjADQPTvsOhUMoRIijpR9MAmjixaNQHQ0GYBACI/QxbuLVkwAUAEWbgHMQMlAKCXlx9uJXWfpAagpc3Y4ZTYQn1crLSqAmDpd0oBAANplVkIEUEeC1loUwKgqR/POzWtJjMw0Ca7TdWoBIAFrbp+JgFY+x2JSYwZYLBUtBoFkGFULMIcXXDuErXQxlIfBWC4Jm5tSCyiZbGJs8k+SQSAwr3C5CfVxveEJAAWIvBtpmg1CMBCm1OA0n03FwD1w0k+AgRpNQgAxm5ijVciK0w79+3oNAUwXuJN9+ZXO1h7jzvDWcjuDICVNq1bLFdeotUZACttCg59heI122MG5OVfPYmttBJU8FVvBED7uhYzuIsa8LbS7FVvBCCHNqdgoHBP6iahn3XxRhnxkNiMVrcASljCs/SIdlpstwGgg+zbAgA8KEevej2AEtqcHjwAsCc5qLlPaMD5tNoDKHhdm9mL9ELRbwcaxz2ZbZ+0SH2UMCqmOPcpr4bcLv0YbPANKXqbs9h6pdUFos876DvLYqVsByMd9mwDef5qj55WCSD2UlDbaFV9vH//FwBahCXnebxqNDOUfUcGGhYxP1BsoKDkgMmwX7TkN+qrYavinwP88LbCr+igKXIrvfgRInSafRaD7v4CcE3yK5KNZaQAAAAASUVORK5CYII=\"","import React from 'react';\r\nimport { Container, Table } from 'react-bootstrap';\r\nimport { TableViewProps } from '../interfaces';\r\nimport styles from './ReportLineItemContainer.module.css';\r\n// Grid for displaying line items\r\n// Displayed in case user does not have edit access. Useful when taking printout\r\nconst TableView: React.FC = (props: TableViewProps) => {\r\n return (\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n {props.lineItems.map((item) => {\r\n return (\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n );\r\n })}\r\n \r\n
Reviewer PeriodScheduleBSR ObservationFinancial ImpactStatusComments
{item.reviewerPeriod}{item.schedule}{item.bsrObservation}{item.financialImpact}{item.status ? 'Closed' : 'In Progress'}{item.comments}
\r\n
\r\n );\r\n};\r\n\r\nexport default TableView;\r\n","import React, { useCallback, useEffect, useState } from 'react';\r\nimport { Alert, Col, Container, Row, Spinner } from 'react-bootstrap';\r\nimport FilterSection from '../FilterSection/FilterSection';\r\nimport ActivityLogModal from '../ActivityLogModal/ActivityLogModal';\r\nimport styles from './FinalOutcomeReport.module.css';\r\nimport ActivityLogIcon from '../../images/FinalOutcomeReportImages/Activity Log.png';\r\nimport {\r\n UserDetailsObject,\r\n FinalOutcomeReportProps,\r\n CurrentFilterSelection,\r\n ActivityLogItem,\r\n ReportLineItemObject,\r\n ReportCommentObject,\r\n ReportDetailsObject,\r\n EmailRecipientAndGmCfoDcCountObject,\r\n EmailNotificationObject,\r\n} from '../interfaces';\r\nimport {\r\n DISPLAY,\r\n getUserRoleCode,\r\n getReportStatusCode,\r\n getUserRoleString,\r\n OUTCOME,\r\n USERROLECODE,\r\n getReportStatusString,\r\n ERRORS,\r\n REPORTSTATUSCODE,\r\n getReportStatusAfterSubmit,\r\n GMCFOMAILINGFLAG,\r\n REPORTSTATUSSTRING,\r\n MAILINGTYPE,\r\n getMailSubjectAndBody,\r\n DEFAULT_EMAIL_GM_CFO_LIST,\r\n getReportingLevelCode,\r\n REPORTINGLEVElSTRING,\r\n} from '../constants';\r\nimport ReportComment from '../ReportComment/ReportComment';\r\nimport ReportLineItemContainer from '../ReportLineItemContainer/ReportLineItemContainer';\r\nimport ReportSubmission from '../ReportSubmission/ReportSubmission';\r\nimport ReportDetails from '../ReportDetails/ReportDetails';\r\nimport ProgressStepper from '../ProgressStepper/ProgressStepper';\r\nimport {\r\n DeleteLineItems,\r\n getAcceptanceFlagForGmCfo,\r\n getActivityLogDetails,\r\n getMailListAndGmCfoCount,\r\n getReportComments,\r\n getReportDetails,\r\n getReportLineItems,\r\n insertActivityLog,\r\n InsertOrUpdateReportLineItems,\r\n sendMailToUsers,\r\n submissionForApprovers,\r\n updateReportDetails,\r\n} from '../apiCalls';\r\nimport FinalSubmissionLevelInput from '../FinalSubmissionLevelInput/FinalSubmissionLevelInput';\r\nimport DefaultScreen from '../UtilContainer/DefaultScreen';\r\nimport DisabledScreen from '../UtilContainer/DisabledScreen';\r\nimport ErrorScreen from '../UtilContainer/ErrorScreen';\r\nimport ActivityLogComponent from '../ActivityLogComponent/ActivityLogComponent';\r\nimport TableView from '../ReportLineItemContainer/TableView';\r\nimport { Route, Routes } from 'react-router-dom';\r\n\r\nconst FinalOutcomeReport: React.FC = (\r\n props: FinalOutcomeReportProps\r\n) => {\r\n const [displayStatus, setDisplayStatus] = useState(DISPLAY.DEFAULT);\r\n const [showActivitylog, setActivityLogView] = useState(false);\r\n const [activityLogLoading, setLoading] = useState(false);\r\n const [selectedFilter, setFilter] = useState();\r\n const [activityLogs, setActivityLogs] = useState([]);\r\n const [userRole, setUserRole] = useState(100);\r\n const [reportStatus, setReportStatus] = useState(100);\r\n const [reportDetails, setReportDetails] = useState();\r\n const [reportLineItems, setReportLineItems] = useState<\r\n ReportLineItemObject[]\r\n >([]);\r\n const [deletedLineItemList, setDeletedLineItemList] = useState([]);\r\n const [reportComments, setReportComments] = useState(\r\n []\r\n );\r\n const [reportEditMode, setReportEditMode] = useState(false);\r\n const [reportSubmissionMode, setReportSubmissionMode] = useState(\r\n false\r\n );\r\n const [validationFlag, setValidationFlag] = useState(false);\r\n const [unsavedItemCounter, setUnsavedItemCounter] = useState(0);\r\n const [alertMessage, setAlertMessage] = useState(\r\n ERRORS.INVALID_SAVE_ALERT\r\n );\r\n const [\r\n emailListAndGmCfoDcCount,\r\n setemailListAndGmCfoDcCount,\r\n ] = useState(DEFAULT_EMAIL_GM_CFO_LIST);\r\n\r\n const fetchData = useCallback(async () => {\r\n if (selectedFilter) {\r\n setDisplayStatus(DISPLAY.LOADING);\r\n\r\n try {\r\n const responseReport = await getReportDetails(\r\n selectedFilter.yearQuarter,\r\n getReportingLevelCode(selectedFilter.reportingLevel),\r\n selectedFilter.unitCode\r\n );\r\n const temporaryState = getReportStatusCode(responseReport.state);\r\n setReportStatus(temporaryState);\r\n const possibleRole: number[] = props.userData\r\n .filter((item: UserDetailsObject) => {\r\n switch (selectedFilter.reportingLevel) {\r\n case REPORTINGLEVElSTRING.SECTOR:\r\n return item.sectorName === selectedFilter.unitCode;\r\n case REPORTINGLEVElSTRING.BU:\r\n return item.buName === selectedFilter.unitCode;\r\n case REPORTINGLEVElSTRING.MARKET:\r\n return item.mktUnitName === selectedFilter.unitCode;\r\n default:\r\n return item.compCode === selectedFilter.unitCode;\r\n }\r\n })\r\n .map((i: UserDetailsObject) => getUserRoleCode(i.role));\r\n\r\n let temporaryUserRole;\r\n if (possibleRole.includes(temporaryState)) {\r\n temporaryUserRole = temporaryState;\r\n } else {\r\n temporaryUserRole = Math.max(...possibleRole);\r\n }\r\n setUserRole(temporaryUserRole);\r\n\r\n let temporaryEditMode = false;\r\n let temporarySubmissionMode = false;\r\n\r\n // access validation\r\n if (\r\n temporaryUserRole > temporaryState &&\r\n !(\r\n temporaryUserRole === USERROLECODE.VIEWER &&\r\n temporaryState >= REPORTSTATUSCODE.APPROVED\r\n ) &&\r\n !(\r\n temporaryUserRole === USERROLECODE.REVIEWER &&\r\n temporaryState === REPORTSTATUSCODE.NOTPREPARED\r\n )\r\n ) {\r\n setDisplayStatus(DISPLAY.DISABLED);\r\n } else {\r\n if (\r\n temporaryUserRole === USERROLECODE.CONTROLLER &&\r\n temporaryState === REPORTSTATUSCODE.ACCEPTED\r\n ) {\r\n temporaryEditMode = false;\r\n temporarySubmissionMode = true;\r\n } else if (\r\n temporaryUserRole === USERROLECODE.GM_CFO &&\r\n temporaryState === REPORTSTATUSCODE.APPROVED\r\n ) {\r\n temporaryEditMode = false;\r\n temporarySubmissionMode = true;\r\n } else if (\r\n temporaryUserRole === USERROLECODE.GM_CFO &&\r\n temporaryState === REPORTSTATUSCODE.INTER_ACCEPTED\r\n ) {\r\n temporaryEditMode = false;\r\n const acceptanceFlag = await getAcceptanceFlagForGmCfo(\r\n selectedFilter.yearQuarter,\r\n selectedFilter.unitCode,\r\n sessionStorage.getItem('userEmail') || '' // props.userData[0].emailId,\r\n );\r\n\r\n temporarySubmissionMode = acceptanceFlag === 1 ? false : true;\r\n } else if (\r\n temporaryUserRole === temporaryState &&\r\n temporaryUserRole !== USERROLECODE.VIEWER\r\n ) {\r\n temporaryEditMode = true;\r\n temporarySubmissionMode = true;\r\n } else {\r\n temporaryEditMode = false;\r\n temporarySubmissionMode = false;\r\n }\r\n setReportSubmissionMode(temporarySubmissionMode);\r\n setReportEditMode(temporaryEditMode);\r\n setReportDetails(responseReport);\r\n\r\n const responseLineItems = await getReportLineItems(\r\n selectedFilter.yearQuarter,\r\n selectedFilter.unitCode\r\n );\r\n setReportLineItems(responseLineItems);\r\n\r\n if (temporaryEditMode) {\r\n const responseReportComments = await getReportComments(\r\n selectedFilter.yearQuarter,\r\n selectedFilter.unitCode,\r\n getUserRoleString(temporaryUserRole)\r\n );\r\n setReportComments(responseReportComments);\r\n }\r\n\r\n if (temporarySubmissionMode) {\r\n // call teradata sp for to and cc list and gm cfo count\r\n const responseEmailList = await getMailListAndGmCfoCount(\r\n getReportingLevelCode(selectedFilter.reportingLevel),\r\n selectedFilter.unitCode,\r\n getUserRoleString(temporaryUserRole),\r\n responseReport.finalSubmissionLevel\r\n );\r\n setemailListAndGmCfoDcCount(responseEmailList);\r\n }\r\n\r\n if (temporaryState === REPORTSTATUSCODE.SUBMITTED) {\r\n const responseActivityLogs = await getActivityLogDetails(\r\n selectedFilter.yearQuarter,\r\n selectedFilter.unitCode\r\n );\r\n setActivityLogs(responseActivityLogs);\r\n }\r\n\r\n setDisplayStatus(DISPLAY.SUCCESS);\r\n }\r\n } catch (e) {\r\n console.log(e);\r\n setDisplayStatus(DISPLAY.ERROR);\r\n }\r\n }\r\n }, [props.userData, selectedFilter]);\r\n\r\n useEffect(() => {\r\n fetchData();\r\n }, [fetchData, props.userData, selectedFilter]);\r\n\r\n const displayLogs = async () => {\r\n try {\r\n setLoading(true);\r\n if (selectedFilter) {\r\n const response = await getActivityLogDetails(\r\n selectedFilter.yearQuarter,\r\n selectedFilter.unitCode\r\n );\r\n setLoading(false);\r\n setActivityLogView(true);\r\n setActivityLogs(response);\r\n }\r\n } catch (e) {\r\n console.log(e);\r\n }\r\n };\r\n\r\n const validateData = (actionType: string) => {\r\n if (actionType === OUTCOME.SAVE && unsavedItemCounter !== 0) {\r\n setAlertMessage(ERRORS.INVALID_SAVE_ALERT);\r\n window.scrollTo(0, 0);\r\n setValidationFlag(true);\r\n return 0;\r\n } else if (\r\n actionType === OUTCOME.APPROVE ||\r\n actionType === OUTCOME.REJECT\r\n ) {\r\n const emptyLineItem = reportLineItems.filter(\r\n (lineItem: ReportLineItemObject) => {\r\n return (\r\n lineItem.bsrObservation === '' ||\r\n lineItem.financialImpact === '' ||\r\n lineItem.schedule === '' ||\r\n lineItem.reviewerPeriod === ''\r\n );\r\n }\r\n );\r\n if (\r\n reportDetails?.summary === '' ||\r\n reportDetails?.dateOfReview === '' ||\r\n reportDetails?.reviewPeriod === '' ||\r\n emptyLineItem.length !== 0 ||\r\n unsavedItemCounter !== 0\r\n ) {\r\n setAlertMessage(ERRORS.INVALID_SUBMIT_ALERT);\r\n window.scrollTo(0, 0);\r\n setValidationFlag(true);\r\n return 0;\r\n }\r\n }\r\n return 1;\r\n };\r\n\r\n const saveUpdates = async () => {\r\n setDisplayStatus(DISPLAY.LOADING);\r\n try {\r\n if (selectedFilter && reportDetails) {\r\n await updateReportDetails({\r\n yearQuarter: selectedFilter.yearQuarter,\r\n reportingLevel: getReportingLevelCode(selectedFilter.reportingLevel),\r\n unitCode: selectedFilter.unitCode,\r\n state: getReportStatusString(reportStatus),\r\n summary: reportDetails.summary,\r\n reviewPeriod: reportDetails.reviewPeriod,\r\n dateOfReview: reportDetails.dateOfReview,\r\n attendees: reportDetails.attendees,\r\n finalSubmissionLevel: reportDetails.finalSubmissionLevel,\r\n });\r\n if (reportLineItems.length > 0) {\r\n await InsertOrUpdateReportLineItems(reportLineItems);\r\n }\r\n if (deletedLineItemList.length > 0) {\r\n await DeleteLineItems(deletedLineItemList);\r\n setDeletedLineItemList([]);\r\n }\r\n }\r\n setValidationFlag(false);\r\n await fetchData();\r\n } catch {\r\n setDisplayStatus(DISPLAY.ERROR);\r\n }\r\n };\r\n\r\n const submitUpdates = async (\r\n outcomeStatus: string,\r\n comment: string,\r\n toMailList: string,\r\n ccMailList: string\r\n ) => {\r\n setDisplayStatus(DISPLAY.LOADING);\r\n let statusAfterApproval = REPORTSTATUSSTRING.NOTPREPARED;\r\n\r\n // updating to mail list\r\n toMailList =\r\n toMailList === ''\r\n ? sessionStorage.getItem('userEmail') || ''\r\n : toMailList;\r\n\r\n toMailList = toMailList\r\n .replaceAll(',', ';')\r\n .replaceAll(' ', '')\r\n .replaceAll('\\n', '');\r\n ccMailList = ccMailList\r\n .replaceAll(',', ';')\r\n .replaceAll(' ', '')\r\n .replaceAll('\\n', '');\r\n\r\n if (selectedFilter && reportDetails && emailListAndGmCfoDcCount) {\r\n try {\r\n if (\r\n userRole === USERROLECODE.GM_CFO ||\r\n userRole === USERROLECODE.CONTROLLER\r\n ) {\r\n const responseMailingFlag = await submissionForApprovers({\r\n yearQuarter: selectedFilter.yearQuarter,\r\n reportingLevel: getReportingLevelCode(\r\n selectedFilter.reportingLevel\r\n ),\r\n unitCode: selectedFilter.unitCode,\r\n userRole: getUserRoleString(userRole),\r\n userEmail: sessionStorage.getItem('userEmail') || '',\r\n finalSubmissionLevel: reportDetails.finalSubmissionLevel,\r\n totalGMCFOCount: emailListAndGmCfoDcCount.gmCfoCount,\r\n outcome: outcomeStatus,\r\n comment: comment,\r\n });\r\n\r\n switch (responseMailingFlag) {\r\n case GMCFOMAILINGFLAG.SEND_SUBMITTED_MAIL:\r\n statusAfterApproval = REPORTSTATUSSTRING.SUBMITTED;\r\n break;\r\n case GMCFOMAILINGFLAG.SEND_ACCEPTED_MAIL:\r\n statusAfterApproval = REPORTSTATUSSTRING.ACCEPTED;\r\n break;\r\n case GMCFOMAILINGFLAG.SEND_IN_PROGRESS_MAIL:\r\n statusAfterApproval =\r\n outcomeStatus === OUTCOME.APPROVE\r\n ? REPORTSTATUSSTRING.INTER_ACCEPTED\r\n : REPORTSTATUSSTRING.REVIEWED;\r\n break;\r\n }\r\n } else {\r\n statusAfterApproval =\r\n outcomeStatus === OUTCOME.APPROVE\r\n ? getReportStatusAfterSubmit(\r\n userRole,\r\n reportStatus,\r\n reportDetails.finalSubmissionLevel\r\n )\r\n : getReportStatusString(reportStatus - 1);\r\n\r\n if (reportLineItems.length > 0) {\r\n await InsertOrUpdateReportLineItems(reportLineItems);\r\n }\r\n if (deletedLineItemList.length > 0) {\r\n await DeleteLineItems(deletedLineItemList);\r\n setDeletedLineItemList([]);\r\n }\r\n await insertActivityLog({\r\n yearQuarter: selectedFilter.yearQuarter,\r\n reportingLevel: getReportingLevelCode(\r\n selectedFilter.reportingLevel\r\n ),\r\n unitCode: selectedFilter.unitCode,\r\n userEmail: sessionStorage.getItem('userEmail') || '', // props.userData[0].emailId,\r\n userRole: getUserRoleString(userRole),\r\n status:\r\n outcomeStatus === OUTCOME.APPROVE\r\n ? statusAfterApproval\r\n : 'Rejected',\r\n comment: comment,\r\n commentFor:\r\n outcomeStatus === OUTCOME.APPROVE\r\n ? getUserRoleString(getReportStatusCode(statusAfterApproval))\r\n : getUserRoleString(userRole - 1),\r\n timeStamp: '',\r\n id: 0,\r\n });\r\n\r\n await updateReportDetails({\r\n yearQuarter: selectedFilter.yearQuarter,\r\n reportingLevel: getReportingLevelCode(\r\n selectedFilter.reportingLevel\r\n ),\r\n unitCode: selectedFilter.unitCode,\r\n state:\r\n outcomeStatus === OUTCOME.APPROVE\r\n ? statusAfterApproval\r\n : getReportStatusString(reportStatus - 1),\r\n summary: reportDetails.summary,\r\n reviewPeriod: reportDetails.reviewPeriod,\r\n dateOfReview: reportDetails.dateOfReview,\r\n attendees: reportDetails.attendees,\r\n finalSubmissionLevel: reportDetails.finalSubmissionLevel,\r\n });\r\n }\r\n\r\n // sending final mail\r\n const emailObject: EmailNotificationObject = {\r\n initiatorID: sessionStorage.getItem('userEmail') || '',\r\n initiatorRole: getUserRoleString(userRole),\r\n subject: '',\r\n body: '',\r\n toList: toMailList,\r\n ccList: ccMailList,\r\n mailSignature: '',\r\n };\r\n\r\n // updating for GM CGO\r\n if (outcomeStatus === OUTCOME.APPROVE) {\r\n if (\r\n userRole === USERROLECODE.GM_CFO &&\r\n statusAfterApproval !== REPORTSTATUSSTRING.INTER_ACCEPTED\r\n ) {\r\n emailObject.toList = emailListAndGmCfoDcCount.dcListForGmCfo;\r\n }\r\n }\r\n\r\n // setting up mail type\r\n let mailType: number = MAILINGTYPE.APPROVAL_MAIL;\r\n if (outcomeStatus === OUTCOME.REJECT) {\r\n mailType = MAILINGTYPE.REJECTION_MAIL;\r\n } else if (statusAfterApproval === REPORTSTATUSSTRING.SUBMITTED) {\r\n mailType = MAILINGTYPE.FINAL_SUBMISSION_MAIL;\r\n }\r\n\r\n [\r\n emailObject.subject,\r\n emailObject.body,\r\n emailObject.mailSignature,\r\n ] = getMailSubjectAndBody(\r\n mailType,\r\n selectedFilter.reportingLevel,\r\n selectedFilter.unitCode,\r\n selectedFilter.yearQuarter,\r\n statusAfterApproval,\r\n sessionStorage.getItem('userEmail') || '',\r\n getUserRoleString(userRole),\r\n comment\r\n );\r\n await sendMailToUsers(emailObject);\r\n setValidationFlag(false);\r\n await fetchData();\r\n } catch (e) {\r\n console.log(e);\r\n }\r\n }\r\n };\r\n const isLoading = displayStatus === DISPLAY.LOADING;\r\n const isSuccess = displayStatus === DISPLAY.SUCCESS;\r\n const isDefault = displayStatus === DISPLAY.DEFAULT;\r\n const isDisabled = displayStatus === DISPLAY.DISABLED;\r\n const isError = displayStatus === DISPLAY.ERROR;\r\n return (\r\n <>\r\n setValidationFlag(false)}\r\n transition={false}\r\n dismissible\r\n >\r\n {alertMessage}\r\n \r\n \r\n \r\n \r\n

BSR Workflow

\r\n \r\n {isSuccess && (\r\n \r\n \r\n \r\n Activity Log\r\n {activityLogLoading && (\r\n \r\n )}\r\n \r\n \r\n )}\r\n
\r\n
\r\n \r\n {\r\n return {\r\n Sector: obj.sectorName,\r\n BU: obj.buName,\r\n Market: obj.mktUnitName,\r\n CompanyName: obj.compName,\r\n CompCode: obj.compCode,\r\n };\r\n }\r\n )}\r\n setCurrentFilters={setFilter}\r\n />\r\n }\r\n />\r\n {\r\n return {\r\n Sector: obj.sectorName,\r\n BU: obj.buName,\r\n Market: obj.mktUnitName,\r\n CompanyName: obj.compName,\r\n CompCode: obj.compCode,\r\n };\r\n }\r\n )}\r\n setCurrentFilters={setFilter}\r\n />\r\n }\r\n />\r\n \r\n\r\n {userRole !== REPORTSTATUSCODE.DEFAULT && (\r\n \r\n )}\r\n {isLoading && (\r\n \r\n \r\n

Loading

\r\n
\r\n )}\r\n {isSuccess && (\r\n
\r\n {selectedFilter && reportDetails && (\r\n <>\r\n \r\n {reportEditMode && (\r\n \r\n )}\r\n \r\n )}\r\n {!reportEditMode && }\r\n {reportEditMode && reportComments.length !== 0 && (\r\n \r\n )}\r\n {userRole <= USERROLECODE.APPROVER && reportDetails && (\r\n 0 ? false : true\r\n }\r\n dcNotPresent={emailListAndGmCfoDcCount.dcCount > 0 ? false : true}\r\n />\r\n )}\r\n {reportStatus !== REPORTSTATUSCODE.SUBMITTED &&\r\n userRole !== USERROLECODE.VIEWER &&\r\n emailListAndGmCfoDcCount && (\r\n \r\n )}\r\n {reportStatus === REPORTSTATUSCODE.SUBMITTED && (\r\n <>\r\n \r\n \r\n )}\r\n
\r\n )}\r\n {isDefault && }\r\n {isDisabled && }\r\n {isError && }\r\n {selectedFilter && (\r\n setActivityLogView(false)}\r\n />\r\n )}\r\n \r\n );\r\n};\r\nexport default FinalOutcomeReport;\r\n","export default \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAXCAYAAAARIY8tAAAABHNCSVQICAgIfAhkiAAAARFJREFUSEvtlcFRwzAQRd9yIxfcAS2YI1ygA4YKoAOUDnAFERWQdOASOMUcQwemAswlcPIyaxmwZyAXKWGGYW/aGb0v6Wt3BYtj5xAugbxbx8cKpaDypfTwWTzzW8KRCdQIhygvwByhiRSzVzjvGYVw4rRbKLdU3kXCw/YPJgwEoGDpb7Yn0LJA5C6JAHqPdKT+BvZIIZE6BgLwBNRJFIRTwqF36cHWTd6JwBrPhOtPH+xnvdGMcptMaqXmYbb4uQ5aavb4+qrKFKUZ5TYJWDeofPZLhfbvQWiYf9oDpaTyF9G9KHcZE56HA6ccTKBo/gigTG2i5SjWvw/S0nlkzVmYAnatfa4QsiQiVv2vzFn55h08FaSvTe8j3gAAAABJRU5ErkJggg==\"","import { useEffect } from 'react';\r\nimport { msalInstance, msalScopes } from '../../config/msalConfig';\r\nimport { HandleLoginProps } from '../interfaces';\r\n\r\n/* \r\n Description: Function to save Access token, email id and username to session storage\r\n Input: Access token, Email id, Username\r\n*/\r\nconst saveToSessionStorage = (\r\n msalAccessToken: string,\r\n userEmail: string,\r\n userName = ''\r\n) => {\r\n sessionStorage.setItem('msalAccessToken', msalAccessToken);\r\n userName && sessionStorage.setItem('userName', userName);\r\n userEmail && sessionStorage.setItem('userEmail', userEmail);\r\n};\r\n\r\nconst HandleLogin: React.FC = (props: HandleLoginProps) => {\r\n useEffect(() => {\r\n const login = () => {\r\n msalInstance.handleRedirectPromise().then((response) => {\r\n const tokenResponse = response;\r\n let accountObj;\r\n const loginRequest = {\r\n scopes: msalScopes.scopes,\r\n };\r\n if (tokenResponse) {\r\n accountObj = tokenResponse.account;\r\n } else {\r\n accountObj = msalInstance.getAllAccounts()[0];\r\n }\r\n if (accountObj && tokenResponse) {\r\n saveToSessionStorage(\r\n tokenResponse.accessToken,\r\n msalInstance.getAllAccounts()[0].username,\r\n msalInstance.getAllAccounts()[0].name\r\n );\r\n props.setAuthenticationState('authenticated');\r\n } else if (accountObj) {\r\n msalInstance\r\n .acquireTokenSilent({\r\n account: msalInstance.getAllAccounts()[0],\r\n scopes: msalScopes.scopes,\r\n })\r\n .then((data) => {\r\n saveToSessionStorage(\r\n data.accessToken,\r\n msalInstance.getAllAccounts()[0].username,\r\n msalInstance.getAllAccounts()[0].name\r\n );\r\n props.setAuthenticationState('authenticated');\r\n })\r\n .catch(() => {\r\n props.setAuthenticationState('uauthenticated');\r\n });\r\n } else {\r\n msalInstance\r\n .loginRedirect(loginRequest)\r\n .then(() => {\r\n // saveToSessionStorage(\r\n // data.accessToken,\r\n // msalInstance.getAllAccounts()[0].username,\r\n // msalInstance.getAllAccounts()[0].name\r\n // );\r\n props.setAuthenticationState('authenticated');\r\n })\r\n .catch(() => {\r\n props.setAuthenticationState('unauthenticated');\r\n });\r\n }\r\n });\r\n };\r\n login();\r\n });\r\n\r\n return null;\r\n};\r\n\r\nexport default HandleLogin;\r\n","import React from 'react';\r\nimport { Alert } from 'react-bootstrap';\r\nimport { ErrorContianerProps } from '../interfaces';\r\n\r\n/*\r\n Default screen to display error during login or due to access issues.\r\n Error message is passed in the props.\r\n*/\r\nconst ErrorContainer: React.FC = (\r\n props: ErrorContianerProps\r\n) => {\r\n return (\r\n \r\n You got an error!\r\n

{props.message}

\r\n
\r\n );\r\n};\r\n\r\nexport default ErrorContainer;\r\n","import { useEffect, useState } from 'react';\r\nimport { Container, Spinner } from 'react-bootstrap';\r\nimport './App.css';\r\nimport Header from './components/Header/Header';\r\nimport NavigationTab from './components/NavigationTab/NavigationTab';\r\nimport PowerBIEmbedded from './components/PowerBIEmbedded/PowerBIEmbedded';\r\nimport FinalOutcomeReport from './components/FinalOutcomeReport/FinalOutcomeReport';\r\nimport HandleLogin from './components/HandleLogin/HandleLogin';\r\nimport { UserDetailsObject } from './components/interfaces';\r\nimport 'bootstrap/dist/css/bootstrap.min.css';\r\nimport React from 'react';\r\nimport { getLoggedInUserDetails } from './components/apiCalls';\r\nimport ErrorContainer from './components/UtilContainer/ErrorContainer';\r\nimport { DISPLAY, ERRORS } from './components/constants';\r\nimport {\r\n Route,\r\n BrowserRouter as Router,\r\n Routes,\r\n Navigate,\r\n} from 'react-router-dom';\r\n\r\nconst App: React.FC = () => {\r\n type ValueOf = T[keyof T];\r\n const [selectedView, setSelectedView] = useState(DISPLAY.POWERBI);\r\n document.title =\r\n selectedView === DISPLAY.POWERBI\r\n ? 'BSR Application'\r\n : 'BSR | Final Outcome Report';\r\n const [displayStatus, setDisplayStatus] = useState(DISPLAY.LOADING);\r\n const [authenticationState, setAuthenticationState] = useState<\r\n ValueOf\r\n >(DISPLAY.LOADING);\r\n const [errorMessage, setErrorMessage] = useState('');\r\n const [userDetails, setUserDetails] = useState([]);\r\n\r\n useEffect(() => {\r\n const fetchData = async () => {\r\n if (authenticationState === DISPLAY.AUTHENTICATED) {\r\n try {\r\n const userDataResponse = await getLoggedInUserDetails(\r\n sessionStorage.getItem('userEmail') || ''\r\n );\r\n setUserDetails(userDataResponse);\r\n if (userDataResponse.length === 0) {\r\n setErrorMessage(ERRORS.ACCESS_ON_REPORT);\r\n setDisplayStatus(DISPLAY.ERROR);\r\n } else {\r\n setDisplayStatus(DISPLAY.SUCCESS);\r\n }\r\n } catch (e) {\r\n setErrorMessage(String(e));\r\n setDisplayStatus(DISPLAY.ERROR);\r\n }\r\n }\r\n };\r\n fetchData();\r\n }, [authenticationState]);\r\n\r\n const isLoading =\r\n authenticationState === DISPLAY.LOADING ||\r\n displayStatus === DISPLAY.LOADING;\r\n const errorOccurred =\r\n authenticationState === DISPLAY.NOT_AUTH || displayStatus === DISPLAY.ERROR;\r\n const isSucess = displayStatus === DISPLAY.SUCCESS;\r\n\r\n return (\r\n \r\n {' '}\r\n
\r\n \r\n {isLoading && (\r\n \r\n \r\n

Loading

\r\n
\r\n )}\r\n {errorOccurred && }\r\n {isSucess && (\r\n
\r\n
\r\n \r\n \r\n \r\n \r\n
\r\n }\r\n />\r\n \r\n \r\n
\r\n }\r\n />\r\n } />\r\n \r\n \r\n )}\r\n \r\n
\r\n );\r\n};\r\n\r\nexport default App;\r\n","const reportWebVitals = (onPerfEntry) => {\r\n if (onPerfEntry && onPerfEntry instanceof Function) {\r\n import('web-vitals').then(({ getCLS, getFID, getFCP, getLCP, getTTFB }) => {\r\n getCLS(onPerfEntry);\r\n getFID(onPerfEntry);\r\n getFCP(onPerfEntry);\r\n getLCP(onPerfEntry);\r\n getTTFB(onPerfEntry);\r\n });\r\n }\r\n};\r\n\r\nexport default reportWebVitals;\r\n","import React from 'react';\r\nimport ReactDOM from 'react-dom';\r\nimport './index.css';\r\nimport App from './App';\r\nimport reportWebVitals from './reportWebVitals';\r\n\r\nReactDOM.render(\r\n \r\n \r\n ,\r\n document.getElementById('root')\r\n);\r\n\r\n// If you want to start measuring performance in your app, pass a function\r\n// to log results (for example: reportWebVitals(console.log))\r\n// or send to an analytics endpoint. Learn more: https://bit.ly/CRA-vitals\r\nreportWebVitals();\r\n","// extracted by mini-css-extract-plugin\nmodule.exports = {\"counterLabel\":\"ReportDetails_counterLabel__L4_Qp\",\"invalidInput\":\"ReportDetails_invalidInput__RXpId\",\"Inputlables\":\"ReportDetails_Inputlables__70gTv\",\"InputReadOnly\":\"ReportDetails_InputReadOnly__2pPPR\",\"inputField\":\"ReportDetails_inputField__1J5En\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"icons\":\"ProgressStepper_icons__3FSZ7\",\"roleandStatusSection\":\"ProgressStepper_roleandStatusSection__2Zi-q\",\"stepper\":\"ProgressStepper_stepper__14ub7\",\"partial\":\"ProgressStepper_partial__2ii_i\",\"partialActive\":\"ProgressStepper_partialActive__-GrX5\",\"active\":\"ProgressStepper_active__2HmED\",\"notPrep\":\"ProgressStepper_notPrep__3f07X\",\"prep\":\"ProgressStepper_prep__ODHm6\",\"reviewed\":\"ProgressStepper_reviewed__3mLd-\",\"approved\":\"ProgressStepper_approved__2rFQc\",\"interAccepted\":\"ProgressStepper_interAccepted__3cZlg\",\"accepted\":\"ProgressStepper_accepted__3z2ZO\",\"submitted\":\"ProgressStepper_submitted__2_7Cv\",\"workflowStatus\":\"ProgressStepper_workflowStatus__NS1Tp\",\"flowChart\":\"ProgressStepper_flowChart__3ZHrV\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"screen\":\"Util_screen__1uMwv\",\"icons\":\"Util_icons__1zonk\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"bsrHeader\":\"Header_bsrHeader__1mWTT\",\"navBrand\":\"Header_navBrand__uITIX\",\"pepsiLogo\":\"Header_pepsiLogo__3W9zR\",\"headerTitle\":\"Header_headerTitle__2qZzO\",\"dropdownMenu\":\"Header_dropdownMenu__23Fxu\",\"profileImage\":\"Header_profileImage__2oCSd\",\"userName\":\"Header_userName__20Olb\",\"profileDetails\":\"Header_profileDetails__3fHJm\",\"nav-dropdown\":\"Header_nav-dropdown__2O-lP\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"tabIcon\":\"NavigationTab_tabIcon__jK27j\",\"tabTitle\":\"NavigationTab_tabTitle__2q_ja\",\"InActiveTab\":\"NavigationTab_InActiveTab__2Uq-5\",\"ActiveTab\":\"NavigationTab_ActiveTab__1juRp\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"icon\":\"ReportLineItemContainer_icon__12UXj\",\"alertDisplay\":\"ReportLineItemContainer_alertDisplay__1CW6T\",\"buttonSection\":\"ReportLineItemContainer_buttonSection__sKS26\",\"tableContainer\":\"ReportLineItemContainer_tableContainer__1NkTa\",\"lineItemHeaderSection\":\"ReportLineItemContainer_lineItemHeaderSection__25vpp\",\"lineItemAddSection\":\"ReportLineItemContainer_lineItemAddSection__2y35X\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"navigationArea\":\"ReportNavigationTab_navigationArea__2LyAB\",\"reportLinks\":\"ReportNavigationTab_reportLinks__16kpI\",\"activeTab\":\"ReportNavigationTab_activeTab__3Jmof\",\"excelOption\":\"ReportNavigationTab_excelOption__3rqDO\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"searchButton\":\"FilterSection_searchButton__TgWcK\",\"inputLabels\":\"FilterSection_inputLabels__3B6_o\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"loadingScreen\":\"FinalOutcomeReport_loadingScreen__1YuoI\",\"heading\":\"FinalOutcomeReport_heading__vCK1b\",\"inputLabels\":\"FinalOutcomeReport_inputLabels__1gtx9\",\"activityLogLink\":\"FinalOutcomeReport_activityLogLink__1oFvp\",\"logOption\":\"FinalOutcomeReport_logOption__2u2wy\",\"activityLogIcon\":\"FinalOutcomeReport_activityLogIcon__1BJVz\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"tableContainer\":\"ActivityLogComponent_tableContainer__3nvVQ\",\"dateValues\":\"ActivityLogComponent_dateValues__30pxz\",\"inputLabels\":\"ActivityLogComponent_inputLabels__1bV2E\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"inputLabels\":\"FinalSubmissionLevel_inputLabels__1Iwh-\",\"alertLabels\":\"FinalSubmissionLevel_alertLabels__3wbTW\"};"],"sourceRoot":""}