{"version":3,"sources":["components/StatusReferenceModal/components/FakeDayCell/FakeDayCell.module.scss","components/Loading/Loading.js","context/LoadingProvider.js","constants/constants.js","constants/host.js","utils/encryptionUtils.js","utils/utils.js","utils/toastUtils.js","hooks/useLoading.js","services/apiInterceptors.js","services/api.js","services/loginService.js","adapters/loginAdapter.js","adapters/yclickMasterAdapter.js","services/yclickMasterService.js","context/AppProvider.js","services/administrationService.js","adapters/userRequestsAdapter.js","components/Modals/ModalUserTrazability.jsx","context/UserTrazabilityContext.js","security/userRoles.js","context/UserPermisionsContext.js","utils/processType.js","hooks/useApp.js","hooks/useUserPermisions.js","utils/profileStatus.js","context/UserProfileContext.js","components/CustomTooltip/CustomTooltip.jsx","components/Modals/ModalUserProfile.jsx","components/Modals/ModalInfo.jsx","services/yclickServices.js","utils/dataEnum.js","components/StatusReferenceModal/components/FakeDayCell/FakeDayCell.js","components/StatusReferenceModal/components/ReferenceSquare/ReferenceSquare.js","components/StatusReferenceModal/StatusReferenceModal.js","components/NavBar/NavBar.js","hooks/useUserProfile.js","assets/img-error404.svg","containers/NotFound/NotFound.js","pages/PageNotFound.js","assets/logo-yclick-2.svg","containers/LoginContainer/LoginContainer.js","pages/Login.js","hooks/useHomeUtils.js","hooks/useUserTrazability.js","containers/HomeContainer/HomeContainer.js","pages/Home.js","routes/Routes.js","App.js","reportWebVitals.js","index.js","containers/HomeContainer/HomeContainer.module.scss"],"names":["module","exports","Loading","_ref","show","_jsx","className","children","Loader","text","defaultProps","LoadingContext","createContext","LoadingProvider","loading","setLoading","useState","_jsxs","Provider","value","notification","constantsSession","API_REDIRECT","process","isExternal","window","location","origin","trim","API_YCLICK_MASTER","URL_SERVICIOS","URL_CERTIFICACIONES","REACT_APP_URL_SERVICIOS_OYM_EXTERNAL","CRYPTOJS_SECRETKEY","REACT_APP_URL_CERTIFICACIONES_OYM_EXTERNAL","URL_ADMINISTRACION","API_ADMINISTRATION","CREDENTIALS_KEY","API_SERVICIOS","constantsToEncrypt","encryptCredentials","key","CryptoJS","enc","Utf8","parse","iv","AES","encrypt","keySize","mode","CBC","padding","pad","Pkcs7","toString","updateStorage","name","arguments","length","undefined","isLocal","encryptedValue","toEncrypt","isObject","some","constant","plainValue","JSON","stringify","String","localStorage","setItem","sessionStorage","getItemStorage","parser","getItem","toDecrypt","decrypt","clearStorage","clear","params","position","autoClose","hideProgressBar","closeOnClick","pauseOnHover","draggable","progress","icon","showError","error","statusCode","messageAfter","message","toast","useLoading","useContext","appContext","requestHeaderConfig","async","token_date","token_expires_in","token","token_date_valid","Number","isValidToken","Date","getTime","newConfig","config","headers","Authorization","onLogOut","apiInterceptors","instance","interceptors","request","use","Promise","reject","response","resolve","errorAfter","status","data","errorMessage","apiYClickMasterInstance","axios","create","baseURL","apiYClickLoginInstance","apiYClickAdministrationInstance","apiYClickServiciosInstance","getUserInfo","post","getUserInfoService","then","res","catch","err","login","user","password","userName","encryptedData","apiYClickLogin","loginService","getCurrentProvider","apiYclickMaster","get","nombre","AppContext","AppProvider","accessToken","userInfo","setUserInfo","setBaseURL","auth","setAuth","isReady","setIsReady","provName","setProvName","isNRURLReady","setIsNRURLReady","history","useHistory","search","useLocation","urlSearch","URLSearchParams","paramIsNR","appsURL","useMemo","administracion","certificaciones","servicios","queryNRisNotificationReport","queryNRContractNumber","decodeURIComponent","queryNRWell","queryNRDateFrom","queryNRDateTo","replace","handleRoleUser","resRoleUser","isAdmin","rol","toLowerCase","includes","isInspector","isProvider","resRoleUserNoId","map","role","providerName","currentProviderResponse","encodeURI","getProvider","notProvider","getRolesAndPermissions","all","resCert","resServ","resAdm","rolesMap","filter","item","id","rolesMapArr","Map","values","_ref2","resRolePermissions","handleRolePermissions","formatUserInfo","uid","first_name","last_name","mail","tipo_empleado","firstName","lastName","type","getDefaultUserInfo","getInfoUser","tokenJWT","jwt","decode","token_details","Profile","newUserInfo","defaultUserInfo","handleTokenJWT","handleUserInfoResponse","handleUserInfoError","push","useEffect","delete","authUser","date","access_token","refresh_token","expires_in","getFirstDateRequestAdapter","apiYClickAdministration","postUserTrazabilityReportAdapter","nameFile","newDateTo","dateTo","body","Accept","responseType","postUserTrazabilityReport","dateFrom","toISOString","url","URL","createObjectURL","Blob","link","document","createElement","href","setAttribute","appendChild","click","getFirstLoginAdapter","getInfoProfileAdapter","_res$data$groups","requestId","requestNumber","number","email","provider","supplier","cuit","groups","_item$groups","group","userGroup","flat","roles","uunn","businessUnits","services","edit","VALIDATION_SCHEMA","yup","shape","max","required","min","ModalUserTrazability","showTrazabilityModal","setShowTrazabilityModal","firstDateRequest","disabledPrimaryButton","setDisabledPrimaryButton","formRef","useRef","today","split","initialValues","onCloseModalUserTrazability","downloadReports","success","showSuccess","setTimeout","reload","ModalGeneric","title","size","onHide","infoModal","backdrop","secondaryActionLabel","secondaryActionVariant","secondaryAction","primaryActionLabel","primaryActionDisabled","primaryActionVariant","primaryAction","current","handleSubmit","Formik","innerRef","validationSchema","onSubmit","errors","touched","setFieldValue","setFieldTouched","isValid","Form","Row","Col","sm","DateInput","label","onChange","target","onClear","placeholder","widthDateInput","isInvalid","UserTrazabilityContext","displayName","UserTrazabilityProvider","setFirstDateRequest","handleShowTrazabilityModal","_Fragment","userRoles","Object","freeze","ADMINISTRADOR_CONTRATO","INSPECTOR","REFERENTE_CONTROL_GESTION","CONTROL_ERRORES_SAP","PROVEEDOR_ADMINISTRADOR","PROVEEDOR_NOTIFICADOR","USUARIO_CONSULTAS","SOLICITANTE","SUPERVISOR_NOTIFICADOR_YPF","APROBADOR","REFERENTE_COMPRAS","RESPONSABLE_PEP_PROYECTO","GERENTE_COMPRA","ADMINISTRADOR_USUARIO_EXTERNO","ADMINISTRADOR_USUARIO_SEGURIDAD","ADMINISTRADOR_USUARIO_PROPIEDADES","AUDITOR_SEGURIDAD","VISUALIZADOR_CONTRATOS","LIBERADOR","CERTIFICADOR","UserPermisionsContext","UserPermisionsProvider","isUserExternal","setIsUserExternal","userPermissions","setUserPermissions","checkRoles","rolParams","rolesUser","find","handleAllRolesUser","rolesArray","allUserRoles","isADMINISTRADOR_USUARIO_SEGURIDAD","isADMINISTRADOR_USUARIO_PROPIEDADES","isADMINISTRADOR_CONTRATO","isREFERENTE_CONTROL_GESTION","isCONTROL_ERRORES_SAP","isUSUARIO_CONSULTAS","isGERENTE_COMPRA","isINSPECTOR","isLIBERADOR","isCERTIFICADOR","isREFERENTE_COMPRAS","isSOLICITANTE","isSUPERVISOR_NOTIFICADOR_YPF","isRESPONSABLE_PEP_PROYECTO","isAPROBADOR","isADMINISTRADOR_USUARIO_EXTERNO","isAUDITOR_SEGURIDAD","isVISUALIZADOR_CONTRATOS","isPROVEEDOR_ADMINISTRADOR","isPROVEEDOR_NOTIFICADOR","handlePermissions","rolUserLogger","userPermissionsObject","userProfile","canEditMeProfile","PROCESS_TYPE","inProgress","notProcessed","pending","finalized","useApp","useUserPermisions","PROFILE_STATUS","contractPending","costObjectPending","completed","UserProfileContext","UserProfileProvider","expireIn","refreshToken","accessTokenDate","canBeEditMeProfileValue","setCanBeEditMeProfileValue","infoUserLogger","setInfoUserLogger","showModalInfo","setShowModalInfo","strongMessage","spanMessage","changeContentModalInfo","handleCanEditMeProfile","_userPermissions$user","keys","handleRedirectToMeProfile","requestType","handleGetInfoUserLogger","changeContent","_ref3","resFirstLogin","resInfoProfile","prevState","CustomToolTip","tooltipClassName","OverlayTrigger","delay","hide","placement","overlay","Tooltip","ModalUserProfile","_infoUserLogger$group","setShowModalUserProfile","showModalUserProfile","canBeEditMeProfile","onCloseModalUserProfile","renderLableAndTooltip","uniqueArrayText","obj","index","self","findIndex","ob","joinedText","e","join","Label","sizeValue","unit","g","service","ModalInfo","onCloseModal","colorReferenceApprover","colorReferenceInspector","FakeDayCell","colorsApprover","colorsInspector","styles","style","background","bgColor","btn","color","BsThreeDotsVertical","textColor","checked","disabled","ReferenceSquare","approver","alignItems","border","display","justifyContent","height","width","fontWeight","descripcion","StatusReferenceModal","setColorsApprover","setColorsInspector","getColors","apiYClickServicios","getReferenceColors","listaAprobador","listaEstadosColoresAprobador","estado","listaEstadosColoresInspeccion","flexDirection","flexWrap","NavBar","userRol","setUserRol","setRoles","idChat","setIdChat","showModal","setShowModal","activeRoles","substring","Navbar","chatbotPostMessage","msg","question","isFirstChat","postChatbotQuestion","postStartChatbotRound","chatId","chatbotTyC","expand","showMenu","logoYclickActive","manyUserRoles","showButtonHelp","showChatbot","showUserProfile","onViewProfile","openModalReference","activeStatusReference","modal","state","hideModal","NotFound","src","img","alt","Button","variant","onClick","goBack","PageNotFound","schemaFilters","LoginContainer","formik","useFormik","newValues","responseLogin","accessTokenData","expiresIn","loginUser","logo","ContentCard","orientation","Input","maxLength","InputPassword","showIcon","widthButton","Login","useHomeUtils","getYClickLinks","links","app","callback","pathname","permissions","isDownload","actionDownload","getAllowedLinks","returnedLinks","forEach","yClickLink","verifiedLinks","verifyLinkPermissions","linksArray","restOfLink","HomeContainer","yClickLinks","notificationReportRedirect","encodeURIComponent","nrUrl","contentModule","cardTitle","React","Fragment","colTitle","l","i","arr","Home","Routes","Switch","Route","exact","path","component","Redirect","to","App","Router","basename","ToastContainer","reportWebVitals","onPerfEntry","Function","getCLS","getFID","getFCP","getLCP","getTTFB","ReactDOM","render","StrictMode","getElementById"],"mappings":"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","file":"static/js/main.ec6a092f.chunk.js","sourcesContent":["// extracted by mini-css-extract-plugin\nmodule.exports = {\"focus-ring\":\"FakeDayCell_focus-ring__2U5D6\",\"day-cell-container\":\"FakeDayCell_day-cell-container__sg968\",\"empty-cell\":\"FakeDayCell_empty-cell__3vrV7\",\"day-cell-upper-container\":\"FakeDayCell_day-cell-upper-container__3rfMh\",\"btn\":\"FakeDayCell_btn__4AO6t\",\"checkbox-container\":\"FakeDayCell_checkbox-container__2hEvL\",\"bottom-line\":\"FakeDayCell_bottom-line__2iq6H\",\"popover\":\"FakeDayCell_popover__2SNdU\"};","import React from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport { Loader } from 'ypf-pas-general-ui-components';\r\n\r\nimport './Loading.scss';\r\n\r\nconst Loading = ({ show }) => (\r\n
\r\n \r\n
\r\n);\r\n\r\nexport default Loading;\r\n\r\nLoading.propTypes = {\r\n show: PropTypes.bool,\r\n};\r\n\r\nLoading.defaultProps = {\r\n show: false,\r\n};\r\n","import React, { useState, createContext } from 'react';\r\nimport PropTypes from 'prop-types';\r\n\r\nimport Loading from '../components/Loading/Loading';\r\n\r\nexport const LoadingContext = createContext();\r\n\r\nconst LoadingProvider = ({ children }) => {\r\n const [loading, setLoading] = useState(false);\r\n\r\n return (\r\n \r\n {children}\r\n {loading && }\r\n \r\n );\r\n};\r\n\r\nexport default LoadingProvider;\r\n\r\nLoadingProvider.propTypes = {\r\n children: PropTypes.element.isRequired\r\n};\r\n\r\nLoadingProvider.defaultProps = {};\r\n","/* eslint-disable no-useless-escape */\r\nexport const formatsEnum = {\r\n FORMAT_DATE_1: 'DD-MM-YYYY',\r\n FORMAT_DATE_2: 'YYYY-MM-DD',\r\n FORMAT_DATE_3: 'YYYY/MM/DD',\r\n FORMAT_DATE_4: 'DD/MM/YYYY',\r\n};\r\n\r\nexport const formatRegex = {\r\n [formatsEnum.FORMAT_DATE_2]:\r\n /^\\d{4}\\-(0[1-9]|1[012])\\-(0[1-9]|[12][0-9]|3[01])$/,\r\n [formatsEnum.FORMAT_DATE_4]:\r\n /^(0?[1-9]|[12][0-9]|3[01])[\\/](0?[1-9]|1[012])[\\/\\-]\\d{4}$/,\r\n};\r\n\r\nexport const notification = {\r\n ERROR: 'No pudimos procesar la solicitud, intente nuevamente.',\r\n SUCCESS: 'Operación realizada con éxito',\r\n};\r\n\r\nexport const constantsSession = {\r\n ACCESS_TOKEN: 'access_token',\r\n ACCESS_TOKEN_DATE: 'access_token_date',\r\n ACCESS_TOKEN_EXPIRE_IN: 'access_token_expires_in',\r\n REFRESH_TOKEN: 'refresh_token',\r\n ROLES_ME: 'roles_me',\r\n ROLES_PERMISSIONS: 'roles_permissions',\r\n USER_INFO: 'user_info',\r\n PROVIDER_NAME: 'ispr'\r\n};\r\n","export const API_REDIRECT = process.env.REACT_APP_REDIRECT_URI;\r\n\r\nconst isExternal = window.location.origin !== API_REDIRECT.trim();\r\n\r\nexport const API_CONTRACTS_ADMIN = process.env.REACT_APP_API_CONTRACTS_ADMIN;\r\nexport const API_YCLICK_MASTER = isExternal\r\n ? process.env.REACT_APP_API_YCLICK_MASTER_EXTERNAL\r\n : process.env.REACT_APP_API_YCLICK_MASTER;\r\nexport const API_CERTIFICATIONS_MASTER =\r\n process.env.REACT_APP_API_CERTIFICATIONS_MASTER;\r\nexport const AZURE_CLIENT_ID = process.env.REACT_APP_AZURE_CLIENT_ID;\r\nexport const AZURE_CLIENT_SECRET = process.env.REACT_APP_AZURE_CLIENT_SECRET;\r\nexport const API_AUTH = process.env.REACT_APP_AUTH_URL;\r\nexport const API_TOKEN_URL = process.env.REACT_APP_TOKEN_URL;\r\nexport const API_USER_INFO = process.env.REACT_APP_USER_INFO;\r\nexport const URL_SERVICIOS = isExternal\r\n ? process.env.REACT_APP_URL_SERVICIOS_EXTERNAL\r\n : process.env.REACT_APP_URL_SERVICIOS;\r\nexport const URL_SERVICIOS_OYM = isExternal\r\n ? process.env.REACT_APP_URL_SERVICIOS_OYM_EXTERNAL\r\n : process.env.REACT_APP_URL_SERVICIOS_OYM;\r\nexport const URL_CERTIFICACIONES = isExternal\r\n ? process.env.REACT_APP_URL_CERTIFICACIONES_EXTERNAL\r\n : process.env.REACT_APP_URL_CERTIFICACIONES;\r\nexport const URL_CERTIFICACIONES_OYM = isExternal\r\n ? process.env.REACT_APP_URL_CERTIFICACIONES_OYM_EXTERNAL\r\n : process.env.REACT_APP_URL_CERTIFICACIONES_OYM;\r\nexport const CRYPTOJS_SECRETKEY = process.env.REACT_APP_CJSSK;\r\nexport const URL_ADMINISTRACION = isExternal \r\n? process.env.REACT_APP_URL_ADMINISTRACION_EXTERNAL\r\n: process.env.REACT_APP_URL_ADMINISTRACION;\r\n// Esto se borra cuando se llegue a produccion\r\nexport const URL_CERTIFICACIONES_INT =\r\n process.env.REACT_APP_URL_CERTIFICACIONES_INT;\r\nexport const URL_SERVICIOS_INT = process.env.REACT_APP_URL_SERVICIOS_INT;\r\nexport const API_ADMINISTRATION = isExternal\r\n ? process.env.REACT_APP_API_ADMINISTRATION_EXTERNAL.trim()\r\n : process.env.REACT_APP_API_ADMINISTRATION.trim();\r\nexport const CREDENTIALS_KEY = process.env.REACT_APP_CREDENTIALS_KEY;\r\nexport const API_SERVICIOS = isExternal\r\n ? process.env.REACT_APP_API_SERVICES_EXTERNAL\r\n : process.env.REACT_APP_API_SERVICES;","import { constantsSession } from \"../constants/constants\";\r\nimport CryptoJS from \"crypto-js\";\r\nimport { CRYPTOJS_SECRETKEY, CREDENTIALS_KEY } from \"../constants/host\";\r\n\r\n// Los unicos valores que serán encriptados pertenecen a las keys contenidas en este array.\r\nconst constantsToEncrypt = [\r\n constantsSession.ACCESS_TOKEN,\r\n constantsSession.ACCESS_TOKEN_DATE,\r\n constantsSession.ACCESS_TOKEN_EXPIRE_IN,\r\n constantsSession.REFRESH_TOKEN,\r\n constantsSession.USER_INFO,\r\n constantsSession.ROLES_ME,\r\n constantsSession.ROLES_PERMISSIONS,\r\n constantsSession.PROVIDER_NAME\r\n];\r\n\r\n// Función que devuelve encriptado el valor recibido\r\nexport const toEncrypt = (value, name, isObject) => {\r\n // Validamos que el name no sea una excepcion en \"encryptionExceptions\"\r\n const hasToBeEncrypted = constantsToEncrypt.some(\r\n (constant) => constant === name\r\n );\r\n\r\n // Si no es una excepcion\r\n if (hasToBeEncrypted) {\r\n // Si es un objeto, lo parseamos a JSON\r\n const plainValue = isObject ? JSON.stringify(value) : String(value);\r\n\r\n // Encriptamos y devolvemos el valor encriptado\r\n return CryptoJS.AES.encrypt(\r\n plainValue,\r\n CRYPTOJS_SECRETKEY\r\n ).toString();;\r\n }\r\n\r\n // Si no requiere encriptado, devolvemos el valor que recibimos\r\n return isObject ? JSON.stringify(value) : value;\r\n};\r\n\r\n// Función que devuelve desencriptado el valor recibido\r\nexport const toDecrypt = (value, name, isObject) => {\r\n // Validamos si name es una de las constantes que hay que desencriptar\r\n const hasToBeDecrypted = constantsToEncrypt.some(\r\n (constant) => constant === name\r\n );\r\n\r\n // Si requiere desencriptado\r\n if (hasToBeDecrypted) {\r\n // Desencriptamos y devolvemos el valor desencriptado\r\n const bytes = CryptoJS.AES.decrypt(value, CRYPTOJS_SECRETKEY);\r\n const plainValue = bytes.toString(CryptoJS.enc.Utf8);\r\n return isObject ? JSON.parse(plainValue) : plainValue;;\r\n }\r\n\r\n // Si no requiere desencriptado, devolvemos el valor que recibimos\r\n return isObject ? JSON.parse(value) : value;\r\n};\r\n\r\n/**\r\n * Este método se utiliza para encriptar las credenciales del usuario\r\n * al momento del login.\r\n * \r\n * @param {String} text Text to encrypt\r\n * @returns {String} Encrypted text\r\n */\r\nexport const encryptCredentials = (text) => {\r\n const key = CryptoJS.enc.Utf8.parse(CREDENTIALS_KEY);\r\n const iv = CryptoJS.enc.Utf8.parse(CREDENTIALS_KEY);\r\n\r\n const encryptedpassword = CryptoJS.AES.encrypt(CryptoJS.enc.Utf8.parse(text), key, {\r\n keySize: 128 / 8,\r\n iv,\r\n mode: CryptoJS.mode.CBC,\r\n padding: CryptoJS.pad.Pkcs7\r\n });\r\n\r\n return encryptedpassword.toString();\r\n};","import { toEncrypt, toDecrypt } from \"./encryptionUtils\";\r\nimport { constantsSession } from \"../constants/constants\";\r\n\r\nexport const updateStorage = (\r\n name = \"\",\r\n value = null,\r\n convert = true,\r\n isLocal = false\r\n) => {\r\n\r\n const encryptedValue = toEncrypt(value, name, convert);\r\n\r\n if (isLocal) {\r\n localStorage.setItem(name, encryptedValue);\r\n } else {\r\n sessionStorage.setItem(name, encryptedValue);\r\n }\r\n};\r\n\r\nexport const getItemStorage = (name, parser = true, isLocal = false) => {\r\n const value = isLocal\r\n ? localStorage.getItem(name)\r\n : sessionStorage.getItem(name);\r\n if (value) {\r\n\r\n return toDecrypt(value, name, parser);;\r\n }\r\n\r\n return null;\r\n};\r\n\r\nexport const clearStorage = () => {\r\n localStorage.clear();\r\n sessionStorage.clear();\r\n};\r\n\r\nexport const checkRoles = () => {\r\n return getItemStorage(constantsSession.ROLES_ME, true);;\r\n};\r\n\r\nexport const checkRol = (rolParam) => {\r\n const myRols = checkRoles();\r\n return Boolean(myRols?.find((rol) => rol.nombre.includes(rolParam)));\r\n};\r\n\r\n","import { toast } from 'react-toastify';\r\nimport { notification } from '../constants/constants';\r\n\r\nconst params = {\r\n position: 'top-right',\r\n autoClose: 3000,\r\n hideProgressBar: true,\r\n closeOnClick: true,\r\n pauseOnHover: false,\r\n draggable: true,\r\n progress: undefined,\r\n icon: false\r\n};\r\n\r\nexport function showSuccess(message = notification.SUCCESS) {\r\n toast.success(message, params);\r\n}\r\n\r\nexport function showError(error) {\r\n if (error && (error.statusCode === 401 || error.statusCode === 403)) {\r\n return;\r\n }\r\n const messageAfter = (error && error.message)\r\n ? error.message\r\n : notification.ERROR;\r\n toast.error(messageAfter, params);\r\n}\r\n\r\nexport function showWarning(message) {\r\n toast.warning(message, params);\r\n}\r\n","// External deps\r\nimport { useContext } from 'react';\r\n\r\n// Internal deps\r\nimport { LoadingContext } from '../context/LoadingProvider';\r\n\r\nexport default function useLoading() {\r\n return useContext(LoadingContext);\r\n}\r\n","// Internal deps\r\nimport { constantsSession } from \"../constants/constants\";\r\nimport { getItemStorage, clearStorage } from \"../utils/utils\";\r\n\r\nlet appContext;\r\n\r\nexport const injectContext = (context) => {\r\n appContext = context;\r\n};\r\n\r\nconst expiredLogout = () => {\r\n if (appContext) appContext.onLogOut();\r\n clearStorage();\r\n};\r\n\r\nconst requestHeaderConfig = async (config) => {\r\n const token_date = getItemStorage(constantsSession.ACCESS_TOKEN_DATE, false);\r\n const token_expires_in = getItemStorage(\r\n constantsSession.ACCESS_TOKEN_EXPIRE_IN,\r\n false\r\n );\r\n const token = getItemStorage(constantsSession.ACCESS_TOKEN, false);\r\n\r\n // Valida la fecha/hora límite a la cuál el token es válido\r\n const token_date_valid = Number(token_date) + Number(token_expires_in * 1000);\r\n\r\n const actual_date = new Date().getTime();\r\n\r\n // Valida que la fecha/hora actual sea menor a la fecha expiración del token\r\n const isValidToken = actual_date < token_date_valid;\r\n\r\n // Armbo config. header\r\n const newConfig = {\r\n ...config,\r\n };\r\n if (token) {\r\n newConfig.headers.Authorization = `Bearer ${token}`;\r\n newConfig.headers[\"Content-Type\"] = \"application/json\";\r\n }\r\n\r\n // Si el token ya expiró (la fecha/hora actual es posterior a la fecha de expiración)\r\n // Llamo al servicio para actualizar token\r\n if (!isValidToken) {\r\n expiredLogout();\r\n }\r\n\r\n return newConfig;\r\n};\r\n\r\nconst apiInterceptors = (instance, hasToken = false) => {\r\n if (hasToken) {\r\n instance.interceptors.request.use(\r\n (config) => requestHeaderConfig(config),\r\n (error) => Promise.reject(error)\r\n );\r\n } else {\r\n instance.interceptors.request.use(\r\n (config) => config,\r\n (error) => Promise.reject(error)\r\n );\r\n }\r\n instance.interceptors.response.use(\r\n (response) => Promise.resolve(response),\r\n (error) => {\r\n const errorAfter = error.response;\r\n\r\n if (error.response.status === 500) {\r\n errorAfter.message =\r\n \"No pudimos procesar la solicitud, intente nuevamente.\";\r\n } else {\r\n const message =\r\n (error.response.data && error.response.data.message) ||\r\n (error.response.data && error.response.data.errorMessage) ||\r\n \"No pudimos procesar la solicitud, intente nuevamente.\";\r\n errorAfter.message = message;\r\n }\r\n return Promise.reject(errorAfter);\r\n }\r\n );\r\n};\r\n\r\nexport default apiInterceptors;\r\n","import axios from \"axios\";\r\nimport { API_YCLICK_MASTER, API_ADMINISTRATION, API_SERVICIOS } from \"../constants/host\";\r\nimport apiInterceptors from \"./apiInterceptors\";\r\n\r\n// Maestro Global (se utiliza en Servicios/Materiales)\r\nconst apiYClickMasterInstance = axios.create({\r\n baseURL: API_YCLICK_MASTER,\r\n});\r\n\r\napiInterceptors(apiYClickMasterInstance, true);\r\n\r\n// Solo para el Login (Se utiliza la Api de maestros)\r\n// Para NO mandar token\r\nconst apiYClickLoginInstance = axios.create({\r\n baseURL: API_YCLICK_MASTER,\r\n});\r\n\r\napiInterceptors(apiYClickLoginInstance, false);\r\n\r\n// Administracion\r\nconst apiYClickAdministrationInstance = axios.create({\r\n baseURL: API_ADMINISTRATION,\r\n});\r\n\r\napiInterceptors(apiYClickAdministrationInstance, true);\r\n\r\n//Servicios\r\n\r\nconst apiYClickServiciosInstance = axios.create({\r\n baseURL: API_SERVICIOS,\r\n});\r\napiInterceptors(apiYClickServiciosInstance, true);\r\n\r\nexport {\r\n apiYClickMasterInstance as apiYclickMaster,\r\n apiYClickLoginInstance as apiYClickLogin,\r\n apiYClickAdministrationInstance as apiYClickAdministration,\r\n apiYClickServiciosInstance as apiYClickServicios\r\n};\r\n","// External deps\r\nimport axios from 'axios';\r\n\r\n// Internal deps\r\nimport {\r\n API_TOKEN_URL,\r\n API_USER_INFO,\r\n AZURE_CLIENT_ID,\r\n AZURE_CLIENT_SECRET,\r\n API_REDIRECT,\r\n} from '../constants/host';\r\nimport { apiYClickLogin } from './api';\r\nimport { encryptCredentials } from '../utils/encryptionUtils';\r\n\r\nexport const getAccessTokenService = (code, refreshToken = false) => {\r\n const params = {\r\n code,\r\n refresh_token: refreshToken ? code : undefined,\r\n grant_type: refreshToken ? 'refresh_token' : 'authorization_code',\r\n client_id: AZURE_CLIENT_ID,\r\n client_secret: AZURE_CLIENT_SECRET,\r\n redirect_uri: API_REDIRECT,\r\n };\r\n\r\n const newParams = new URLSearchParams(params);\r\n\r\n return axios.post(API_TOKEN_URL, newParams, {\r\n headers: {\r\n 'Content-Type': 'application/x-www-form-urlencoded',\r\n },\r\n });\r\n};\r\n\r\nexport const getUserInfoService = (token) =>\r\n axios.post(API_USER_INFO, null, {\r\n headers: {\r\n Authorization: `Bearer ${token}`,\r\n },\r\n });\r\n\r\n// Se utiliza desde la api de maestros\r\nexport const loginService = (params) => {\r\n const { userName, password } = params;\r\n const encryptedData ={\r\n userName: encryptCredentials(userName),\r\n password: encryptCredentials(password)\r\n }\r\n return apiYClickLogin.post(`/v1/login`, encryptedData)\r\n};","import {\r\n getAccessTokenService,\r\n getUserInfoService,\r\n loginService,\r\n} from \"../services/loginService\";\r\n\r\nexport const getAccessToken = (code, refreshToken) =>\r\n new Promise((resolve, reject) => {\r\n getAccessTokenService(code, refreshToken)\r\n .then((res) => resolve(res.data))\r\n .catch((err) => reject(err));\r\n });\r\n\r\nexport const getUserInfo = (token) =>\r\n new Promise((resolve, reject) => {\r\n getUserInfoService(token)\r\n .then((res) => resolve(res.data))\r\n .catch((err) => reject(err));\r\n });\r\n\r\nexport const login = ({ user, password }) =>\r\n new Promise((resolve, reject) => {\r\n loginService({\r\n userName: user,\r\n password,\r\n })\r\n .then((res) => resolve(res.data))\r\n .catch((err) => reject(err));\r\n });\r\n","import {\r\n getUsersService,\r\n getRoleUserCERTService,\r\n getRolePermissionsCERTService,\r\n getRoleUserSERVService,\r\n getRolePermissionsSERVService,\r\n getRoleUserADMService,\r\n getRolePermissionsADMService,\r\n getUserProvider\r\n} from \"../services/yclickMasterService\";\r\n\r\n// ----- Services ----- //\r\nexport const getUsers = (value) =>\r\n new Promise((resolve, reject) => {\r\n getUsersService(value)\r\n .then((res) => resolve(res.data))\r\n .catch((err) => reject(err));\r\n });\r\n\r\nexport const getRoleUser = () =>\r\n new Promise((resolve, reject) => {\r\n Promise.all([getRoleUserCERTService(), getRoleUserSERVService(), getRoleUserADMService()])\r\n .then(([resCert, resServ, resAdm]) => {\r\n // esta lógica de filtrado es para eliminar roles viejos\r\n // debe adaptarse antes de un deploy\r\n const resCertFiltered = resCert.data.filter((rol) =>\r\n rol.nombre.includes(\"Yclick!\")\r\n );\r\n const resServFiltered = resServ.data.filter((rol) =>\r\n rol.nombre.includes(\"Yclick!\")\r\n );\r\n const resAdmFiltered = resAdm.data.filter((rol) =>\r\n rol.nombre.includes(\"Yclick!\")\r\n );\r\n\r\n const rolesJoined = [...resCertFiltered, ...resServFiltered, ...resAdmFiltered];\r\n const rolesMap = rolesJoined.map((item) => [item.id, item]);\r\n const rolesMapArr = new Map(rolesMap);\r\n\r\n resolve([...rolesMapArr.values()]);\r\n })\r\n .catch((err) => reject(err));\r\n });\r\n\r\nexport const getRolePermissions = () =>\r\n new Promise((resolve, reject) => {\r\n Promise.all([\r\n getRolePermissionsCERTService(),\r\n getRolePermissionsSERVService(),\r\n getRolePermissionsADMService(),\r\n ])\r\n .then(([resCert, resServ, resAdm]) => resolve([...resCert.data, ...resServ.data, ...resAdm.data]))\r\n .catch((err) => reject(err));\r\n });\r\n\r\nexport const getCurrentProvider = async() =>{\r\n const currentProviderResponse = await getUserProvider();\r\n return currentProviderResponse.data.nombre;\r\n}","import { apiYclickMaster } from './api';\r\n\r\nexport const getUsersService = (value) =>\r\n apiYclickMaster.get(`/v1/Usuarios/all?fullName=${value}`);\r\n\r\nexport const getRoleUserCERTService = () =>\r\n apiYclickMaster.get('/v1/Roles/me?modulo=CERT');\r\n\r\nexport const getRolePermissionsCERTService = () =>\r\n apiYclickMaster.get('/v1/Roles/permissions?modulo=CERT');\r\n\r\nexport const getRoleUserSERVService = () =>\r\n apiYclickMaster.get('/v1/Roles/me?modulo=SERV');\r\n\r\nexport const getRolePermissionsSERVService = () =>\r\n apiYclickMaster.get('/v1/Roles/permissions?modulo=SERV');\r\n\r\n export const getRoleUserADMService = () =>\r\n apiYclickMaster.get('/v1/Roles/me?modulo=ADM');\r\n\r\nexport const getRolePermissionsADMService = () =>\r\n apiYclickMaster.get('/v1/Roles/permissions?modulo=ADM');\r\n \r\nexport const getUserProvider = () => apiYclickMaster.get('/v1/Usuarios/proveedor/me');\r\n","// External deps\r\nimport React, { useState, createContext, useEffect, useMemo } from \"react\";\r\nimport PropTypes from \"prop-types\";\r\nimport { useHistory, useLocation } from \"react-router-dom\";\r\nimport jwt from \"jsonwebtoken\";\r\n\r\n// Internal deps\r\nimport { updateStorage, getItemStorage, clearStorage } from \"../utils/utils\";\r\nimport { showError } from \"../utils/toastUtils\";\r\nimport { constantsSession } from \"../constants/constants\";\r\n\r\nimport useLoading from \"../hooks/useLoading\";\r\n\r\nimport { getUserInfo } from \"../adapters/loginAdapter\";\r\nimport {\r\n getRoleUser,\r\n getRolePermissions,\r\n getCurrentProvider,\r\n} from \"../adapters/yclickMasterAdapter\";\r\n\r\nimport { injectContext } from \"../services/apiInterceptors\";\r\nimport {\r\n URL_ADMINISTRACION,\r\n URL_CERTIFICACIONES,\r\n URL_SERVICIOS,\r\n} from \"../constants/host\";\r\n\r\n/**\r\n * @typedef AppsURL\r\n * @property {string} administracion\r\n * @property {string} certificaciones\r\n * @property {string} servicios\r\n */\r\n\r\nexport const AppContext = createContext();\r\n\r\nconst AppProvider = ({ children }) => {\r\n const accessToken = getItemStorage(constantsSession.ACCESS_TOKEN, false);\r\n const [userInfo, setUserInfo] = useState(\r\n getItemStorage(constantsSession.USER_INFO) || null\r\n );\r\n const [baseURL, setBaseURL] = useState(\"\");\r\n const [auth, setAuth] = useState(!!accessToken);\r\n const [isReady, setIsReady] = useState(false);\r\n const [provName, setProvName] = useState(null);\r\n const [isNRURLReady, setIsNRURLReady] = useState(false);\r\n\r\n const { setLoading } = useLoading();\r\n const history = useHistory();\r\n const { search } = useLocation();\r\n const urlSearch = new URLSearchParams(search);\r\n\r\n const paramIsNR = urlSearch.get(\"nr_isnr\") || \"0\";\r\n\r\n /** @type {AppsURL} */\r\n const appsURL = useMemo(\r\n () => ({\r\n administracion: URL_ADMINISTRACION,\r\n certificaciones: URL_CERTIFICACIONES,\r\n servicios: URL_SERVICIOS,\r\n }),\r\n // eslint-disable-next-line react-hooks/exhaustive-deps\r\n []\r\n );\r\n\r\n if (paramIsNR === \"1\" && !isNRURLReady) {\r\n const queryNRisNotificationReport = paramIsNR;\r\n const queryNRContractNumber = decodeURIComponent(urlSearch.get(\"nr_cn\"));\r\n const queryNRWell = decodeURIComponent(urlSearch.get(\"nr_wl\"));\r\n const queryNRDateFrom = decodeURIComponent(urlSearch.get(\"nr_df\"));\r\n const queryNRDateTo = decodeURIComponent(urlSearch.get(\"nr_dt\"));\r\n\r\n updateStorage(\"hmnr_isnr\", queryNRisNotificationReport);\r\n updateStorage(\"hmnr_cn\", queryNRContractNumber);\r\n updateStorage(\"hmnr_wl\", queryNRWell);\r\n updateStorage(\"hmnr_df\", queryNRDateFrom);\r\n updateStorage(\"hmnr_dt\", queryNRDateTo);\r\n\r\n setIsNRURLReady(true);\r\n\r\n history.replace({\r\n search: urlSearch.toString(),\r\n });\r\n }\r\n\r\n const getProvider = async () => {\r\n let providerName = \"\";\r\n\r\n try {\r\n const currentProviderResponse = await getCurrentProvider();\r\n providerName = encodeURI(currentProviderResponse);\r\n } catch (err) {\r\n showError(err);\r\n providerName = \"errorProvider\";\r\n } finally {\r\n setProvName(providerName);\r\n }\r\n };\r\n\r\n const notProvider = async () => {\r\n setProvName(\"notProvider\");\r\n };\r\n\r\n const handleRoleUser = (resRoleUser)=>{\r\n if (!resRoleUser?.length) {\r\n setBaseURL('/notFound');\r\n return;\r\n }\r\n const isAdmin = resRoleUser.some((rol) => rol.nombre.toLowerCase().includes(\"admin\"));\r\n const isInspector = resRoleUser.some((rol) => rol.nombre.toLowerCase().includes(\"inspector\"));\r\n const isProvider = resRoleUser.some((rol) => rol.nombre.toLowerCase().includes(\"proveedor\"));\r\n // en toeria no deberían repetirse los roles\r\n //entre admin e inspector\r\n if (isAdmin) {\r\n setBaseURL(\"/contratos\");\r\n } else if (isInspector) {\r\n setBaseURL(\"/inspeccion\");\r\n } else {\r\n setBaseURL(\"/notFound\");\r\n }\r\n const resRoleUserNoId = resRoleUser.map((role) => ({ nombre: role.nombre }));\r\n updateStorage(constantsSession.ROLES_ME, resRoleUserNoId, true);\r\n // Obtener proveedor especifico para saber que mostrarle\r\n if (isProvider) {\r\n getProvider();\r\n } else {\r\n notProvider();\r\n }\r\n };\r\n const handleRolePermissions = (resRolePermissions)=>{\r\n if (resRolePermissions) {\r\n updateStorage(constantsSession.ROLES_PERMISSIONS,resRolePermissions,true);\r\n }\r\n };\r\n const getRolesAndPermissions = () => {\r\n setLoading(true);\r\n Promise.all([getRoleUser(), getRolePermissions()])\r\n .then(([resRoleUser, resRolePermissions]) => {\r\n handleRoleUser(resRoleUser);\r\n handleRolePermissions(resRolePermissions);\r\n setAuth(true);\r\n setIsReady(true);\r\n setLoading(false)\r\n }).catch((err) => {\r\n setLoading(false);\r\n showError(err);\r\n });\r\n };\r\n \r\n const handleTokenJWT = (tokenJWT) => {\r\n if (tokenJWT?.token_details) {\r\n const { uid, first_name, last_name, mail } = tokenJWT.token_details.Profile;\r\n const newUserInfo = formatUserInfo(uid, first_name, last_name, mail, \"-\");\r\n updateStorage(constantsSession.USER_INFO, newUserInfo);\r\n setUserInfo(newUserInfo);\r\n } else {\r\n const defaultUserInfo = getDefaultUserInfo();\r\n updateStorage(constantsSession.USER_INFO, defaultUserInfo);\r\n setUserInfo(defaultUserInfo);\r\n }\r\n getRolesAndPermissions();\r\n };\r\n \r\n const handleUserInfoResponse = (res) => {\r\n const { uid, first_name, last_name, tipo_empleado, mail } = res;\r\n const newUserInfo = formatUserInfo(uid, first_name, last_name, mail, tipo_empleado);\r\n updateStorage(constantsSession.USER_INFO, newUserInfo);\r\n setUserInfo(newUserInfo);\r\n getRolesAndPermissions();\r\n };\r\n \r\n const handleUserInfoError = (err) => {\r\n const defaultUserInfo = getDefaultUserInfo();\r\n updateStorage(constantsSession.USER_INFO, defaultUserInfo);\r\n setUserInfo(defaultUserInfo);\r\n getRolesAndPermissions();\r\n setLoading(false);\r\n showError(err);\r\n };\r\n \r\n const formatUserInfo = (uid, first_name, last_name, mail, tipo_empleado) => {\r\n const firstName = first_name ? first_name.trim() : \"Usuario\";\r\n const lastName = last_name ? last_name.trim() : \"Usuario\";\r\n return {\r\n uid,\r\n first_name,\r\n last_name,\r\n tipo_empleado,\r\n mail,\r\n id: uid,\r\n name: `${firstName} ${lastName}`,\r\n type: tipo_empleado,\r\n };\r\n };\r\n \r\n const getDefaultUserInfo = () => ({\r\n uid: \"-\",\r\n first_name: \"-\",\r\n last_name: \"-\",\r\n tipo_empleado: \"-\",\r\n mail: \"-\",\r\n id: \"-\",\r\n name: \"Usuario Usuario\",\r\n type: \"-\",\r\n });\r\n \r\n const getInfoUser = async (token) => {\r\n setLoading(true);\r\n \r\n const tokenJWT = jwt.decode(token);\r\n if (tokenJWT) {\r\n handleTokenJWT(tokenJWT);\r\n } else {\r\n try {\r\n const res = await getUserInfo(token);\r\n handleUserInfoResponse(res);\r\n } catch (err) {\r\n handleUserInfoError(err);\r\n }\r\n }\r\n };\r\n \r\n \r\n // NOSONAR: Old function getUserInfo, is refactorized to sonarqube\r\n // const getInfoUser = (token) => {\r\n // setLoading(true);\r\n // // Abrir el JWT no es la opción definitiva, si no más bien\r\n // // provisoria dado que tenemos problemas con el servicio userInfo\r\n // // TO DO: ver por qué falla el servicio (GF)\r\n // const tokenJWT = jwt.decode(token);\r\n // if (tokenJWT) {\r\n // // Valido con varios If en el caso que en un futuro\r\n // // cambie la estructura de la data del token\r\n // if (!!tokenJWT && !!tokenJWT.token_details) {\r\n // const {\r\n // token_details: {\r\n // Profile: { uid, first_name, last_name, mail },\r\n // },\r\n // } = tokenJWT;\r\n // const firstName = first_name ? first_name.trim() : \"Usuario\";\r\n // const lastName = last_name ? last_name.trim() : \"Usuario\";\r\n // updateStorage(constantsSession.USER_INFO, {\r\n // uid,\r\n // first_name,\r\n // last_name,\r\n // tipo_empleado: \"-\",\r\n // mail,\r\n // id: uid,\r\n // name: `${firstName} ${lastName}`,\r\n // type: \"-\",\r\n // });\r\n\r\n // setUserInfo({\r\n // id: uid || \"\",\r\n // name: `${firstName} ${lastName}`,\r\n // type: \"-\",\r\n // mail,\r\n // });\r\n // } else {\r\n // updateStorage(constantsSession.USER_INFO, {\r\n // uid: \"-\",\r\n // first_name: \"-\",\r\n // last_name: \"-\",\r\n // tipo_empleado: \"-\",\r\n // mail: \"-\",\r\n // id: \"-\",\r\n // name: \"Usuario Usuario\",\r\n // type: \"-\",\r\n // });\r\n // setUserInfo({\r\n // id: \"-\",\r\n // name: \"Usuario Usuario\",\r\n // type: \"-\",\r\n // mail: \"-\",\r\n // });\r\n // }\r\n // getRolesAndPermissions();\r\n // } else {\r\n // getUserInfo(token)\r\n // .then((res) => {\r\n // const { uid, first_name, last_name, tipo_empleado, mail } = res;\r\n\r\n // const firstName = first_name ? first_name.trim() : \"Usuario\";\r\n // const lastName = last_name ? last_name.trim() : \"Usuario\";\r\n // updateStorage(constantsSession.USER_INFO, {\r\n // uid,\r\n // first_name,\r\n // last_name,\r\n // tipo_empleado,\r\n // mail,\r\n // id: uid,\r\n // name: `${firstName} ${lastName}`,\r\n // type: tipo_empleado,\r\n // });\r\n // setUserInfo({\r\n // id: uid || \"\",\r\n // name: `${firstName} ${lastName}` || \"Usuario Usuario\",\r\n // type: tipo_empleado || \"\",\r\n // mail,\r\n // });\r\n // getRolesAndPermissions();\r\n // })\r\n // .catch((err) => {\r\n // updateStorage(constantsSession.USER_INFO, {\r\n // uid: \"-\",\r\n // first_name: \"-\",\r\n // last_name: \"-\",\r\n // tipo_empleado: \"-\",\r\n // mail: \"-\",\r\n // id: \"-\",\r\n // name: \"Usuario Usuario\",\r\n // type: \"-\",\r\n // });\r\n // setUserInfo({\r\n // id: \"-\",\r\n // name: \"Usuario Usuario\",\r\n // type: \"-\",\r\n // mail: \"-\",\r\n // });\r\n // getRolesAndPermissions();\r\n // setLoading(false);\r\n // showError(err);\r\n // });\r\n // }\r\n // };\r\n\r\n const authUser = (data, date) => {\r\n setLoading(true);\r\n const { access_token, refresh_token, expires_in } = data;\r\n updateStorage(constantsSession.ACCESS_TOKEN, access_token, false);\r\n updateStorage(constantsSession.ACCESS_TOKEN_DATE, date, false);\r\n updateStorage(constantsSession.ACCESS_TOKEN_EXPIRE_IN, expires_in, false);\r\n updateStorage(constantsSession.REFRESH_TOKEN, refresh_token, false);\r\n // Información del usuario\r\n getInfoUser(access_token);\r\n };\r\n\r\n const onLogOut = () => {\r\n clearStorage();\r\n setUserInfo(null);\r\n setAuth(false);\r\n history.push(\"/login\");\r\n };\r\n\r\n useEffect(() => {\r\n const token = getItemStorage(constantsSession.ACCESS_TOKEN, false);\r\n if (token) {\r\n setAuth(true);\r\n }\r\n }, []);\r\n\r\n useEffect(() => {\r\n injectContext({\r\n onLogOut,\r\n });\r\n\r\n urlSearch.delete(\"nr_isnr\");\r\n urlSearch.delete(\"nr_cn\");\r\n urlSearch.delete(\"nr_wl\");\r\n urlSearch.delete(\"nr_df\");\r\n urlSearch.delete(\"nr_dt\");\r\n urlSearch.delete(\"isOyM\");\r\n history.replace({\r\n search: urlSearch.toString(),\r\n });\r\n // eslint-disable-next-line react-hooks/exhaustive-deps\r\n }, []);\r\n\r\n return (\r\n \r\n {children}\r\n \r\n );\r\n};\r\n\r\nexport default AppProvider;\r\n\r\nAppProvider.propTypes = {\r\n children: PropTypes.element.isRequired,\r\n};\r\n\r\nAppProvider.defaultProps = {};\r\n","import { apiYClickAdministration } from \"./api\";\r\n\r\n// CHATBOT\r\nexport const postStartChatbotRound = (body) =>\r\n apiYClickAdministration.post(\"/v2/chats/new\", body);\r\nexport const postChatbotQuestion = (body, id) =>\r\n apiYClickAdministration.post(`/v2/chats/${id}/rounds/new`, body);\r\n\r\n// TRAZABILITY REPORT\r\nexport const getFirstDateRequest = () => \r\n apiYClickAdministration.get(\"/api/v1/userRequests/date\");\r\nexport const postUserTrazabilityReport = (body) => {\r\n return apiYClickAdministration.post(\"/api/v1/userRequests/excelTraceabilityDownload\",body,\r\n {\r\n headers: {\r\n Accept: '*/*'\r\n },\r\n responseType: 'blob'\r\n }\r\n )\r\n};\r\n\r\n// USER PROFILE\r\nexport const getFirstLogin = () => apiYClickAdministration.get('/api/v1/userRequests/firstLogin');\r\nexport const getInfoProfile = () => apiYClickAdministration.get('/api/v1/userRequests/profile');","// Internal deps\r\n import { \r\n getFirstDateRequest,\r\n postUserTrazabilityReport,\r\n getFirstLogin,\r\n getInfoProfile\r\n} from \"../services/administrationService\";\r\n\r\n\r\n // TRAZABILITY REPORT\r\n export const getFirstDateRequestAdapter = () => new Promise((resolve, reject) => {\r\n getFirstDateRequest()\r\n .then((res) => resolve(res.data))\r\n .catch((err) => reject(err));\r\n });\r\n \r\n export const postUserTrazabilityReportAdapter = (data, nameFile) => new Promise((resolve, reject) => {\r\n const newDateTo = new Date(data.dateTo);\r\n const newDateFrom = new Date(data.dateFrom);\r\n \r\n const body = {\r\n dateFrom: newDateFrom.toISOString(),\r\n dateTo: newDateTo.toISOString()\r\n };\r\n postUserTrazabilityReport(body).then((res) => {\r\n const url = window.URL.createObjectURL(new Blob([res.data]));\r\n const link = document.createElement('a');\r\n link.href = url;\r\n link.setAttribute('download', `${nameFile}.xlsx`);\r\n document.body.appendChild(link);\r\n link.click();\r\n resolve(res.data);\r\n })\r\n .catch((err) => reject(err));\r\n });\r\n\r\n// USER PROFILE\r\nexport const getFirstLoginAdapter = () => new Promise((resolve, reject) => {\r\n getFirstLogin()\r\n .then((res) => {\r\n resolve(res.data);\r\n })\r\n .catch((err) => reject(err));\r\n});\r\n\r\nexport const getInfoProfileAdapter = () => new Promise((resolve, reject) => {\r\n getInfoProfile()\r\n .then((res) => {\r\n resolve({\r\n requestId: res.data.id,\r\n process: res.data.process,\r\n requestNumber: res.data.number,\r\n firstName: res.data.firstName,\r\n lastName: res.data.lastName,\r\n email: res.data.email,\r\n userName: res.data.userName,\r\n status: res.data.status,\r\n provider: res.data.supplier,\r\n cuit: res.data.cuit,\r\n groups: res.data.groups?.map((item) => item.groups?.map((group) => ({\r\n userGroup: {\r\n ...group\r\n }\r\n }))).flat(),\r\n roles: res.data.roles,\r\n uunn: res.data.businessUnits,\r\n services: res.data.services,\r\n edit: res.data.edit\r\n });\r\n })\r\n .catch((err) => reject(err));\r\n});\r\n","// External deps\r\nimport React, { useRef, useState } from \"react\";\r\nimport PropTypes from 'prop-types';\r\nimport { DateInput, ModalGeneric } from 'ypf-pas-general-ui-components';\r\nimport { Formik } from \"formik\";\r\nimport { Form, Row, Col } from \"react-bootstrap\";\r\nimport * as yup from 'yup';\r\n\r\n// Intenal deps\r\nimport useLoading from \"../../hooks/useLoading\";\r\nimport { showSuccess, showError } from \"../../utils/toastUtils\";\r\nimport { postUserTrazabilityReportAdapter } from \"../../adapters/userRequestsAdapter\";\r\n\r\nconst VALIDATION_SCHEMA = yup.object().shape({\r\n dateFrom: yup\r\n .date()\r\n .max(new Date(), 'La fecha desde no puede ser mayor a la fecha actual')\r\n .max(yup.ref('dateTo'), 'La fecha desde no puede ser mayor a la fecha hasta ')\r\n .required('Debe seleccionar una fecha desde'),\r\n dateTo: yup\r\n .date()\r\n .max(new Date(), 'La fecha hasta no puede ser mayor a la fecha actual')\r\n .min(yup.ref('dateFrom'), 'La fecha hasta no puede ser menor a la fecha desde ')\r\n .required('Debe seleccionar una fecha hasta')\r\n});\r\nconst ModalUserTrazability = ({ showTrazabilityModal, setShowTrazabilityModal, firstDateRequest }) => {\r\n const [disabledPrimaryButton, setDisabledPrimaryButton] = useState(false);\r\n const { setLoading } = useLoading();\r\n const formRef = useRef(null);\r\n const today = new Date().toISOString().split('T')[0];\r\n const firstDateRequestConvert = new Date(firstDateRequest).toISOString().split('T')[0];\r\n const initialValues = {\r\n dateFrom: firstDateRequestConvert,\r\n dateTo: today\r\n };\r\n const onCloseModalUserTrazability = () => {\r\n setShowTrazabilityModal(false);\r\n };\r\n\r\n const downloadReports = (values) => {\r\n setLoading(true);\r\n const nameFile = 'Informe de trazabilidad de usuarios';\r\n postUserTrazabilityReportAdapter(values, nameFile)\r\n .then(() => {\r\n showSuccess('Se ha descargado archivo correctamente');\r\n setLoading(false);\r\n setTimeout(() => {\r\n window.location.reload();\r\n }, 3000);\r\n }).catch((err) => {\r\n showError(err);\r\n setLoading(false);\r\n });\r\n };\r\n if (firstDateRequest === null) return null;\r\n return (\r\n onCloseModalUserTrazability()}\r\n primaryActionLabel=\"Aceptar\"\r\n primaryActionDisabled={disabledPrimaryButton}\r\n primaryActionVariant={disabledPrimaryButton ? 'secondary' : 'primary'}\r\n primaryAction={() => formRef.current.handleSubmit()}\r\n >\r\n downloadReports(values)}\r\n >\r\n {({\r\n values, errors, touched, setFieldValue, setFieldTouched, isValid\r\n }) => (\r\n
\r\n {setDisabledPrimaryButton((!isValid || (values.dateFrom === null || values.dateTo === null)))}\r\n \r\n \r\n {\r\n setFieldTouched('dateFrom');\r\n setFieldValue('dateFrom', value.target.value);\r\n }}\r\n onClear={() => setFieldValue('dateFrom', '')}\r\n placeholder=\"Buscar por fecha desde\"\r\n value={values.dateFrom}\r\n widthDateInput=\"100%\"\r\n isInvalid={!!errors.dateFrom && touched.dateFrom}\r\n errors={errors.dateFrom}\r\n min={initialValues.dateFrom}\r\n max={values.dateTo}\r\n />\r\n \r\n \r\n \r\n \r\n {\r\n setFieldTouched('dateTo');\r\n setFieldValue('dateTo', value.target.value);\r\n }}\r\n onClear={() => setFieldValue('dateTo', '')}\r\n placeholder=\"Buscar por fecha hasta\"\r\n value={values.dateTo}\r\n widthDateInput=\"100%\"\r\n isInvalid={!!errors.dateTo && touched.dateTo}\r\n errors={errors.dateTo}\r\n min={values.dateFrom}\r\n max={today}\r\n />\r\n \r\n \r\n
\r\n )}\r\n \r\n \r\n );\r\n};\r\n\r\nModalUserTrazability.propTypes = {\r\n showTrazabilityModal: PropTypes.bool,\r\n setShowTrazabilityModal: PropTypes.func,\r\n firstDateRequest: PropTypes.string\r\n};\r\nModalUserTrazability.defaultProps = {\r\n showTrazabilityModal: false,\r\n setShowTrazabilityModal: () => {},\r\n firstDateRequest: ''\r\n};\r\nexport default ModalUserTrazability;","// External deps\r\nimport React, { useState, createContext } from 'react';\r\nimport PropTypes from 'prop-types';\r\n\r\n// Internal deps\r\nimport ModalUserTrazability from '../components/Modals/ModalUserTrazability';\r\nimport useLoading from '../hooks/useLoading';\r\nimport { showError } from '../utils/toastUtils';\r\nimport { getFirstDateRequestAdapter } from '../adapters/userRequestsAdapter';\r\n\r\nexport const UserTrazabilityContext = createContext();\r\nUserTrazabilityContext.displayName = 'UserTrazabilityContext';\r\n\r\nconst UserTrazabilityProvider = ({children}) => {\r\n const {setLoading} = useLoading();\r\n const [showTrazabilityModal, setShowTrazabilityModal] = useState(false);\r\n const [firstDateRequest, setFirstDateRequest] = useState('');\r\n \r\n const handleFirstDateRequest = () => {\r\n setLoading(true);\r\n getFirstDateRequestAdapter().then((res) => {\r\n setLoading(false);\r\n setFirstDateRequest(res);\r\n }).catch((err) => {\r\n showError(err); \r\n setLoading(false);\r\n });\r\n};\r\n const handleShowTrazabilityModal = (show) => {\r\n setShowTrazabilityModal(show);\r\n if (show) handleFirstDateRequest();\r\n };\r\n\r\n return(\r\n \r\n <>\r\n {children}\r\n {showTrazabilityModal && firstDateRequest.length && (\r\n \r\n )}\r\n \r\n \r\n )\r\n};\r\nUserTrazabilityProvider.propTypes = {\r\n children: PropTypes.node.isRequired\r\n };\r\n \r\n export default UserTrazabilityProvider;","\r\nexport const userRoles = Object.freeze({\r\n ADMINISTRADOR_CONTRATO: 'Yclick! Administrador de Contrato',\r\n INSPECTOR: 'Yclick! Inspector',\r\n REFERENTE_CONTROL_GESTION: 'Yclick! Referente Control de Gestion',\r\n CONTROL_ERRORES_SAP: 'Yclick! Control de errores SAP',\r\n PROVEEDOR_ADMINISTRADOR: 'Yclick! Proveedor Administrador',\r\n PROVEEDOR_NOTIFICADOR: 'Yclick! Proveedor Notificador',\r\n USUARIO_CONSULTAS: 'Yclick! Usuario Consulta',\r\n SOLICITANTE: 'Yclick! Solicitante',\r\n SUPERVISOR_NOTIFICADOR_YPF: 'Yclick! Supervisor Notificador YPF',\r\n APROBADOR: 'Yclick! Aprobador',\r\n REFERENTE_COMPRAS: 'Yclick! Referente Compras',\r\n RESPONSABLE_PEP_PROYECTO: 'Yclick! Responsable PEP Proyecto',\r\n GERENTE_COMPRA: 'Yclick! Gerente Compras',\r\n ADMINISTRADOR_USUARIO_EXTERNO: 'Yclick! AUE Administrador usuarios externos',\r\n ADMINISTRADOR_USUARIO_SEGURIDAD: 'Yclick! AUS Administrador usuarios seguridad',\r\n ADMINISTRADOR_USUARIO_PROPIEDADES: 'Yclick! AUP Administrador usuarios propiedades',\r\n AUDITOR_SEGURIDAD: 'Yclick! ADS Auditor de Seguridad',\r\n VISUALIZADOR_CONTRATOS: 'Yclick! Visualizador de contratos',\r\n LIBERADOR: 'Yclick! Liberador',\r\n CERTIFICADOR: 'Yclick! Certificador'\r\n});\r\n","// External deps\r\nimport React, { createContext, useState } from 'react';\r\nimport PropTypes from 'prop-types';\r\n\r\n// Internal deps\r\nimport { userRoles } from '../security/userRoles';\r\nimport { constantsSession } from '../constants/constants';\r\nimport { getItemStorage } from '../utils/utils';\r\n// This context is about user permission by role\r\nexport const UserPermisionsContext = createContext();\r\nUserPermisionsContext.displayName= 'UserPermisionsContext';\r\n\r\n// Probablemente estos permisos desaparezcan cuando Backend los implemente\r\n\r\nconst UserPermisionsProvider = ({children}) => { \r\n // check is a external user\r\n const [isUserExternal, setIsUserExternal] = useState(false);\r\n // check if can be edit me profile \r\n const [userPermissions, setUserPermissions] = useState({});\r\n\r\n // check what role I have\r\n const checkRoles = (rolParams, rolesUser) => {\r\n const rolFound = rolesUser?.find((rol) => rol.nombre === rolParams);\r\n return !!rolFound;\r\n };\r\n\r\n // get all user roles\r\n const handleAllRolesUser = (rolesArray) => {\r\n const allUserRoles = {\r\n isADMINISTRADOR_USUARIO_SEGURIDAD: checkRoles(userRoles.ADMINISTRADOR_USUARIO_SEGURIDAD, rolesArray),\r\n isADMINISTRADOR_USUARIO_PROPIEDADES: checkRoles(userRoles.ADMINISTRADOR_USUARIO_PROPIEDADES, rolesArray),\r\n isADMINISTRADOR_CONTRATO: checkRoles(userRoles.ADMINISTRADOR_CONTRATO, rolesArray),\r\n isREFERENTE_CONTROL_GESTION: checkRoles(userRoles.REFERENTE_CONTROL_GESTION, rolesArray),\r\n isCONTROL_ERRORES_SAP: checkRoles(userRoles.CONTROL_ERRORES_SAP, rolesArray),\r\n isUSUARIO_CONSULTAS: checkRoles(userRoles.USUARIO_CONSULTAS, rolesArray),\r\n isGERENTE_COMPRA: checkRoles(userRoles.GERENTE_COMPRA, rolesArray),\r\n isINSPECTOR: checkRoles(userRoles.INSPECTOR, rolesArray),\r\n isLIBERADOR: checkRoles(userRoles.LIBERADOR, rolesArray),\r\n isCERTIFICADOR: checkRoles(userRoles.CERTIFICADOR),\r\n isREFERENTE_COMPRAS: checkRoles(userRoles.REFERENTE_COMPRAS, rolesArray),\r\n isSOLICITANTE: checkRoles(userRoles.SOLICITANTE, rolesArray),\r\n isSUPERVISOR_NOTIFICADOR_YPF: checkRoles(userRoles.SUPERVISOR_NOTIFICADOR_YPF, rolesArray),\r\n isRESPONSABLE_PEP_PROYECTO: checkRoles(userRoles.RESPONSABLE_PEP_PROYECTO, rolesArray),\r\n isAPROBADOR: checkRoles(userRoles.APROBADOR, rolesArray),\r\n isADMINISTRADOR_USUARIO_EXTERNO: checkRoles(userRoles.ADMINISTRADOR_USUARIO_EXTERNO, rolesArray),\r\n isAUDITOR_SEGURIDAD: checkRoles(userRoles.AUDITOR_SEGURIDAD, rolesArray),\r\n isVISUALIZADOR_CONTRATOS: checkRoles(userRoles.VISUALIZADOR_CONTRATOS, rolesArray),\r\n isPROVEEDOR_ADMINISTRADOR: checkRoles(userRoles.PROVEEDOR_ADMINISTRADOR, rolesArray),\r\n isPROVEEDOR_NOTIFICADOR: checkRoles(userRoles.PROVEEDOR_NOTIFICADOR, rolesArray)\r\n };\r\n setIsUserExternal(\r\n allUserRoles.isADMINISTRADOR_USUARIO_EXTERNO\r\n || allUserRoles.isPROVEEDOR_ADMINISTRADOR\r\n || allUserRoles.isPROVEEDOR_NOTIFICADOR\r\n );\r\n return allUserRoles;\r\n };\r\n\r\n // get user permission about edit profile\r\n const handlePermissions = () => {\r\n const rolUserLogger = getItemStorage(constantsSession.ROLES_ME);\r\n const allUserRoles = handleAllRolesUser(rolUserLogger);\r\n const userPermissionsObject = {\r\n userProfile: {\r\n canEditMeProfile: (\r\n allUserRoles.isADMINISTRADOR_USUARIO_EXTERNO\r\n || allUserRoles.isVISUALIZADOR_CONTRATOS\r\n || allUserRoles.isAPROBADOR\r\n || allUserRoles.isRESPONSABLE_PEP_PROYECTO\r\n || allUserRoles.isSUPERVISOR_NOTIFICADOR_YPF\r\n || allUserRoles.isSOLICITANTE\r\n || allUserRoles.isREFERENTE_COMPRAS\r\n || allUserRoles.isCERTIFICADOR\r\n || allUserRoles.isLIBERADOR\r\n || allUserRoles.isINSPECTOR\r\n || allUserRoles.isGERENTE_COMPRA\r\n || allUserRoles.isUSUARIO_CONSULTAS\r\n || allUserRoles.isCONTROL_ERRORES_SAP\r\n || allUserRoles.isREFERENTE_CONTROL_GESTION\r\n || allUserRoles.isADMINISTRADOR_CONTRATO)\r\n }\r\n };\r\n setUserPermissions(userPermissionsObject);\r\n };\r\n\r\n return (\r\n \r\n {children}\r\n \r\n );\r\n}\r\n\r\nUserPermisionsProvider.propTypes = {\r\n children: PropTypes.element.isRequired\r\n };\r\nexport default UserPermisionsProvider ;","const PROCESS_TYPE = {\r\n inProgress: 'En Curso',\r\n notProcessed: 'No Procesado',\r\n pending: 'Pendiente',\r\n finalized: 'Finalizada'\r\n };\r\n \r\n export default PROCESS_TYPE;","// External deps\r\nimport { useContext } from 'react';\r\n\r\n// Internal deps\r\nimport { AppContext } from '../context/AppProvider';\r\n\r\nexport default function useApp() {\r\n return useContext(AppContext);\r\n}\r\n","// External deps\r\nimport { useContext } from 'react';\r\n\r\n// Internal deps\r\nimport { UserPermisionsContext} from '../context/UserPermisionsContext';\r\n\r\nexport default function useUserPermisions() {\r\n return useContext(UserPermisionsContext);\r\n}","const PROFILE_STATUS = {\r\n pending: 1,\r\n contractPending: 2,\r\n costObjectPending: 3,\r\n completed: 4\r\n };\r\n \r\n export default PROFILE_STATUS;","// External deps\r\nimport React , {createContext, useEffect, useState }from 'react';\r\nimport PropTypes from 'prop-types';\r\n// Internal deps\r\nimport PROCESS_TYPE from '../utils/processType';\r\nimport useApp from '../hooks/useApp';\r\nimport useUserPermisions from '../hooks/useUserPermisions';\r\nimport { URL_ADMINISTRACION } from '../constants/host';\r\nimport { clearStorage, getItemStorage } from '../utils/utils';\r\nimport { constantsSession } from '../constants/constants';\r\nimport useLoading from '../hooks/useLoading';\r\nimport {getFirstLoginAdapter, getInfoProfileAdapter } from '../adapters/userRequestsAdapter';\r\nimport { showError } from '../utils/toastUtils';\r\nimport PROFILE_STATUS from '../utils/profileStatus';\r\n\r\nexport const UserProfileContext = createContext();\r\nUserProfileContext.displayName= 'UserProfileContext';\r\n\r\nconst UserProfileProvider = ({children}) => {\r\n const accessToken = getItemStorage(constantsSession.ACCESS_TOKEN, false);\r\n const expireIn = getItemStorage(\r\n constantsSession.ACCESS_TOKEN_EXPIRE_IN,\r\n false\r\n );\r\n const refreshToken = getItemStorage(constantsSession.REFRESH_TOKEN, false);\r\n const accessTokenDate = getItemStorage(\r\n constantsSession.ACCESS_TOKEN_DATE,\r\n false\r\n );\r\n const { provName } = useApp();\r\n const { setLoading } = useLoading();\r\n const { userPermissions, isUserExternal } = useUserPermisions();\r\n // to show button \"Editar perfil\"\r\n const [canBeEditMeProfileValue, setCanBeEditMeProfileValue] = useState(false);\r\n \r\n // info user logger\r\n const [infoUserLogger, setInfoUserLogger] = useState({});\r\n\r\n // to show a modal with warning message - should be complite profile\r\n const [showModalInfo, setShowModalInfo] = useState({\r\n show:false,\r\n strongMessage: \"Para comenzar a utilizar Y-Click tenés que revisar si es necesario cargar datos de propiedades\",\r\n spanMessage: \"Algunas de estos datos pueden ser: UUNN, grupo y/o servicio\",\r\n changeContentModalInfo: false\r\n });\r\n // eslint-disable-next-line react-hooks/exhaustive-deps\r\n const handleCanEditMeProfile = () => {\r\n setCanBeEditMeProfileValue(userPermissions.userProfile?.canEditMeProfile);\r\n };\r\n \r\n const handleRedirectToMeProfile = ({ process, requestId, userName }) => {\r\n // route to complite profile\r\n if (isUserExternal) {\r\n const requestType = process === PROCESS_TYPE.finalized ? 'finished' : 'pending';\r\n window.location.replace(`${URL_ADMINISTRACION}/#/edit-external-user/${requestType}/${requestId}/${userName}?at=${accessToken}&ei=${expireIn}&rt=${refreshToken}&atd=${accessTokenDate}&ispr=${provName}&fhome=${true}`);\r\n } else {\r\n window.location.replace(`${URL_ADMINISTRACION}/#/edit-profile-internal-user/${requestId}/${userName}?at=${accessToken}&ei=${expireIn}&rt=${refreshToken}&atd=${accessTokenDate}&ispr=${provName}&fhome=${true}`);\r\n }\r\n clearStorage();\r\n };\r\n \r\n // Get info about user logger when a have roles and permissions\r\n const handleGetInfoUserLogger = (changeContent) => {\r\n setLoading(true);\r\n Promise.all([getFirstLoginAdapter(), getInfoProfileAdapter()])\r\n .then(([resFirstLogin, resInfoProfile]) => {\r\n setInfoUserLogger((prevState) => ({\r\n ...prevState,\r\n ...resInfoProfile\r\n })); \r\n setShowModalInfo((prevState) =>({...prevState,\r\n strongMessage: changeContent ? 'Para comenzar a utilizar Y-Click es necesario cargar datos de propiedades': prevState.strongMessage,\r\n spanMessage: changeContent ? 'Comunicate con un administrador': prevState.spanMessage,\r\n changeContentModalInfo: changeContent,\r\n show: resFirstLogin !== PROFILE_STATUS.completed})); \r\n setLoading(false);\r\n }).catch((err) => {\r\n setInfoUserLogger((prevState) => ({\r\n ...prevState\r\n }));\r\n setShowModalInfo((prevState) => ({...prevState, show: false}));\r\n showError(err); \r\n setLoading(false);\r\n }); \r\n };\r\n useEffect(() => {\r\n if(Object.keys(userPermissions).length !== 0){\r\n handleCanEditMeProfile();\r\n }\r\n // eslint-disable-next-line react-hooks/exhaustive-deps\r\n }, [userPermissions]);\r\n\r\n return (\r\n \r\n {children}\r\n \r\n );\r\n};\r\nUserProfileProvider.propTypes = {\r\n children: PropTypes.element.isRequired\r\n };\r\n \r\nexport default UserProfileProvider;","// External deps\r\nimport React from 'react';\r\nimport OverlayTrigger from 'react-bootstrap/OverlayTrigger';\r\nimport Tooltip from 'react-bootstrap/Tooltip';\r\nimport PropTypes from 'prop-types';\r\n\r\n// Internal deps\r\nimport './CustomTooltip.scss';\r\n\r\nconst CustomToolTip = ({\r\n children, text, className, tooltipClassName\r\n}) => (\r\n text ? (\r\n \r\n {text}\r\n \r\n )}\r\n >\r\n \r\n {children}\r\n \r\n \r\n ) : (\r\n
\r\n {children}\r\n
\r\n )\r\n);\r\n\r\nCustomToolTip.propTypes = {\r\n children: PropTypes.node.isRequired,\r\n text: PropTypes.string.isRequired,\r\n className: PropTypes.string,\r\n tooltipClassName: PropTypes.string\r\n};\r\n\r\nCustomToolTip.defaultProps = {\r\n className: '',\r\n tooltipClassName: ''\r\n};\r\n\r\nexport default CustomToolTip;\r\n","// External deps\r\nimport React from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport { Label, ModalGeneric} from 'ypf-pas-general-ui-components';\r\n\r\n// Internal deps\r\nimport CustomToolTip from '../CustomTooltip/CustomTooltip';\r\n\r\nconst ModalUserProfile = ({\r\n setShowModalUserProfile,\r\n showModalUserProfile,\r\n canBeEditMeProfile,\r\n infoUserLogger,\r\n primaryAction\r\n}) => {\r\n const onCloseModalUserProfile = () => {\r\n setShowModalUserProfile(false);\r\n };\r\n const renderLableAndTooltip = (label, text = []) => {\r\n const uniqueArrayText = text.filter((obj, index, self) => index === self.findIndex((ob) => (\r\n ob.name === obj.name\r\n )));\r\n const joinedText = text.map((e) => e.name).join(', ');\r\n const maxTextLength = 45;\r\n if (joinedText?.length > maxTextLength) {\r\n return (\r\n e.name).join(', ') || ''}\r\n tooltipClassName=\"tooltip-margin\"\r\n >\r\n e.name).join(', ') || '-'}\r\n />\r\n \r\n );\r\n }\r\n return (\r\n e.name).join(', ') || '-'}\r\n />\r\n );\r\n };\r\n if(Object.keys(infoUserLogger).length === 0) return null\r\n return ( \r\n onCloseModalUserProfile()}\r\n primaryActionLabel=\"Editar perfil\"\r\n primaryActionVariant={!canBeEditMeProfile ? 'secondary' : 'primary'}\r\n primaryActionDisabled={!canBeEditMeProfile}\r\n primaryAction={primaryAction}\r\n >\r\n
\r\n \r\n \r\n \r\n \r\n {renderLableAndTooltip('UUNN', infoUserLogger.uunn.map((unit) => (unit)))}\r\n \r\n {renderLableAndTooltip('Rol o Roles', infoUserLogger.roles.map((rol) => (rol)))}\r\n \r\n \r\n {renderLableAndTooltip('Grupo o Grupos', infoUserLogger?.groups?.map((g) => g.userGroup))}\r\n {renderLableAndTooltip('Servicio o Servicios', infoUserLogger.services.map((service) => (service)))}\r\n
\r\n \r\n \r\n );\r\n}\r\nModalUserProfile.propTypes = {\r\n setShowModalUserProfile: PropTypes.func,\r\n showModalUserProfile: PropTypes.bool,\r\n canBeEditMeProfile: PropTypes.bool,\r\n primaryAction: PropTypes.func.isRequired,\r\n infoUserLogger: PropTypes.shape({\r\n userName: PropTypes.string,\r\n firstName: PropTypes.string,\r\n lastName: PropTypes.string,\r\n email: PropTypes.string,\r\n uunn: PropTypes.arrayOf([PropTypes.shape({})]),\r\n roles: PropTypes.arrayOf([PropTypes.shape({})]),\r\n groups: PropTypes.arrayOf([PropTypes.shape({})]),\r\n provider: PropTypes.string,\r\n cuit: PropTypes.string,\r\n services: PropTypes.arrayOf([PropTypes.shape({})])\r\n }).isRequired\r\n };\r\n ModalUserProfile.defaultProps = {\r\n setShowModalUserProfile: () => {},\r\n showModalUserProfile: false,\r\n canBeEditMeProfile: false\r\n }; \r\n \r\nexport default ModalUserProfile;","// External deps\r\nimport React from \"react\";\r\nimport PropTypes from 'prop-types';\r\n\r\n// Internal deps\r\nimport { ModalGeneric } from 'ypf-pas-general-ui-components';\r\n\r\nconst ModalInfo = ({\r\n showModalInfo,\r\n setShowModalInfo,\r\n secondaryActionLabel,\r\n primaryActionLabel,\r\n primaryAction,\r\n secondaryAction,\r\n strongMessage,\r\n spanMessage,\r\n title,\r\n infoModal,\r\n size\r\n \r\n }) => {\r\n const onCloseModal = () => {\r\n setShowModalInfo(false);\r\n };\r\n \r\n return (\r\n \r\n
\r\n

\r\n \r\n \r\n {strongMessage}\r\n \r\n \r\n
\r\n {spanMessage}\r\n

\r\n
\r\n \r\n );\r\n };\r\n \r\n ModalInfo.propTypes = {\r\n setShowModalInfo: PropTypes.func,\r\n showModalInfo: PropTypes.bool,\r\n primaryAction: PropTypes.func,\r\n secondaryAction: PropTypes.func,\r\n strongMessage: PropTypes.string,\r\n spanMessage: PropTypes.string,\r\n secondaryActionLabel: PropTypes.string,\r\n primaryActionLabel: PropTypes.string.isRequired,\r\n title: PropTypes.string.isRequired,\r\n infoModal: PropTypes.bool,\r\n size: PropTypes.string\r\n };\r\n ModalInfo.defaultProps = {\r\n setShowModalInfo: () => {},\r\n showModalInfo: false,\r\n primaryAction: () => {},\r\n secondaryAction: () => {},\r\n strongMessage: '',\r\n spanMessage: '',\r\n secondaryActionLabel: '',\r\n infoModal: false,\r\n size: 'xs'\r\n };\r\n \r\n export default ModalInfo;\r\n ","import { apiYClickServicios } from './api';\r\n\r\n// eslint-disable-next-line import/prefer-default-export\r\nexport const getReferenceColors = async () => {\r\n const result = await apiYClickServicios.get(`/v1/PartesTrabajo/vistaExtendida/coloresReferencia`);\r\n\r\n return result.data;\r\n};","export const colorReferenceApprover = {\r\n devuelta: 4,\r\n aprobada: 3,\r\n fijada: 5,\r\n pendiente: 2,\r\n sinAprobacion: 1,\r\n cancelada: 0 // BE dice que no existe cancelacion en aprobador\r\n };\r\n \r\n export const colorReferenceInspector = {\r\n enviadaSE: 2,\r\n errorSE: 4,\r\n actuarInspector: 7,\r\n inspeccionada: 5,\r\n paquetizada: 6,\r\n cancelada: 3,\r\n revision: 0\r\n };\r\n ","import { BsThreeDotsVertical } from 'react-icons/bs';\r\nimport PropTypes from 'prop-types';\r\n\r\nimport { colorReferenceApprover, colorReferenceInspector } from '../../../../utils/dataEnum';\r\n\r\nimport styles from './FakeDayCell.module.scss';\r\n\r\nconst FakeDayCell = ({ colorsApprover, colorsInspector }) => (\r\n
\r\n obj.id === colorReferenceApprover.aprobada).bgColor\r\n : '#219E66'\r\n }}\r\n >\r\n \r\n \r\n \r\n\r\n obj.id === colorReferenceApprover.aprobada).textColor\r\n : '#FFFFFF'\r\n }}\r\n >\r\n \r\n 1\r\n

\r\n
\r\n obj.id === colorReferenceInspector.actuarInspector).color\r\n : '#616161'\r\n }}\r\n />\r\n \r\n);\r\n\r\nexport default FakeDayCell;\r\n\r\nFakeDayCell.propTypes = {\r\n colorsApprover: PropTypes.arrayOf(\r\n PropTypes.shape({\r\n id: PropTypes.number,\r\n descripcion: PropTypes.string,\r\n color: PropTypes.string\r\n })\r\n ),\r\n colorsInspector: PropTypes.arrayOf(\r\n PropTypes.shape({\r\n id: PropTypes.number,\r\n descripcion: PropTypes.string,\r\n color: PropTypes.string\r\n })\r\n )\r\n};\r\n\r\nFakeDayCell.defaultProps = {\r\n colorsApprover: [],\r\n colorsInspector: []\r\n};\r\n","import { Col, Row } from 'react-bootstrap';\r\nimport PropTypes from 'prop-types';\r\n\r\nconst ReferenceSquare = ({ status, approver }) => (\r\n \r\n \r\n \r\n {approver ? 1 : ''}\r\n \r\n \r\n \r\n \r\n \r\n {status.descripcion === '-' ? 'Sin aprobación' : status.descripcion}\r\n \r\n \r\n \r\n \r\n);\r\n\r\nexport default ReferenceSquare;\r\n\r\nReferenceSquare.propTypes = {\r\n approver: PropTypes.bool,\r\n status: PropTypes.objectOf(\r\n PropTypes.shape({\r\n id: PropTypes.number,\r\n descripcion: PropTypes.string,\r\n color: PropTypes.string\r\n })\r\n )\r\n};\r\n\r\nReferenceSquare.defaultProps = {\r\n approver: false,\r\n status: null\r\n};\r\n","/* eslint-disable react-hooks/exhaustive-deps */\r\nimport { useEffect, useState } from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport { ModalGeneric } from 'ypf-pas-general-ui-components';\r\nimport { Col, Row } from 'react-bootstrap';\r\n\r\nimport { getReferenceColors } from '../../services/yclickServices';\r\nimport { colorReferenceApprover, colorReferenceInspector } from '../../utils/dataEnum';\r\n\r\nimport FakeDayCell from './components/FakeDayCell/FakeDayCell';\r\nimport ReferenceSquare from './components/ReferenceSquare/ReferenceSquare';\r\n\r\nimport './StatusReferenceModal.scss';\r\n\r\nconst StatusReferenceModal = ({ show, onHide }) => {\r\n const [colorsApprover, setColorsApprover] = useState([]);\r\n const [colorsInspector, setColorsInspector] = useState([]);\r\n\r\n const getColors = async () => {\r\n const res = await getReferenceColors();\r\n\r\n const listaAprobador = await res?.listaEstadosColoresAprobador.map((estado) => {\r\n const [textColor, bgColor] = estado.color.split(',');\r\n\r\n return { ...estado, textColor, bgColor };\r\n });\r\n\r\n setColorsApprover(listaAprobador);\r\n setColorsInspector(res.listaEstadosColoresInspeccion);\r\n };\r\n\r\n useEffect(() => {\r\n getColors();\r\n }, []);\r\n\r\n return (\r\n \r\n <>\r\n \r\n
Ejemplo
\r\n \r\n \r\n \r\n\r\n \r\n
\r\n obj.id === colorReferenceApprover.aprobada)\r\n .bgColor\r\n : '#219E66',\r\n width: '2px'\r\n }}\r\n />\r\n obj.id === colorReferenceApprover.aprobada)\r\n .bgColor\r\n : '#219E66'\r\n }}\r\n >\r\n Área superior\r\n \r\n
\r\n
\r\n obj.id === colorReferenceInspector.actuarInspector\r\n ).color\r\n : '#616161',\r\n width: '2px'\r\n }}\r\n />\r\n obj.id === colorReferenceInspector.actuarInspector\r\n ).color\r\n : '#616161'\r\n }}\r\n >\r\n Área inferior\r\n \r\n
\r\n \r\n
\r\n
\r\n \r\n \r\n
Área Superior - Aprobador
\r\n {colorsApprover?.map((status) => (\r\n \r\n ))}\r\n \r\n \r\n
Área Inferior - Inspección
\r\n \r\n {colorsInspector?.map((status) => (\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 StatusReferenceModal;\r\n\r\nStatusReferenceModal.propTypes = {\r\n show: PropTypes.bool,\r\n onHide: PropTypes.func\r\n};\r\n\r\nStatusReferenceModal.defaultProps = {\r\n show: false,\r\n onHide: () => {\r\n /* Empty */\r\n }\r\n};\r\n","// external deps\r\nimport React, { useState, useEffect } from \"react\";\r\nimport { Navbar } from 'ypf-pas-general-ui-components';\r\n\r\n// internal deps\r\nimport ModalUserProfile from \"../Modals/ModalUserProfile\";\r\nimport ModalInfo from \"../Modals/ModalInfo\";\r\nimport useApp from \"../../hooks/useApp\";\r\nimport { getItemStorage } from \"../../utils/utils\";\r\nimport { constantsSession } from \"../../constants/constants\";\r\nimport {\r\n postStartChatbotRound,\r\n postChatbotQuestion,\r\n} from \"../../services/administrationService\";\r\nimport useUserPermisions from \"../../hooks/useUserPermisions\";\r\nimport useUserProfile from \"../../hooks/useUserProfile\";\r\nimport { URL_SERVICIOS } from \"../../constants/host\";\r\nimport StatusReferenceModal from '../StatusReferenceModal/StatusReferenceModal';\r\n\r\nconst NavBar = () => {\r\n const { userInfo, onLogOut } = useApp();\r\n const { handlePermissions, userPermissions } = useUserPermisions();\r\n const {\r\n canBeEditMeProfileValue,\r\n handleRedirectToMeProfile,\r\n handleGetInfoUserLogger,\r\n infoUserLogger,\r\n showModalInfo,\r\n setShowModalInfo\r\n } = useUserProfile();\r\n const [userRol, setUserRol] = useState(\"\");\r\n const [roles, setRoles] = useState([]);\r\n const [idChat, setIdChat] = useState(null);\r\n\r\n \r\n // to show modal user profile\r\n \r\n const [showModalUserProfile, setShowModalUserProfile] = useState(false);\r\n\r\n // get user credentials\r\n const accessToken = getItemStorage(constantsSession.ACCESS_TOKEN, false);\r\n const expireIn = getItemStorage(\r\n constantsSession.ACCESS_TOKEN_EXPIRE_IN,\r\n false\r\n );\r\n const refreshToken = getItemStorage(constantsSession.REFRESH_TOKEN, false);\r\n const accessTokenDate = getItemStorage(\r\n constantsSession.ACCESS_TOKEN_DATE,\r\n false\r\n );\r\n\r\n //to see the color reference Modal\r\n const [showModal, setShowModal] = useState(false);\r\n\r\n const activeModal = (modal) => {\r\n setShowModal((state) => ({ ...state, [modal]: true }));\r\n };\r\n const hideModal = () => {\r\n setShowModal(false);\r\n };\r\n const activeStatusReference = () => {\r\n activeModal('statusReferenceModal');\r\n };\r\n\r\n // IMPORTANTE\r\n // esta función va a tener que ser creada en la ui-kit, componente Navbar\r\n // al Navbar solo se le va a pasar un array con los roles\r\n const validUserRol = (activeRoles) => {\r\n if (activeRoles.length > 0) {\r\n setUserRol(activeRoles.map((rol) => rol.nombre.substring(8)));\r\n } else {\r\n setUserRol(\"-\");\r\n }\r\n };\r\n // callback a chatbot\r\n const postMessage = async (message) => {\r\n const msg = { question: message };\r\n const isFirstChat = !idChat;\r\n\r\n return new Promise((resolve, reject) => {\r\n const promise = !isFirstChat\r\n ? postChatbotQuestion(msg, idChat)\r\n : postStartChatbotRound(msg);\r\n\r\n promise\r\n .then(({ data }) => {\r\n if (isFirstChat) {\r\n setIdChat(data.chatId);\r\n }\r\n resolve({ message: data.response });\r\n })\r\n .catch((err) => reject(err));\r\n });\r\n };\r\n\r\n useEffect(() => {\r\n if (roles && roles.length > 0) {\r\n validUserRol(roles);\r\n handlePermissions(); \r\n }\r\n // eslint-disable-next-line react-hooks/exhaustive-deps\r\n }, [roles]);\r\n\r\n useEffect(() => {\r\n const userRoles = getItemStorage(constantsSession.ROLES_ME);\r\n setRoles(userRoles || []);\r\n }, [userInfo]);\r\n\r\n useEffect(()=>{\r\n // Only have permission to edit profile show button and get info profile\r\n if(Object.keys(userPermissions).length !== 0){\r\n const changeContentModalInfo = !userPermissions?.userProfile?.canEditMeProfile;\r\n handleGetInfoUserLogger(changeContentModalInfo);\r\n }\r\n // eslint-disable-next-line react-hooks/exhaustive-deps\r\n },[userPermissions])\r\n\r\n return (\r\n <>\r\n setShowModalUserProfile(true)}\r\n openModalReference={activeStatusReference}\r\n />\r\n {showModalUserProfile && (\r\n {\r\n handleRedirectToMeProfile(infoUserLogger);\r\n setShowModalUserProfile(false);\r\n }}\r\n />\r\n )}\r\n {showModalInfo.show && (\r\n {\r\n handleRedirectToMeProfile(infoUserLogger);\r\n setShowModalInfo(false);\r\n }}\r\n secondaryActionLabel={\"Salir\"}\r\n secondaryAction={()=> onLogOut()}\r\n primaryActionDisabled={showModalInfo.changeContentModalInfo}\r\n strongMessage={showModalInfo.strongMessage}\r\n spanMessage={showModalInfo.spanMessage}\r\n\r\n />\r\n )}\r\n \r\n \r\n \r\n );\r\n};\r\n\r\nexport default NavBar;\r\n","// External deps\r\nimport { useContext } from 'react';\r\n\r\n// Internal deps\r\nimport { UserProfileContext} from '../context/UserProfileContext';\r\n\r\nexport default function useUserProfile() {\r\n return useContext(UserProfileContext);\r\n}\r\n","export default __webpack_public_path__ + \"static/media/img-error404.e26bf401.svg\";","import React from 'react';\r\nimport { useHistory } from 'react-router-dom';\r\nimport { Button } from 'ypf-pas-general-ui-components';\r\n\r\nimport img from '../../assets/img-error404.svg';\r\nimport './NotFound.scss';\r\n\r\nconst NotFound = () => {\r\n const history = useHistory();\r\n return (\r\n
\r\n \"error\"\r\n

¡Ups!

\r\n

\r\n La página a la que intentas ingresar no existe.\r\n

\r\n history.goBack()}\r\n />\r\n
\r\n );\r\n};\r\n\r\nexport default NotFound;\r\n","import React from 'react';\r\n\r\nimport NotFound from '../containers/NotFound/NotFound';\r\n\r\nconst PageNotFound = () => ;\r\n\r\nexport default PageNotFound;\r\n","export default __webpack_public_path__ + \"static/media/logo-yclick-2.52a6fde3.svg\";","// External deps\r\nimport React from \"react\";\r\nimport { Button, ContentCard, Input, InputPassword } from 'ypf-pas-general-ui-components';\r\nimport { Form } from \"react-bootstrap\";\r\nimport { useFormik } from \"formik\";\r\nimport * as yup from \"yup\";\r\n\r\n// Internal deps\r\nimport { login } from \"../../adapters/loginAdapter\";\r\nimport logo from \"../../assets/logo-yclick-2.svg\";\r\nimport useApp from \"../../hooks/useApp\";\r\nimport useLoading from \"../../hooks/useLoading\";\r\nimport { showError } from \"../../utils/toastUtils\";\r\n\r\nimport \"./LoginContainer.scss\";\r\n\r\nconst schemaFilters = yup.object().shape({\r\n user: yup\r\n .string()\r\n .required(\"Debe ingresar usuario\")\r\n .max(50, \"Se permite hasta 50 caracteres\")\r\n .min(5, \"Debe ingresar al menos 5 caracteres\"),\r\n password: yup\r\n .string()\r\n .required(\"Debe ingresar contraseña\")\r\n .max(50, \"Se permite hasta 50 caracteres\")\r\n .min(5, \"Debe ingresar al menos 5 caracteres\"),\r\n});\r\n\r\nconst LoginContainer = () => {\r\n const { authUser } = useApp();\r\n const { setLoading } = useLoading();\r\n\r\n const loginUser = ({ user, password }) => {\r\n setLoading(true);\r\n login({\r\n user,\r\n password,\r\n })\r\n .then((responseLogin) => {\r\n const accessTokenData = {\r\n access_token: responseLogin.accessToken,\r\n refresh_token: responseLogin.refreshToken,\r\n expires_in: responseLogin.expiresIn,\r\n };\r\n authUser(accessTokenData, new Date().getTime());\r\n setLoading(false);\r\n })\r\n .catch((err) => {\r\n setLoading(false);\r\n showError(err);\r\n });\r\n };\r\n\r\n const formik = useFormik({\r\n initialValues: {\r\n user: \"\",\r\n password: \"\",\r\n },\r\n onSubmit: (newValues) => loginUser(newValues),\r\n validationSchema: schemaFilters,\r\n });\r\n\r\n const { values, setFieldValue, handleSubmit, isValid } = formik;\r\n\r\n return (\r\n
\r\n
\r\n \"Logo-Yclick\"\r\n \r\n
\r\n

Bienvenido

\r\n {\r\n setFieldValue(\"user\", e.target.value.trim());\r\n }}\r\n value={values.user}\r\n maxLength={50}\r\n />\r\n {\r\n setFieldValue(\"password\", e.target.value.trim());\r\n }}\r\n value={values.password}\r\n maxLength={50}\r\n showIcon\r\n />\r\n
\r\n \r\n ¿Olvidaste tu contraseña?\r\n \r\n
\r\n \r\n \r\n
\r\n
\r\n
\r\n );\r\n};\r\n\r\nexport default LoginContainer;\r\n","import React from 'react';\r\n\r\nimport LoginContainer from '../containers/LoginContainer/LoginContainer';\r\n\r\nconst Login = () => ;\r\n\r\nexport default Login;\r\n","// Internal deps\r\nimport { userRoles } from '../security/userRoles';\r\nimport useUserTrazability from './useUserTrazability';\r\n/** @typedef {userRoles[keyof userRoles]} UserRoles */\r\n\r\n/**\r\n * @typedef Link\r\n * @property {\"administracion\" | \"certificaciones\" | \"servicios\" | null} app\r\n * @property {Function} callback\r\n * @property {number} id\r\n * @property {string} name\r\n * @property {string} pathname\r\n * @property {UserRoles[]} permissions\r\n * @property {string} url\r\n */\r\n\r\n/**\r\n * @typedef YClickLink\r\n * @property {number} id\r\n * @property {string} title\r\n * @property {Link[]} links\r\n */\r\n\r\nconst useHomeUtils = () => {\r\n const { handleShowTrazabilityModal } = useUserTrazability();\r\n const getYClickLinks = () => {\r\n /** @type {YClickLink[]} */\r\n return [\r\n {\r\n id: 1,\r\n title: 'Solicitudes de Servicio',\r\n links: [\r\n {\r\n app: 'servicios',\r\n callback: () => {},\r\n id: 12,\r\n name: 'Crear nueva Solicitud',\r\n pathname: '/createMultiple',\r\n permissions: [userRoles.SOLICITANTE],\r\n url: '',\r\n },\r\n {\r\n app: 'servicios',\r\n callback: () => {},\r\n id: 11,\r\n name: 'Consultar Bandeja de Solicitud de Servicio',\r\n pathname: '',\r\n permissions: [\r\n userRoles.INSPECTOR,\r\n userRoles.PROVEEDOR_ADMINISTRADOR,\r\n userRoles.PROVEEDOR_NOTIFICADOR,\r\n userRoles.USUARIO_CONSULTAS,\r\n userRoles.SOLICITANTE,\r\n userRoles.SUPERVISOR_NOTIFICADOR_YPF,\r\n userRoles.RESPONSABLE_PEP_PROYECTO,\r\n userRoles.GERENTE_COMPRA,\r\n ],\r\n url: '',\r\n },\r\n {\r\n app: 'servicios',\r\n callback: () => {},\r\n id: 15,\r\n name: 'Administrar modelos de Solicitudes',\r\n pathname: '/manage-temp/workReport',\r\n permissions: [\r\n userRoles.PROVEEDOR_NOTIFICADOR,\r\n userRoles.SUPERVISOR_NOTIFICADOR_YPF,\r\n ],\r\n url: '',\r\n },\r\n {\r\n app: 'servicios',\r\n callback: () => {},\r\n id: 16,\r\n name: 'Administrar modelos de Solicitudes',\r\n pathname: '/manage-temp/request',\r\n permissions: [userRoles.SOLICITANTE],\r\n url: '',\r\n },\r\n {\r\n app: 'servicios',\r\n callback: () => {},\r\n id: 13,\r\n name: 'Notificar Parte de Trabajo s/ Solicitud',\r\n pathname: '/create-asds',\r\n permissions: [\r\n userRoles.PROVEEDOR_NOTIFICADOR,\r\n userRoles.SUPERVISOR_NOTIFICADOR_YPF,\r\n ],\r\n url: '',\r\n },\r\n {\r\n app: 'servicios',\r\n callback: () => {},\r\n id: 14,\r\n name: 'Supervisar Partes de Trabajo',\r\n pathname: '/approver',\r\n permissions: [userRoles.APROBADOR],\r\n url: '',\r\n },\r\n ],\r\n },\r\n {\r\n id: 2,\r\n title: 'Inspección y certificación',\r\n links: [\r\n {\r\n app: 'certificaciones',\r\n callback: () => {},\r\n id: 21,\r\n name: 'Gestionar Autorizaciones',\r\n pathname: '/#/inspeccion/resumen',\r\n permissions: [userRoles.INSPECTOR],\r\n url: '',\r\n },\r\n {\r\n app: 'certificaciones',\r\n callback: () => {},\r\n id: 22,\r\n name: 'Consultar Bandeja de Errores de Certificación',\r\n pathname: '/#/errores/partes',\r\n permissions: [\r\n userRoles.CONTROL_ERRORES_SAP,\r\n userRoles.RESPONSABLE_PEP_PROYECTO,\r\n userRoles.GERENTE_COMPRA,\r\n ],\r\n url: '',\r\n },\r\n {\r\n app: 'certificaciones',\r\n callback: () => {},\r\n id: 23,\r\n name: 'Consultar Bandeja de Habilitas',\r\n pathname: '/#/habilitas',\r\n permissions: [\r\n userRoles.INSPECTOR,\r\n userRoles.PROVEEDOR_ADMINISTRADOR,\r\n ],\r\n url: '',\r\n },\r\n ],\r\n },\r\n {\r\n id: 3,\r\n title: 'Reportes',\r\n links: [\r\n {\r\n app: 'certificaciones',\r\n callback: () => {},\r\n id: 31,\r\n name: 'Generar Reporte de Trazabilidad',\r\n pathname: '/#/reporte-certificacion',\r\n permissions: [\r\n userRoles.ADMINISTRADOR_CONTRATO,\r\n userRoles.INSPECTOR,\r\n userRoles.REFERENTE_CONTROL_GESTION,\r\n userRoles.CONTROL_ERRORES_SAP,\r\n userRoles.PROVEEDOR_ADMINISTRADOR,\r\n userRoles.PROVEEDOR_NOTIFICADOR,\r\n userRoles.USUARIO_CONSULTAS,\r\n userRoles.SOLICITANTE,\r\n userRoles.SUPERVISOR_NOTIFICADOR_YPF,\r\n userRoles.APROBADOR,\r\n userRoles.REFERENTE_COMPRAS,\r\n userRoles.RESPONSABLE_PEP_PROYECTO,\r\n userRoles.GERENTE_COMPRA,\r\n ],\r\n url: '',\r\n },\r\n {\r\n app: '',\r\n callback: () => {},\r\n id: 32,\r\n name: 'Descargar Informe de Trazabilidad de Usuarios',\r\n pathname: '',\r\n permissions: [userRoles.AUDITOR_SEGURIDAD],\r\n url: '',\r\n isDownload: true,\r\n actionDownload: () => handleShowTrazabilityModal(true),\r\n },\r\n {\r\n app: 'servicios',\r\n callback: () => {},\r\n id: 33,\r\n name: 'Generar Reporte de Provisión',\r\n pathname: '/reporte-provision',\r\n permissions: [\r\n userRoles.INSPECTOR,\r\n userRoles.REFERENTE_CONTROL_GESTION,\r\n ],\r\n url: '',\r\n },\r\n ],\r\n },\r\n {\r\n id: 4,\r\n title: 'Administración',\r\n links: [\r\n {\r\n app: 'certificaciones',\r\n callback: () => {},\r\n id: 41,\r\n name: 'Configurar Contratos',\r\n pathname: '/#/contratos',\r\n permissions: [\r\n userRoles.ADMINISTRADOR_CONTRATO,\r\n userRoles.INSPECTOR,\r\n ],\r\n url: '',\r\n },\r\n {\r\n app: 'certificaciones',\r\n callback: () => {},\r\n id: 42,\r\n name: 'Configurar Cuenta Contable',\r\n pathname: '/#/cuenta-contable',\r\n permissions: [userRoles.REFERENTE_CONTROL_GESTION],\r\n url: '',\r\n },\r\n {\r\n app: 'administracion',\r\n callback: () => {},\r\n id: 53,\r\n name: 'Administrar Servicios',\r\n pathname: '/#/service-table',\r\n permissions: [userRoles.ADMINISTRADOR_USUARIO_PROPIEDADES],\r\n url: '',\r\n },\r\n {\r\n app: 'administracion',\r\n callback: () => {},\r\n id: 54,\r\n name: 'Administrar Proveedores',\r\n pathname: '/#/provider-table',\r\n permissions: [userRoles.ADMINISTRADOR_USUARIO_PROPIEDADES],\r\n url: '',\r\n },\r\n {\r\n app: 'administracion',\r\n callback: () => {},\r\n id: 55,\r\n name: 'Administrar Unidades de Negocio',\r\n pathname: '/#/business-unit-table',\r\n permissions: [userRoles.ADMINISTRADOR_USUARIO_PROPIEDADES],\r\n url: '',\r\n },\r\n {\r\n app: 'administracion',\r\n callback: () => {},\r\n id: 81,\r\n name: 'Administrar Objeto de Imputación - Responsable PEP Proyecto',\r\n pathname: '/#/imputation-object-table',\r\n permissions: [userRoles.ADMINISTRADOR_USUARIO_PROPIEDADES],\r\n url: '',\r\n },\r\n {\r\n app: 'administracion',\r\n callback: () => {},\r\n id: 82,\r\n name: 'Administrar CECO - Centro Logístico',\r\n pathname: '/#/ceco-table',\r\n permissions: [userRoles.ADMINISTRADOR_USUARIO_PROPIEDADES],\r\n url: '',\r\n },\r\n {\r\n app: 'administracion',\r\n callback: () => {},\r\n id: 83,\r\n name: 'Administrar CECO - Tipo de CECO',\r\n pathname: '/#/ceco-type-table',\r\n permissions: [userRoles.ADMINISTRADOR_USUARIO_PROPIEDADES],\r\n url: '',\r\n },\r\n {\r\n app: 'administracion',\r\n callback: () => {},\r\n id: 84,\r\n name: 'Administrar Eventos',\r\n pathname: '/#/events-table',\r\n permissions: [userRoles.ADMINISTRADOR_USUARIO_PROPIEDADES],\r\n url: '',\r\n },\r\n {\r\n app: 'administracion',\r\n callback: () => {},\r\n id: 85,\r\n name: 'Administrar Objeto de Imputación - Ubicaciones Genéricas ',\r\n pathname: '/#/imputation-object-generic-location-table',\r\n permissions: [userRoles.ADMINISTRADOR_USUARIO_PROPIEDADES],\r\n url: '',\r\n },\r\n // {\r\n // id: 43,\r\n // url: \"#\",\r\n // callback: () => {},\r\n // name: \"Alta relación cuenta contable\",\r\n // permissions: [userRoles.REFERENTE_CONTROL_GESTION],\r\n // },\r\n ],\r\n },\r\n {\r\n id: 5,\r\n title: 'Roles y Usuarios',\r\n links: [\r\n {\r\n app: 'administracion',\r\n callback: () => {},\r\n id: 44,\r\n name: 'Consultar Bandeja de Usuarios',\r\n pathname: '/#/external-user-table',\r\n permissions: [userRoles.ADMINISTRADOR_USUARIO_EXTERNO],\r\n url: '',\r\n },\r\n {\r\n app: 'administracion',\r\n callback: () => {},\r\n id: 43,\r\n name: 'Consultar Bandeja de Usuarios',\r\n pathname: '/#/internal-user-table',\r\n permissions: [\r\n userRoles.ADMINISTRADOR_USUARIO_SEGURIDAD,\r\n userRoles.ADMINISTRADOR_USUARIO_PROPIEDADES,\r\n userRoles.AUDITOR_SEGURIDAD,\r\n ],\r\n url: '',\r\n },\r\n {\r\n app: 'administracion',\r\n callback: () => {},\r\n id: 52,\r\n name: 'Consultar Roles',\r\n pathname: '/#/roles-table',\r\n permissions: [userRoles.ADMINISTRADOR_USUARIO_PROPIEDADES],\r\n url: '',\r\n },\r\n {\r\n app: 'administracion',\r\n callback: () => {},\r\n id: 51,\r\n name: 'Administrar Grupo',\r\n pathname: '/#/group-table',\r\n permissions: [userRoles.ADMINISTRADOR_USUARIO_PROPIEDADES],\r\n url: '',\r\n },\r\n ],\r\n },\r\n // NOSONAR: descomentar a medida que se vayan utilizando, se ocultan por el momento\r\n // {\r\n // id: 6,\r\n // title: \"Tablas SAP MM\",\r\n // links: [\r\n // {\r\n // app: null,\r\n // callback: () => {},\r\n // id: 61,\r\n // name: \"Contratos cabecera\",\r\n // pathname: \"\",\r\n // permissions: [userRoles.ADMINISTRADOR_USUARIO_PROPIEDADES],\r\n // url: \"\",\r\n // },\r\n // {\r\n // app: null,\r\n // callback: () => {},\r\n // id: 62,\r\n // name: \"Contratos itemizados\",\r\n // pathname: \"\",\r\n // permissions: [userRoles.ADMINISTRADOR_USUARIO_PROPIEDADES],\r\n // url: \"\",\r\n // },\r\n // {\r\n // app: null,\r\n // callback: () => {},\r\n // id: 63,\r\n // name: \"Contratos precio\",\r\n // pathname: \"\",\r\n // permissions: [userRoles.ADMINISTRADOR_USUARIO_PROPIEDADES],\r\n // url: \"\",\r\n // },\r\n // ],\r\n // },\r\n // {\r\n // id: 7,\r\n // title: \"Tablas SAP PS\",\r\n // links: [\r\n // {\r\n // app: null,\r\n // callback: () => {},\r\n // id: 71,\r\n // name: \"Objeto de imputación PEP\",\r\n // pathname: \"\",\r\n // permissions: [userRoles.ADMINISTRADOR_USUARIO_PROPIEDADES],\r\n // url: \"\",\r\n // },\r\n // {\r\n // app: null,\r\n // callback: () => {},\r\n // id: 72,\r\n // name: \"Objeto de imputación orden\",\r\n // pathname: \"\",\r\n // permissions: [userRoles.ADMINISTRADOR_USUARIO_PROPIEDADES],\r\n // url: \"\",\r\n // },\r\n // {\r\n // app: null,\r\n // callback: () => {},\r\n // id: 73,\r\n // name: \"Objeto de imputación CECO\",\r\n // pathname: \"\",\r\n // permissions: [userRoles.ADMINISTRADOR_USUARIO_PROPIEDADES],\r\n // url: \"\",\r\n // },\r\n // ],\r\n // },\r\n // ,\r\n // {\r\n // id: 9,\r\n // title: \"Tablas interface OW\",\r\n // links: [\r\n // {\r\n // app: null,\r\n // callback: () => {},\r\n // id: 91,\r\n // name: \"Equipo\",\r\n // pathname: \"\",\r\n // permissions: [userRoles.ADMINISTRADOR_USUARIO_PROPIEDADES],\r\n // url: \"\",\r\n // },\r\n // {\r\n // app: null,\r\n // callback: () => {},\r\n // id: 92,\r\n // name: \"Locación\",\r\n // pathname: \"\",\r\n // permissions: [userRoles.ADMINISTRADOR_USUARIO_PROPIEDADES],\r\n // url: \"\",\r\n // },\r\n // {\r\n // app: null,\r\n // callback: () => {},\r\n // id: 93,\r\n // name: \"Locación - Pozo\",\r\n // pathname: \"\",\r\n // permissions: [userRoles.ADMINISTRADOR_USUARIO_PROPIEDADES],\r\n // url: \"\",\r\n // },\r\n // {\r\n // app: null,\r\n // callback: () => {},\r\n // id: 94,\r\n // name: \"Evento - Pozo\",\r\n // pathname: \"\",\r\n // permissions: [userRoles.ADMINISTRADOR_USUARIO_PROPIEDADES],\r\n // url: \"\",\r\n // },\r\n // {\r\n // app: null,\r\n // callback: () => {},\r\n // id: 95,\r\n // name: \"Operación - Equipo\",\r\n // pathname: \"\",\r\n // permissions: [userRoles.ADMINISTRADOR_USUARIO_PROPIEDADES],\r\n // url: \"\",\r\n // },\r\n // {\r\n // app: null,\r\n // callback: () => {},\r\n // id: 96,\r\n // name: \"Objeto de imputación - Evento - Pozo\",\r\n // pathname: \"\",\r\n // permissions: [userRoles.ADMINISTRADOR_USUARIO_PROPIEDADES],\r\n // url: \"\",\r\n // },\r\n // ],\r\n // },\r\n ];\r\n };\r\n /** @param {Link[]} linksArray @param {UserRoles[]} roles */\r\n const verifyLinkPermissions = (linksArray, roles) =>\r\n linksArray.filter((link) =>\r\n roles.some((role) => link.permissions.includes(role))\r\n );\r\n\r\n /**\r\n * @param {{id: number, nombre: UserRoles}[]} rolesArray\r\n * @param {import(\"../context/AppProvider\").AppsURL} appsURL\r\n * @returns {YClickLink[]}\r\n */\r\n\r\n const getAllowedLinks = (appsURL, rolesArray = []) => {\r\n const roles = rolesArray.map((role) => role.nombre);\r\n\r\n const returnedLinks = [];\r\n const yClickLinksArray = getYClickLinks();\r\n\r\n yClickLinksArray.forEach((yClickLink) => {\r\n // se obtienen los links de cada sección, filtrados por roles/permisos\r\n const verifiedLinks = verifyLinkPermissions(yClickLink.links, roles);\r\n\r\n const links = verifiedLinks.map((link) => {\r\n const { pathname, app, ...restOfLink } = link;\r\n\r\n if (!app) return { ...restOfLink };\r\n\r\n return { ...restOfLink, url: `${appsURL[app]}${pathname}` };\r\n });\r\n\r\n // se verifica que haya al menos 1 item dentro del array\r\n // para pushearlo al array que devuelve la función\r\n if (links.length) {\r\n returnedLinks.push({\r\n id: yClickLink.id,\r\n title: yClickLink.title,\r\n links: links,\r\n });\r\n }\r\n });\r\n\r\n return returnedLinks;\r\n };\r\n return {\r\n getYClickLinks,\r\n getAllowedLinks,\r\n };\r\n};\r\n\r\nexport default useHomeUtils;\r\n","// External deps\r\nimport { useContext } from 'react';\r\n\r\n// Internal deps\r\nimport { UserTrazabilityContext } from '../context/UserTrazabilityContext';\r\n\r\nexport default function useUserTrazability() {\r\n return useContext(UserTrazabilityContext);\r\n}\r\n","// external deps\r\nimport React, { useEffect } from \"react\";\r\nimport { Row, Col } from \"react-bootstrap\";\r\nimport { ContentCard } from 'ypf-pas-general-ui-components';\r\n\r\n// internal deps\r\nimport useLoading from \"../../hooks/useLoading\";\r\nimport useApp from \"../../hooks/useApp\";\r\nimport { getItemStorage, clearStorage } from \"../../utils/utils\";\r\nimport { constantsSession } from \"../../constants/constants\";\r\nimport { URL_SERVICIOS } from \"../../constants/host\";\r\nimport styles from \"./HomeContainer.module.scss\";\r\nimport useHomeUtils from \"../../hooks/useHomeUtils\";\r\n\r\nfunction HomeContainer() {\r\n const { setLoading } = useLoading();\r\n const { appsURL, provName } = useApp();\r\n const { getAllowedLinks} = useHomeUtils();\r\n const roles = getItemStorage(constantsSession.ROLES_ME);\r\n const accessToken = getItemStorage(constantsSession.ACCESS_TOKEN, false);\r\n const expireIn = getItemStorage(\r\n constantsSession.ACCESS_TOKEN_EXPIRE_IN,\r\n false\r\n );\r\n const refreshToken = getItemStorage(constantsSession.REFRESH_TOKEN, false);\r\n const accessTokenDate = getItemStorage(\r\n constantsSession.ACCESS_TOKEN_DATE,\r\n false\r\n );\r\n\r\n const yClickLinks = getAllowedLinks( appsURL, roles);\r\n const queryNRisNotificationReport = getItemStorage(\"hmnr_isnr\");\r\n // Si el usuario fue redirigido a Home desde una url de reporte notifiacion\r\n // hay que redirigirlo a servicios antes de renderizar el home\r\n\r\n const notificationReportRedirect = () => {\r\n const queryNRContractNumber = encodeURIComponent(getItemStorage(\"hmnr_cn\"));\r\n const queryNRWell = encodeURIComponent(getItemStorage(\"hmnr_wl\"));\r\n const queryNRDateFrom = encodeURIComponent(getItemStorage(\"hmnr_df\"));\r\n const queryNRDateTo = encodeURIComponent(getItemStorage(\"hmnr_dt\"));\r\n\r\n clearStorage();\r\n // Valor por defecto por los parametros\r\n // Redirigir a NotFound si falla el post\r\n const nrUrl = `${URL_SERVICIOS}/notification-report/?at=${accessToken}&ei=${expireIn}&rt=${refreshToken}&atd=${accessTokenDate}&nr_cn=${queryNRContractNumber}&nr_wl=${queryNRWell}&nr_df=${queryNRDateFrom}&nr_dt=${queryNRDateTo}`;\r\n window.location.replace(nrUrl);\r\n };\r\n\r\n if (queryNRisNotificationReport === \"1\") {\r\n notificationReportRedirect();\r\n }\r\n\r\n useEffect(() => {\r\n setLoading(false);\r\n // eslint-disable-next-line react-hooks/exhaustive-deps\r\n }, []);\r\n\r\n return queryNRisNotificationReport === \"1\" ? null : (\r\n
\r\n \r\n
\r\n

Gestión de Servicios

\r\n \r\n {yClickLinks.map((yClickLink, index) => (\r\n \r\n \r\n

\r\n {yClickLink.title}\r\n

\r\n
\r\n {yClickLink.links.map((l, i, arr) => (\r\n \r\n
\r\n {l.isDownload ? (\r\n l.actionDownload()}\r\n >\r\n {l.name}\r\n
\r\n ): (\r\n clearStorage()}\r\n >\r\n {l.name}\r\n \r\n )}\r\n \r\n
\r\n {i === arr.length - 1 ? null :
}\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 HomeContainer;\r\n","import React from 'react';\r\n\r\nimport HomeContainer from '../containers/HomeContainer/HomeContainer';\r\n\r\nconst Home = () => ;\r\n\r\nexport default Home;\r\n","// External deps\r\nimport React from \"react\";\r\nimport { Redirect, Switch, Route } from \"react-router-dom\";\r\n\r\n// Internal deps\r\nimport NavBar from \"../components/NavBar/NavBar\";\r\nimport PageNotFound from \"../pages/PageNotFound\";\r\nimport Login from \"../pages/Login\";\r\nimport useApp from \"../hooks/useApp\";\r\nimport Home from \"../pages/Home\";\r\n\r\nconst Routes = () => {\r\n const { auth } = useApp();\r\n\r\n if (!auth) {\r\n return ;\r\n }\r\n\r\n return (\r\n <>\r\n {!auth ? (\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 Routes;\r\n","import { HashRouter as Router } from \"react-router-dom\";\r\nimport LoadingProvider from \"./context/LoadingProvider\";\r\nimport AppProvider from \"./context/AppProvider\";\r\nimport UserTrazabilityProvider from \"./context/UserTrazabilityContext\";\r\nimport UserPermisionsProvider from \"./context/UserPermisionsContext\";\r\nimport UserProfileProvider from \"./context/UserProfileContext\";\r\nimport Routes from \"./routes/Routes\";\r\nimport { ToastContainer } from \"react-toastify\";\r\n\r\nimport \"ypf-pas-general-ui-components/dist/styles.css\";\r\nimport \"./styles/styles.scss\";\r\n\r\nfunction App() {\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 \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 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 = {\"contentModule\":\"HomeContainer_contentModule__10_QX\",\"cardTitle\":\"HomeContainer_cardTitle__2M1Kd\",\"colTitle\":\"HomeContainer_colTitle__oUOCT\",\"links\":\"HomeContainer_links__38xOt\"};"],"sourceRoot":""}