{"version":3,"sources":["containers/user/WithPermissions.tsx","components/custom/usePermissions.tsx","components/custom/useEvents.tsx","components/custom/ButtonSet.tsx","components/custom/F.tsx","components/custom/FieldsBox.tsx","components/custom/FormField.tsx","components/custom/G.tsx","components/custom/InlineInputText.tsx","components/custom/InlineSelect.tsx","components/custom/InputGroup.tsx","components/custom/LoadingBox.tsx","components/custom/NotificationBox.tsx","components/custom/NotificationsBox.tsx","components/custom/R.tsx","components/custom/TogglePanel.tsx","components/custom/useSearchPaginate.tsx","components/custom/useSearchFirst.tsx","components/custom/InputEventDispatcher.tsx","components/custom/useSearchFilters.tsx","containers/user/RequireRoleContainer.tsx","components/custom/RequireRole.tsx","components/custom/validations.ts","utils/ValidationBuilder.ts","containers/user/RequirePermissionContainer.tsx","components/custom/RequirePermission.tsx","components/custom/InputSearchFilter.tsx","components/custom/InputPasteHandler.tsx","components/custom/useForm.tsx","components/custom/useOverlay.tsx","components/custom/useSignalR.tsx","components/custom/EChart.tsx","components/common/SignalManager.tsx","models/common.ts","models/identity.ts","models/index.ts","utils/index.ts","store/actions/graphql.ts","models/requirements.ts","utils/date-utils.ts","components/routes.tsx","store/jobs.ts","i18n.ts","utils/hooks.tsx","store/actions/admin.ts","store/actions/resources.ts","store/actions/profile.ts","store/user.ts","store/actions/jobs.ts","models/notifications.ts","store/notifications.ts","store/actions/notifications.ts","components/user/DynamicProperties.tsx","store/actions/utils.ts","store/actions/contractors.ts","store/requirements.ts","models/works.ts","models/resources.ts","store/actions/search.ts","utils/security.ts","utils/string-utils.ts","store/actions/documents.ts","store/actions/requirements.ts","store/actions/user.ts","utils/file-utils.ts","store/actions/app.ts","store/app.ts","utils/storage.ts","components/custom/Loading.tsx","store/actions/reports.ts","components/custom/BreadcrumbItem.tsx","components/custom/useWorkFormSettings.tsx","utils/expressions/index.ts","components/requirements/ViewRequirementHistory.tsx","models/jobs.ts","modules/ModuleManager.tsx","components/viewers/ImageViewer.tsx","components/viewers/PdfViewer.tsx","components/viewers/DocumentViewer.tsx","store/identity.ts","store/constants.ts","components/requirements/RequirementDocumentInfo.tsx","security/index.ts","AppHistory.ts","utils/key-utils.ts","containers/index.tsx","components/custom/Portal.tsx","components/custom/DataLoader.tsx","components/notifications/NotificationMessages.tsx","components/custom/useSearch.tsx","components/jobs/ManageJobDepartments.tsx","containers/jobs/ManageJobDepartmentsContainer.tsx","containers/HelpDeskSupportContainer.tsx","components/HelpDeskSupport.tsx","store/modules.ts","components/notifications/MessageIcon.tsx","components/notifications/NotificationMessageDisplayName.tsx","components/requirements/AcceptRequirement.tsx","containers/requirements/RejectRequirementContainer.tsx","components/requirements/RejectRequirement.tsx","components/requirements/ValidateAllRequirements.tsx","containers/requirements/ValidateAllRequirementsContainer.tsx","containers/notifications/ValidateRequirementsFromNotificationMessagesContainer.tsx","components/notifications/ValidateRequirementsFromNotificationMessages.tsx","containers/requirements/ViewRequirementHistoryContainer.tsx","components/notifications/NotificationMessageEffect.tsx","utils/expressions/parser.js","store/contractors.ts","store/admin.ts","store/index.ts","store/work.ts","Constants.ts","components/NavMenu.tsx","containers/NavMenuContainer.tsx","components/custom/RemoteHtml.tsx","containers/FooterContainer.tsx","components/Footer.tsx","components/Cookies.tsx","SessionChecker.tsx","components/Layout.tsx","components/admin/logs/LastLogs.tsx","components/samples/Chart.tsx","components/admin/charts/StorageChart.tsx","containers/admin/ModuleContainer.tsx","components/admin/Module.tsx","containers/requirements/ForceValidationResourceContainer.tsx","components/requirements/ForceValidationResource.tsx","components/requirements/ViewResourceHistory.tsx","components/contractors/EditContractor.tsx","containers/contractors/EditContractorContainer.tsx","store/machineries.ts","store/actions/machineries.ts","components/requirements/UploadRequirement.tsx","containers/requirements/UploadRequirementContainer.tsx","containers/requirements/ValidateRequirementContainer.tsx","components/requirements/ValidateRequirement.tsx","containers/requirements/AddRequirementIncidenceContainer.tsx","components/requirements/AddRequirementIncidence.tsx","containers/requirements/AddRequirementNoteContainer.tsx","components/requirements/AddRequirementNote.tsx","containers/requirements/ViewRequirementIncidencesContainer.tsx","components/requirements/ViewRequirementIncidences.tsx","containers/requirements/ViewRequirementNotesContainer.tsx","components/requirements/ViewRequirementNotes.tsx","store/actions/workers.ts","store/workers.ts","containers/resources/ResourcePhotoContainer.tsx","components/requirements/EditRequirements.tsx","resources/ResourcePhoto.tsx","components/requirements/ViewRequirementValidations.tsx","containers/requirements/EditRequirementsContainer.tsx","components/machineries/MachineryRequirements.tsx","components/custom/useContractorFromAppUser.tsx","containers/machineries/EditMachineryFormContainer.tsx","components/machineries/EditMachineryForm.tsx","components/machineries/MachineryRoutes.tsx","components/machineries/EditMachinery.tsx","containers/machineries/EditMachineryContainer.tsx","components/workers/WorkerRequirements.tsx","components/workers/EditWorkerForm.tsx","containers/workers/EditWorkerFormContainer.tsx","components/workers/EditWorker.tsx","components/workers/WorkerRoutes.tsx","containers/workers/EditWorkerContainer.tsx","containers/jobs/JobAuthorizeFormContainer.tsx","components/jobs/JobAuthorizeForm.tsx","containers/jobs/JobRevokeFormContainer.tsx","components/jobs/JobRevokeForm.tsx","components/jobs/JobFinalizeForm.tsx","containers/jobs/JobFinalizeFormContainer.tsx","containers/jobs/JobReactivateFormContainer.tsx","components/jobs/JobReactivateForm.tsx","containers/jobs/JobStatusContainer.tsx","components/jobs/JobStatus.tsx","components/jobs/JobPanelActions.tsx","containers/jobs/JobHasResourceRequirementsContainer.tsx","components/jobs/JobHasResourceRequirements.tsx","components/jobs/JobRequirementsSubContractor.tsx","containers/jobs/JobRequirementsContainer.tsx","components/jobs/JobRequirements.tsx","containers/user/JobLoader.tsx","components/contractors/CreateContractorInvitation.tsx","containers/contractors/CreateContractorInvitationContainer.tsx","components/jobs/JobData.tsx","containers/jobs/JobDataContainer.tsx","components/jobs/JobAddContractor.tsx","containers/jobs/JobAddContractorContainer.tsx","components/jobs/EditJobHasContractor.tsx","components/common/ResourceStatus.tsx","containers/jobs/EditJobHasContractorContainer.tsx","containers/jobs/EditJobHasContractorFieldsContainer.tsx","components/jobs/JobContractors.tsx","components/jobs/EditJobHasContractorFields.tsx","containers/jobs/JobContractorsContainer.tsx","components/common/CountryRegionSelect.tsx","components/jobs/JobRequestContractor.tsx","containers/jobs/JobRequestContractorContainer.tsx","components/jobs/ProcessContractorRequest.tsx","components/jobs/JobContractorRequests.tsx","containers/jobs/JobContractorRequestsContainer.tsx","containers/jobs/JobContractorSubRequestsContainer.tsx","components/jobs/JobContractorSubRequests.tsx","containers/jobs/JobInformationLoadedContainer.tsx","components/jobs/JobInformationLoaded.tsx","components/jobs/list/JobCard.tsx","containers/jobs/JobInfoCardContainer.tsx","components/jobs/JobInfoCard.tsx","containers/jobs/JobInformationLoadedControlContainer.tsx","components/jobs/JobInformationLoadedControl.tsx","containers/jobs/JobNotifyInformationLoadedContainer.tsx","components/jobs/ManageJobMachineries.tsx","components/jobs/JobNotifyInformationLoaded.tsx","containers/jobs/ManageJobMachineriesContainer.tsx","containers/jobs/AddJobHasMachineryContainer.tsx","components/machineries/AddJobHasMachinery.tsx","components/machineries/SelectJobHasMachinery.tsx","containers/jobs/SelectJobHasMachineryContainer.tsx","components/jobs/EditJobHasWorker.tsx","containers/jobs/EditJobHasWorkerContainer.tsx","components/jobs/ManageJobWorkers.tsx","containers/jobs/ManageJobWorkersContainer.tsx","components/jobs/JobAddWorker.tsx","containers/jobs/JobAddWorkerContainer.tsx","containers/jobs/UploadRequirementContainer.tsx","components/jobs/UploadRequirement.tsx","containers/jobs/CreateRequirementContainer.tsx","components/jobs/CreateRequirement.tsx","components/jobs/JobRoutes.tsx","containers/jobs/JobRoutes.tsx","containers/user/JobContainer.tsx","components/jobs/JobComponent.tsx","components/admin/JobForm.tsx","components/user/Jobs.tsx","containers/user/JobsContainer.tsx","components/contractors/ViewContractorInvitations.tsx","containers/contractors/ViewContractorInvitationsContainer.tsx","components/contractors/AddContractor.tsx","components/contractors/RestrictedContractors.tsx","components/contractors/ManageContractors.tsx","components/contractors/RestrictContractor.tsx","containers/contractors/ManageContractorsContainer.tsx","containers/contractors/ManageSubcontractorsContainer.tsx","components/contractors/ManageSubcontractors.tsx","containers/contractors/ContractorRequirementsContainer.tsx","components/contractors/ContractorRequirements.tsx","components/contractors/ManageSubContractorRequests.tsx","containers/contractors/ManageSubContractorRequestsContainer.tsx","components/contractors/ContractorModule.tsx","components/notifications/NotificationMessage.tsx","components/notifications/NotificationsCenter.tsx","containers/notifications/NotificationsCenterContainer.tsx","components/user/SelectWork.tsx","containers/user/SelectWorkContainer.tsx","models/reports.ts","components/custom/useSynchronizedDispatch.tsx","components/reports/ReportOutputTableComponent.tsx","components/reports/ReportOutputBarChartComponent.tsx","components/reports/ReportOutputComponent.tsx","containers/reports/ReportContainer.tsx","components/work/accessControl/Machineries.tsx","components/reports/ReportComponent.tsx","components/work/accessControl/Workers.tsx","components/work/WorkAccessControlRoutes.tsx","containers/work/WorkAccessControl.tsx","components/work/WorkAccessControl.tsx","components/user/Work.tsx","containers/user/WorkContainer.tsx","containers/user/WorkLoaderContainer.tsx","components/user/WorkLoader.tsx","containers/work/WorkReportsContainer.tsx","components/work/WorkReports.tsx","components/work/WorkSubContractorRequests.tsx","containers/work/WorkSubContractorRequestsContainer.tsx","components/machineries/RestrictMachinery.tsx","components/machineries/RestrictedMachineries.tsx","components/machineries/MachineryJobsDialog.tsx","containers/machineries/MachineryJobsDialogContainer.tsx","components/machineries/ViewMachineries.tsx","containers/machineries/ViewMachineriesContainer.tsx","components/workers/WorkerJobsDialog.tsx","containers/workers/WorkerJobsDialogContainer.tsx","containers/workers/ProfessionalQualificationsDialogContainer.tsx","components/workers/ProfessionalQualificationsDialog.tsx","components/workers/RestrictWorker.tsx","components/workers/RestrictedWorkers.tsx","components/workers/ViewWorkers.tsx","store/documents.ts","containers/workers/ViewWorkersContainer.tsx","models/documents.ts","components/documents/DocumentLogs.tsx","components/documents/FolderForm.tsx","components/documents/UploadFileForm.tsx","components/documents/EditDocumentForm.tsx","components/documents/ManageDocuments.tsx","containers/documents/ManageDocumentsContainer.tsx","containers/work/WorkDocumentsContainer.tsx","components/work/WorkDocuments.tsx","containers/users/ManageWorkerAppUserContainer.tsx","components/users/ManageWorkerAppUser.tsx","components/users/WorkerForm.tsx","containers/users/WorkUsersContainer.tsx","components/users/WorkUsers.tsx","containers/work/WorkRequirementDocumentContainer.tsx","components/requirements/ViewRequirementDocument.tsx","containers/contractors/EditContractorFormContainer.tsx","components/contractors/EditContractorForm.tsx","components/contractors/CreateWorkContractorAppUser.tsx","components/common/ManageRelations.tsx","components/contractors/WorkContractorAccessData.tsx","containers/contractors/WorkContractorAccessDataContainer.tsx","components/contractors/ContractorRoutes.tsx","containers/communications/CommunicationFormContainer.tsx","components/communications/CommunicationForm.tsx","components/communications/CommunicationsList.tsx","containers/communications/CommunicationsListContainer.tsx","containers/communications/ValidateCommunicationContainer.tsx","components/communications/ValidateCommunication.tsx","containers/communications/CurrentCommunicationsContainer.tsx","components/user/Module.tsx","components/communications/CurrentCommunications.tsx","containers/user/UserModuleContainer.tsx","store/actions/identity.ts","components/auth/LoginPanel.tsx","containers/auth/LoginContainer.tsx","components/guest/Home.tsx","containers/HomeContainer.tsx","components/Home.tsx","components/admin/DocumentTypeForm.tsx","containers/admin/AdminDocumentTypesContainer.tsx","components/admin/AdminDocumentTypes.tsx","components/admin/UserForm.tsx","components/admin/AdminUsers.tsx","containers/admin/AdminUsersContainer.tsx","containers/admin/AdminLoaderContainer.tsx","components/admin/AdminLoader.tsx","components/admin/AdminRoutesWrapper.tsx","containers/admin/AdminWorkLoader.tsx","components/admin/WorkspaceForm.tsx","components/admin/AdminWorkWorkspaces.tsx","components/admin/WorkShiftForm.tsx","components/admin/AdminWorkShifts.tsx","components/admin/WorkForm.tsx","components/admin/AdminWorkUsers.tsx","containers/admin/AdminWorkUsersContainer.tsx","components/admin/WorkI18NResourceForm.tsx","components/admin/AdminWorkI18NResources.tsx","components/admin/ActivityTypeForm.tsx","components/admin/AdminActivityType.tsx","components/admin/LegalFormForm.tsx","components/admin/AdminLegalForm.tsx","components/admin/WorkFunctionForm.tsx","components/common/ManageManyToManyRelations.tsx","components/admin/AdminWorkFunction.tsx","components/admin/WorkToolbar.tsx","components/admin/MachineryTypeForm.tsx","components/admin/MachinerySubTypeForm.tsx","components/admin/AdminMachineryType.tsx","components/admin/WorkerDocumentTypeForm.tsx","components/admin/AdminWorkerDocumentType.tsx","components/admin/WorkerTypeForm.tsx","components/admin/AdminWorkerType.tsx","components/admin/EditWork.tsx","containers/admin/EditWorkContainer.tsx","containers/admin/AdminWorksContainer.tsx","components/admin/AdminWorks.tsx","components/admin/devel/GraphQlUi.tsx","components/admin/DepartmentForm.tsx","containers/admin/AdminWorkDepartmentsContainer.tsx","components/admin/AdminWorkDepartments.tsx","components/admin/PermissionForm.tsx","containers/admin/AdminWorkPermissionsContainer.tsx","components/admin/AdminWorkPermissions.tsx","components/common/ManagePolicies.tsx","containers/admin/UserFormContainer.tsx","components/admin/WorkerForm.tsx","containers/admin/AdminWorkWorkersContainer.tsx","components/admin/AdminWorkWorkers.tsx","components/admin/PropertyTypeForm.tsx","components/admin/PropertyGroupTypeForm.tsx","components/admin/PropertyGroupTypes.tsx","containers/admin/PropertyGroupTypesContainer.tsx","components/admin/AdminWorkConfiguration.tsx","containers/admin/AdminWorkConfigurationContainer.tsx","components/contractors/RegisterContractor.tsx","containers/contractors/RegisterContractorContainer.tsx","containers/identity/ResetPasswordContainer.tsx","components/identity/RecoverPassword.tsx","components/user/ChangePassword.tsx","containers/user/ChangePasswordContainer.tsx","components/user/UserConfiguration.tsx","containers/user/UserConfigurationContainer.tsx","components/admin/requirementTypes/EditRequirementTypeDependencies.tsx","containers/admin/requirementTypes/EditRequirementTypeDependenciesContainer.tsx","components/admin/requirementTypes/RequirementConstants.ts","components/admin/requirementTypes/EditRequirementTypeExpression.tsx","containers/admin/requirementTypes/EditRequirementTypeExpressionContainer.tsx","components/admin/requirementTypes/EditRequirementTypeDocumentRestrictions.tsx","containers/admin/requirementTypes/EditRequirementTypeDocumentRestrictionsContainer.tsx","components/admin/requirementTypes/RequirementTypeSuggestions.tsx","containers/admin/requirementTypes/RequirementTypeSuggestionsContainer.tsx","containers/admin/requirementTypes/RequirementTypeValidationHolderContainer.tsx","components/admin/requirementTypes/RequirementTypeValidationHolders.tsx","components/admin/requirementTypes/RequirementTypeValidationHolderForm.tsx","containers/admin/requirementTypes/RequirementTypeValidationHoldersContainer.tsx","components/admin/AdminWorkRequirements.tsx","containers/admin/AdminWorkRequirementsContainer.tsx","components/admin/NotificationTemplateForm.tsx","containers/admin/AdminNotificationTemplatesContainer.tsx","components/admin/AdminNotificationTemplates.tsx","components/admin/NotificationMessageForm.tsx","containers/admin/AdminWorkMessagesContainer.tsx","components/admin/AdminWorkMessages.tsx","containers/admin/AdminWorkNotificationsContainer.tsx","components/admin/AdminWorkNotifications.tsx","components/admin/FieldValidationForm.tsx","containers/admin/AdminWorkValidationsContainer.tsx","components/admin/AdminWorkValidations.tsx","containers/admin/contractors/ManageContractorSettingsContainer.tsx","components/admin/contractors/ManageContractorSettings.tsx","containers/admin/machineries/ManageMachinerySettingsContainer.tsx","components/admin/machineries/ManageMachinerySettings.tsx","containers/admin/workers/ManageWorkerSettingsContainer.tsx","components/admin/workers/ManageWorkerSettings.tsx","containers/admin/jobs/ManageJobSettingsContainer.tsx","components/admin/jobs/ManageJobSettings.tsx","containers/admin/modules/ManageWorkModulesContainer.tsx","components/admin/modules/ManageWorkModules.tsx","components/admin/events/EventTriggerForm.tsx","containers/admin/events/ManageWorkEventsContainer.tsx","components/admin/events/ManageWorkEvents.tsx","containers/modules/ModuleViewContainer.tsx","components/modules/ModuleView.tsx","modules/index.ts","containers/modules/ModuleViewRedirectionContainer.tsx","components/ContractorProfile.tsx","containers/ContractorProfileContainer.tsx","containers/WorkerProfileContainer.tsx","components/WorkerProfile.tsx","containers/UserProfileContainer.tsx","components/UserProfile.tsx","App.tsx","registerServiceWorker.ts","index.tsx","store/configureStore.ts"],"names":["connect","state","work","user","identity","action","children","useState","hasPermissions","setHasPermissions","evalPermission","p","roles","includes","expression","evalAndParse","workId","id","split","undefined","find","r","policies","useEffect","perms","permissions","filter","length","usePermissions","props","opts","hasPermission","ctx","S","security","explicit","moduleManager","React","values","setValues","setId","permissionCtx","requirePermission","name","key","defaultValue","defaultPermission","res","debug","console","log","default","initialize","keys","Object","k","v","perm","defaults","Date","getTime","get","getId","dependencies","isGestor","isContractor","useEvents","events","dispose","callback","current","c","on","push","fire","args","handler","ButtonSet","className","F","label","labelClassName","FieldsBox","collapsible","closed","title","containerClassName","isDown","setIsDown","classNames","onClick","b","FormField","errorMessage","FloatField","htmlFor","G","signals","fieldIsVisible","InlineInputText","style","object","field","save","loading","useLoading","update","wrap","ev","target","value","type","onChange","render","InlineSelect","options","optionLabel","optionValue","InputGroup","suffix","LoadingBox","Loading","message","NotificationBox","t","useTranslation","notification","NotificationType","ERROR","severity","text","NotificationsBox","notifications","map","n","R","TogglePanel","isOpen","setIsOpen","_","a","titleIcon","bodyClassName","__pages","useSearchPaginate","prevDependencies","total","page","search","data","limit","DEFAULT_LIMIT","setData","currentLimit","setCurrentLimit","sortBy","setSortBy","useMessage","initialized","filters","pageValue","actualLimit","paginate","normalizeKeys","resp","set","persist","hasValue","rawData","lazy","exportToXls","filename","useI18N","searchExportToXls","i18next","language","downloadBlob","exportFilename","renderLoading","renderBox","asc","doSearch","useSearchFirst","messages","InputEventDispatcher","dispatchEvent","delay","ts","sended","this","enqueue","bind","setTimeout","event","FilterInputTextOnEnter","setValue","onKeyPress","e","useSearchFilters","getLocalStorageKey","setFilters","storageGet","filterValues","setFilterValues","temporaryFilterValues","setTemporaryFilterValues","defaultFilterValues","setDefaultFilterValues","error","setError","searchOrder","setSearchOrder","propagate","buttonRef","canApplyFilter","f","excludeRole","hasRole","requireRole","storeKey","getUserFilters","rawFs","fs","defaultValues","UserSearchFilterType","REFERENCE","currentYear","getFullYear","currentMonth","getMonth","storageSet","applyFilters","setShowPanel","renderFilterRow","filterComponent","BOOL","checked","awaitForApply","TEXT","MULTI_REFERENCE","referenceValues","references","filterValue","newValue","x","fv","preventDefault","stopPropagation","multiple","sort","shouldTranslate","localeCompare","i","DATE","DATE_RANGE","oldValue","renderFilterComponent","help","icon","tooltip","clearFilters","panelRef","hide","closePanel","color","awaitForDoSearch","showPanel","RenderAsButton","hasFilters","toggle","ref","Component","signature","JSON","stringify","returnSearchOrderToFalse","mergeFilters","merge","setFilter","renderAsButton","instance","oneOf","role","exclude","o","MAIL_REGEXP","validations","minLength","min","s","match","pre","notEmpty","trim","email","validate","prop","errors","fn","all","ValidationBuilder","i18n","build","resourceType","fields","fieldValidations","custom","createFieldValidation","msg","validation","add","V","condition","property","ownProps","permission","InputSearchFilter","searchInput","filterKey","dispatcher","focus","useKeyListener","keyCtrl","handle","append","placeholder","useInputSearch","onInput","InputPasteHandler","containerEl","handlePasteEvent","w","window","clipboardData","getData","onPaste","addEventListener","removeEventListener","useForm","initialValues","setLoading","form","useFormik","readonly","onSubmit","ok","validateOnChange","validateOnMount","setErrors","hasError","isFormFieldValid","getFormErrorMessage","toLowerCase","handleChange","parseFloat","hasChanges","comp","floatField","suffixField","errorBox","inputs","names","containerStyle","readOnly","onBlur","autoFocus","input","setDateFromEvent","setFieldValue","DateUtils","editor","onTextChange","htmlValue","checkBox","disabled","autoCompleteTextArea","inputOpts","suggestions","autoComplete","completeMethod","textarea","resize","minHeight","rows","calendar","locale","currentLocale","dateFormat","date","utc","UTC","getDate","showIcon","select","isSimple","blank","blankText","concat","iw","obj","desc","getOwnPropertyDescriptor","Boolean","writable","isWritable","resolve","multiselect","span","clear","setFieldValues","resetForm","isLoading","isInvalid","isValid","observe","observeValue","handleSubmit","useOverlay","minWidth","requireData","show","__connections","__connectionHandlers","startSignalNotifications","signalConnection","start","useSignalR","endpoint","conn","method","signalR","withUrl","withAutomaticReconnect","rawMessage","handlers","h","onclose","getConnection","uniqueKey","registerHandler","onMessage","unregisterHandler","EChart","canvasRef","chartInstance","domElement","parent","parentElement","parseInt","getBoundingClientRect","height","chart","echarts","setOption","parsePredicate","source","Function","SignalManager","hiddenFields","parse","atob","raw","signal","when","createSources","visibilitySignals","Roles","countyToNode","y","regionToNode","counties","ct","countryToNode","regions","countriesToNode","EventTriggerType","getMachineryName","m","code","licenseNumber","prefixLicenseNumber","suffixLicenseNumber","getEventTriggerTypes","BeforeUpdate","BeforeCreate","BeforeUpdateOrCreate","AfterUpdate","AfterCreate","AfterUpdateOrCreate","__d","unique","uniqueIndexes","redirectToExternal","url","location","href","redirectToExternalNewTab","open","goBack","history","redirectTo","reload","ms","Promise","getGraphqlError","op","flatten","reduce","acc","downloadFileFromUrl","link","document","createElement","download","body","appendChild","click","removeChild","getIntParams","getIntQueryParameters","parametersArr","startsWith","substr","parameters","isNaN","getQueryParameter","parameterName","parametersStr","nameOf","formatFileSize","formatLocalDate","formatMinutes","timeToMinutes","format","interpolate","strConcat","strJoin","zeroPad","zeroRightPad","onNotification","Hooks","KeyCodes","keyIsEnter","_client","_lastUsedName","getClient","uri","ApolloClient","cache","InMemoryCache","q","query","variables","client","gql","fetchPolicy","noCache","returnPath","parts","mapEvery","parseVariables","getTimezoneOffset","fromUtc","parsedVariables","mutate","mutation","RequirementTypeKind","RequirementTargetType","RequirementValidationType","RequirementStatusFlag","RequirementStatusTypes","RequirementTypeDependencyType","requirementTargetTypes","Contractor","JobHasContractor","Machinery","JobHasMachinery","Worker","JobHasWorker","JobHasDepartment","Job","requirementCanUpload","targetType","isContractorResource","indexOf","isJobContractorResource","status","isCurrent","requirementStatusRestriction","statusTypeId","NOT_LOADED","NOT_VALIDATED","PENDING","VALIDATED","requirementType","requireJobInformationAccess","hasAccessJobInformation","isWorker","requirementCanBeValidated","fulfillDocumentIsFile","userIsValidationHolder","holder","appUserId","departmentId","departments","workFunctionId","workFunctions","jobResponsible","getWorkerIds","mainDepartment","responsibleId","userCanValidateRequirement","validationHolders","FreeRequirementType","parseDate","sep","isDmy","dateIsLessOrEqual","compareDates","getHours","getMinutes","getSeconds","dateIsTodayOrFuture","today","setHours","patterns","d","toString","toUpperCase","join","formatFullTime","setTime","minutes","hours","Math","floor","mints","toUtc","off","endsWith","substring","formatFromUtc","formatDateTimeFromUtc","toIso8601","isDate","dateISTodayOrFuture","strNow","interval","oneDayMs","toQuery","goToJobs","goToJob","jobId","goToJobCard","jobCardRoute","goToJobDocumentation","goToJobAddContractor","parentId","goToJobCreateRequirement","resourceId","statusType","jobCreateRequirementRoute","goToJobResourceCreateRequirement","jobCreateResourceRequirementRoute","goToJobContractors","loadInvitations","jobContractorsRoute","goToJobSubContractors","goToJobMachineries","jobMachineriesRoute","goToJobHasMachinery","jobHasMachineryId","goToJobNotifyInformationLoaded","jobNotifyInformationLoadedRoute","goToJobRequirements","jobRequirementsRoute","goToCommunications","goToJobWorkers","jobWorkersRoute","goToJobWorker","jobHasWorkerId","routeJobHasWorker","goToJobInformationLoaded","goToJobInformationLoadedControl","jobInformationLoadedControlRoute","goToJobEditContractor","jobHasContractorId","jobHasContractorRoute","goToJobEditContractorRequirements","jobHasContractorRequirementsRoute","goToJobEditMachineryRequirements","jobHasMachineryRequirementRoute","goToJobEditWorkerRequirements","jobHasWorkerRequirementsRoute","goToMachineryRequirements","machineryId","machineryRequirementsRoute","goToMachineries","machineriesRoute","goToMachinery","machineryRoute","goToWorkerRequirements","workerId","workerRequirementsRoute","goToWorker","workerRoute","goToWorkers","workersRoute","goToContractors","contractorsRoute","goToContractor","contractorId","contractorRoute","goToContractorRequirements","contractorRequirementsRoute","goToContractorAccessData","contractorAccessDataRoute","subContractorsRoute","goToSubContractors","jobHasMachineryRoute","jobHasWorkerRoute","jobInformationLoadedRoute","Types","plainActions","getJobStatus","JobsActions","saveJobStatus","jobNotifyInformationLoaded","createContractorRequest","processContractorRequest","getJobContractorRequests","getJob","activateJobHasContractor","saveJobHasContractor","removeJobHasContractor","removeJobHasContractorRequest","removeJobHasContractorInvitation","deleteJobHasContractor","deleteJobHasWorker","deleteJobHasMachinery","searchContractors","getJobContractors","getJobContractorsViewModel","getJobHasContractor","getJobDepartments","saveJobHasDepartment","removeJobHasDepartment","getJobHasMachineries","getJobHasMachinery","activateJobHasMachinery","saveJobHasMachinery","searchMachineries","removeJobHasMachinery","getJobHasWorker","getJobHasWorkers","searchWorkers","activateJobHasWorker","saveJobHasWorker","removeJobHasWorker","getJobLogs","actionCreators","clearSelectedJob","dispatch","ClearSelectedJob","clearSelectedContractor","ClearSelectedContractor","clearSelectedJobHasContractor","ClearSelectedJobHasContractor","selectJobHasContractor","jobHasContractor","SelectJobHasContractor","loadJob","N","startLoading","OnJobLoaded","parseJob","job","stopLoading","saveJob","saveResp","success","reducer","incomingAction","LocationChange","payload","pathname","selectedJob","selectedJobHasContractor","es","require","en","it","createOriginalResources","translation","loadResources","resources","navigator","langCookie","cookie","item","use","initReactI18next","init","lng","interpolation","escapeValue","getDataByLanguage","installResources","moduleKeys","newResources","l","newLangResources","languages","defaultLanguage","addLocale","firstDayOfWeek","dayNames","dayNamesShort","dayNamesMin","monthNames","monthNamesShort","__consumedNotifications","DEFAULT_TOAST_SEVERITY","useToast","life","summary","detail","consumedNotifications","useMemoized","useDialogs","dialogs","setDialogs","dialogData","setDialogData","cnf","setCnf","confirm","dialog","onShow","renderConfirm","visible","acceptLabel","confirmText","rejectLabel","cancelText","accept","onConfirm","reject","onCancel","content","header","showHeader","maskClassName","maximized","onHide","closable","draggable","modal","showCloseFooter","showFromEvent","clearConfirm","getState","useFormDialog","showAdd","setShowAdd","showEdit","setShowEdit","renderNormal","addClassName","width","addTitle","editClassName","editTitle","portal","container","renderFooter","onSaveClicked","setEditError","newerrors","edit","clearErrors","Footer","currentEdit","useObjectState","inhibitOnChange","parseAsFloat","parseAsInt","fieldName","reset","eventOrValue","setFloat","setInt","lock","wrapRender","optsArgs","ctxIsKey","renderModal","stop","dateDelegate","dateTimeDelegate","booleanDelegate","createDelegate","useDataTable","currentSortField","setCurrentSortField","currentSortOrder","setCurrentSortOrder","wrapTooltip","renderColumn","str","charAt","slice","delegateF","delegate","sortField","sortKey","sortable","headerClassName","renderAction","actions","actionIsMultiple","index","uniqueId","command","getElementById","model","renderMultipleAction","headerStyle","onRowClicked","doSort","sortOrder","onSort","sortMode","denyLocalSort","rowHover","selectionMode","selection","onSelectionChange","scrollHeight","tableStyle","onRowClick","emptyMessage","scrollable","resizableColumns","paginator","rowsPerPageOptions","totalRecords","paginatorTemplate","currentPageReportTemplate","columns","useTreeTable","nodes","setNodes","expandedKeys","setExpandedKeys","createKey","__typename","parentProperty","createNode","prepareChildrenNodes","node","childrenProperty","ch","prepareNodes","parentKey","stack","nodesAll","availableIds","count","pop","newNode","sortProperty","splice","expand","_expandedKeys","prepareFlatNodes","idProperty","expander","columnResizeMode","showGridlines","stripedRows","onToggle","selectable","useConfirm","originalEvent","performReject","performAccept","confirmPopup","useStringState","setState","setFromEvent","useNumberState","Number","useBooleanState","setFromBoolean","useResolveName","setCache","keyProperty","nameProperty","resolvedValue","translate","defaultName","AUTO_CLEAR_MILLIS","setSuccess","successMessage","setSuccessMessage","setFromOption","result","overrideOpts","isError","autoClear","clearAfterMillis","renderIfError","isSuccess","getError","useError","useRemoteData","provider","finalParameters","then","hasValues","usePaginator","currentPage","setCurrentPage","rowNumbers","currentRows","setCurrentRows","first","onPageChange","doOnChange","onExport","useResolveCountryAndRegion","countries","countryId","regionId","countyId","country","region","county","isUseKeyListenerOpts","rawOpts","shouldHandleEvent","keyCode","ctrlKey","handleKey","useHideBodyScrollbar","classList","remove","useScheduler","schedule","useCallbackState","initialValue","_setState","callbackQueue","forEach","cb","useDebounce","debouncedValue","setDebouncedValue","clearTimeout","useDispatcher","sent","nts","onEvent","deps","prev","getEventTriggers","saveEventTrigger","getLogs","logs","getUserById","getUsers","saveUser","removeUser","getWorks","getWorkResources","getWorkDepartments","saveDepartment","inputData","department","ensureType","getWork","saveWork","saveWorkspace","workspace","properties","formatProperty","removeWorkspace","saveWorkShift","workShift","removeWorkShift","getDocumentTypes","saveDocumentType","dt","doc","removeDocumentType","associateAppUserToWorker","forceNew","loadWorkPermissions","saveWorkPermission","removeWorkPermission","getJobPropertyGroups","getPropertyGroupTypes","savePropertyGroupType","description","containerType","styleClassName","objectType","isActive","isInternal","hidable","mandatory","removePropertyGroupType","savePropertyType","typeId","propertyOrder","selectOptions","removePropertyType","getWorkRequirementGroups","requirementTargetType","filterRequirementType","g","requirementTypes","getRequirementType","saveWorkRequirementGroup","saveWorkRequirementType","removeWorkRequirementTypeDependency","requirementTypeDependencyId","saveRequirementTypeSuggestion","removeRequirementTypeSuggestion","saveRequirementTypeValidationHolder","removeRequirementTypeValidationHolder","saveWorkRequirementTypeDependency","removeRequirementTypeDocumentRestriction","requirementTypeId","restrictionId","saveRequirementTypeDocumentRestriction","getNotificationTemplates","saveNotificationTemplate","removeNotificationTemplate","getNotificationMessages","saveNotificationMessage","removeNotificationMessage","getFieldValidations","removeFieldValidation","saveFieldValidation","saveWorkerSettings","saveMachinerySettings","saveContractorSettings","saveJobSettings","saveWorkHasModule","saveMachineryType","machineryType","removeMachineryType","saveMachinerySubType","machinerySubType","removeMachinerySubType","saveWorker","worker","workspaces","getWorkers","rrhh","fullName","surname","getWorkI18NResources","saveWorkI18NResource","workI18NResource","getActivities","saveActivity","activityType","removeWorker","removeWorkI18NResource","removeActivity","getLegalForms","saveLegalForm","legalForm","removeLegalForm","getWorkerDepartments","getWorkerHasWorkspaces","getWorkerWorkFunctions","work_functions","getDepartmentWorkers","workers","getWorkFunctionWorkers","work_function","saveDepartmentHasWorker","saveWorkerHasWorkspace","workspaceId","removeWorkerHasWorkspace","saveWorkFunctionHasWorker","removeDepartmentHasWorker","removeWorkFunctionHasWorker","getWorkspaces","getDepartments","addDepartmentPolicy","policy","removeDepartmentPolicy","getWorkFunctions","saveWorkFunction","workFunction","removeWorkFunction","getMachineryTypes","getWorkerDocumentTypes","saveWorkerDocumentType","workerDocumentType","removeWorkerDocumentType","getWorkerTypes","saveWorkerType","workerType","removeWorkerType","onInitialize","OnInitialize","loadWorks","UserActions","works","parseWork","createHelpDeskItem","ResourceActions","changePassword","changeUserPassword","recoverPassword","getJobs","getJobReferences","removeJob","saveCommunication","getCommunicationReceivers","getCommunication","loadContractors","contractors","ContractorsLoaded","loadMessages","validateCommunication","ValidateCommunication","selectWork","redirect","App","getFixedT","I18n","workI18NResources","Modules","initializeWork","getReports","reports","SelectWorkResources","activityTypes","activities","legalForms","machineryTypes","workerTypes","workerDocumentTypes","workShifts","propertyGroupTypes","contractTypes","preventiveResources","requirementGroups","requirementStatusTypes","requirementValidationTypes","resourceStatusTypes","SelectWork","isGestorOrWorker","communications","PendingCommunications","version","contractorRequests","searchTerm","contractorRequest","saveJobHasContractorRequest","processJobHasContractorRequest","contractor","jobHasDepartment","jobHasDepartmentId","sourceContractorId","targetContractorId","contractorName","startDate","getJobHasContractorAppUsers","appUsers","term","machineryTypeId","machineries","relationId","machinerySubTypeId","machineryName","machineryCode","machineryPrefixLicenseNumber","machineryLicenseNumber","machinerySuffixLicenseNumber","contractTypeId","endDate","remarks","workShiftId","activityTypeId","preventiveResourceId","parseProperties","MessageType","messageTypes","MESSAGE","JOB_HAS_CONTRACTOR_REQUEST","PENDING_REQUIREMENT","JOB_CREATED","SUBCONTRACTOR_REQUEST","JOB_INFORMATION_LOADED","REQUIREMENT_VALIDATED","REQUIREMENT_INCIDENCE","INVALID_ITA","SUBCONTRACTOR_REQUEST_ACCEPTED","SUBCONTRACTOR_REQUEST_REJECTED","JOB_FINALIZED","RESOURCE_AUTHORIZED","RESOURCE_REJECTED","JOB_AUTHORIZED","JOB_REVOKED","REQUIREMENT_EXPIRED","MODULE_MESSAGE","REQUIREMENT_NOTE","REQUIREMENT_NEAR_EXPIRATION","parseMessage","__icons","translateNotificationIcon","messageTitle","notificationType","resolveNotification","resolveNotifications","ids","excludeMatchingNotifications","createNotification","notif","RemoveNotificationAction","onComplete","NotificationAdd","NotificationSuccess","ClearErrorsAction","LOADING","StopLoadingAction","removeNotification","addMessage","WorkId","OnMessage","selectedWork","filteredMessages","RELOAD_NOTIFICATIONS","SetMessagesAction","clearMessage","Actions","ClearMessage","clearMessages","ClearMessages","notifs","SUCCESS","DynamicProperty","labelClass","tooltipKey","renderTooltip","mouseTrack","mouseTrackLeft","PropertyTypes","inputId","BOOLTEXT","textPropertyName","SELECT","findProperty","groupId","propertyGroupTypeId","valueObj","DynamicPropertiesGroup","groupClassName","group","objectRelationProperty","PropertyGroupObjectType","JobHasContractorRequest","Workspace","findPropertyByGroup","styleObj","DynamicProperties","propertyGroup","groups","hideContractorProperties","inline","embedPortal","POST","fetch","headers","json","statusText","parseProperty","excludeProperties","includeProperties","include","ints","createContractorInvitation","sendContractorInvitation","registerContractorInvitation","getWorkConstants","getContractorInvitations","getContractorInvitation","token","contractorInvitation","getContractors","paginateOpts","getContractorFromAppUser","getJobHasContractorFromAppUser","getJobHasContractors","getJobHasContractorFromId","getContractor","saveContractor","getSubContractorRequestsAsWorker","getSubContractorRequestsAsTarget","saveSubContractorRequest","inputRequest","request","acceptSubContractorRequest","subContractorRequestId","reason","rejectSubContractorRequest","removeContractorAppUser","userId","createWorkContractorAppUser","getWorkUsers","users","getContractorAppUsers","invalidateContractor","reactivateContractor","restrictContractor","legalFormId","providerCode","contractorContactPerson","contractorEmail","contractorPhone","applicantName","applicantEmail","removeRestrictedContractor","createFreeRequirement","RequirementActions","fulfillRequirement","getRequirement","getRequirementsFromResources","getRequirements","getRequirementIncidences","getRequirementNotes","saveRequirementIncidence","saveRequirementNote","saveRequirementStatusNote","validateRequirement","forceResourceStatus","requirementMeetsDependencies","removeRequirementFile","removeFreeRequirement","JobEncodingType","parsePropertyGroupType","pg","settings","settingsObj","contextData","contextDataObj","isJobPropertyGroupType","isJobHasContractorPropertyGroupType","isMachineryPropertyGroupType","isWorkerPropertyGroupType","isWorkspacePropertyGroupType","isContractorWorkerPropertyGroupType","isRRHHPropertyGroupType","NotificationMessageAction","AllPropertyTypes","getNotificationMessageActions","CreateJob","JobAssignContractor","SubContractorRequestCreate","SubContractorRequestAccept","SubContractorRequestReject","JobInformationLoaded","JobFinalized","JobAuthorized","JHCAuthorized","JHWAuthorized","JHMAuthorized","JHCRejected","JHWRejected","JHMRejected","ReqExpired","NotifyRequirementExpirationWithinTolerance","ReqIncidence","ReqFulfilled","ReqValidated","ModuleMessage","RequirementNote","JobRequirementNote","JobAssignImpliedRSO","JobAssignMainRSO","JobAssignMedicalDepartment","JobAssignEnvironmentDepartment","JobContractorInvitation","NotifyUnauthorizedJob","NotifyAuthorizedJob","NotifyJobReopen","ITAWorkerNotFound","IrregularityCreated","CorrectiveMeasureLoaded","CorrectiveMeasureContractorLoaded","CorrectiveMeasureValidated","CorrectiveMeasureContractorValidated","CorrectiveMeasureRejected","CorrectiveMeasureContractorRejected","IrregularityModified","JobEvaluationsPending","GeneralEvaluationsPending","NotifyRequirementExpiration","NotifyJobContractorStart","UploadedOrModifiedDocumentInDownloadArea","NotifyCreatedOrChangedFolderInDownloadArea","ContractorIrregularityExpiredWithTolerance","PessmaIrregularityExpiredWithTolerance","ContractorCorrectiveMeasureExpired","PessmaCorrectiveMeasureExpired","fieldValidationResourceTypes","ResourceType","__fieldValidations","ResourceStatusType","departmentIsProductive","isOblique","EventResourceType","NOT_AUTHORIZED","AUTHORIZED","FINALIZED","FORCED_AUTHORIZED","FORCED_REVOKED","RESTRICTED","getNotificationResourceTypes","MainContractor","SubContractor","MainRSO","MainRSOCoordinator","AssociatedRSO","AssociatedRSOCoordinator","ObliqueDepartment","RequirementCreator","getResourceTypes","contractorRes","includeSubContractors","getEventResourceTypes","JobStatus","isOptions","defaultOptions","keyToCamelCase","replace","$1","normalizeOjb","rawOptions","rawFilters","exportColumns","order","blob","isAdmin","evaluatePermissionImpl","evaluatePermission","isNotAdmin","number","digits","Array","max","String","pushS3TemporalResource","formData","FormData","pushLocalTemporalResource","pushTemporalResource","getDocumentVersions","documentId","getDocumentLastVersion","getDocumentInfo","getFolders","includeFolderKinds","getDocumentsAndFolders","getDocuments","includeDocumentKinds","saveFolder","inputFolder","folder","removeFolder","removeDocument","saveDocument","inputDoc","requirementId","validationData","fileResourceId","fileResourceName","targetId","requirementIds","requirementData","documents","validated","forcedStatusUntilDate","requirement","removeContractorInvitation","files","inputFileResources","fileName","temporalResourceId","deletion","communication","SaveUserPolicies","bytes","thresh","abs","units","u","toFixed","URL","createObjectURL","stopLoadingType","startLoadingType","Identity","setUser","Constants","documentTypes","requirementExpirationTypes","requirementTypeKinds","loadingCtx","loadingMessage","localStorage","getItem","setItem","btoa","storageClear","removeItem","getReport","reportName","BreadcrumbItem","useWorkFormSettings","scope","isSingleValue","expr","specialTerms","invoke","root","evaluate","isMain","needle","needles","userDepartmentIds","workDepartments","userDepartments","workerIds","evaluatePathSegment","segment","currentCtx","evaluatePath","segments","toIdentifier","evaluateBinaryOperator","left","right","Parser","ViewRequirementHistory","requirementStatus","useSearch","documentVersions","resolveStatusTypeName","resolveStatusType","st","flags","EXPIRED","userName","defaultEmail","validatedState","validatedDate","validationUserId","appUserName","validationHolderName","documentEvents","dv","dateTime","documentTime","associateStatusToDocument","requirementStatusRows","noteEvents","legacy","createdById","associatedDocumentId","incidences","dateUtils","creationDate","getDay","documentVersionId","shift","statusEvents","flag","displayDate","displayDateTime","validatedBy","workerName","removeEvents","FILE_REMOVED","docIndex","findIndex","noteIndex","note","kind","last","opposite","leftIcon","canDownload","marker","requestClose","JobStatusType","parseJobProperty","jobProperty","aJob","JobLogType","jobStatusTypes","INFORMATION_LOADED","ModuleManager","modules","aId","filterModules","componentProperties","module","originalComponent","force","renderComponent","component","src","dependencyCtx","filterDependency","injectComponent","load","awaitIfPromise","moduleRes","injectDataColumns","injectAction","validateData","valueOf","items","getMenuItems","receivedItems","arg0","ImageViewer","FitMode","PdfViewerImpl","response","base64PDFToBlobUrl","PdfJS","workerSrc","PdfViewer","next","isImage","mime","isPdf","hasViewer","DocumentViewer","mimeType","rel","OnLoginAction","initializeApp","AppStore","EMPTY_SECURITY","contractorIds","Security","withWorkerIds","withContractorIds","OnWorkSelected","withContext","OnJobSelected","setcountriestype","setdocumenttypes","initializetype","loadDocumentTypes","AdminActions","types","setCountries","PropertyList","RequirementDocumentInfo","lastDocumentVersion","lv","setLv","infoSearch","jobSearch","info","setInfo","getLastVersion","contractorCode","workerSurname","workerCode","jobName","jobCode","commonPermissions","has","createBrowserHistory","forceRefresh","ENTER","userContainer","Portal","querySelector","time","createPortal","DataLoader","NotificationMessage","onSelect","NotificationsMessages","selectedMessage","setSelectedMessage","requestCancel","resolveMessage","isCompleted","setIsCompleted","DepartmentSelector","relation","selectedDepartment","selectedWorker","departmentResolver","setWorkers","workerResolver","dep","JobsStore","doRemoveJobHasDepartment","refresh","availableResponsibles","confirmRemove","updateRelation","toggleAdd","dataTable","jr","doSaveJobHasDepartment","position","UserStore","toast","inputFileRef","selectedFiles","setSelectedFiles","subject","create","lift","doSend","onClose","margin","onDrop","dataTransfer","file","getAsFile","onDragOver","appendFile","size","removeSelectedFile","defaultState","menuItems","__modules","Containers","Components","Utils","Models","Search","Contractors","Documents","Users","Requirements","Jobs","runtimeModules","loadModule","frontendResource","eval","activate","unloadModule","deactivate","mergeI18n","clearModules","ClearModules","i18nResources","activeModules","modulesI18n","moduleInfo","hasFrontend","moduleItems","mi","InitializeModuleManager","ModulesLoaded","random","MessageIcon","Severity","NotificationTitle","Tag","NotificationMessageDisplayName","AcceptRequirement","canBeValidated","setCanBeValidated","expirationThreshold","expirationDate","requestAccept","RequirementsStore","fileRef","selectedFile","setSelectedFile","defaultIncidence","incidence","new","doReject","getFileResourceId","getFileResourceName","onRejected","alignItems","paddingRight","verticalAlign","paddingBottom","display","opacity","RequirementDocumentsImpl","selectedDocument","lastVersion","versions","documentUrl","RequirementDocuments","constants","DocumentActions","NotificationsStore","pendingRequirements","setPendingRequirements","selectedRequirement","setSelectedRequirement","validatedRequirements","setValidatedRequirements","rejectedRequirements","setRejectedRequirements","requirements","selectedRequirementId","resolveRequirementType","requirementIsPending","orderValue","selected","findRequirementIndex","req","doValidate","nextIndex","nextRequirement","allValidated","canNotValidate","currentIndex","canGoForward","canGoBackward","rt","RejectRequirementContainer","rejected","__resourceName","requirementJobs","loadWork","setMessage","setRequirementJobs","setRequirements","setSelectedRequirementId","JobId","RequirementId","loadRequirements","msgs","ResourceId","ResourceName","fontSize","__resolvedMessages","NotificationMessageEffect","err","goToRequirement","Route","JobHasContractorId","clearRequirement","loadRequirement","exports","peg$SyntaxError","expected","found","Error","captureStackTrace","child","ctor","constructor","prototype","peg$subclass","buildMessage","DESCRIBE_EXPECTATION_FNS","literal","expectation","literalEscape","escapedParts","classEscape","inverted","any","end","other","hex","charCodeAt","j","descriptions","describeExpected","describeFound","SyntaxError","peg$result","peg$FAILED","peg$startRuleFunctions","Expression","peg$parseExpression","peg$startRuleFunction","peg$c0","peg$c1","peg$literalExpectation","peg$c2","peg$c3","peg$c5","peg$c7","peg$c8","peg$c9","peg$c10","peg$c11","peg$c13","peg$c14","peg$c15","peg$c16","peg$c19","peg$c21","peg$c22","peg$c23","peg$c24","peg$c25","peg$c29","peg$c31","peg$c33","peg$otherExpectation","peg$c34","peg$c35","peg$c41","peg$c43","peg$c45","peg$c47","peg$c48","peg$c49","peg$c50","peg$classExpectation","peg$c52","peg$c53","peg$c54","peg$c55","peg$c56","peg$c58","peg$c59","peg$c60","peg$c62","peg$c63","peg$c65","peg$c66","peg$c67","peg$c68","peg$c69","peg$c71","peg$c72","peg$c73","peg$currPos","peg$savedPos","peg$posDetailsCache","line","column","peg$maxFailPos","peg$maxFailExpected","peg$silentFails","startRule","ignoreCase","peg$computePosDetails","pos","details","peg$computeLocation","startPos","endPos","startPosDetails","endPosDetails","offset","peg$fail","peg$buildStructuredError","peg$parseBooleanExpression","peg$parseEqualityExpression","s0","s1","s2","s3","s4","s5","s6","s7","head","peg$parseArithmeticExpression","peg$parse_","element","peg$parseTerm","peg$parseFactor","peg$parseBoolean","test","peg$parseStringLiteral","peg$parseInteger","peg$parseValue","peg$parsePath","peg$parseIdentifier","peg$parseInvocation","inv","peg$c37","peg$c38","s8","peg$parseArguments","availableModules","onInitializeType","onGetUsersType","loadUsers","getGraphqlErrorFromOption","ctxKey","ContractorActions","reducers","app","AppState","admin","ConstantsState","jobs","JobState","NotificationsState","UserState","ModulesState","isDebug","hostname","fileSizeLimit","filterMenuItems","showIf","NavMenuImpl","showMessages","setShowMessages","showHelpDesk","setShowHelpDesk","hasWork","isContractorOrWorker","reportItems","setReportItems","fillReportItems","hidden","userLabel","hasPolicy","Sec","separator","alt","Menubar","RemoteHtml","useI18n","resource","silent","finalUrl","dangerouslySetInnerHTML","__html","footer","setFooter","footerResource","phone","textDecoration","cursor","Cookies","showCookies","setShowCookies","acceptPrivacyConset","SessionChecker","useHistory","intervalId","setInterval","loginTime","sessionStorage","now","clearInterval","Layout","LastLogs","setLogs","currentFilter","setCurrentFilter","formatDate","filterLogs","Header","autoHide","labels","datasets","backgroundColor","hoverBackgroundColor","plugins","legend","StorageChart","chartData","setChartData","dataset","fill","tension","borderColor","basicOptions","maintainAspectRatio","aspectRatio","callbacks","scales","ticks","grid","beginAtZero","Admin","valid","untilDate","showAuthorize","currentStatusType","showRevoke","ViewResourceHistory","restrictions","statusTypeName","EditContractorInner","injectComponents","ForceValidationResourceContainer","params","contractorid","workid","ContractorsStore","showRequirements","getMachinery","createJobRelations","getMachineries","MachineriesActions","saveMachinery","removeMachinery","reactivateMachinery","restrictMachinery","removeRestrictedMachinery","UploadFreeDocument","UploadDocument","restriction","canUpload","mimeTypes","regex","RegExp","excludeMimeTypes","UploadDocumentsWithRestrictions","documentRestrictions","restrictionWithDocuments","setRestrictionWithDocuments","onChangeDocument","allRequirementsFulfilled","canFulfill","setCanFulfill","hasDocumentRestrictions","setFiles","fulfilledRequirements","setFulfilledRequirements","checkDependencies","meetsDependencies","expirationRequired","hasExpiration","onFreeDocument","onDocumentWithRestrictions","uploadDocument","docs","fileSize","requirementTypeDocumentRestrictionId","targetKind","targetTitle","criteria","template","setFile","requirementFileName","useComponentProperties","canBeDenied","disableDenyWithValidation","showInfo","doAdd","onSuccess","defaultNote","requirementStatusId","remoteData","setLastVersion","day","downloadFile","versionId","completeNotes","notes","getWorker","defaultSaveWorkerOpts","uploadImageFile","imageFile","imageResourceId","imageResource","WorkerActions","reactivateWorker","restrictWorker","removeRestrictedWorker","RequirementMode","WorkersStore","MachineriesStore","setResource","setRequirementStatus","machinery","isResourcePicture","reRender","onRender","renderPhoto","resourcePictureRequirement","photoMenu","pm","photo","marginLeft","marginRight","marginBottom","image","shape","AddRequirementIncidenceContainer","AddRequirementNoteContainer","ViewRequirementValidations","currentStatus","optional","table","validationHolderType","jobImpliedRso","responsible","renderValidationHolderName","ViewRequirementDocument","restrictionTitle","createdBy","RequirementDocument","documentRestrictionId","RequirementDocumentsRow","RequirementRow","onRequestReload","requirementGroup","requirementPair","meetsRequirements","removeFile","performRemoveFreeRequirement","actionsBtn","selfContractor","setSelfContractor","resourceContractorId","setResourceContractorId","confirmRemoveFreeRequirement","preCanUpload","mainContractorCanFulfillSubs","validationTypeId","ITA","haveIncidences","hasIncidences","canValidateContext","isJobRequirement","_showValidations","setShowValidations","showValidations","allHolders","optionalHolders","currentOptionalValidations","validationHolderId","REQUIRE_ALL","hideValidations","editRequirementsProps","canReportIncidencesDefaultPermission","canRemoveFreeRequirementDefaultPermission","canUploadDefaultPermission","canRemoveDefaultPermission","canAddObservationsDefaultPermission","canValidateDefaultPermission","canReportIncidences","canRemove","canRemoveFreeRequirement","canAddObservations","canValidate","onRequestClose","onValidate","isOnDate","isExpired","onNoteAdded","uploadRequirementsTitle","kindId","Mandatory","Optional","C","hasActiveVersion","hasNotes","haveNotes","ViewRequirementIncidencesContainer","ViewRequirementNotesContainer","inProgress","onMouseEnter","onMouseLeave","menuClassName","actionsContext","filterActions","calculateActions","RequirementGroup","requirementIncidence","skipMirrorDependencies","mode","requirementHasDependency","RequirementWithValidationDependency","at","bt","dependencyType","RequirementMustHaveBeenValidated","isMirrorRequirement","associateRequirementTypes","allRequirementTypes","EditRequirementsImpl","setGroups","activeIndex","_setActiveIndex","siblingRequirements","siblingType","siblingId","parentSiblingRequirements","siblingJobHasContractorId","requirementsGroups","setRequirementsGroups","freeRequirements","setFreeRequirements","setAllRequirementTypes","loadSiblingRequirements","mirrorDependencies","siblings","parentSiblings","requirementGroupId","getRequirementDependency","sourceReq","dependsOnRequirementId","sourceRequirementTypeOriginal","sourceRequirementType","RequirementWithMirrorDependency","reqsWithDependencies","IBO","IBODependency","rs","isValidated","freeR","directRequirements","isFree","FreeRequirement","DirectRequirement","onHasPendingRequirements","hasPendingRequirement","allRequirements","anyPending","statuses","some","freeRequirementGroup","freeRequirementType","freeComponents","isEmpty","ResourcePhotoContainer","currentGroups","canValidateAllDocuments","onTabChange","currentGroupTab","marginTop","textAlign","EditRequirements","MachineryRequirements","useContractorFromAppUser","selfContractorId","setSelfContractorId","subTypes","setSubTypes","selectedMachineryTypeId","setSelectedMachineryTypeId","selectedSubType","canSave","customValidations","validateMachinery","withFieldValidations","mt","machinerySettings","onlyLicenseNumber","subTypeMandatory","WrappedMachineryRequirements","machineryid","WrappedMachineryForm","EditMachineryFormContainer","MachineryRoutes","exact","path","EditMachineryInner","doReactivateMachinery","confirmActivate","contractorData","displayName","isGestorOrContractor","WorkerRequirements","EditWorkerForm","pictureRequirement","setPictureRequirement","auxReq","validateWorker","workerSettings","notEmptyIf","workerTypeIsMandatory","validateWorkerF","workerTypeId","workerDocumentTypeId","sm","filterDocumentTypes","FormType","workerid","WrappedWorkerRequirements","WrappedWorkerForm","EditWorkerFormContainer","WorkerRoutes","EditWorkerInner","Data","formType","setFormType","doReactivateWorker","None","clearWorkerForm","doSave","JobFinalizeFormImpl","lastStatusSearch","lastStatus","jobStatusTypeId","setCurrentStatus","resolveUserName","jobStatus","allStatus","loadAllStatus","statusDefaultName","jobSettings","skipInformationLoadedState","azsa","statusName","JobPanelActionsImpl","currentState","setCurrentState","isNotified","canAddSubContractorState","setCanAddSubContractorState","reloadJob","goToAddSubContractor","currentJobHasContractor","selectedContractor","selfJobHasContractorId","canAddSubContractor","canFinalize","hasWorker","jobState","canAuthorize","requirePermissionMemo","setCurrentJobStatus","JobPanelActions","JobAuthorizeForm","JobRevokeForm","JobFinalizeForm","JobReactivateForm","RequirePermission","RequireRole","workSettings","jobLogs","setHasAccessJobInformation","resourceContractor","setResourceContractor","findJobHasContractor","jobHasWorker","jobHasC","jobHasM","haveReadInformation","jobLogType","ACCESS_JOB_INFORMATION","isReadonly","setIsReadonly","setWorkerReadonly","setMachineryReadonly","isR","setContractorReadonly","permsCtx","resourceTitle","siblingContractorId","getTabs","setContractor","parents","mc","tabHeader","parentHierarchyLevel","parentContractorName","headerTemplate","parentJobHasContractorId","User","targetReqPending","setTargetReqPending","allowAlwaysNotifyInformationLoaded","reqPending","setCanSave","canNotify","setCanNotify","permCtx","calculateCanSave","resN","canSaveRequirements","contractorTabs","jobid","validateInvitation","doSendInvitation","onCreate","formIsValid","validateJob","validateCode","builder","JobDataImpl","codeIsManual","jobEncodingType","Manual","jobPropertiesCreate","validateWorkspaces","ManageJobDepartmentsContainer","validateContractor","contractorSettings","jhcStartDateMandatory","jhcDescriptionMandatory","currentSearchTerm","setActiveIndex","setContractors","setSelectedContractor","debouncedSearchTerm","selfContractors","jobContractors","jc","foundContractor","parentContractor","contractorsToExclude","newData","jobsDescription","shipmentNumber","saveNewContractor","contractorsTable","noShipmentNumber","ResourceStatus","showResourceType","countryRegion","contactName","contactSurname","contactEmail","contactPhone","address","postalCode","ContractorType","isJobContractor","CONTRACTOR","isInvitation","INVITATION","isContractorRequest","CONTRACTOR_REQUEST","JobContractorsImpl","canRemoveState","setCanRemoveState","editOverlay","completeStatusList","currentJhc","hasContractor","selfJobHasContractorsIds","scheduler","doRemoveContractor","refreshContractors","doDeleteContractor","doDeleteInvitation","parentContractorId","confirmDelete","confirmDeleteInvitation","jobContractorProps","EditContractorValues","authorize","canEdit","calculateCanRemove","HideByDefaultEndedContractors","hideByDefaultEndedContractors","canAddContractor","cannotRemoveItself","fltrs","every","filteredContractors","targetName","contractorStartDate","contractorStatusType","validatedCount","totalCount","authorized","countWorkersAuthorized","countContractorWorkers","countMachineriesAuthorized","countContractorMachineries","tag","countSubContractorsAuthorized","countContractorSubContractors","onRequestAddContractor","hierarchyLevel","calculateRemoveIcon","calculateRemoveOnClick","calculateRemoveTooltip","calculateRemoveDisabled","toggleApplications","EditJobHasContractorContainer","JobContractors","CountryRegionSelect","countryNodes","selectedRegionNode","setSelectedRegionNode","validateContractorRequest","Result","gridColumn","ProcessContractorRequest","ACCEPT","accepted","acceptedDate","discarded","discardedDate","setResult","resultOptions","REJECT","ContractorRequestData","requests","setRequests","requestToProcess","setRequestToProcess","invitations","setInvitations","onProcessSuccess","invitationSearch","invisSearch","canProcessRequests","resultMessage","userIsSubcontractor","canRender","setCanRender","contractorUserData","jobContractorsData","subContractors","isSubcontractor","jobContractorData","requestSearch","parentIds","filteredRequests","filteredInvitations","sourceId","sourceName","acceptedByContractor","acceptedByWork","Indicator","colorize","hideCount","JobDepartments","departmentSearchs","departmentsTable","padding","JobCard","currentJobHasContractorId","doRemoveJob","confirmRemoveJob","isSubContractor","setIsSubContractor","currentEmployer","setCurrentEmployer","goOpts","resolveWorkspace","resolveActivity","addSubContractor","setActions","actionsI","evaluations","can","statusId","jobHasContractorCurrentStatusType","responsibleName","requirementsTotalCount","requirementsValidatedCount","colorizeContractorIndicators","contractorsTotal","contractorsValidated","depReqTotal","depReqValidated","workersTotal","workersValidated","machineriesTotal","machineriesValidated","depTotal","depValidated","notify","MachineryInfo","machineryTypeName","jobHasMachinery","MachineryDocumentation","List","selectedMachinery","setSelectedMachinery","setMachineries","canValidateState","setCanValidateState","initializeContractors","urlJobHasContractorId","onlyMainContractors","HideByDefaultEnded","hideByDefaultEnded","doRemove","calculateCanValidate","doDeleteMachinery","confirmDeleteMachinery","reactivateJobHasMachinery","machineryContractorName","hasDelayedRevokation","showResourceIncidenceIndicator","machineName","machineCode","prefixNumber","selectedMachineryType","addRecord","newRecord","canAdd","parentContractors","setParentContractors","searchContractorHasContracts","calculateLevel","level","jobContractor","U","selectedMachinerySubType","contractorCurrent","availableSubTypes","setAvailableSubTypes","Event","defineProperty","canAddSubMachineries","existingMachineries","currentContractor","findMachineries","subTypeId","searchContractor","machineriesList","hasName","hasCode","uniqueName","excludeMachineries","selfJobHasContractor","subcontractors","subcontractorIds","deepSubcontractors","resolveWorkerType","resolveWorkerDocumentType","setSelectedWorker","doRemoveWorker","refreshWorkers","doDeleteWorker","reactivateJobHasWorker","createId","workerContractorName","EditJobHasWorkerContainer","validateJobHasWorker","JobAddWorkerImpl","viewParentSelector","showProperties","activeContractor","canAddSubWorkers","existingWorkers","initializeForWorkers","initializeForContractors","jobHasContractors","jhc","excludeWorkers","saveWorkerRelation","workersTable","RequirementStore","fileToData","createRequirement","canCreateRequirement","isShared","departmentColorPortovesme","WrappedJobHasContractorRequirements","jobhascontractorid","Routes","WrappedJobHasMachineryRequirements","jobhasmachineryid","WrappedJobHasWorkerRequirements","jobhasworkerid","WrappedJobRequirements","WrappedJobCreateRequirement","WrappedJobCreateResourceRequirement","WrappedJobCard","JobInfoCardContainer","WrappedJobInformationLoaded","WrappedJobInformationLoadedControl","WrappedJobNotifyInformationLoaded","WrappedEditJobData","JobDataContainer","WrappedJobContractors","JobContractorsContainer","WrappedJobContractor","WrappedAddContractor","JobAddContractorContainer","WrappedRequestNewContractor","JobRequestContractorContainer","WrappedContractorRequests","JobContractorRequestsContainer","WrappedSubContractorRequests","JobContractorSubRequestsContainer","WrappedContractorInvite","WrappedMachineries","WrappedMachinery","WrappedMachineryCreate","WrappedMachineryAdd","safeParseInt","WrappedAddWorker","JobAddWorkerContainer","WrappedWorkers","JobLoader","ManageJobWorkersContainer","WrappedWorker","JobRoutesImpl","setParameters","setJobHasContractor","noParameter","JobRoutes","selectedJobHasContractorId","ContractorsStrore","loadData","validateOptions","JobForm","availableWorkers","setAvailableWorkers","setSelectedDepartment","selectedResponsible","setSelectedResponsible","setDepartments","resolveDepartment","resolveWorker","formSettings","worksSpacesSearch","workSpaces","setWorkSpaces","filterWorkers","filterDepartment","availableDepartments","setAvailableDepartments","obliqueDepartments","de","calculateAvailableDepartments","todayOffset","setDate","newDepartments","removeDepartment","JobListMode","SelectJob","__jobListMode","ALLJOBS","JobsImpl","jobListMode","setJobListMode","canCreateJobState","setCanCreateJobState","isNotOblique","responsibles","setResponsibles","dataValue","setDataValue","contractorParents","setContractorParents","formDialog","getSearch","wd","calculateIsOblique","MYJOBS","DEPARTMENT","INVOLVED","SUBCONTRACTED","current_status_type","userFilters","exclude_status","parentsSearch","responsiblesSearch","contractorsSearch","filterStatusTypes","calculateWorkSpaces","parent_contractor","from","Set","select_contractor","department_id","calculateParentContractors","filterByParentContractor","unshift","calculateCreateJob","calculateOptions","selectJob","ViewContractorInvitationsImpl","sortedData","row","AddContractor","selectedLegalForm","setSelectedLegalForm","legalFormMandatory","validateContractorF","calculateProperties","newValues","city","contactPerson","otherActivityType","respMessage","propertiesInvalid","userCanAdd","lf","mandatoryPropertyIds","mandatoryPropertyNames","hiddens","boolTextNames","valueText","calculateFormPropertiesAreValid","assign","loadRegions","RestrictedContractors","handleRemove","handleToast","showDate","toLocaleDateString","deactivatedAt","RestrictContractor","isSaving","setIsSaving","selectedContractorId","toISOString","handleSave","timeoutPromise","respPromise","race","catch","finally","resolveLegalForm","required","parseContractor","ManageContractorsImpl","paginateData","work_id","confirmInvalidate","doActivateContractor","resolveActivityType","isArray","renderEmail","CreateContractor","CreateInvitation","ViewInvitations","getActions","CreateContractorInvitationContainer","ViewContractorInvitationsContainer","ManageContractors","RequireContractorId","RequestState","ProcessSubContractorRequest","doAccept","sourceContractor","ManageSubContractorRequestsImpl","needWorkAcceptance","acceptSubContractorRequests","userInvitationsSearch","userInvitations","invitationsAsRequests","invitation","targetContractor","acceptedByContractorDateTime","userInvitationsAsRequests","canProcessRequest","ContractorModule","ManageSubContractorRequestsContainer","ContractorRequirements","onCheck","messageId","langRegExp","detectLanguages","exec","lang","localeIncluded","getNotificationByLanguage","filterMessages","messageType","contractorSearch","messageSearch","filterMessage","contractorProperties","jobProperties","parseMessageProps","propNames","parseMessages","excludeNotificationTypes","resolveMessages","doRemoveCheckedMessages","originalMessages","setMessages","checkedMessages","setCheckedMessages","filterMessageTypes","notificationsSearch","searchValue","om","original","messagesToRender","WorkCard","workClass","borderRadius","clientImage","ReportOutputType","SynchronizedDispatch","parseColumn","ReportOutputTableComponent","setColumns","report","output","autoStart","searchName","getOwnPropertyNames","useSynchronizedDispatch","parseAction","parameter","filtersContext","filterParameters","canExport","ReportContainer","ReportOutputBarChartComponent","setOptions","serieLabels","serieValues","aria","decal","trigger","formatter","xAxis","yAxis","series","ReportOutputComponent","outputType","Table","BarChart","setReport","setJobs","loadReferences","jobStatuses","years","outputs","statusTypes","month","year","renderResourceStatus","resourceStatusType","Machineries","myJobs","searchJobs","setMachinery","setCode","setName","licensePlate","setPlate","renderLicensePlate","ShowJobs","jobsTable","workspaceName","jobIds","justifyContent","Workers","setWorker","ListWorkers","RequireContractor","WorkAccessControlRoutes","WorkUtilsImpl","cm","rm","accessControlMenu","paddingLeft","WorkUtils","WorkMenuImpl","screenImage","WorkMenu","workModules","loadedModules","getModule","setModulesLoaded","modulesLoaded","renderRequestInfo","rejectedDateTime","rejectedReason","WorkSubContractorRequestsImpl","totalInvitations","filterData","RestrictMachinery","selectedMachineryId","RestrictedMachineries","MachineryJobsForm","saveMachineryRelation","activateMachineryRelation","removeMachineryRelation","isRelated","AddMachinery","setCreateJobRelations","GRUA_AUTOPROPULSADA","CAMION_PLUMA","TURISMO_FURGONETA_Y_CAMIONES","MAQUINARIA_SIN_MATRICULA","MAQUINARIA_CON_MATRICULA","PLATAFORMA_ELEVADORA","EQUIPOS_DE_TRABAJO","ViewMachineriesImpl","machinerySubtypes","setMachinerySubtypes","machinery_type","machinery_sub_type","active","viewMachineriesProps","canAddMachineries","calculateSubTypes","filteredSubTypes","resolveMachineryType","doReload","doActivateMachinery","doDeactivateMachinery","doRemoveMachinery","confirmDeactivate","resolveMachinerySubType","machineryTitle","ViewMachineries","WorkerJobsFormImpl","reactiveWorkerRelation","removeWorkerRelation","setPropertyGroups","newWorker","RestrictWorker","setDisabled","clearDialogs","RestrictedWorkers","ADD_PERMISSION","AddWorker","selectedWorkerType","selectedWorkerDocumentType","availableWorkerTypes","setAvailableWorkerTypes","shouldValidateCode","setShouldValidateCode","contractorUser","workerTypeCalculator","selectedWorkerTypes","Metal","Construcción","Otros","showWorkerImage","cannotSave","ViewWorkersImpl","viewWorkersProps","canAddWorkers","selectWorker","doActivateWorker","doDeactivateWorker","photoId","showGeneralIndicators","openQualificationsDialog","maxHeight","maxWidth","ViewWorkers","DocumentLogType","DocumentKind","FolderKind","documentKindOptions","INTERNAL","ALL","folderKindOptions","documentLogTypes","VIEW","CREATE","UPDATE","CREATE_FILE","UPDATE_FILE","documentIcons","DocumentLogs","resolveLogType","icons","getIcon","documentLogTypeId","logEvents","eventName","FolderForm","UploadFileForm","edition","folderId","onSave","EditDocumentForm","createFolderNode","droppable","createDocumentNode","iconForDocument","isFolder","nodeIsFolder","nodeIsDocument","nodeKeyGetId","DocumentsStore","setModel","selectedNode","setSelectedNode","setDocuments","folders","setFolders","setIncludeDocumentKinds","foldersQuery","documentsQuery","hierarchy","parentFolderId","createDocumentsModel","initializeFolders","initializeDocuments","doDownloadFile","doMoveFolder","doRemoveFolder","doRemoveDocument","doSaveFolder","doSaveDocument","areaDownload","doUploadFile","fileId","temporalResource","doSaveFile","menuActions","addFolder","editFolder","uploadFile","showDocumentLogs","editDocument","addFile","createNodeMenu","nodeKey","iF","createMenu","handleDragAndDrop","dragNode","dropNode","dropIndex","newModel","dragNodeObj","permissionIcons","renderPermissions","documentKind","renderDocumentLabel","rounded","document2Node","uploadDateTime","folder2Node","treeNodes","setTreeNodes","createNodes","treeTable","nodeActions","nodeTemplate","onDoubleClick","dragdropScope","onDragDrop","contextMenuSelectionKey","onContextMenuSelectionChange","password","passwordConfirmation","doCreateUser","appUser","userEmail","WorkerForm","requirementid","documentid","setReq","docUrl","setDocUrl","setMimeType","initializeCountries","CreateWorkContractorAppUser","password1","password2","ManageRelations","listData","setListData","setRows","fillList","onRequestCreate","createText","renderHeader","renderRow","ContractorAccessDataForm","setUsers","doRemoveAppUserRelation","userResp","appUsersDialog","createAppUser","associateAppUser","WrappedContractorRequirements","WrappedContractorForm","EditContractorFormContainer","WrappedContractorAccesData","WorkContractorAccessDataContainer","ContractorRoutes","EditContractorContainer","inputFile","allJobs","setAllJobs","selectedJobs","setSelectedJobs","selectedDepartments","setSelectedDepartments","selectedWorkspaces","setSelectedWorkspaces","validateForm","onSelectDocument","fromDate","toDate","isRecursive","recursive","previewReceivers","receivers","checkEndDate","justifyItems","ViewCommunication","setCommunication","EditCommunication","clearDialog","comm","checkDate","RemoveCommunication","deleteCommunication","fontWeight","anyDeleted","setAnyDeleted","showCommunication","departmentIds","arr1","arr2","checkArrays","exportCommunicationToXls","communicationStatus","html","percentage","RenderReceivers","searchForReceivers","communicationId","renderValidated","validationDate","clean","cleanSearch","activeTab","setActiveTab","currentDocuments","setCurrentDocuments","ValidateCommunicationContainer","wrapWork","WorkLoaderContainer","JobWrapper","JobContainer","JobsWrapper","JobsContainer","ReportWrapper","ContractorWrapper","ContractorsWrapper","ManageContractorsContainer","WorkSubContractorRequestsWrapper","WorkSubContractorRequestsContainer","SubcontractorsWrapper","ManageSubcontractorsContainer","EditMachineryWrapper","EditMachineryContainer","MachineriesWrapper","ViewMachineriesContainer","EditWorkerWrapper","EditWorkerContainer","WorkersWrapper","ViewWorkersContainer","WorkAccessControlWrapper","WorkDocumentsWrapper","WorkDocumentsContainer","WorkUsersWrapper","WorkUsersContainer","WorkReportsWrapper","WorkWrapper","WorkContainer","RequirementDocumentWrapper","WorkRequirementDocumentContainer","CommunicationFormWrapper","CommunicationsListWrapper","CommunicationsListContainer","CurrentCommunicationsWrapper","CurrentCommunicationsContainer","ContractorRoutesWrapper","Module","setItems","lastMessagesReload","home","createItems","SelectWorkContainer","UsersStore","login","auth","HTTP","getUser","Login","referrer","setReferrer","formik","username","touched","doReset","ResetPassword","Images","Bottom","Home","UserModuleContainer","validateDocumentType","DocumentTypeForm","ConstantsStore","showConfirmRemove","setShowConfirmRemove","validateUser","isValidUser","UserPolicies","newPolicy","setNewPolicy","removable","onRemove","removePolicy","UserForm","availableRoles","NOT_ALLOWED","loadingNotifications","userWorks","searchFilter","setSearchFilter","showEditUser","setShowEditUser","showDeleteUser","setShowDeleteUser","addUserData","setAddUserData","searchCtrl","fillUsers","pairUsers","workNames","AddUserFooter","EditUserFooter","onKeyDown","AdminRoutesWrapper","zIndex","top","setWork","validateWorkspace","WorkspaceForm","contact","fax","AdminWorkWorkspaces","setWorkspaces","formatWorkspaceRegions","loadWorkspaces","currentWorkspace","AddEditFooter","ListFooter","validateWorkShift","WorkShiftForm","startMinutes","endMinutes","convert","AdminWorkShifts","setWorkShifts","loadShifts","validateWork","WorkForm","createUserInput","selectedUsers","setSelectedUsers","validateI18NResource","WorkI18NResourceForm","I18nResources","AdminWorkI18NResources","setWorkI18NResources","validateActivity","ActivityTypeForm","AdminActivityType","setActivities","validateLegalForm","LegalFormForm","workerTypesReal","wt","getLegalForm","AdminLegalForm","setLegalForms","setWorkerTypes","validateWorkFunction","WorkFunctionForm","ManageManyToManyRelations","relations","setRelations","targets","setTargets","requestRemove","setRequestRemove","selectedTarget","loadRelations","loadTargets","initializeTargets","onAdd","targetValue","colSpan","targetLabel","AdminWorkFunction","setWorkFunctions","workersDialog","addWorkFunctionHasWorker","WorkToolbar","MachineryTypeForm","validateMachinerySubType","MachinerySubTypeForm","AdminMachineryType","setMachineryTypes","validateWorkerDocumentType","WorkerDocumentTypeForm","AdminWorkerDoucmentType","setWorkerDocumentTypes","validateWorkerType","WorkerTypeForm","AdminWorkerType","prepareWork","showEditUsers","setShowEditUsers","WorkFormFooter","AdminWorkUsersContainer","addData","setAddData","countryName","AddFooter","EditFooter","cancelEvent","configureWork","rowClassName","GraphQlUi","DepartmentForm","setPolicies","notifyJobCreation","onSaved","onAddPoliciy","saveDepartmentPolicy","onRemovePolicy","doStringSearch","filtered","addDepartmentHasWorker","validatePermission","TestExpression","teUser","setTeUser","teWork","setTeWork","teJob","setTeJob","containsJob","setContainsJob","initializeJobs","testExpression","Expressions","PermissionForm","activePanel","setActivePanel","predefinedPermissions","editable","setPermissions","performRemovePermission","performSavePermission","ManagePolicies","chip","hasAssociatedUser","addPolicy","RenderCreateAppUserRelation","onCreated","createAndAssociateUser","UserFormContainer","editAccess","setEditAccess","Edit","createAppUserDialog","savePolicies","RemovePolicyToAppUser","newPolicies","addWorkerHasWorkspace","associateExistingUser","requestEditUser","AppUser","saveAppUser","onSystemUserCreated","showConfirmDeactivate","setShowConfirmDeactivate","showConfirmActivate","setShowConfirmActivate","PropertyTypeForm","setSelectOptions","dispositionTypes","PropertyGroupTypeForm","PropertyGroupStyle","updateColor","PropertyGroupTypeHidableForm","propertyGroupType","PropertyType","propertyType","parsePropertyGroup","groupDialogs","propertyDialog","setAddRecord","addPropertyRecord","setAddPropertyRecord","EditableText","isPropertyType","isGroupType","allowDrop","currentOrder","sourceProperty","float","onDragStart","doAddPropertyType","doAddPropertyGroup","defaultSettings","ContractorsConfiguration","__acceptSubContractorRequests","__mainContractorCanFulfillSubs","__rememberSubContractorAcceptances","rememberSubContractorAcceptances","gridTemplateColumns","gridGap","JobsConfiguration","notificationTemplates","workContextData","encodingOptions","Sequential","SequentialByWorkspace","reactivateResourcesBehaviorOptions","contractorInvitationTemplateId","helpDeskEmail","resetPasswordTemplateId","__jobEncodingType","__jobEncodingPrefix","jobEncodingPrefix","__allowAlwaysNotifyInformationLoaded","__clientImage","__screenImage","__createJobRelations","__jobHiddenFields","jobHiddenFields","__contractorHiddenFields","contractorHiddenFields","__workerHiddenFields","workerHiddenFields","__machineryHiddenFields","machineryHiddenFields","__simpleDelayedRevokation","simpleDelayedRevokation","__jobDelayedRevokation","jobDelayedRevokation","__hideByDefaultEnded","__hideByDefaultEndedContractors","__jobChainFinalisation","jobChainFinalisation","__reactivateResourcesBehavior","reactivateResourcesBehavior","contextDataPhone","contextDataEmail","State","contentClassName","PropertyGroupTypesContainer","RegisterContractorForm","setInvitation","setActivityTypes","setLegalFormMandatory","setHiddenFields","setIsActive","updateValues","invitationId","equalTo","paddingTop","RegisterContractorSuccess","AdminStore","INIT","passwordConfirm","validateUserData","doChange","UserConfigurationForm","DependencyOptions","Operator","PropertyOperator","allRequirementGroups","allDependencyOptions","NONE","PROPAGATE","allRequirementDependencyTypes","RequirementMustHaveBeenRead","selectedDependencyType","setSelectedDependencyType","dependencyOptions","setDependencyOptions","setAllRequirements","setSelected","resolveDependency","resolveDependencyType","doAddRequirement","getRequirementTitle","targetTypeName","selectedTargetType","filterBy","getReferenceValues","propertyTitle","propertyIsReference","propertyIsBoolean","allOperators","EQUAL","GREATER_EQUAL_THAN","GREATER_THAN","IN","LESSER_EQUAL_THAN","LESSER_THAN","CONTAINS","NOT_EQUAL","TRUE","FALSE","IS_NULL","IS_NOT_NULL","getJobDynamicProperties","getDynamicProperties","propertyToCode","targetEntityName","propIsBoolean","operator","resourcePrefix","prefix","propertyName","isString","propertyIsString","propertyOperatorToCode","expressionToCode","AND","expressions","expressionsToCode","fragments","getTargetEntityName","ExpressionFragment","fragment","onChangeOperator","onPropertiesChanged","selectedProperty","setSelectedProperty","selectedOperator","setSelectedOperator","operators","setOperators","isReference","setIsReference","setReferenceValues","selectedReference","setSelectedReference","selectedReferenceName","setSelectedReferenceName","selectedValue","setSelectedValue","setProperties","displayValues","setDisplayValues","isBooleanProp","dvs","getPropertyNameWithoutPath","__display","isRef","isExst","isDyn","commonProperties","dynamicProperties","jobDynamicProperties","dynamicPropertyPrefix","OR","propertyOperatorName","indx","removePropertyByIndex","newProperty","newProperties","astGetPropertyOperator","ast","astGetInvocation","astNodeToExpression","astGetPropertyName","invocation","parseAstOperator","astHasBooleanPropInvocation","astGetPath","astToFragments","isRoot","propertyPath","valueIsNull","setFragments","parseAndSetExpression","saveRequirementType","removeFragment","updateFragment","newFragment","newFragments","commonMimeTypes","AddDocumentRestriction","__excludeMimeTypes","__mimeTypes","DocumentRestrictionRepresentation","reps","Add","LIST","onDelete","suggestion","addForm","ADD","validationHolder","editHolderRecord","setEditHolder","addHolderRecord","setAddHolderRecord","EDIT","doDelete","resolveWorkFunction","onlyNotifications","isBlocking","AddRequirementGroupInput","saveRequirementGroup","borderWidth","borderStyle","EditRequirementGroup","AddRequirementTypeInput","expirationTypeId","RequirementTypeConfiguration","templates","usersExcludedChargedNotifications","excludeUsersIds","setExcludeUsersIds","billingTypes","background","addChip","allowDuplicate","itemTemplate","clipboard","writeText","readText","chipsOnClick","RequirementTypeSetPolicy","RequirementTypeInfo","RequirementTypeRow","requestRefresh","requestSelected","splitButton","expanded","setExpanded","saveChanges","close","sourceRequirement","EditRequirementTypeDocumentRestrictionsContainer","EditRequirementTypeDependenciesContainer","RequirementGroupRow","colorRef","setRequirementTypes","selectedRequirementType","setSelectedRequirementType","RequirementGroups","setSelectedTargetType","tt","NotificationTemplateForm","showFooter","filtersForm","filteredTemplates","setFilteredTemplates","isBlank","filterTemplate","NotificationMessageForm","commonActions","notificationResourceTypes","resourceTypes","restrictToResourceType","restrictToResourceId","notificationTemplateId","byMail","actionKey","resourceTypeRestrict","resolveAction","resolveResourceType","resolveRestrictResourceType","setFilteredMessages","restrictResource","actionName","notificationTemplate","notificationTemplateName","FieldValidationForm","setExpression","setTestExpression","encodeExpression","call","cifCantBeRepeated","noInformationLoadedState","freeRequirementsAreMandatory","omitJobHasContractorDefaultNotification","jobHasContractorNotificationTargetPolicy","informationLoadedNotificationPolicy","workHasModules","workRelations","moduleName","workHasModule","saveModuleRelation","toggleWorkHasModule","newRel","toggleModuleRelation","EventTriggerForm","eventTriggerTypes","resourceTypeId","eventTriggerTypeId","getValue","monaco","theme","onresize","layout","eventTriggers","setEventTriggers","resolveEventTriggerType","saveTrigger","el","paths","vs","define","moduleView","view","handleView","route","ContractorUserProfileImpl","ContractorStore","WorkerStore","ModuleViewWrapper","ModuleViewContainer","UserProfileWrapper","UserProfileContainer","AdminWrapper","AdminDocumentTypesWrapper","AdminDocumentTypesContainer","AdminUsersWrapper","AdminWorkWrapper","AdminWorkLoader","EditWorkContainer","AdminWorksWrapper","AdminWorkPermissionsWrapper","AdminWorkRequirementsWrapper","AdminWorkRequirementsContainer","AdminWorkConfigurationWrapper","AdminWorkDepartmentsWrapper","AdminWorkNotificationsWrapper","AdminWorkValidationsWrapper","AdminWorkUsersWrapper","AdminWorkContractorsSettingsWrapper","AdminWorkMachineriesSettingsWrapper","AdminWorkWorkersSettingsWrapper","AdminWorkJobSettingsWrapper","AdminWorkModulesWrapper","AdminWorkEventsWrapper","AdminDevelVoyagerWrapper","AdminDevelGraphqlUiWrapper","AdminRoutes","RegisterContractorContainer","UserConfigurationContainer","ChangePasswordContainer","ResetPasswordContainer","ModuleViewRedirectionContainer","ReactDOM","isLocalhost","registerValidSW","swUrl","serviceWorker","register","registration","onupdatefound","installingWorker","installing","onstatechange","controller","process","getElementsByTagName","getAttribute","store","initialState","middleware","thunk","routerMiddleware","rootReducer","combineReducers","router","connectRouter","enhancers","windowIfDefined","__REDUX_DEVTOOLS_EXTENSION__","createStore","compose","applyMiddleware","configureStore","History","AppActions","__last_reloadns","randomTime","origin","contentType","ready","unregister","checkValidServiceWorker","registerServiceWorker"],"mappings":"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","file":"static/js/main.4de677b9.chunk.js","sourcesContent":["import { useEffect, useState } from 'react';\nimport { connect } from 'react-redux';\n\nimport { ApplicationState } from '../../store';\nimport { IUserIdentity, IWork, IWorkPermission } from '../../models';\nimport { evalAndParse } from '../../utils/expressions';\n\nfunction WithPermissions({action, children, work, user}: {\n action: string, children: any, work: IWork, user: IUserIdentity\n}) {\n const [hasPermissions, setHasPermissions] = useState(false);\n\n const evalPermission = (p: IWorkPermission) => {\n if (user.roles.includes('gestor')) {\n return true;\n }\n if (p.expression) {\n return evalAndParse(p.expression, {\n identity: user,\n work: work,\n workId: work?.id,\n });\n }\n else if (p.roles) {\n const roles = p.roles.split(',');\n return user.roles.find(r => roles.includes(r)) != undefined;\n }\n else if (p.policies) {\n const policies = p.policies.split(',');\n return user.policies.find(r => policies.includes(r)) != undefined;\n }\n else {\n return false;\n }\n }\n\n useEffect(() => {\n const perms = work.permissions.filter(p => p.action == action);\n setHasPermissions(perms.length == 0 || perms.find(evalPermission) != undefined);\n }, [user, work, action]);\n\n if (hasPermissions) {\n return children;\n }\n else {\n return null;\n }\n}\n\nexport default connect(\n (state: ApplicationState) => ({\n work: state.user.work,\n user: state.identity?.user,\n }),\n {},\n)(WithPermissions as any) as any; // eslint-disable-line @typescript-eslint/no-explicit-any\n","import * as React from 'react';\n\nimport { ModuleManager, ISecurity, IWork } from '@models';\nimport * as S from '@utils/security';\n\ntype IUsePermissionsProps = {\n security: ISecurity;\n moduleManager: ModuleManager;\n work: IWork;\n}\n\ntype IUsePermissionsOpts = {\n ctx?: any;\n defaults?: any;\n explicit?: boolean;\n debug?: boolean;\n dependencies?: any;\n};\n\nexport interface IPermissions {\n get: (name: string) => boolean;\n isGestor: () => boolean;\n isContractor: () => boolean;\n}\n\nexport function usePermissions(\n props: IUsePermissionsProps,\n opts: IUsePermissionsOpts,\n permissions: any = {}) {\n const hasPermission = (p: string, ctx: any = {}) => S.hasPermission(p, {\n user: props.security.user,\n work: props.work,\n explicit: opts.explicit !== false,\n ...ctx\n });\n\n const security = props.security;\n const moduleManager = props.moduleManager;\n\n const [values, setValues] = React.useState({});\n const [id, setId] = React.useState(0);\n\n const permissionCtx = {\n work: props.work,\n security: props.security,\n ...(opts.ctx ?? {}),\n };\n\n const requirePermission = async (name: string, key: string, defaultValue: any = undefined) => {\n const defaultPermission = defaultValue\n ?? hasPermission(name, permissionCtx)\n ?? false;\n\n const res = await moduleManager.requirePermission(\n name,\n permissionCtx,\n defaultPermission,\n );\n\n if(permissionCtx.security.user.roles.includes('gestor')) {\n return true;\n }\n\n\t if (opts.debug) {\n\t console.log(`## PERMISSIONS: initialize ${key}`, name, res, {\n default: defaultPermission,\n hasPermission: hasPermission(name, permissionCtx),\n ctx: permissionCtx\n\t });\n\t }\n\n\t return res;\n }\n\n const initialize = async () => {\n\t const res: any = {};\n\t const keys = Object.keys(permissions);\n for (const k of keys) {\n const v = permissions[k];\n\n const perm = typeof(v) === 'string' ? v : v.name;\n const defaultValue = typeof(v) === 'string' ? opts.defaults?.[k] : v.default;\n const r = await requirePermission(perm, k, defaultValue);\n res[k] = r;\n }\n\n setValues(res);\n setId(new Date().getTime());\n }\n\n const get = (name: string) => {\n if (opts.debug) {\n console.log('## PERMISSIONS: get', name, values[name] ?? false, values);\n }\n return values[name] ?? false;\n }\n\n React.useEffect(() => {\n\t initialize();\n }, [props.moduleManager.getId(), props.security, opts?.dependencies]);\n\n return {\n id,\n get,\n isGestor: () => props.security.isGestor(),\n isContractor: () => props.security.isContractor(),\n };\n}\n","import * as React from 'react';\n\nexport default function useEvents() {\n const events = React.useRef({});\n const on = (name: string, callback: Function) => {\n return React.useEffect(() => {\n if (!events.current[name]) {\n events.current[name] = [];\n }\n events.current[name].push(callback);\n return () => dispose(name, callback);\n }, [name, callback]);\n }\n const fire = (name: string, ...args: any[]) => {\n if (events.current[name]) {\n for (const handler of events.current[name]) {\n handler(...args);\n }\n }\n }\n const dispose = (key: string, callback: Function) => {\n if (events.current[key]) {\n events.current[key] =\n events.current[key]\n .filter((c: Function) => c != callback);\n }\n }\n\n return { events, on, fire, dispose };\n}\n","import * as React from 'react';\n\nexport interface IProps {\n children: any;\n}\n\nexport function ButtonSet(props: IProps) {\n return {props.children}\n}","import * as React from 'react';\n\nexport interface IProps {\n label: string;\n labelClassName?: string;\n children: any;\n}\n\nexport function F({label, labelClassName, children}: IProps) {\n return \n \n {children}\n \n}","import * as React from 'react';\n\nimport { classNames } from 'primereact/utils';\n\nexport interface IProps {\n title: string;\n className?: string;\n containerClassName?: string;\n children: any;\n\n collapsible?: boolean;\n closed?: boolean;\n}\n\nexport function FieldsBox({collapsible, children, className, closed, title, containerClassName}: IProps) {\n const [isDown, setIsDown] = React.useState(!closed);\n const toggle = () => setIsDown(b => !b);\n\n return
\n
\n {collapsible && }\n {title}\n
\n
\n {(!collapsible || isDown) && children}\n
\n
\n}\n","import * as React from 'react';\n\ninterface IFloatFieldProps {\n id: string;\n title: string;\n children: any;\n type?: string;\n className?: string;\n labelClassName?: string;\n errorMessage?: false | JSX.Element;\n}\n\nexport function FormField(props: IFloatFieldProps) {\n return
\n {props.children}\n {props.errorMessage}\n
;\n}\n\nexport function FloatField(props: IFloatFieldProps) {\n return
\n \n {props.children}\n {props.title}\n \n {props.errorMessage}\n
;\n}\n","import * as React from 'react';\n\nimport { classNames } from 'primereact/utils';\nimport SignalManager from '@components/common/SignalManager';\n\nexport interface IProps {\n className?: string;\n name?: string;\n label: string;\n children: any;\n signals?: SignalManager;\n}\n\nexport function G({className, children, label, name, signals}: IProps) {\n return <>\n {(signals == undefined || signals?.fieldIsVisible(name)) &&\n
\n \n {children}\n
}\n ;\n}\n","import * as React from 'react';\n\nimport { useLoading } from '@utils/hooks';\n\nexport function InlineInputText({className, style, object, field, save}: {className: string, style?: any, object: any, field: string, save: Function}) {\n const loading = useLoading();\n\n const update = loading.wrap(async (ev: any) => {\n object[field] = ev.target.value;\n\n await save(object);\n });\n\n return
\n \n {loading.render()}\n
;\n}\n","import * as React from 'react';\n\nimport { Dropdown as Select } from 'primereact/dropdown';\nimport { useLoading } from '@utils/hooks';\n\nexport function InlineSelect({options, optionLabel, optionValue, object, field, save}: {\n options: any[], optionLabel?: string, optionValue?: string,\n object: any, field: string, save: Function\n}) {\n const loading = useLoading();\n\n const update = loading.wrap(async (ev: any) => {\n object[field] = ev.target.value;\n\n await save(object);\n });\n\n return
\n \n {loading.render()}\n
;\n}\n","import * as React from 'react';\n\nimport { classNames } from 'primereact/utils';\n\nexport interface IProps {\n className?: string;\n suffix: string;\n children: any;\n}\n\nexport function InputGroup(props: IProps) {\n return
\n {props.children}\n {props.suffix &&\n \n \n }\n
\n}","import * as React from 'react';\n\nimport { Loading } from './Loading';\n\nexport interface IProps {\n message?: string;\n}\n\nexport function LoadingBox(props: IProps) {\n return (
\n
\n {props.message}\n
)\n}","import * as React from 'react';\n\nimport { Message } from 'primereact/message';\nimport { INotification, NotificationType } from '../../models';\nimport { useTranslation } from 'react-i18next';\n\nexport interface IProps {\n notification: INotification;\n}\n\nexport function NotificationBox(props: IProps) {\n const { t } = useTranslation();\n if (props.notification.type === NotificationType.ERROR) {\n return ;\n }\n else {\n return null;\n }\n}","import * as React from 'react';\n\nimport { NotificationBox } from './NotificationBox';\nimport { INotification } from '../../models';\n\nexport interface IProps {\n notifications: INotification[];\n}\n\nexport function NotificationsBox(props: IProps) {\n return
\n {props.notifications.map((n, k) => )}\n
\n}","import * as React from 'react';\n\nexport interface IProps {\n className?: string;\n label: string;\n labelClassName?: string;\n children: any;\n}\n\nexport function R({className, label, labelClassName, children}: IProps) {\n return
\n \n {children}\n
\n}","import * as React from 'react';\n\nimport './TogglePanel.scss';\n\nexport interface IProps {\n bodyClassName?: string;\n children?: any;\n className?: string;\n isOpen?: boolean;\n title: string;\n titleIcon?: string;\n}\n\nexport function TogglePanel(props: IProps) {\n const [isOpen, setIsOpen] = React.useState(props.isOpen ?? false);\n\n return
\n
setIsOpen(a => !a)}>\n \n {props.titleIcon &&\n }\n {props.title}\n
\n\n {isOpen &&\n
\n {props.children}\n
}\n
\n}","import * as React from 'react';\n\nimport { paginate, searchExportToXls, DEFAULT_LIMIT } from '@store/actions/search';\nimport { useLoading, useMessage } from '@utils/hooks';\nimport { IPaginateResult, IPaginateSort } from '@models';\nimport { downloadBlob } from '@utils/file-utils';\nimport i18next from 'i18next';\n\nexport interface IProps {\n search: string;\n filters?: any;\n sortBy?: IPaginateSort[];\n workId: number;\n normalizeKeys?: boolean;\n lazy?: boolean;\n page?: number;\n limit?: number;\n map?: Function;\n dependencies?: any;\n exportFilename?: string;\n persist?: true;\n}\n\nconst __pages: {[key: string]: number} = {};\n\nexport default function useSearchPaginate(props: IProps) {\n\n const prevDependencies = React.useRef(props.dependencies);\n const [data, setData] = React.useState>({\n total: 0,\n page: __pages[props.search] ?? 0,\n data: [],\n limit: DEFAULT_LIMIT,\n });\n const [currentLimit, setCurrentLimit] = React.useState(props.limit ?? DEFAULT_LIMIT);\n\n const [sortBy, setSortBy] = React.useState();\n\n const message = useMessage();\n const loading = useLoading();\n\n const initialized = React.useRef(false);\n\n const initialize = loading.wrap(async (filters: any = undefined, page: number | undefined = undefined, limit: number | undefined = undefined) => {\n const pageValue = page ?? props.page ?? __pages[props.search] ?? 0;\n const actualLimit = limit ?? currentLimit ?? props.limit;\n\n const resp = await paginate(props.workId, props.search, {\n normalizeKeys: props.normalizeKeys ?? true,\n filters: filters ?? props.filters,\n page: pageValue,\n limit: actualLimit,\n sortBy: sortBy ? [sortBy] : props.sortBy,\n });\n message.set(resp);\n setCurrentLimit(actualLimit);\n\n if (props.persist ?? false) {\n __pages[props.search] = pageValue;\n }\n\n if (resp.hasValue) {\n const v = resp.value;\n const rawData = (v.data && props.map)\n ? v.data.map(r => props.map!(r))\n : v.data;\n\n setData({ ...v, data: rawData });\n\n return rawData;\n }\n return undefined;\n });\n\n React.useEffect(() => {\n if (prevDependencies.current == props.dependencies) {\n return;\n }\n if (!props.lazy || initialized.current) {\n initialize();\n }\n\n if (!initialized.current) {\n initialized.current = true;\n }\n\n prevDependencies.current = props.dependencies;\n }, props.dependencies ?? []);\n\n React.useEffect(() => {\n if (sortBy != props.sortBy) {\n initialize();\n }\n }, [sortBy]);\n\n const exportToXls = async (filters: any, filename: string | undefined = undefined, useI18N: boolean = false) => {\n const resp = await searchExportToXls(props.workId, props.search, {\n filters: filters ?? props.filters,\n }, useI18N ? i18next.language : undefined);\n downloadBlob(resp, filename ?? props.exportFilename ?? 'export.xlsx');\n }\n\n const doSortBy = (name: string, asc: boolean = true) => {\n setSortBy({ name, asc });\n }\n\n return {\n data: data.data ?? [],\n value: data,\n loading,\n message,\n renderLoading: loading.renderBox,\n sortBy: doSortBy,\n exportToXls: (filters: any = undefined, filename: string | undefined = undefined, useI18N: boolean = false) => exportToXls(filters, filename, useI18N),\n doSearch: (filters: any = undefined, page: number | undefined = undefined, limit: number | undefined = undefined) => initialize(filters, page, limit),\n };\n}\n","import * as React from 'react';\n\nimport { search } from '@store/actions/search';\nimport { useLoading, useMessage } from '@utils/hooks';\n\nexport interface IProps {\n search: string;\n filters?: any;\n workId: number;\n normalizeKeys?: boolean;\n lazy?: boolean;\n dependencies?: any;\n}\n\nexport default function useSearchFirst(props: IProps) {\n const [data, setData] = React.useState([]);\n const loading = useLoading();\n const messages = useMessage();\n\n const initialize = loading.wrap(async (filters: any = undefined) => {\n const resp = await search(props.workId, props.search, {\n normalizeKeys: props.normalizeKeys ?? true,\n filters: filters ?? props.filters\n });\n messages.set(resp);\n if (resp.hasValue) {\n setData(resp.value);\n }\n });\n\n React.useEffect(() => {\n if (!props.lazy) {\n initialize();\n }\n }, props.dependencies ?? []);\n\n return {\n value: data && data.length > 0 ? data[0] : undefined,\n loading,\n messages,\n renderLoading: loading.render,\n doSearch: (filters: any = undefined) => initialize(filters),\n };\n}\n","type DispatcherF = (value: string) => void;\n\nexport default class InputEventDispatcher {\n private value?: string;\n private ts: number;\n private sended: boolean;\n\n constructor(\n private dispatchEvent: DispatcherF,\n private onChange?: DispatcherF,\n private delay: number = 500) {\n this.ts = new Date().getTime();\n this.value = undefined;\n\n this.enqueue = this.enqueue.bind(this);\n this.sended = false;\n }\n\n private enqueue() {\n const nts = new Date().getTime();\n if (nts - this.ts > this.delay) {\n if (this.sended) {\n return;\n }\n this.sended = true;\n this.dispatchEvent(this.value ?? '');\n }\n else {\n setTimeout(this.enqueue, this.delay);\n }\n }\n\n public append(event: any) {\n const value = event.target.value;\n const ts = new Date().getTime();\n\n this.sended = value == this.value;\n // console.log('InputEventdispatcher, set ', value, this.onChange);\n this.onChange?.(value);\n\n this.value = value;\n setTimeout(this.enqueue, this.delay);\n\n this.ts = ts;\n }\n}\n","import * as React from 'react';\n\nimport { getUserFilters } from '@store/actions/search';\nimport {\n ISecurity, IUserSearchFilter, UserSearchFilterType\n} from '@models';\nimport {\n Button, InputSwitch, OverlayPanel, onChange, useLoading, useTranslation\n} from '@components';\nimport {\n storageGet, storageSet\n} from '@utils/storage';\nimport InputEventDispatcher from './InputEventDispatcher';\nimport { delay } from '@utils';\nimport './useSearchFilters.scss';\n\nexport interface IProps {\n workId: number;\n name: string;\n references?: any;\n onChange?: Function;\n security?: ISecurity;\n persist?: boolean;\n awaitForApply?: boolean;\n awaitForDoSearch?: boolean;\n}\n\nfunction FilterInputTextOnEnter(props: any) {\n const [value, setValue] = React.useState(props.value || '');\n\n const onKeyPress = (e: any) => {\n if (e.key == 'Enter') {\n props.onChange(value);\n }\n }\n\n return setValue(e.target.value)} />\n}\n\nfunction FilterInputText(props: any) {\n const [value, setValue] = React.useState(props.value || '');\n\n const dispatcher = React.useRef(\n new InputEventDispatcher(\n props.onChange,\n setValue\n ));\n\n return \n dispatcher.current.append(e)\n } />\n}\n\nexport default function useSearchFilters(props: IProps) {\n const getLocalStorageKey = () => {\n return `filters_${props.name}_${props.workId}`;\n }\n\n const recoverStorage = () => {\n const data = storageGet(getLocalStorageKey(), {});\n return data;\n }\n\n const [filters, setFilters] = React.useState([]);\n const [filterValues, setFilterValues] = React.useState(\n recoverStorage()\n );\n const [temporaryFilterValues, setTemporaryFilterValues] = React.useState([]);\n\n const [defaultFilterValues, setDefaultFilterValues] = React.useState({});\n const [error, setError] = React.useState();\n const [searchOrder, setSearchOrder] = React.useState(false);\n\n const returnSearchOrderToFalse = () => {\n setSearchOrder(false)\n }\n\n const propagate = React.useRef(false);\n const loading = useLoading();\n const { t } = useTranslation();\n\n const buttonRef = React.useRef(null);\n\n const canApplyFilter = (f: IUserSearchFilter) => {\n return (f.excludeRole && !props.security?.hasRole(f.excludeRole))\n || (!f.excludeRole && f.requireRole && props.security?.hasRole(f.requireRole))\n || (!f.excludeRole && !f.requireRole);\n }\n\n const initialize = loading.wrap(async () => {\n try {\n const storeKey = getLocalStorageKey();\n const state: any = props.persist\n ? storageGet(storeKey, {})\n : {};\n const rawFs = await getUserFilters(props.workId, props.name);\n const fs = rawFs.filter(canApplyFilter);\n const values: any = {};\n const defaultValues: any = {};\n for (const f of fs) {\n if (f.type == UserSearchFilterType.REFERENCE && f.default == 'current_year') {\n const currentYear = new Date().getFullYear();\n f.default = currentYear;\n }\n else if (f.type == UserSearchFilterType.REFERENCE && f.default == 'current_month') {\n const currentMonth = new Date().getMonth();\n f.default = currentMonth;\n }\n else {\n defaultValues[f.name] = f.default;\n values[f.name] = state[f.name] ?? f.default;\n }\n }\n setFilterValues(values);\n setTemporaryFilterValues(values);\n setDefaultFilterValues(defaultValues);\n setFilters(fs);\n setTimeout(() => propagate.current = true, 700);\n\n buttonRef.current = null;\n }\n catch (_) {\n setError(t('search.filters.notfound'));\n }\n });\n\n React.useEffect(() => {\n initialize();\n }, []);\n\n React.useEffect(() => {\n if (props.onChange && propagate.current) {\n props.onChange(filterValues);\n }\n\n if (props.persist) {\n const key = getLocalStorageKey();\n storageSet(key, filterValues);\n }\n }, [filterValues]);\n\n const applyFilters = () => {\n setShowPanel(false);\n setFilterValues({ ...temporaryFilterValues });\n };\n\n const doSearch = () => {\n setSearchOrder(true);\n setShowPanel(false);\n }\n\n const renderFilterComponent = (f: IUserSearchFilter) => {\n if (f.type === UserSearchFilterType.BOOL) {\n return {\n if (props.awaitForApply) {\n setTemporaryFilterValues({ ...temporaryFilterValues, [f.name]: e.value });\n }\n else {\n setFilterValues((v: any) => ({ ...v, [f.name]: e.target.value }));\n }\n }} />\n }\n else if (f.type === UserSearchFilterType.TEXT) {\n return {\n if (props.awaitForApply) {\n setTemporaryFilterValues({ ...temporaryFilterValues, [f.name]: v });\n }\n else {\n setFilterValues((values: any) => ({ ...values, [f.name]: v }));\n }\n }\n } />\n }\n else if (f.type === UserSearchFilterType.REFERENCE || f.type === UserSearchFilterType.MULTI_REFERENCE) {\n const referenceValues = props.references?.[f.name] ?? [];\n const values = () => {\n if (f.type === UserSearchFilterType.REFERENCE) {\n if (temporaryFilterValues[f.name] != filterValues[f.name]) {\n return temporaryFilterValues[f.name] ?? filterValues[f.name] ?? '';\n }\n else {\n return filterValues[f.name] ?? '';\n }\n }\n else {\n if (temporaryFilterValues[f.name] != filterValues[f.name]) {\n return temporaryFilterValues[f.name] ?? filterValues[f.name] ?? [];\n }\n else {\n return filterValues[f.name] ?? [];\n }\n }\n }\n const filterValue = values();\n if (props.workId == 23 && referenceValues.length == 0) {\n return null\n }\n return {\n const v = e.target.value;\n if (f.type === UserSearchFilterType.MULTI_REFERENCE) {\n if ((filterValue != undefined && filterValue.includes(+v))) {\n const newValue = filterValue.filter((x: any) => x != +v);\n if (props.awaitForApply) {\n setTemporaryFilterValues({ ...temporaryFilterValues, [f.name]: newValue });\n }\n else {\n setFilterValues((fv: any) => ({ ...fv, [f.name]: filterValue[f.name].filter((x: any) => x != +v) }));\n }\n }\n else if (filterValue == undefined) {\n if (props.awaitForApply) {\n setTemporaryFilterValues({ ...temporaryFilterValues, [f.name]: [+v] });\n }\n else {\n setFilterValues((fv: any) => ({ ...fv, [f.name]: [+v] }));\n }\n }\n else {\n if (props.awaitForApply) {\n setTemporaryFilterValues({ ...temporaryFilterValues, [f.name]: [...filterValue, +v] });\n }\n else {\n setFilterValues((fv: any) => ({ ...fv, [f.name]: [...filterValue, +v] }));\n }\n }\n } else {\n if (props.awaitForApply) {\n setTemporaryFilterValues({ ...temporaryFilterValues, [f.name]: +v });\n }\n else {\n setFilterValues((fv: any) => ({ ...fv, [f.name]: +v }));\n //? setFilterValues((fv: any) => ({ ...fv, [f.name]: filterValues[f.name] != undefined ? [...filterValues[f.name], v] : [v] }));\n }\n }\n e.preventDefault();\n e.stopPropagation();\n }} multiple={f.type === UserSearchFilterType.MULTI_REFERENCE}>\n \n {referenceValues\n .sort((a: any, b: any) => typeof a.name == \"number\" && typeof b.name == \"number\" ? a.name - b.name :\n f.shouldTranslate == false ? a.name?.localeCompare(b.name) : t(a.name).localeCompare(t(b.name))\n )\n .map((r: any, i: number) => {\n return \n }\n )}\n ;\n }\n else if (f.type === UserSearchFilterType.DATE) {\n return {\n const value = e.target.value;\n if (props.awaitForApply) {\n setTemporaryFilterValues({ ...temporaryFilterValues, [f.name]: value });\n }\n else {\n setFilterValues((v: any) => ({ ...v, [f.name]: value }))\n }\n }} />\n }\n else if (f.type === UserSearchFilterType.DATE_RANGE) {\n return
\n {\n const value = e.target.value;\n let oldValue = temporaryFilterValues[f.name] ?? filterValues[f.name];\n if (oldValue == null) {\n oldValue = [null, null];\n }\n oldValue[0] = value;\n if (props.awaitForApply) {\n temporaryFilterValues({ ...temporaryFilterValues, [f.name]: oldValue });\n }\n else {\n setFilterValues((v: any) => ({ ...v, [f.name]: oldValue }))\n }\n }} />\n\n {\n const value = e.target.value;\n let oldValue = temporaryFilterValues[f.name] ?? filterValues[f.name];\n if (oldValue == null) {\n oldValue = [null, null];\n }\n oldValue[1] = value;\n if (props.awaitForApply) {\n setTemporaryFilterValues({ ...temporaryFilterValues, [f.name]: oldValue });\n }\n else {\n setFilterValues((v: any) => ({ ...v, [f.name]: oldValue }))\n }\n }} />\n
\n }\n else {\n return TODO\n }\n }\n\n const renderFilterRow = (f: IUserSearchFilter) => {\n\n const filterComponent = renderFilterComponent(f);\n if (props.workId === 23 && !filterComponent) { return null }\n\n return
\n \n {f.help && }\n \n \n {filterComponent}\n
\n }\n\n const clearFilters = (e: any) => {\n setShowPanel(false);\n panelRef.current.hide(e);\n setFilterValues(defaultFilterValues);\n }\n\n const closePanel = (e: any) => {\n panelRef.current.hide(e);\n setShowPanel(false);\n }\n\n const render = () => {\n return
\n {loading.renderBox()}\n {error === undefined &&\n
\n {filters.map && filters.map(f => renderFilterRow(f))}\n
}\n {error !== undefined &&\n
\n \n {error}\n
}\n\n
\n \n \n {props.awaitForApply &&\n }\n {props.awaitForDoSearch &&\n }\n \n
\n
\n };\n\n const [showPanel, setShowPanel] = React.useState(false);\n\n const panelRef = React.useRef();\n\n function RenderAsButton({ className }: { className?: string } = {}) {\n className = className || 'fas fa-filter pointer filter-btn';\n let hasFilters = false;\n\n for (const i in defaultFilterValues) {\n if (defaultFilterValues[i] != null && defaultFilterValues[i] != undefined && defaultFilterValues[i] != '') {\n hasFilters = true;\n break;\n }\n }\n\n if (!hasFilters) {\n for (const i in filterValues) {\n if (filterValues[i] != null && filterValues[i] != undefined && filterValues[i] != '') {\n hasFilters = true;\n break;\n }\n }\n }\n\n if (filters.length > 0) {\n return
\n {\n if (props.awaitForApply || props.awaitForDoSearch) {\n setShowPanel(a => !a)\n } else {\n panelRef.current.toggle(e);\n }\n }} />\n\n {showPanel && (props.awaitForApply || props.awaitForDoSearch) &&
\n {render()}\n
}\n\n \n {render()}\n \n
;\n }\n else {\n return ;\n }\n }\n\n\n const renderAsButton = ({ className }: { className?: string } = {}) => {\n if (buttonRef.current == null) {\n const instance = ;\n buttonRef.current = instance;\n }\n\n React.useEffect(() => {\n return () => {\n buttonRef.current = null;\n }\n }, [filterValues]);\n\n return \n }\n\n const Component = React.memo(\n RenderAsButton,\n (a: any, b: any) => {\n return true;\n });\n\n const setFilter = (name: string, value: any) => {\n setFilterValues((f: any) => ({ ...f, [name]: value }));\n }\n\n const hasFilters = () => {\n const keys = Object.keys(filterValues);\n const values = keys.map(k => filterValues[k]).filter(r => r != undefined);\n return values.length > 0;\n }\n\n return {\n signature: JSON.stringify(filterValues),\n Component: Component,\n loading,\n filters: filterValues,\n searchOrder,\n returnSearchOrderToFalse,\n hasFilters,\n mergeFilters: (v: any) => ({ ...filterValues, ...v }),\n merge: (v: any) => ({ ...filterValues, ...v }),\n render: render,\n setFilter,\n renderAsButton: renderAsButton,\n }\n}\n","import * as React from 'react';\n\nimport { connect } from 'react-redux';\nimport { ApplicationState } from '../../store';\nimport { RequireRole } from '../../components/custom/RequireRole';\n\nexport default connect(\n (state: ApplicationState) => ({\n ...state.identity\n }),\n {},\n)(RequireRole as any) as any; // eslint-disable-line @typescript-eslint/no-explicit-any\n","import * as React from 'react';\n\nimport { IUserIdentity } from '@models';\n\nexport interface IProps {\n children: any;\n exclude?: string;\n role?: string;\n oneOf?: string[];\n user: IUserIdentity;\n}\n\nexport function RequireRole({children, oneOf, user, role, exclude}: IProps) {\n if (oneOf != undefined && oneOf.find(o => user.roles.includes(o)) != undefined) {\n return children;\n }\n if (exclude != undefined && !user.roles.includes(exclude)) {\n return children;\n }\n else if (role != undefined && user.roles.includes(role)) {\n return children;\n }\n else {\n return null;\n }\n}\n","const MAIL_REGEXP = /^[a-zA-Z0-9.!#$%&’*+/=?^_`{|}~-]+@[a-zA-Z0-9-]+(?:\\.[a-zA-Z0-9-]+)*$/;\n\nconst minLength = (min: number) =>\n (s: number|string|undefined) =>\n s && s != null && typeof(s) === 'string' && s.length >= min;\n\nconst notEmpty = (s: number|string|undefined) =>\n s && s != null && (typeof(s) !== 'string' || s.trim() !== '');\n\nconst match = (pre: string|undefined) =>\n (value: string|undefined) => value == pre;\n\nconst email = (s: string) =>\n s == '' || s == undefined || s.match(MAIL_REGEXP) != undefined;\n\nconst validations = {\n minLength,\n match,\n notEmpty,\n email,\n}\n\nconst validate = (data: any, prop: string, errors: any, fn: Function, message: string = 'Error', all: boolean = false) => {\n const v = fn(data ? (!all ? data[prop] : data) : undefined, data);\n\n if (!v) {\n errors[prop] = message;\n }\n}\n\nexport {\n validations,\n validate\n};","import { get as i18n } from '../i18n';\nimport { validate, validations as V } from '@components/custom/validations';\nimport { createFieldValidation, IFieldValidation } from '@models';\n\ntype IValidation = {\n name: string,\n message: string,\n validation: Function,\n all?: boolean,\n};\n\ntype EqualsToTarget = {\n object: any,\n property: string,\n};\n\nconst isEqualsToTarget = (v: any): v is EqualsToTarget =>\n (v as EqualsToTarget).object !== undefined;\n\nexport default class ValidationBuilder {\n private t: Function = i18n;\n private errors: any = {};\n private data: T|undefined;\n private validations: IValidation[] = [];\n\n static create(data: T|undefined = undefined) {\n return new ValidationBuilder(data);\n }\n\n static new() {\n return new ValidationBuilder(undefined);\n }\n\n constructor(data: T|undefined = undefined) {\n this.data = data;\n }\n\n public lift() {\n return (data: T) => {\n this.data = data;\n\n return this.build();\n }\n }\n\n public withFieldValidations(resourceType: number, fields?: IFieldValidation[]) {\n const fieldValidations = fields?.filter(f => f.resourceType === resourceType) ?? [];\n for (const f of fieldValidations) {\n this.custom(f.errorMessage, createFieldValidation(f.value), f.field);\n }\n return this;\n }\n\n public withI18n(f: Function) {\n this.t = f;\n return this;\n }\n\n public withData(data: T) {\n this.data = data;\n return this;\n }\n\n public customValidations(validations: {name: string, msg: string, validation: Function}[]) {\n for (const v of validations) {\n this.custom(v.msg, v.validation, v.name);\n }\n return this;\n }\n\n public custom(msg: string, validation: Function, name: string | undefined = undefined) {\n this.validations.push({name: name ?? 'error', validation, message: this.t(msg), all: true});\n return this;\n }\n\n public add(name: string, validation: Function, message: string) {\n this.validations.push({name, validation, message: this.t(message)});\n return this;\n }\n\n public minLength(name: string, minLength: number, message: string|undefined = undefined) {\n this.add(name, V.minLength(minLength), message ?? `${name} is required`);\n return this;\n }\n\n public notEmpty(name: string, message: string|undefined = undefined) {\n this.add(name, V.notEmpty, message ?? `${name} is required`);\n return this;\n }\n\n public notEmptyIf(condition: boolean|Function|undefined, name: string, message: string|undefined = undefined) {\n if (typeof(condition) === 'boolean' && condition === true) {\n this.add(name, V.notEmpty, message ?? `${name} is required`);\n }\n else if (typeof(condition) === 'function' && condition()) {\n this.add(name, V.notEmpty, message ?? `${name} is required`);\n }\n\n return this;\n }\n\n public match(name: string, data: any, message: string) {\n this.add(name, V.match(data), message);\n return this;\n }\n\n public email(name: string, message: string = 'Invalid email') {\n this.add(name, V.email, message);\n return this;\n }\n\n public equalTo(name: string, prop: string|EqualsToTarget, message: string) {\n this.validations.push({\n name: name,\n validation: (value: any) =>\n value == undefined ||\n (typeof(prop) === 'string'\n ? value == (this.data as any)[prop]\n : isEqualsToTarget(prop)\n ? value == (prop.object[prop.property])\n : value == prop),\n message: this.t(message)\n });\n return this;\n }\n\n public build() {\n let errors: any = {};\n\n for (const v of this.validations) {\n try {\n validate(this.data, v.name, errors, v.validation, v.message, v.all);\n }\n catch (e) {\n errors['*'] = e + '';\n }\n }\n\n return errors;\n }\n}\n","import * as React from 'react';\n\nimport { connect } from 'react-redux';\nimport { ApplicationState } from '../../store';\nimport { RequirePermission } from '../../components/custom/RequirePermission';\nimport { hasPermission } from '../../utils/security';\n\ntype Props = {\n explicit?: boolean;\n}\n\nexport default connect(\n (state: ApplicationState, ownProps: any) => ({\n ...state.identity,\n hasPermission: (p: string, ctx: any = {}) => hasPermission(p, {\n user: state.identity?.user,\n work: state.user.work,\n explicit: ownProps.explicit !== false,\n ...ctx\n }),\n }),\n {},\n)(RequirePermission as any) as any; // eslint-disable-line @typescript-eslint/no-explicit-any\n","import * as React from 'react';\n\nimport { ISecurity } from '@models';\n\nexport interface IProps {\n children: any;\n hasPermission: Function;\n permission: string;\n ctx: any;\n security: ISecurity;\n}\n\nexport function RequirePermission({children, hasPermission, permission, security, ctx}: IProps) {\n const v = security.isGestor() || hasPermission(permission, ctx);\n\n if (v && children) {\n return children;\n }\n else {\n return null;\n }\n}\n","import * as React from 'react';\n\nimport { useKeyListener, useTranslation } from '@components';\nimport { storageGet, storageSet } from '@utils/storage';\n\nimport InputEventDispatcher from './InputEventDispatcher';\n\ntype InputSearchFilterCallback = (_: string | undefined) => void;\n\ntype InputSearchFilterProps = {\n filterKey: string;\n onChange?: InputSearchFilterCallback;\n title?: string;\n focus?: boolean;\n}\n\nexport function InputSearchFilter(props: InputSearchFilterProps) {\n const { t } = useTranslation();\n const searchInput = React.useRef();\n\n const [filter, setFilter] = React.useState(storageGet(props.filterKey, ''));\n\n const dispatcher = React.useRef(\n new InputEventDispatcher(\n props.onChange!,\n setFilter,\n ));\n\n React.useEffect(() => {\n storageSet(props.filterKey, filter);\n }, [filter]);\n\n if (props.focus) {\n useKeyListener({\n key: 'f',\n keyCtrl: true,\n handle: () => {\n searchInput.current.focus();\n }\n });\n }\n\n return setFilter(e.target.value)}\n onChange={e => dispatcher.current.append(e)}\n type='search'\n value={filter}\n placeholder={t(props.title ?? 'Search')} />\n}\n\nexport function useInputSearch(props: InputSearchFilterProps) {\n const [filter, setFilter] = React.useState(storageGet(props.filterKey, ''));\n\n const onInput = (search: string | undefined) => {\n setFilter(search);\n props.onChange?.(search);\n }\n\n const render = () => {\n return ;\n }\n\n return {\n render: render,\n value: filter,\n }\n}\n","import * as React from 'react';\n\nexport interface IProps {\n onPaste?: Function;\n children?: any;\n}\n\nexport function InputPasteHandler(props: IProps) {\n const containerEl = React.useRef();\n\n const handlePasteEvent = (event: any) => {\n\tconst w = window as any;\n\n\tconst data = (event.clipboardData || w.clipboardData).getData('text');\n\tif (props.onPaste) {\n\t props.onPaste(data);\n\t}\n\tevent.preventDefault();\n }\n\n React.useEffect(() => {\n\tif (containerEl.current) {\n\t containerEl.current.addEventListener('paste', handlePasteEvent);\n\n\t return () => containerEl.current.removeEventListener('paste', handlePasteEvent);\n\t}\n }, [containerEl.current]);\n\n return (
\n\t{props.children}\n
);\n}\n","import * as React from 'react';\n\nimport { FormikValues, useFormik } from 'formik';\nimport { FloatField, FormField } from './FormField';\nimport { AutoComplete } from 'primereact/autocomplete';\nimport { classNames } from 'primereact/utils';\nimport { Calendar } from 'primereact/calendar';\nimport { InputGroup } from './InputGroup';\nimport { Message } from 'primereact/message';\nimport { Editor } from 'primereact/editor';\nimport { InputSwitch, MultiSelect, Select, useTranslation } from '..';\nimport { Dropdown } from 'primereact/dropdown';\nimport { InputPasteHandler } from './InputPasteHandler';\nimport * as DateUtils from '@utils/date-utils';\nimport { currentLocale } from '../../i18n';\nimport { observeValue } from '@utils/hooks';\n\nexport interface IUseFormProps {\n initialValues: T;\n validate?: (_: T) => any;\n onSubmit?: Function;\n onChange?: Function;\n validateOnMount?: boolean,\n readonly?: boolean;\n loading?: any;\n validateOnChange?: boolean;\n}\n\ninterface IInputOpts {\n autoFocus?: boolean;\n type?: string;\n title?: string;\n containerClassName?: string;\n className?: string;\n containerStyle?: any;\n placeholder?: string;\n style?: any;\n defaultValue?: any;\n onBlur?: Function;\n ref?: any;\n map?: Function;\n readOnly?: boolean;\n}\n\ntype ICalendarOpts = IInputOpts & {\n dateFormat?: string;\n}\n\ntype ITextareaInputOpts =\n IInputOpts & {\n rows?: number;\n suggestions?: string[];\n length?: number;\n readonly?: boolean;\n };\n\ninterface ISelectOpts {\n options: any[];\n optionLabel?: string;\n optionValue?: string;\n placeholder?: string;\n containerClassName?: any;\n containerStyle?: any;\n onBlur?: Function;\n style?: any;\n blank?: boolean;\n blankText?: string;\n filter?: boolean;\n}\n\nexport function useForm(props: IUseFormProps = { initialValues: {} as T }) {\n const [loading, setLoading] = React.useState(false);\n const [error, setError] = React.useState(undefined);\n\n const { t } = useTranslation();\n\n const form: any = useFormik({\n initialValues: props.initialValues,\n validate: (data) => {\n if (props.validate && !props.readonly) {\n return props.validate(data);\n }\n else {\n return undefined;\n }\n },\n onSubmit: async (data) => {\n if (props.onSubmit && !props.readonly) {\n const resp = await props.onSubmit(data);\n if (resp.ok) {\n setError(undefined);\n }\n else {\n setError(t(resp.message));\n }\n setLoading(false);\n }\n else {\n setError(undefined);\n setLoading(false);\n }\n },\n validateOnChange: props.validateOnChange,\n });\n\n React.useEffect(() => {\n if (props.validateOnMount && props.validate && !props.readonly) {\n form.setErrors(props.validate(props.initialValues));\n }\n }, []);\n\n const hasError = () =>\n Object.keys(form.errors).length > 0;\n\n const isFormFieldValid = (name: string) => {\n return !form.errors[name];\n }\n\n const getFormErrorMessage = (name: string) => {\n const isDate = name.toLowerCase().includes('date');\n const className = isDate ? 'p-error date' : 'p-error';\n return !isFormFieldValid(name) && {form.errors[name]};\n };\n\n const handleChange = (ev: any, opts: any | undefined = undefined) => {\n const res = form.handleChange(ev);\n\n if (props.onChange) {\n const value = opts?.map\n ? opts!.map(ev.target.value)\n : (opts?.type == 'number')\n ? parseFloat(ev.target.value)\n : ev.target.value;\n\n const data = { ...form.values, [ev.target.id]: value };\n props.onChange(data);\n }\n return res;\n }\n\n const hasChanges = () => {\n return JSON.stringify(props.initialValues) != JSON.stringify(form.values);\n }\n\n const field = (name: string, title: string, comp: Function) => {\n return \n {comp()}\n \n }\n\n const floatField = (name: string, title: string, comp: Function) => {\n return \n {comp()}\n \n }\n\n const suffixField = (name: string, suffix: string, comp: Function) => {\n return \n \n {comp()}\n \n ;\n }\n\n const errorBox = () => {\n if (error)\n return \n else\n return null;\n }\n\n const inputs = (names: string[], opts: { [key: string]: IInputOpts }) => {\n return \n {names.map(name =>\n
\n opts[name]?.onBlur && opts[name]?.onBlur?.(e)}\n placeholder={opts[name]?.placeholder}\n autoFocus={opts[name]?.autoFocus}\n className={classNames('e', opts[name]?.className, { 'p-invalid': !isFormFieldValid(name) })} />\n {getFormErrorMessage(name)}\n
)}\n \n }\n\n const input = (name: string, opts: IInputOpts = {}) => {\n if (opts.type == 'date') {\n const setDateFromEvent = (data: string) => {\n form.setFieldValue(name, DateUtils.format(data, 'y-m-d'))\n }\n\n return (\n
\n handleChange(e, opts)}\n onBlur={e => opts.onBlur && opts.onBlur(e)}\n placeholder={opts.placeholder}\n autoFocus={opts.autoFocus}\n className={classNames('e', opts.className, { 'p-invalid': !isFormFieldValid(name) })} />\n {getFormErrorMessage(name)}\n
\n );\n }\n else {\n return (\n handleChange(e, opts)}\n onBlur={e => opts.onBlur && opts.onBlur(e)}\n placeholder={opts.placeholder}\n autoFocus={opts.autoFocus}\n className={classNames('e', opts.className, { 'p-invalid': !isFormFieldValid(name) })} />\n {getFormErrorMessage(name)}\n );\n }\n }\n\n const editor = (name: string, opts: IInputOpts = {}) => {\n return \n form.setFieldValue(name, ev.htmlValue)}\n value={form.values[name] ?? ''} />\n ;\n }\n\n const checkBox = (name: string, opts: IInputOpts = {}) => {\n return
\n \n {getFormErrorMessage(name)}\n
\n }\n\n const autoCompleteTextArea = (name: string, inputOpts: ITextareaInputOpts | string[] = {}) => {\n const opts: ITextareaInputOpts = inputOpts.length\n ? { suggestions: inputOpts } as ITextareaInputOpts\n : inputOpts as ITextareaInputOpts;\n\n return
\n form.setFieldValue(name, e.target.value)}\n />\n \n {/* opts.suggestions}\n autoFocus={opts.autoFocus}\n suggestions={opts.suggestions}\n className={classNames('e', { 'p-invalid': !isFormFieldValid(name) })}> */}\n {getFormErrorMessage(name)}\n
\n }\n\n const autoComplete = (name: string, inputOpts: ITextareaInputOpts | string[] = {}) => {\n const opts: ITextareaInputOpts = inputOpts.length\n ? { suggestions: inputOpts } as ITextareaInputOpts\n : inputOpts as ITextareaInputOpts;\n\n return
\n opts.suggestions}\n autoFocus={opts.autoFocus}\n suggestions={opts.suggestions}\n className={classNames('e', { 'p-invalid': !isFormFieldValid(name) })}>\n {getFormErrorMessage(name)}\n
\n }\n\n const textarea = (name: string, opts: ITextareaInputOpts = {}) => {\n return
\n \n {getFormErrorMessage(name)}\n
\n }\n\n const calendar = (name: string, opts: ICalendarOpts = {}) => {\n const setDateFromEvent = (data: string) => {\n form.setFieldValue(name, DateUtils.parseDate(data))\n }\n\n return (\n
\n {\n const date = e.value as Date;\n if (date == null) {\n return null;\n }\n const utc = new Date(Date.UTC(date.getFullYear(), date.getMonth(), date.getDate(), 0, 0, 0));\n handleChange({\n target: e.target,\n value: utc\n });\n }}\n showIcon />\n {getFormErrorMessage(name)}\n
\n
);\n }\n\n const select = (name: string, inputOpts: ISelectOpts | any[]) => {\n const opts: ISelectOpts = (\"options\" in inputOpts)\n ? inputOpts as ISelectOpts\n : { options: inputOpts } as ISelectOpts;\n\n const key = opts.optionValue ?? 'id';\n const label = opts.optionLabel ?? 'name';\n\n const resolve = (value: any) => {\n if (value) {\n return opts.options.find(o => o[key] == form.values[name])?.[label];\n }\n else {\n return opts.placeholder;\n }\n }\n\n function isWritable(obj: T, key: keyof T) {\n const desc = Object.getOwnPropertyDescriptor(obj, key) || {}\n return Boolean(desc.writable)\n }\n\n const isSimple = opts.options.length > 0\n && typeof (opts.options[0]) === 'string';\n\n const options = opts.blank\n ? [{ [label]: opts.blankText, }].concat(opts.options)\n : isSimple\n ? opts.options.map(o => ({ [key]: o, [label]: o }))\n : opts.options;\n\n options.map(o => {\n const iw = isWritable(o, 'name')\n if (iw) {\n o.name = t(o.name);\n }\n });\n\n return
\n {props.readonly &&\n }\n {!props.readonly && opts.onBlur && opts.onBlur(e)}\n className={classNames('e', { 'p-invalid': !isFormFieldValid(name) })} />}\n {getFormErrorMessage(name)}\n
\n }\n\n const multiselect = (name: string, inputOpts: ISelectOpts | any[], filter?: boolean) => {\n const opts: ISelectOpts = (\"options\" in inputOpts)\n ? inputOpts as ISelectOpts\n : { options: inputOpts } as ISelectOpts;\n\n const key = opts.optionValue ?? 'id';\n const label = opts.optionLabel ?? 'name';\n\n const resolve = (value: any) => {\n if (value) {\n return opts.options.find(o => o[key] == form.values[name])?.[label];\n }\n else {\n return opts.placeholder;\n }\n }\n\n const isSimple = opts.options.length > 0\n && typeof (opts.options[0]) === 'string';\n\n const options = opts.blank\n ? [{ [label]: opts.blankText, }].concat(opts.options)\n : isSimple\n ? opts.options.map(o => ({ [key]: o, [label]: o }))\n : opts.options;\n\n return
\n {props.readonly &&\n }\n {!props.readonly && opts.onBlur && opts.onBlur(e)}\n className={classNames('e', { 'p-invalid': !isFormFieldValid(name) })} />}\n {getFormErrorMessage(name)}\n
\n }\n\n\n const span = (name: string, opts: IInputOpts = {}) => {\n return
\n \n
\n }\n\n const clear = () => {\n const data = form.values;\n for (const k of Object.keys(data)) {\n form.setFieldValue(k, null);\n }\n if (props.initialValues) {\n for (const k of Object.keys(props.initialValues)) {\n form.setFieldValue(k, (props.initialValues as any)[k]);\n }\n }\n }\n\n const setFieldValues = (data: any) => {\n form.resetForm();\n if (!props.readonly) {\n for (const k of Object.keys(data)) {\n form.setFieldValue(k, data[k]);\n }\n }\n }\n\n const isLoading = () => {\n if (props.loading && typeof (props.loading) === 'boolean') {\n return props.loading;\n }\n else if (props.loading && props.loading.isLoading) {\n return props.loading.isLoading();\n }\n else {\n return false;\n }\n }\n\n const isInvalid = () => hasError() || isLoading();\n\n const isValid = () => !isInvalid();\n\n type GetF = (name: string) => R;\n const get: GetF = (name: string) => form.values[name];\n\n function observe(name: string, handler: (_: T) => void) {\n return observeValue(handler, form.values[name]);\n }\n\n return {\n autoComplete,\n autoCompleteTextArea,\n calendar,\n checkBox,\n clear,\n editor,\n errorBox,\n field,\n floatField,\n form,\n get,\n getFormErrorMessage,\n handleChange: handleChange,\n handleSubmit: form.handleSubmit,\n hasChanges,\n hasError,\n input,\n inputs,\n isFormFieldValid,\n isInvalid,\n isValid,\n multiselect,\n observe,\n select,\n setFieldValue: form.setFieldValue,\n setFieldValues,\n span,\n suffixField,\n textarea,\n values: form.values,\n }\n}\n","import * as React from 'react';\n\nimport { OverlayPanel } from 'primereact/overlaypanel';\n\nexport interface IUseOverlayProps {\n className?: string;\n render: Function;\n requireData?: boolean;\n style?: any;\n}\n\nexport function useOverlay(props: IUseOverlayProps) {\n const panelRef = React.useRef();\n const [data, setData] = React.useState();\n\n const render = () =>\n \n {props.requireData === true && data != undefined && props.render(data)}\n {props.requireData != true && props.render(data)}\n \n\n const show = (event: any, data: any = undefined) => {\n setData(data);\n panelRef.current.toggle(event)\n };\n\n const clear = (event: any = undefined) => {\n setData(undefined);\n if (panelRef.current) {\n panelRef.current.hide();\n }\n }\n\n return {\n clear,\n render,\n show,\n };\n}\n","import * as React from 'react';\n\nimport * as signalR from '@microsoft/signalr';\n\nexport interface IUseSignalRProps {\n key?: string;\n method: string;\n onMessage: (data: T) => void;\n endpoint?: string;\n}\n\nconst __connections: any = {};\nconst __connectionHandlers: any = {};\n\nconst startSignalNotifications = async (signalConnection: signalR.HubConnection) => {\n try {\n await signalConnection.start();\n }\n catch (err) {\n console.log(err);\n setTimeout(() => startSignalNotifications(signalConnection), 5000);\n }\n};\n\nfunction getConnection(endpoint: string, method: string) {\n const key = endpoint + method;\n if (!__connections[key]) {\n const conn = new signalR.HubConnectionBuilder()\n .withUrl(endpoint)\n .withAutomaticReconnect()\n .build();\n __connections[key] = conn;\n\n // console.log('GET CONNECTION (register)', key);\n\n conn.on(method, rawMessage => {\n // console.log('USE SIGNALR (register): ', rawMessage, key);\n const handlers = __connectionHandlers[key] ?? [];\n for (const h of handlers) {\n h(rawMessage);\n }\n });\n\n conn.onclose(async () => {\n // console.log('USE SIGNALR (register) CLOSE');\n await startSignalNotifications(conn);\n });\n\n conn.start();\n }\n\n return __connections[endpoint];\n}\n\ntype Handler = (message: T) => void;\n\nfunction registerHandler(\n endpoint: string,\n method: string,\n handler: Handler,\n uniqueKey: string | undefined) {\n // console.log(`register handler ${uniqueKey}`, endpoint, method, handler);\n const key = endpoint + method;\n if (!__connectionHandlers[key]) {\n __connectionHandlers[key] = [];\n }\n __connectionHandlers[key].push(handler);\n}\n\nfunction unregisterHandler(\n endpoint: string,\n method: string,\n handler: Handler,\n uniqueKey: string | undefined) {\n // console.log(`unregister handler: ${uniqueKey}`, endpoint, method);\n const key = endpoint + method;\n if (!__connectionHandlers[key]) {\n __connectionHandlers[key] = [];\n }\n __connectionHandlers[key] = __connectionHandlers[key].filter((h: any) => h != handler);\n}\n\nexport function useSignalR(props: IUseSignalRProps) {\n const endpoint = props.endpoint ?? '/notifications';\n const conn = getConnection(endpoint, props.method);\n\n React.useEffect(() => {\n registerHandler(endpoint, props.method, props.onMessage, props.key);\n\n return () => unregisterHandler(endpoint, props.method, props.onMessage, props.key);\n }, []);\n\n return conn;\n}\n","import * as React from 'react';\n\nimport * as echarts from 'echarts';\n\nexport interface IProps {\n height?: number;\n options: any;\n}\n\nexport default function EChart(props: IProps) {\n const canvasRef = React.useRef();\n const chartInstance = React.useRef();\n\n const initialize = () => {\n const domElement = canvasRef.current;\n const parent = domElement.parentElement;\n const h = parseInt(parent.getBoundingClientRect().height);\n domElement.height = props.height ?? h;\n domElement.style.height = `${props.height ?? h}px`;\n // setHeight(`${h}px`);\n const chart = echarts.init(domElement);\n \n chart.setOption(props.options);\n \n chartInstance.current = chart;\n };\n\n React.useEffect(() => {\n initialize();\n \n return () => {\n if (chartInstance.current) {\n chartInstance.current.clear();\n }\n };\n }, [props.options]);\n\n return
;\n}","import * as React from 'react';\n\ntype Predicate = (source: any, ctx: any) => boolean;\n\ninterface Signal {\n field: string;\n source: string;\n type: 'show' | 'none';\n when: Predicate;\n}\n\nconst parsePredicate = (source: string|undefined) => {\n if (source) {\n const body = 'const a = ' + source + '; return a;';\n const fn = new Function('value', 'ctx', body);\n return fn;\n }\n else {\n return null;\n }\n}\n\nconst createSources = (source: string, ctx: string) => {\n const signals: Signal[] = [];\n try {\n const data = JSON.parse(atob(source));\n\n for (const field of Object.keys(data[ctx])) {\n const raw = data[ctx][field];\n const signal = {\n field,\n source: raw.source,\n type: raw.type,\n when: parsePredicate(raw.when),\n };\n\n signals.push(signal as Signal);\n }\n }\n catch (e) {\n console.error(e);\n console.log('error creating source signals', source);\n }\n\n return signals;\n}\n\nexport default class SignalManager {\n private signals: Signal[] = [];\n\n private hiddenFields: string[] = [];\n\n static create(source: string|undefined, ctx: string) {\n return React.useRef(new SignalManager(source, ctx));\n }\n\n constructor(source: string|undefined, ctx: string) {\n this.signals = source\n ? createSources(source, ctx)\n : [];\n }\n\n setValues(values: any, ctx: any = {}) {\n this.hiddenFields = [];\n // procesamos las senhales que ocultan/muestran campos\n const visibilitySignals = this.signals.filter(s => s.type === 'show');\n for (const v of visibilitySignals) {\n const field = v.field;\n let show = false;\n try {\n show = v.when(values[v.source], {...values, ...ctx});\n }\n catch (e) {\n console.log(e);\n }\n\n if (!show) {\n this.hiddenFields.push(field);\n }\n }\n\n return this;\n }\n\n fieldIsVisible(field: string|undefined) {\n return field == undefined || !this.hiddenFields.includes(field);\n }\n}\n","export interface ICountry {\n id: number;\n name: string;\n code: string;\n regions: IRegion[];\n}\n\nexport interface IDocumentType {\n id: number;\n name: string;\n description: string;\n isActive: boolean;\n}\n\nexport interface IRegion {\n id: number;\n name: string;\n counties: ICounty[];\n}\n\nexport interface ICounty {\n id: number;\n name: string;\n code: string;\n}\n\nexport interface INode {\n label: string;\n key: any;\n data: any;\n children: INode[];\n}\n\nexport const countyToNode = (c: ICounty, r: IRegion, y: ICountry) => {\n return {\n label: c.name,\n key: [y.id, r.id, c.id],\n data: c.id\n }\n}\n\nexport const regionToNode = (r: IRegion, c: ICountry) => {\n return {\n label: r.name,\n key: [c.id, r.id],\n data: r.id,\n children: r.counties.map(ct => countyToNode(ct, r, c)),\n }\n}\n\nexport const countryToNode = (c: ICountry) => {\n return {\n label: c.name,\n key: [c.id],\n data: c.id,\n children: c.regions.map(r => regionToNode(r, c)),\n }\n}\n\nexport const countriesToNode = (c: ICountry[]) =>\n c.map(countryToNode) as any[];","import { IWorker } from \"@models\";\n\nexport enum Roles {\n ADMIN = 'admin',\n CONTRACTOR = 'contractor',\n WORKER = 'worker',\n GESTOR = 'gestor',\n}\n\nexport interface IUserIdentity {\n id: number;\n userName: string;\n email: string;\n roles: string[];\n policies: string[];\n\n departments?: number[];\n obliqueDepartments?: number[];\n workFunctions?: number[];\n\n workerIds?: number[];\n contractorIds?: number[];\n}\n\nexport interface IUserData {\n id?: number;\n userName: string;\n email: string;\n password: string;\n roles: string[];\n}\n\nexport interface IAuthRequest {\n username: string;\n password: string;\n}\n\nexport interface IRole {\n id: number;\n name: string;\n}\n","import {\n ICountry, ICounty,\n IDocumentType,\n INode, IRegion,\n countriesToNode,\n countryToNode,\n countyToNode,\n regionToNode,\n} from './common';\nimport ModuleManager from '../modules/ModuleManager';\nimport { IAuthRequest, IUserData, IUserIdentity, IRole, Roles } from './identity';\nimport { messageTypes, IMessage, MessageType, INotification, NotificationType } from './notifications';\nimport {\n IMachinery, IWorker, IWorkerWithRelations, IWorkI18NResource, IActivityType, ILegalForm,\n IDepartment, IWorkFunction, IContractor, IContractorRequest,\n IMachinerySubType, IMachineryType,\n IResourceStatus, IResourceStatusType,\n ResourceStatusType,\n ResourceType,\n departmentIsProductive,\n getNotificationResourceTypes,\n getResourceTypes,\n} from './resources';\nimport {\n JobEncodingType,\n parseWork,\n PropertyGroupObjectType,\n IPropertyType, IPropertyGroupType, IPropertyGroup,\n IElementHasProperties,\n NotificationMessageAction,\n PropertyTypes,\n IContractorInvitation,\n IContractorInvitationRegisterData,\n IFieldValidation,\n INotificationMessage,\n INotificationTemplate,\n ISubContractorRequest,\n IWork, IWorkSettings, IWorkspace, IWorkShift, IWorkPermission, IContractType, AllPropertyTypes, IPreventiveResource,\n IModuleInfo,\n IWorkHasModule,\n getNotificationMessageActions,\n isJobPropertyGroupType,\n isJobHasContractorPropertyGroupType,\n isMachineryPropertyGroupType,\n isWorkerPropertyGroupType,\n isContractorWorkerPropertyGroupType,\n isRRHHPropertyGroupType,\n createFieldValidation,\n fieldValidationResourceTypes,\n} from './works';\nimport {\n jobStatusTypes, parseJob,\n IJob, IJobStatus, IJobHasContractor, IJobHasDepartment, IJobHasContractorAppUser, IJobHasMachinery, IJobHasWorker,\n JobStatusType, JobLogType, IJobLog\n} from './jobs'\nimport { ILog } from './logs';\nimport { IDocument } from './documents';\n\nexport interface IConstants {\n countries: ICountry[];\n}\n\nexport interface IPaginateResult {\n page: number;\n total: number;\n limit: number;\n data: T[];\n}\n\nexport interface IPaginateSort {\n name: string;\n asc: boolean;\n}\n\nexport enum UserSearchFilterType {\n BOOL = 0,\n TEXT = 1,\n DATE = 2,\n DATE_RANGE = 3,\n REFERENCE = 4,\n INT = 5,\n FLOAT = 6,\n MULTI_REFERENCE = 7,\n}\n\nexport interface IHelpDeskItemFile {\n fileName: string;\n temporalResourceId: string;\n}\n\nexport interface IHelpDeskItem {\n name: string;\n email: string;\n subject: string;\n description: string;\n files?: IHelpDeskItemFile[];\n workId: number;\n}\n\nexport interface ICommunicationFile {\n fileName: string;\n temporalResourceId: string;\n fileSize: number;\n}\n\nexport interface ICommunication {\n id: number;\n\n title: string;\n fromDate: Date;\n toDate: Date;\n description: string;\n isRecursive?: boolean;\n departments: ICommunicationHasDepartment[];\n file?: ICommunicationFile;\n workId: number;\n workspaces: ICommunicationHasWorkspace[];\n jobs: ICommunicationHasJob[];\n targetType?: number;\n isActive?: boolean;\n\n documents?: IDocument[];\n}\n\nexport interface ICommunicationHasDepartment {\n id?: number;\n communicationId?: number;\n departmentId: number;\n}\n\nexport interface ICommunicationHasWorkspace {\n id?: number;\n communicationId?: number;\n workspaceId: number;\n}\n\nexport interface ICommunicationHasJob {\n id?: number;\n communicationId?: number;\n jobId: number;\n}\n\nexport interface ICommunicationHasPolicy {\n id?: number;\n communicationId?: number;\n policy: string;\n}\nexport interface IUserSearchFilter {\n name: string;\n title: string;\n default?: any;\n help?: string;\n type: number;\n excludeRole?: string;\n requireRole?: string;\n shouldTranslate? : boolean;\n}\n\nexport interface IPaginateOptions {\n page?: number;\n limit?: number;\n searchTerm?: string;\n orderBy?: string;\n orderAsc?: boolean;\n}\n\nexport interface ISecurity {\n user?: IUserIdentity;\n\n hasRole: (role: string) => boolean;\n isAdmin: () => boolean;\n isGestor: () => boolean;\n isWorker: () => boolean;\n isContractor: () => boolean;\n isGestorOrWorker: () => boolean;\n isGestorOrContractor: () => boolean;\n hasPolicy: (policy: string) => boolean;\n\n setContext: (ctx: any) => void;\n withContext: (ctx: any) => ISecurity;\n\n hasWorker: (id?: number) => boolean;\n hasContractor: (id?: number) => boolean;\n getWorkerIds: () => number[];\n\n hasPermission: (perm: string, explicit?: boolean) => boolean;\n}\n\nexport type {\n IAuthRequest,\n // common\n IContractor,\n IContractorInvitation,\n IContractorInvitationRegisterData,\n IContractorRequest,\n ICountry,\n ICounty,\n IDocumentType,\n INode,\n ILog,\n IMachinery,\n IMachineryType,\n IMachinerySubType,\n IMessage,\n INotification,\n INotificationMessage,\n INotificationTemplate,\n IElementHasProperties,\n IPropertyGroup,\n IPropertyGroupType,\n IPropertyType,\n IRegion,\n IRole,\n ISubContractorRequest,\n IUserData,\n IUserIdentity,\n IModuleInfo,\n IWorkHasModule,\n IWork,\n IWorker,\n IWorkerWithRelations,\n IWorkI18NResource,\n IWorkSettings,\n IWorkShift,\n IWorkPermission,\n IWorkspace,\n IActivityType,\n ILegalForm,\n IDepartment,\n IFieldValidation,\n IWorkFunction,\n IJob,\n IJobStatus,\n IJobHasContractor,\n IJobHasDepartment,\n IJobHasContractorAppUser,\n IJobHasMachinery,\n IJobHasWorker,\n IJobLog,\n IContractType,\n IPreventiveResource,\n IResourceStatus,\n IResourceStatusType,\n}\n\nexport interface IOption {\n value: T;\n error?: string;\n hasValue?: boolean;\n isError?: boolean;\n}\n\nexport {\n AllPropertyTypes,\n JobEncodingType,\n JobLogType,\n JobStatusType,\n MessageType,\n ModuleManager,\n NotificationMessageAction,\n NotificationType,\n PropertyTypes,\n PropertyGroupObjectType,\n ResourceStatusType,\n ResourceType,\n Roles,\n createFieldValidation,\n fieldValidationResourceTypes,\n getNotificationMessageActions,\n getNotificationResourceTypes,\n getResourceTypes,\n isJobPropertyGroupType,\n isJobHasContractorPropertyGroupType,\n isMachineryPropertyGroupType,\n isContractorWorkerPropertyGroupType,\n isRRHHPropertyGroupType,\n isWorkerPropertyGroupType,\n jobStatusTypes,\n countriesToNode,\n countryToNode,\n countyToNode,\n parseJob,\n parseWork,\n regionToNode,\n departmentIsProductive,\n messageTypes,\n};\n\nexport const getMachineryName = (m: IMachinery) => {\n if (m === undefined) {\n return '';\n }\n else if (m.name && m.name != '') {\n return m.name;\n }\n else if (m.code && m.code != '') {\n return m.code;\n }\n else if (m.licenseNumber && m.licenseNumber != '') {\n return `${m.prefixLicenseNumber}/${m.licenseNumber}/${m.suffixLicenseNumber}`;\n }\n else {\n return `${m.id}`;\n }\n}\n\nexport interface IJobSettings {\n id?: number;\n workId: number;\n skipInformationLoadedState: boolean;\n colorizeContractorIndicators: boolean;\n freeRequirementsAreMandatory: boolean;\n omitJobHasContractorDefaultNotification: boolean;\n showResourceIncidenceIndicator: boolean;\n jobHasContractorNotificationTargetPolicy?: string;\n informationLoadedNotificationPolicy?: string;\n}\n\nexport interface IWorkerSettings {\n id?: number;\n workId: number;\n showGeneralIndicators: boolean;\n showWorkerImage: boolean;\n workerTypeIsMandatory: boolean;\n}\n\nexport interface IMachinerySettings {\n id?: number;\n workId: number;\n showGeneralIndicators: boolean;\n subTypeMandatory: boolean;\n onlyLicenseNumber: boolean;\n}\n\nexport interface IContractorSettings {\n id?: number;\n workId: number;\n showGeneralIndicators: boolean;\n legalFormMandatory: boolean;\n jhcStartDateMandatory: boolean;\n jhcDescriptionMandatory: boolean;\n cifCantBeRepeated: boolean;\n canAddSubWorkers: boolean;\n canAddSubMachineries: boolean;\n}\n\nexport interface IEventTrigger {\n id: number;\n workId: number;\n name: string;\n code: string;\n eventTriggerTypeId: number;\n resourceTypeId: number;\n}\n\nexport enum EventTriggerType {\n BeforeUpdate = 1,\n BeforeCreate = 2,\n BeforeUpdateOrCreate = 3,\n AfterUpdate = 4,\n AfterCreate = 5,\n AfterUpdateOrCreate = 6,\n};\n\nexport const getEventTriggerTypes = (t: Function) => {\n return [\n { id: EventTriggerType.BeforeUpdate, name: t('Before update') },\n { id: EventTriggerType.BeforeCreate, name: t('Before create') },\n { id: EventTriggerType.BeforeUpdateOrCreate, name: t('Before create or update') },\n { id: EventTriggerType.AfterUpdate, name: t('After update') },\n { id: EventTriggerType.AfterCreate, name: t('After create') },\n { id: EventTriggerType.AfterUpdateOrCreate, name: t('After create or update') },\n ];\n}\n","import history from '../AppHistory';\nimport Hooks from './hooks';\nimport { formatLocalDate, formatMinutes, timeToMinutes } from './date-utils';\nimport { KeyCodes, keyIsEnter } from './key-utils';\nimport { interpolate, format, strConcat, strJoin, zeroPad, zeroRightPad } from './string-utils';\nimport { formatFileSize } from './file-utils';\n\nconst DEBUG = true;\n\nexport const __d = (...args: any[]) => {\n if (DEBUG) {\n console.log(...args);\n }\n}\n\nexport const unique = (data: any[], property: string = 'id') => {\n const uniqueIndexes: any[] = [];\n const res: any[] = [];\n for (const o of data) {\n const id = o[property];\n if (!uniqueIndexes.includes(id)) {\n res.push(o);\n uniqueIndexes.push(id);\n }\n }\n\n return res;\n}\n\n// file utils\nexport { formatFileSize };\n\n// date utils\nexport { formatLocalDate, formatMinutes, timeToMinutes };\n\n// string utils\nexport { interpolate, format, strConcat, strJoin, zeroPad, zeroRightPad };\n\nexport const redirectToExternal = (url: string) => {\n window.location.href = url;\n}\n\nexport const redirectToExternalNewTab = (url: string) => {\n window.open(url, '_blank');\n}\n\nexport const goBack = () => {\n history.goBack();\n}\n\ntype RedirectOpts = {\n reload?: boolean;\n}\n\nexport const redirectTo = (url: string, opts: RedirectOpts = {}) => {\n if (opts?.reload ?? false) {\n redirectToExternal(url);\n }\n else {\n history.push(url);\n }\n}\n\nexport const delay = (ms: number) => {\n return new Promise((resolve, _) => {\n setTimeout(resolve, ms);\n });\n}\n\nexport const getGraphqlError = (res: any, op: string | undefined = undefined) => {\n if (res.errors && res.errors.length > 0) {\n return JSON.stringify(res.errors[0]);\n }\n else if (op) {\n return res.data[op].error;\n }\n}\n\nexport function flatten(data: T[][]): T[] {\n return data.reduce((acc, t) => acc.concat(t), []);\n}\n\nexport function downloadFileFromUrl(url: string, name: string) {\n const link = document.createElement(\"a\");\n link.download = name;\n link.href = url;\n document.body.appendChild(link);\n link.click();\n document.body.removeChild(link);\n}\n\nexport const getIntParams = (o: any) => {\n const res: any = {};\n for (const k of Object.keys(o)) {\n res[k] = parseInt(o[k]);\n }\n\n return res;\n}\n\ninterface IQueryParameterOptions {\n defaultValue?: T,\n map?: (_: string) => T | undefined,\n};\n\nexport function getIntQueryParameters(url: string) {\n const parametersStr = url.startsWith('?') ? url.substr(1) : url;\n const parametersArr = parametersStr.split('&');\n const parameters: any = {};\n\n for (const k of parametersArr) {\n const [name, value] = k.split('=');\n const res = parseInt(value);\n if (res != undefined && !isNaN(res)) {\n parameters[name] = res;\n }\n }\n\n return parameters;\n}\n\nexport function getQueryParameter(url: string, parameterName: string, options: IQueryParameterOptions = {}) {\n const parametersStr = url.startsWith('?') ? url.substr(1) : url;\n const parametersArr = parametersStr.split('&');\n const parameters: any = {};\n for (const k of parametersArr) {\n const [name, value] = k.split('=');\n parameters[name] = options.map ? options.map(value) : value;\n }\n\n return parameters[parameterName] ?? options.defaultValue;\n}\n\ntype WithName = {\n name: string;\n} | string;\n\nexport function nameOf(n: WithName | undefined) {\n return typeof n === 'string' ? n : n?.name;\n}\n\nexport default {\n delay,\n downloadFileFromUrl,\n flatten,\n getIntParams,\n getQueryParameter,\n getIntQueryParameters,\n getGraphqlError,\n goBack,\n nameOf,\n redirectTo,\n redirectToExternal,\n // file utils\n formatFileSize,\n // date utils\n formatLocalDate,\n formatMinutes,\n timeToMinutes,\n // string\n format,\n interpolate,\n strConcat,\n strJoin,\n zeroPad,\n zeroRightPad,\n // hooks\n onNotification: Hooks.onNotification,\n //\n __d,\n KeyCodes,\n keyIsEnter,\n unique,\n}\n","import {\n ApolloClient,\n InMemoryCache,\n gql,\n} from \"@apollo/client\";\n\nimport DateUtils from '@utils/date-utils';\n\nlet _client: ApolloClient | null = null;\nlet _lastUsedName: string | null = null;\n\nconst getClient = (name : string) => {\n\n // if (_client == null) {\n // _client = new ApolloClient({\n // uri: `/graphql?name=${name}`,\n // cache: new InMemoryCache()\n // });\n // }\n\n const uri = `/graphql?name=${name}`;\n\n if (_client == null || _lastUsedName !== name) {\n _client = new ApolloClient({\n uri: uri,\n cache: new InMemoryCache()\n });\n _lastUsedName = name;\n }\n\n return _client;\n}\n\nexport interface ISimpleQueryOpts {\n returnPath?: string;\n map?: (a: T) => any,\n mapEvery?: (a: T) => any,\n}\n\nasync function q(query: string, variables: any, opts: ISimpleQueryOpts = {}) {\n const name = query.split(' ')[1].split('(')[0];\n\n if(name.length == 0){\n console.log('query', query);\n console.log('* name', name)\n console.log('+ 0', query.split(' ')[0])\n console.log('+ 1', query.split(' ')[1])\n }\n const client = getClient(name);\n\n const resp = await client.query({\n query: gql(query),\n variables,\n fetchPolicy: noCache,\n });\n\n if (opts.returnPath) {\n const parts = opts.returnPath.split('.');\n const res = parts.reduce((acc, p) => {\n return acc[p];\n }, resp.data);\n\n if (opts.map) {\n return opts.map(res);\n }\n else if (opts.mapEvery && res && res.length) {\n return res.map(opts.mapEvery);\n }\n else {\n return res;\n }\n }\n else {\n return resp;\n }\n}\n\nconst parseVariables = (data: any) => {\n const res: any = {};\n\n if (data == null) {\n return data;\n }\n else if (typeof(data) != 'object') {\n return data;\n }\n\n for (const k of Object.keys(data)) {\n if (data[k] === null) {\n res[k] = null;\n }\n else if (typeof(data[k]) === 'object' && data[k].getTimezoneOffset) {\n res[k] = DateUtils.fromUtc(data[k]);\n }\n else if (typeof(data[k]) === 'object' && data[k].concat) {\n res[k] = data[k].map(parseVariables);\n }\n else if (typeof(data[k]) === 'object') {\n res[k] = parseVariables(data[k]);\n }\n else {\n res[k] = data[k];\n }\n }\n\n return res;\n}\n\nasync function m(query: string, variables: any, opts: ISimpleQueryOpts = {}) {\n\n const name = query.split(' ')[1].split('(')[0];\n const client = getClient(name);\n const parsedVariables = parseVariables(variables);\n\n const resp = await client.mutate({\n mutation: gql(query),\n variables: parsedVariables,\n });\n\n if (opts.returnPath) {\n const parts = opts.returnPath.split('.');\n const res = parts.reduce((acc, p) => {\n return acc[p];\n }, resp.data);\n\n return res;\n }\n else {\n return resp;\n }\n}\n\nconst noCache = 'no-cache';\n\nexport {\n gql,\n getClient,\n noCache,\n m,\n q,\n}\n","import { IJob, IJobHasDepartment, ISecurity } from '@models';\nimport { IDocument, IDocumentVersion } from '@models/documents';\nimport { i18n } from '@components';\n\nexport enum RequirementTypeKind {\n Mandatory = 1,\n Optional = 2,\n}\n\nexport enum RequirementTargetType {\n Contractor = 1,\n JobHasContractor = 2,\n Worker = 3,\n JobHasWorker = 4,\n Machinery = 5,\n JobHasMachinery = 6,\n JobHasDepartment = 7,\n Job = 8,\n}\n\nexport enum RequirementValidationType {\n NOT_EMPTY = 1,\n SIGNED_PDF = 2,\n REQUIRE_ALL = 3,\n ITA = 4,\n}\n\nexport enum RequirementStatusFlag {\n FILE_REMOVED = 1,\n EXPIRED = 2,\n}\n\nexport const requirementTargetTypes = [\n { id: RequirementTargetType.Contractor, name: i18n('Contractor') },\n { id: RequirementTargetType.JobHasContractor, name: i18n('JobHasContractor') },\n { id: RequirementTargetType.Machinery, name: i18n('Machinery') },\n { id: RequirementTargetType.JobHasMachinery, name: i18n('JobHasMachinery') },\n { id: RequirementTargetType.Worker, name: i18n('Worker') },\n { id: RequirementTargetType.JobHasWorker, name: i18n('JobHasWorker') },\n { id: RequirementTargetType.JobHasDepartment, name: i18n('JobHasDepartment') },\n { id: RequirementTargetType.Job, name: i18n('Job') }\n];\n\ntype IRequirementCanUploadOpts = {\n hasAccessJobInformation?: boolean;\n requirementType?: IRequirementType;\n}\n\nexport function requirementCanUpload(\n r: IRequirement,\n targetType: RequirementTargetType,\n security: ISecurity,\n opts: IRequirementCanUploadOpts = {}): boolean {\n const isContractorResource = [\n RequirementTargetType.Contractor,\n RequirementTargetType.Machinery,\n RequirementTargetType.Worker,\n RequirementTargetType.JobHasContractor,\n RequirementTargetType.JobHasMachinery,\n RequirementTargetType.JobHasWorker,\n ].indexOf(targetType) >= 0;\n\n const isJobContractorResource = [\n RequirementTargetType.JobHasContractor,\n RequirementTargetType.JobHasMachinery,\n RequirementTargetType.JobHasWorker,\n ].indexOf(targetType) >= 0;\n\n const current = r.status.find(s => s.isCurrent);\n const requirementStatusRestriction =\n current?.statusTypeId == RequirementStatusTypes.NOT_LOADED\n || current?.statusTypeId == RequirementStatusTypes.NOT_VALIDATED\n || current?.statusTypeId == RequirementStatusTypes.PENDING\n || current?.statusTypeId == RequirementStatusTypes.VALIDATED; // NOTE: aunque esté validado dejamos subir un nuevo archivo\n\n if (security.isContractor() && isJobContractorResource && opts.requirementType?.requireJobInformationAccess) {\n return requirementStatusRestriction && (opts.hasAccessJobInformation ?? false);\n }\n else if (isContractorResource) {\n return requirementStatusRestriction && security.isContractor();\n }\n else {\n return requirementStatusRestriction && security.isWorker();\n }\n}\n\nexport function requirementHaveIncidences(r: IRequirement) {\n const current = r.incidences?.find(i => i.id);\n return current?.id;\n}\n\nexport function requirementHaveNotes(r: IRequirement) {\n const current = r.notes?.find(n => n.id);\n return current?.id;\n}\n\nexport function requirementCanBeValidated(r: IRequirement) {\n const current = r.status.find(s => s.isCurrent);\n\n return current?.statusTypeId == RequirementStatusTypes.PENDING\n || current?.statusTypeId == RequirementStatusTypes.VALIDATED\n || current?.statusTypeId == RequirementStatusTypes.NOT_VALIDATED\n || current?.statusTypeId == RequirementStatusTypes.NOT_LOADED; // NOTE: No dejaba validar si estaba caducado\n}\n\nexport enum RequirementStatusTypes {\n NOT_LOADED = 1,\n PENDING = 2,\n VALIDATED = 3,\n NOT_VALIDATED = 4,\n}\n\nexport interface IRequirementTypeKind {\n id: number;\n name: string;\n description?: string;\n}\n\nexport interface IRequirementExpirationType {\n id: number;\n name: string;\n description?: string;\n}\n\nexport interface IRequirementExpirationType {\n id: number;\n name: string;\n description?: string;\n}\n\nexport interface IRequirementTypeDocumentRestriction {\n id?: number;\n name: string;\n title: string;\n requirementTypeId: number;\n isActive: boolean;\n\n excludeMimeTypes?: string;\n mimeTypes?: string;\n limitFileSize?: number;\n regexp?: string;\n}\n\nexport interface IRequirementTypeValidationHolder {\n id?: number;\n requirementTypeId: number;\n\n isBlocking?: boolean;\n validationOrder?: number;\n\n policy?: string;\n appUserId?: number;\n departmentId?: number;\n workFunctionId?: number;\n jobResponsible?: boolean;\n onlyNotifications?: boolean;\n jobRso?: boolean;\n jobImpliedRso?: boolean;\n optional?: boolean;\n}\n\nexport interface IRequirementTypeSuggestion {\n id?: number;\n name: string;\n requirementTypeId: number;\n}\n\nexport enum RequirementTypeDependencyType {\n RequirementMustHaveBeenRead = 1,\n RequirementMustHaveBeenValidated = 2,\n IBO = 3,\n}\n\nexport interface IRequirementTypeDependency {\n id?: number;\n requirementTypeId: number;\n dependsOnRequirementId?: number;\n dependencyType?: RequirementTypeDependencyType;\n\n dependsOnRequirement?: IRequirementType;\n propagate?: boolean;\n}\n\nexport interface IRequirementType {\n id?: number;\n workId: number;\n name: string;\n title?: string;\n description?: string;\n requirementGroupId: number;\n targetType: number;\n kindId: number;\n expression?: string;\n isActive: boolean;\n isShared?: boolean;\n isPublic?: boolean;\n policy?: boolean;\n expirationTypeId?: number;\n expirationValue?: number;\n expirationThreshold?: number;\n expirationRequired?: boolean;\n validationTypeId?: number;\n isResourcePicture?: boolean;\n\n criteria?: string;\n template?: string;\n color?: string;\n orderValue?: number;\n notifyContractors?: boolean;\n notifyTitle?: string;\n notifyPolicy?: string;\n informationChargedNotifyPolicy?: string;\n notifyResponsible?: boolean;\n requireJobInformationAccess?: boolean;\n messageTemplateId?: number;\n\n dependencies?: IRequirementTypeDependency[];\n documentRestrictions?: IRequirementTypeDocumentRestriction[];\n suggestions?: IRequirementTypeSuggestion[];\n validationHolders?: IRequirementTypeValidationHolder[];\n\n billingTypeId?: number;\n usersExcludedChargedNotifications?: number[];\n}\n\nexport interface IRequirementStatusType {\n id: number;\n name: string;\n description?: string;\n}\n\nexport interface IRequirementStatusNote {\n id?: number;\n requirementId: number;\n requirementStatusId?: number;\n remarks: string;\n creationDate: Date;\n createdById?: number;\n}\n\nexport interface IRequirementValidationType {\n id: number;\n name: string;\n}\n\nexport interface IRequirementGroup {\n id?: number;\n name: string;\n title: string;\n description?: string;\n orderValue?: number;\n isActive: boolean;\n workId: number;\n legend?: string;\n\n color?: string;\n style?: string;\n icon?: string;\n\n requirementTypes?: IRequirementType[];\n}\n\nexport interface IRequirementStatus {\n id: number;\n dateTime: Date;\n requirementId: number;\n statusTypeId: number;\n createdById: number;\n isCurrent?: boolean;\n flag?: number;\n validatedBy?: number;\n remarks?: string;\n displayDateTime?: Date;\n notes?: IRequirementStatusNote[];\n}\n\nexport interface IRequirementValidation {\n id: number;\n appUserId: number;\n dateTime: Date;\n isCurrent?: boolean;\n validated?: boolean;\n validationHolderId?: number;\n}\n\nexport interface IRequirement {\n id: number;\n creationDate: Date;\n workId: number;\n requirementTypeId: number;\n requirementType?: IRequirementType;\n\n isShared?: boolean;\n isExpired?: boolean;\n expirationDate?: Date;\n expirationThreshold?: number;\n\n title?: string;\n remarks?: string;\n color?: string;\n\n documents?: IRequirementHasDocument[];\n incidences: IRequirementIncidence[];\n notes: IRequirementNote[];\n\n status: IRequirementStatus[];\n\n validations: IRequirementValidation[];\n\n hasNotes?: boolean;\n hasIncidences?: boolean;\n inProgress?: boolean;\n\n mandatory?: boolean;\n}\n\nexport interface IRequirementIncidence {\n id?: number;\n requirementId: number;\n creationDate: Date;\n createdById?: number;\n remarks: string;\n documentVersionId?: number;\n}\n\nexport interface IRequirementNote {\n id?: number;\n requirementId: number;\n creationDate: Date;\n createdById?: number;\n remarks: string;\n}\n\nexport interface IRequirementStatusNote {\n id?: number;\n requirementId: number;\n requirementStatusId?: number;\n remarks: string;\n creationDate: Date;\n createdById?: number;\n}\n\nexport interface IRequirementHasDocument {\n id: number;\n dateTime: Date;\n createdById: number;\n createdBy?: string;\n documentRestrictionId?: number;\n document: IDocument;\n}\n\nexport interface IRequirementFulfillDocument {\n name: string;\n resourceId: string | File;\n fileSize?: number;\n mimeType?: string;\n requirementTypeDocumentRestrictionId?: number;\n}\n\nexport interface IRequirementValidationData {\n remarks: string;\n expirationDate?: Date;\n expirationThreshold?: number;\n fileResourceId?: string;\n fileResourceName?: string;\n skipExpirationDate?: boolean;\n}\n\nexport function fulfillDocumentIsFile(r: string | File): r is File {\n return typeof (r) === 'object';\n}\n\nexport interface IRequirementFulfillData {\n documents: IRequirementFulfillDocument[],\n remarks?: string,\n color?: string,\n isShared?: boolean,\n departmentId?: number,\n jobResponsibleAsHolder?: boolean,\n requirementId?: number,\n title?: string,\n workId: number,\n}\n\nexport const userIsValidationHolder = (\n holder: IRequirementTypeValidationHolder,\n security: ISecurity,\n ctx: CanValidateContext | undefined = undefined) => {\n return ((holder.appUserId !== null && holder.appUserId === security.user?.id)\n || (holder.departmentId !== null && security.user?.departments?.includes(holder.departmentId!))\n || (holder.workFunctionId !== null && security.user?.workFunctions?.includes(holder.workFunctionId!))\n || (holder.jobResponsible != true && security.getWorkerIds().includes(ctx?.mainDepartment?.responsibleId ?? 0)))\n ?? false;\n}\n\nexport type CanValidateContext = {\n job?: IJob;\n mainDepartment?: IJobHasDepartment;\n}\n\nexport const userCanValidateRequirement = (\n requirementType: IRequirementType,\n security: ISecurity,\n ctx: CanValidateContext | undefined = undefined) => {\n const a = ((requirementType.validationHolders?.length ?? 0) === 0);\n const b = (requirementType.validationHolders?.find(h => userIsValidationHolder(h, security, ctx)) != undefined);\n\n return security.isWorker() && (a || b);\n}\n\nexport interface IRequirementNotification {\n workId: number;\n requirementId: number;\n resourceType: number;\n resourceId: number;\n}\n\nexport const FreeRequirementType = 0;\n","import { zeroPad } from \"./string-utils\";\n\nconst isDmy = (s: string) => {\n const sep = s.includes('/') ? '/' : '-';\n const parts = s.split(sep);\n return parts.length > 1 && parts[2]?.length == 4;\n}\n\nexport const parseDate = (s: string | Date) => {\n if (s && typeof (s) === 'object' && s.getTime()) {\n return s;\n }\n else if (s && typeof (s) === 'string' && isDmy(s)) {\n const sep = s.includes('/') ? '/' : '-';\n const parts = s.split(sep);\n return new Date(\n parseInt(parts[2]),\n parseInt(parts[1]) - 1,\n parseInt(parts[0]),\n );\n }\n else if (typeof (s) === 'string') {\n return new Date(s);\n }\n else {\n return s;\n }\n}\n\nexport const dateIsLessOrEqual = (a: Date, b: Date) =>\n compareDates(a, b) <= 0;\n\nexport const compareDates = (a: Date, b: Date) => {\n if (a == undefined || b == undefined) {\n return 0;\n }\n if (a.getFullYear() > b.getFullYear()) {\n return 1;\n }\n else if (a.getFullYear() < b.getFullYear()) {\n return -1;\n }\n else if (a.getMonth() > b.getMonth()) {\n return 1;\n }\n else if (a.getMonth() < b.getMonth()) {\n return -1;\n }\n else if (a.getDate() > b.getDate()) {\n return 1;\n }\n else if (a.getDate() < b.getDate()) {\n return -1;\n } else if (a.getHours() < b.getHours()) {\n return -1;\n } else if (a.getHours() > b.getHours()) {\n return 1;\n } else if (a.getMinutes() < b.getMinutes()) {\n return -1;\n } else if (a.getMinutes() > b.getMinutes()) {\n return 1;\n } else if (a.getSeconds() < b.getSeconds()) {\n return -1;\n } else if (a.getSeconds() > b.getSeconds()) {\n return 1;\n } else {\n return 0;\n }\n}\n\nexport const dateIsTodayOrFuture = (date: Date) => {\n const today = new Date();\n today.setHours(0, 0, 0, 0);\n return compareDates(date, today) >= 0;\n}\n\nexport const format = (input: Date | string | undefined, f: string = 'd-m-y') => {\n const patterns = f.toLowerCase().split('');\n\n if (input == undefined) {\n return '';\n }\n\n const d = typeof (input) === 'string'\n ? parseDate(input)\n : input;\n\n if (d.toString().includes(\"Invalid\")) {\n return '';\n }\n\n return patterns.reduce((r, p) => {\n if (p === 'd') {\n r.push(zeroPad(d.getDate(), 2));\n }\n else if (p === 'm') {\n r.push(zeroPad(d.getMonth() + 1, 2));\n }\n else if (p === 'y') {\n r.push(zeroPad(d.getFullYear(), 2));\n }\n else if (p === 'h') {\n r.push(zeroPad(d.getHours(), 2));\n }\n else if (p === 'i') {\n r.push(zeroPad(d.getMinutes(), 2));\n }\n else if (p === 's') {\n r.push(zeroPad(d.getSeconds(), 2));\n }\n else {\n r.push(p.toUpperCase());\n }\n\n return r;\n }, [] as any[]).join('');\n}\n\nexport const formatFullTime = (input: Date | string | undefined, f: string = 'd-m-y h:i:s') => {\n const patterns = f.toLowerCase().split('');\n\n if (input == undefined) {\n return '';\n }\n\n const d = typeof (input) === 'string'\n ? parseDate(input)\n : input;\n\n return patterns.reduce((r, p) => {\n if (p === 'd') {\n r.push(zeroPad(d.getDate(), 2));\n }\n else if (p === 'm') {\n r.push(zeroPad(d.getMonth() + 1, 2));\n }\n else if (p === 'y') {\n r.push(zeroPad(d.getFullYear(), 2));\n }\n else if (p === 'h') {\n r.push(zeroPad(d.getHours(), 2));\n }\n else if (p === 'i') {\n r.push(zeroPad(d.getMinutes(), 2));\n }\n else if (p === 's') {\n r.push(zeroPad(d.getSeconds(), 2));\n }\n else {\n r.push(p.toUpperCase());\n }\n\n return r;\n }, [] as any[]).join('');\n}\n\nexport const formatLocalDate = (date: Date | string, style = 'd/m/y h:i:s') => {\n const d = typeof (date) === 'string' ? new Date(date) : date;\n d.setTime(d.getTime() + d.getTimezoneOffset());\n\n return format(d, style);\n}\n\nexport const formatMinutes = (minutes: number) => {\n if (minutes > 0) {\n const hours = Math.floor(minutes / 60);\n const mints = (minutes - hours * 60);\n\n return `${zeroPad(hours, 2)}:${zeroPad(mints, 2)}`;\n }\n else {\n return '';\n }\n}\n\nexport const timeToMinutes = (data: string | number) => {\n if (typeof (data) === 'string') {\n const [h, m] = data.split(':');\n return parseInt(h) * 60 + parseInt(m);\n }\n else {\n return data;\n }\n}\n\nexport const toUtc = (data: string | Date | undefined) => {\n if (data != undefined) {\n const d = typeof (data) === 'string'\n ? parseDate(data)\n : data;\n\n const off = d.getTimezoneOffset() * 60000;\n const t = d.getTime();\n const nd = new Date(t + off);\n return nd;\n }\n else {\n return data;\n }\n}\n\ntype FromUtcT = (data: string | Date) => Date;\n\nexport const fromUtc: FromUtcT = (data: string | Date) => {\n const hasTimezone = typeof (data) === 'string'\n ? data?.endsWith('Z')\n : false;\n\n if (hasTimezone && typeof (data) === 'string') {\n return fromUtc(data.substring(0, data.length - 1));\n }\n\n const d = typeof (data) === 'string'\n ? parseDate(data)\n : data;\n\n const off = d.getTimezoneOffset() * 60000;\n const t = d.getTime();\n const nd = new Date(t - off);\n return nd;\n}\n\nexport const formatFromUtc = (data: string | Date | undefined, f: string = 'd-m-y') => {\n if (data != undefined) {\n return format(toUtc(data), f);\n }\n else {\n return '';\n }\n}\n\nexport const formatDateTimeFromUtc = (data: string | Date | undefined, f: string = 'd-m-y h:i:s') => {\n if (data != undefined) {\n return format(fromUtc(data), f);\n }\n else {\n return '';\n }\n}\n\nexport const toIso8601 = (data: string | Date | undefined) => {\n if (data != undefined) {\n return format(data, 'y-m-dTh:i:sZ');\n }\n else {\n return '';\n }\n}\n\n//Determines if a date or string is in date format\nexport const isDate = (data: string | Date) => {\n const d = typeof (data) === 'string'\n ? parseDate(data)\n : data;\n\n return d instanceof Date;\n}\n\nfunction strNow(interval: number = 0) {\n const date = new Date();\n date.setTime(date.getTime() + interval);\n\n return format(date, 'y-m-d');\n}\n\nconst oneDayMs = 24 * 60 * 60 * 1000;\n\nexport default {\n format,\n formatFromUtc,\n formatDateTimeFromUtc,\n formatFullTime,\n formatLocalDate,\n formatMinutes,\n parseDate,\n timeToMinutes,\n compareDates,\n dateIsLessOrEqual,\n dateISTodayOrFuture: dateIsTodayOrFuture,\n toUtc,\n fromUtc,\n strNow,\n oneDayMs,\n toIso8601,\n isDate,\n}\n","import { redirectTo } from '@utils';\n\nexport { redirectTo };\n\ntype IJobOpts = {\n jobHasContractorId?: number;\n parentId?: number;\n // si un contratista quiere acceder a los recursos\n // de sus subcontratistas\n relationId?: number;\n}\n\ntype GoToOpts = {\n reload?: boolean;\n}\n\nconst toQuery = (opts: any) => {\n return Object\n .keys(opts)\n .filter(k => opts[k] != undefined)\n .map(k => `${k}=${opts[k]}`)\n .join('&');\n}\n\n// JOB\nexport const goToJobs = (workId: number) =>\n redirectTo(`/work/${workId}/jobs`);\n\nexport const goToJob = (workId: number, jobId: number, opts: IJobOpts = {}) =>\n redirectTo(`/work/${workId}/jobs/${jobId}/data?${toQuery(opts)}`);\n\nexport const goToJobCard = (workId: number, jobId: number, opts: IJobOpts = {}) =>\n redirectTo(jobCardRoute(workId, jobId, opts));\n\nexport const jobCardRoute = (workId: number, jobId: number, opts: IJobOpts = {}) =>\n `/work/${workId}/jobs/${jobId}/card?${toQuery(opts)}`;\n\nexport const goToJobDocumentation = (workId: number, jobId: number, opts: IJobOpts = {}) =>\n redirectTo(`/work/${workId}/jobs/${jobId}/requirements?${toQuery(opts)}`);\n\nexport const goToJobAddContractor = (workId: number, jobId: number, parentId?: number) =>\n redirectTo(`/work/${workId}/jobs/${jobId}/add/contractor?parentId=${parentId}`);\n\nexport const goToJobCreateRequirement = (\n workId: number,\n jobId: number,\n resourceType: number | undefined = undefined,\n resourceId: number | undefined = undefined,\n statusType: number | undefined = undefined) =>\n redirectTo(jobCreateRequirementRoute(workId, jobId, resourceType, resourceId, statusType));\n\nexport const goToJobResourceCreateRequirement = (\n workId: number,\n jobId: number,\n resourceType: number | undefined = undefined,\n resourceId: number | undefined = undefined,\n statusType: number | undefined = undefined) =>\n redirectTo(jobCreateResourceRequirementRoute(workId, jobId, resourceType, resourceId, statusType));\n\nexport const goToJobContractors = (workId: number, jobId: number, loadInvitations: boolean = true) =>\n redirectTo(jobContractorsRoute(workId, jobId, loadInvitations));\n\nexport const jobContractorsRoute = (workId: number, jobId: number, loadInvitations: boolean = true) =>\n `/work/${workId}/jobs/${jobId}/contractors?loadInvitations=${loadInvitations}`;\n\nexport const goToJobSubContractors = (workId: number, jobId: number, opts: IJobOpts = {}) =>\n redirectTo(`/work/${workId}/jobs/${jobId}/contractors?${toQuery(opts)}`);\n\nexport const goToJobMachineries = (workId: number, jobId: number, opts: IJobOpts = {}) =>\n redirectTo(jobMachineriesRoute(workId, jobId, opts));\n\nexport const jobMachineriesRoute = (workId: number, jobId: number, opts: IJobOpts = {}) =>\n `/work/${workId}/jobs/${jobId}/machineries?${toQuery(opts)}`;\n\nexport const goToJobHasMachinery = (workId: number, jobId: number, jobHasMachineryId: number) =>\n redirectTo(`/work/${workId}/jobs/${jobId}/machinery/${jobHasMachineryId}`);\n\nexport const goToJobNotifyInformationLoaded = (workId: number, jobId: number) =>\n redirectTo(jobNotifyInformationLoadedRoute(workId, jobId));\n\nexport const goToJobRequirements = (workId: number, jobId: number, opts: GoToOpts = {}) =>\n redirectTo(jobRequirementsRoute(workId, jobId), opts);\n\nexport const goToCommunications = (workId: number) =>\n redirectTo(`/work/${workId}/communications`);\n\nexport const goToJobWorkers = (\n workId: number,\n jobId: number,\n opts: IJobOpts = {}) => {\n redirectTo(jobWorkersRoute(workId, jobId, opts));\n};\n\nexport const jobWorkersRoute = (\n workId: number,\n jobId: number,\n opts: IJobOpts = {}) =>\n `/work/${workId}/jobs/${jobId}/workers?${toQuery(opts)}`;\n\nexport const goToJobWorker = (workId: number, jobId: number, jobHasWorkerId: number) =>\n redirectTo(routeJobHasWorker(workId, jobId, jobHasWorkerId));\n\nexport const routeJobHasWorker = (workId: number, jobId: number, jobHasWorkerId: number) =>\n `/work/${workId}/jobs/${jobId}/worker/${jobHasWorkerId}`;\n\nexport const routeJobAddContractorWorker = (workId: number, jobId: number, contractorId: number) =>\n `/work/${workId}/jobs/${jobId}/workers/add?contractor=${contractorId}`;\n\nexport const goToJobAddContractorWorker = (workId: number, jobId: number, contractorId: number) =>\n redirectTo(routeJobAddContractorWorker(workId, jobId, contractorId));\n\nexport const goToJobInformationLoaded = (workId: number, jobId: number) =>\n redirectTo(`/work/${workId}/jobs/${jobId}/information-loaded`);\n\nexport const goToJobInformationLoadedControl = (workId: number, jobId: number) =>\n redirectTo(jobInformationLoadedControlRoute(workId, jobId));\n\nexport const goToJobEditContractor = (workId: number, jobId: number, jobHasContractorId: number) =>\n redirectTo(jobHasContractorRoute(workId, jobId, jobHasContractorId));\n\nexport const goToJobEditContractorRequirements = (workId: number, jobId: number, jobHasContractorId: number) =>\n redirectTo(jobHasContractorRequirementsRoute(workId, jobId, jobHasContractorId));\n\nexport const goToJobEditMachineryRequirements = (workId: number, jobId: number, jobHasMachineryId: number) =>\n redirectTo(jobHasMachineryRequirementRoute(workId, jobId, jobHasMachineryId));\n\nexport const goToJobEditWorkerRequirements = (workId: number, jobId: number, jobHasWorkerId: number) =>\n redirectTo(jobHasWorkerRequirementsRoute(workId, jobId, jobHasWorkerId));\n\nexport const jobHasContractorRequirementsRoute = (workId: number, jobId: number, id: number) =>\n `/work/${workId}/jobs/${jobId}/jobContractor/${id}/requirements?jobHasContractorId=${id}`;\n\nexport const jobHasContractorRoute = (workId: number, jobId: number, id: number) =>\n `/work/${workId}/jobs/${jobId}/contractor/${id}`;\n\nexport const jobHasMachineryRoute = (workId: number, jobId: number, id: number) =>\n `/work/${workId}/jobs/${jobId}/machinery/${id}`;\n\nexport const jobHasMachineryRequirementRoute = (workId: number, jobId: number, id: number) =>\n `/work/${workId}/jobs/${jobId}/machinery/${id}/requirements`;\n\nexport const jobHasWorkerRoute = (workId: number, jobId: number, id: number) =>\n `/work/${workId}/jobs/${jobId}/worker/${id}`;\n\nexport const jobHasWorkerRequirementsRoute = (workId: number, jobId: number, id: number) =>\n `/work/${workId}/jobs/${jobId}/worker/${id}/requirements`;\n\nexport const jobRequirementsRoute = (workId: number, jobId: number) =>\n `/work/${workId}/jobs/${jobId}/requirements`;\n\nexport const jobCreateRequirementRoute = (\n workId: number,\n jobId: number,\n resourceType: number | undefined = undefined,\n resourceId: number | undefined = undefined,\n statusType: number | undefined = undefined,\n) => {\n const args = [\n ['resourceType', resourceType],\n ['resourceId', resourceId],\n ['statusType', statusType],\n ].filter(r => r[1] != undefined).map(r => `${r[0]}=${r[1]}`).join('&');\n\n return `/work/${workId}/jobs/${jobId}/upload-requirement?${args}`;\n}\n\nexport const jobCreateResourceRequirementRoute = (\n workId: number,\n jobId: number,\n resourceType: number | undefined = undefined,\n resourceId: number | undefined = undefined,\n statusType: number | undefined = undefined,\n) => {\n const args = [\n ['resourceType', resourceType],\n ['resourceId', resourceId],\n ['statusType', statusType]\n ].filter(r => r[1] != undefined).map(r => `${r[0]}=${r[1]}`).join('&');\n\n return `/work/${workId}/jobs/${jobId}/create-requirement?${args}`;\n}\n\nexport const jobNotifyInformationLoadedRoute = (workId: number, jobId: number) =>\n `/work/${workId}/jobs/${jobId}/notify-information-loaded`;\n\nexport const jobInformationLoadedRoute = (workId: number, jobId: number) =>\n `/work/${workId}/jobs/${jobId}/information-loaded`;\n\nexport const jobInformationLoadedControlRoute = (workId: number, jobId: number) =>\n `/work/${workId}/jobs/${jobId}/information-loaded-control`;\n\n// machineries\nexport const goToMachineryRequirements = (workId: number, machineryId: number) =>\n redirectTo(machineryRequirementsRoute(workId, machineryId));\n\nexport const machineryRequirementsRoute = (workId: number, machineryId: number) =>\n `/work/${workId}/machineries/${machineryId}/requirements`;\n\nexport const goToMachineries = (workId: number) =>\n redirectTo(machineriesRoute(workId));\n\nexport const goToMachinery = (workId: number, machineryId: number) =>\n redirectTo(machineryRoute(workId, machineryId));\n\nexport const machineriesRoute = (workId: number) =>\n `/work/${workId}/machineries`;\n\nexport const machineryRoute = (workId: number, machineryId: number) =>\n `/work/${workId}/machineries/${machineryId}`;\n\n// workers\nexport const goToWorkerRequirements = (workId: number, workerId: number) =>\n redirectTo(workerRequirementsRoute(workId, workerId));\nexport const workerRequirementsRoute = (workId: number, workerId: number) =>\n `/work/${workId}/workers/${workerId}/requirements`;\n\nexport const goToWorker = (workId: number, workerId: number) =>\n redirectTo(workerRoute(workId, workerId));\nexport const workerRoute = (workId: number, workerId: number) =>\n `/work/${workId}/workers/${workerId}`;\n\nexport const goToWorkers = (workId: number) =>\n redirectTo(workersRoute(workId));\nexport const workersRoute = (workId: number) =>\n `/work/${workId}/workers`;\n\n// contractors\nexport const goToContractors = (workId: number) =>\n redirectTo(contractorsRoute(workId));\nexport const contractorsRoute = (workId: number) =>\n `/work/${workId}/contractors`;\n\nexport const goToContractor = (workId: number, contractorId: number) =>\n redirectTo(contractorRoute(workId, contractorId));\nexport const contractorRoute = (workId: number, contractorId: number) =>\n `/work/${workId}/contractors/${contractorId}`;\n\nexport const goToContractorRequirements = (workId: number, contractorId: number) =>\n redirectTo(contractorRequirementsRoute(workId, contractorId));\nexport const contractorRequirementsRoute = (workId: number, contractorId: number) =>\n `/work/${workId}/contractors/${contractorId}/requirements`;\n\nexport const goToContractorAccessData = (workId: number, contractorId: number) =>\n redirectTo(contractorAccessDataRoute(workId, contractorId));\nexport const contractorAccessDataRoute = (workId: number, contractorId: number) =>\n `/work/${workId}/contractors/${contractorId}/access-data`;\n\n// subcontractors\nexport const subContractorsRoute = (workId: number) =>\n `/work/${workId}/subcontractors`;\nexport const goToSubContractors = (workId: number) =>\n redirectTo(subContractorsRoute(workId));\n\nexport default {\n redirectTo,\n jobContractorsRoute,\n jobHasContractorRoute,\n jobHasMachineryRoute,\n jobHasWorkerRoute,\n jobCreateRequirementRoute,\n jobInformationLoadedRoute,\n jobInformationLoadedControlRoute,\n jobRequirementsRoute,\n goToJob,\n goToJobCard,\n jobCardRoute,\n goToJobs,\n goToJobAddContractor,\n goToJobDocumentation,\n goToJobEditContractor,\n goToJobEditContractorRequirements,\n goToJobContractors,\n goToJobSubContractors,\n goToJobCreateRequirement,\n goToJobInformationLoaded,\n goToJobMachineries,\n jobMachineriesRoute,\n goToJobNotifyInformationLoaded,\n goToJobInformationLoadedControl,\n goToJobRequirements,\n goToJobWorkers,\n jobWorkersRoute,\n // machineries\n goToMachineryRequirements,\n machineryRequirementsRoute,\n goToMachinery,\n machineryRoute,\n // workers\n goToWorkerRequirements,\n workerRequirementsRoute,\n goToWorker,\n workerRoute,\n goToWorkers,\n workersRoute,\n // contractors\n goToContractors,\n contractorsRoute,\n goToContractor,\n contractorRoute,\n goToContractorRequirements,\n contractorRequirementsRoute,\n subContractorsRoute,\n goToSubContractors,\n // communications\n goToCommunications\n}\n","import { Action, Reducer } from 'redux';\nimport {\n IJob, parseJob, IContractor,\n} from '../models';\nimport * as JobsActions from './actions/jobs';\nimport { actionCreators as N } from './notifications';\nimport { getJobLogs, jobNotifyInformationLoaded } from \"./actions/jobs\";\nimport { IJobHasContractor } from '@models';\n\nexport interface IJobState {\n selectedJob?: IJob;\n selectedJobHasContractor?: IJobHasContractor;\n}\n\n// types\nenum Types {\n LoadJob = '[JOBS] LOAD JOB',\n OnJobLoaded = '[USER] ON JOB LOADED',\n SelectJobHasContractor = '[JOBS] SELECT CONTRACTOR',\n ClearSelectedContractor = '[JOBS] CLEAR SELECTED CONTRACTOR',\n ClearSelectedJobHasContractor = '[JOBS] CLEAR SELECTED JOB HAS CONTRACTOR',\n ClearSelectedJob = '[JOBS] CLEAR SELECTED JOB',\n LocationChange = '@@router/LOCATION_CHANGE',\n}\n\n// actions\nexport interface OnJobLoaded {\n type: Types.OnJobLoaded;\n data: IJob;\n}\n\nexport interface SelectJobHasContractor {\n type: Types.SelectJobHasContractor;\n data: IJobHasContractor;\n}\n\nexport interface ClearSelectedContractor {\n type: Types.ClearSelectedContractor;\n}\n\nexport interface ClearSelectedJobHasContractor {\n type: Types.ClearSelectedJobHasContractor;\n}\n\nexport interface ClearSelectedJob {\n type: Types.ClearSelectedJob;\n}\n\nexport interface LocationChangeAction {\n type: Types.LocationChange;\n payload: any;\n}\n\nexport type KnownAction = OnJobLoaded\n | SelectJobHasContractor\n | ClearSelectedJobHasContractor\n | ClearSelectedContractor\n | ClearSelectedJob\n | LocationChangeAction\n | { type: undefined };\n\nexport const plainActions = {\n getJobStatus: JobsActions.getJobStatus,\n saveJobStatus: JobsActions.saveJobStatus,\n jobNotifyInformationLoaded: JobsActions.jobNotifyInformationLoaded,\n createContractorRequest: JobsActions.createContractorRequest,\n processContractorRequest: JobsActions.processContractorRequest,\n getJobContractorRequests: JobsActions.getJobContractorRequests,\n getJob: JobsActions.getJob,\n activateJobHasContractor: JobsActions.activateJobHasContractor,\n saveJobHasContractor: JobsActions.saveJobHasContractor,\n removeJobHasContractor: JobsActions.removeJobHasContractor,\n removeJobHasContractorRequest: JobsActions.removeJobHasContractorRequest,\n removeJobHasContractorInvitation: JobsActions.removeJobHasContractorInvitation,\n deleteJobHasContractor: JobsActions.deleteJobHasContractor,\n deleteJobHasWorker: JobsActions.deleteJobHasWorker,\n deleteJobHasMachinery: JobsActions.deleteJobHasMachinery,\n searchContractors: JobsActions.searchContractors,\n getJobContractors: JobsActions.getJobContractors,\n getJobContractorsViewModel: JobsActions.getJobContractorsViewModel,\n getJobHasContractor: JobsActions.getJobHasContractor,\n getJobDepartments: JobsActions.getJobDepartments,\n saveJobHasDepartment: JobsActions.saveJobHasDepartment,\n removeJobHasDepartment: JobsActions.removeJobHasDepartment,\n getJobHasMachineries: JobsActions.getJobHasMachineries,\n getJobHasMachinery: JobsActions.getJobHasMachinery,\n activateJobHasMachinery: JobsActions.activateJobHasMachinery,\n saveJobHasMachinery: JobsActions.saveJobHasMachinery,\n searchMachineries: JobsActions.searchMachineries,\n removeJobHasMachinery: JobsActions.removeJobHasMachinery,\n // workers\n getJobHasWorker: JobsActions.getJobHasWorker,\n getJobHasWorkers: JobsActions.getJobHasWorkers,\n searchWorkers: JobsActions.searchWorkers,\n activateJobHasWorker: JobsActions.activateJobHasWorker,\n saveJobHasWorker: JobsActions.saveJobHasWorker,\n removeJobHasWorker: JobsActions.removeJobHasWorker,\n // logs\n getJobLogs: JobsActions.getJobLogs,\n}\n\nexport const actionCreators = {\n clearSelectedJob: () => (dispatch: Function) => {\n dispatch({\n type: Types.ClearSelectedJob,\n });\n },\n clearSelectedContractor: () => (dispatch: Function) => {\n dispatch({\n type: Types.ClearSelectedContractor,\n });\n },\n clearSelectedJobHasContractor: () => (dispatch: Function) => {\n dispatch({\n type: Types.ClearSelectedJobHasContractor,\n });\n },\n selectJobHasContractor: (jobHasContractor: IJobHasContractor) => (dispatch: Function) => {\n dispatch({\n type: Types.SelectJobHasContractor,\n data: jobHasContractor,\n });\n },\n loadJob: (workId: number, jobId: number) => async (dispatch: Function) => {\n dispatch(N.startLoading({\n ctx: 'jobs.load',\n }));\n const resp = await JobsActions.getJob(workId, jobId);\n dispatch({\n type: Types.OnJobLoaded,\n data: parseJob(resp.data.work.job),\n });\n dispatch(N.stopLoading({\n ctx: 'jobs.load',\n }));\n },\n saveJob: (workId: number, job: IJob) => async (dispatch: Function) => {\n dispatch(N.startLoading({ ctx: 'jobs.save' }));\n\n const saveResp = await JobsActions.saveJob(job);\n const jobId = job.id ?? saveResp.value;\n const resp = await JobsActions.getJob(workId, jobId);\n dispatch({\n type: Types.OnJobLoaded,\n data: parseJob(resp.data.work.job),\n });\n dispatch(N.success({\n ctx: 'jobs.save',\n action: 'save',\n delay: 5000\n }));\n dispatch(N.stopLoading({ ctx: 'jobs.save' }));\n }\n};\n\nexport const reducer: Reducer = (state: IJobState | undefined, incomingAction: Action): IJobState => {\n if (state === undefined) {\n return {};\n }\n\n const action = incomingAction as KnownAction;\n\n switch (action.type) {\n case Types.LocationChange:\n if (action.payload.location.pathname?.includes('/jobs/')) {\n return state;\n }\n else {\n return { ...state, selectedJob: undefined, selectedJobHasContractor: undefined };\n }\n\n case Types.ClearSelectedJob:\n return { ...state, selectedJob: undefined, selectedJobHasContractor: undefined };\n\n case Types.OnJobLoaded:\n return { ...state, selectedJob: action.data, selectedJobHasContractor: undefined };\n\n case Types.SelectJobHasContractor:\n return { ...state, selectedJobHasContractor: action.data };\n\n case Types.ClearSelectedContractor:\n return { ...state, selectedJobHasContractor: undefined };\n\n case Types.ClearSelectedJobHasContractor:\n return { ...state, selectedJobHasContractor: undefined };\n\n default:\n return state;\n }\n};\n","import i18n from \"i18next\";\nimport { initReactI18next } from \"react-i18next\";\nimport { addLocale } from 'primereact/api';\n\nconst es = require('./i18n/es.json');\nconst en = require('./i18n/en.json');\nconst it = require('./i18n/it.json');\n\nconst createOriginalResources = () => ({\n it: {\n translation: it\n },\n en: {\n translation: en\n },\n es: {\n translation: es\n }\n}) as any;\n\nconst loadResources = (resources: any) => {\n let locale = navigator.language;\n let langCookie = document.cookie.split(';').find((item) => item.includes('lang'));\n\n if (langCookie) {\n locale = langCookie.split('=')[1];\n } else if (locale) {\n const language = locale.split('-')[0];\n locale = language;\n }\n else {\n locale = 'es';\n }\n\n i18n.use(initReactI18next).init({\n resources,\n lng: locale,\n interpolation: {\n escapeValue: false\n }\n });\n}\n\nconst resources = createOriginalResources();\nloadResources(resources);\n\nconst get = (...keys: string[]) => {\n const r = i18n.getDataByLanguage(i18n.language)?.translation;\n\n return keys.reduce((acc, key) => {\n return acc + ' ' + (r ? (r[key] ?? key) : key);\n }, '');\n}\n\nconst installResources = (resources: any, moduleKeys: any | undefined = undefined) => {\n const newResources = createOriginalResources();\n\n for (const l of Object.keys(newResources)) {\n const keys = resources.filter((r: any) => r.language == l);\n if (keys.length > 0) {\n const newLangResources: any = {};\n for (const k of keys) {\n newLangResources[k.name] = k.value;\n }\n newResources[l].translation = {\n ...newResources[l].translation,\n ...newLangResources\n };\n }\n }\n\n if (moduleKeys != undefined) {\n for (const l of Object.keys(moduleKeys)) {\n const keys = moduleKeys[l];\n const newLangResources: any = {};\n for (const k in keys) {\n newLangResources[k] = keys[k];\n }\n newResources[l].translation = {\n ...newResources[l].translation,\n ...newLangResources\n };\n // console.log('install module keys', newLangResources);\n }\n }\n\n loadResources(newResources);\n}\n\nconst languages = ['es', 'en', 'it'];\nconst defaultLanguage = 'es';\n\nconst currentLocale = () => i18n.language;\n\naddLocale('es', {\n firstDayOfWeek: 1,\n dayNames: ['domingo', 'lunes', 'martes', 'miércoles', 'jueves', 'viernes', 'sábado'],\n dayNamesShort: ['dom', 'lun', 'mar', 'mié', 'jue', 'vie', 'sáb'],\n dayNamesMin: ['D', 'L', 'M', 'X', 'J', 'V', 'S'],\n monthNames: ['enero', 'febrero', 'marzo', 'abril', 'mayo', 'junio', 'julio', 'agosto', 'septiembre', 'octubre', 'noviembre', 'diciembre'],\n monthNamesShort: ['ene', 'feb', 'mar', 'abr', 'may', 'jun', 'jul', 'ago', 'sep', 'oct', 'nov', 'dic'],\n today: 'Hoy',\n clear: 'Limpiar'\n});\n\naddLocale('it', {\n firstDayOfWeek: 1,\n dayNames: ['domenica', 'lunedi', 'martedi', 'miercoledi', 'giovedi', 'venerdi', 'sabato'],\n dayNamesShort: ['dom', 'lun', 'mar', 'mie', 'gio', 'ven', 'sab'],\n dayNamesMin: ['D', 'L', 'M', 'X', 'G', 'V', 'S'],\n monthNames: ['Gennaio', 'Febbraio', 'Marzo', 'Aprile', 'Maggio', 'Giugno', 'Luglio', 'Agosto', 'Settembre', 'Ottobre', 'Novembre', 'Dicembre'],\n monthNamesShort: ['gen', 'feb', 'mar', 'apr', 'mag', 'giu', 'lug', 'ago', 'set', 'ott', 'nov', 'dic'],\n today: 'Oggi',\n clear: 'Chiaro'\n});\n\naddLocale('it', {\n firstDayOfWeek: 1,\n dayNames: ['domenica', 'lunedi', 'martedi', 'miercoledi', 'giovedi', 'venerdi', 'sabato'],\n dayNamesShort: ['dom', 'lun', 'mar', 'mie', 'gio', 'ven', 'sab'],\n dayNamesMin: ['D', 'L', 'M', 'X', 'G', 'V', 'S'],\n monthNames: ['Gennaio', 'Febbraio', 'Marzo', 'Aprile', 'Maggio', 'Giugno', 'Luglio', 'Agosto', 'Settembre', 'Ottobre', 'Novembre', 'Dicembre'],\n monthNamesShort: ['gen', 'feb', 'mar', 'apr', 'mag', 'giu', 'lug', 'ago', 'set', 'ott', 'nov', 'dic'],\n today: 'Oggi',\n clear: 'Chiaro'\n});\n\nexport {\n currentLocale,\n defaultLanguage,\n get,\n installResources,\n languages,\n}\n\nexport default i18n;\n","import { Dialog } from 'primereact/dialog';\nimport { ConfirmDialog } from 'primereact/confirmdialog';\nimport * as React from 'react';\nimport { Loading } from '../components/custom/Loading';\nimport { ICountry, INotification, IOption, IPaginateResult, IPaginateSort } from '../models';\nimport { get as i18n } from '../i18n';\nimport { DataTable } from 'primereact/datatable';\nimport { Paginator } from 'primereact/paginator';\nimport { Column } from 'primereact/column';\nimport { classNames, confirmPopup, LoadingBox, Message, Portal, SplitButton, Toast, TreeTable, useTranslation } from '../components';\nimport * as DateUtils from '../utils/date-utils';\nimport TreeNode from 'primereact/treenode/treenode';\nimport { TreeTableExpandedKeysType } from 'primereact/treetable';\nconst __consumedNotifications: number[] = [];\n\nexport interface IToastOpts {\n life?: number;\n severity?: string;\n detail?: string;\n}\n\nconst DEFAULT_TOAST_LIFE = 5000;\nconst DEFAULT_TOAST_SEVERITY = 'success';\n\nexport function observeValue(handler: (data: T) => void, data: T) {\n const r = React.useRef(data);\n\n React.useEffect(() => {\n if (r.current != data) {\n handler(data);\n }\n\n r.current = data;\n }, [data]);\n}\n\nexport function useToast() {\n const ref = React.useRef();\n\n const render = () => {\n return ;\n }\n\n const show = (message: string, opts: IToastOpts = {}) => {\n if (ref.current) {\n ref.current.show({\n life: opts.life ?? DEFAULT_TOAST_LIFE,\n severity: opts.severity ?? DEFAULT_TOAST_SEVERITY,\n summary: message,\n detail: opts.detail,\n });\n }\n }\n\n const error = (message: string, opts: IToastOpts = {}) => {\n show(message, {\n severity: 'error',\n detail: opts.detail,\n life: opts.life,\n });\n };\n\n return {\n render,\n error,\n show,\n }\n}\n\nexport function onNotification(\n ctx: Partial,\n notifications: INotification[],\n f: Function) {\n const consumedNotifications = React.useRef(__consumedNotifications);\n const isConsumed = (id: number) => consumedNotifications.current.indexOf(id) >= 0;\n\n return React.useEffect(() => {\n const n = notifications\n .find(n => (ctx.action == undefined || n.action == ctx.action)\n && (ctx.ctx == undefined || n.ctx == ctx.ctx)\n && (ctx.type == undefined || n.type == ctx.type)\n && (ctx.id == undefined || n.id == ctx.id)\n && !isConsumed(n.id));\n if (n) {\n consumedNotifications.current.push(n.id);\n __consumedNotifications.push(n.id);\n f(n);\n }\n }, [notifications]);\n}\n\nexport function useMemoized(fn: Function, dependencies: any[] = []) {\n const cache = React.useRef({});\n\n React.useEffect(() => {\n cache.current = {};\n }, dependencies);\n\n return (...args: any[]) => {\n const key = JSON.stringify(args);\n if (cache.current[key]) {\n return cache.current[key];\n }\n else {\n const value = fn(...args);\n cache.current = { ...cache.current, [key]: value };\n\n return value;\n }\n }\n}\n\nexport interface IConfirmOpts {\n text: string;\n confirmText?: string;\n cancelText?: string;\n onConfirm: any;\n onCancel: any;\n}\n\nexport interface IUseDialogProps {\n className?: string;\n onShow?: Function;\n}\n\nexport interface IRenderDialogOpts {\n className?: string;\n showCloseFooter?: boolean;\n title?: string | Function;\n maximized?: boolean;\n style?: any;\n maskClassName?: string;\n modal?: boolean;\n closable?: boolean;\n draggable?: boolean;\n}\n\nexport function useDialogs(props: IUseDialogProps = {}) {\n const [dialogs, setDialogs] = React.useState([]);\n const [dialogData, setDialogData] = React.useState({});\n const [cnf, setCnf] = React.useState(undefined);\n\n const confirm = (data: any) => setCnf(data);\n\n const get = (dialog: string) => dialogData[dialog];\n\n const show = (dialog: string, show: boolean | any = true) => {\n if (show && !dialogs.includes(dialog)) {\n props.onShow?.(show);\n setDialogs(dialogs.concat([dialog]));\n setDialogData((d: any) => ({ ...d, [dialog]: show }));\n }\n else if (!show) {\n setDialogs(dialogs.filter(d => d != dialog));\n setDialogData((d: any) => {\n delete d[dialog];\n return d;\n });\n }\n }\n\n const renderConfirm = (opts: IConfirmOpts) => {\n if (cnf) {\n return \n {opts.text}\n \n }\n else {\n return null;\n }\n }\n\n const render = (\n dialog: string,\n inputOpts: IRenderDialogOpts | string = {},\n content: any) => {\n const opts = typeof (inputOpts) === 'object' ? inputOpts : { title: inputOpts };\n\n if (dialogs.indexOf(dialog) >= 0 && dialogData[dialog]) {\n const title = typeof (opts.title) == 'string'\n ? opts.title\n : typeof (opts.title) == 'function'\n ? opts.title(dialogData[dialog])\n : undefined;\n\n return show(dialog, false)}\n closable={opts.closable}\n draggable={opts.draggable}\n modal={opts.modal}\n visible={true}>\n {content(dialogData[dialog])}\n {opts.showCloseFooter &&\n
\n
\n \n
}\n \n }\n else {\n return null;\n }\n }\n\n const showFromEvent = (name: string, data: any = undefined) => {\n return (..._: any) => {\n show(name, data);\n }\n }\n\n const clear = () => setDialogs([]);\n\n const clearConfirm = () => setCnf(undefined);\n\n const hide = (dialog: string) => show(dialog, false);\n\n return {\n clear,\n clearConfirm,\n confirm,\n hide,\n show,\n showFromEvent,\n render,\n renderConfirm,\n get,\n getState: () => ({ dialogs, dialogData, cnf }),\n };\n}\n\nexport interface IFormDialogProps {\n id?: string;\n addTitle?: string;\n editTitle?: string;\n loading?: boolean;\n className?: string;\n editClassName?: string;\n addClassName?: string;\n portal?: string;\n}\n\nexport function useFormDialog(props: IFormDialogProps = {}) {\n const [showAdd, setShowAdd] = React.useState(false);\n const [showEdit, setShowEdit] = React.useState(undefined);\n const [errors, setErrors] = React.useState({});\n\n const clear = () => {\n setErrors({});\n setShowAdd(false);\n setShowEdit(undefined);\n };\n\n const renderNormal = (fn: any, maximized: boolean | undefined = false) => {\n return \n {props.loading && }\n {showAdd && setShowAdd(false)}>\n {fn({\n data: showAdd,\n error: errors['add']\n })}\n }\n {showEdit && setShowEdit(undefined)}>\n {fn(showEdit, {\n error: errors['edit'],\n })}\n }\n \n }\n\n const render = (fn: any, maximized: boolean | undefined = false) => {\n if (props.portal) {\n return \n {renderNormal(fn, maximized)}\n \n }\n else {\n return renderNormal(fn, maximized);\n }\n }\n\n const renderFooter = ({ loading, disabled, onSaveClicked }: { loading?: ILoading, disabled?: boolean, onSaveClicked?: Function } = {}) => {\n return
\n \n {loading != undefined && loading.render()}\n
\n {\n e.preventDefault();\n e.stopPropagation();\n clear();\n }}>\n {i18n('Cancel')}\n \n \n
\n
\n }\n\n const setEditError = (msg: string) => {\n const newerrors = { ...errors, edit: msg };\n\n setErrors(newerrors);\n }\n\n const clearErrors = () => {\n setErrors({});\n }\n\n return {\n render,\n renderFooter,\n clear,\n clearErrors,\n showAdd: () => setShowAdd(true),\n showEdit: (e: T) => setShowEdit(e),\n Footer: (props: any = undefined) => renderFooter(props),\n setEditError,\n currentEdit: showEdit,\n }\n}\n\nexport interface IUseObjectStateProps {\n onChange?: Function;\n defaultValue?: any;\n}\n\nexport function useObjectState(data: T, opts: IUseObjectStateProps = {}) {\n const inhibitOnChange = React.useRef(false);\n const [value, setValue] = React.useState(data);\n\n React.useEffect(() => {\n if (opts.onChange && !inhibitOnChange.current) {\n opts.onChange(value);\n }\n else if (inhibitOnChange.current) {\n inhibitOnChange.current = false;\n }\n }, [value]);\n\n const parseAsFloat = (input: any) => {\n const v = parseFloat(input);\n return isNaN(v) ? undefined : v;\n }\n\n const parseAsInt = (input: any) => {\n const v = parseInt(input);\n return isNaN(v) ? undefined : v;\n }\n\n const field = (fieldName: string, defaultValue: any = undefined) => {\n return value[fieldName] ?? defaultValue ?? opts.defaultValue;\n }\n\n const reset = (v: T) => {\n inhibitOnChange.current = true;\n setValue(v);\n }\n\n const set = (fieldName: string) =>\n (eventOrValue: any) => {\n inhibitOnChange.current = false;\n if (eventOrValue.target) {\n eventOrValue.persist && eventOrValue.persist();\n setValue((v: any) => ({ ...v, [fieldName]: eventOrValue.target.value }));\n }\n else {\n setValue((v: any) => ({ ...v, [fieldName]: eventOrValue }));\n }\n }\n\n const setFloat = (fieldName: string) =>\n (eventOrValue: any) => {\n inhibitOnChange.current = false;\n if (eventOrValue.target) {\n eventOrValue.persist && eventOrValue.persist();\n setValue((v: any) => ({ ...v, [fieldName]: parseAsFloat(eventOrValue.target.value) }));\n }\n else {\n setValue((v: any) => ({ ...v, [fieldName]: parseAsFloat(eventOrValue) }));\n }\n }\n\n const setInt = (fieldName: string) =>\n (eventOrValue: any) => {\n inhibitOnChange.current = false;\n if (eventOrValue.target) {\n eventOrValue.persist && eventOrValue.persist();\n setValue((v: any) => ({ ...v, [fieldName]: parseAsInt(eventOrValue.target.value) }));\n }\n else {\n setValue((v: any) => ({ ...v, [fieldName]: parseAsInt(eventOrValue) }));\n }\n }\n\n return {\n field,\n set,\n reset,\n setInt,\n setFloat,\n value,\n }\n}\n\nexport interface IUseLoadingProps {\n container?: string;\n}\n\nexport interface ILoading {\n loading: boolean;\n render: Function;\n renderBox: Function;\n renderModal: Function;\n isLoading: (name?: string | undefined) => boolean;\n start: Function;\n stop: Function;\n wrap: Function;\n}\n\nexport function useLoading(props: IUseLoadingProps | boolean = false): ILoading {\n const lock = React.useRef(false);\n const [loading, setLoading] = React.useState({});\n\n React.useEffect(() => {\n if (typeof (props) === 'boolean') {\n setLoading({ 'global': props });\n }\n }, [props]);\n\n const wrapRender = (fn: Function) => {\n if (typeof (props) === 'object' && props.container) {\n return {fn()}\n }\n else {\n return fn();\n }\n }\n\n const renderBox = (ctx: string | undefined | any = undefined, optsArgs: any = {}) => {\n const ctxIsKey = typeof (ctx) === 'string' || ctx == undefined;\n const k = ctxIsKey ? (ctx || 'global') : 'global';\n const isLoading = loading[k];\n const opts = typeof (ctx) === 'object' ? ctx : optsArgs;\n\n if (isLoading) {\n return wrapRender(() =>\n
\n \n {opts.text &&
\n {opts.text}\n
}\n
\n )\n }\n else {\n return null;\n }\n }\n\n const renderModal = (ctx: string | undefined = undefined, optsArgs: any = {}) => {\n const ctxIsKey = typeof (ctx) === 'string' || ctx == undefined;\n const k = ctxIsKey ? (ctx || 'global') : 'global';\n const isLoading = loading[k];\n const opts = typeof (ctx) === 'object' ? ctx : optsArgs;\n\n if (isLoading) {\n return wrapRender(() =>\n
\n \n {opts.text &&
\n {opts.text}\n
}\n
\n )\n }\n else {\n return null;\n }\n }\n\n const render = (ctx: string | undefined = undefined) => {\n const k = ctx || 'global';\n const isLoading = loading[k];\n\n return wrapRender(() =>\n \n {isLoading && }\n \n );\n }\n\n const start = (ctx: string | undefined = undefined) => {\n if (lock.current) {\n return;\n }\n lock.current = true;\n const k = ctx || 'global';\n const n = { ...loading, [k]: true };\n\n setLoading(n);\n }\n\n const stop = (ctx: string | undefined = undefined) => {\n lock.current = false;\n const k = ctx || 'global';\n const n = { ...loading };\n delete n[k];\n\n setLoading(n);\n }\n\n const isLoading = (ctx: string | undefined = undefined) => {\n const k = ctx || 'global';\n\n return loading[k] as boolean;\n }\n\n const wrap = (fn: Function) => async (...params: any) => {\n start();\n const res = await fn(...params);\n stop();\n\n return res;\n }\n\n return {\n loading: loading['global'] ?? false,\n render,\n renderBox,\n renderModal,\n isLoading,\n start,\n stop,\n wrap,\n }\n}\n\ntype ColumnDelegate = 'date' | 'datetime' | 'boolean' | undefined;\n\ninterface IUseDataTableColumn {\n field?: string;\n className?: string;\n title?: string;\n render?: (_: T) => any;\n delegate?: ColumnDelegate;\n sortKey?: string;\n sortable?: boolean;\n}\n\ninterface IUseDataTableSplitAction {\n actions: (IUseDataTableActions | undefined)[];\n className?: string;\n headerClassName?: string;\n}\n\ninterface IUseDataTableActions {\n icon?: string | ((_: T) => string);\n text?: string;\n title?: string;\n onClick: (_: T, event: React.MouseEvent) => void;\n disabled?: boolean | ((_: T) => boolean | undefined);\n tooltip?: string | ((_: T | any) => string);\n className?: string;\n headerStyle?: any;\n headerClassName?: string;\n bodyClassName?: string;\n}\n\ntype SortHandler = (sortField: string, sortAsc: boolean) => void;\n\nexport interface IUseDataTableProps {\n actions?: (IUseDataTableActions | IUseDataTableSplitAction | undefined)[];\n className?: string;\n columns: (IUseDataTableColumn | string | undefined)[];\n data: T[];\n loading?: any;\n scrollable?: boolean;\n scrollHeight?: string;\n style?: any;\n tableStyle?: any;\n onRowClicked?: Function;\n selection?: any;\n onSelectionChange?: Function;\n onSort?: SortHandler;\n tooltip?: boolean;\n resizableColumns?: boolean;\n lazy?: boolean;\n paginator?: boolean;\n rows?: number;\n rowsPerPageOptions?: number[];\n paginatorTemplate?: string;\n emptyMessage?: string;\n denyLocalSort?: boolean;\n}\n\nexport interface IRenderDataTableOptions {\n header?: any;\n}\n\nfunction columnIsDataTableColumn(c: any): c is IUseDataTableColumn {\n return c && (c.field || c.title || c.sortKey);\n}\n\nconst dateDelegate = (d: any) => {\n if (d) {\n try {\n return DateUtils.format(d, 'd-m-y');\n }\n catch (e) {\n return d;\n }\n }\n else {\n return null;\n }\n}\n\nconst dateTimeDelegate = (d: any) => {\n if (d) {\n return DateUtils.format(d, 'd-m-y h:i:s');\n }\n else {\n return null;\n }\n}\n\nconst booleanDelegate = (d: any) => {\n if (d) {\n return ;\n }\n else {\n return null;\n }\n}\n\nconst createDelegate = (d: ColumnDelegate) => {\n if (d && d === 'date') {\n return dateDelegate;\n }\n else if (d && d === 'datetime') {\n return dateTimeDelegate;\n }\n else if (d && d === 'boolean') {\n return booleanDelegate;\n }\n else {\n return undefined;\n }\n}\n\nfunction actionIsMultiple(a: IUseDataTableSplitAction | IUseDataTableActions | undefined): a is IUseDataTableSplitAction {\n return (a as IUseDataTableSplitAction)?.actions != undefined;\n}\n\nexport function useDataTable(props: IUseDataTableProps) {\n const [currentSortField, setCurrentSortField] = React.useState();\n const [currentSortOrder, setCurrentSortOrder] = React.useState();\n\n const wrapTooltip = (fieldName: string | undefined) =>\n props.tooltip && fieldName\n ? (r: any) => {\n if (typeof (r) === 'string') {\n return {r}\n }\n else {\n return {r[fieldName]}\n }\n }\n : null;\n\n const renderColumn = (c: string | IUseDataTableColumn, i: number) => {\n const cap = (str: string) =>\n str ? str.charAt(0).toUpperCase() + str.slice(1)\n : str;\n\n if (typeof (c) === 'string') {\n const render = wrapTooltip(c);\n return \n }\n else {\n const delegateF = createDelegate(c.delegate);\n const delegate = delegateF\n ? (r: any) => delegateF(c.field ? r[c.field] : r)\n : undefined;\n\n const render = wrapTooltip(c.field);\n return \n }\n }\n\n const renderMultipleAction = (a: IUseDataTableSplitAction, data: T, index: number) => {\n const actions = a\n .actions\n .filter(a => a != undefined)\n .map(a => a as any)\n .filter(a => a.disabled === undefined\n || (typeof (a.disabled) === 'boolean' && a.disabled != true)\n || (typeof (a.disabled) === 'function' && a.disabled(data) != true))\n .map((s) => {\n const uniqueId = `split_button_${index}`;\n return ({\n icon: s.icon,\n label: s.title,\n command: (e: any) => {\n const id = uniqueId;\n s.onClick(data, {\n target: document.getElementById(id),\n id,\n });\n }\n })\n });\n\n if (actions.length > 0) {\n return ;\n }\n else {\n return null;\n }\n }\n\n const renderAction = (a: IUseDataTableActions | IUseDataTableSplitAction | undefined, i: number) => {\n if (actionIsMultiple(a)) {\n return renderMultipleAction(a, c, props.data.indexOf(c))} />\n }\n else if (a) {\n const disabled = (c: T) => {\n return typeof (a.disabled) === 'boolean'\n ? a.disabled\n : a.disabled\n ? a.disabled(c)\n : false;\n }\n\n return {\n if (disabled(c)) {\n return null;\n }\n else if (a.text) {\n return a.onClick(c, e)}>{i18n(a.text)}\n }\n else if (a.icon && typeof (a.icon) === 'string' && a.icon.startsWith('fa')) {\n return a.onClick(c, e)}>;\n }\n else if (a.icon && typeof (a.icon) === 'string') {\n return a.onClick(c, e)}>
;\n }\n else if (a.icon && typeof (a.icon) === 'function') {\n const icon = a.icon(c);\n return a.onClick(c, e)}>
;\n }\n else {\n return null;\n }\n }} />;\n }\n else {\n return null;\n }\n }\n\n const onRowClicked = (event: any) => {\n if (props.onRowClicked) {\n props.onRowClicked(event.data);\n }\n }\n\n const doSort = ({ sortField, sortOrder }: { sortField: string, sortOrder: any }) => {\n\n setCurrentSortField(sortField);\n setCurrentSortOrder(sortOrder);\n\n props.onSort?.(sortField, sortOrder == 1);\n }\n\n return (opts: IRenderDataTableOptions = {}) => {\n return <>\n {props.loading && props.loading.isLoading && props.loading.isLoading() && props.loading.renderBox()}\n props.selection && props.onSelectionChange ? props.onSelectionChange(e.data) : undefined}\n style={props.style}\n className={classNames('table', props.className)}\n header={opts.header}\n scrollHeight={props.scrollHeight}\n tableStyle={props.tableStyle}\n onRowClick={onRowClicked}\n emptyMessage={i18n(props.emptyMessage ?? 'No data available')}\n scrollable={props.scrollable}\n resizableColumns={props.resizableColumns}\n paginator={props.paginator}\n rows={props.rows}\n rowsPerPageOptions={props.rowsPerPageOptions}\n totalRecords={props.data?.length}\n paginatorTemplate={props.paginator ? \"RowsPerPageDropdown FirstPageLink PrevPageLink CurrentPageReport NextPageLink LastPageLink\" : undefined}\n currentPageReportTemplate={props.paginator ? \"{first} - {last} de {totalRecords}\" : undefined}>\n {props\n .columns\n .filter(c => c != undefined)\n .map((r, i) => renderColumn(r!, i))}\n {props.actions && props.actions.map(renderAction)}\n \n \n }\n}\n\nexport interface IUseTreeTableProps {\n data: T[];\n columns: (IUseDataTableColumn | string | undefined)[];\n actions?: (IUseDataTableActions | undefined)[];\n idProperty?: string;\n parentProperty?: string;\n childrenProperty?: string;\n sortProperty?: string;\n expand?: boolean;\n toggleApplications?: boolean;\n selectable?: boolean;\n}\n\nexport function useTreeTable(props: IUseTreeTableProps) {\n const [nodes, setNodes] = React.useState([]);\n const [expandedKeys, setExpandedKeys] = React.useState({});\n\n const createKey = (d: any) =>\n d.key ??\n `${d.__typename}_${d.id}_${d[props.parentProperty ?? 'root']}`;\n\n const createNode = (d: any) => {\n return {\n data: d,\n key: d.key ?? createKey(d),\n children: [],\n } as any\n }\n\n const prepareFlatNodes = (data: any[], key: string, parentKey: string) => {\n const stack: any[] = [];\n const res: TreeNode[] = [];\n const all: any = {};\n const nodesAll: any = {};\n\n const availableIds: any[] = data.map(d => d[key]);\n\n for (const d of data) {\n all[d[key]] = d;\n const parentId = d[parentKey];\n if (parentId) {\n stack.push(d);\n }\n else {\n const n = createNode(d);\n nodesAll[d[key]] = n;\n res.push(n);\n }\n }\n\n let count = 0;\n while (stack.length > 0 && count < 10000) {\n const d = stack.pop();\n const parentId = d[parentKey];\n if (nodesAll[parentId]) {\n const newNode = createNode(d);\n nodesAll[d[key]] = newNode;\n nodesAll[d[parentKey]].children.push(newNode);\n if (props.sortProperty) {\n nodesAll[d[parentKey]].children =\n nodesAll[d[parentKey]]\n .children\n .sort((a: any, b: any) => a.data[props.sortProperty!] - b.data[props.sortProperty!]);\n }\n\n } // tengo un padre que no existe\n else if (!availableIds.includes(parentId)) {\n const n = createNode(d);\n nodesAll[d[key]] = n;\n res.push(n);\n }\n else {\n stack.splice(0, 0, d);\n count++;\n }\n }\n\n if (props.expand) {\n let _expandedKeys = { ...expandedKeys };\n\n for (const k of data.map((d: any) => d.key ?? createKey(d))) {\n _expandedKeys[k as string] = true;\n }\n\n setExpandedKeys(_expandedKeys);\n }\n\n setNodes(res);\n }\n\n const prepareChildrenNodes = (data: any[]) => {\n const res: TreeNode[] = [];\n\n for (const d of data) {\n const node = createNode(d)\n res.push(node);\n\n const children = prepareChildrenNodes(d[props.childrenProperty!] ?? []);\n for (const ch of children) {\n node.children.push(ch);\n }\n }\n\n return res;\n }\n\n const prepareNodes = (data: any[], key: string, parentKey: string) => {\n if (props.childrenProperty) {\n const res = prepareChildrenNodes(data);\n setNodes(res);\n if (props.expand) {\n setExpandedKeys((keys: any) => {\n for (const k of res.map(r => r.key ?? '')) {\n keys[k as string] = true;\n }\n\n return keys;\n });\n }\n }\n else {\n return prepareFlatNodes(data, key, parentKey);\n }\n }\n\n React.useEffect(() => {\n prepareNodes(\n props.data,\n props.idProperty ?? 'id',\n props.parentProperty ?? 'parentId');\n }, [props.data]);\n\n const renderColumn = (c: string | IUseDataTableColumn, i: number) => {\n const cap = (str: string) =>\n str ? str.charAt(0).toUpperCase() + str.slice(1)\n : str;\n\n const key = `col_${i}`;\n\n if (typeof (c) === 'string') {\n return \n }\n else {\n const delegateF = createDelegate(c.delegate);\n const delegate = delegateF\n ? (r: any) => delegateF(r)\n : undefined;\n\n const resolveFn = (node: any) => {\n const data = c.field ? node.data[c.field] : node.data;\n if (c.render) {\n return c.render(data);\n }\n else if (delegate) {\n return delegate(data);\n }\n }\n\n return \n }\n }\n\n const renderAction = (a: IUseDataTableActions | undefined, i: number) => {\n if (a) {\n const disabled = (c: T) => {\n return typeof (a.disabled) === 'boolean'\n ? a.disabled\n : a.disabled\n ? a.disabled(c)\n : false;\n }\n const key = `action_${i}`;\n return {\n const c = node.data;\n if (disabled(c)) {\n return null;\n }\n else if (a.text) {\n return a.onClick(c, e)}>{i18n(a.text)}\n }\n else if (a.icon && typeof (a.icon) === 'string' && a.icon.startsWith('fa')) {\n return a.onClick(c, e)} />;\n }\n else if (a.icon && typeof (a.icon) === 'function') {\n const icon = a.icon(c);\n return a.onClick(c, e)} />;\n }\n else {\n return a.onClick(c, e)} />;\n }\n }} />;\n }\n else {\n return null;\n }\n }\n\n return (opts: IRenderDataTableOptions = {}) => {\n const columns = props.columns ?\n props\n .columns\n .filter(c => c != undefined)\n .map((r, i) => renderColumn(r!, i))\n : [];\n const actions = props.actions\n ? props.actions.map(renderAction)\n : [];\n\n const children = [...columns, ...actions];\n\n return setExpandedKeys(e.value)}\n value={nodes}\n className='table'\n selectionMode={props.selectable ? 'single' : undefined}\n header={opts.header}>\n {children}\n ;\n }\n}\n\nexport interface IUseConfirmOpts {\n message?: string;\n icon?: string;\n accept?: any;\n reject?: any;\n target?: Function;\n}\n\nexport interface IUseConfirmRuntimeOpts {\n event: any;\n}\n\nexport function useConfirm(opts: IUseConfirmOpts = {}) {\n const { t } = useTranslation();\n\n const confirm = (args: (Partial & IUseConfirmRuntimeOpts) | any, event: any = undefined) => {\n const o = typeof (args) === 'object' && args.target == undefined\n ? args\n : {};\n const target = (args.target\n ? args.target\n : args.event\n ? args.event?.target\n : event?.target\n ? event?.target\n : event?.originalEvent?.target) ?? opts.target?.();\n\n const performReject = () => {\n const a = opts.reject ?? o.reject;\n if (a) {\n a(args);\n }\n }\n\n const performAccept = () => {\n const a = opts.accept ?? o.accept;\n if (a) {\n a(args);\n }\n }\n\n confirmPopup({\n target: target,\n message: (o && o.__typename) ? opts.message : (o.message ?? opts.message),\n icon: o.icon ?? opts.icon ?? 'pi pi-exclamation-triangle',\n accept: performAccept,\n reject: performReject,\n acceptLabel: t('confirm.accept'),\n rejectLabel: t('confirm.reject'),\n });\n }\n\n return confirm;\n}\n\nexport function useStringState(defaultValue: string | undefined = undefined) {\n const [state, setState] = React.useState(defaultValue);\n\n const setFromEvent = (event: any) => {\n if (event && event.target && event.target.value) {\n setState(event.target.value);\n }\n else if (event && typeof (event) === 'string') {\n setState(event);\n }\n else {\n setState(undefined);\n }\n }\n\n const clear = () => setState(undefined);\n\n return {\n hasValue: () => state != undefined,\n clear,\n value: state,\n set: setFromEvent,\n }\n}\n\nexport function useNumberState(defaultValue: number | undefined = undefined) {\n const [state, setState] = React.useState(defaultValue);\n\n const setFromEvent = (event: any | undefined) => {\n if (event && event.target?.value) {\n setState(Number(event.target.value));\n }\n else if (typeof (event) === 'number') {\n setState(event);\n }\n else {\n setState(undefined);\n }\n }\n\n const clear = () => setState(undefined);\n\n return {\n clear,\n hasValue: () => state != undefined,\n value: state,\n set: setFromEvent,\n }\n}\n\nexport function useBooleanState(defaultValue: boolean | undefined = undefined) {\n const [state, setState] = React.useState(defaultValue);\n\n const setFromEvent = (event: any | undefined) => {\n if (event && event.target.value) {\n setState(event.target.value === 'true');\n }\n else if (typeof (event) === 'boolean') {\n setState(event);\n }\n else {\n setState(undefined);\n }\n }\n\n const setFromBoolean = (value: boolean | undefined) => {\n setState(value);\n }\n\n const clear = () => setState(undefined);\n\n return {\n clear,\n hasValue: () => state != undefined,\n value: state,\n set: setFromEvent,\n setFromBoolean,\n }\n}\n\nexport interface IResolveNameOpts {\n id?: string;\n name?: string;\n defaultName?: string;\n translate?: boolean;\n}\n\nexport function useResolveName(data: T[], opts: IResolveNameOpts = {}) {\n const [cache, setCache] = React.useState({});\n const keyProperty = opts.id ?? 'id';\n const nameProperty = opts.name ?? 'name';\n\n React.useEffect(() => {\n setCache({});\n }, [data]);\n\n const resolve = (value: number | string | undefined) => {\n if (value && cache[value]) {\n return cache[value];\n }\n else if (value) {\n const d: any = data?.find((obj: any) => obj[keyProperty] === value);\n if (d) {\n const resolvedValue = opts.translate\n ? i18n(d[nameProperty])\n : d[nameProperty];\n setCache((c: any) => ({ ...c, [value]: resolvedValue }));\n return resolvedValue;\n }\n else {\n return opts.defaultName;\n }\n }\n else {\n return opts.defaultName;\n }\n }\n\n return resolve;\n}\n\nexport interface IUseMessage {\n errorMessage?: string;\n successMessage?: string;\n autoClear?: boolean;\n clearAfterMillis?: number;\n}\n\nconst AUTO_CLEAR_MILLIS = 5000;\n\nexport function useMessage(opts: IUseMessage = {}) {\n const [error, setError] = React.useState();\n const [success, setSuccess] = React.useState();\n const [successMessage, setSuccessMessage] = React.useState(opts.successMessage);\n\n const clear = () => {\n setError(undefined);\n setSuccess(undefined);\n }\n\n const setFromOption = (result: IOption, overrideOpts: Partial = {}) => {\n clear();\n\n if (result.error || result.isError) {\n setError(i18n(result.error || overrideOpts.errorMessage || 'error'));\n }\n else if (result.hasValue) {\n setSuccess(result.value);\n setSuccessMessage(overrideOpts.successMessage ?? opts.successMessage);\n }\n\n if (opts.autoClear) {\n setTimeout(clear, AUTO_CLEAR_MILLIS);\n }\n\n if (opts.clearAfterMillis) {\n setTimeout(clear, opts.clearAfterMillis);\n }\n }\n\n const render = (fn: Function | undefined = undefined) => {\n const comp = success\n ? \n : error\n ? \n : null;\n\n if (comp && fn) {\n return fn(comp);\n }\n else {\n return comp;\n }\n }\n\n const renderIfError = (fn: Function | undefined = undefined) => {\n const comp = success\n ? null\n : error\n ? \n : null;\n\n if (comp && fn) {\n return fn(comp);\n }\n else {\n return comp;\n }\n }\n\n const hasError = () => error != undefined;\n\n const isSuccess = () => success != undefined;\n\n return {\n isSuccess,\n set: setFromOption,\n setError,\n clear,\n getError: () => error,\n hasError,\n render,\n renderIfError\n }\n}\n\nexport interface IUseErrorOpts { }\n\nexport function useError(opts: IUseErrorOpts = {}) {\n const [value, setValue] = React.useState();\n\n const clear = () => {\n setValue(undefined);\n }\n\n const setFromOption = (result: IOption) => {\n if (result.error) {\n setValue(result.error);\n }\n else {\n clear();\n }\n }\n\n const render = () => {\n if (value) {\n return \n }\n else {\n return null;\n }\n }\n\n const hasError = () => value != undefined;\n\n return {\n set: setValue,\n clear,\n hasError,\n render,\n setFromOption,\n }\n}\n\nexport interface IUseRemoteData {\n lazy?: boolean;\n parameters?: any;\n disabled?: boolean;\n\n map?: (input: T) => T,\n}\n\nexport interface IRemoteData {\n query: (...params: any) => Promise;\n value: T;\n loading: ILoading;\n isLoading: () => boolean,\n hasValues: () => boolean,\n renderLoading: Function,\n}\n\nexport function useRemoteData(provider: Function, opts: IUseRemoteData = {}): IRemoteData {\n const [data, setData] = React.useState();\n const loading = useLoading(!opts.lazy);\n\n const initialize = async (...parameters: any) => {\n loading.start();\n\n const finalParameters = parameters && parameters.length > 0\n ? parameters\n : opts.parameters && opts.parameters.length\n ? opts.parameters\n : [opts.parameters];\n\n const q = provider(...finalParameters);\n\n let resp: any = undefined;\n if (q.then) {\n resp = await q;\n }\n else {\n resp = q;\n }\n const result: T = opts.map ? opts.map(resp) : resp;\n\n setData(result);\n\n loading.stop();\n\n return result;\n }\n\n React.useEffect(() => {\n if (!opts.lazy && opts.disabled != true) {\n initialize();\n }\n }, []);\n\n const query = (...params: any) => {\n return initialize(...params);\n }\n\n const renderLoading = (opts: any = undefined) => {\n return loading.renderBox(opts);\n }\n\n return {\n query,\n value: data as T,\n loading,\n isLoading: loading.isLoading,\n renderLoading,\n hasValues: () => data != undefined && !loading.isLoading(),\n }\n}\n\nexport interface IPaginatorOpts {\n className?: string;\n data: IPaginateResult | undefined,\n onChange: (page: number, rows: number | undefined) => void,\n onExport?: () => void,\n rowNumbers?: number[],\n}\n\nexport function usePaginator(opts: IPaginatorOpts) {\n const { t } = useTranslation();\n const [currentPage, setCurrentPage] = React.useState(0);\n const [currentRows, setCurrentRows] = React.useState(opts.rowNumbers?.[0] ?? 10);\n\n const doOnChange = (p: any) => {\n if (p.page != currentPage || p.rows != currentRows) {\n opts.onChange(p.page, p.rows);\n }\n setCurrentPage(p.page);\n setCurrentRows(p.rows);\n }\n\n const render = (fn?: any) => {\n const first = opts.data ? opts.data.page * opts.data.limit : 0;\n\n return
\n doOnChange(p)} />\n {opts.data?.data?.length}/{opts.data?.total}\n {opts.onExport != undefined && \n opts.onExport && opts.onExport()} />\n }\n {fn != undefined && fn}\n
\n }\n\n return render;\n}\n\nexport function useResolveCountryAndRegion(countries: ICountry[]) {\n const resolve = (data: any) => {\n const { countryId, regionId, countyId } = data;\n\n const country = countries.find(c => c.id == countryId);\n const region = country\n ? country.regions.find(r => r.id == regionId)\n : undefined;\n const county = region\n ? region.counties.find(c => c.id == countyId)\n : undefined;\n\n return [country, region, county]\n .filter(t => t != undefined)\n .map(t => t?.name)\n .join(', ');\n }\n\n return resolve;\n}\n\ntype IUseKeyListener = {\n handle?: Function;\n key?: string;\n keyCode?: number;\n keyCtrl?: boolean;\n}\n\nfunction isUseKeyListenerOpts(a: any): a is IUseKeyListener {\n return typeof (a.handle) === 'function';\n}\n\nexport function useKeyListener(fn: Function | IUseKeyListener, rawOpts: IUseKeyListener = {}) {\n const opts = isUseKeyListenerOpts(fn) ? fn : { ...rawOpts, handle: fn };\n\n const shouldHandleEvent = (event: React.KeyboardEvent) => {\n let handle = true;\n if (opts.key) {\n handle = handle && event.key === opts.key;\n }\n if (opts.keyCode) {\n handle = handle && event.keyCode === opts.keyCode;\n }\n if (opts.keyCtrl) {\n handle = handle && event.ctrlKey === opts.keyCtrl;\n }\n\n return handle;\n }\n\n const handleKey = (event: any) => {\n if (shouldHandleEvent(event)) {\n event.preventDefault();\n event.stopPropagation();\n\n opts.handle?.(event);\n\n return false;\n }\n };\n\n React.useEffect(() => {\n document.addEventListener('keydown', handleKey);\n\n return () => {\n document.removeEventListener('keydown', handleKey);\n }\n }, []);\n}\n\nexport function useHideBodyScrollbar() {\n const hide = () => {\n document.body.classList.add('no-scroll');\n }\n\n const show = () => {\n document.body.classList.remove('no-scroll');\n }\n\n React.useEffect(() => {\n hide();\n\n return show;\n }, []);\n}\n\nexport function useScheduler() {\n const s = React.useRef(false);\n\n const schedule = (fn: Function, delay: number) => {\n if (s.current === false) {\n s.current = true;\n setTimeout(() => {\n s.current = false;\n // console.log('scheduler:fire');\n fn();\n }, delay);\n }\n else {\n // console.log('scheduler:inhibit');\n }\n }\n\n return {\n schedule: schedule\n }\n}\n\nexport const useCallbackState = (initialValue: any) => {\n const [state, _setState] = React.useState(initialValue);\n const callbackQueue = React.useRef([]);\n React.useEffect(() => {\n callbackQueue.current.forEach((cb: any) => cb(state));\n callbackQueue.current = [];\n }, [state]);\n\n const setState = (newValue: any, callback: any) => {\n _setState(newValue);\n if (callback && typeof callback === \"function\") {\n callbackQueue.current.push(callback);\n }\n };\n return [state, setState];\n};\n\nexport function useDebounce(value: any, delay: number) {\n const [debouncedValue, setDebouncedValue] = React.useState(value);\n React.useEffect(() => {\n const handler = setTimeout(() => {\n setDebouncedValue(value);\n }, delay);\n return () => clearTimeout(handler);\n }, [value, delay]);\n return debouncedValue;\n}\n\ntype DispatcherProps = {\n dispatch: Function,\n handlers: any,\n delay?: number | undefined,\n};\n\nexport const useDispatcher = (props: DispatcherProps) => {\n const DEFAULT_DELAY = 500;\n const ts = React.useRef(0);\n const sent = React.useRef(false);\n const values = React.useRef({});\n\n const filterValues = () => {\n const res: any = {};\n\n for (const k of Object.keys(values.current)) {\n if (values.current[k] && values.current[k] != '') {\n res[k] = values.current[k];\n }\n }\n\n return res;\n }\n\n const enqueue = () => {\n const nts = new Date().getTime();\n if (ts.current == 0) {\n ts.current = nts;\n }\n if (nts - ts.current > (props.delay ?? DEFAULT_DELAY)) {\n if (sent.current) {\n return;\n }\n sent.current = true;\n ts.current = nts;\n props.dispatch(filterValues());\n }\n else {\n setTimeout(enqueue, props.delay ?? DEFAULT_DELAY);\n }\n }\n\n const append = (name: string, event: any) => {\n const value = event.target.value;\n props.handlers[name]?.(value);\n if (values.current[name] != value) {\n sent.current = false;\n values.current = { ...values.current, [name]: value };\n setTimeout(enqueue, props.delay ?? DEFAULT_DELAY);\n }\n }\n\n return {\n onEvent: (name: string) => (e: any) => append(name, e),\n append,\n }\n}\n\nexport function onChange(callback: Function, deps: any[]) {\n const prev = React.useRef(JSON.stringify(deps));\n\n React.useEffect(() => {\n if (prev.current != JSON.stringify(deps)) {\n prev.current = JSON.stringify(deps);\n callback();\n }\n }, [deps]);\n}\n\nexport default {\n onChange,\n useCallbackState,\n useHideBodyScrollbar,\n onNotification,\n useDataTable,\n useDialogs,\n useError,\n useFormDialog,\n useLoading,\n useMemoized,\n useNumberState,\n usePaginator,\n useResolveName,\n useResolveCountryAndRegion,\n useKeyListener,\n useScheduler,\n observeValue,\n useDispatcher,\n}\n\n","import {\n IDocumentType, IPropertyGroupType, IPropertyType,\n IWork, IWorkPermission, IWorkShift, IWorkspace, IDepartment,\n INotificationTemplate,\n IWorkerSettings,\n IMachinerySettings,\n IContractorSettings,\n IJobSettings,\n IEventTrigger,\n} from '@models';\nimport { IUserData } from '@models/identity';\nimport {\n IRequirementGroup, IRequirementType, IRequirementTypeDependency,\n IRequirementTypeDocumentRestriction, IRequirementTypeSuggestion, IRequirementTypeValidationHolder\n} from '@models/requirements';\nimport { IFieldValidation, INotificationMessage, IWorkHasModule } from '@models/works';\nimport { getClient, gql, noCache, m, q } from './graphql';\nimport { ensureType, formatProperty } from './utils';\n\nexport async function getEventTriggers(workId: number) {\n return q(`query GetEventTriggers($workId: Int!) {\n eventTriggers(workId: $workId) {\n id, name, code, workId, eventTriggerTypeId, resourceTypeId,\n }\n }`, { workId }, { returnPath: 'eventTriggers' });\n}\n\nexport async function saveEventTrigger(workId: number, data: IEventTrigger) {\n return q(`mutation SaveEventTrigger($workId: Int!, $data: EventTriggerGraphInputType!) {\n saveEventTrigger(workId: $workId, data: $data) {\n isError, error, value\n }\n }`, { workId, data }, { returnPath: 'saveEventTrigger' });\n}\n\nexport async function getLogs(filter: string | null = null) {\n const client = getClient('getLogs');\n const query = gql`\nquery GetLogs($filter: String) {\n logs(filter: $filter) {\n id, userId, dateTime, action, actionData, ctx, data\n }\n}`;\n\n const resp = await client.query({\n query,\n fetchPolicy: noCache,\n variables: {\n filter,\n }\n });\n\n return resp.data.logs;\n}\n\nexport async function initialize() {\n const client = getClient('initialize');\n const query = gql`\nquery Initialize {\n availableModules {\n id, name, description, version, resources, hasFrontend, frontendResource\n },\n users {\n id, userName, email, roles, policies, departments\n },\n roles {\n id, name\n },\n works {\n id, name, description, countryId, settings, defaultEmail, helpDeskEmail, footerResource, contextData, users {\n id, userName, email, roles, policies\n },\n workHasModules {\n id, workId, moduleName, isActive,\n },\n settings,\n contractorInvitationTemplateId,\n resetPasswordTemplateId,\n workspaces {\n id, name, description, isActive, countryId,\n regionId, countyId, contact, address,\n location, postalCode, phone, fax, email,\n properties {\n id, propertyGroupTypeId, workspaceId, value\n }\n },\n legalForms {\n id, name, hideContractorProperties, workerTypes{\n id, workerType{\n id, name\n }\n }\n },\n workShifts {\n id, name, startMinutes, endMinutes\n },\n propertyGroupTypes {\n id, name, title, styleClassName, description, containerType, style, objectType, isInternal, mandatory, hidable,\n properties {\n id, name, title, typeId, placeholder, help, parentId, propertyOrder\n }\n },\n requirementValidationTypes {\n id, name\n },\n contractorSettings {\n id, workId, showGeneralIndicators, legalFormMandatory, jhcStartDateMandatory, jhcDescriptionMandatory, cifCantBeRepeated, canAddSubWorkers, canAddSubMachineries,\n },\n machinerySettings {\n id, workId, showGeneralIndicators, subTypeMandatory, onlyLicenseNumber,\n },\n workerSettings {\n id, workId, showGeneralIndicators, showWorkerImage, workerTypeIsMandatory\n },\n jobSettings {\n id, workId, skipInformationLoadedState,\n colorizeContractorIndicators,\n freeRequirementsAreMandatory,\n omitJobHasContractorDefaultNotification,\n showResourceIncidenceIndicator,\n jobHasContractorNotificationTargetPolicy,\n informationLoadedNotificationPolicy,\n noInformationLoadedState,\n },\n departments {\n id, name, isOblique\n },\n }\n}`;\n\n const resp = await client.query({ query, fetchPolicy: noCache });\n\n return resp;\n}\n\nexport async function getUserById(id: number) {\n return q(`\nquery GetUserById($id: Int!) {\n userById(id: $id) {\n id, userName, email, roles, policies\n }\n}`, { id }, { returnPath: 'userById' });\n}\n\nexport async function getUsers() {\n const client = getClient('getUsers');\n const query = gql`\nquery Initialize {\n users {\n id, userName, email, roles, policies\n },\n roles {\n id, name\n }\n}`;\n\n const resp = await client.query({ query, fetchPolicy: noCache });\n\n return resp;\n}\n\nexport async function saveUser(user: IUserData) {\n const client = getClient('saveUser');\n const mutation = gql`\nmutation SaveUser($user: UserInputType!) {\n saveUser(user: $user) {\n isError, error, value\n }\n}`;\n\n const resp = await client.mutate({\n mutation,\n variables: { user }\n });\n\n return resp;\n}\n\nexport async function removeUser(id: number) {\n const client = getClient('removeUser');\n const mutation = gql`\n mutation RemoveUser($id: Int!) {\n removeUser(id: $id) {\n isError, error, value\n }\n }`;\n\n const resp = await client.mutate({\n mutation,\n variables: { id }\n });\n\n return resp;\n}\n\nexport async function getWorks() {\n const client = getClient('getWorks');\n const query = gql`\nquery GetWorks {\n works {\n id, name, description, countryId, settings, defaultEmail, helpDeskEmail, footerResource, contextData, users {\n id, userName, email, roles, policies\n },\n workHasModules {\n id, workId, moduleName, isActive,\n },\n contractorSettings {\n id, workId, showGeneralIndicators, legalFormMandatory, jhcStartDateMandatory, jhcDescriptionMandatory, cifCantBeRepeated, canAddSubWorkers, canAddSubMachineries,\n },\n workerSettings {\n id, workId, showGeneralIndicators, showWorkerImage, workerTypeIsMandatory\n },\n machinerySettings {\n id, workId, showGeneralIndicators, subTypeMandatory, onlyLicenseNumber,\n },\n jobSettings {\n id, workId, skipInformationLoadedState, colorizeContractorIndicators, freeRequirementsAreMandatory,\n omitJobHasContractorDefaultNotification,\n showResourceIncidenceIndicator,\n jobHasContractorNotificationTargetPolicy,\n informationLoadedNotificationPolicy,\n noInformationLoadedState,\n },\n settings,\n contractorInvitationTemplateId,\n resetPasswordTemplateId,\n workspaces {\n id, name, description, isActive, countryId,\n regionId, countyId, contact, address,\n location, postalCode, phone, fax, email,\n properties {\n id, propertyGroupTypeId, workspaceId, value\n }\n },\n legalForms{\n id, name, workerTypes{\n id, workerType{\n id, name\n }\n }\n },\n workShifts {\n id, name, startMinutes, endMinutes\n },\n propertyGroupTypes {\n id, name, title, styleClassName, description, containerType, style, objectType, isInternal, mandatory, hidable,\n properties {\n id, name, title, typeId, placeholder, help, parentId, propertyOrder\n }\n },\n requirementValidationTypes {\n id, name\n },\n departments {\n id, name, isOblique\n },\n }\n}`;\n\n const resp = await client.query({ query, fetchPolicy: noCache });\n\n return resp;\n}\n\nexport async function getWorkResources(id: number) {\n return q(`query GetWorkResources($id: Int!) {\n work(id: $id) {\n users {\n id, userName, email,\n },\n departments {\n id, name, code, description, isOblique, notifyJobCreation\n },\n workFunctions {\n id, name\n }\n }\n }`, { id }, { returnPath: 'work' });\n}\n\nexport async function getWorkDepartments(id: number) {\n return q(`query GetWorkDepartments($id: Int!) {\n work(id: $id) {\n departments {\n id, name, code, description, isOblique, notifyJobCreation, policies\n }\n }\n }`, { id }, { returnPath: 'work.departments' });\n}\n\nexport async function saveDepartment(inputData: IDepartment) {\n const department = ensureType(inputData, {\n exclude: ['workers']\n });\n\n return m(`mutation SaveDepartment($department: DepartmentInputType!) {\n saveDepartment(department: $department) {\n hasValue, value, error\n }\n }`, { department }, { returnPath: 'saveDepartment' });\n}\n\nexport async function getWork(id: number) {\n const client = getClient('getWork');\n const query = gql`\nquery GetWorks($id: Int!) {\n work(id: $id) {\n id, name, description, countryId, settings, helpDeskEmail, footerResource, contextData, users {\n id, userName, email, roles, policies\n },\n workHasModules {\n id, workId, moduleName, isActive,\n },\n contractorSettings {\n id, workId, showGeneralIndicators, legalFormMandatory, jhcStartDateMandatory, jhcDescriptionMandatory, cifCantBeRepeated, canAddSubWorkers, canAddSubMachineries\n },\n workerSettings {\n id, workId, showGeneralIndicators, showWorkerImage, workerTypeIsMandatory\n },\n machinerySettings {\n id, workId, showGeneralIndicators, subTypeMandatory, onlyLicenseNumber,\n },\n jobSettings {\n id, workId, skipInformationLoadedState, colorizeContractorIndicators, freeRequirementsAreMandatory,\n omitJobHasContractorDefaultNotification,\n showResourceIncidenceIndicator,\n jobHasContractorNotificationTargetPolicy,\n informationLoadedNotificationPolicy,\n noInformationLoadedState,\n },\n settings,\n contractorInvitationTemplateId,\n resetPasswordTemplateId,\n workspaces {\n id, name, description, isActive, countryId,\n regionId, countyId, contact, address,\n location, postalCode, phone, fax, email,\n properties {\n id, propertyGroupTypeId, workspaceId, value\n }\n },\n legalForms {\n id, name, hideContractorProperties, workerTypes {\n id, workerType {\n id, name\n }\n }\n },\n workShifts {\n id, name, startMinutes, endMinutes\n },\n propertyGroupTypes {\n id, name, title, styleClassName, description, containerType, style, objectType, isInternal, mandatory, hidable,\n properties {\n id, name, title, typeId, placeholder, help, parentId, propertyOrder\n }\n },\n requirementGroups {\n id, name, title, description, orderValue, legend\n },\n requirementValidationTypes {\n id, name\n }\n }\n}`;\n\n const resp = await client.query({\n query, fetchPolicy: noCache,\n variables: {\n id\n }\n });\n\n return resp;\n}\n\nexport async function saveWork(work: Partial) {\n const client = getClient('saveWork');\n const mutation = gql`\nmutation SaveWork($work: WorkInputType!) {\n saveWork(work: $work) {\n isError, error, value\n }\n}`;\n\n const resp = await client.mutate({\n mutation,\n variables: { work }\n });\n\n return resp;\n}\n\n// workspaces\nexport async function saveWorkspace(inputData: IWorkspace) {\n const workspace = {\n ...inputData,\n properties: inputData.properties?.map(formatProperty(inputData.workId))\n }\n return m(`\nmutation SaveWorkspace($workspace: WorkspaceInputType!) {\n saveWorkspace(workspace: $workspace) {\n isError, error, value, hasValue\n }\n}\n `, { workspace }, { returnPath: 'saveWorkspace' });\n}\n\nexport async function removeWorkspace(id: number) {\n const client = getClient('removeWorkspace');\n const mutation = gql`\nmutation RemoveWorkspace($id: Int!) {\n removeWorkspace(id: $id) {\n isError, error, value\n }\n}\n `;\n\n const resp = await client.mutate({\n mutation,\n variables: {\n id\n }\n });\n\n return resp;\n}\n\n// work shifts\nexport async function saveWorkShift(workShift: IWorkShift) {\n const client = getClient('saveWorkShift');\n const mutation = gql`\nmutation SaveWorkShift($workShift: WorkShiftInputType!) {\n saveWorkShift(workShift: $workShift) {\n isError, error, value\n }\n}\n `;\n\n const resp = await client.mutate({\n mutation,\n variables: {\n workShift\n }\n });\n\n return resp;\n}\n\nexport async function removeWorkShift(id: number) {\n const client = getClient('removeWorkShift');\n const mutation = gql`\nmutation RemoveWorkShift($id: Int!) {\n removeWorkShift(id: $id) {\n isError, error, value\n }\n}\n `;\n\n const resp = await client.mutate({\n mutation,\n variables: {\n id\n }\n });\n\n return resp;\n}\n\n// document types\nexport async function getDocumentTypes() {\n const client = getClient('getDocumentTypes');\n const query = gql`\nquery GetDocumentTypes {\n documentTypes {\n id, name, description, isActive\n },\n}`;\n\n const resp = await client.query({ query, fetchPolicy: noCache });\n\n return resp;\n}\n\nexport async function saveDocumentType(dt: IDocumentType) {\n const client = getClient('saveDocumentType');\n const mutation = gql`\nmutation SaveDocumentType($doc: DocumentTypeInputType!) {\n saveDocumentType(documentType: $doc) {\n isError, error, value\n }\n}`;\n\n const resp = await client.mutate({\n mutation,\n variables: { doc: dt }\n });\n\n return resp;\n}\n\nexport async function removeDocumentType(id: number) {\n const client = getClient('removeDocumentType');\n const mutation = gql`\nmutation RemoveDocumentType($id: Int!) {\n removeDocumentType(id: $id) {\n isError, error, value\n }\n}\n `;\n\n const resp = await client.mutate({\n mutation,\n variables: {\n id\n }\n });\n\n return resp;\n}\n\nexport async function associateAppUserToWorker(\n workId: number,\n workerId: number,\n user: any,\n forceNew: boolean | undefined = false\n) {\n const client = getClient('associateAppUserToWorker');\n const mutation = gql`\nmutation AssociateAppUserToWorker(\n $workId: Int!,\n $workerId: Int!,\n $user: UserInputType!,\n $forceNew: Boolean) {\n associateAppUserToWorker(workId: $workId, workerId: $workerId, user: $user, forceNewUser: $forceNew) {\n isError, error, value, hasValue\n }\n}`;\n\n const resp = await client.mutate({\n mutation,\n variables: { workId, workerId, user, forceNew }\n });\n\n return resp.data.associateAppUserToWorker;\n}\n\nexport async function loadWorkPermissions(workId: number) {\n return q(`query GetWorkPermissions($id: Int!) {\n work(id: $id) {\n permissions {\n id, action, name, roles, policies, expression\n }\n }\n }`, { id: workId }, { returnPath: 'work.permissions' });\n}\n\nexport async function saveWorkPermission(permission: IWorkPermission) {\n return m(`mutation SaveWorkPermission($permission: PermissionInputType!) {\n saveWorkPermission(permission: $permission) {\n isError, error, value\n }\n }`, { permission });\n}\n\nexport async function removeWorkPermission(workId: number, id: number) {\n return m(`mutation RemoveWorkPermission($workId: Int!, $id: Int!) {\n removeWorkPermission(workId: $workId, id: $id) {\n isError, error, value\n }\n }`, { workId, id });\n}\n\nexport async function getJobPropertyGroups(workId: number) {\n return q(`query GetJobPropertyGroups($workId: Int!) {\n work(id: $workId) {\n jobPropertyGroups {\n id, name, title, description, styleClassName,\n properties {\n id, name, title, propertyType, parentId\n }\n }\n }\n }`, { workId }, {\n returnPath: 'work.jobPropertyGroups'\n });\n}\n\nexport async function getPropertyGroupTypes(workId: number) {\n return q(`query GetPropertyGroupTypes($workId: Int!) {\n work(id: $workId) {\n propertyGroupTypes {\n id, name, title, description, styleClassName, mandatory, hidable,\n objectType, style, isInternal\n properties {\n id, name, title, help, placeholder, typeId, parentId, propertyOrder\n }\n }\n }\n }`, { workId }, {\n returnPath: 'work.propertyGroupTypes'\n });\n}\n\nexport async function savePropertyGroupType(workId: number, data: IPropertyGroupType) {\n const input = {\n workId,\n id: data.id,\n name: data.name,\n title: data.title,\n description: data.description,\n containerType: data.containerType,\n styleClassName: data.styleClassName,\n objectType: data.objectType,\n isActive: true,\n isInternal: data.isInternal,\n style: data.style,\n hidable: data.hidable ?? false,\n mandatory: data.mandatory ?? false,\n };\n\n return m(`mutation SavePropertyGroupType($workId: Int!, $input: PropertyGroupTypeGraphInputType!) {\n savePropertyGroupType(workId: $workId, data: $input) {\n isError, error, value\n }\n }`, { input, workId }, { returnPath: 'savePropertyGroupType' });\n}\n\nexport async function removePropertyGroupType(workId: number, id: number) {\n return m(`mutation RemovePropertyGroupType($workId: Int!, $id: Int!) {\n removePropertyGroupType(workId: $workId, id: $id) {\n isError, error, value\n }\n }`, { id, workId }, { returnPath: 'removePropertyGroupType' });\n}\n\nexport async function savePropertyType(workId: number, data: IPropertyType) {\n const input = {\n id: data.id,\n name: data.name,\n title: data.title,\n typeId: data.typeId,\n parentId: data.parentId,\n placeholder: data.placeholder,\n isActive: true,\n help: data.help,\n propertyOrder: data.propertyOrder,\n selectOptions: data.selectOptions,\n };\n\n return m(`mutation SavePropertyType($workId: Int!, $input: PropertyTypeGraphInputType!) {\n savePropertyType(workId: $workId, data: $input) {\n isError, error, value\n }\n }`, { input, workId }, { returnPath: 'savePropertyType' });\n}\n\nexport async function removePropertyType(workId: number, id: number) {\n return m(`mutation RemovePropertyType($workId: Int!, $id: Int!) {\n removePropertyType(workId: $workId, id: $id) {\n isError, error, value\n }\n }`, { workId, id }, { returnPath: 'removePropertyType' });\n}\n\nexport async function getWorkRequirementGroups(workId: number, requirementTargetType: number | undefined = undefined) {\n const data = await q(`query WorkRequirementGroups($workId: Int!) {\n work(id: $workId) {\n requirementGroups {\n id, name, title, description, color, style, icon, workId, orderValue, legend,\n requirementTypes {\n id, workId, name, title, description, targetType, requirementGroupId, kindId, isActive,\n expirationTypeId, expirationValue, expirationThreshold, policy, validationTypeId,\n isShared, expression, isPublic, isResourcePicture,\n criteria, template,\n orderValue, color, notifyContractors, notifyTitle, notifyPolicy, notifyResponsible,\n expirationRequired,\n requireJobInformationAccess,\n messageTemplateId,\n billingTypeId,\n usersExcludedChargedNotifications,\n dependencies {\n id, requirementTypeId, dependsOnRequirementId, dependencyType, propagate,\n },\n documentRestrictions {\n id, requirementTypeId, name, title, excludeMimeTypes, mimeTypes, regexp, limitFileSize, isActive\n },\n suggestions {\n id, name, requirementTypeId,\n },\n validationHolders {\n id, requirementTypeId, policy, isBlocking, validationOrder, appUserId, departmentId,\n workFunctionId, onlyNotifications,\n jobResponsible, jobRso, jobImpliedRso,\n optional\n }\n }\n }\n }\n }`, { workId }, { returnPath: 'work.requirementGroups' });\n\n const filterRequirementType = (r: IRequirementType) =>\n r.targetType == requirementTargetType;\n\n if (requirementTargetType) {\n return data.map((g: IRequirementGroup) => {\n return { ...g, requirementTypes: g.requirementTypes?.filter(filterRequirementType) };\n });\n }\n else {\n return data;\n }\n}\n\nexport function getRequirementType(workId: number, id: number) {\n return q(`query GetRequirementType($workId: Int!, $id: Int!) {\n work(id: $workId) {\n requirementType(id: $id) {\n id, workId, name, title, description, targetType, requirementGroupId, kindId, isActive,\n expirationTypeId, expirationValue, policy,\n isShared, expression, validationTypeId, isPublic, isResourcePicture,\n criteria, template,\n color, orderValue, notifyContractors, notifyTitle, , notifyPolicy, notifyResponsible,\n expirationRequired,\n requireJobInformationAccess,\n dependencies {\n id, requirementTypeId, dependsOnRequirementId, dependencyType, propagate\n },\n documentRestrictions {\n id, requirementTypeId, name, title, excludeMimeTypes, mimeTypes, regexp, limitFileSize, isActive\n },\n suggestions {\n id, name, requirementTypeId,\n },\n validationHolders {\n id, requirementTypeId, policy, isBlocking, validationOrder, appUserId, departmentId, workFunctionId,\n onlyNotifications,\n jobResponsible, jobRso, jobImpliedRso, optional,\n }\n }\n }\n }`, { workId, id }, { returnPath: 'work.requirementType' });\n}\n\nexport function saveWorkRequirementGroup(workId: number, inputData: IRequirementGroup) {\n const data = ensureType(inputData, {\n exclude: 'requirementTypes',\n });\n\n return m(`mutation SaveWorkRequirementGroup($workId: Int!, $data: RequirementGroupGraphInputType!) {\n saveRequirementGroup(workId: $workId, data: $data) {\n hasValue, value, error\n }\n }`, { workId, data }, { returnPath: 'saveRequirementGroup' });\n}\n\nexport function saveWorkRequirementType(workId: number, inputData: IRequirementType) {\n const data = ensureType(inputData, {\n exclude: ['dependencies', 'documentRestrictions', 'suggestions', 'validationHolders'],\n });\n\n return m(`mutation SaveWorkRequirementType($workId: Int!, $data: RequirementTypeGraphInputType!) {\n saveRequirementType(workId: $workId, data: $data) {\n hasValue, value, error\n }\n }`, { workId, data }, { returnPath: 'saveRequirementType' });\n}\n\nexport function removeWorkRequirementTypeDependency(workId: number, requirementTypeDependencyId: number) {\n return m(`mutation RemoveWorkRequirementTypeDependency($workId: Int!, $requirementTypeDependencyId: Int!) {\n removeRequirementTypeDependency(workId: $workId, requirementTypeDependencyId: $requirementTypeDependencyId) {\n hasValue, value, error\n }\n }`, { workId, requirementTypeDependencyId }, { returnPath: 'removeRequirementTypeDependency' });\n}\n\nexport function saveRequirementTypeSuggestion(workId: number, data: IRequirementTypeSuggestion) {\n return m(`mutation SaveRequirementTypeSuggestion($workId: Int!, $data: RequirementTypeSuggestionGraphInputType!) {\n saveRequirementTypeSuggestion(workId: $workId, data: $data) {\n hasValue, value, error\n }\n }`, { workId, data }, { returnPath: 'saveRequirementTypeSuggestion' });\n}\n\nexport function removeRequirementTypeSuggestion(workId: number, id: number) {\n return m(`mutation RemoveRequirementTypeSuggestion($workId: Int!, $id: Int!) {\n removeRequirementTypeSuggestion(workId: $workId, id: $id) {\n hasValue, value, error\n }\n }`, { workId, id }, { returnPath: 'removeRequirementTypeSuggestion' });\n}\n\nexport function saveRequirementTypeValidationHolder(workId: number, inputData: IRequirementTypeValidationHolder) {\n const data = ensureType(inputData);\n return m(`mutation SaveRequirementTypeValidationHolder($workId: Int!, $data: RequirementTypeValidationHolderGraphInputType!) {\n saveRequirementTypeValidationHolder(workId: $workId, data: $data) {\n hasValue, value, error\n }\n }`, { workId, data }, { returnPath: 'saveRequirementTypeValidationHolder' });\n}\n\nexport function removeRequirementTypeValidationHolder(workId: number, id: number) {\n return m(`mutation RemoveRequirementTypeValidationHolder($workId: Int!, $id: Int!) {\n removeRequirementTypeValidationHolder(workId: $workId, id: $id) {\n hasValue, value, error\n }\n }`, { workId, id }, { returnPath: 'removeRequirementTypeValidationHolder' });\n}\n\nexport function saveWorkRequirementTypeDependency(workId: number, inputData: IRequirementTypeDependency) {\n const data = ensureType(inputData);\n return m(`mutation SaveWorkRequirementTypeDependency($workId: Int!, $data: RequirementTypeDependencyGraphInputType!) {\n saveRequirementTypeDependency(workId: $workId, data: $data) {\n hasValue, value, error\n }\n }`, { workId, data }, { returnPath: 'saveRequirementTypeDependency' });\n}\n\nexport function removeRequirementTypeDocumentRestriction(workId: number, requirementTypeId: number, restrictionId: number) {\n return m(`mutation RemoveRequirementTypeDocumentRestriction($workId: Int!, $requirementTypeId: Int!, $restrictionId: Int!) {\n removeRequirementTypeDocumentRestriction(workId: $workId, requirementTypeId: $requirementTypeId, id: $restrictionId) {\n hasValue, value, error\n }\n }`,\n { workId, requirementTypeId, restrictionId },\n { returnPath: 'removeRequirementTypeDocumentRestriction' });\n}\n\nexport function saveRequirementTypeDocumentRestriction(workId: number, requirementTypeId: number, rawData: IRequirementTypeDocumentRestriction) {\n const data = ensureType(rawData);\n\n return m(`mutation SaveRequirementTypeDocumentRestriction($workId: Int!, $requirementTypeId: Int!, $data: RequirementTypeDocumentRestrictionGraphInputType!) {\n saveRequirementTypeDocumentRestriction(workId: $workId, requirementTypeId: $requirementTypeId, data: $data) {\n hasValue, value, error\n }\n }`,\n { workId, requirementTypeId, data },\n { returnPath: 'saveRequirementTypeDocumentRestriction' });\n}\n\nexport async function getNotificationTemplates(workId: number) {\n return q(`query GetNotificationTemplates($id: Int!) {\n work(id: $id) {\n notificationTemplates {\n id, name, title, message, workId\n }\n }\n }`, { id: workId }, { returnPath: 'work.notificationTemplates' });\n}\n\nexport async function saveNotificationTemplate(workId: number, data: INotificationTemplate) {\n return m(`mutation SaveNotificationTemplate($workId: Int!, $data: NotificationTemplateGraphInputType!) {\n saveNotificationTemplate(workId: $workId, data: $data) {\n isError, error, value\n }\n }`, { workId, data });\n}\n\nexport async function removeNotificationTemplate(workId: number, id: number) {\n return m(`mutation RemoveNotificationTemplate($workId: Int!, $id: Int!) {\n removeNotificationTemplate(workId: $workId, id: $id) {\n isError, error, value\n }\n }`, { workId, id });\n}\n\nexport async function getNotificationMessages(workId: number) {\n return q(`query GetNotificationMessages($id: Int!) {\n work(id: $id) {\n notificationMessages {\n id, action, workId, resourceType, byMail, notificationTemplateId, restrictToResourceType, actionKey,\n restrictToResourceId,\n notificationTemplate {\n id, message, title, name\n }\n }\n }\n }`, { id: workId }, { returnPath: 'work.notificationMessages' });\n}\n\nexport async function saveNotificationMessage(workId: number, inputData: INotificationMessage) {\n const data = ensureType(\n inputData,\n { exclude: ['notificationTemplate'] });\n\n return m(`mutation SaveNotificationMessage($workId: Int!, $data: NotificationMessageGraphInputType!) {\n saveNotificationMessage(workId: $workId, data: $data) {\n isError, error, value\n }\n }`, { workId, data });\n}\n\nexport async function removeNotificationMessage(workId: number, id: number) {\n return m(`mutation RemoveNotificationMessage($workId: Int!, $id: Int!) {\n removeNotificationMessage(workId: $workId, id: $id) {\n isError, error, value\n }\n }`, { workId, id });\n}\n\nexport function getFieldValidations(workId: number) {\n return q(`query GetWorkValidations($workId: Int!) {\n work(id: $workId) {\n validations {\n id, name, field, value, resourceType, errorMessage, workId,\n }\n }\n }`, { workId }, { returnPath: 'work.validations' });\n}\n\nexport function removeFieldValidation(workId: number, id: number) {\n return m(`mutation RemoveFieldValidation($workId: Int!, $id: Int!) {\n removeFieldValidation(workId: $workId, id: $id) {\n isError, error, value\n }\n }`, { workId, id }, { returnPath: 'removeFieldValidation' });\n}\n\nexport function saveFieldValidation(workId: number, rawData: IFieldValidation) {\n const data = ensureType(rawData);\n\n return m(`mutation SaveWorkValidation($workId: Int!, $data: FieldValidationGraphInputType!) {\n saveFieldValidation(workId: $workId, data: $data) {\n isError, error, value\n }\n }`, { workId, data }, { returnPath: 'saveFieldValidation' });\n}\n\nexport async function saveWorkerSettings(workId: number, rawData: IWorkerSettings) {\n const client = getClient('saveWorkerSettings');\n const data = ensureType(rawData);\n const mutation = gql`\nmutation SaveWorkerSettings($workId: Int!, $data: WorkerSettingsGraphInputType!) {\n saveWorkerSettings(workId: $workId, data: $data) {\n isError, error, value\n }\n}`;\n\n const resp = await client.mutate({\n mutation,\n variables: { workId, data }\n });\n\n return resp;\n}\n\nexport async function saveMachinerySettings(workId: number, rawData: IMachinerySettings) {\n const client = getClient('saveMachinerySettings');\n const data = ensureType(rawData);\n const mutation = gql`\nmutation SaveMachinerySettings($workId: Int!, $data: MachinerySettingsGraphInputType!) {\n saveMachinerySettings(workId: $workId, data: $data) {\n isError, error, value\n }\n}`;\n\n const resp = await client.mutate({\n mutation,\n variables: { workId, data }\n });\n\n return resp;\n}\n\nexport async function saveContractorSettings(workId: number, rawData: IContractorSettings) {\n const client = getClient('saveContractorSettings');\n const data = ensureType(rawData);\n const mutation = gql`\nmutation SaveContractorSettings($workId: Int!, $data: ContractorSettingsGraphInputType!) {\n saveContractorSettings(workId: $workId, data: $data) {\n isError, error, value\n }\n}`;\n\n const resp = await client.mutate({\n mutation,\n variables: { workId, data }\n });\n\n return resp;\n}\n\nexport async function saveJobSettings(workId: number, rawData: IJobSettings) {\n const client = getClient('saveJobSettings');\n const data = ensureType(rawData);\n const mutation = gql`\nmutation SaveJobSettings($workId: Int!, $data: JobSettingsGraphInputType!) {\n saveJobSettings(workId: $workId, data: $data) {\n isError, error, value\n }\n}`;\n\n const resp = await client.mutate({\n mutation,\n variables: { workId, data }\n });\n\n return resp;\n}\n\nexport async function saveWorkHasModule(workId: number, rawData: IWorkHasModule) {\n const client = getClient('saveWorkHasModule');\n const data = ensureType(rawData);\n const mutation = gql`\nmutation SaveWorkHasModule($workId: Int!, $data: WorkHasModuleGraphInputType!) {\n saveWorkHasModule(workId: $workId, data: $data) {\n isError, error, value\n }\n}`;\n\n const resp = await client.mutate({\n mutation,\n variables: { workId, data }\n });\n\n return resp;\n}\n","import { IMachinery } from '../../models';\nimport { IActivityType, IDepartment, ILegalForm, IMachineryType, IMachinerySubType, IWorker, IWorkerDocumentType, IWorkerWithRelations, IWorkerType, IWorkFunction, IWorkI18NResource } from '../../models/resources';\nimport { getClient, gql, noCache, m, q } from './graphql';\nimport { ensureType, formatProperty } from './utils';\n\nexport function saveMachinery(machinery: IMachinery) {\n return m(`\nmutation SaveMachinery($machinery: MachineryInputType!) {\n saveMachinery(machinery: $machinery) {\n isError, error, value, hasValue\n }\n}\n `, { machinery }, { returnPath: 'saveMachinery' });\n}\n\nexport async function saveMachineryType(machineryType: IMachineryType) {\n return m(`\nmutation SaveMachineryType($machineryType: MachineryTypeInputType!) {\n saveMachineryType(machineryType: $machineryType) {\n isError, error, value, hasValue\n }\n}\n `, { machineryType }, { returnPath: 'saveMachineryType' });\n}\n\nexport async function removeMachineryType(workId: number, id: number) {\n\n const resp = await m(`mutation RemoveMachineryType($workId: Int!, $id: Int!) {\n removeMachineryType(workId: $workId, id: $id) {\n isError, error, value\n }\n }`, { workId, id });\n\n return resp?.data.removeMachineryType;\n}\n\nexport async function saveMachinerySubType(workId: number, machinerySubType: IMachinerySubType) {\n return m(`\nmutation SaveMachinerySubType($workId: Int!, $machinerySubType: MachinerySubTypeInputType!) {\n saveMachinerySubType(workId: $workId, machinerySubType: $machinerySubType) {\n isError, error, value, hasValue\n }\n}\n `, { workId, machinerySubType }, { returnPath: 'saveMachinerySubType' });\n}\n\nexport async function removeMachinerySubType(workId: number, parentId: number, id: number) {\n\n const resp = await m(`mutation RemoveMachinerySubType($workId: Int!, $parentId: Int!, $id: Int!) {\n removeMachinerySubType(workId: $workId, parentId: $parentId, id: $id) {\n isError, error, value\n }\n }`, { workId, parentId, id });\n\n return resp?.data.removeMachinerySubType;\n}\n\nexport function saveWorker(inputData: IWorkerWithRelations) {\n\n const worker = {\n ...inputData,\n properties: inputData.properties?.map(formatProperty(inputData.workId))\n };\n\n const departments = inputData.departments;\n const workspaces = inputData.workspaces;\n\n if (inputData.departments) {\n delete worker['departments'];\n }\n\n if (inputData.workspaces) {\n delete worker['workspaces'];\n }\n\n return m(`\nmutation SaveWorker($worker: WorkerInputType!, $workspaces: [Int!], $departments: [Int!]) {\n saveWorker(worker: $worker, workspaces: $workspaces, departments: $departments) {\n isError, error, value, hasValue\n }\n}\n `, { worker, departments, workspaces }, { returnPath: 'saveWorker' });\n}\n\nexport async function getWorkers(workId: number, rrhh: boolean = false) {\n const query = `\nquery GetWorkers($workId: Int!, $rrhh: Boolean) {\n work(id: $workId) {\n workers(rrhh: $rrhh) {\n id, name, surname, remarks,\n properties {\n id, propertyGroupTypeId, workerId, jobHasWorkerId, value\n },\n appUser {\n id, userName, email\n }\n }\n }\n}`;\n\n const resp = await q(\n query, {\n workId, rrhh\n },\n { returnPath: 'work.workers', mapEvery: (d: IWorker) => ({ ...d, fullName: d.name + ' ' + d.surname }) }\n );\n\n return resp;\n}\n\nexport async function getWorkI18NResources(workId: number) {\n const client = getClient('getWorkI18NResources');\n const query = gql`\nquery GetWorkI18NResources($workId: Int!) {\n work(id: $workId) {\n workI18NResources {\n id, language, name, value\n }\n }\n}`;\n\n const resp = await client.query({\n query, fetchPolicy: noCache,\n variables: {\n workId\n }\n });\n\n return resp;\n}\n\nexport async function saveWorkI18NResource(workI18NResource: IWorkI18NResource) {\n const client = getClient('saveWorkI18NResource');\n const mutation = gql`\nmutation SaveWorkI18NResource($workI18NResource: WorkI18NInputType!) {\n saveWorkI18NResource(workI18NResource: $workI18NResource) {\n isError, error, value\n }\n}\n `;\n\n const resp = await client.mutate({\n mutation,\n variables: {\n workI18NResource\n }\n });\n\n return resp;\n}\n\nexport async function getActivities(workId: number) {\n const client = getClient('getActivities');\n const query = gql`\nquery GetActivities($workId: Int!) {\n work(id: $workId) {\n activities {\n id, name\n }\n }\n}`;\n\n const resp = await client.query({\n query, fetchPolicy: noCache,\n variables: {\n workId\n }\n });\n\n return resp;\n}\n\nexport async function saveActivity(activityType: IActivityType) {\n const client = getClient('saveActivity');\n const mutation = gql`\nmutation SaveActivity($activityType: ActivityTypeInputType!) {\n saveActivity(activityType: $activityType) {\n isError, error, value\n }\n}\n `;\n\n const resp = await client.mutate({\n mutation,\n variables: {\n activityType\n }\n });\n\n return resp;\n}\n\nexport async function getWork(id: number) {\n const client = getClient('getWork');\n const query = gql`\nquery GetWork($id: Int!) {\n work(id: $id) {\n id, name, description, countryId, users {\n id, userName, email, roles, policies\n },\n machineries {\n id, name, description, machineryTypeId, machinerySubTypeId,\n }\n }\n}`;\n\n const resp = await client.query({\n query, fetchPolicy: noCache,\n variables: {\n id\n }\n });\n\n return resp;\n}\n\nexport async function removeMachinery(id: number, workId: number, remove: boolean = false) {\n const client = getClient('removeMachinery');\n const mutation = gql`\n mutation RemoveMachinery($id: Int!, $workId: Int!, $remove: Boolean!) {\n removeMachinery(id: $id, workId: $workId, remove: $remove) {\n isError, error, value\n }\n }\n `;\n\n const resp = await client.mutate({\n mutation,\n variables: {\n id,\n workId\n }\n });\n\n return resp;\n}\n\nexport async function removeWorker(id: number, workId: number, remove: boolean = false) {\n const client = getClient('removeWorker');\n const mutation = gql`\n mutation RemoveWorker($id: Int!, $workId: Int!, $remove: Boolean!) {\n removeWorker(id: $id, workId: $workId, remove: $remove) {\n isError, error, value\n }\n }\n `;\n\n const resp = await client.mutate({\n mutation,\n variables: {\n id,\n workId,\n remove\n }\n });\n\n return resp;\n}\n\nexport async function removeWorkI18NResource(id: number, workId: number) {\n const client = getClient('removeWorkI18NResource');\n const mutation = gql`\n mutation RemoveWorkI18NResource($id: Int!, $workId: Int!) {\n removeWorkI18NResource(id: $id, workId: $workId) {\n isError, error, value\n }\n }\n `;\n\n const resp = await client.mutate({\n mutation,\n variables: {\n id,\n workId\n }\n });\n\n return resp;\n}\n\nexport async function removeActivity(id: number, workId: number) {\n const client = getClient('removeActivity');\n const mutation = gql`\n mutation RemoveActivity($id: Int!, $workId: Int!) {\n removeActivity(id: $id, workId: $workId) {\n isError, error, value\n }\n }\n `;\n\n const resp = await client.mutate({\n mutation,\n variables: {\n id,\n workId\n }\n });\n\n return resp;\n}\n\nexport async function getLegalForms(workId: number) {\n const client = getClient('getLegalForms');\n const query = gql`\nquery GetLegalForms($workId: Int!) {\n work(id: $workId) {\n legalForms {\n id, name, hideContractorProperties,\n workerTypes {\n id, workerType {\n id, name\n }\n }\n }\n }\n}`;\n\n const resp = await client.query({\n query, fetchPolicy: noCache,\n variables: {\n workId\n }\n });\n\n return resp;\n}\n\nexport async function saveLegalForm(legalForm: ILegalForm) {\n const client = getClient('saveLegalForm');\n const mutation = gql`\nmutation SaveLegalForm($legalForm: LegalFormInputType!) {\n saveLegalForm(legalForm: $legalForm) {\n isError, error, value\n }\n}\n `;\n\n const resp = await client.mutate({\n mutation,\n variables: {\n legalForm\n }\n });\n\n return resp;\n}\n\nexport async function removeLegalForm(id: number, workId: number) {\n const client = getClient('removeLegalForm');\n const mutation = gql`\n mutation RemoveLegalForm($id: Int!, $workId: Int!) {\n removeLegalForm(id: $id, workId: $workId) {\n isError, error, value\n }\n }\n `;\n\n const resp = await client.mutate({\n mutation,\n variables: {\n id,\n workId\n }\n });\n\n return resp;\n}\n\nexport async function getWorkerDepartments(workId: number, workerId: number) {\n const client = getClient('getWorkerDepartments');\n const query = gql`\nquery GetWorkerDepartments($workId: Int!, $workerId: Int!) {\n work(id: $workId) {\n worker(id: $workerId) {\n departments {\n id, name, code\n }\n }\n }\n}`;\n\n const resp = await client.query({\n query, fetchPolicy: noCache,\n variables: {\n workId, workerId\n }\n });\n\n return resp.data.work.worker.departments;\n}\n\nexport async function getWorkerHasWorkspaces(workId: number, workerId: number) {\n const client = getClient('getWorkerHasWorkspaces');\n const query = gql`\nquery GetWorkerHasWorkspaces($workId: Int!, $workerId: Int!) {\n work(id: $workId) {\n worker(id: $workerId) {\n workspaces {\n id, name\n }\n }\n }\n}`;\n\n const resp = await client.query({\n query, fetchPolicy: noCache,\n variables: {\n workId, workerId\n }\n });\n\n return resp.data.work.worker.workspaces;\n}\n\nexport async function getWorkerWorkFunctions(workId: number, workerId: number) {\n const client = getClient('getWorkerWorkFunctions');\n const query = gql`\nquery GetWorkerWorkFunctions($workId: Int!, $workerId: Int!) {\n work(id: $workId) {\n worker(id: $workerId) {\n work_functions {\n id, name\n }\n }\n }\n}`;\n\n const resp = await client.query({\n query, fetchPolicy: noCache,\n variables: {\n workId, workerId\n }\n });\n\n return resp.data.work.worker.work_functions;\n}\n\nexport async function getDepartmentWorkers(workId: number, departmentId: number) {\n const client = getClient('getDepartmentWorkers');\n const query = gql`\nquery GetDepartmentWorkers($workId: Int!, $departmentId: Int!) {\n work(id: $workId) {\n department(id: $departmentId) {\n workers {\n id, name, surname\n }\n }\n }\n}`;\n\n const resp = await client.query({\n query, fetchPolicy: noCache,\n variables: {\n workId, departmentId\n }\n });\n\n return resp.data.work.department.workers;\n}\n\nexport async function getWorkFunctionWorkers(workId: number, workFunctionId: number) {\n const client = getClient('getWorkFunctionWorkers');\n const query = gql`\nquery GetWorkFunctionWorkers($workId: Int!, $workFunctionId: Int!) {\n work(id: $workId) {\n work_function(id: $workFunctionId) {\n workers {\n id, name\n }\n }\n }\n}`;\n\n const resp = await client.query({\n query, fetchPolicy: noCache,\n variables: {\n workId, workFunctionId\n }\n });\n\n return resp.data.work.work_function.workers;\n}\n\nexport async function saveDepartmentHasWorker(workId: number, departmentId: number, workerId: number) {\n const client = getClient('saveDepartmentHasWorker');\n const mutation = gql`\nmutation SaveDepartmentHasWorker($workId: Int!, $departmentId: Int!, $workerId: Int!) {\n saveDepartmentHasWorker(workId: $workId, departmentId: $departmentId, workerId: $workerId) {\n error, hasValue,\n }\n}`;\n\n const resp = await client.mutate({\n mutation,\n variables: {\n workId, workerId, departmentId\n }\n });\n\n return resp.data.saveDepartmentHasWorker;\n}\n\nexport async function saveWorkerHasWorkspace(workId: number, workerId: number, workspaceId: number) {\n const client = getClient('saveWorkerHasWorkspace');\n const mutation = gql`\nmutation SaveWorkerHasWorkspace($workId: Int!, $workerId: Int!, $workspaceId: Int!) {\n saveWorkerHasWorkspace(workId: $workId, workerId: $workerId, workspaceId: $workspaceId) {\n error, hasValue,\n }\n}`;\n\n const resp = await client.mutate({\n mutation,\n variables: {\n workId, workerId, workspaceId\n }\n });\n\n return resp.data.saveWorkerHasWorkspace;\n}\n\nexport async function removeWorkerHasWorkspace(workId: number, workerId: number, workspaceId: number) {\n const client = getClient('removeWorkerHasWorkspace');\n const mutation = gql`\nmutation removeWorkerHasWorkspace($workId: Int!, $workerId: Int!, $workspaceId: Int!) {\n removeWorkerHasWorkspace(workId: $workId, workerId: $workerId, workspaceId: $workspaceId) {\n error, hasValue,\n }\n}`;\n\n const resp = await client.mutate({\n mutation,\n variables: {\n workId, workerId, workspaceId\n }\n });\n\n return resp.data.removeWorkerHasWorkspace;\n}\n\nexport async function saveWorkFunctionHasWorker(workId: number, workFunctionId: number, workerId: number) {\n const client = getClient('saveWorkFunctionHasWorker');\n const mutation = gql`\nmutation SaveWorkFunctionHasWorker($workId: Int!, $workFunctionId: Int!, $workerId: Int!) {\n saveWorkFunctionHasWorker(workId: $workId, workFunctionId: $workFunctionId, workerId: $workerId) {\n error, hasValue,\n }\n}`;\n\n const resp = await client.mutate({\n mutation,\n variables: {\n workId, workerId, workFunctionId\n }\n });\n\n return resp.data.saveWorkFunctionHasWorker;\n}\n\nexport async function removeDepartmentHasWorker(workId: number, departmentId: number, workerId: number) {\n const client = getClient('removeDepartmentHasWorker');\n const mutation = gql`\nmutation RemoveDepartmentHasWorker($workId: Int!, $departmentId: Int!, $workerId: Int!) {\n removeDepartmentHasWorker(workId: $workId, departmentId: $departmentId, workerId: $workerId) {\n error, hasValue,\n }\n}`;\n\n const resp = await client.mutate({\n mutation,\n variables: {\n workId, workerId, departmentId\n }\n });\n\n return resp.data.removeDepartmentHasWorker;\n}\n\nexport async function removeWorkFunctionHasWorker(workId: number, workFunctionId: number, workerId: number) {\n const client = getClient('removeWorkFunctionHasWorker');\n const mutation = gql`\nmutation RemoveWorkFunctionHasWorker($workId: Int!, $workFunctionId: Int!, $workerId: Int!) {\n removeWorkFunctionHasWorker(workId: $workId, workFunctionId: $workFunctionId, workerId: $workerId) {\n error, hasValue,\n }\n}`;\n\n const resp = await client.mutate({\n mutation,\n variables: {\n workId, workerId, workFunctionId\n }\n });\n\n return resp.data.removeWorkFunctionHasWorker;\n}\n\nexport async function getWorkspaces(workId: number) {\n const client = getClient('getWorkspaces');\n const query = gql`\nquery GetWorkspaces($workId: Int!) {\n work(id: $workId) {\n workspaces {\n id, name\n }\n }\n}`;\n\n const resp = await client.query({\n query, fetchPolicy: noCache,\n variables: {\n workId\n }\n });\n\n return resp;\n}\n\nexport async function getDepartments(workId: number) {\n const client = getClient('getDepartments');\n const query = gql`\nquery GetDepartments($workId: Int!) {\n work(id: $workId) {\n departments {\n id, name, policies, isOblique\n }\n }\n}`;\n\n const resp = await client.query({\n query, fetchPolicy: noCache,\n variables: {\n workId\n }\n });\n\n return resp;\n}\n\nexport async function saveDepartment(inputDepartment: IDepartment) {\n const client = getClient('saveDepartment');\n\n const department = ensureType(inputDepartment, {\n exclude: 'workers'\n });\n const mutation = gql`\nmutation SaveDepartment($department: DepartmentInputType!) {\n saveDepartment(department: $department) {\n isError, error, value\n }\n}\n `;\n\n const resp = await client.mutate({\n mutation,\n variables: {\n department\n }\n });\n\n return resp;\n}\n\nexport async function removeDepartment(id: number, workId: number) {\n const client = getClient('removeDepartment');\n const mutation = gql`\n mutation RemoveDepartment($id: Int!, $workId: Int!) {\n removeDepartment(id: $id, workId: $workId) {\n isError, error, value\n }\n }\n `;\n\n const resp = await client.mutate({\n mutation,\n variables: {\n id,\n workId\n }\n });\n\n return resp;\n}\n\nexport async function addDepartmentPolicy(workId: number, departmentId: number, policy: string) {\n return m(`mutation SaveDepartmentPolicy($workId: Int!, $departmentId: Int!, $policy: String!) {\n saveDepartmentPolicy(workId: $workId, departmentId: $departmentId, policy: $policy) {\n value, isError, error\n }\n }`, { workId, departmentId, policy }, { returnPath: 'saveDepartmentPolicy' });\n}\n\nexport async function removeDepartmentPolicy(workId: number, departmentId: number, policy: string) {\n return m(`mutation RemoveDepartmentPolicy($workId: Int!, $departmentId: Int!, $policy: String!) {\n removeDepartmentPolicy(workId: $workId, departmentId: $departmentId, policy: $policy) {\n value, isError, error\n }\n }`, { workId, departmentId, policy }, { returnPath: 'removeDepartmentPolicy' });\n}\n\nexport async function getWorkFunctions(workId: number) {\n const client = getClient('getWorkFunctions');\n const query = gql`\nquery GetWorkFunctions($workId: Int!) {\n work(id: $workId) {\n work_functions {\n id, name\n }\n }\n}`;\n\n const resp = await client.query({\n query, fetchPolicy: noCache,\n variables: {\n workId\n }\n });\n\n return resp;\n}\n\nexport async function getContractType(workId: number) {\n const client = getClient('getContractType');\n const query = gql`\n query GetContractType($workId: Int!) {\n work(id: $workId) {\n contractTypes {\n id, name\n }\n }\n }`;\n\n const resp = await client.query({\n query, fetchPolicy: noCache,\n variables: {\n workId\n }\n });\n\n return resp;\n}\n\nexport async function getPreventiveResource(workId: number) {\n const client = getClient('getPreventiveResource');\n const query = gql`\n query GetPreventiveResource($workId: Int!) {\n work(id: $workId) {\n preventiveResources {\n id, name\n }\n }\n }`;\n\n const resp = await client.query({\n query, fetchPolicy: noCache,\n variables: {\n workId\n }\n });\n\n return resp;\n}\n\nexport async function saveWorkFunction(workFunction: IWorkFunction) {\n const client = getClient('saveWorkFunction');\n const mutation = gql`\nmutation SaveWorkFunction($workFunction: WorkFunctionInputType!) {\n saveWorkFunction(workFunction: $workFunction) {\n isError, error, value\n }\n}\n `;\n\n const resp = await client.mutate({\n mutation,\n variables: {\n workFunction\n }\n });\n\n return resp;\n}\n\nexport async function removeWorkFunction(id: number, workId: number) {\n const client = getClient('removeWorkFunction');\n const mutation = gql`\n mutation RemoveWorkFunction($id: Int!, $workId: Int!) {\n removeWorkFunction(id: $id, workId: $workId) {\n isError, error, value\n }\n }\n `;\n\n const resp = await client.mutate({\n mutation,\n variables: {\n id,\n workId\n }\n });\n\n return resp;\n}\n\nfunction workId(workId: any): (value: import(\"../../models\").IPropertyGroup, index: number, array: import(\"../../models\").IPropertyGroup[]) => { id: number | undefined; workId: number; jobId: number | undefined; propertyGroupTypeId: number; value: string; } {\n throw new Error('Function not implemented.');\n}\n\n// MACHINERY TYPES\nexport async function getMachineryTypes(workId: number) {\n const client = getClient('getMachineryTypes');\n const query = gql`\nquery GetMachineryTypes($workId: Int!) {\n work(id: $workId) {\n machineryTypes {\n id, name, subTypes {id, name, parentId}\n }\n }\n}`;\n\n const resp = await client.query({\n query, fetchPolicy: noCache,\n variables: {\n workId\n }\n });\n\n return resp;\n}\n\n// WORKER DOCUMENT TYPES\nexport async function getWorkerDocumentTypes(workId: number) {\n const client = getClient('getWorkerDocumentTypes');\n const query = gql`\nquery GetWorkerDocumentTypes($workId: Int!) {\n work(id: $workId) {\n workerDocumentTypes {\n id, name\n }\n }\n}`;\n\n const resp = await client.query({\n query, fetchPolicy: noCache,\n variables: {\n workId\n }\n });\n\n return resp;\n}\n\nexport async function saveWorkerDocumentType(workerDocumentType: IWorkerDocumentType) {\n return m(`\nmutation SaveWorkerDocumentType($workerDocumentType: WorkerDocumentTypeInputType!) {\n saveWorkerDocumentType(workerDocumentType: $workerDocumentType) {\n isError, error, value, hasValue\n }\n}\n `, { workerDocumentType }, { returnPath: 'saveWorkerDocumentType' });\n}\n\nexport async function removeWorkerDocumentType(workId: number, id: number) {\n\n const resp = await m(`mutation RemoveWorkerDocumentType($workId: Int!, $id: Int!) {\n removeWorkerDocumentType(workId: $workId, id: $id) {\n isError, error, value\n }\n }`, { id, workId });\n\n return resp?.data.removeWorkerDocumentType;\n}\n\n// WORKER TYPES\nexport async function getWorkerTypes(workId: number) {\n const client = getClient('getWorkerTypes');\n const query = gql`\nquery getWorkerTypes($workId: Int!) {\n work(id: $workId) {\n workerTypes {\n id, name\n }\n }\n}`;\n\n const resp = await client.query({\n query, fetchPolicy: noCache,\n variables: {\n workId\n }\n });\n\n return resp;\n}\n\nexport async function saveWorkerType(workerType: IWorkerType) {\n return m(`\nmutation SaveWorkerType($workerType: WorkerTypeInputType!) {\n saveWorkerType(workerType: $workerType) {\n isError, error, value, hasValue\n }\n}\n `, { workerType }, { returnPath: 'saveWorkerType' });\n}\n\nexport async function removeWorkerType(workId: number, id: number) {\n\n const resp = await m(`mutation RemoveWorkerType($workId: Int!, $id: Int!) {\n removeWorkerType(workId: $workId, id: $id) {\n isError, error, value\n }\n }`, { id, workId });\n\n return resp?.data.removeWorkerType;\n}\n","import { m } from './graphql';\nimport { IChangePasswordData, IRecoverPasswordData } from '@models/forms';\n\nexport async function changePassword(data: IChangePasswordData) {\n return m(`mutation ChangePassword($data: ChangePasswordDataGraphInputType!) {\n changePassword(data: $data) {\n hasValue, value, isError, error\n }\n }`, { data }, { returnPath: 'changePassword' });\n}\n\nexport async function changeUserPassword(data: IChangePasswordData) {\n return m(`mutation ChangeUserPassword($data: ChangePasswordDataGraphInputType!) {\n changeUserPassword(data: $data) {\n hasValue, value, isError, error\n }\n }`, { data }, { returnPath: 'changeUserPassword' });\n}\n\nexport async function recoverPassword(data: IRecoverPasswordData) {\n return m(`mutation RecoverPassword($data: RecoverPasswordDataGraphInputType!) {\n recoverPassword(data: $data) {\n hasValue, value, isError, error\n }\n }`, { data }, { returnPath: 'recoverPassword' });\n}","import { Action, Reducer } from 'redux';\nimport { ApplicationState } from '.';\nimport {\n IDepartment,\n IActivityType,\n ILegalForm,\n IMachineryType,\n IWork,\n IWorkspace,\n IWorkShift,\n parseWork,\n IContractType,\n IWorker,\n IResourceStatusType, IPreventiveResource, IPropertyGroupType, ICommunication\n} from '@models';\nimport { IRequirementGroup, IRequirementStatusType, IRequirementValidationType } from '@models/requirements';\nimport * as App from './app';\nimport * as UserActions from './actions/user';\nimport * as ProfileActions from './actions/profile';\nimport * as ResourceActions from './actions/resources';\nimport { actionCreators as N } from './notifications';\nimport { actionCreators as Modules } from './modules';\nimport t, * as I18n from '../i18n';\nimport { redirectTo } from '@utils';\nimport { IWorkerType, IWorkerDocumentType, IContractor } from '@models/resources';\nimport { IReportDefinition } from \"@models/reports\";\nimport { getReports } from \"./actions/reports\";\n\nexport interface IUserState {\n version: number,\n works: IWork[],\n work?: IWork,\n reports: IReportDefinition[],\n workers: IWorker[];\n propertyGroupTypes: IPropertyGroupType[];\n activityTypes: IActivityType[];\n legalForms: ILegalForm[];\n departments: IDepartment[];\n machineryTypes: IMachineryType[];\n workerTypes: IWorkerType[];\n workerDocumentTypes: IWorkerDocumentType[];\n workspaces: IWorkspace[];\n workShifts: IWorkShift[];\n contractTypes: IContractType[];\n preventiveResources: IPreventiveResource[];\n requirementGroups: IRequirementGroup[];\n requirementStatusTypes: IRequirementStatusType[];\n requirementValidationTypes: IRequirementValidationType[];\n resourceStatusTypes: IResourceStatusType[];\n contractors: IContractor[];\n communications: ICommunication[];\n}\n\n// types\nenum Types {\n Initialize = '[USER] INITIALIZE',\n OnInitialize = '[USER] ON INITIALIZE',\n SelectWork = '[USER] SELECT WORK',\n SelectWorkResources = '[USER] SELECT WORK RESOURCES',\n PendingCommunications = '[USER] PENDING COMMUNICATIONS',\n ValidateCommunication = '[USER] VALIDATE COMMUNICATION',\n ContractorsLoaded = '[USER] CONTRACTORS LOADED',\n}\n\n// actions\nexport interface InitializeAction {\n type: Types.Initialize;\n}\n\nexport interface OnInitializeAction {\n type: Types.OnInitialize;\n data: Partial;\n}\n\nexport interface SelectWorkAction {\n type: Types.SelectWork;\n data: IWork;\n}\n\nexport interface SetPendingCommunicationsAction {\n type: Types.PendingCommunications;\n data: ICommunication[];\n}\n\nexport interface ValidateCommunicationAction {\n type: Types.ValidateCommunication;\n data: number;\n}\n\nexport interface SelectWorkResourcesAction {\n type: Types.SelectWorkResources;\n reports: IReportDefinition[];\n departments: IDepartment[];\n activityTypes: IActivityType[];\n propertyGroupTypes: IPropertyGroupType[];\n legalForms: ILegalForm[];\n machineryTypes: IMachineryType[];\n workerTypes: IWorkerType[];\n workerDocumentTypes: IWorkerDocumentType[];\n workers: IWorker[];\n workspaces: IWorkspace[];\n workShifts: IWorkShift[];\n contractTypes: IContractType[];\n preventiveResources: IPreventiveResource[];\n requirementGroups: IRequirementGroup[];\n requirementStatusTypes: IRequirementStatusType[];\n requirementValidationTypes: IRequirementValidationType[];\n resourceStatusTypes: IResourceStatusType[];\n contractors: IContractor[];\n}\n\nexport interface ContractorsLoadedAction {\n type: Types.ContractorsLoaded;\n value: IContractor[];\n}\n\nexport type KnownAction = InitializeAction | OnInitializeAction\n | SelectWorkAction | SelectWorkResourcesAction\n | SetPendingCommunicationsAction | ValidateCommunicationAction\n | ContractorsLoadedAction\n | { type: undefined };\n\nconst onInitialize = (data: Partial) => {\n return {\n type: Types.OnInitialize,\n data\n };\n}\n\nconst loadWorks = async (dispatch: Function) => {\n dispatch(N.startLoading({\n ctx: 'user.works',\n }));\n const resp = await UserActions.getWorks();\n\n const works = resp.data.works.map(parseWork);\n\n dispatch(onInitialize(resp.data));\n dispatch(N.stopLoading({\n ctx: 'user.works',\n }));\n\n return works;\n}\n\nexport const plainActions = {\n createHelpDeskItem: UserActions.createHelpDeskItem,\n saveWorker: ResourceActions.saveWorker,\n changePassword: ProfileActions.changePassword,\n changeUserPassword: ProfileActions.changeUserPassword,\n recoverPassword: ProfileActions.recoverPassword,\n getJobs: UserActions.getJobs,\n getJobReferences: UserActions.getJobReferences,\n saveJob: UserActions.saveJob,\n removeJob: UserActions.removeJob,\n saveCommunication: UserActions.saveCommunication,\n getCommunicationReceivers: UserActions.getCommunicationReceivers,\n getCommunication: UserActions.getCommunication,\n}\n\nexport const actionCreators = {\n loadContractors: (workId: number) => async (dispatch: Function) => {\n const contractors = await UserActions.getContractors(workId);\n\n dispatch({\n type: Types.ContractorsLoaded,\n value: contractors,\n });\n },\n loadWorks: () => (dispatch: Function) => {\n loadWorks(dispatch);\n },\n loadMessages: () => (dispatch: Function) => {\n dispatch(N.loadMessages());\n },\n validateCommunication: (id: number) => async (dispatch: Function) => {\n const resp = await UserActions.validateCommunication(id);\n\n if (resp.hasValue) {\n dispatch({\n type: Types.ValidateCommunication,\n data: id,\n });\n }\n },\n selectWork: (workId: number, redirect: boolean = true) => async (dispatch: Function, getState: () => ApplicationState) => {\n const state = getState();\n\n dispatch(App.actionCreators.startLoading({\n message: t.getFixedT('es')('Loading work')\n }));\n const resp = await UserActions.getWork(workId);\n // insertamos las claves de internacionalizacion de la obra\n I18n.installResources(resp.data.work.workI18NResources);\n\n const work = parseWork(resp.data.work);\n\n dispatch(Modules.initializeWork(work, resp.data.work.workI18NResources));\n\n const reports = await getReports(workId);\n\n dispatch({\n type: Types.SelectWorkResources,\n reports: reports,\n activityTypes: resp.data.work.activities,\n legalForms: resp.data.work.legalForms,\n departments: resp.data.work.departments,\n machineryTypes: resp.data.work.machineryTypes,\n workerTypes: resp.data.work.workerTypes,\n workerDocumentTypes: resp.data.work.workerDocumentTypes,\n workspaces: resp.data.work.workspaces,\n workShifts: resp.data.work.workShifts,\n workers: resp.data.work.workers,\n propertyGroupTypes: work.propertyGroupTypes,\n contractTypes: resp.data.work.contractTypes,\n preventiveResources: resp.data.work.preventiveResources,\n requirementGroups: resp.data.work.requirementGroups,\n requirementStatusTypes: resp.data.work.requirementStatusTypes,\n requirementValidationTypes: resp.data.work.requirementValidationTypes,\n resourceStatusTypes: resp.data.work.resourceStatusTypes,\n contractors: resp.data.work.contractors\n });\n dispatch({\n type: Types.SelectWork,\n data: work,\n });\n dispatch(App.actionCreators.stopLoading());\n if (state.identity?.security?.isGestorOrWorker() ?? false) {\n dispatch(actionCreators.loadContractors(workId));\n }\n\n // si el usuario tiene comunicaciones abiertas redireccionamos\n if (resp.data.communications.length > 0) {\n dispatch({\n type: Types.PendingCommunications,\n data: resp.data.communications,\n });\n redirectTo(`/work/${workId}/communications/current`);\n }\n else if (redirect) {\n redirectTo(`/work/${workId}/`);\n }\n },\n initialize: () => async (dispatch: Function, getState: () => ApplicationState) => {\n dispatch(App.actionCreators.startLoading({\n message: t.getFixedT('es')('Initializing ...')\n }));\n const resp = await UserActions.initialize();\n dispatch(onInitialize({ ...resp.data, version: new Date().getTime() }));\n dispatch(App.actionCreators.stopLoading());\n\n const works = resp.data.works.map(parseWork);\n\n if (works.length == 1) {\n const work = works[0];\n const redirect = window.location.pathname == '/';\n dispatch(actionCreators.selectWork(work.id, redirect));\n }\n\n dispatch(N.loadMessages());\n }\n};\n\nexport const reducer: Reducer = (state: IUserState | undefined, incomingAction: Action): IUserState => {\n if (state === undefined) {\n return {\n activityTypes: [],\n departments: [],\n propertyGroupTypes: [],\n legalForms: [],\n workers: [],\n reports: [],\n machineryTypes: [],\n workerTypes: [],\n workerDocumentTypes: [],\n workspaces: [],\n workShifts: [],\n contractTypes: [],\n preventiveResources: [],\n version: 0,\n works: [],\n requirementGroups: [],\n requirementStatusTypes: [],\n requirementValidationTypes: [],\n resourceStatusTypes: [],\n contractors: [],\n communications: [],\n };\n }\n\n const action = incomingAction as KnownAction;\n switch (action.type) {\n case Types.PendingCommunications:\n return { ...state, communications: action.data };\n case Types.ValidateCommunication:\n return { ...state, communications: state.communications.filter(c => c.id != action.data) };\n case Types.OnInitialize:\n return { ...state, ...action.data };\n case Types.ContractorsLoaded:\n return { ...state, contractors: action.value };\n case Types.SelectWorkResources:\n return {\n ...state,\n reports: action.reports,\n activityTypes: action.activityTypes,\n departments: action.departments,\n propertyGroupTypes: action.propertyGroupTypes,\n legalForms: action.legalForms,\n machineryTypes: action.machineryTypes,\n workerTypes: action.workerTypes,\n workerDocumentTypes: action.workerDocumentTypes,\n workspaces: action.workspaces,\n workShifts: action.workShifts,\n contractTypes: action.contractTypes,\n workers: action.workers,\n preventiveResources: action.preventiveResources,\n requirementGroups: action.requirementGroups,\n requirementStatusTypes: action.requirementStatusTypes,\n requirementValidationTypes: action.requirementValidationTypes,\n resourceStatusTypes: action.resourceStatusTypes,\n contractors: action.contractors\n };\n case Types.SelectWork:\n return { ...state, work: action.data, };\n default:\n return state;\n }\n};\n","import { IContractorRequest, IPaginateOptions } from '../../models';\nimport { IJobHasContractor, IJobHasDepartment, IJobHasContractorAppUser, IJobHasMachinery, IJob, IJobHasWorker } from '../../models/jobs';\nimport { m, q } from './graphql';\nimport { formatProperty, parseProperties } from './utils';\n\nexport async function getJob(workId: number, jobId: number) {\n const resp = await q(`\nquery GetJob($workId: Int!, $jobId: Int!) {\n work(id: $workId) {\n job(id: $jobId) {\n id, name, code, workId, workspaceId, activityTypeId, workShiftId, contractTypeId,\n description, startDate, endDate, remarks, preventiveResourceId, isActive, informationLoaded,\n departments {\n id, departmentId, jobId, responsibleId, dateTime, isActive, isMain,\n endDateTime, department { id, name }, responsible { id, name, surname }\n },\n currentStatus {\n id, jobId, jobStatusTypeId, dateTime, isCurrent,\n },\n contractors {\n id, jobsDescription, contactEmail, contactName, contactSurname, contactPhone,\n startDate,\n jobId,\n contractorId,\n shipmentNumber,\n parentId,\n currentStatusType, currentStatusDate,\n hierarchyLevel,\n properties {\n id, jobHasContractorId, propertyGroupTypeId, value\n },\n contractor {\n id, name, code, legalFormId, activityTypeId, address, postalCode, countryId, regionId, countyId, currentStatusType, currentStatusDate,\n }\n },\n properties {\n id, jobId, propertyGroupTypeId, value\n }\n }\n }\n}`, { workId, jobId });\n\n return resp;\n}\n\nexport function getJobContractors(workId: number, jobId: number, name: string = \"\", statusTypeId: number = 0) {\n\n return q(`\nquery GetJobContractors($workId: Int!, $jobId: Int!, $name: String, $statusTypeId: Int) {\n work(id: $workId) {\n job(id: $jobId) {\n contractors(name: $name, resourceStatusType: $statusTypeId) {\n id, jobsDescription, contactEmail, contactName, contactSurname, contactPhone,\n startDate,\n jobId,\n contractorId,\n parentId,\n shipmentNumber,\n currentStatusType, currentStatusDate, forcedStatusUntilDate,\n hierarchyLevel,\n properties {\n id, jobHasContractorId, propertyGroupTypeId, value\n },\n contractor {\n id, name, code, legalFormId, activityTypeId, address, postalCode, countryId, regionId, countyId, currentStatusType, currentStatusDate,\n }\n status {\n id, statusTypeId, datetime, isCurrent,\n }\n }\n }\n }\n }`,\n { workId, jobId, name, statusTypeId },\n { returnPath: 'work.job.contractors' });\n}\n\nexport function getJobContractorsViewModel(workId: number, jobId: number) {\n return q(`\nquery GetJobContractorsViewModel($workId: Int!, $jobId: Int!) {\n work(id: $workId) {\n job(id: $jobId) {\n contractorsViewModel {\n id, jobId, contractorId, countContractorMachineries, countContractorWorkers,\n countContractorSubContractors, countSubContractorsAuthorized,\n countMachineriesAuthorized, countWorkersAuthorized, contractorName,\n contractorStartDate, contractorStatusType\n }\n }\n }\n }`,\n { workId, jobId },\n { returnPath: 'work.job.contractorsViewModel' });\n}\n\nexport async function getJobContractorRequests(workId: number, jobId: number) {\n const resp = await q(`\nquery GetJob($workId: Int!, $jobId: Int!) {\n work(id: $workId) {\n job(id: $jobId) {\n contractorRequests {\n id, contactEmail, contactName, contactSurname, contactPhone,\n appUserId,\n address, activityTypeId, postalCode, countryId, regionId, countyId,\n contractorCode, contractorName,\n jobsDescription, startDate, accepted, discarded, acceptedDate, resultMessage,\n jobId, legalFormId,\n properties {\n id, jobHasContractorRequestId, propertyGroupTypeId, value\n }\n }\n }\n }\n}`, { workId, jobId });\n\n return resp.data.work.job.contractorRequests;\n}\n\nexport async function getJobDepartments(workId: number, jobId: number) {\n const resp = await q(`\nquery GetJobDepartments($workId: Int!, $jobId: Int!) {\n work(id: $workId) {\n job(id: $jobId) {\n departments {\n id, departmentId, jobId, responsibleId, dateTime, isActive, isMain,\n endDateTime, department { id, name }, responsible { id, name }\n }\n }\n }\n}`, { workId, jobId });\n return resp.data.work.job.departments;\n}\n\nexport async function searchContractors(workId: number, searchTerm: string) {\n const resp = await q(`query SearchContractors($workId: Int!, $searchTerm: String!) {\n work(id: $workId) {\n searchContractors(searchTerm: $searchTerm) {\n id, name, code\n }\n }\n }`, { searchTerm, workId });\n\n return resp.data.work.searchContractors;\n}\n\nexport async function createContractorRequest(workId: number, contractorRequest: IContractorRequest) {\n const inputData = {\n ...contractorRequest,\n properties: contractorRequest?.properties?.map(formatProperty(workId))\n };\n\n const resp = await m(`mutation CreateContractorRequest($workId: Int!, $inputData: JobHasContractorRequestInputType!) {\n saveJobHasContractorRequest(workId: $workId, jobHasContractorRequest: $inputData) {\n hasValue, value, error\n }\n }`, { workId, inputData });\n\n return resp?.data.saveJobHasContractorRequest;\n}\n\nexport async function processContractorRequest(workId: number, contractorRequest: IContractorRequest) {\n const inputData = {\n ...contractorRequest,\n properties: contractorRequest?.properties?.map(formatProperty(workId))\n };\n\n const resp = await m(`mutation ProcessContractorRequest($workId: Int!, $inputData: JobHasContractorRequestInputType!) {\n processJobHasContractorRequest(workId: $workId, jobHasContractorRequest: $inputData) {\n hasValue, value, error\n }\n }`, { workId, inputData });\n\n return resp?.data.processJobHasContractorRequest;\n}\n\nexport async function activateJobHasContractor(workId: number, jobId: number, contractorId: number, jobHasContractorId: number) {\n const resp = await m(`mutation ActivateJobHasContractor($workId: Int!, $jobId: Int!, $contractorId: Int!, $jobHasContractorId: Int!) {\n activateJobHasContractor(workId: $workId, jobId: $jobId, contractorId: $contractorId, jobHasContractorId: $jobHasContractorId) {\n hasValue, value, error\n }\n }`, { workId, jobId, contractorId, jobHasContractorId });\n\n return resp?.data.activateJobHasContractor;\n}\n\nexport async function saveJobHasContractor(workId: number, contractor: IJobHasContractor) {\n const inputData = {\n ...contractor,\n properties: contractor.properties?.map(formatProperty(workId)),\n };\n const resp = await m(`mutation CreateJobHasContractor($workId: Int!, $inputData: JobHasContractorInputType!) {\n saveJobHasContractor(workId: $workId, jobHasContractor: $inputData) {\n hasValue, value, error\n }\n }`, { workId, inputData });\n\n return resp?.data.saveJobHasContractor;\n}\n\nexport async function saveJobHasDepartment(workId: number, jobId: number, jobHasDepartment: IJobHasDepartment) {\n const resp = await m(`mutation SaveJobHasDepartment($workId: Int!, $jobId: Int!, $jobHasDepartment: JobHasDepartmentInputType!) {\n saveJobHasDepartment(workId: $workId, jobId: $jobId, jobHasDepartment: $jobHasDepartment) {\n error, hasValue, value\n }\n }`, { workId, jobHasDepartment, jobId });\n\n return resp?.data.saveJobHasDepartment;\n}\n\nexport async function removeJobHasDepartment(workId: number, jobId: number, jobHasDepartmentId: number) {\n const resp = await m(`mutation RemoveJobHasDepartment($workId: Int!, $jobId: Int!, $jobHasDepartmentId: Int!) {\n removeJobHasDepartment(workId: $workId, jobId: $jobId, jobHasDepartmentId: $jobHasDepartmentId) {\n error, hasValue,\n }\n }`, { workId, jobHasDepartmentId, jobId });\n\n return resp?.data.removeJobHasDepartment;\n}\n\nexport async function removeJobHasContractor(workId: number, jobId: number, jobHasContractorId: number) {\n const resp = await m(`mutation RemoveJobHasContractor($workId: Int!, $jobId: Int!, $jobHasContractorId: Int!) {\n removeJobHasContractor(workId: $workId, jobId: $jobId, jobHasContractorId: $jobHasContractorId) {\n hasValue, value, error\n }\n }`, { workId, jobId, jobHasContractorId });\n\n return resp?.data.removeJobHasContractor;\n}\n\nexport async function removeJobHasContractorRequest(workId: number, jobId: number, sourceContractorId: number, targetContractorId: number) {\n const resp = await m(`mutation RemoveJobHasContractorRequest($workId: Int!, $jobId: Int!, $sourceContractorId: Int!, $targetContractorId: Int!) {\n removeJobHasContractorRequest(workId: $workId, jobId: $jobId, sourceContractorId: $sourceContractorId, targetContractorId: $targetContractorId) {\n hasValue, value, error\n }\n }`, { workId, jobId, sourceContractorId, targetContractorId });\n\n return resp?.data.removeJobHasContractorRequest;\n}\n\nexport async function removeJobHasContractorInvitation(workId : number, jobId : number, contractorName : string, startDate : string) {\n const resp = await m(`mutation removeJobHasContractorInvitation($workId: Int!, $jobId: Int!, $contractorName: String!, $startDate: String!) {\n removeJobHasContractorInvitation(workId: $workId, jobId: $jobId, contractorName: $contractorName, startDate: $startDate) {\n hasValue, value, error\n }\n }`, { workId, jobId, contractorName, startDate });\n\n return resp?.data.removeJobHasContractorInvitation;\n}\n\nexport async function deleteJobHasContractor(workId: number, jobId: number, jobHasContractorId: number) {\n const resp = await m(`mutation DeleteJobHasContractor($workId: Int!, $jobId: Int!, $jobHasContractorId: Int!) {\n deleteJobHasContractor(workId: $workId, jobId: $jobId, jobHasContractorId: $jobHasContractorId) {\n hasValue, value, error\n }\n }`, { workId, jobId, jobHasContractorId });\n\n return resp?.data.deleteJobHasContractor;\n}\n\nexport async function deleteJobHasWorker(workId: number, jobId: number, jobHasWorkerId: number) {\n const resp = await m(`mutation DeleteJobHasWorker($workId: Int!, $jobId: Int!, $jobHasWorkerId: Int!) {\n deleteJobHasWorker(workId: $workId, jobId: $jobId, jobHasWorkerId: $jobHasWorkerId) {\n hasValue, value, error\n }\n }`, { workId, jobId, jobHasWorkerId });\n\n return resp?.data.deleteJobHasWorker;\n}\n\nexport async function deleteJobHasMachinery(workId: number, jobId: number, jobHasMachineryId: number) {\n const resp = await m(`mutation DeleteJobHasWorker($workId: Int!, $jobId: Int!, $jobHasMachineryId: Int!) {\n deleteJobHasMachinery(workId: $workId, jobId: $jobId, jobHasMachineryId: $jobHasMachineryId) {\n hasValue, value, error\n }\n }`, { workId, jobId, jobHasMachineryId });\n\n return resp?.data.deleteJobHasMachinery;\n}\n\nexport function getJobHasContractor(workId: number, jobId: number, jobHasContractorId: number) {\n return q(`query GetJobHasContractor($workId: Int!, $jobId: Int!, $jobHasContractorId: Int!) {\n work(id: $workId) {\n job(id: $jobId) {\n jobHasContractor(id: $jobHasContractorId) {\n id, jobsDescription, contactEmail, contactName, contactSurname, contactPhone,\n startDate,\n jobId,\n contractorId,\n parentId,\n currentStatusType, currentStatusDate, forcedStatusUntilDate,\n hierarchyLevel,\n properties {\n id, jobHasContractorId, propertyGroupTypeId, value\n },\n contractor {\n id, name, code, legalFormId, activityTypeId, address, postalCode, countryId, regionId, countyId, currentStatusType, currentStatusDate,\n }\n }\n }\n }\n }`, { workId, jobId, jobHasContractorId }, {\n returnPath: 'work.job.jobHasContractor',\n });\n}\n\nexport async function getJobHasContractorAppUsers(workId: number, jobId: number, jobHasContractorId: number) {\n const resp = await q(`query GetJobHasContractorAppUsers($workId: Int!, $jobId: Int!, $jobHasContractorId: Int!) {\n work(id: $workId) {\n job(id: $jobId) {\n jobHasContractor(id: $jobHasContractorId) {\n appUsers {\n id, jobContractorId, appUserId, startDate, endDate,\n appUser {\n id, userName, email\n }\n }\n }\n }\n }\n }`, { workId, jobId, jobHasContractorId });\n\n return resp.data.work.job.jobHasContractor.appUsers;\n}\n\nexport async function searchMachineries(workId: number, term: string, machineryTypeId: number | undefined = undefined, contractorId: number | undefined, jobId: undefined | number) {\n const resp = await q(`query SearchMachineries($workId: Int!, $term: String, $machineryTypeId: Int, $contractorId: Int, $jobId: Int) {\n work(id: $workId) {\n searchMachineries(searchTerm: $term, machineryTypeId: $machineryTypeId, contractorId: $contractorId, jobId: $jobId) {\n id, name, code, machineryTypeId, machinerySubTypeId, contractorId,\n prefixLicenseNumber, licenseNumber, suffixLicenseNumber, contractor {\n id, name\n },\n }\n }\n }`, { machineryTypeId, term, workId, contractorId, jobId });\n\n return resp.data.work.searchMachineries;\n}\n\nexport async function getJobHasMachineries(workId: number, jobId: number) {\n const resp = await q(`query GetJobHasMachineries($workId: Int!, $jobId: Int!) {\n work(id: $workId) {\n job(id: $jobId) {\n machineries {\n id, jobId, machineryId, startDate, endDate,\n currentStatusType, currentStatusDate,\n hasDelayedRevokation, forcedStatusUntilDate,\n properties {\n id, propertyGroupTypeId, jobHasMachineryId, value\n },\n machinery {\n id, name, code, machineryTypeId, machinerySubTypeId,\n currentStatusType, currentStatusDate,\n contractor { id, name }, contractorId\n prefixLicenseNumber, licenseNumber, suffixLicenseNumber\n }\n }\n }\n }\n }`, { jobId, workId });\n\n return resp.data.work.job.machineries;\n}\n\nexport function getJobHasMachinery(workId: number, jobId: number, relationId: number) {\n return q(`query GetJobHasMachinery($workId: Int!, $jobId: Int!, $relationId: Int!) {\n work(id: $workId) {\n job(id: $jobId) {\n machinery(id: $relationId) {\n id, jobId, machineryId, startDate, endDate,\n currentStatusType, currentStatusDate, forcedStatusUntilDate,\n jobHasContractorId,\n properties {\n id, propertyGroupTypeId, jobHasMachineryId, value\n },\n machinery {\n id, name, code, machineryTypeId, machinerySubTypeId,\n currentStatusType, currentStatusDate, contractorId,\n prefixLicenseNumber, licenseNumber, suffixLicenseNumber,\n }\n }\n }\n }\n }`,\n { jobId, workId, relationId },\n {\n returnPath: 'work.job.machinery'\n });\n}\n\nexport async function activateJobHasMachinery(workId: number, jobId: number, machineryId: number, jobHasMachineryId: number) {\n\n const resp = await m(`mutation ActiveJobHasMachinery($workId: Int!, $jobId: Int!, $machineryId: Int!, $jobHasMachineryId: Int!) {\n activateJobHasMachinery(workId: $workId, jobId: $jobId, machineryId: $machineryId, jobHasMachineryId: $jobHasMachineryId) {\n hasValue, value, error\n }\n }`, { workId, jobId, machineryId, jobHasMachineryId });\n\n return resp?.data.activateJobHasMachinery;\n}\n\nexport async function saveJobHasMachinery(\n workId: number,\n jobId: number,\n data: IJobHasMachinery,\n jobHasContractorId: number) {\n const inputData = {\n machineryId: data.machineryId,\n jobId: data.jobId,\n jobHasContractorId: data.jobHasContractorId ?? jobHasContractorId,\n machineryTypeId: data.machineryTypeId,\n machinerySubTypeId: data.machinerySubTypeId,\n machineryName: data.machineryName,\n startDate: data.startDate,\n machineryCode: data.machineryCode,\n machineryPrefixLicenseNumber: data.machineryPrefixLicenseNumber,\n machineryLicenseNumber: data.machineryLicenseNumber,\n machinerySuffixLicenseNumber: data.machinerySuffixLicenseNumber,\n properties: (data.properties ?? []).map(formatProperty(workId))\n };\n\n const resp = await m(`mutation SaveJobHasMachineries($workId: Int!, $jobId: Int!, $jobHasContractorId: Int!, $inputData: JobHasMachineryInputType!) {\n saveJobHasMachinery(workId: $workId, jobId: $jobId, jobHasContractorId: $jobHasContractorId, data: $inputData) {\n hasValue, value, error\n }\n }`, { workId, jobId, jobHasContractorId, inputData });\n return resp?.data.saveJobHasMachinery;\n}\n\nexport async function removeJobHasMachinery(workId: number, jobId: number, jobHasMachineryId: number) {\n const resp = await m(`mutation RemoveJobHasMachineries($workId: Int!, $jobId: Int!, $jobHasMachineryId: Int!) {\n removeJobHasMachinery(workId: $workId, jobId: $jobId, jobHasMachineryId: $jobHasMachineryId) {\n hasValue, value, error\n }\n }`, { workId, jobHasMachineryId, jobId });\n\n return resp?.data.removeJobHasMachinery;\n}\n\nexport async function saveJob(data: IJob, departments: IJobHasDepartment[] = []) {\n const inputData = {\n id: data.id,\n contractTypeId: data.contractTypeId,\n description: data.description,\n endDate: data.endDate,\n startDate: data.startDate,\n remarks: data.remarks,\n workId: data.workId,\n name: data.name,\n code: data.code,\n workspaceId: data.workspaceId,\n workShiftId: data.workShiftId,\n activityTypeId: data.activityTypeId,\n preventiveResourceId: data.preventiveResourceId,\n isActive: true,\n properties: (data.properties ?? []).map(formatProperty(data.workId)),\n };\n\n const resp = await m(`mutation SaveJob($workId: Int!, $inputData: JobInputType!) {\n saveJob(workId: $workId, job: $inputData) {\n hasValue, value, error\n }\n }`, { workId: data.workId, inputData, departments });\n\n return resp?.data.saveJob;\n}\n\nexport async function getJobHasWorker(workId: number, jobId: number, relationId: number) {\n return q(`query GetJobHasWorker($workId: Int!, $jobId: Int!, $relationId: Int!) {\n work(id: $workId) {\n job(id: $jobId) {\n worker(id: $relationId) {\n id, jobId, startDate, workerId,\n currentStatusType, currentStatusDate, forcedStatusUntilDate,\n jobHasContractorId,\n worker {\n id, name, surname, code,\n currentStatusType, currentStatusDate, forcedStatusUntilDate,\n workerTypeId, workerDocumentTypeId,\n contractor { id, name }, contractorId\n },\n properties {\n id, jobHasWorkerId, propertyGroupTypeId, value\n },\n }\n }\n }\n }`,\n { workId, jobId, relationId }, {\n returnPath: 'work.job.worker',\n map: w => {\n return {\n ...parseProperties(w),\n fullName: `${w.worker?.name} ${w.worker?.surname}`,\n };\n }\n });\n}\n\nexport async function getJobHasWorkers(workId: number, jobId: number) {\n return q(`query GetJobHasWorkers($workId: Int!, $jobId: Int!) {\n work(id: $workId) {\n job(id: $jobId) {\n workers {\n id, jobId, startDate, workerId,\n currentStatusType, currentStatusDate,\n hasDelayedRevokation, forcedStatusUntilDate,\n properties {\n id, jobHasWorkerId, propertyGroupTypeId, value\n },\n worker {\n id, name, surname, code,\n currentStatusType, currentStatusDate,\n workerTypeId, workerDocumentTypeId,\n contractor { id, name }, contractorId\n },\n }\n }\n }\n }`,\n { workId, jobId }, {\n returnPath: 'work.job.workers',\n mapEvery: w => parseProperties(w)\n });\n}\n\nexport async function searchWorkers(\n workId: number,\n searchTerm: string,\n jobId: number | undefined = undefined,\n contractorId: number | undefined = undefined,\n limit: number | undefined = undefined) {\n const options: IPaginateOptions = {\n limit: limit,\n searchTerm: searchTerm,\n };\n\n const resp = await q(`query SearchWorkers(\n $workId: Int!,\n $options: PaginateOptionsGraphInputType!,\n $jobId: Int!,\n $contractorId: Int) {\n work(id: $workId) {\n searchWorkers(options: $options, jobId: $jobId, contractorId: $contractorId) {\n page, total, limit, data {\n id, name, surname, code,\n currentStatusType, currentStatusDate, forcedStatusUntilDate, contractorId\n contractor {\n id, name, code, currentStatusType, currentStatusDate,\n }\n }\n }\n }\n }`, { jobId, options, workId, contractorId });\n\n return resp.data.work.searchWorkers;\n}\n\nexport async function saveJobHasWorker(workId: number, worker: IJobHasWorker) {\n const inputData = {\n id: worker.id,\n jobId: worker.jobId,\n workerId: worker.workerId,\n startDate: worker.startDate,\n jobHasContractorId: worker.jobHasContractorId,\n properties: worker.properties?.map(formatProperty(workId)),\n };\n\n const resp = await m(`mutation SaveJobHasWorker($workId: Int!, $inputData: JobHasWorkerGraphInputType!) {\n saveJobHasWorker(workId: $workId, jobHasWorker: $inputData) {\n hasValue, value, error\n }\n }`, { workId, inputData });\n\n return resp?.data.saveJobHasWorker;\n}\n\nexport async function activateJobHasWorker(workId: number, jobId: number, workerId: number, jobHasWorkerId: number) {\n const resp = await m(`mutation SaveJobHasWorker($workId: Int!, $jobId: Int!, $workerId: Int!, $jobHasWorkerId: Int!) {\n activateJobHasWorker(workId: $workId, jobId: $jobId, workerId: $workerId, jobHasWorkerId: $jobHasWorkerId) {\n hasValue, value, error\n }\n }`, { workId, jobId, workerId, jobHasWorkerId });\n\n return resp?.data.activateJobHasWorker;\n}\n\nexport async function removeJobHasWorker(workId: number, jobId: number, jobHasWorkerId: number) {\n const resp = await m(`mutation RemoveJobHasWorker($workId: Int!, $jobId: Int!, $jobHasWorkerId: Int!) {\n removeJobHasWorker(workId: $workId, jobId: $jobId, jobHasWorkerId: $jobHasWorkerId) {\n hasValue, value, error\n }\n }`, { workId, jobId, jobHasWorkerId });\n\n return resp?.data.removeJobHasWorker;\n}\n\nexport function saveJobStatus(workId: number, jobId: number, statusTypeId: number, remarks: string) {\n return m(`mutation SaveJobStatus($workId: Int!, $jobId: Int!, $remarks: String, $statusTypeId: Int!) {\n saveJobStatus(workId: $workId, jobId: $jobId, statusTypeId: $statusTypeId, remarks: $remarks) {\n hasValue, value, error\n }\n }`, { workId, jobId, statusTypeId, remarks }, { returnPath: 'saveJobStatus' });\n}\n\nexport function getJobStatus(workId: number, jobId: number | undefined = undefined) {\n return q(`query GetJobStatus($workId: Int!, $jobId: Int!) {\n work(id: $workId) {\n job(id: $jobId) {\n status {\n id, userId, dateTime, jobStatusTypeId, remarks, jobId, isCurrent,\n }\n }\n }\n }`, { jobId, workId }, { returnPath: 'work.job.status' });\n}\n\nexport function jobNotifyInformationLoaded(workId: number, jobId: number, remarks: string | null = null) {\n return m(`mutation NotifyInformationLoaded($workId: Int!, $jobId: Int!, $remarks: String) {\n jobNotifyInformationLoaded(workId: $workId, jobId: $jobId, remarks: $remarks) {\n hasValue, value, error\n }\n }`, { workId, jobId, remarks, }, { returnPath: 'jobNotifyInformationLoaded' });\n}\n\nexport function getJobLogs(workId: number, jobId: number) {\n return q(`query GetJobLogs($workId: Int!, $jobId: Int!) {\n work(id: $workId) {\n job(id: $jobId) {\n logs {\n dateTime, userId, jobLogType\n }\n }\n }\n }`, { workId, jobId }, { returnPath: 'work.job.logs' });\n}\n","import { get as i18n } from '../i18n';\nimport * as DateUtils from '@utils/date-utils';\n\nexport enum NotificationType {\n NOTIFICATION,\n ERROR,\n LOADING,\n PROGRESS,\n SUCCESS,\n}\n\nexport interface INotification {\n action?: string;\n ctx?: string;\n delay?: number;\n id: number;\n message: string;\n onComplete?: Function;\n progress?: number;\n type: NotificationType;\n}\n\nexport enum MessageType {\n MESSAGE = 1,\n JOB_HAS_CONTRACTOR_REQUEST = 2,\n PENDING_REQUIREMENT = 3,\n /**\n * El requerimiento esta pendiente\n * data: { workId: int, resourceType: int, resourceId: int, requirementId: int, requirementTypeId: int, requirementName: string, resourceName: string }\n */\n JOB_CREATED = 4,\n SUBCONTRACTOR_REQUEST = 5,\n JOB_INFORMATION_LOADED = 6,\n REQUIREMENT_VALIDATED = 7,\n REQUIREMENT_INCIDENCE = 8,\n INVALID_ITA = 9,\n SUBCONTRACTOR_REQUEST_ACCEPTED = 10,\n SUBCONTRACTOR_REQUEST_REJECTED = 11,\n JOB_FINALIZED = 12,\n RESOURCE_AUTHORIZED = 13,\n RESOURCE_REJECTED = 14,\n JOB_AUTHORIZED = 15,\n JOB_REVOKED = 16,\n REQUIREMENT_EXPIRED = 17,\n RELOAD_NOTIFICATIONS = 18,\n MODULE_MESSAGE = 19,\n REQUIREMENT_NOTE = 20,\n REQUIREMENT_NEAR_EXPIRATION = 21,\n}\n\nexport const messageTypes = [\n {id: MessageType.MESSAGE, name: 'messages.type.message'},\n {id: MessageType.JOB_HAS_CONTRACTOR_REQUEST, name: 'messages.type.job_has_contractor_request'},\n {id: MessageType.PENDING_REQUIREMENT, name: 'messages.type.pending_requirement'},\n {id: MessageType.JOB_CREATED, name: 'messages.type.job_created'},\n {id: MessageType.SUBCONTRACTOR_REQUEST, name: 'messages.type.subcontractor_request'},\n {id: MessageType.JOB_INFORMATION_LOADED, name: 'messages.type.job_information_loaded'},\n {id: MessageType.REQUIREMENT_VALIDATED, name: 'messages.type.requirement_validated'},\n {id: MessageType.REQUIREMENT_INCIDENCE, name: 'messages.type.requirement_incidence'},\n {id: MessageType.INVALID_ITA, name: 'messages.type.invalid_ita'},\n {id: MessageType.SUBCONTRACTOR_REQUEST_ACCEPTED, name: 'messages.type.subcontractor_request_accepted'},\n {id: MessageType.SUBCONTRACTOR_REQUEST_REJECTED, name: 'messages.type.subcontractor_request_rejected'},\n {id: MessageType.JOB_FINALIZED, name: 'messages.type.job_finalized'},\n {id: MessageType.RESOURCE_AUTHORIZED, name: 'messages.type.resource_authorized'},\n {id: MessageType.RESOURCE_REJECTED, name: 'messages.type.resource_rejected'},\n {id: MessageType.JOB_AUTHORIZED, name: 'messages.type.job_authorized'},\n {id: MessageType.JOB_REVOKED, name: 'messages.type.job_revoked'},\n {id: MessageType.REQUIREMENT_EXPIRED, name: 'messages.type.requirement_expired'},\n {id: MessageType.MODULE_MESSAGE, name: 'messages.type.module_message'},\n {id: MessageType.REQUIREMENT_NOTE, name: 'messages.type.requirement_note'},\n {id: MessageType.REQUIREMENT_NEAR_EXPIRATION, name: 'messages.type.requirement_near_expiration'},\n];\n\nexport interface IMessage {\n id: string;\n message: string;\n date?: Date;\n data?: any;\n notificationType: number;\n\n icon?: string;\n severity?: string;\n}\n\nexport const parseMessage = (message: IMessage) => {\n return {...message, data: JSON.parse(message.data)};\n}\n\nconst __icons: {[key: string]: string} = {\n 'message': 'fas fa-comment-alt',\n 'info': 'fas fa-info',\n 'warning': 'fas fa-exclamation-triangle',\n 'error': 'fas fa-exclamation',\n 'success': 'fas fa-check-circle'\n}\n\nexport const translateNotificationIcon = (icon: string) => {\n return __icons[icon] ?? 'pi-exclamation-circle';\n}\n\nexport const messageTitle = (message: IMessage) => {\n if (message.notificationType === MessageType.PENDING_REQUIREMENT && !message.message) {\n return i18n('notifications.requirement.pending');\n }\n else if (message.notificationType === MessageType.PENDING_REQUIREMENT) {\n return message.message + ' ';\n }\n else {\n return message.message;\n }\n}\n","import { Action, Reducer } from 'redux';\n\nimport { IMessage, MessageType, INotification, NotificationType } from '../models';\nimport * as Actions from './actions/notifications';\nimport { ApplicationState } from '../store';\n\nexport interface INotificationsState {\n notifications: INotification[];\n messages: IMessage[];\n}\n\nenum Types {\n OnMessage = '[NOTIFICATIONS] ON MESSAGE',\n ClearMessage = '[NOTIFICATIONS] CLEAR MESSAGE',\n ClearMessages = '[NOTIFICATIONS] CLEAR MESSAGES',\n SetMessagesAction = '[NOTIFICATIONS] SET MESSAGES',\n NotificationAdd = '[NOTIFICATIONS] ADD',\n NotificationSuccess = '[NOTIFICATIONS] SUCCESS',\n ClearErrorsAction = '[NOTIFICATIONS] CLEAR ERROR',\n RemoveNotificationAction = '[NOTIFICATIONS] REMOVE NOTIFICATION ACTION',\n StopLoadingAction = '[NOTIFICATIONS] STOP LOADING',\n}\n\nexport interface AddNotificationAction {\n type: Types.NotificationAdd;\n notification: INotification;\n}\n\nexport interface ClearErrorNotificationAction {\n type: Types.ClearErrorsAction;\n ctx?: string;\n action?: string;\n}\n\nexport interface SetMessagesAction {\n type: Types.SetMessagesAction;\n messages: IMessage[];\n}\n\nexport interface RemoveNotificationAction {\n type: Types.RemoveNotificationAction;\n id: number;\n}\n\nexport interface StopLoadingAction {\n type: Types.StopLoadingAction;\n ctx?: string;\n action?: string;\n}\n\nexport interface SuccessAction {\n type: Types.NotificationSuccess;\n ctx?: string;\n action?: string;\n message?: string;\n id?: number;\n}\n\nexport interface OnMessage {\n type: Types.OnMessage,\n message: IMessage\n};\n\nexport interface ClearMessage {\n type: Types.ClearMessage,\n id: string\n};\n\nexport interface ClearMessages {\n type: Types.ClearMessages,\n ids: string[]\n};\n\nexport type KnownAction =\n AddNotificationAction\n | ClearErrorNotificationAction\n | StopLoadingAction\n | RemoveNotificationAction\n | SuccessAction\n | OnMessage\n | ClearMessage\n | ClearMessages\n | SetMessagesAction;\n\nconst excludeMatchingNotifications = (\n e: Partial,\n notifications: INotification[],\n type: NotificationType) => {\n\n return notifications.filter(n => {\n if (e.id) {\n return n.id != e.id;\n }\n else if (e.ctx && e.action && n.type == type) {\n return n.ctx != e.ctx || n.action != e.ctx;\n }\n else if (e.ctx && n.type == type) {\n return n.ctx != e.ctx;\n }\n else {\n return true;\n }\n });\n}\n\nconst createNotification = (notif: Partial, dispatch: Function) => {\n const id = (new Date().getTime());\n const n = { ...notif, id };\n\n if (n.delay) {\n setTimeout(() => {\n dispatch({\n type: Types.RemoveNotificationAction,\n id: n.id\n });\n\n if (n.onComplete) {\n n.onComplete();\n }\n }, n.delay);\n }\n\n dispatch({\n type: Types.NotificationAdd,\n notification: n\n });\n}\n\nexport const actionCreators = {\n success: (notif: Partial) => (dispatch: Function) => {\n dispatch({\n type: Types.NotificationSuccess,\n ctx: notif.ctx,\n action: notif.action,\n message: notif.message,\n });\n },\n clearErrors: (notif: Partial) => (dispatch: Function) => {\n dispatch({\n type: Types.ClearErrorsAction,\n ctx: notif.ctx,\n action: notif.action,\n });\n },\n startLoading: (notif: Partial) => (dispatch: Function) => {\n createNotification({\n ...notif,\n type: NotificationType.LOADING\n }, dispatch);\n },\n stopLoading: (notif: Partial) => (dispatch: Function) => {\n dispatch({\n type: Types.StopLoadingAction,\n ctx: notif.ctx,\n action: notif.action,\n });\n },\n add: (notif: Partial) => (dispatch: Function) => {\n createNotification(notif, dispatch);\n },\n error: (notif: Partial) => (dispatch: Function) => {\n createNotification({ ...notif, type: NotificationType.ERROR }, dispatch);\n },\n remove: (id: number) => (dispatch: Function) => {\n dispatch({\n type: Types.RemoveNotificationAction,\n id\n });\n },\n removeNotification: (id: number) => (dispatch: Function) => {\n dispatch({\n type: Types.RemoveNotificationAction,\n id\n });\n },\n addMessage: (message: IMessage) => (dispatch: Function, getState: () => ApplicationState) => {\n const state = getState();\n if (message.data?.WorkId == undefined\n || state.user.work?.id == undefined\n || message.data?.WorkId == state.user.work?.id) {\n dispatch({\n type: Types.OnMessage,\n message,\n });\n }\n },\n loadMessages: () => async (dispatch: Function, getState: () => ApplicationState) => {\n const state = getState();\n const messages = await Actions.getMessages() ?? [];\n const selectedWork = state.user.work;\n\n // const filteredMessages = messages;\n const filteredMessages = messages\n .filter((m: IMessage) => m.notificationType != MessageType.RELOAD_NOTIFICATIONS\n && (m.data?.WorkId == undefined\n || state.user.work?.id == undefined\n || m.data?.WorkId == selectedWork?.id));\n\n dispatch({\n type: Types.SetMessagesAction,\n messages: filteredMessages,\n });\n },\n clearMessage: (id: string) => async (dispatch: Function) => {\n await Actions.resolveNotification(id);\n\n dispatch({\n type: Types.ClearMessage,\n id,\n });\n },\n clearMessages: (ids: string[]) => async (dispatch: Function) => {\n await Actions.resolveNotifications(ids);\n\n dispatch({\n type: Types.ClearMessages,\n ids,\n });\n }\n};\n\nexport const reducer: Reducer = (state: INotificationsState | undefined, incomingAction: Action): INotificationsState => {\n if (state === undefined) {\n return { notifications: [], messages: [], };\n }\n\n const action = incomingAction as KnownAction;\n switch (action.type) {\n case Types.OnMessage:\n return { ...state, messages: state.messages.concat([action.message]) };\n\n case Types.ClearMessage:\n return { ...state, messages: state.messages.filter(m => m.id != action.id) };\n\n case Types.ClearMessages:\n return { ...state, messages: state.messages.filter(m => action.ids.indexOf(m.id) == -1) };\n\n case Types.SetMessagesAction:\n return { ...state, messages: action.messages };\n\n case Types.NotificationSuccess:\n const notifs = excludeMatchingNotifications(\n { ctx: action.ctx, action: action.action },\n state.notifications,\n NotificationType.SUCCESS);\n\n return {\n messages: state.messages,\n notifications: notifs.concat({\n id: action.id ?? (new Date().getTime()),\n message: action.message ?? '',\n ctx: action.ctx,\n action: action.action,\n type: NotificationType.SUCCESS,\n })\n }\n\n case Types.NotificationAdd:\n return {\n messages: state.messages,\n notifications:\n state\n .notifications\n .concat(action.notification)\n };\n case Types.ClearErrorsAction:\n return {\n messages: state.messages,\n notifications:\n excludeMatchingNotifications(\n { ctx: action.ctx, action: action.action },\n state.notifications,\n NotificationType.ERROR)\n }\n case Types.RemoveNotificationAction:\n return {\n messages: state.messages,\n notifications:\n state\n .notifications\n .filter(n => n.id != action.id)\n };\n case Types.StopLoadingAction:\n return {\n messages: state.messages,\n notifications:\n excludeMatchingNotifications(\n { ctx: action.ctx, action: action.action },\n state.notifications,\n NotificationType.LOADING)\n };\n default:\n return state;\n }\n};\n","import { parseMessage } from '@models/notifications';\nimport { m, q } from './graphql';\n\nexport function resolveNotification(id: string) {\n return m(`mutation ResolveNotification($id: String!) {\n resolveNotification(id: $id) {\n error, hasValue, value\n }\n }`, { id }, { returnPath: 'resolveNotification' });\n}\n\nexport function resolveNotifications(ids: string[]) {\n return m(`mutation ResolveNotifications($ids: [String!]!) {\n resolveNotifications(ids: $ids) {\n error, hasValue, value\n }\n }`, { ids }, { returnPath: 'resolveNotifications' });\n}\n\nexport function getMessages() {\n return q(`query GetMessages {\n notifications {\n id, date, message, data, notificationType,\n icon, severity\n }\n }`, {}, { returnPath: 'notifications', mapEvery: parseMessage });\n}","import * as React from 'react';\n\nimport { InputSwitch, Message, classNames, useTranslation, R, Tooltip, Portal, Select } from '@components';\nimport { IPropertyGroup, IPropertyGroupType, IPropertyType, PropertyGroupObjectType, PropertyTypes } from '@models/works';\nimport { useObjectState } from '@utils/hooks';\n\nimport './DynamicProperties.scss';\n\nexport interface IProps {\n className?: string;\n embedPortal?: string;\n isInternal?: boolean;\n inline?: boolean;\n labelClass?: string;\n object: any;\n objectType: PropertyGroupObjectType;\n onChange?: (props: IPropertyGroup[]) => void;\n propertyGroupTypes: IPropertyGroupType[];\n readonly?: boolean;\n style?: any;\n hideContractorProperties?: boolean;\n}\n\nfunction DynamicProperty({ labelClass, object, onChange, property, readonly, value }: {\n labelClass?: string,\n object: any,\n onChange: Function,\n property: IPropertyType,\n readonly?: boolean,\n value: any\n}) {\n const { t } = useTranslation();\n\n const tooltipKey = property.name + '_tooltip';\n\n const renderTooltip = () => {\n if (property.help) {\n return <>\n \n \n \n }\n else {\n return null;\n }\n }\n\n if (property.typeId === PropertyTypes.BOOL) {\n return
\n onChange({ ...value, [property.name]: e.value })} />\n \n \n {renderTooltip()}\n
;\n }\n else if (property.typeId === PropertyTypes.TEXT) {\n return \n onChange({ ...value, [property.name]: e.target.value })}\n />\n \n {renderTooltip()}\n ;\n }\n else if (property.typeId === PropertyTypes.BOOLTEXT) {\n const textPropertyName = property.name + '_text';\n\n return
\n onChange({ ...value, [property.name]: e.value })} />\n \n {value?.[property.name] &&\n onChange({ ...value, [textPropertyName]: e.target.value })}\n style={{ width: \"50%\" }} />}\n \n {renderTooltip()}\n
;\n }\n if (property.typeId === PropertyTypes.SELECT) {\n return
\n onChange({ ...value, [property.name]: e.value })} />\n \n \n {renderTooltip()}\n
;\n }\n else {\n return \n }\n}\n\nconst parseProperty = (prop: IPropertyGroup) => {\n if (prop && !prop.valueObj) {\n prop.valueObj = JSON.parse(prop.value);\n }\n return prop;\n}\n\nconst findProperty = (object: any, groupId: number) => {\n return parseProperty(\n object.properties?.find((p: IPropertyGroup) => p.propertyGroupTypeId == groupId));\n}\n\nfunction DynamicPropertiesGroup({\n groupClassName,\n isInternal,\n group,\n labelClass,\n object,\n objectType,\n onChange,\n readonly,\n style,\n}: {\n groupClassName?: string,\n isInternal?: boolean,\n group: IPropertyGroupType,\n labelClass?: string,\n object: any, objectType: PropertyGroupObjectType, onChange?: Function,\n readonly?: boolean, style?: any,\n}) {\n const { t } = useTranslation();\n\n const objectRelationProperty =\n objectType == PropertyGroupObjectType.Job\n ? 'jobId'\n : objectType == PropertyGroupObjectType.Contractor\n ? 'contractorId'\n : objectType == PropertyGroupObjectType.JobHasContractor\n ? (object.contractorId ? 'jobHasContractorId' : 'contractorId')\n : objectType == PropertyGroupObjectType.Machinery\n ? 'machineryId'\n : objectType == PropertyGroupObjectType.JobHasMachinery\n ? (object.machineryId ? 'jobHasMachineryId' : 'machineryId')\n : objectType == PropertyGroupObjectType.JobHasContractorRequest\n ? 'jobHasContractorRequestId'\n : objectType == PropertyGroupObjectType.Workspace\n ? 'workspaceId'\n : objectType == PropertyGroupObjectType.JobHasWorker\n ? (object.workerId ? 'jobHasWorkerId' : 'workerId')\n : 'unknown';\n\n const findPropertyByGroup = (id: number) => {\n return findProperty(object, id) ?? {\n [objectRelationProperty]: object.id,\n propertyGroupTypeId: id,\n valueObj: {},\n isInternal: isInternal,\n };\n }\n\n const data = useObjectState(\n findPropertyByGroup(group.id!), {\n onChange\n });\n\n React.useEffect(() => {\n data.reset(findPropertyByGroup(group.id!));\n }, [object]);\n\n const containerClassName = group.containerType === 'fluid'\n ? 'r properties'\n : group.containerType === 'column'\n ? 'c properties'\n : group.containerType === 'embed'\n ? 'e properties'\n : 'grid-2 properties';\n\n return \n {group.containerType != 'embed' &&

{t(group.title)}

}\n
\n {group.properties?.\n sort((a, b) => (a.propertyOrder ?? 1110) - (b.propertyOrder ?? 1110)).\n map((p, i) =>\n )}\n
\n \n}\n\nexport function DynamicProperties(props: IProps) {\n const doOnChange = (propertyGroup: IPropertyGroup) => {\n const containsGroup = props\n .object\n .properties?.find((p: IPropertyGroup) =>\n p.propertyGroupTypeId === propertyGroup.propertyGroupTypeId) != undefined;\n\n const groups = containsGroup\n ? props.object.properties?.map((p: IPropertyGroup) =>\n p.propertyGroupTypeId == propertyGroup.propertyGroupTypeId\n ? propertyGroup\n : p)\n : (props.object.properties ?? []).concat([propertyGroup]);\n\n props.onChange && props.onChange(groups);\n }\n\n return
\n {props.propertyGroupTypes\n .filter(g => props.isInternal == undefined || g.isInternal == props.isInternal)\n .map((p, i) => {\n if (props.hideContractorProperties != undefined ? props.hideContractorProperties && p.hidable : p.hidable) {\n return null;\n }\n if (p.containerType === 'embed' && !props.inline) {\n return \n \n \n } else {\n return ;\n }\n })}\n
\n}\n","import { IElementHasProperties, IPropertyGroup } from '@models';\n\nexport const POST = async (url: string, data: any) => {\n try {\n const resp = await fetch(url, {\n method: 'POST',\n body: JSON.stringify(data),\n headers: {\n 'Content-Type': 'application/json'\n }\n });\n\n if (resp.status === 200) {\n const r = await resp.json();\n\n return {\n ok: true,\n value: r\n }\n }\n else if (resp.status == 500) {\n const r = await resp.text();\n const message = r && r.length > 0 && r.includes('at')\n ? r.split(' at ')[0]\n : r;\n return {\n error: true,\n message: message,\n };\n }\n else {\n const r = await resp.json();\n return {\n error: true,\n message: r && r.message ? r.message : resp.statusText\n }\n }\n }\n catch (e) {\n return {\n error: true,\n message: (e as any).toString(),\n }\n }\n}\n\nexport const GET = async (url: string) => {\n try {\n const resp = await fetch(url, {\n method: 'GET',\n headers: {\n 'Content-Type': 'application/json'\n }\n });\n\n if (resp.status === 200) {\n const r = await resp.json();\n\n return {\n ok: true,\n value: r\n }\n }\n else {\n const r = await resp.json();\n return {\n error: true,\n message: r && r.message ? r.message : resp.statusText\n }\n }\n }\n catch (e) {\n return {\n error: true,\n message: (e as any).toString(),\n }\n }\n}\n\nexport const parseProperty = (v: IPropertyGroup) => {\n return {\n ...v,\n valueObj: v.value ? JSON.parse(v.value) : {}\n }\n}\n\nexport function parseProperties(v: T & IElementHasProperties) {\n const properties = v.properties\n ? v.properties.map(parseProperty)\n : [];\n\n return { ...v, properties };\n}\n\nexport const formatProperty = (workId: number) => {\n return (v: IPropertyGroup) => {\n return {\n id: v.id,\n workId: workId,\n jobId: v.jobId,\n isInternal: v.isInternal,\n propertyGroupTypeId: v.propertyGroupTypeId,\n value: JSON.stringify(v.valueObj),\n };\n }\n}\n\ninterface IEnsureTypeOpts {\n exclude?: string|string[];\n include?: string|string[];\n ints?: string[];\n}\n\nexport function ensureType(a: any, opts: IEnsureTypeOpts = {}): T {\n const res: any = {};\n const excludeProperties: string[] = (typeof(opts.exclude) === 'string'\n ? [opts.exclude]\n : opts.exclude) ?? [];\n const includeProperties: string[] = (typeof(opts.include) === 'string'\n ? [opts.include]\n : opts.include) ?? [];\n\n for (const k of Object.keys(a)) {\n if (!k.startsWith('_') && !excludeProperties.includes(k) && (\n includeProperties.length === 0 || includeProperties.includes(k)\n )) {\n res[k] = a[k];\n }\n }\n\n if (opts.ints != undefined) {\n for (const k of opts.ints) {\n if (res[k] && typeof(res[k]) === 'string') {\n res[k] = parseInt(res[k]);\n }\n }\n }\n\n return res as T;\n}\n\nexport default {\n GET,\n POST,\n formatProperty,\n parseProperty,\n parseProperties,\n ensureType,\n}\n","import {\n IContractorInvitation, IContractorInvitationRegisterData, IJobHasContractor, IPaginateOptions,\n ISubContractorRequest,\n} from '../../models';\nimport { m, q } from './graphql';\nimport { IContractor } from '@models/resources';\nimport { ensureType, formatProperty } from './utils';\nimport { IUserFormData } from '@components/admin/UserForm';\nimport { search } from './search';\n\nexport async function createContractorInvitation(workId: number, data: IContractorInvitation) {\n const resp = await m(`mutation CreateContractorInvitation($workId: Int!, $data: ContractorInvitationGraphInputType!) {\n sendContractorInvitation(workId: $workId, invitation: $data) {\n value, hasValue, error\n }\n }`, { workId, data });\n\n return resp?.data.sendContractorInvitation;\n}\n\nexport async function registerContractorInvitation(data: IContractorInvitationRegisterData) {\n const inputData = {\n ...data,\n properties: data.properties.map(formatProperty(data.workId))\n };\n\n return await m(`mutation RegisterContractorInvitation($data: ContractorInvitationRegisterDataGraphInputType!) {\n registerContractorInvitation(data: $data) {\n value, hasValue, error\n }\n }`, { data: inputData }, { returnPath: 'registerContractorInvitation' });\n}\n\nexport async function getWorkConstants(workId: number) {\n return await q(`query GetWorkConstants($workId: Int!) {\n readonlyWork(id: $workId) {\n activityTypes { id, name },\n legalForms {\n id, name, hideContractorProperties, workerTypes{\n id, workerType{\n id, name\n }\n }\n },\n countries {\n id, name, code,\n regions {\n id, name,\n counties {\n id, name, code\n }\n }\n },\n workSettings {\n acceptSubContractorRequests, allowAlwaysNotifyInformationLoaded,\n contractorHiddenFields, jobEncodingPrefix,\n jobHiddenFields, machineryHiddenFields, mainContractorCanFulfillSubs,\n rememberSubContractorAcceptances, workerHiddenFields\n },\n }\n }`, { workId }, { returnPath: 'readonlyWork' });\n}\n\nexport function getContractorInvitations(workId: number) {\n const result = q(`query GetContractorInvitations($workId: Int!) {\n work(id: $workId) {\n contractorInvitations {\n id, createdBy, dateTime,\n email, subject, accepted, acceptedDate, contractorId,\n startDate, jobsDescription, shipmentNumber, name, isActive\n }\n }\n }`, { workId }, {\n returnPath: 'work.contractorInvitations',\n });\n\n return result;\n}\n\nexport async function getContractorInvitation(token: string) {\n const resp = await q(`query GetContractorInvitation($token: String!) {\n contractorInvitation(token: $token) {\n id, workId, jobId, email,\n startDate, jobsDescription, shipmentNumber, name,\n parentJobHasContractorId, isActive,\n propertyGroupTypes {\n id, name, title, styleClassName, description, containerType, style, objectType, mandatory, hidable,\n properties {\n id, name, title, typeId, placeholder, help, parentId, propertyOrder\n }\n },\n }\n }`, { token });\n\n return resp?.data.contractorInvitation;\n}\n\nexport async function getContractors(workId: number, opts: Partial = {}) {\n const paginateOpts = {\n page: 0,\n limit: 10,\n ...opts,\n };\n return q(`query GetContractors($workId: Int!, $paginateOpts: PaginateOptionsGraphInputType!) {\n work(id: $workId) {\n paginateContractors(options: $paginateOpts) {\n page, total, limit,\n data {\n id, name, code, legalFormId, activityTypeId, address,\n postalCode, countryId, regionId, countyId,\n currentStatusType, currentStatusDate, forcedStatusUntilDate,\n providerCode, phone,\n properties {\n id, propertyGroupTypeId, jobHasContractorId, value\n }\n }\n }\n }\n }`, { workId, paginateOpts }, { returnPath: 'work.paginateContractors' });\n}\n\nexport async function getContractorFromAppUser(workId: number) {\n return q(`query GetContractorFromAppUser($workId: Int!) {\n work(id: $workId) {\n contractorFromAppUser\n {\n id, name, code, phone, remarks, address, regionId, countyId, countryId, postalCode,\n workId, legalFormId, activityTypeId, otherActivityType\n currentStatusType, currentStatusDate, providerCode, city, contactPerson\n properties {\n id, propertyGroupTypeId, contractorId, jobHasContractorId, value\n }\n }\n }\n }`, { workId }, { returnPath: 'work.contractorFromAppUser' });\n}\n\nexport async function getJobHasContractorFromAppUser(workId: number, jobId: number) {\n const searchName = 'contractors/currentJobHasContractor';\n const filters = { jobId };\n\n const res = await search(workId, searchName, {\n normalizeKeys: true,\n filters,\n });\n\n return res.value[0];\n}\n\nexport async function getJobHasContractors(workId: number, jobId: number) {\n\n const searchName = 'contractors/currentJobHasContractor';\n const filters = { jobId };\n\n const res = await search(workId, searchName, {\n normalizeKeys: true,\n filters,\n });\n\n return res;\n}\n\nexport async function getJobHasContractorFromId(workId: number, id: number) {\n\n const searchName = 'contractors/jobHasContractor';\n const filters = { id };\n\n const res = await search(workId, searchName, {\n normalizeKeys: true,\n filters,\n });\n\n return res.value[0] ?? undefined;\n}\n\nexport async function getContractor(workId: number, id: number) {\n return q(`query GetContractor($workId: Int!, $id: Int!) {\n work(id: $workId) {\n contractor(id: $id) {\n id, name, code, legalFormId, activityTypeId, otherActivityType, address,\n postalCode, countryId, regionId, countyId, remarks,\n currentStatusType, currentStatusDate, forcedStatusUntilDate, phone, providerCode, city, contactPerson, creationDate\n properties {\n id, propertyGroupTypeId, contractorId, jobHasContractorId, value\n }\n }\n }\n }`,\n { workId, id },\n { returnPath: 'work.contractor' });\n}\n\nexport async function saveContractor(workId: number, rawData: IContractor) {\n const data = ensureType({\n ...rawData,\n properties: (rawData.properties ?? []).map(formatProperty(workId)),\n }, {\n exclude: ['currentStatusType', 'currentStatusDate'],\n });\n\n return m(`\nmutation SaveContractor($data: ContractorInputType!) {\n saveContractor(contractor: $data) {\n isError, error, value, hasValue\n }\n}\n `, { data }, { returnPath: 'saveContractor' });\n}\n\nexport async function getSubContractorRequestsAsWorker(workId: number) {\n return q(`query GetSubContractorRequests($workId: Int!) {\n work(id: $workId) {\n subContractorRequests {\n id, workId,\n sourceContractor { id, name, code },\n targetContractor { id, name, code },\n jobsDescription, shipmentNumber, dateTime,\n acceptedByContractor, acceptedByContractorDateTime,\n acceptedByWork, acceptedByContractorDateTime,\n rejected, rejectedDateTime, rejectedReason,\n job { id, name, code, departments { departmentId, responsibleId, isMain } }\n }\n }\n }`, { workId }, { returnPath: 'work.subContractorRequests' });\n}\n\nexport async function getSubContractorRequestsAsTarget(workId: number) {\n return q(`query GetSubContractorRequestsAsTarget($workId: Int!) {\n work(id: $workId) {\n targetSubContractorRequests {\n id, workId,\n sourceContractor { id, name, code },\n targetContractor { id, name, code },\n jobsDescription, shipmentNumber, dateTime,\n acceptedByContractor, acceptedByContractorDateTime,\n acceptedByWork, acceptedByContractorDateTime,\n rejected, rejectedDateTime, rejectedReason,\n job { id, name, code }\n }\n }\n }`, { workId }, { returnPath: 'work.targetSubContractorRequests' });\n}\n\nexport async function saveSubContractorRequest(workId: number, inputRequest: ISubContractorRequest) {\n const request = {\n ...inputRequest,\n properties: (inputRequest.properties ?? []).map(formatProperty(workId))\n };\n\n return m(`mutation SaveSubContractorRequest($workId: Int!, $request: SubContractorRequestGraphInputType!) {\n saveSubContractorRequest(workId: $workId, request: $request) {\n hasValue, value, error\n }\n }`, { workId, request }, {\n returnPath: 'saveSubContractorRequest'\n });\n}\n\nexport async function acceptSubContractorRequest(workId: number, subContractorRequestId: number, reason: string | undefined = undefined) {\n return m(`mutation AcceptSubContractorRequest($workId: Int!, $subContractorRequestId: Int!, $reason: String) {\n acceptSubContractorRequest(workId: $workId, subContractorRequestId: $subContractorRequestId, reason: $reason) {\n hasValue, value, error\n }\n }`, { workId, subContractorRequestId, reason }, {\n returnPath: 'acceptSubContractorRequest'\n });\n}\n\nexport async function rejectSubContractorRequest(workId: number, subContractorRequestId: number, reason: string | undefined = undefined) {\n return m(`mutation RejectSubContractorRequest($workId: Int!, $subContractorRequestId: Int!, $reason: String) {\n rejectSubContractorRequest(workId: $workId, subContractorRequestId: $subContractorRequestId, reason: $reason) {\n hasValue, value, error\n }\n }`, { workId, subContractorRequestId, reason }, {\n returnPath: 'rejectSubContractorRequest'\n });\n}\n\nexport async function removeContractorAppUser(workId: number, userId: number, contractorId: number) {\n const resp = await m(`mutation RemoveContractorAppUser($workId: Int!, $userId: Int!, $contractorId: Int!) {\n removeContractorAppUser(workId: $workId, userId: $userId, contractorId: $contractorId) {\n hasValue, value, error\n }\n }`, { workId, userId, contractorId });\n\n return resp?.data.removeContractorAppUser;\n}\n\nexport async function createWorkContractorAppUser(workId: number, contractorId: number, data: IUserFormData) {\n return await m(`mutation CreateWorkContractorAppUser($workId: Int!, $contractorId: Int!, $data: UserInputType!) {\n createWorkContractorAppUser(workId: $workId, contractorId: $contractorId, data: $data) {\n hasValue, value, error\n }\n }`, { workId, contractorId, data }, { returnPath: 'createWorkContractorAppUser' });\n}\n\nexport async function getWorkUsers(workId: number) {\n const resp = await q(`query GetWorkUsers($workId: Int!) {\n work(id: $workId) {\n users {\n id, userName, email\n }\n }\n }`, { workId });\n\n return resp.data.work.users;\n}\n\n// GET CONTRACTOR_HAS_APP_USERS => workId, contractorId\nexport async function getContractorAppUsers(workId: number, contractorId: number) {\n const resp = await q(`query GetContractorAppUsers($workId: Int!, $contractorId: Int!) {\n work(id: $workId) {\n contractor(id: $contractorId) {\n appUsers {\n id, userName, email\n }\n }\n }\n }`, { workId, contractorId });\n\n return resp.data.work.contractor.appUsers;\n}\n\nexport async function invalidateContractor(workId: number, contractorId: number) {\n return m(`mutation InvalidateContractor($workId: Int!, $contractorId: Int!) {\n invalidateContractor(workId: $workId, id: $contractorId) {\n hasValue, value, error\n }\n }`, { workId, contractorId }, { returnPath: 'invalidateContractor' });\n}\n\nexport function reactivateContractor(workId: number, id: number) {\n return m(`\nmutation ReactivateContractor($workId: Int!, $id: Int!) {\n reactivateContractor(workId: $workId, id: $id) {\n isError, error, value\n }\n}\n `, { workId, id }, { returnPath: 'reactivateContractor' });\n}\n\nexport function restrictContractor(workId: number, name: string, code: string, legalFormId: number, providerCode: string, contractorContactPerson: string, contractorEmail: string, contractorPhone: string, contractorId: number, applicantName: string, applicantEmail: string, reason: string, remarks: string) {\n return m(`\nmutation RestrictContractor($workId: Int!, $name: String!, $code: String!, $legalFormId: Int!, $providerCode: String!, $contractorContactPerson: String!, $contractorEmail: String!, $contractorPhone: String!, $contractorId: Int!,$applicantName: String!, $applicantEmail: String!, $reason: String!, $remarks: String!) {\n restrictContractor(workId: $workId, name: $name, code: $code, legalFormId: $legalFormId, providerCode: $providerCode, contractorContactPerson: $contractorContactPerson, contractorEmail: $contractorEmail, contractorPhone: $contractorPhone, contractorId: $contractorId, applicantName: $applicantName, applicantEmail: $applicantEmail, reason: $reason, remarks: $remarks) {\n isError, error, value\n }\n}\n `, { workId, name, code, legalFormId, providerCode, contractorContactPerson, contractorEmail, contractorPhone, contractorId, applicantName, applicantEmail, reason, remarks }, { returnPath: 'restrictContractor' });\n}\n\nexport function removeRestrictedContractor(workId: number, id: number) {\n return m(`\nmutation RemoveRestrictedContractor($workId: Int!, $id: Int!) {\n removeRestrictedContractor(workId: $workId, id: $id) {\n isError, error, value\n }\n}\n `, { workId, id }, { returnPath: 'removeRestrictedContractor' });\n}\n","import * as RequirementActions from './actions/requirements';\n\nexport const plainActions = {\n createFreeRequirement: RequirementActions.createFreeRequirement,\n fulfillRequirement: RequirementActions.fulfillRequirement,\n getRequirement: RequirementActions.getRequirement,\n getRequirementsFromResources: RequirementActions.getRequirementsFromResources,\n getRequirements: RequirementActions.getRequirements,\n getRequirementIncidences: RequirementActions.getRequirementIncidences,\n getRequirementNotes: RequirementActions.getRequirementNotes,\n saveRequirementIncidence: RequirementActions.saveRequirementIncidence,\n saveRequirementNote: RequirementActions.saveRequirementNote,\n saveRequirementStatusNote: RequirementActions.saveRequirementStatusNote,\n validateRequirement: RequirementActions.validateRequirement,\n forceResourceStatus: RequirementActions.forceResourceStatus,\n requirementMeetsDependencies: RequirementActions.requirementMeetsDependencies,\n removeRequirementFile: RequirementActions.removeRequirementFile,\n requirementCanBeValidated: RequirementActions.requirementCanBeValidated,\n removeFreeRequirement: RequirementActions.removeFreeRequirement,\n}\n","import { IContractorSettings, IJobSettings, ILegalForm, IMachinerySettings, IWorkerSettings, IWorkFunction, ResourceType } from '@models';\nimport { IUserIdentity } from './identity';\nimport { IJob } from './jobs';\nimport { IRequirementGroup, IRequirementValidationType } from './requirements';\nimport { IContractor, IMachinery, IWorkI18NResource } from './resources';\nimport { get as i18n } from \"../i18n\";\n\nconst parsePropertyGroupType = (pg: IPropertyGroupType) => {\n if (pg.style) {\n return { ...pg, styleObj: JSON.parse(pg.style) };\n }\n else {\n return pg;\n }\n}\n\nexport function parseWork(work: IWork) {\n if (work.settings && !work.settingsObj) {\n work.settingsObj = JSON.parse(work.settings);\n }\n if (work.contextData && !work.contextDataObj) {\n work.contextDataObj = JSON.parse(work.contextData);\n }\n if (work.propertyGroupTypes) {\n work.propertyGroupTypes = work.propertyGroupTypes.map(parsePropertyGroupType);\n }\n\n return work;\n}\n\nexport enum JobEncodingType {\n Sequential = 0,\n SequentialByWorkspace = 1,\n Manual = 2,\n}\n\nexport interface IWorkSettings {\n jobEncodingType?: JobEncodingType;\n jobEncodingPrefix?: string;\n acceptSubContractorRequests?: boolean;\n mainContractorCanFulfillSubs?: boolean;\n reactivateResourcesBehavior?: number;\n rememberSubContractorAcceptances?: boolean;\n jobHiddenFields?: string[];\n contractorHiddenFields?: string[];\n machineryHiddenFields?: string[];\n workerHiddenFields?: string[];\n signals?: string;\n clientImage?: string;\n screenImage?: string;\n createJobRelations?: boolean;\n allowAlwaysNotifyInformationLoaded?: boolean;\n simpleDelayedRevokation?: boolean;\n jobDelayedRevokation?: boolean;\n hideByDefaultEnded?: boolean;\n hideByDefaultEndedContractors?: boolean;\n jobChainFinalisation?: boolean;\n}\n\nexport interface IWorkDepartment {\n id: number;\n name: string;\n description?: string;\n isOblique?: boolean;\n}\n\nexport interface IModuleInfo {\n id: string;\n name: string;\n description: string;\n version: string;\n resources: string[];\n hasFrontend?: boolean;\n frontendResource?: string;\n}\n\nexport interface IWorkHasModule {\n id?: number;\n workId: number;\n moduleName: string;\n isActive: boolean;\n}\n\nexport interface IWork {\n id: number;\n name: string;\n description?: string;\n countryId: number;\n settings: string;\n defaultEmail?: string;\n helpDeskEmail?: string;\n footerResource?: string;\n contextData?: string;\n\n contractorInvitationTemplateId?: number;\n resetPasswordTemplateId?: number;\n\n settingsObj?: IWorkSettings;\n contextDataObj?: any;\n\n users: IUserIdentity[];\n workspaces: IWorkspace[];\n legalForms: ILegalForm[];\n workShifts: IWorkShift[];\n departments?: IWorkDepartment[];\n workFunctions?: IWorkFunction[];\n\n permissions: IWorkPermission[];\n\n workI18nResources?: IWorkI18NResource;\n propertyGroupTypes?: IPropertyGroupType[];\n requirementGroups?: IRequirementGroup[];\n requirementValidationTypes?: IRequirementValidationType[];\n\n validations?: IFieldValidation[];\n\n contractorSettings?: IContractorSettings;\n workerSettings?: IWorkerSettings;\n machinerySettings?: IMachinerySettings;\n jobSettings?: IJobSettings;\n\n workHasModules?: IWorkHasModule[];\n activeModules?: IModuleInfo[];\n}\n\nexport interface IFieldValidation {\n id?: number;\n workId: number;\n name: string;\n field: string;\n value: string;\n resourceType: number;\n errorMessage: string;\n}\n\nexport interface IWorkPermission {\n id?: number;\n workId: number;\n name: string;\n action: string;\n expression?: string;\n roles?: string;\n policies?: string;\n}\n\nexport interface IWorkspace {\n id: number;\n name: string;\n description?: string;\n isActive: boolean;\n workId: number;\n\n countryId?: number;\n countyId?: number;\n regionId?: number;\n\n contact?: string;\n address?: string;\n location?: string;\n postalCode?: string;\n phone?: string;\n fax?: string;\n email?: string;\n\n properties?: IPropertyGroup[];\n}\n\nexport interface IWorkShift {\n id: number;\n name: string;\n workId: number;\n startMinutes: number;\n endMinutes: number;\n}\n\nexport interface IContractType {\n id: number;\n name: string;\n}\n\nexport interface ISubContractorRequest {\n id?: number;\n workId: number;\n jobId?: number;\n dateTime?: Date;\n jobsDescription: string;\n shipmentNumber: string;\n sourceContractorId: number;\n targetContractorId: number;\n\n jobHasContractorId: number;\n sourceContractor?: IContractor;\n targetContractor?: IContractor;\n\n acceptedByWork?: boolean;\n acceptedByWorkDateTime?: Date;\n acceptedByWorkUserId?: number;\n\n acceptedByContractor?: boolean;\n acceptedByContractorDateTime?: Date;\n acceptedByContractorUserId?: number;\n\n rejected?: boolean;\n rejectedReason?: string;\n rejectedDateTime?: Date;\n\n job?: IJob;\n\n properties?: IPropertyGroup[];\n}\n\nexport interface IContractorInvitation {\n id?: number;\n workId: number;\n jobId?: number;\n subject?: string;\n message?: string;\n parentJobHasContractorId?: number;\n name: string;\n email: string;\n dateTime?: Date;\n acceptedDate?: Date;\n // Si tiene jobId\n startDate?: Date;\n shipmentNumber?: string;\n jobsDescription?: string;\n\n propertyGroupTypes?: IPropertyGroupType[];\n}\n\nexport interface IContractorInvitationRegisterData {\n invitationId?: number;\n jobId?: number;\n workId: number;\n\n name: string;\n code: string;\n remarks?: string;\n legalFormId: number;\n activityTypeId: number;\n otherActivityType?: string;\n address?: string;\n postalCode?: string;\n countryId?: number;\n regionId?: number;\n countyId?: number;\n parentId?: number;\n\n contactName?: string;\n contactSurname?: string;\n contactPhone?: string;\n contactEmail?: string;\n\n userName?: string;\n\n email: string;\n password: string;\n passwordConfirmation?: string;\n properties: IPropertyGroup[];\n\n shipmentNumber?: string;\n jobsDescription?: string;\n startDate?: Date;\n\n city?: string;\n contactPerson?: string;\n}\n\nexport enum PropertyGroupObjectType {\n Job = 0,\n Contractor = 1,\n JobHasContractor = 2,\n Machinery = 3,\n JobHasMachinery = 4,\n JobHasContractorRequest = 5,\n JobHasWorker = 6,\n Worker = 7,\n Workspace = 8,\n}\n\nexport function isJobPropertyGroupType(p: IPropertyGroupType) {\n return p.objectType == PropertyGroupObjectType.Job;\n}\n\nexport function isJobHasContractorPropertyGroupType(p: IPropertyGroupType) {\n return p.objectType == PropertyGroupObjectType.JobHasContractor;\n}\n\nexport function isMachineryPropertyGroupType(p: IPropertyGroupType) {\n return p.objectType == PropertyGroupObjectType.JobHasMachinery;\n}\n\nexport function isWorkerPropertyGroupType(p: IPropertyGroupType) {\n return p.objectType == PropertyGroupObjectType.JobHasWorker;\n}\n\nexport function isWorkspacePropertyGroupType(p: IPropertyGroupType) {\n return p.objectType == PropertyGroupObjectType.Workspace;\n}\n\nexport function isContractorWorkerPropertyGroupType(p: IPropertyGroupType) {\n return p.objectType == PropertyGroupObjectType.JobHasWorker && p.isInternal !== true;\n}\n\nexport function isRRHHPropertyGroupType(p: IPropertyGroupType) {\n return p.objectType == PropertyGroupObjectType.JobHasWorker && p.isInternal === true;\n}\n\nexport enum PropertyTypes {\n TEXT = 1,\n BOOL = 2,\n BOOLTEXT = 3,\n SELECT = 4,\n}\n\nexport const AllPropertyTypes = [\n { id: PropertyTypes.TEXT, name: 'TEXT' },\n { id: PropertyTypes.BOOL, name: 'BOOL' },\n { id: PropertyTypes.BOOLTEXT, name: 'BOOLTEXT' },\n { id: PropertyTypes.SELECT, name: 'SELECT' }\n];\n\nexport interface IPropertyType {\n id?: number;\n name: string;\n title: string;\n typeId: number;\n placeholder?: string;\n help?: string;\n style?: string;\n parentId: number;\n propertyOrder?: number;\n selectOptions?: string;\n}\n\nexport interface IPropertyGroupType {\n id?: number;\n workId: number;\n objectType: PropertyGroupObjectType;\n name: string;\n title: string;\n mandatory: boolean;\n hidable: boolean;\n description?: string;\n styleClassName?: string;\n style?: string;\n containerType?: string;\n properties?: IPropertyType[];\n isInternal?: boolean;\n // isolated?: boolean;\n styleObj?: any;\n}\n\nexport interface IPropertyGroup {\n id?: number;\n workId: number;\n propertyGroupTypeId: number;\n jobId?: number;\n contractorId?: number;\n jobHasContractorId?: number;\n machineryId?: number;\n jobHasMachineryId?: number;\n value: string;\n isInternal?: boolean;\n\n valueObj?: any;\n}\n\nexport interface IElementHasProperties {\n properties?: IPropertyGroup[];\n}\n\nexport interface IPreventiveResource {\n id: number;\n name: string;\n}\n\nexport interface INotificationTemplate {\n id?: number;\n name: string;\n title: string;\n message: string;\n workId: number;\n}\n\nexport interface INotificationMessage {\n id?: number;\n workId: number;\n action: number;\n resourceType: number;\n notificationTemplateId: number;\n byMail?: boolean;\n notificationTemplate?: INotificationTemplate;\n restrictToResourceType?: number;\n restrictToResourceId?: number;\n actionKey?: string;\n}\n\nexport const getNotificationMessageActions = (t: Function) => {\n return [\n { id: NotificationMessageAction.CreateJob, name: t('job.create') },\n { id: NotificationMessageAction.JobAssignContractor, name: t('job.assign.contractor') },\n { id: NotificationMessageAction.SubContractorRequestCreate, name: t('subcontractor.request.create') },\n { id: NotificationMessageAction.SubContractorRequestAccept, name: t('subcontractor.request.accept') },\n { id: NotificationMessageAction.SubContractorRequestReject, name: t('subcontractor.request.reject') },\n { id: NotificationMessageAction.JobInformationLoaded, name: t('job.notify-information-loaded') },\n { id: NotificationMessageAction.JobFinalized, name: t('job.notify.finalized') },\n { id: NotificationMessageAction.JobAuthorized, name: t('job.notify.authorized') },\n { id: NotificationMessageAction.JHCAuthorized, name: t('jhc.notify.authorized') },\n { id: NotificationMessageAction.JHWAuthorized, name: t('jhw.notify.authorized') },\n { id: NotificationMessageAction.JHMAuthorized, name: t('jhm.notify.authorized') },\n { id: NotificationMessageAction.JHCRejected, name: t('jhc.notify.rejected') },\n { id: NotificationMessageAction.JHWRejected, name: t('jhw.notify.rejected') },\n { id: NotificationMessageAction.JHMRejected, name: t('jhm.notify.rejected') },\n { id: NotificationMessageAction.ReqExpired, name: t('req.notify.expired') },\n { id: NotificationMessageAction.NotifyRequirementExpirationWithinTolerance, name: t('req.notify.expired.within.tolerance') },\n { id: NotificationMessageAction.ReqIncidence, name: t('req.notify.incidence') },\n { id: NotificationMessageAction.ReqFulfilled, name: t('req.notify.upload') },\n { id: NotificationMessageAction.ReqValidated, name: t('req.notify.validation') },\n { id: NotificationMessageAction.ModuleMessage, name: t('module.message') },\n // { id: NotificationMessageAction.JobCreatedAfterInfoLoaded, name: t('job.created.info.loaded') },\n { id: NotificationMessageAction.RequirementNote, name: t('requirement.note') },\n { id: NotificationMessageAction.JobRequirementNote, name: t('job.requirement.note') },\n { id: NotificationMessageAction.JobAssignImpliedRSO, name: t('job.assign.implied-rso') },\n { id: NotificationMessageAction.JobAssignMainRSO, name: t('job.assign.main-rso') },\n { id: NotificationMessageAction.JobAssignMedicalDepartment, name: t('job.assign.medical-department') },\n { id: NotificationMessageAction.JobAssignEnvironmentDepartment, name: t('job.assign.environment-rso') },\n { id: NotificationMessageAction.JobContractorInvitation, name: t('job.contractor.invitation') },\n { id: NotificationMessageAction.NotifyUnauthorizedJob, name: t('job.unauthorized.notify') },\n { id: NotificationMessageAction.NotifyAuthorizedJob, name: t('job.authorized.notify') },\n { id: NotificationMessageAction.NotifyJobReopen, name: t('job.reopen.notify') },\n { id: NotificationMessageAction.ITAWorkerNotFound, name: t('ita.worker.not-found') },\n { id: NotificationMessageAction.IrregularityCreated, name: t('irregularity.created') },\n { id: NotificationMessageAction.CorrectiveMeasureLoaded, name: t('corrective-measure.pessma.loaded') },\n { id: NotificationMessageAction.CorrectiveMeasureContractorLoaded, name: t('corrective-measure.contractor.loaded') },\n { id: NotificationMessageAction.CorrectiveMeasureValidated, name: t('corrective-measure.pessma.validated') },\n { id: NotificationMessageAction.CorrectiveMeasureContractorValidated, name: t('corrective-measure.contractor.validated') },\n { id: NotificationMessageAction.CorrectiveMeasureRejected, name: t('corrective-measure.pessma.rejected') },\n { id: NotificationMessageAction.CorrectiveMeasureContractorRejected, name: t('corrective-measure.contractor.rejected') },\n { id: NotificationMessageAction.IrregularityModified, name: t('irregularity.modified') },\n { id: NotificationMessageAction.JobEvaluationsPending, name: t('job.evaluations.pending') },\n { id: NotificationMessageAction.GeneralEvaluationsPending, name: t('general.evaluations.pending') },\n { id: NotificationMessageAction.NotifyRequirementExpiration, name: t('requirement.expiration.notify') },\n { id: NotificationMessageAction.NotifyJobContractorStart, name: t('job.contractor.start') },\n { id: NotificationMessageAction.UploadedOrModifiedDocumentInDownloadArea, name: t('document.uploaded.modified') },\n { id: NotificationMessageAction.NotifyCreatedOrChangedFolderInDownloadArea, name: t('folder.created.modified') },\n { id: NotificationMessageAction.ContractorIrregularityExpiredWithTolerance, name: t('contractor.irregularity.expired.tolerance') },\n { id: NotificationMessageAction.PessmaIrregularityExpiredWithTolerance, name: t('pessma.irregularity.expired.tolerance') },\n { id: NotificationMessageAction.ContractorCorrectiveMeasureExpired, name: t('contractor.corrective-measure.expired') },\n { id: NotificationMessageAction.PessmaCorrectiveMeasureExpired, name: t('pessma.corrective-measure.expired') },\n ].sort((a, b) => a.name.localeCompare(b.name));\n}\n\nexport enum NotificationMessageAction {\n CreateJob = 1,\n JobAssignContractor = 2,\n SubContractorRequestCreate = 3,\n SubContractorRequestAccept = 4,\n SubContractorRequestReject = 5,\n JobInformationLoaded = 6,\n ReqValidated = 7,\n JobFinalized = 8,\n JobAuthorized = 9,\n JobCreatedAfterInfoLoaded = 10,\n JHCAuthorized = 11,\n JHWAuthorized = 12,\n JHMAuthorized = 13,\n JHCRejected = 14,\n JHWRejected = 15,\n JHMRejected = 16,\n ReqExpired = 17,\n ReqIncidence = 18,\n ReqFulfilled = 19,\n ModuleMessage = 20,\n RequirementNote = 21,\n JobRequirementNote = 22,\n JobAssignImpliedRSO = 23,\n JobAssignMainRSO = 24,\n JobAssignMedicalDepartment = 25,\n JobAssignEnvironmentDepartment = 26,\n JobContractorInvitation = 27, // Invitación contrata trabajo\n NotifyUnauthorizedJob = 28, // Notificar PESSMA Desautorización\n NotifyAuthorizedJob = 29, // Notificar PESSMA autorización,\n NotifyJobReopen = 30, // Notificar Reactivación de PESSMA\n ITAWorkerNotFound = 31, // Trabajador no encontrado en ITA\n IrregularityCreated = 32, // Irregularidad creada\n CorrectiveMeasureLoaded = 33, // Medida correctora cargada de un trabajo\n CorrectiveMeasureValidated = 34, // Medida correctora validada de un trabajo\n CorrectiveMeasureRejected = 35, // Medida correctora rechazada de un trabajo\n JobEvaluationsPending = 36, // Evaluaciones trabajo pendientes\n GeneralEvaluationsPending = 37, // Evaluaciones generales pendientes\n NotifyRequirementExpiration = 38, // Notificar caducidad requerimiento\n NotifyJobContractorStart = 39,\n CorrectiveMeasureContractorLoaded = 40, // Medida correctora cargada de un contratista\n CorrectiveMeasureContractorValidated = 41, // Medida correctora validada de un contratista\n CorrectiveMeasureContractorRejected = 42, // Medida correctora rechazada de un contratista\n NotifyRequirementExpirationWithinTolerance = 43, // Notificar caducidad requerimiento dentro de la tolerancia\n IrregularityModified = 44, // Irregularidad modificada\n UploadedOrModifiedDocumentInDownloadArea = 45, // Documento subido o modificado en área de descargas\n NotifyCreatedOrChangedFolderInDownloadArea = 46, // Carpeta creada o modificada en área de descargas\n ContractorIrregularityExpiredWithTolerance = 47, // Irregularidad Contratista caducada con tolerancia\n PessmaIrregularityExpiredWithTolerance = 48, // Irregularidad PESSMA caducada con tolerancia\n ContractorCorrectiveMeasureExpired = 49, // Medida Correctora Contratista caducada\n PessmaCorrectiveMeasureExpired = 50, // Medida Correctora PESSMA caducada\n}\n\nexport const fieldValidationResourceTypes = [\n { id: ResourceType.Worker, name: i18n('Worker') },\n { id: ResourceType.Machinery, name: i18n('Machinery') },\n { id: ResourceType.Contractor, name: i18n('Contractor') },\n];\n\nconst __fieldValidations: any = {};\nexport const createFieldValidation = (v: string) => {\n if (__fieldValidations[v]) {\n return __fieldValidations[v];\n }\n else {\n const expression = atob(v);\n const body = 'const a = ' + expression + '; return a(i, ctx);';\n const fn = new Function('i', 'ctx', body);\n __fieldValidations[v] = fn;\n\n return fn;\n }\n}\n","import { IUserIdentity } from './identity';\nimport { IRequirement } from './requirements';\nimport { IPropertyGroup } from './works';\nimport { get as i18n } from '../i18n';\nimport { IWorkspace } from '@models';\nimport { IDocument } from './documents';\n\nexport interface IResourceStatusType {\n id: number;\n name: string;\n}\n\nexport interface IResourceHasStatus {\n currentStatusDate?: Date;\n currentStatusType?: number;\n status?: IResourceStatus[];\n}\n\nexport interface IResourceStatus {\n id: number;\n dateTime: Date;\n statusTypeId: number;\n userId?: number;\n contractorId?: number;\n machineryId?: number;\n workerId?: number;\n jobHasDepartmentId?: number;\n jobHasContractorId?: number;\n jobHasMachineryId?: number;\n jobHasWorkerId?: number;\n forcedStatusUntilDate?: Date;\n}\n\nexport interface IMachinery extends IResourceHasStatus {\n id: number;\n name: string;\n code?: string;\n description?: string;\n workId: number;\n isActive?: boolean;\n\n // license plate\n prefixLicenseNumber?: string;\n licenseNumber?: string;\n suffixLicenseNumber?: string;\n\n contractor?: IContractor;\n contractorId?: number;\n machineryTypeId?: number;\n machinerySubTypeId?: number;\n\n properties?: IPropertyGroup[];\n requirements?: IRequirement[];\n // TODO: add picture capability\n photo?: IDocument;\n}\n\nexport type IWorkerWithRelations = IWorker & {\n departments?: number[];\n workspaces?: number[];\n policies?: string[];\n}\n\nexport interface IWorker extends IResourceHasStatus {\n id: number;\n workId: number;\n name: string;\n code?: string;\n surname?: string;\n remarks?: string;\n isActive?: boolean;\n fullName?: string;\n appUser?: IUserIdentity;\n workerTypeId?: number;\n workerDocumentTypeId?: number;\n phone?: string;\n\n workspaceId?: number;\n workspace?: IWorkspace;\n workspaces?: IWorkspace[];\n\n legalFormId?: number;\n legalForm?: ILegalForm;\n\n contractorId?: number;\n contractor?: IContractor;\n contractorName?: string;\n properties?: IPropertyGroup[];\n requirements?: IRequirement[];\n photo?: IDocument;\n}\n\nexport interface IWorkI18NResource {\n id: number;\n language: string;\n name: string;\n value: string;\n workId: number;\n}\n\nexport interface IActivityType {\n id: number;\n name: string;\n workId: number;\n}\n\nexport interface ILegalForm {\n id: number;\n name: string;\n workId: number;\n hideContractorProperties: boolean;\n workerTypes?: ILegalFormHasWorkerType[];\n}\n\nexport interface ILegalFormHasWorkerType {\n id: number;\n legalFormId: number;\n legalForm: ILegalForm;\n workerTypeId: number;\n workerType: IWorkerType;\n}\n\nexport interface IDepartment {\n id: number;\n name: string;\n code?: string;\n description?: string;\n isOblique?: boolean;\n notifyJobCreation?: boolean;\n\n workId: number;\n\n workers?: IWorker[];\n policies?: string[];\n}\n\nexport interface IWorkFunction {\n id: number;\n name: string;\n workId: number;\n}\n\nexport interface IContractor extends IResourceHasStatus {\n id: number;\n name: string;\n code: string;\n workId: number;\n\n isActive?: boolean;\n legalFormId?: number;\n activityTypeId?: number;\n otherActivityType?: string;\n address?: string;\n postalCode?: string;\n countryId?: number;\n regionId?: number;\n countyId?: number;\n phone?: string;\n providerCode?: string;\n remarks?: string;\n city?: string;\n contactPerson?: string;\n creationDate?: Date;\n\n properties?: IPropertyGroup[];\n requirements?: IRequirement[];\n}\n\nexport interface IContractorHasAppUser {\n id: number;\n contractorId: number;\n appUserId: number;\n dateTime: Date;\n\n appUser?: IUserIdentity;\n}\n\nexport interface IContractorRequest {\n id?: number;\n jobId: number;\n contractorName?: string;\n contractorCode?: string;\n legalFormId: number;\n\n startDate?: Date;\n jobsDescription?: string;\n\n accepted?: boolean;\n discarded?: boolean;\n acceptedDate?: Date;\n discardedDate?: Date;\n resultMessage?: string;\n\n properties?: IPropertyGroup[];\n}\n\nexport interface IMachinerySubType {\n id: number;\n name: string;\n parentId: number;\n}\n\nexport interface IMachineryType {\n id: number;\n name: string;\n workId: number;\n\n subTypes?: IMachinerySubType[];\n}\n\nexport interface IWorkerType {\n id: number;\n name: string;\n workId: number;\n}\n\nexport interface IWorkerDocumentType {\n id: number;\n name: string;\n workId: number;\n}\n\nexport function departmentIsProductive(d: IDepartment) {\n return d && d?.isOblique != true;\n}\n\nexport enum ResourceStatusType {\n NOT_AUTHORIZED = 1,\n AUTHORIZED = 2,\n FINALIZED = 3,\n FORCED_AUTHORIZED = 4,\n FORCED_REVOKED,\n RESTRICTED = 6,\n}\n\nexport const resourceStatusTypes = [\n { id: ResourceStatusType.NOT_AUTHORIZED, name: i18n('NOT AUTHORIZED') },\n { id: ResourceStatusType.AUTHORIZED, name: i18n('AUTHORIZED') },\n { id: ResourceStatusType.FINALIZED, name: i18n('FINALIZED') },\n { id: ResourceStatusType.FORCED_AUTHORIZED, name: i18n('FORCED AUTHORIZED') },\n { id: ResourceStatusType.FORCED_REVOKED, name: i18n('FORCED REVOKED') },\n { id: ResourceStatusType.RESTRICTED, name: i18n('RESTRICTED') },\n]\n\nexport const getNotificationResourceTypes = (t: Function) => {\n return [\n { id: ResourceType.Contractor, name: t('Contractor') },\n { id: ResourceType.JobHasDepartment, name: t('Department') },\n { id: ResourceType.MainContractor, name: t('contractor.main') },\n { id: ResourceType.SubContractor, name: t('contractor.subcontractor') },\n { id: ResourceType.MainRSO, name: t('resource.main-rso') },\n { id: ResourceType.MainRSOCoordinator, name: t('resource.main-rso.coordinator') },\n { id: ResourceType.AssociatedRSO, name: t('resource.associated-rso') },\n { id: ResourceType.AssociatedRSOCoordinator, name: t('resource.associated-rso.coordinator') },\n { id: ResourceType.ObliqueDepartment, name: t('department.oblique') },\n { id: ResourceType.RequirementCreator, name: t('requirement.creator') },\n ];\n}\n\ntype IGetResourceTypesOpts = {\n includeSubContractors?: boolean,\n}\n\nexport const getResourceTypes = (t: Function, opts: IGetResourceTypesOpts = {}) => {\n const res = [\n { id: ResourceType.Contractor, name: t('Contractor') },\n { id: ResourceType.Worker, name: t('Worker') },\n { id: ResourceType.Machinery, name: t('Machinery') },\n { id: ResourceType.JobHasContractor, name: t('JobHasContractor') },\n { id: ResourceType.JobHasWorker, name: t('JobHasWorker') },\n { id: ResourceType.JobHasMachinery, name: t('JobHasMachinery') },\n ];\n\n const contractorRes = [\n { id: ResourceType.MainContractor, name: t('contractor.main') },\n { id: ResourceType.SubContractor, name: t('contractor.subcontractor') },\n ];\n\n if (opts.includeSubContractors ?? false) {\n return res.concat(contractorRes);\n }\n else {\n return res;\n }\n}\n\nexport const getEventResourceTypes = (t: Function) => {\n return [\n { id: EventResourceType.Contractor, name: t('Contractor') },\n { id: EventResourceType.Worker, name: t('Worker') },\n { id: EventResourceType.Machinery, name: t('Machinery') },\n { id: EventResourceType.JobHasContractor, name: t('JobHasContractor') },\n { id: EventResourceType.JobHasWorker, name: t('JobHasWorker') },\n { id: EventResourceType.JobHasMachinery, name: t('JobHasMachinery') },\n { id: EventResourceType.JobHasMachinery, name: t('JobHasMachinery') },\n { id: EventResourceType.JobStatus, name: t('JobStatus') },\n ];\n}\n\nexport enum EventResourceType {\n Worker = 1,\n Machinery = 2,\n Contractor = 3,\n JobHasWorker = 4,\n JobHasMachinery = 5,\n JobHasContractor = 6,\n Job = 7,\n JobStatus = 8,\n}\n\nexport enum ResourceType {\n Contractor = 1,\n Machinery = 2,\n Worker = 3,\n JobHasContractor = 4,\n JobHasDepartment = 5,\n JobHasMachinery = 6,\n JobHasWorker = 7,\n Job = 8,\n MainContractor = 9,\n SubContractor = 10,\n MainRSO = 11,\n AssociatedRSO = 12,\n MainRSOCoordinator = 13,\n AssociatedRSOCoordinator = 14,\n ObliqueDepartment = 15,\n RequirementCreator = 16,\n};\n","import { IOption, IPaginateResult, IPaginateSort, IUserSearchFilter } from '@models';\nimport { delay } from '@utils';\n\nexport const DEFAULT_LIMIT = 10;\n\ntype Options = {\n normalizeKeys?: boolean,\n filters?: any;\n exportColumns?: string[];\n page?: number;\n limit?: number;\n sortBy?: IPaginateSort[];\n}\ntype OptionsWithFilters = Options | any;\n\nfunction isOptions(a: any): a is Options {\n return a && (a.normalizeKeys !== undefined || a.filters);\n}\n\nconst defaultOptions: Options = {\n page: 0,\n limit: DEFAULT_LIMIT,\n};\n\nconst keyToCamelCase = (k: string) => {\n return k.replace(/([-_][a-z])/ig, ($1) => {\n return $1.toUpperCase()\n .replace('-', '')\n .replace('_', '');\n });\n};\n\nconst normalizeOjb = (data: any) => {\n const resp: any = {};\n\n for (const k of Object.keys(data)) {\n resp[keyToCamelCase(k)] = data[k];\n }\n\n return resp;\n}\n\nconst normalizeKeys = (data: any[]) => {\n return data ? data.map(normalizeOjb) : data;\n}\n\nexport async function search(workId: number, name: string, rawOptions: OptionsWithFilters = {}): Promise> {\n const rawFilters = isOptions(rawOptions) ? rawOptions.filters : rawOptions;\n const options = isOptions(rawOptions) ? rawOptions : defaultOptions;\n\n const filters: any[] = [];\n if (rawFilters != null) {\n for (const f of Object.keys(rawFilters)) {\n if (rawFilters[f] != undefined && (typeof (rawFilters[f]) != 'number' || !isNaN(rawFilters[f]))) {\n filters.push({\n name: f,\n value: rawFilters[f] + '',\n });\n }\n }\n }\n\n const request = {\n name,\n filters,\n exportColumns: options.exportColumns,\n order: options.sortBy,\n };\n const r = await fetch(`/api/search/${workId}`, {\n method: 'POST',\n body: JSON.stringify(request),\n headers: {\n ['Accept']: 'application/json',\n ['Content-Type']: 'application/json'\n }\n });\n const resp = await r.json();\n\n if (options.normalizeKeys) {\n return { ...resp, value: normalizeKeys(resp.value) };\n }\n else {\n return resp;\n }\n}\n\nexport async function searchExportToXls(workId: number, name: string, rawOptions: OptionsWithFilters = {}, language?: string): Promise {\n const rawFilters = isOptions(rawOptions) ? rawOptions.filters : rawOptions;\n const options = isOptions(rawOptions) ? rawOptions : defaultOptions;\n\n const filters: any[] = [];\n if (rawFilters != null) {\n for (const f of Object.keys(rawFilters)) {\n if (rawFilters[f] != undefined && (typeof (rawFilters[f]) != 'number' || !isNaN(rawFilters[f]))) {\n filters.push({\n name: f,\n value: rawFilters[f] + '',\n });\n }\n }\n }\n\n const request = {\n name,\n filters,\n language,\n exportColumns: options.exportColumns,\n };\n const r = await fetch(`/api/search/${workId}/export/xls`, {\n method: 'POST',\n body: JSON.stringify(request),\n headers: {\n ['Content-Type']: 'application/json'\n }\n });\n const resp = await r.blob();\n return resp;\n}\n\nexport async function paginate(workId: number, name: string, rawOptions: OptionsWithFilters = {}): Promise>> {\n const rawFilters = isOptions(rawOptions) ? rawOptions.filters : rawOptions;\n const options = isOptions(rawOptions) ? rawOptions : defaultOptions;\n\n const filters: any[] = [];\n if (rawFilters != null) {\n for (const f of Object.keys(rawFilters)) {\n if (rawFilters[f] != undefined && (typeof (rawFilters[f]) !== 'number' || !isNaN(rawFilters[f]))) {\n filters.push({\n name: f,\n value: rawFilters[f] + '',\n });\n }\n }\n }\n\n const request = {\n name,\n filters,\n page: options.page,\n limit: options.limit,\n order: options.sortBy,\n };\n\n const r = await fetch(`/api/search/${workId}/paginate`, {\n method: 'POST',\n body: JSON.stringify(request),\n headers: {\n ['Accept']: 'application/json',\n ['Content-Type']: 'application/json'\n }\n });\n const resp = await r.json();\n\n if (options.normalizeKeys && resp.hasValue) {\n return { ...resp, value: { ...resp.value, data: normalizeKeys(resp.value.data) } };\n }\n else {\n return resp;\n }\n}\n\nexport async function getUserFilters(workId: number, name: string): Promise {\n const url = `/api/search/${workId}/filters`;\n const body = JSON.stringify({\n name,\n });\n\n const r = await fetch(url, {\n method: 'POST',\n body,\n headers: {\n ['Accept']: 'application/json',\n ['Content-Type']: 'application/json',\n }\n });\n\n if (r.status === 200) {\n const resp = await r.json();\n return resp;\n }\n else {\n throw 'not found';\n }\n}","import { IJob, IUserIdentity, IWork, IWorkPermission } from \"../models\";\nimport { evalAndParse } from \"./expressions\";\n\nexport const isAdmin = (user: IUserIdentity | undefined) => {\n return user && user.roles.indexOf('admin') >= 0;\n}\n\nexport const isNotAdmin = (user: IUserIdentity | undefined) => {\n return !(isAdmin);\n}\n\nexport interface IHasPermissionOpts {\n user?: IUserIdentity;\n work?: IWork;\n job?: IJob;\n explicit?: boolean;\n}\n\nconst evaluatePermission = (p: IWorkPermission, ctx: any) => {\n const res = evaluatePermissionImpl(p, ctx);\n // console.log(`evaluate permission result ${p.action}`, p, ctx, res);\n\n return res;\n}\n\nconst evaluatePermissionImpl = (p: IWorkPermission, ctx: any) => {\n if (p.expression) {\n return evalAndParse(p.expression, ctx);\n }\n else if (p.roles) {\n return p.roles.split(',').find(r => ctx.user.roles.includes(r)) != undefined;\n }\n else if (p.policies) {\n return p.policies.split(',').find(r => ctx.user.policies.includes(r)) != undefined;\n }\n else {\n return false;\n }\n}\n\nexport const hasPermission = (perm: string, opts: IHasPermissionOpts) => {\n const permissions = opts.work?.permissions ?? [];\n const perms = permissions.filter(p => p.action == perm);\n\n if (perms.length > 0) {\n const s = perms.find(p => evaluatePermission(p, {\n user: opts.user,\n work: opts.work,\n workId: opts.work?.id,\n jobId: opts.job?.id,\n job: opts.job,\n identity: opts.user,\n }));\n\n return s != undefined;\n }\n else {\n return !opts.explicit;\n }\n}\n\nexport default {\n hasPermission,\n isAdmin,\n isNotAdmin,\n}\n","\nexport const format = (value: string, ... args: any[]) => {\n return value.replace(/{(\\d+)}/g, (match: any, number: number) => {\n return typeof args[number] != 'undefined'\n ? args[number]\n : match;\n });\n}\n\nexport const interpolate = (value: string, args: any) => {\n return value.replace(/{(\\w+)}/g, (match: any, number: number) => {\n return typeof args[number] != 'undefined'\n ? args[number]\n : match;\n });\n}\n\nexport const zeroRightPad = (value: any, digits: number) => {\n return value + Array(Math.max(digits - String(value).length + 1, 0)).join('0');\n}\n\nexport const zeroPad = (number: number, digits: number) => {\n return Array(Math.max(digits - String(number).length + 1, 0)).join('0') + number;\n}\n\nexport const strConcat = (...args: any[]) => {\n return args.filter(s => s != null).join(' ');\n}\n\nexport const strJoin = (join: string, ...args: any[]) => {\n return args.filter(s => s != null).join(join);\n}\n","import {m, q} from './graphql';\nimport { ensureType } from './utils';\nimport {IOption} from '@models';\nimport {IDocument, IFolder} from '@models/documents';\n\nexport async function pushS3TemporalResource(f: File): Promise> {\n const url = 'https://nzjvbux75nqmfarnutjugr5n5i0bphru.lambda-url.eu-west-3.on.aws/';\n const formData = new FormData();\n formData.append('file', f);\n formData.append('name', f.name);\n formData.append('session', 'todo');\n\n const options = {\n method: 'POST',\n body: formData,\n };\n const resp = await fetch(url, options);\n const id = await resp.text();\n return { hasValue: true, value: id };\n}\n\nexport async function pushLocalTemporalResource(f: File): Promise> {\n const url = '/api/files/resource/push';\n\n const formData = new FormData();\n formData.append('file', f);\n\n const options = {\n method: 'POST',\n body: formData,\n };\n const resp = await fetch(url, options);\n return await resp.json();\n}\n\nexport function pushTemporalResource(f: File): Promise> {\n // TODO: buscar la forma de activar/desactivar s3 en tiempo de ejecucion ??\n // return pushS3TemporalResource(f);\n return pushLocalTemporalResource(f);\n}\n\nexport function getDocumentVersions(workId: number, documentId: number) {\n return q(`query GetDocumentInfo($workId: Int!, $documentId: Int!) {\n work(id: $workId) {\n document(id: $documentId) {\n versions {\n id, name, mimeType, size, dateTime, userId\n }\n }\n }\n }`,\n { workId, documentId },\n { returnPath: 'work.document.versions' });\n}\n\nexport function getDocumentLastVersion(workId: number, documentId: number) {\n return q(`query GetDocumentInfo($workId: Int!, $documentId: Int!) {\n work(id: $workId) {\n document(id: $documentId) {\n lastVersion {\n id, name, mimeType, size, dateTime, userId\n }\n }\n }\n }`,\n { workId, documentId },\n { returnPath: 'work.document.lastVersion' });\n}\n\nexport function getDocumentInfo(workId: number, documentId: number) {\n return q(`query GetDocumentInfo($workId: Int!, $documentId: Int!) {\n work(id: $workId) {\n document(id: $documentId) {\n info {\n hasValue, isError, error, value\n }\n }\n }\n }`,\n { workId, documentId },\n { returnPath: 'work.document.info'});\n}\n\nexport function getFolders(workId: number, includeFolderKinds: number[] = []) {\n return m(`query GetFolders($workId: Int!, $includeFolderKinds: [Int!]) {\n work(id: $workId) {\n folders(includeFolderKinds: $includeFolderKinds) {\n id, name, description, workId, parentFolderId, dateTime, userId, sortOrder,\n folderKind,\n }\n }\n }`, { workId, includeFolderKinds }, { returnPath: 'work.folders' });\n}\n\nexport function getDocumentsAndFolders(workId: number) {\n return m(`query GetDocumentsAndFolders($workId: Int!) {\n work(id: $workId) {\n folders {\n id, name, description, workId, parentFolderId, dateTime, userId, sortOrder,\n folderKind,\n },\n documents {\n id, name, description, workId, folderId, documentTypeId, title, sortOrder, dateTime,\n uploadDateTime, code, edition, year,\n documentKind,\n }\n }\n }`, { workId }, { returnPath: 'work' });\n}\n\nexport function getDocuments(workId: number, includeDocumentKinds: number[] = []) {\n return m(`query GetDocuments($workId: Int!, $includeDocumentKinds:[Int!] ) {\n work(id: $workId) {\n documents (includeDocumentKinds: $includeDocumentKinds) {\n id, name, description, workId, folderId, documentTypeId, title, sortOrder, dateTime,\n uploadDateTime, code, edition, year,\n documentKind,\n }\n }\n }`, { workId, includeDocumentKinds }, { returnPath: 'work.documents' });\n}\n\nexport function saveFolder(workId: number, inputFolder: IFolder) {\n const folder = ensureType(inputFolder, {\n include: ['id', 'name', 'description', 'parentFolderId', 'workId', 'sortOrder', 'folderKind']\n });\n\n return m(`mutation SaveFolder($workId: Int!, $folder: FolderGraphInputType!) {\n saveFolder(workId: $workId, folder: $folder) {\n isError, error, value, hasValue\n }\n }`, { folder, workId }, { returnPath: 'saveFolder' });\n}\n\nexport function removeFolder(workId: number, id: number) {\n return m(`mutation RemoveFolder($workId: Int!, $id: Int!) {\n removeFolder(workId: $workId, id: $id) {\n isError, error, value, hasValue\n }\n }`, { id, workId }, { returnPath: 'removeFolder' });\n}\n\nexport function removeDocument(workId: number, id: number) {\n return m(`mutation RemoveDocument($workId: Int!, $id: Int!) {\n removeDocument(workId: $workId, id: $id) {\n isError, error, value, hasValue\n }\n }`, { id, workId }, { returnPath: 'removeDocument' });\n}\n\nexport function saveDocument(workId: number, inputDoc: IDocument) {\n const doc = ensureType(inputDoc, {\n include: [\n 'id', 'name', 'description', 'folderId',\n 'workId', 'sortOrder', 'title', 'temporalResource',\n 'code', 'year', 'edition',\n 'documentKind',\n 'areaDownload'\n ],\n ints: [ 'sortOrder' ]\n });\n\n return m(`mutation SaveDocument($workId: Int!, $doc: DocumentGraphInputType!) {\n saveDocument(workId: $workId, document: $doc) {\n isError, error, value, hasValue\n }\n }`, { workId, doc }, { returnPath: 'saveDocument' });\n}\n","import { m, q } from './graphql';\nimport { pushTemporalResource } from './documents';\nimport { IRequirementFulfillData, fulfillDocumentIsFile, IRequirementFulfillDocument, IRequirementIncidence, IRequirementNote, IRequirementValidationData, IRequirement, IRequirementStatusNote } from '@models/requirements';\nimport { ensureType } from './utils';\nimport { ResourceType } from '@models';\n\nexport async function validateRequirement(\n workId: number,\n requirementId: number,\n validate: boolean,\n validationData: IRequirementValidationData,\n fileResourceId: string | undefined,\n fileResourceName: string | undefined) {\n return m(`mutation ValidateRequirement($workId: Int!, $requirementId: Int!, $validate: Boolean!, $validationData: RequirementValidationDataGraphInputType!, $fileResourceId: String, $fileResourceName: String) {\n validateRequirement(workId: $workId, requirementId: $requirementId, validate: $validate, data: $validationData, fileResourceId: $fileResourceId, fileResourceName: $fileResourceName) {\n value, hasValue, error, isError\n }\n }`,\n { workId, requirementId, validate, validationData, fileResourceId, fileResourceName },\n { returnPath: 'validateRequirement' });\n}\n\nexport async function getRequirements(\n workId: number,\n targetType: number,\n targetId: number) {\n return q(`query GetRequirements($workId: Int!, $targetType: Int!, $targetId: Int!) {\n work(id: $workId) {\n requirements(targetType: $targetType, targetId: $targetId) {\n id, creationDate, workId, requirementTypeId,\n isExpired, isShared,\n hasIncidences, hasNotes,\n expirationDate, departmentId, contractorId,\n machineryId, workerId,\n jobHasContractorId, jobHasMachineryId, jobHasWorkerId,\n jobHasDepartmentId,\n title, remarks, color,\n inProgress, mandatory,\n requirementType {\n id,\n dependencies {\n dependsOnRequirementId, dependencyType, propagate\n },\n isResourcePicture\n }\n status {\n id, dateTime, statusTypeId, createdById, isCurrent, flag, validatedBy, remarks, displayDateTime, notes {\n id, remarks, creationDate, createdById, remarks\n }\n },\n documents {\n id, dateTime, documentRestrictionId, createdBy, document {\n dateTime,\n id, name, description, hasActiveVersion, mimeType, size, versions {\n id, name, mimeType, size, dateTime, userId\n }\n }\n },\n incidences {\n id, remarks, creationDate, createdById, documentVersionId\n },\n notes {\n id, remarks, creationDate, createdById\n },\n validations {\n id, appUserId, dateTime, isCurrent, validated, validationHolderId\n }\n }\n }\n }`,\n { workId, targetId, targetType },\n { returnPath: 'work.requirements' });\n}\n\nexport async function getRequirement(\n workId: number,\n targetType: number,\n targetId: number,\n id: number\n) {\n return q(`query GetRequirement($workId: Int!, $targetType: Int!, $targetId: Int!, $id: Int!) {\n work(id: $workId) {\n requirement(targetType: $targetType, targetId: $targetId, id: $id) {\n id, creationDate, workId, requirementTypeId, isShared,\n hasIncidences, hasNotes,\n expirationDate, departmentId, contractorId,\n inProgress, color,\n status {\n id, dateTime, statusTypeId, createdById, isCurrent, flag, validatedBy, remarks, displayDateTime,\n },\n documents {\n id, dateTime, documentRestrictionId, createdBy, document {\n id, name, description, mimeType, size, versions {\n id, name, mimeType, size, dateTime, userId\n }\n }\n },\n incidences {\n id, remarks, creationDate, createdById, documentVersionId,\n },\n notes {\n id, remarks, creationDate, createdById\n }\n }\n }\n }`, { workId, targetId, targetType, id }, { returnPath: 'work.requirement' });\n}\n\ntype RequirementFromResource = {\n requirementId: number,\n resourceType: number,\n resourceId: number,\n}\n\nexport async function getRequirementsFromResources(\n workId: number,\n requirementIds: RequirementFromResource[]) {\n return q(`query GetRequirementsFromResources($workId: Int!, $requirementIds: [RequirementResourceIdGraphType]) {\n work(id: $workId) {\n requirementsFromResources(requirementIds: $requirementIds) {\n id, creationDate, workId, requirementTypeId, isShared,\n hasIncidences, hasNotes, title,\n expirationDate, departmentId, contractorId,\n inProgress, mandatory, color,\n status {\n id, dateTime, statusTypeId, createdById, isCurrent, flag, validatedBy, remarks, displayDateTime,\n },\n documents {\n id, dateTime, documentRestrictionId, createdBy, document {\n id, name, description, mimeType, size, dateTime, versions {\n id, name, mimeType, size, dateTime, userId\n }\n }\n },\n incidences {\n id, remarks, creationDate, createdById\n },\n notes {\n id, remarks, creationDate, createdById\n }\n }\n }\n }`, { workId, requirementIds }, { returnPath: 'work.requirementsFromResources' });\n}\n\nexport async function createFreeRequirement(\n workId: number,\n jobId: number,\n requirementData: IRequirementFulfillData,\n resourceType: number | undefined = undefined,\n resourceId: number | undefined = undefined,\n statusType: number | undefined = undefined,\n) {\n // generamos los temporal resources id\n const documents: IRequirementFulfillDocument[] = [];\n for (const r of requirementData.documents) {\n if (fulfillDocumentIsFile(r.resourceId)) {\n const data = await pushTemporalResource(r.resourceId);\n documents.push({ ...r, resourceId: data.value });\n } else {\n documents.push({ ...r });\n }\n }\n\n const data = { ...requirementData, documents };\n\n return m(`mutation CreateFreeRequirement(\n $workId: Int!,\n $jobId: Int!,\n $data: FulfillRequirementGraphInputType!,\n $resourceType: Int,\n $resourceId: Int,\n $statusType: Int,\n ) {\n createFreeRequirement(\n workId: $workId,\n jobId: $jobId,\n data: $data,\n resourceType: $resourceType,\n resourceId: $resourceId,\n statusType: $statusType\n ) {\n hasValue, value, error, isError\n }\n }`, {\n workId, jobId, data, resourceType, resourceId, statusType,\n }, {\n returnPath: 'createFreeRequirement'\n });\n}\n\nexport async function fulfillRequirement(\n workId: number,\n requirementId: number,\n requirementData: IRequirementFulfillData) {\n // generamos los temporal resources id\n const documents: IRequirementFulfillDocument[] = [];\n for (const r of requirementData.documents) {\n if (fulfillDocumentIsFile(r.resourceId)) {\n const data = await pushTemporalResource(r.resourceId);\n documents.push({ ...r, resourceId: data.value });\n } else {\n documents.push({ ...r });\n }\n }\n\n const data = { ...requirementData, documents };\n\n return m(`mutation FulfillRequirement($workId: Int!, $requirementId: Int!, $data: FulfillRequirementGraphInputType!) {\n fulfillRequirement(workId: $workId, requirementId: $requirementId, data: $data) {\n hasValue, value, error, isError\n }\n }`, {\n workId, requirementId, data\n }, {\n returnPath: 'fulfillRequirement'\n });\n}\n\nexport async function saveRequirementIncidence(\n workId: number,\n inputData: IRequirementIncidence,\n fileResourceId: string | undefined = undefined,\n fileResourceName: string | undefined = undefined) {\n const data = ensureType(inputData);\n\n return m(`mutation SaveRequirementIncidence($workId: Int!, $data: RequirementIncidenceGraphInputType!, $fileResourceId: String, $fileResourceName: String) {\n saveRequirementIncidence(workId: $workId, data: $data, fileResourceId: $fileResourceId, fileResourceName: $fileResourceName) {\n hasValue, value, error\n }\n }`,\n { workId, data, fileResourceId, fileResourceName },\n { returnPath: 'saveRequirementIncidence' });\n}\n\nexport async function saveRequirementNote(workId: number, inputData: IRequirementNote) {\n const data = ensureType(inputData);\n\n return m(`mutation SaveRequirementNote($workId: Int!, $data: RequirementNoteGraphInputType!) {\n saveRequirementNote(workId: $workId, data: $data) {\n hasValue, value, error\n }\n }`,\n { workId, data },\n { returnPath: 'saveRequirementNote' });\n}\n\nexport async function saveRequirementStatusNote(workId: number, inputData: IRequirementStatusNote) {\n console.log('saveRequirementStatusNote input', inputData);\n const data = ensureType(inputData);\n\n console.log('saveRequirementStatusNote', data);\n\n return m(`mutation SaveRequirementStatusNote($workId: Int!, $data: RequirementStatusNoteGraphInputType!) {\n saveRequirementStatusNote(workId: $workId, data: $data) {\n hasValue, value, error\n }\n }`,\n { workId, data },\n { returnPath: 'saveRequirementStatusNote' });\n}\n\nexport async function getRequirementIncidences(workId: number, requirementId: number, targetType: number, targetId: number) {\n return q(`query GetRequirementIncidences($workId: Int!, $requirementId: Int!, $targetType: Int!, $targetId: Int!) {\n work(id: $workId) {\n requirement(id: $requirementId, targetType: $targetType, targetId: $targetId) {\n incidences {\n id, requirementId, remarks, creationDate, documentVersionId\n }\n }\n }\n }`, { workId, requirementId, targetType, targetId },\n { returnPath: 'work.requirement.incidences' });\n}\n\nexport async function getRequirementNotes(workId: number, requirementId: number, targetType: number, targetId: number) {\n return q(`query GetRequirementNotes($workId: Int!, $requirementId: Int!, $targetType: Int!, $targetId: Int!) {\n work(id: $workId) {\n requirement(id: $requirementId, targetType: $targetType, targetId: $targetId) {\n notes {\n id, requirementId, remarks, creationDate\n },\n status {\n id, requirementId, remarks, dateTime\n }\n }\n }\n }`, { workId, requirementId, targetType, targetId },\n { returnPath: 'work.requirement.notes' });\n}\n\nexport async function forceResourceStatus(workId: number, resourceType: ResourceType, resourceId: number, validated: boolean, date?: string) {\n const data = { workId, resourceType, resourceId, validated, forcedStatusUntilDate: date };\n\n const resp = await m(`mutation ForceResourceStatus($workId: Int!, $resourceType: Int!, $resourceId: Int!, $validated: Boolean!, $forcedStatusUntilDate: String) {\n forceResourceStatus(workId: $workId, resourceType: $resourceType, resourceId: $resourceId, validated: $validated, untilDate: $forcedStatusUntilDate) {\n hasValue, value, error, isError\n }\n }`, data);\n\n return resp?.data.forceResourceStatus;\n}\n\nexport async function requirementMeetsDependencies(workId: number, requirementId: number, jobId?: number) {\n return q(`query RequirementMeetsDependencies($workId: Int!, $requirementId: Int!, $jobId: Int) {\n work(id: $workId) {\n requirementMeetsDependencies(requirementId: $requirementId, jobId: $jobId) {\n hasValue, value, error, isError\n }\n }\n }`, { workId, requirementId, jobId }, { returnPath: 'work.requirementMeetsDependencies' });\n}\n\nexport async function requirementCanBeValidated(workId: number, requirementId: number) {\n return q(`query RequirementCanBeValidated($workId: Int!, $requirementId: Int!) {\n work(id: $workId) {\n requirementCanBeValidated(id: $requirementId)\n }\n }`, { workId, requirementId }, { returnPath: 'work.requirementCanBeValidated' });\n}\n\nexport async function removeRequirementFile(requirement: IRequirement) {\n return m(`mutation RemoveRequirementFile($workId: Int!, $requirementId: Int!) {\n removeRequirementFile(workId: $workId, id: $requirementId) {\n hasValue, value, error, isError\n }\n }`, { workId: requirement.workId, requirementId: requirement.id }, { returnPath: 'removeRequirementFile' });\n}\n\nexport async function removeFreeRequirement(requirement: IRequirement) {\n return m(`mutation RemoveFreeRequirement($workId: Int!, $requirementId: Int!) {\n removeFreeRequirement(workId: $workId, id: $requirementId) {\n hasValue, value, error, isError\n }\n }`, { workId: requirement.workId, requirementId: requirement.id }, { returnPath: 'removeFreeRequirement' });\n}\n","import { pushTemporalResource } from './documents';\nimport { getClient, gql, noCache, q, m } from './graphql';\nimport { IHelpDeskItem, IJob, IJobHasDepartment, IHelpDeskItemFile, ICommunication, ICommunicationFile } from '../../models';\nimport { formatProperty } from './utils';\n\nexport async function initialize() {\n const client = getClient('initialize');\n const query = gql`\nquery Initialize {\n works {\n id, name, description, countryId, defaultEmail, helpDeskEmail, footerResource, contextData,\n users {\n id, userName, email, roles, policies\n },\n settings,\n workspaces {\n id, name, description, isActive, countryId,\n regionId, countyId, contact, address,\n location, postalCode, phone, fax, email,\n properties {\n id, propertyGroupTypeId, workspaceId, value\n }\n },\n workShifts {\n id, name, startMinutes, endMinutes\n },\n departments {\n id, name, description, isOblique\n }\n }\n}`;\n\n// no sabemos por que es necesario cargar todos los trabajadores de cada departamento\n// workers {\n// id, name, surname\n// }\n\n const resp = await client.query({ query, fetchPolicy: noCache });\n\n return resp;\n}\n\nexport async function getWorks() {\n const client = getClient('getWorks');\n const query = gql`\nquery GetWorks {\n works {\n id, name, description, countryId,\n defaultEmail, helpDeskEmail, footerResource, contextData,\n users {\n id, userName, email, roles, policies\n },\n settings,\n workspaces {\n id, name, description, isActive, countryId, regionId, countyId\n },\n legalForms {\n id, name, hideContractorProperties, workerTypes {\n id, workerType {\n id, name\n }\n }\n },\n workShifts {\n id, name, startMinutes, endMinutes\n },\n departments {\n id, name, description, isOblique\n },\n contractorSettings {\n id, workId, showGeneralIndicators, legalFormMandatory,\n jhcStartDateMandatory, jhcDescriptionMandatory, cifCantBeRepeated,\n canAddSubWorkers,\n canAddSubMachineries,\n },\n machinerySettings {\n id, workId, showGeneralIndicators, subTypeMandatory, onlyLicenseNumber,\n },\n workerSettings {\n id, workId, showGeneralIndicators, showWorkerImage, workerTypeIsMandatory\n },\n }\n}`;\n\n const resp = await client.query({ query, fetchPolicy: noCache });\n\n return resp;\n}\n\nexport async function getWork(workId: number) {\n const client = getClient('getWork');\n const query = gql`\nquery GetSelectedWork($workId: Int!) {\n communications(workId: $workId) {\n id, title, description, fromDate, toDate,\n documents {\n id, name, description, title\n }\n },\n work(id: $workId) {\n id, name, description, countryId, users, {\n id, userName, email, roles, policies, departments\n },\n jobSettings {\n id, workId, skipInformationLoadedState, colorizeContractorIndicators, showResourceIncidenceIndicator\n },\n activeModules {\n id, name, hasFrontend, frontendResource\n },\n defaultEmail,\n helpDeskEmail,\n footerResource,\n contextData,\n settings,\n workerDocumentTypes{\n id, name, workId\n },\n workerTypes{\n id, name, workId\n }\n workspaces {\n id, name, description, isActive, countryId, regionId, countyId\n },\n workShifts {\n id, name, startMinutes, endMinutes\n },\n departments {\n id, name, description, isOblique, workers {\n id, name, surname, workspaces {\n id\n }\n }\n },\n workI18NResources {\n language, name, value\n },\n permissions {\n name, action, policies, roles, expression\n },\n activities {\n id, name, workId\n },\n legalForms {\n id, name, workId, hideContractorProperties, workerTypes {\n id, workerType {\n id, name\n }\n }\n },\n machineryTypes {\n id, name, subTypes {\n id, name, parentId\n }\n },\n propertyGroupTypes {\n id, name, title, styleClassName, description, containerType, style, objectType, isInternal, mandatory, hidable,\n properties {\n id, name, title, typeId, placeholder, help, parentId, propertyOrder, selectOptions\n }\n },\n contractTypes {\n id, name\n },\n preventiveResources {\n id, name\n },\n requirementGroups {\n id, name, title, description, workId, orderValue, color, icon, style, isActive, legend,\n requirementTypes {\n id, name, title, description, workId, requirementGroupId,\n targetType, isActive, isShared, kindId,\n criteria, template,\n expirationTypeId, expirationValue, expirationTypeId,\n expirationRequired,\n expirationThreshold,\n color, orderValue,\n requireJobInformationAccess,\n validationTypeId,\n isResourcePicture,\n dependencies {\n id, requirementTypeId, dependsOnRequirementId, propagate, dependencyType\n },\n documentRestrictions {\n id, name, title, mimeTypes, regexp, excludeMimeTypes,\n },\n suggestions {\n id, name\n },\n validationHolders {\n id, appUserId, departmentId, workFunctionId, isBlocking,\n validationOrder, jobResponsible, optional,\n jobImpliedRso,\n }\n }\n },\n requirementStatusTypes {\n id, name, description\n },\n requirementValidationTypes {\n id, name\n },\n resourceStatusTypes {\n id, name\n },\n validations {\n id, name, value, field, resourceType, errorMessage\n },\n contractorSettings {\n id, workId, showGeneralIndicators, legalFormMandatory,\n jhcStartDateMandatory, jhcDescriptionMandatory, cifCantBeRepeated,\n canAddSubWorkers,\n canAddSubMachineries,\n },\n machinerySettings {\n id, workId, showGeneralIndicators, subTypeMandatory, onlyLicenseNumber,\n },\n workerSettings {\n id, workId, showGeneralIndicators, showWorkerImage, workerTypeIsMandatory\n },\n }\n}`;\n\n const resp = await client.query({\n query,\n fetchPolicy: noCache,\n variables: {\n workId\n }\n });\n return resp;\n}\n\nexport async function getContractors(workId: number) {\n const resp = q(`query GetContractors($workId: Int!) {\n work(id: $workId) {\n contractors {\n id, name, code\n }\n }\n }`, { workId }, {\n returnPath: 'work.contractors',\n });\n\n return resp;\n}\n\n// Jobs\nexport async function getJobs(workId: number) {\n const resp = q(`\n query GetJobs($workId: Int!) {\n work(id: $workId) {\n jobs {\n id, name, code, workspaceId, activityTypeId, workId\n workShiftId, contractTypeId, description,\n startDate, endDate, remarks, preventiveResourceId,\n countDepartmentsTotal, countDepartmentsAuthorized,\n countMachineriesTotal, countMachineriesAuthorized,\n countWorkersTotal, countWorkersAuthorized,\n countContractorsTotal, countContractorsAuthorized, isActive,\n contractors {\n id, contractorId, contractor {id, name}, startDate, currentStatusType,\n forcedStatusUntilDate,\n hierarchyLevel,\n },\n machineries {\n id, machineryId, startDate, machinery {id, name, code, contractorId,\n contractor {id, name}}, currentStatusType, forcedStatusUntilDate\n }\n departments {\n id, departmentId, responsibleId, currentStatusType, forcedStatusUntilDate\n }\n }\n }\n }`, { workId });\n\n return resp;\n}\n\nexport async function getJobReferences(workId: number) {\n const resp = q(`\n query GetJobReferences($workId: Int!) {\n work(id: $workId) {\n jobs {\n id, name, code\n }\n }\n }`, { workId });\n\n return resp;\n}\n\nexport async function saveJob(inputData: IJob, departments: IJobHasDepartment[] = []) {\n const data = {\n ...inputData,\n properties: (inputData.properties ?? []).map(formatProperty(inputData.workId)),\n };\n\n const client = getClient('saveJob');\n const mutation = gql`\nmutation SaveJob($workId: Int!, $data: JobInputType!, $departments: [JobHasDepartmentInputType]) {\n saveJob(workId: $workId, job: $data, departments: $departments) {\n isError, error, value\n }\n}\n `;\n\n const resp = await client.mutate({\n mutation,\n variables: {\n workId: inputData.workId,\n data,\n departments,\n }\n });\n\n return resp;\n}\n\nexport async function removeContractorInvitation(id: number, workId: number) {\n const client = getClient('removeContractorInvitation');\n const mutation = gql`\n mutation RemoveContractorInvitation($id: Int!, $workId: Int!) {\n removeContractorInvitation(id: $id, workId: $workId) {\n isError, error, value\n }\n }\n `;\n\n const resp = await client.mutate({\n mutation,\n variables: {\n id,\n workId\n }\n });\n\n return resp;\n}\n\nexport async function removeJob(id: number, workId: number) {\n const client = getClient('removeJob');\n const mutation = gql`\n mutation RemoveJob($id: Int!, $workId: Int!) {\n removeJob(id: $id, workId: $workId) {\n isError, error, value\n }\n }\n `;\n\n const resp = await client.mutate({\n mutation,\n variables: {\n id,\n workId\n }\n });\n\n return resp;\n}\n\nexport async function createHelpDeskItem(\n input: IHelpDeskItem,\n files: File[] = []) {\n const client = getClient('createHelpDeskItem');\n const inputFileResources: IHelpDeskItemFile[] = [];\n\n if (files) {\n for (const f of files) {\n const res = await pushTemporalResource(f);\n if (res.hasValue) {\n inputFileResources.push({\n fileName: f.name,\n temporalResourceId: res.value,\n });\n }\n }\n }\n\n input.files = inputFileResources;\n\n const mutation = gql`\nmutation CreateHelpDeskItem($input: HelpDeskItemInputType!) {\n createHelpDeskItem(item: $input) {\n isError, error, value, hasValue\n }\n}\n `;\n\n const resp = await client.mutate({\n mutation,\n variables: {\n input\n }\n });\n\n return resp.data.createHelpDeskItem;\n}\n\nexport async function saveCommunication(\n input: ICommunication, deletion: boolean = false) {\n const client = getClient('saveCommunication');\n\n const mutation = gql`\nmutation saveCommunication($input: CommunicationGraphInputType!, $deletion: Boolean!) {\n saveCommunication(data: $input, deletion: $deletion) {\n isError, error, value, hasValue\n }\n}\n `;\n\n const resp = await client.mutate({\n mutation,\n variables: {\n input,\n deletion\n }\n });\n\n return resp.data.saveCommunication;\n}\n\nexport async function getCommunicationReceivers(\n communication: ICommunication) {\n const resp = q(`\n query GetCommunicationReceivers($communication: CommunicationGraphInputType!) {\n communicationReceivers(communication: $communication) {\n id, userName, email\n }\n }`,\n { communication },\n { returnPath: 'communicationReceivers' });\n\n return resp;\n}\n\nexport async function getCommunication(\n workId: number,\n id: number) {\n const resp = q(`\n query GetCommunicationById($workId: Int!, $id: Int!) {\n communication(workId: $workId, id: $id) {\n id, creationDate, createdBy, workId,\n fromDate,\n toDate,\n title, description,\n targetType,\n isActive, isRecursive,\n mainContractors,\n documents {\n id, name, description, title\n }\n }\n }`,\n { workId, id },\n { returnPath: 'communication' });\n\n return resp;\n}\n\nexport function validateCommunication(id: number) {\n return m(`\n mutation ValidateCommunication($id: Int!) {\n validateCommunication(id: $id) {\n isError, error, value, hasValue\n }\n }`, { id }, { returnPath: 'validateCommunication' });\n}\n\n\nexport function SaveUserPolicies(userId: number, policies: string[]) {\n return m(`\n mutation SaveUserPolicies($userId: Int!, $policies: [String]! ) {\n saveUserPolicies(userId: $userId, policies: $policies) {\n isError, error, value, hasValue\n }\n }`, { userId, policies }, { returnPath: 'saveUserPolicies' });\n}","export const formatFileSize = (bytes: number|undefined) => {\n if (bytes == undefined) {\n return '';\n }\n else {\n const thresh = 1024;\n if (Math.abs(bytes) < thresh) {\n return bytes + ' B';\n }\n\n const units = ['kB','MB','GB','TB','PB','EB','ZB','YB'];\n let u = -1;\n do {\n bytes /= thresh;\n ++u;\n } while (Math.abs(bytes) >= thresh && u < units.length - 1);\n return bytes.toFixed(1) + ' ' + units[u];\n }\n}\n\n\nexport const downloadBlob = (blob: Blob, filename: string) => {\n const a = document.createElement('a');\n\n a.download = filename;\n a.href = window.URL.createObjectURL(blob);\n\n a.click();\n}","import { getClient, gql } from \"./graphql\";\n\nexport async function initialize() {\n const client = getClient('initialize');\n const query = gql`\nquery Initialize {\n user {\n id, userName, email, roles, policies,\n departments, workFunctions,\n workerIds, obliqueDepartments,\n contractorIds\n },\n documentTypes {\n id, name, description, isActive\n },\n countries {\n id, name, code,\n regions {\n id, name,\n counties {\n id, name, code\n }\n }\n },\n requirementExpirationTypes {\n id, name, description\n },\n requirementTypeKinds {\n id, name, description\n }\n}`;\n\n const resp = await client.query({ query });\n\n return resp;\n}\n","import { Action, Reducer } from 'redux';\nimport * as Actions from './actions/app';\nimport * as Constants from './constants';\nimport * as Identity from './identity';\n\nexport interface IAppState {\n loading: boolean;\n loadingCtx?: string;\n loadingMessage?: string;\n}\n\nconst stopLoadingType = '[APP] STOP LOADING';\nconst startLoadingType = '[APP] START LOADING';\n\nexport interface StopLoadingAction {\n type: '[APP] STOP LOADING';\n}\nexport interface StartLoadingAction {\n type: '[APP] START LOADING';\n ctx?: string;\n message?: string;\n}\n\nexport type KnownAction = StartLoadingAction | StopLoadingAction | {type: undefined};\n\nconst stopLoading = () => ({ type: stopLoadingType });\nconst startLoading = (action: Partial) => ({\n ...action,\n type: startLoadingType\n});\n\nexport const actionCreators = {\n startLoading,\n stopLoading,\n initialize: () => async (dispatch: Function) => {\n const resp = await Actions.initialize();\n\n if (resp.data && resp.data.user) {\n dispatch(Identity.actionCreators.setUser(resp.data.user));\n }\n if (resp.data) {\n dispatch(Constants.actionCreators.initialize({\n countries: resp.data.countries,\n documentTypes: resp.data.documentTypes,\n requirementExpirationTypes: resp.data.requirementExpirationTypes,\n requirementTypeKinds: resp.data.requirementTypeKinds,\n }));\n }\n dispatch(stopLoading());\n }\n};\n\nexport const reducer: Reducer = (state: IAppState | undefined, incomingAction: Action): IAppState => {\n if (state === undefined) {\n return { loading: true };\n }\n\n const action = incomingAction as KnownAction;\n switch (action.type) {\n case startLoadingType:\n return { ...state, loading: true, loadingCtx: action.ctx, loadingMessage: action.message };\n case stopLoadingType:\n return { ...state, loading: false, loadingCtx: undefined, loadingMessage: undefined };\n default:\n return state;\n }\n};\n","export function storageGet(key: string, defaultValue: T) {\n const data = localStorage.getItem(key);\n\n if (data != undefined && data != '') {\n return JSON.parse(atob(data)) as T;\n }\n else {\n return defaultValue;\n }\n}\n\nexport function storageSet(key: string, value: T) {\n localStorage.setItem(key, btoa(JSON.stringify(value)));\n}\n\ntype Predicate = (key: string) => boolean;\n\nexport function storageClear(key: string | Predicate) {\n if (typeof (key) === 'string') {\n localStorage.removeItem(key);\n }\n else {\n const keys = Object.keys(localStorage);\n for (const k of keys) {\n if (key(k)) {\n localStorage.removeItem(k);\n }\n }\n }\n}\n\n// storageClear(k => k.startsWith('filters'));\n","import * as React from 'react';\n\nexport function Loading() {\n return ;\n}","import { IReportDefinition } from '@models/reports';\n\nexport async function getReports(workId: number): Promise {\n const url = `/api/reports/${workId}/reports`;\n\n const r = await fetch(url, {\n method: 'GET',\n headers: {\n ['Accept']: 'application/json',\n ['Content-Type']: 'application/json',\n }\n });\n\n if (r.status === 200) {\n const resp = await r.json();\n return resp;\n }\n else {\n throw 'not found';\n }\n}\n\nexport async function getReport(workId: number, reportName: string): Promise {\n const url = `/api/reports/${workId}/report/${reportName}`;\n\n const r = await fetch(url, {\n method: 'GET',\n headers: {\n ['Accept']: 'application/json',\n ['Content-Type']: 'application/json',\n }\n });\n\n if (r.status === 200) {\n const resp = await r.json();\n return resp;\n }\n else {\n throw 'not found';\n }\n}","import * as React from 'react';\n\nimport { redirectTo } from '../../utils';\nimport { Portal } from './Portal';\n\nexport interface IProps {\n children?: any;\n onClick?: Function;\n redirectTo?: string;\n text?: string;\n}\n\nexport function BreadcrumbItem(props: IProps) {\n const performOnClick = (..._: any) => {\n if (props.onClick) {\n props.onClick();\n }\n\n if (props.redirectTo) {\n redirectTo(props.redirectTo);\n }\n }\n\n return (\n
    \n
  • \n {props.text}\n {props.children}\n
  • \n
\n
);\n}","import * as React from 'react';\n\nimport { IWork } from '@models';\n\n\ninterface IUseWorkFormSettings {\n work: IWork,\n scope: string\n}\n\nexport const useWorkFormSettings = (props: IUseWorkFormSettings) => {\n const settings = React.useRef(props.work.settingsObj ?? {});\n\n const hiddenFields: string[] = (settings.current[props.scope + 'HiddenFields'] as string[]) ?? [];\n\n const show = (field: string) => {\n return hiddenFields.includes(field) === false;\n }\n\n return {\n show,\n }\n}","import { IUserIdentity, IJob } from '@models';\n// @ts-ignore\nimport Parser from './parser';\n\nexport type Invocation = { type: 'invocation', name: string, args: any };\nexport type PathSegment = string | Invocation;\n\nexport interface IExpression {\n type: string;\n op?: string;\n left?: IExpression;\n right?: IExpression;\n values?: [PathSegment];\n value?: string | boolean | number | IExpression;\n // invoke\n name?: string;\n args?: any[] | any;\n}\n\ntype Ctx = any;\n\nconst isSingleValue = (expr: IExpression) =>\n expr.type === 'boolean'\n || expr.type === 'number'\n || expr.type === 'string';\n\nconst specialTerms = [\n 'contains',\n 'departmentIds',\n 'mainDepartment',\n 'impliedDepartment',\n 'list',\n 'isWorker',\n 'isContractor',\n 'isGestor',\n 'responsible',\n 'impliedResponsible',\n 'getObliqueDepartment',\n 'getProductiveDepartment',\n];\n\nconst invoke = ({ name, args }: IExpression, value: any, root: any = {}) => {\n if (name === 'Contains') {\n if (typeof (value) === 'string') {\n return value?.includes(evaluate(args));\n }\n else if (value?.includes) {\n return value?.includes(evaluate(args));\n } else {\n console.error('Expressions: error invoking Contains', value, args);\n return null;\n }\n } else if (name == \"List.Union\" || name == 'Union') {\n const a = evaluate(args[0], root);\n const b = evaluate(args[1], root);\n return a.find((r: any) => b.includes(r)) != undefined;\n } else if (name == 'DepartmentIds' || name == 'departmentIds') {\n if (value && value.departments) {\n return value.departments.map((i: any) => typeof (i) == 'number' ? i : i.departmentId ?? i.id);\n } else {\n return false;\n }\n } else if (name == 'MainDepartment' || name == 'mainDepartment') {\n const job = value as IJob;\n if (job && job.departments) {\n return job\n .departments\n .find(d => d.isMain)?.departmentId ?? null;\n } else {\n console.log('Expressions: evaluating MainDepartment on no job', value);\n return false;\n }\n } else if (name == 'ImpliedDepartment' || name == 'impliedDepartment') {\n const job = value as IJob;\n if (job && job.departments) {\n return job\n .departments\n .find(d => d.isMain == false)?.departmentId ?? null;\n } else {\n console.log('Expressions: evaluating ImpliedDepartment on no job', value);\n return false;\n }\n } else if (name == 'Responsible' || name == 'responsible') {\n const job = value as IJob;\n if (job && job.departments) {\n return job\n .departments\n .find(d => d.isMain)?.responsibleId ?? null;\n } else {\n console.log('Expressions: evaluating responsible on no job', value);\n return false;\n }\n } else if (name == 'ImpliedResponsible' || name == 'impliedResponsible') {\n const job = value as IJob;\n if (job && job.departments) {\n return job\n .departments\n .find(d => d.isMain == false)?.responsibleId ?? null;\n } else {\n console.log('Expressions: evaluating implied responsible on no job', value);\n return false;\n }\n } else if (name == 'HasDepartment') {\n let identity = value as IUserIdentity;\n\n if (value == undefined) {\n identity = root.identity;\n }\n if (identity && identity.departments) {\n const needle = evaluate(args, root);\n const res = identity.departments.find((d: any) => {\n if (typeof d === 'number') {\n return d === needle;\n }\n else if ('departmentId' in d) {\n return d.departmentId === needle;\n } else {\n return d.id === needle;\n }\n });\n return res != undefined;\n } else {\n console.log('Expressions: evaluating HasDepartment on identity with no departments', value, args);\n return false;\n }\n } else if (name == 'AnyDepartment') {\n let identity = value as IUserIdentity;\n\n if (value == undefined) {\n identity = root.identity;\n }\n if (identity && identity.departments) {\n const needles = evaluate(args, root);\n const res = identity\n .departments\n .find(d => needles.indexOf(d) >= 0) != undefined;\n return res;\n } else {\n console.log('Expressions: evaluating AnyDepartment on identity with no departments', value);\n return false;\n }\n } else if (name == 'GetObliqueDepartment' || name == 'getObliqueDepartment') {\n if (value && value.departments && root && root.work && root.work.departments) {\n const userDepartmentIds = value.departments;\n const workDepartments = root.work.departments;\n const userDepartments = workDepartments.filter((department: any) => userDepartmentIds.includes(department.id));\n return userDepartments.find((d: any) => d.isOblique)?.id ?? null;\n } else {\n console.log('Expressions: evaluating GetObliqueDepartment on no department', value);\n return false;\n }\n } else if (name == 'GetProductiveDepartment' || name == 'getProductiveDepartment') {\n if (value && value.departments && root && root.work && root.work.departments) {\n const userDepartmentIds = value.departments;\n const workDepartments = root.work.departments;\n const userDepartments = workDepartments.filter((department: any) => userDepartmentIds.includes(department.id));\n return userDepartments.find((d: any) => d.isOblique == false)?.id ?? null;\n } else {\n console.log('Expressions: evaluating GetProductiveDepartment on no department', value);\n return false;\n }\n }\n else if (name == 'HasPolicy') {\n let identity = value as IUserIdentity;\n\n if (value == undefined) {\n identity = root.identity;\n }\n\n if (identity && identity.policies) {\n const res = identity.policies.indexOf(evaluate(args)) >= 0;\n return res;\n } else {\n console.log('Expressions: evaluating HasPolicy on non identity', value);\n return false;\n }\n } else if (name == 'HasWorker') {\n let identity = value as IUserIdentity;\n\n if (value == undefined) {\n identity = root.identity;\n }\n\n if (identity && identity.workerIds) {\n const needle = evaluate(args, root);\n const res = identity.workerIds.find(d => d == needle) != undefined;\n return res;\n } else {\n console.log('Expressions: evaluating HasWorker on non identity', value);\n return false;\n }\n } else if (name?.toLowerCase() == 'isworker') {\n let identity = value as IUserIdentity;\n\n if (value == undefined) {\n identity = root.identity;\n }\n\n if (identity && identity.roles) {\n const res = identity.roles.indexOf(\"worker\") >= 0;\n return res;\n }\n else {\n console.log('Expressions: evaluating IsWorker on non identity', value);\n return false;\n }\n } else if (name?.toLowerCase() == 'iscontractor') {\n let identity = value as IUserIdentity;\n\n if (value == undefined) {\n identity = root.identity;\n }\n\n if (identity && identity.roles) {\n const res = identity.roles.indexOf(\"contractor\") >= 0;\n return res;\n }\n else {\n console.log('Expressions: evaluating IsContractor on non identity', value);\n return false;\n }\n } else if (name?.toLowerCase() == 'isgestor') {\n let identity = value as IUserIdentity;\n\n if (value == undefined) {\n identity = root.identity;\n }\n\n if (identity && identity.roles) {\n const res = identity.roles.indexOf(\"gestor\") >= 0;\n return res;\n } else {\n console.log('Expressions: evaluating IsGestor on non identity', value);\n return false;\n }\n }\n}\n\nconst evaluatePathSegment = (segment: PathSegment, values: any[], root: any = {}) => {\n const currentCtx = values[values.length - 1];\n\n if (typeof (segment) === 'string' && !specialTerms.includes(segment)) {\n return currentCtx[segment];\n }\n else if (specialTerms.includes(segment as string)) {\n return invoke({ name: segment as string, type: 'string' }, currentCtx, root);\n }\n else { // invocation\n return invoke(segment as IExpression, currentCtx, root);\n }\n}\n\nconst toIdentifier = (s: string) => {\n return s.substring(0, 1).toLowerCase() + s.substring(1);\n}\n\nconst evaluatePath = (values: PathSegment[], ctx: Ctx) => {\n const stack: any[] = [ctx];\n const segments: PathSegment[] = values.map(s =>\n typeof (s) === 'string' ? toIdentifier(s as string) : s);\n\n for (const v of segments) {\n stack.push(evaluatePathSegment(v, stack, ctx));\n }\n\n return stack[stack.length - 1];\n}\n\nconst evaluateBinaryOperator: (expr: IExpression, ctx: Ctx) => any = (expr: IExpression, ctx: Ctx) => {\n if (expr.op === 'AND') {\n return evaluate(expr.left!, ctx) && evaluate(expr.right!, ctx);\n }\n else if (expr.op === 'OR') {\n return (evaluate(expr.left!, ctx) === true) || (evaluate(expr.right!, ctx) === true);\n }\n else if (expr.op === '==') {\n return evaluate(expr.left!, ctx) === evaluate(expr.right!, ctx);\n }\n else if (expr.op === '!=') {\n return evaluate(expr.left!, ctx) !== evaluate(expr.right!, ctx);\n }\n else if (expr.op === '<') {\n return evaluate(expr.left!, ctx) < evaluate(expr.right!, ctx);\n }\n else if (expr.op === '>') {\n return evaluate(expr.left!, ctx) > evaluate(expr.right!, ctx);\n }\n else if (expr.op === '<=') {\n return evaluate(expr.left!, ctx) <= evaluate(expr.right!, ctx);\n }\n else if (expr.op === '>=') {\n return evaluate(expr.left!, ctx) >= evaluate(expr.right!, ctx);\n }\n else if (expr.op === '+') {\n return evaluate(expr.left!, ctx) + evaluate(expr.right!, ctx);\n }\n else if (expr.op === '-') {\n return evaluate(expr.left!, ctx) - evaluate(expr.right!, ctx);\n }\n else if (expr.op === '*') {\n return evaluate(expr.left!, ctx) * evaluate(expr.right!, ctx);\n }\n else if (expr.op === '/') {\n return evaluate(expr.left!, ctx) / evaluate(expr.right!, ctx);\n }\n}\n\nexport function evaluate(expr: IExpression, ctx: Ctx = undefined) {\n if (isSingleValue(expr)) {\n return expr.value!;\n }\n else if (expr.type === 'binaryop') {\n return evaluateBinaryOperator(expr, ctx);\n }\n else if (expr.type === 'path') {\n return evaluatePath(expr.values!, ctx);\n }\n}\n\nexport function evalAndParse(expression: string, ctx: Ctx = undefined) {\n // console.log('evalAndParse', expression, ctx);\n return evaluate(parse(expression), ctx);\n}\n\nexport function parse(expression: string) {\n return Parser.parse(expression.trim()) as IExpression;\n}\n","import * as React from 'react';\n\nimport {\n IRequirement, IRequirementStatus, IRequirementStatusType,\n RequirementStatusTypes, RequirementStatusFlag\n} from '@models/requirements';\nimport {\n classNames, Timeline, useMemoized, useResolveName, useTranslation,\n useSearch,\n} from '@components';\nimport DateUtils from '@utils/date-utils';\nimport './ViewRequirementHistory.scss';\nimport { flatten } from '@utils';\nimport { IUserIdentity, IWork } from '@models';\nimport dateUtils from '@utils/date-utils';\nimport { IDocumentVersion } from '@models/documents';\n\nexport interface IProps {\n requestClose: Function;\n requirement: IRequirement;\n requirementStatusTypes: IRequirementStatusType[];\n appUsers: IUserIdentity[];\n work: IWork;\n canDownload: boolean;\n}\n\n// Para ordenar los eventos de los documentos .... asociando la fecha del estado que genera la version\nconst associateStatusToDocument = (r: any, status: IRequirementStatus[]) => {\n // localizamos el estado mas cercano\n const documentTime = DateUtils.parseDate(r.date).getTime();\n const state = status.find(s => Math.abs(DateUtils.parseDate(s.dateTime).getTime() - documentTime) <= 1 * 1000);\n if (state) {\n return { ...r, date: state.dateTime };\n }\n else {\n return r;\n }\n}\n\ntype ValidationRow = {\n validationUserId: number;\n validationHolderType: string;\n validationHolderName?: string;\n validatedState: string;\n validatedDate: string;\n}\n\ntype RequirementStatusRow = IRequirementStatus & {\n workerName?: string;\n}\n\ntype DocumentVersionRow = IDocumentVersion & {\n appUserName?: string;\n}\n\nexport function ViewRequirementHistory(props: IProps) {\n const { t } = useTranslation();\n\n const requirementStatus = useSearch({\n search: 'requirements/requirement_status',\n workId: props.work.id,\n normalizeKeys: true,\n filters: {\n workId: props.work.id,\n requirementId: props.requirement.id,\n },\n });\n\n const documentVersions = useSearch({\n search: 'requirements/requirement_document_versions',\n workId: props.work.id,\n normalizeKeys: true,\n filters: {\n workId: props.work.id,\n requirementId: props.requirement.id,\n },\n });\n\n const resolveStatusTypeName = useResolveName(props.requirementStatusTypes);\n const resolveStatusType = (st: number, flags: number | undefined = undefined) => {\n if (flags === RequirementStatusFlag.EXPIRED) {\n return t('requirement.expired');\n }\n else {\n return t(resolveStatusTypeName(st));\n }\n };\n\n const userName = useMemoized((id: number | string, name: string | undefined = undefined) => {\n if (typeof id == 'string') {\n return id;\n }\n if (name != undefined) {\n return name;\n }\n else {\n const u = props.appUsers.find(u => u.id == id);\n\n if (u) {\n return u.userName;\n }\n else {\n return props.work.defaultEmail;\n }\n }\n });\n\n const validations = useSearch({\n workId: props.work.id,\n search: 'requirements/validations_all',\n filters: {\n requirementId: props.requirement.id,\n workId: props.work.id,\n },\n map: (r: ValidationRow) => {\n return {\n status: t(r.validatedState),\n className: r.validatedState,\n type: 'validation',\n // date: dateUtils.toIso8601(r.validatedDate),\n date: r.validatedDate,\n icon: r.validatedState == 'requirement.validation.pending'\n ? 'pi pi-loading'\n : r.validatedState == 'requirement.validation.validated'\n ? 'pi pi-check'\n : 'pi pi-exclamation-triangle',\n appUserId: r.validationUserId,\n appUserName: r.validationHolderName,\n }\n }\n });\n\n // const documentEvents: any[] = flatten(\n // (props.requirement.documents ?? [])\n // .map(s => versions.sort((b, a) => a.id - b.id).map((v, i) => ({ ...v, documentId: s.document.id, version: versions.length - i })) ?? []))\n // .map((dv: any) => ({\n // status: dv.name,\n // version: dv.version,\n // type: 'document',\n // date: dv.dateTime,\n // icon: 'pi pi-file pointer',\n // href: `/api/files/${props.requirement.workId}/document/${dv.documentId}/version/${dv.id}`,\n // documentId: dv.id,\n // appUserId: dv.userId,\n // })).map(d => associateStatusToDocument(d, props.requirement.status));\n\n const documentEvents: any[] =\n (documentVersions.value ?? [])\n .map((dv: any) => ({\n status: dv.name,\n version: dv.version,\n type: 'document',\n date: dv.dateTime,\n icon: 'pi pi-file pointer',\n href: `/api/files/${props.requirement.workId}/document/${dv.documentId}/version/${dv.id}`,\n documentId: dv.id,\n appUserName: dv.userName,\n })).map(d => associateStatusToDocument(d, props.requirement.status));\n\n const requirementStatusRows = requirementStatus.value ?? [];\n\n const noteEvents = useSearch({\n search: 'requirements/requirement_notes',\n workId: props.work.id,\n map: (r: any) => ({\n id: r.id,\n className: 'notes',\n date: r.date,\n status: r.status,\n type: 'note',\n icon: 'pi pi-comments',\n appUserId: r.appUserId,\n }),\n filters: {\n workId: props.work.id,\n requirementId: props.requirement.id,\n }});\n // props.requirement.status\n const legacy = requirementStatusRows\n .filter((s) => s.remarks && s.remarks != \"\")\n .map((n) => ({\n id: n.id,\n className:\n n.statusTypeId == RequirementStatusTypes.NOT_VALIDATED\n ? \"danger\"\n : \"notes\",\n date: n.dateTime,\n icon:\n n.statusTypeId == RequirementStatusTypes.NOT_VALIDATED\n ? \"pi pi-exclamation-triangle\"\n : \"pi pi-comments\",\n status: n.remarks,\n isCurrent: n.statusTypeId != undefined ? n.isCurrent : false,\n appUserId: n.createdById,\n associatedDocumentId:\n n.statusTypeId == RequirementStatusTypes.NOT_VALIDATED\n ? props.requirement.incidences\n .filter((i) => i.requirementId == n.requirementId)\n .filter(\n (i) =>\n dateUtils.fromUtc(n.dateTime).getDate() ==\n dateUtils.fromUtc(i.creationDate).getDate() &&\n dateUtils.fromUtc(n.dateTime).getDay() ==\n dateUtils.fromUtc(i.creationDate).getDay() &&\n dateUtils.fromUtc(n.dateTime).getFullYear() ==\n dateUtils.fromUtc(i.creationDate).getFullYear() &&\n dateUtils.fromUtc(n.dateTime).getHours() ==\n dateUtils.fromUtc(i.creationDate).getHours() &&\n dateUtils.fromUtc(n.dateTime).getMinutes() ==\n dateUtils.fromUtc(i.creationDate).getMinutes()\n )\n .map((i) => i.documentVersionId)\n .shift()\n : undefined,\n }));\n\n const statusEvents: any[] =\n requirementStatusRows\n .map(s => ({\n id: s.id,\n status: resolveStatusType(s.statusTypeId, s.flag),\n statusTypeId: s.statusTypeId,\n flag: s.flag,\n date: s.dateTime,\n displayDate: s.displayDateTime,\n className: `status-type-${s.statusTypeId} status-type-flag-${s.flag}`,\n type: 'status',\n icon: 'pi pi-circle-off',\n appUserId: s.validatedBy,\n appUserName: s.workerName,\n isCurrent: s.isCurrent,\n }));\n\n const removeEvents = statusEvents\n .filter(s => s.flag == RequirementStatusFlag.FILE_REMOVED)\n .map(s => ({\n id: s.id + '_file_removed',\n className: 'file-removed',\n date: s.date,\n type: 'file-removed',\n icon: 'pi pi-trash',\n status: t('requirements.file-removed'),\n appUserId: s.appUserId,\n }));\n\n const events: any[] =\n flatten([statusEvents, documentEvents, removeEvents, legacy, noteEvents.value, validations.value ?? []])\n .sort((a, b) => a.date == b.date ? b.id - a.id : b.date.localeCompare(a.date));\n\n for (const e of events) {\n if (e.associatedDocumentId != null) {\n const docIndex = events.findIndex(d => d.documentId == e.associatedDocumentId);\n const noteIndex = events.findIndex(d => d.associatedDocumentId == e.associatedDocumentId);\n const doc = events[docIndex];\n const note = events[noteIndex];\n if (docIndex > noteIndex) {\n events[noteIndex] = doc;\n events[docIndex] = note;\n }\n }\n }\n\n if (events.length > 1) {\n events[0].icon != undefined ? undefined : events[0].icon = events[0].statusTypeId == RequirementStatusTypes.PENDING\n ? 'pi pi-clock'\n : events[0].statusTypeId == RequirementStatusTypes.NOT_VALIDATED\n ? 'pi pi-ban'\n : events[0].kind == 'incidence'\n ? 'pi pi-exclamation-triangle'\n : 'pi pi-check';\n events.forEach((e) => {\n //si tiene statusTypeId y es isCurrent es el ultimo estado\n if (e.statusTypeId != undefined && e.isCurrent == true) {\n e.last = true;\n }\n if (e.statusTypeId != undefined && !e.isCurrent && e.statusTypeId == RequirementStatusTypes.NOT_LOADED) {\n e.first = true;\n }\n });\n }\n\n return (\n
\n (\n <>\n
\n {item.leftIcon && (\n \n )}\n {item.type == \"document\" && props.canDownload ? (\n \n \n \n {item.status}\n \n {t(\"version\")} {item.version}\n \n \n \n ) : item.last || item.first ? (\n {item.status}\n ) : (\n {item.status}\n )}\n {item.displayDate && (\n \n {DateUtils.formatDateTimeFromUtc(item.displayDate)}\n \n )}\n
\n \n )}\n content={(item) => (\n <>\n {(item.statusTypeId == RequirementStatusTypes.PENDING ||\n item.statusTypeId == RequirementStatusTypes.NOT_LOADED) &&\n item.flag != RequirementStatusFlag.EXPIRED ? (\n \n {DateUtils.formatDateTimeFromUtc(item.date)}{\" \"}\n \n ) : (\n \n {DateUtils.formatDateTimeFromUtc(item.date)} -{\" \"}\n {userName(item.appUserId, item.appUserName)}\n \n )}\n \n )}\n marker={(item) => }\n value={events}\n />\n
\n \n
\n
\n );\n}\n","import { IContractor, IDepartment, IMachinery, IResourceHasStatus, IWorker } from './resources';\nimport { IUserIdentity } from './identity';\nimport { IPropertyGroup } from './works';\nimport { IRequirement } from './requirements';\n\nimport { get as i18n } from '../i18n';\n\nexport interface IJobStatus {\n id: number;\n jobId: number;\n jobStatusTypeId: number;\n userId: number;\n dateTime: Date;\n remarks: string;\n isCurrent: boolean;\n}\n\nexport interface IJob {\n id: number;\n name: string;\n code?: string;\n workId: number;\n description?: string;\n workspaceId?: number;\n activityTypeId?: number;\n workShiftId?: number;\n contractTypeId?: number;\n startDate: Date;\n endDate?: Date;\n remarks?: string;\n preventiveResourceId?: number;\n isActive: boolean;\n informationLoaded?: boolean;\n\n currentStatus?: IJobStatus;\n\n departments: IJobHasDepartment[];\n contractors: IJobHasContractor[];\n machineries: IJobHasMachinery[];\n properties?: IPropertyGroup[];\n\n countDepartmentsTotal?: number;\n countDepartmentsAuthorized?: number;\n countMachineriesTotal?: number;\n countMachineriesAuthorized?: number;\n countWorkersTotal?: number;\n countWorkersAuthorized?: number;\n countContractorsTotal?: number;\n countContractorsAuthorized?: number;\n hierarchyLevel?: number;\n}\n\nexport interface IJobHasContractor extends IResourceHasStatus {\n id: number;\n contractor: IContractor;\n contractorId: number;\n jobId: number;\n startDate?: Date;\n jobsDescription: string;\n contactName: string;\n contactEmail: string;\n contactPhone: string;\n contactSurname: string;\n shipmentNumber: string;\n parentId?: number;\n\n properties?: IPropertyGroup[];\n requirements?: IRequirement[];\n workId?: number;\n parentContractorId?: number;\n}\n\nexport interface IJobHasDepartment extends IResourceHasStatus {\n id?: number;\n jobId: number;\n departmentId: number;\n responsibleId: number;\n dateTime?: Date;\n isMain?: boolean;\n\n responsible?: IWorker;\n department?: IDepartment;\n\n parentId?: number;\n}\n\nexport interface IJobHasContractorAppUser {\n id?: number;\n jobContractorId: number;\n appUserId: number;\n startDate: Date;\n endDate?: Date;\n\n appUser?: IUserIdentity;\n}\n\nexport interface IStatusType {\n name: string;\n isInitial?: boolean;\n isFinal?: boolean;\n styleClassName?: string;\n}\n\nexport interface IJobHasMachineryStatus {\n statusTypeId: number;\n statusType: IStatusType;\n dateTime: Date;\n description?: string;\n isCurrent?: boolean;\n userId: number;\n}\n\nexport interface IJobHasMachinery extends IResourceHasStatus {\n id: number;\n jobId: number;\n machineryId?: number;\n jobHasContractorId?: number;\n startDate: Date;\n endDate?: Date;\n\n properties?: IPropertyGroup[];\n\n machinery?: IMachinery;\n\n machineryName?: string;\n machineryCode?: string;\n machineryTypeId?: number;\n machinerySubTypeId?: number;\n machineryPrefixLicenseNumber?: string;\n machineryLicenseNumber?: string;\n machinerySuffixLicenseNumber?: string;\n\n hasDelayedRevokation?: boolean;\n\n requirements?: IRequirement[];\n}\n\nexport interface IJobHasWorker extends IResourceHasStatus {\n id: number;\n jobId: number;\n workerId: number;\n jobHasContractorId?: number;\n\n fullName?: string;\n\n startDate?: Date|string;\n\n hasDelayedRevokation?: boolean;\n\n job?: IJob;\n worker?: IWorker;\n properties?: IPropertyGroup[];\n requirements?: IRequirement[];\n}\n\nfunction parseJobProperty(jobProperty: IPropertyGroup) {\n if (jobProperty.value && !jobProperty.valueObj) {\n return { ...jobProperty, valueObj: JSON.parse(jobProperty.value) };\n }\n else {\n return jobProperty;\n }\n}\n\nexport function parseJob(job: IJob) {\n const aJob = { ...job };\n\n if (aJob.properties) {\n aJob.properties = aJob.properties.map(parseJobProperty);\n }\n\n return aJob;\n}\n\nexport enum JobStatusType {\n PENDING = 1,\n INFORMATION_LOADED = 2,\n AUTHORIZED = 3,\n FINALIZED = 4,\n NOT_AUTHORIZED = 5,\n}\n\nexport const jobStatusTypes = [\n { id: JobStatusType.PENDING, name: i18n('job.status.pending') },\n { id: JobStatusType.INFORMATION_LOADED, name: i18n('job.status.informationLoaded') },\n { id: JobStatusType.AUTHORIZED, name: i18n('job.status.authorized') },\n { id: JobStatusType.FINALIZED, name: i18n('job.status.finalized') },\n { id: JobStatusType.NOT_AUTHORIZED, name: i18n('job.status.notauthorized') },\n];\n\nexport enum JobLogType {\n ACCESS_JOB_INFORMATION = 1,\n}\n\nexport interface IJobLog {\n id: number;\n jobId: number;\n userId: number;\n dateTime: Date;\n jobLogType: JobLogType;\n}\n","import * as React from 'react';\nimport { IFrontendModule, RenderComponent } from '../../../../GStore.Modules/FrontEnd';\nimport { IdentityState } from '../store/identity';\n\nexport default class ModuleManager {\n // TODO: hacer identity obligatorio, borrando las instancias manuales del moduleManager,\n // utilizando solo la instancia del store\n private id: String = 'init';\n\n constructor(\n private modules: IFrontendModule[],\n private identity: IdentityState | null = null,\n aId: String | null = null\n ) {\n this.id = aId ?? this.id;\n }\n\n public getModule(name: string) {\n return this.modules.find(m => m.name == name);\n }\n\n public getId() {\n return this.id;\n }\n\n public componentProperties(key: string, defaultValue: T | undefined = undefined) {\n const filterModules = this\n .modules\n .filter(m => m.componentProperties);\n\n return filterModules\n .reduce(\n (value: any, module: IFrontendModule) =>\n value ? value : module.componentProperties[key] as T,\n defaultValue);\n }\n\n public useComponentProperties(key: string, defaultValue: T | undefined = undefined) {\n const [value, setValue] = React.useState(defaultValue);\n\n React.useEffect(() => {\n setValue(this.componentProperties(key, defaultValue));\n }, [this.modules]);\n\n return value;\n }\n\n public renderComponent(\n key: string,\n ctx: any,\n originalComponent: React.FunctionComponent,\n force: boolean = false) {\n const module: RenderComponent | undefined = this\n .modules\n .map(m => m.renderComponent?.(key, ctx))\n .find(m => m !== undefined && m !== null);\n const component = module?.(ctx);\n\n // no devolvemos el componente original\n // salvo que ya esten cargados los modulos o el parametro force == true\n if (this.id != 'init' || force) {\n return component ?? originalComponent(ctx);\n }\n else {\n return ;\n }\n }\n\n public filterDependency(\n key: string,\n ctx: any | undefined = {}) {\n const dependencyCtx = {\n ...ctx,\n identity: this.identity,\n };\n\n const filterModules = this\n .modules\n .filter(m => m.filterDependency);\n\n return (d: T) =>\n filterModules\n .reduce(\n (value: boolean, module: IFrontendModule) =>\n value && module.filterDependency!(key, dependencyCtx)(d),\n true);\n }\n\n public injectComponents(\n key: string,\n ctx: any,\n dependencies: any) {\n for (const m of this.modules) {\n m.injectComponent?.(key, ctx, dependencies);\n }\n }\n\n public requirePermissionMemo(\n key: string,\n ctx: any,\n defaultValue: boolean | undefined,\n deps: any[],\n ) {\n const [value, setValue] = React.useState(defaultValue);\n\n const load = async () => {\n const p = await this.requirePermission(key, ctx, defaultValue);\n setValue(p);\n };\n\n React.useEffect(() => {\n load();\n }, deps);\n\n return value;\n }\n\n public async requirePermission(key: string, ctx: any, defaultValue: boolean | undefined) {\n const filterModules = this\n .modules\n .filter(m => m.hasPermission);\n\n if (filterModules != null && filterModules.length > 0) {\n let res = true;\n for (const f of filterModules) {\n const moduleRes = await awaitIfPromise(f.hasPermission!(key, ctx, defaultValue));\n res = res && moduleRes;\n }\n return res;\n }\n else {\n return defaultValue;\n }\n }\n\n public async hasPermission(key: string, ctx: any) {\n const filterModules = this\n .modules\n .filter(m => m.hasPermission);\n\n let res = true;\n for (const f of filterModules) {\n res = res && await awaitIfPromise(f.hasPermission!(key, ctx, undefined));\n }\n\n return res;\n }\n\n public injectDataColumns(name: string, ctx: T) {\n // consultamos a los módulos si tienen alguna columna que mostrar\n const columns = [];\n\n for (const m of this.modules) {\n if (m.injectDataColumns) {\n columns.push(...m.injectDataColumns(name, ctx));\n }\n }\n\n return columns;\n }\n\n public injectAction(name: string, ctx: T) {\n for (const m of this.modules) {\n if (m.injectAction) {\n return m.injectAction(name, ctx);\n }\n }\n }\n\n public format(key: string, data: T, ctx: any | undefined = undefined) {\n const filterModules = this\n .modules\n .filter(m => m.format != null);\n\n if (filterModules != null) {\n let res = true;\n for (const f of filterModules) {\n const moduleRes = f.format!(key, data, ctx);\n if (moduleRes) {\n return moduleRes;\n }\n }\n }\n\n return undefined;\n }\n\n public validateData(key: string, data: T, ctx: any | undefined = undefined) {\n const filterModules = this\n .modules\n .filter(m => m.validateData != null);\n\n if (filterModules != null) {\n\n for (const f of filterModules) {\n const moduleRes = f.validateData!(key, data, ctx);\n if (moduleRes?.valueOf) {\n return moduleRes;\n }\n }\n }\n\n return true;\n }\n\n public async getMenuItems(ctx: any) {\n const items = [];\n\n for (const m of this.modules) {\n if (m.getMenuItems) {\n const receivedItems = await awaitIfPromise(m.getMenuItems(ctx));\n items.push(...receivedItems);\n // items.push(...m.getMenuItems(ctx));\n }\n }\n\n return items;\n }\n}\n\nfunction awaitIfPromise(arg0: T | Promise): Promise {\n if (arg0 instanceof Promise) {\n return arg0;\n }\n else {\n return Promise.resolve(arg0);\n }\n}\n","import * as React from 'react';\n\nimport { classNames, useTranslation } from '@components';\nimport './ImageViewer.scss';\n\nexport interface IProps {\n className?: string;\n url: string;\n}\n\nexport function ImageViewer(props: IProps) {\n const { t } = useTranslation();\n\n return
\n \n
\n}","import * as React from 'react';\n\nimport * as PdfJS from 'pdfjs-dist';\nPdfJS.GlobalWorkerOptions.workerSrc = '/js/pdf.worker.min.js';\n\nimport { delay } from '@utils';\nimport { Loading, classNames, useCallbackState, useLoading, useMessage, useTranslation } from '@components';\n\nimport './PdfViewer.scss';\n\nexport interface IProps {\n className?: string;\n url: string;\n}\n\nenum FitMode {\n NOFIT = 1,\n WIDTH = 2,\n}\n\nfunction Page({ doc, rotation, page, fitMode, containerRect, zoom }: {\n doc: any, page: any, rotation?: number, fitMode: FitMode, containerRect: any, zoom?: any\n}) {\n const canvasRef = React.useRef();\n const isRendering = React.useRef(false);\n const loading = useLoading();\n\n const context = React.useRef();\n\n const clearCanvas = () => {\n context.current?.clearRect(0, 0, canvasRef.current?.width, canvasRef.current?.height);\n context.current?.beginPath();\n context.current?.rect(0, 0, canvasRef.current?.width, canvasRef.current?.height);\n }\n\n const hideCanvas = () => {\n if (canvasRef.current) {\n canvasRef.current.style.display = 'none';\n }\n }\n\n const showCanvas = () => {\n if (canvasRef.current) {\n canvasRef.current.style.display = 'block';\n }\n }\n\n const renderPage = async (page: any) => {\n isRendering.current = true;\n let scale = fitMode === FitMode.NOFIT\n ? 1 * zoom\n : (canvasRef.current.width / page.view[2]);\n\n let viewport = page.getViewport({ scale: scale, rotation: rotation });\n if (rotation) {\n viewport.rotation = rotation;\n }\n\n const canvas = canvasRef.current;\n if (!context.current) {\n context.current = canvas.getContext('2d');\n }\n\n clearCanvas();\n\n if (fitMode === FitMode.WIDTH) {\n canvas.width = page.view[2] * scale;\n }\n else {\n canvas.width = canvas.parentElement.clientWidth;\n }\n\n const pageHeight = Math.max(page.view[3], page.view[2]);\n\n if ((rotation ?? viewport.rotation) % 180 == 90) {\n canvas.height = pageHeight * scale;\n }\n else {\n canvas.height = pageHeight * scale;\n }\n\n await page.render({\n canvasContext: context.current,\n viewport,\n });\n showCanvas();\n setTimeout(() => {\n isRendering.current = false;\n loading.stop();\n }, 1000);\n }\n\n const tryToRenderPage = async (page: any) => {\n loading.start();\n hideCanvas();\n clearCanvas();\n\n while (isRendering.current) {\n await delay(400);\n }\n renderPage(page);\n }\n\n React.useEffect(() => {\n tryToRenderPage(page);\n }, [doc, page, rotation, fitMode, zoom]);\n\n return
\n {/**\n loading.renderModal({ text: t('document.loading') }) **/}\n \n
\n}\n\nfunction base64PDFToBlobUrl(blob: any) {\n const url = URL.createObjectURL(blob);\n return url;\n}\n\nfunction PdfViewerImpl(props: IProps) {\n const [data, setData] = React.useState('');\n const [loading, setLoading] = React.useState(true);\n\n React.useEffect(() => {\n setLoading(true);\n fetch(props.url + '/view.pdf')\n .then(response => response.blob())\n .then(blob => {\n setData(base64PDFToBlobUrl(blob));\n setLoading(false);\n });\n }, [props.url]);\n\n return (
\n {loading && }\n {!loading &&\n }\n
);\n}\n\nexport const PdfViewer = React.memo(PdfViewerImpl, (prev, next) => prev.url == next.url);\n\nfunction PdfViewerImplOld(props: IProps) {\n const { t } = useTranslation();\n\n const [pages, setPages] = React.useState([]);\n\n const docRef = React.useRef();\n const containerRef = React.useRef();\n const canvasContainerRef = React.useRef();\n const [fitMode, setFitMode] = React.useState(FitMode.NOFIT);\n const [currentPage, setCurrentPage] = React.useState(1);\n const [totalPages, setTotalPages] = React.useState(1);\n const [rotation, setRotation] = React.useState(0);\n const [zoom, setZoom] = React.useState(1);\n const [loading, setLoading] = useCallbackState(true);\n\n const messages = useMessage();\n\n React.useEffect(() => {\n }, []);\n\n const loadAllPages = async (doc: any, total: number, url: string) => {\n const pgs: any = [];\n\n for (let i = 0; i < total; i++) {\n const page = await doc.getPage(i + 1);\n page.url = url;\n pgs.push(page);\n }\n\n return pgs;\n }\n\n const initialize = async (url: string) => {\n try {\n setLoading(true);\n setPages([]);\n setFitMode(FitMode.NOFIT);\n\n messages.clear();\n const doc = await PdfJS.getDocument({url, disableFontFace: false, useSystemFonts: true}).promise;\n docRef.current = doc;\n\n const allPages = await loadAllPages(doc, doc.numPages, url);\n\n setTotalPages(doc.numPages);\n setZoom(1);\n\n setLoading(false, () => {\n setPages(allPages);\n });\n }\n catch (e) {\n console.log(e);\n messages.setError('Error rendering pdf');\n }\n }\n\n React.useEffect(() => {\n initialize(props.url);\n }, [props.url]);\n\n const toggleRotate = () => {\n setRotation(r => r + 90 % 360);\n };\n\n const zoomIn = () => {\n setZoom(z => z * 1.4);\n };\n\n const zoomOut = () => {\n setZoom(z => z / 1.4);\n };\n\n return
\n
\n \n {currentPage} / {totalPages}\n \n\n
\n toggleRotate()}>\n \n \n setFitMode(FitMode.NOFIT)}\n title={t('Adjust height')}>\n \n \n zoomIn()}\n title={t('Zoom In')}\n disabled={fitMode == FitMode.WIDTH}\n hidden={fitMode == FitMode.WIDTH}>\n \n \n zoomOut()}\n title={t('Zoom Out')}\n disabled={fitMode == FitMode.WIDTH}\n hidden={fitMode == FitMode.WIDTH}>\n \n \n setFitMode(FitMode.WIDTH)}\n title={t('Adjust width')}>\n \n \n
\n
\n
\n {/** {props.url} */}\n {!loading && pages.map((p, i) => {\n const key = props.url + '_' + i;\n\n return \n })}\n {messages.hasError() &&
\n {messages.render()}\n
}\n
\n
;\n}\n","import * as React from 'react';\n\nimport { ImageViewer } from './ImageViewer';\nimport { PdfViewer } from './PdfViewer';\nimport { useTranslation, Chip } from '@components';\n\nexport interface IProps {\n className?: string;\n mimeType?: string;\n url: string;\n}\n\nconst isImage = (mime?: string) => mime?.startsWith('image/');\nconst isPdf = (mime?: string) => mime?.startsWith('application/pdf');\n\nexport function hasViewer(mime?: string) {\n return isImage(mime) || isPdf(mime);\n}\n\nexport function DocumentViewer(props: IProps) {\n const { t } = useTranslation();\n if (isImage(props.mimeType)) {\n return ;\n }\n else if (isPdf(props.mimeType)) {\n return ;\n }\n else {\n return
\n {t('documentPreviewNotSupported')}\n\n \n\n \n \n {t('Download file')}\n \n
;\n }\n}","import { Action, Reducer } from 'redux';\n\nimport { IJob, ISecurity, IUserIdentity, IWork } from '../models';\nimport * as AppStore from './app';\nimport Security, { EMPTY_SECURITY } from '../security';\n\nexport interface IdentityState {\n user?: IUserIdentity;\n security: ISecurity;\n workerIds: number[];\n contractorIds?: number[];\n}\n\nenum Types {\n OnLoginAction = '[IDENTITY] LOGIN',\n OnWorkSelected = '[USER] SELECT WORK',\n OnJobSelected = '[USER] ON JOB LOADED'\n}\n\nexport interface OnLoginAction {\n type: Types.OnLoginAction;\n user: IUserIdentity;\n workerIds: number[];\n contractorIds: number[];\n}\n\nexport interface OnWorkSelected {\n type: Types.OnWorkSelected;\n data: IWork;\n}\n\nexport interface OnJobSelected {\n type: Types.OnJobSelected;\n data: IJob;\n}\n\nexport type KnownAction = OnLoginAction | OnLoginAction | OnWorkSelected | OnJobSelected;\n\nexport const actionCreators = {\n setUser: (user: IUserIdentity) => (dispatch: Function) => {\n dispatch({ type: Types.OnLoginAction, user });\n },\n initializeApp: () => (dispatch: Function) => {\n AppStore.actionCreators.initialize()(dispatch);\n },\n};\n\nexport const reducer: Reducer = (state: IdentityState | undefined, incomingAction: Action): IdentityState => {\n if (state === undefined) {\n return { user: undefined, security: EMPTY_SECURITY, workerIds: [], contractorIds: [], };\n }\n\n const action = incomingAction as KnownAction;\n switch (action.type) {\n case Types.OnLoginAction:\n // console.log('permissions on login work', action);\n return {\n user: action.user,\n security: new Security(action.user)\n .withWorkerIds(action.user.workerIds ?? [])\n .withContractorIds(action.user.contractorIds ?? []),\n workerIds: action.user.workerIds ?? [],\n contractorIds: action.user.contractorIds ?? [],\n };\n case Types.OnWorkSelected:\n // console.log('permissions on load work', action.data);\n return {\n ...state,\n security: new Security(state.user!)\n .withWorkerIds(state.workerIds)\n .withContractorIds(state.contractorIds ?? [])\n .withContext({\n workId: action.data.id,\n work: action.data,\n }),\n }\n case Types.OnJobSelected:\n // console.log('permissions set job context', action);\n return {\n ...state,\n security: state.security.withContext({\n jobId: action.data.id,\n job: action.data,\n }),\n }\n\n default:\n return state;\n }\n};\n","import { Action, Reducer } from 'redux';\nimport { ICountry, IDocumentType } from '../models';\nimport { IRequirementExpirationType, IRequirementTypeKind } from '../models/requirements';\nimport * as AdminActions from './actions/admin';\nimport { actionCreators as N } from './notifications';\n\nexport interface IConstantsState {\n countries: ICountry[];\n documentTypes: IDocumentType[];\n requirementTypeKinds: IRequirementTypeKind[];\n requirementExpirationTypes: IRequirementExpirationType[];\n}\n\nconst setcountriestype = '[CONSTANTS] SET COUNTRIES';\nconst setdocumenttypes = '[CONSTANTS] SET DOCUMENT TYPES';\nconst initializetype = '[CONSTANTS] INITIALIZE';\n\nexport interface SetCountriesAction {\n type: '[CONSTANTS] SET COUNTRIES';\n countries: ICountry[];\n}\n\nexport interface InitializeAction {\n type: '[CONSTANTS] INITIALIZE';\n value: IConstantsState;\n}\n\nexport interface SetDocumentTypesAction {\n type: '[CONSTANTS] SET DOCUMENT TYPES';\n documentTypes: IDocumentType[];\n}\n\nexport type KnownAction = SetDocumentTypesAction | SetCountriesAction | InitializeAction | {type: undefined};\n\nconst loadDocumentTypes = async (dispatch: Function) => {\n const resp = await AdminActions.getDocumentTypes();\n const types = resp.data.documentTypes\n .filter((d: IDocumentType) => d.isActive);\n\n dispatch({\n type: setdocumenttypes,\n documentTypes: types,\n });\n}\n\nexport const actionCreators = {\n setCountries: (countries: ICountry[]) => (dispatch: Function) => {\n dispatch({\n type: setcountriestype,\n countries,\n });\n },\n loadDocumentTypes: () => (dispatch: Function) => {\n loadDocumentTypes(dispatch);\n },\n saveDocumentType: (dt: IDocumentType) => async (dispatch: Function) => {\n dispatch(N.startLoading({\n ctx: 'admindocumenttypes',\n action: 'save',\n }));\n await AdminActions.saveDocumentType(dt);\n await loadDocumentTypes(dispatch);\n\n dispatch(N.success({\n ctx: 'admindocumenttypes'\n }));\n\n dispatch(N.stopLoading({\n ctx: 'admindocumenttypes',\n action: 'save',\n }));\n },\n removeDocumentType: (id: number) => async (dispatch: Function) => {\n dispatch(N.startLoading({\n ctx: 'admindocumenttypes',\n action: 'remove',\n }));\n await AdminActions.removeDocumentType(id);\n await loadDocumentTypes(dispatch);\n\n dispatch(N.success({\n ctx: 'admindocumenttypes'\n }));\n\n dispatch(N.stopLoading({\n ctx: 'admindocumenttypes',\n action: 'remove',\n }));\n },\n initialize: (value: IConstantsState) => (dispatch: Function) => {\n dispatch({\n type: initializetype,\n value,\n })\n }\n};\n\nexport const reducer: Reducer = (state: IConstantsState | undefined, incomingAction: Action): IConstantsState => {\n if (state === undefined) {\n return {\n countries: [],\n documentTypes: [],\n requirementExpirationTypes: [],\n requirementTypeKinds: [],\n };\n }\n\n const action = incomingAction as KnownAction;\n switch (action.type) {\n case setcountriestype:\n return { ...state, countries: action.countries };\n case initializetype:\n return { ...state, ...action.value };\n case setdocumenttypes:\n return { ...state, documentTypes: action.documentTypes };\n default:\n return state;\n }\n};\n","import * as React from 'react';\n\nimport { Message, useLoading, useRemoteData, useSearch, useSearchFirst, useTranslation } from '@components';\nimport { IRequirement, IRequirementHasDocument } from '@models/requirements';\nimport { getDocumentInfo, getDocumentLastVersion } from '@store/actions/documents';\nimport { formatFileSize } from '@utils';\nimport { IOption } from '@models';\nimport * as DateUtils from '@utils/date-utils';\n\nimport './RequirementDocumentInfo.scss';\nimport { IDocumentVersion } from '@models/documents';\n\nfunction PropertyList({ properties, title }: { properties: any, title?: string }) {\n const { t } = useTranslation();\n const keys = Object.keys(properties);\n\n const resolveValue = (value: any, name: string) => {\n if (name.includes('fileSize')) {\n return formatFileSize(value);\n }\n else {\n if (value.length > 60) {\n return {value.substring(0, 60) + '...'}\n } else {\n return value;\n }\n }\n }\n\n return
\n {title && {title}}\n {keys\n .filter(k => properties[k])\n .map((k, i) =>
\n \n {resolveValue(properties[k], k)}\n
)}\n
\n}\n\ntype JobR = {\n jobName?: string;\n jobCode?: string;\n}\n\ntype RequirementInfoR = {\n jobName?: string,\n jobCode?: string,\n\n contractorCode?: string,\n contractorName?: string,\n\n machineryCode?: string,\n machineryName?: string,\n machineryType?: string;\n machinerySubType?: string;\n machineryPrefixLicenseNumber?: string;\n machineryLicenseNumber?: string;\n machinerySuffixLicenseNumber?: string;\n\n workerCode?: string;\n workerName?: string;\n workerSurname?: string;\n}\n\nexport function RequirementDocumentInfo({\n document,\n requirement,\n jobId,\n lastDocumentVersion\n}:\n {\n document?: IRequirementHasDocument,\n requirement: IRequirement,\n jobId?: number,\n lastDocumentVersion?: IDocumentVersion\n }) {\n\n const [lv, setLv] = React.useState();\n const loading = useLoading();\n const { t } = useTranslation();\n const infoSearch = useSearch({\n workId: requirement.workId,\n search: 'requirements/requirementInfo',\n filters: {\n requirementId: requirement.id,\n },\n dependencies: [requirement, jobId]\n });\n const jobSearch = useSearchFirst({\n workId: requirement.workId,\n search: 'requirements/job',\n filters: {\n jobId: jobId ?? 0,\n },\n dependencies: [requirement, jobId]\n });\n const data = useRemoteData>(getDocumentInfo, {\n parameters: [requirement.workId, document?.document.id],\n map: (v) => {\n if (v != undefined) {\n return v.hasValue\n ? { ...v, value: JSON.parse(v.value) }\n : v\n }\n else {\n return v;\n }\n },\n });\n\n const [info, setInfo] = React.useState();\n\n const getLastVersion = async () => {\n if (document && !lastDocumentVersion) {\n const d = await getDocumentLastVersion(requirement.workId ?? 0, document?.document.id);\n setLv(d);\n }\n else if (lastDocumentVersion) {\n setLv(lastDocumentVersion);\n }\n }\n\n React.useEffect(() => {\n if (infoSearch.value && infoSearch.value.length > 0) {\n setInfo(infoSearch.value[0]);\n }\n }, [infoSearch.value]);\n\n React.useEffect(() => {\n data.query();\n getLastVersion();\n }, [document]);\n\n // const lastVersion = document?.document;\n\n return
\n {infoSearch.renderLoading()}\n {loading.render()}\n {data.renderLoading()}\n\n {/** {requirement.id} {document?.document?.id} */}\n
\n {t('Requirement data')}\n
\n \n {DateUtils.formatFullTime(lv?.dateTime)}\n
\n {document?.dateTime &&
\n \n {DateUtils.formatFullTime(lv?.dateTime)}\n
}\n\n {info && info.contractorName &&
\n \n {info.contractorName}\n
}\n\n {info && info.contractorName &&
\n \n {info.contractorCode}\n
}\n\n {info && info.workerName &&
\n \n {info.workerName} {info.workerSurname}\n
}\n\n {info && info.workerCode &&
\n \n {info.workerCode}\n
}\n\n {info && info.machineryName &&
\n \n {info.machineryName}\n
}\n\n {info && info.machineryType &&
\n \n {info.machineryType}\n
}\n\n {info && info.machinerySubType &&
\n \n {info.machinerySubType}\n
}\n\n\n {info && info.machineryLicenseNumber &&
\n \n \n {info.machineryPrefixLicenseNumber}\n {info.machineryLicenseNumber}\n {info.machinerySuffixLicenseNumber}\n \n
}\n\n {info && info.machineryName &&
\n \n {info.machineryName}\n
}\n {info && info.jobName &&
\n \n {info.jobName}\n
}\n {jobSearch.value &&
\n \n {jobSearch.value.jobCode}\n
}\n {jobSearch.value &&
\n \n {jobSearch.value.jobName}\n
}\n
\n\n
\n\n {data.value && <>\n {data.value.isError &&\n }\n {data.value.hasValue &&\n }\n }\n
;\n}\n","import { ISecurity, IUserIdentity } from '@models';\nimport { hasPermission } from '@utils/security';\n\nexport const commonPermissions: string[] = [\n 'contractors.invite',\n 'jobs.create',\n 'jobs.remove',\n 'jobs.contractors.add',\n 'jobs.contractors.associateappuser',\n 'jobs.contractors.edit',\n 'jobs.contractors.processrequests',\n 'jobs.contractors.savejobcontractorappuser',\n 'jobs.contractors.request',\n 'jobs.contractors.removejobcontractor',\n 'jobs.contractors.removejobcontractorappuser',\n 'jobs.machineries.add',\n 'jobs.machineries.remove',\n 'job.notify-information-loaded',\n 'job.contractors.invite',\n 'contractors.access',\n 'contractors.access.create',\n 'contractors.force.status',\n 'contractors.invitations.list',\n 'machineries.add',\n 'workers.add',\n 'workers.force.status',\n 'workers.complete.remove',\n 'workers.qualifications', // Ver cualificaciones de los trabajadores\n 'workers.qualifications.edit', // Editar cualificaciones de los trabajadores\n 'machineries.force.status',\n 'machineries.complete.remove',\n 'job.authorize',\n 'job.contractors.remove',\n 'job.workers.remove',\n 'job.machineries.remove',\n 'contractors.add',\n 'jobs.forceStatus',\n 'work.add.folder',\n 'work.add.file',\n 'contractors.edit', // Editar datos del contratista\n 'job.addSubc', // Añadir subcontratista al trabajo\n 'jobHasContractor.remove', // Borrar contratista asociado al trabajo\n 'jobHasMachinery.remove', // Borrar maquinaria asociada al trabajo\n 'jobHasMachinery.add', // Añadir maquinaria al trabajo\n 'jobHasWorker.remove', // Borrar trabajador asociado al trabajo\n 'jobHasResource.createRequirement', // Crear requerimiento libre de un recurso\n 'jobHasWorker.add', // Añadir trabajador al trabajo\n 'job.requirements.create', // Crear requerimiento libre del trabajo\n 'job.requirements.upload', // Subir documentación en los requerimientos del trabajo\n 'jobs.edit', // Editar trabajo\n 'machinery.edit', // Editar datos de la maquinaria\n 'requirements.upload', // Subir documentación de los requerimientos\n 'requirements.note', // Comentar requerimientos\n 'workers.save', // Edita y guarda trabajadores\n 'job.created.notification', // Notificar creación del contrato\n 'notify.after.job.created', // Notificar después de cargar la información\n 'notify.req.incidence', // Notificar incidencia a quien tenga este permiso\n 'job.properties',\n 'patente.add', // Añadir puntuación de la patente\n 'jobs.resources.validate',\n 'job.revoke', // Revocar trabajo\n 'job.finalize', // Finalizar trabajo\n 'jobs.machineries.new.add', // Añadir maquinaria nueva al trabajo\n 'restrict.resources', // Restringir recursos\n];\n\nexport default class Security implements ISecurity {\n public readonly user: IUserIdentity;\n private ctx: any = {};\n private workerIds: number[] = [];\n private contractorIds: number[] | undefined = undefined;\n\n constructor(user: IUserIdentity) {\n this.user = user;\n }\n\n public getContractorIds() {\n return this.contractorIds ?? [];\n }\n\n public withContractorIds(ids: number[]) {\n this.contractorIds = ids;\n\n return this;\n }\n\n public getWorkerIds() {\n return this.workerIds ?? [];\n }\n\n public withWorkerIds(ids: number[]) {\n this.workerIds = ids;\n\n return this;\n }\n\n public setContext(ctx: any) {\n this.ctx = ctx;\n }\n\n public withContext(ctx: any) {\n this.ctx = {\n ...this.ctx,\n ...ctx\n };\n return this;\n }\n\n public hasRole(role: string) {\n return this.user.roles.includes(role);\n }\n\n public hasWorker(id?: number) {\n return id != undefined && this.workerIds.includes(id!);\n }\n\n public hasContractor(id?: number) {\n return id != undefined && (this.contractorIds?.includes(id!) ?? false);\n }\n\n public hasPolicy(policy: string) {\n const term = policy.toLowerCase();\n return this?.user?.policies?.map(p => p.toLowerCase())?.includes(term) ?? false;\n }\n\n public isAdmin() {\n return this.user?.roles?.includes('admin') ?? false;\n }\n\n public isContractor() {\n return this.user?.roles?.includes('contractor') ?? false;\n }\n\n public isWorker() {\n return this.user?.roles?.includes('worker') ?? false;\n }\n\n public isGestor() {\n return this.user?.roles?.includes('gestor') ?? false;\n }\n\n public isGestorOrWorker() {\n return this.isGestor() || this.isWorker();\n }\n\n public isGestorOrContractor() {\n return this.isGestor() || this.isContractor();\n }\n\n public hasPermission(perm: string, explicit?: boolean) {\n // console.log('permission hasPermission ??', this);\n const has = hasPermission(perm, {\n user: this.user,\n ...this.ctx,\n explicit,\n });\n return this.isGestor() || has;\n }\n}\n\nexport const EMPTY_SECURITY = new Security({\n id: 0,\n userName: '',\n email: '',\n roles: [],\n policies: [],\n departments: [],\n workFunctions: [],\n});\n","import {createBrowserHistory} from 'history';\n\nexport const history = createBrowserHistory({\n forceRefresh: false\n});\n\nexport default history;","import * as React from 'react';\n\nexport const KeyCodes = {\n ENTER: 13,\n}\n\nexport const keyIsEnter = (e: React.KeyboardEvent) => {\n return e.keyCode === KeyCodes.ENTER;\n}","import * as React from 'react';\n\nimport { connect } from 'react-redux';\nimport { ApplicationState } from '../store';\n\nexport const userContainer = (f: React.FC) =>\n connect((state: ApplicationState) => ({\n ...state.identity,\n ...state.user,\n moduleManager: state.modules.moduleManager,\n work: state.user.work,\n }),\n {}\n )(f as any) as any // eslint-disable-line @typescript-eslint/no-explicit-any\n;\n\nimport ManageJobDepartmentsContainer from './jobs/ManageJobDepartmentsContainer';\nimport HelpDeskSupport from './HelpDeskSupportContainer';\n\n// TODO: Exportar todos los containers a modulos\n\nexport {\n ManageJobDepartmentsContainer,\n HelpDeskSupport,\n};","import * as React from 'react';\nimport { createPortal } from 'react-dom';\n\nexport interface IProps {\n container: string;\n children: any;\n delay?: number;\n}\n\nconst getContainer = (n: string) => {\n if (n.startsWith('#')) {\n return document.getElementById(n.substring(1));\n }\n else {\n return document.querySelector(n);\n }\n}\n\nexport function Portal(props: IProps) {\n const container = getContainer(props.container);\n\n const [time, setTime] = React.useState(0);\n\n React.useEffect(() => {\n if (props.delay) {\n setTimeout(() => setTime(new Date().getTime()), props.delay);\n }\n }, [props.delay]);\n\n if (container) {\n return createPortal(props.children, container, `${time}`);\n }\n else {\n return null;\n }\n}","import * as React from 'react';\n\nimport { Loading } from './Loading';\n\ntype DataRenderF = (data: any) => any;\n\nexport function DataLoader({children, provider}: {children: DataRenderF, provider: Function}) {\n const [data, setData] = React.useState(undefined);\n\n React.useEffect(() => {\n provider().then(setData);\n }, [provider]);\n\n if (data) {\n return children(data);\n }\n else {\n return ;\n }\n}","import * as React from 'react';\n\nimport { classNames, useConfirm, useTranslation } from '@components';\nimport { MessageIcon } from './MessageIcon';\nimport { IMessage, translateNotificationIcon, messageTitle } from '@models/notifications';\nimport { IOption, ISecurity, IWork } from '@models';\nimport { NotificationMessageDisplayName } from './NotificationMessageDisplayName';\nimport { NotificationMessageEffect } from './NotificationMessageEffect';\nimport * as DateUtils from '@utils/date-utils';\n\nimport './NotificationsMessages.scss';\n\ntype ClearMessageF = (id: string) => Promise>;\n\nexport interface IProps {\n clearMessage: ClearMessageF;\n messages: IMessage[];\n requestClose: Function;\n security: ISecurity;\n work: IWork;\n workId: number;\n}\n\nfunction NotificationMessage({clearMessage, message, onSelect} : {clearMessage: Function, message: IMessage, onSelect: Function}) {\n const { t } = useTranslation();\n\n const confirm = useConfirm({\n message: t('notifications.message.close-confirm'),\n accept: () => clearMessage(message.id),\n });\n\n return
\n
\n {message.icon &&\n }\n \n {DateUtils.format(message.date, 'd-m-y h:i')}\n onSelect(message)}>\n {messageTitle(message)}\n \n \n confirm(message, e)}\n title={t('notifications.message.close')}>\n \n \n
\n \n
\n}\n\nexport function NotificationsMessages(props: IProps) {\n const [selectedMessage, setSelectedMessage] = React.useState();\n\n return
\n {selectedMessage &&\n setSelectedMessage(undefined)}\n resolveMessage={props.clearMessage}\n security={props.security}\n workId={props.workId}\n work={props.work} />}\n\n {props.messages.map(m =>\n )}\n
\n}\n","import * as React from 'react';\n\nimport { search } from '@store/actions/search';\nimport { delay } from '@utils';\nimport { useLoading, useMessage } from '@utils/hooks';\n\nexport interface IProps {\n delay?: number;\n search: string;\n filters?: any;\n workId: number;\n normalizeKeys?: boolean;\n lazy?: boolean;\n map?: Function;\n dependencies?: any;\n}\n\nexport default function useSearch(props: IProps) {\n const [data, setData] = React.useState([]);\n const loading = useLoading();\n const messages = useMessage();\n const [isCompleted, setIsCompleted] = React.useState(false);\n\n const initialize = loading.wrap(async (filters: any = undefined) => {\n const resp = await search(props.workId, props.search, {\n normalizeKeys: props.normalizeKeys ?? true,\n filters: filters ?? props.filters,\n });\n\n if (props.delay) {\n await delay(props.delay);\n }\n\n messages.set(resp);\n const rawData = (resp.hasValue && props.map)\n ? resp.value.map((r, i) => props.map!(r, i))\n : resp.value;\n\n setIsCompleted(true);\n setData(rawData);\n\n return rawData;\n });\n\n React.useMemo(() => {\n if (!props.lazy) {\n initialize();\n }\n }, props.dependencies ?? []);\n\n const clear = () => {\n setData([]);\n }\n\n return {\n isCompleted,\n value: data,\n loading,\n messages,\n renderLoading: loading.render,\n clear,\n doSearch: (filters: any = undefined) => initialize(filters),\n };\n}\n","import * as React from 'react';\n\nimport {\n Message,\n Select,\n useConfirm,\n useDataTable, useLoading, useNumberState, useTranslation, useResolveName, useSearch\n} from '@components';\nimport { departmentIsProductive, IDepartment, IJob, IWorker, IJobHasDepartment, IWork } from '@models';\n\nexport interface IProps {\n departments: IDepartment[];\n getJobDepartments: Function;\n job: IJob;\n readonly?: boolean;\n removeJobHasDepartment: Function;\n saveJobHasDepartment: Function;\n work: IWork;\n}\n\nfunction DepartmentSelector({ departments, readonly, relation, onChange }: {\n departments: IDepartment[], readonly?: boolean, relation: IJobHasDepartment, onChange: Function\n}) {\n const loading = useLoading();\n const selectedDepartment = useNumberState(relation.departmentId);\n const selectedWorker = useNumberState(relation.responsibleId);\n\n const departmentResolver = useResolveName(departments);\n\n const [workers, setWorkers] = React.useState([]);\n const workerResolver = useResolveName(workers, { name: 'fullName' });\n\n React.useEffect(() => {\n const dep = departments.find(d => d.id == selectedDepartment.value);\n const values = (dep?.workers ?? [])\n .map(w => ({ ...w, fullName: `${w.name} ${w.surname ?? ''}` }));\n setWorkers(values);\n }, [selectedDepartment.value]);\n\n const update = (field: 'departmentId' | 'responsibleId') => {\n return loading.wrap(async (ev: any) => {\n if (field === 'departmentId') {\n selectedDepartment.set(ev);\n }\n else {\n selectedWorker.set(ev);\n }\n const rel = {\n id: relation.id,\n dateTime: relation.dateTime,\n jobId: relation.jobId,\n departmentId: relation.departmentId,\n responsibleId: relation.responsibleId,\n [field]: parseInt(ev.target.value)\n };\n await onChange(rel);\n });\n }\n\n return
\n {readonly && <>\n \n \n }\n {!readonly && <>\n \n \n }\n {loading.render()}\n
\n}\n\nexport function ManageJobDepartments(props: IProps) {\n const { t } = useTranslation();\n const loading = useLoading();\n const [error, setError] = React.useState();\n const [showAdd, setShowAdd] = React.useState(false);\n const [workers, setWorkers] = React.useState([]);\n const selectedDepartment = useNumberState();\n const selectedWorker = useNumberState();\n\n const doRemoveJobHasDepartment = loading.wrap(async (relation: IJobHasDepartment) => {\n setError(undefined);\n\n const resp = await props.removeJobHasDepartment(props.work.id, props.job.id, relation.id);\n if (!resp.hasValue) {\n setError(resp.error);\n }\n\n await refresh();\n });\n\n const availableResponsibles = useSearch({\n workId: props.work.id,\n search: 'jobList/oblique.responsibles',\n filters: {\n workId: props.work.id,\n },\n });\n\n const [data, setData] = React.useState(props.job.departments);\n const confirmRemove = useConfirm({\n message: t('Are you sure to remove the selected department relation?'),\n accept: doRemoveJobHasDepartment\n });\n\n React.useEffect(() => {\n const dep = props.departments.find(d => d.id == selectedDepartment.value);\n setWorkers(\n (dep?.workers ?? [])\n .filter(w => availableResponsibles.value.find(r => r.id == w.id) != undefined)\n .map((w: IWorker) => ({ ...w, fullName: `${w.name} ${w.surname}` })));\n selectedWorker.set(undefined);\n }, [selectedDepartment.value]);\n\n const updateRelation = loading.wrap(async (rel: IJobHasDepartment) => {\n setError(undefined);\n\n const resp = await props.saveJobHasDepartment(props.work.id, props.job.id, rel);\n if (!resp.hasValue) {\n setError(resp.error);\n }\n\n await refresh();\n });\n\n const refresh = async () => {\n const resp = await props.getJobDepartments(props.work.id, props.job.id);\n setData(resp);\n }\n\n const toggleAdd = (ev: any) => {\n ev.preventDefault();\n ev.stopPropagation();\n setShowAdd(v => !v);\n }\n\n const dataTable = useDataTable({\n className: 'transparent',\n columns: [\n {\n render: (jr: IJobHasDepartment) =>\n d.isOblique != true)}\n onChange={updateRelation}\n relation={jr} />\n },\n {\n className: 'td-sm',\n render: (jr: IJobHasDepartment) => jr.isMain\n ? \n : null\n },\n ],\n data: data,\n actions: [\n {\n icon: 'trash',\n tooltip: t('Remove job department'),\n onClick: confirmRemove,\n disabled: (r: IJobHasDepartment) => r.isMain || props.readonly\n }\n ]\n });\n\n const doSaveJobHasDepartment = loading.wrap(async (..._: any) => {\n setError(undefined);\n\n const relation = {\n jobId: props.job.id,\n departmentId: selectedDepartment.value,\n responsibleId: selectedWorker.value,\n dateTime: new Date(),\n };\n\n const resp = await props.saveJobHasDepartment(props.work.id, props.job.id, relation);\n if (!resp.hasValue) {\n setError(resp.error);\n }\n\n setShowAdd(false);\n await refresh();\n });\n\n const departments = props.departments.filter(departmentIsProductive);\n\n return
\n {dataTable()}\n {showAdd &&
\n
\n \n \n
\n
\n \n
\n \n \n \n
\n
}\n\n {!props.readonly &&\n
\n \n \n \n {t('Add department')}\n \n
}\n {error &&
}\n
\n}\n","import * as React from 'react';\nimport { connect } from 'react-redux';\nimport { ApplicationState } from '../../store';\nimport * as JobsStore from '../../store/jobs';\nimport { ManageJobDepartments } from '@components/jobs/ManageJobDepartments';\n\nexport default connect(\n (state: ApplicationState) => ({\n departments: state.user.departments,\n work: state.user.work,\n ...JobsStore.plainActions,\n }),\n JobsStore.actionCreators,\n)(ManageJobDepartments as any) as any;","import { connect } from 'react-redux';\nimport { ApplicationState } from '../store';\n\nimport HelpDeskSupport from '../components/HelpDeskSupport';\nimport * as UserStore from '../store/user';\n\nexport default connect(\n (state: ApplicationState) => ({\n workId: state.user?.work?.id,\n ...UserStore.plainActions,\n }),\n {},\n)(HelpDeskSupport as any) as any; // eslint-disable-line @typescript-eslint/no-explicit-any\n","import * as React from 'react';\n\nimport './HelpDeskSupport.scss';\nimport { useForm, useLoading, useTranslation, useToast, F, ValidationBuilder } from '@components';\nimport { IHelpDeskItem, IOption } from '@models';\nimport { formatFileSize } from '@utils';\n\ntype CreateHelpDeskItemT = (item: IHelpDeskItem, files: File[]) => Promise>;\ntype OnCloseT = (ok: boolean) => void;\n\nexport interface IProps {\n createHelpDeskItem: CreateHelpDeskItemT;\n onClose: OnCloseT;\n workId: number;\n}\n\nexport default function HelpDeskSupport(props: IProps) {\n const { t } = useTranslation();\n const loading = useLoading();\n\n const toast = useToast();\n const inputFileRef = React.useRef();\n const [selectedFiles, setSelectedFiles] = React.useState([]);\n\n const form = useForm({\n initialValues: {\n name: '',\n email: '',\n subject: '',\n description: '',\n workId: props.workId,\n },\n validateOnMount: true,\n validate: ValidationBuilder\n .create()\n .email('email')\n .notEmpty('email')\n .notEmpty('subject')\n .notEmpty('name')\n .lift(),\n });\n\n React.useEffect(() => {\n if (selectedFiles.length > 5) {\n setSelectedFiles(b => b.slice(0, 5));\n toast.show(t('maxFiles.error.5'), { severity: 'error' });\n }\n }, [selectedFiles]);\n\n\n const appendFile = (e: any) => {\n const files: any[] = [];\n for (let i = 0; i < e.target.files.length; i++) {\n files.push(e.target.files[i]);\n }\n setSelectedFiles(f => f.concat(files));\n }\n\n const selectFile = (e: any) => {\n inputFileRef.current.click();\n }\n\n const removeSelectedFile = (f: any) => {\n setSelectedFiles(a => a.filter(x => x != f));\n }\n\n const doSend = loading.wrap(async (e: any) => {\n const data = form.values;\n\n const res = await props.createHelpDeskItem(data, selectedFiles);\n if (res.error) {\n toast.show(t(res.error), { severity: 'error' });\n return;\n }\n props.onClose((res.hasValue && res.value) ?? false);\n });\n\n const dropHandler = (event: any) => {\n event.preventDefault();\n\n const files: File[] = [];\n\n if (event.dataTransfer.items) {\n for (let i = 0; i < event.dataTransfer.items.length; i++) {\n if (event.dataTransfer.items[i].kind === 'file') {\n const file = event.dataTransfer.items[i].getAsFile();\n files.push(file);\n }\n }\n }\n else {\n for (let i = 0; i < event.dataTransfer.files.length; i++) {\n files.push(event.dataTransfer.files[i]);\n }\n }\n\n setSelectedFiles(f => f.concat(files));\n }\n\n const dragOverHandler = (event: any) => {\n event.preventDefault();\n }\n\n return (
\n
\n {t('helpDesk.title')}\n
props.onClose(false)}>\n \n
\n
\n\n {toast.render()}\n\n
\n {loading.renderBox({ style: { margin: '50px' } })}\n\n {!loading.isLoading() && <>\n {t('helpDesk.contact')}\n\n \n {form.input('name', { autoFocus: true })}\n \n\n \n {form.input('email', { type: 'email' })}\n \n\n \n {form.input('subject')}\n \n\n \n {form.textarea('description', { rows: 8 })}\n \n\n \n \n\n appendFile(e)}\n ref={inputFileRef} />\n\n {t('helpDesk.filesTitle')}\n {t('helpDesk.filesSubTitle')}\n
\n\n {selectedFiles.length > 0 &&
\n \n {selectedFiles.length}\n  \n {selectedFiles.length == 1 && t('attachment-singular')}\n {selectedFiles.length > 1 && t('attachment-plural')}\n \n\n
\n {selectedFiles.map((f, i) =>
\n
\n {f.name}\n {formatFileSize(f.size)}\n
\n\n removeSelectedFile(f)} />\n
)}\n
\n
}\n\n {t('helpDesk.send')}\n }\n
\n );\n}\n","import { Action, Reducer } from 'redux';\nimport {\n IModuleInfo, IWork,\n} from '../models';\nimport { IFrontendModule, MenuItem } from '../../../../GStore.Modules/FrontEnd';\nimport ModuleManager from '../modules/ModuleManager';\nimport * as Utils from '@utils';\nimport * as DateUtils from '@utils/date-utils';\nimport * as Components from '@components';\nimport * as Containers from '../containers';\nimport * as Models from '@models';\nimport * as I18n from '../i18n';\nimport * as Search from './actions/search';\nimport * as Contractors from './actions/contractors';\nimport * as Documents from './actions/documents';\nimport * as Users from './actions/user';\nimport * as Requirements from './actions/requirements';\nimport * as Jobs from './actions/jobs';\nimport { ApplicationState } from './index';\nimport { IdentityState } from './identity';\n\nexport interface IModulesState {\n menuItems: MenuItem[];\n modules: RuntimeModule[];\n moduleManager: ModuleManager;\n}\n\nconst defaultState = {\n menuItems: [],\n modules: [],\n moduleManager: new ModuleManager([]),\n}\n\n// types\nenum Types {\n ModulesLoaded = '[MODULES] MODULES LOADED',\n ClearModules = '[MODULES] CLEAR MODULES',\n InitializeModuleManager = '[MODULES] INITIALIZE MODULE MANAGER',\n}\n\ntype RuntimeModule = IFrontendModule;\n\n// actions\nexport interface OnModulesLoaded {\n type: Types.ModulesLoaded;\n menuItems: MenuItem[],\n modules: RuntimeModule[],\n}\nexport interface ClearModules {\n type: Types.ClearModules,\n}\nexport interface OnInitializeModuleManager {\n type: Types.InitializeModuleManager,\n identity: IdentityState,\n modules: RuntimeModule[],\n}\n\nexport type KnownAction = ClearModules | OnModulesLoaded | OnInitializeModuleManager | { type: undefined };\n\nexport const plainActions = {\n};\n\n(window as any).__modules = {\n Containers,\n Components,\n Utils,\n DateUtils,\n Models,\n I18n,\n Search,\n Contractors,\n Documents,\n Users,\n Requirements,\n Jobs,\n};\n\nconst runtimeModules = (window as any).__modules;\n\nconst loadModule = async (m: IModuleInfo) => {\n if (runtimeModules[m.id]) {\n return runtimeModules[m.id];\n }\n\n const url = `/api/modules/${m.id}/resource/${m.frontendResource}`;\n // console.log('try to load module', m, url);\n const resp = await fetch(url);\n // console.log('try to load module', m, resp);\n const content = await resp.text();\n try {\n eval(content);\n } catch (ex) {\n console.error('error loading module', m, ex);\n }\n finally {\n runtimeModules[m.id].activate();\n runtimeModules[m.id].name = m.name;\n return runtimeModules[m.id];\n }\n}\n\nconst unloadModule = (m: RuntimeModule) => {\n m.deactivate();\n}\n\nfunction mergeI18n(a: any, b: any) {\n for (const key in b) {\n if (a[key]) {\n a[key] = { ...a[key], ...b[key] };\n }\n else {\n a[key] = b[key];\n }\n }\n return a;\n}\n\nexport const actionCreators = {\n clearModules: () => (dispatch: Function) => {\n dispatch({\n type: Types.ClearModules,\n });\n },\n initializeWork: (work: IWork, i18nResources: any = undefined) => async (dispatch: Function, getState: () => ApplicationState) => {\n const activeModules = work.activeModules ?? [];\n const state = getState();\n\n for (const m of state.modules.modules) {\n unloadModule(m);\n }\n\n const security = state.identity?.security;\n const menuItems = [];\n const modules = [];\n let modulesI18n = {};\n for (const moduleInfo of activeModules) {\n if (moduleInfo.hasFrontend) {\n const module = await loadModule(moduleInfo);\n modules.push(module);\n const moduleItems = await module.getMenuItems({\n work, security,\n });\n for(const mi of moduleItems) {\n menuItems.push(mi);\n }\n\n if (module.i18n) {\n modulesI18n = mergeI18n(modulesI18n, module.i18n);\n }\n }\n }\n\n if (Object.keys(i18nResources).length > 0) {\n I18n.installResources(i18nResources, modulesI18n);\n }\n\n dispatch({\n type: Types.InitializeModuleManager,\n identity: state.identity,\n modules: modules,\n });\n\n dispatch({\n type: Types.ModulesLoaded,\n menuItems: menuItems,\n modules: modules,\n });\n },\n};\n\nexport const reducer: Reducer = (state: IModulesState | undefined, incomingAction: Action): IModulesState => {\n if (state === undefined) {\n return defaultState;\n }\n\n const action = incomingAction as KnownAction;\n\n switch (action.type) {\n case Types.ClearModules:\n return defaultState;\n\n case Types.ModulesLoaded:\n return {\n ...state,\n modules: action.modules,\n menuItems: action.menuItems,\n };\n\n case Types.InitializeModuleManager:\n return {\n ...state,\n moduleManager: new ModuleManager(\n action.modules || state.modules,\n action.identity,\n Math.random() * new Date().getTime() + '_v',\n ),\n }\n\n default:\n return state;\n }\n};\n","import * as React from 'react';\n\nimport { useTranslation, Tag, } from '@components';\nimport { IMessage, MessageType, ResourceType } from '@models';\n\nexport interface IProps {\n message: IMessage;\n}\n\nexport function MessageIcon({ message }: IProps) {\n const { t } = useTranslation();\n\n if (message.notificationType === MessageType.JOB_CREATED) {\n return ;\n }\n else if (message.notificationType === MessageType.JOB_INFORMATION_LOADED) {\n return ;\n }\n else if (message.notificationType === MessageType.PENDING_REQUIREMENT\n && message.data.ResourceType === ResourceType.Worker) {\n return ;\n }\n else if (message.notificationType === MessageType.PENDING_REQUIREMENT\n && message.data.ResourceType === ResourceType.JobHasWorker) {\n return ;\n }\n else if (message.notificationType === MessageType.PENDING_REQUIREMENT\n && message.data.ResourceType === ResourceType.Machinery) {\n return ;\n }\n else if (message.notificationType === MessageType.PENDING_REQUIREMENT\n && message.data.ResourceType === ResourceType.JobHasMachinery) {\n return ;\n }\n else if (message.notificationType === MessageType.PENDING_REQUIREMENT\n && message.data.ResourceType === ResourceType.Contractor) {\n return ;\n }\n else if (message.notificationType === MessageType.PENDING_REQUIREMENT\n && message.data.ResourceType === ResourceType.JobHasContractor) {\n return ;\n }\n else if (message.notificationType === MessageType.REQUIREMENT_VALIDATED) {\n return ;\n }\n else if (message.notificationType === MessageType.INVALID_ITA) {\n return ;\n }\n else if (message.notificationType === MessageType.REQUIREMENT_INCIDENCE) {\n return ;\n }\n else if (message.notificationType === MessageType.SUBCONTRACTOR_REQUEST) {\n return ;\n }\n else if (message.notificationType === MessageType.SUBCONTRACTOR_REQUEST_ACCEPTED) {\n return ;\n }\n else if (message.notificationType === MessageType.SUBCONTRACTOR_REQUEST_REJECTED) {\n return ;\n }\n else if (message.notificationType === MessageType.JOB_FINALIZED) {\n return ;\n }\n else if (message.notificationType === MessageType.RESOURCE_AUTHORIZED) {\n return ;\n }\n else if (message.notificationType === MessageType.RESOURCE_REJECTED) {\n return ;\n }\n else if (message.notificationType === MessageType.JOB_AUTHORIZED) {\n return ;\n }\n else if (message.notificationType === MessageType.JOB_REVOKED) {\n return ;\n }\n else if (message.notificationType === MessageType.REQUIREMENT_EXPIRED) {\n return ;\n }\n else if (message.notificationType === MessageType.MODULE_MESSAGE) {\n return ;\n }\n else if (message.notificationType === MessageType.REQUIREMENT_NEAR_EXPIRATION) {\n return ;\n }\n else {\n return null;\n }\n}","import * as React from 'react';\n\nimport { IMessage, MessageType } from '@models/notifications';\n\nexport interface IProps {\n message: IMessage;\n}\n\nexport function NotificationMessageDisplayName({message}: IProps) {\n if (false && message.notificationType === MessageType.PENDING_REQUIREMENT && message.data) {\n return
\n {message.data.ResourceName}\n {message.data.RequirementName}\n
;\n }\n else {\n return null;\n }\n}","import * as React from 'react';\n\nimport { R, useForm, useTranslation, useLoading, Message } from '@components';\nimport { IRequirement, IRequirementType, IRequirementValidationData } from '@models/requirements';\nimport { IOption, IUserIdentity } from '@models';\nimport dateUtils from '@utils/date-utils';\n\ntype AcceptT = (requirement: IRequirement, data: IRequirementValidationData) => Promise>;\ntype RequirementCanBeValidatedF = (workId: number, requirementId: number) => Promise;\n\nexport interface IProps {\n loading?: boolean;\n requestAccept: AcceptT;\n requestClose: Function;\n requirement: IRequirement;\n requirementType: IRequirementType;\n workId: number;\n requirementCanBeValidated: RequirementCanBeValidatedF;\n user: IUserIdentity;\n}\n\nexport function AcceptRequirement(props: IProps) {\n const { t } = useTranslation();\n const loading = useLoading(true);\n const [canBeValidated, setCanBeValidated] = React.useState(false);\n\n const initialize = loading.wrap(async () => {\n const canBeValidated = await props.requirementCanBeValidated(\n props.requirement.workId,\n props.requirement.id);\n setCanBeValidated(canBeValidated || props.user.roles.includes('gestor'));\n });\n\n React.useEffect(() => {\n initialize();\n }, []);\n\n const form = useForm({\n initialValues: {\n remarks: '',\n expirationThreshold: (props.requirementType?.expirationThreshold),\n expirationDate: dateUtils.toUtc(props.requirement.expirationDate ?? undefined),\n },\n });\n\n const doAccept = () => {\n props.requestAccept(props.requirement, form.values);\n }\n\n const suggestions = (props.requirementType?.suggestions ?? []).map(s => s.name);\n\n const deleteDate = () => {\n form.setFieldValue('expirationDate', undefined);\n }\n\n return
\n
\n \n {form.autoCompleteTextArea(\n 'remarks',\n {suggestions, style: {minWidth: '400px', minHeight: '150px'}})}\n \n
\n \n {form.calendar('expirationDate')}\n \n \n
\n \n {form.input('expirationThreshold', {type: 'number'})}\n \n
\n {!canBeValidated &&\n
\n \n
}\n
\n \n {canBeValidated && }\n
\n
\n}\n","import { connect } from \"react-redux\";\nimport { ApplicationState } from '../../store';\nimport * as ConstantsStore from '@store/constants';\nimport * as RequirementsStore from '@store/requirements';\nimport * as App from '@store/app';\n\nimport { RejectRequirement } from '../../components/requirements/RejectRequirement';\n\nexport default connect(\n (state: ApplicationState) => ({\n ...RequirementsStore.plainActions,\n user: state.identity?.user,\n }),\n {},\n)(RejectRequirement as any) as any; // eslint-disable-line @typescript-eslint/no-explicit-any","import * as React from 'react';\n\nimport { R, ValidationBuilder, useForm, useTranslation, useLoading, useMessage, Message } from '@components';\nimport { IRequirement, IRequirementIncidence, IRequirementType, IRequirementValidationData } from '@models/requirements';\nimport { IOption, IUserIdentity } from '@models';\nimport { pushTemporalResource } from '@store/actions/documents';\n\ntype RequirementCanBeValidatedF = (workId: number, requirementId: number) => Promise;\n// type RejectT = (requirement: IRequirement, data: IRequirementValidationData, fileResourceId: string|undefined,\n// fileResourceName: string|undefined) => Promise>;\n\ntype saveRequirementIncidenceT = (\n workId: number,\n data: IRequirementIncidence,\n fileResourceId: string | undefined,\n fileResourceName: string | undefined) => Promise>;\n\nexport interface IProps {\n loading?: boolean;\n incidence?: IRequirementIncidence;\n requestClose: Function;\n // requestReject: RejectT;\n saveRequirementIncidence: saveRequirementIncidenceT;\n onRejected?: Function;\n requirement: IRequirement;\n requirementType: IRequirementType;\n user: IUserIdentity;\n requirementCanBeValidated: RequirementCanBeValidatedF;\n}\n\nexport function RejectRequirement(props: IProps) {\n const { t } = useTranslation();\n const fileRef = React.useRef();\n const loading = useLoading();\n const [selectedFile, setSelectedFile] = React.useState();\n const message = useMessage();\n const [canBeValidated, setCanBeValidated] = React.useState(false);\n\n const initialize = loading.wrap(async () => {\n const canBeValidated = await props.requirementCanBeValidated(\n props.requirement.workId,\n props.requirement.id);\n setCanBeValidated(canBeValidated || props.user.roles.includes('gestor'));\n });\n\n React.useEffect(() => {\n initialize();\n }, []);\n\n const defaultIncidence: IRequirementIncidence = {\n requirementId: props.requirement.id,\n creationDate: new Date(),\n remarks: '',\n createdById: props.user.id,\n };\n\n const form = useForm({\n initialValues: props.incidence ?? defaultIncidence,\n validateOnMount: true,\n validate: ValidationBuilder\n .new()\n .notEmpty('remarks', 'requirements.incidence.remarks-mandatory')\n .lift()\n });\n\n const doReject = loading.wrap(async () => {\n const fileResourceId = await getFileResourceId(selectedFile);\n const fileResourceName = await getFileResourceName(selectedFile);\n // await props.requestReject(props.requirement, form.values, fileResourceId, fileResourceName);\n const res = await props.saveRequirementIncidence(props.requirement.workId, form.values, fileResourceId, fileResourceName);\n message.set(res);\n if (props.onRejected) {\n props.onRejected(props.requirement);\n }\n props.requestClose();\n });\n\n const doSelectFile = () => {\n fileRef.current.click();\n }\n\n const onFileSelected = (event: any) => {\n const file = event.target.files[event.target.files.length - 1];\n setSelectedFile(file);\n }\n\n const getFileResourceId = async (file: File | undefined) => {\n if (file) {\n const res = await pushTemporalResource(file);\n // TODO: controlar posibles errores enviando el fichero al servidor\n return res.value;\n }\n else {\n return undefined;\n }\n };\n\n const getFileResourceName = async (file: File | undefined) => {\n if (file) {\n return file.name;\n }\n else {\n return undefined;\n }\n };\n\n const suggestions = (props.requirementType?.suggestions ?? []).map(s => s.name);\n\n return
\n
\n \n {form.autoCompleteTextArea('remarks', { autoFocus: true, suggestions, style: { minWidth: '400px', minHeight: '150px' } })}\n \n
\n
\n \n {selectedFile && {selectedFile.name}\n \n }\n \n
\n {!canBeValidated &&\n
\n \n
}\n \n {canBeValidated && }\n
\n
\n}\n","import * as React from 'react';\n\nimport { classNames, useDialogs, useLoading, useMemoized, useTranslation } from '@components';\nimport { flatten } from '@utils';\nimport { DocumentViewer } from '@components/viewers/DocumentViewer';\nimport { IOption, IUserIdentity } from '@models';\nimport {\n IRequirement, IRequirementGroup, IRequirementIncidence, IRequirementType,\n IRequirementValidationData, RequirementStatusTypes\n} from '@models/requirements';\nimport { unique } from '@utils';\nimport { RequirementDocumentInfo } from './RequirementDocumentInfo';\nimport './ValidateAllRequirements.scss';\nimport { AcceptRequirement } from './AcceptRequirement';\nimport RejectRequirementContainer from '@containers/requirements/RejectRequirementContainer';\nimport { requirementCanBeValidated } from '@store/actions/requirements';\n\ntype ValidateT = (workId: number, requirementId: number, validate: boolean, data: IRequirementValidationData, fileResourceId?: string | undefined,\n fileResourceName?: string | undefined) => Promise>;\n\ntype saveRequirementIncidenceT = (\n workId: number,\n data: IRequirementIncidence,\n fileResourceId: string | undefined,\n fileResourceName: string | undefined) => Promise>;\n\ntype GetDocumentT = (workId: number, documentId: number) => Promise>;\n\nexport interface IProps {\n getDocumentInfo: GetDocumentT;\n requirementJobs?: any;\n requestCancel: Function;\n requirements: IRequirement[];\n requirementTypes: IRequirementType[];\n requirementGroups: IRequirementGroup[];\n selectedRequirementId?: number;\n validateRequirement: ValidateT;\n loadMessages: Function;\n user: IUserIdentity;\n workId: number;\n}\n\nfunction RequirementDocumentsImpl({ requirement }: { requirement: IRequirement }) {\n const { t } = useTranslation();\n\n const selectedDocument = requirement.documents?.[0];\n var lastVersion = selectedDocument?.document.versions!.sort((a, b) => b.id - a.id)[0];\n\n if (selectedDocument) {\n const documentUrl = `/api/files/${requirement.workId}/document/${selectedDocument.document.id}/version/${lastVersion?.id}`;\n return \n }\n else {\n return
{t('No documents')}
\n }\n}\n\nconst RequirementDocuments = React.memo(\n RequirementDocumentsImpl,\n (prev, next) => prev.requirement.id == next.requirement.id);\n\nexport function ValidateAllRequirements(props: IProps) {\n const { t } = useTranslation();\n const loading = useLoading();\n\n const [pendingRequirements, setPendingRequirements] = React.useState([]);\n const [selectedRequirement, setSelectedRequirement] = React.useState();\n const [validatedRequirements, setValidatedRequirements] = React.useState([]);\n const [rejectedRequirements, setRejectedRequirements] = React.useState([]);\n\n const dialogs = useDialogs();\n\n React.useEffect(() => {\n if (selectedRequirement === undefined) {\n const r = props.requirements.find(r => r.id == props.selectedRequirementId);\n setSelectedRequirement(r);\n }\n }, [props.selectedRequirementId, props.requirements]);\n\n const resolveRequirementType = useMemoized((id: number) => {\n const allRequirementTypes = flatten(props.requirementGroups.map(g => g.requirementTypes ?? []));\n return allRequirementTypes.find(r => r.id == id);\n });\n\n const requirementIsPending = (r: IRequirement) => {\n const state = r.status.find(s => s.isCurrent);\n\n return state?.statusTypeId == RequirementStatusTypes.PENDING\n && !validatedRequirements.includes(r.id)\n && !rejectedRequirements.includes(r.id);\n };\n\n React.useEffect(() => {\n const pendingRequirements = unique(\n props.requirements.filter(requirementIsPending))\n .filter(r => validatedRequirements.indexOf(r.id) < 0\n && rejectedRequirements.indexOf(r.id) < 0);\n const a = pendingRequirements\n .map(r => ({ requirement: r, requirementType: resolveRequirementType(r.requirementTypeId) }));\n const b = a.sort((x, y) =>\n x.requirementType?.resourceType == y.requirementType?.resourceType\n ? y.requirementType?.orderValue - x.requirementType?.orderValue\n : x.requirementType?.resourceType - y.requirementType?.resourceType);\n\n setPendingRequirements(b.map(x => x.requirement));\n\n const selected = props.requirements.find(r => r.id == props.selectedRequirementId);\n\n if (pendingRequirements.length > 0 && selected === undefined && selectedRequirement === undefined) {\n setSelectedRequirement(pendingRequirements[0]);\n }\n }, [props.requirements, validatedRequirements]);\n\n\n const reject = (req: IRequirement) => {\n const rt = resolveRequirementType(req.requirementTypeId);\n dialogs.show('reject', [req, rt]);\n }\n const validate = (req: IRequirement) => {\n const rt = resolveRequirementType(req.requirementTypeId);\n dialogs.show('validate', [req, rt]);\n }\n\n const findRequirementIndex = (requirements: IRequirement[], req: IRequirement) => {\n for (let i = 0; i < requirements.length; i++) {\n if (req.id == requirements[i].id) {\n return i;\n }\n }\n\n return -1;\n }\n\n const doValidate = loading.wrap(async (req: IRequirement, data: IRequirementValidationData) => {\n const i = findRequirementIndex(pendingRequirements, req);\n const _ = await props.validateRequirement(req.workId, req.id, true, data);\n\n const nextIndex = i >= pendingRequirements.length - 1\n ? 0\n : i + 1;\n const nextRequirement = nextIndex < pendingRequirements.length\n ? pendingRequirements[nextIndex]\n : undefined;\n /*\n * console.log('VALIDATE: ', pendingRequirements, req);\n * console.log('VALIDATE REQUIREMENT: CURRENT INDEX', i, nextIndex, nextRequirement);\n * */\n setValidatedRequirements(r => r.concat([req.id]));\n setSelectedRequirement(nextRequirement?.id == req.id ? undefined : nextRequirement);\n\n // props.loadMessages();\n\n dialogs.clear();\n });\n\n const onRejected = (req: IRequirement) => {\n const i = findRequirementIndex(pendingRequirements, req);\n const nextIndex = i >= pendingRequirements.length - 1\n ? 0\n : i + 1;\n const nextRequirement = nextIndex < pendingRequirements.length\n ? pendingRequirements[nextIndex]\n : undefined;\n /* console.log('REJECT: ', pendingRequirements, req);\n * console.log('REJECT: CURRENT INDEX', i, nextIndex, nextRequirement);\n */\n setRejectedRequirements(r => r.concat([req.id]));\n setSelectedRequirement(nextRequirement?.id == req.id ? undefined : nextRequirement);\n\n // props.loadMessages();\n\n dialogs.clear();\n }\n\n const allValidated = pendingRequirements.length === 0;\n const canNotValidate =\n selectedRequirement == undefined\n || loading.isLoading()\n || validatedRequirements.includes(selectedRequirement.id)\n || rejectedRequirements.includes(selectedRequirement.id);\n\n const total = pendingRequirements.length;\n const currentIndex = selectedRequirement ? pendingRequirements.indexOf(selectedRequirement) : 0;\n\n const canGoForward = currentIndex < total;\n const canGoBackward = currentIndex > 0;\n\n const goBackward = () => {\n const r = currentIndex - 1;\n if (r >= 0) {\n setSelectedRequirement(pendingRequirements[r]);\n }\n }\n\n const goForward = () => {\n const r = currentIndex + 1;\n if (r < pendingRequirements.length) {\n setSelectedRequirement(pendingRequirements[r]);\n }\n }\n\n return
\n {dialogs.render('reject', { title: t('Reject'), className: 'g pd', maskClassName: 'z-10002' }, ([req, rt]: [IRequirement, IRequirementType]) =>\n )}\n\n {dialogs.render('validate', { title: t('Validate'), className: 'g pd', maskClassName: 'z-10002' }, ([req, rt]: [IRequirement, IRequirementType]) =>\n )}\n\n {selectedRequirement &&
\n {resolveRequirementType(selectedRequirement.requirementTypeId)?.title}\n
}\n
\n
\n {pendingRequirements.length} {t('requirements.pending')}\n
\n {pendingRequirements.map((p, i) =>\n setSelectedRequirement(p)}>\n {(p as any).__resourceName && {(p as any).__resourceName}}\n {validatedRequirements.includes(p.id) &&\n }\n {rejectedRequirements.includes(p.id) &&\n }\n {resolveRequirementType(p.requirementTypeId)?.title ?? p.title}\n
)}\n
\n \n {selectedRequirement\n && selectedRequirement?.documents\n && }\n
\n
\n
\n {allValidated && !loading.isLoading() &&\n
\n {t('requirements.all.validated')}\n \n
}\n {selectedRequirement &&\n }\n
\n\n
\n
\n \n {loading.render()}\n
\n \n \n \n \n \n \n
\n {props.requestCancel && }\n {!allValidated && !canNotValidate && <>\n reject(selectedRequirement!)}>\n {t('Deny')}\n \n validate(selectedRequirement!)}>\n {t('Validate')}\n \n }\n
\n
\n
\n \n}\n","import * as React from 'react';\n\nimport { connect } from 'react-redux';\nimport { ApplicationState } from '../../store';\nimport * as DocumentActions from '../../store/actions/documents';\nimport * as RequirementsStore from '../../store/requirements';\nimport * as NotificationsStore from '@store/notifications';\nimport { ValidateAllRequirements } from '../../components/requirements/ValidateAllRequirements';\n\nexport default connect(\n (state: ApplicationState) => ({\n ...state.identity,\n ...state.user,\n ...state.constants,\n ...DocumentActions,\n ...RequirementsStore.plainActions,\n requirementGroups: state.user.requirementGroups,\n requirementStatusTypes: state.user.requirementStatusTypes,\n workId: state.work.work?.id,\n }),\n {\n ...NotificationsStore.actionCreators,\n },\n)(ValidateAllRequirements as any) as any; // eslint-disable-line @typescript-eslint/no-explicit-any\n","import { connect } from 'react-redux';\nimport { ApplicationState } from '../../store';\nimport * as NotificationsStore from '@store/notifications';\nimport * as RequirementsStore from '@store/requirements';\nimport * as UserStore from '@store/user';\n\nimport { ValidateRequirementsFromNotificationMessages } from '@components/notifications/ValidateRequirementsFromNotificationMessages';\n\nexport default connect(\n (state: ApplicationState) => ({\n ...RequirementsStore.plainActions,\n ...state.identity,\n work: state.user.work,\n messages: state.notifications.messages,\n }),\n {\n loadWork: UserStore.actionCreators?.selectWork,\n resolveMessage: NotificationsStore.actionCreators?.clearMessage,\n },\n)(ValidateRequirementsFromNotificationMessages as any) as any; // eslint-disable-line @typescript-eslint/no-explicit-any\n","import * as React from 'react';\n\nimport { IWork } from '@models';\nimport { IMessage, MessageType } from '@models/notifications';\nimport { IRequirement } from '@models/requirements';\n\nimport ValidateAllRequirements from '@containers/requirements/ValidateAllRequirementsContainer';\nimport { useHideBodyScrollbar, useLoading } from '@components';\nimport { unique } from '@utils';\n\nimport './ValidateRequirementsFromNotificationMessages.scss';\n\ntype GetRequirementF = (workId: number, targetType: number, targetId: number, id: number) => Promise;\ntype LoadWorkF = (workId: number) => void;\n\nexport interface IProps {\n getRequirementsFromResources: Function;\n getRequirement: GetRequirementF;\n loadWork: LoadWorkF;\n message: IMessage;\n messages: IMessage[];\n requestCancel: Function;\n workId: number;\n work: IWork;\n}\n\nexport function ValidateRequirementsFromNotificationMessages(props: IProps) {\n const loading = useLoading({container: '#validate-requirements-left'});\n const [requirement, setRequirement] = React.useState();\n const [message, setMessage] = React.useState();\n\n const [requirementJobs, setRequirementJobs] = React.useState({});\n const [requirements, setRequirements] = React.useState([]);\n const [selectedRequirementId, setSelectedRequirementId] = React.useState();\n\n useHideBodyScrollbar();\n\n React.useEffect(() => {\n if (props.messages) {\n const res: any = {};\n\n for (const m of props.messages) {\n if (m.notificationType === MessageType.PENDING_REQUIREMENT && m.data?.JobId) {\n res[m.data.RequirementId] = m.data.JobId;\n }\n }\n\n setRequirementJobs(res);\n }\n }, [props.messages]);\n\n const loadRequirements = loading.wrap(async () => {\n const msgs = props.messages.filter(m => m.notificationType === MessageType.PENDING_REQUIREMENT);\n const requirementIds = unique(\n msgs\n .map(m => ({\n requirementId: m.data?.RequirementId,\n resourceType: m.data?.ResourceType,\n resourceId: m.data?.ResourceId\n }))\n .filter(r => r.requirementId != undefined),\n 'requirementId');\n\n const res = await props.getRequirementsFromResources(\n props.workId,\n requirementIds);\n\n console.log('loadrequirements', props.message);\n\n for (const r of res) {\n const msg = msgs.find(m => m.data?.RequirementId == r.id);\n if (r.id === props.message?.data?.RequirementId) {\n setSelectedRequirementId(r.id);\n }\n if (msg) {\n r.__resourceName = msg.data?.ResourceName;\n }\n }\n\n setRequirements(res);\n });\n\n React.useEffect(() => {\n loadRequirements();\n }, [props.messages]);\n\n React.useEffect(() => {\n if (props.work == undefined || props.work.id != props.workId) {\n props.loadWork(props.workId);\n }\n }, [props.work]);\n\n React.useEffect(() => {\n setMessage(props.message);\n }, [props.message]);\n\n return
\n {loading.renderBox({style: {fontSize: '0.8em'}})}\n {requirements && props.work && props.work?.id == props.workId &&\n }\n
;\n}","import * as React from 'react';\n\nimport { connect } from 'react-redux';\nimport { ApplicationState } from '../../store';\nimport * as RequirementsStore from '@store/requirements';\nimport { ViewRequirementHistory } from '@components/requirements/ViewRequirementHistory';\n\nexport default connect(\n (state: ApplicationState) => ({\n ...state.identity,\n ...state.user,\n ...state.constants,\n ...RequirementsStore.plainActions,\n appUsers: state.user.work?.users,\n requirementGroups: state.user.requirementGroups,\n requirementStatusTypes: state.user.requirementStatusTypes,\n }),\n {},\n)(ViewRequirementHistory as any) as any; // eslint-disable-line @typescript-eslint/no-explicit-any\n","import * as React from 'react';\n\nimport { useDialogs, useMessage, useTranslation, Portal } from '@components';\nimport {\n goToContractorRequirements, goToJob, goToJobContractors, goToJobEditContractor, goToJobEditContractorRequirements,\n goToJobHasMachinery, goToJobInformationLoaded, goToJobWorker\n} from '@components/routes';\nimport ValidateRequirementsFromNotificationMessages from '@containers/notifications/ValidateRequirementsFromNotificationMessagesContainer';\nimport { DataLoader } from '@components/custom/DataLoader';\nimport ViewRequirementHistory from '@containers/requirements/ViewRequirementHistoryContainer';\nimport { IOption, ISecurity, ResourceType, IWork } from '@models';\nimport { IMessage, MessageType } from '@models/notifications';\nimport { IRequirement } from '@models/requirements';\nimport { redirectTo } from '@utils';\nimport * as R from '@components/routes';\n\nimport { getRequirement } from '@store/actions/requirements';\n\ntype ResolveMessageF = (id: string) => Promise>;\n\nexport interface IProps {\n message?: IMessage;\n resolveMessage: ResolveMessageF;\n requestCancel: Function;\n security: ISecurity;\n work: IWork;\n workId: number;\n}\n\nconst __resolvedMessages: string[] = [];\n\nexport function NotificationMessageEffect({\n message, requestCancel, resolveMessage,\n security, workId,\n work,\n}: IProps) {\n const dialogs = useDialogs();\n const err = useMessage();\n const { t } = useTranslation();\n\n const goToRequirement = (data: any) => {\n if (data.ResourceType == ResourceType.Contractor) {\n R.goToContractorRequirements(data.WorkId, data.ResourceId);\n }\n else if (data.ResourceType == ResourceType.Machinery) {\n R.goToMachineryRequirements(data.WorkId, data.ResourceId);\n }\n else if (data.ResourceType == ResourceType.Worker) {\n R.goToWorkerRequirements(data.WorkId, data.ResourceId);\n }\n else if (data.ResourceType == ResourceType.JobHasContractor) {\n R.goToJobEditContractorRequirements(data.WorkId, data.JobId, data.ResourceId);\n }\n else if (data.ResourceType == ResourceType.JobHasMachinery) {\n R.goToJobEditMachineryRequirements(data.WorkId, data.JobId, data.ResourceId);\n }\n else if (data.ResourceType == ResourceType.JobHasWorker) {\n R.goToJobEditWorkerRequirements(data.WorkId, data.JobId, data.ResourceId);\n }\n }\n\n React.useEffect(() => {\n if (message && message.notificationType == MessageType.REQUIREMENT_EXPIRED && !__resolvedMessages.includes(message.id)) {\n // __resolvedMessages.push(message.id);\n const data = message.data;\n goToRequirement(message.data);\n }\n else if (message && message.notificationType == MessageType.REQUIREMENT_INCIDENCE && !__resolvedMessages.includes(message.id)) {\n // __resolvedMessages.push(message.id);\n const data = message.data;\n goToRequirement(message.data);\n }\n else if (message && message.notificationType == MessageType.MESSAGE && !__resolvedMessages.includes(message.id)) {\n const data = message.data;\n if (data.Route) {\n R.redirectTo(data.Route);\n }\n else if (message.data.JobId) {\n goToJob(message.data.WorkId, message.data.JobId);\n }\n else {\n requestCancel();\n }\n }\n else if (message && message.notificationType === MessageType.JOB_CREATED) {\n const jobId = message.data.JobId;\n const workId = message.data.WorkId;\n goToJob(workId, jobId);\n }\n else if (message && message.notificationType === MessageType.REQUIREMENT_VALIDATED && message.data.JobId && message.data.JobHasContractorId) {\n const jobId = message.data.JobId;\n const workId = message.data.WorkId;\n const jobHasContractorId = message.data.JobHasContractorId;\n goToJobEditContractorRequirements(workId, jobId, jobHasContractorId);\n }\n else if (message && message.notificationType === MessageType.REQUIREMENT_VALIDATED && message.data.JobId) {\n const jobId = message.data.JobId;\n const workId = message.data.WorkId;\n goToJob(workId, jobId);\n }\n else if (message\n && message.notificationType === MessageType.PENDING_REQUIREMENT\n && message.data.ResourceType === ResourceType.JobHasWorker\n && message.data.JobId) {\n const jobId = message.data.JobId;\n const workId = message.data.WorkId;\n // goToJob(workId, jobId);\n }\n else if (message\n && message.notificationType === MessageType.PENDING_REQUIREMENT\n && message.data.ResourceType === ResourceType.JobHasMachinery\n && message.data.JobId) {\n const jobId = message.data.JobId;\n const workId = message.data.WorkId;\n // goToJob(workId, jobId);\n }\n else if (message\n && message.notificationType === MessageType.PENDING_REQUIREMENT\n && message.data.ResourceType === ResourceType.JobHasContractor\n && message.data.JobId) {\n const jobId = message.data.JobId;\n const workId = message.data.WorkId;\n // goToJob(workId, jobId);\n }\n else if (message && message.notificationType === MessageType.INVALID_ITA && message.data.ResourceId) {\n const resourceId = message.data.ResourceId;\n const workId = message.data.WorkId;\n goToContractorRequirements(workId, resourceId);\n }\n else if (message && message.notificationType === MessageType.SUBCONTRACTOR_REQUEST_ACCEPTED\n && message.data\n && message.data.JobId) {\n const jobId = message.data.JobId;\n const workId = message.data.WorkId;\n goToJobContractors(workId, jobId);\n }\n else if (message && message.notificationType === MessageType.REQUIREMENT_INCIDENCE && message.data.JobId) {\n const jobId = message.data.JobId;\n const workId = message.data.WorkId;\n goToJob(workId, jobId);\n }\n else if (message && message.notificationType === MessageType.SUBCONTRACTOR_REQUEST) {\n redirectTo(`/work/${workId}/contractor/subcontractorrequests`);\n }\n else if (message && message.notificationType === MessageType.SUBCONTRACTOR_REQUEST_REJECTED) {\n redirectTo(`/work/${workId}/contractor/subcontractorrequests`);\n }\n else if (message && message.notificationType === MessageType.JOB_INFORMATION_LOADED) {\n goToJobInformationLoaded(workId, message.data.JobId);\n }\n else if (message && message.notificationType === MessageType.JOB_FINALIZED) {\n goToJob(workId, message.data.JobId);\n }\n else if (message && message.notificationType === MessageType.MESSAGE) {\n goToJob(workId, message.data.JobId);\n }\n else if (message && message.notificationType === MessageType.JOB_AUTHORIZED) {\n\n const jobId = message.data.JobId;\n goToJob(workId, jobId);\n }\n else if (message && message.notificationType === MessageType.JOB_REVOKED) {\n const jobId = message.data.JobId;\n goToJob(workId, jobId);\n }\n else if (message && message.notificationType === MessageType.RESOURCE_AUTHORIZED) {\n const jobId = message.data.JobId;\n const resourceId = message.data.ResourceId;\n\n if (message.data.ResourceType === ResourceType.JobHasMachinery) {\n goToJobHasMachinery(workId, jobId, resourceId);\n }\n else if (message.data.ResourceType === ResourceType.JobHasWorker) {\n goToJobWorker(workId, jobId, resourceId);\n }\n else if (message.data.ResourceType === ResourceType.JobHasContractor) {\n goToJobEditContractor(workId, jobId, resourceId);\n }\n else if (message.data.ResourceType === ResourceType.Worker) {\n R.goToWorkerRequirements(workId, resourceId);\n }\n else if (message.data.ResourceType === ResourceType.Machinery) {\n R.goToMachineryRequirements(workId, resourceId);\n }\n else if (message.data.ResourceType === ResourceType.Contractor) {\n R.goToContractorRequirements(workId, resourceId);\n }\n }\n else if (message && message.notificationType === MessageType.RESOURCE_REJECTED) {\n const jobId = message.data.JobId;\n const resourceId = message.data.ResourceId;\n if (message.data.ResourceType === ResourceType.JobHasMachinery) {\n goToJobHasMachinery(workId, jobId, resourceId);\n }\n else if (message.data.ResourceType === ResourceType.JobHasWorker) {\n goToJobWorker(workId, jobId, resourceId);\n }\n else if (message.data.ResourceType === ResourceType.JobHasContractor) {\n goToJobEditContractor(workId, jobId, resourceId);\n }\n }\n else if (message && message.notificationType == MessageType.MODULE_MESSAGE) {\n redirectTo(message.data.URL);\n }\n else if (message && message.notificationType === MessageType.REQUIREMENT_NOTE) {\n if (message.data.ResourceType === ResourceType.JobHasWorker) {\n R.goToJobEditWorkerRequirements(workId, message.data.JobId, message.data.ResourceId);\n }\n else if (message.data.ResourceType === ResourceType.JobHasMachinery) {\n R.goToJobEditMachineryRequirements(workId, message.data.JobId, message.data.ResourceId);\n }\n else if (message.data.ResourceType === ResourceType.JobHasContractor) {\n goToJobEditContractorRequirements(workId, message.data.JobId, message.data.ResourceId);\n }\n else if (message.data.ResourceType === ResourceType.JobHasDepartment) {\n R.goToJobRequirements(workId, message.data.JobId)\n }\n else if (message.data.ResourceType === ResourceType.Worker) {\n R.goToWorkerRequirements(workId, message.data.ResourceId);\n }\n else if (message.data.ResourceType === ResourceType.Machinery) {\n R.goToMachineryRequirements(workId, message.data.ResourceId);\n }\n else if (message.data.ResourceType === ResourceType.Contractor) {\n goToContractorRequirements(workId, message.data.ResourceId);\n }\n }\n else if (message && message.notificationType === MessageType.REQUIREMENT_NEAR_EXPIRATION) {\n if (message.data.ResourceType === ResourceType.JobHasWorker) {\n R.goToJobEditWorkerRequirements(workId, message.data.JobId, message.data.ResourceId);\n }\n else if (message.data.ResourceType === ResourceType.JobHasMachinery) {\n R.goToJobEditMachineryRequirements(workId, message.data.JobId, message.data.ResourceId);\n }\n else if (message.data.ResourceType === ResourceType.JobHasContractor) {\n goToJobEditContractorRequirements(workId, message.data.JobId, message.data.ResourceId);\n }\n else if (message.data.ResourceType === ResourceType.JobHasDepartment) {\n R.goToJobRequirements(workId, message.data.JobId)\n }\n else if (message.data.ResourceType === ResourceType.Worker) {\n R.goToWorkerRequirements(workId, message.data.ResourceId);\n }\n else if (message.data.ResourceType === ResourceType.Machinery) {\n R.goToMachineryRequirements(workId, message.data.ResourceId);\n }\n else if (message.data.ResourceType === ResourceType.Contractor) {\n goToContractorRequirements(workId, message.data.ResourceId);\n }\n }\n }, [message]);\n\n const loadRequirement = (data: any) => {\n const { WorkId, ResourceType, ResourceId, RequirementId } = data;\n if (!ResourceType || !ResourceId || !RequirementId) {\n err.setError(t('requirement.get.error'));\n return new Promise((resolve) => resolve({ error: true }));\n }\n else {\n return getRequirement(WorkId, ResourceType, ResourceId, RequirementId);\n }\n }\n\n const clearRequirement = () => {\n dialogs.clear();\n requestCancel();\n }\n\n if (message && dialogs.get('requirement.history')) {\n return dialogs.render('requirement.history', {}, (data: any) =>\n loadRequirement(data)}>\n {(req: any) =>\n <>\n {req && !req.error &&\n }\n {req.error &&
\n {err.render()}\n
\n \n
\n
}\n \n }\n
);\n }\n else if (message && message.notificationType === MessageType.PENDING_REQUIREMENT) {\n return \n \n \n }\n else if (message && message.notificationType === MessageType.SUBCONTRACTOR_REQUEST) {\n return null;\n }\n else {\n return null;\n }\n}","module.exports = /*\n * Generated by PEG.js 0.10.0.\n *\n * http://pegjs.org/\n */\n(function() {\n \"use strict\";\n\n function peg$subclass(child, parent) {\n function ctor() { this.constructor = child; }\n ctor.prototype = parent.prototype;\n child.prototype = new ctor();\n }\n\n function peg$SyntaxError(message, expected, found, location) {\n this.message = message;\n this.expected = expected;\n this.found = found;\n this.location = location;\n this.name = \"SyntaxError\";\n\n if (typeof Error.captureStackTrace === \"function\") {\n Error.captureStackTrace(this, peg$SyntaxError);\n }\n }\n\n peg$subclass(peg$SyntaxError, Error);\n\n peg$SyntaxError.buildMessage = function(expected, found) {\n var DESCRIBE_EXPECTATION_FNS = {\n literal: function(expectation) {\n return \"\\\"\" + literalEscape(expectation.text) + \"\\\"\";\n },\n\n \"class\": function(expectation) {\n var escapedParts = \"\",\n i;\n\n for (i = 0; i < expectation.parts.length; i++) {\n escapedParts += expectation.parts[i] instanceof Array\n ? classEscape(expectation.parts[i][0]) + \"-\" + classEscape(expectation.parts[i][1])\n : classEscape(expectation.parts[i]);\n }\n\n return \"[\" + (expectation.inverted ? \"^\" : \"\") + escapedParts + \"]\";\n },\n\n any: function(expectation) {\n return \"any character\";\n },\n\n end: function(expectation) {\n return \"end of input\";\n },\n\n other: function(expectation) {\n return expectation.description;\n }\n };\n\n function hex(ch) {\n return ch.charCodeAt(0).toString(16).toUpperCase();\n }\n\n function literalEscape(s) {\n return s\n .replace(/\\\\/g, '\\\\\\\\')\n .replace(/\"/g, '\\\\\"')\n .replace(/\\0/g, '\\\\0')\n .replace(/\\t/g, '\\\\t')\n .replace(/\\n/g, '\\\\n')\n .replace(/\\r/g, '\\\\r')\n .replace(/[\\x00-\\x0F]/g, function(ch) { return '\\\\x0' + hex(ch); })\n .replace(/[\\x10-\\x1F\\x7F-\\x9F]/g, function(ch) { return '\\\\x' + hex(ch); });\n }\n\n function classEscape(s) {\n return s\n .replace(/\\\\/g, '\\\\\\\\')\n .replace(/\\]/g, '\\\\]')\n .replace(/\\^/g, '\\\\^')\n .replace(/-/g, '\\\\-')\n .replace(/\\0/g, '\\\\0')\n .replace(/\\t/g, '\\\\t')\n .replace(/\\n/g, '\\\\n')\n .replace(/\\r/g, '\\\\r')\n .replace(/[\\x00-\\x0F]/g, function(ch) { return '\\\\x0' + hex(ch); })\n .replace(/[\\x10-\\x1F\\x7F-\\x9F]/g, function(ch) { return '\\\\x' + hex(ch); });\n }\n\n function describeExpectation(expectation) {\n return DESCRIBE_EXPECTATION_FNS[expectation.type](expectation);\n }\n\n function describeExpected(expected) {\n var descriptions = new Array(expected.length),\n i, j;\n\n for (i = 0; i < expected.length; i++) {\n descriptions[i] = describeExpectation(expected[i]);\n }\n\n descriptions.sort();\n\n if (descriptions.length > 0) {\n for (i = 1, j = 1; i < descriptions.length; i++) {\n if (descriptions[i - 1] !== descriptions[i]) {\n descriptions[j] = descriptions[i];\n j++;\n }\n }\n descriptions.length = j;\n }\n\n switch (descriptions.length) {\n case 1:\n return descriptions[0];\n\n case 2:\n return descriptions[0] + \" or \" + descriptions[1];\n\n default:\n return descriptions.slice(0, -1).join(\", \")\n + \", or \"\n + descriptions[descriptions.length - 1];\n }\n }\n\n function describeFound(found) {\n return found ? \"\\\"\" + literalEscape(found) + \"\\\"\" : \"end of input\";\n }\n\n return \"Expected \" + describeExpected(expected) + \" but \" + describeFound(found) + \" found.\";\n };\n\n function peg$parse(input, options) {\n options = options !== void 0 ? options : {};\n\n var peg$FAILED = {},\n\n peg$startRuleFunctions = { Expression: peg$parseExpression },\n peg$startRuleFunction = peg$parseExpression,\n\n peg$c0 = \"==\",\n peg$c1 = peg$literalExpectation(\"==\", false),\n peg$c2 = \"!=\",\n peg$c3 = peg$literalExpectation(\"!=\", false),\n peg$c4 = \">\",\n peg$c5 = peg$literalExpectation(\">\", false),\n peg$c6 = \"<\",\n peg$c7 = peg$literalExpectation(\"<\", false),\n peg$c8 = \">=\",\n peg$c9 = peg$literalExpectation(\">=\", false),\n peg$c10 = \"<=\",\n peg$c11 = peg$literalExpectation(\"<=\", false),\n peg$c12 = function(head, tail) {\n return tail.reduce(function(result, element) {\n if (element[1] === '==') { return {type: 'binaryop', op: '==', left: result, right: element[3] } }\n if (element[1] === '!=') { return {type: 'binaryop', op: '!=', left: result, right: element[3] } }\n if (element[1] === '<') { return {type: 'binaryop', op: '<', left: result, right: element[3] } }\n if (element[1] === '>') { return {type: 'binaryop', op: '>', left: result, right: element[3] } }\n if (element[1] === '<=') { return {type: 'binaryop', op: '<=', left: result, right: element[3] } }\n if (element[1] === '>=') { return {type: 'binaryop', op: '>=', left: result, right: element[3] } }\n }, head);\n },\n peg$c13 = \"&&\",\n peg$c14 = peg$literalExpectation(\"&&\", false),\n peg$c15 = \"||\",\n peg$c16 = peg$literalExpectation(\"||\", false),\n peg$c17 = function(head, tail) {\n return tail.reduce(function(result, element) {\n \tif (element[1] === '&&') { return {type: 'binaryop', op: 'AND', left: result, right: element[3] } }\n if (element[1] === '||') { return {type: 'binaryop', op: 'OR', left: result, right: element[3] } }\n }, head);\n },\n peg$c18 = \"+\",\n peg$c19 = peg$literalExpectation(\"+\", false),\n peg$c20 = \"-\",\n peg$c21 = peg$literalExpectation(\"-\", false),\n peg$c22 = \"*\",\n peg$c23 = peg$literalExpectation(\"*\", false),\n peg$c24 = \"/\",\n peg$c25 = peg$literalExpectation(\"/\", false),\n peg$c26 = function(head, tail) {\n return tail.reduce(function(result, element) {\n if (element[1] === '+') { return {type: 'binaryop', op: '+', left: result, right: element[3] } }\n if (element[1] === '-') { return {type: 'binaryop', op: '-', left: result, right: element[3] } }\n if (element[1] === '*') { return { type: 'binaryop', op: '*', left: result, right: element[3] } }\n if (element[1] === '/') { return { type: 'binaryop', op: '/', left: result, right: element[3] } }\n }, head);\n },\n peg$c27 = function(head, tail) {\n return tail.reduce(function(result, element) {\n \tif (element[1] === '*') { return { type: 'binaryop', op: '*', left: result, right: element[3] } }\n if (element[1] === '/') { return { type: 'binaryop', op: '/', left: result, right: element[3] } }\n }, head);\n },\n peg$c28 = \"(\",\n peg$c29 = peg$literalExpectation(\"(\", false),\n peg$c30 = \")\",\n peg$c31 = peg$literalExpectation(\")\", false),\n peg$c32 = function(expr) { return expr; },\n peg$c33 = peg$otherExpectation(\"path\"),\n peg$c34 = \".\",\n peg$c35 = peg$literalExpectation(\".\", false),\n peg$c36 = function(i, inv, p) { return { type: \"path\", values: [i, inv] } },\n peg$c37 = function(i, inv) { return { type: \"path\", values: [i, inv] } },\n peg$c38 = function(i, p) { return { type: \"path\", values: [i].concat(p.values)} },\n peg$c39 = function(i) { return { type: \"path\", values: [text()]}; },\n peg$c40 = function() { return { type: \"path\", values: [text()]}; },\n peg$c41 = peg$otherExpectation(\"invocation\"),\n peg$c42 = function(name, args) {\n return { type: 'invocation', name, args }\n },\n peg$c43 = peg$otherExpectation(\"arguments\"),\n peg$c44 = \",\",\n peg$c45 = peg$literalExpectation(\",\", false),\n peg$c46 = function(v, args) { return [v, args] },\n peg$c47 = peg$otherExpectation(\"value\"),\n peg$c48 = peg$otherExpectation(\"integer\"),\n peg$c49 = /^[0-9]/,\n peg$c50 = peg$classExpectation([[\"0\", \"9\"]], false, false),\n peg$c51 = function() { return { type: 'number', value: parseInt(text(), 10) } },\n peg$c52 = peg$otherExpectation(\"stringLiteral\"),\n peg$c53 = \"\\\"\",\n peg$c54 = peg$literalExpectation(\"\\\"\", false),\n peg$c55 = /^[a-z|A-Z|0-9|_| |.|-|@]/,\n peg$c56 = peg$classExpectation([[\"a\", \"z\"], \"|\", [\"A\", \"Z\"], \"|\", [\"0\", \"9\"], \"|\", \"_\", \"|\", \" \", \"|\", \".\", [\"|\", \"|\"], \"@\"], false, false),\n peg$c57 = function() { return { type: 'string', value: JSON.parse(text()) } },\n peg$c58 = peg$otherExpectation(\"boolean\"),\n peg$c59 = \"true\",\n peg$c60 = peg$literalExpectation(\"true\", false),\n peg$c61 = function() { return { type: 'boolean', value: true } },\n peg$c62 = \"false\",\n peg$c63 = peg$literalExpectation(\"false\", false),\n peg$c64 = function() { return { type: 'boolean', value: false } },\n peg$c65 = peg$otherExpectation(\"identifier\"),\n peg$c66 = /^[a-z|A-Z]/,\n peg$c67 = peg$classExpectation([[\"a\", \"z\"], \"|\", [\"A\", \"Z\"]], false, false),\n peg$c68 = /^[a-z|A-Z|0-0|_]/,\n peg$c69 = peg$classExpectation([[\"a\", \"z\"], \"|\", [\"A\", \"Z\"], \"|\", [\"0\", \"0\"], \"|\", \"_\"], false, false),\n peg$c70 = function() { return text(); },\n peg$c71 = peg$otherExpectation(\"whitespace\"),\n peg$c72 = /^[ \\t\\n\\r]/,\n peg$c73 = peg$classExpectation([\" \", \"\\t\", \"\\n\", \"\\r\"], false, false),\n\n peg$currPos = 0,\n peg$savedPos = 0,\n peg$posDetailsCache = [{ line: 1, column: 1 }],\n peg$maxFailPos = 0,\n peg$maxFailExpected = [],\n peg$silentFails = 0,\n\n peg$result;\n\n if (\"startRule\" in options) {\n if (!(options.startRule in peg$startRuleFunctions)) {\n throw new Error(\"Can't start parsing from rule \\\"\" + options.startRule + \"\\\".\");\n }\n\n peg$startRuleFunction = peg$startRuleFunctions[options.startRule];\n }\n\n function text() {\n return input.substring(peg$savedPos, peg$currPos);\n }\n\n function location() {\n return peg$computeLocation(peg$savedPos, peg$currPos);\n }\n\n function expected(description, location) {\n location = location !== void 0 ? location : peg$computeLocation(peg$savedPos, peg$currPos)\n\n throw peg$buildStructuredError(\n [peg$otherExpectation(description)],\n input.substring(peg$savedPos, peg$currPos),\n location\n );\n }\n\n function error(message, location) {\n location = location !== void 0 ? location : peg$computeLocation(peg$savedPos, peg$currPos)\n\n throw peg$buildSimpleError(message, location);\n }\n\n function peg$literalExpectation(text, ignoreCase) {\n return { type: \"literal\", text: text, ignoreCase: ignoreCase };\n }\n\n function peg$classExpectation(parts, inverted, ignoreCase) {\n return { type: \"class\", parts: parts, inverted: inverted, ignoreCase: ignoreCase };\n }\n\n function peg$anyExpectation() {\n return { type: \"any\" };\n }\n\n function peg$endExpectation() {\n return { type: \"end\" };\n }\n\n function peg$otherExpectation(description) {\n return { type: \"other\", description: description };\n }\n\n function peg$computePosDetails(pos) {\n var details = peg$posDetailsCache[pos], p;\n\n if (details) {\n return details;\n } else {\n p = pos - 1;\n while (!peg$posDetailsCache[p]) {\n p--;\n }\n\n details = peg$posDetailsCache[p];\n details = {\n line: details.line,\n column: details.column\n };\n\n while (p < pos) {\n if (input.charCodeAt(p) === 10) {\n details.line++;\n details.column = 1;\n } else {\n details.column++;\n }\n\n p++;\n }\n\n peg$posDetailsCache[pos] = details;\n return details;\n }\n }\n\n function peg$computeLocation(startPos, endPos) {\n var startPosDetails = peg$computePosDetails(startPos),\n endPosDetails = peg$computePosDetails(endPos);\n\n return {\n start: {\n offset: startPos,\n line: startPosDetails.line,\n column: startPosDetails.column\n },\n end: {\n offset: endPos,\n line: endPosDetails.line,\n column: endPosDetails.column\n }\n };\n }\n\n function peg$fail(expected) {\n if (peg$currPos < peg$maxFailPos) { return; }\n\n if (peg$currPos > peg$maxFailPos) {\n peg$maxFailPos = peg$currPos;\n peg$maxFailExpected = [];\n }\n\n peg$maxFailExpected.push(expected);\n }\n\n function peg$buildSimpleError(message, location) {\n return new peg$SyntaxError(message, null, null, location);\n }\n\n function peg$buildStructuredError(expected, found, location) {\n return new peg$SyntaxError(\n peg$SyntaxError.buildMessage(expected, found),\n expected,\n found,\n location\n );\n }\n\n function peg$parseExpression() {\n var s0;\n\n s0 = peg$parseBooleanExpression();\n\n return s0;\n }\n\n function peg$parseEqualityExpression() {\n var s0, s1, s2, s3, s4, s5, s6, s7;\n\n s0 = peg$currPos;\n s1 = peg$parseArithmeticExpression();\n if (s1 !== peg$FAILED) {\n s2 = [];\n s3 = peg$currPos;\n s4 = peg$parse_();\n if (s4 !== peg$FAILED) {\n if (input.substr(peg$currPos, 2) === peg$c0) {\n s5 = peg$c0;\n peg$currPos += 2;\n } else {\n s5 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$c1); }\n }\n if (s5 === peg$FAILED) {\n if (input.substr(peg$currPos, 2) === peg$c2) {\n s5 = peg$c2;\n peg$currPos += 2;\n } else {\n s5 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$c3); }\n }\n if (s5 === peg$FAILED) {\n if (input.charCodeAt(peg$currPos) === 62) {\n s5 = peg$c4;\n peg$currPos++;\n } else {\n s5 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$c5); }\n }\n if (s5 === peg$FAILED) {\n if (input.charCodeAt(peg$currPos) === 60) {\n s5 = peg$c6;\n peg$currPos++;\n } else {\n s5 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$c7); }\n }\n if (s5 === peg$FAILED) {\n if (input.substr(peg$currPos, 2) === peg$c8) {\n s5 = peg$c8;\n peg$currPos += 2;\n } else {\n s5 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$c9); }\n }\n if (s5 === peg$FAILED) {\n if (input.substr(peg$currPos, 2) === peg$c10) {\n s5 = peg$c10;\n peg$currPos += 2;\n } else {\n s5 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$c11); }\n }\n }\n }\n }\n }\n }\n if (s5 !== peg$FAILED) {\n s6 = peg$parse_();\n if (s6 !== peg$FAILED) {\n s7 = peg$parseArithmeticExpression();\n if (s7 !== peg$FAILED) {\n s4 = [s4, s5, s6, s7];\n s3 = s4;\n } else {\n peg$currPos = s3;\n s3 = peg$FAILED;\n }\n } else {\n peg$currPos = s3;\n s3 = peg$FAILED;\n }\n } else {\n peg$currPos = s3;\n s3 = peg$FAILED;\n }\n } else {\n peg$currPos = s3;\n s3 = peg$FAILED;\n }\n while (s3 !== peg$FAILED) {\n s2.push(s3);\n s3 = peg$currPos;\n s4 = peg$parse_();\n if (s4 !== peg$FAILED) {\n if (input.substr(peg$currPos, 2) === peg$c0) {\n s5 = peg$c0;\n peg$currPos += 2;\n } else {\n s5 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$c1); }\n }\n if (s5 === peg$FAILED) {\n if (input.substr(peg$currPos, 2) === peg$c2) {\n s5 = peg$c2;\n peg$currPos += 2;\n } else {\n s5 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$c3); }\n }\n if (s5 === peg$FAILED) {\n if (input.charCodeAt(peg$currPos) === 62) {\n s5 = peg$c4;\n peg$currPos++;\n } else {\n s5 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$c5); }\n }\n if (s5 === peg$FAILED) {\n if (input.charCodeAt(peg$currPos) === 60) {\n s5 = peg$c6;\n peg$currPos++;\n } else {\n s5 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$c7); }\n }\n if (s5 === peg$FAILED) {\n if (input.substr(peg$currPos, 2) === peg$c8) {\n s5 = peg$c8;\n peg$currPos += 2;\n } else {\n s5 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$c9); }\n }\n if (s5 === peg$FAILED) {\n if (input.substr(peg$currPos, 2) === peg$c10) {\n s5 = peg$c10;\n peg$currPos += 2;\n } else {\n s5 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$c11); }\n }\n }\n }\n }\n }\n }\n if (s5 !== peg$FAILED) {\n s6 = peg$parse_();\n if (s6 !== peg$FAILED) {\n s7 = peg$parseArithmeticExpression();\n if (s7 !== peg$FAILED) {\n s4 = [s4, s5, s6, s7];\n s3 = s4;\n } else {\n peg$currPos = s3;\n s3 = peg$FAILED;\n }\n } else {\n peg$currPos = s3;\n s3 = peg$FAILED;\n }\n } else {\n peg$currPos = s3;\n s3 = peg$FAILED;\n }\n } else {\n peg$currPos = s3;\n s3 = peg$FAILED;\n }\n }\n if (s2 !== peg$FAILED) {\n peg$savedPos = s0;\n s1 = peg$c12(s1, s2);\n s0 = s1;\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n if (s0 === peg$FAILED) {\n s0 = peg$parseTerm();\n }\n\n return s0;\n }\n\n function peg$parseBooleanExpression() {\n var s0, s1, s2, s3, s4, s5, s6, s7;\n\n s0 = peg$currPos;\n s1 = peg$parseEqualityExpression();\n if (s1 !== peg$FAILED) {\n s2 = [];\n s3 = peg$currPos;\n s4 = peg$parse_();\n if (s4 !== peg$FAILED) {\n if (input.substr(peg$currPos, 2) === peg$c13) {\n s5 = peg$c13;\n peg$currPos += 2;\n } else {\n s5 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$c14); }\n }\n if (s5 === peg$FAILED) {\n if (input.substr(peg$currPos, 2) === peg$c15) {\n s5 = peg$c15;\n peg$currPos += 2;\n } else {\n s5 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$c16); }\n }\n }\n if (s5 !== peg$FAILED) {\n s6 = peg$parse_();\n if (s6 !== peg$FAILED) {\n s7 = peg$parseEqualityExpression();\n if (s7 !== peg$FAILED) {\n s4 = [s4, s5, s6, s7];\n s3 = s4;\n } else {\n peg$currPos = s3;\n s3 = peg$FAILED;\n }\n } else {\n peg$currPos = s3;\n s3 = peg$FAILED;\n }\n } else {\n peg$currPos = s3;\n s3 = peg$FAILED;\n }\n } else {\n peg$currPos = s3;\n s3 = peg$FAILED;\n }\n while (s3 !== peg$FAILED) {\n s2.push(s3);\n s3 = peg$currPos;\n s4 = peg$parse_();\n if (s4 !== peg$FAILED) {\n if (input.substr(peg$currPos, 2) === peg$c13) {\n s5 = peg$c13;\n peg$currPos += 2;\n } else {\n s5 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$c14); }\n }\n if (s5 === peg$FAILED) {\n if (input.substr(peg$currPos, 2) === peg$c15) {\n s5 = peg$c15;\n peg$currPos += 2;\n } else {\n s5 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$c16); }\n }\n }\n if (s5 !== peg$FAILED) {\n s6 = peg$parse_();\n if (s6 !== peg$FAILED) {\n s7 = peg$parseEqualityExpression();\n if (s7 !== peg$FAILED) {\n s4 = [s4, s5, s6, s7];\n s3 = s4;\n } else {\n peg$currPos = s3;\n s3 = peg$FAILED;\n }\n } else {\n peg$currPos = s3;\n s3 = peg$FAILED;\n }\n } else {\n peg$currPos = s3;\n s3 = peg$FAILED;\n }\n } else {\n peg$currPos = s3;\n s3 = peg$FAILED;\n }\n }\n if (s2 !== peg$FAILED) {\n peg$savedPos = s0;\n s1 = peg$c17(s1, s2);\n s0 = s1;\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n if (s0 === peg$FAILED) {\n s0 = peg$parseTerm();\n }\n\n return s0;\n }\n\n function peg$parseArithmeticExpression() {\n var s0, s1, s2, s3, s4, s5, s6, s7;\n\n s0 = peg$currPos;\n s1 = peg$parseTerm();\n if (s1 !== peg$FAILED) {\n s2 = [];\n s3 = peg$currPos;\n s4 = peg$parse_();\n if (s4 !== peg$FAILED) {\n if (input.charCodeAt(peg$currPos) === 43) {\n s5 = peg$c18;\n peg$currPos++;\n } else {\n s5 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$c19); }\n }\n if (s5 === peg$FAILED) {\n if (input.charCodeAt(peg$currPos) === 45) {\n s5 = peg$c20;\n peg$currPos++;\n } else {\n s5 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$c21); }\n }\n if (s5 === peg$FAILED) {\n if (input.charCodeAt(peg$currPos) === 42) {\n s5 = peg$c22;\n peg$currPos++;\n } else {\n s5 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$c23); }\n }\n if (s5 === peg$FAILED) {\n if (input.charCodeAt(peg$currPos) === 47) {\n s5 = peg$c24;\n peg$currPos++;\n } else {\n s5 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$c25); }\n }\n }\n }\n }\n if (s5 !== peg$FAILED) {\n s6 = peg$parse_();\n if (s6 !== peg$FAILED) {\n s7 = peg$parseBooleanExpression();\n if (s7 !== peg$FAILED) {\n s4 = [s4, s5, s6, s7];\n s3 = s4;\n } else {\n peg$currPos = s3;\n s3 = peg$FAILED;\n }\n } else {\n peg$currPos = s3;\n s3 = peg$FAILED;\n }\n } else {\n peg$currPos = s3;\n s3 = peg$FAILED;\n }\n } else {\n peg$currPos = s3;\n s3 = peg$FAILED;\n }\n while (s3 !== peg$FAILED) {\n s2.push(s3);\n s3 = peg$currPos;\n s4 = peg$parse_();\n if (s4 !== peg$FAILED) {\n if (input.charCodeAt(peg$currPos) === 43) {\n s5 = peg$c18;\n peg$currPos++;\n } else {\n s5 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$c19); }\n }\n if (s5 === peg$FAILED) {\n if (input.charCodeAt(peg$currPos) === 45) {\n s5 = peg$c20;\n peg$currPos++;\n } else {\n s5 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$c21); }\n }\n if (s5 === peg$FAILED) {\n if (input.charCodeAt(peg$currPos) === 42) {\n s5 = peg$c22;\n peg$currPos++;\n } else {\n s5 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$c23); }\n }\n if (s5 === peg$FAILED) {\n if (input.charCodeAt(peg$currPos) === 47) {\n s5 = peg$c24;\n peg$currPos++;\n } else {\n s5 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$c25); }\n }\n }\n }\n }\n if (s5 !== peg$FAILED) {\n s6 = peg$parse_();\n if (s6 !== peg$FAILED) {\n s7 = peg$parseBooleanExpression();\n if (s7 !== peg$FAILED) {\n s4 = [s4, s5, s6, s7];\n s3 = s4;\n } else {\n peg$currPos = s3;\n s3 = peg$FAILED;\n }\n } else {\n peg$currPos = s3;\n s3 = peg$FAILED;\n }\n } else {\n peg$currPos = s3;\n s3 = peg$FAILED;\n }\n } else {\n peg$currPos = s3;\n s3 = peg$FAILED;\n }\n }\n if (s2 !== peg$FAILED) {\n peg$savedPos = s0;\n s1 = peg$c26(s1, s2);\n s0 = s1;\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n\n return s0;\n }\n\n function peg$parseTerm() {\n var s0, s1, s2, s3, s4, s5, s6, s7;\n\n s0 = peg$currPos;\n s1 = peg$parseFactor();\n if (s1 !== peg$FAILED) {\n s2 = [];\n s3 = peg$currPos;\n s4 = peg$parse_();\n if (s4 !== peg$FAILED) {\n if (input.charCodeAt(peg$currPos) === 42) {\n s5 = peg$c22;\n peg$currPos++;\n } else {\n s5 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$c23); }\n }\n if (s5 === peg$FAILED) {\n if (input.charCodeAt(peg$currPos) === 47) {\n s5 = peg$c24;\n peg$currPos++;\n } else {\n s5 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$c25); }\n }\n }\n if (s5 !== peg$FAILED) {\n s6 = peg$parse_();\n if (s6 !== peg$FAILED) {\n s7 = peg$parseFactor();\n if (s7 !== peg$FAILED) {\n s4 = [s4, s5, s6, s7];\n s3 = s4;\n } else {\n peg$currPos = s3;\n s3 = peg$FAILED;\n }\n } else {\n peg$currPos = s3;\n s3 = peg$FAILED;\n }\n } else {\n peg$currPos = s3;\n s3 = peg$FAILED;\n }\n } else {\n peg$currPos = s3;\n s3 = peg$FAILED;\n }\n while (s3 !== peg$FAILED) {\n s2.push(s3);\n s3 = peg$currPos;\n s4 = peg$parse_();\n if (s4 !== peg$FAILED) {\n if (input.charCodeAt(peg$currPos) === 42) {\n s5 = peg$c22;\n peg$currPos++;\n } else {\n s5 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$c23); }\n }\n if (s5 === peg$FAILED) {\n if (input.charCodeAt(peg$currPos) === 47) {\n s5 = peg$c24;\n peg$currPos++;\n } else {\n s5 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$c25); }\n }\n }\n if (s5 !== peg$FAILED) {\n s6 = peg$parse_();\n if (s6 !== peg$FAILED) {\n s7 = peg$parseFactor();\n if (s7 !== peg$FAILED) {\n s4 = [s4, s5, s6, s7];\n s3 = s4;\n } else {\n peg$currPos = s3;\n s3 = peg$FAILED;\n }\n } else {\n peg$currPos = s3;\n s3 = peg$FAILED;\n }\n } else {\n peg$currPos = s3;\n s3 = peg$FAILED;\n }\n } else {\n peg$currPos = s3;\n s3 = peg$FAILED;\n }\n }\n if (s2 !== peg$FAILED) {\n peg$savedPos = s0;\n s1 = peg$c27(s1, s2);\n s0 = s1;\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n\n return s0;\n }\n\n function peg$parseFactor() {\n var s0, s1, s2, s3, s4, s5;\n\n s0 = peg$currPos;\n if (input.charCodeAt(peg$currPos) === 40) {\n s1 = peg$c28;\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$c29); }\n }\n if (s1 !== peg$FAILED) {\n s2 = peg$parse_();\n if (s2 !== peg$FAILED) {\n s3 = peg$parseBooleanExpression();\n if (s3 !== peg$FAILED) {\n s4 = peg$parse_();\n if (s4 !== peg$FAILED) {\n if (input.charCodeAt(peg$currPos) === 41) {\n s5 = peg$c30;\n peg$currPos++;\n } else {\n s5 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$c31); }\n }\n if (s5 !== peg$FAILED) {\n peg$savedPos = s0;\n s1 = peg$c32(s3);\n s0 = s1;\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n if (s0 === peg$FAILED) {\n s0 = peg$parseValue();\n if (s0 === peg$FAILED) {\n s0 = peg$parsePath();\n }\n }\n\n return s0;\n }\n\n function peg$parsePath() {\n var s0, s1, s2, s3, s4, s5, s6, s7, s8, s9;\n\n peg$silentFails++;\n s0 = peg$currPos;\n s1 = peg$parseIdentifier();\n if (s1 !== peg$FAILED) {\n s2 = peg$parse_();\n if (s2 !== peg$FAILED) {\n if (input.charCodeAt(peg$currPos) === 46) {\n s3 = peg$c34;\n peg$currPos++;\n } else {\n s3 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$c35); }\n }\n if (s3 !== peg$FAILED) {\n s4 = peg$parse_();\n if (s4 !== peg$FAILED) {\n s5 = peg$parseInvocation();\n if (s5 !== peg$FAILED) {\n s6 = peg$parse_();\n if (s6 !== peg$FAILED) {\n if (input.charCodeAt(peg$currPos) === 46) {\n s7 = peg$c34;\n peg$currPos++;\n } else {\n s7 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$c35); }\n }\n if (s7 !== peg$FAILED) {\n s8 = peg$parse_();\n if (s8 !== peg$FAILED) {\n s9 = peg$parsePath();\n if (s9 !== peg$FAILED) {\n peg$savedPos = s0;\n s1 = peg$c36(s1, s5, s9);\n s0 = s1;\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n if (s0 === peg$FAILED) {\n s0 = peg$currPos;\n s1 = peg$parseIdentifier();\n if (s1 !== peg$FAILED) {\n s2 = peg$parse_();\n if (s2 !== peg$FAILED) {\n if (input.charCodeAt(peg$currPos) === 46) {\n s3 = peg$c34;\n peg$currPos++;\n } else {\n s3 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$c35); }\n }\n if (s3 !== peg$FAILED) {\n s4 = peg$parse_();\n if (s4 !== peg$FAILED) {\n s5 = peg$parseInvocation();\n if (s5 !== peg$FAILED) {\n peg$savedPos = s0;\n s1 = peg$c37(s1, s5);\n s0 = s1;\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n if (s0 === peg$FAILED) {\n s0 = peg$currPos;\n s1 = peg$parseIdentifier();\n if (s1 !== peg$FAILED) {\n s2 = peg$parse_();\n if (s2 !== peg$FAILED) {\n if (input.charCodeAt(peg$currPos) === 46) {\n s3 = peg$c34;\n peg$currPos++;\n } else {\n s3 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$c35); }\n }\n if (s3 !== peg$FAILED) {\n s4 = peg$parse_();\n if (s4 !== peg$FAILED) {\n s5 = peg$parsePath();\n if (s5 !== peg$FAILED) {\n peg$savedPos = s0;\n s1 = peg$c38(s1, s5);\n s0 = s1;\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n if (s0 === peg$FAILED) {\n s0 = peg$currPos;\n s1 = peg$parseInvocation();\n if (s1 !== peg$FAILED) {\n peg$savedPos = s0;\n s1 = peg$c39(s1);\n }\n s0 = s1;\n if (s0 === peg$FAILED) {\n s0 = peg$currPos;\n s1 = peg$parseIdentifier();\n if (s1 !== peg$FAILED) {\n peg$savedPos = s0;\n s1 = peg$c40();\n }\n s0 = s1;\n }\n }\n }\n }\n peg$silentFails--;\n if (s0 === peg$FAILED) {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$c33); }\n }\n\n return s0;\n }\n\n function peg$parseInvocation() {\n var s0, s1, s2, s3, s4, s5, s6, s7, s8;\n\n peg$silentFails++;\n s0 = peg$currPos;\n s1 = peg$parse_();\n if (s1 !== peg$FAILED) {\n s2 = peg$parseIdentifier();\n if (s2 !== peg$FAILED) {\n s3 = peg$parse_();\n if (s3 !== peg$FAILED) {\n if (input.charCodeAt(peg$currPos) === 40) {\n s4 = peg$c28;\n peg$currPos++;\n } else {\n s4 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$c29); }\n }\n if (s4 !== peg$FAILED) {\n s5 = peg$parse_();\n if (s5 !== peg$FAILED) {\n s6 = peg$parseArguments();\n if (s6 !== peg$FAILED) {\n s7 = peg$parse_();\n if (s7 !== peg$FAILED) {\n if (input.charCodeAt(peg$currPos) === 41) {\n s8 = peg$c30;\n peg$currPos++;\n } else {\n s8 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$c31); }\n }\n if (s8 !== peg$FAILED) {\n peg$savedPos = s0;\n s1 = peg$c42(s2, s6);\n s0 = s1;\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n peg$silentFails--;\n if (s0 === peg$FAILED) {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$c41); }\n }\n\n return s0;\n }\n\n function peg$parseArguments() {\n var s0, s1, s2, s3, s4, s5;\n\n peg$silentFails++;\n s0 = peg$currPos;\n s1 = peg$parseTerm();\n if (s1 !== peg$FAILED) {\n s2 = peg$parse_();\n if (s2 !== peg$FAILED) {\n if (input.charCodeAt(peg$currPos) === 44) {\n s3 = peg$c44;\n peg$currPos++;\n } else {\n s3 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$c45); }\n }\n if (s3 !== peg$FAILED) {\n s4 = peg$parse_();\n if (s4 !== peg$FAILED) {\n s5 = peg$parseArguments();\n if (s5 !== peg$FAILED) {\n peg$savedPos = s0;\n s1 = peg$c46(s1, s5);\n s0 = s1;\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n if (s0 === peg$FAILED) {\n s0 = peg$parseFactor();\n }\n peg$silentFails--;\n if (s0 === peg$FAILED) {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$c43); }\n }\n\n return s0;\n }\n\n function peg$parseValue() {\n var s0, s1;\n\n peg$silentFails++;\n s0 = peg$parseBoolean();\n if (s0 === peg$FAILED) {\n s0 = peg$parseStringLiteral();\n if (s0 === peg$FAILED) {\n s0 = peg$parseInteger();\n }\n }\n peg$silentFails--;\n if (s0 === peg$FAILED) {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$c47); }\n }\n\n return s0;\n }\n\n function peg$parseInteger() {\n var s0, s1, s2, s3;\n\n peg$silentFails++;\n s0 = peg$currPos;\n s1 = peg$parse_();\n if (s1 !== peg$FAILED) {\n s2 = [];\n if (peg$c49.test(input.charAt(peg$currPos))) {\n s3 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s3 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$c50); }\n }\n if (s3 !== peg$FAILED) {\n while (s3 !== peg$FAILED) {\n s2.push(s3);\n if (peg$c49.test(input.charAt(peg$currPos))) {\n s3 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s3 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$c50); }\n }\n }\n } else {\n s2 = peg$FAILED;\n }\n if (s2 !== peg$FAILED) {\n peg$savedPos = s0;\n s1 = peg$c51();\n s0 = s1;\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n peg$silentFails--;\n if (s0 === peg$FAILED) {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$c48); }\n }\n\n return s0;\n }\n\n function peg$parseStringLiteral() {\n var s0, s1, s2, s3, s4;\n\n peg$silentFails++;\n s0 = peg$currPos;\n s1 = peg$parse_();\n if (s1 !== peg$FAILED) {\n if (input.charCodeAt(peg$currPos) === 34) {\n s2 = peg$c53;\n peg$currPos++;\n } else {\n s2 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$c54); }\n }\n if (s2 !== peg$FAILED) {\n s3 = [];\n if (peg$c55.test(input.charAt(peg$currPos))) {\n s4 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s4 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$c56); }\n }\n while (s4 !== peg$FAILED) {\n s3.push(s4);\n if (peg$c55.test(input.charAt(peg$currPos))) {\n s4 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s4 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$c56); }\n }\n }\n if (s3 !== peg$FAILED) {\n if (input.charCodeAt(peg$currPos) === 34) {\n s4 = peg$c53;\n peg$currPos++;\n } else {\n s4 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$c54); }\n }\n if (s4 !== peg$FAILED) {\n peg$savedPos = s0;\n s1 = peg$c57();\n s0 = s1;\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n peg$silentFails--;\n if (s0 === peg$FAILED) {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$c52); }\n }\n\n return s0;\n }\n\n function peg$parseBoolean() {\n var s0, s1;\n\n peg$silentFails++;\n s0 = peg$currPos;\n if (input.substr(peg$currPos, 4) === peg$c59) {\n s1 = peg$c59;\n peg$currPos += 4;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$c60); }\n }\n if (s1 !== peg$FAILED) {\n peg$savedPos = s0;\n s1 = peg$c61();\n }\n s0 = s1;\n if (s0 === peg$FAILED) {\n s0 = peg$currPos;\n if (input.substr(peg$currPos, 5) === peg$c62) {\n s1 = peg$c62;\n peg$currPos += 5;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$c63); }\n }\n if (s1 !== peg$FAILED) {\n peg$savedPos = s0;\n s1 = peg$c64();\n }\n s0 = s1;\n }\n peg$silentFails--;\n if (s0 === peg$FAILED) {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$c58); }\n }\n\n return s0;\n }\n\n function peg$parseIdentifier() {\n var s0, s1, s2, s3, s4;\n\n peg$silentFails++;\n s0 = peg$currPos;\n s1 = peg$parse_();\n if (s1 !== peg$FAILED) {\n if (peg$c66.test(input.charAt(peg$currPos))) {\n s2 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s2 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$c67); }\n }\n if (s2 !== peg$FAILED) {\n s3 = [];\n if (peg$c68.test(input.charAt(peg$currPos))) {\n s4 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s4 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$c69); }\n }\n while (s4 !== peg$FAILED) {\n s3.push(s4);\n if (peg$c68.test(input.charAt(peg$currPos))) {\n s4 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s4 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$c69); }\n }\n }\n if (s3 !== peg$FAILED) {\n peg$savedPos = s0;\n s1 = peg$c70();\n s0 = s1;\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n peg$silentFails--;\n if (s0 === peg$FAILED) {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$c65); }\n }\n\n return s0;\n }\n\n function peg$parse_() {\n var s0, s1;\n\n peg$silentFails++;\n s0 = [];\n if (peg$c72.test(input.charAt(peg$currPos))) {\n s1 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$c73); }\n }\n while (s1 !== peg$FAILED) {\n s0.push(s1);\n if (peg$c72.test(input.charAt(peg$currPos))) {\n s1 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$c73); }\n }\n }\n peg$silentFails--;\n if (s0 === peg$FAILED) {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$c71); }\n }\n\n return s0;\n }\n\n peg$result = peg$startRuleFunction();\n\n if (peg$result !== peg$FAILED && peg$currPos === input.length) {\n return peg$result;\n } else {\n if (peg$result !== peg$FAILED && peg$currPos < input.length) {\n peg$fail(peg$endExpectation());\n }\n\n throw peg$buildStructuredError(\n peg$maxFailExpected,\n peg$maxFailPos < input.length ? input.charAt(peg$maxFailPos) : null,\n peg$maxFailPos < input.length\n ? peg$computeLocation(peg$maxFailPos, peg$maxFailPos + 1)\n : peg$computeLocation(peg$maxFailPos, peg$maxFailPos)\n );\n }\n }\n\n return {\n SyntaxError: peg$SyntaxError,\n parse: peg$parse\n };\n})();\n","import { Action, Reducer } from 'redux';\nimport {\n} from '../models';\nimport * as ContractorActions from './actions/contractors';\nimport { actionCreators as N } from './notifications';\n\nexport interface IContractorState {\n}\n\n// types\nenum Types {\n}\n\nexport type KnownAction = { type: undefined };\n\nexport const plainActions = {\n invalidateContractor: ContractorActions.invalidateContractor,\n getContractorFromAppUser: ContractorActions.getContractorFromAppUser,\n createContractorInvitation: ContractorActions.createContractorInvitation,\n getContractorInvitation: ContractorActions.getContractorInvitation,\n getContractorInvitations: ContractorActions.getContractorInvitations,\n getContractors: ContractorActions.getContractors,\n getContractor: ContractorActions.getContractor,\n getWorkConstants: ContractorActions.getWorkConstants,\n registerContractorInvitation: ContractorActions.registerContractorInvitation,\n saveContractor: ContractorActions.saveContractor,\n acceptSubContractorRequest: ContractorActions.acceptSubContractorRequest,\n rejectSubContractorRequest: ContractorActions.rejectSubContractorRequest,\n saveSubContractorRequest: ContractorActions.saveSubContractorRequest,\n getSubContractorRequestsAsTarget: ContractorActions.getSubContractorRequestsAsTarget,\n getSubContractorRequestsAsWorker: ContractorActions.getSubContractorRequestsAsWorker,\n removeContractorAppUser: ContractorActions.removeContractorAppUser,\n createWorkContractorAppUser: ContractorActions.createWorkContractorAppUser,\n getWorkUsers: ContractorActions.getWorkUsers,\n getContractorAppUsers: ContractorActions.getContractorAppUsers,\n reactivateContractor: ContractorActions.reactivateContractor,\n restrictContractor: ContractorActions.restrictContractor,\n removeRestrictedContractor: ContractorActions.removeRestrictedContractor,\n}\n\nexport const actionCreators = {\n};\n\nexport const reducer: Reducer = (state: IContractorState | undefined, incomingAction: Action): IContractorState => {\n if (state === undefined) {\n return {};\n }\n\n const action = incomingAction as KnownAction;\n\n switch (action.type) {\n default:\n return state;\n }\n};\n","import { Action, Reducer } from 'redux';\nimport { ApplicationState } from '.';\nimport {\n IUserIdentity, IRole, IWork, parseWork, IPropertyGroupType\n} from '../models';\nimport * as App from './app';\nimport * as AdminActions from './actions/admin';\nimport * as UserStore from './user';\nimport { actionCreators as N } from './notifications';\nimport t from '../i18n';\nimport { IUserData } from '../models/identity';\nimport { IModuleInfo } from '@models/works';\n\nexport interface IAdminState {\n users: IUserIdentity[],\n roles: IRole[],\n works: IWork[],\n availableModules: IModuleInfo[],\n}\n\nconst defaultState = {\n users: [], roles: [], works: [], availableModules: [],\n}\n\n// types\nconst initializeType = '[ADMIN] INITIALIZE';\nconst onInitializeType = '[ADMIN] ON INITIALIZE';\nconst onGetUsersType = '[ADMIN] ON GET USERS';\n\n// actions\nexport interface InitializeAction {\n type: '[ADMIN] INITIALIZE'\n}\n\nexport interface OnInitializeAction {\n type: '[ADMIN] ON INITIALIZE',\n data: Partial,\n}\n\nexport interface OnGetUsersAction {\n type: '[ADMIN] ON GET USERS',\n data: Partial,\n}\n\nexport type KnownAction = InitializeAction | OnInitializeAction | OnGetUsersAction | {type: undefined};\n\nconst onInitialize = (data: Partial) => {\n return {\n type: onInitializeType,\n data\n };\n}\n\nconst onGetUsers = (data: Partial) => {\n return {\n type: onGetUsersType,\n data\n };\n}\n\nconst loadWorks = async (dispatch: Function) => {\n dispatch(N.startLoading({\n ctx: 'adminworks',\n }));\n const resp = await AdminActions.getWorks();\n\n const data = {\n ...resp.data,\n works: resp.data.works.map(parseWork),\n };\n\n dispatch(onInitialize(data));\n dispatch(N.stopLoading({\n ctx: 'adminworks',\n }));\n}\n\nconst loadUsers = async (dispatch: Function) => {\n dispatch(N.startLoading({\n ctx: 'adminusers',\n }));\n const resp = await AdminActions.getUsers();\n\n dispatch(onGetUsers(resp.data));\n dispatch(N.stopLoading({\n ctx: 'adminusers',\n }));\n}\n\nconst getGraphqlErrorFromOption = (res: any, op: string|undefined = undefined) => {\n if (res.errors && res.errors.length > 0) {\n return JSON.stringify(res.errors[0]);\n }\n else if (op) {\n return res.data[op].error;\n }\n}\n\nexport const plainActions = {\n getEventTriggers: AdminActions.getEventTriggers,\n saveEventTrigger: AdminActions.saveEventTrigger,\n associateAppUserToWorker: AdminActions.associateAppUserToWorker,\n getNotificationTemplates: AdminActions.getNotificationTemplates,\n removeNotificationTemplate: AdminActions.removeNotificationTemplate,\n saveNotificationTemplate: AdminActions.saveNotificationTemplate,\n getNotificationMessages: AdminActions.getNotificationMessages,\n removeNotificationMessage: AdminActions.removeNotificationMessage,\n saveNotificationMessage: AdminActions.saveNotificationMessage,\n getWorkResources: AdminActions.getWorkResources,\n getWorkDepartments: AdminActions.getWorkDepartments,\n saveDepartment: AdminActions.saveDepartment,\n getJobPropertyGroups: AdminActions.getJobPropertyGroups,\n loadWorkPermissions: AdminActions.loadWorkPermissions,\n saveWorkPermission: AdminActions.saveWorkPermission,\n removeWorkPermission: AdminActions.removeWorkPermission,\n getPropertyGroupTypes: AdminActions.getPropertyGroupTypes,\n removePropertyType: AdminActions.removePropertyType,\n removePropertyGroupType: AdminActions.removePropertyGroupType,\n savePropertyType: AdminActions.savePropertyType,\n saveWorkRequirementType: AdminActions.saveWorkRequirementType,\n saveWorkRequirementGroup: AdminActions.saveWorkRequirementGroup,\n getRequirementType: AdminActions.getRequirementType,\n getWorkRequirementGroups: AdminActions.getWorkRequirementGroups,\n saveWorkRequirementTypeDependency: AdminActions.saveWorkRequirementTypeDependency,\n removeWorkRequirementTypeDependency: AdminActions.removeWorkRequirementTypeDependency,\n saveRequirementTypeDocumentRestriction: AdminActions.saveRequirementTypeDocumentRestriction,\n removeRequirementTypeDocumentRestriction: AdminActions.removeRequirementTypeDocumentRestriction,\n saveRequirementTypeSuggestion: AdminActions.saveRequirementTypeSuggestion,\n removeRequirementTypeSuggestion: AdminActions.removeRequirementTypeSuggestion,\n saveRequirementTypeValidationHolder: AdminActions.saveRequirementTypeValidationHolder,\n removeRequirementTypeValidationHolder: AdminActions.removeRequirementTypeValidationHolder,\n getFieldValidations: AdminActions.getFieldValidations,\n removeFieldValidation: AdminActions.removeFieldValidation,\n saveFieldValidation: AdminActions.saveFieldValidation,\n saveContractorSettings: AdminActions.saveContractorSettings,\n saveMachinerySettings: AdminActions.saveMachinerySettings,\n saveWorkerSettings: AdminActions.saveWorkerSettings,\n saveJobSettings: AdminActions.saveJobSettings,\n saveWorkHasModule: AdminActions.saveWorkHasModule,\n}\n\nexport const actionCreators = {\n savePropertyGroupType: (workId: number, data: IPropertyGroupType) => async (dispatch: Function) => {\n await AdminActions.savePropertyGroupType(workId, data);\n loadWorks(dispatch);\n },\n selectWork: (id: number) => (dispatch: Function) => {\n dispatch(UserStore.actionCreators.selectWork(id, false));\n },\n saveUser: (data: IUserData) => async (dispatch: Function) => {\n const ctxKey = 'adminusers';\n dispatch(N.clearErrors({\n ctx: ctxKey,\n }));\n dispatch(N.startLoading({\n ctx: ctxKey,\n }));\n const res = await AdminActions.saveUser(data);\n if (res.errors || res.data.saveUser.isError) {\n dispatch(N.error({\n ctx: ctxKey,\n action: data.id ? 'edit' : 'add',\n message: getGraphqlErrorFromOption(res, 'saveUser'),\n }));\n }\n else {\n dispatch(N.success({\n ctx: ctxKey,\n action: data.id ? 'edit' : 'add',\n }));\n }\n dispatch(N.stopLoading({\n ctx: ctxKey\n }));\n await loadUsers(dispatch);\n },\n removeUser: (id: number) => async (dispatch: Function) => {\n const ctxKey = 'adminusers';\n dispatch(N.clearErrors({\n ctx: ctxKey,\n }));\n dispatch(N.startLoading({\n ctx: ctxKey,\n }));\n const res = await AdminActions.removeUser(id);\n if (res.errors || res.data.removeUser.isError) {\n dispatch(N.error({\n ctx: ctxKey,\n action: 'remove',\n message: getGraphqlErrorFromOption(res, 'removeUser'),\n }));\n }\n else {\n dispatch(N.success({\n ctx: ctxKey,\n action: 'remove',\n }));\n }\n dispatch(N.stopLoading({\n ctx: ctxKey\n }));\n await loadUsers(dispatch);\n\n },\n saveWork: (data: IWork, opts: any = {}) => async (dispatch: Function) => {\n const ctxKey = opts.ctx || 'adminworks';\n dispatch(N.clearErrors({\n ctx: ctxKey,\n }));\n dispatch(N.startLoading({\n ctx: ctxKey,\n }));\n const res = await AdminActions.saveWork(data);\n if (res.errors || res.data.saveWork.isError) {\n dispatch(N.error({\n ctx: ctxKey,\n action: data.id ? 'edit' : 'add',\n message: getGraphqlErrorFromOption(res, 'saveWork'),\n }));\n }\n else {\n dispatch(N.success({\n ctx: ctxKey,\n action: data.id ? 'edit' : 'add',\n }));\n }\n dispatch(N.stopLoading({\n ctx: ctxKey\n }));\n await loadWorks(dispatch);\n },\n loadUsers: () => (dispatch: Function) => {\n loadUsers(dispatch);\n },\n loadWorks: () => (dispatch: Function) => {\n loadWorks(dispatch);\n },\n initialize: () => async (dispatch: Function, getState: () => ApplicationState) => {\n dispatch(App.actionCreators.startLoading({\n message: t.getFixedT('es')('Initializing ...')\n }));\n const resp = await AdminActions.initialize();\n dispatch(onInitialize(resp.data));\n dispatch(App.actionCreators.stopLoading());\n }\n};\n\nexport const reducer: Reducer = (state: IAdminState | undefined, incomingAction: Action): IAdminState => {\n if (state === undefined) {\n return defaultState;\n }\n\n const action = incomingAction as KnownAction;\n switch (action.type) {\n case onInitializeType: {\n const works = action.data.works\n ? action.data.works.map(parseWork)\n : [];\n\n return {...state, ...action.data, works };\n }\n\n case onGetUsersType: {\n return {...state, ...action.data};\n }\n\n default:\n return state;\n }\n};\n","import * as Identity from './identity';\nimport * as AppState from './app';\nimport * as AdminState from './admin';\nimport * as ConstantsState from './constants';\nimport * as JobState from './jobs';\nimport * as NotificationsState from './notifications';\nimport * as WorkState from './work';\nimport * as UserState from './user';\nimport * as ContractorState from './contractors';\nimport * as ModulesState from './modules';\n\nexport interface ApplicationState {\n identity: Identity.IdentityState | undefined;\n constants: ConstantsState.IConstantsState,\n app: AppState.IAppState,\n admin: AdminState.IAdminState,\n notifications: NotificationsState.INotificationsState,\n work: WorkState.IWorkState,\n user: UserState.IUserState,\n jobs: JobState.IJobState,\n contractors: ContractorState.IContractorState,\n modules: ModulesState.IModulesState,\n}\n\nexport const reducers = {\n identity: Identity.reducer,\n app: AppState.reducer,\n admin: AdminState.reducer,\n constants: ConstantsState.reducer,\n jobs: JobState.reducer,\n notifications: NotificationsState.reducer,\n work: WorkState.reducer,\n user: UserState.reducer,\n contractors: ContractorState.reducer,\n modules: ModulesState.reducer,\n};\n\nexport interface AppThunkAction {\n (dispatch: (action: TAction) => void, getState: () => ApplicationState): void;\n}\n\ntype _IdentityState = Identity.IdentityState;\n\nexport type IdentityState = _IdentityState;\n","import { Action, Reducer } from 'redux';\nimport { ICountry, IWork } from '../models';\n\nexport interface IWorkState {\n work?: IWork;\n}\n\nexport type KnownAction = {type: undefined};\n\nexport const actionCreators = {\n};\n\nexport const reducer: Reducer = (state: IWorkState | undefined, incomingAction: Action): IWorkState => {\n if (state === undefined) {\n return { };\n }\n\n const action = incomingAction as KnownAction;\n switch (action.type) {\n default:\n return state;\n }\n};\n","export const isDebug =\n window.location.hostname === 'localhost'\n || window.location.hostname === 'gstore-dev.civilnova.com';\n\nexport const fileSizeLimit = 30 * 1024 * 1025;\n\nexport default {\n isDebug,\n fileSizeLimit,\n}\n","import * as React from 'react';\nimport './NavMenu.scss';\n\nimport HelpDeskSupport from '@containers/HelpDeskSupportContainer';\nimport Sec from '@utils/security';\nimport { IMessage, INotification, MessageType } from '@models/notifications';\nimport { ICommunication, IOption, ISecurity, IUserIdentity, IWork, ModuleManager } from '@models';\nimport { MenuItem } from '../../../../GStore.Modules/FrontEnd';\nimport { Menubar, classNames, useToast, useTranslation, Badge } from '@components';\nimport { NotificationsMessages } from './notifications/NotificationMessages';\nimport { getReports } from '@store/actions/reports';\nimport { isDebug } from '../Constants';\nimport { redirectToExternal, redirectTo } from '@utils';\nimport { IReportDefinition } from \"@models/reports\";\n\ntype ClearMessageF = (id: string) => Promise>;\n\ninterface IProps {\n clearMessage: ClearMessageF;\n user?: IUserIdentity;\n menuItems: MenuItem[];\n notifications: INotification[];\n messages: IMessage[];\n removeNotification: Function;\n security: ISecurity;\n work: IWork;\n workId: number;\n communications: ICommunication[];\n appUsers: IUserIdentity[];\n moduleManager: ModuleManager;\n}\n\ntype FilterItemsT = (items: any[], props: IProps) => any[];\n\nconst filterMenuItems: FilterItemsT = (items: any[], props: IProps) => {\n return items.filter(i => {\n if (i.showIf) {\n return i.showIf(props);\n }\n else {\n return i;\n }\n }).map(i => {\n if (i.items) {\n return { ...i, items: filterMenuItems(i.items, props) }\n }\n else {\n return i;\n }\n });\n};\n\nfunction NavMenuImpl(props: IProps) {\n const { t } = useTranslation();\n const toast = useToast();\n const [showMessages, setShowMessages] = React.useState(false);\n const [showHelpDesk, setShowHelpDesk] = React.useState(false);\n\n React.useEffect(() => {\n if (props.messages.length <= 0) {\n setShowMessages(false);\n }\n }, [props.messages]);\n\n const hasWork = props.workId > 0;\n const isContractor = props.security.isContractor();\n const isWorker = props.security.isWorker();\n const isGestor = props.security.isGestor();\n const isGestorOrWorker = props.security.isGestorOrWorker();\n const isAdmin = props.security.isAdmin();\n const isContractorOrWorker = !isAdmin && (isContractor || isWorker || isGestor);\n\n const [reportItems, setReportItems] = React.useState([]);\n\n const fillReportItems = (items: IReportDefinition[]) => {\n setReportItems(items\n .filter(r => !r.hidden)\n .map(r => {\n return {\n label: t(r.title),\n icon: r.icon,\n command: () => redirectTo(`/work/${props.workId}/reports/${r.name}`),\n };\n }));\n }\n\n React.useEffect(() => {\n if (props.workId) {\n getReports(props.workId).then(fillReportItems);\n }\n }, [props.workId]);\n\n\n React.useEffect(() => {\n if (props.notifications && props.notifications.length > 0) {\n for (const n of props.notifications) {\n props.removeNotification(n.id);\n toast.show(n.message);\n }\n }\n }, [props.notifications]);\n\n const setLanguage = (lang: string) => {\n document.cookie = `lang=${lang};path=/`;\n window.location.reload();\n }\n\n const userLabel = isDebug ?\n (isAdmin ? \"(admin)\" : isWorker ? \"(trabajador)\" : isGestor ? \"(gestor)\" : isContractor ? \"(contratista)\" : \"(??)\")\n : '';\n const menuItems = filterMenuItems([\n {\n label: t('Start'), icon: 'pi pi-fw pi-home', command: () => redirectTo('/'), showIf: () => props.communications.length == 0\n },\n {\n id: 'functions',\n label: t('Functions'),\n icon: 'fas fa-globe',\n showIf: () => (!props.security.isWorker) && hasWork && isGestorOrWorker && !isAdmin && props.communications.length == 0,\n items: [\n {\n label: t('Jobs'),\n command: () => redirectTo(`/work/${props.workId}/jobs`)\n },\n {\n label: t('Contractors'),\n command: () => redirectTo(`/work/${props.workId}/contractors`)\n },\n {\n label: t('Workers'),\n command: () => redirectTo(`/work/${props.workId}/workers`)\n },\n {\n label: t('Machineries'),\n command: () => redirectTo(`/work/${props.workId}/machineries`)\n },\n {\n label: t('Subcontractors request'),\n command: () => redirectTo(`/work/${props.workId}/subcontractorrequests`)\n }\n ]\n },\n {\n id: 'functions',\n label: t('Functions'),\n icon: 'fas fa-globe',\n showIf: () => isContractor && props.communications.length == 0 && !isAdmin,\n items: [\n {\n label: t('Documents'),\n command: () => redirectTo(`/work/${props.workId}/contractor/requirements`)\n },\n {\n label: t('Workers'),\n command: () => redirectTo(`/work/${props.workId}/workers`)\n },\n {\n label: t('Machineries'),\n command: () => redirectTo(`/work/${props.workId}/machineries`)\n },\n {\n label: t('Jobs'),\n command: () => redirectTo(`/work/${props.workId}/jobs`)\n },\n {\n label: t('Subcontractors'),\n command: () => redirectTo(`/work/${props.workId}/subcontractors`)\n },\n {\n label: t('Subcontractors request'),\n command: () => redirectTo(`/work/${props.workId}/subcontractorrequests`)\n },\n ]\n },\n {\n id: 'utilities',\n label: t('Utilities'),\n icon: 'fas fa-book',\n showIf: () => hasWork && !isAdmin && props.communications.length == 0,\n items: [\n {\n label: t('Reports'), icon: 'fas fa-file',\n showIf: () => hasWork && isContractorOrWorker,\n items: reportItems,\n // command: () => redirectTo(`/work/${props.workId}/reports`),\n },\n {\n label: t('Download area'), icon: 'fas fa-download',\n showIf: () => hasWork && isContractorOrWorker,\n command: () => redirectTo(`/work/${props.workId}/documents`)\n },\n {\n label: t('Access control'), icon: 'fas fa-ban',\n showIf: () => hasWork && isContractorOrWorker,\n items: [\n {\n label: t('Machineries'),\n command: () => redirectTo(`/work/${props.workId}/access-control/machineries`),\n },\n {\n label: t('Workers'),\n command: () => redirectTo(`/work/${props.workId}/access-control/workers`),\n }\n ],\n },\n {\n label: t('Users'), icon: 'pi pi-user',\n showIf: () => isGestor && !isAdmin,\n command: () => redirectTo(`/work/${props.workId}/users`),\n },\n {\n label: t('Communications'), icon: 'fas fa-comments',\n showIf: () => isGestor || isContractor || props.security.hasPolicy('communication.list') || props.security.hasPolicy('communication.create'),\n items: [\n {\n label: t('New Communication'),\n icon: 'fas fa-plus',\n showIf: () => isGestor || props.security.hasPolicy('communication.create'),\n command: () => redirectTo(`/work/${props.workId}/communications/new`),\n },\n {\n label: t('Communications'),\n icon: 'fas fa-search',\n showIf: () => isGestor || props.security.hasPolicy('communication.list') || isContractor,\n command: () => redirectTo(`/work/${props.workId}/communications`),\n }\n ]\n }\n ]\n },\n {\n label: t('Users'), icon: 'pi pi-user',\n showIf: () => Sec.isAdmin(props.user),\n items: [\n {\n label: t('Users'),\n command: () => redirectTo('/admin/users'),\n },\n ]\n },\n {\n label: t('Works'), icon: 'pi pi-list',\n showIf: () => Sec.isAdmin(props.user),\n items: [\n {\n label: t('Works'),\n command: () => redirectTo('/admin/works'),\n }\n ]\n },\n {\n label: t('Devel'), icon: 'pi pi-code',\n showIf: () => Sec.isAdmin(props.user),\n items: [\n {\n label: t('Graphql ui'),\n command: () => redirectTo('/admin/devel/graphqlui'),\n },\n {\n label: t('Schema'),\n command: () => redirectTo('/admin/devel/schema'),\n },\n ]\n },\n { separator: true, className: 'e' },\n {\n className: classNames('notifications-menu-item', { ['notifications-menu-item-open']: showMessages }),\n label: \n \n ,\n command: () => setShowMessages(s => !s),\n showIf: () => (props.messages ?? [])\n .filter(m => m.notificationType != MessageType.RELOAD_NOTIFICATIONS).length > 0\n && props.communications.length == 0\n },\n {\n label: t('helpDesk.support'), icon: 'pi pi-comment',\n className: `help-desk-menu-button help-desk-${showHelpDesk}`,\n showIf: () => props.workId > 0 && props.communications.length == 0,\n command: () => {\n setShowHelpDesk(b => !b);\n },\n },\n {\n className: classNames({\n 'contractor': props.security.isContractor(),\n 'worker': props.security.isWorker(),\n 'admin': props.security.isAdmin(),\n 'gestor': props.security.isGestor()\n }),\n label: userLabel + ' ' + props.user?.userName,\n showIf: () => props.user != undefined,\n },\n {\n icon: 'pi pi-cog',\n showIf: () => !Sec.isAdmin(props.user) && props.user && props.communications.length == 0,\n items: [\n {\n label: t('user.my-data'),\n command: () => redirectTo(`/user/${props.workId}/profile`),\n showIf: () => hasWork && (props.security.isWorker() || props.security.isContractor()),\n },\n {\n label: t('Password'),\n //TODO: Revisar este showIf\n showIf: () => (props.security.user?.id !== 442),\n command: () => redirectTo('/user/password')\n }\n ]\n },\n {\n label: t('Logout'),\n icon: 'pi pi-sign-out',\n showIf: () => props.user !== undefined,\n command: () => redirectToExternal('/api/users/logout'),\n },\n // TODO: Implementar cambio de idioma\n // {\n // label: t('Language'),\n // icon: 'pi pi-globe',\n // showIf: () => props.user === undefined,\n // items: [\n // {\n // label: t('Spanish'),\n // icon: 'pi pi-flag',\n // command: () => setLanguage('es')\n // },\n // {\n // label: t('Italian'),\n // icon: 'pi pi-flag',\n // command: () => setLanguage('it')\n // },\n // {\n // label: t('English'),\n // icon: 'pi pi-flag',\n // command: () => setLanguage('en')\n // }\n // ]\n // },\n {\n label: t('Login'),\n icon: 'pi pi-sign-in',\n showIf: () => props.user === undefined,\n command: () => redirectToExternal('/')\n }\n ], props);\n\n if (props.menuItems) {\n for (const mi of props.menuItems) {\n mi.label = t(mi.label);\n if (mi.parent == undefined) {\n const pos = props.messages.length > 0 ? 5 : 4;\n menuItems.splice(menuItems.length - pos, 0, mi);\n }\n else {\n const parent = menuItems.find(m => m.id == mi.parent);\n if (parent && parent.items) {\n parent.items.push(mi);\n }\n }\n }\n }\n\n const closeHelpDesk = (ok: boolean) => {\n if (ok) {\n toast.show(t('helpDesk.send.ok'));\n }\n setShowHelpDesk(false);\n }\n\n return \n}\n\n\nexport default function NavMenu(props: IProps) {\n\n return props\n .moduleManager\n .renderComponent(\n 'NavMenu',\n { ...props, getReports, Menubar, },\n NavMenuImpl,\n true);\n}\n","import { connect } from 'react-redux';\nimport { ApplicationState } from '../store';\nimport * as Identity from '../store/identity';\nimport * as App from '../store/app';\nimport { ModuleManager } from '@modules';\n\nimport * as NotificationsStore from '../store/notifications';\n\nimport NavMenu from '../components/NavMenu';\n\n\ntype Props =\n Identity.IdentityState;\n\nexport default connect(\n (state: ApplicationState) => ({\n ...state.identity,\n user: state.identity?.user,\n menuItems: state.modules?.menuItems ?? [],\n messages: state.notifications?.messages ?? [],\n workId: state.user?.work?.id,\n notifications: state.notifications?.notifications?.filter(n => n.ctx === 'global') ?? [],\n communications: state.user?.communications ?? [],\n moduleManager: state.modules.moduleManager,\n work: state.user?.work,\n }),\n NotificationsStore.actionCreators,\n)(NavMenu as any) as any; // eslint-disable-line @typescript-eslint/no-explicit-any\n","import * as React from 'react';\n\nimport { useLoading, useMessage, useTranslation } from '@components';\nimport { interpolate } from '@utils';\nimport { currentLocale } from '../../i18n';\n\nexport interface IProps {\n contextData?: any;\n resource?: string;\n useI18n?: boolean;\n silent?: boolean;\n url?: string;\n}\n\nexport default function RemoteHtml({ contextData, url, useI18n, resource, silent }: IProps) {\n const loading = useLoading();\n const errors = useMessage();\n\n const { t } = useTranslation();\n\n const [data, setData] = React.useState('');\n\n const initialize = loading.wrap(async () => {\n const locale = useI18n ? currentLocale() + '/': '';\n const finalUrl = url\n ? url\n : resource\n ? '/api/resources/b/' + locale + btoa(resource)\n : '';\n const resp = await fetch(finalUrl);\n if (resp.status === 200) {\n const d = await resp.text();\n\n if (contextData) {\n setData(interpolate(d, contextData));\n }\n else {\n setData(d);\n }\n }\n else if (resp.status === 404 && !silent) {\n errors.setError(t('resource.404'));\n }\n });\n\n React.useEffect(() => {\n initialize();\n }, []);\n\n return <>\n {loading.render()}\n {errors.renderIfError()}\n
\n ;\n}\n","import { connect } from 'react-redux';\nimport { ApplicationState } from '../store';\n\nimport Footer from '@components/Footer';\n\nexport default connect(\n (state: ApplicationState) => ({\n work: state.user.work,\n })\n)(Footer as any) as any; // eslint-disable-line @typescript-eslint/no-explicit-any\n","import * as React from 'react';\n\nimport { useTranslation } from 'react-i18next';\nimport RemoteHtml from './custom/RemoteHtml';\nimport { IWork } from '@models';\nimport { useDialogs } from '@utils/hooks';\nimport './Footer.css';\nimport { currentLocale } from '../i18n';\n\ninterface IProps {\n work?: IWork;\n}\n\nexport default function Footer(props: IProps) {\n const [footer, setFooter] = React.useState();\n\n const dialogs = useDialogs();\n\n const { t } = useTranslation();\n\n const locale = currentLocale();\n\n const showInfo = () => {\n dialogs.show('info');\n }\n\n const showPolicy = () => {\n dialogs.show('politics');\n }\n\n React.useEffect(() => {\n if (props.work && props.work.footerResource) {\n const resourceId = props.work.footerResource;\n setFooter(resourceId);\n }\n else {\n setFooter(undefined);\n }\n }, [props.work]);\n\n if (footer == undefined) {\n const email = props.work?.contextDataObj.email ?? 'info@cae-gstore.com';\n const phone = props.work?.contextDataObj.phone ?? '+34 984 18 36 74';\n\n return
\n \n
\n }\n else {\n return \n };\n}\n","import * as React from 'react';\n\nimport { useDialogs } from '@utils/hooks';\nimport RemoteHtml from './custom/RemoteHtml';\nimport \"./cookies.scss\";\nimport { locale } from 'primereact/api';\nimport { useTranslation } from 'react-i18next';\nimport { redirectToExternalNewTab } from '@utils';\nimport { currentLocale } from '../i18n';\nexport interface IProps { }\n\nconst COOKIE_NAME = 'gstore-cookie-policy';\n\nexport default function Cookies(props: IProps) {\n const [showCookies, setShowCookies] = React.useState(false);\n\n const { t } = useTranslation();\n\n const dialogs = useDialogs();\n\n const locale = currentLocale();\n\n const acceptPrivacyConset = async () => {\n const resp = await fetch('/api/privacy/accept');\n if (resp.status == 200) {\n setShowCookies(false);\n }\n }\n\n const showInfo = () => {\n locale == 'es' ?\n redirectToExternalNewTab('https://cae-gstore.com/politica-de-cookies/') :\n dialogs.show('info');\n }\n\n // Cuando cargamos el componente buscamos la cookie del consentimiento de privacidad\n React.useEffect(() => {\n const c = !document.cookie.includes(COOKIE_NAME);\n setShowCookies(c);\n }, []);\n\n if (showCookies) {\n return
\n

{t('cookie.message')}

\n {dialogs.render('info', { title: t('cookie.politic.title') }, () => )}\n
\n \n \n
\n
\n }\n else {\n return null;\n }\n}","import * as React from 'react';\nimport { useHistory } from 'react-router-dom';\n\nconst SessionChecker = () => {\n\n const history = useHistory();\n\n React.useEffect(() => {\n\n const checkSession = () => {\n\n const loginTime = sessionStorage.getItem('loginTime');\n\n if(loginTime){\n const currentTime = Date.now();\n const diff = currentTime - parseInt(loginTime);\n const sessionDuration = 1800000;\n\n if(diff > sessionDuration){\n sessionStorage.removeItem('loginTime');\n window.location.href = '/';\n window.location.reload();\n\n }\n }\n }\n\n const intervalId = setInterval(checkSession, 60000);\n\n return () => clearInterval(intervalId);\n\n }, [history]);\n\n\n return <>;\n};\n\nexport default SessionChecker;","import * as React from 'react';\n\nimport { classNames } from '@components';\nimport NavMenu from '../containers/NavMenuContainer';\nimport Footer from '../containers/FooterContainer';\nimport { isDebug } from '../Constants';\nimport Cookies from './Cookies';\nimport SessionChecker from './../SessionChecker';\n\nexport default class Layout extends React.PureComponent<{}, { children?: React.ReactNode }> {\n public render() {\n return (\n
\n \n
\n {this.props.children}\n
\n \n \n \n
\n );\n }\n}\n","import * as React from 'react';\n\nimport { Column, Loading, DataTable, Tooltip, useTranslation, useMemoized } from '@components';\nimport { ILog, IUserIdentity } from '@models';\nimport { getLogs } from '@store/actions/admin';\nimport { formatLocalDate } from '@utils/date-utils';\n\nexport interface IProps {\n users: IUserIdentity[];\n}\n\nexport function LastLogs(props: IProps) {\n const [loading, setLoading] = React.useState(true);\n const [logs, setLogs] = React.useState([]);\n const [currentFilter, setCurrentFilter] = React.useState('');\n\n const { t } = useTranslation();\n\n const formatDate = useMemoized((d: Date) =>\n formatLocalDate(d));\n\n const userName = useMemoized((id: number) =>\n props.users.find(u => u.id == id)?.userName);\n\n const initialize = async () => {\n const d = await getLogs();\n setLogs(d);\n setLoading(false);\n }\n\n React.useEffect(() => {\n initialize();\n }, []);\n\n const filterLogs = async (filter: string) => {\n setLoading(true);\n setCurrentFilter(filter);\n const d = await getLogs(filter);\n setLogs(d);\n setLoading(false);\n }\n\n const Header = (p: any) => {\n const [filter, setFilter] = React.useState(p.filter);\n return
\n setFilter(a.target.value)}\n placeholder={t('Search')} />\n \n
\n }\n\n return
\n {loading && }\n\n }\n className='table'\n resizableColumns\n columnResizeMode='fit'\n showGridlines\n scrollable scrollHeight='500px'\n value={logs}>\n formatDate(u.dateTime)} />\n userName(u.userId)} />\n \n \n \n \n \n \n
\n {u.data}\n
\n \n
} />\n \n
\n}","import * as React from 'react';\nimport { Chart } from 'primereact/chart';\n\nexport default () => {\n const chartData = {\n labels: ['A', 'B', 'C'],\n datasets: [\n {\n data: [300, 50, 100],\n backgroundColor: [\n \"#FF6384\",\n \"#36A2EB\",\n \"#FFCE56\"\n ],\n hoverBackgroundColor: [\n \"#FF6384\",\n \"#36A2EB\",\n \"#FFCE56\"\n ]\n }]\n };\n\n const lightOptions = {\n plugins: {\n legend: {\n labels: {\n color: '#495057'\n }\n }\n }\n };\n\n return (\n
\n \n
\n )\n}","import React from 'react';\n\nimport { Chart } from 'primereact/chart';\n\nimport { useSearch } from '@components';\nimport {formatFileSize} from \"@utils\";\n\ntype IStorageRow = {\n work: string;\n size: number;\n}\n\nexport function StorageChart(props: any) {\n const data = useSearch({\n workId: 3,\n search: 'admin/disk_usage'\n });\n\n const [chartData, setChartData] = React.useState({});\n\n React.useEffect(() => {\n if (data.value) {\n const labels = data.value.map(x => x.work);\n const dataset = data.value.map(x => x.size);\n\n const lineStylesData = {\n labels,\n datasets: [\n {\n backgroundColor: [\n '#7cc057',\n '#f6e072',\n '#42A5F5',\n '#7E57C2',\n '#5d654d',\n '#a13131',\n '#26A69A'\n ],\n label: 'A',\n data: dataset,\n fill: false,\n tension: .4,\n borderColor: '#42A5F5'\n }\n ]\n };\n\n setChartData(lineStylesData);\n }\n else {\n setChartData({});\n }\n }, [data.value]);\n\n const basicOptions = {\n maintainAspectRatio: false,\n aspectRatio: .6,\n plugins: {\n tooltip: {\n callbacks: {\n label: function(t: any, d: any) {\n return formatFileSize(t.raw);\n }\n }\n },\n legend: {\n labels: {\n color: '#495057'\n }\n }\n },\n scales: {\n x: {\n ticks: {\n color: '#495057'\n },\n grid: {\n color: '#ebedef'\n }\n },\n y: {\n ticks: {\n color: '#495057',\n beginAtZero: true,\n callback: function(value: string, index: number) {\n return formatFileSize(parseInt(value));\n }\n },\n grid: {\n color: '#ebedef'\n }\n },\n }\n };\n\n return
\n {data.renderLoading()}\n
\n \n
\n
\n}","import { connect } from 'react-redux';\nimport { ApplicationState } from '../../store';\nimport * as Admin from '../../store/admin';\nimport * as App from '../../store/app';\n\nimport Module, { IProps } from '../../components/admin/Module';\n\ntype Props =\n Admin.IAdminState &\n App.IAppState &\n IProps;\n\nexport default connect(\n (state: ApplicationState) => ({\n users: state.admin.users,\n loading: state.app.loading,\n loadingMessage: state.app.loadingMessage\n }),\n Admin.actionCreators,\n)(Module as any) as any; // eslint-disable-line @typescript-eslint/no-explicit-any\n","import * as React from 'react';\n\nimport './Module.scss';\n\nimport { useTranslation, Card, LoadingBox } from '@components';\n\nimport { LastLogs } from './logs/LastLogs';\nimport SampleChart from '../samples/Chart';\nimport { StorageChart } from './charts/StorageChart';\nimport { IUserIdentity } from '@models';\n\nexport interface IProps {\n loading: boolean;\n loadingMessage?: string;\n initialize: Function;\n users: IUserIdentity[];\n}\n\nexport default function Module(props: IProps) {\n const { t } = useTranslation();\n\n React.useEffect(() => {\n props.initialize();\n }, []);\n\n return
\n {props.loading &&
\n \n
}\n\n
\n \n \n \n \n \n \n \n \n \n
\n
\n}","import * as React from 'react';\n\nimport { connect } from 'react-redux';\nimport { ApplicationState } from '../../store';\nimport * as RequirementsStore from '../../store/requirements';\nimport { ForceValidationResource } from '../../components/requirements/ForceValidationResource';\n\nexport default connect(\n (state: ApplicationState) => ({\n ...state.identity,\n ...state.user,\n ...RequirementsStore.plainActions\n }),\n {},\n)(ForceValidationResource as any) as any; // eslint-disable-line @typescript-eslint/no-explicit-any","import * as React from 'react';\n\nimport { useForm, useLoading, useMessage, useTranslation } from '@components';\nimport { ResourceType } from '@models/resources';\nimport { ISecurity, ResourceStatusType } from '@models';\n\nexport interface IProps {\n workId: number;\n requestClose: Function;\n resourceType: ResourceType,\n resourceId: number,\n forceResourceStatus: Function,\n security: ISecurity,\n currentStatusType?: number,\n}\n\ntype ForceStatusData = {\n untilDate?: Date,\n}\n\nexport function ForceValidationResource(props: IProps) {\n const { t } = useTranslation();\n const loading = useLoading();\n const messages = useMessage();\n const form = useForm({\n initialValues: {}\n });\n\n const validate = loading.wrap(async (valid: boolean = true) => {\n const resp = await props.forceResourceStatus(\n props.workId,\n props.resourceType,\n props.resourceId,\n valid,\n form.values.untilDate);\n messages.set(resp);\n\n if (resp.hasValue && resp.value) {\n props.requestClose(true);\n }\n });\n\n const showAuthorize = props.currentStatusType == undefined\n || [ResourceStatusType.FORCED_REVOKED,\n ResourceStatusType.NOT_AUTHORIZED].includes(props.currentStatusType);\n\n const showRevoke = props.currentStatusType == undefined\n || [ResourceStatusType.FORCED_AUTHORIZED,\n ResourceStatusType.AUTHORIZED].includes(props.currentStatusType);\n\n return
\n
\n {loading.render()}\n \n {showRevoke &&\n }\n {showAuthorize &&\n }\n
\n
\n}\n","import * as React from 'react';\n\nimport { Timeline, useMessage, useTranslation } from '@components';\nimport DateUtils from '@utils/date-utils';\nimport './ViewResourceHistory.scss';\nimport { ResourceType } from '@models';\nimport { search } from '@store/actions/search';\n\ntype ResourceStatusRow = {\n date: Date;\n userName: string;\n statusTypeName: string;\n}\n\nexport interface IProps {\n requestClose?: Function;\n resourceId: number;\n resourceType: ResourceType;\n workId: number;\n}\n\nexport function ViewResourceHistory(props: IProps) {\n const { t } = useTranslation();\n\n const messages = useMessage();\n const [data, setData] = React.useState([]);\n\n const initialize = async () => {\n const filters = {\n resourceType: props.resourceType,\n resourceId: props.resourceId,\n }\n let data;\n\n const resp = await search(props.workId, 'resources/resourceStatus.list', filters);\n if(resp.hasValue){\n data = resp.value;\n }\n\n if([ResourceType.Contractor, ResourceType.Worker, ResourceType.Machinery, ResourceType.JobHasContractor, ResourceType.JobHasWorker, ResourceType.JobHasMachinery].includes(props.resourceType)){\n const restrictions = await search(props.workId, `resources/resourceRestriction.${props.resourceType}.list`, filters);\n data = data?.concat(restrictions.value);\n data = data?.sort((a, b) => new Date(b.date).getTime() - new Date(a.date).getTime());\n }\n messages.set(resp);\n\n if (data) {\n setData(data);\n }\n }\n\n React.useEffect(() => {\n initialize();\n }, []);\n\n return
\n {messages.renderIfError()}\n
\n <>\n {t(item.statusTypeName)}\n }\n content={item => {DateUtils.formatDateTimeFromUtc(item.date)} - {item.userName}}\n marker={}\n value={data}/>\n
\n\n {props.requestClose &&\n
\n \n
}\n
;\n}\n","import * as React from 'react';\n\nimport {\n BreadcrumbItem, Panel, useRemoteData, useTranslation, useToast,\n useLoading, useDialogs, Portal, RequirePermission\n} from '@components';\nimport {\n IActivityType, IConstants, IContractor, ILegalForm, IPropertyGroupType, IResourceStatusType, ISecurity, IWork,\n ResourceType\n} from '@models';\nimport { goToContractor, goToContractorAccessData, goToContractorRequirements, goToContractors } from '@components/routes';\nimport './EditContractor.scss';\nimport ForceValidationResourceContainer from '@containers/requirements/ForceValidationResourceContainer';\nimport { ViewResourceHistory } from '@components/requirements/ViewResourceHistory';\nimport { ModuleManager } from '@modules';\n\ntype GetContractorF = (workId: number, id: number) => Promise;\n\nexport interface IProps {\n propertyGroupTypes: IPropertyGroupType[];\n legalForms: ILegalForm[];\n activityTypes: IActivityType[];\n constants: IConstants;\n children?: any;\n getContractor: GetContractorF;\n work: IWork;\n modules: ModuleManager;\n contractor: IContractor;\n contractorId: number;\n security: ISecurity;\n saveContractor: Function;\n resourceStatusTypes: IResourceStatusType[];\n showRequirements?: boolean;\n}\n\nfunction EditContractorInner(props: IProps) {\n const { t } = useTranslation();\n const loading = useLoading();\n const toast = useToast();\n const dialogs = useDialogs();\n\n props.modules.injectComponents(\n 'contractor.edit',\n props,\n [props.contractorId]);\n\n return
\n goToContractors(props.work.id)} />\n\n \n\n \n {loading.render()}\n \n\n {toast.render()}\n\n {props.contractor &&\n
\n {props.children}\n\n
\n \n \n \n {props.contractor.name}\n
} className='buttons'>\n
\n
\n \n\n \n \n \n \n
\n \n {dialogs.render('force-validation', { title: t('Force resource validation'), className: 'g pd' }, () =>\n \n )}\n {dialogs.render('view-history', { title: t('View history'), className: 'g pd' }, () =>\n \n )}\n
\n
}\n \n}\n\nexport function EditContractor(props: IProps) {\n const data = useRemoteData(props.getContractor, {\n parameters: [props.work.id, props.contractorId]\n });\n\n return
\n {data.renderLoading()}\n {data.value && }\n
\n}\n","import * as React from 'react';\n\nimport { connect } from 'react-redux';\nimport { ApplicationState } from '../../store';\nimport * as ContractorsStore from '../../store/contractors';\nimport { EditContractor } from '../../components/contractors/EditContractor';\nimport { isJobHasContractorPropertyGroupType } from '../../models';\nimport { ModuleManager } from '@modules';\n\nexport default connect(\n (state: ApplicationState, params: any) => ({\n contractorId: params.contractorId ?? parseInt(params.match?.params?.contractorid),\n workId: params.workId ?? parseInt(params.match?.params?.workid),\n ...state.identity,\n ...state.user,\n ...ContractorsStore.plainActions,\n modules: state.modules.moduleManager,\n constants: state.constants,\n propertyGroupTypes: state.user.propertyGroupTypes.filter(isJobHasContractorPropertyGroupType),\n resourceStatusTypes: state.user.resourceStatusTypes,\n }),\n ContractorsStore.actionCreators,\n)(EditContractor as any) as any; // eslint-disable-line @typescript-eslint/no-explicit-any\n","import { Machineries } from \"@components/work/accessControl/Machineries\";\nimport { Action, Reducer } from \"redux\";\nimport {\n} from '../models';\nimport * as MachineriesActions from './actions/machineries';\nimport * as ResourcesActions from './actions/resources';\nimport { actionCreators as N } from \"./notifications\";\n\nexport interface IMachineryState {\n}\n\n// types\nenum types {\n}\n\nexport type KnownAction = { type: undefined };\n\n// ACTIONS\nexport const plainActions = {\n getMachineries: MachineriesActions.getMachineries,\n getMachinery: MachineriesActions.getMachinery,\n saveMachinery: MachineriesActions.saveMachinery,\n removeMachinery: MachineriesActions.removeMachinery,\n reactivateMachinery: MachineriesActions.reactivateMachinery,\n restrictMachinery: MachineriesActions.restrictMachinery,\n removeRestrictedMachinery: MachineriesActions.removeRestrictedMachinery,\n}\n\nexport const actionCreators = {\n}\n\nexport const reducer: Reducer = (state: IMachineryState | undefined, incomingAction: Action): IMachineryState => {\n if (state === undefined) {\n return {};\n }\n\n const action = incomingAction as KnownAction;\n\n switch (action.type) {\n default:\n return state;\n }\n}","import { IMachinery, IPaginateOptions } from \"../../models\";\nimport { m, q } from './graphql';\nimport { formatProperty } from \"@store/actions/utils\";\n\nexport async function getMachineries(workId: number, opts: Partial = {}) {\n const paginateOpts = {\n page: 0,\n limit: 10,\n ...opts,\n };\n return q(`query GetMachineries($workId: Int!, $paginateOpts: PaginateOptionsGraphInputType!) {\n work(id: $workId) {\n paginateMachineries(options: $paginateOpts) {\n page, total, limit,\n data {\n id, name, contractorId, code, description, machineryTypeId,\n currentStatusType, currentStatusDate, forcedStatusUntilDate, isActive,\n prefixLicenseNumber, licenseNumber, suffixLicenseNumber,\n contractor {\n id, name, code\n },\n properties {\n id, propertyGroupTypeId, jobHasMachineryId, value\n }\n }\n }\n }\n }`, { workId, paginateOpts }, { returnPath: 'work.paginateMachineries' });\n}\n\nexport async function getMachinery(workId: number, id: number) {\n return q(`query GetMachinery($workId: Int!, $id: Int!) {\n work(id: $workId) {\n machinery(id: $id) {\n id, name, contractorId, code, description, machineryTypeId,\n machinerySubTypeId, currentStatusType, currentStatusDate,\n forcedStatusUntilDate, isActive, prefixLicenseNumber,\n licenseNumber, suffixLicenseNumber,\n contractor {\n id, name\n },\n properties {\n id, propertyGroupTypeId, machineryId, jobHasMachineryId, value\n },\n }\n }\n }`,\n { workId, id },\n { returnPath: 'work.machinery' });\n}\n\nexport async function saveMachinery(workId: number, rawData: IMachinery, createJobRelations: boolean = false) {\n const data = {\n ...rawData,\n properties: (rawData.properties ?? []).map(formatProperty(workId)),\n };\n return m(`\nmutation SaveMachinery($data: MachineryInputType!, $createJobRelations: Boolean) {\n saveMachinery(machinery: $data, createJobRelations: $createJobRelations) {\n isError, error, value, hasValue\n }\n}\n `, { data, createJobRelations }, { returnPath: 'saveMachinery' });\n}\n\nexport function removeMachinery(id: number, workId: number, remove: boolean = false) {\n return m(`\nmutation RemoveMachinery($id: Int!, $workId: Int!, $remove: Boolean = false) {\n removeMachinery(id: $id, workId: $workId, remove: $remove) {\n isError, error, value\n }\n}\n `, { id, workId, remove }, { returnPath: 'removeMachinery' });\n}\n\nexport function reactivateMachinery(workId: number, id: number) {\n return m(`\nmutation ReactivateMachinery($id: Int!, $workId: Int!) {\n reactivateMachinery(id: $id, workId: $workId) {\n isError, error, value\n }\n}\n `, { id, workId }, { returnPath: 'reactivateMachinery' });\n}\n\n\nexport function restrictMachinery(workId: number, machineryId: number, machineryTypeId: number, name: string, licenseNumber: string, code: string, contractorId: number, applicantName: string, applicantEmail: string, reason: string, remarks: string) {\n return m(`\nmutation RestrictMachinery($workId: Int!, $machineryId: Int!, $machineryTypeId: Int!, $name: String!, $licenseNumber: String!, $code: String!, $contractorId: Int!, $applicantName: String!, $applicantEmail: String!, $reason: String!, $remarks: String!) {\n restrictMachinery(workId: $workId, machineryId: $machineryId, machineryTypeId: $machineryTypeId, name: $name, licenseNumber: $licenseNumber, code: $code, contractorId: $contractorId, applicantName: $applicantName, applicantEmail: $applicantEmail, reason: $reason, remarks: $remarks) {\n isError, error, value\n }\n}\n `, { workId, machineryId, machineryTypeId, name, licenseNumber, code, contractorId, applicantName, applicantEmail, reason, remarks }, { returnPath: 'restrictMachinery' });\n}\n\nexport function removeRestrictedMachinery(workId: number, id: number) {\n return m(`\nmutation RemoveRestrictedMachinery($workId: Int!, $id: Int!) {\n removeRestrictedMachinery(workId: $workId, id: $id) {\n isError, error, value\n }\n}\n `, { workId, id }, { returnPath: 'removeRestrictedMachinery' });\n}","import * as React from 'react';\n\nimport { F, ValidationBuilder, useForm, useLoading, useMessage, useToast, useTranslation } from '@components';\nimport { IOption } from '@models';\nimport {\n IRequirement,\n IRequirementType,\n IRequirementTypeDocumentRestriction,\n RequirementTargetType\n} from '@models/requirements';\nimport { formatFileSize } from '@utils/file-utils';\nimport { fileSizeLimit } from '../../Constants';\n\nimport './UploadRequirements.scss';\n\ntype MeetsDependenciesF = (workId: number, requirementId: number, jobId?: number) => Promise>;\n\nexport interface IProps {\n fulfillRequirement: Function;\n jobId?: number;\n requestClose: (reload: boolean) => void;\n requirement: IRequirement;\n requirementMeetsDependencies: MeetsDependenciesF;\n requirementType: IRequirementType;\n targetTitle: string;\n}\n\nfunction UploadFreeDocument({ onChange }: { onChange: (f: File) => void }) {\n const { t } = useTranslation();\n const toast = useToast();\n\n const fileRef = React.useRef();\n\n // lanzamos el dialogo de seleccionar fichero directamente ?\n // React.useEffect(() => {\n // if (fileRef.current) {\n // fileRef.current.click();\n // }\n // }, []);\n\n const selectFile = (e: React.ChangeEvent) => {\n if ((e.target.files?.length ?? 0) == 1) {\n const f = e.target.files![e.target.files!.length - 1];\n\n if (f.size > fileSizeLimit) {\n toast.error(t('upload.filesize.limit') + ' : ' + formatFileSize(fileSizeLimit));\n return;\n }\n else {\n onChange(f);\n }\n }\n else {\n toast.error(t('files.length.error'));\n }\n }\n\n return
\n \n {t('Select document')}\n {toast.render()}\n \n
\n}\n\nfunction UploadDocument({\n restriction,\n onChange\n}: {\n restriction: IRequirementTypeDocumentRestriction,\n onChange: (f: File) => void,\n}) {\n const toast = useToast();\n const { t } = useTranslation();\n\n const setFromEvent = (e: React.ChangeEvent) => {\n if ((e.target.files?.length ?? 0) > 0) {\n const f = e.target.files![e.target.files!.length - 1];\n let canUpload = true;\n\n if (f.size > fileSizeLimit) {\n canUpload = false;\n toast.error(t('upload.filesize.limit') + ' : ' + formatFileSize(fileSizeLimit));\n return;\n }\n\n if (restriction.mimeTypes) {\n const mimeTypes = restriction.mimeTypes.split(',').map(s => s.trim().toLowerCase());\n const regex = new RegExp(`.+\\.(${mimeTypes.join('|')})$`);\n canUpload = canUpload && regex.test(f.name.toLowerCase());\n }\n\n if (restriction.excludeMimeTypes) {\n const mimeTypes = restriction.excludeMimeTypes.split(',').map(s => s.trim().toLowerCase());\n const regex = new RegExp(`.+\\.(${mimeTypes.join('|')})$`);\n canUpload = canUpload && !regex.test(f.name);\n }\n\n if (canUpload) {\n onChange(f);\n }\n else {\n toast.error(t('File type not allowed'));\n }\n }\n }\n\n return
\n {toast.render()}\n \n {t('Select document')} : {restriction.title}\n \n
\n}\n\nfunction UploadDocumentsWithRestrictions({ documentRestrictions, onChange }: {\n documentRestrictions: IRequirementTypeDocumentRestriction[],\n onChange: (name: string, requirementId: number, file: File, allRequirementsFulfilled: boolean) => void,\n}) {\n const [restrictionWithDocuments, setRestrictionWithDocuments] = React.useState([]);\n\n const onChangeDocument = (r: IRequirementTypeDocumentRestriction) => {\n return (e: File) => {\n setRestrictionWithDocuments(s => s.concat([r.id!]));\n const allRequirementsFulfilled =\n documentRestrictions\n .map(d => d.id!)\n .filter(id => restrictionWithDocuments.includes(id) || r.id == id)\n .length == documentRestrictions?.length;\n\n onChange(e.name, r.id!, e, allRequirementsFulfilled);\n }\n }\n\n return
\n {documentRestrictions.map((r, i) =>\n )}\n
\n}\n\ntype RequirementFile = [string, number | undefined, File];\ntype IFulfillData = {\n expeditionDate?: Date;\n expirationDate?: Date;\n noFileRemarks?: string;\n remarks?: string;\n}\n\nexport function UploadRequirement(props: IProps) {\n const { t } = useTranslation();\n const loading = useLoading();\n const message = useMessage();\n const toast = useToast();\n\n const [canFulfill, setCanFulfill] = React.useState(false);\n const documentRestrictions = props.requirementType.documentRestrictions ?? [];\n const hasDocumentRestrictions = documentRestrictions.length > 0;\n\n const [files, setFiles] = React.useState([]);\n const [fulfilledRequirements, setFulfilledRequirements] = React.useState(false);\n\n React.useEffect(() => {\n checkDependencies();\n }, []);\n\n React.useEffect(() => {\n if (files.length > 1) {\n setFiles(f => f.slice(1, 2));\n }\n }, [files]);\n\n const checkDependencies = async () => {\n const meetsDependencies = await props.requirementMeetsDependencies(\n props.requirement.workId,\n props.requirement.id,\n props.jobId);\n if (!(meetsDependencies.hasValue && meetsDependencies.value)) {\n console.log(meetsDependencies.error);\n console.log(t(meetsDependencies.error ?? ''));\n message.setError(t(meetsDependencies.error ?? 'error'));\n }\n else {\n setCanFulfill(true);\n }\n }\n\n const expirationRequired = props.requirementType.expirationRequired == true;\n\n const form = useForm({\n initialValues: {},\n validateOnMount: true,\n validate: expirationRequired\n ? ValidationBuilder.new().notEmpty('expirationDate').lift()\n : undefined,\n });\n\n const hasExpiration = !expirationRequired\n || form.values.expirationDate != null;\n const canUpload = (hasDocumentRestrictions\n ? fulfilledRequirements\n : files.length > 0) && hasExpiration;\n\n const onFreeDocument = (file: File) => {\n setFiles([[file.name, undefined, file]]);\n setFulfilledRequirements(true);\n }\n\n const onDocumentWithRestrictions = (\n name: string,\n requirementId: number,\n file: File, allRequirementsFulfilled: boolean) => {\n setFiles(f =>\n f.find(r => r[0] === name)\n ? f.map(r => r[0] === name ? [name, r[1], file] : r)\n : f.concat([[name, requirementId, file]]));\n setFulfilledRequirements(allRequirementsFulfilled);\n }\n\n const uploadDocument = loading.wrap(async () => {\n const docs = files.map(f => ({\n name: f[2].name,\n resourceId: f[2],\n fileSize: f[2].size,\n requirementTypeDocumentRestrictionId: f[1],\n }));\n\n const requirement = {\n requirementId: props.requirement.id,\n documents: docs,\n workId: props.requirement.workId\n };\n\n const res = await props.fulfillRequirement(\n props.requirement.workId,\n props.requirement.id,\n { ...requirement, ...form.values }\n );\n\n message.set(res);\n\n if (res.hasValue) {\n props.requestClose(true);\n }\n });\n\n const requirementFileName = (r: RequirementFile) => {\n if (r.length > 0) {\n const [__, _, f] = r;\n return `${f.name} (${formatFileSize(f.size)})`;\n }\n else {\n return '';\n }\n }\n\n const setFile = (f: File) => {\n if (!hasDocumentRestrictions) {\n onFreeDocument(f);\n }\n else {\n const requirementId = documentRestrictions[0].id!;\n const mimeTypes = (documentRestrictions[0].mimeTypes?.split(',') ?? []).map(t => t.trim().toLowerCase()).filter(t => t != '');\n const excludeMimeTypes = (documentRestrictions[0].excludeMimeTypes?.split(',') ?? []).map(t => t.trim().toLowerCase()).filter(t => t != '');\n let canUpload = true;\n\n if (f.size > fileSizeLimit) {\n canUpload = false;\n toast.error(t('upload.filesize.limit') + ' : ' + formatFileSize(fileSizeLimit));\n return;\n }\n\n if (mimeTypes.length > 0) {\n canUpload = mimeTypes.find(t => f.name.toLowerCase().includes(t)) != undefined;\n }\n if (excludeMimeTypes.length > 0) {\n canUpload = excludeMimeTypes.find(t => f.name.toLowerCase().includes(t)) == undefined;\n }\n\n if (canUpload) {\n const allRequirements = true;\n onDocumentWithRestrictions(\n f.name,\n requirementId,\n f,\n allRequirements);\n }\n else {\n toast.error(t('File type not allowed'));\n }\n }\n }\n\n const onDropDocument = (e: any) => {\n if (e.dataTransfer.items && e.dataTransfer.items.length == 1) {\n if (e.dataTransfer.items.kind === 'file') {\n const file = e.dataTransfer.items.getAsFile();\n setFile(file);\n }\n }\n else {\n toast.error(t('files.length.error'));\n }\n\n e.preventDefault();\n e.stopPropagation();\n return false;\n }\n\n const goToTemplate = (e: any) => {\n const url = props.requirementType.template;\n if (url?.startsWith('http') ?? false) {\n window.open(url, '_blank');\n }\n }\n\n const targetKind = props.requirementType.targetType === RequirementTargetType.Contractor\n ? t('requirements.target.contractor')\n : props.requirementType.targetType === RequirementTargetType.Machinery\n ? t('requirements.target.machinery')\n : props.requirementType.targetType === RequirementTargetType.Worker\n ? t('requirements.target.worker')\n : props.requirementType.targetType === RequirementTargetType.JobHasMachinery\n ? t('requirements.target.machinery')\n : props.requirementType.targetType === RequirementTargetType.JobHasWorker\n ? t('requirements.target.worker')\n : props.requirementType.targetType === RequirementTargetType.JobHasContractor\n ? t('requirements.target.contractor')\n : t('requirements.target');\n\n if (canFulfill) {\n return
\n {toast.render()}\n
\n
\n
\n
\n \n {props.targetTitle}\n
\n
\n \n {props.requirementType.title}\n
\n
\n \n {props.requirementType.description}\n
\n
\n
\n \n \n {t('Criteria')}\n \n\n
\n \n {props.requirementType.criteria !== null && props.requirementType.criteria !== '' &&\n
}\n {(props.requirementType.criteria === null || props.requirementType.criteria === '') &&\n {t('requirements.criteria.empty')}}\n
\n
\n
\n \n \n {t('requirements.template')}\n \n\n
\n {props.requirementType.template !== null && props.requirementType.template !== '' &&\n \n \n {props.requirementType.template}\n \n }\n {(props.requirementType.template === null || props.requirementType.template === '') &&\n {t('requirements.template.empty')}}\n
\n
\n
\n \n \n {t('Tolerance')}\n \n
\n \n \n {props.requirementType.expirationThreshold} {t('Days')}\n \n
\n
\n
\n
\n
\n
\n \n {form.calendar('expirationDate')}\n \n
\n
\n
\n
\n\n
\n \n
e.preventDefault()}\n onDrop={onDropDocument}>\n
\n \n {t('requirements.file.upload-area-overwrite')}\n \n
\n\n {!hasDocumentRestrictions &&\n }\n {hasDocumentRestrictions &&\n }\n\n {files.length > 0 &&\n
\n {files.map((f, i) =>\n
\n {requirementFileName(f)}\n
)}\n
}\n
\n
\n {loading.renderBox()}\n
\n
\n {form.errorBox()}\n
\n \n uploadDocument()}>\n \n {t('Upload documentation')}\n \n
\n
;\n }\n else {\n return
\n {message.render()}\n
;\n }\n}\n","import * as React from 'react';\n\nimport { connect } from 'react-redux';\nimport { ApplicationState } from '../../store';\nimport * as RequirementsStore from '../../store/requirements';\nimport { UploadRequirement } from '@components/requirements/UploadRequirement';\n\nexport default connect(\n (state: ApplicationState) => ({\n ...state.identity,\n ...state.user,\n ...state.constants,\n ...RequirementsStore.plainActions,\n }),\n {},\n)(UploadRequirement as any) as any; // eslint-disable-line @typescript-eslint/no-explicit-any\n","import * as React from 'react';\n\nimport { connect } from 'react-redux';\nimport { ApplicationState } from '../../store';\nimport * as RequirementsStore from '../../store/requirements';\nimport { ValidateRequirement } from '../../components/requirements/ValidateRequirement';\n\nexport default connect(\n (state: ApplicationState) => ({\n ...state.identity,\n ...state.user,\n ...state.constants,\n ...RequirementsStore.plainActions,\n moduleManager: state.modules.moduleManager,\n user: state.identity?.user,\n workId: state.work.work?.id,\n }),\n {},\n)(ValidateRequirement as any) as any; // eslint-disable-line @typescript-eslint/no-explicit-any\n","import * as React from 'react';\n\nimport { IRequirement, IRequirementIncidence, IRequirementType, IRequirementValidationData } from '@models/requirements';\nimport { Message, R, useForm, useLoading, useMessage, useTranslation } from '@components';\n\nimport './ValidateRequirement.scss';\nimport { IOption, IUserIdentity, ModuleManager } from '@models';\nimport { RequirementDocumentInfo } from './RequirementDocumentInfo';\nimport dateUtils from '@utils/date-utils';\n\ntype RequirementCanBeValidatedF = (workId: number, requirementId: number) => Promise;\n\ntype ValidateF = (\n workId: number,\n requirementId: number,\n validate: boolean,\n data: IRequirementValidationData,\n) => Promise>;\n\ntype saveRequirementIncidenceT = (\n workId: number,\n data: IRequirementIncidence,\n fileResourceId: string|undefined,\n fileResourceName: string|undefined) => Promise>;\n\nexport interface IProps {\n requestClose: Function;\n requirement: IRequirement;\n requirementType: IRequirementType;\n requirementCanBeValidated: RequirementCanBeValidatedF;\n moduleManager: ModuleManager;\n showInfo?: boolean;\n validateRequirement: ValidateF;\n saveRequirementIncidence: saveRequirementIncidenceT;\n user: IUserIdentity;\n workId: number;\n}\n\ntype ValidateRequirementModuleProps = {\n disableDenyWithValidation?: boolean;\n}\n\nexport function ValidateRequirement(props: IProps) {\n const { t } = useTranslation();\n const loading = useLoading(true);\n const messages = useMessage();\n\n const [canBeValidated, setCanBeValidated] = React.useState(false);\n\n const initialize = loading.wrap(async () => {\n const canBeValidated = await props.requirementCanBeValidated(\n props.requirement.workId,\n props.requirement.id);\n setCanBeValidated(canBeValidated || props.user.roles.includes('gestor'));\n });\n\n React.useEffect(() => {\n initialize();\n }, []);\n\n const form = useForm({\n initialValues: {\n remarks: '',\n expirationThreshold: props.requirementType.expirationThreshold,\n expirationDate: dateUtils.toUtc(props.requirement.expirationDate ?? undefined),\n },\n });\n\n const validate = loading.wrap(async (valid: boolean = true) => {\n // #275 Si se rechaza el requerimiento las observaciones son obligatorias\n if (!valid && !(form.values.remarks && form.values.remarks != '')) {\n messages.setError(t('requirements.incidence.remarks-mandatory'));\n return;\n }\n if(!valid){\n form.values.requirementId = props.requirement.id;\n form.values.remarks = form.values.remarks;\n form.values.createdById = props.user.id;\n form.values.creationDate = new Date();\n form.values.expirationDate = undefined;\n form.values.expirationThreshold = undefined;\n form.values.workId = undefined;\n const resp = await props.saveRequirementIncidence(props.requirement.workId, form.values, undefined, undefined);\n if (resp.hasValue && resp.value) {\n props.requestClose(true);\n }\n }\n else {\n const resp = await props.validateRequirement(\n props.requirement.workId,\n props.requirement.id,\n valid,\n form.values);\n messages.set(resp);\n if (resp.hasValue && resp.value) {\n props.requestClose(true);\n }\n }\n });\n\n const deleteDate = () => {\n form.setFieldValue('expirationDate', undefined);\n }\n\n const suggestions = (props.requirementType?.suggestions?.map(s => s.name) ?? []);\n\n const componentProperties = props\n .moduleManager\n .useComponentProperties('requirements.validate');\n\n // #1242\n // ciertas obras (ej. Azsa) pueden deshabilitar\n // la posibilidad de rechazar los requerimientos\n // desde el formulario de validacion\n const canBeDenied = canBeValidated\n && !(componentProperties?.disableDenyWithValidation ?? false);\n\n return
\n
\n
\n {canBeValidated && <>\n \n {form.autoCompleteTextArea(\n 'remarks',\n {autoFocus: true, suggestions, style: {minWidth: '400px', minHeight: '150px'}})}\n \n
\n \n {form.calendar('expirationDate')}\n \n \n
\n \n {form.input('expirationThreshold', {type: 'number'})}\n \n }\n
\n\n {props.showInfo\n && props.requirement.documents\n && props.requirement.documents?.length > 0\n &&\n }\n
\n\n {messages.render()}\n\n {!canBeValidated &&\n
\n \n
}\n\n
\n {loading.render()}\n \n {canBeDenied && \n }\n {canBeValidated &&\n }\n
\n
;\n}\n","import { connect } from \"react-redux\";\nimport { ApplicationState } from '../../store';\nimport * as ConstantsStore from '@store/constants';\nimport * as RequirementsStore from '@store/requirements';\nimport * as App from '@store/app';\n\nimport { AddRequirementIncidence } from '../../components/requirements/AddRequirementIncidence';\n\nexport default connect(\n (state: ApplicationState) => ({\n ...RequirementsStore.plainActions,\n user: state.identity?.user,\n }),\n {},\n)(AddRequirementIncidence as any) as any; // eslint-disable-line @typescript-eslint/no-explicit-any","import * as React from 'react';\n\nimport { useForm, useLoading, useMessage, useTranslation, ValidationBuilder } from '@components';\nimport { IRequirement, IRequirementIncidence } from '@models/requirements';\nimport { IOption, IUserIdentity } from '@models';\nimport { pushTemporalResource } from '@store/actions/documents';\n\ntype saveRequirementIncidenceT = (\n workId: number,\n data: IRequirementIncidence,\n fileResourceId: string|undefined,\n fileResourceName: string|undefined) => Promise>;\n\nexport interface IProps {\n incidence?: IRequirementIncidence;\n requirement: IRequirement;\n saveRequirementIncidence: saveRequirementIncidenceT;\n onClose: Function;\n onSuccess: Function;\n user: IUserIdentity;\n}\n\nexport function AddRequirementIncidence(props: IProps) {\n const { t } = useTranslation();\n const loading = useLoading();\n const message = useMessage();\n const fileRef = React.useRef();\n const [selectedFile, setSelectedFile] = React.useState();\n\n const defaultIncidence: IRequirementIncidence = {\n requirementId: props.requirement.id,\n creationDate: new Date(),\n remarks: '',\n createdById: props.user.id,\n };\n\n const form = useForm({\n initialValues: props.incidence ?? defaultIncidence,\n validateOnMount: true,\n validate: ValidationBuilder.new()\n .notEmpty('remarks', 'requirements.incidence.remarks-mandatory')\n .lift()\n });\n\n const getFileResourceId = async (file: File|undefined) => {\n if (file) {\n const res = await pushTemporalResource(file);\n // TODO: controlar posibles errores enviando el fichero al servidor\n return res.value;\n }\n else {\n return undefined;\n }\n };\n\n const getFileResourceName = async (file: File|undefined) => {\n if(file) {\n return file.name;\n }\n else {\n return undefined;\n }\n };\n\n const doAdd = loading.wrap(async () => {\n const fileResourceId = await getFileResourceId(selectedFile);\n const fileResourceName = await getFileResourceName(selectedFile);\n const res = await props.saveRequirementIncidence(\n props.requirement.workId,\n form.values,\n fileResourceId,\n fileResourceName)\n message.set(res);\n if (res.hasValue) {\n props.onSuccess(form.values);\n }\n });\n\n const doSelectFile = () => {\n fileRef.current.click();\n }\n\n const onFileSelected = (event: any) => {\n const file = event.target.files[event.target.files.length - 1];\n console.log(file);\n setSelectedFile(file);\n }\n\n return
\n
\n {form.textarea('remarks', {rows: 10, autoFocus: true})}\n
\n {form.errorBox()}\n
\n {message.render()}\n \n {selectedFile && {selectedFile.name}\n \n }\n \n
\n \n \n
\n
\n}","import { connect } from 'react-redux';\nimport { ApplicationState } from '../../store';\nimport * as ConstantsStore from '@store/constants';\nimport * as RequirementsStore from '@store/requirements';\nimport * as App from '@store/app';\n\nimport { AddRequirementNote } from '@components/requirements/AddRequirementNote';\n\nexport default connect(\n (state: ApplicationState) => ({\n ...RequirementsStore.plainActions,\n user: state.identity?.user,\n }),\n {},\n )(AddRequirementNote as any) as any;","import * as React from 'react';\n\nimport { useForm, useLoading, useMessage, useTranslation, ValidationBuilder } from '@components';\nimport {\n IRequirement, IRequirementNote, IRequirementStatus, IRequirementStatusNote, IRequirementValidationData,\n} from '@models/requirements';\nimport { IOption, IUserIdentity } from '@models';\n\ntype saveRequirementNoteT = (workId: number, data: IRequirementNote) => Promise>;\ntype saveRequirementStatusNoteT = (workId: number, data: IRequirementStatusNote) => Promise>;\ntype validateRequirementT = (\n workId: number,\n requirementId: number,\n validate: boolean,\n validationData: IRequirementValidationData\n) => Promise>;\n\nexport interface IProps {\n note?: IRequirementNote;\n requirement: IRequirement;\n status?: IRequirementStatus;\n saveRequirementNote: saveRequirementNoteT;\n validateRequirement: validateRequirementT;\n saveRequirementStatusNote: saveRequirementStatusNoteT;\n onClose: Function;\n onSuccess: Function;\n user: IUserIdentity;\n}\n\nexport function AddRequirementNote(props: IProps) {\n const { t } = useTranslation();\n const loading = useLoading();\n const message = useMessage();\n\n const defaultNote: Partial = {\n requirementId: props.requirement.id,\n remarks: '',\n createdById: props.user.id,\n requirementStatusId: props.status?.id\n };\n\n const form = useForm({\n initialValues: defaultNote,\n validateOnMount: true,\n validate: ValidationBuilder.new()\n .notEmpty('remarks')\n .lift()\n });\n\n const doAdd = loading.wrap(async () => {\n const res = await props.saveRequirementStatusNote(props.requirement.workId, form.values);\n /*\n *[version 0.1]*\n const res = await props.saveRequirementNote(props.requirement.workId, form.values);\n *[version 1.0]*\n const res = await props.validateRequirement(\n props.requirement.workId,\n props.requirement.id,\n true,\n {\n remarks: form.values.remarks,\n skipExpirationDate: true\n });\n */\n message.set(res);\n if (res.hasValue) {\n props.onSuccess(form.values);\n }\n });\n\n return
\n
\n {form.textarea('remarks', {rows: 10, autoFocus: true})}\n
\n {form.errorBox()}\n
\n {message.render()}\n \n \n
\n
\n}\n","import * as React from 'react';\n\nimport { connect } from 'react-redux';\nimport { ApplicationState } from '../../store';\nimport * as RequirementsStore from '@store/requirements';\nimport { ViewRequirementIncidences } from '@components/requirements/ViewRequirementIncidences';\n\nexport default connect(\n (state: ApplicationState) => ({\n ...RequirementsStore.plainActions,\n }),\n {},\n)(ViewRequirementIncidences as any) as any; // eslint-disable-line @typescript-eslint/no-explicit-any","import * as React from 'react';\n\nimport { useDataTable, useRemoteData, useTranslation, useLoading } from '@components';\nimport { IRequirement, IRequirementIncidence } from '@models/requirements';\nimport DateUtils from '@utils/date-utils';\n\nimport './ViewRequirementIncidences.scss';\n\nexport interface IProps {\n getRequirementIncidences: Function;\n requirement: IRequirement;\n targetType: number;\n targetId: number;\n onClose: Function;\n}\n\nexport function ViewRequirementIncidences(props: IProps) {\n const { t } = useTranslation();\n\n const loading = useLoading();\n\n const remoteData = useRemoteData(props.getRequirementIncidences, {\n parameters: [props.requirement.workId, props.requirement.id, props.targetType, props.targetId],\n });\n\n const [lastVersion, setLastVersion] = React.useState<[number, number] | undefined>();\n\n React.useEffect(() => {\n const documents = props.requirement.documents ?? [];\n if (documents.length > 0 && (documents[0].document.versions?.length ?? 0) > 0) {\n const v = documents[0].document!.versions!.sort((a, b) => b.id - a.id)[0];\n setLastVersion([documents[0].document.id, v.id]);\n }\n }, [props.requirement]);\n\n const initialize = loading.wrap(async () => {\n await remoteData.query();\n });\n\n const incidences = (remoteData.value ?? [])\n .sort((a, b) => (b.creationDate as any).localeCompare(a.creationDate as any));\n\n const renderIncidence = (d: IRequirementIncidence) => {\n return \n }\n\n const renderDate = (d: IRequirementIncidence) => {\n const date = DateUtils.formatLocalDate(d.creationDate);\n const [day, time] = date.split(' ');\n return
\n {day}\n {time}\n
\n }\n\n const dataTable = useDataTable({\n columns: [\n {\n title: t('Date'),\n className: 'td-md center',\n render: renderDate,\n },\n { title: t('Incidence'), render: renderIncidence },\n {\n className: 'td-sm', render: (d: IRequirementIncidence) => {\n if (d.documentVersionId != null) {\n const [documentId, _] = lastVersion!;\n return downloadFile([documentId, d.documentVersionId!])} />\n }\n else {\n return null;\n }\n }\n }\n ],\n data: incidences,\n loading: remoteData.loading,\n });\n\n React.useEffect(() => {\n initialize();\n }, []);\n\n const downloadFile = ([documentId, versionId]: [number, number]) => {\n const url = `/api/files/${props.requirement.workId}/document/${documentId}/version/${versionId}`;\n\n window.location.href = url;\n }\n\n return
\n
\n {dataTable()}\n
\n {lastVersion &&\n
\n \n
}\n
\n
\n}\n","import * as React from 'react';\n\nimport { connect } from 'react-redux';\nimport { ApplicationState } from '../../store';\nimport * as RequirementsStore from '@store/requirements';\nimport { ViewRequirementNotes } from '@components/requirements/ViewRequirementNotes';\n\nexport default connect(\n (state: ApplicationState) => ({\n ...RequirementsStore.plainActions,\n }),\n {},\n)(ViewRequirementNotes as any) as any; // eslint-disable-line @typescript-eslint/no-explicit-any","import * as React from 'react';\n\nimport { useDataTable, useRemoteData, useTranslation, useLoading } from '@components';\nimport { IRequirement, IRequirementNote, IRequirementStatus, IRequirementStatusNote, RequirementStatusTypes } from '@models/requirements';\nimport DateUtils from '@utils/date-utils';\nimport { flatten } from '@utils';\nimport dateUtils from '@utils/date-utils';\n\nexport interface IProps {\n getRequirement: Function;\n requirement: IRequirement;\n targetId: number;\n targetType: number;\n}\n\ninterface IRemarkRow {\n dateTime: Date;\n remarks: string;\n}\n\nexport function ViewRequirementNotes(props: IProps) {\n const { t } = useTranslation();\n const loading = useLoading();\n\n const isCompleted = React.useRef(false);\n const data = React.useRef([]);\n\n const initialize = loading.wrap(async () => {\n loading.start();\n isCompleted.current = false;\n const c: IRequirement = props.requirement;\n const completeNotes: IRemarkRow[] = [];\n c.status.forEach((s: IRequirementStatus) => {\n if (s.remarks != undefined && s.remarks != '' && s.statusTypeId != RequirementStatusTypes.NOT_VALIDATED) {\n completeNotes.push({dateTime: s.dateTime, remarks: s.remarks});\n }\n if (s.notes != undefined && s.notes.length > 0) {\n completeNotes.push(...s.notes.map((n: IRequirementStatusNote) => ({dateTime: n.creationDate, remarks: n.remarks})));\n }\n });\n data.current = completeNotes.sort((a, b) => a.dateTime > b.dateTime ? -1 : 1);\n isCompleted.current = true;\n loading.stop();\n });\n\n const dataTable = useDataTable({\n columns: [\n { title: t('Date'), className: 'td-md', render: d => DateUtils.formatLocalDate(d.dateTime) },\n { title: t('Note'), render: d => d.remarks },\n ],\n data: data.current,\n loading: !isCompleted.current,\n });\n\n React.useEffect(() => {\n initialize();\n }, []);\n\n return
\n
\n
\n {loading.isLoading() && loading.render()}\n {!loading.isLoading() && dataTable()}\n
\n
\n
\n
\n}","import { IPaginateOptions, IWorker } from '@models';\nimport { q, m, getClient } from './graphql';\nimport { ensureType, formatProperty } from \"@store/actions/utils\";\nimport { pushTemporalResource } from './documents';\n\nexport async function getWorkers(workId: number, opts: Partial = {}) {\n const paginateOpts = {\n page: 0,\n limit: 10,\n ...opts,\n };\n return q(`query GetWorkers($workId: Int!, $paginateOpts: PaginateOptionsGraphInputType!) {\n work(id: $workId) {\n paginateWorkers(options: $paginateOpts) {\n page, total, limit,\n data {\n id, name, surname, code, workerDocumentTypeId, workerTypeId,\n currentStatusType, currentStatusDate, forcedStatusUntilDate, contractorId\n contractor {\n id, name\n },\n properties {\n id, jobHasWorkerId, propertyGroupTypeId, value\n },\n }\n }\n }\n }`, { workId, paginateOpts }, { returnPath: 'work.paginateWorkers' });\n}\n\nexport async function getWorker(workId: number, id: number) {\n return q(`query GetWorker($workId: Int!, $id: Int!) {\n work(id: $workId) {\n worker(id: $id) {\n id, name, surname, code, workerDocumentTypeId, workerTypeId,\n currentStatusType, currentStatusDate,\n workId,\n forcedStatusUntilDate, contractorId,\n isActive,\n remarks,\n phone,\n contractor {\n id, name\n },\n photo { id },\n properties {\n id, propertyGroupTypeId, workerId, jobHasWorkerId, value\n },\n }\n }\n }`,\n { workId, id },\n { returnPath: 'work.worker' });\n}\n\nexport interface ISaveWorkerOpts {\n createJobRelations: boolean,\n imageFile?: File,\n}\n\nconst defaultSaveWorkerOpts = {\n createJobRelations: false,\n}\n\nconst uploadImageFile = async (f: File | undefined) => {\n if (f) {\n const res = await pushTemporalResource(f);\n return res.hasValue ? res.value : null;\n }\n else {\n return null;\n }\n}\n\nexport async function saveWorker(workId: number, rawData: IWorker, options: ISaveWorkerOpts = defaultSaveWorkerOpts) {\n const data = ensureType({\n ...rawData,\n properties: (rawData.properties ?? []).map(formatProperty(workId)),\n }, {\n exclude: [\n 'currentStatusType', 'currentStatusDate', 'forcedStatusUntilDate',\n 'contractor', 'photo'\n ]\n });\n\n const imageResourceId = await uploadImageFile(options.imageFile);\n\n return await m(`\nmutation SaveWorker($data: WorkerInputType!, $createJobRelations: Boolean, $imageResource: String) {\n saveWorker(worker: $data, createJobRelations: $createJobRelations, imageResource: $imageResource) {\n isError, error, value, hasValue\n }\n}\n `,\n {\n data,\n createJobRelations: options.createJobRelations,\n imageResource: imageResourceId,\n },\n { returnPath: 'saveWorker' });\n}\n\nexport function removeWorker(id: number, workId: number, remove: boolean) {\n return m(`\nmutation RemoveWorker($id: Int!, $workId: Int!, $remove: Boolean!) {\n removeWorker(id: $id, workId: $workId, remove: $remove) {\n isError, error, value\n }\n}\n `, { id, workId, remove }, { returnPath: 'removeWorker' });\n}\n\nexport function reactivateWorker(workId: number, id: number) {\n return m(`\nmutation ReactivateWorker($id: Int!, $workId: Int!) {\n reactivateWorker(id: $id, workId: $workId) {\n isError, error, value\n }\n}\n `, { id, workId }, { returnPath: 'reactivateWorker' });\n}\n\nexport async function restrictWorker(workId: number, workerId: number, name: string, surname: string, code: string, contractorId: number, applicantName: string, applicantEmail: string, reason: string, remarks: string) {\n\n const resp = await m(`\nmutation RestrictWorker($workId: Int!, $workerId: Int!, $name: String!, $surname: String!, $code: String!, $contractorId: Int!, $applicantName: String!, $applicantEmail: String!, $reason: String!, $remarks: String!) {\n restrictWorker(workId: $workId, workerId: $workerId, name: $name, surname: $surname, code: $code, contractorId: $contractorId, applicantName: $applicantName, applicantEmail: $applicantEmail, reason: $reason, remarks: $remarks) {\n isError, error, value, hasValue\n }\n}\n `, { workId, workerId, name, surname, code, contractorId, applicantName, applicantEmail, reason, remarks });\n\n return resp?.data;\n\n}\n\nexport async function removeRestrictedWorker(id: number, workId: number) {\n return m(`\nmutation RemoveRestrictedWorker($id: Int!, $workId: Int!) {\n removeRestrictedWorker(id: $id, workId: $workId) {\n isError, error, value, hasValue\n }\n}\n `, { id, workId });\n}\n","import { Action, Reducer } from 'redux';\nimport {\n} from '../models';\nimport * as WorkerActions from './actions/workers';\nimport * as ResourcesActions from './actions/resources';\nimport { actionCreators as N } from './notifications';\n\nexport interface IWorkerState {\n}\n\n// types\nenum Types {\n}\n\nexport type KnownAction = { type: undefined };\n\nexport const plainActions = {\n getWorkers: WorkerActions.getWorkers,\n getWorker: WorkerActions.getWorker,\n saveWorker: WorkerActions.saveWorker,\n reactivateWorker: WorkerActions.reactivateWorker,\n removeWorker: WorkerActions.removeWorker,\n restrictWorker: WorkerActions.restrictWorker,\n removeRestrictedWorker: WorkerActions.removeRestrictedWorker\n}\n\nexport const actionCreators = {\n};\n\nexport const reducer: Reducer = (state: IWorkerState | undefined, incomingAction: Action): IWorkerState => {\n if (state === undefined) {\n return {};\n }\n\n const action = incomingAction as KnownAction;\n\n switch (action.type) {\n default:\n return state;\n }\n};","import { connect } from \"react-redux\";\nimport { ApplicationState } from '../../store';\nimport * as RequirementsStore from '@store/requirements';\nimport * as WorkersStore from '@store/workers';\nimport * as MachineriesStore from '@store/machineries';\nimport { ResourcePhoto } from '../../resources/ResourcePhoto';\nimport { flatten } from '@utils/index';\n\nexport default connect(\n (state: ApplicationState) => ({\n ...RequirementsStore.plainActions,\n ...WorkersStore.plainActions,\n ...MachineriesStore.plainActions,\n identity: state.identity?.user,\n appUsers: state.user.work?.users,\n requirementStatusTypes: state.user.requirementStatusTypes,\n requirementTypes: flatten(\n state\n .user\n .requirementGroups\n .map(g => g.requirementTypes ?? []))\n }),\n {},\n)(ResourcePhoto as any) as any; // eslint-disable-line @typescript-eslint/no-explicit-any","import * as React from 'react';\n\nimport {\n Portal,\n classNames, R, SplitButton, TabPanel, TabView, Tag, Tooltip, useDialogs, useRemoteData,\n useTranslation, Panel, useSignalR, useConfirm, useLoading, usePermissions,\n} from '@components';\nimport UploadRequirement from '@containers/requirements/UploadRequirementContainer';\nimport ValidateRequirement from '@containers/requirements/ValidateRequirementContainer';\nimport AddRequirementIncidenceContainer from '@containers/requirements/AddRequirementIncidenceContainer';\nimport AddRequirementNoteContainer from '@containers/requirements/AddRequirementNoteContainer';\nimport { ViewRequirementHistory } from './ViewRequirementHistory';\nimport ValidateAllRequirements from '@containers/requirements/ValidateAllRequirementsContainer';\nimport RemoteHtml from '@components/custom/RemoteHtml';\nimport {\n IRequirement, IRequirementGroup, IRequirementHasDocument,\n IRequirementStatusType, IRequirementType,\n IRequirementIncidence,\n requirementCanBeValidated,\n requirementCanUpload,\n IRequirementNote,\n FreeRequirementType,\n RequirementTypeKind,\n RequirementStatusTypes,\n userCanValidateRequirement,\n IRequirementNotification, RequirementTargetType, RequirementTypeDependencyType,\n RequirementValidationType,\n IRequirementStatus,\n} from '@models/requirements';\nimport { IContractor, ResourceType } from '@models/resources';\nimport * as C from '../../Constants';\nimport { flatten, formatFileSize } from '@utils';\nimport DateUtils from '@utils/date-utils';\n\nimport './EditRequirements.scss';\nimport ViewRequirementIncidencesContainer from '@containers/requirements/ViewRequirementIncidencesContainer';\nimport ViewRequirementNotesContainer from '@containers/requirements/ViewRequirementNotesContainer';\nimport { DocumentViewer, hasViewer } from '@components/viewers/DocumentViewer';\nimport { RequirementDocumentInfo } from './RequirementDocumentInfo';\nimport { IJob, IUserIdentity, ISecurity, IOption, IWork, ModuleManager } from '@models';\nimport ResourcePhotoContainer from '@containers/resources/ResourcePhotoContainer';\nimport { MenuItem } from 'primereact/menuitem';\nimport { ViewRequirementValidations } from './ViewRequirementValidations';\nimport dateUtils from '@utils/date-utils';\n\ntype PendingRequirementsCallback = (hasPendingRequirements: boolean) => void;\n\nexport interface IProps {\n getRequirements: (workId: number, targetType: number, targetId: number) => Promise;\n getRequirement: (workId: number, targetType: number, targetId: number, requirementId: number) => Promise;\n removeRequirementFile: (requirement: IRequirement) => Promise>;\n removeFreeRequirement: (requirement: IRequirement) => Promise>;\n hasAccessJobInformation?: boolean;\n jobId?: number;\n job?: IJob;\n onHasPendingRequirements?: PendingRequirementsCallback;\n readOnly?: boolean;\n requirementGroups: IRequirementGroup[];\n requirementStatusTypes: IRequirementStatusType[];\n requirementIncidence: IRequirementIncidence;\n requirementNote: IRequirementNote;\n security: ISecurity;\n siblingId?: number;\n siblingType?: number;\n siblingContractorId?: number;\n siblingJobHasContractorId?: number;\n targetId: number;\n targetTitle: string;\n targetType: number;\n work: IWork;\n workId: number;\n appUsers: IUserIdentity[];\n index: number;\n getContractorFromAppUser: Function;\n getJobHasWorker: Function;\n getJobHasMachinery: Function;\n getJobHasContractor: Function;\n getContractor: Function;\n getWorker: Function;\n getMachinery: Function;\n moduleManager: ModuleManager;\n skipMirrorDependencies?: boolean;\n ctx?: any;\n}\n\nenum RequirementMode {\n FreeRequirement,\n DirectRequirement,\n RequirementWithMirrorDependency,\n RequirementWithValidationDependency,\n IBODependency,\n}\n\ntype RequirementModeData = {\n mode: RequirementMode,\n meetsRequirements?: boolean,\n}\n\nfunction ViewRequirementDocument({ document, onClose, requirement, restrictionTitle }: {\n document: IRequirementHasDocument,\n onClose: Function,\n requirement: IRequirement,\n restrictionTitle?: string,\n}) {\n var sortedVersions = document.document.versions!.sort((a, b) => dateUtils.compareDates(dateUtils.fromUtc(b.dateTime), dateUtils.fromUtc(a.dateTime)));\n\n const lastVersion = sortedVersions[0];\n // const lastVersion = document.document;\n\n const { t } = useTranslation();\n const dialogs = useDialogs();\n const documentUrl = `/api/files/${requirement.workId}/document/${document.document.id}/version/${lastVersion.id}`;\n\n const openViewer = () => {\n window.open(`/work/${requirement.workId}/requirements/${requirement.id}/documents/${document.id}`);\n }\n\n return
\n
\n
\n {restrictionTitle && {restrictionTitle}}\n
\n \n \n {lastVersion.name}\n \n \n \n \n {lastVersion.mimeType}\n \n \n \n \n {formatFileSize(lastVersion.size)}\n \n \n \n \n {DateUtils.formatFromUtc(lastVersion.dateTime)}\n \n \n \n \n {document.createdBy}\n \n \n
\n
\n
\n \n
\n
\n\n {dialogs.render('viewer', { maximized: true, title: t('View document') }, () =>\n \n )}\n\n
\n \n {hasViewer(document.document.mimeType) &&\n }\n \n \n {t('Download')}\n \n
\n
\n}\n\nfunction RequirementDocument({ document, index, requirement, requirementType }: {\n document: IRequirementHasDocument,\n index: number,\n requirement: IRequirement,\n requirementType: IRequirementType\n}) {\n const dialogs = useDialogs();\n const { t } = useTranslation();\n const restriction = requirementType.documentRestrictions?.find(r => r.id == document.documentRestrictionId);\n const restrictionTitle = restriction?.title;\n\n const tooltip = restrictionTitle\n ? `${restrictionTitle}: ${document.document.name}`\n : document.document.name;\n\n return \n \n\n {dialogs.render('show-document', { title: t('Show document') }, () =>\n dialogs.clear()} />)}\n \n}\n\nfunction RequirementDocumentsRow({ requirement, requirementType }: {\n requirement: IRequirement,\n requirementType: IRequirementType\n}) {\n return \n {requirement.documents?.sort((a, b) => b.id - a.id).slice(-1).map((r, i) =>\n )}\n ;\n}\n\nfunction RequirementRow({\n ctx,\n hasAccessJobInformation,\n jobId,\n job,\n index,\n onRequestReload, readOnly, requirement, requirementType, requirementGroup, requirementStatusTypes,\n requirementPair,\n removeFreeRequirement,\n removeRequirementFile,\n targetType, security, targetId, targetTitle, appUsers, work, getContractorFromAppUser,\n getJobHasWorker, getJobHasMachinery, getJobHasContractor, getContractor, getWorker, getMachinery, moduleManager,\n meetsRequirements,\n}: {\n ctx: any,\n index: number,\n hasAccessJobInformation?: boolean,\n jobId?: number,\n job?: IJob,\n onRequestReload: Function,\n readOnly?: boolean,\n removeFreeRequirement?: Function,\n removeRequirementFile: Function,\n requirement: IRequirement,\n requirementType: IRequirementType,\n requirementGroup: IRequirementGroup,\n requirementStatusTypes: IRequirementStatusType[],\n requirementIncidence: IRequirementIncidence,\n requirementPair?: RequirementPair[],\n security: ISecurity,\n targetTitle: string,\n targetType: number,\n targetId: number,\n appUsers: IUserIdentity[],\n work: IWork,\n getContractorFromAppUser: Function,\n getJobHasWorker: Function,\n getJobHasMachinery: Function,\n getJobHasContractor: Function,\n getContractor: Function,\n getWorker: Function,\n getMachinery: Function,\n moduleManager: ModuleManager,\n meetsRequirements: boolean,\n}) {\n const { t } = useTranslation();\n\n const loading = useLoading();\n const removeFile = loading.wrap(async () => {\n await removeRequirementFile(requirement);\n onRequestReload();\n });\n const performRemoveFreeRequirement = loading.wrap(async () => {\n await removeFreeRequirement?.(requirement);\n onRequestReload();\n });\n\n const dialogs = useDialogs();\n const actionsBtn = React.useRef({});\n const [selfContractor, setSelfContractor] = React.useState(undefined);\n const [resourceContractorId, setResourceContractorId] = React.useState(undefined);\n const confirmRemove = useConfirm({\n message: t('Are you sure to delete the file ?'),\n accept: removeFile,\n target: () => actionsBtn.current.container,\n });\n const confirmRemoveFreeRequirement = useConfirm({\n message: t('requirements.remove-free-requirement.confirm'),\n accept: performRemoveFreeRequirement,\n target: () => actionsBtn.current.container,\n });\n\n if (work.id != 21) {\n const initialize = async () => {\n const contractor = await getContractorFromAppUser(work.id);\n setSelfContractor(contractor);\n let resource = undefined;\n if (requirementType.targetType == RequirementTargetType.JobHasMachinery || (jobId != undefined && requirementType.targetType == RequirementTargetType.Machinery)) {\n resource = await getJobHasMachinery(work.id, jobId, targetId);\n setResourceContractorId(resource.machinery.contractorId);\n }\n else if (requirementType.targetType == RequirementTargetType.JobHasWorker || (jobId != undefined && requirementType.targetType == RequirementTargetType.Worker)) {\n resource = await getJobHasWorker(work.id, jobId, targetId);\n setResourceContractorId(resource.worker.contractorId);\n }\n else if (requirementType.targetType == RequirementTargetType.JobHasContractor || (jobId != undefined && requirementType.targetType == RequirementTargetType.Contractor)) {\n resource = await getJobHasContractor(work.id, jobId, targetId);\n setResourceContractorId(resource.contractorId);\n }\n else if (requirementType.targetType == RequirementTargetType.Worker) {\n resource = await getWorker(work.id, targetId);\n setResourceContractorId(resource.contractorId);\n }\n else if (requirementType.targetType == RequirementTargetType.Machinery) {\n resource = await getMachinery(work.id, targetId);\n setResourceContractorId(resource.contractorId);\n }\n else if (requirementType.targetType == RequirementTargetType.Contractor) {\n resource = await getContractor(work.id, targetId);\n setResourceContractorId(resource.id);\n }\n };\n\n React.useEffect(() => {\n initialize();\n }, []);\n }\n\n const currentStatus = requirement.status.find(s => s.isCurrent);\n const currentStatusType = currentStatus?.statusTypeId;\n const statusType = requirementStatusTypes.find(s => s.id == currentStatus?.statusTypeId);\n\n // Si la validacion es ita y esta validado no dejamos cargar documentos\n // #249: Transportistas\n const preCanUpload = work.id == 19 ? (!work.settingsObj?.mainContractorCanFulfillSubs ? selfContractor ? resourceContractorId == selfContractor?.id : !readOnly && (security.isGestor() || (security.hasPermission('requirements.upload')) ||\n (!readOnly && requirementCanUpload(requirement, targetType, security, {\n hasAccessJobInformation,\n requirementType,\n })))\n && !(requirementType.validationTypeId == RequirementValidationType.ITA\n && targetType != RequirementTargetType.JobHasContractor\n && targetType != RequirementTargetType.Contractor\n && currentStatus?.statusTypeId == RequirementStatusTypes.VALIDATED) : true) : !readOnly && (security.isGestor() || (security.hasPermission('requirements.upload')) ||\n (!readOnly && requirementCanUpload(requirement, targetType, security, {\n hasAccessJobInformation,\n requirementType,\n })));\n\n const haveIncidences =\n (currentStatus?.statusTypeId == 4 && currentStatus?.remarks && currentStatus?.remarks != '')\n || requirement.hasIncidences;\n\n const haveNotes = () : boolean => {\n\n if(currentStatus && (!currentStatus.notes || currentStatus.notes?.length == 0)){\n return false;\n }\n\n if(currentStatus?.statusTypeId != 3){\n return requirement.hasNotes ?? false;\n }else{\n return (currentStatus.notes && currentStatus.notes?.length > 0) ?? false;\n }\n }\n\n const mainDepartment = job?.departments?.find(d => d.isMain);\n const canValidateContext = {\n job,\n mainDepartment,\n };\n\n const isJobRequirement = (requirement: IRequirement) =>\n targetType == RequirementTargetType.JobHasDepartment\n || targetType == RequirementTargetType.Job\n || targetType == RequirementTargetType.JobHasContractor\n || targetType == RequirementTargetType.JobHasWorker\n || targetType == RequirementTargetType.JobHasMachinery;\n\n const permissionCtx = {\n job: job,\n security: security,\n requirement: requirement,\n requirementType: requirementType,\n canUpload: preCanUpload,\n resourceContractorId: resourceContractorId,\n ...ctx,\n };\n\n // validaciones multiples\n const [_showValidations, setShowValidations] = React.useState(false);\n const showValidations = () => {\n // solo mostramos los validadores si el tipo de validacion = REQUIRE_ALL\n const allHolders = requirementType\n .validationHolders?.filter(h => h.optional != true)?.length ?? 0;\n const optionalHolders = requirementType.validationHolders?.filter(h => h.optional == true).map(r => r.id);\n const currentOptionalValidations = requirement.validations.filter(r => optionalHolders?.includes(r.validationHolderId) && r.validated && r.isCurrent);\n if (requirementType.validationTypeId == RequirementValidationType.REQUIRE_ALL) {\n setShowValidations(allHolders > 1 || currentOptionalValidations.length >= 1);\n }\n }\n const hideValidations = () => setShowValidations(false);\n\n const editRequirementsProps = {\n security,\n moduleManager,\n work,\n };\n\n const canReportIncidencesDefaultPermission = (requirementCanBeValidated(requirement)\n && userCanValidateRequirement(requirementType, security, canValidateContext)\n ) || security.isGestor();\n\n const canRemoveFreeRequirementDefaultPermission = !readOnly && (security.isGestor()\n || security.hasPermission('requirements.remove-free-requirement')\n || (security.isWorker() && requirement.status.length == 1\n && requirement.status[0].statusTypeId == RequirementStatusTypes.PENDING)\n ) && !security.isContractor();\n\n const canUploadDefaultPermission = isJobRequirement(requirement)\n ? 'job.canUploadRequirements'\n : 'canUploadRequirements';\n\n const canRemoveDefaultPermission = canUploadDefaultPermission && !security.isContractor();\n\n const canAddObservationsDefaultPermission = isJobRequirement(requirement)\n ? 'job.requirements.can-add-observations'\n : 'requirements.can-add-observations';\n\n const canValidateDefaultPermission = (requirementCanBeValidated(requirement)\n && userCanValidateRequirement(requirementType, security, canValidateContext)) || security.isGestor();\n\n const perms = usePermissions(\n editRequirementsProps, {\n ctx: permissionCtx,\n debug: false,\n dependencies: resourceContractorId\n }, {\n canReportIncidences: {\n name: isJobRequirement(requirement)\n ? 'job.requirements.create-incidence'\n : 'requirements.create-incidence',\n default: canReportIncidencesDefaultPermission,\n },\n canRemove: {\n name: isJobRequirement(requirement)\n ? 'job.requirements.can-remove'\n : 'requirements.can-remove',\n default: canRemoveDefaultPermission,\n },\n canRemoveFreeRequirement: {\n name: isJobRequirement(requirement)\n ? 'job.requirements.can-remove-free-requirement'\n : 'requirements.can-remove-free-requirement',\n default: canRemoveFreeRequirementDefaultPermission,\n },\n canUpload: {\n name: isJobRequirement(requirement)\n ? 'job.canUploadRequirements'\n : 'canUploadRequirements',\n default: canUploadDefaultPermission,\n },\n canAddObservations: {\n name: 'requirements.can-add-observations',\n default: canAddObservationsDefaultPermission,\n },\n canDownload: {\n name: 'requirement.download',\n default: true,\n },\n canValidate: {\n name: 'requirements.validate',\n default: canValidateDefaultPermission,\n },\n });\n\n const canUpload = perms.get('canUpload');\n const canRemoveFreeRequirement = perms.get('canRemoveFreeRequirement');\n const canRemove = perms.get('canRemove');\n const canAddObservations = perms.get('canAddObservations');\n const canReportIncidences = perms.get('canReportIncidences');\n const canDownload = perms.get('canDownload');\n const canValidate = perms.get('canValidate');\n\n // posibles acciones a ejecutar sobre un requerimiento\n let actions: MenuItem[] = [\n {\n label: t('View history'),\n icon: 'pi pi-clock',\n command: dialogs.showFromEvent('show-history'),\n },\n security.isGestorOrWorker() && canReportIncidences\n ? {\n label: t('Report incidences'),\n icon: 'pi pi-exclamation-triangle',\n command: dialogs.showFromEvent('add-incidence'),\n }\n : undefined,\n (security.isGestor() || (security.isWorker() && canAddObservations && security.hasPermission('requirements.note')))\n ? {\n label: t('Add observations'),\n icon: 'pi pi-comments',\n command: dialogs.showFromEvent('add-note'),\n }\n : undefined,\n { separator: true },\n security.isGestorOrWorker() && canValidate\n ? {\n label: t('Validate'),\n icon: 'pi pi-check-square',\n command: dialogs.showFromEvent('show-validate'),\n disabled: !canValidate\n }\n : undefined,\n (requirement.documents && requirement.documents.length > 0 && canRemove)\n ? {\n label: t('Remove file'),\n icon: 'pi pi-trash',\n command: confirmRemove,\n }\n : undefined,\n (requirement.requirementTypeId == FreeRequirementType && canRemoveFreeRequirement)\n ? {\n label: t('Remove requirement'),\n icon: 'pi pi-trash',\n command: confirmRemoveFreeRequirement\n }\n : undefined,\n ].filter(a => a != undefined)\n .map(a => a!)\n .filter(s => s.disabled != true);\n\n const onRequestClose = (reload: boolean = false) => {\n if (reload) {\n onRequestReload();\n }\n\n dialogs.clear();\n }\n\n const calculateActions = () => {\n if (job != undefined) {\n const actionsContext = {\n identity: security,\n job: job,\n actions: actions,\n requirementType: requirementType,\n };\n\n const filterActions = moduleManager.filterDependency('requirement.implied.rso.actions', actionsContext);\n\n return actions.filter(filterActions);\n } else {\n return actions;\n }\n }\n\n const onValidate = (reload: boolean = false) => {\n dialogs.clear();\n if (reload) {\n onRequestReload();\n }\n }\n\n const isOnDate = (requirement.expirationDate != null\n && DateUtils.dateIsLessOrEqual(\n DateUtils.parseDate(requirement.expirationDate),\n new Date()));\n\n\n const isExpired = (requirement.status.find(s => s.isCurrent)?.statusTypeId == RequirementStatusTypes.NOT_VALIDATED\n || requirement.status.find(s => s.isCurrent)?.statusTypeId == RequirementStatusTypes.NOT_LOADED)\n && requirement.isExpired;\n\n const onNoteAdded = () => {\n dialogs.clear();\n onRequestReload();\n }\n\n const isResourcePicture = requirementType?.isResourcePicture;\n\n const uploadRequirementsTitle = requirementType.targetType === RequirementTargetType.Contractor\n ? t('requirements.upload.contractor')\n : requirementType.targetType === RequirementTargetType.Worker\n ? t('requirements.upload.worker')\n : requirementType.targetType === RequirementTargetType.Machinery\n ? t('requirements.upload.machinery')\n : requirementType.targetType === RequirementTargetType.Job\n ? t('requirements.upload.job')\n : requirementType.targetType === RequirementTargetType.JobHasContractor\n ? t('requirements.upload.contractor')\n : requirementType.targetType === RequirementTargetType.JobHasWorker\n ? t('requirements.upload.worker')\n : requirementType.targetType === RequirementTargetType.JobHasMachinery\n ? t('requirements.upload.machinery')\n : t('Upload documents');\n\n if (!isResourcePicture) {\n return
\n {(requirementType.kindId === RequirementTypeKind.Mandatory\n || requirement.mandatory)\n && }\n\n {(requirementType.kindId === RequirementTypeKind.Optional\n && !requirement.mandatory)\n && }\n\n {C.isDebug && {requirement.id}}\n\n {requirementType.description &&\n }\n\n \n {requirementType.title}\n \n \n\n {loading.render()}\n\n {requirement.expirationDate &&\n (currentStatusType == RequirementStatusTypes.PENDING) &&\n \n \n {DateUtils.formatFromUtc(requirement.expirationDate)}\n }\n\n {requirement.expirationDate &&\n (currentStatusType == RequirementStatusTypes.VALIDATED) &&\n \n \n {DateUtils.formatFromUtc(requirement.expirationDate)}\n }\n\n {requirement.documents\n && requirement.documents.length > 0\n && requirement.documents[0].document.hasActiveVersion\n && canDownload\n && }\n\n {haveIncidences && \n \n }\n\n {haveNotes() && \n \n }\n\n {canUpload && meetsRequirements && \n \n }\n\n {dialogs.render('view-incidences', { title: t('View incidences'), className: 'no-padding' }, () =>\n \n )}\n\n {dialogs.render('view-notes', { title: t('View notes'), className: 'g pd' }, () =>\n \n )}\n\n {isExpired && \n \n {requirement.expirationDate}\n }\n\n\n {dialogs.render('add-incidence', { title: t('Report incidence'), className: 'g', style: { minWidth: '50vw' } }, () =>\n )}\n\n {dialogs.render('add-note', { title: t('Add note'), className: 'g', style: { minWidth: '50vw' } }, () =>\n )}\n\n
\n {_showValidations &&\n }\n\n {requirement.inProgress &&\n \n \n }\n\n {!requirement.inProgress &&\n \n }\n\n \n
\n\n {dialogs.render('upload-documents', { title: uploadRequirementsTitle }, () =>\n )}\n\n {dialogs.render('show-history', { title: t('View history'), className: 'g historic' }, () =>\n )}\n\n {dialogs.render('show-validate', { title: t('Validate requirement'), className: 'g pd' }, () =>\n )}\n
\n }\n else {\n return null;\n }\n}\n\nfunction RequirementGroup({\n ctx,\n hasAccessJobInformation,\n jobId,\n job,\n group, onRequestReload, readOnly,\n removeRequirementFile,\n requirements, requirementStatusTypes,\n security, requirementIncidence, targetType, targetId, targetTitle, appUsers, work,\n getContractorFromAppUser, getJobHasMachinery, getJobHasWorker, getJobHasContractor, getContractor, getWorker, getMachinery,\n moduleManager,\n skipMirrorDependencies,\n}: {\n ctx?: any,\n hasAccessJobInformation?: boolean,\n jobId?: number,\n job?: IJob,\n group: IRequirementGroup,\n onRequestReload: Function,\n readOnly?: boolean,\n removeRequirementFile: Function,\n requirements: RequirementPair[],\n requirementStatusTypes: IRequirementStatusType[],\n requirementIncidence: IRequirementIncidence,\n security: ISecurity,\n targetTitle: string,\n targetType: number,\n targetId: number,\n appUsers: IUserIdentity[],\n work: IWork,\n getContractorFromAppUser: Function,\n getJobHasMachinery: Function,\n getJobHasWorker: Function,\n getJobHasContractor: Function,\n getContractor: Function,\n getWorker: Function,\n getMachinery: Function,\n moduleManager: ModuleManager,\n skipMirrorDependencies?: boolean,\n}) {\n return
\n {requirements\n .filter(([r, rt, mode]) => !requirementHasDependency(r)\n || mode.mode === RequirementMode.RequirementWithValidationDependency\n || skipMirrorDependencies)\n .sort(([a, at], [b, bt]) => (at.orderValue ?? 1000) - (bt.orderValue ?? 1000))\n .map(([r, rt, mode], key) =>\n )}\n
;\n}\n\ntype RequirementPair = [IRequirement, IRequirementType, RequirementModeData];\n\ntype RequirementGroups = {\n [requirementGroupId: number]: RequirementPair[];\n}\n\nconst getRequirementDependency = (r: any) => {\n if (r.requirementType) {\n const deps: any[] = r.requirementType.dependencies ?? [];\n return deps\n .find(d => d.dependencyType === RequirementTypeDependencyType.RequirementMustHaveBeenValidated);\n }\n else {\n return false;\n }\n}\n\nconst requirementHasDependency = (r: any) => {\n if (r.requirementType) {\n const deps: any[] = r.requirementType.dependencies ?? [];\n\n return deps\n .find(d => d.dependencyType === RequirementTypeDependencyType.RequirementMustHaveBeenValidated\n && d.propagate) != undefined;\n }\n else {\n return false;\n }\n}\n\nconst isMirrorRequirement = (r: IRequirement) => {\n const dependencies = r.requirementType?.dependencies ?? [];\n return dependencies\n .filter(d => d.propagate ?? false).length > 0;\n}\n\nconst generalResources = [\n ResourceType.Contractor,\n ResourceType.Machinery,\n ResourceType.Worker,\n];\n\nlet _prevActiveIndex = 0;\n\nfunction associateRequirementTypes(groups: IRequirementGroup[]) {\n const allRequirementTypes = flatten(groups.map(g => g.requirementTypes ?? []));\n return (requirements: IRequirement[]) => {\n return requirements.map(r => {\n return {\n ...r,\n requirementType: allRequirementTypes.find(t => t.id === r.requirementTypeId),\n };\n });\n };\n}\n\nfunction EditRequirementsImpl(props: IProps) {\n const { t } = useTranslation();\n const [groups, setGroups] = React.useState([]);\n const requirements = useRemoteData(props.getRequirements, {\n parameters: [props.workId, props.targetType, props.targetId],\n disabled: props.targetId == undefined,\n map: associateRequirementTypes(props.requirementGroups),\n });\n\n const [activeIndex, _setActiveIndex] = React.useState(0);\n\n const setActiveIndex = (i: number) => {\n _prevActiveIndex = i;\n _setActiveIndex(i);\n }\n\n const siblingRequirements = useRemoteData(props.getRequirements, {\n parameters: [props.workId, props.siblingType, props.siblingId],\n disabled: props.siblingId == undefined,\n map: associateRequirementTypes(props.requirementGroups),\n });\n const parentSiblingRequirements = useRemoteData(props.getRequirements, {\n parameters: [props.workId, RequirementTargetType.JobHasContractor, props.siblingJobHasContractorId],\n disabled: props.siblingJobHasContractorId == undefined,\n map: associateRequirementTypes(props.requirementGroups),\n });\n\n const [requirementsGroups, setRequirementsGroups] = React.useState({});\n const [freeRequirements, setFreeRequirements] = React.useState([]);\n const [allRequirementTypes, setAllRequirementTypes] = React.useState([]);\n const dialogs = useDialogs();\n\n const _ = useSignalR({\n method: 'RequirementNotification',\n onMessage: r => {\n const shouldReload = r.workId === props.workId\n && (r.resourceId === props.targetId);\n // || (generalResources.indexOf(r.resourceType) >= 0));\n if (shouldReload) {\n reload();\n }\n }\n });\n\n const reload = async () => {\n if (props.targetId) {\n await requirements.query();\n }\n if (props.siblingId) {\n await siblingRequirements.query();\n }\n if (props.siblingJobHasContractorId) {\n await parentSiblingRequirements.query();\n }\n };\n\n React.useEffect(() => {\n setGroups(props\n .requirementGroups\n .sort((a, b) => (a.orderValue ?? 0) - (b.orderValue ?? 0)));\n setAllRequirementTypes(flatten(props\n .requirementGroups\n .map(g => g.requirementTypes ?? [])));\n }, [props.requirementGroups]);\n\n const loadSiblingRequirements = (res: RequirementGroups) => {\n if (!requirements.value || !siblingRequirements.value || props.skipMirrorDependencies) {\n return;\n }\n const mirrorDependencies =\n requirements\n .value\n .filter(r => requirementHasDependency(r));\n\n const siblings = [...siblingRequirements.value ?? []];\n const parentSiblings = [...parentSiblingRequirements.value ?? []];\n\n for (const r of mirrorDependencies) {\n const requirementType = allRequirementTypes.find(t => t.id === r.requirementTypeId);\n if (requirementType) {\n const groupId = requirementType.requirementGroupId;\n const dep = getRequirementDependency(r);\n if (dep === undefined) {\n continue;\n }\n\n const sourceReq = siblings\n .find(s => s.requirementTypeId == dep.dependsOnRequirementId);\n\n if (!res[groupId]) {\n res[groupId] = [];\n }\n\n if (sourceReq && res[groupId]) {\n const sourceRequirementTypeOriginal = allRequirementTypes.find(t => t.id === sourceReq.requirementTypeId)!;\n const sourceRequirementType = { ...sourceRequirementTypeOriginal };\n sourceRequirementType.kindId = requirementType.kindId;\n res[groupId].push([\n sourceReq,\n sourceRequirementType,\n {\n mode: RequirementMode.RequirementWithMirrorDependency,\n }\n ]);\n }\n }\n }\n\n const reqsWithDependencies = requirements\n .value\n .filter(r => (r?.requirementType?.dependencies?.length ?? 0) > 0 && isMirrorRequirement(r));\n\n for (const r of reqsWithDependencies) {\n const requirementType = allRequirementTypes\n .find(t => t.id === r.requirementTypeId);\n if (requirementType) {\n const groupId = requirementType.requirementGroupId;\n const dep = requirementType!.dependencies![0];\n if (dep === undefined) {\n continue;\n }\n\n const sourceReq = parentSiblings\n .find(s => s.requirementTypeId == dep.dependsOnRequirementId);\n if (!res[groupId]) {\n res[groupId] = [];\n }\n\n if (dep.dependencyType == RequirementTypeDependencyType.IBO) {\n res[groupId].push([\n r,\n requirementType,\n {\n mode: RequirementMode.IBODependency,\n }]);\n }\n else if (sourceReq\n && res[groupId]\n && dep.dependencyType == RequirementTypeDependencyType.RequirementMustHaveBeenValidated) {\n const currentStatus = sourceReq.status.find(rs => rs.isCurrent);\n const isValidated = currentStatus?.statusTypeId == RequirementStatusTypes.VALIDATED;\n\n res[groupId].push([\n r,\n requirementType,\n {\n mode: RequirementMode.RequirementWithValidationDependency,\n meetsRequirements: isValidated,\n }]);\n }\n }\n }\n setRequirementsGroups(res);\n }\n\n React.useEffect(() => {\n const res: RequirementGroups = {};\n let freeR: IRequirement[] = [];\n\n if (requirements.value) {\n freeR = requirements\n .value\n .filter(r => r.requirementTypeId == FreeRequirementType);\n setFreeRequirements(freeR);\n\n const directRequirements = requirements\n .value\n .filter(r => !isMirrorRequirement(r) || props.skipMirrorDependencies);\n\n for (const r of directRequirements) {\n const requirementType = allRequirementTypes.find(t => t.id === r.requirementTypeId);\n const isFree = r.requirementTypeId == FreeRequirementType;\n\n if (requirementType) {\n const groupId = requirementType.requirementGroupId;\n const mode = isFree ? RequirementMode.FreeRequirement : RequirementMode.DirectRequirement;\n if (!res[groupId]) {\n res[groupId] = [[r, requirementType, {\n mode\n }]];\n }\n else {\n res[groupId].push([\n r,\n requirementType,\n {\n mode,\n }]);\n }\n }\n }\n }\n\n setRequirementsGroups(res);\n loadSiblingRequirements(res);\n\n // tenemos los requerimientos cargados\n // si tenemos un callback para notificar los requerimientos pendientes lo llamamos\n if (props.onHasPendingRequirements) {\n const allRequirements: IRequirement[] =\n flatten(Object.values(res).map(g => g[0] as IRequirement[])).concat(freeR);\n const hasPendingRequirement = allRequirements.find(requirementIsPending);\n props.onHasPendingRequirements(hasPendingRequirement != undefined);\n }\n }, [\n requirements.value, props.requirementGroups, allRequirementTypes,\n siblingRequirements.value, parentSiblingRequirements.value,\n ]);\n\n React.useEffect(() => {\n // tenemos los requerimientos cargados\n // si tenemos un callback para notificar los requerimientos pendientes lo llamamos\n if (props.onHasPendingRequirements) {\n const allRequirements: IRequirement[] = flatten(\n Object.values(requirementsGroups)\n ).map(g => g[0] as IRequirement).concat(freeRequirements);\n const hasPendingRequirement = anyPending(allRequirements ?? []);\n props.onHasPendingRequirements(hasPendingRequirement);\n }\n }, [freeRequirements]);\n\n const requirementIsPending = (r: IRequirement) => {\n const currentStatus = r.status?.find(s => s.isCurrent);\n\n return currentStatus?.statusTypeId == RequirementStatusTypes.PENDING;\n }\n\n const anyPending = (allRequirements: IRequirement[]) => {\n const statuses = flatten(allRequirements.map(r => r.status ?? []));\n\n if (statuses == undefined || statuses.length == 0) {\n return false;\n }\n\n const anyPending = statuses.some(s => s.isCurrent && s.statusTypeId == RequirementStatusTypes.PENDING);\n\n return anyPending;\n }\n\n const canValidateDocuments = () => {\n return props.security.isGestorOrWorker() &&\n (requirements.value ?? []).find(requirementIsPending) != undefined;\n }\n\n const canValidateAllDocuments = () => {\n return props.security.isGestor() &&\n (requirements.value ?? []).find(requirementIsPending) != undefined;\n }\n\n const freeRequirementGroup = {\n id: FreeRequirementType,\n isActive: true,\n name: '',\n title: '',\n workId: props.workId,\n };\n\n const freeRequirementType = {\n id: FreeRequirementType,\n name: '',\n title: '',\n requirementGroupId: FreeRequirementType,\n workId: props.workId,\n targetType: props.targetType,\n kindId: RequirementTypeKind.Optional,\n isActive: true,\n };\n\n const freeComponents = [];\n\n if (freeRequirements.length > 0) {\n freeComponents.push(\n {freeRequirements.map((r, index) =>\n )}\n
\n {props.targetType != RequirementTargetType.Job && ()}\n
\n
);\n }\n\n React.useEffect(() => {\n renderPhoto();\n }, [requirements.value != undefined ? requirements.value.find(r => r.requirementType?.isResourcePicture)?.status : null]);\n\n const isEmpty = groups\n .find(g => requirementsGroups[g.id!]?.length > 0) == undefined && freeRequirements.length <= 0;\n\n const renderPhoto = () => {\n if (requirements.value != undefined) {\n {\n return requirements.value.find(r => r.requirementType?.isResourcePicture) != undefined && \n r.requirementType?.isResourcePicture)} />\n \n }\n }\n }\n\n const legend = (currentGroupTab: IRequirementGroup) => {\n if (currentGroupTab == undefined) {\n return null;\n }\n\n if (currentGroupTab.legend != '' && currentGroupTab.legend != undefined) {\n return
\n
\n {t('legend.header')}\n
\n
\n
\n }\n let url = '';\n\n if (props.workId == 21) {\n url = 'Requirements/' + props.workId + '/Legend.html'\n }\n\n if (url != '') {\n return
\n
\n \n
\n
\n }\n }\n\n if (isEmpty) {\n return null;\n }\n else {\n const currentGroups = groups.filter(g => requirementsGroups[g.id!]);\n return
\n {requirements.renderLoading()}\n\n {dialogs.render('validate-all', { maximized: true, title: t('Validate') }, () =>\n \n )}\n\n {canValidateAllDocuments() &&\n \n \n \n \n }\n\n {renderPhoto()}\n\n setActiveIndex(e.index)}>\n {currentGroups.map((g) => {\n const reqs = requirementsGroups[g.id!] ?? [];\n\n if (reqs.length > 0) {\n return \n \n {legend(currentGroups[activeIndex])}\n ;\n }\n else {\n return null;\n }\n }).filter(r => r != null)}\n\n {freeComponents}\n \n
\n }\n}\n\nexport const EditRequirements = React.memo(EditRequirementsImpl, (prev, next) => {\n return prev.work.id === next.work.id\n && prev.targetType == next.targetType\n && prev.targetId == next.targetId\n && prev.ctx == next.ctx;\n});\n","import * as React from 'react';\n\nimport { Avatar, ContextMenu, useDialogs, useRemoteData, useTranslation } from '@components';\nimport { IMachinery, IUserIdentity, IWork, IWorker } from '@models';\nimport { IRequirement, IRequirementStatus, IRequirementStatusType, IRequirementType, RequirementStatusTypes, RequirementTargetType } from '@models/requirements';\nimport AddRequirementIncidenceContainer from '@containers/requirements/AddRequirementIncidenceContainer';\nimport AddRequirementNoteContainer from '@containers/requirements/AddRequirementNoteContainer';\nimport UploadRequirement from '@containers/requirements/UploadRequirementContainer';\nimport { ViewRequirementHistory } from '@components/requirements/ViewRequirementHistory';\n\nexport interface IProps {\n identity: IUserIdentity;\n resourceId: number;\n targetType: number;\n targetTitle: string;\n work: IWork;\n appUsers: IUserIdentity[];\n resourcePictureRequirement: IRequirement;\n requirementStatusTypes: IRequirementStatusType[];\n requirementTypes: IRequirementType[];\n getRequirements: Function;\n getMachinery: Function;\n getWorker: Function;\n onRender?: Function;\n}\n\nexport function ResourcePhoto(props: IProps) {\n const { t } = useTranslation();\n const dialogs = useDialogs();\n const [resource, setResource] = React.useState();\n const [requirementStatus, setRequirementStatus] = React.useState();\n\n const initialize = async () => {\n if (props.targetType === RequirementTargetType.Machinery) {\n const machinery = await props.getMachinery(props.work.id, props.resourceId);\n setResource(machinery);\n }\n else if (props.targetType === RequirementTargetType.Worker) {\n const worker = await props.getWorker(props.work.id, props.resourceId);\n setResource(worker);\n }\n const requirement = await props.getRequirements(props.work.id, props.targetType, props.resourceId);\n const requirementStatus = requirement.find((r: IRequirement) => {\n const rt = props.requirementTypes.find(rt => rt.id == r.requirementTypeId);\n return rt?.isResourcePicture ?? false;\n })?.status;\n setRequirementStatus(requirementStatus.find((s: IRequirementStatus) => s.isCurrent));\n }\n\n const reRender = async () => {\n if (props.onRender) {\n await props.onRender();\n }\n initialize();\n renderPhoto();\n dialogs.clear();\n }\n\n React.useEffect(() => {\n initialize();\n }, []);\n\n React.useEffect(() => {\n initialize();\n renderPhoto();\n }, [props.resourcePictureRequirement]);\n\n const photoMenu = [\n { label: t('Report incidences'), command: () => { dialogs.show('add-incidence') }, icon: 'pi pi-exclamation-triangle' },\n { label: t('Add note'), command: () => { dialogs.show('add-note') }, icon: 'pi pi-comment' },\n { label: t('Upload picture'), command: () => { dialogs.show('upload-picture') }, icon: 'pi pi-upload' },\n { label: t('View history'), command: () => { dialogs.show('view-history') }, icon: 'pi pi-clock' },\n ];\n\n const pm = React.useRef();\n\n if (requirementStatus?.statusTypeId !== RequirementStatusTypes.PENDING || props.identity.roles.includes('contractor') || props.identity.roles.includes('gestor')) {\n photoMenu.splice(0, 2);\n }\n\n if (props.identity.policies.includes('terzi.pics')) {\n photoMenu.splice(2, 1);\n }\n console.log('policies', props.identity.policies);\n if (props.identity.policies.includes('observator')) {\n photoMenu.splice(0, 3);\n }\n\n const renderPhoto = () => {\n if (resource !== undefined) {\n const url = (`/api/files/${props.work.id}/document/${resource.photo?.id}?version=${new Date().getTime()}`);\n if (url && (requirementStatus?.statusTypeId == 2 || requirementStatus?.statusTypeId == 3) && resource.photo?.id != 0 && resource.photo?.id != null && resource.photo?.id != undefined) {\n return
pm.current.show(ev)}>\n {((requirementStatus?.statusTypeId == 2 || requirementStatus?.statusTypeId == 3) && resource.photo?.id != 0 && url != undefined) &&\n }\n
\n }\n else {\n return
pm.current.show(ev)}>\n \n
\n }\n }\n else {\n return
???
\n }\n }\n\n React.useEffect(() => {\n renderPhoto();\n }, [requirementStatus, resource?.photo?.id]);\n\n const requirementType = props\n .requirementTypes\n .find(rt => rt.id === props.resourcePictureRequirement.requirementTypeId);\n\n return <>\n {dialogs.render('add-incidence', { title: t('Report incidence'), className: 'g', style: { minWidth: '50vw' } }, () =>\n )}\n\n {dialogs.render('add-note', { title: t('Add note'), className: 'g', style: { minWidth: '50vw' } }, () =>\n )}\n\n {dialogs.render('upload-picture', { title: t('Upload picture') }, () =>\n )}\n\n {dialogs.render('view-history', { title: t('View history') }, () =>\n )}\n\n \n {renderPhoto()}\n \n}\n","import * as React from 'react';\n\nimport { classNames, useDataTable, useSearch, useTranslation } from '@components';\nimport { IRequirement, RequirementStatusTypes } from '@models/requirements';\n\nimport './ViewRequirementValidations.scss';\nimport DateUtils from '@utils/date-utils';\nimport { IJob } from '@models';\n\nexport interface IProps {\n job?: IJob;\n requirement: IRequirement;\n workId: number;\n}\n\ntype ValidationRow = {\n validationHolderType: string;\n validationHolderName?: string;\n validatedState: string;\n validatedDate?: string | Date;\n optional?: boolean;\n departmentId?: number;\n jobImpliedRso?: boolean;\n}\n\nexport function ViewRequirementValidations(props: IProps) {\n const { t } = useTranslation();\n\n const data = useSearch({\n workId: props.workId,\n search: 'requirements/validations',\n filters: {\n requirementId: props.requirement.id,\n workId: props.workId,\n }\n });\n\n const currentStatus = props.requirement.status.find(s => s.isCurrent);\n const isValid = currentStatus?.statusTypeId == RequirementStatusTypes.VALIDATED;\n\n const validations: ValidationRow[] = data\n .value\n .filter(v => v.optional != true || v.validatedDate != undefined)\n .map(v => {\n // SHAMEFUL HACK:\n // si el estado del requerimiento es validado,\n // entonces el estado de la validación es el mismo (fix migracion)\n // y simulamos que todos los participantes han validado (en la anterior aplicacion\n // no existia el concepto de validacion múltiple)\n if (isValid && currentStatus && DateUtils.parseDate(currentStatus.dateTime)?.getFullYear() < 2024) {\n\n if(v.validatedDate && DateUtils.parseDate(v.validatedDate)?.getFullYear() >= 2024 ){\n return v;\n }else {\n return {\n ...v,\n validatedDate: currentStatus?.dateTime,\n validatedState: 'requirement.validation.validated',\n };\n }\n }\n else {\n return v;\n }\n });\n\n const renderState = (r: ValidationRow) => {\n if (r.validatedDate != undefined) {\n return
\n {t(r.validatedState)}\n \n {DateUtils.format(r.validatedDate)}\n
\n }\n else {\n return
{t(r.validatedState)}
\n }\n }\n\n const renderValidationHolderName = (r: ValidationRow) => {\n if (r.validationHolderName != undefined && r.validationHolderName != ' ') {\n return r.validationHolderName;\n }\n else if (r.jobImpliedRso && props.job != undefined) {\n const d = props.job?.departments.find(d => d.departmentId == r.departmentId);\n return d?.responsible?.name + ' ' + d?.responsible?.surname;\n }\n else {\n return '';\n }\n }\n\n const table = useDataTable({\n columns: [\n {\n className: 'center',\n field: 'validationHolderType',\n render: (n: ValidationRow) => t(n.validationHolderType),\n },\n {\n className: 'center',\n field: 'validationHolderName',\n render: (n: ValidationRow) => renderValidationHolderName(n),\n title: 'Name',\n },\n {\n className: 'td-state',\n title: 'State',\n render: renderState,\n },\n ],\n data: validations,\n });\n\n return
\n {data.renderLoading()}\n {table()}\n
\n}\n","import * as React from 'react';\n\nimport { connect } from 'react-redux';\nimport { ApplicationState } from '../../store';\nimport * as RequirementsStore from '../../store/requirements';\nimport { EditRequirements } from '../../components/requirements/EditRequirements';\nimport * as ContractorsStore from '../../store/contractors';\nimport * as JobsStore from '../../store/jobs';\nimport * as WorkersStore from '../../store/workers';\nimport * as MachineriesStore from '../../store/machineries';\n\nexport default connect(\n (state: ApplicationState) => ({\n ...state.identity,\n ...state.user,\n ...state.constants,\n ...RequirementsStore.plainActions,\n ...ContractorsStore.plainActions,\n ...JobsStore.plainActions,\n ...WorkersStore.plainActions,\n ...MachineriesStore.plainActions,\n appUsers: state.user.work?.users,\n requirementGroups: state.user.requirementGroups,\n requirementStatusTypes: state.user.requirementStatusTypes,\n jobId: state.jobs.selectedJob?.id,\n moduleManager: state.modules.moduleManager,\n }),\n {},\n)(EditRequirements as any) as any; // eslint-disable-line @typescript-eslint/no-explicit-any\n","import * as React from 'react';\n\nimport EditRequirements from '@containers/requirements/EditRequirementsContainer';\nimport { RequirementTargetType } from '@models/requirements';\n\nexport interface IProps {\n machineryId: number;\n machineryName: string;\n workId: number;\n}\n\nexport function MachineryRequirements(props: IProps) {\n return \n}","import * as React from 'react';\n\nimport {\n IContractor, ISecurity,\n} from '@models';\nimport { getContractorFromAppUser } from '@store/actions/contractors';\n\nexport default function useContractorFromAppUser(workId: number, security: ISecurity) {\n const [selfContractorId, setSelfContractorId] = React.useState();\n\n React.useEffect(() => {\n if (security.isContractor()) {\n getContractorFromAppUser(workId)\n .then((u: IContractor) => setSelfContractorId(u?.id));\n }\n }, [workId]);\n\n return selfContractorId;\n}\n","import * as React from 'react';\n\nimport { connect } from 'react-redux';\nimport { ApplicationState } from '../../store';\nimport * as MachineriesStore from '@store/machineries';\nimport { EditMachineryForm } from '@components/machineries/EditMachineryForm';\nimport { isMachineryPropertyGroupType } from '@models';\n\nexport default connect(\n (state: ApplicationState, props: any) => ({\n workId: props.workId ?? parseInt(props.match.params.workid),\n machineryId: props.machineryId ?? parseInt(props.match.params.machineryId),\n ...state.identity,\n ...state.user,\n ...MachineriesStore.plainActions,\n moduleManager: state.modules.moduleManager,\n resourceStatusTypes: state.user.resourceStatusTypes,\n propertyGroupTypes: state.user.propertyGroupTypes.filter(isMachineryPropertyGroupType),\n }),\n MachineriesStore.actionCreators,\n)(EditMachineryForm as any) as any; // eslint-disable-line @typescript-eslint/no-explicit-any\n","import * as React from 'react';\n\nimport {\n G, useToast, Portal, useForm, useLoading, useTranslation,\n ValidationBuilder, useNumberState, useWorkFormSettings,\n} from '@components';\nimport { DynamicProperties } from '@components/user/DynamicProperties';\nimport {\n IPropertyGroupType, PropertyGroupObjectType, ISecurity,\n IWork, ResourceType, IFieldValidation, ModuleManager,\n} from '@models';\n\nimport './EditMachinery.scss';\nimport useContractorFromAppUser from '@components/custom/useContractorFromAppUser';\nimport { IMachinery, IMachinerySubType, IMachineryType } from '@models/resources';\nimport { delay, redirectTo } from '@utils';\n\ntype getMachineryF = (workId: number, id: number) => Promise;\n\nexport interface IProps {\n propertyGroupTypes: IPropertyGroupType[];\n getMachinery: getMachineryF;\n work: IWork;\n machinery: IMachinery;\n machineryId: number;\n reactivateMachinery: Function;\n security: ISecurity;\n saveMachinery: Function;\n machineryTypes: IMachineryType[];\n machinerySubTypes: IMachinerySubType[];\n moduleManager: ModuleManager;\n}\n\nexport interface IMachinerySubTypeWithDisabling extends IMachinerySubType {\n disabled?: boolean;\n}\n\nconst validateMachineryF = (fieldValidations: IFieldValidation[] | undefined, custom: any[]) =>\n ValidationBuilder\n .new()\n .withFieldValidations(ResourceType.Machinery, fieldValidations)\n .customValidations(custom)\n .lift();\n\nexport function EditMachineryForm(props: IProps) {\n const { t } = useTranslation();\n const loading = useLoading();\n const toast = useToast();\n const [subTypes, setSubTypes] = React.useState([]);\n const [selectedMachineryTypeId, setSelectedMachineryTypeId] = React.useState(0);\n\n const selectedSubType = useNumberState();\n\n const GRUA_AUTOPROPULSADA = 104;\n const CAMION_PLUMA = 105;\n const TURISMO_FURGONETA_Y_CAMIONES = 106;\n const MAQUINARIA_SIN_MATRICULA = 110;\n const MAQUINARIA_CON_MATRICULA = 109;\n const PLATAFORMA_ELEVADORA = 103;\n const EQUIPOS_DE_TRABAJO = 111;\n\n const settings = useWorkFormSettings({ work: props.work, scope: 'machinery' });\n\n const selfContractor = useContractorFromAppUser(props.work.id, props.security);\n\n const saveMachinery = loading.wrap(async (req: IMachinery) => {\n const resp = await props.saveMachinery(props.work.id, req);\n\n if (resp.hasValue) {\n toast.show(t('Machinery saved successfully'));\n if (props.work.id != 21) {\n await delay(2000);\n redirectTo(`/work/${props.work.id}/machineries`);\n }\n return { ok: true };\n }\n else {\n return { ok: false, message: resp.error };\n }\n });\n\n const doSave = (..._: any) => {\n saveMachinery(form.values);\n }\n\n const canSave = props.security.hasPermission('machinery.edit')\n || props.machinery.contractorId === selfContractor;\n\n const customValidations = [\n {\n name: 'licenseNumber',\n msg: 'licenseNumber is required',\n validation: (m: IMachinery) => props.moduleManager.validateData('machinery.licenseNumber', m),\n }\n ];\n\n const validateMachinery = validateMachineryF(props.work.validations, customValidations);\n\n const form = useForm({\n readonly: !canSave,\n initialValues: {\n id: props.machineryId,\n workId: props.work.id,\n name: props.machinery.name,\n code: props.machinery.code,\n description: props.machinery.description,\n machineryTypeId: props.machinery.machineryTypeId,\n machinerySubTypeId: props.machinery.machinerySubTypeId,\n isActive: props.machinery.isActive,\n contractorId: props.machinery.contractorId,\n prefixLicenseNumber: props.machinery.prefixLicenseNumber,\n licenseNumber: props.machinery.licenseNumber,\n suffixLicenseNumber: props.machinery.suffixLicenseNumber,\n properties: props.machinery.properties,\n },\n validate: validateMachinery,\n onSubmit: (data: IMachinery) => {\n return saveMachinery(data);\n }\n });\n\n React.useEffect(() => {\n selectedSubType.set(undefined);\n if (form.values.machineryTypeId) {\n const mt = props.machineryTypes.find(mt => mt.id == form.values.machineryTypeId);\n if (mt?.subTypes != undefined) {\n const st: IMachinerySubTypeWithDisabling[] = mt.subTypes;\n if (st.some(st => st.name == \"Autocarro\")) {\n st.find(st => st.name == \"Autocarro\")!.disabled = true;\n }\n }\n\n if (form.values.machineryTypeId) {\n const mt = props.machineryTypes.find(mt => mt.id == form.values.machineryTypeId);\n setSubTypes(mt?.subTypes ?? []);\n setSelectedMachineryTypeId(form.values.machineryTypeId);\n }\n else {\n setSubTypes([]);\n }\n }\n }, [form.values.machineryTypeId]);\n\n return
\n\n \n {loading.render()}\n \n\n {toast.render()}\n\n {props.machinery &&\n
\n
\n
\n {settings.show('name') &&\n \n {form.input('name', { autoFocus: true })}\n }\n {(settings.show('code') && props.work.id !== 23 || (props.work.id === 23 && [MAQUINARIA_SIN_MATRICULA, PLATAFORMA_ELEVADORA, EQUIPOS_DE_TRABAJO].includes(selectedMachineryTypeId))) &&\n \n {form.input('code')}\n }\n {(props.work.id == 21 && settings.show('description')) &&\n \n {form.textarea('description')}\n }\n \n {form.select('machineryTypeId', props.machineryTypes)}\n \n {subTypes.length > 0 &&\n \n {form.select('machinerySubTypeId', subTypes)}\n }\n {(props.work.id !== 23 || (props.work.id === 23 && [GRUA_AUTOPROPULSADA, CAMION_PLUMA, TURISMO_FURGONETA_Y_CAMIONES, MAQUINARIA_CON_MATRICULA].includes(selectedMachineryTypeId))) &&\n \n {props.work.machinerySettings?.onlyLicenseNumber == false &&\n form.inputs(\n ['prefixLicenseNumber', 'licenseNumber', 'suffixLicenseNumber'],\n {\n 'prefixLicenseNumber': { placeholder: t('Letter'), className: 'flat', containerStyle: { width: '40%' } },\n 'licenseNumber': { placeholder: t('Number'), containerClassName: '', className: 'flat' },\n 'suffixLicenseNumber': { placeholder: t('Letter'), className: 'flat-left', containerStyle: { width: '40%' } },\n }\n )}\n {props.work.machinerySettings?.subTypeMandatory == true &&\n form.input('licenseNumber')\n }\n }\n\n
\n form.setFieldValue('properties', v)}\n propertyGroupTypes={props.propertyGroupTypes} />\n
\n\n
\n\n
\n \n {canSave &&\n \n {t('Save')}\n }\n
\n
\n
\n
}\n
\n}\n","import * as React from 'react';\nimport { Route } from 'react-router';\n\nimport { IMachinery } from '@models';\nimport { DataLoader, useTranslation } from '@components';\nimport { MachineryRequirements } from '@components/machineries/MachineryRequirements';\nimport EditMachineryFormContainer from '@containers/machineries/EditMachineryFormContainer';\nimport { getIntParams } from '@utils';\n\nimport { getMachinery } from '@store/actions/machineries';\n\nexport interface IProps {\n children?: any;\n}\n\nconst WrappedMachineryRequirements = (props: any) => {\n const { t } = useTranslation();\n const { machineryid, workid } = getIntParams(props.match.params);\n\n return getMachinery(workid, machineryid)}>\n {(machinery: IMachinery) =>
\n
\n {t('Machinery requirements')}\n
\n
\n \n
\n
}\n
\n}\n\nconst WrappedMachineryForm = (props: any) => {\n const { machineryid, workid } = getIntParams(props.match.params);\n return getMachinery(workid, machineryid)}>\n {m => }\n \n}\n\nexport function MachineryRoutes(props: IProps) {\n return <>\n \n \n ;\n}","import * as React from 'react';\n\nimport {\n BreadcrumbItem,\n Panel,\n Portal,\n useDialogs,\n useLoading,\n useRemoteData,\n useToast,\n useTranslation,\n useSearch,\n useConfirm,\n} from '@components';\nimport {\n IContractor,\n IMachinery,\n IMachinerySubType,\n IMachineryType,\n IPropertyGroupType,\n ISecurity,\n IWork,\n ResourceType\n} from '@models';\nimport { redirectTo } from '@utils';\nimport './EditMachinery.scss';\nimport ForceValidationResourceContainer from '@containers/requirements/ForceValidationResourceContainer';\nimport { goToMachineryRequirements, goToMachinery, goToMachineries } from \"@components/routes\";\nimport { MachineryRoutes } from './MachineryRoutes';\n\ntype getMachineryF = (workId: number, id: number) => Promise;\n\nexport interface IProps {\n propertyGroupTypes: IPropertyGroupType[];\n getMachinery: getMachineryF;\n work: IWork;\n machinery: IMachinery;\n machineryId: number;\n reactivateMachinery: Function;\n security: ISecurity;\n saveMachinery: Function;\n machineryTypes: IMachineryType[];\n machinerySubTypes: IMachinerySubType[];\n}\n\n\nfunction EditMachineryInner(props: IProps) {\n const { t } = useTranslation();\n const loading = useLoading();\n const dialogs = useDialogs();\n const toast = useToast();\n\n const doReactivateMachinery = loading.wrap(async () => {\n await props.reactivateMachinery(props.work.id, props.machinery.id);\n goToMachineries(props.work.id);\n });\n\n const confirmActivate = useConfirm({\n message: t('resource.activate.machinery.confirm'),\n accept: (_: any) => doReactivateMachinery(),\n });\n\n const contractorData = useSearch({\n workId: props.work.id,\n search: 'machineries/contractor.get',\n filters: {\n contractorId: props.machinery.contractorId\n }\n });\n const contractor = contractorData.value && contractorData.value.length > 0\n ? contractorData.value[0]\n : undefined;\n\n const displayName = props.machinery?.name != ''\n ? props.machinery.name\n : props.machinery?.code != ''\n ? props.machinery.code\n : `${props.machinery.prefixLicenseNumber}${props.machinery.licenseNumber}${props.machinery.suffixLicenseNumber}`;\n\n return
\n redirectTo(`/work/${props.work.id}/machineries`)} />\n\n \n\n \n {loading.render()}\n \n\n {toast.render()}\n\n {props.machinery &&\n
\n \n\n
\n {contractor &&
\n
\n \n {t('Contractor')}\n
\n {contractor.name}\n
}\n\n \n \n \n {displayName}\n
} className='buttons'>\n
\n \n \n {props.security.isGestorOrContractor() && props.machinery.isActive === false &&\n }\n
\n \n {dialogs.render('force-validation', { title: t('Force resource validation'), className: 'g pd' }, () =>\n \n )}\n
\n
}\n
\n}\n\nexport function EditMachinery(props: IProps) {\n const data = useRemoteData(props.getMachinery, {\n parameters: [props.work.id, props.machineryId]\n });\n\n return
\n {data.renderLoading()}\n {data.value && }\n
\n}\n","import * as React from 'react';\n\nimport { connect } from 'react-redux';\nimport { ApplicationState } from '../../store';\nimport * as MachineriesStore from '../../store/machineries';\nimport { isMachineryPropertyGroupType } from '@models';\nimport { EditMachinery } from '@components/machineries/EditMachinery';\n\nexport default connect(\n (state: ApplicationState, props: any) => ({\n workId: props.workId ?? parseInt(props.match.params.workid),\n machineryId: props.machineryId ?? parseInt(props.match.params.machineryid),\n ...state.identity,\n ...state.user,\n ...MachineriesStore.plainActions,\n propertyGroupTypes: state.user.propertyGroupTypes.filter(isMachineryPropertyGroupType),\n resourceStatusTypes: state.user.resourceStatusTypes,\n }),\n MachineriesStore.actionCreators,\n)(EditMachinery as any) as any; // eslint-disable-line @typescript-eslint/no-explicit-any","import * as React from 'react';\n\nimport EditRequirements from '@containers/requirements/EditRequirementsContainer';\nimport { RequirementTargetType } from '@models/requirements';\n\nexport interface IProps {\n workerId: number;\n workerName: string;\n workId: number;\n}\n\nexport function WorkerRequirements(props: IProps) {\n return \n}","import * as React from 'react';\n\nimport {\n G, useToast, Portal, useForm, useLoading, useTranslation,\n ValidationBuilder, useSearch, SignalManager\n} from '@components';\nimport { DynamicProperties } from '@components/user/DynamicProperties';\nimport {\n IWorker, IPropertyGroupType, PropertyGroupObjectType, ISecurity,\n IWork, ResourceType, IResourceStatusType, IFieldValidation,\n IWorkerSettings,\n} from '@models';\n\nimport { delay, flatten, redirectTo } from '@utils';\n\nimport './EditWorker.scss';\nimport useContractorFromAppUser from '@components/custom/useContractorFromAppUser';\nimport { ModuleManager } from '@models';\nimport { IWorkerType, IWorkerDocumentType, IContractor } from '@models/resources';\nimport { useWorkFormSettings } from '@components/custom/useWorkFormSettings';\nimport { IRequirement, IRequirementGroup, RequirementTargetType } from '@models/requirements';\nimport ResourcePhotoContainer from '@containers/resources/ResourcePhotoContainer';\n\ntype GetWorkerF = (workId: number, id: number) => Promise;\n\nexport interface IProps {\n propertyGroupTypes: IPropertyGroupType[];\n getWorker: GetWorkerF;\n hideActions?: boolean;\n moduleManager: ModuleManager;\n work: IWork;\n worker: IWorker;\n workerId: number;\n security: ISecurity;\n saveWorker: Function;\n reactivateWorker: Function;\n workerTypes: IWorkerType[];\n workerDocumentTypes: IWorkerDocumentType[];\n resourceStatusTypes: IResourceStatusType[];\n requirementGroups: IRequirementGroup[];\n getRequirements: Function;\n getRequirement: Function;\n}\n\nconst validateWorkerF = (fieldValidations: IFieldValidation[] | undefined, workerSettings: IWorkerSettings | undefined = undefined) =>\n ValidationBuilder\n .new()\n .notEmpty('name')\n .notEmpty('surname')\n .notEmptyIf(workerSettings?.workerTypeIsMandatory, 'workerTypeId')\n .withFieldValidations(ResourceType.Worker, fieldValidations)\n .lift();\n\nexport function EditWorkerForm(props: IProps) {\n const { t } = useTranslation();\n const loading = useLoading();\n const toast = useToast();\n\n const [selectedFile, setSelectedFile] = React.useState();\n\n const [pictureRequirement, setPictureRequirement] = React.useState();\n\n const settings = useWorkFormSettings({ work: props.work, scope: 'worker' });\n\n const contractorData = useSearch({\n workId: props.work.id,\n search: 'workers/contractor.get',\n filters: {\n contractorId: props.worker.contractorId,\n }\n });\n\n const initialize = async () => {\n const requirementTypes = flatten(props.requirementGroups.map(r => r.requirementTypes ?? []));\n const requirements: IRequirement[] = await props.getRequirements(props.work.id, RequirementTargetType.Worker, props.workerId);\n\n const requirement = requirements.find(r => {\n const rt = requirementTypes.find(rt => rt.id == r.requirementTypeId);\n return rt?.isResourcePicture;\n });\n setPictureRequirement(requirement);\n };\n\n const reload = async () => {\n if (pictureRequirement !== undefined) {\n const auxReq: IRequirement = await props.getRequirement(props.work.id, RequirementTargetType.Worker, props.work.id, pictureRequirement.id);\n if (auxReq.status.find(r => r.isCurrent) != pictureRequirement.status.find(r => r.isCurrent)) {\n setPictureRequirement(auxReq);\n }\n }\n }\n\n React.useEffect(() => {\n initialize();\n }, []);\n\n const selfContractor = useContractorFromAppUser(props.work.id, props.security);\n\n const contractor = contractorData.value && contractorData.value.length > 0\n ? contractorData.value[0]\n : undefined;\n\n const saveWorker = loading.wrap(async (req: IWorker) => {\n const resp = await props.saveWorker(props.work.id, req, { imageFile: selectedFile });\n\n if (resp.hasValue) {\n toast.show(t('Worker saved successfully'));\n if (props.work.id != 21) {\n await delay(2000);\n redirectTo(`/work/${props.work.id}/workers`);\n }\n return { ok: true };\n }\n else {\n toast.show(resp.error, { severity: 'error' });\n return { ok: false, message: resp.error };\n }\n });\n\n const doSave = (..._: any) => {\n saveWorker(form.values);\n }\n\n const canSave = () => {\n if (props.security.isContractor() && props.work.id == 23) {\n return false;\n }\n else if (props.security.hasPermission('workers.save')) {\n return true;\n } else {\n if (props.worker.contractorId === selfContractor) {\n return true;\n } else {\n return false;\n }\n }\n }\n\n const validateWorker = validateWorkerF(props.work.validations, props.work.workerSettings);\n\n const form = useForm({\n initialValues: {\n id: props.workerId,\n workId: props.work.id,\n name: props.worker.name,\n surname: props.worker.surname,\n code: props.worker.code,\n properties: props.worker.properties,\n isActive: props.worker.isActive == true,\n contractorId: props.worker.contractorId,\n workerTypeId: props.worker.workerTypeId,\n workerDocumentTypeId: props.worker.workerDocumentTypeId,\n },\n readonly: !canSave(),\n validate: validateWorker,\n onSubmit: (data: IWorker) => {\n return saveWorker(data);\n }\n });\n\n const renderAvatar = () => {\n if (pictureRequirement) {\n return \n \n \n }\n else {\n return null;\n }\n }\n\n const sm = SignalManager.create(props.work.settingsObj?.signals, 'worker');\n sm.current.setValues(form.values, { contractor });\n\n const filterDocumentTypes = props.moduleManager\n .filterDependency('worker.documentTypes', {\n contractor\n });\n\n const documentTypes = props.workerDocumentTypes\n .filter(filterDocumentTypes);\n\n return
\n \n {loading.render()}\n \n\n {toast.render()}\n\n {props.worker &&\n
\n
\n
\n \n {form.input('name', { autoFocus: true })}\n \n \n {form.input('surname')}\n \n \n {form.select('workerDocumentTypeId', { options: documentTypes })}\n \n \n {form.input('code')}\n \n {settings.show('workerTypeId') &&\n \n {form.select('workerTypeId', { options: props.workerTypes })}\n }\n
\n form.setFieldValue('properties', v)}\n isInternal={props.worker.contractorId == undefined}\n objectType={PropertyGroupObjectType.JobHasWorker}\n propertyGroupTypes={props.propertyGroupTypes} />\n
\n\n {renderAvatar()}\n\n
\n\n
\n \n {canSave() &&\n \n {t('Save')}\n }\n
\n
\n
\n
}\n
\n}\n","import * as React from 'react';\n\nimport { connect } from 'react-redux';\nimport { ApplicationState } from '../../store';\nimport * as WorkersStore from '@store/workers';\nimport { EditWorkerForm } from '@components/workers/EditWorkerForm';\nimport { isContractorWorkerPropertyGroupType } from '@models';\nimport * as RequirementsStore from '@store/requirements';\n\nexport default connect(\n (state: ApplicationState, props: any) => ({\n workId: props.workId ?? parseInt(props.match.params.workid),\n workerId: props.workerId ?? parseInt(props.match.params.workerid),\n ...state.identity,\n ...state.user,\n ...WorkersStore.plainActions,\n propertyGroupTypes: state.user.propertyGroupTypes.filter(isContractorWorkerPropertyGroupType),\n resourceStatusTypes: state.user.resourceStatusTypes,\n ...RequirementsStore.plainActions\n }),\n WorkersStore.actionCreators,\n)(EditWorkerForm as any) as any; // eslint-disable-line @typescript-eslint/no-explicit-any\n","import * as React from 'react';\n\nimport {\n BreadcrumbItem, useToast, Panel, Portal, useLoading, useTranslation, useRemoteData,\n useDialogs, useSearch, useConfirm,\n} from '@components';\nimport {\n IWorker, IPropertyGroupType, ISecurity,\n IWork, ResourceType, IResourceStatusType,\n ModuleManager,\n} from '@models';\n\nimport './EditWorker.scss';\nimport ForceValidationResourceContainer from '@containers/requirements/ForceValidationResourceContainer';\nimport { ViewResourceHistory } from '@components/requirements/ViewResourceHistory';\nimport { IWorkerType, IWorkerDocumentType, IContractor } from '@models/resources';\nimport { WorkerRoutes } from './WorkerRoutes';\nimport { goToWorker, goToWorkers, goToWorkerRequirements } from '@components/routes';\nimport { EditWorkerForm } from './EditWorkerForm';\nimport { IRequirementGroup } from '@models/requirements';\n\ntype GetWorkerF = (workId: number, id: number) => Promise;\n\nexport interface IProps {\n propertyGroupTypes: IPropertyGroupType[];\n getWorker: GetWorkerF;\n hideActions?: boolean;\n moduleManager: ModuleManager;\n work: IWork;\n worker: IWorker;\n workerId: number;\n security: ISecurity;\n saveWorker: Function;\n reactivateWorker: Function;\n workerTypes: IWorkerType[];\n workerDocumentTypes: IWorkerDocumentType[];\n resourceStatusTypes: IResourceStatusType[];\n requirementGroups: IRequirementGroup[];\n getRequirements: Function;\n getRequirement: Function;\n}\n\nenum FormType {\n Data = 1,\n None = 2,\n}\n\nfunction EditWorkerInner(props: IProps) {\n const { t } = useTranslation();\n const loading = useLoading();\n const [formType, setFormType] = React.useState(FormType.Data);\n const toast = useToast();\n const dialogs = useDialogs();\n\n const doReactivateWorker = loading.wrap(async () => {\n await props.reactivateWorker(props.work.id, props.worker.id);\n goToWorkers(props.work.id);\n });\n\n const confirmActivate = useConfirm({\n message: t('resource.activate.worker.confirm'),\n accept: (_: any) => doReactivateWorker(),\n });\n\n const contractorData = useSearch({\n workId: props.work.id,\n search: 'workers/contractor.get',\n filters: {\n contractorId: props.worker.contractorId,\n }\n });\n\n const contractor = contractorData.value && contractorData.value.length > 0\n ? contractorData.value[0]\n : undefined;\n\n React.useEffect(() => {\n if (window.location.href.indexOf('requirements') == -1) {\n setFormType(FormType.Data);\n }\n else {\n setFormType(FormType.None);\n }\n }, [window.location.href]);\n\n const clearWorkerForm = () => setFormType(FormType.None);\n const loadRequirements = (w: IWorker) => {\n clearWorkerForm();\n goToWorkerRequirements(props.work.id, w.id);\n }\n\n const loadData = (w: IWorker) => {\n setFormType(FormType.Data);\n goToWorker(props.work.id, w.id);\n }\n\n return
\n goToWorkers(props.work.id)} />\n\n {\n setFormType(FormType.Data);\n goToWorker(props.work.id, props.worker.id);\n }} />\n\n \n {loading.render()}\n \n\n {toast.render()}\n\n {props.worker &&\n
\n {formType === FormType.None &&\n }\n {formType == FormType.Data &&\n }\n\n
\n {contractor &&
\n
\n \n {t('Contractor')}\n
\n {contractor.name}\n
}\n\n \n \n \n {props.worker?.name + \" \" + props.worker?.surname}\n
} className='buttons'>\n
\n \n \n {props.security.isGestorOrContractor() && props.worker.isActive === false &&\n }\n {props.moduleManager.renderComponent('worker.main.actions', props, () => null)}\n
\n \n {dialogs.render('force-validation', { title: t('Force resource validation'), className: 'g pd' }, () =>\n \n )}\n {dialogs.render('view-history', { title: t('View history'), className: 'g pd' }, () =>\n \n )}\n
\n
}\n
\n}\n\nexport function EditWorker(props: IProps) {\n const data = useRemoteData(props.getWorker, {\n parameters: [props.work.id, props.workerId]\n });\n\n return
\n {data.renderLoading()}\n {data.value && }\n
\n}\n","import * as React from 'react';\nimport { Route } from 'react-router';\n\nimport { DataLoader, useTranslation } from '@components';\nimport { WorkerRequirements } from '@components/workers/WorkerRequirements';\nimport EditWorkerFormContainer from '@containers/workers/EditWorkerFormContainer';\nimport { IWorker } from '@models';\nimport { getIntParams } from '@utils';\n\nimport { getWorker } from '@store/actions/workers';\n\nexport interface IProps {\n children?: any;\n clearWorkerForm: Function;\n worker: IWorker;\n}\n\nconst WrappedWorkerRequirements = (props: any) => {\n const { t } = useTranslation();\n const { workerid, workid } = getIntParams(props.match.params);\n\n return getWorker(workid, workerid)}>\n {w =>
\n
\n {t('Worker requirements')}\n
\n
\n \n
\n
}\n
\n}\n\nconst WrappedWorkerForm = (props: any) => {\n const { t } = useTranslation();\n const { workerid, workid } = getIntParams(props.match.params);\n\n return getWorker(workid, workerid)}>\n {w =>
\n
\n \n
\n
}\n
\n}\n\nexport function WorkerRoutes(props: IProps) {\n return <>\n \n \n ;\n}\n","import * as React from 'react';\n\nimport { connect } from 'react-redux';\nimport { ApplicationState } from '../../store';\nimport * as WorkersStore from '@store/workers';\nimport { EditWorker } from '@components/workers/EditWorker';\nimport { isContractorWorkerPropertyGroupType } from '@models';\nimport * as RequirementsStore from '@store/requirements';\n\nexport default connect(\n (state: ApplicationState, props: any) => ({\n workId: props.workId ?? parseInt(props.match.params.workid),\n workerId: props.workerId ?? parseInt(props.match.params.workerid),\n ...state.identity,\n ...state.user,\n ...WorkersStore.plainActions,\n ...RequirementsStore.plainActions,\n moduleManager: state.modules.moduleManager,\n requirementGroups: state.user.requirementGroups,\n propertyGroupTypes: state.user.propertyGroupTypes.filter(isContractorWorkerPropertyGroupType),\n resourceStatusTypes: state.user.resourceStatusTypes,\n }),\n WorkersStore.actionCreators,\n)(EditWorker as any) as any; // eslint-disable-line @typescript-eslint/no-explicit-any\n","import * as React from 'react';\nimport { connect } from 'react-redux';\n\nimport { ApplicationState } from '../../store';\nimport * as JobsStore from '../../store/jobs';\n\nimport { JobAuthorizeForm } from '@components/jobs/JobAuthorizeForm';\n\nexport default connect(\n (state: ApplicationState) => ({\n ...JobsStore.plainActions,\n }),\n JobsStore.actionCreators,\n)(JobAuthorizeForm as any) as any; // eslint-disable-line @typescript-eslint/no-explicit-any\n","import * as React from 'react';\n\nimport { R, ValidationBuilder, useForm, useLoading, useMessage, useTranslation } from '@components';\nimport { IJob, IOption, JobStatusType } from '@models';\n\ntype SaveT = (workId: number, jobId: number, statusTypeId: number, remarks: string) => Promise>;\n\nexport interface IProps {\n job: IJob;\n onCancel: Function;\n onSuccess: Function;\n saveJobStatus: SaveT;\n workId: number;\n}\n\ntype Authorization = {\n jobId: number,\n remarks: string,\n statusTypeId: JobStatusType,\n}\n\nexport function JobAuthorizeForm(props: IProps) {\n const { t } = useTranslation();\n const loading = useLoading();\n const msg = useMessage();\n\n const form = useForm({\n initialValues: {\n jobId: props.job.id,\n remarks: '',\n statusTypeId: JobStatusType.AUTHORIZED,\n },\n validate: ValidationBuilder\n .new()\n .notEmpty('remarks')\n .lift()\n });\n\n const doSave = loading.wrap(async () => {\n const res = await props.saveJobStatus(\n props.workId,\n form.values.jobId,\n form.values.statusTypeId,\n form.values.remarks);\n\n msg.set(res);\n\n if (res.hasValue) {\n props.onSuccess();\n }\n });\n\n return
\n
\n {/* \n {form.textarea('remarks', { containerStyle: {width: '100%'}, autoFocus: true , rows: 7 })}\n */}\n
\n
\n {msg.renderIfError()}\n {loading.render()}\n {props.onCancel &&\n }\n {props.onSuccess &&\n }\n
\n
\n}","import * as React from 'react';\nimport { connect } from 'react-redux';\n\nimport { ApplicationState } from '../../store';\nimport * as JobsStore from '../../store/jobs';\n\nimport { JobRevokeForm } from '@components/jobs/JobRevokeForm';\n\nexport default connect(\n (state: ApplicationState) => ({\n ...JobsStore.plainActions,\n }),\n JobsStore.actionCreators,\n)(JobRevokeForm as any) as any; // eslint-disable-line @typescript-eslint/no-explicit-any","import * as React from 'react';\n\nimport { R, ValidationBuilder, useForm, useLoading, useMessage, useTranslation } from '@components';\nimport { IJob, IOption, JobStatusType } from '@models';\n\ntype SaveT = (workId: number, jobId: number, statusTypeId: number, remarks: string) => Promise>;\n\nexport interface IProps {\n job: IJob;\n onCancel: Function;\n onSuccess: Function;\n saveJobStatus: SaveT;\n workId: number;\n}\n\ntype Authorization = {\n jobId: number,\n remarks: string;\n statusTypeId: JobStatusType,\n}\n\nexport function JobRevokeForm(props: IProps) {\n const { t } = useTranslation();\n const loading = useLoading();\n const msg = useMessage();\n\n const form = useForm({\n initialValues: {\n jobId: props.job.id,\n remarks: '',\n statusTypeId: JobStatusType.INFORMATION_LOADED,\n },\n validate: ValidationBuilder\n .new()\n .notEmpty('remarks')\n .lift()\n });\n\n const doSave = loading.wrap(async () => {\n const res = await props.saveJobStatus(\n props.workId,\n form.values.jobId,\n form.values.statusTypeId,\n form.values.remarks);\n\n msg.set(res);\n\n if (res.hasValue) {\n props.onSuccess();\n }\n });\n\n return
\n
\n {/* \n {form.textarea('remarks', { containerStyle: { width: '100%' }, className: 'e', autoFocus: true, rows: 7})}\n */}\n
\n
\n {msg.renderIfError()}\n {loading.render()}\n {props.onCancel &&\n }\n {props.onSuccess &&\n }\n
\n
\n}","import * as React from 'react';\n\nimport { R, ValidationBuilder, useForm, useLoading, useMessage, useTranslation } from '@components';\nimport { IJob, IOption, JobStatusType, ModuleManager, ISecurity } from '@models';\n\ntype SaveT = (workId: number, jobId: number, statusTypeId: number, remarks: string) => Promise>;\n\nexport interface IProps {\n job: IJob;\n onCancel: Function;\n onSuccess: Function;\n saveJobStatus: SaveT;\n workId: number;\n moduleManager: ModuleManager;\n security: ISecurity;\n}\n\ntype Authorization = {\n jobId: number,\n remarks: string;\n statusTypeId: JobStatusType,\n}\n\nexport function JobFinalizeFormImpl(props: IProps) {\n const { t } = useTranslation();\n const loading = useLoading();\n const msg = useMessage();\n\n const form = useForm({\n initialValues: {\n jobId: props.job.id,\n remarks: '',\n statusTypeId: JobStatusType.FINALIZED,\n },\n validate: ValidationBuilder\n .new()\n .notEmpty('remarks')\n .lift()\n });\n\n const doSave = loading.wrap(async () => {\n const res = await props.saveJobStatus(\n props.workId,\n form.values.jobId,\n form.values.statusTypeId,\n form.values.remarks);\n\n msg.set(res);\n\n if (res.hasValue) {\n props.onSuccess();\n }\n });\n\n return
\n
\n
\n
\n {msg.renderIfError()}\n {loading.render()}\n {props.onCancel &&\n }\n {props.onSuccess &&\n }\n
\n
\n}\n\nexport function JobFinalizeForm(props: IProps) {\n\n const ctx = {\n\n }\n\n const res = props\n .moduleManager\n .renderComponent('JobFinalizeForm', { ...props, ctx }, JobFinalizeFormImpl);\n\n return res;\n}","import * as React from 'react';\nimport { connect } from 'react-redux';\n\nimport { ApplicationState } from '../../store';\nimport * as JobsStore from '../../store/jobs';\n\nimport { JobFinalizeForm } from '@components/jobs/JobFinalizeForm';\n\nexport default connect(\n (state: ApplicationState) => ({\n ...JobsStore.plainActions,\n moduleManager: state.modules.moduleManager,\n ...state.identity,\n ...state.user,\n }),\n JobsStore.actionCreators,\n)(JobFinalizeForm as any) as any; // eslint-disable-line @typescript-eslint/no-explicit-any","import * as React from 'react';\nimport { connect } from 'react-redux';\n\nimport { ApplicationState } from '../../store';\nimport * as JobsStore from '../../store/jobs';\n\nimport { JobReactivateForm } from '@components/jobs/JobReactivateForm';\n\nexport default connect(\n (state:ApplicationState) => ({\n ...JobsStore.plainActions,\n }),\n JobsStore.actionCreators,\n)(JobReactivateForm as any) as any; // eslint-disable-line @typescript-eslint/no-explicit-any","import * as React from 'react';\n\nimport { R, ValidationBuilder, useForm, useLoading, useMessage, useTranslation, useSearch, useSearchFirst } from '@components';\nimport { IJob, IJobStatus, IOption, JobStatusType } from '@models';\nimport { m } from '@store/actions/graphql';\n\ntype SaveT = (workId: number, jobId: number, statusTypeId: number, remarks: string) => Promise>;\n\nexport interface IProps {\n job: IJob;\n onCancel: Function;\n onSuccess: Function;\n saveJobStatus: SaveT;\n workId: number;\n}\n\ntype Authorization = {\n jobId: number,\n remarks?: string;\n statusTypeId: JobStatusType,\n}\n\nexport function JobReactivateForm(props: IProps) {\n const { t } = useTranslation();\n const loading = useLoading();\n const msg = useMessage();\n\n const lastStatusSearch = useSearchFirst({\n workId: props.workId,\n search: 'jobs/lastJobStatus',\n filters: {\n jobId: props.job.id\n },\n });\n\n const lastStatus = lastStatusSearch.value;\n\n const form = useForm({\n initialValues: {\n jobId: props.job.id,\n remarks: '',\n statusTypeId: lastStatus?.jobStatusTypeId!,\n }\n });\n\n React.useEffect(() => {\n if (lastStatusSearch.value) {\n form.setFieldValue('statusTypeId', lastStatusSearch.value.jobStatusTypeId);\n }\n }, [ lastStatusSearch.value ]);\n\n const doSave = loading.wrap(async () => {\n const res = await props.saveJobStatus(\n props.workId,\n form.values.jobId,\n form.values.statusTypeId,\n form.values.remarks);\n\n msg.set(res);\n\n if (res.hasValue) {\n props.onSuccess();\n }\n });\n\n return
\n
\n {msg.renderIfError()}\n {loading.render()}\n {props.onCancel &&\n }\n {props.onSuccess &&\n }\n
\n
\n}","import * as React from 'react';\nimport { connect } from 'react-redux';\n\nimport { ApplicationState } from '../../store';\nimport * as JobsStore from '../../store/jobs';\n\nimport { JobStatus } from '@components/jobs/JobStatus';\n\nexport default connect(\n (state: ApplicationState) => ({\n users: state.user.work?.users ?? [],\n ...JobsStore.plainActions,\n }),\n JobsStore.actionCreators,\n)(JobStatus as any) as any; // eslint-disable-line @typescript-eslint/no-explicit-any\n","import * as React from 'react';\n\nimport { OverlayPanel, useTranslation, useMemoized, useRemoteData, useResolveName } from '@components';\nimport DateUtils from '@utils/date-utils';\nimport { IJob, IJobSettings, IJobStatus, IUserIdentity, JobStatusType, jobStatusTypes } from '@models';\n\nimport './JobStatus.scss';\n\ntype GetJobStatusT = (workId: number, jobId: number) => Promise;\n\nexport interface IProps {\n getJobStatus: GetJobStatusT;\n job: IJob;\n jobStatus?: IJobStatus | IJobStatus[];\n users: IUserIdentity[];\n workId: number;\n jobSettings?: IJobSettings;\n}\n\nfunction jobStatusIsArray(j: any): j is IJobStatus[] {\n return j && j.length;\n}\n\nexport function JobStatus(props: IProps) {\n const { t } = useTranslation();\n const panelRef = React.useRef();\n const status = useRemoteData(props.getJobStatus, {\n lazy: true,\n parameters: [props.workId, props.job.id]\n });\n\n const [currentStatus, setCurrentStatus] = React.useState();\n\n const resolveStatusType = useResolveName(jobStatusTypes);\n const resolveUserName = useMemoized((id: number) => {\n return props.users.find(u => u.id === id)?.userName;\n }, [props.users]);\n\n React.useEffect(() => {\n const jobStatus = props.jobStatus && jobStatusIsArray(props.jobStatus)\n ? props.jobStatus\n : props.jobStatus\n ? [props.jobStatus]\n : undefined;\n const allStatus = status.value ?? jobStatus ?? [];\n if (allStatus) {\n setCurrentStatus(allStatus.find(s => s.isCurrent));\n }\n else {\n setCurrentStatus(undefined);\n }\n }, [status.value, props.jobStatus]);\n\n const showHistory = (e: any) => {\n panelRef.current.toggle(e);\n }\n\n const allStatus = status.value ?? [props.jobStatus] ?? [];\n\n const loadAllStatus = async () => {\n if (!status.hasValues()) {\n await status.query();\n }\n }\n\n const statusDefaultName = (props.jobSettings?.skipInformationLoadedState ?? false)\n && currentStatus?.jobStatusTypeId == JobStatusType.AUTHORIZED\n ? t('job.status.inprogress')\n : resolveStatusType(currentStatus?.jobStatusTypeId);\n\n const azsa = currentStatus?.jobStatusTypeId == JobStatusType.AUTHORIZED\n ? t('job.status.authorized')\n : currentStatus?.jobStatusTypeId == JobStatusType.INFORMATION_LOADED\n ? t('job.status.informationLoaded')\n : statusDefaultName;\n\n // TODO: Remove this key\n const statusName = props.workId != 23 ? statusDefaultName : azsa;\n\n return
\n {status.renderLoading()}\n\n {currentStatus != undefined && <>\n
\n {statusName}\n
\n\n \n \n \n {allStatus.map((c, i: number) =>\n \n \n \n {resolveUserName(c.userId)}\n \n \n {DateUtils.format(c.dateTime)}\n \n \n {resolveStatusType(c.jobStatusTypeId)}\n \n )}\n \n \n \n }\n
\n}\n","import * as React from 'react';\n\nimport { Portal, RequirePermission, RequireRole, TogglePanel, useDialogs, useLoading, useRemoteData, useTranslation } from '@components';\nimport JobAuthorizeForm from '@containers/jobs/JobAuthorizeFormContainer';\nimport JobRevokeForm from '@containers/jobs/JobRevokeFormContainer';\nimport JobFinalizeForm from '@containers/jobs/JobFinalizeFormContainer';\nimport JobReactivateForm from '@containers/jobs/JobReactivateFormContainer';\nimport { IContractor, IJob, IJobHasContractor, IJobSettings, IJobStatus, ISecurity, IWork, JobStatusType, ModuleManager } from '@models';\nimport { goToJobAddContractor, goToJobInformationLoadedControl } from '../routes';\nimport { redirectTo } from '@utils';\n\nimport JobStatus from '@containers/jobs/JobStatusContainer';\n\nimport './JobPanelActions.scss';\nimport { getJobHasContractorFromAppUser, getJobHasContractorFromId } from '@store/actions/contractors';\nimport { IRequirement, RequirementStatusTypes, RequirementTargetType } from '@models/requirements';\n\nexport interface IProps {\n children?: any;\n job: IJob;\n jobSettings?: IJobSettings;\n jobStatus: IJobStatus[];\n reload: Function;\n security: ISecurity;\n clearSelectedContractor: Function;\n selectedJobHasContractor?: IJobHasContractor;\n selectedContractor: IContractor | undefined;\n workId: number;\n getContractorFromAppUser: Function;\n work: IWork;\n getRequirements: Function;\n moduleManager: ModuleManager;\n}\n\nconst loadRequirements = (workId: number, jobId: number) => {\n redirectTo(`/work/${workId}/jobs/${jobId}/requirements`);\n}\n\nfunction JobPanelActionsImpl(props: IProps) {\n const { t } = useTranslation();\n const [currentState, setCurrentState] = React.useState();\n const [selfContractor, setSelfContractor] = React.useState();\n const isNotified = React.useRef(false);\n const anyPending = React.useRef(false);\n const [canAddSubContractorState, setCanAddSubContractorState] = React.useState(true);\n\n React.useEffect(() => {\n if (props.jobStatus) {\n const c = props.jobStatus.find(s => s.isCurrent);\n setCurrentState(c);\n }\n }, [props.jobStatus]);\n\n const dialogs = useDialogs();\n\n const reloadJob = () => {\n dialogs.clear();\n props.reload();\n }\n\n const goToAddSubContractor = async () => {\n const currentJobHasContractor = await getJobHasContractorFromAppUser(props.workId, props.job.id);\n goToJobAddContractor(props.workId, props.job.id, currentJobHasContractor.id);\n }\n\n const mainDepartment = props.job.departments\n .find(r => r.isMain == true);\n\n const canSave = (policies: string = '') => {\n\n if (props.security.isGestor()) {\n return true;\n }\n\n if (policies != '' && props.security.hasPermission(policies)) {\n return true;\n }\n\n if (props.work.settingsObj?.mainContractorCanFulfillSubs && props.security.isContractor()) {\n return true;\n } else if (selfContractor) {\n return true;\n }\n\n\n return false;\n }\n\n\n React.useEffect(() => {\n const ctx = {\n job: props.job,\n security: props.security,\n workId: props.work.id,\n jobHasContractor: props.selectedJobHasContractor,\n contractor: props.selectedContractor,\n selfContractorId: props.selectedJobHasContractor?.id,\n selfJobHasContractorId: props.selectedJobHasContractor?.id,\n };\n\n props.moduleManager\n .hasPermission('job.subcontractors.add', ctx)\n .then((canAddSubContractor: boolean) => {\n setCanAddSubContractorState(canAddSubContractor);\n });\n\n }, [selfContractor]);\n\n const canFinalize = props.security.hasPermission('job.finalize')\n || props.security.hasWorker(mainDepartment?.responsibleId)\n || props.security.hasPolicy('consejero')\n || props.security.isGestor();\n\n const initialize = async () => {\n const contractor = await props.getContractorFromAppUser(props.workId);\n setSelfContractor(contractor);\n\n const allRequirements: IRequirement[] = await props.getRequirements(props.workId, RequirementTargetType.JobHasDepartment, mainDepartment?.id,);\n\n allRequirements.forEach((c: IRequirement) => {\n c.status.forEach(s => {\n if (s.isCurrent) {\n if (s.statusTypeId == RequirementStatusTypes.PENDING) {\n anyPending.current = true;\n }\n }\n });\n });\n }\n\n const setCurrentJobStatus = () => {\n const currentStatus = props.jobStatus.find(j => j.isCurrent);\n isNotified.current = currentStatus?.jobStatusTypeId == JobStatusType.INFORMATION_LOADED;\n };\n\n const canAuthorizeImpl = () => {\n if ((props.security.hasPolicy('consejero') && currentState?.jobStatusTypeId === JobStatusType.INFORMATION_LOADED)) {\n return true;\n } else if (props.security.isGestor()) {\n return true;\n }\n else if (props.security.hasPermission('job.authorize') && currentState?.jobStatusTypeId === JobStatusType.INFORMATION_LOADED) {\n return true;\n }\n return false;\n }\n\n const ctx = {\n job: props.job,\n jobState: currentState,\n security: props.security,\n };\n\n const canAuthorize = props.moduleManager.requirePermissionMemo(\n 'job.authorize',\n ctx,\n canAuthorizeImpl(),\n [currentState]);\n\n const canRevoke = () => (currentState?.jobStatusTypeId === JobStatusType.AUTHORIZED &&\n props.security.hasPolicy('consejero')) ||\n props.security.isGestor() ||\n props.security.hasPermission('job.revoke');\n\n React.useEffect(() => {\n initialize();\n }, []);\n\n React.useEffect(() => {\n setCurrentJobStatus();\n }, [props.jobStatus]);\n\n const downloadJobInformation = () => {\n const url = `/api/${props.workId}/jobs/${props.job.id}/requirements/download`;\n window.location.href = url;\n }\n\n return
\n {dialogs.render('authorize', {\n title: t('job.authorize'), className: 'g pd', style: { minWidth: '30vw' }\n }, () =>\n )}\n\n {dialogs.render('revoke', {\n title: t('job.revoke'), className: 'g pd', style: { minWidth: '30vw' }\n }, () =>\n )}\n\n {dialogs.render('finalize', {\n title: t('job.finalize'), className: 'g pd', style: { minWidth: '30vw' }\n }, () =>\n )}\n\n {dialogs.render('reactivate', {\n title: t('job.reactivate'), className: 'g pd', style: { minWidth: '30vw' }\n }, () =>\n )}\n\n
\n\n
\n {props.security.isContractor() && (isNotified.current && !anyPending.current) &&\n \n }\n {!props.security.isContractor() &&\n \n \n }\n \n \n
\n {(canAuthorize)\n // #555: La carga de requisitos solo se puede hacer si el estado del trabajo es \"Información Cargada\"\n // * Esta condición estaba provocando que se muestre el botón\n // || props.security.hasPermission('job.authorize'))\n &&\n }\n {canRevoke() &&\n }\n {currentState?.jobStatusTypeId != JobStatusType.FINALIZED &&\n canFinalize &&\n }\n {currentState?.jobStatusTypeId == JobStatusType.FINALIZED &&\n canFinalize &&\n }\n \n
\n
\n\n
redirectTo(`/work/${props.workId}/jobs/${props.job.id}/data`)}>\n \n {t('View job data')}\n
\n\n
loadRequirements(props.workId, props.job.id)}>\n \n {t('Documentation')}\n
\n
\n\n
\n
\n \n {t('Contractors')}\n
\n \n
\n {/** CONTRATISTAS **/}\n {true &&\n }\n {(canSave('jobs.contractors.add')) &&\n }\n {(canSave('job.contractors.invite') || props.security.isContractor()) &&\n // \n redirectTo(`/work/${props.workId}/jobs/${props.job.id}/contractor-invite`)}>\n \n {t('Invite contractor')}\n }\n {/* */}\n {canSave() &&\n \n \n }\n {true &&\n }\n {(canSave() || props.security.isContractor()) &&\n \n \n }\n
\n
\n \n
\n {/** CONTRATISTAS **/}\n {true &&\n }\n {(((canSave() || props.security.isContractor()) && canAddSubContractorState)) &&\n \n \n }\n {((canSave('job.contractors.invite') || props.security.isContractor()) && canAddSubContractorState) &&\n redirectTo(`/work/${props.workId}/jobs/${props.job.id}/contractor-invite`)}>\n \n {t('Invite contractor')}\n }\n {true &&\n }\n
\n
\n
\n\n {props.selectedJobHasContractor != undefined &&\n
\n {props.selectedJobHasContractor?.contractor?.name}\n
}\n\n {/**\n * WORKERS\n * **/}\n {props.selectedJobHasContractor != undefined &&\n
\n
\n \n {t('Workers')}\n
\n
\n \n {(canSave('jobHasWorker.add') || (props.work.settingsObj?.mainContractorCanFulfillSubs && props.security.isContractor())) &&\n }\n
\n
}\n {props.selectedJobHasContractor == undefined &&\n
\n
\n \n {t('Workers')}\n
\n
\n \n {((canSave('jobHasWorker.add') && !props.security.isContractor()) || props.security.isContractor()) &&\n }\n
\n
}\n\n {/** MAQUINARIA **/}\n {props.selectedJobHasContractor != undefined &&\n
\n
\n \n {t('Machineries')}\n
\n
\n \n {canSave('jobs.machineries.add') || (props.security.isContractor() && props.work.settingsObj?.mainContractorCanFulfillSubs == true) &&\n }\n
\n
}\n {props.selectedJobHasContractor == undefined &&\n
\n
\n \n {t('Machineries')}\n
\n
\n \n {/* {(canSave('jobs.machineries.new.add') && !props.security.isContractor()) && */}\n {/* \n \n */}\n {/* } */}\n {canSave('jobs.machineries.add') &&\n }\n
\n
}\n\n {/*{props.children}*/}\n\n
\n}\n\nexport function JobPanelActions(props: IProps) {\n\n const ctx = {\n JobAuthorizeForm: JobAuthorizeForm,\n JobRevokeForm: JobRevokeForm,\n JobFinalizeForm: JobFinalizeForm,\n JobReactivateForm: JobReactivateForm,\n JobStatus: JobStatus,\n goToJobAddContractor: goToJobAddContractor,\n goToJobInformationLoadedControl: goToJobInformationLoadedControl,\n getJobHasContractorFromAppUser: getJobHasContractorFromAppUser,\n getJobHasContractorFromId: getJobHasContractorFromId,\n getRequirements: props.getRequirements,\n RequirePermission: RequirePermission,\n RequireRole: RequireRole,\n TogglePanel: TogglePanel,\n useDialogs: useDialogs,\n useLoading: useLoading,\n useRemoteData: useRemoteData,\n Portal: Portal,\n RequirementStatusTypes: RequirementStatusTypes,\n RequirementTargetType: RequirementTargetType,\n }\n\n const res = props\n .moduleManager\n .renderComponent('JobPanelActions', { ...props, ctx }, JobPanelActionsImpl);\n\n\n\n return res;\n}\n","import * as React from 'react';\nimport { connect } from 'react-redux';\nimport { ApplicationState } from '../../store';\nimport * as JobsStore from '../../store/jobs';\nimport { JobHasResourceRequirements } from '@components/jobs/JobHasResourceRequirements';\n\nexport default connect(\n (state: ApplicationState) => ({\n ...JobsStore.plainActions,\n ...state.identity,\n ...state.user,\n workSettings: state.user.work?.settingsObj,\n }),\n JobsStore.actionCreators,\n)(JobHasResourceRequirements as any) as any; // eslint-disable-line @typescript-eslint/no-explicit-any\n","import * as React from 'react';\n\nimport {\n Portal, RequirePermission, useRemoteData, useTranslation,\n} from '@components';\nimport useContractorFromAppUser from '@components/custom/useContractorFromAppUser';\nimport {\n goToJobResourceCreateRequirement,\n} from '@components/routes';\nimport EditRequirements from '@containers/requirements/EditRequirementsContainer';\nimport { ISecurity, IWorkSettings } from '@models';\nimport { RequirementStatusTypes, RequirementTargetType } from '@models/requirements';\nimport { IJob, IJobHasContractor, IJobLog, JobLogType } from '@models/jobs';\nimport * as WorkerActions from '@store/actions/workers';\nimport { search } from '@store/actions/search';\n\ntype GetJobLogsT = (workId: number, jobId: number) => Promise;\n\nexport interface IProps {\n jobId: number;\n job: IJob;\n selectContractor: Function;\n getJobLogs: GetJobLogsT;\n resourceId: number;\n resourceType: number;\n resourceTitle: string;\n siblingId?: number;\n siblingType?: number;\n siblingContractorId?: number;\n siblingJobHasContractorId?: number;\n security: ISecurity;\n workId: number;\n workSettings: IWorkSettings;\n}\n\nexport function JobHasResourceRequirements(props: IProps) {\n const { t } = useTranslation();\n\n const jobLogs = useRemoteData(props.getJobLogs, {\n parameters: [props.workId, props.jobId]\n });\n\n // const [readOnly, setReadOnly] = React.useState(true);\n const [hasAccessJobInformation, setHasAccessJobInformation] = React.useState(false);\n const [resourceContractor, setResourceContractor] = React.useState();\n\n const selfContractorId = useContractorFromAppUser(props.workId, props.security);\n\n const findJobHasContractor = async (resourceType: number, resourceId: number) => {\n if (resourceType == RequirementTargetType.JobHasWorker) {\n const jobHasWorker = await search(\n props.workId,\n 'jobs/job_has_worker', {\n filters: {\n jobId: props.jobId,\n jobHasWorkerId: resourceId,\n },\n normalizeKeys: true,\n });\n const jobHasContractorId = jobHasWorker.value?.[0]?.jobHasContractorId;\n const jobHasC = props\n .job\n .contractors\n .find(c => c.id == jobHasContractorId);\n setResourceContractor(jobHasC);\n }\n else if (resourceType == RequirementTargetType.JobHasMachinery) {\n const jobHasM = await search(\n props.workId,\n 'jobs/job_has_machinery', {\n filters: {\n jobId: props.jobId,\n jobHasMachineryId: resourceId,\n },\n normalizeKeys: true,\n });\n const jobHasContractorId = jobHasM.value?.[0]?.jobHasContractorId;\n const jobHasC = props\n .job\n .contractors\n .find(c => c.id == jobHasContractorId);\n setResourceContractor(jobHasC);\n }\n }\n\n React.useEffect(() => {\n findJobHasContractor(props.resourceType, props.resourceId);\n }, [ props.resourceType, props.resourceId ]);\n\n React.useEffect(() => {\n if (jobLogs.value) {\n const jobStatus = props.job?.currentStatus?.jobStatusTypeId;\n const logs = jobLogs.value;\n const haveReadInformation = logs\n .find(l =>\n l.userId == props.security.user?.id\n && l.jobLogType == JobLogType.ACCESS_JOB_INFORMATION);\n\n setHasAccessJobInformation(haveReadInformation != null);\n }\n }, [jobLogs.value]);\n\n const createRequirement = () => {\n goToJobResourceCreateRequirement(\n props.workId,\n props.jobId,\n props.resourceType,\n props.resourceId,\n RequirementStatusTypes.NOT_LOADED);\n }\n\n const resourceIsContractor = props.resourceType == RequirementTargetType.JobHasContractor;\n\n const contractor = resourceIsContractor\n ? props.job.contractors.find(c => c.id == props.resourceId)?.contractor\n : undefined;\n\n const mainDepartment = props.job.departments\n .find(r => r.isMain == true);\n\n const canSave = (props.security.hasPermission('jobs.edit')\n || props.security.hasWorker(mainDepartment?.responsibleId));\n\n const canAddWorker = canSave || props.security.isContractor();\n\n const [isReadonly, setIsReadonly] = React.useState(true);\n\n const setContractorReadonly = () => {\n const isR = props.security.isContractor() && props.workSettings?.mainContractorCanFulfillSubs != true\n ? !(selfContractorId == props.siblingId)\n : false;\n setIsReadonly(isR);\n }\n\n const setWorkerReadonly = async () => {\n if (props.security.isContractor()) {\n const worker = await WorkerActions.getWorker(props.workId, props.siblingId ?? 0);\n const isR = props.security.isContractor() && props.workSettings?.mainContractorCanFulfillSubs != true\n ? !(selfContractorId == worker.contractorId)\n : false;\n setIsReadonly(false);\n }\n else {\n setIsReadonly(false);\n }\n }\n\n const setMachineryReadonly = async () => {\n // if (props.security.isContractor()) {\n // const machinery = await MachineryActions.getMachinery(props.workId, props.siblingId ?? 0);\n // const isR = props.security.isContractor() && props.workSettings?.mainContractorCanFulfillSubs != true\n // ? !(selfContractorId == machinery.contractorId)\n // : false;\n setIsReadonly(false);\n // }\n // else {\n setIsReadonly(false);\n // }\n }\n\n React.useEffect(() => {\n if (props.resourceType == RequirementTargetType.JobHasContractor) {\n setContractorReadonly();\n }\n else if (props.resourceType == RequirementTargetType.JobHasWorker) {\n setWorkerReadonly();\n }\n else if (props.resourceType == RequirementTargetType.JobHasMachinery) {\n setMachineryReadonly();\n }\n else {\n setIsReadonly(false);\n }\n }, [props.resourceType, props.resourceId, selfContractorId]);\n\n const permsCtx = {\n jobHasContractor: resourceContractor,\n };\n\n return <>\n {jobLogs.renderLoading()}\n \n \n \n \n \n\n \n ;\n}\n","import * as React from 'react';\n\nimport { TabPanel, useSearch, useTranslation } from '@components';\nimport useContractorFromAppUser from '@components/custom/useContractorFromAppUser';\nimport EditRequirements from '@containers/requirements/EditRequirementsContainer';\nimport { IJob, IJobHasContractor, ISecurity } from '@models';\nimport { RequirementTargetType } from '@models/requirements';\n\nexport interface IProps {\n contractors: IJobHasContractor[];\n job: IJob;\n jobId: number;\n security: ISecurity;\n workId: number;\n selectedJobHasContractor?: IJobHasContractor;\n}\n\ntype IParentRow = {\n parentJobHasContractorId: number,\n parentHierarchyLevel: number,\n parentContractorName: string,\n parentContractorId: number,\n}\n\nexport function getTabs(props: IProps) {\n const { t } = useTranslation();\n const contractorId = useContractorFromAppUser(props.workId, props.security);\n\n const [contractor, setContractor] = React.useState();\n\n const parents = useSearch({\n workId: props.workId,\n search: 'jobs/subcontractors_hierarchy',\n normalizeKeys: true,\n filters: {\n jobId: props.jobId,\n workId: props.workId,\n jobHasContractorId: props.selectedJobHasContractor?.id ?? 0,\n },\n });\n\n React.useEffect(() => {\n const mc = props.contractors.find(c => c.contractorId == contractorId);\n if (props.selectedJobHasContractor != undefined) {\n setContractor(props.selectedJobHasContractor);\n parents.doSearch();\n }\n else if (mc && props.selectedJobHasContractor == null) {\n setContractor(mc);\n }\n }, [contractorId, props.contractors, props.selectedJobHasContractor]);\n\n const tabHeader = (p: IParentRow, id: number) => {\n return (opts: any) =>\n \n \n {p.parentHierarchyLevel}\n {p.parentContractorName}\n \n ;\n }\n\n if (parents.value) {\n return parents.value.map((p, id) =>\n \n \n );\n }\n else if (contractor) {\n return [\n \n ];\n }\n else {\n return [];\n }\n}\n\nexport function JobRequirementsSubContractor(props: IProps) {\n return <>\n {getTabs(props)}\n ;\n}\n","import * as React from 'react';\nimport { connect } from 'react-redux';\nimport { ApplicationState } from '../../store';\nimport * as JobsStore from '../../store/jobs';\nimport * as User from '../../store/user';\nimport { JobRequirements } from '@components/jobs/JobRequirements';\n\nexport default connect(\n (state: ApplicationState, ownProps: any) => ({\n ...state.identity,\n ...state.user,\n job: state.jobs.selectedJob,\n ...state.jobs,\n ...User.plainActions,\n ...JobsStore.plainActions,\n moduleManager: state.modules.moduleManager,\n }),\n JobsStore.actionCreators,\n)(JobRequirements as any) as any; // eslint-disable-line @typescript-eslint/no-explicit-any\n","import * as React from 'react';\n\nimport {\n BreadcrumbItem, Portal, RequireRole, useRemoteData, useTranslation,\n TabPanel, TabView,\n} from '@components';\nimport {\n IJob, IJobHasDepartment, IJobHasContractor, IJobStatus, ISecurity, IWork,\n IWorkSettings,\n ModuleManager,\n} from '@models';\nimport EditRequirements from '@containers/requirements/EditRequirementsContainer';\nimport { RequirementTargetType } from '@models/requirements';\nimport { getTabs } from './JobRequirementsSubContractor';\n\nimport './JobRequirements.scss';\nimport { goToJobCreateRequirement, goToJobNotifyInformationLoaded } from \"@components/routes\";\n\nexport interface IProps {\n getJobDepartments: Function;\n getJobStatus: Function;\n job: IJob;\n jobId: number;\n moduleManager: ModuleManager;\n workId: number;\n work: IWork;\n security: ISecurity;\n selectedJobHasContractor?: IJobHasContractor;\n}\n\n// controlamos que un target tenga algun requerimiento pendiente\ntype TargetReqPending = {\n [key: number]: boolean;\n}\n\n// #762: Si el usuario es un subcontratista asociado al trabajo\n// se muestran primero los requerimientos de su contratista padre\nexport function JobRequirements(props: IProps) {\n const { t } = useTranslation();\n\n const status = useRemoteData(props.getJobStatus, {\n parameters: [props.workId, props.jobId]\n });\n\n const workSettings: IWorkSettings | undefined = props.work.settingsObj;\n\n const [currentStatus, setCurrentStatus] = React.useState(undefined);\n\n // constrolamos por targetId los requerimientos pendientes\n const [targetReqPending, setTargetReqPending] = React.useState({});\n\n const allowAlwaysNotifyInformationLoaded = workSettings?.allowAlwaysNotifyInformationLoaded ?? false;\n const reqPending = Object.values(targetReqPending).find(r => r);\n\n React.useEffect(() => {\n const current = (status.value ?? []).find(s => s.isCurrent);\n setCurrentStatus(current);\n }, [status.value]);\n\n const departments = useRemoteData(\n props.getJobDepartments,\n {\n parameters: [props.workId, props.jobId]\n });\n\n const mainDepartment = props.job?.departments?.find(r => r.isMain == true);\n\n const [canSave, setCanSave] = React.useState(false);\n const [canNotify, setCanNotify] = React.useState(false);\n\n const permCtx = {\n security: props.security,\n job: props.job,\n };\n\n const calculateCanSave = async () => {\n const p = props.security.hasPermission('job.requirements.create')\n || props.security.hasWorker(mainDepartment?.responsibleId);\n const res = await props.moduleManager.requirePermission(\n 'job.requirements.create',\n permCtx,\n p);\n\n const resN = await props.moduleManager.requirePermission(\n 'job.notify-information-loaded',\n permCtx,\n false);\n setCanSave(res ?? false);\n setCanNotify(resN ?? false);\n }\n\n React.useEffect(() => {\n calculateCanSave();\n }, [props.security, props.job]);\n\n const canSaveRequirements = props.security.hasPermission('job.requirements.upload')\n || props.security.hasWorker(mainDepartment?.responsibleId);\n\n const createRequirement = () => {\n goToJobCreateRequirement(props.workId, props.jobId);\n }\n\n const notifyInformationLoaded = () => {\n goToJobNotifyInformationLoaded(props.workId, props.jobId);\n }\n\n const contractorTabs = props.security.isContractor()\n ? getTabs({\n contractors: props.job.contractors,\n selectedJobHasContractor: props.selectedJobHasContractor,\n workId: props.workId,\n jobId: props.jobId,\n job: props.job,\n security: props.security,\n })\n : null;\n\n return
\n \n {departments.renderLoading()}\n\n \n \n {canSave &&\n }\n\n {(reqPending || allowAlwaysNotifyInformationLoaded)\n && ((props.security.isGestor()\n || props.security.hasPolicy('consejero'))\n || canSave\n || canNotify)\n && (props.security.hasPermission('job.notify-information-loaded') || canNotify) &&\n }\n \n \n\n
\n {props.security.isContractor() && <>\n \n \n {departments.value?.length === 0 &&\n
\n \n \n {t('job.departments.empty')}\n \n
}\n
\n {departments.value && departments.value.map((dep, i) =>\n <>\n {props.workId !== 23 &&
\n {t('Department')}:\n {dep.department?.name}\n \n
}\n setTargetReqPending({ ...targetReqPending, [dep.id ?? 0]: value })}\n targetId={dep.id!}\n targetTitle={dep.department?.name}\n targetType={RequirementTargetType.JobHasDepartment}\n workId={props.workId} />\n )}\n setTargetReqPending({ ...targetReqPending, [props.jobId]: value })}\n job={props.job}\n targetId={props.jobId}\n targetTitle={t('Job Requirements')}\n targetType={RequirementTargetType.Job}\n workId={props.workId} />\n
\n
\n null}>\n {/** Si somos un subcontratista accedemos primero a los requerimientos del contratista principal **/}\n {contractorTabs}\n
\n }\n {!props.security.isContractor() && <>\n {departments.value?.length === 0 &&\n
\n \n \n {t('job.departments.empty')}\n \n
}\n {departments.value && departments.value.map((dep, i) =>\n <>\n {props.workId !== 23 &&
\n {t('Department')}:\n {dep.department?.name}\n \n
}\n setTargetReqPending({ ...targetReqPending, [dep.id ?? 0]: value })}\n targetId={dep.id!}\n targetTitle={dep.department?.name}\n targetType={RequirementTargetType.JobHasDepartment}\n workId={props.workId} />\n )}\n setTargetReqPending({ ...targetReqPending, [props.jobId]: value })}\n job={props.job}\n targetId={props.jobId}\n targetTitle={t('Job Requirements')}\n targetType={RequirementTargetType.Job}\n workId={props.workId} />\n }\n
\n
\n}\n","import * as React from 'react';\nimport { connect } from 'react-redux';\nimport { ApplicationState } from '../../store';\nimport * as JobsStore from '../../store/jobs';\n\nimport { Loading } from '../../components';\n\nconst Loader = (props: any) => {\n const [loading, setLoading] = React.useState(true);\n\n React.useEffect(() => {\n const jobId = props.jobId ?? parseFloat(props.match.params.jobid);\n if (!props.job || props.job.id != jobId) {\n setLoading(true);\n props.loadJob(props.work?.id, jobId);\n }\n else if (props.job?.id == jobId) {\n setLoading(false);\n }\n }, [props.id, props.work, props.job]);\n\n if (loading) {\n return ;\n }\n else {\n return React.cloneElement(props.children, { job: props.job });\n }\n}\n\nexport default connect(\n (state: ApplicationState) => ({\n work: state.user.work,\n job: state.jobs.selectedJob,\n }),\n JobsStore.actionCreators,\n)(Loader as any) as any; // eslint-disable-line @typescript-eslint/no-explicit-any\n","import * as React from 'react';\n\nimport { BreadcrumbItem, RequireRole, G, useForm, useToast, useTranslation, ValidationBuilder } from '@components';\nimport { IContractorInvitation, IJob, ISecurity, IWork, NotificationType } from '@models';\nimport { useLoading } from '@utils/hooks';\nimport './CreateContractorInvitation.scss';\nimport dateUtils from '@utils/date-utils';\nimport { redirectTo } from '@utils';\n\nexport interface IProps {\n createContractorInvitation: Function;\n job?: IJob;\n onCancel?: Function;\n work: IWork;\n security: ISecurity;\n success: Function;\n onCreate?: Function;\n}\n\nexport const validateInvitation = (workId: number, jobId?: number, isGestorOrWorker?: boolean) => {\n if (workId == 19 && jobId != null) {\n return ValidationBuilder.new()\n .notEmpty('email')\n .email('email')\n .notEmpty('name')\n .notEmpty('startDate')\n .notEmpty('jobsDescription')\n .notEmptyIf(isGestorOrWorker, 'shipmentNumber')\n .lift()\n }\n else if(workId != 19 && jobId != null){\n return ValidationBuilder.new()\n .notEmpty('email')\n .email('email')\n .notEmpty('name')\n .notEmpty('startDate')\n .notEmpty('jobsDescription')\n .lift()\n }else{\n return ValidationBuilder.new()\n .notEmpty('email')\n .email('email')\n .notEmpty('name')\n .lift()\n }\n}\n\n\nexport function CreateContractorInvitation(props: IProps) {\n const { t } = useTranslation();\n const loading = useLoading();\n const toast = useToast();\n const workId = props.work.id;\n const jobId = props.job?.id;\n\n const form = useForm({\n initialValues: {\n workId: workId,\n jobId: props.job?.id,\n email: '',\n name: '',\n subject: t('ContractorInvitation.default.subject'),\n message: props.work.id != 23 ? t('ContractorInvitation.default.message') : t('ContractorInvitation.Azsa.message'),\n },\n validate: validateInvitation(workId, jobId, props.security.isGestorOrWorker()),\n validateOnMount: true,\n });\n\n const today = new Date();\n\n const doSendInvitation = loading.wrap(async (..._: any) => {\n const resp = await props.createContractorInvitation(props.work.id, form.values);\n if (resp?.value && jobId != null) {\n props.success({\n message: t('Contractor invitation send successfully'),\n ctx: 'global',\n action: 'create',\n });\n props.onCreate?.();\n redirectTo(`/work/${workId}/jobs/${jobId}/contractors`);\n }\n else if (resp?.value && jobId == null) {\n props.success({\n message: t('Contractor invitation send successfully'),\n ctx: 'global',\n action: 'create',\n });\n props.onCreate?.();\n }\n else {\n toast.error(t('Can not send contractor invitation'));\n }\n });\n\n const formIsValid = () => {\n if (props.job != null) {\n if ((dateUtils.compareDates(dateUtils.parseDate(form.values.startDate), dateUtils.parseDate(props.job!.startDate)) >= 0) &&\n (dateUtils.compareDates(dateUtils.parseDate(form.values.startDate), dateUtils.parseDate(props.job!.endDate!)) < 0) &&\n (dateUtils.dateISTodayOrFuture(dateUtils.parseDate(form.values.startDate)))) {\n return true;\n } else {\n return false;\n }\n } else {\n return true;\n }\n }\n\n React.useEffect(() => {\n formIsValid();\n }, [form.values.startDate]);\n\n return
\n \n\n {toast.render()}\n\n
\n \n {form.input('name')}\n \n \n {form.input('email', { type: 'email' })}\n \n { (workId != 23 || jobId != null) &&\n \n {form.textarea('message', {readOnly: workId != 21? true : false })}\n }\n {(jobId != null) && <>\n \n
\n {form.input('startDate', { type: 'date' })}\n {form.values.startDate && !(dateUtils.compareDates(dateUtils.parseDate(form.values.startDate), dateUtils.parseDate(props.job!.startDate)) >= 0) &&\n {t('job.error.jobStartDate') + `: ${dateUtils.formatFromUtc(dateUtils.toUtc(props.job!.startDate))}`} ||\n (form.values.startDate && !(dateUtils.compareDates(dateUtils.parseDate(form.values.startDate), dateUtils.parseDate(props.job!.endDate!)) < 0)) &&\n {t('job.error.endDate') + `: ${dateUtils.formatFromUtc(dateUtils.toUtc(props.job!.endDate!))}`} ||\n form.values.startDate && !(dateUtils.dateISTodayOrFuture(dateUtils.parseDate(form.values.startDate))) &&\n {t('job.error.startDate') + `: ${dateUtils.formatFromUtc(today)}`}}\n
\n
\n \n {form.textarea('jobsDescription')}\n \n {props.work.id != 21 &&\n \n \n {form.textarea('shipmentNumber')}\n \n \n }\n }\n \n {form.errorBox()}\n \n
\n
\n {loading.render()}\n \n {t('Send invitation')}\n \n
\n
\n
\n}\n","import * as React from 'react';\nimport { connect } from 'react-redux';\nimport { ApplicationState } from '../../store';\nimport * as ContractorsStore from '../../store/contractors';\nimport { CreateContractorInvitation } from '../../components/contractors/CreateContractorInvitation';\nimport * as NotificationsStore from '../../store/notifications';\n\nexport default connect(\n (state: ApplicationState) => ({\n ...state.identity,\n ...ContractorsStore.plainActions,\n work: state.user.work,\n }),\n {...ContractorsStore.actionCreators,\n ...NotificationsStore.actionCreators,\n }\n)(CreateContractorInvitation as any) as any; // eslint-disable-line @typescript-eslint/no-explicit-any\n","import * as React from 'react';\n\nimport {\n F, Toast,\n onNotification, useForm, useLoading, useTranslation, useWorkFormSettings,\n ValidationBuilder,\n} from '@components';\nimport { DynamicProperties } from '../user/DynamicProperties';\nimport ManageJobDepartmentsContainer from '@containers/jobs/ManageJobDepartmentsContainer';\nimport {\n IActivityType, IContractType, IDepartment, IJob, IPreventiveResource,\n IWork, IWorkShift, IWorkspace, INotification, NotificationType,\n IPropertyGroupType, PropertyGroupObjectType, IPropertyGroup, ISecurity, JobEncodingType, ModuleManager,\n} from '@models';\nimport { goToJobs } from '@components/routes';\n\nimport './JobData.scss';\nimport dateUtils from '@utils/date-utils';\n\nexport interface IProps {\n activityTypes: IActivityType[];\n contractTypes: IContractType[];\n departments: IDepartment[];\n job: IJob;\n notifications: INotification[];\n propertyGroupTypes: IPropertyGroupType[];\n onCancel: Function;\n onSuccess: Function;\n onChange: Function;\n saveJob: Function;\n security: ISecurity;\n work: IWork;\n workShifts: IWorkShift[];\n workspaces: IWorkspace[];\n preventiveResources: IPreventiveResource[];\n moduleManager: ModuleManager;\n}\n\ninterface IValidateJobOpts {\n validateWorkspaces?: boolean;\n}\n\nexport const validateJob = (data: IJob, validateOptions: IValidateJobOpts = {}, validateCode: boolean = false) => {\n const builder = ValidationBuilder\n .create(data)\n .notEmpty('workspaceId', 'Workspace is required')\n .notEmpty('name', 'Name is required')\n .notEmpty('startDate', 'Date is required')\n .notEmpty('endDate', 'Date is required')\n .notEmpty('description', 'Description is required');\n\n if (validateCode) {\n builder.notEmpty('code', 'Code is required');\n }\n\n return builder.build();\n}\n\nexport const isValid = (data: IJob) => {\n return Object.keys(validateJob(data)).length == 0;\n}\n\nfunction JobDataImpl(props: IProps) {\n const { t } = useTranslation();\n const loading = useLoading(false);\n const toast = React.useRef();\n\n const settings = useWorkFormSettings({ work: props.work, scope: 'job' });\n\n const codeIsManual = props.work.settingsObj?.jobEncodingType == JobEncodingType.Manual;\n\n onNotification({ type: NotificationType.SUCCESS }, props.notifications, (n: INotification) => {\n toast.current.show({\n severity: 'success',\n summary: t('Job saved successfully'),\n });\n });\n\n const saveJob = loading.wrap(async (req: IJob) => {\n await props.saveJob(props.work.id, req);\n });\n\n const mainDepartment = props.job.departments\n .find(r => r.isMain == true);\n\n const canSave = props.security.hasPermission('jobs.edit')\n || props.security.hasWorker(mainDepartment?.responsibleId) || props.security.isGestor();\n\n const isReadonly = props.security.isContractor() || !canSave;\n\n const jobPropertiesCreate = (props.security.hasPermission('job.properties') || !isReadonly);\n\n const propsReadonly = props.security.isContractor() || props.security.hasPolicy('editProps');\n\n const form = useForm({\n validateOnMount: true,\n initialValues: {\n id: props.job?.id ?? 0,\n name: props.job?.name ?? '',\n code: props.job?.code ?? '',\n workId: props.work.id,\n workspaceId: props.job.workspaceId,\n activityTypeId: props.job.activityTypeId,\n workShiftId: props.job.workShiftId,\n departments: props.job.departments,\n contractTypeId: props.job.contractTypeId,\n contractors: props.job.contractors,\n machineries: props.job.machineries,\n properties: props.job.properties ?? [],\n description: props.job?.description,\n startDate: props.job?.startDate,\n endDate: props.job?.endDate,\n remarks: props.job?.remarks,\n preventiveResourceId: props.job.preventiveResourceId,\n isActive: props.job.isActive == true,\n },\n readonly: isReadonly,\n validate: (data: IJob) => {\n return validateJob(data, { validateWorkspaces: props.workspaces.length > 0 }, codeIsManual)\n },\n onSubmit: (data: IJob) => {\n props.onSuccess({\n id: data.id,\n name: data.name,\n code: data.code,\n workspaceId: data.workspaceId,\n workId: data.workId,\n activityTypeId: data.activityTypeId,\n workShiftId: data.workShiftId,\n contractTypeId: data.contractTypeId,\n startDate: data.startDate,\n endDate: data.endDate,\n remarks: data.remarks,\n description: data.description,\n properties: data.properties,\n isActive: data.isActive,\n });\n return { ok: true };\n },\n onChange: props.onChange,\n });\n\n const cancel = (e: any) => {\n e.preventDefault();\n e.stopPropagation();\n\n goToJobs(props.work.id);\n }\n\n const formIsValid = () => {\n // #701: Comprobamos que al modificar la fecha, la fecha de inicio/fin no sea anterior a la fecha ya establecida y que la fecha de inicio no sea posterior a la fecha de fin\n if (dateUtils.compareDates(dateUtils.parseDate(form.values.endDate), dateUtils.parseDate(form.values.startDate)) >= 0 &&\n dateUtils.compareDates(dateUtils.parseDate(form.values.endDate), dateUtils.parseDate(props.job.endDate!)) >= 0 &&\n dateUtils.compareDates(dateUtils.parseDate(form.values.startDate), dateUtils.parseDate(props.job.startDate!)) >= 0) {\n\n return true;\n\n } else {\n\n return false;\n }\n }\n\n return \n\n \n\n
\n
\n \n
\n {form.select('workspaceId', {\n options: props.workspaces,\n containerClassName: 'e'\n })}\n \n {codeIsManual &&\n form.input('code')}\n {!codeIsManual && <>\n {props.job?.code && form.span('code')}\n }\n \n
\n
\n \n {form.input('name', { autoFocus: true })}\n \n \n \n \n {settings.show('description') &&\n \n {form.textarea('description')}\n }\n {settings.show('workShiftId') &&\n \n {form.select('workShiftId', {\n options: props.workShifts\n })}\n }\n \n
\n {form.input('startDate', { type: 'date', style: { width: '150px' } })}\n \n {form.input('endDate', { type: 'date', style: { width: '150px' } })}\n \n
\n
\n {(dateUtils.compareDates(dateUtils.parseDate(form.values.endDate), dateUtils.parseDate(form.values.startDate)) < 0) &&\n {t('job.error.endDate')}}\n {(dateUtils.compareDates(dateUtils.parseDate(form.values.endDate), dateUtils.parseDate(props.job.endDate!)) < 0) &&\n {t('job.error.endDate.beforeActualEndDate')}}\n {(dateUtils.compareDates(dateUtils.parseDate(form.values.startDate), dateUtils.parseDate(props.job.startDate!)) < 0) &&\n {t('job.error.startDate.beforeActualStartDate')}}\n {props.work.id !== 23 ?\n
\n {settings.show('activityTypeId') &&\n \n {form.select('activityTypeId', {\n options: props.activityTypes\n })}\n }\n {settings.show('contractTypeId') &&\n \n {form.select('contractTypeId', {\n options: props.contractTypes\n })}\n }\n
:\n <>\n {settings.show('activityTypeId') &&\n \n {form.select('activityTypeId', {\n options: props.activityTypes\n })}\n }\n {settings.show('contractTypeId') &&\n \n {form.select('contractTypeId', {\n options: props.contractTypes\n })}\n }\n \n }\n {settings.show('preventiveResourceId') &&\n \n {form.select('preventiveResourceId', {\n options: props.preventiveResources\n })}\n }\n \n {form.textarea('remarks')}\n \n
\n
\n
\n pg.objectType == PropertyGroupObjectType.Job)}\n onChange={(v: IPropertyGroup[]) => form.setFieldValue('properties', v)} />\n
\n
\n
\n
\n {form.errorBox()}\n
\n
\n \n {(!isReadonly || jobPropertiesCreate) &&\n
\n \n {t('Cancel')}\n \n {canSave &&\n saveJob(form.values)}>\n {t('Save')}\n }\n
\n }\n
\n ;\n}\n\nexport function JobData(props: IProps) {\n return props\n .moduleManager\n .renderComponent('JobData', props, JobDataImpl);\n}\n","import * as React from 'react';\nimport { connect } from 'react-redux';\nimport { ApplicationState } from '../../store';\nimport * as JobsStore from '../../store/jobs';\nimport { JobData } from '../../components/jobs/JobData';\n\nexport default connect(\n (state: ApplicationState) => ({\n notifications:\n state.notifications.notifications\n .filter(n => n.ctx == 'jobs.save'),\n ...state.user,\n ...state.identity,\n ...JobsStore.plainActions,\n moduleManager: state.modules.moduleManager,\n }),\n JobsStore.actionCreators,\n)(JobData as any) as any;","import * as React from 'react';\n\nimport {\n Accordion, AccordionTab, BreadcrumbItem, Chip, F,\n useDataTable, useDebounce, useForm, useLoading, useSearch, useStringState, useTranslation,\n useWorkFormSettings,\n ValidationBuilder\n} from '@components';\nimport {\n IJob, IWork, IContractor, IPropertyGroup, PropertyGroupObjectType, IPropertyGroupType,\n IJobHasContractor,\n ISecurity,\n ISubContractorRequest\n} from '@models';\nimport { DynamicProperties } from '../user/DynamicProperties';\nimport dateUtils from '@utils/date-utils';\nimport { ModuleManager } from '@modules';\n\nexport interface IProps {\n job: IJob;\n modules: ModuleManager;\n parentContractor: IJobHasContractor;\n propertyGroupTypes: IPropertyGroupType[];\n onCancel: Function;\n onSuccess: Function;\n saveJobHasContractor: Function;\n saveSubContractorRequest: Function;\n searchContractors: Function;\n security: ISecurity;\n work: IWork;\n getJobContractors: Function;\n getContractorFromAppUser: Function;\n}\n\nexport const validateContractor = (data: Partial, work: IWork) => {\n return ValidationBuilder.create(data)\n .notEmptyIf(work.contractorSettings?.jhcStartDateMandatory == true,'startDate', 'Date is required')\n .notEmptyIf(work.contractorSettings?.jhcDescriptionMandatory == true,'jobsDescription')\n .build();\n}\n\nconst isValid = (data: Partial, work: IWork) => {\n return Object.keys(validateContractor(data, work)).length == 0;\n}\n\nexport function JobAddContractor(props: IProps) {\n const { t } = useTranslation();\n const currentSearchTerm = useStringState();\n const loading = useLoading(false);\n\n const [activeIndex, setActiveIndex] = React.useState(0);\n const [contractors, setContractors] = React.useState([]);\n const [selectedContractor, setSelectedContractor] = React.useState();\n const debouncedSearchTerm = useDebounce(currentSearchTerm.value, 500);\n\n const doSearch = loading.wrap(async (term: string|undefined) => {\n const selfContractors = await props.getContractorFromAppUser(props.work.id);\n const data = await props.searchContractors(props.work.id, term ?? '');\n const jobContractors: IJobHasContractor[] = await props.getJobContractors(props.work.id, props.job.id);\n for (const d of data) {\n if (jobContractors.some((jc: IJobHasContractor) => jc.contractorId == d.id)) {\n const foundContractor = jobContractors.find((jc: IJobHasContractor) => jc.contractorId == d.id);\n if (props.parentContractor == undefined && foundContractor?.parentId == undefined) {\n data.splice(data.indexOf(d), 1);\n }\n else if (props.parentContractor?.id == foundContractor?.parentId) {\n data.splice(data.indexOf(d), 1);\n }\n }\n }\n const contractorsToExclude = [];\n let newData = data;\n if (selfContractors) {\n if (selfContractors.length > 1) {\n for (const c of selfContractors) {\n contractorsToExclude.push(c.id);\n }\n }\n else {\n contractorsToExclude.push(selfContractors.id);\n }\n }\n for (const c of contractorsToExclude) {\n newData = newData.filter((d: IContractor) => d.id != c);\n }\n newData.sort((a: IContractor, b: IContractor) => a.name.localeCompare(b.name));\n setContractors(newData);\n });\n\n React.useEffect(() => {\n doSearch(debouncedSearchTerm);\n }, [debouncedSearchTerm]);\n\n React.useEffect(() => {\n setActiveIndex(selectedContractor ? 1 : 0);\n }, [selectedContractor]);\n\n //TODO: CHECK SAVE SUBCONTRACTOR ?\n\n const saveSubContractorRequest = loading.wrap(async (data: Partial) => {\n const inputData: ISubContractorRequest = {\n workId: props.work.id,\n jobId: props.job?.id,\n jobsDescription: data.jobsDescription!,\n shipmentNumber: data.shipmentNumber!,\n jobHasContractorId: data.parentId!,\n sourceContractorId: props.parentContractor?.id,\n targetContractorId: data.contractorId!,\n properties: data.properties,\n };\n const resp = await props.saveSubContractorRequest(props.work.id, inputData);\n\n if (resp.hasValue) {\n props.onSuccess('Contractor requested successfully');\n return { ok: true };\n }\n else {\n return { ok: false, message: t(resp.error) };\n }\n });\n\n const settings = useWorkFormSettings({work: props.work, scope: 'contractor'});\n\n const saveNewContractor = loading.wrap(async (data: Partial) => {\n if (data.startDate == null)\n {\n data.startDate = new Date;\n }\n const resp = await props.saveJobHasContractor(props.work.id, data);\n\n if (resp.hasValue) {\n props.onSuccess('Contractor requested successfully');\n return { ok: true };\n }\n else {\n return { ok: false, message: t(resp.error) };\n }\n });\n\n const form = useForm>({\n initialValues: {\n jobId: props.job.id,\n parentId: props.parentContractor?.id,\n properties: [],\n },\n validateOnMount: true,\n validate: (data: Partial) => {\n return validateContractor(data, props.work);\n },\n onSubmit: (data: Partial) => {\n data.contractorId = selectedContractor?.id;\n\n if (props.security.isContractor()) {\n return saveSubContractorRequest(data);\n }\n else {\n return saveNewContractor(data);\n }\n },\n });\n\n const contractorsTable = useDataTable({\n columns: [\n 'code',\n 'name',\n ...props.modules.injectDataColumns('jobHasContractors.add.list', {workId: props.work.id}),\n ],\n actions: [\n {text: 'Select', headerStyle: {width: '116px'}, className: 'alt slim', onClick: setSelectedContractor},\n ],\n data: contractors,\n className: 'center-column'\n });\n\n const noShipmentNumber = settings.show('shipmentNumber') && props.parentContractor == undefined;\n\n return <>\n {!props.parentContractor &&\n }\n\n {props.parentContractor &&\n \n {t('Add sub contractor')}\n \n }\n\n setActiveIndex(e.index)}>\n \n
\n
\n \n {loading.render()}\n
\n {contractorsTable()}\n
\n
\n \n {selectedContractor &&\n \n
\n
\n \n \n {selectedContractor?.name}\n \n \n \n \n {form.input('startDate', { type: 'date'})}\n \n \n {form.textarea('jobsDescription')}\n \n {/** Solo mostramos el numero de pedido en los contratistas\n * principales\n */}\n {noShipmentNumber &&\n \n {form.textarea('shipmentNumber')}\n }\n
\n\n
\n form.setFieldValue('properties', properties)} />\n
\n
\n
\n\n
\n {form.errorBox()}\n
\n {(props.work.contractorSettings?.jhcStartDateMandatory == true) &&\n
\n {!(dateUtils.compareDates(dateUtils.parseDate(form.values.startDate), dateUtils.parseDate(props.job.startDate as any)) >= 0) &&\n \n {t('La fecha no puede ser anterior a la fecha de inicio de contrato')}\n ||\n !(dateUtils.dateISTodayOrFuture(dateUtils.parseDate(form.values.startDate))) &&\n \n {t('La fecha no puede ser anterior a la del día de hoy')}\n ||\n !(dateUtils.compareDates(dateUtils.parseDate(form.values.startDate), dateUtils.parseDate(props.job.endDate as any)) < 0) &&\n \n {t('La fecha no puede ser mayor a la fecha de fin de contrato')}\n \n }\n
\n }\n
\n \n {loading.render()}\n
\n props.onCancel()}>\n {t('Cancel')}\n \n {props.work.contractorSettings?.jhcStartDateMandatory == true &&\n = 0) ||\n !(dateUtils.compareDates(dateUtils.parseDate(form.values.startDate), dateUtils.parseDate(props.job.endDate as any)) < 0) ||\n !(dateUtils.dateISTodayOrFuture(dateUtils.parseDate(form.values.startDate))))\n }\n type='submit'\n className='primary'>\n {t('Create')}\n \n }\n {props.work.contractorSettings?.jhcStartDateMandatory == false &&\n \n {t('Create')}\n \n }\n
\n
\n }\n
\n \n ;\n}\n","import * as React from 'react';\n\nimport { connect } from 'react-redux';\nimport { ApplicationState } from '../../store';\nimport * as ContractorsStore from '../../store/contractors';\nimport * as JobsStore from '../../store/jobs';\nimport { JobAddContractor } from '../../components/jobs/JobAddContractor';\nimport { isJobHasContractorPropertyGroupType } from '../../models';\n\nexport default connect(\n (state: ApplicationState) => ({\n ...JobsStore.plainActions,\n ...ContractorsStore.plainActions,\n security: state.identity?.security,\n modules: state.modules.moduleManager,\n propertyGroupTypes: state.user.work?.propertyGroupTypes?.filter(isJobHasContractorPropertyGroupType),\n }),\n JobsStore.actionCreators,\n)(JobAddContractor as any) as any; // eslint-disable-line @typescript-eslint/no-explicit-any\n","import * as React from 'react';\n\nimport EditRequirements from '@containers/requirements/EditRequirementsContainer';\nimport { DynamicProperties } from '@components/user/DynamicProperties';\nimport {\n FieldsBox,\n G,\n Panel,\n Portal,\n RequirePermission,\n useDialogs,\n useForm,\n useLoading,\n useRemoteData,\n useResolveCountryAndRegion,\n useResolveName,\n useToast,\n useTranslation,\n} from '@components';\nimport {\n IActivityType,\n IConstants,\n IJob,\n IJobHasContractor,\n ILegalForm,\n IPropertyGroup,\n IPropertyGroupType,\n IWork,\n PropertyGroupObjectType,\n ResourceType\n} from '@models';\nimport { RequirementTargetType } from '@models/requirements';\nimport ForceValidationResourceContainer from '@containers/requirements/ForceValidationResourceContainer';\nimport { ViewResourceHistory } from '@components/requirements/ViewResourceHistory';\nimport { redirectTo } from '@utils';\nimport { ResourceStatus } from '@components/common/ResourceStatus';\n\nexport interface IProps {\n activityTypes: IActivityType[];\n constants: IConstants;\n contractor: IJobHasContractor;\n getJobHasContractor: (workId: number, jobId: number, relationId: number) => Promise,\n job: IJob;\n legalForms: ILegalForm[];\n onCancel: Function;\n saveJobHasContractor: Function;\n propertyGroupTypes: IPropertyGroupType[];\n work: IWork;\n}\n\ntype FormData = Partial;\n\nenum FormType {\n Data = 0,\n AccessData = 1,\n Requirements = 2,\n}\n\nexport function EditJobHasContractor(props: IProps) {\n const loading = useLoading();\n const { t } = useTranslation();\n const toast = useToast();\n\n const jobHasContractor = useRemoteData(\n props.getJobHasContractor, {\n parameters: [props.work.id, props.job.id, props.contractor.id]\n });\n\n const [formType, setFormType] = React.useState(FormType.Data);\n\n const dialogs = useDialogs();\n const activityType = useResolveName(props.activityTypes);\n const legalForm = useResolveName(props.legalForms);\n const countryRegion = useResolveCountryAndRegion(props.constants.countries);\n\n const save = loading.wrap(async (req: FormData) => {\n const resp = await props.saveJobHasContractor(props.work.id, req);\n if (resp.hasValue) {\n toast.show(t('Contractor saved successfully'));\n return { ok: true };\n }\n else {\n return { ok: false, message: resp.error };\n }\n });\n\n const doSave = (..._: any) => {\n save(form.values);\n }\n\n const form = useForm({\n initialValues: {\n id: props.contractor.id,\n jobId: props.job.id,\n startDate: props.contractor.startDate,\n jobsDescription: props.contractor.jobsDescription,\n contractorId: props.contractor.contractorId,\n contactName: props.contractor.contactName,\n contactSurname: props.contractor.contactSurname,\n contactEmail: props.contractor.contactEmail,\n contactPhone: props.contractor.contactPhone,\n shipmentNumber: props.contractor.shipmentNumber,\n properties: props.contractor.properties ?? [],\n },\n onSubmit: function(data: FormData) {\n return save(data);\n }\n });\n\n const showRequirements = () => {\n redirectTo(`/work/${props.work.id}/jobs/${props.job.id}/contractor/${props.contractor.id}/requirements`);\n }\n\n return
\n \n \n
\n \n \n \n
\n {props.contractor.contractor.name}\n
}>\n
\n \n \n \n \n \n
\n \n \n\n \n
    \n
  • {props.contractor.contractor.name}
  • \n
\n
\n {dialogs.render('force-validation', { title: t('Force resource validation'), className: 'g pd' }, () =>\n \n )}\n {dialogs.render('view-history', { title: t('View history'), className: 'g pd' }, () =>\n \n )}\n\n {jobHasContractor.renderLoading()}\n\n {toast.render()}\n\n {formType == FormType.Data && <>\n
\n {t('Edit contractor')}\n
\n
\n
\n \n {props.contractor.contractor.name}\n \n \n {props.contractor.contractor.code}\n \n \n {legalForm(props.contractor.contractor.legalFormId)}\n \n \n {activityType(props.contractor.contractor.activityTypeId)}\n \n \n {form.input('jobsDescription')}\n \n \n {form.input('startDate', { type: 'date' })}\n \n \n {form.input('shipmentNumber')}\n \n \n
\n
\n \n \n {props.contractor.contractor.address}\n \n \n {countryRegion(props.contractor.contractor)}\n \n \n {props.contractor.contractor.postalCode}\n \n \n\n \n \n {form.input('contactName')}\n \n \n {form.input('contactSurname')}\n \n \n {form.input('contactEmail')}\n \n \n {form.input('contactPhone')}\n \n \n
\n
\n\n
\n form.setFieldValue('properties', v)} />\n
\n
\n
\n
\n \n
\n props.onCancel()}>\n {t('Cancel')}\n \n \n {t('Save')}\n \n
\n
\n }\n\n {formType == FormType.Requirements &&
\n {jobHasContractor.value &&\n }\n
}\n
\n}\n","import * as React from 'react';\n\nimport { Tag, useOverlay, useResolveName, useTranslation } from '@components';\nimport { ResourceType } from '@models';\nimport { resourceStatusTypes } from '@models/resources';\nimport { ViewResourceHistory } from \"@components/requirements/ViewResourceHistory\";\n\nexport interface IProps {\n currentStatusType: number;\n resourceId: number;\n resourceType: ResourceType;\n workId: number;\n showResourceType?: boolean;\n}\n\nexport function ResourceStatus(props: IProps) {\n\n const { t } = useTranslation();\n\n const history = useOverlay({\n className: 'sm pd',\n style: { minWidth: '300px' },\n render: () =>\n ,\n });\n\n const resolveStatusType = useResolveName(resourceStatusTypes, { translate: true });\n\n return
\n
\n \n
\n {history.render()}\n
;\n}\n","import * as React from 'react';\nimport { connect } from 'react-redux';\nimport { ApplicationState } from '../../store';\nimport * as JobsStore from '../../store/jobs';\nimport { EditJobHasContractor } from '../../components/jobs/EditJobHasContractor';\nimport { hasPermission } from '../../utils/security';\nimport { isJobHasContractorPropertyGroupType } from '../../models';\n\nexport default connect(\n (state: ApplicationState) => ({\n ...JobsStore.plainActions,\n activityTypes: state.user.activityTypes,\n constants: state.constants,\n propertyGroupTypes: state.user.propertyGroupTypes\n .filter(isJobHasContractorPropertyGroupType),\n hasPermission: (p: string) => hasPermission(p, {\n user: state.identity?.user,\n work: state.user.work,\n explicit: true,\n }),\n legalForms: state.user.legalForms,\n resourceStatusTypes: state.user.resourceStatusTypes,\n }),\n JobsStore.actionCreators,\n)(EditJobHasContractor as any) as any; // eslint-disable-line @typescript-eslint/no-explicit-any\n","import * as React from 'react';\nimport { connect } from 'react-redux';\nimport { ApplicationState } from '../../store';\nimport * as JobsStore from '../../store/jobs';\nimport { EditJobHasContractorFields } from '../../components/jobs/EditJobHasContractorFields';\nimport { hasPermission } from '../../utils/security';\nimport { isJobHasContractorPropertyGroupType } from '../../models';\n\nexport default connect(\n (state: ApplicationState) => ({\n ...JobsStore.plainActions,\n activityTypes: state.user.activityTypes,\n constants: state.constants,\n propertyGroupTypes: state.user.propertyGroupTypes\n .filter(isJobHasContractorPropertyGroupType),\n hasPermission: (p: string) => hasPermission(p, {\n user: state.identity?.user,\n work: state.user.work,\n explicit: true,\n }),\n legalForms: state.user.legalForms,\n resourceStatusTypes: state.user.resourceStatusTypes,\n }),\n JobsStore.actionCreators,\n)(EditJobHasContractorFields as any) as any; // eslint-disable-line @typescript-eslint/no-explicit-any\n","import * as React from 'react';\n\nimport {\n BreadcrumbItem, useConfirm, Portal, useLoading, useTreeTable, useTranslation,\n useRemoteData, useSearch, Tag, useSignalR, useScheduler, useDialogs, useOverlay,\n useSearchFilters,\n usePermissions,\n} from '@components';\nimport EditJobHasContractorContainer from '@containers/jobs/EditJobHasContractorContainer';\nimport EditJobHasContractorFields from '@containers/jobs/EditJobHasContractorFieldsContainer';\nimport {\n IContractor, IJob, IJobHasContractor, IResourceStatusType, ISecurity, IUserIdentity,\n IWork, ResourceType, ModuleManager, IWorkSettings,\n} from '@models';\nimport { redirectTo } from '@utils';\nimport { ResourceStatus } from '@components/common/ResourceStatus';\nimport { ResourceStatusType, resourceStatusTypes } from '@models/resources';\nimport { goToJobMachineries, goToJobSubContractors, goToJobWorkers } from '@components/routes';\nimport { IRequirementNotification } from '@models/requirements';\nimport ForceValidationResourceContainer from '@containers/requirements/ForceValidationResourceContainer';\nimport DateUtils from '@utils/date-utils';\nimport './JobContractors.scss';\nimport { useWorkFormSettings } from '@components/custom/useWorkFormSettings';\n\nexport interface IProps {\n activateJobHasContractor: Function;\n appUsers: IUserIdentity[];\n deleteJobHasContractor: Function;\n getContractorFromAppUser: Function;\n getJobContractors: Function;\n getJobHasContractor: Function;\n getJobContractorsViewModel: Function;\n hasPermission: Function;\n job: IJob;\n jobHasContractor?: IJobHasContractor;\n loadInvitations?: boolean;\n onRequestAddContractor: Function;\n parentId?: number;\n refreshContractors: Function;\n removeJobHasContractor: Function;\n resourceStatusTypes: IResourceStatusType[];\n security: ISecurity;\n selectJobHasContractor: Function;\n selectedJobHasContractor?: IJobHasContractor;\n getJobHasContractorFromId: Function;\n sourceId?: number;\n work: IWork;\n getContractor: Function;\n getJob: Function;\n selectedContractor?: IContractor;\n moduleManager: ModuleManager;\n clearSelectedContractor: Function;\n removeJobHasContractorRequest: Function;\n removeJobHasContractorInvitation: Function;\n}\n\nenum ContractorType {\n CONTRACTOR = 1,\n INVITATION = 2,\n CONTRACTOR_REQUEST = 3,\n}\n\ntype RowType = {\n id: number;\n jobId: number;\n contractorId: number;\n countContractorMachineries: number;\n countContractorWorkers: number;\n countContractorSubcontractors: number;\n countWorkersAuthorized: number;\n contractorName: string;\n contractorStartDate: string;\n contractorStatusType: number;\n jobHasContractorId: number;\n totalCount: number;\n validatedCount: number;\n workId: number;\n name: string;\n dateTime: string;\n currentStatusType: number;\n shipmentNumber?: string;\n parentId?: number;\n jobsDescription?: string;\n type: ContractorType;\n key?: string;\n hierarchyLevel: number;\n parentContractorId?: number;\n startDate?: string;\n};\n\nfunction isJobContractor(r: RowType) {\n return r.type == ContractorType.CONTRACTOR;\n}\n\nfunction isInvitation(r: RowType) {\n return r.type == ContractorType.INVITATION;\n}\n\nfunction isContractorRequest(r: RowType) {\n return r.type == ContractorType.CONTRACTOR_REQUEST;\n}\n\nexport function JobContractorsImpl(props: IProps) {\n const { t } = useTranslation();\n const loading = useLoading();\n const dialogs = useDialogs();\n\n const [canRemoveState, setCanRemoveState] = React.useState(false);\n\n const editOverlay = useOverlay({\n className: 'overlay-min',\n requireData: true,\n render: (d: any) =>\n editOverlay.clear()}\n isDate={d.type === 'date'}\n onSuccess={initialize}>\n {(form: any) =>
\n {d.type === 'date' && form.input('startDate', { autoFocus: true, type: 'date' })}\n {d.type === 'shipment-number' && form.input('shipmentNumber', { autoFocus: true })}\n {d.type === 'description' && form.textarea('jobsDescription')}\n
}\n \n });\n const initialize = () => {\n reload();\n editOverlay.clear();\n }\n const completeStatusList = [...resourceStatusTypes, { id: 6, name: t('job.status.pending') }]\n\n const filters = useSearchFilters({\n security: props.security,\n workId: props.work.id,\n name: 'jobs/contractors',\n references: {\n resourceStatusTypes: completeStatusList,\n },\n persist: true,\n });\n\n const currentJhc = props.security.isContractor()\n ? props.job.contractors.find(c => props.security.hasContractor(c.contractorId))\n : null;\n\n const parentId = props.parentId\n ?? props.selectedJobHasContractor?.id\n ?? currentJhc?.id;\n\n const query = useSearch({\n workId: props.work.id,\n search: 'jobs/contractors',\n normalizeKeys: true,\n map: (r: RowType, i: number) => ({ ...r, key: i + '_' + r.id + '_' + r.parentId }),\n filters: filters.merge({\n jobId: props.job.id,\n workId: props.work.id,\n parentId: props.parentId,\n jobHasContractorId: parentId,\n }),\n });\n const selfJobHasContractorsIds = React.useRef([]);\n const selfContractorId = React.useRef(0);\n\n const [selectedContractor, setSelectedContractor] = React.useState(\n props.jobHasContractor);\n\n const scheduler = useScheduler();\n\n const _ = useSignalR({\n method: 'RequirementNotification',\n onMessage: r => {\n if (r.workId == props.work.id) {\n scheduler.schedule(reload, 2500);\n }\n }\n });\n\n const reload = () => {\n query.doSearch(\n filters.merge({\n jobId: props.job.id,\n workId: props.work.id\n })\n );\n }\n\n const doRemoveContractor = loading.wrap(async (i: IJobHasContractor) => {\n await props.removeJobHasContractor(props.work.id, props.job.id, i.id);\n props.refreshContractors();\n\n reload();\n });\n\n const doDeleteContractor = loading.wrap(async (i: IJobHasContractor) => {\n await props.deleteJobHasContractor(props.work.id, props.job.id, i.id);\n props.refreshContractors();\n\n reload();\n });\n\n const doDeleteInvitation = loading.wrap(async (i: RowType) => {\n if(i.type == ContractorType.INVITATION){\n await props.removeJobHasContractorInvitation(i.workId, i.jobId, i.contractorName, i.startDate)\n }else if(i.type == ContractorType.CONTRACTOR_REQUEST){\n await props.removeJobHasContractorRequest(i.workId, i.jobId, i.parentContractorId, i.contractorId)\n }\n\n props.refreshContractors();\n\n reload();\n });\n\n const reactivateContractor = loading.wrap(async (i: IJobHasContractor) => {\n await props.activateJobHasContractor(props.work.id, props.job.id, i.contractorId, i.id);\n props.refreshContractors();\n\n reload();\n });\n\n const confirmRemove = useConfirm({\n message: t('Are you sure to finalize contractor from this job?'),\n accept: doRemoveContractor\n });\n\n const confirmDelete = useConfirm({\n message: t('Are you sure to remove contractor from this job?'),\n accept: doDeleteContractor\n });\n\n const confirmDeleteInvitation = useConfirm({\n message: t('Are you sure to remove invitation from this job?'),\n accept: doDeleteInvitation\n });\n\n const [canAddSubContractorState, setCanAddSubContractorState] = React.useState(true);\n\n const mainDepartment = props.job.departments.find(r => r.isMain == true);\n\n const jobContractorProps = {\n security: props.security,\n moduleManager: props.moduleManager,\n work: props.work,\n };\n\n const canSave = props.security.hasPermission('jobs.edit')\n || props.security.hasWorker(mainDepartment?.responsibleId);\n\n const perms = usePermissions(jobContractorProps, { ctx: { job: props.job } }, {\n EditContractorValues: { name: 'jobHasContractor.edit', default: canSave },\n canRemove: 'job.contractors.remove',\n authorize: {\n name: 'canForceJobHasContractorStatus',\n default: props.security.hasPermission('jobs.resources.validate') &&\n props.security.isGestorOrWorker()\n },\n });\n\n const canEdit = perms.get('EditContractorValues');\n\n const canRemove = props.security.hasPermission('jobHasContractor.remove')\n || props.security.hasWorker(mainDepartment?.responsibleId)\n || props.security.hasPolicy('consejero');\n\n const calculateCanRemove = async () => {\n const res = await props.moduleManager.requirePermission('jobHasContractor.remove', {\n security: props.security,\n job: props.job,\n work: props.work,\n }, canRemove);\n\n setCanRemoveState(res ?? false);\n };\n\n React.useEffect(() => {\n calculateCanRemove();\n }, []);\n\n const canForceJobHasContractorStatusContext = {\n props: props,\n };\n\n const workSettings: IWorkSettings | undefined = props.work.settingsObj;\n const HideByDefaultEndedContractors = workSettings?.hideByDefaultEndedContractors ?? false;\n\n React.useEffect(() => {\n if (props.selectedJobHasContractor) {\n const ctx = {\n job: props.job,\n security: props.security,\n workId: props.work.id,\n jobHasContractor: props.selectedJobHasContractor,\n contractor: props.selectedContractor,\n selfContractorId: props.selectedJobHasContractor?.id,\n selfJobHasContractorId: props.selectedJobHasContractor?.id,\n };\n props.moduleManager\n .requirePermission('job.subcontractors.add', ctx, true)\n .then((canAddSubContractor: boolean | undefined) => {\n setCanAddSubContractorState(canAddSubContractor ?? false);\n });\n }\n }, [props.selectJobHasContractor]);\n\n const canAddContractor = (contractorId: number) => {\n //TODO: Remove key\n if (props.work.id !== 23) {\n return props.security.hasPermission('job.addSubc') || canSave || selfContractorId.current === contractorId;\n } else {\n return canAddSubContractorState && props.security.hasPermission('job.addSubc');\n }\n }\n\n const cannotRemoveItself = (contractorId: number) => selfJobHasContractorsIds.current.includes(contractorId);\n\n const renderStatus = (r: RowType) => {\n return ;\n };\n\n const selectJobHasContractor = (rel: IJobHasContractor | undefined) => {\n if (!props.security.isContractor() && rel) {\n props.selectJobHasContractor(rel);\n }\n }\n\n const loadRequirements = (jobHasContractor: RowType) => {\n selectJobHasContractor(props.job.contractors.find(c => c.id == jobHasContractor.id));\n redirectTo(`/work/${props.work.id}/jobs/${props.job.id}/jobContractor/${jobHasContractor.id}/requirements`);\n };\n\n const applyFilters = (r: any) => {\n const fltrs = filters.filters;\n const fs = [\n [fltrs.resourceStatusTypes != undefined, r.currentStatusType == filters.filters.resourceStatusTypes],\n [fltrs.name?.length > 2, r.name?.toLowerCase().includes(filters.filters.name?.toLowerCase())],\n ];\n\n return fs.every(f => f[0] ? f[1] : true);\n }\n\n const settings = useWorkFormSettings({ work: props.work, scope: 'contractor' });\n\n const calculateRemoveIcon = (r: RowType) : string => {\n if(isJobContractor(r) && r.currentStatusType === ResourceStatusType.FINALIZED){\n return 'fas fa-redo';\n }else{\n return 'pi pi-minus-circle';\n }\n };\n\n const calculateRemoveOnClick = (r: RowType, event: React.MouseEvent) => {\n if(isJobContractor(r) && r.currentStatusType === ResourceStatusType.FINALIZED){\n reactivateContractor(r);\n }else if(isContractorRequest(r)){\n confirmDeleteInvitation(r, event)\n }else if(isInvitation(r)){\n confirmDeleteInvitation(r, event);\n }\n else{\n confirmRemove(r, event);\n }\n }\n\n const calculateRemoveTooltip = (r: RowType) : string => {\n if(isJobContractor(r) && r.currentStatusType === ResourceStatusType.FINALIZED){\n return t('Reactivate');\n }else if(isContractorRequest(r) || isInvitation(r)){\n return t('Remove job contractor invitation');\n }else{\n return t('Finalize contractor from job');\n }\n };\n\n const calculateRemoveDisabled = (r: RowType) : boolean => {\n if(!applyFilters(r) || cannotRemoveItself(r.id)){\n return true;\n }else{\n return false;\n }\n }\n\n const [ contractors, setContractors ] = React.useState([]);\n\n React.useEffect(() => {\n if (HideByDefaultEndedContractors && filters.filters.resourceStatusTypes != 3) {\n const filteredContractors = query.value.filter((c: RowType) => c.currentStatusType !== 3);\n setContractors(filteredContractors);\n } else {\n setContractors(query.value ?? []);\n }\n }, [query.value]);\n\n React.useEffect(() => {\n reload();\n }, [filters.filters]);\n\n const dataTable = useTreeTable({\n expand: true,\n columns: [\n {\n title: 'Contractor', render: (c: any) =>\n isJobContractor(c)\n ? \n {c.name}\n \n : (c.targetName != undefined)\n ? \n \n {' ' + c.targetName}\n \n : isContractorRequest(c)\n ? \n {' ' + c.contractorName}\n \n : isInvitation(c)\n ? {c.name}\n : '',\n className: 'jhc',\n //TODO: remove Key\n sortKey: props.work.id != 21 ? 'contractor.name' : undefined\n },\n {\n title: 'job.relation.start-date',\n render: (d: any) =>\n isJobContractor(d)\n ? \n {canEdit && !props.security.isContractor() && editOverlay.show(e, { type: 'date', data: d })}\n className='pointer fas fa-edit' />}\n {DateUtils.format(d.startDate)}\n \n : isContractorRequest(d)\n ? {DateUtils.format(d.contractorStartDate)}\n : undefined,\n className: 'td-md job-start-date',\n sortKey: props.work.id != 21 ? 'startDate' : undefined\n },\n settings.show('shipmentNumber')\n ? {\n title: 'job.contractor.shipment-number',\n render: (d: any) =>\n isJobContractor(d) && d.parentId == null\n || d.shipmentNumber ? \n {(canEdit && !props.security.isContractor() || props.security.hasPolicy('compras')) &&\n applyFilters(d) && editOverlay.show(e, { type: 'shipment-number', data: d })}\n className={!applyFilters(d) ? 'disabled-tag' : 'pointer fas fa-edit'} />}\n {d.shipmentNumber}\n : null,\n className: 'td-md job-shipment-number'\n }\n : undefined,\n {\n title: 'Jobs description',\n render: (d: any) =>\n \n {isJobContractor(d) && canEdit && !props.security.isContractor() && editOverlay.show(e, { type: 'description', data: d })}\n className={!applyFilters(d) ? 'disabled-tag' : 'pointer fas fa-edit'} />}\n {isJobContractor(d) &&\n {d.jobsDescription}}\n {isContractorRequest(d) &&\n {d.jobsDescription}}\n ,\n className: 'td-md job-description'\n },\n {\n title: 'currentStatusType',\n render: (d: any) =>\n (isJobContractor(d) && applyFilters(d))\n ? renderStatus(d)\n :
\n \n
,\n className: 'td-md current_status_type',\n sortKey: props.work.id != 21 ? 'currentStatusType' : undefined\n },\n {\n title: 'Documentation', className: 'td-indicator center',\n render: (d: any) => {\n if (isJobContractor(d)) {\n return {\n if (applyFilters(d)) { loadRequirements(d) }\n }} className={applyFilters(d) ? 'pointer' : ''}>\n \n
\n }\n else {\n return null;\n }\n }\n },\n {\n title: 'Workers',\n className: 'td-indicator center',\n render: (d: any) => {\n const authorized = d.countWorkersAuthorized ?? 0;\n const total = d.countContractorWorkers ?? 0;\n if (isJobContractor(d)) {\n return {\n if (applyFilters(d)) {\n selectJobHasContractor(d);\n goToJobWorkers(props.work.id, d.jobId, { relationId: d.id });\n }\n }}>\n \n \n }\n else {\n return null;\n }\n }\n },\n {\n title: 'Machineries',\n className: 'td-indicator center',\n render: (d: any) => {\n const authorized = d.countMachineriesAuthorized ?? 0;\n const total = d.countContractorMachineries ?? 0;\n\n if (isJobContractor(d)) {\n const tag = ;\n return {\n if (applyFilters(d)) {\n selectJobHasContractor(d);\n goToJobMachineries(props.work.id, d.jobId, { relationId: d.id });\n }\n }}>\n {tag}\n \n }\n else {\n return null;\n }\n }\n },\n {\n title: 'Subcontractors',\n className: 'td-indicator center',\n render: (d: any) => {\n const authorized = d.countSubContractorsAuthorized ?? 0;\n const total = d.countContractorSubContractors ?? 0;\n if (isJobContractor(d)) {\n const tag = ;\n return {\n if (applyFilters(d)) {\n selectJobHasContractor(d);\n goToJobSubContractors(props.work.id, d.jobId, d.id)\n };\n }}>\n {tag}\n \n }\n else {\n return null;\n }\n // if (isJobContractor(d)) {\n // const data = contractorsViewModel.value?.find((m: any) => m.id == d.id);\n // return {\n // if (applyFilters(d)) {\n // selectJobHasContractor(d);\n // goToJobSubContractors(props.work.id, d.jobId, d.id)\n // };\n // }}>\n // \n // \n // }\n // else {\n // return null;\n // }\n }\n }\n ],\n actions: [\n canAddContractor\n ? {\n icon: 'plus',\n onClick: d => props.onRequestAddContractor(d),\n tooltip: t('Add sub contractor'),\n //TODO: remove Key\n disabled: r => r.hierarchyLevel >= 4 || (!applyFilters(r) || !isJobContractor(r) || !canAddContractor(r.contractorId) || props.work.id == 23 && r.contractorId != selfContractorId.current) && !props.security.isGestor()\n } : undefined,\n (canRemoveState)\n ? {\n icon: (r) => calculateRemoveIcon(r),\n // r => isJobContractor(r) && r.currentStatusType === ResourceStatusType.FINALIZED\n // ? 'fas fa-redo'\n // : 'pi pi-minus-circle',\n onClick: (r, event) => calculateRemoveOnClick(r, event),\n // isJobContractor(r) && r.currentStatusType === ResourceStatusType.FINALIZED\n // ? reactivateContractor(r)\n // : confirmRemove(r, event),\n tooltip: r => calculateRemoveTooltip(r),\n // isJobContractor(r) && r.currentStatusType === ResourceStatusType.FINALIZED\n // ? t('Reactivate')\n // : t('Finalize job contractor'),\n disabled: r => calculateRemoveDisabled(r),\n // !applyFilters(r) || !isJobContractor(r) || cannotRemoveItself(r.id),\n }\n : undefined,\n (perms.get('canRemove'))\n ? {\n icon: 'trash',\n onClick: confirmDelete,\n tooltip: t('Remove job contractor'),\n disabled: r => !applyFilters(r) || !isJobContractor(r) || cannotRemoveItself(r.id),\n }\n : undefined,\n perms.get('authorize')\n ? {\n icon: `pi pi-check${props.work.id == 23 ? '-square' : ''}`,\n tooltip: t('Force resource validation'),\n onClick: r => dialogs.showFromEvent('force-validation', r)(),\n disabled: r => !applyFilters(r)\n }\n : undefined\n\n ], //pi-check-square\n data: contractors,\n toggleApplications: true,\n });\n\n return
\n \n
\n {filters.renderAsButton({ className: 'fas fa-filter pointer' })}\n
\n
\n setSelectedContractor(undefined)} />\n\n {dialogs.render('force-validation', { title: t('Force resource validation') }, (d: IJobHasContractor) =>\n {\n dialogs.clear();\n reload();\n }}\n resourceType={ResourceType.JobHasContractor}\n resourceId={d.id} />\n )}\n\n {editOverlay.render()}\n\n {selectedContractor &&\n setSelectedContractor(undefined)}\n work={props.work} />}\n {!selectedContractor && <>\n {dataTable()}\n }\n
\n}\n\nexport const JobContractors = React.memo(JobContractorsImpl, (prev, next) => {\n return prev.work.id === next.work.id;\n});\n","import * as React from 'react';\n\nimport { useForm, useLoading, useMessage, useTranslation } from '@components';\nimport { IJob, IJobHasContractor } from '@models';\nimport dateUtils from '@utils/date-utils';\n\nexport interface IProps {\n children: Function;\n job: IJob;\n jobHasContractor: IJobHasContractor;\n saveJobHasContractor: Function;\n onClose: Function;\n onSuccess: Function;\n workId: number;\n isDate: boolean;\n}\n\nexport function EditJobHasContractorFields(props: IProps) {\n const loading = useLoading();\n const messages = useMessage();\n const { t } = useTranslation();\n\n const form = useForm>({\n initialValues: {\n id: props.jobHasContractor.id,\n jobId: props.job.id,\n startDate: props.jobHasContractor.startDate,\n jobsDescription: props.jobHasContractor.jobsDescription,\n contractorId: props.jobHasContractor.contractorId,\n contactName: props.jobHasContractor.contactName,\n contactSurname: props.jobHasContractor.contactSurname,\n contactEmail: props.jobHasContractor.contactEmail,\n contactPhone: props.jobHasContractor.contactPhone,\n shipmentNumber: props.jobHasContractor.shipmentNumber,\n properties: props.jobHasContractor.properties ?? [],\n },\n });\n\n const doSave = loading.wrap(async () => {\n const res = await props.saveJobHasContractor(props.workId, form.values);\n messages.set(res);\n\n if (res.hasValue) {\n props.onSuccess();\n }\n });\n\n var today = new Date();\n\n const formIsValid = () => {\n if (((dateUtils.compareDates(dateUtils.parseDate(form.values.startDate), dateUtils.parseDate(props.job.startDate as any)) >= 0) &&\n (dateUtils.compareDates(dateUtils.parseDate(form.values.startDate), dateUtils.parseDate(props.job.endDate as any)) <= 0 )) && props.isDate){\n return true;\n }\n else if (!props.isDate) {\n return true;\n }\n else {\n return false;\n }\n }\n\n return
\n
\n {props.children(form)}\n
\n {!((dateUtils.compareDates(dateUtils.parseDate(form.values.startDate), dateUtils.parseDate(props.job.startDate as any)) >= 0) &&\n (dateUtils.compareDates(dateUtils.parseDate(form.values.startDate), dateUtils.parseDate(props.job.endDate as any)) <= 0)) && props.isDate &&\n {t('La fecha no puede ser anterior a la del día de hoy o a las fecha de inicio y fin del contrato')}\n }\n {messages.renderIfError()}\n
\n {loading.render()}\n \n \n
\n
\n}","import * as React from 'react';\nimport { connect } from 'react-redux';\nimport { ApplicationState } from '../../store';\nimport * as JobsStore from '@store/jobs';\nimport * as ContractorsStore from '@store/contractors';\nimport { JobContractors } from '@components/jobs/JobContractors';\nimport { hasPermission } from '../../utils/security';\n\nexport default connect(\n (state: ApplicationState) => ({\n ...JobsStore.plainActions,\n ...ContractorsStore.plainActions,\n ...state.identity,\n ...state.user,\n moduleManager: state.modules.moduleManager,\n hasPermission: (p: string) => hasPermission(p, {\n user: state.identity?.user,\n work: state.user.work,\n explicit: true,\n }),\n ...state.jobs,\n }),\n JobsStore.actionCreators,\n)(JobContractors as any) as any; // eslint-disable-line @typescript-eslint/no-explicit-any\n","import * as React from 'react';\n\nimport { TreeSelect } from '@components';\nimport { ICountry, countriesToNode } from '@models';\n\nexport interface IProps {\n className?: string;\n countries: ICountry[];\n data: IHasCountryAndRegion;\n onChange?: Function;\n readonly?: boolean;\n}\n\ninterface IHasCountryAndRegion {\n countryId?: number;\n regionId?: number;\n countyId?: number;\n}\n\nconst getSelectedNodes = (w: IHasCountryAndRegion | undefined) =>\n w ? [w.countryId, w.regionId, w.countyId].filter(d => d != undefined)\n : undefined;\n\nexport function CountryRegionSelect(props: IProps) {\n const countryNodes = countriesToNode(props.countries);\n\n const [data, setData] = React.useState(props.data);\n\n const [selectedRegionNode, setSelectedRegionNode] =\n React.useState(getSelectedNodes(props.data));\n\n const onSelectedRegionNodeChanged = (ev: any) => {\n setSelectedRegionNode(ev.value);\n const [countryId, regionId, countyId] =\n ev.value\n .concat([undefined, undefined, undefined])\n .slice(0, 3);\n\n setData(d => {\n const newData = { countryId, regionId, countyId };\n props.onChange && props.onChange(newData);\n setData({ ...d, ...newData });\n return newData;\n });\n }\n\n return ;\n}","import * as React from 'react';\n\nimport {\n FieldsBox, G, useForm, useLoading, useTranslation,\n ValidationBuilder,\n} from '@components';\nimport { CountryRegionSelect } from '@components/common/CountryRegionSelect';\nimport { IActivityType, IConstants, IContractorRequest, IJob, ILegalForm, IPropertyGroup, IPropertyGroupType, IWork, PropertyGroupObjectType } from '@models';\nimport { BreadcrumbItem } from '../custom/BreadcrumbItem';\nimport { DynamicProperties } from '../user/DynamicProperties';\n\nexport interface IProps {\n activityTypes: IActivityType[];\n constants: IConstants;\n createContractorRequest: Function;\n job: IJob;\n legalForms: ILegalForm[];\n propertyGroupTypes: IPropertyGroupType[];\n onCancel: Function;\n onSuccess: Function;\n work: IWork;\n}\n\nexport const validateContractorRequest = (data: IContractorRequest) => {\n return ValidationBuilder.create(data)\n .notEmpty('contractorName')\n .notEmpty('contractorCode')\n .notEmpty('startDate')\n .notEmpty('legalFormId')\n .build();\n}\n\nexport function JobRequestContractor(props: IProps) {\n const { t } = useTranslation();\n const loading = useLoading(false);\n\n const saveContractor = loading.wrap(async (req: IContractorRequest) => {\n const resp = await props.createContractorRequest(props.work.id, req);\n\n if (resp.hasValue) {\n props.onSuccess('Contractor requested successfully');\n return { ok: true };\n }\n else {\n return { ok: false, message: resp.error };\n }\n });\n\n const form = useForm({\n initialValues: {\n contractorName: '',\n contractorCode: '',\n jobId: props.job.id,\n legalFormId: 0,\n properties: [],\n },\n validate: validateContractorRequest,\n onSubmit: (data: IContractorRequest) => {\n return saveContractor(data);\n },\n });\n\n const updateRegion = ({countryId, regionId, countyId}: any) => {\n form.setFieldValue('countryId', countryId);\n form.setFieldValue('regionId', regionId);\n form.setFieldValue('countyId', countyId);\n }\n\n return \n \n\n
\n
\n
\n
\n \n {form.input('contractorName', {autoFocus: true})}\n \n \n {form.input('contractorCode')}\n \n
\n
\n \n {form.select('legalFormId', {\n options: props.legalForms,\n })}\n \n \n {form.select('activityTypeId', {\n options: props.activityTypes,\n })}\n \n
\n
\n \n \n {form.input('address', { containerStyle: {gridColumn: '2/5'}})}\n \n \n \n \n \n {form.input('postalCode')}\n \n \n \n \n {form.input('startDate', { type: 'date', style: {width: '150px'}})}\n \n \n {form.textarea('jobsDescription')}\n \n \n \n \n {form.input('contactName')}\n \n \n {form.input('contactSurname')}\n \n \n {form.input('contactPhone')}\n \n \n {form.input('contactEmail')}\n \n \n
\n {form.errorBox()}\n
\n
\n\n form.setFieldValue('properties', v)} />\n
\n
\n \n
\n props.onCancel()}>\n {t('Cancel')}\n \n \n {t('Create')}\n \n
\n
\n ;\n}","import * as React from 'react';\nimport { connect } from 'react-redux';\nimport { ApplicationState } from '../../store';\nimport * as JobsStore from '../../store/jobs';\nimport { JobRequestContractor } from '../../components/jobs/JobRequestContractor';\nimport { isJobHasContractorPropertyGroupType } from '../../models';\n\nexport default connect(\n (state: ApplicationState) => ({\n activityTypes: state.user.activityTypes,\n constants: state.constants,\n propertyGroupTypes: state.user.propertyGroupTypes.filter(isJobHasContractorPropertyGroupType),\n legalForms: state.user.legalForms,\n ...JobsStore.plainActions,\n }),\n JobsStore.actionCreators,\n)(JobRequestContractor as any) as any; // eslint-disable-line @typescript-eslint/no-explicit-any\n","import * as React from 'react';\n\nimport {\n G, Select, useForm, useLoading, useTranslation,\n ValidationBuilder,\n} from '@components';\nimport {\n IActivityType, IConstants, IContractorRequest, IJob, ILegalForm, IPropertyGroup, IPropertyGroupType, IWork, PropertyGroupObjectType\n} from '@models';\nimport { DynamicProperties } from '../user/DynamicProperties';\nimport { CountryRegionSelect } from '../common/CountryRegionSelect';\n\nexport interface IProps {\n activityTypes: IActivityType[];\n constants: IConstants;\n createContractorRequest: Function;\n data: IContractorRequest;\n job: IJob;\n legalForms: ILegalForm[];\n onCancel: Function;\n onSuccess: Function;\n propertyGroupTypes: IPropertyGroupType[];\n work: IWork;\n}\n\nexport const validateContractorRequest =\n ValidationBuilder.new()\n .notEmpty('contractorName')\n .notEmpty('contractorCode')\n .notEmpty('startDate')\n .notEmpty('legalFormId')\n .lift();\n\nenum Result {\n ACCEPT = 1,\n REJECT = 2,\n}\n\nconst exclude = (obj: any, props: string[]) => {\n const res: any = {};\n for (const k of Object.keys(obj)) {\n if (!props.includes(k) && !k.startsWith('__')) {\n res[k] = obj[k];\n }\n }\n\n return res;\n}\n\nexport function ProcessContractorRequest(props: IProps) {\n const { t } = useTranslation();\n const loading = useLoading(false);\n\n const saveContractor = loading.wrap(async (req: IContractorRequest) => {\n const resp = await props.createContractorRequest(props.work.id, req);\n\n if (resp.hasValue) {\n props.onSuccess('Contractor processed successfully');\n return { ok: true };\n }\n else {\n return { ok: false, message: resp.error };\n }\n });\n\n const form = useForm({\n initialValues: props.data,\n validate: validateContractorRequest,\n onSubmit: (data: IContractorRequest) => {\n if (result == Result.ACCEPT) {\n data.accepted = true;\n data.acceptedDate = new Date();\n }\n else {\n data.accepted = false;\n data.discarded = true;\n data.discardedDate = new Date();\n }\n return saveContractor(exclude(data, ['appUserId']));\n },\n });\n\n const [result, setResult] = React.useState();\n const resultOptions = [\n {value: Result.ACCEPT, label: t('Create contractor')},\n {value: Result.REJECT, label: t('Reject')}\n ];\n\n const hasError = form.hasError() || result == undefined;\n\n const updateRegion = ({countryId, regionId, countyId}: any) => {\n form.setFieldValues({countryId, regionId, countyId});\n }\n\n return \n
\n
\n \n setResult(e.target.value)}\n options={resultOptions}\n optionLabel='label'\n optionValue='value'\n placeholder={t('Request result')}\n value={result} />\n \n {result == Result.REJECT && \n {form.textarea('resultMessage')}\n }\n \n {form.input('contractorName', {autoFocus: true})}\n \n \n {form.input('contractorCode')}\n \n \n {form.select('legalFormId', {\n options: props.legalForms,\n })}\n \n \n {form.select('activityTypeId', {\n options: props.activityTypes,\n })}\n \n
\n
\n
{t('Address')}
\n
\n \n {form.input('address')}\n \n \n {form.input('postalCode')}\n \n \n \n \n
\n
\n
\n
{t('Contact data')}
\n
\n \n {form.input('contactName')}\n \n \n {form.input('contactSurname')}\n \n \n {form.input('contactPhone')}\n \n \n {form.input('contactEmail')}\n \n
\n
\n
\n
{t(\"Job data\")}
\n
\n \n {form.input('startDate', { type: 'date'})}\n \n \n {form.textarea('jobsDescription')}\n \n
\n
\n
\n
\n\n form.setFieldValue('properties', p)} />\n
\n
\n {form.errorBox()}\n
\n
\n \n
\n props.onCancel()}>\n {t('Cancel')}\n \n \n {t('Create')}\n \n
\n
\n \n}","import * as React from 'react';\n\nimport {\n F, Tag, Tooltip,\n useTranslation, useLoading, useDataTable, useFormDialog, useSearch,\n} from '@components';\nimport {\n IActivityType, IConstants, IJob, ILegalForm, IPropertyGroupType, ISecurity, IWork,\n PropertyGroupObjectType\n} from '@models';\nimport * as DateUtils from '@utils/date-utils';\nimport { BreadcrumbItem } from '../custom/BreadcrumbItem';\nimport { DynamicProperties } from '../user/DynamicProperties';\nimport { ProcessContractorRequest } from './ProcessContractorRequest';\nimport { isWorker } from 'cluster';\n\nexport interface IProps {\n activityTypes: IActivityType[];\n constants: IConstants;\n loadJob: Function;\n getJobContractorRequests: Function;\n hasPermission: Function;\n legalForms: ILegalForm[];\n onProcessSuccess: Function;\n processContractorRequest: Function;\n propertyGroupTypes: IPropertyGroupType[];\n job: IJob;\n work: IWork;\n security: ISecurity;\n}\n\ntype IContractorRequest = any;\n\nconst ContractorRequestData = ({ contractor, propertyGroupTypes }: {\n contractor: IContractorRequest,\n propertyGroupTypes: IPropertyGroupType[],\n}) => {\n const { t } = useTranslation();\n\n return
\n
\n \n {contractor.contractorName}\n \n \n {contractor.contractorCode}\n \n \n {contractor.contactName}\n \n \n {contractor.contactSurname}\n \n \n {contractor.contactPhone}\n \n \n {contractor.contactEmail}\n \n \n {DateUtils.format(contractor.startDate)}\n \n \n {contractor.description ?? contractor.jobsDescription}\n \n \n {contractor.address}\n \n \n {contractor.postalCode}\n \n
\n\n \n
\n}\n\nexport function JobContractorRequests(props: IProps) {\n const loading = useLoading(true);\n const { t } = useTranslation();\n const [requests, setRequests] = React.useState([]);\n const [requestToProcess, setRequestToProcess] = React.useState();\n const [invitations, setInvitations] = React.useState([]);\n const isContractor = props.security.isContractor();\n const dialog = useFormDialog({\n editTitle: t('Contractor data'),\n className: 'md'\n });\n\n const refresh = async () => {\n await initialize();\n await props.loadJob(props.work.id, props.job.id);\n props.onProcessSuccess();\n }\n\n const invitationSearch = useSearch({\n workId: props.work.id,\n search: isContractor ? 'jobs/subcontractor.invitations.users' : 'jobs/subcontractor.invitations.users.workers',\n filters: {\n jobId: props.job.id,\n workId: props.work.id,\n }\n });\n\n const initialize = loading.wrap(async () => {\n const data = await props.getJobContractorRequests(props.work.id, props.job.id);\n const invisSearch = await invitationSearch.doSearch()\n const invitations: any[] = [];\n invisSearch.forEach((item: any) => {\n invitations.push({\n startDate: item.startDate,\n source: item.source,\n contractorName: item.contractorName,\n jobsDescription: item.description,\n accepted: item.accepted,\n contactEmail: item.email,\n description: item.jobsDescription,\n })\n });\n data.forEach((element: any) => {\n element.source = element.contactName\n });\n setInvitations(invitations);\n setRequests(data);\n });\n\n React.useEffect(() => {\n initialize();\n }, []);\n\n React.useEffect(() => {\n setRequests(requests.concat(invitations));\n }, [invitations]);\n\n const canProcessRequests = props.hasPermission('jobs.contractors.processrequests');\n\n const dataTable = useDataTable({\n columns: [\n { title: 'Date', field: 'startDate', delegate: 'date', className: 'center' },\n { title: t('job.contractor-request.source'), field: 'source', className: 'center' },\n { title: t('job.contractor-request.target'), field: 'contractorName' },\n {\n title: t('Job'),\n render: c => {\n return \n {c.jobCode}\n {c.jobsDescription}\n \n },\n },\n props.work.id == 21 ?\n {\n title: 'Status', className: 'center', render: (d: IContractorRequest) =>\n d.accepted\n ? \n : d.discarded\n ?
\n \n \n {d.resultMessage}\n \n
\n : d.discarded != null && d.jobId == null ? : \n } : undefined,\n ],\n actions: [\n { icon: 'info', onClick: dialog.showEdit },\n canProcessRequests ? { icon: 'play', onClick: setRequestToProcess, disabled: (d: IContractorRequest) => d.accepted || d.discarded } : undefined\n ],\n data: requests,\n });\n\n return
\n \n\n {requestToProcess &&\n setRequestToProcess(undefined)}\n onSuccess={() => refresh()}\n propertyGroupTypes={props.propertyGroupTypes}\n job={props.job}\n work={props.work} />}\n\n {!requestToProcess && <>\n {loading.renderBox()}\n {dataTable()}\n {dialog.render(\n (c: IContractorRequest) =>\n )}\n }\n
\n}","import * as React from 'react';\nimport { connect } from 'react-redux';\nimport { ApplicationState } from '../../store';\nimport * as JobsStore from '../../store/jobs';\nimport { JobContractorRequests } from '../../components/jobs/JobContractorRequests';\nimport { hasPermission } from '../../utils/security';\nimport { isJobHasContractorPropertyGroupType } from '../../models';\n\nexport default connect(\n (state: ApplicationState) => ({\n ...JobsStore.plainActions,\n ...state.identity,\n ...state.user,\n activityTypes: state.user.activityTypes,\n constants: state.constants,\n propertyGroupTypes: state.user.propertyGroupTypes.filter(isJobHasContractorPropertyGroupType),\n hasPermission: (p: string) => hasPermission(p, {\n user: state.identity?.user,\n work: state.user.work,\n explicit: true,\n }),\n legalForms: state.user.legalForms,\n }),\n JobsStore.actionCreators,\n)(JobContractorRequests as any) as any; // eslint-disable-line @typescript-eslint/no-explicit-any\n","import * as React from 'react';\nimport { connect } from 'react-redux';\nimport { ApplicationState } from '../../store';\nimport * as JobsStore from '../../store/jobs';\nimport { JobContractorSubRequests } from '../../components/jobs/JobContractorSubRequests';\nimport * as ContractorsStore from '../../store/contractors';\n\nexport default connect(\n (state: ApplicationState) => ({\n ...JobsStore.plainActions,\n constants: state.constants,\n ...state.identity,\n ...state.user,\n ...ContractorsStore.plainActions,\n }),\n JobsStore.actionCreators,\n)(JobContractorSubRequests as any) as any; // eslint-disable-line @typescript-eslint/no-explicit-any\n","import * as React from 'react';\n\nimport {\n useDataTable, useSearch, useTranslation, Tag, useLoading\n} from '@components';\n\nimport DateUtils from '@utils/date-utils';\nimport { IJob, IJobHasContractor, ISecurity, IUserIdentity } from '@models';\nimport { IContractor } from '@models/resources';\n\nexport interface IProps {\n jobId: number;\n workId: number;\n identity: IUserIdentity;\n job: IJob;\n getContractorFromAppUser: Function;\n getJobContractors: Function;\n security: ISecurity;\n}\n\nexport function JobContractorSubRequests(props: IProps) {\n const { t } = useTranslation();\n\n const loading = useLoading();\n\n const userIsSubcontractor = React.useRef(false);\n\n const jobHasContractor = React.useRef();\n const [canRender, setCanRender] = React.useState(false);\n\n const initialize = loading.wrap(async () => {\n const contractorUserData = await props.getContractorFromAppUser(props.workId);\n\n const jobContractorsData = await props.getJobContractors(props.workId, props.jobId);\n\n const subContractors = await jobContractorsData.filter((x: IJobHasContractor) => x.parentId !== null);\n\n const isSubcontractor = await subContractors.some((jc: IJobHasContractor) => jc.contractorId === (contractorUserData?.id ?? 0));\n\n const jobContractorData = await jobContractorsData.find((jc: IJobHasContractor) => jc.contractorId === (contractorUserData?.id ?? 0));\n userIsSubcontractor.current = isSubcontractor && props.security.isContractor();\n jobHasContractor.current = jobContractorData;\n\n setCanRender(props.security.isContractor()\n ? jobHasContractor.current != null\n : true);\n });\n\n React.useEffect(() => {\n initialize();\n }, []);\n\n const requestSearch = useSearch({\n workId: props.workId,\n search: 'jobs/subcontractor.requests',\n filters: {\n jobId: props.jobId,\n workId: props.workId,\n contractorId: userIsSubcontractor ? (jobHasContractor.current?.parentId) : null,\n }\n });\n\n const invitationSearch = useSearch({\n workId: props.workId,\n search: 'jobs/subcontractor.invitations.contractors',\n filters: {\n jobId: props.jobId,\n workId: props.workId,\n jobHasContractorId: userIsSubcontractor ? (jobHasContractor.current?.parentId) : null,\n }\n });\n\n const [data, setData] = React.useState([]);\n\n const renderStatus = (d: any) => {\n if (d.acceptedByContractor || d.accepted) {\n return {t('job.contractor-request.accepted-by-contractor')};\n }\n else if (d.acceptedByWork) {\n return {t('job.contractor-request.accepted-by-work')};\n }\n else if (d.accepted == null && d.jobId == null) {\n return {t('Pending') + ' (' + t('Invitation') + ')'};\n }\n else if ((d.rejected && d.reject != null) || (!d.accepted && d.accepted != null)) {\n return {t('Rejected')};\n }\n else {\n return {t('Pending')}\n }\n }\n\n function filteredInvitations() {\n let parentIds: any[] = [];\n parentIds.push(jobHasContractor.current?.id ?? undefined);\n invitationSearch.value.map((x: any) => parentIds.includes(x.parentId) ? parentIds.push(x.id) : undefined);\n requestSearch.value.map((x: any) => parentIds.includes(x.parentId) ? parentIds.push(x.id) : undefined);\n\n if (requestSearch.isCompleted && invitationSearch.isCompleted) {\n const filteredRequests = requestSearch\n .value\n .filter((i: any) =>\n jobHasContractor.current\n ? i.sourceContractorId == jobHasContractor.current?.contractor.id\n || parentIds.includes(i.parentId)\n || jobHasContractor.current?.contractorId == i.targetContractorId\n : true);\n const filteredInvitations = invitationSearch\n .value\n .filter((i: any) =>\n jobHasContractor.current\n ? i.sourceId == jobHasContractor.current?.contractor.id\n || parentIds.includes(i.parentId)\n : true);\n const concated: any[] = filteredRequests\n .concat(filteredInvitations)\n .sort((a: any, b: any) => b.dateTime.localeCompare(a.dateTime));\n return concated;\n }\n else {\n return [];\n }\n }\n\n React.useEffect(() => {\n setData(filteredInvitations());\n }, [requestSearch.value, invitationSearch.value, jobHasContractor.current]);\n\n const dataTable = useDataTable({\n columns: [\n { title: t('Date'), className: 'td-datetime-sm', field: 'dateTime', delegate: 'date' },\n { title: t('job.contractor-request.source'), render: (d: any) => jobHasContractor ? d.sourceId == jobHasContractor.current?.id || d.sourceContractorId == jobHasContractor.current?.contractorId ? {d.sourceName} : d.sourceName : d.sourceName },\n { title: t('job.contractor-request.target'), render: (d: any) => jobHasContractor ? d.targetContractorId == jobHasContractor.current?.id ? {d.targetName} : d.targetName : d.targetName },\n {\n title: t('Job'),\n render: (d: any) => \n \n {d.jobName}\n \n },\n { title: t('Status'), className: 'td-datetime-sm', render: renderStatus },\n ],\n data: data,\n loading: requestSearch.isCompleted && invitationSearch.isCompleted,\n });\n\n return
\n {canRender && dataTable()}\n
;\n}\n","import * as React from 'react';\nimport { connect } from 'react-redux';\nimport { ApplicationState } from '../../store';\nimport * as JobsStore from '../../store/jobs';\nimport { JobInformationLoaded } from '@components/jobs/JobInformationLoaded';\n\nexport default connect(\n (state: ApplicationState) => ({\n ...JobsStore.plainActions,\n ...state.identity,\n ...state.user,\n }),\n JobsStore.actionCreators,\n)(JobInformationLoaded as any) as any; // eslint-disable-line @typescript-eslint/no-explicit-any\n","import * as React from 'react';\n\nimport { BreadcrumbItem, useTranslation } from \"@components\";\nimport { IJob, ISecurity } from '@models';\n\nimport './JobInformationLoaded.scss';\n\nexport interface IProps {\n job: IJob;\n jobId: number;\n security: ISecurity;\n workId: number;\n}\n\nexport function JobInformationLoaded(props: IProps) {\n const { t } = useTranslation();\n\n return
\n \n\n
\n
\n {t('job.information-loaded.download')}\n
\n\n \n\n \n {t('Download')}\n \n
\n
\n}","import * as React from 'react';\n\nimport * as UserActions from '@store/actions/user';\n\nimport {\n RequireRole, SplitButton, Tag, useConfirm, useDataTable, useDialogs,\n useLoading,\n usePermissions,\n useResolveName, useSearch, useTranslation,\n useWorkFormSettings,\n} from '@components';\nimport {\n goToJob,\n goToJobAddContractor,\n goToJobContractors,\n goToJobDocumentation,\n goToJobSubContractors,\n goToJobEditContractorRequirements, goToJobEditMachineryRequirements,\n goToJobEditWorkerRequirements, goToJobInformationLoadedControl,\n goToJobMachineries,\n goToJobWorkers\n} from '@components/routes';\nimport {\n IActivityType, IJob, ISecurity, IWorkspace,\n ResourceType, IWork, IJobHasContractor, ModuleManager,\n} from '@models';\nimport DateUtils from '@utils/date-utils';\nimport { ResourceStatus } from '@components/common/ResourceStatus';\nimport { redirectTo } from '@utils';\nimport './JobCard.scss';\nimport { IContractor, IMachineryType, IWorkerDocumentType, IWorkerType } from '@models/resources';\nimport {\n getJobHasContractorFromAppUser, getJobHasContractorFromId, getJobHasContractors\n} from '@store/actions/contractors';\nimport JobStatus from '@containers/jobs/JobStatusContainer';\nimport { getJobHasContractor } from '@store/actions/jobs';\n\ntype IJobAdditional = {\n jobHasContractorId?: number;\n jobHasContractorCurrentStatusType?: number;\n jobStatusTypeId?: number;\n shipmentNumber?: string;\n departmentName?: string;\n responsibleName?: string;\n contractorsTotal?: number;\n contractorsValidated?: number;\n machineriesTotal?: number;\n machineriesValidated?: number;\n workersTotal?: number;\n workersValidated?: number;\n depTotal?: number;\n depValidated?: number;\n depReqTotal?: number;\n depReqValidated?: number;\n statusId?: number;\n\n requirementsTotalCount?: number;\n requirementsValidatedCount?: number;\n}\n\ntype jobHasWorkerC = {\n id: number;\n name: string;\n surname?: string;\n code: string;\n jobId: number;\n currentStatusType?: number;\n workerDocumentTypeId: number;\n workerTypeId?: number;\n contractorName: string;\n totalCount?: number;\n validatedCount?: number;\n}\n\ntype jobHasMachineryC = {\n id: number;\n name: string;\n code: string;\n jobId: number;\n currentStatusType: number;\n machineryTypeId: number;\n licensePlate?: string;\n contractorName?: string;\n totalCount?: number;\n validatedCount?: number;\n}\n\ntype jobHasContractorC = {\n id: number;\n name: string;\n code: string;\n jobId: number;\n jobHasContractorId: number;\n jobsDescription?: string;\n startDate?: Date;\n currentStatusType: number;\n legalFormName: string;\n acitivityName: string;\n\n workersTotalCount?: number;\n workersValidatedCount?: number;\n\n machineriesTotalCount?: number;\n machineriesValidatedCount?: number;\n\n subcontractorsTotalCount?: number;\n subcontractorsValidatedCount?: number;\n\n requirementsTotalCount?: number;\n requirementsValidatedCount?: number;\n}\n\nexport interface IProps {\n job: IJob & IJobAdditional;\n work: IWork;\n security: ISecurity;\n workspaces: IWorkspace[];\n activityTypes: IActivityType[];\n workerDocumentTypes: IWorkerDocumentType[];\n workerTypes: IWorkerType[];\n machineryTypes: IMachineryType[];\n reload: Function;\n selectedContractor?: IContractor;\n moduleManager: ModuleManager;\n currentJobHasContractorId?: number;\n}\n\nfunction Indicator({ title, count, total, colorize, hideCount }: { title: string, count?: number, total: number, colorize?: boolean, hideCount?: boolean }) {\n const { t } = useTranslation();\n\n const className = colorize && count != undefined && count < total\n ? 'error'\n : '';\n\n return
\n \n \n
\n}\n\ntype JobDepartmentR = {\n id: number;\n departmentName: string;\n responsibleName: any;\n statusTypeId: number;\n isMain: boolean;\n}\n\nfunction JobDepartments({ job, work }: Partial) {\n const { t } = useTranslation();\n const departmentSearchs = useSearch({\n search: 'jobList/departmentIndicatorsList',\n workId: job!.workId,\n filters: {\n jobId: job!.id\n }\n });\n\n const departmentsTable = useDataTable({\n className: 'confortable',\n columns: [\n { title: 'Department', field: 'departmentName', className: 'td-md' },\n { title: 'Name', field: 'responsibleName', className: 'td-md' },\n { className: 'td-sm', render: (d) => {\n if (d.isMain) {\n return \n }\n }}\n // { field: 'currentStatusType', render: renderStatus, className:'td-md' },\n ],\n data: departmentSearchs.value ?? []\n });\n\n return
\n {departmentsTable()}\n
\n}\n\nfunction RemoveJob({ job, work, reload }: IProps) {\n const { t } = useTranslation();\n\n const loading = useLoading();\n\n const doRemoveWorker = loading.wrap(async (i: IJob) => {\n await UserActions.removeJob(job.id, work.id);\n reload();\n });\n\n const confirmRemove = useConfirm({\n message: t('Are you sure you want to remove this job?'),\n accept: doRemoveWorker\n });\n\n return
\n \n {t('Delete')}\n
\n}\n\nfunction JobWorkers({ job, workerDocumentTypes, work, workerTypes }: IProps) {\n // WORKERS\n const resolveWorkerDocumentType = useResolveName(workerDocumentTypes, { translate: true });\n const resolveWorkerType = useResolveName(workerTypes, { translate: true });\n const renderWorkerDocumentType = (w: jobHasWorkerC) => {\n return
\n {resolveWorkerDocumentType(w.workerDocumentTypeId)}\n
\n }\n const renderWorkerType = (w: jobHasWorkerC) => {\n return
\n {resolveWorkerType(w.workerTypeId)}\n
\n }\n\n const renderWorkerStatus = (w: jobHasWorkerC) =>\n ;\n\n const renderContractor = (w: jobHasWorkerC) => {\n return \n }\n\n const workersSearch = useSearch({\n search: 'job_has_workers.list',\n normalizeKeys: true,\n workId: job.workId,\n filters: {\n jobId: job.id\n }\n });\n\n React.useEffect(() => {\n workersSearch.doSearch();\n }, []);\n\n const workersTable = useDataTable({\n columns: [\n { title: 'Name', field: 'name', className: 'td-md' },\n { title: 'Surname', field: 'surname', className: 'td-md' },\n { title: 'Worker type', render: renderWorkerType, className: 'td-lg' },\n { title: 'Worker document type', render: renderWorkerDocumentType, className: 'td-md' },\n { title: 'Code', field: 'code', className: 'td-md' },\n { title: 'Contractor', render: renderContractor, className: 'td-lg' },\n {\n title: 'Documentation',\n className: 'td-md center',\n render: d =>\n
goToJobEditWorkerRequirements(job.workId, job.id, d.id)}>\n \n
\n },\n { field: 'currentStatusType', render: renderWorkerStatus, className: 'td-md' }\n ],\n actions: [\n {\n icon: 'fas fa-edit',\n onClick: (r) => goToJobWorkers(work.id, r.jobId)\n }\n ],\n data: workersSearch.value\n });\n\n return
\n {workersTable()}\n
\n}\n\nfunction JobMachines({ job, machineryTypes, work }: IProps) {\n // MACHINERIES\n const resolveMachineryType = useResolveName(machineryTypes, { translate: true });\n const renderMachineryType = (m: jobHasMachineryC) => {\n return
\n {resolveMachineryType(m.machineryTypeId)}\n
\n }\n\n const renderContractor = (m: jobHasMachineryC) => {\n return \n }\n\n const renderMachineryStatus = (m: jobHasMachineryC) =>\n ;\n\n const machineriesSearch = useSearch({\n search: 'job_has_machineries.list',\n normalizeKeys: true,\n workId: job.workId,\n filters: {\n jobId: job.id\n }\n });\n\n React.useEffect(() => {\n machineriesSearch.doSearch();\n }, []);\n\n const machineriesTable = useDataTable({\n columns: [\n { title: 'Name', field: 'name', className: 'td-lg' },\n { title: 'Code', field: 'code', className: 'td-md' },\n { title: 'Machinery type', render: renderMachineryType, className: 'td-md' },\n { title: 'License plate', field: 'licensePlate', className: 'td-md' },\n { title: 'Contractor', render: renderContractor, className: 'td-lg' },\n {\n title: 'Documentation',\n className: 'td-md center',\n render: d =>\n
goToJobEditMachineryRequirements(job.workId, job.id, d.id)}>\n \n
\n },\n { title: 'Status', render: renderMachineryStatus, className: 'td-md' }\n ],\n actions: [\n {\n icon: 'fas fa-edit',\n onClick: (r) => goToJobMachineries(work.id, r.jobId)\n }\n ],\n data: machineriesSearch.value\n });\n\n return
\n {machineriesTable()}\n
\n}\n\nfunction JobContractors({ job, work, security }: IProps) {\n // CONTRACTORS\n const renderContractorStatus = (c: jobHasContractorC) =>\n ;\n\n const contractorsSearch = useSearch({\n search: 'job_has_contractors.list',\n normalizeKeys: true,\n workId: job.workId,\n filters: {\n jobId: job.id\n }\n });\n\n React.useEffect(() => {\n contractorsSearch.doSearch();\n }, []);\n\n const contractorsTable = useDataTable({\n columns: [\n { title: 'Name', field: 'name', className: 'td-md' },\n { title: 'StartDate', field: 'startDate', delegate: 'date', className: 'td-md center' },\n { title: 'JobsDescription', field: 'jobsDescription' },\n {\n title: 'Documentation',\n className: 'td-md center',\n render: d =>\n
goToJobEditContractorRequirements(job.workId, job.id, d.jobHasContractorId)}>\n \n
\n },\n {\n title: 'Workers',\n className: 'td-md center',\n render: d =>\n
goToJobWorkers(job.workId, job.id)}>\n \n
\n },\n {\n title: 'Machineries',\n className: 'td-md center',\n render: d =>\n
goToJobMachineries(job.workId, job.id)}>\n \n
\n },\n {\n title: 'Subcontractors',\n className: 'td-md center',\n render: d =>\n
goToJobContractors(job.workId, job.id)}>\n \n
\n },\n { title: 'Status', render: renderContractorStatus, className: 'td-md' }\n ],\n actions: [\n {\n icon: 'fas fa-edit',\n disabled: security.isContractor(),\n onClick: (r) => goToJobContractors(work.id, r.jobId),\n }\n ],\n data: contractorsSearch.value\n });\n\n return
\n {contractorsTable()}\n
\n}\n\nfunction JobSubContractors({ job, work, security }: IProps) {\n // CONTRACTORS\n const renderContractorStatus = (c: jobHasContractorC) =>\n ;\n\n const [parentId, setParentId] = React.useState(0);\n\n React.useEffect(() => {\n getJobHasContractorFromAppUser(job.workId, job.id)\n .then((u: IJobHasContractor) => setParentId(u.id));\n }, []);\n\n React.useEffect(() => {\n if (parentId) {\n contractorsSearch.doSearch({\n jobId: job.id,\n parentId: parentId\n });\n }\n }, [parentId]);\n\n const contractorsSearch = useSearch({\n search: 'job_has_contractors.list',\n normalizeKeys: true,\n workId: job.workId,\n filters: {\n jobId: job.id,\n parentId: parentId\n },\n lazy: true,\n });\n\n React.useEffect(() => {\n contractorsSearch.doSearch();\n }, []);\n\n const contractorsTable = useDataTable({\n columns: [\n { title: 'Name', field: 'name', className: 'td-md' },\n { title: 'StartDate', field: 'startDate', delegate: 'date', className: 'td-md center' },\n { title: 'JobsDescription', field: 'jobsDescription' },\n {\n title: 'Documentation',\n className: 'td-md center',\n render: d =>\n
goToJobEditContractorRequirements(job.workId, job.id, d.jobHasContractorId)}>\n \n
\n },\n {\n title: 'Workers',\n className: 'td-md center',\n render: d =>\n
goToJobWorkers(job.workId, job.id)}>\n \n
\n },\n {\n title: 'Machineries',\n className: 'td-md center',\n render: d =>\n
goToJobMachineries(job.workId, job.id)}>\n \n
\n },\n {\n title: 'Subcontractors',\n className: 'td-md center',\n render: d =>\n
goToJobContractors(job.workId, job.id)}>\n \n
\n },\n { title: 'Status', render: renderContractorStatus, className: 'td-md' }\n ],\n actions: [\n {\n icon: 'fas fa-edit',\n onClick: (r) => goToJobContractors(work.id, r.jobId),\n }\n ],\n data: contractorsSearch.value\n });\n\n return
\n {contractorsTable()}\n
\n}\n\nexport function JobCard({\n job, security, workspaces, activityTypes, work,\n currentJobHasContractorId,\n workerDocumentTypes, workerTypes, machineryTypes, reload,\n selectedContractor, moduleManager,\n}: IProps) {\n const { t } = useTranslation();\n const dialogs = useDialogs();\n const loading = useLoading();\n const [canAddSubContractorState, setCanAddSubContractorState] = React.useState(true);\n\n const jobSettings = React.useMemo(() => work.jobSettings, [work]);\n\n const doRemoveJob = loading.wrap(async (i: IJob) => {\n await UserActions.removeJob(job.id, work.id);\n reload();\n });\n const confirmRemoveJob = useConfirm({\n message: t('Are you sure you want to remove this job?'),\n accept: doRemoveJob,\n });\n\n const canRemove = security.isGestor() || security.hasPermission('jobs.forceStatus');\n const perms = usePermissions({ moduleManager, work, security }, { ctx: { job } }, {\n remove: {\n name: 'job.remove',\n default: canRemove,\n },\n });\n\n const [isSubContractor, setIsSubContractor] = React.useState(false);\n const [currentEmployer, setCurrentEmployer] = React.useState('');\n\n const initialize = async () => {\n if (security.isContractor()) {\n if (job.jobHasContractorId) {\n const currentJobHasContractor = await getJobHasContractorFromId(job.workId, job.jobHasContractorId);\n setIsSubContractor(currentJobHasContractor.parentId ? true : false);\n if (currentJobHasContractor.parentId) {\n const currentEmployer: any = await getJobHasContractorFromId(job.workId, currentJobHasContractor.parentId);\n setCurrentEmployer(currentEmployer.contractorName);\n }\n }\n }\n }\n\n React.useEffect(() => {\n const ctx = {\n job: job,\n security: security,\n getJobHasContractorFromId: getJobHasContractorFromId,\n getJobHasContractors: getJobHasContractors,\n selfContractorId: job.jobHasContractorId,\n setCanAddSubContractorState: setCanAddSubContractorState,\n };\n\n moduleManager\n .hasPermission('canAddSubContractor', ctx)\n .then(setCanAddSubContractorState);\n }, []);\n\n React.useEffect(() => {\n initialize();\n }, [job]);\n\n const goOpts = { jobHasContractorId: currentJobHasContractorId };\n\n const settings = useWorkFormSettings({ work, scope: 'job' });\n\n const resolveWorkspace = useResolveName(workspaces);\n const resolveActivity = useResolveName(activityTypes);\n\n const addSubContractor = async () => {\n const currentJobHasContractor = await getJobHasContractorFromAppUser(job.workId, job.id);\n goToJobAddContractor(job.workId, job.id, currentJobHasContractor.id);\n }\n\n const goToSubContractors = async () => {\n const currentJobHasContractor = await getJobHasContractor(job.workId, job.id, currentJobHasContractorId ?? 0);\n const opts = { ...goOpts, parentId: currentJobHasContractor.id };\n goToJobSubContractors(job.workId, job.id, opts);\n }\n\n const [actions, setActions] = React.useState([]);\n\n const actionsI = [\n {\n label: t((work.id == 23) ? 'job.view.azsa' : 'job.view'),\n icon: 'fas fa-wrench',\n command: (e: any) => goToJob(job.workId, job.id, goOpts)\n }\n ];\n\n if (security.isWorker() || security.isGestor()) {\n actionsI.push({\n label: t((work.id == 23 && security.isWorker()) ? 'job.documentation.azsa' : 'job.documentation'),\n icon: 'fas fa-folder',\n command: () => goToJobDocumentation(job.workId, job.id, goOpts)\n });\n actionsI.push({\n label: t('job.contractors'),\n icon: 'fas fa-id-card-alt',\n command: () => goToJobContractors(job.workId, job.id)\n });\n actionsI.push({\n label: t('job.workers'),\n icon: 'fas fa-user-friends',\n command: () => goToJobWorkers(job.workId, job.id, goOpts)\n });\n actionsI.push({\n label: t('job.machineries'),\n icon: 'fas fa-truck-loading',\n command: () => goToJobMachineries(job.workId, job.id, goOpts)\n });\n actionsI.push({\n label: t('job.downloads'),\n icon: 'fas fa-download',\n command: () => goToJobInformationLoadedControl(job.workId, job.id),\n })\n }\n else if (security.isContractor()) {\n actionsI.push({\n label: t('job.documentation'),\n icon: 'fas fa-folder',\n command: () => goToJobDocumentation(job.workId, job.id, goOpts)\n });\n actionsI.push({\n label: t('job.contractors'),\n icon: 'fas fa-id-card-alt',\n command: () => goToJobContractors(job.workId, job.id)\n });\n actionsI.push({\n label: t('job.workers'),\n icon: 'fas fa-user-friends',\n command: () => goToJobWorkers(job.workId, job.id, goOpts)\n });\n actionsI.push({\n label: t('job.machineries'),\n icon: 'fas fa-truck-loading',\n command: () => goToJobMachineries(job.workId, job.id, goOpts)\n });\n if (canAddSubContractorState) {\n actionsI.push({\n label: t('job.contractors.add-subcontractor'),\n icon: 'fas fa-plus',\n command: addSubContractor\n });\n }\n }\n\n if (security.isGestorOrWorker() && perms.get('remove')) {\n actionsI.push({\n label: t('Delete'),\n icon: 'fas fa-trash',\n command: (e: any) => confirmRemoveJob(e),\n });\n }\n\n //TODO llevar al modulo\n const evaluations = async () => {\n const ctx = {\n roles: security.user?.roles ?? [],\n userDepartments: security.user?.departments ?? [],\n job: job,\n security: security,\n };\n\n // const can = await moduleManager.hasPermission('canViewEvaluations', ctx);\n const can = security.isGestor()\n\n if (work.id == 23 && can) {\n actionsI.push({\n label: t('PessmaEvaluations'),\n icon: 'fas fa-calendar-check',\n command: () => redirectTo(`/modules/${work.id}/AzsaApi/PessmaEvaluations?id=${job.id}`),\n });\n }\n //* Los contratistas no pueden ver las evaluaciones pendientes\n if (work.id == 23 && can && !security.isContractor()) {\n actionsI.push({\n label: t('Pending evaluations PESSMA'),\n icon: 'fas fa-calendar',\n command: () => redirectTo(`/modules/${work.id}/AzsaApi/PessmaPendingEvaluations?id=${job.id}`),\n })\n }\n\n setActions(actionsI);\n }\n\n React.useEffect(() => {\n evaluations()\n }, [security, moduleManager.getId(), perms.id]);\n\n return
\n
\n {job.code}\n \n
\n \n
\n {loading.render()}\n \n
\n
\n \n {security.isContractor() &&\n
\n \n
\n }\n
\n
\n \n \n {job.name}\n \n\n \n \n {resolveWorkspace(job.workspaceId)}\n \n\n {settings.show('activityTypeId') &&\n <>\n \n \n {resolveActivity(job.activityTypeId)}\n \n }\n\n \n {job.responsibleName}\n\n \n {DateUtils.format(job.startDate)}\n\n \n {DateUtils.format(job.endDate)}\n\n {(security.isContractor() && !isSubContractor) && <>\n \n {job.shipmentNumber}\n }\n\n {(security.isContractor() && isSubContractor) && <>\n \n {currentEmployer}\n }\n
\n\n
\n \n
goToJobEditContractorRequirements(work.id, job.id, job.jobHasContractorId!)}>\n \n
\n
\n\n \n
dialogs.show('contractors-dialog', r)}>\n onClick={r => goToJobContractors(work.id, job.id, true)}>\n \n
\n
\n\n
goToJobDocumentation(work.id, job.id, goOpts)}>\n \n
\n\n
dialogs.show('workers-dialog', r)}>\n onClick={r => goToJobWorkers(work.id, job.id, goOpts)}>\n \n
\n\n \n
dialogs.show('subcontractors')}>\n onClick={goToSubContractors}>\n {/* TODO: QUITAR CLAVE */}\n \n
\n
\n \n
dialogs.show('machineries-dialog', r)}>\n onClick={r => goToJobMachineries(work.id, job.id, goOpts)}>\n \n
\n
goToJobDocumentation(work.id, job.id)}>\n onClick={() => dialogs.show('departments')}>\n \n
\n
\n \n
goToJobDocumentation(work.id, job.id)}>\n onClick={() => dialogs.show('departments')}>\n \n
\n
dialogs.show('machineries-dialog', r)}>\n onClick={r => goToJobMachineries(work.id, job.id, goOpts)}>\n \n
\n
\n
\n\n {/** DEPARTMENTS */}\n {dialogs.render('departments', { title: t('Departments') + ': ' + job.code, className: 'pd g', style: { width: '40vw' } }, (_: any) =>\n )}\n
\n}\n","import * as React from 'react';\nimport { connect } from 'react-redux';\nimport { ApplicationState } from '../../store';\nimport * as JobsStore from '../../store/jobs';\nimport { JobInfoCard } from '@components/jobs/JobInfoCard';\n\nexport default connect(\n (state: ApplicationState) => ({\n ...JobsStore.plainActions,\n ...state.identity,\n ...state.user,\n ...state.constants,\n moduleManager: state.modules.moduleManager,\n workSettings: state.user.work?.settingsObj,\n }),\n JobsStore.actionCreators,\n)(JobInfoCard as any) as any; // eslint-disable-line @typescript-eslint/no-explicit-any\n","import * as React from 'react';\n\nimport { IActivityType, IJob, ISecurity, IWork, IWorkspace, ModuleManager } from '@models';\nimport { JobCard } from './list/JobCard';\nimport { IMachineryType, IWorkerDocumentType, IWorkerType } from '@models/resources';\nimport useSearch from '@components/custom/useSearch';\n\nexport interface IProps {\n activityTypes: IActivityType[];\n job: IJob;\n jobId: number;\n machineryTypes: IMachineryType[];\n moduleManager: ModuleManager;\n security: ISecurity;\n work: IWork;\n workId: number;\n workerDocumentTypes: IWorkerDocumentType[];\n workerTypes: IWorkerType[];\n workspaces: IWorkspace[];\n}\n\nexport function JobInfoCard(props: IProps) {\n const getSearch = () => {\n if (props.security.isContractor()) {\n return 'jobList/contractors';\n }\n else {\n return 'jobList/gestor';\n }\n }\n\n const data = useSearch({\n search: getSearch(),\n workId: props.workId,\n filters: {\n jobId: props.job.id,\n }\n });\n\n return
\n {data.renderLoading()}\n {data.value != undefined && data.value.length > 0 &&\n }\n
\n}","import * as React from 'react';\nimport { connect } from 'react-redux';\nimport { ApplicationState } from '../../store';\nimport * as JobsStore from '../../store/jobs';\nimport { JobInformationLoadedControl } from '@components/jobs/JobInformationLoadedControl';\n\nexport default connect(\n (state: ApplicationState) => ({\n ...JobsStore.plainActions,\n ...state.identity,\n ...state.user,\n }),\n JobsStore.actionCreators,\n)(JobInformationLoadedControl as any) as any; // eslint-disable-line @typescript-eslint/no-explicit-any\n","import * as React from 'react';\n\nimport { BreadcrumbItem, useDataTable, useSearch, useTranslation } from \"@components\";\nimport { IJob, IJobLog, ISecurity } from '@models';\nimport DateUtils from '@utils/date-utils';\n\ntype JobLogT = IJobLog & { contractorName: string, contractorCode: string };\n\nexport interface IProps {\n job: IJob;\n jobId: number;\n security: ISecurity;\n workId: number;\n}\n\nexport function JobInformationLoadedControl(props: IProps) {\n const data = useSearch({\n search: 'jobRequirements/downloads',\n filters: {\n jobId: props.jobId,\n workId: props.workId\n },\n workId: props.workId,\n });\n const { t } = useTranslation();\n\n const dataTable = useDataTable({\n data: data.value,\n columns: [\n { field: 'contractorName', className: 'center', title: t('Contractor'), sortKey: 'contractorName'},\n { field: 'contractorCode', className: 'center', title: t('Code'), sortKey: 'contractorCode' },\n { field: 'dateTime', className: 'center', title: t('DateTime'), render: (r:any) => DateUtils.formatDateTimeFromUtc(r.dateTime), sortKey: 'dateTime' },\n ]\n });\n\n return
\n \n {data.renderLoading()}\n {dataTable()}\n
\n}","import * as React from 'react';\nimport { connect } from 'react-redux';\nimport { ApplicationState } from '../../store';\nimport * as JobsStore from '../../store/jobs';\nimport { JobNotifyInformationLoaded } from '@components/jobs/JobNotifyInformationLoaded';\n\nexport default connect(\n (state: ApplicationState) => ({\n ...JobsStore.plainActions,\n }),\n JobsStore.actionCreators,\n)(JobNotifyInformationLoaded as any) as any; // eslint-disable-line @typescript-eslint/no-explicit-any\n","import * as React from 'react';\n\nimport {\n BreadcrumbItem,\n classNames,\n G, Panel, Portal, RequirePermission,\n Tag,\n useConfirm, useDataTable,\n useDialogs,\n useLoading,\n useMessage,\n useResolveName,\n useTranslation,\n useWorkFormSettings,\n useScheduler,\n useSearch,\n useSignalR,\n useSearchFilters,\n onChange,\n Tooltip\n} from '@components';\nimport {\n IContractor,\n IJob,\n IJobHasMachinery,\n IMachinery,\n IMachineryType,\n IPropertyGroupType,\n IResourceStatusType,\n ISecurity,\n IUserIdentity,\n IWork,\n IWorkSettings,\n PropertyGroupObjectType,\n ResourceType,\n getMachineryName,\n IJobHasContractor,\n ModuleManager,\n} from '@models';\n\nimport './ManageJobMachineries.scss';\nimport { ResourceStatus } from '@components/common/ResourceStatus';\nimport { getQueryParameter, redirectTo, strJoin } from '@utils';\nimport ForceValidationResourceContainer from '@containers/requirements/ForceValidationResourceContainer';\nimport { DynamicProperties } from '@components/user/DynamicProperties';\nimport { ResourceStatusType, resourceStatusTypes } from '@models/resources';\nimport { IRequirementNotification } from '@models/requirements';\nimport dateUtils from '@utils/date-utils';\n\nexport interface IProps {\n activateJobHasMachinery: Function;\n contractors: IContractor[];\n contractorId?: number;\n jobHasContractorId?: number;\n relationId?: number;\n selectedJobHasContractor?: IJobHasContractor;\n getJobHasMachineries: Function;\n getJobHasMachinery: (workId: number, jobId: number, relationId: number) => Promise,\n hasPermission: Function;\n job: IJob;\n jobHasMachinery: IJobHasMachinery;\n machineryTypes: IMachineryType[];\n propertyGroupTypes: IPropertyGroupType[];\n removeJobHasMachinery: Function;\n deleteJobHasMachinery: Function;\n resourceStatusTypes: IResourceStatusType[];\n saveJobHasMachinery: Function;\n searchContractors: Function;\n searchMachineries: Function;\n security: ISecurity;\n work: IWork;\n workSettings: IWorkSettings;\n appUsers: IUserIdentity[];\n moduleManager: ModuleManager;\n}\nfunction MachineryInfo({ className, machinery, machineryTypes, work, contractors }: {\n className: string,\n machinery: IMachinery | undefined,\n machineryTypes: IMachineryType[],\n contractors: IContractor[],\n work: IWork\n}) {\n const { t } = useTranslation();\n const machineryTypeName = useResolveName(machineryTypes);\n const contractorName = useResolveName(contractors);\n\n const settings = useWorkFormSettings({ work: work, scope: 'machinery' });\n\n const renderLicensePlate = (m: IMachinery | undefined) => {\n if (m?.prefixLicenseNumber != null) {\n return \n {strJoin('/', m.prefixLicenseNumber, m.licenseNumber, m.suffixLicenseNumber)}\n \n }\n else {\n return ;\n }\n }\n\n React.useEffect(() => {\n try{\n contractorName(machinery?.contractorId)\n }\n catch(e){\n console.log(e);\n }\n }, [machinery]);\n\n return
\n {settings.show('name') &&\n \n {machinery?.name}\n }\n {settings.show('code') &&\n \n {machinery?.code}\n }\n \n {renderLicensePlate(machinery)}\n \n \n {machinery?.description}\n \n \n {machineryTypeName(machinery?.machineryTypeId)}\n \n \n {contractorName(machinery?.contractorId)}\n \n
\n}\n\nenum FormType {\n List = 0,\n MachineryDocumentation = 1,\n}\n\ntype IJobHasMachineryR = IJobHasMachinery & {\n machineryName: string;\n machineryCode: string;\n machineryContractorName: string;\n machineryContractorId: number;\n\n machineryPrefixLicenseNumber?: string;\n machineryLicenseNumber?: string;\n machinerySuffixNumber?: string;\n machineryTypeFullName?: string;\n\n validatedCount?: number;\n totalCount?: number;\n}\n\nexport function ManageJobMachineries(props: IProps) {\n const { t } = useTranslation();\n const [formType, setFormType] = React.useState(\n props.jobHasMachinery ? FormType.MachineryDocumentation : FormType.List);\n const [selectedMachinery, setSelectedMachinery] = React.useState(props.jobHasMachinery);\n const dialogs = useDialogs();\n const settings = useWorkFormSettings({ work: props.work, scope: 'machinery' });\n const [machineries, setMachineries] = React.useState([]);\n const [canRemoveState, setCanRemoveState] = React.useState(false);\n const [canValidateState, setCanValidateState] = React.useState(false);\n const [contractors, setContractors] = React.useState([]);\n\n const initializeContractors = async () => {\n const contractors = await props.searchContractors(props.work.id, '');\n setContractors(contractors);\n }\n\n React.useEffect(() => {\n initializeContractors();\n }, []);\n\n\n\n const loading = useLoading();\n const messages = useMessage({\n autoClear: true,\n });\n\n const filters = useSearchFilters({\n security: props.security,\n workId: props.work.id,\n name: 'machineries/manageJobMachineries',\n persist: true,\n references: {\n resourceStatusTypes: resourceStatusTypes,\n },\n });\n\n const urlJobHasContractorId: number = getQueryParameter(\n window.location.search,\n 'jobHasContractorId',);\n\n const query = useSearch({\n workId: props.work.id,\n search: 'jobs/machineries',\n normalizeKeys: true,\n lazy: true,\n filters: filters.merge({\n jobId: props.job.id,\n workId: props.work.id,\n jobHasContractorId: props.relationId ?? props.selectedJobHasContractor?.id ?? urlJobHasContractorId,\n onlyMainContractors: props.security.isGestorOrWorker() && props.jobHasContractorId == undefined\n ? true\n : undefined,\n }),\n });\n\n const workSettings: IWorkSettings | undefined = props.work.settingsObj;\n const HideByDefaultEnded = workSettings?.hideByDefaultEnded ?? false;\n\n React.useEffect(() => {\n if (HideByDefaultEnded && filters.filters.resourceStatusTypes != 3) {\n const filteredContractors = query.value.filter((c: IJobHasMachinery) => c.currentStatusType !== 3);\n setMachineries(filteredContractors);\n } else {\n setMachineries(query.value ?? []);\n }\n }, [query.value]);\n\n const initialize = loading.wrap(async () => {\n await query.doSearch();\n });\n\n const doRemove = loading.wrap(async (relation: IJobHasMachinery) => {\n const resp = await props.removeJobHasMachinery(props.work.id, props.job.id, relation.id);\n messages.set(resp, {\n successMessage: t('Relation removed successfully'),\n });\n\n await initialize();\n });\n\n const canRemove = props.security.hasPermission('jobs.machineries.remove');\n\n const calculateCanRemove = async () => {\n const res = await props.moduleManager.requirePermission('jobs.machineries.remove', {\n work: props.work,\n security: props.security,\n }, canRemove);\n\n setCanRemoveState(res ?? false);\n };\n\n React.useEffect(() => {\n calculateCanRemove();\n }, []);\n\n const calculateCanValidate = async () => {\n const res = await props.moduleManager.requirePermission('jobs.resources.validate', {\n work: props.work,\n security: props.security\n }, canValidate);\n\n setCanValidateState(res ?? false);\n };\n\n React.useEffect(() => {\n calculateCanValidate();\n }, []);\n\n const canValidate = props.security.hasPermission('jobs.resources.validate');\n\n const confirmRemove = useConfirm({\n message: t('Are you sure to finalize machinery from this job?'),\n accept: doRemove,\n });\n\n React.useEffect(() => {\n initialize();\n }, [props.selectedJobHasContractor]);\n\n const scheduler = useScheduler();\n\n const _ = useSignalR({\n method: 'RequirementNotification',\n onMessage: r => {\n scheduler.schedule(reload, 1500);\n }\n });\n\n const reload = () => {\n query.doSearch();\n }\n\n onChange(() => {\n reload();\n }, [filters.filters]);\n\n const doDeleteMachinery = loading.wrap(async (i: IJobHasMachinery) => {\n const resp = props.deleteJobHasMachinery(props.work.id, props.job.id, i.id);\n messages.set(resp, {\n successMessage: t('Relation removed successfully'),\n });\n\n await initialize();\n });\n\n const confirmDeleteMachinery = useConfirm({\n message: t('Are you sure to remove machinery from this job?'),\n accept: doDeleteMachinery,\n });\n\n const clearMachinery = (..._: any) => {\n setFormType(FormType.List);\n setSelectedMachinery(undefined);\n }\n\n const reactivateJobHasMachinery = loading.wrap(async (d: IJobHasMachinery) => {\n await props.activateJobHasMachinery(props.work.id, props.job.id, d.machineryId, d.id);\n await initialize();\n });\n\n const renderStatus = (i: IJobHasMachinery) => {\n return ;\n }\n\n const idGenerate = () => {\n return `i${Math.random().toString(36).substring(2)}`;\n }\n\n const renderLicensePlate = (m: IJobHasMachinery) => {\n\n const id = idGenerate();\n const content = strJoin(\n '/',\n m.machineryPrefixLicenseNumber,\n m.machineryLicenseNumber,\n m.machinerySuffixLicenseNumber);\n return
\n {content}\n {content}\n
\n }\n\n const canShowDocumentation = (w: IJobHasMachineryR) =>\n props.security.isContractor()\n // && props.workSettings.mainContractorCanFulfillSubs == true\n ? true\n // : props.security.isContractor()\n // ? w.machineryContractorId == selfContractorId\n : true;\n\n const dataTable = useDataTable({\n tooltip: true,\n columns: [\n settings.show('name')\n ? { title: 'Name', field: 'machineryName', className: 'td-md', sortKey: 'machineryName' }\n : undefined,\n settings.show('code')\n ? { title: 'serialNumber', field: 'machineryCode', className: 'td-md', sortKey: 'machineryCode' }\n : undefined,\n {\n title: 'License plate',\n field: 'machineryLicenseNumber',\n render: renderLicensePlate,\n className: 'td-md',\n sortKey: 'machineryLicenseNumber',\n },\n {\n title: 'Machinery type',\n field: 'machineryTypeFullName',\n className: 'td-lg',\n sortKey: 'machineryTypeFullName',\n },\n {\n title: 'Contractor',\n render: d => d.machineryContractorName\n ? \n : null,\n className: 'center',\n sortKey: 'machineryContractorName',\n },\n {\n title: t('AssignmentDate'), className: 'td-md',\n render: d => dateUtils.formatFromUtc(d.startDate),\n sortKey: 'startDate',\n },\n {\n title: 'currentStatusType',\n field: 'currentStatusType',\n className: 'td-md',\n render: renderStatus,\n sortKey: 'currentStatusType'\n },\n {\n title: t('Documentation'), className: 'td-indicator',\n render: d =>\n canShowDocumentation(d)\n ?
loadRequirements(d.id)} className='pointer'>\n \n
\n : null\n },\n {\n className: 'td-sm',\n render: s => (s.hasDelayedRevokation && props.work.jobSettings?.showResourceIncidenceIndicator)\n ? \n : null,\n }\n ],\n actions: [\n (canRemoveState)\n ? {\n icon: d => d.currentStatusType == ResourceStatusType.FINALIZED\n ? 'fas fa-redo'\n : 'pi pi-minus-circle',\n tooltip: d => d.currentStatusType == ResourceStatusType.FINALIZED\n ? t('Reactivate')\n : t('Finalize machinery'),\n onClick: (d, event) => d.currentStatusType == ResourceStatusType.FINALIZED\n ? reactivateJobHasMachinery(d)\n : confirmRemove(d, event)\n }\n : undefined,\n (props.security.isGestor())\n ? { icon: 'trash', onClick: confirmDeleteMachinery, tooltip: t('Remove machinery') }\n : undefined,\n (canValidateState && !props.security.isContractor())\n ? {\n icon: 'pi pi-check-square',\n tooltip: t('Force resource validation'),\n onClick: r => dialogs.showFromEvent('force-validation', r)()\n }\n : undefined\n ],\n data: machineries,\n className: 'machineries-table',\n });\n\n const loadRequirements = (machineryId: number) => {\n redirectTo(`/work/${props.work.id}/jobs/${props.job.id}/machinery/${machineryId}/requirements`);\n }\n\n const machineryName = selectedMachinery && selectedMachinery?.machinery\n ? getMachineryName(selectedMachinery.machinery)\n : '';\n\n return
\n \n
\n {filters.renderAsButton({ className: 'fas fa-filter pointer' })}\n
\n
\n setFormType(FormType.List)} />\n {formType == FormType.List &&
\n
\n {dataTable()}\n\n {dialogs.render('force-validation', { title: t('Force resource validation') }, (d: IJobHasMachinery) =>\n {\n dialogs.clear();\n initialize();\n }}\n resourceType={ResourceType.JobHasMachinery}\n resourceId={d.id} />\n )}\n
\n
}\n\n {/* VIEW JHM & PANEL */}\n {formType == FormType.MachineryDocumentation && selectedMachinery &&
\n
\n \n \n
\n \n \n \n
\n {machineryName}\n
}>\n
\n \n \n \n \n \n
\n \n \n {dialogs.render('force-validation', { title: t('Force resource validation'), className: 'g pd' }, () =>\n \n )}\n\n \n
    \n
  • {machineryName}
  • \n
\n
\n
\n
\n
\n {t('View machinery')}\n
\n
\n \n
\n \n
\n
\n
\n\n
\n
\n \n
\n
\n
}\n
\n}\n","import * as React from 'react';\n\nimport { BreadcrumbItem, R, useForm, useLoading, useMessage, useRemoteData, useTranslation } from '@components';\nimport { IJobHasContractor } from '@models';\nimport { goToJobRequirements } from '../routes';\n\nimport './JobNotifyInformationLoaded.scss';\n\nexport interface IProps {\n getJobContractors: Function;\n jobId: number;\n jobNotifyInformationLoaded: Function;\n workId: number;\n}\n\ntype FormData = {\n remarks?: string;\n}\n\nexport function JobNotifyInformationLoaded(props: IProps) {\n const loading = useLoading();\n const msg = useMessage();\n const { t } = useTranslation();\n\n const contractors = useRemoteData(props.getJobContractors, {\n parameters: [props.workId, props.jobId]\n });\n\n const form = useForm({\n initialValues: {\n remarks: '',\n },\n });\n\n const notify = loading.wrap(async () => {\n const res = await props.jobNotifyInformationLoaded(\n props.workId,\n props.jobId,\n form.values.remarks,\n );\n\n msg.set(res);\n\n if (res.hasValue) {\n goToJobRequirements(props.workId, props.jobId, { reload: true });\n }\n });\n\n const cancel = () => {\n goToJobRequirements(props.workId, props.jobId);\n }\n\n return
\n \n\n
\n
\n {t('job.notify-information-loaded.message')}\n
\n
\n {(contractors.value ?? []).map(c =>\n
\n {c.contractor?.name}\n {c.jobsDescription}\n
)}\n
\n\n {(![21, 23].includes(props.workId)) &&\n
\n
\n \n {form.textarea('remarks', { autoFocus: true, rows: 5 })}\n
\n
}\n
\n\n {msg.renderIfError()}\n\n
\n {contractors.renderLoading()}\n {loading.render()}\n
\n \n \n
\n
\n
\n}","import * as React from 'react';\nimport { connect } from 'react-redux';\nimport { ApplicationState } from '../../store';\nimport * as JobsStore from '../../store/jobs';\nimport { ManageJobMachineries } from '../../components/jobs/ManageJobMachineries';\nimport { hasPermission } from '../../utils/security';\nimport { isMachineryPropertyGroupType } from '../../models';\n\nexport default connect(\n (state: ApplicationState, props: any) => ({\n ...JobsStore.plainActions,\n ...state.identity,\n ...state.user,\n ...state.jobs,\n propertyGroupTypes: state.user.propertyGroupTypes.filter(isMachineryPropertyGroupType),\n hasPermission: (p: string, explicit: boolean | undefined = undefined) => hasPermission(p, {\n user: state.identity?.user,\n work: state.user.work,\n job: state.jobs.selectedJob,\n explicit: explicit ?? true,\n }),\n resourceStatusTypes: state.user.resourceStatusTypes,\n workSettings: state.user.work?.settingsObj,\n contractorId: props.contractorId,\n jobHasContractorId: props.jobHasContractorId ?? state.jobs.selectedJobHasContractor?.id,\n moduleManager: state.modules.moduleManager,\n }),\n JobsStore.actionCreators,\n)(ManageJobMachineries as any) as any;\n","import * as React from 'react';\nimport { connect } from 'react-redux';\nimport { ApplicationState } from '../../store';\nimport * as JobsStore from '../../store/jobs';\nimport { AddJobHasMachinery } from '../../components/machineries/AddJobHasMachinery';\nimport { hasPermission } from '../../utils/security';\nimport { isMachineryPropertyGroupType } from '../../models';\n\nexport default connect(\n (state: ApplicationState) => ({\n ...JobsStore.plainActions,\n ...state.identity,\n ...state.user,\n propertyGroupTypes: state.user.propertyGroupTypes.filter(isMachineryPropertyGroupType),\n hasPermission: (p: string, explicit: boolean|undefined = undefined) => hasPermission(p, {\n user: state.identity?.user,\n work: state.user.work,\n job: state.jobs.selectedJob,\n explicit: explicit ?? true,\n }),\n resourceStatusTypes: state.user.resourceStatusTypes,\n\n }),\n JobsStore.actionCreators,\n)(AddJobHasMachinery as any) as any;","import * as React from 'react';\n\nimport {\n Select, useTranslation, useLoading, useMessage, useStringState, useNumberState, useObjectState, F, useWorkFormSettings , useSearch\n} from '@components';\nimport {\n IJobHasMachinery, IJob, IMachinerySubType, IMachineryType,\n IPropertyGroupType, PropertyGroupObjectType, IWork, ISecurity\n} from '@models';\nimport { DynamicProperties } from '@components/user/DynamicProperties';\n\nimport './AddJobHasMachinery.scss';\n\nexport interface IProps {\n hasPermission: Function;\n job: IJob;\n machineryTypes: IMachineryType[],\n onChange: Function;\n saveJobHasMachinery: Function;\n propertyGroupTypes: IPropertyGroupType[];\n workId: number;\n work: IWork;\n security: ISecurity;\n jobHasContractorId: number;\n}\n\nexport function AddJobHasMachinery(props: IProps) {\n const { t } = useTranslation();\n const messages = useMessage({\n successMessage: t('Machinery added successfully'),\n });\n const loading = useLoading();\n\n const settings = useWorkFormSettings({ work: props.work, scope: 'machinery' });\n\n const [subTypes, setSubTypes] = React.useState([]);\n\n const machineName = useStringState();\n const machineCode = useStringState();\n const prefixNumber = useStringState();\n const licenseNumber = useStringState();\n const suffixLicenseNumber = useStringState();\n\n const selectedMachineryType = useNumberState();\n const selectedSubType = useNumberState();\n const addRecord = useObjectState({ properties: [] });\n\n React.useEffect(() => {\n selectedSubType.set(undefined);\n\n if (selectedMachineryType.value) {\n const mt = props.machineryTypes.find(mt => mt.id == selectedMachineryType.value);\n setSubTypes(mt?.subTypes ?? []);\n }\n else {\n setSubTypes([]);\n }\n }, [selectedMachineryType.value]);\n\n const doAdd = loading.wrap(async (..._: any) => {\n const newRecord: IJobHasMachinery = {\n ...addRecord.value,\n jobId: props.job.id,\n startDate: new Date(),\n machineryName: machineName.value,\n machineryCode: machineCode.value,\n machineryPrefixLicenseNumber: prefixNumber.value,\n machineryLicenseNumber: licenseNumber.value,\n machinerySuffixLicenseNumber: suffixLicenseNumber.value,\n machineryTypeId: selectedMachineryType.value,\n machinerySubTypeId: selectedSubType.value,\n jobHasContractorId : selectedJobHasContractor.value,\n };\n\n const resp = await props.saveJobHasMachinery(props.workId, props.job.id, newRecord, selectedJobHasContractor.value);\n messages.set(resp);\n\n if (resp.error == undefined && resp.hasValue) {\n selectedMachineryType.clear();\n selectedSubType.clear();\n machineCode.clear();\n machineName.clear();\n prefixNumber.clear();\n licenseNumber.clear();\n suffixLicenseNumber.clear();\n setTimeout(() => {\n props.onChange();\n }, 1000);\n }\n });\n\n const canAdd = (subTypes.length <= 0 || selectedSubType.hasValue())\n && selectedMachineryType.hasValue()\n && (machineCode.value != '')\n && (machineName.value != '')\n && (prefixNumber.value != '')\n && (licenseNumber.value != '')\n && (suffixLicenseNumber.value != '');\n\n type SearchR = {\n parentContractorId?: number;\n parentContractorName?: string;\n jobHasContractorId: number;\n }\n\n const selectedContractor = useNumberState();\n const selectedJobHasContractor = useNumberState(props.jobHasContractorId);\n const [parentContractors, setParentContractors] = React.useState([]);\n\n const searchContractorHasContracts = useSearch({\n search: 'contractorHasContracts.list',\n normalizeKeys: true,\n workId: props.work.id,\n filters: {\n contractorId: selectedContractor.value,\n jobId: props.job.id,\n }\n });\n\n React.useEffect(() => {\n searchContractorHasContracts.doSearch();\n }, [selectedContractor.value]);\n\n const contractors = [\n { id: undefined, name: t('Filter by contractor') } as any\n ].concat(props.job.contractors.map(c => ({ ...c, name: c.contractor.name })));\n\n React.useEffect(() => {\n if(searchContractorHasContracts.value != undefined && searchContractorHasContracts.value.length > 0){\n const parentContractors = searchContractorHasContracts.value.map((c: any) => ({\n parentContractorId: c.parentContractorId,\n parentContractorName: calculateLevel(c),\n jobHasContractorId: c.jobHasContractorId,\n }));\n setParentContractors(parentContractors);\n }else{\n setParentContractors([]);\n }\n }, [searchContractorHasContracts.value]);\n\n const calculateLevel = (jobHasContractor : SearchR) => {\n let level = 0;\n let parentContractorId = jobHasContractor.parentContractorId;\n while (parentContractorId != undefined) {\n let parentContractor = contractors.find(c => c.id == parentContractorId);\n\n if (parentContractor == undefined) {\n parentContractorId = undefined;\n } else {\n parentContractorId = parentContractor.parentId\n level++;\n }\n }\n\n level--;\n\n return level === -1? t('main contractor') : `${jobHasContractor.parentContractorName} ${t('level')} ${level}`;\n }\n\n return
\n
\n {t('Add new machine')}\n
\n
\n \n\n {subTypes.length > 0 &&\n }\n {settings.show('name') &&\n }\n {settings.show('code') &&\n }\n\n {!props.security.isContractor() && props.jobHasContractorId == undefined &&\n }\n\n {loading.render()}\n\n {props.jobHasContractorId == undefined && selectedContractor.hasValue() &&\n \n }\n\n {/* license plate */}\n \n
\n \n \n \n
\n
\n\n \n\n
\n\n {messages.render()}\n
\n\n
\n \n\n {loading.render()}\n \n {t('Add')}\n \n
\n
\n}","import * as React from 'react';\n\nimport Constants from '../../Constants';\nimport {\n Select, useTranslation, useLoading, useMessage, useNumberState, useObjectState, useSearch\n} from '@components';\nimport {\n IJobHasMachinery, IJob, IMachineryType,\n IPropertyGroupType, PropertyGroupObjectType, IMachinery, ISecurity,\n IJobHasContractor, IWork, IUserIdentity, IMachinerySubType,\n ModuleManager,\n} from '@models';\nimport { DynamicProperties } from '@components/user/DynamicProperties';\nimport { strConcat, getQueryParameter, unique } from '@utils';\n\nexport interface IProps {\n contractorId?: number;\n jobHasContractorId?: number;\n hasPermission: Function;\n machineryTypes: IMachineryType[];\n job: IJob;\n onChange: Function;\n moduleManager: ModuleManager;\n propertyGroupTypes: IPropertyGroupType[];\n saveJobHasMachinery: Function;\n searchMachineries: Function;\n security: ISecurity;\n workId: number;\n work: IWork;\n getJobContractors: Function;\n user: IUserIdentity;\n selectedJobHasContractor?: IJobHasContractor;\n}\n\nconst jobContractor: number = getQueryParameter(\n window.location.search,\n 'jobContractor');\n\ntype IMachineryRow = IMachinery & {\n jobHasContractorId?: number;\n}\n\nexport function SelectJobHasMachinery(props: IProps) {\n const { t } = useTranslation();\n const loading = useLoading();\n const selectedMachineryType = useNumberState();\n const selectedMachinerySubType = useNumberState();\n const selectedMachinery = useNumberState();\n const selectedJobHasContractor = useNumberState();\n const [machineries, setMachineries] = React.useState([]);\n const selectedContractor = useNumberState();\n const addRecord = useObjectState({ properties: [] });\n\n const contractorCurrent = React.useRef();\n const [parentContractors, setParentContractors] = React.useState([]);\n const [availableSubTypes, setAvailableSubTypes] = React.useState([]);\n\n const subContractors = React.useRef([]);\n\n React.useEffect(() => {\n if (props.contractorId != undefined) {\n selectedJobHasContractor.set(props.contractorId);\n }\n\n if (jobContractor != undefined) {\n selectedJobHasContractor.value = jobContractor;\n }\n }, []);\n\n React.useEffect(() => {\n if (props.jobHasContractorId != undefined) {\n const event: Event = new Event('any');\n Object.defineProperty(event, 'target', { writable: true, value: { value: props.jobHasContractorId } });\n selectedJobHasContractor.set(event);\n }\n }, [props.jobHasContractorId]);\n\n // #1126: Maquinas a pessma, cada una la suya\n const canAddSubMachineries = (contractorId: number) => {\n return props.security.isContractor()\n ? (props.selectedJobHasContractor?.contractorId == contractorId\n || (props.work.contractorSettings?.canAddSubMachineries ?? false))\n : true;\n }\n\n const existingMachineries = useSearch({\n workId: props.workId,\n search: 'jobs/existingMachineries',\n filters: {\n jobId: props.job.id,\n workId: props.workId,\n },\n });\n\n const messages = useMessage({\n successMessage: t('Machinery added successfully'),\n autoClear: true,\n });\n\n type SearchR = {\n parentContractorId?: number;\n parentContractorName?: string;\n jobHasContractorId: number;\n }\n\n const searchContractorHasContracts = useSearch({\n search: 'contractorHasContracts.list',\n normalizeKeys: true,\n workId: props.work.id,\n filters: {\n contractorId: selectedContractor.value,\n jobId: props.job.id,\n },\n lazy: true,\n dependencies: [selectedContractor.value],\n });\n\n React.useEffect(() => {\n if (selectedContractor.value != undefined && !props.jobHasContractorId) {\n searchContractorHasContracts.doSearch({\n contractorId: selectedContractor.value,\n jobId: props.job.id,\n });\n }\n }, [selectedContractor.value]);\n\n React.useEffect(() => {\n if (searchContractorHasContracts.value != undefined && searchContractorHasContracts.value.length > 0) {\n const parentContractors = searchContractorHasContracts.value.map((c: any) => ({\n parentContractorId: c.parentContractorId,\n parentContractorName: calculateLevel(c),\n jobHasContractorId: c.jobHasContractorId,\n }));\n setParentContractors(parentContractors);\n } else {\n setParentContractors([]);\n }\n }, [searchContractorHasContracts.value]);\n\n const calculateLevel = (jobHasContractor: SearchR) => {\n let level = 0;\n let parentContractorId = jobHasContractor.parentContractorId;\n while (parentContractorId != undefined) {\n let parentContractor = contractors.find(c => c.id == parentContractorId);\n\n parentContractorId = parentContractor.parentId\n level++;\n }\n\n level--;\n\n return level === -1 ? t('main contractor') : `${jobHasContractor.parentContractorName} ${t('level')} ${level}`;\n }\n\n const contractors = [\n { id: undefined, name: t('Filter by contractor') } as any\n ].concat(props.job.contractors.map(c => ({ ...c, name: c.contractor.name })));\n\n const currentContractor = selectedContractor.hasValue()\n ? contractors.find(c => c.contractorId == selectedContractor.value)\n : contractors.find(c => c.id == props.jobHasContractorId);\n\n const findMachineries = loading.wrap(async (\n machineryTypeId: number | undefined,\n subTypeId: number | undefined = undefined) => {\n\n selectedMachinery.clear();\n const searchContractor: any = currentContractor;\n if (machineryTypeId && searchContractor?.contractor != undefined) {\n let result: IMachinery[] = [];\n const contractors = subContractors\n .current\n .concat([searchContractor]);\n\n for (let i = 0; i < contractors.length; i++) {\n const contractorId = contractors[i].contractorId;\n const jobHasContractorId = contractors[i].id;\n\n if (canAddSubMachineries(contractorId)) {\n const resp = await props.searchMachineries(\n props.workId,\n null,\n machineryTypeId,\n contractorId,\n props.job.id);\n\n const machineriesList = resp\n .map((m: IMachinery) => {\n const licenseNumber = strConcat(\n m.prefixLicenseNumber,\n m.licenseNumber,\n m.suffixLicenseNumber);\n const hasName = m.name && m.name != '';\n const hasCode = m.code && m.code != '';\n let uniqueName = hasName\n ? m.name\n : hasCode\n ? m.code\n : licenseNumber;\n\n if (props.work.settingsObj?.mainContractorCanFulfillSubs\n || (props.work.contractorSettings?.canAddSubMachineries ?? false)) {\n uniqueName = `[${m.contractor?.name}] ${uniqueName}`;\n\n if (Constants.isDebug) {\n uniqueName = `${uniqueName} (id = ${m.id})`;\n }\n }\n return { ...m, name: uniqueName, jobHasContractorId: jobHasContractorId };\n });\n\n result = result.concat(machineriesList);\n }\n }\n\n const excludeMachineries = existingMachineries\n .value.filter(j =>\n j.jobHasContractorId == props.selectedJobHasContractor?.id\n || props.selectedJobHasContractor == undefined)\n .map(j => j.machineryId);\n\n result = unique(result)\n .filter(m => !excludeMachineries.includes(m.id))\n .map(m => ({...m, name: props.moduleManager.format('machinery', m) ?? m.name }));\n\n // .filter(m => m.contractorId === contractorCurrent.current?.contractorId\n // || m.contractorId === currentContractor?.contractorId);\n\n if (subTypeId != undefined) {\n result = result.filter(m => m.machinerySubTypeId == subTypeId);\n }\n\n setMachineries(result);\n }\n else {\n setMachineries([]);\n }\n });\n\n const initialize = async () => {\n const contractors: IJobHasContractor[] = await props.getJobContractors(props.workId, props.job.id);\n const selfJobHasContractor = props.selectedJobHasContractor;\n contractorCurrent.current = selfJobHasContractor;\n\n const subcontractors = contractors.filter(c => c.parentId == selfJobHasContractor?.id);\n const subcontractorIds = subcontractors.map(c => c.contractorId);\n const deepSubcontractors: any = [];\n contractors.map(c => {\n if (subcontractorIds.includes(c.parentId ?? 0)) {\n deepSubcontractors.push(c);\n }\n });\n subContractors.current = subcontractors.concat(deepSubcontractors);\n }\n\n React.useEffect(() => {\n initialize();\n }, []);\n\n React.useEffect(() => {\n findMachineries(selectedMachineryType.value, selectedMachinerySubType.value);\n const mt = props.machineryTypes.find(mt => mt.id == selectedMachineryType.value);\n if (mt != undefined) {\n setAvailableSubTypes(mt\n .subTypes?.sort((a: IMachinerySubType, b: IMachinerySubType) => a.name.localeCompare(b.name)) ?? []);\n }\n }, [selectedMachineryType.value, selectedContractor.value, selectedMachinerySubType.value]);\n\n const doAdd = loading.wrap(async (..._: any) => {\n // const jobHasContractorId = props.selectedJobHasContractor?.id;\n const m = machineries\n .find(d => d.id == selectedMachinery.value)!;\n\n const newRecord: IJobHasMachinery = {\n ...addRecord.value,\n jobId: props.job.id,\n startDate: new Date(),\n machineryId: m.id,\n jobHasContractorId: m.jobHasContractorId ?? selectedJobHasContractor.value ?? jobContractor,\n };\n\n const resp = await props.saveJobHasMachinery(\n props.workId,\n props.job.id,\n newRecord,\n selectedJobHasContractor.value || jobContractor);\n\n messages.set(resp);\n\n if (messages.isSuccess()) {\n selectedMachineryType.clear();\n selectedMachinery.clear();\n }\n\n if (resp.error == undefined && resp.hasValue) {\n setTimeout(() => {\n props.onChange();\n }, 1000);\n }\n });\n\n const canAdd = selectedMachineryType.hasValue() && selectedMachinery.hasValue();\n\n const machineryTypes = props\n .machineryTypes\n .sort((a: IMachineryType, b: IMachineryType) => a.name.localeCompare(b.name));\n\n return
\n
\n {t('Select machinery')}\n
\n\n
\n \n\n {availableSubTypes.length > 0 &&\n }\n\n {!props.security.isContractor() && props.jobHasContractorId == undefined &&\n }\n\n {(props.jobHasContractorId == undefined && selectedContractor.hasValue()) &&\n \n }\n\n \n\n {selectedMachinery.hasValue() &&\n }\n\n
\n\n {messages.render()}\n
\n
\n \n {loading.renderBox()}\n\n \n {t('Add')}\n \n
\n
\n}\n","import * as React from 'react';\nimport { connect } from 'react-redux';\nimport { ApplicationState } from '@store';\nimport * as JobsStore from '@store/jobs';\nimport { SelectJobHasMachinery } from '@components/machineries/SelectJobHasMachinery';\nimport { hasPermission } from '@utils/security';\nimport { isMachineryPropertyGroupType } from '@models';\nimport * as U from '@utils';\n\nexport default connect(\n (state: ApplicationState, props: any) => ({\n ...JobsStore.plainActions,\n ...state.identity,\n ...state.user,\n ...state.jobs,\n propertyGroupTypes: state.user.propertyGroupTypes.filter(isMachineryPropertyGroupType),\n hasPermission: (p: string, explicit: boolean | undefined = undefined) => hasPermission(p, {\n user: state.identity?.user,\n work: state.user.work,\n job: state.jobs.selectedJob,\n explicit: explicit ?? true,\n }),\n moduleManager: state.modules.moduleManager,\n resourceStatusTypes: state.user.resourceStatusTypes,\n contractorId: props.contractorId,\n jobHasContractorId: props.jobHasContractorId ?? state.jobs.selectedJobHasContractor?.id ?? U.getQueryParameter(window.location.search, 'jobContractor', { map: parseInt })\n }),\n JobsStore.actionCreators,\n)(SelectJobHasMachinery as any) as any;\n","import * as React from 'react';\n\nimport {\n G, useForm, useLoading, useToast, useRemoteData, useTranslation, Portal, Panel,\n ValidationBuilder, useDialogs, RequirePermission, useResolveName, useSearchFirst\n} from '@components';\nimport { DynamicProperties } from '@components/user/DynamicProperties';\nimport {\n IJob, IJobHasWorker, IPropertyGroup, IPropertyGroupType, ISecurity, IWork, PropertyGroupObjectType, ResourceType\n} from '@models';\nimport ForceValidationResourceContainer from '@containers/requirements/ForceValidationResourceContainer';\nimport { redirectTo } from '@utils';\nimport { IContractor, IWorkerDocumentType, IWorkerType } from '@models/resources';\nimport { ResourceStatus } from '@components/common/ResourceStatus';\n\nexport interface IProps {\n getJobHasWorker: (workId: number, jobId: number, relationId: number) => Promise,\n jobHasWorker: IJobHasWorker;\n onCancel: Function;\n onSuccess: Function;\n propertyGroupTypes: IPropertyGroupType[];\n saveJobHasWorker: Function;\n security: ISecurity;\n work: IWork;\n job: IJob;\n jobHasContractorId?: number;\n workerTypes: IWorkerType[];\n workerDocumentTypes: IWorkerDocumentType[];\n}\n\ntype FormData = Partial;\n\nenum FormType {\n Data = 0,\n}\n\nexport const validateJobWorkerData = (data: IJobHasWorker) => {\n return ValidationBuilder.create(data).notEmpty('name').build();\n}\n\nexport function EditJobHasWorker(props: IProps) {\n const loading = useLoading();\n const { t } = useTranslation();\n const toast = useToast();\n const dialogs = useDialogs();\n\n const resolveWorkerType = useResolveName(props.workerTypes);\n const resolveWorkerDocumentType = useResolveName(props.workerDocumentTypes);\n\n const contractorData = useSearchFirst({\n workId: props.work.id,\n search: 'workers/contractor.get',\n filters: {\n contractorId: props.jobHasWorker.worker?.contractorId\n }\n });\n\n const jobHasWorker = useRemoteData(\n props.getJobHasWorker, {\n parameters: [props.work.id, props.jobHasWorker.jobId, props.jobHasWorker.id]\n });\n\n const [formType, setFormType] = React.useState(FormType.Data);\n\n const save = loading.wrap(async (req: FormData) => {\n req.jobHasContractorId = props.jobHasContractorId;\n const resp = await props.saveJobHasWorker(props.work.id, req);\n\n if (resp.hasValue) {\n toast.show(t('Worker saved successfully'));\n return { ok: true };\n }\n else {\n return { ok: false, message: resp.error };\n }\n });\n\n const doSave = (..._: any) => {\n save(form.values);\n }\n\n const loadRequirements = () => {\n redirectTo(`/work/${props.work.id}/jobs/${props.job.id}/worker/${props.jobHasWorker.id}/requirements`);\n }\n\n const form = useForm({\n initialValues: {\n id: props.jobHasWorker.id,\n jobId: props.jobHasWorker.jobId,\n startDate: props.jobHasWorker.startDate,\n workerId: props.jobHasWorker.workerId,\n fullName: props.jobHasWorker.fullName,\n properties: props.jobHasWorker.properties ?? [],\n },\n onSubmit: function(data: FormData) {\n return save(data);\n }\n });\n\n return
\n \n \n
\n \n \n \n
\n {props.jobHasWorker.fullName}\n
}>\n
\n \n \n \n \n \n
\n \n \n\n \n
    \n
  • {props.jobHasWorker.fullName}
  • \n
\n
\n\n {dialogs.render('force-validation', { title: t('Force resource validation'), className: 'g pd' }, () =>\n \n )}\n\n {jobHasWorker.renderLoading()}\n\n {toast.render()}\n\n {formType == FormType.Data && <>\n
\n {t('Edit worker')}\n
\n
\n
\n \n {resolveWorkerDocumentType(props.jobHasWorker.worker?.workerDocumentTypeId)}\n \n \n {props.jobHasWorker.worker?.code}\n \n \n {props.jobHasWorker.worker?.name}\n \n \n {props.jobHasWorker.worker?.surname}\n \n \n {resolveWorkerType(props.jobHasWorker.worker?.workerTypeId)}\n \n \n {contractorData?.value?.name}\n \n {/* \n {form.input('startDate', {type:'date'})}\n */}\n
\n
\n form.setFieldValue('properties', v)}\n readonly />\n
\n
\n
\n
\n \n
\n props.onCancel()}>\n {t('Cancel')}\n \n \n {t('Save')}\n \n
\n
\n }\n
\n}\n","import * as React from 'react';\n\nimport { connect } from 'react-redux';\nimport { ApplicationState } from '@store/index';\nimport * as JobsStore from '@store/jobs';\nimport { EditJobHasWorker } from '@components/jobs/EditJobHasWorker';\nimport { isWorkerPropertyGroupType } from '@models';\n\nexport default connect(\n (state: ApplicationState) => ({\n ...state.identity,\n ...JobsStore.plainActions,\n propertyGroupTypes: state.user.work?.propertyGroupTypes?.filter(isWorkerPropertyGroupType),\n resourceStatusTypes: state.user.resourceStatusTypes,\n workerTypes: state.user.workerTypes,\n workerDocumentTypes: state.user.workerDocumentTypes,\n }),\n JobsStore.actionCreators,\n)(EditJobHasWorker as any) as any; // eslint-disable-line @typescript-eslint/no-explicit-any\n","import * as React from 'react';\n\nimport {\n BreadcrumbItem, Tag,\n useConfirm,\n useDataTable, useLoading, useSearch, useTranslation,\n useScheduler, useSignalR, useDialogs, useSearchFilters, Portal, usePermissions, onChange, Tooltip\n} from '@components';\nimport {\n IJob, IJobHasWorker, IResourceStatusType, ISecurity,\n IUserIdentity, IWork, IWorkSettings, IWorker, ModuleManager, ResourceType\n} from '@models';\nimport EditJobHasWorkerContainer from '@containers/jobs/EditJobHasWorkerContainer';\n\nimport './ManageJobWorkers.scss';\nimport { redirectTo } from '@utils';\nimport { IWorkerDocumentType, IWorkerType, ResourceStatusType, resourceStatusTypes } from '@models/resources';\nimport { ResourceStatus } from '@components/common/ResourceStatus';\nimport ForceValidationResourceContainer from '@containers/requirements/ForceValidationResourceContainer';\nimport { IRequirementNotification } from '@models/requirements';\nimport { IJobHasContractor } from '@models';\n\nexport interface IProps {\n activateJobHasWorker: Function;\n jobHasContractorId?: number;\n getJobHasWorkers: Function;\n job: IJob;\n jobHasWorker?: IJobHasWorker;\n relationId?: number;\n resourceStatusTypes: IResourceStatusType[];\n security: ISecurity;\n work: IWork;\n workSettings: IWorkSettings;\n workers: IWorker[];\n removeJobHasWorker: Function;\n deleteJobHasWorker: Function;\n refreshWorkers: Function;\n appUsers: IUserIdentity[];\n workerTypes: IWorkerType[];\n workerDocumentTypes: IWorkerDocumentType[];\n selectedJobHasContractor?: IJobHasContractor;\n moduleManager: ModuleManager;\n}\n\nenum FormType {\n List = 0,\n Worker = 1,\n}\n\ntype IJobHasWorkerR = IJobHasWorker & {\n workerFullName: string;\n workerCode: string;\n workerContractorName: string;\n workerContractorId: number;\n\n validatedCount?: number;\n totalCount?: number;\n}\n\nexport function ManageJobWorkers(props: IProps) {\n const { t } = useTranslation();\n const dialogs = useDialogs();\n const loading = useLoading();\n\n const [canRemoveState, setCanRemoveState] = React.useState(false);\n\n const [canValidateState, setCanValidateState] = React.useState(false);\n\n const filters = useSearchFilters({\n security: props.security,\n workId: props.work.id,\n name: 'workers/manageJobWorkers',\n persist: true,\n references: {\n resourceStatusTypes: resourceStatusTypes,\n },\n });\n\n const query = useSearch({\n workId: props.work.id,\n lazy: true,\n search: 'jobs/workers',\n normalizeKeys: true,\n filters: filters.merge({\n jobId: props.job.id,\n workId: props.work.id,\n jobHasContractorId: props.relationId ?? props.selectedJobHasContractor?.id ?? props.jobHasContractorId,\n onlyMainContractors: props.security.isGestorOrWorker() && props.jobHasContractorId == undefined\n ? true\n : undefined,\n }),\n });\n\n const [formType, setFormType] = React.useState(\n props.jobHasWorker ? FormType.Worker : FormType.List);\n\n const [selectedWorker, setSelectedWorker] = React.useState(props.jobHasWorker);\n\n const doRemoveWorker = loading.wrap(async (i: IJobHasWorker) => {\n await props.removeJobHasWorker(props.work.id, props.job.id, i.id);\n props.refreshWorkers();\n await reload();\n });\n\n React.useEffect(() => {\n reload();\n }, [filters.signature, props.job]);\n\n const confirmRemove = useConfirm({\n message: t('Are you sure to finalize worker from this job?'),\n accept: doRemoveWorker\n });\n\n const doDeleteWorker = loading.wrap(async (i: IJobHasWorker) => {\n await props.deleteJobHasWorker(props.work.id, props.job.id, i.id);\n props.refreshWorkers();\n await reload();\n });\n\n const confirmDelete = useConfirm({\n message: t('Are you sure you want to remove the worker from this job?'),\n accept: doDeleteWorker\n });\n\n const reload = async () => {\n await query.doSearch() ?? [];\n const workers = query.value ?? [];\n if (selectedWorker) {\n const worker = workers.find(w => w.id == selectedWorker.id);\n setSelectedWorker(worker);\n }\n }\n\n const canRemove = props.security.hasPermission('jobHasWorker.remove')\n\n const calculateCanRemove = async () => {\n const res = await props.moduleManager.requirePermission('jobHasWorker.remove', {\n work: props.work,\n security: props.security\n }, canRemove);\n\n setCanRemoveState(res ?? false);\n };\n\n React.useEffect(() => {\n calculateCanRemove();\n }, []);\n\n const canValidate = props.security.hasPermission('jobs.resources.validate');\n\n const calculateCanValidate = async () => {\n const res = await props.moduleManager.requirePermission('jobs.resources.validate', {\n work: props.work,\n security: props.security\n }, canValidate);\n\n setCanValidateState(res ?? false);\n };\n\n React.useEffect(() => {\n calculateCanValidate();\n }, []);\n\n React.useEffect(() => {\n if (selectedWorker) {\n setFormType(FormType.Worker);\n }\n else {\n setFormType(FormType.List);\n }\n }, [selectedWorker]);\n\n const [workers, setWorkers] = React.useState([]);\n\n const workSettings: IWorkSettings | undefined = props.work.settingsObj;\n const HideByDefaultEnded = workSettings?.hideByDefaultEnded ?? false;\n\n React.useEffect(() => {\n if (HideByDefaultEnded && filters.filters.resourceStatusTypes != 3) {\n const filteredContractors = query.value.filter((c: IJobHasWorkerR) => c.currentStatusType !== 3);\n setWorkers(filteredContractors);\n } else {\n setWorkers(query.value ?? []);\n }\n }, [query.value]);\n\n const renderStatus = (s: IJobHasWorker) =>\n ;\n\n const reactivateJobHasWorker = loading.wrap(async (s: IJobHasWorker) => {\n await props.activateJobHasWorker(props.work.id, props.job.id, s.workerId!, s.id);\n reload();\n });\n\n const canShowDocumentation = (w: IJobHasWorkerR) =>\n props.security.isContractor()\n // && props.workSettings.mainContractorCanFulfillSubs == true\n ? true\n // : props.security.isContractor()\n // ? w.workerContractorId == selfContractorId\n : true;\n\n const perms = usePermissions(props, {}, {\n 'removeWorker': 'job.workers.remove',\n });\n\n const createId = (name: string) => {\n return `i${name.replace(/[\\s\\W]+/g, '').toLowerCase()}`;\n }\n\n const dataTable = useDataTable({\n tooltip: true,\n columns: [\n { title: t('workerCode'), field: 'workerCode', className: 'td-md', sortKey: 'workerCode', },\n { title: t('Name'), field: 'workerFullName', sortKey: 'workerFullName', },\n {\n title: t('Contractor'),\n sortKey: 'workerContractorName',\n render: d => d.workerContractorName\n ? <>\n \n \n \n {d.workerContractorName}\n \n : null,\n className: 'center',\n\n },\n { title: t('AssignmentDate'), field: 'startDate', delegate: 'date', className: 'td-md', sortKey: 'startDate', },\n { title: 'currentStatusType', field: 'currentStatusType', render: renderStatus, className: 'td-md', sortKey: 'currentStatusType', },\n {\n title: t('Documentation'), className: 'td-indicator',\n render: d =>\n canShowDocumentation(d)\n ?
loadRequirements(d.id)} className='pointer'>\n \n
\n : null\n },\n {\n className: 'td-sm',\n render: s => (s.hasDelayedRevokation && props.work.jobSettings?.showResourceIncidenceIndicator)\n ? \n : null,\n },\n ],\n actions: [\n (canRemoveState)\n ? {\n icon: d => d.currentStatusType == ResourceStatusType.FINALIZED\n ? 'fas fa-redo'\n : 'pi pi-minus-circle',\n onClick: (d, event) => d.currentStatusType == ResourceStatusType.FINALIZED\n ? reactivateJobHasWorker(d)\n : confirmRemove(d, event),\n tooltip: d => d.currentStatusType == ResourceStatusType.FINALIZED\n ? t('Reactivate')\n : t('Finalize job worker')\n }\n : undefined,\n (perms.get('removeWorker'))\n ? { icon: 'trash', onClick: confirmDelete, tooltip: t('Remove job worker') }\n : undefined,\n (canValidateState && !props.security.isContractor())\n ? {\n icon: 'pi pi-check-square',\n tooltip: t('Force resource validation'),\n onClick: r => dialogs.showFromEvent('force-validation', r)()\n }\n : undefined,\n ],\n data: workers,\n loading: query.loading,\n });\n\n const loadRequirements = (id: number) => {\n redirectTo(`/work/${props.work.id}/jobs/${props.job.id}/worker/${id}/requirements`);\n }\n\n const scheduler = useScheduler();\n\n const _ = useSignalR({\n method: 'RequirementNotification',\n onMessage: r => {\n if (r.workId == props.work.id\n && (r.resourceType == ResourceType.JobHasWorker\n || r.resourceType == ResourceType.Worker)) {\n // scheduler.schedule(reload, 1500);\n }\n }\n });\n\n return
\n \n
\n {filters.renderAsButton({ className: 'fas fa-filter pointer' })}\n
\n
\n setFormType(FormType.List)} />\n\n {dialogs.render('force-validation', { title: t('Force resource validation') }, (d: IJobHasWorker) =>\n {\n dialogs.clear();\n reload();\n }}\n resourceType={ResourceType.JobHasWorker}\n resourceId={d.id} />\n )}\n\n {formType === FormType.List && <>\n {dataTable()}\n }\n {formType === FormType.Worker &&
\n {selectedWorker &&\n setSelectedWorker(undefined)}\n onSuccess={() => reload()}\n work={props.work} />}\n
}\n
\n}\n","import * as React from 'react';\nimport { connect } from 'react-redux';\nimport { ApplicationState } from '../../store';\nimport * as JobsStore from '../../store/jobs';\nimport { ManageJobWorkers } from '../../components/jobs/ManageJobWorkers';\n\nexport default connect(\n (state: ApplicationState, props: any) => ({\n ...state.identity,\n ...state.user,\n ...JobsStore.plainActions,\n ...state.jobs,\n workSettings: state.user.work?.settingsObj,\n jobHasContractorId: props.jobHasContractorId ?? state.jobs.selectedJobHasContractor?.id,\n moduleManager: state.modules.moduleManager,\n }),\n JobsStore.actionCreators,\n)(ManageJobWorkers as any) as any;\n","import * as React from 'react';\n\nimport {\n IJob, IWork, IPropertyGroup, PropertyGroupObjectType, IPropertyGroupType,\n IJobHasContractor,\n IJobHasWorker, IWorker, IPaginateResult, ISecurity, IUserIdentity, ModuleManager,\n} from '@models';\nimport {\n Accordion, AccordionTab, F,\n useDataTable, useForm, useLoading, useSearch, useStringState, useTranslation,\n ValidationBuilder, Select, useNumberState, usePermissions,\n} from '@components';\nimport { unique } from '@utils';\nimport DateUtils from '@utils/date-utils';\nimport { DynamicProperties } from '@components/user/DynamicProperties';\nimport { BreadcrumbItem } from '@components/custom/BreadcrumbItem';\n\nexport interface IProps {\n contractorId?: number;\n job: IJob;\n jobHasContractorId?: number;\n selectedJobHasContractor?: IJobHasContractor;\n getJobHasContractor: Function;\n propertyGroupTypes: IPropertyGroupType[];\n onCancel: Function;\n onSuccess: Function;\n saveJobHasWorker: Function;\n searchWorkers: Function;\n security: ISecurity;\n work: IWork;\n getJobContractors: Function;\n user: IUserIdentity;\n moduleManager: ModuleManager;\n}\n\nconst validateJobHasWorker = (data: Partial) => {\n return ValidationBuilder\n .create(data)\n .notEmpty('startDate', 'Date is required')\n .build();\n}\n\nconst isValid = (data: Partial) => {\n return Object.keys(validateJobHasWorker(data)).length == 0;\n}\n\ntype IExistingWorkerR = {\n workerId: number;\n}\n\ntype IWorkerRow = IWorker & {\n contractorName?: string;\n jobHasContractorId?: number;\n}\n\nfunction JobAddWorkerImpl(props: IProps) {\n const { t } = useTranslation();\n const currentSearchTerm = useStringState();\n const loading = useLoading(false);\n\n const viewParentSelector = () => props.user?.roles.includes('gestor')\n //TODO remove key\n const showProperties = props.work.id != 23;\n\n const subContractors = React.useRef([]);\n const activeContractor = React.useRef();\n\n const [activeIndex, setActiveIndex] = React.useState(0);\n const [workers, setWorkers] = React.useState>({\n total: 0,\n data: [],\n page: 0,\n limit: 20\n });\n const [selectedWorker, setSelectedWorker] = React.useState();\n const [parentContractors, setParentContractors] = React.useState([]);\n const selectedJobHasContractor = useNumberState();\n\n type SearchR = {\n parentContractorId?: number;\n parentContractorName?: string;\n jobHasContractorId: number;\n }\n\n // #1125: Trabajadores a pessma, cada una la suya\n const canAddSubWorkers = props.security.isContractor()\n ? (props.work.contractorSettings?.canAddSubWorkers ?? false)\n : true;\n\n const searchContractorHasContracts = useSearch({\n search: 'contractorHasContracts.list',\n normalizeKeys: true,\n workId: props.work.id,\n filters: {\n contractorId: selectedWorker?.contractor?.id,\n jobId: props.job.id,\n },\n lazy: true,\n dependencies: [selectedWorker?.contractor?.id, props.job.id]\n });\n\n React.useEffect(() => {\n if (selectedWorker?.contractor?.id != undefined && viewParentSelector()) {\n searchContractorHasContracts.doSearch({\n contractorId: selectedWorker?.contractor?.id,\n jobId: props.job.id\n });\n }\n }, [selectedWorker?.contractor?.id]);\n\n React.useEffect(() => {\n if (searchContractorHasContracts.value != undefined\n && searchContractorHasContracts.value.length > 0\n && viewParentSelector()) {\n const parentContractors = searchContractorHasContracts.value.map((c: any) => ({\n parentContractorId: c.parentContractorId,\n parentContractorName: calculateLevel(c),\n jobHasContractorId: c.jobHasContractorId,\n }));\n setParentContractors(parentContractors);\n } else {\n setParentContractors([]);\n }\n }, [searchContractorHasContracts.value]);\n\n const contractors = [\n { id: undefined, name: t('Filter by contractor') } as any\n ].concat(props.job.contractors.map(c => ({ ...c, name: c.contractor.name })));\n\n const calculateLevel = (jobHasContractor: SearchR) => {\n let level = 0;\n let parentContractorId = jobHasContractor.parentContractorId;\n while (parentContractorId != undefined) {\n let parentContractor = contractors.find(c => c.id == parentContractorId);\n if (parentContractor != undefined) {\n parentContractorId = parentContractor.parentId\n }\n else {\n parentContractorId = undefined;\n }\n level++;\n }\n\n level--;\n\n return level === -1\n ? t('main contractor')\n : `${jobHasContractor.parentContractorName} ${t('level')} ${level}`;\n }\n\n const existingWorkers = useSearch({\n workId: props.work.id,\n search: 'jobs/existingWorkers',\n filters: {\n jobId: props.job.id,\n workId: props.work.id,\n },\n });\n\n const initializeForWorkers = async () => {\n const contractors: IJobHasContractor[] = await props.getJobContractors(props.work.id, props.job.id);\n subContractors.current = contractors;\n }\n\n const initializeForContractors = async () => {\n const contractors: IJobHasContractor[] = await props.getJobContractors(props.work.id, props.job.id);\n const selectedContractor = props.selectedJobHasContractor;\n activeContractor.current = selectedContractor;\n const subcontractors = contractors.filter(c => c.parentId == selectedContractor?.id);\n const subcontractorIds = subcontractors.map(c => c.contractorId);\n const deepSubcontractors: any = [];\n contractors.map(c => {\n if (subcontractorIds.includes(c.parentId ?? 0)) {\n deepSubcontractors.push(c);\n }\n });\n subContractors.current = subcontractors.concat(deepSubcontractors);\n }\n\n const initialize = () => {\n if (props.security.isContractor()) {\n return initializeForContractors();\n }\n else {\n return initializeForWorkers();\n }\n };\n\n React.useEffect(() => {\n initialize();\n }, []);\n\n const doSearch = loading.wrap(async (term: string | undefined) => {\n const jobHasContractors =\n props.security.isContractor() && canAddSubWorkers && props.selectedJobHasContractor\n ? subContractors.current.concat([props.selectedJobHasContractor])\n : props.security.isContractor() && props.selectedJobHasContractor\n ? [props.selectedJobHasContractor]\n : props.security.isContractor()\n ? []\n : subContractors.current;\n\n let data: any = [];\n\n for (const jhc of jobHasContractors) {\n const res = await props.searchWorkers(\n props.work.id,\n term,\n props.job.id,\n jhc.contractorId);\n data = data.concat(res.data.map((w: IWorker) => ({\n ...w,\n contractorName: jhc.contractor?.name,\n jobHasContractorId: jhc.id\n })));\n }\n\n const excludeWorkers = existingWorkers\n .value?.filter((w: IJobHasWorker) =>\n w.jobHasContractorId == props.selectedJobHasContractor?.id\n || props.selectedJobHasContractor == undefined)?.map((w: IJobHasWorker) => w.workerId) ?? [];\n\n const workers = unique(data)\n .filter(w => w.contractorId != undefined && !excludeWorkers.includes(w.id));\n\n setWorkers({\n ...data,\n data: workers,\n });\n });\n\n React.useEffect(() => {\n doSearch(currentSearchTerm.value);\n }, [existingWorkers.value, currentSearchTerm.value]);\n\n React.useEffect(() => {\n setActiveIndex(selectedWorker ? 1 : 0);\n }, [selectedWorker]);\n\n const saveWorkerRelation = loading.wrap(async (data: Partial) => {\n const resp = await props.saveJobHasWorker(props.work.id, data);\n if (resp.hasValue) {\n props.onSuccess('Worker added successfully');\n return { ok: true };\n }\n else {\n return { ok: false, message: resp.error };\n }\n });\n\n const form = useForm>({\n initialValues: {\n jobId: props.job.id,\n properties: [],\n startDate: DateUtils.toIso8601(new Date()),\n },\n validate: (data: Partial) => {\n return validateJobHasWorker(data);\n },\n onSubmit: (data: Partial) => {\n data.workerId = selectedWorker?.id;\n data.jobHasContractorId =\n selectedWorker?.jobHasContractorId\n ?? props.jobHasContractorId\n ?? selectedJobHasContractor.value;\n return saveWorkerRelation(data);\n },\n });\n\n const workersTable = useDataTable({\n columns: [\n { title: t('workerCode'), field: 'code', sortKey: 'code' },\n { title: t('name'), field: 'name', sortKey: 'name' },\n { title: t('surname'), field: 'surname', sortKey: 'surname' },\n { title: t('Contractor'), field: 'contractor', sortKey: 'contractor', render: d => d.contractor?.name }\n ],\n actions: [\n { text: 'Select', headerStyle: { width: '116px' }, className: 'alt slim', onClick: setSelectedWorker }\n ],\n data: workers?.data,\n });\n\n return <>\n \n {t('Add worker')}\n \n setActiveIndex(e.index)}>\n \n
\n
\n \n {loading.render()}\n {existingWorkers.renderLoading()}\n
\n {!existingWorkers.loading.isLoading() &&\n workersTable()\n }\n
\n
\n \n {selectedWorker &&\n \n
\n
\n \n \n \n {selectedWorker?.name}\n \n \n {selectedWorker?.surname}\n \n \n \n \n \n \n {selectedWorker?.contractor?.name}\n \n \n \n {viewParentSelector() && \n \n }\n
\n {form.errorBox()}\n
\n
\n\n {showProperties &&
\n form.setFieldValue('properties', properties)} />\n
}\n
\n
\n
\n \n
\n props.onCancel()}>\n {t('Cancel')}\n \n \n {t('Create')}\n \n
\n
\n }\n
\n \n ;\n}\n\n\nexport function JobAddWorker(props: IProps) {\n const ctx = {\n BreadcrumbItem: BreadcrumbItem\n }\n\n if (props.user.roles.includes('gestor')) {\n return JobAddWorkerImpl(props);\n }\n\n const res = props\n .moduleManager\n .renderComponent('JobAddWorker', { ...props, ctx }, JobAddWorkerImpl);\n\n return res;\n}\n","import * as React from 'react';\n\nimport { connect } from 'react-redux';\nimport { ApplicationState } from '@store/index';\nimport * as JobsStore from '@store/jobs';\nimport { JobAddWorker } from '@components/jobs/JobAddWorker';\nimport { isWorkerPropertyGroupType } from '@models';\nimport * as U from '@utils';\n\nexport default connect(\n (state: ApplicationState) => ({\n ...JobsStore.plainActions,\n propertyGroupTypes: state.user.work?.propertyGroupTypes?.filter(isWorkerPropertyGroupType),\n contractorId: state.jobs.selectedJobHasContractor?.contractorId,\n jobHasContractorId: U.getQueryParameter(\n window.location.search,\n 'jobContractor', { map: parseInt }\n ) ?? state.jobs.selectedJobHasContractor?.id,\n ...state.identity?.security,\n ...state.identity,\n ...state.jobs,\n moduleManager: state.modules.moduleManager,\n }),\n JobsStore.actionCreators,\n)(JobAddWorker as any) as any; // eslint-disable-line @typescript-eslint/no-explicit-any\n","import * as React from 'react';\nimport { connect } from 'react-redux';\n\nimport { ApplicationState } from '../../store';\nimport * as JobsStore from '@store/jobs';\nimport * as RequirementStore from '@store/requirements';\n\nimport { UploadRequirement } from '@components/jobs/UploadRequirement';\n\nexport default connect(\n (state: ApplicationState) => ({\n ...state.user,\n ...state.identity,\n ...JobsStore.plainActions,\n ...RequirementStore.plainActions,\n }),\n JobsStore.actionCreators,\n)(UploadRequirement as any) as any; // eslint-disable-line @typescript-eslint/no-explicit-any\n","import * as React from 'react';\n\nimport { BreadcrumbItem, G, ValidationBuilder, useForm, useLoading, useTranslation, useMessage, } from '@components';\nimport { IOption, ISecurity } from '@models';\nimport { IRequirementFulfillData, IRequirementFulfillDocument, RequirementTargetType } from \"@models/requirements\";\nimport { goToJobEditContractorRequirements, goToJobEditMachineryRequirements, goToJobEditWorkerRequirements, goToJobMachineries, goToJobRequirements } from '../routes';\nimport { formatFileSize } from '@utils';\n\nimport './CreateRequirement.scss';\n\ntype CreateT = (\n workId: number,\n jobId: number,\n data: IRequirementFulfillData,\n resourceType: number | undefined,\n resourceId: number | undefined,\n statusType: number | undefined) => Promise>;\n\ntype CreateData = {\n title: string,\n remarks?: string,\n jobId: number,\n workId: number,\n}\n\nexport interface IProps {\n createFreeRequirement: CreateT;\n jobId: number;\n security: ISecurity;\n workId: number;\n\n resourceType?: number;\n resourceId?: number;\n statusType?: number;\n}\n\nexport function UploadRequirement(props: IProps) {\n const loading = useLoading();\n const msg = useMessage();\n const { t } = useTranslation();\n\n const [data, setData] = React.useState();\n\n const form = useForm({\n initialValues: {\n jobId: props.jobId,\n title: '',\n remarks: '',\n workId: props.workId,\n },\n validateOnMount: true,\n validate: ValidationBuilder.new().notEmpty('title').lift(),\n });\n\n const cancel = () => goToJobRequirements(props.workId, props.jobId);\n\n const fileToData = (f: any) => {\n const doc: IRequirementFulfillDocument = {\n resourceId: f,\n name: f.name,\n fileSize: f.size,\n mimeType: f.type,\n }\n setData(doc);\n }\n\n const onSelectFile = (e: any) => {\n const files = e.target.files;\n if (files.length > 0) {\n const file = files[files.length - 1];\n\n fileToData(file);\n }\n }\n\n const onDrop = (e: any) => {\n e.persist();\n e.preventDefault();\n e.stopPropagation();\n\n const dt = e.dataTransfer;\n\n if (dt.files.length > 0) {\n const f = dt.files[0];\n fileToData(f);\n }\n\n return false;\n }\n\n const allowDrop = (e: any) => {\n e.preventDefault();\n }\n\n const createRequirement = loading.wrap(async () => {\n const res = await props.createFreeRequirement(\n props.workId,\n props.jobId,\n {\n title: form.values.title,\n remarks: form.values.remarks,\n requirementId: 0,\n workId: props.workId,\n documents: data ? [data] : [],\n },\n props.resourceType,\n props.resourceId,\n props.statusType\n );\n msg.set(res);\n\n if (props.resourceType == RequirementTargetType.JobHasContractor) {\n goToJobEditContractorRequirements(props.workId, props.jobId, props.resourceId!);\n }\n else if (props.resourceType == RequirementTargetType.JobHasWorker) {\n goToJobEditWorkerRequirements(props.workId, props.jobId, props.resourceId!);\n }\n else if (props.resourceType == RequirementTargetType.JobHasMachinery) {\n goToJobEditMachineryRequirements(props.workId, props.jobId, props.resourceId!);\n }\n else if (res.hasValue) {\n goToJobRequirements(props.workId, props.jobId);\n }\n });\n\n const canCreateRequirement =\n form.isValid() && (data != undefined || props.statusType != undefined);\n\n return
\n \n\n
\n
\n
\n \n {form.input('title', { autoFocus: true })}\n \n {/** #1145: PESSMA ocultar notas al crear requerimientos libres\n\n \n {form.textarea('remarks')}\n **/}\n
\n\n
\n {t('Drop or select files here')}\n \n\n \n
\n
\n\n {data != undefined &&
\n
\n \n {data.name}\n
\n\n
\n \n {formatFileSize(data.fileSize)}\n
\n
}\n
\n\n {msg.renderIfError()}\n\n
\n {loading.render()}\n
\n \n \n
\n
\n
\n}\n","import * as React from 'react';\nimport { connect } from 'react-redux';\n\nimport { ApplicationState } from '../../store';\nimport * as JobsStore from '@store/jobs';\nimport * as RequirementsStore from '@store/requirements';\n\nimport { CreateRequirement } from '@components/jobs/CreateRequirement';\n\nexport default connect(\n (state: ApplicationState) => ({\n ...state.user,\n ...state.identity,\n ...JobsStore.plainActions,\n ...RequirementsStore.plainActions,\n ...state.work.work?.departments,\n }),\n)(CreateRequirement as any) as any; // eslint-disable-line @typescript-eslint/no-explicit-any\n","import * as React from 'react';\n\nimport { BreadcrumbItem, G, ValidationBuilder, useForm, useLoading, useTranslation, useMessage, } from '@components';\nimport { IOption, ISecurity, IDepartment } from '@models';\nimport { IRequirementFulfillData, RequirementTargetType } from \"@models/requirements\";\nimport {\n goToJobEditContractorRequirements, goToJobEditMachineryRequirements, goToJobEditWorkerRequirements\n} from '../routes';\n\nimport './CreateRequirement.scss';\nimport RemoteHtml from '@components/custom/RemoteHtml';\n\ntype CreateT = (\n workId: number,\n jobId: number,\n data: IRequirementFulfillData,\n resourceType: number | undefined,\n resourceId: number | undefined,\n statusType: number | undefined\n) => Promise>;\n\ntype CreateData = {\n title: string,\n remarks?: string,\n jobId: number,\n isShared: boolean,\n workId: number,\n color?: string,\n departmentId?: number,\n}\n\nexport interface IProps {\n createFreeRequirement: CreateT;\n jobId: number;\n security: ISecurity;\n workId: number;\n departments: IDepartment[];\n\n resourceType?: number;\n resourceId?: number;\n statusType?: number;\n}\n\nexport function CreateRequirement(props: IProps) {\n const loading = useLoading();\n const msg = useMessage();\n const { t } = useTranslation();\n\n let color: string | undefined = undefined;\n\n const form = useForm({\n initialValues: {\n jobId: props.jobId,\n title: '',\n remarks: '',\n isShared: false,\n workId: props.workId,\n },\n validateOnMount: true,\n validate: ValidationBuilder.new().notEmpty('title').lift(),\n });\n\n const cancel = () => {\n if (props.resourceType == RequirementTargetType.JobHasContractor) {\n goToJobEditContractorRequirements(props.workId, props.jobId, props.resourceId!);\n }\n else if (props.resourceType == RequirementTargetType.JobHasWorker) {\n goToJobEditWorkerRequirements(props.workId, props.jobId, props.resourceId!);\n }\n else if (props.resourceType == RequirementTargetType.JobHasMachinery) {\n goToJobEditMachineryRequirements(props.workId, props.jobId, props.resourceId!);\n }\n }\n\n const createRequirement = loading.wrap(async () => {\n const res = await props.createFreeRequirement(\n props.workId,\n props.jobId,\n {\n title: form.values.title,\n remarks: form.values.remarks,\n color: color,\n departmentId: form.values.responsible,\n requirementId: 0,\n workId: props.workId,\n isShared: form.values.isShared,\n documents: [],\n },\n props.resourceType,\n props.resourceId,\n props.statusType\n );\n msg.set(res);\n\n if (props.resourceType == RequirementTargetType.JobHasContractor) {\n goToJobEditContractorRequirements(props.workId, props.jobId, props.resourceId!);\n }\n else if (props.resourceType == RequirementTargetType.JobHasWorker) {\n goToJobEditWorkerRequirements(props.workId, props.jobId, props.resourceId!);\n }\n else if (props.resourceType == RequirementTargetType.JobHasMachinery) {\n goToJobEditMachineryRequirements(props.workId, props.jobId, props.resourceId!);\n }\n });\n\n function departmentColorPortovesme(departmentId: number): string {\n switch (departmentId) {\n case 114:\n //Sicurezza - Orange\n color = \"#ff9b00\"\n break;\n case 115:\n //Terzi - Green\n color = \"#008000\";\n break;\n case 116:\n //HSE Terzi - Blue\n color = \"#0000ff\";\n break;\n case 122:\n //Responsabile Unità di Produzione - Light Green\n color = \"#00ff00\"\n break;\n case 119:\n //Appalti - Purple\n color = \"#8000ff\"\n break;\n default:\n color = \"#000000\";\n break;\n }\n return color;\n }\n\n return
\n \n\n
\n
\n
\n \n {form.input('title', { autoFocus: true })}\n \n {/** #1145: PESSMA ocultar notas al crear requerimientos libres\n \n {form.textarea('remarks')}\n \n */}\n
\n {props.workId == 21 && <>\n {form.select('responsible', props.departments.filter(d => d.id == 115 || d.id == 116 || d.id == 114 || d.id == 122 || d.id == 119).sort((a, b) => a.id - b.id))}\n {form.values.responsible != undefined && <>\n
\n }\n }\n
\n
\n \n {form.checkBox('isShared')}\n
\n
\n \n
\n
\n
\n
\n\n {msg.renderIfError()}\n\n
\n {loading.render()}\n
\n \n {t('Create')}\n
\n
\n
\n}\n","import * as React from 'react';\nimport { Route } from 'react-router';\n\nimport { getMachineryName, IJob, IJobHasContractor, ISecurity, IWork } from '@models';\n\nimport JobHasResourceRequirements from '@containers/jobs/JobHasResourceRequirementsContainer';\nimport JobRequirements from '@containers/jobs/JobRequirementsContainer';\nimport { getContractorFromAppUser } from '@store/actions/contractors';\nimport { RequirementTargetType } from '@models/requirements';\nimport * as Actions from '@store/actions/jobs';\nimport { BreadcrumbItem, DataLoader, useTranslation, Loading } from '@components';\nimport { getIntParams, getIntQueryParameters, getQueryParameter } from '@utils';\nimport Routes from '@components/routes';\n\nimport JobLoader from '@containers/user/JobLoader';\nimport CreateContractorInvitation from '@containers/contractors/CreateContractorInvitationContainer';\nimport JobDataContainer from '@containers/jobs/JobDataContainer';\nimport JobAddContractorContainer from '@containers/jobs/JobAddContractorContainer';\nimport JobContractorsContainer from \"@containers/jobs/JobContractorsContainer\";\nimport JobRequestContractorContainer from \"@containers/jobs/JobRequestContractorContainer\";\nimport JobContractorRequestsContainer from \"@containers/jobs/JobContractorRequestsContainer\";\nimport JobContractorSubRequestsContainer from '@containers/jobs/JobContractorSubRequestsContainer';\nimport JobInformationLoaded from '@containers/jobs/JobInformationLoadedContainer';\nimport JobInfoCardContainer from '@containers/jobs/JobInfoCardContainer';\nimport JobInformationLoadedControl from '@containers/jobs/JobInformationLoadedControlContainer';\nimport JobNotifyInformationLoaded from '@containers/jobs/JobNotifyInformationLoadedContainer';\nimport ManageJobMachineries from '@containers/jobs/ManageJobMachineriesContainer';\nimport AddJobHasMachinery from '@containers/jobs/AddJobHasMachineryContainer';\nimport SelectJobHasMachinery from '@containers/jobs/SelectJobHasMachineryContainer';\nimport ManageJobWorkersContainer from '@containers/jobs/ManageJobWorkersContainer';\nimport JobAddWorkerContainer from '@containers/jobs/JobAddWorkerContainer';\nimport UploadRequirement from '@containers/jobs/UploadRequirementContainer';\nimport CreateRequirement from '@containers/jobs/CreateRequirementContainer';\n\nimport { getJobHasContractor } from '@store/actions/jobs';\n\nexport interface IProps {\n children?: any;\n job: IJob;\n work: IWork;\n\n security: ISecurity;\n\n selectJobHasContractor: Function;\n selectedJobHasContractor?: IJobHasContractor;\n getJobHasContractor: Function;\n getJobContractors: Function;\n}\n\nconst WrappedJobHasContractorRequirements = (props: any) => {\n const { t } = useTranslation();\n const { jobid, jobhascontractorid, workid } = getIntParams(props.match.params);\n\n return Actions.getJobHasContractor(workid, jobid, jobhascontractorid)}>\n {rel =>\n
\n \n {/* redirectTo={Routes.jobHasContractorRoute(workid, jobid, rel.id)} /> */}\n\n \n\n
\n \n
\n
\n }\n
\n}\n\nconst WrappedJobHasMachineryRequirements = (props: any) => {\n const { t } = useTranslation();\n const { jobid, jobhasmachineryid, workid } = getIntParams(props.match.params);\n\n return Actions.getJobHasMachinery(workid, jobid, jobhasmachineryid)}>\n {rel =>\n
\n \n { /* redirectTo={Routes.jobHasMachineryRoute(workid, jobid, rel.id)} /> **/}\n\n \n\n
\n \n
\n
\n }\n
\n}\n\nconst WrappedJobHasWorkerRequirements = (props: any) => {\n const { t } = useTranslation();\n const { jobid, jobhasworkerid, workid } = getIntParams(props.match.params);\n\n return Actions.getJobHasWorker(workid, jobid, jobhasworkerid)}>\n {rel =>\n
\n \n { /** redirectTo={Routes.jobHasWorkerRoute(workid, jobid, rel.id)} /> **/}\n\n \n\n
\n \n
\n
\n }\n
\n}\n\nconst WrappedJobRequirements = (props: any) => {\n const { t } = useTranslation();\n const { jobid, workid } = getIntParams(props.match.params);\n\n return
\n
\n Actions.getJob(workid, jobid)}>\n {job =>\n \n }\n \n
\n
\n}\n\nconst WrappedJobCreateRequirement = (props: any) => {\n const {\n jobid, workid\n } = getIntParams(props.match.params);\n\n const { resourceType, resourceId, statusType } = getIntQueryParameters(window.location.search);\n\n return
\n Actions.getJob(workid, jobid)}>\n {job =>\n \n }\n \n
\n}\n\nconst WrappedJobCreateResourceRequirement = (props: any) => {\n const {\n jobid, workid\n } = getIntParams(props.match.params);\n\n const { resourceType, resourceId, statusType } = getIntQueryParameters(window.location.search);\n\n return
\n Actions.getJob(workid, jobid)}>\n {job =>\n \n }\n \n
\n}\n\nconst WrappedJobCard = (props: any) => {\n const { jobid, workid } = getIntParams(props.match.params);\n\n return
\n Actions.getJob(workid, jobid)}>\n {resp =>\n \n }\n \n
\n}\n\nconst WrappedJobInformationLoaded = (props: any) => {\n const { jobid, workid } = getIntParams(props.match.params);\n\n return
\n Actions.getJob(workid, jobid)}>\n {job =>\n \n }\n \n
\n}\n\nconst WrappedJobInformationLoadedControl = (props: any) => {\n const { jobid, workid } = getIntParams(props.match.params);\n\n return
\n Actions.getJob(workid, jobid)}>\n {job =>\n \n }\n \n
\n}\n\nconst WrappedJobNotifyInformationLoaded = (props: any) => {\n const { jobid, workid } = getIntParams(props.match.params);\n\n return
\n Actions.getJob(workid, jobid)}>\n {job =>\n \n }\n \n
\n}\n\nconst WrappedEditJobData = (props: any) => {\n const { jobid, workid } = getIntParams(props.match.params);\n\n return ;\n}\n\nconst WrappedJobContractors = (props: any) => {\n const { jobid, workid } = getIntParams(props.match.params);\n const parentId: number | undefined = getQueryParameter(\n window.location.search,\n 'parentId',\n { map: parseInt });\n const loadInvitations: boolean = getQueryParameter(\n window.location.search,\n 'loadInvitations',\n { map: v => v == 'true' }) ?? true;\n\n return \n Routes.goToJobAddContractor(workid, jobid, d?.id)} />\n}\n\nconst WrappedJobContractor = (props: any) => {\n const { jobid, workid, jobhascontractorid } = getIntParams(props.match.params);\n\n return Actions.getJobHasContractor(workid, jobid, jobhascontractorid)}>\n {rel =>\n \n Routes.goToJobAddContractor(workid, jobid, d?.id)} />}\n ;\n}\n\nconst WrappedAddContractor = (props: any) => {\n const { jobid, workid } = getIntParams(props.match.params);\n const parentId: number | undefined = getQueryParameter(\n window.location.search,\n 'parentId',\n { map: parseInt });\n\n if (parentId !== undefined) {\n return getJobHasContractor(workid, jobid, parentId)}>\n {rel => Routes.goToJob(workid, jobid)}\n onSuccess={() => Routes.goToJobContractors(workid, jobid)}\n work={props.work} />\n }\n \n }\n else {\n return Routes.goToJob(workid, jobid)}\n onSuccess={() => Routes.goToJobContractors(workid, jobid)}\n work={props.work} />;\n }\n}\n\nconst WrappedRequestNewContractor = (props: any) => {\n const { jobid, workid } = getIntParams(props.match.params);\n return Routes.goToJob(workid, jobid)}\n onSuccess={console.log}\n job={props.job}\n work={props.work} />\n}\n\nconst WrappedContractorRequests = (props: any) => {\n const { jobid, workid } = getIntParams(props.match.params);\n\n return Routes.goToJobContractors(workid, jobid)}\n work={props.work} />;\n}\n\nconst WrappedSubContractorRequests = (props: any) => {\n const { jobid, workid } = getIntParams(props.match.params);\n\n return ;\n}\n\nconst WrappedContractorInvite = (props: any) => {\n const { jobid, workid } = getIntParams(props.match.params);\n\n return Routes.goToJob(props.work.id, props.job.id)}\n work={props.work} />;\n}\n\nconst WrappedMachineries = (props: any) => {\n const { jobid, workid } = getIntParams(props.match.params);\n\n const jobHasContractorId: number | undefined = getQueryParameter(\n window.location.search,\n 'jobHasContractorId',\n { map: parseInt });\n\n const relationId = getQueryParameter(\n window.location.search,\n 'relationId',\n { map: parseInt });\n\n return ;\n}\n\nconst WrappedMachinery = (props: any) => {\n const { jobid, workid, machineryid } = getIntParams(props.match.params);\n\n return Actions.getJobHasMachinery(workid, jobid, machineryid)}>\n {m => }\n ;\n}\n\nconst WrappedMachineryCreate = (props: any) => {\n const { jobid, workid } = getIntParams(props.match.params);\n\n return Routes.goToJobMachineries(workid, jobid)} />\n}\n\nconst WrappedMachineryAdd = (props: any) => {\n const { jobid, workid } = getIntParams(props.match.params);\n\n const contractorId: number | undefined = getQueryParameter(\n window.location.search,\n 'contractor',\n { map: safeParseInt });\n\n return Routes.goToJobMachineries(workid, jobid)} />\n}\n\nconst WrappedAddWorker = (props: any) => {\n const { jobid, workid } = getIntParams(props.match.params);\n\n const jobHasContractorId: number | undefined = getQueryParameter(\n window.location.search,\n 'jobContractor',\n { map: safeParseInt });\n\n return Routes.goToJobWorkers(workid, jobid, { jobHasContractorId: jobHasContractorId })}\n onCancel={() => Routes.goToJobWorkers(workid, jobid)} />\n}\n\nconst safeParseInt = (a: any) => {\n const r = parseInt(a);\n if (!isNaN(r)) {\n return r;\n }\n else {\n return undefined;\n }\n}\n\nconst WrappedWorkers = (props: any) => {\n const { jobid, workid } = getIntParams(props.match.params);\n\n const jobHasContractorId: number | undefined = getQueryParameter(\n window.location.search,\n 'jobHasContractorId',\n { map: safeParseInt });\n\n const relationId = getQueryParameter(\n window.location.search,\n 'relationId',\n { map: safeParseInt });\n\n return \n Routes.goToJobWorkers(workid, jobid)}\n />\n ;\n}\n\nconst WrappedWorker = (props: any) => {\n const { jobid, workid, jobhasworkerid } = getIntParams(props.match.params);\n\n return Actions.getJobHasWorker(workid, jobid, jobhasworkerid)}>\n {w => Routes.goToJobWorkers(workid, jobid)} />}\n \n}\n\nfunction JobRoutesImpl(props: IProps) {\n const [parameters, setParameters] = React.useState({});\n const [loading, setLoading] = React.useState(true);\n\n const setJobHasContractor = async (id: number | undefined = undefined) => {\n if (id != undefined && id != null) {\n const rel = await props.getJobHasContractor(props.work.id, props.job.id, id);\n props.selectJobHasContractor(rel);\n }\n else {\n const contractors = await props.getJobContractors(props.work.id, props.job.id);\n const contractor = await getContractorFromAppUser(props.work.id);\n\n const jhc = contractors.find((r: IJobHasContractor) => r.contractorId == contractor.id);\n if (jhc != undefined) {\n props.selectJobHasContractor(jhc);\n }\n }\n }\n\n React.useEffect(() => {\n const noParameter = parameters.jobHasContractorId == undefined\n && parameters.jobContractor == undefined;\n\n if (loading == true\n && (parameters.jobHasContractorId == props.selectedJobHasContractor?.id\n || parameters.jobContractor == props.selectedJobHasContractor?.id\n || (noParameter && props.selectedJobHasContractor != undefined))) {\n setLoading(false);\n }\n }, [props.selectedJobHasContractor, parameters, loading]);\n\n React.useEffect(() => {\n setLoading(true);\n const params = getIntQueryParameters(window.location.search);\n setParameters(params);\n\n // TODO: pendientes de cambiar todas las rutas (reflejar el jobHasContractor como jobHasContractorId)\n if (params.jobHasContractorId != undefined || params.jobContractor != undefined) {\n setJobHasContractor(params.jobHasContractorId ?? params.jobContractor);\n }\n // si es un contratista y no establecido que jobHasContractor es nos aseguramos de establecer\n // el primero\n else if (props.security.isContractor()) {\n setJobHasContractor();\n }\n else {\n setLoading(false);\n }\n }, [window.location.search]);\n\n if (loading) {\n return
\n \n
;\n }\n else {\n return <>\n } />\n } />\n \n \n \n \n \n \n \n } />\n \n } />\n \n } />\n \n } />\n \n } />\n } />\n } />\n } />\n } />\n } />\n } />\n } />\n \n } />\n } />\n } />\n } />\n ;\n }\n}\n\nexport const JobRoutes = React.memo(\n JobRoutesImpl,\n (a, b) => a.job?.id == b.job?.id);\n","import * as React from 'react';\nimport { connect } from 'react-redux';\nimport { ApplicationState } from '../../store';\nimport * as JobsStore from '../../store/jobs';\nimport { JobRoutes } from '../../components/jobs/JobRoutes';\nimport { ModuleManager } from '@modules';\n\nexport default connect(\n (state: ApplicationState) => ({\n notifications:\n state.notifications.notifications\n .filter(n => n.ctx == 'jobs.save'),\n ...state.user,\n ...state.identity,\n ...JobsStore.plainActions,\n ...state.jobs,\n moduleManager: state.modules.moduleManager,\n }),\n JobsStore.actionCreators,\n)(JobRoutes as any) as any;\n","import { connect } from 'react-redux';\nimport { ApplicationState } from '../../store';\nimport * as JobsStore from '../../store/jobs';\nimport * as ContractorsStrore from '../../store/contractors';\nimport * as RequirementsStore from '../../store/requirements';\n\nimport { JobComponent } from '../../components/jobs/JobComponent';\nimport { ModuleManager } from '@modules';\nimport * as U from '@utils';\n\nexport default connect(\n (state: ApplicationState) => ({\n work: state.user.work,\n selectedJobHasContractor: state.jobs.selectedJobHasContractor,\n selectedJobHasContractorId: U.getQueryParameter(window.location.search, 'jobContractor', { map: parseInt }),\n moduleManager: state.modules.moduleManager,\n ...state.identity,\n ...JobsStore.plainActions,\n ...ContractorsStrore.plainActions,\n ...RequirementsStore.plainActions,\n }),\n JobsStore.actionCreators,\n)(JobComponent as any) as any; // eslint-disable-line @typescript-eslint/no-explicit-any\n","import * as React from 'react';\n\nimport { BreadcrumbItem, useRemoteData } from '@components';\nimport { JobPanelActions } from '@components/jobs/JobPanelActions';\nimport { goToJob, goToJobCard } from '@components/routes';\nimport { IContractor, IJob, IJobHasContractor, IJobStatus, ISecurity, IWork, ModuleManager } from '@models';\nimport './JobComponent.scss';\nimport JobRoutes from '@containers/jobs/JobRoutes';\n\ntype GetJobStatusT = (workId: number, jobId: number) => Promise;\n\nexport interface IProps {\n getJobStatus: GetJobStatusT;\n job: IJob;\n loadJob: Function;\n security: ISecurity;\n clearSelectedContractor: Function;\n selectedContractor?: IContractor;\n selectedJobHasContractor?: IJobHasContractor;\n selectedJobHasContractorId?: number;\n selectJobHasContractor: Function;\n work: IWork;\n getContractorFromAppUser: Function;\n getRequirements: Function;\n moduleManager: ModuleManager;\n}\n\nexport function JobComponent(props: IProps) {\n if (!props.job) {\n return null;\n }\n\n // if (props.selectedJobHasContractor == undefined && props.selectedJobHasContractorId) {\n // props.selectJobHasContractor(props.job.contractors.find(c => c.id == props.selectedJobHasContractorId));\n // }\n\n const status = useRemoteData(\n props.getJobStatus, { parameters: [props.work.id, props.job.id] });\n\n const loadData = async () => {\n await status.query();\n goToJobCard(props.work.id, props.job.id);\n }\n\n return
\n loadData()} />\n\n \n\n \n \n
;\n}\n","import * as React from 'react';\n\nimport {\n INotification,\n IJob,\n IWorkspace,\n IActivityType,\n IContractType,\n IWorkShift,\n IDepartment,\n IPropertyGroupType,\n PropertyGroupObjectType,\n IPropertyGroup,\n ISecurity,\n IWork,\n IWorker, departmentIsProductive, JobEncodingType,\n ModuleManager,\n} from '@models';\nimport {\n G,\n NotificationsBox,\n Skeleton,\n useForm, useMemoized, useResolveName,\n useTranslation,\n useWorkFormSettings,\n ILoading,\n ValidationBuilder,\n Select,\n useSearch,\n} from '@components';\nimport { DynamicProperties } from '@components/user/DynamicProperties';\n\nimport './WorkForm.css';\nimport { flatten } from \"@utils\";\n\nimport './JobForm.scss';\nimport dateUtils from '@utils/date-utils';\n\ntype FooterF = (valid: boolean) => React.ReactNode;\n\nexport interface IProps {\n data?: IJob;\n work: IWork;\n workId: number;\n activityTypes: IActivityType[];\n contractTypes: IContractType[];\n moduleManager: ModuleManager;\n workspaces: IWorkspace[];\n workShifts: IWorkShift[];\n departments: IDepartment[];\n footer?: FooterF;\n propertyGroupTypes: IPropertyGroupType[];\n notifications: INotification[];\n onChange?: Function;\n onSubmit: Function;\n loading?: ILoading;\n security: ISecurity;\n}\n\ninterface IValidateJobOpts {\n validateWorkspaces?: boolean;\n}\n\nexport const validateJob = (data: IJob, validateOptions: IValidateJobOpts = {}, validateCode: boolean = false) => {\n const builder = ValidationBuilder\n .create(data)\n .notEmpty('name', 'Name is required')\n .notEmpty('startDate', 'Date is required')\n .notEmpty('endDate', 'Date is required')\n .notEmpty('description', 'Description is required')\n .notEmptyIf(validateOptions.validateWorkspaces, 'workspaceId', 'Workspace is required');\n\n if (validateCode) {\n builder.notEmpty('code', 'Code is required');\n }\n\n return builder.build();\n}\n\nexport const isValid = (data: IJob) => {\n return Object.keys(validateJob(data)).length == 0;\n}\n\ntype JobHasDepartment = {\n departmentId: number,\n responsibleId: number,\n isMain: boolean,\n}\n\nexport function JobForm(props: IProps) {\n const { t } = useTranslation();\n\n const [availableWorkers, setAvailableWorkers] = React.useState<{ id: number, name: string }[]>([]);\n const [selectedDepartment, setSelectedDepartment] = React.useState();\n const [selectedResponsible, setSelectedResponsible] = React.useState();\n const [departments, setDepartments] = React.useState([]);\n\n const resolveDepartment = useResolveName(props.departments);\n const resolveWorker = useMemoized((workerId: number) => {\n const workers = flatten(props.departments.map(d => d.workers ?? []));\n const w = workers.find(w => w.id == workerId);\n\n return `${w?.name} ${w?.surname}`;\n });\n\n const codeIsManual = props.work.settingsObj?.jobEncodingType == JobEncodingType.Manual;\n\n const formSettings = useWorkFormSettings({ work: props.work, scope: 'job' });\n\n const form = useForm({\n validateOnMount: true,\n initialValues: {\n id: props.data?.id ?? 0,\n name: props.data?.name ?? '',\n workId: props.workId,\n activityTypeId: props.data?.activityTypeId,\n workspaceId: props.data?.workspaceId,\n startDate: props.data?.startDate!,\n departments: props.data?.departments ?? [],\n properties: props.data?.properties ?? [],\n contractors: [],\n machineries: [],\n isActive: true\n },\n validate: (data: IJob) => {\n return validateJob(data, { validateWorkspaces: props.workspaces.length > 0 }, codeIsManual);\n },\n onSubmit: (data: IJob) => {\n props.onSubmit({\n id: data.id,\n name: data.name,\n code: data.code,\n workspaceId: data.workspaceId,\n workId: data.workId,\n activityTypeId: data.activityTypeId,\n workShiftId: data.workShiftId,\n contractTypeId: data.contractTypeId,\n startDate: data.startDate,\n endDate: data.endDate,\n remarks: data.remarks,\n description: data.description,\n properties: data.properties,\n isActive: data.isActive,\n }, departments);\n return { ok: true };\n },\n onChange: props.onChange,\n });\n\n const worksSpacesSearch = useSearch({\n workId: props.work.id,\n search: 'jobList/workspaces',\n });\n\n React.useEffect(() => {\n if (props.security.isWorker() && props.work.id == 23) {\n worksSpacesSearch.doSearch();\n }\n }, []);\n\n const [workSpaces, setWorkSpaces] = React.useState<{ id: number, name: string }[]>(props.workspaces);\n\n React.useEffect(() => {\n if (props.security.isWorker() && props.work.id == 23) {\n setWorkSpaces(worksSpacesSearch.value);\n }\n }, [worksSpacesSearch.value]);\n\n const filterWorkers = props.moduleManager.filterDependency('job.add.mainDepartment.responsibles', {\n security: props.security,\n departments: departments,\n });\n\n const availableResponsibles = useSearch({\n workId: props.work.id,\n search: 'jobList/oblique.responsibles',\n filters: {\n workId: props.work.id,\n },\n });\n\n React.useEffect(() => {\n if (selectedDepartment) {\n const dep = props.departments.find(d => d.id == selectedDepartment);\n const workers = (dep?.workers ?? [])\n .filter(w => (w.workspaces?.find(r => r.id == form.values.workspaceId) ?? false)\n && availableResponsibles.value.find(r => r.id == w.id) != undefined)\n .filter(filterWorkers)\n .map(w => ({ id: w.id, name: `${w.name} ${w.surname}` }));\n workers.sort((a, b) => (a.name).localeCompare(b.name));\n\n if (departments.length == 0) {\n const workerIds = props.security.user?.workerIds ?? [];\n workers.filter(w => workerIds.includes(w.id));\n }\n\n setAvailableWorkers(workers);\n }\n }, [selectedDepartment, form.values.workspaceId]);\n\n const filterDepartment = props.moduleManager.filterDependency('job.departments');\n\n const [availableDepartments, setAvailableDepartments] = React.useState([]);\n\n const calculateAvailableDepartments = () => {\n let result: IDepartment[];\n\n if (departments.length > 0 || !props.security.isWorker()) {\n result = props\n .departments\n // excluimos los departamentos ya seleccionados y los que no sean productivos\n .filter(d =>\n !departments.map(r => r.departmentId).includes(d.id)\n && departmentIsProductive(d)\n && filterDepartment(d));\n } else if (departments.length == 0 && props.security.isWorker() && !props.security.isGestor() && (props.security.user?.obliqueDepartments?.length ?? 0) == 0) {\n result = []\n props.security.user?.departments?.forEach(d => {\n const department = props.departments.find(de => de.id == d);\n if (departmentIsProductive(department!)) {\n result.push(department!);\n }\n });\n }\n else {\n result = props.departments\n .filter(d =>\n !departments.map(r => r.departmentId).includes(d.id)\n && departmentIsProductive(d)\n && filterDepartment(d));\n }\n result.sort((a, b) => a.name.localeCompare(b.name));\n setAvailableDepartments(result);\n }\n\n React.useEffect(() => {\n calculateAvailableDepartments();\n }, [props.departments, departments]);\n\n const removeDepartment = (i: number) => {\n const newDepartments = [...departments];\n newDepartments.splice(i, 1);\n setDepartments(newDepartments);\n }\n\n const addSelectedDepartment = (event: any) => {\n event.stopPropagation();\n event.preventDefault();\n \n const rel = {\n departmentId: selectedDepartment!,\n responsibleId: selectedResponsible!,\n isMain: departments.length == 0,\n };\n\n setSelectedDepartment(undefined);\n setSelectedResponsible(undefined);\n\n setDepartments([...departments, rel]);\n }\n\n const todayOffset = new Date();\n todayOffset.setDate(todayOffset.getDate() - 1);\n\n\n const formIsValid = () => {\n\n if ((!form.values.activityTypeId && form.values.workId == 23)) {\n return false;\n }\n\n return (dateUtils.compareDates(dateUtils.parseDate(form.values.startDate), todayOffset) > 0\n &&\n (dateUtils.compareDates(dateUtils.parseDate(form.values.endDate), dateUtils.parseDate(form.values.startDate)) >= 0))\n &&\n form.values.name != ''\n &&\n departments.length != 0\n &&\n (props.workspaces.length > 0 ? form.values.workspaceId != undefined : true)\n &&\n form.values.description ? form.values.description.trim() != '' : false;\n }\n\n\n return
\n
\n
\n
\n
\n {/**\n *\n * Podemos tener claves de internacionalización por obra:\n * Evitaremos siempre que sea posible incluir lógica en la vista\n * dependendiente de una obra en concreto (evitar complejidad/errores/mantenimiento)\n * En este caso, no podríamos traducir directamente\n * label={t('job.code')}\n * y tener una clave para la obra 23 : job.code = 'Código AZSA'\n * en la configuración de la obra ?\n * Alternativamente, cada modulo que interactúe con el frontend\n * puede definir claves de internacionalización propias\n * (Ver ejemplo del módulo de Azsa)\n *\n */}\n \n {codeIsManual &&\n form.input('code')}\n {!codeIsManual && <>\n {props.data?.code && form.span('code')}\n {!props.data?.code && }\n }\n \n \n {/**\n * De igual forma a las claves de la internacionalización,\n * podemos tener propiedades de componentes por obra,\n * para evitar lógica dependiente de la obra en la vista general\n */}\n {/* {props.workId == 23 ? form.textarea('name', { rows: 2 }) : form.input('name')} */}\n {form.textarea('name', props.moduleManager.componentProperties('job.name'))}\n \n {props.workspaces.length > 0 &&\n \n {form.select('workspaceId', { options: workSpaces })}\n }\n {formSettings.show('activityTypeId') &&\n \n
\n {form.select('activityTypeId', { options: props.activityTypes })}\n {!form.values.activityTypeId && {t('job.error.activityTypeId')}}\n
\n
}\n {props.work.id === 23 && formSettings.show('description') &&\n \n {form.textarea('description', { rows: 5 })}\n }\n {props.work.id === 23 && < G label={t('Remarks')}>\n {form.textarea('remarks', { rows: 5 })}\n }\n {formSettings.show('properties') &&\n
\n pg.objectType == PropertyGroupObjectType.Job)}\n onChange={(v: IPropertyGroup[]) => form.setFieldValue('properties', v)} />\n
}\n
\n\n
\n \n
\n {form.input('startDate', { type: 'date' })}\n {(dateUtils.compareDates(dateUtils.parseDate(form.values.startDate), todayOffset) < 0) &&\n {t('job.error.startDate')}}\n
\n
\n \n
\n {form.input('endDate', { type: 'date' })}\n {(dateUtils.compareDates(dateUtils.parseDate(form.values.endDate), dateUtils.parseDate(form.values.startDate)) < 0) &&\n {t('job.error.endDate')}}\n
\n
\n {formSettings.show('workShiftId') &&\n \n {form.select('workShiftId', props.workShifts)}\n }\n {formSettings.show('contractTypeId') &&\n \n {form.select('contractTypeId', props.contractTypes)}\n }\n {props.work.id !== 23 && formSettings.show('description') &&\n \n {form.textarea('description')}\n }\n {props.work.id !== 23 && < G label={t('Remarks')}>\n {form.textarea('remarks')}\n }\n
\n
\n
\n {t('job.departments')}\n
\n {departments.map((d, i) =>
\n \n {d.isMain && }\n \n {resolveDepartment(d.departmentId)}\n {resolveWorker(d.responsibleId)}\n \n removeDepartment(i)} />\n \n
)}\n
\n
\n { +e.target.value > 0 && setSelectedDepartment(parseInt(e.target.value)) }}>\n \n +e.target.value > 0 && setSelectedResponsible(parseInt(e.target.value))}>\n \n \n
\n {departments.length === 0 &&\n {t('One department is required')}\n }\n
\n
\n
\n {form.errorBox()}\n \n
\n
\n {props.loading?.render()}\n
\n {props.footer != undefined &&\n (props.loading == undefined ||\n !props.loading.isLoading()) &&\n props.footer(form.isValid()) &&\n props.footer(formIsValid()) ||\n !isValid(form.values)}\n \n
\n}\n","import * as React from 'react';\n\nimport {\n IActivityType,\n IContractType,\n IDepartment,\n IJob,\n IJobHasDepartment,\n IJobStatus,\n IPropertyGroupType,\n IResourceStatusType, ISecurity,\n IUserIdentity,\n IWork,\n IWorker,\n IWorkShift,\n IWorkspace,\n jobStatusTypes,\n ModuleManager,\n} from '@models';\nimport {\n useLoading,\n useTranslation,\n Portal,\n useFormDialog,\n useSearchPaginate,\n usePaginator,\n useSearchFilters,\n useSearch\n} from '@components';\nimport { JobForm } from '@components/admin/JobForm';\nimport { JobCard } from '@components/jobs/list/JobCard';\nimport { goToJob } from '@components/routes';\nimport { IMachineryType, IWorkerDocumentType, IWorkerType } from '@models/resources';\n\nimport './Jobs.scss';\n\ntype GetJobStatusT = (workId: number, jobId: number) => Promise;\ntype IJobRow = IJob & {\n currentJobHasContractorId?: number;\n}\n\nexport interface IProps {\n user: any;\n activityTypes: IActivityType[];\n clearSelectedJob: Function;\n contractTypes: IContractType[];\n departments: IDepartment[];\n propertyGroupTypes: IPropertyGroupType[];\n getJobs: Function;\n getJobContractorsViewModel: Function;\n saveJob: Function;\n security: ISecurity;\n moduleManager: ModuleManager;\n jobs: IJob[];\n work: IWork;\n workers: IWorker[];\n workShifts: IWorkShift[];\n workspaces: IWorkspace[];\n resourceStatusTypes: IResourceStatusType[];\n workerDocumentTypes: IWorkerDocumentType[];\n workerTypes: IWorkerType[];\n machineryTypes: IMachineryType[];\n getJobStatus: GetJobStatusT;\n}\n\nfunction SelectJob({\n activityTypes, security, workspaces, jobs,\n workerDocumentTypes, machineryTypes, workerTypes, work, initialize, moduleManager\n}: {\n activityTypes: IActivityType[],\n departments: IDepartment[],\n getJobContractorsViewModel: Function,\n security: ISecurity,\n workers: IWorker[],\n workspaces: IWorkspace[],\n workerDocumentTypes: IWorkerDocumentType[],\n workerTypes: IWorkerType[],\n machineryTypes: IMachineryType[],\n jobs: IJobRow[],\n selectJob: Function,\n work: IWork,\n initialize: Function,\n getJobStatus: Function;\n user?: IUserIdentity;\n moduleManager: ModuleManager;\n}) {\n\n return
\n {(jobs ?? []).map((j, i) =>\n \n )}\n
\n}\n\nenum JobListMode {\n MYJOBS = 0,\n DEPARTMENT = 1,\n ALLJOBS = 2,\n INVOLVED = 3,\n SUBCONTRACTED = 4,\n}\n\nlet __jobListMode = JobListMode.ALLJOBS;\n\nexport function JobsImpl(props: IProps) {\n const { t } = useTranslation();\n const loading = useLoading(false);\n const [jobListMode, setJobListMode] = React.useState(__jobListMode);\n const [canCreateJobState, setCanCreateJobState] = React.useState(false);\n\n const isOblique = React.useRef(false);\n\n const isNotOblique = React.useRef(false);\n\n const workerIds = props.security.getWorkerIds();\n\n const departments = props.departments;\n\n React.useEffect(() => {\n props.clearSelectedJob();\n }, []);\n\n const [responsibles, setResponsibles] = React.useState<{ id: number, name: string }[]>([]);\n const [dataValue, setDataValue] = React.useState([]);\n\n const [contractorParents, setContractorParents] = React.useState<{ id: number, name: string }[]>([]);\n\n React.useEffect(() => {\n __jobListMode = jobListMode;\n }, [jobListMode]);\n\n const formDialog = useFormDialog({\n editTitle: t('Edit job'),\n addTitle: t('Add job'),\n });\n\n const calculateIsOblique = () => {\n for (let i = 0; i < workerIds.length; i++) {\n const w = workerIds[i];\n\n for (let j = 0; j < departments.length; j++) {\n const d = departments[j];\n\n if (d.workers?.some(wd => w == wd.id) && d.isOblique) {\n isOblique.current = true;\n }\n\n if (d.workers?.some(wd => w == wd.id) && !d.isOblique) {\n\n isNotOblique.current = true;\n }\n }\n }\n };\n\n const getSearch = () => {\n calculateIsOblique();\n if (props.security.isContractor() && ![23,22].includes(props.work.id)) {\n return 'jobList/contractors';\n }\n else if (props.security.isGestor()) {\n return 'jobList/gestor';\n }\n else if (jobListMode === JobListMode.ALLJOBS && props.security.hasPolicy('jobs.list') && ![23,22].includes(props.work.id)) {\n return 'jobList/gestor';\n }\n else if (jobListMode === JobListMode.ALLJOBS && !props.security.hasPolicy('jobs.list') && ![23,22].includes(props.work.id)) {\n return 'jobList/workers.all'\n }\n else if ([23,22].includes(props.work.id) && jobListMode === JobListMode.ALLJOBS && isOblique.current && props.security.isWorker()) {\n return 'jobList/gestor'\n }\n else if ([23,22].includes(props.work.id) && jobListMode === JobListMode.ALLJOBS && isNotOblique.current && props.security.isWorker()) {\n return 'jobList/workers.oblique.all'\n }\n else if ([23,22].includes(props.work.id) && jobListMode === JobListMode.ALLJOBS && props.security.isContractor()) {\n return 'jobList/contractors.all'\n }\n else if (jobListMode === JobListMode.MYJOBS && ![23,22].includes(props.work.id)) {\n return 'jobList/workers.own';\n }\n else if (jobListMode === JobListMode.MYJOBS && [23,22].includes(props.work.id) && props.security.isWorker()) {\n\n return 'jobList/workers.own.azsa';\n }\n else if (jobListMode === JobListMode.MYJOBS && [23,22].includes(props.work.id) && props.security.isContractor()) {\n return 'jobList/contractors.own';\n }\n else if (jobListMode === JobListMode.DEPARTMENT && ![23,22].includes(props.work.id)) {\n return 'jobList/departments.all';\n }\n else if (jobListMode === JobListMode.DEPARTMENT && [23,22].includes(props.work.id)) {\n return 'jobList/departments.azsa.all';\n }\n else if ([23,22].includes(props.work.id) && jobListMode === JobListMode.INVOLVED) {\n return 'jobList/workers.involved'\n }\n else if ([23,22].includes(props.work.id) && jobListMode === JobListMode.SUBCONTRACTED) {\n return 'jobList/contractors.subcontracted'\n }\n else {\n return '';\n }\n }\n\n const mergeFilters = (filters: any) => {\n if (filters.current_status_type && filters.current_status_type != 0) {\n return filters;\n }\n else {\n if (filters.current_status_type == 0) {\n userFilters.setFilter('current_status_type', null);\n }\n return { ...filters, exclude_status: 4 };\n }\n }\n\n const parentsSearch = useSearch({\n workId: props.work.id,\n search: 'jobList/parents',\n });\n\n const worksSpacesSearch = useSearch({\n workId: props.work.id,\n search: 'jobList/workspaces',\n filters: {\n workerId: props.work.id,\n },\n });\n\n const responsiblesSearch = useSearch({\n workId: props.work.id,\n search: 'jobList/oblique.responsibles',\n filters: {\n workId: props.work.id,\n },\n });\n\n const [contractors, setContractors] = React.useState([]);\n const contractorsSearch = useSearch({\n workId: props.work.id,\n search: 'jobList/contractorsOptions',\n filters: {\n workId: props.work.id,\n },\n });\n\n React.useEffect(() => {\n const options = contractorsSearch.value.map((c: any) => ({ id: c.id, name: c.name.trim() }));\n setContractors(options.sort((a, b) => a.name.localeCompare(b.name)));\n }, [contractorsSearch.value]);\n\n const calculateWorkSpaces = () => {\n if (props.security.isWorker()) {\n const result: any = [];\n worksSpacesSearch.value?.forEach((w: any) => {\n result.push({ id: w.id, name: w.name })\n })\n return result;\n } else {\n return props.workspaces\n }\n };\n\n const filterStatusTypes = props.moduleManager.filterDependency('job.statusTypes', {\n security: props.security,\n work: props.work,\n });\n\n const userFilters = useSearchFilters({\n security: props.security,\n workId: props.work.id,\n name: getSearch(),\n references: {\n workspace: calculateWorkSpaces(),\n current_status_type: jobStatusTypes.filter(filterStatusTypes),\n responsible: responsibles,\n parent_contractor: Array.from(new Set(contractorParents)),\n select_contractor: contractors,\n },\n persist: true\n });\n\n React.useEffect(() => {\n props.security.isContractor() && parentsSearch.doSearch() && responsiblesSearch.doSearch();\n props.security.isWorker() && worksSpacesSearch.doSearch();\n contractorsSearch.doSearch();\n }, []);\n\n React.useEffect(() => {\n setResponsibles(responsiblesSearch.value)\n }, [props, responsiblesSearch.value]);\n\n const data = useSearchPaginate({\n workId: props.work.id,\n normalizeKeys: true,\n filters: {\n workId: props.work.id,\n department_id: props.security.user?.departments,\n responsibleId: props.security.getWorkerIds()[0],\n ...mergeFilters(userFilters.filters),\n },\n search: getSearch(),\n dependencies: [userFilters.filters, jobListMode],\n limit: 8,\n });\n\n React.useEffect(() => {\n setDataValue(data.data);\n }, [data.data]);\n\n React.useEffect(() => {\n if (data.data && data.data.length > 0) {\n calculateParentContractors();\n }\n if (userFilters.filters.parent_contractor) {\n filterByParentContractor(data.data);\n }\n }, [data.data]);\n\n const calculateParentContractors = () => {\n const parents = parentsSearch.value;\n (parents && parents[0]?.id != 0) && parents.unshift({ id: 0, name: \"AZSA\" });\n setContractorParents(parentsSearch.value);\n };\n\n const filterByParentContractor = (jobs: any) => {\n\n const result = jobs.filter((j: any) => j.parentContractorId == (userFilters.filters.parent_contractor == 0 ? null : userFilters.filters.parent_contractor));\n setDataValue(result);\n }\n\n const paginator = usePaginator({\n className: 'transparent lg pd-right',\n data: data.value,\n rowNumbers: [8, 16, 32, 64],\n onChange: (page, limit) => data.doSearch({\n workId: props.work.id, ...mergeFilters(userFilters.filters), department_id: props.security.user?.departments,\n responsibleId: props.security.getWorkerIds()[0]\n }, page, limit),\n });\n\n const reload = () => {\n data.doSearch();\n }\n\n const saveJob = loading.wrap(async (w: IJob, departments: IJobHasDepartment[]) => {\n await props.saveJob(w, departments);\n await data.doSearch();\n\n formDialog.clear();\n });\n\n const calculateOptions = () => {\n const options = [];\n if (props.work.id == 23 && props.security.isWorker()) {\n options.push(<>\n \n \n \n \n )\n } else if (props.work.id == 23 && props.security.isContractor()) {\n options.push(<>\n \n \n \n )\n }\n else {\n options.push(<>\n \n )\n }\n return \n }\n\n const calculateCreateJob = async () => {\n const ctx = {\n security: props.security,\n work: props.work,\n }\n const res = await props.moduleManager.requirePermission('jobs.create', ctx, props.security.hasPermission('jobs.create'));\n setCanCreateJobState(res ?? false);\n };\n\n React.useEffect(() => {\n calculateCreateJob();\n }, [props.moduleManager.getId()]);\n\n const selectJob = (jobId: number) => goToJob(props.work.id, jobId);\n return
\n {paginator()}\n\n \n
\n {(props.security.isWorker() || (props.security.isContractor() && props.work.id === 23)) &&\n calculateOptions()}\n {canCreateJobState &&\n formDialog.showAdd()}>\n \n {t((props.work.id == 23 && props.security.isWorker()) ? 'Create job pessma' : 'Create job')}\n }\n
\n
\n\n {formDialog.render((data: IJob) =>\n }\n />, props.work.id == 23)}\n {data.renderLoading({\n text: t('jobs.list.loading')\n })}\n {}\n
\n}\n\nexport const Jobs = React.memo(JobsImpl, (prev, next) => {\n return prev.work.id === next.work.id\n && prev.moduleManager?.getId() == next.moduleManager?.getId();\n});\n","import * as React from 'react';\nimport { connect } from 'react-redux';\n\nimport { ApplicationState } from '../../store';\nimport * as User from '@store/user';\nimport * as Job from '@store/jobs';\n\nimport { Jobs } from '@components/user/Jobs';\nimport { ModuleManager } from '@models';\n\nexport default connect(\n (state: ApplicationState) => ({\n ...state.identity,\n ...state.user,\n ...User.plainActions,\n ...Job.plainActions,\n moduleManager: state.modules.moduleManager,\n activityTypes: state.user.activityTypes,\n contractTypes: state.user.contractTypes,\n departments: state.user.departments,\n modules: state.modules.modules,\n work: state.user.work,\n workers: state.user.workers,\n workspaces: state.user.workspaces,\n workShifts: state.user.workShifts,\n resourceStatusTypes: state.user.resourceStatusTypes,\n jobs: []\n }),\n {\n ...User.actionCreators,\n clearSelectedJob: Job.actionCreators.clearSelectedJob,\n },\n)(Jobs as any) as any; // eslint-disable-line @typescript-eslint/no-explicit-any\n","import * as React from 'react';\n\nimport { BreadcrumbItem, useDataTable, useRemoteData, useTranslation } from '@components';\nimport { IContractorInvitation, ISecurity, IWork, ModuleManager } from '@models';\nimport dateUtils from '@utils/date-utils';\n\nexport interface IProps {\n getContractorInvitations: Function;\n security: ISecurity;\n work: IWork;\n moduleManager: ModuleManager;\n}\nexport function ViewContractorInvitationsImpl(props: IProps) {\n const { t } = useTranslation();\n\n let data = useRemoteData(props.getContractorInvitations, {\n parameters: [props.work.id]\n });\n\n const sortedData = data.hasValues() ? data.value.sort((a, b) => dateUtils.compareDates(dateUtils.fromUtc(b.dateTime!), dateUtils.fromUtc(a.dateTime!))) : [];\n const dataTable = useDataTable({\n data: sortedData,\n columns: [\n { title: t('creation.date'), field: 'dateTime', delegate: 'datetime', className: 'td-datetime', sortKey: 'dateTime' },\n { title: t('contractor.invitation.email'), field: 'email', sortKey: 'email' },\n {\n title: t('User'), render: (row: any) => {\n return {props.work.users.find(u => u.id == row.createdBy)?.userName}\n }, sortKey: 'createdBy'\n },\n {\n title: t('Subject'), render: (row: any) => {\n if (props.work.id != 23) {\n return {row.subject}\n }\n else {\n return {t('ContractorInvitation.Azsa.message')}\n }\n }\n },\n { title: t('contractor.invitation.accepted'), field: 'accepted', delegate: 'boolean', className: 'td-md-icon' },\n { title: t('Empresa'), field: 'name', sortKey: 'name' }\n ],\n loading: data.loading,\n });\n\n return
\n \n {dataTable()}\n
\n}\n\nexport function ViewContractorInvitations(props: IProps) {\n\n const res = props\n .moduleManager\n .renderComponent('ViewContractorInvitations', { ...props }, ViewContractorInvitationsImpl);\n\n return res;\n}\n\n\n","import * as React from 'react';\n\nimport { connect } from 'react-redux';\nimport { ApplicationState } from '../../store';\nimport * as ContractorsStore from '../../store/contractors';\nimport { ViewContractorInvitations } from '@components/contractors/ViewContractorInvitations';\n\nexport default connect(\n (state: ApplicationState) => ({\n ...state.identity,\n ...state.user,\n ...ContractorsStore.plainActions,\n moduleManager: state.modules.moduleManager,\n }),\n {}\n)(ViewContractorInvitations as any) as any; // eslint-disable-line @typescript-eslint/no-explicit-any\n","import * as React from 'react';\n\nimport {\n BreadcrumbItem, ValidationBuilder, useDataTable,\n usePaginator, useTranslation,\n useMessage, useLoading, useForm, G, SplitButton,\n FieldsBox,\n useResolveName,\n useWorkFormSettings,\n} from '@components';\n\nimport {\n IContractor, ISecurity, IWork, IPropertyGroupType, PropertyGroupObjectType,\n ICountry,\n IActivityType, ILegalForm, IConstants, IResourceStatusType, IUserIdentity, ResourceType, IFieldValidation, PropertyTypes, IOption, IPropertyGroup,\n} from '@models';\nimport { DynamicProperties } from '@components/user/DynamicProperties';\nimport { CountryRegionSelect } from '@components/common/CountryRegionSelect';\n\n\nimport './ManageContractors.scss';\n\nconst ADD_PERMISSION = 'contractors.add';\n\nconst validateContractorF = (fieldValidations: IFieldValidation[] | undefined, work: IWork) => {\n return ValidationBuilder\n .new()\n .notEmpty('name', 'Name is required')\n .notEmptyIf(work.contractorSettings?.legalFormMandatory == true, 'legalFormId', 'Legal form is required')\n .notEmpty('code', 'Code is required')\n .notEmpty('address', 'Address is required')\n .notEmptyIf(work.id != 21, 'otherActivityType', 'Activity type is required')\n .notEmptyIf(work.id != 21, 'city', 'City is required')\n .notEmptyIf(work.id != 21, 'contactPerson', 'Contact person is required')\n .notEmpty('countryId', 'Country is required')\n .notEmptyIf(work.id != 21, 'phone', 'Phone is required')\n .notEmptyIf(work.id != 21, 'postalCode', 'Postal Code is required')\n .withFieldValidations(ResourceType.Contractor, fieldValidations)\n .lift();\n}\n\nexport default function AddContractor({\n constants,\n activityTypes, legalForms, onChange, propertyGroupTypes, saveContractor, workId, security, fieldValidations, work\n}: {\n activityTypes: IActivityType[],\n constants: IConstants,\n legalForms: ILegalForm[],\n onChange: Function,\n propertyGroupTypes: IPropertyGroupType[],\n saveContractor: Function,\n workId: number,\n security: ISecurity,\n fieldValidations: IFieldValidation[],\n work: IWork\n}) {\n const { t } = useTranslation();\n const messages = useMessage({\n successMessage: t('Contractor added successfully'),\n autoClear: true,\n });\n\n const [selectedLegalForm, setSelectedLegalForm] = React.useState();\n\n const loading = useLoading();\n\n const validateContractor = validateContractorF(fieldValidations, work);\n\n const settings = useWorkFormSettings({ work: work, scope: 'contractor' });\n\n const form = useForm({\n initialValues: {\n properties: [{\n \"value\": \"{}\",\n \"valueObj\": {}\n }],\n workId: workId,\n isActive: true,\n },\n validateOnMount: true,\n validate: validateContractor\n });\n\n const calculateFormPropertiesAreValid = () => {\n\n const mandatoryPropertyIds: number[] = [];\n const mandatoryPropertyNames: string[] = [];\n\n //Si existen el formulario, evaluamos las propiedades dinámicas acordes a las existentes\n if (form.values.properties != undefined && form.values.properties.length > 0) {\n let hiddens: number = 0;\n if (propertyGroupTypes != undefined && propertyGroupTypes.length > 0) {\n const boolTextNames: string[] = [];\n propertyGroupTypes.map(g => {\n // ¿Está ocultada esta propiedad por la forma legal y la propiedad hidable del grupo de propiedades?\n const isHidden = selectedLegalForm?.hideContractorProperties && g.hidable;\n if (!isHidden) {\n if (g.mandatory) {\n // Si el grupo de propiedades no está oculto y es obligatorio -> cargamos su ID y los nombres de sus propiedades\n mandatoryPropertyIds.push(g.id!);\n if (g.properties != undefined && g.properties.length > 0) {\n g.properties.map(p => {\n mandatoryPropertyNames.push(p.name);\n // Si alguna de las propiedades es de tipo BoolText, la almacenamos\n if (p.typeId == PropertyTypes.BOOLTEXT) {\n boolTextNames.push(p.name);\n }\n })\n }\n }\n }\n else {\n // Si está ocultada, ya sea por:\n // 1- El grupo de propiedades no es ocultable\n // 2- La forma legal no oculta las propiedades\n // -> La contabilizamos\n hiddens += 1;\n }\n });\n if (mandatoryPropertyIds != undefined && mandatoryPropertyIds.length > 0) {\n const properties: any[] = [];\n\n // Evaluamos cuáles son las propiedades del formulario que son obligatorias\n form.values.properties.map((p: any) => {\n mandatoryPropertyIds.map(m => {\n if (p.propertyGroupTypeId == m) {\n properties.push(p);\n }\n })\n });\n if (properties != undefined && properties.length > 0) {\n const values: boolean[] = []\n\n properties.map(p => {\n // Si cualquiera de estas propiedades tiene valor, lo evaluamos\n if (p.valueObj != \"{}\") {\n mandatoryPropertyNames.map(m => {\n // Evaluamos si los BoolTexts hallados tienen valor de texto\n if (boolTextNames.includes(m)) {\n boolTextNames.map(b => {\n if (b == m) {\n const valueText = p.valueObj[m + \"_text\"];\n if (valueText == \"\" || valueText == undefined) {\n values.push(false);\n }\n else {\n values.push(true);\n }\n }\n })\n }\n // Obtenemos su valor teniendo en cuenta que undefined es false\n else {\n const value = p.valueObj[m];\n if (value != undefined) {\n values.push(value);\n }\n else {\n values.push(false);\n }\n }\n })\n }\n else {\n values.push(false);\n }\n });\n // Si existe algún true en el array, entonces el grupo de propiedades es válido\n if (values.some(v => v)) {\n propertiesInvalid.current = false;\n }\n else {\n if (hiddens < propertyGroupTypes.length) {\n propertiesInvalid.current = true;\n }\n }\n }\n }\n if (hiddens == propertyGroupTypes.filter(g => g.mandatory).length) {\n propertiesInvalid.current = false;\n }\n }\n }\n }\n\n const calculateProperties = () => {\n const values: IPropertyGroup[] = form.values.properties;\n let newValues: IPropertyGroup[] = [];\n if (selectedLegalForm?.hideContractorProperties) {\n values.map((p: IPropertyGroup) => {\n if (propertyGroupTypes != undefined && propertyGroupTypes.find(g => g.id == p.propertyGroupTypeId)?.hidable) {\n newValues = values.filter(v => v.propertyGroupTypeId == undefined && v.propertyGroupTypeId != p.propertyGroupTypeId && v.value != \"{}\");\n }\n });\n return newValues;\n }\n newValues = values.filter(v => v.propertyGroupTypeId != undefined && v.value != \"{}\")\n\n return newValues;\n }\n\n const doAdd = loading.wrap(async (..._: any) => {\n\n const contractorData: IContractor = {\n activityTypeId: form.values.activityTypeId,\n code: form.values.code,\n legalFormId: form.values.legalFormId,\n name: form.values.name,\n properties: calculateProperties(),\n workId: workId,\n address: form.values.address,\n countryId: form.values.countryId,\n countyId: form.values.countyId,\n remarks: form.values.remarks,\n id: 0,\n providerCode: form.values.providerCode,\n postalCode: form.values.postalCode,\n city: form.values.city,\n contactPerson: form.values.contactPerson,\n phone: form.values.phone,\n otherActivityType: form.values.otherActivityType,\n }\n\n const resp = await saveContractor(workId, contractorData);\n\n let respMessage = resp;\n if (respMessage.error == 'restricted.contractor.message') {\n respMessage.error = `${t('restricted.contractor.message')} ${form.values.code}`;\n }\n\n messages.set(respMessage);\n\n if (resp.hasValue) {\n form.clear();\n onChange(true);\n }\n });\n\n const propertiesInvalid = React.useRef();\n\n const userCanAdd = security.hasPermission(ADD_PERMISSION, false);\n\n const canAdd = form.isValid() && userCanAdd;\n\n const updateRegion = ({ countryId, regionId, countyId }: any) => {\n form.setFieldValue('countryId', countryId);\n form.setFieldValue('regionId', regionId);\n form.setFieldValue('countyId', countyId);\n }\n\n function loadRegions(workId: number) {\n let countries: ICountry[] = [];\n constants.countries.forEach(c => countries.push(Object.assign({}, c)));\n if (workId != 21) {\n for (let c in countries) {\n if (countries[c].regions.length > 0) {\n countries[c].regions = [];\n }\n }\n }\n return countries;\n }\n\n React.useEffect(() => {\n if (legalForms != undefined) {\n const lf = legalForms.find(l => l.id == form.values.legalFormId);\n if (lf != undefined) {\n setSelectedLegalForm(lf);\n }\n }\n }, [form.values.legalFormId])\n\n React.useEffect(() => {\n calculateFormPropertiesAreValid();\n }, [form.values.properties, selectedLegalForm])\n\n if (userCanAdd) {\n return
\n \n {form.input('name')}\n \n \n {form.input('code')}\n \n {work.contractorSettings?.legalFormMandatory == true\n ? \n {form.select('legalFormId', { options: legalForms, filter: true })}\n \n : undefined\n }\n \n {form.input('providerCode')}\n \n {settings.show('activityTypeId') &&\n \n {form.select('activityTypeId', activityTypes)}\n }\n\n {workId != 21 &&\n \n {form.input('otherActivityType')}\n }\n \n \n {form.input('address')}\n \n \n {form.input('postalCode')}\n \n \n
\n \n {form.getFormErrorMessage('countryId')}\n
\n
\n \n {form.input('city')}\n \n {workId != 21 &&\n \n {form.input('contactPerson')}\n }\n \n {form.input('phone')}\n \n
\n \n {form.textarea('remarks', { rows: 5, style: { resize: 'vertical', minHeight: '85px' }, containerStyle: { height: '100%' } })}\n \n
\n form.setFieldValue('properties', p)}\n hideContractorProperties={selectedLegalForm?.hideContractorProperties}\n objectType={PropertyGroupObjectType.JobHasContractor}\n propertyGroupTypes={propertyGroupTypes} />\n {propertiesInvalid.current && {t('dynamic.properties.error')}}\n
\n\n\n {form.errorBox()}\n {messages.render()}\n\n
\n \n {loading.render()}\n \n {t('Add')}\n \n
\n
\n }\n else {\n return null;\n }\n}","import * as React from 'react';\n\nimport {\n useTranslation,\n useSearch, useDataTable\n} from '@components';\n\n\ninterface IProps {\n workId: number,\n removeRestrictedContractor: Function,\n handleToast: (message: string, success: boolean) => void,\n}\n\ninterface IResult {\n applicantEmail: string,\n applicantName: string,\n code: string,\n contractorContactPerson: string,\n contractorEmail: string,\n contractorPhone: string,\n date: string,\n deactivatedAt?: string,\n id: number,\n isActive: boolean,\n legalFormId: number,\n legalFormName: string,\n name: string,\n providerCode: string,\n reason: string,\n remarks: string\n workId: number\n}\n\nexport default function RestrictedContractors(props: IProps) {\n\n const { t } = useTranslation();\n\n const contractors = useSearch({\n workId: props.workId,\n search: 'contractors/restricted',\n filters: {\n workId: props.workId,\n },\n });\n\n React.useEffect(() => {\n contractors.doSearch();\n }, []);\n\n const handleRemove = async (workId: number, id: number,) => {\n const resp = await props.removeRestrictedContractor(workId, id);\n\n if (resp.isError === false) {\n props.handleToast(t('contractor has been unrestricted'), true);\n contractors.doSearch();\n }\n else {\n props.handleToast(t('Error while unrestricting contractor'), false);\n }\n }\n\n const getActions = () => {\n return [\n {\n title: t('Unrestrict'),\n disabled: (row: IResult) => !row.isActive,\n icon: 'fa fa-unlock',\n onClick: (row: IResult) => {\n handleRemove(row.workId, row.id);\n }\n }\n ];\n }\n\n const showDate = (date: string) => {\n return new Date(date).toLocaleDateString();\n }\n\n const dataTable = useDataTable({\n className: ``,\n tooltip: true,\n columns:\n [\n {\n title: t('Date'),\n render: d => {showDate(d.date)},\n field: 'date',\n className: 'td-md',\n sortKey: 'date',\n },\n {\n title: t('In effect'),\n render: d => {`${d.isActive ? t('Yes') : showDate(d.deactivatedAt!)}`},\n field: 'isActive',\n className: 'td-md',\n sortKey: 'isActive',\n },\n {\n title: t('Contractor.Name'),\n field: 'name',\n className: 'td-md left',\n sortKey: 'name',\n },\n {\n title: t('CIF'),\n field: 'code',\n className: 'td-md left',\n sortKey: 'code',\n },\n {\n title: t('Legal form'),\n field: 'legalFormName',\n className: 'td-md left',\n sortKey: 'legalFormName',\n },\n {\n title: t('Provider code'),\n field: 'providerCode',\n className: 'td-md left',\n sortKey: 'providerCode',\n },\n {\n title: t('Contact person'),\n field: 'contractorContactPerson',\n className: 'td-md left',\n sortKey: 'contractorContactPerson',\n },\n {\n title: t('contractor.invitation.email'),\n field: 'contractorEmail',\n className: 'td-md left',\n sortKey: 'contractorEmail',\n },\n {\n title: t('Applicant'),\n field: 'applicantName',\n className: 'td-md left',\n sortKey: 'applicantName',\n },\n {\n title: t('Applicant email'),\n field: 'applicantEmail',\n className: 'td-md left',\n sortKey: 'applicantEmail',\n },\n {\n title: t('Reason'),\n field: 'reason',\n className: 'td-md left',\n sortKey: 'code',\n },\n {\n title: t('Remarks'),\n field: 'remarks',\n className: 'td-md left',\n sortKey: 'code',\n },\n ],\n actions: [\n {\n headerClassName: 'td-sm',\n actions: getActions()\n }\n ],\n data: contractors.value,\n });\n\n return (\n
\n {dataTable()}\n
\n );\n\n}","import * as React from 'react';\n\nimport {\n BreadcrumbItem, ValidationBuilder, useDataTable,\n usePaginator, useTranslation,\n useMessage, useLoading, useForm, G, SplitButton,\n FieldsBox,\n useResolveName,\n useWorkFormSettings,\n useConfirm,\n useSearchPaginate,\n useSearchFilters,\n Tag,\n useInputSearch,\n Tooltip,\n useToast,\n useDialogs\n} from '@components';\n\nimport {\n IContractor, ISecurity, IWork, IPropertyGroupType,\n IActivityType, ILegalForm, IConstants, IResourceStatusType, IUserIdentity, ResourceType, IOption\n} from '@models';\nimport CreateContractorInvitationContainer from '@containers/contractors/CreateContractorInvitationContainer';\nimport ViewContractorInvitationsContainer from '@containers/contractors/ViewContractorInvitationsContainer';\n\nimport './ManageContractors.scss';\nimport { ResourceStatus } from '@components/common/ResourceStatus';\nimport { contractorsRoute, goToContractor, goToContractorRequirements } from '@components/routes';\nimport { ModuleManager } from '@modules';\nimport AddContractor from './AddContractor';\nimport RestrictedContractors from './RestrictedContractors';\nimport RestrictContractor from './RestrictContractor';\n\ntype InvalidateContractorF = (workId: number, id: number) => Promise>;\n\nexport interface IProps {\n activityTypes: IActivityType[];\n constants: IConstants;\n modules: ModuleManager;\n contractor: IContractor;\n getContractors: Function;\n legalForms: ILegalForm[];\n invalidateContractor: InvalidateContractorF;\n propertyGroupTypes: IPropertyGroupType[];\n resourceStatusTypes: IResourceStatusType[];\n saveContractor: Function;\n security: ISecurity;\n work: IWork;\n appUsers: IUserIdentity[];\n reactivateContractor: Function;\n removeRestrictedContractor: Function;\n restrictContractor: Function;\n}\n\n\nenum FormType {\n List = 0,\n CreateInvitation = 1,\n ViewInvitations = 2,\n CreateContractor = 3,\n RestrictedContractors = 4\n}\n\ntype IContractorResult = IContractor & {\n properties: any;\n email?: string | string[];\n validatedCount?: number;\n totalCount?: number;\n}\n\nconst parseContractor = (p: IContractorResult) => {\n const properties = p.properties ? JSON.parse(p.properties) : ({});\n return { ...p, properties };\n}\n\nexport function ManageContractorsImpl(props: IProps) {\n const loading = useLoading();\n const { t } = useTranslation();\n const dialogs = useDialogs();\n\n const settings = useWorkFormSettings({ work: props.work, scope: 'contractor' });\n\n const filterKey = `filters.contractors[workId=${props.work.id}]`;\n\n const filter = useInputSearch({ filterKey });\n const [formType, setFormType] = React.useState(FormType.List);\n\n const userFilters = useSearchFilters({\n workId: props.work.id,\n name: 'contractors/list',\n references: {\n workspace: props.work.workspaces\n },\n persist: true\n });\n\n React.useEffect(() => {\n const keyFilters = Object.keys(userFilters.filters);\n keyFilters.forEach((key: string) => {\n if (userFilters.filters[key] == false && key !== 'active') {\n userFilters.setFilter(key, null);\n } else if (key == 'active' && userFilters.filters[key] == null) {\n userFilters.setFilter('active', true);\n }\n });\n }, [userFilters.filters]);\n\n const paginateData = useSearchPaginate({\n search: 'contractors/list',\n workId: props.work.id,\n map: parseContractor,\n filters: userFilters.merge({ name: filter.value, work_id: props.work.id }),\n dependencies: [filter.value, userFilters.filters],\n lazy: true,\n limit: props.work.id == 21 ? 100 : 10,\n });\n\n const invalidateContractor = loading.wrap(async (contractor: IContractor) => {\n await props.invalidateContractor(props.work.id, contractor.id);\n initialize();\n });\n\n const confirmInvalidate = useConfirm({\n message: t('contractors.invalidate.confirm'),\n accept: invalidateContractor,\n });\n\n const doActivateContractor = loading.wrap(async (i: IContractor) => {\n await props.reactivateContractor(props.work.id, i.id);\n await initialize();\n });\n\n const confirmActivate = useConfirm({\n message: t('resource.activate.contractor.confirm'),\n accept: doActivateContractor\n });\n\n\n const initialize = loading.wrap(async () => {\n setFormType(FormType.List);\n await paginateData.doSearch();\n });\n\n React.useEffect(() => {\n initialize();\n }, []);\n\n const selectContractor = (contractor: IContractor) => {\n goToContractor(props.work.id, contractor.id!);\n }\n\n const loadRequirements = (contractor: IContractor) => {\n goToContractorRequirements(props.work.id, contractor.id!);\n }\n\n const resolveLegalForm = useResolveName(props.legalForms, { translate: true });\n const resolveActivityType = useResolveName(props.activityTypes, { translate: true });\n\n const renderStatus = (contractor: IContractor) =>\n ;\n\n const renderLegalForm = (c: IContractor) => {\n const legalForm = resolveLegalForm(c.legalFormId);\n return
\n {legalForm}\n
;\n }\n\n const renderActivityType = (c: IContractor) => {\n return
\n {resolveActivityType(c.activityTypeId)}\n
\n }\n\n const renderEmail = (c: IContractorResult) => {\n\n return
\n {Array.isArray(c.email) ? c.email.map((email: string, index: number) => {\n if (index == c.email!.length - 1) {\n return {email}\n }\n else {\n return {email}, \n }\n }) : {c.email}}\n
\n };\n\n const toast = useToast();\n\n const handleToast = (message: string, success: boolean) => {\n if (success) {\n toast.show(message)\n }\n else {\n toast.error(message)\n }\n }\n\n\n const table = useDataTable({\n columns: [\n { title: t('Name'), render: d => {d.name}, className: 'td-lg', sortKey: 'name' },\n ...props.modules.injectDataColumns('manageContractors.list', { workId: props.work.id }),\n {\n title: t('Email'), render: c => renderEmail(c),\n className: 'td-md center important', sortKey: 'email'\n },\n settings.show('legalFormId')\n ? { title: t('Legal form'), render: renderLegalForm, className: 'td-md', sortKey: 'legalFormName' }\n : undefined,\n { title: t('contractor.code'), field: 'code', className: 'td-md codes', sortKey: 'code' },\n settings.show('activityTypeId')\n ? { title: t('Activity type'), render: renderActivityType, className: 'td-md' }\n : undefined,\n { title: t('Provider code'), field: 'providerCode', className: 'td-md codes' },\n { title: t('Phone'), field: 'phone', className: 'td-md codes' },\n props.work.id != 19\n ? {\n title: 'Documentation', className: 'td-indicator indicator',\n render: d =>\n goToContractorRequirements(props.work.id, d.id)} className='pointer'>\n \n ,\n }\n : undefined,\n settings.show('currentStatusTypeId')\n ? { title: 'Status', field: 'currentstatustype', render: renderStatus, className: 'td-md' }\n : undefined\n // ...columnProperties,\n ],\n actions: [\n {\n actions: [\n // TODO: Controlar quién puede ver los datos del contratista - Item #906\n { title: t('View data'), onClick: selectContractor },\n { title: t('Requirements'), onClick: loadRequirements },\n props.security.hasPermission('contractors.force.status') ?\n {\n title: t('contractors.invalidate'),\n disabled: r => r.isActive == false,\n onClick: confirmInvalidate,\n } : undefined,\n props.security.hasPermission('contractors.force.status')\n ? { title: t('resource.activate'), disabled: r => r.isActive == true, onClick: confirmActivate }\n : undefined,\n //TODO: ¿Eliminar contratistas? - Item #906\n (props.security.hasPermission('restrict.resources'))\n ? { title: t('restrict.contractor'), onClick: r => dialogs.show('restrict-contractor', { workId: props.work.id, contractorId: r.id }) }\n : undefined\n ]\n }\n ],\n tableStyle: {height: 'fit-content'},\n data: paginateData.data,\n onSort: (key, order) => paginateData.sortBy(key, order),\n denyLocalSort: true,\n });\n\n const paginator = usePaginator({\n data: paginateData.value,\n onChange: (page, limit) =>\n paginateData.doSearch(userFilters.merge({ name: filter.value, work_id: props.work.id }), page, limit),\n onExport: () => paginateData.exportToXls(\n userFilters.merge({ name: filter.value, work_id: props.work.id }),\n t('contractors.export.filename'), true),\n });\n\n const getActions = () => {\n const actions = [];\n const security = props.security;\n\n actions.push({\n label: t('contractors.list'),\n command: () => setFormType(FormType.List),\n });\n\n if (security.hasPermission('contractors.add')) {\n actions.push({\n label: t('contractors.add'),\n command: () => setFormType(FormType.CreateContractor),\n });\n }\n\n if (security.hasPermission('contractors.invite')) {\n actions.push({\n label: t('contractors.invite'),\n command: () => setFormType(FormType.CreateInvitation),\n });\n if (security.hasPermission('contractors.invitations.list')) {\n actions.push({\n label: t('contractors.invitations.list'),\n command: () => setFormType(FormType.ViewInvitations),\n });\n }\n }\n\n if (props.security.hasPermission('restrict.resources')) {\n actions.push({\n label: t('restrict.contractors.add'),\n command: () => setFormType(FormType.RestrictedContractors),\n });\n }\n\n\n return actions;\n }\n\n const actions = getActions();\n\n\n return
\n {toast.render()}\n setFormType(FormType.List)}\n text={t('Contractors')} />\n\n {confirmInvalidate}\n\n
\n
\n
\n \n {filter.render()}\n {userFilters.renderAsButton()}\n {loading.renderBox()}\n \n \n \n
\n {formType === FormType.List && <>\n\n {dialogs.render('restrict-contractor', {\n title: t('restrict.contractor.add'),\n className: 'g pd',\n style: { width: '60vw' }\n }, (r: any) =>\n \n )}\n
\n {table()}\n
\n
\n {paginator()}\n }\n\n {formType === FormType.CreateInvitation && <>\n
\n

{t('contractors.invite.message')}

\n setFormType(FormType.List)}\n onCreate={() => setFormType(FormType.List)} />\n
\n }\n\n {formType === FormType.ViewInvitations && <>\n {/* //TODO: Controlar quién puede ver las invitaciones a contratistas - Item #906 */}\n \n }\n\n {formType === FormType.CreateContractor && <>\n
\n \n
\n }\n {formType === FormType.RestrictedContractors && <>\n \n }\n
\n
\n
\n}\n\n\nexport const ManageContractors = React.memo(ManageContractorsImpl, (prev, next) => {\n return prev.work.id === next.work.id;\n});","import * as React from 'react';\n\nimport {\n useTranslation,\n useForm,\n G,\n useResolveName,\n useLoading\n} from '@components';\nimport {\n ISecurity, IWork\n} from '@models';\nimport './RestrictContractor.scss';\n\ninterface IProps {\n security: ISecurity;\n selectedContractorId: number;\n data: IContractor[] | any;\n work: IWork;\n restrictContractor: Function;\n handleToast: Function;\n onClose: Function;\n legalForms: any;\n}\n\ninterface IContractor {\n id: number;\n activityTypeId?: number;\n activityTypeName: string;\n address: string;\n city: string;\n code: string;\n contactPerson: string;\n countryId: number;\n countyId: number;\n creationDate: string;\n currentStatusDate: string\n currentStatusType: number\n email: string[];\n endDate?: string;\n legalFormId: number\n legalFormName: string\n name: string\n otherActivityType?: string\n phone: string\n providerCode: string\n workId: number\n}\n\n\ninterface IFormValues {\n workId: number;\n name: string;\n code: string;\n legalFormId: number;\n providerCode: string;\n contractorContactPerson: string;\n contractorEmail: string;\n contractorPhone: string;\n contractorId: number;\n applicantName: string;\n applicantEmail: string;\n reason: string;\n remarks: string;\n date: string;\n}\n\nexport default function RestrictContractor(props: IProps) {\n\n const { t } = useTranslation();\n\n const [isSaving, setIsSaving] = React.useState(false);\n const loading = useLoading(true);\n\n const form = useForm({\n initialValues: {\n workId: props.work.id,\n name: '',\n code: '',\n legalFormId: 0,\n providerCode: '',\n contractorContactPerson: '',\n contractorEmail: '',\n contractorPhone: '',\n contractorId: props.selectedContractorId,\n applicantName: props.security.user?.userName ?? '',\n applicantEmail: props.security.user?.email ?? '',\n reason: '',\n remarks: '',\n date: new Date().toISOString().split('T')[0]\n },\n\n onSubmit: (data: IFormValues) => {\n handleSave();\n }\n })\n\n const contractor = props.data.find((x: IContractor) => x.id === props.selectedContractorId);\n\n const handleSave = async () => {\n setIsSaving(true);\n\n const timeoutPromise = new Promise((_, reject) => {\n setTimeout(() => reject(new Error(t('restricted.contractor.workInProgress'))), 5000);\n });\n\n const respPromise = new Promise((resolve, reject) => {\n const resp = props.restrictContractor(\n props.work.id,\n contractor?.name,\n contractor?.code,\n contractor?.legalFormId,\n contractor?.providerCode,\n contractor?.contactPerson,\n contractor?.email[0],\n contractor?.phone,\n contractor?.id,\n form.values.applicantName,\n form.values.applicantEmail,\n form.values.reason,\n form.values.remarks\n );\n resolve(resp);\n });\n\n Promise.race([respPromise, timeoutPromise]).then((value : any) => {\n if (value.isError === false && typeof value.value == 'number') {\n props.handleToast(t('Contractor restricted successfully'), true);\n } else {\n props.handleToast(t('Error restricting contractor'), false);\n }\n }).catch((error) => {\n props.handleToast(error.message, true);\n }).finally(() => {\n props.onClose();\n });\n }\n\n const resolveLegalForm = useResolveName(props.legalForms, { translate: true });\n\n return (\n
\n {!isSaving? <>\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n form.values.applicantName = e.target.value}\n required\n />\n \n \n form.values.applicantEmail = e.target.value}\n required\n />\n \n \n form.values.date = e.target.value}\n required\n />\n \n \n form.values.reason = e.target.value}\n />\n \n \n form.values.remarks = e.target.value}\n />\n \n
\n
\n \n\n \n {t('Save')}\n \n
\n : loading.renderBox()\n\n }\n
\n )\n}","import * as React from 'react';\n\nimport { connect } from 'react-redux';\nimport { ApplicationState } from '../../store';\nimport * as ContractorsStore from '../../store/contractors';\nimport { ManageContractors } from '../../components/contractors/ManageContractors';\nimport { isJobHasContractorPropertyGroupType } from '@models';\n\nexport default connect(\n (state: ApplicationState) => ({\n ...state.identity,\n ...state.user,\n ...ContractorsStore.plainActions,\n modules: state.modules.moduleManager,\n constants: state.constants,\n propertyGroupTypes: state.user.propertyGroupTypes.filter(isJobHasContractorPropertyGroupType)\n }),\n ContractorsStore.actionCreators,\n)(ManageContractors as any) as any; // eslint-disable-line @typescript-eslint/no-explicit-any\n","import * as React from 'react';\n\nimport { connect } from 'react-redux';\nimport { ApplicationState } from '../../store';\nimport * as ContractorsStore from '../../store/contractors';\nimport { ManageSubcontractors } from '../../components/contractors/ManageSubcontractors';\n\nexport default connect(\n (state: ApplicationState) => ({\n ...state.identity,\n ...state.user,\n ...state.constants,\n ...ContractorsStore.plainActions,\n ...state.jobs.selectedJobHasContractor\n }),\n {},\n)(ManageSubcontractors as any) as any; // eslint-disable-line @typescript-eslint/no-explicit-any","import * as React from 'react';\nimport {\n BreadcrumbItem, ValidationBuilder, useDataTable,\n usePaginator, useRemoteData, useTranslation,\n useMessage, useLoading, useForm, G, SplitButton,\n useSearch,\n Tag,\n} from '@components';\nimport {\n ISecurity,\n IWork,\n ResourceType\n} from '@models';\nimport { IContractor, IWorkerDocumentType, IWorkerType } from '@models/resources';\nimport { goToJobMachineries, goToJobWorkers, goToSubContractors, subContractorsRoute } from '@components/routes';\nimport { ResourceStatus } from '@components/common/ResourceStatus';\nimport { redirectTo } from '@utils';\n\ntype GetContractorF = (workId: number) => Promise;\n\nexport interface IProps {\n work: IWork;\n getContractorFromAppUser: GetContractorF;\n}\n\nexport function ManageSubcontractors(props: IProps) {\n const { t } = useTranslation();\n const [contractor, setContractor] = React.useState();\n\n const loading = useLoading();\n\n const getContractor = loading.wrap(async () => {\n const c = await props.getContractorFromAppUser(props.work.id);\n setContractor(c);\n });\n\n React.useEffect(() => {\n getContractor();\n }, [props.work]);\n\n React.useEffect(() => {\n search.doSearch();\n }, [contractor]);\n\n const search = useSearch({\n workId: props.work.id,\n search: 'subcontractors',\n filters: {\n workId: props.work.id,\n contractorId: contractor?.id,\n RequireContractorId: contractor?.id,\n }\n });\n\n const renderStatus = (r: any) => {\n return ;\n };\n\n const renderRequirements = (r: any) => {\n return
redirectTo(`/work/${props.work.id}/jobs/${r.jobId}/contractor/${r.id}/requirements`)}>\n \n
\n }\n\n const renderMachineries = (r: any) => {\n return
goToJobMachineries(props.work.id, r.jobId, r.id)}>\n \n
\n }\n\n const renderWorkers = (r: any) => {\n return
goToJobWorkers(props.work.id, r.jobId, r.id)}>\n \n
\n }\n\n const dataTable = useDataTable({\n columns: [\n { title: 'Contractor', field: 'name', className: 'center'},\n { title: 'Job', field: 'jobName', className: 'center'},\n { title: 'Start date', field: 'startDate', className: 'center'},\n { title: 'Description', field: 'description', className: 'center'},\n { title: 'Status', render: renderStatus, className: 'center'},\n {\n title: 'Requirements',\n render: renderRequirements,\n className: 'center',\n },\n { title: 'Machineries', render: renderMachineries, className: 'center'},\n { title: 'Workers', render: renderWorkers, className: 'center'}\n ],\n data: search.value\n });\n\n return
\n goToSubContractors}\n text={t('Subcontractors')} />\n {contractor &&\n
\n {dataTable()}\n
\n }\n
\n}","import * as React from 'react';\n\nimport { connect } from 'react-redux';\nimport { ApplicationState } from '../../store';\nimport * as ContractorsStore from '@store/contractors';\nimport { ContractorRequirements } from '@components/contractors/ContractorRequirements';\n\nexport default connect(\n (state: ApplicationState) => ({\n ...state.identity,\n ...state.user,\n ...state.constants,\n ...ContractorsStore.plainActions,\n }),\n {},\n)(ContractorRequirements as any) as any; // eslint-disable-line @typescript-eslint/no-explicit-any\n","import * as React from 'react';\n\nimport { IContractor, IWork } from '@models';\nimport EditRequirements from '@containers/requirements/EditRequirementsContainer';\nimport { RequirementTargetType } from '@models/requirements';\nimport { useLoading } from '@components';\n\ntype ContractorFromAppUserF = (workId: number) => Promise;\n\nexport interface IProps {\n getContractorFromAppUser: ContractorFromAppUserF;\n work: IWork;\n}\n\nexport function ContractorRequirements(props: IProps) {\n const [contractor, setContractor] = React.useState();\n\n const loading = useLoading();\n\n const getContractor = loading.wrap(async () => {\n const c = await props.getContractorFromAppUser(props.work.id);\n\n setContractor(c);\n });\n\n React.useEffect(() => {\n getContractor();\n }, [props.work]);\n\n return
\n {loading.renderBox()}\n\n {contractor &&\n }\n
\n}","import * as React from 'react';\n\nimport {\n F, Message, TabPanel, TabView, Tag,\n useDataTable, useDialogs, useForm, useLoading, useMessage, useRemoteData, useSearch, useTranslation\n} from '@components';\nimport { IContractor, IOption, ISubContractorRequest, IWork, IUserIdentity, ModuleManager } from '@models';\nimport './ManageSubContractorRequests.scss';\n\ntype ProcessF = (workId: number, subContractorRequestId: number, reason?: string) => IOption;\n\nexport interface IProps {\n acceptSubContractorRequest: ProcessF;\n getContractorFromAppUser: Function;\n getSubContractorRequestsAsTarget: Function;\n rejectSubContractorRequest: ProcessF;\n work: IWork;\n getJob: Function;\n getContractor: Function;\n getJobHasContractor: Function;\n getJobHasContractorFromAppUser: Function;\n user?: IUserIdentity;\n moduleManager: ModuleManager;\n}\n\nfunction RequestState({ request }: { request: ISubContractorRequest }) {\n const { t } = useTranslation();\n\n if (request.rejected) {\n return ;\n }\n else if (!request.acceptedByContractor && !request.acceptedByWork) {\n return ;\n }\n else if (request.acceptedByContractor) {\n return ;\n }\n else if (request.acceptedByWork) {\n return ;\n }\n else {\n return null;\n }\n}\n\nfunction ProcessSubContractorRequest({\n accept, reject,\n onClose, onSuccess, request,\n workId\n}: {\n accept: ProcessF, reject: ProcessF,\n onSuccess: Function,\n onClose: Function, request: ISubContractorRequest,\n workId: number,\n}) {\n const { t } = useTranslation();\n const loading = useLoading();\n const message = useMessage();\n\n const form = useForm({\n initialValues: request,\n });\n\n const doAccept = loading.wrap(async () => {\n const res = await accept(workId, request.id!);\n message.set(res);\n\n if (res.hasValue) {\n onSuccess();\n }\n });\n\n const doReject = loading.wrap(async () => {\n const res = await reject(workId, request.id!, form.get('rejectedReason'));\n message.set(res);\n\n if (res.hasValue) {\n onSuccess();\n }\n });\n\n return
\n
\n \n
\n {request.sourceContractor?.name}\n {t('Has requested you as subcontractor for the job')}\n {request.job?.name}\n {request.job?.code}\n
\n \n \n
\n
\n \n
\n \n \n
\n \n {form.textarea('rejectedReason')}\n \n
\n
\n \n
\n
\n
\n \n
\n\n {message.render()}\n\n
\n {loading.render()}\n
\n \n
\n
\n}\n\nexport function ManageSubContractorRequestsImpl(props: IProps) {\n const { t } = useTranslation();\n const dialogs = useDialogs();\n const [data, setData] = React.useState([]);\n\n const [selfContractorId, setSelfContractorId] = React.useState(0);\n\n React.useEffect(() => {\n props.getContractorFromAppUser(props.work?.id).then((u: IContractor) =>\n setSelfContractorId(u?.id));\n }, [props.work?.id]);\n\n const prepareToProcessRequest = (r: ISubContractorRequest) => {\n dialogs.show('process', r);\n }\n\n const needWorkAcceptance = props.work.settingsObj?.acceptSubContractorRequests ?? false;\n\n const canProcessRequest = (r: ISubContractorRequest) => {\n return !r.rejected\n && !r.acceptedByContractor\n && (r.acceptedByWork || !needWorkAcceptance)\n && (r.targetContractor?.id == selfContractorId);\n }\n\n const query = useRemoteData(\n props.getSubContractorRequestsAsTarget, {\n parameters: [props.work.id],\n });\n\n const invitationSearch = useSearch({\n workId: props.work.id,\n search: 'jobs/subcontractor.invitations.contractors',\n filters: {\n workId: props.work.id,\n contractorId: selfContractorId,\n },\n lazy: true,\n });\n\n const userInvitationsSearch = useSearch({\n workId: props.work.id,\n search: 'jobs/subcontractor.invitations.users',\n filters: {\n workId: props.work.id,\n },\n lazy: true,\n });\n\n const initialize = async () => {\n const req = await query.query();\n const invitations = await invitationSearch.doSearch();\n const userInvitations = await userInvitationsSearch.doSearch();\n\n\n const selfContractor = await props.getContractorFromAppUser(props.work?.id);\n const selfContractorId = selfContractor?.id;\n\n let parentIds: any[] = [];\n\n if (props.user?.roles.includes('Contractor')) {\n parentIds = (invitations.map((i: any) => {\n if (selfContractorId === i.sourceId) {\n return i.jobHasContractorId;\n }\n\n if (selfContractor.name != null && selfContractor.name === i.targetName) {\n return i.jobHasContractorId;\n }\n }));\n\n parentIds.push(selfContractorId);\n } else {\n parentIds = (invitations.map((i: any) => {\n return i.jobHasContractorId;\n }));\n }\n\n\n parentIds = parentIds.filter((i: any) => i != undefined);\n\n invitations.map((x: any) => {\n if (parentIds.includes(x.parentId)) {\n parentIds.push(x.jobHasContractorId);\n }\n });\n\n let invitationsAsRequests: ISubContractorRequest[] = [];\n\n for (const invitation of invitations) {\n if (parentIds.includes(invitation.jobHasContractorId)) {\n let request: ISubContractorRequest = {\n jobsDescription: invitation.description,\n jobId: invitation.jobId,\n shipmentNumber: invitation.shipmentNumber,\n sourceContractorId: invitation.sourceId,\n sourceContractor: await props.getContractor(props.work.id, invitation.sourceId),\n targetContractorId: 0,\n targetContractor: invitation.targetName,\n workId: props.work.id,\n dateTime: invitation.dateTime,\n acceptedByContractorDateTime: invitation.acceptedDate,\n rejected: invitation.accepted != null ? !invitation.accepted : false,\n acceptedByContractor: invitation.accepted,\n job: invitation.jobName,\n id: 0,\n jobHasContractorId: 0\n };\n invitationsAsRequests.push(request);\n }\n }\n\n let userInvitationsAsRequests: ISubContractorRequest[] = [];\n for (const invitation of userInvitations) {\n if (invitation.jobId != null && (invitation.parentId && parentIds.includes(invitation.parentId) || invitation.contractorName === selfContractor?.name)) {\n let request: ISubContractorRequest = {\n jobsDescription: invitation.description,\n jobId: invitation.jobId,\n shipmentNumber: invitation.shipmentNumber,\n sourceContractorId: 0,\n sourceContractor: invitation.source,\n targetContractorId: 0,\n targetContractor: invitation.contractorName,\n dateTime: invitation.dateTime,\n workId: props.work.id,\n rejected: invitation.accepted != null ? !invitation.accepted : false,\n acceptedByContractor: invitation.accepted,\n acceptedByContractorDateTime: invitation.acceptedDate,\n job: invitation.description,\n id: 0,\n jobHasContractorId: 0\n };\n userInvitationsAsRequests.push(request);\n }\n }\n\n setData(req.concat(invitationsAsRequests).concat(userInvitationsAsRequests));\n }\n\n React.useEffect(() => {\n initialize();\n }, [props.work.id]);\n\n const renderRequestedContractor = (r: ISubContractorRequest) => {\n const className = r.targetContractor?.id === selfContractorId\n ? 'strong'\n : undefined;\n return {r.targetContractor?.name ?? r.targetContractor};\n }\n\n const dataTable = useDataTable({\n className: 'a-left',\n columns: [\n { title: t('Date'), sortKey: 'dateTime', className: 'td-datetime a-left', field: 'dateTime', delegate: 'date' },\n { title: t('Applicant'), sortKey: 'sourceContractor', className: 'a-left', render: r => r.sourceContractor?.name ?? r.sourceContractor },\n { title: t('Requested contractor'), sortKey: 'targetContractor', className: 'a-left', render: renderRequestedContractor },\n { title: t('Description'), sortKey: 'jobsDescription', className: 'a-left', field: 'jobsDescription' },\n { title: t('Job'), sortKey: 'job.code', className: 'a-left', render: r => r.job?.name ?? r.job },\n { title: t('State'), sortKey: 'acceptedByContractor', className: 'td-lg a-left', render: r => },\n ],\n actions: [\n { icon: 'play', className: 'a-left', onClick: prepareToProcessRequest, disabled: r => !(canProcessRequest(r)) },\n ],\n data: data,\n loading: query.loading,\n });\n\n const refresh = () => {\n dialogs.clear();\n initialize();\n }\n\n return
\n {dataTable()}\n\n {dialogs.render(\n 'process',\n {},\n (data: ISubContractorRequest) =>\n dialogs.clear()}\n request={data} />)}\n
;\n}\n\nexport function ManageSubContractorRequests(props: IProps) {\n const res = props\n .moduleManager\n .renderComponent('WorkSubContractorRequests', { ...props }, ManageSubContractorRequestsImpl);\n return res;\n}\n","import * as React from 'react';\n\nimport { connect } from 'react-redux';\nimport { ApplicationState } from '../../store';\nimport * as ContractorsStore from '../../store/contractors';\nimport * as JobsStore from '../../store/jobs';\nimport { ManageSubContractorRequests } from '../../components/contractors/ManageSubContractorRequests';\n\nexport default connect(\n (state: ApplicationState) => ({\n ...state.identity,\n ...state.user,\n ...ContractorsStore.plainActions,\n moduleManager: state.modules.moduleManager,\n }),\n {}\n)(ManageSubContractorRequests as any) as any; // eslint-disable-line @typescript-eslint/no-explicit-any\n","import * as React from 'react';\nimport { Route } from 'react-router';\n\nimport ContractorRequirements from '@containers/contractors/ContractorRequirementsContainer';\nimport ManageSubContractorRequestsContainer from '@containers/contractors/ManageSubContractorRequestsContainer';\n\nexport interface IProps {}\n\nexport function ContractorModule(props: IProps) {\n return <>\n \n \n ;\n}","import * as React from 'react';\n\nimport { classNames, useConfirm, useTranslation, useSearchFilters, Tag, useSearch } from '@components';\nimport { IOption, ISecurity, IWork } from '@models';\nimport {\n messageTypes, IMessage, translateNotificationIcon, messageTitle, MessageType\n} from '@models/notifications';\nimport { NotificationMessageDisplayName } from './NotificationMessageDisplayName';\nimport { NotificationMessageEffect } from './NotificationMessageEffect';\nimport { MessageIcon } from './MessageIcon';\nimport * as DateUtils from '@utils/date-utils';\n\nimport './NotificationsCenter.scss';\nimport { currentLocale } from '../../i18n';\n\ntype ResolveMessageF = (id: string) => Promise>;\ntype ResolveMessagesF = (ids: string[]) => Promise>;\n\n\nexport default function NotificationMessage({ message, resolveMessage, onSelect, checked, onCheck }: {\n message: IMessage, resolveMessage: ResolveMessageF, onSelect: Function,\n checked: boolean,\n onCheck: Function,\n}) {\n const { t } = useTranslation();\n\n const confirm = useConfirm({\n message: t('notifications.message.close-confirm'),\n accept: (messageId: string) => resolveMessage(messageId),\n });\n\n let langRegExp = new RegExp(/(--\\w{2}--)/)\n\n const detectLanguages: any = (input: string, acc = [], level = 1) => {\n const m = langRegExp.exec(input);\n\n if (m && input.length > 0) {\n const lang = m[0];\n const index = input.indexOf(lang) + lang.length;\n return detectLanguages(input.substring(index), [...acc, lang], level + 1);\n }\n else {\n return acc;\n }\n }\n\n const languages: string[] = detectLanguages(message.message);\n const localeIncluded = languages.map(d => d.includes(currentLocale()) ? currentLocale() : undefined).filter(d => d !== undefined)[0];\n\n const getNotificationByLanguage = (input: string, language: string | undefined = undefined) => {\n if (language) {\n const i = input.indexOf('--' + language + '--');\n const l = input.indexOf('--', i + 6);\n const start = i >= 0 ? i + 6 : 0;\n\n return input.substring(start, l >= 0 ? l : input.length);\n }\n else if (input.indexOf('--') >= 0) {\n return input.substring(0, input.indexOf('--'));\n }\n else {\n return input;\n }\n }\n message.message = getNotificationByLanguage(message.message, localeIncluded)\n\n return \n {message.icon &&\n onSelect(message)} className={translateNotificationIcon(message.icon)} />}\n \n\n {DateUtils.format(message.date, 'd-m-y h:i')}\n\n onSelect(message)}>\n {messageTitle(message)}\n \n\n onSelect(message)}>\n \n \n\n \n onCheck()} id={message.id} />\n confirm(message.id, e)}\n title={t('notifications.message.close')}>\n \n \n
\n}","import * as React from 'react';\n\nimport { classNames, useConfirm, useTranslation, useSearchFilters, Tag, useSearch } from '@components';\nimport { IOption, ISecurity, IWork } from '@models';\nimport {\n messageTypes, IMessage, translateNotificationIcon, messageTitle, MessageType\n} from '@models/notifications';\nimport { NotificationMessageDisplayName } from './NotificationMessageDisplayName';\nimport { NotificationMessageEffect } from './NotificationMessageEffect';\nimport { MessageIcon } from './MessageIcon';\nimport NotificationMessage from './NotificationMessage';\nimport * as DateUtils from '@utils/date-utils';\n\nimport './NotificationsCenter.scss';\nimport { currentLocale } from '../../i18n';\n\ntype ResolveMessageF = (id: string) => Promise>;\ntype ResolveMessagesF = (ids: string[]) => Promise>;\n\nexport interface IProps {\n className?: string;\n messages: IMessage[];\n loadMessages: Function;\n resolveMessage: ResolveMessageF;\n resolveMessages: ResolveMessagesF;\n security: ISecurity;\n work: IWork;\n workId: number;\n}\n\n\n\ntype IMessageWithSearch = IMessage & {\n jobSearch: string;\n contractorSearch: string;\n messageSearch: string;\n}\n\nconst filterMessage = (message: IMessageWithSearch, filters: any) => {\n return (filters.messageType == undefined || message.notificationType == filters.messageType)\n && (filters.job == null || filters.job == '' || message.jobSearch.includes(filters.job.toLowerCase()))\n && (filters.contractor == null || filters.contractor == '' || message.contractorSearch.includes(filters.contractor.toLowerCase()))\n && (filters.message == null || filters.message == '' || message.messageSearch.includes(filters.message.toLowerCase()))\n && (message.message != null)\n && (message.message != '')\n && (message.notificationType == MessageType.RELOAD_NOTIFICATIONS);\n}\n\nconst filterMessages = (messages: IMessageWithSearch[], filters: any) => {\n return messages.filter(m => filterMessage(m, filters));\n}\n\nconst contractorProperties = ['ContractorName', 'ContractorCode'];\nconst jobProperties = ['JobCode', 'JobName', 'JobDescription'];\n\nconst parseMessageProps = (data: any, propNames: string[]) => {\n const props = propNames.map(p => data[p] ?? '').join('').toLowerCase();\n\n return props ?? '';\n}\n\nconst parseMessages = (messages: IMessage[]) => {\n return messages.map(m => ({\n ...m,\n jobSearch: parseMessageProps(m.data ?? {}, jobProperties),\n contractorSearch: parseMessageProps(m.data ?? {}, contractorProperties),\n messageSearch: m.message?.toLowerCase(),\n }));\n}\n\nconst excludeNotificationTypes = [\n MessageType.INVALID_ITA,\n MessageType.RESOURCE_AUTHORIZED,\n MessageType.RESOURCE_REJECTED,\n // MessageType.REQUIREMENT_EXPIRED,\n];\n\nexport function NotificationsCenter(props: IProps) {\n const { t } = useTranslation();\n\n const confirm = useConfirm({\n message: t('notifications.messages.close-confirm'),\n accept: () => doRemoveCheckedMessages(),\n });\n\n const originalMessages = React.useRef(\n parseMessages(props.messages));\n\n const [messages, setMessages] = React.useState(originalMessages.current);\n const [selectedMessage, setSelectedMessage] = React.useState();\n const [checkedMessages, setCheckedMessages] = React.useState([]);\n\n const filterMessageTypes = (messageTypes : { id: MessageType; name: string;}[] ): { id: MessageType; name: string; }[] => {\n\n const result = messageTypes;\n\n switch (props.workId) {\n case 21:\n return result.filter(m => !excludeNotificationTypes.includes(m.id));\n case 23:\n return result.filter(m => m.id != MessageType.MESSAGE);\n default:\n return result;\n }\n }\n\n const filters = useSearchFilters({\n name: 'notifications/list',\n workId: props.workId ?? 0,\n references: {\n messageType: filterMessageTypes(messageTypes)\n },\n persist: true\n });\n\n const notificationsSearch = useSearch({\n workId: props.workId,\n search: 'notifications/userNotifications',\n lazy: true,\n filters : {\n ...filters.filters,\n workId: props.workId,\n userId: props.security.user?.id ?? 0\n }\n });\n\n React.useEffect(() => {\n if(filters.hasFilters()){\n if(filters.filters.messageType == 0){\n filters.filters.messageType = undefined;\n }\n notificationsSearch.doSearch();\n }\n }, [filters.filters]);\n\n React.useEffect(() => {\n if (notificationsSearch.value && filters.hasFilters()) {\n const searchValue : IMessage[] = notificationsSearch.value as IMessage[];\n setMessages(parseMessages(searchValue)\n .sort((a, b) =>\n new Date(b.date!).getTime() - new Date(a.date!).getTime()));\n }else{\n if (props.workId != null) {\n setMessages(originalMessages.current\n .filter(om => om.data.WorkId == props.workId)\n .sort((a, b) =>\n new Date(b.date!).getTime() - new Date(a.date!).getTime()));\n } else {\n setMessages(originalMessages.current\n .sort((a, b) =>\n new Date(b.date!).getTime() - new Date(a.date!).getTime()));\n }\n }\n }, [notificationsSearch.value]);\n\n React.useEffect(() => {\n props.loadMessages();\n }, []);\n\n React.useEffect(() => {\n const original = parseMessages(props.messages);\n originalMessages.current = original;\n if (filters.hasFilters()) {\n setMessages(filterMessages(original, filters.filters));\n }\n else {\n setMessages(original\n .sort((a, b) =>\n new Date(b.date!).getTime() - new Date(a.date!).getTime()));\n }\n }, [props.messages]);\n\n const doRemoveCheckedMessages = () => {\n props.resolveMessages(checkedMessages.map(m => m.id));\n }\n\n const doCheckAllMessages = () => {\n if (checkedMessages.length == messages.length) {\n setCheckedMessages([]);\n }\n else {\n setCheckedMessages(messages);\n }\n }\n\n const messagesToRender = messages\n .filter(m => m.notificationType != MessageType.RELOAD_NOTIFICATIONS);\n\n return
\n
\n {t('Notifications')}\n \n \"gstore\"\n \n
\n \n
\n
\n \n
\n {filters.renderAsButton()}\n
\n\n
\n {selectedMessage &&\n setSelectedMessage(undefined)}\n resolveMessage={props.resolveMessage}\n security={props.security}\n workId={props.workId}\n work={props.work} />}\n {messagesToRender.map(m =>\n setCheckedMessages(checkedMessages.includes(m) ? checkedMessages.filter(r => r != m) : [...checkedMessages, m])}\n />)}\n
\n
\n}\n","import { connect } from 'react-redux';\nimport { ApplicationState } from '../../store';\nimport * as NotificationsStore from '@store/notifications';\n\nimport { NotificationsCenter } from '@components/notifications/NotificationsCenter';\n\nexport default connect(\n (state: ApplicationState) => ({\n messages: state.notifications.messages,\n ...state.identity,\n workId: state.work.work?.id ?? state.user.work?.id\n }),\n {\n loadMessages: NotificationsStore.actionCreators.loadMessages,\n resolveMessage: NotificationsStore.actionCreators.clearMessage,\n resolveMessages: NotificationsStore.actionCreators.clearMessages,\n },\n)(NotificationsCenter as any) as any; // eslint-disable-line @typescript-eslint/no-explicit-any\n","import * as React from 'react';\n\nimport { Card, useTranslation } from '@components';\nimport NotificationsCenter from '@containers/notifications/NotificationsCenterContainer';\nimport { IWork } from '@models';\n\nimport './SelectWork.scss';\n\nexport interface IProps {\n works: IWork[];\n selectWork: Function;\n}\n\nconst WorkCard = ({ work, selectWork }: {\n work: IWork,\n selectWork: Function,\n}) => {\n // return
selectWork(work.id)}>\n //
\n // gstore\n //
\n //
;\n\n var workClass = `card-select-work pointer work-${work.id}`;\n var isMain = work.id === 19 || work.id === 21 || work.id === 22 || work.id === 23;\n return
selectWork(work.id)}>\n \n
\n {work.name}\n
\n
\n}\n\nexport function SelectWork(props: IProps) {\n const { t } = useTranslation();\n\n return
\n \n\n
\n
\n {t('Clients')}\n \"gstore\"\n
\n
\n {(props.works ?? []).map((w, i) =>\n )}\n
\n
\n {/*
\n
\n {t('Clients')}\n \"gstore\"\n
\n
*/}\n
\n}","import { connect } from 'react-redux';\nimport { ApplicationState } from '../../store';\nimport * as User from '../../store/user';\n\nimport { SelectWork } from '../../components/user/SelectWork';\n\nexport default connect(\n (state: ApplicationState) => ({\n works: state.user.works ?? [],\n }),\n User.actionCreators,\n)(SelectWork as any) as any; // eslint-disable-line @typescript-eslint/no-explicit-any\n","export enum ReportOutputType {\n Table = 0,\n BarChart = 1,\n PieChart = 2,\n}\n\nexport interface IReportColumn {\n name: string;\n title?: string;\n className?: string;\n delegate?: string;\n style?: string;\n hidden?: boolean;\n}\n\nexport interface IReportOutputAction {\n action: string;\n title?: string;\n parameter?: string;\n icon?: string;\n}\n\nexport interface IReportDefinition {\n name: string;\n title: string;\n hidden?: boolean;\n icon?: string;\n className?: string;\n\n outputs: IReportOutput[];\n}\n\nexport interface IReportOutput {\n searchName: string;\n autoStart?: boolean;\n outputType: ReportOutputType;\n columns?: IReportColumn[];\n actions?: IReportOutputAction[];\n canExport?: boolean;\n}\n","import * as React from 'react';\n\ntype DispatcherF = (value: any) => void;\n\nexport default function useSynchronizedDispatch(dispatcher: DispatcherF, delay: number = 200) {\n const r = React.useRef(new SynchronizedDispatch(dispatcher, delay));\n\n return r.current;\n}\n\nexport class SynchronizedDispatch {\n private value?: any;\n private ts: number;\n private sended: boolean;\n\n constructor(\n private dispatchEvent: DispatcherF,\n private delay: number = 2) {\n this.ts = new Date().getTime();\n this.value = undefined;\n\n this.enqueue = this.enqueue.bind(this);\n this.sended = false;\n }\n\n private enqueue() {\n const nts = new Date().getTime();\n if (nts - this.ts > this.delay) {\n if (this.sended) {\n return;\n }\n this.sended = true;\n this.dispatchEvent(this.value);\n }\n else {\n setTimeout(this.enqueue, this.delay);\n }\n }\n\n public append(value: any) {\n const ts = new Date().getTime();\n\n this.sended = this.sended && (JSON.stringify(value) == JSON.stringify(this.value));\n\n this.value = value;\n setTimeout(this.enqueue, this.delay);\n\n this.ts = ts;\n }\n}\n","import * as React from 'react';\nimport ReportContainer from '@containers/reports/ReportContainer';\nimport { IReportColumn, IReportDefinition, IReportOutput, IReportOutputAction } from '@models/reports';\nimport { ISecurity } from '@models';\nimport { search, searchExportToXls } from '@store/actions/search';\nimport {\n useDataTable, useDialogs, useLoading, useTranslation, useSearchFilters, Portal,\n classNames,\n} from '@components';\nimport { downloadBlob } from '@utils/file-utils';\nimport { interpolate } from '@utils';\nimport './ReportOutputTableComponent.scss';\nimport dateUtils from '@utils/date-utils';\nimport { useDispatch } from 'react-redux';\nimport useSynchronizedDispatch from '@components/custom/useSynchronizedDispatch';\n\nexport interface IProps {\n filtersContext: any;\n filterParameters?: any;\n report: IReportDefinition;\n output: IReportOutput;\n security: ISecurity;\n workId: number;\n}\n\nconst parseColumn = (c: IReportColumn) => {\n if (!c.hidden) {\n return {\n title: c.title,\n className: classNames(c.className, 'center'),\n field: c.name,\n // render: (d: any) => d[c.name],\n delegate: c.delegate,\n sortKey: c.name,\n };\n }\n}\n\nconst parseColumns = (c: IReportColumn[] | undefined) => {\n if (c) {\n return c.map(parseColumn);\n }\n else {\n return [];\n }\n}\n\ninterface ISubReport {\n name: string;\n data: any;\n title?: string;\n}\n\nexport function ReportOutputTableComponent(props: IProps) {\n const { t } = useTranslation();\n const [data, setData] = React.useState([]);\n const [columns, setColumns] = React.useState([]);\n const dialogs = useDialogs();\n\n const loading = useLoading();\n\n const report = props.report;\n const output = props.output;\n\n const initialize = loading.wrap(async (value: any) => {\n setColumns(parseColumns(output.columns));\n if (output.autoStart) {\n const res = await search(props.workId, output.searchName, {\n filters: value.filters ?? userFilters.filters,\n });\n\n if (res.hasValue) {\n res.value.map((r:any) => {\n let array = Object.getOwnPropertyNames(r);\n array.map(a => {\n if (new Date(r[a]).toString() === 'Invalid Date') {\n r[a] = t(r[a]);\n }\n })\n })\n setData(res.value ?? []);\n }\n }\n });\n\n const dispatcher = useSynchronizedDispatch(initialize);\n\n const parseAction = (c: IReportOutputAction) => {\n if (c.action === 'open') {\n return {\n icon: c.icon,\n title: c.title,\n onClick: (r: any) => {\n const url = interpolate(c.parameter ?? '', r);\n window.open(url, '_blank', 'location=no,status=no');\n }\n }\n }\n else if (c.action === 'report' || c.action === 'sublist') {\n return {\n icon: c.icon,\n tooltip: c.title,\n onClick: (r: any) => {\n dialogs.show('sublist', {\n name: c.parameter,\n data: r,\n title: c.title,\n });\n }\n }\n }\n else {\n return undefined;\n }\n }\n\n const parseActions = (c: IReportOutputAction[] | undefined) => {\n if (c) {\n return c.map(parseAction).filter(t => t);\n }\n else {\n return [];\n }\n }\n\n const userFilters = useSearchFilters({\n security: props.security,\n workId: props.workId,\n name: output.searchName,\n references: props.filtersContext,\n persist: true,\n awaitForApply: true,\n });\n\n React.useEffect(() => {\n dispatcher.append({\n report: props.report,\n parameters: props.filterParameters,\n filters: userFilters.filters,\n });\n }, [props.report, props.filterParameters, userFilters.filters]);\n\n const actions = parseActions(props.output.actions);\n\n const dataTable = useDataTable({\n actions: actions,\n columns: columns,\n data: data,\n scrollHeight: '100%',\n scrollable: true,\n className: `ReportOutputTableComponent ${props.report.className}`,\n tooltip: true,\n resizableColumns: true,\n lazy: true,\n paginator: true,\n rows: 100,\n rowsPerPageOptions: [100, 200, 300]\n });\n\n const exportToXls = async (filters: any, filename: string | undefined = undefined) => {\n const resp = await searchExportToXls(props.workId, output.searchName, {\n filters: filters,\n });\n downloadBlob(resp, filename ?? (report.title + '.xlsx') ?? 'export.xlsx');\n }\n\n return
\n {loading.renderBox()}\n \n
\n {output.canExport && \n exportToXls(userFilters.filters)}\n style={{ height: '23px', marginTop: '3px' }} />\n }\n {userFilters.renderAsButton({ className: 'fas fa-filter pointer' })}\n
\n
\n\n {dataTable()}\n\n {dialogs.render('sublist', {}, (data: ISubReport) =>\n
\n
\n {data.title}\n dialogs.clear()} />\n
\n \n
)}\n
\n}\n","import * as React from 'react';\nimport { IReportDefinition, IReportOutput } from '@models/reports';\nimport { ISecurity } from '@models';\nimport { EChart, useLoading, useTranslation } from '@components';\nimport { search } from '@store/actions/search';\n\nexport interface IProps {\n report: IReportDefinition;\n output: IReportOutput;\n security: ISecurity;\n workId: number;\n}\n\nexport function ReportOutputBarChartComponent(props: IProps) {\n const loading = useLoading(true);\n const { t } = useTranslation();\n const [options, setOptions] = React.useState({});\n const [data, setData] = React.useState([]);\n\n const initialize = loading.wrap(async () => {\n const r = await search(props.workId, props.output.searchName, {});\n const rows = r.value;\n setData(rows);\n\n const serieLabels = rows.map((r: any) => t(r.name));\n const serieValues = rows.map((r: any) => r.count);\n\n setOptions({\n aria: {\n decal: {\n show: true\n }\n },\n tooltip: {\n trigger: 'item',\n // formatter: '{a}
{b} : {c} ({d}%)'\n formatter: '{b} : {c}'\n },\n xAxis: {\n type: 'category',\n data: serieLabels\n },\n yAxis: {\n type: 'value'\n },\n series: [\n {\n data: serieValues,\n type: 'bar'\n }\n ]\n });\n });\n\n React.useEffect(() => {\n if (props.output.autoStart) {\n initialize();\n }\n }, [props.output]);\n\n return
\n \n
\n}","import * as React from 'react';\nimport { IReportDefinition, IReportOutput, ReportOutputType } from '@models/reports';\nimport { ISecurity } from '@models';\nimport { ReportOutputTableComponent } from './ReportOutputTableComponent';\nimport { ReportOutputBarChartComponent } from '@components/reports/ReportOutputBarChartComponent';\n\nexport interface IProps {\n filtersContext: any;\n filterParameters?: any;\n report: IReportDefinition;\n output: IReportOutput;\n security: ISecurity;\n workId: number;\n className?: string;\n}\n\nexport function ReportOutputComponent(props: IProps) {\n if (props.output.outputType == ReportOutputType.Table) {\n return \n }\n else if (props.output.outputType == ReportOutputType.BarChart) {\n return \n }\n else {\n return
;\n }\n}\n","import * as React from 'react';\nimport { connect } from 'react-redux';\nimport { ApplicationState } from '../../store';\nimport { ReportComponent } from '@components/reports/ReportComponent';\n\nimport * as User from '@store/user';\n\nexport default connect(\n (state: ApplicationState, props: any) => {\n const reportName = props.reportName || props.match?.params?.reportName;\n\n return {\n reportName: reportName,\n report: state.user.reports.find(r => r.name == reportName),\n workId: props.workId ?? parseInt(props.match?.params?.workid),\n ...state.user,\n ...state.identity,\n ...User.plainActions,\n resourceStatusTypes: state.user.resourceStatusTypes,\n workspace: state.user.workspaces,\n filterParameters: props.filterParameters ?? [],\n moduleManager: state.modules.moduleManager,\n };\n },\n)(ReportComponent as any) as any;\n","import * as React from 'react';\n\nimport {\n BreadcrumbItem, useDispatcher, useDataTable, useSearch, useTranslation, usePermissions,\n} from '@components';\nimport { ResourceStatus } from '@components/common/ResourceStatus';\nimport {\n ISecurity, IWork, IMachinery, ResourceType, IJob,\n ModuleManager,\n} from '@models';\n\ntype MachineryHasJob = {\n name: string;\n jobHasMachineryId: number;\n jobName: string;\n jobCode: string;\n resourceStatusType: number;\n resourceStatusName: string;\n workId: number;\n workspaceName?: string;\n contractorName?: string;\n}\n\nexport interface IProps {\n security: ISecurity;\n moduleManager: ModuleManager;\n work: IWork;\n}\n\nenum FormType {\n None = 0,\n List = 1,\n ShowJobs = 2,\n}\n\nconst renderResourceStatus = (w: MachineryHasJob) => {\n return \n}\n\nexport function Machineries(props: IProps) {\n const { t } = useTranslation();\n\n const [formType, setFormType] = React.useState(FormType.None);\n\n const searchMachineries = useSearch({\n search: 'controlAccess/machineries',\n lazy: true,\n normalizeKeys: true,\n workId: props.work.id,\n });\n\n const myJobs = useSearch({\n search: 'controlAccess/own.jobs',\n lazy: false,\n normalizeKeys: true,\n workId: props.work.id,\n });\n\n const searchJobs = useSearch({\n search: 'machinery_has_jobs',\n lazy: true,\n normalizeKeys: true,\n workId: props.work.id\n });\n\n const [machinery, setMachinery] = React.useState();\n\n // parametros de busqueda\n const [code, setCode] = React.useState('');\n const [name, setName] = React.useState('');\n const [licensePlate, setPlate] = React.useState('');\n\n const renderLicensePlate = (m: IMachinery) => {\n if (m.prefixLicenseNumber != null) {\n return
\n {m.prefixLicenseNumber + '' + m.licenseNumber + '' + m.suffixLicenseNumber}\n
;\n }\n else {\n return null;\n }\n }\n\n React.useEffect(() => {\n setFormType(machinery != undefined ? FormType.ShowJobs : FormType.List);\n if (machinery != undefined) {\n const filters = {\n machineryId: machinery.id\n };\n searchJobs.doSearch(filters);\n }\n }, [machinery]);\n\n React.useEffect(() => {\n setFormType(FormType.List);\n }, [searchMachineries.value]);\n\n let workersTable = null;\n\n if (props.work.id != 19) {\n workersTable = useDataTable({\n data: searchMachineries.value ?? [],\n columns: ['name', 'code',\n { title: t('License plate'), render: d => renderLicensePlate(d) },\n 'contractorName'\n ],\n actions: [\n { text: t('Select'), className: 'alt slim', headerClassName: 'td-md', onClick: setMachinery }\n ]\n });\n }\n else {\n workersTable = useDataTable({\n data: searchMachineries.value ?? [],\n columns: [\n { title: t('License plate'), render: d => renderLicensePlate(d) },\n 'contractorName'\n ],\n actions: [\n { text: t('Select'), className: 'alt slim', headerClassName: 'td-md', onClick: setMachinery }\n ]\n });\n }\n\n const jobsTable = useDataTable({\n data: searchJobs.value ?? [],\n columns: [\n {\n title: t('Contractor'),\n render: j => j.contractorName,\n sortKey: 'contractorName',\n },\n {\n title: t('Job'),\n render: j => j.jobName,\n sortKey: 'jobName',\n },\n {\n title: t('JobNumber'),\n render: j => j.jobCode,\n sortKey: 'jobCode',\n },\n searchJobs.value[0]?.workspaceName && {\n title: t('Job.WorkspaceId'),\n render: j => j.workspaceName,\n sortKey: 'workspaceName',\n },\n {\n title: t('accessControl.machinery.state'),\n className: 'td-md',\n render: renderResourceStatus,\n sortKey: 'resourceStatusType',\n }\n ]\n });\n\n const permissions = usePermissions(props, {\n debug: false,\n }, {\n all: 'accessControl.all',\n });\n\n const doSearch = async (values: any) => {\n const filters: any = {\n workId: props.work.id,\n code: values.code,\n name: values.name,\n licensePlate: values.licensePlate,\n };\n\n if (props.security.isGestorOrWorker()\n && !permissions.get('all')) {\n const jobIds = myJobs.value.map(j => j.id);\n filters['jobId'] = jobIds;\n }\n\n if (filters.name?.length > 0\n || filters.code?.length > 0\n || filters.licensePlate?.length > 0) {\n await searchMachineries.doSearch(filters);\n }\n else {\n searchMachineries.clear();\n }\n }\n\n const dispatcher = useDispatcher({\n dispatch: doSearch,\n handlers: {\n code: setCode,\n name: setName,\n licensePlate: setPlate,\n }\n });\n\n return
\n \n\n
\n {props.work.id != 19 &&
\n \n dispatcher.append('code', e)}\n placeholder={t('1 digit at least')} />\n \n dispatcher.append('name', e)}\n placeholder={t('1 character at least')} />\n
\n }\n\n \n dispatcher.append('licensePlate', e)}\n placeholder={t('1 digit at least')} />\n
\n\n {searchMachineries.renderLoading()}\n\n {formType === FormType.List &&
\n {workersTable()}\n
}\n\n {formType === FormType.ShowJobs &&
\n
\n
\n \n {machinery?.code} \n
\n
\n \n {`${\" \"} ${machinery?.name}`}\n
\n
\n \n {`${machinery?.prefixLicenseNumber}${machinery?.licenseNumber}${machinery?.suffixLicenseNumber}`}\n
\n
\n\n {searchJobs.renderLoading()}\n\n {jobsTable()}\n
}\n
;\n}","import * as React from 'react';\n\nimport { IReportDefinition } from '@models/reports';\nimport { IContractor, IJob, IResourceStatusType, ISecurity, IWork, IWorkspace, jobStatusTypes } from '@models';\nimport { ReportOutputComponent } from '@components/reports/ReportOutputComponent';\nimport { useLoading } from '@utils/hooks';\nimport { getReport, getReports } from '@store/actions/reports';\nimport { getJobs } from '@store/actions/user';\nimport { ModuleManager } from '@models';\n\nexport interface IProps {\n contractors: IContractor[];\n filterParameters: any;\n reportName: string;\n report: IReportDefinition;\n security: ISecurity;\n workId: number;\n resourceStatusTypes: IResourceStatusType[];\n workspaces: IWorkspace[];\n getJobReferences: Function;\n moduleManager: ModuleManager;\n work: IWork;\n}\n\nexport function ReportComponent(props: IProps) {\n const loading = useLoading(true);\n const [report, setReport] = React.useState(props.report);\n const [jobs, setJobs] = React.useState([]);\n\n const loadReferences = loading.wrap(async () => {\n const j = await props.getJobReferences(props.workId);\n setJobs(j.data.work.jobs.map((j: IJob) => {\n const job: Partial = { id: j.id, name: `${j.code} - ${j.name}` };\n return job;\n }));\n });\n\n const initialize = loading.wrap(async () => {\n if (jobs.length == 0) {\n await loadReferences();\n }\n const r = await getReport(props.workId, props.reportName);\n setReport(r);\n });\n\n React.useEffect(() => {\n initialize();\n }, [props.reportName]);\n\n const filterStatusTypes = props.moduleManager.filterDependency('job.statusTypes', {\n security: props.security,\n work: props.work,\n });\n\n const jobStatuses = jobStatusTypes.filter(filterStatusTypes);\n\n const years = (): { name: any, id: number }[] => {\n const currentYear = new Date().getFullYear();\n return [{ name: currentYear, id: currentYear }, { name: (currentYear - 1), id: currentYear - 1 }];\n }\n\n return
\n {loading.renderBox()}\n {!loading.isLoading() && (report.outputs ?? []).map((o, i) => {\n return ;\n })}\n
;\n}\n","import * as React from 'react';\n\nimport {\n BreadcrumbItem, useDataTable, useSearch, useTranslation, useDispatcher, usePermissions,\n} from '@components';\nimport { ResourceStatus } from '@components/common/ResourceStatus';\nimport {\n IJob, ISecurity, IWork, IWorker, ResourceType,\n ModuleManager,\n} from '@models';\nimport { search } from '@store/actions/search';\n\ntype WorkerHasJob = {\n name: string;\n jobHasWorkerId: number;\n jobName: string;\n jobCode: string;\n resourceStatusType: number;\n resourceStatusName: string;\n workId: number;\n jobId: number;\n workspaceName?: string;\n contractorName?: string;\n}\n\nexport interface IProps {\n security: ISecurity;\n work: IWork;\n job: IJob;\n getContractorFromAppUser: Function;\n moduleManager: ModuleManager;\n}\n\nenum FormType {\n None = 0,\n ListWorkers = 1,\n ShowJobs = 2,\n}\n\nconst renderResourceStatus = (w: WorkerHasJob) => {\n return \n}\n\nexport function Workers(props: IProps) {\n const { t } = useTranslation();\n\n const [formType, setFormType] = React.useState(FormType.None);\n\n const searchWorkers = useSearch({\n search: 'controlAccess/workers',\n lazy: true,\n normalizeKeys: true,\n workId: props.work.id,\n });\n\n const searchJobs = useSearch({\n search: 'worker_has_jobs',\n lazy: true,\n normalizeKeys: true,\n workId: props.work.id,\n filters: {\n workId: props.work.id,\n }\n });\n\n const myJobs = useSearch({\n search: 'controlAccess/own.jobs',\n lazy: false,\n normalizeKeys: true,\n workId: props.work.id,\n });\n\n const [worker, setWorker] = React.useState();\n\n // parametros de busqueda\n const [code, setCode] = React.useState('');\n const [name, setName] = React.useState('');\n\n React.useEffect(() => {\n setFormType(worker != undefined ? FormType.ShowJobs : FormType.ListWorkers);\n if (worker != undefined) {\n const filters = {\n workerId: worker.id,\n RequireContractor: worker.contractorId\n };\n searchJobs.doSearch(filters);\n }\n }, [worker]);\n\n React.useEffect(() => {\n setFormType(FormType.ListWorkers);\n }, [searchWorkers.value]);\n\n const workersTable = useDataTable({\n data: searchWorkers.value ?? [],\n columns: [\n 'name', 'surname',\n {\n title: t('accessControl.worker.code'),\n render: w => w.code,\n },\n 'contractorName'\n ],\n actions: [\n {text: t('Select'), className: 'alt slim', headerClassName: 'td-md', onClick: setWorker}\n ]\n });\n\n const jobsTable = useDataTable({\n data: searchJobs.value ?? [],\n columns: [\n {\n title: t('Contractor'),\n render: j => j.contractorName,\n sortKey: 'contractorName',\n },\n {\n title: t('Job'),\n render: j => j.jobName,\n sortKey: 'jobName',\n },\n {\n title: t('JobNumber'),\n render: j => j.jobCode,\n sortKey: 'jobCode',\n className: 'center'\n },\n searchJobs.value[0]?.workspaceName && {\n title: t('Job.WorkspaceId'),\n render: j => j.workspaceName,\n sortKey: 'workspaceName',\n className: 'center'\n },\n {\n title: t('accessControl.worker.state'),\n className: 'td-md',\n render: renderResourceStatus,\n sortKey: 'resourceStatusType',\n }\n ]\n });\n\n const permissions = usePermissions(props, {\n debug: false,\n }, {\n all: 'accessControl.all',\n });\n\n const doSearch = async (data: any) => {\n const filters: any = {\n workId: props.work.id,\n name: data.name,\n code: data.code,\n };\n\n if (props.security.isGestorOrWorker()\n && !permissions.get('all')) {\n const jobIds = myJobs.value.map(j => j.id);\n filters['jobId'] = jobIds;\n }\n\n if (filters.name?.length > 0\n || filters.code?.length > 0) {\n searchWorkers.doSearch(filters);\n }\n else {\n searchWorkers.clear();\n }\n }\n\n const dispatcher = useDispatcher({\n dispatch: doSearch,\n handlers: {\n code: setCode,\n name: setName,\n }\n });\n\n return
\n \n\n
\n \n \n \n \n
\n\n {searchWorkers.renderLoading()}\n\n {formType === FormType.ListWorkers &&
\n {workersTable()}\n
}\n\n {formType === FormType.ShowJobs &&
\n
\n \n {worker?.code}\n\n \n {`${worker?.name} ${worker?.surname}`}\n
\n\n {searchJobs.renderLoading()}\n\n {jobsTable()}\n
}\n
;\n}","import * as React from 'react';\nimport { Route } from 'react-router';\n\nimport { userContainer } from '@containers/index';\nimport { Machineries } from './accessControl/Machineries';\nimport { Workers } from './accessControl/Workers';\n\nexport interface IProps {\n children?: any;\n}\n\nexport function WorkAccessControlRoutes(props: IProps) {\n return <>\n \n\n \n ;\n}","import * as React from 'react';\n\nimport { connect } from 'react-redux';\nimport { ApplicationState } from '../../store';\nimport { WorkAccessControl } from '@components/work/WorkAccessControl';\n\nexport default connect(\n (state: ApplicationState) => ({\n ...state.identity,\n ...state.user,\n work: state.user.work,\n }),\n {}\n)(WorkAccessControl as any) as any; // eslint-disable-line @typescript-eslint/no-explicit-any\n","import * as React from 'react';\n\nimport { BreadcrumbItem, useTranslation } from '@components';\nimport { ISecurity, IWork } from '@models';\nimport { WorkAccessControlRoutes } from './WorkAccessControlRoutes';\n\nexport interface IProps {\n security: ISecurity;\n work: IWork;\n}\n\nexport function WorkAccessControl(props: IProps) {\n const { t } = useTranslation();\n\n return <>\n \n \n ;\n}","import * as React from 'react';\n\nimport { ISecurity, IWork, IUserIdentity, ModuleManager, ICommunication } from '@models';\nimport './Work.scss';\nimport NotificationsCenter from '@containers/notifications/NotificationsCenterContainer';\nimport { Card, ContextMenu, useTranslation } from '@components';\nimport { redirectTo } from '@utils';\n\nimport { getReports } from '@store/actions/reports';\nimport { IReportDefinition } from \"@models/reports\";\nimport { storageClear } from '@utils/storage';\n\nexport interface IProps {\n work: IWork;\n selectJobs: Function;\n security: ISecurity;\n user: IUserIdentity;\n moduleManager: ModuleManager;\n rm?: any;\n cm?: any;\n communications: ICommunication[];\n}\n\nexport function Work(props: IProps) {\n const { t } = useTranslation();\n const [reportItems, setReportItems] = React.useState([]);\n\n React.useEffect(() => {\n storageClear(k => k.startsWith('filters'));\n }, []);\n\n const fillReportItems = (items: IReportDefinition[]) => {\n setReportItems(items\n .filter(r => !r.hidden)\n .map(r => {\n return {\n label: t(r.title),\n icon: r.icon,\n command: () => redirectTo(`/work/${props.work.id}/reports/${r.name}`),\n };\n }));\n }\n\n React.useEffect(() => {\n if (props.work.id) {\n getReports(props.work.id).then(fillReportItems);\n }\n }, [props.work.id]);\n\n React.useEffect(() => {\n // no redirigir en caso de que ya estemos en communications\n if (props.communications?.length > 0 && !window.location.pathname.includes('communications/current')) {\n // redirigir a communications current\n redirectTo('/work/' + props.work?.id + '/communications/current');\n }\n }, [props.communications, window.location.pathname]);\n\n\n const cm = React.useRef();\n const rm = React.useRef();\n\n const accessControlMenu = [\n { label: t('Machinery'), command: () => redirectTo(`/work/${props.work.id}/access-control/machineries`) },\n { label: t('Workers'), command: () => redirectTo(`/work/${props.work.id}/access-control/workers`) },\n ];\n\n return
\n \n \n \n
\n {props.security.isContractor() &&
\n {t('screen.contractors')}\n \"gstore\"\n
}\n {props.security.isWorker() &&
\n {t('screen.workers')}\n \"gstore\"\n
}\n {props.security.isGestor() &&
\n {t('screen.gestor')}\n \"gstore\"\n
}\n \n
\n \n
\n}\n\nfunction WorkUtilsImpl(props: IProps) {\n const { t } = useTranslation();\n const cm = React.useRef();\n const rm = React.useRef();\n\n const [reportItems, setReportItems] = React.useState([]);\n\n React.useEffect(() => {\n storageClear(k => k.startsWith('filters'));\n }, []);\n\n const fillReportItems = (items: IReportDefinition[]) => {\n setReportItems(items\n .filter(r => !r.hidden)\n .map(r => {\n return {\n label: t(r.title),\n icon: r.icon,\n command: () => redirectTo(`/work/${props.work.id}/reports/${r.name}`),\n };\n }));\n }\n\n React.useEffect(() => {\n if (props.work.id) {\n getReports(props.work.id).then(fillReportItems);\n }\n }, [props.work.id]);\n\n const accessControlMenu = [\n { label: t('Machinery'), command: () => redirectTo(`/work/${props.work.id}/access-control/machineries`) },\n { label: t('Workers'), command: () => redirectTo(`/work/${props.work.id}/access-control/workers`) },\n ];\n\n return (\n <>\n \n \n {(props.security.isGestorOrWorker() || props.security.isContractor()) ? <>\n\n
\n
\n \"gstore\"\n {t('UTILITIES')}\n
\n
\n
\n
cm.current.show(ev)}>\n \n \"\"\n
\n {t('screen.access.control')}\n
\n
\n
\n
\n
\n {/*
redirectTo(`/work/${props.work.id}/reports`)}> */}\n
rm.current.show(ev)}>\n \n \"\"\n
\n {t('Reports')}\n
\n
\n
\n
\n
\n
redirectTo(`/work/${props.work.id}/documents`)}>\n \n \"\"\n
\n {t('Download area')}\n
\n
\n
\n
\n
\n
\n \n : <>}\n );\n}\n\nfunction WorkUtils(props: IProps) {\n return props\n .moduleManager\n .renderComponent('WorkUtils', { ...props, getReports, storageClear }, WorkUtilsImpl);\n}\n\nfunction WorkMenuImpl(props: IProps) {\n const { t } = useTranslation();\n\n return (\n props.security.isGestorOrWorker() ? <>\n
\n
\n
redirectTo(`/work/${props.work.id}/jobs`)}>\n \n \"\"\n
\n {t('Jobs')}\n
\n
\n
\n
\n
\n
redirectTo(`/work/${props.work.id}/contractors`)}>\n \n \"\"\n
\n {t('Contractors')}\n
\n
\n
\n
\n \n
\n gstore\n
\n
\n
\n
redirectTo(`/work/${props.work.id}/subcontractorrequests`)}>\n \n \"\"\n
\n {t('Subcontractors request')}\n
\n
\n
\n
\n
\n
redirectTo(`/work/${props.work.id}/workers`)}>\n \n \"\"\n
\n {t('Workers')}\n
\n
\n
\n
redirectTo(`/work/${props.work.id}/machineries`)}>\n \n \"\"\n
\n {t('Machineries')}\n
\n
\n
\n
\n
\n \n :\n <>\n
\n
\n
redirectTo(`/work/${props.work.id}/contractor/requirements`)}>\n \n \"\"\n
\n {t('Documents')}\n
\n
\n
\n
redirectTo(`/work/${props.work.id}/jobs`)}>\n \n \"\"\n
\n {t('Jobs')}\n
\n
\n
\n
\n
\n
redirectTo(`/work/${props.work.id}/subcontractors`)}>\n \n \"\"\n
\n {t('Subcontractors')}\n
\n
\n
\n
\n \n
\n gstore\n
\n
\n
\n
redirectTo(`/work/${props.work.id}/contractor/subcontractorrequests`)}>\n \n \"\"\n
\n {t('Subcontractors request')}\n
\n
\n
\n
\n
\n
redirectTo(`/work/${props.work.id}/workers`)}>\n \n \"\"\n
\n {t('Workers')}\n
\n
\n
\n
redirectTo(`/work/${props.work.id}/machineries`)}>\n \n \"\"\n
\n {t('Machineries')}\n
\n
\n
\n
\n
\n \n )\n}\n\nfunction WorkMenu(props: IProps) {\n return props\n .moduleManager\n .renderComponent('WorkMenu', props, WorkMenuImpl);\n}\n","import { connect } from 'react-redux';\nimport { ApplicationState } from '../../store';\nimport * as User from '../../store/user';\nimport * as Identity from '../../store/identity';\n\nimport { Work } from '../../components/user/Work';\n\nexport default connect(\n (state: ApplicationState) => ({\n ...state.identity,\n work: state.user.work,\n user: state.identity?.user,\n moduleManager: state.modules.moduleManager,\n communications: state.user.communications,\n }),\n User.actionCreators,\n)(Work as any) as any; // eslint-disable-line @typescript-eslint/no-explicit-any\n","import { connect } from 'react-redux';\nimport { ApplicationState } from '../../store';\nimport * as User from '../../store/user';\n\nimport { WorkLoader } from '../../components/user/WorkLoader';\n\nexport default connect(\n (state: ApplicationState) => ({\n work: state.user.work,\n moduleManager: state.modules.moduleManager,\n }),\n User.actionCreators,\n)(WorkLoader as any) as any; // eslint-disable-line @typescript-eslint/no-explicit-any\n","import * as React from 'react';\n\nimport { IWork, ModuleManager } from '@models';\n\nexport interface IProps {\n work: IWork;\n selectWork: Function;\n children: any;\n match: any;\n moduleManager: ModuleManager;\n}\n\nexport function WorkLoader({ moduleManager, match, work, selectWork, children }: IProps) {\n React.useEffect(() => {\n const workId = match.params.workid;\n if ((work == undefined || work.id != workId) && workId) {\n selectWork(Number(workId), false);\n }\n }, [match.params, work]);\n\n React.useEffect(() => {\n if (work?.id == match.params.workid) {\n const workModules = work\n .activeModules?.filter(m => m.hasFrontend ?? false) ?? [];\n const loadedModules = workModules\n .map(m => moduleManager.getModule(m.name))\n .filter(m => m != undefined);\n\n setModulesLoaded(loadedModules.length == workModules.length);\n }\n }, [ moduleManager.getId(), work]);\n\n const [modulesLoaded, setModulesLoaded] = React.useState(false);\n\n const canRender = work?.id == match.params.workid\n && modulesLoaded;\n\n if (canRender) {\n return children;\n }\n else {\n return null;\n }\n}\n","import * as React from 'react';\n\nimport { connect } from 'react-redux';\nimport { ApplicationState } from '../../store';\nimport { WorkReports } from '@components/work/WorkReports';\n\nexport default connect(\n (state: ApplicationState) => ({\n ...state.identity,\n ...state.user,\n work: state.user.work,\n }),\n {}\n)(WorkReports as any) as any; // eslint-disable-line @typescript-eslint/no-explicit-any\n","import * as React from 'react';\n\nimport { ISecurity, IWork } from '@models';\n\nexport interface IProps {\n security: ISecurity;\n work: IWork;\n}\n\nexport function WorkReports(props: IProps) {\n return
\n
\n}","import * as React from 'react';\n\nimport {\n F, Message, TabPanel, TabView, Tag, useDataTable, useDialogs, useForm,\n useLoading, useMessage, useRemoteData, useSearch, useTranslation, useTreeTable\n} from '@components';\nimport { IContractor, IOption, ISecurity, ISubContractorRequest, IWork, ModuleManager, IUserIdentity } from '@models';\nimport DateUtils from '@utils/date-utils';\n\ntype ProcessF = (workId: number, subContractorRequestId: number, reason?: string) => IOption;\n\nexport interface IProps {\n acceptSubContractorRequest: ProcessF;\n getSubContractorRequestsAsWorker: Function;\n rejectSubContractorRequest: ProcessF;\n getContractor: Function;\n getJob: Function;\n work: IWork;\n security: ISecurity;\n moduleManager: ModuleManager;\n user: IUserIdentity\n}\n\nfunction RequestState({ request }: { request: ISubContractorRequest }) {\n const { t } = useTranslation();\n\n if (request.rejected) {\n return ;\n }\n else if (!request.acceptedByContractor && !request.acceptedByWork) {\n return ;\n }\n else if (request.acceptedByContractor) {\n return ;\n }\n else if (request.acceptedByWork) {\n return ;\n }\n else {\n return null;\n }\n}\n\nfunction ProcessSubContractorRequest({\n accept, reject,\n onClose, onSuccess, request,\n workId\n}: {\n accept: ProcessF, reject: ProcessF,\n onSuccess: Function,\n onClose: Function, request: ISubContractorRequest,\n workId: number,\n}) {\n const { t } = useTranslation();\n const loading = useLoading();\n const message = useMessage();\n\n const form = useForm({\n initialValues: request,\n });\n\n const doAccept = loading.wrap(async () => {\n const res = await accept(workId, request.id!);\n message.set(res);\n\n if (res.hasValue) {\n onSuccess();\n }\n });\n\n const doReject = loading.wrap(async () => {\n const res = await reject(workId, request.id!, form.get('rejectedReason'));\n message.set(res);\n\n if (res.hasValue) {\n onSuccess();\n }\n });\n\n return
\n
\n \n
\n {request.sourceContractor?.name}\n {t('Has requested {{name}} as subcontractor for the job', { name: request.targetContractor?.name })}\n {request.job?.name}\n {request.job?.code}\n
\n \n \n
\n
\n \n
\n \n \n
\n \n {form.textarea('rejectedReason')}\n \n
\n
\n \n
\n
\n \n \n
\n\n {message.render()}\n\n
\n {loading.render()}\n
\n \n
\n
\n}\n\nconst renderRequestInfo = (r: ISubContractorRequest) => {\n if (r.rejected) {\n return <>\n {DateUtils.format(r.rejectedDateTime)}\n {r.rejectedReason}\n ;\n }\n else if (r.acceptedByContractor) {\n return <>\n {DateUtils.format(r.acceptedByContractorDateTime)}\n ;\n }\n}\n\nexport function WorkSubContractorRequestsImpl(props: IProps) {\n const { t } = useTranslation();\n const dialogs = useDialogs();\n const [data, setData] = React.useState([]);\n\n const prepareToProcessRequest = (r: ISubContractorRequest) => {\n dialogs.show('process', r);\n }\n\n const query = useRemoteData(\n props.getSubContractorRequestsAsWorker,\n {\n parameters: [props.work.id],\n });\n\n const invitationSearch = useSearch({\n workId: props.work.id,\n search: 'jobs/subcontractor.invitations.contractors',\n filters: {\n workId: props.work.id,\n },\n lazy: true,\n });\n\n const userInvitationsSearch = useSearch({\n workId: props.work.id,\n search: 'jobs/subcontractor.invitations.users',\n filters: {\n workId: props.work.id,\n },\n lazy: true,\n });\n\n const initialize = async () => {\n const req = await query.query();\n const invitations = await invitationSearch.doSearch();\n const userInvitations = await userInvitationsSearch.doSearch();\n\n let invitationsAsRequests: ISubContractorRequest[] = [];\n for (const invitation of invitations) {\n const job = await props.getJob(props.work.id, invitation.jobId);\n let request: ISubContractorRequest = {\n jobsDescription: invitation.description,\n jobId: invitation.jobId,\n shipmentNumber: invitation.shipmentNumber,\n sourceContractorId: invitation.sourceId,\n sourceContractor: await props.getContractor(props.work.id, invitation.sourceId),\n targetContractorId: 0,\n targetContractor: invitation.targetName,\n workId: props.work.id,\n dateTime: invitation.dateTime,\n acceptedByContractorDateTime: invitation.acceptedDate,\n rejected: invitation.accepted != null ? !invitation.accepted : false,\n acceptedByContractor: invitation.accepted,\n job: job.data.work.job,\n id: 0,\n jobHasContractorId: invitation.jobHasContractorId,\n };\n invitationsAsRequests.push(request);\n }\n\n let userInvitationsAsRequests: ISubContractorRequest[] = [];\n for (const invitation of userInvitations) {\n if (invitation.jobId != null) {\n const job = await props.getJob(props.work.id, invitation.jobId);\n let request: ISubContractorRequest = {\n jobsDescription: invitation.description,\n jobId: invitation.jobId,\n shipmentNumber: invitation.shipmentNumber,\n sourceContractorId: 0,\n sourceContractor: invitation.source,\n targetContractorId: 0,\n targetContractor: invitation.contractorName,\n dateTime: invitation.dateTime,\n workId: props.work.id,\n rejected: invitation.accepted != null ? !invitation.accepted : false,\n acceptedByContractor: invitation.accepted,\n acceptedByContractorDateTime: invitation.acceptedDate,\n job: job.data.work.job,\n id: 0,\n jobHasContractorId: invitation.jobHasContractorId,\n };\n userInvitationsAsRequests.push(request);\n }\n }\n\n const totalInvitations = req.concat(invitationsAsRequests).concat(userInvitationsAsRequests);\n const result = filter(totalInvitations);\n setData(result);\n }\n\n React.useEffect(() => {\n initialize();\n }, []);\n\n const filter = (data: ISubContractorRequest[]) => {\n const ctx = {\n props: props,\n };\n const filterData = props.moduleManager.filterDependency('work.invitations', ctx);\n\n const result = data.filter(filterData);\n return result;\n }\n\n const dataTable = useDataTable({\n columns: [\n { title: t('Date'), sortKey: 'dateTime', className: 'td-datetime', field: 'dateTime', delegate: 'date' },\n { title: t('Job'), sortKey: 'job.code', render: r => <>{r.job?.name} },\n { title: t('Applicant'), sortKey: 'sourceContractor', render: r => r.sourceContractor?.name ?? r.sourceContractor },\n { title: t('Requested contractor'), sortKey: 'targetContractor', render: r => r.targetContractor?.name ?? r.targetContractor },\n { title: t('Description'), sortKey: 'jobsDescription', field: 'jobsDescription' },\n { title: t('State'), className: 'td-lg', sortKey: 'accepted', render: r => },\n { render: renderRequestInfo }\n ],\n actions: [\n { icon: 'play', onClick: prepareToProcessRequest, disabled: r => r.acceptedByContractor || r.acceptedByWork || r.rejected || r.id == 0 || props.security.isWorker() },\n ],\n data: data,\n loading: query.loading && invitationSearch.loading && userInvitationsSearch.loading,\n });\n\n const refresh = () => {\n dialogs.clear();\n query.query();\n }\n\n return
\n {dataTable()}\n\n {dialogs.render(\n 'process',\n {},\n (data: ISubContractorRequest) =>\n dialogs.clear()}\n request={data} />)}\n
;\n}\n\nexport function WorkSubContractorRequests(props: IProps) {\n const res = props\n .moduleManager\n .renderComponent('WorkSubContractorRequests', { ...props }, WorkSubContractorRequestsImpl);\n return res;\n}","import * as React from 'react';\n\nimport { connect } from 'react-redux';\nimport { ApplicationState } from '../../store';\nimport * as ContractorsStore from '../../store/contractors';\nimport * as JobsStore from '../../store/jobs';\nimport { WorkSubContractorRequests } from '../../components/work/WorkSubContractorRequests';\n\nexport default connect(\n (state: ApplicationState) => ({\n ...state.identity,\n ...state.user,\n ...state.constants,\n ...ContractorsStore.plainActions,\n ...JobsStore.plainActions,\n moduleManager: state.modules.moduleManager,\n }),\n {}\n)(WorkSubContractorRequests as any) as any; // eslint-disable-line @typescript-eslint/no-explicit-any\n","import * as React from 'react';\n\nimport {\n useTranslation,\n useForm, G\n} from '@components';\nimport {\n IMachinery, ISecurity, IWork, ModuleManager, IMachineryType\n} from '@models';\nimport './RestrictMachinery.scss';\n\ninterface IProps {\n security: ISecurity;\n moduleManager: ModuleManager;\n work: IWork;\n selectedMachineryId?: number;\n data: any[];\n restrictMachinery: Function;\n handleToast: Function;\n onClose: Function;\n machineryTypes: IMachineryType[];\n}\n\ninterface IFormValues {\n workId: number;\n name: string;\n licenseNumber: string;\n code: string;\n contractorId: number;\n applicantName: string;\n applicantEmail: string;\n reason: string;\n remarks: string;\n date: string;\n machineryTypeId: number;\n}\n\nexport function RestrictMachinery(props: IProps) {\n\n const { t } = useTranslation();\n\n const machinery = props.data.find(x => x.id === props.selectedMachineryId);\n\n const form = useForm({\n initialValues: {\n machineryTypeId: machinery?.machineryTypeId ?? 0,\n workId: props.work.id,\n name: machinery?.name ?? ' ', //Se mantiene este campo por si el trabajador es borrado de la plataforma\n licenseNumber: machinery?.licenseNumber ?? '', //Se mantiene este campo por si el trabajador es borrado de la plataforma\n code: machinery?.code ?? ' ', //Se mantiene este campo por si el trabajador es borrado de la plataforma\n contractorId: machinery?.workId ?? 0,\n applicantName: props.security.user?.userName ?? '',\n applicantEmail: props.security.user?.email ?? '',\n reason: '',\n remarks: '',\n date: new Date().toISOString().split('T')[0]\n },\n\n onSubmit: (data: IFormValues) => {\n handleSave();\n }\n })\n\n const handleSave = async () => {\n const resp = await props.restrictMachinery(\n form.values.workId,\n machinery?.id,\n machinery?.machineryTypeId,\n machinery?.name ?? '',\n machinery?.licenseNumber ?? '',\n machinery?.code ?? '',\n machinery?.contractorId,\n form.values.applicantName,\n form.values.applicantEmail,\n form.values.reason,\n form.values.remarks\n );\n\n if (resp.isError === false && typeof resp.value == 'number') {\n props.handleToast(t('Machinery restricted successfully'), true);\n props.onClose();\n } else {\n props.handleToast(t('Error restricting machinery'), false);\n props.onClose();\n }\n }\n\n return (\n
\n \n x.id === machinery?.machineryTypeId)?.name}\n />\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n form.values.applicantName = e.target.value}\n required\n />\n \n \n form.values.applicantEmail = e.target.value}\n required\n />\n \n \n form.values.date = e.target.value}\n required\n />\n \n \n form.values.reason = e.target.value}\n />\n \n \n form.values.remarks = e.target.value}\n />\n \n
\n
\n \n\n \n {t('Save')}\n \n
\n
\n );\n}\n","import * as React from 'react';\n\nimport {\n useTranslation,\n useSearch, useDataTable\n} from '@components';\n\n\ninterface IProps {\n workId: number,\n removeRestrictedMachinery: Function,\n handleToast: (message: string, success: boolean) => void,\n}\n\ninterface IResult {\n id: number,\n machineryType: number\n machineryTypeName: string\n name: string\n licenseNumber: string\n code: string\n contractorName: string\n applicantName: string\n applicantEmail: string\n date: string\n motive: string\n remarks: string\n isActive: boolean\n deactivatedAt?: string\n workId: number\n}\n\nexport function RestrictedMachineries(props: IProps) {\n\n const { t } = useTranslation();\n\n const machineries = useSearch({\n workId: props.workId,\n search: 'machineries/restricted',\n filters: {\n workId: props.workId,\n },\n });\n\n React.useEffect(() => {\n machineries.doSearch();\n }, []);\n\n const handleRemove = async (workId: number, id: number,) => {\n const resp = await props.removeRestrictedMachinery(workId, id);\n\n if (resp.isError === false) {\n props.handleToast(t('Machinery has been unrestricted'), true);\n machineries.doSearch();\n }\n else {\n props.handleToast(t('Error while unrestricting machinery'), false);\n }\n\n }\n\n const getActions = () => {\n return [\n {\n title: t('Unrestrict'),\n disabled: (row: IResult) => !row.isActive,\n icon: 'fa fa-unlock',\n onClick: (row: IResult) => {\n handleRemove(row.workId, row.id);\n }\n }\n ];\n }\n\n const showDate = (date: string) => {\n return new Date(date).toLocaleDateString();\n }\n\n const dataTable = useDataTable({\n className: ``,\n tooltip: true,\n columns:\n [\n {\n title: t('Date'),\n render: d => {showDate(d.date)},\n field: 'date',\n className: 'td-md',\n sortKey: 'date',\n },\n {\n title: t('In effect'),\n render: d => {`${d.isActive ? t('Yes') : showDate(d.deactivatedAt!)}`},\n field: 'isActive',\n className: 'td-md',\n sortKey: 'isActive',\n },\n {\n title: t('Name'),\n field: 'name',\n className: 'td-md left',\n sortKey: 'name',\n },\n {\n title: t('Machinery type'),\n field: 'machineryTypeName',\n className: 'td-md left',\n sortKey: 'machineryTypeName',\n },\n {\n title: t('License number'),\n field: 'licenseNumber',\n className: 'td-md left',\n sortKey: 'licenseNumber',\n },\n {\n title: t('machinery.codes'),\n field: 'code',\n className: 'td-md left',\n sortKey: 'code',\n },\n {\n title: t('Contractor'),\n field: 'contractorName',\n className: 'td-md left',\n sortKey: 'contractorName',\n },\n {\n title: t('Applicant'),\n field: 'applicantName',\n className: 'td-md left',\n sortKey: 'applicantName',\n },\n {\n title: t('Applicant email'),\n field: 'applicantEmail',\n className: 'td-md left',\n sortKey: 'applicantEmail',\n },\n {\n title: t('Reason'),\n field: 'reason',\n className: 'td-md left',\n sortKey: 'code',\n },\n {\n title: t('Remarks'),\n field: 'remarks',\n className: 'td-md left',\n sortKey: 'code',\n },\n ],\n actions: [\n {\n headerClassName: 'td-sm',\n actions: getActions()\n }\n ],\n data: machineries.value,\n });\n\n return (\n
\n {dataTable()}\n
\n );\n\n}","import * as React from 'react';\n\nimport {\n useDataTable, useLoading, useMessage, useRemoteData, useSearch, useTranslation, Tag, usePermissions\n} from '@components';\nimport { IMachinery, IOption, ISecurity, IWork, ModuleManager } from '@models';\nimport './MachineryJobsDialog.scss'\n\ntype ActivateF = (workId: number, jobId: number, machineryId: number, jobHasContractorId: number | undefined) => Promise>;\ntype GetMachineryF = (workId: number, id: number) => Promise;\n\nexport interface IProps {\n requestClose: Function;\n activateJobHasMachinery: ActivateF;\n saveJobHasMachinery: Function;\n security: ISecurity;\n machinery: IMachinery;\n machineryId: number;\n machineryTitle?: string;\n moduleManager: ModuleManager;\n getMachinery: GetMachineryF;\n work: IWork;\n removeJobHasMachinery: Function;\n}\n\ntype SearchR = {\n endDate?: Date;\n jobId: number;\n jobHasMachineryId?: number;\n isRelated?: boolean;\n currentStatusType?: number;\n parentContractorName?: string;\n jobHasContractorId?: number;\n name?: string;\n code?: string;\n description?: string;\n}\n\nfunction MachineryJobsForm(props: IProps) {\n const { t } = useTranslation();\n const loading = useLoading();\n const messages = useMessage();\n\n const search = useSearch({\n search: 'contractorJobsHasMachinery.list',\n normalizeKeys: true,\n workId: props.work.id,\n filters: {\n machineryId: props.machineryId,\n contractorId: props.machinery.contractorId\n }\n });\n\n React.useEffect(() => {\n search.doSearch();\n }, []);\n\n const saveMachineryRelation = loading.wrap(async (jobId: number, jobHasContractorId: number) => {\n const data = {\n machineryId: props.machineryId,\n jobId,\n };\n const resp = await props.saveJobHasMachinery(props.work.id, jobId, data, jobHasContractorId);\n messages.set(resp);\n await search.doSearch();\n });\n\n const activateMachineryRelation = loading.wrap(async (jobId: number, d: SearchR) => {\n const resp = await props.activateJobHasMachinery(props.work.id, jobId, props.machineryId, d.jobHasMachineryId);\n messages.set(resp);\n await search.doSearch();\n });\n\n const removeMachineryRelation = loading.wrap(async (jobId: number, jobHasMachineryId: number) => {\n const resp = await props.removeJobHasMachinery(props.work.id, jobId, jobHasMachineryId);\n messages.set(resp);\n await search.doSearch();\n });\n\n const jobName = (d: SearchR) => {\n if (![22,23].includes(props.work.id)) { //TODO: remove magic number\n return d.name;\n } else {\n return <>{d.name}\n }\n }\n\n const perms = usePermissions(props, {}, {\n add: 'jobs.machineries.add',\n remove: 'jobHasMachinery.remove',\n });\n\n const dataTable = useDataTable({\n columns: [\n { title: 'Job', render: (d: any) => jobName(d) },\n {\n title: 'Description',\n render: (d: SearchR) => {d.description},\n field: 'description',\n },\n {\n title: 'Contractor',\n field: 'parentContractorName',\n render: (d: SearchR) => {d.parentContractorName}\n },\n {\n title: 'Associated',\n delegate: 'boolean',\n field: 'isRelated',\n className: 'td-md'\n },\n {\n title: 'End date',\n delegate: 'date',\n field: 'endDate',\n className: 'td-lg',\n },\n ],\n actions: [\n {\n actions: [\n perms.get('add')\n ? {\n title: t('Associate'),\n onClick: d => saveMachineryRelation(d.jobId, d.jobHasContractorId),\n disabled: d => (d.isRelated == true || d.currentStatusType == 3),\n } : undefined,\n perms.get('add')\n ? {\n title: t('Reactivate'),\n disabled: d => d.endDate == undefined,\n onClick: d => activateMachineryRelation(d.jobId, d)\n } : undefined,\n perms.get('remove')\n ? {\n title: t('Finalize'),\n disabled: d => (!d.isRelated || d.endDate != null),\n onClick: d => removeMachineryRelation(d.jobId, d.jobHasMachineryId)\n } : undefined,\n ]\n }\n ],\n data: search.value\n })\n\n return
\n {search.renderLoading()}\n {dataTable()}\n
\n \n
\n
\n}\n\nexport function MachineryJobsDialog(props: IProps) {\n const machinery = useRemoteData(props.getMachinery, {\n parameters: [props.work.id, props.machineryId]\n });\n\n return
\n {machinery.renderLoading()}\n {machinery.value && }\n
\n}","import * as React from 'react';\nimport { connect } from 'react-redux';\nimport { ApplicationState } from '../../store';\nimport * as JobsStore from '../../store/jobs';\nimport * as User from '../../store/user';\nimport * as MachineriesStore from '@store/machineries';\nimport { MachineryJobsDialog } from '@components/machineries/MachineryJobsDialog';\n\nexport default connect(\n (state: ApplicationState) => ({\n ...state.user,\n ...state.identity,\n ...JobsStore.plainActions,\n ...User.plainActions,\n ...MachineriesStore.plainActions,\n moduleManager: state.modules.moduleManager,\n }),\n JobsStore.actionCreators,\n)(MachineryJobsDialog as any) as any; // CHANGE","import * as React from 'react';\n\nimport {\n BreadcrumbItem,\n G,\n InputSwitch,\n RequireRole,\n SplitButton,\n Tag,\n useConfirm,\n useDataTable,\n useDialogs,\n useForm,\n useLoading,\n useMessage,\n useNumberState,\n useObjectState,\n usePaginator,\n useInputSearch,\n useResolveName,\n useSearch,\n useSearchFilters,\n useSearchPaginate,\n useTranslation,\n useWorkFormSettings,\n ValidationBuilder,\n usePermissions,\n useToast\n} from '@components';\nimport { DynamicProperties } from '@components/user/DynamicProperties';\nimport { IMachinery, ISecurity, IUserIdentity, IWork } from '@models';\nimport { IContractor, IMachinerySubType, IMachineryType, IResourceStatusType, ResourceType } from '@models/resources';\nimport { IFieldValidation, IPropertyGroupType, PropertyGroupObjectType } from '@models/works';\n\nimport { RestrictMachinery } from './RestrictMachinery';\nimport { RestrictedMachineries } from './RestrictedMachineries';\n\nimport './ViewMachineries.scss';\nimport { redirectTo } from '@utils';\nimport { ResourceStatus } from '@components/common/ResourceStatus';\nimport MachineryJobsDialog from '@containers/machineries/MachineryJobsDialogContainer';\nimport { goToMachineryRequirements } from '@components/routes';\nimport { ModuleManager } from '@modules';\n\nexport interface IProps {\n getMachineries: Function;\n machinery: IMachinery;\n machineryTypes: IMachineryType[];\n propertyGroupTypes: IPropertyGroupType[];\n resourceStatusTypes: IResourceStatusType[];\n saveMachinery: Function;\n reactivateMachinery: Function;\n removeMachinery: Function;\n security: ISecurity;\n work: IWork;\n appUsers: IUserIdentity[];\n contractors: IContractor[];\n modules: ModuleManager;\n restrictMachinery: Function;\n removeRestrictedMachinery: Function;\n}\n\nexport interface IMachinerySubTypeWithDisabling extends IMachinerySubType {\n disabled?: boolean;\n}\n\nfunction AddMachinery({\n machineryTypes, onChange, propertyGroupTypes, saveMachinery, workId, security, fieldValidations, contractors, work\n}: {\n machineryTypes: IMachineryType[],\n contractors: IContractor[],\n onChange: Function,\n propertyGroupTypes: IPropertyGroupType[],\n saveMachinery: Function,\n workId: number,\n security: ISecurity;\n fieldValidations: IFieldValidation[];\n work: IWork;\n}) {\n const machinerySettings = work.machinerySettings;\n const { t } = useTranslation();\n const messages = useMessage({\n successMessage: t('Machinery added successfully'),\n autoClear: true,\n });\n\n const loading = useLoading();\n const [subTypes, setSubTypes] = React.useState([]);\n\n const settings = useWorkFormSettings({ work: work, scope: 'machinery' });\n\n const selectedMachineryType = useNumberState();\n const selectedSubType = useNumberState();\n const selectedContractor = useNumberState();\n\n const [createJobRelations, setCreateJobRelations] = React.useState(false);\n const [selectedMachineryTypeId, setSelectedMachineryTypeId] = React.useState(0);\n\n const GRUA_AUTOPROPULSADA = 104;\n const CAMION_PLUMA = 105;\n const TURISMO_FURGONETA_Y_CAMIONES = 106;\n const MAQUINARIA_SIN_MATRICULA = 110;\n const MAQUINARIA_CON_MATRICULA = 109;\n const PLATAFORMA_ELEVADORA = 103;\n const EQUIPOS_DE_TRABAJO = 111;\n\n\n const formInit = () => {\n if (workId == 21) {\n return useForm({\n initialValues: {\n id: 0,\n workId: workId,\n name: '',\n code: '',\n machineryTypeId: selectedMachineryType.value,\n machinerySubTypeId: selectedSubType.value,\n contractorId: selectedContractor.value,\n prefixLicenseNumber: '',\n licenseNumber: '',\n suffixLicenseNumber: '',\n },\n validateOnMount: true,\n validate: ValidationBuilder\n .new()\n .notEmpty('machineryTypeId')\n .notEmptyIf(machinerySettings?.subTypeMandatory, 'machinerySubTypeId')\n .withFieldValidations(ResourceType.Machinery, fieldValidations)\n .notEmpty('licenseNumber', t('LicenseNumber/N.Serierequired'))\n .lift()\n });\n } else if (workId == 23) {\n return useForm({\n initialValues: {\n id: 0,\n workId: workId,\n name: '',\n code: '',\n machineryTypeId: selectedMachineryType.value,\n machinerySubTypeId: selectedSubType.value,\n contractorId: selectedContractor.value,\n prefixLicenseNumber: '',\n licenseNumber: '',\n suffixLicenseNumber: '',\n },\n validateOnMount: true,\n validate: (data: IMachinery) => ValidationBuilder\n .create(data)\n .notEmpty('machineryTypeId')\n .notEmptyIf(machinerySettings?.subTypeMandatory && subTypes.length > 0, 'machinerySubTypeId')\n .notEmptyIf([GRUA_AUTOPROPULSADA, CAMION_PLUMA, TURISMO_FURGONETA_Y_CAMIONES, MAQUINARIA_CON_MATRICULA].includes(data.machineryTypeId ?? 0), 'licenseNumber', t('code is required'))\n .notEmptyIf([MAQUINARIA_SIN_MATRICULA, PLATAFORMA_ELEVADORA, EQUIPOS_DE_TRABAJO].includes(data.machineryTypeId ?? 0), 'code', t('code is required'))\n .withFieldValidations(ResourceType.Machinery, fieldValidations)\n .build()\n })\n } else {\n return useForm({\n initialValues: {\n id: 0,\n workId: workId,\n name: '',\n code: '',\n machineryTypeId: selectedMachineryType.value,\n machinerySubTypeId: selectedSubType.value,\n contractorId: selectedContractor.value,\n prefixLicenseNumber: '',\n licenseNumber: '',\n suffixLicenseNumber: '',\n },\n validateOnMount: true,\n validate: ValidationBuilder\n .new()\n .notEmpty('machineryTypeId')\n .notEmptyIf(machinerySettings?.subTypeMandatory && subTypes.length > 0, 'machinerySubTypeId')\n .withFieldValidations(ResourceType.Machinery, fieldValidations)\n .lift()\n });\n }\n }\n\n const form = formInit();\n\n React.useEffect(() => {\n setSelectedMachineryTypeId(form.values.machineryTypeId);\n }, [form.values.machineryTypeId]);\n\n React.useEffect(() => {\n selectedSubType.set(undefined);\n form.setFieldValue('machinerySubTypeId', undefined);\n\n if (form.values.machineryTypeId) {\n const mt = machineryTypes.find(mt => mt.id == form.values.machineryTypeId);\n setSubTypes(mt?.subTypes ?? []);\n }\n else {\n setSubTypes([]);\n }\n }, [form.values.machineryTypeId]);\n\n const addRecord = useObjectState({ properties: [] });\n\n const doAdd = loading.wrap(async (..._: any) => {\n const newRecord: IMachinery = {\n ...addRecord.value,\n ...form.values,\n isActive: true,\n };\n\n const resp = await saveMachinery(workId, newRecord, createJobRelations);\n\n let respMessage = resp;\n if (respMessage.error == 'restricted.machinery.message') {\n respMessage.error = `${t('restricted.machinery.message')} ${form.values.code && form.values.code.length > 0 ? form.values.code : form.values.licenseNumber}`;\n }\n\n messages.set(respMessage);\n if (resp.hasValue) {\n onChange();\n }\n });\n\n React.useEffect(() => {\n if (workId == 21 && subTypes.some(st => st.name == \"Autocarro\")) {\n subTypes.find(st => st.name == \"Autocarro\")!.disabled = true;\n }\n }, [subTypes]);\n\n return
\n
\n \n {form.select('machineryTypeId', { options: machineryTypes.sort((a, b) => a.name.localeCompare(b.name)) })}\n \n {subTypes.length > 0 &&\n \n {form.select('machinerySubTypeId', { options: subTypes.sort((a, b) => a.name.localeCompare(b.name)) })}\n \n }\n {settings.show('name') &&\n \n {form.input('name')}\n }\n {(settings.show('code') && workId !== 23 || (workId === 23 && [MAQUINARIA_SIN_MATRICULA, PLATAFORMA_ELEVADORA, EQUIPOS_DE_TRABAJO].includes(selectedMachineryTypeId))) &&\n \n {form.input('code')}\n }\n {(workId !== 23 || (workId === 23 && [GRUA_AUTOPROPULSADA, CAMION_PLUMA, TURISMO_FURGONETA_Y_CAMIONES, MAQUINARIA_CON_MATRICULA].includes(selectedMachineryTypeId))) &&\n \n {work.machinerySettings?.onlyLicenseNumber == false &&\n form.inputs(\n ['prefixLicenseNumber', 'licenseNumber', 'suffixLicenseNumber'],\n {\n 'prefixLicenseNumber': { placeholder: t('Letter'), className: 'flat', containerStyle: { width: '40%' } },\n 'licenseNumber': { placeholder: t('Number'), containerClassName: '', className: 'flat' },\n 'suffixLicenseNumber': { placeholder: t('Letter'), className: 'flat-left', containerStyle: { width: '40%' } },\n }\n )\n }\n {work.machinerySettings?.onlyLicenseNumber == true &&\n form.input('licenseNumber')\n }\n }\n \n \n {form.select('contractorId', { options: contractors, filter: true })}\n \n \n\n
\n\n \n\n
\n\n {messages.render()}\n\n
\n {work.settingsObj?.createJobRelations == true &&\n
\n setCreateJobRelations(e.target.value)} />\n {t('createJobRelations.machineries')}\n
}\n
\n {loading.render()}\n \n {t('Add')}\n \n
\n
\n
\n}\n\nenum FormType {\n List = 0,\n AddMachinery = 1,\n RestrictedMachineries\n}\n\ntype IMachineryRow = IMachinery & {\n contractorName: string;\n validatedCount?: number;\n totalCount?: number;\n}\n\nexport function ViewMachineriesImpl(props: IProps) {\n const loading = useLoading();\n const { t } = useTranslation();\n const dialogs = useDialogs();\n const toast = useToast();\n\n const filterKey = `filters.machineries[workId=${props.work.id}]`;\n\n const filter = useInputSearch({ filterKey });\n const settings = useWorkFormSettings({ work: props.work, scope: 'machinery' });\n\n const [machinerySubtypes, setMachinerySubtypes] = React.useState([]);\n\n const [formType, setFormType] = React.useState(FormType.List);\n\n const userFilters = useSearchFilters({\n awaitForDoSearch: true,\n security: props.security,\n workId: props.work.id,\n name: 'machineries/list',\n references: {\n contractor: props.contractors,\n machinery_type: props.machineryTypes,\n machinery_sub_type: Array.from(new Set(machinerySubtypes)),\n },\n persist: true,\n });\n\n React.useEffect(() => {\n if (userFilters.filters.active == null) {\n userFilters.setFilter('active', true);\n }\n\n if(userFilters.filters.machinery_type == 0){\n userFilters.setFilter('machinery_type', null);\n }\n\n if(userFilters.filters.machinery_sub_type == 0){\n userFilters.setFilter('machinery_sub_type', null);\n }\n }, [userFilters.filters]);\n\n const viewMachineriesProps = {\n security: props.security,\n moduleManager: props.modules,\n work: props.work,\n };\n\n const permissionCtx = {\n security: props.security,\n };\n\n const modulePerms = usePermissions(\n viewMachineriesProps, {\n ctx: permissionCtx,\n }, {\n canAddMachineries: {\n name: 'resources.add',\n default: props.security.hasPermission('machineries.add') || props.security.isContractor()\n }\n });\n\n const canAdd = modulePerms.get('canAddMachineries');\n\n\n React.useEffect(() => {\n if (props.work.id === 23) {\n calculateSubTypes(userFilters.filters.machinery_type)\n }\n }, [userFilters.filters.machinery_type]);\n\n const calculateSubTypes = (machineryTypeId: number) => {\n userFilters.setFilter('machinery_sub_type', null);\n const subTypes = props.machineryTypes.map(mt => mt.subTypes).reduce((a: any, b) => a.concat(b), []);\n const filteredSubTypes = subTypes.filter((st: any) => st.parentId === machineryTypeId);\n setMachinerySubtypes(filteredSubTypes);\n }\n\n const paginateData = useSearchPaginate({\n search: 'machineries/list',\n workId: props.work.id,\n filters: userFilters.merge({ name: filter.value, workId: props.work.id }),\n dependencies: [filter.value, userFilters.filters],\n lazy: true,\n persist: true,\n limit: props.work.id == 21 ? 100 : 10,\n });\n\n const paginator = usePaginator({\n data: paginateData.value,\n onChange: (page, limit) => paginateData.doSearch(\n userFilters.merge({ name: filter.value, workId: props.work.id }),\n page,\n limit),\n onExport: () => paginateData.exportToXls(\n userFilters.merge({ workId: props.work.id }),\n t('machineries.export.filename')),\n });\n\n const resolveMachineryType = useResolveName(props.machineryTypes, { translate: true });\n\n const resolveMachinerySubType = (m: IMachinery) => {\n const smt = props.machineryTypes.find(mt => mt.id == m.machineryTypeId)?.subTypes?.find(st => st.id == m.machinerySubTypeId)?.name;\n return smt;\n }\n\n const renderMachineryType = (m: IMachinery) => {\n const value = t(resolveMachineryType(m.machineryTypeId));\n return
\n {value}\n
\n }\n\n const renderMachinerySubType = (m: IMachinery) => {\n const value = t(resolveMachinerySubType(m) ?? '');\n return
\n {value}\n
\n }\n\n const contractors = useSearch({\n workId: props.work.id,\n search: 'machineries/contractors',\n filters: {\n workId: props.work.id,\n },\n });\n\n const reload = loading.wrap(async () => {\n await paginateData.doSearch(userFilters.merge({ name: (filter instanceof String || typeof filter === 'string') ? filter.value : undefined, workId: props.work.id }));\n });\n\n const initialize = loading.wrap(async (doReload: boolean = false) => {\n await paginateData.doSearch(userFilters.merge({ workId: props.work.id }));\n setFormType(FormType.List);\n\n if (doReload) {\n await reload();\n }\n });\n\n const selectMachinery = (machinery: IMachinery | undefined) => {\n if (machinery) {\n redirectTo(`/work/${props.work.id}/machineries/${machinery.id}`);\n }\n }\n\n const machineryRequirements = (id: number) => {\n redirectTo(`/work/${props.work.id}/machineries/${id}/requirements`);\n }\n\n const renderLicensePlate = (m: IMachinery) => {\n const value = m.prefixLicenseNumber + '' + m.licenseNumber + '' + m.suffixLicenseNumber;\n if (m.prefixLicenseNumber != null) {\n return
\n {value}\n
;\n }\n else {\n return null;\n }\n }\n\n const renderStatus = (machinery: IMachinery) =>\n ;\n\n const doActivateMachinery = loading.wrap(async (i: IMachinery) => {\n await props.reactivateMachinery(props.work.id, i.id);\n await initialize();\n });\n\n const confirmActivate = useConfirm({\n message: t('resource.activate.machinery.confirm'),\n accept: doActivateMachinery\n });\n\n const doDeactivateMachinery = loading.wrap(async (i: IMachinery) => {\n await props.removeMachinery(i.id, props.work.id, false);\n await initialize();\n });\n\n const doRemoveMachinery = loading.wrap(async (i: IMachinery) => {\n await props.removeMachinery(i.id, props.work.id, true);\n await initialize();\n });\n\n const confirmDeactivate = useConfirm({\n message: t('resource.deactivate.machinery.confirm'),\n accept: doDeactivateMachinery\n })\n\n const confirmRemove = useConfirm({\n message: t('resource.remove.machinery.confirm'),\n accept: doRemoveMachinery\n })\n\n const handleToast = (message: string, success: boolean) => {\n if (success) {\n toast.show(message)\n }\n else {\n toast.error(message)\n }\n }\n\n const dataTable = useDataTable({\n columns: [\n { title: t('License plate'), render: renderLicensePlate, className: `${props.work.id != 21 ? 'td-min left' : 'td-md'}`, sortKey: 'licenseNumber', },\n settings.show('name')\n ? { title: t('Name'), render: d => {d.name}, field: 'name', className: 'td-lg left', sortKey: 'name' }\n : undefined,\n settings.show('code')\n ? { title: t('machinery.codes'), render: d => {d.code}, field: 'code', className: `${props.work.id != 21 ? 'td-min center left' : 'td-md center'}`, sortKey: 'code', }\n : undefined,\n { title: t('Machinery type'), render: renderMachineryType, className: `${props.work.id != 21 ? 'td-max center' : 'td-md'}`, sortKey: 'machineryType' },\n { title: t('Machinery subtype'), render: renderMachinerySubType, className: 'td-md', sortKey: 'machinerySubtype' },\n {\n title: t('Contractor'),\n render: d => {d.contractorName},\n className: `${props.work.id != 21 ? 'td-max center left' : 'td-md'}`,\n sortKey: 'contractorName',\n },\n props.work.id != 19\n ? {\n title: 'Documentation', className: `${props.work.id != 21 ? 'w-7 center' : 'td-indicator td-sm center'}`,\n render: d =>\n goToMachineryRequirements(props.work.id, d.id)} className='pointer'>\n \n \n }\n : undefined,\n ![19,22,23].includes(props.work.id)\n ? { title: t('Status'), field: 'currentStatusType', render: renderStatus, className: 'td-md' }\n : undefined\n ],\n actions: [\n {\n headerClassName: 'td-sm', actions: [\n { title: t('View data'), onClick: selectMachinery },\n { title: t('Requirements'), onClick: d => machineryRequirements(d.id) },\n { title: t('Jobs'), disabled: r => r.contractorId == undefined, onClick: r => dialogs.show('jobs-dialog', r) },\n (props.security.hasPermission('machineries.force.status'))\n ? { title: t('resource.deactivate'), disabled: r => r.isActive == false, onClick: confirmDeactivate }\n : undefined,\n (props.security.hasPermission('machineries.force.status'))\n ? { title: t('resource.activate'), disabled: r => r.isActive == true, onClick: confirmActivate }\n : undefined,\n (props.security.isGestor())\n ? { title: t('resource.remove'), onClick: confirmRemove }\n : undefined,\n (props.security.hasPermission('restrict.resources'))\n ? { title: t('restrict.machinery'), onClick: r => dialogs.show('restrict-machinery', { workId: props.work.id, machineryId: r.id }) }\n : undefined\n ]\n }\n ],\n data: paginateData.data,\n onSort: (key, order) => paginateData.sortBy(key, order),\n denyLocalSort: true,\n });\n\n const getActions = () => {\n const actions = [];\n const security = props.security;\n actions.push({\n label: t('machineries.list'),\n command: () => setFormType(FormType.List),\n });\n\n if (canAdd) {\n actions.push({\n label: t('machineries.add'),\n command: () => setFormType(FormType.AddMachinery),\n });\n }\n\n if (props.security.hasPermission('restrict.resources')) {\n actions.push({\n label: t('restrict.machinery.add'),\n command: () => setFormType(FormType.RestrictedMachineries),\n });\n }\n\n return actions;\n }\n\n const actions = getActions();\n\n React.useEffect(() => {\n initialize();\n }, []);\n\n // React.useEffect(() => {\n // initialize(true)\n // }, [userFilters.filters]);\n\n React.useEffect(() => {\n if(userFilters.searchOrder === true){\n userFilters.returnSearchOrderToFalse();\n initialize(true);\n }\n\n }, [userFilters.searchOrder]);\n\n return
\n {toast.render()}\n \n\n
\n
\n
\n \n\n {filter.render()}\n\n {userFilters.renderAsButton()}\n {loading.renderBox()}\n \n \n \n
\n {formType === FormType.List && <>\n {dialogs.render('jobs-dialog',\n {\n style: { width: '60vw' },\n title: (r: IMachinery) => t('Jobs') + ': ' + r.name,\n className: 'table-bg'\n },\n (r: IMachinery) =>\n
\n \n
\n )}\n {dialogs.render('restrict-machinery', {\n title: t('restrict.machinery.add'),\n className: 'g pd',\n style: { width: '60vw' }\n }, (r: any) =>\n \n )}\n
\n {dataTable()}\n
\n
\n {paginator()}\n }\n {formType === FormType.AddMachinery && <>\n
\n \n
\n }\n {formType === FormType.RestrictedMachineries && <>\n \n }\n
\n
\n
\n}\n\nexport const ViewMachineries = React.memo(ViewMachineriesImpl, (prev, next) => {\n return prev.work.id === next.work.id;\n});","import * as React from 'react';\n\nimport { connect } from 'react-redux';\nimport { ApplicationState } from '../../store';\nimport * as MachineriesStore from '../../store/machineries';\nimport { ViewMachineries } from '@components/machineries/ViewMachineries';\nimport { isMachineryPropertyGroupType } from '@models';\n\nexport default connect(\n (state: ApplicationState) => ({\n ...state.identity,\n ...state.user,\n ...MachineriesStore.plainActions,\n propertyGroupTypes: state.user.propertyGroupTypes.filter(isMachineryPropertyGroupType),\n modules: state.modules.moduleManager,\n }),\n MachineriesStore.actionCreators,\n)(ViewMachineries as any) as any; // eslint-disable-line @typescript-eslint/no-explicit-any","import * as React from 'react';\n\nimport {\n useDataTable, useTranslation, useRemoteData,\n useMessage, useLoading, useSearch, Loading, Tag, usePermissions\n} from '@components';\nimport {\n IWorker, IWork, ISecurity, ModuleManager\n} from '@models';\nimport './WorkerJobsDialog.scss'\n\ntype GetWorkerF = (workId: number, id: number) => Promise;\n\nexport interface IProps {\n activateJobHasWorker: Function;\n requestClose: Function;\n saveJobHasWorker: Function;\n security: ISecurity;\n worker: IWorker;\n workerId: number;\n getWorker: GetWorkerF;\n work: IWork;\n removeJobHasWorker: Function;\n moduleManager: ModuleManager;\n}\n\ntype SearchR = {\n endDate?: Date;\n jobId: number;\n jobHasWorkerId?: number;\n jobHasContractorId?: number;\n isRelated?: boolean;\n currentStatusType?: number;\n parentContractorName?: string;\n name?: string;\n code?: string;\n description?: string;\n}\n\nfunction WorkerJobsFormImpl(props: IProps) {\n const { t } = useTranslation();\n const loading = useLoading();\n const messages = useMessage();\n\n const search = useSearch({\n search: 'contractorJobsHasWorker.list',\n normalizeKeys: true,\n workId: props.work.id,\n filters: {\n workerId: props.workerId,\n contractorId: props.worker.contractorId\n }\n });\n\n React.useEffect(() => {\n search.doSearch();\n }, []);\n\n const jobName = (d: SearchR) => {\n if (![22, 23].includes(props.work.id)){ //TODO: remove magic number\n return d.name;\n } else {\n return <>{d.name}\n }\n }\n\n const perms = usePermissions(props, {}, {\n add: 'jobHasWorker.add',\n remove: 'jobHasWorker.remove',\n });\n\n const dataTable = useDataTable({\n columns: [\n { title: 'Job', render: (d: any) => jobName(d) },\n {\n title: 'Description',\n field: 'description',\n render: (d: SearchR) => \n {d.description}\n \n },\n {\n title: 'Contractor',\n field: 'parentContractorName',\n render: (d: SearchR) => \n {d.parentContractorName}\n \n },\n {\n title: 'Associated',\n delegate: 'boolean',\n field: 'isRelated',\n className: 'td-md'\n },\n {\n title: 'End date',\n delegate: 'date',\n field: 'endDate',\n className: 'td-lg'\n },\n ],\n actions: [\n {\n actions: [\n perms.get('add')\n ? {\n title: t('Associate'),\n onClick: d => saveWorkerRelation(d.jobId, d.jobHasContractorId),\n disabled: d => (d.isRelated == true || d.currentStatusType == 3),\n }\n : undefined,\n perms.get('add')\n ? {\n title: t('Reactivate'),\n disabled: d => (d.endDate == undefined),\n onClick: d => reactiveWorkerRelation(d.jobId, d.jobHasWorkerId, d.jobHasContractorId, d)\n }\n : undefined,\n perms.get('remove')\n ? {\n title: t('Finalize'),\n disabled: d => (!d.isRelated || d.endDate != null),\n onClick: d => removeWorkerRelation(d.jobId, d.jobHasWorkerId)\n } : undefined,\n ]\n }\n ],\n data: search.value,\n loading: loading,\n });\n\n const saveWorkerRelation = loading.wrap(async (jobId: number, jobHasContractorId: number) => {\n const data = {\n workerId: props.workerId,\n jobId,\n jobHasContractorId: jobHasContractorId,\n };\n const resp = await props.saveJobHasWorker(props.work.id, data);\n messages.set(resp);\n await search.doSearch();\n });\n\n const removeWorkerRelation = loading.wrap(async (jobId: number, jobHasWorkerId: number) => {\n const resp = await props.removeJobHasWorker(props.work.id, jobId, jobHasWorkerId);\n messages.set(resp);\n await search.doSearch();\n });\n\n const reactiveWorkerRelation = loading.wrap(async (jobId: number, jobHasWorkerId: number, jobHasContractorId: number, d: SearchR) => {\n const resp = await props.activateJobHasWorker(props.work.id, jobId, props.workerId, d.jobHasWorkerId);\n messages.set(resp);\n await search.doSearch();\n });\n\n return
\n {search.renderLoading()}\n {dataTable()}\n
\n \n
\n
\n}\n\nexport function WorkerJobsDialog(props: IProps) {\n const worker = useRemoteData(props.getWorker, {\n parameters: [props.work.id, props.workerId]\n });\n\n return
\n {worker.renderLoading()}\n {worker.value && }\n
\n}\n\n\n// export function WorkerJobsForm(props: IProps) {\n//TODO: llevar al modulo de Azsa\n// const res = props\n// .moduleManager\n// .renderComponent('WorkerJobsForm', { ...props }, WorkerJobsFormImpl);\n\n// return res;\n// }","import * as React from 'react';\nimport { connect } from 'react-redux';\nimport { ApplicationState } from '../../store';\nimport * as JobsStore from '../../store/jobs';\nimport * as User from '../../store/user';\nimport * as WorkersStore from '@store/workers';\nimport { WorkerJobsDialog } from '../../components/workers/WorkerJobsDialog';\n\nexport default connect(\n (state: ApplicationState) => ({\n ...state.user,\n ...state.identity,\n ...JobsStore.plainActions,\n ...User.plainActions,\n ...WorkersStore.plainActions,\n moduleManager: state.modules.moduleManager,\n }),\n JobsStore.actionCreators,\n)(WorkerJobsDialog as any) as any;\n","import * as React from 'react';\n\nimport { connect } from 'react-redux';\nimport { ApplicationState } from '../../store';\nimport * as User from '../../store/user';\nimport * as WorkersStore from '@store/workers';\nimport { ProfessionalQualificationsDialog } from '../../components/workers/ProfessionalQualificationsDialog';\nimport { isWorkerPropertyGroupType } from '@models';\n\nexport default connect(\n (state: ApplicationState) => ({\n ...state.user,\n ...state.identity,\n ...User.plainActions,\n ...WorkersStore.plainActions,\n propertyGroupTypes: state.user.propertyGroupTypes.filter(isWorkerPropertyGroupType),\n }),\n WorkersStore.actionCreators,\n)(ProfessionalQualificationsDialog as any) as any;\n","import * as React from 'react';\n\nimport {\n useTranslation,\n useLoading, useForm, usePermissions\n} from '@components';\nimport {\n IWorker, IWork, ISecurity, IPropertyGroupType, PropertyGroupObjectType, ModuleManager,\n} from '@models';\nimport './WorkerJobsDialog.scss'\nimport { DynamicProperties } from '@components/user/DynamicProperties';\nimport { redirectTo } from '@utils';\n\ntype GetWorkerF = (workId: number, id: number) => Promise;\n\nexport interface IProps {\n work: IWork;\n moduleManager: ModuleManager;\n requestClose: Function;\n security: ISecurity;\n workerId: number;\n worker: IWorker;\n getWorker: GetWorkerF;\n propertyGroupTypes: IPropertyGroupType[];\n saveWorker: Function;\n}\n\nexport function ProfessionalQualificationsDialog(props: IProps) {\n const form = useForm();\n const loading = useLoading();\n const worker = React.useRef();\n\n const [propertyGroup, setPropertyGroups] = React.useState(\n props.propertyGroupTypes.find(x => x.name == 'Competencias Profesionales'));\n\n React.useEffect(() => {\n const p = props.propertyGroupTypes.find(x => x.name == 'Competencias Profesionales');\n if (p) {\n p.properties = p.properties?.sort((a, b) => a.title.localeCompare(b.title)) ?? [];\n setPropertyGroups(p);\n }\n }, [props.propertyGroupTypes]);\n\n const doSave = async () => {\n const data = await props.getWorker(props.work.id, props.workerId);\n const newWorker = { ...data, properties: form.values.properties };\n const _ = await props.saveWorker(props.work.id, newWorker);\n\n if (props.work.id != 23) {\n redirectTo(`/work/${props.work.id}/workers/${props.workerId}/requirements`);\n } else {\n props.requestClose();\n }\n\n };\n\n const initialize = loading.wrap(async () => {\n loading.start();\n const data = await props.getWorker(props.work.id, props.workerId);\n worker.current = data;\n form.setFieldValue({ properties: data.properties ?? [] });\n loading.stop();\n });\n\n React.useEffect(() => {\n initialize();\n }, []);\n\n const { t } = useTranslation();\n\n const perms = usePermissions(props, {}, {\n edit: 'workers.qualifications.edit',\n });\n\n return
\n {loading.render()}\n {!loading.isLoading() && worker.current != undefined && propertyGroup != null && <>\n form.setFieldValue('properties', v)}\n objectType={PropertyGroupObjectType.Worker}\n propertyGroupTypes={[propertyGroup]}\n readonly={!perms.get('edit')}\n />\n
\n \n {perms.get('edit') && \n {t('Save')}\n }\n
\n }\n
\n}\n","import * as React from 'react';\n\nimport {\n useTranslation,\n useForm, G\n} from '@components';\nimport {\n IWorker, ISecurity, IWork, ModuleManager\n} from '@models';\nimport './RestrictWorker.scss';\n\ninterface IProps {\n security: ISecurity;\n moduleManager: ModuleManager;\n work: IWork;\n worker?: IWorker;\n restrictWorker: Function;\n handleToast: Function;\n onClose: { clearDialogs : Function, reload: Function};\n}\n\ninterface IFormValues {\n workId: number;\n name: string;\n surname: string;\n code: string;\n contractorId: number;\n applicantName: number;\n applicantEmail: string;\n reason: string;\n remarks: string;\n date: string;\n}\n\nexport function RestrictWorker(props: IProps) {\n\n const { t } = useTranslation();\n\n const [disabled, setDisabled] = React.useState(false);\n\n const form = useForm({\n initialValues: {\n workId: props.work.id,\n name: props.worker?.name ?? '', //Se mantiene este campo por si el trabajador es borrado de la plataforma\n surname: props.worker?.surname ?? '', //Se mantiene este campo por si el trabajador es borrado de la plataforma\n code: props.worker?.code ?? '', //Se mantiene este campo por si el trabajador es borrado de la plataforma\n contractorId: props.worker?.contractorId ?? 0,\n applicantName: props.security.user?.id ?? 0,\n applicantEmail: props.security.user?.email ?? '',\n reason: '',\n remarks: '',\n date: new Date().toISOString().split('T')[0]\n },\n\n onSubmit: (data: IFormValues) => {\n handleSave();\n }\n })\n\n const handleSave = async () => {\n setDisabled(true);\n const resp = await props.restrictWorker(\n form.values.workId,\n props.worker?.id,\n form.values.name,\n form.values.surname,\n form.values.code,\n form.values.contractorId,\n form.values.applicantName,\n form.values.applicantEmail,\n form.values.reason,\n form.values.remarks\n );\n\n if (resp.restrictWorker.isError === false && typeof resp.restrictWorker.value == 'number') {\n props.handleToast(t('Worker restricted successfully'), true);\n props.onClose.reload(true);\n props.onClose.clearDialogs();\n } else {\n props.handleToast(t('Error restricting worker'), false);\n props.onClose.clearDialogs();\n }\n }\n\n\n\n return (\n
\n \n \n \n \n \n \n \n \n \n \n \n \n \n form.values.applicantName = e.target.value}\n />\n \n \n form.values.applicantEmail = e.target.value}\n />\n \n \n form.values.date = e.target.value}\n />\n \n \n form.values.reason = e.target.value}\n />\n \n \n form.values.remarks = e.target.value}\n />\n \n
\n
\n \n\n \n {t('Save')}\n \n
\n
\n )\n}","import * as React from 'react';\n\nimport {\n useTranslation,\n useSearch, useDataTable\n} from '@components';\n\nimport './RestrictWorker.scss';\n\ninterface IProps {\n workId: number,\n removeRestrictedWorker: Function,\n handleToast: (message: string, success: boolean) => void,\n}\n\ninterface IResult {\n applicantEmail: string,\n applicantName: string,\n code: string,\n contractorId: number,\n contractorName: string,\n date: string,\n id: number,\n isActive: boolean,\n name: string,\n reason: string,\n surname: string,\n workId: number,\n deactivatedAt?: string,\n}\n\nexport function RestrictedWorkers(props: IProps) {\n\n const { t } = useTranslation();\n\n const workers = useSearch({\n workId: props.workId,\n search: 'workers/restricted',\n filters: {\n workId: props.workId,\n },\n });\n\n React.useEffect(() => {\n workers.doSearch();\n }, []);\n\n const handleRemove = async (id: number, workId: number) => {\n const result = await props.removeRestrictedWorker(id, workId);\n\n if (result.data.removeRestrictedWorker.isError === false) {\n props.handleToast(t('Worker has been unrestricted'), true);\n workers.doSearch();\n }\n else {\n props.handleToast(t('Error while unrestricting worker'), false);\n }\n }\n\n\n const getActions = () => {\n return [\n {\n title: t('Unrestrict'),\n icon: 'fa fa-unlock',\n disabled: (row: IResult) => !row.isActive,\n onClick: (row: IResult) => {\n handleRemove(row.id, row.workId);\n }\n }\n ];\n }\n\n const showDate = (date: string) => {\n return new Date(date).toLocaleDateString();\n }\n\n\n\n const dataTable = useDataTable({\n className: ``,\n tooltip: true,\n columns:\n [\n {\n title: t('Date'),\n render: d => {showDate(d.date)},\n field: 'date',\n className: 'td-md',\n sortKey: 'date',\n },\n {\n title: t('In effect'),\n render: d => {`${d.isActive ? t('Yes') : showDate(d.deactivatedAt!)}`},\n field: 'isActive',\n className: 'td-md',\n sortKey: 'isActive',\n },\n {\n title: t('Name'),\n field: 'name',\n className: 'td-md left',\n sortKey: 'name',\n },\n {\n title: t('Surname'),\n field: 'surname',\n className: 'td-md left',\n sortKey: 'surname',\n },\n {\n title: t('accessControl.worker.code'),\n field: 'code',\n className: 'td-md',\n sortKey: 'code',\n },\n {\n title: t('Contractor'),\n field: 'contractorName',\n className: 'td-md left',\n sortKey: 'contractorName',\n },\n {\n title: t('Applicant'),\n field: 'applicantName',\n className: 'td-md left',\n sortKey: 'applicantName',\n },\n {\n title: t('Applicant email'),\n field: 'applicantEmail',\n className: 'td-md left',\n sortKey: 'applicantEmail',\n },\n {\n title: t('Reason'),\n field: 'reason',\n className: 'td-md left',\n sortKey: 'code',\n },\n {\n title: t('Remarks'),\n field: 'remarks',\n className: 'td-md left',\n sortKey: 'code',\n },\n ],\n actions: [\n {\n headerClassName: 'td-sm',\n actions: getActions()\n }\n ],\n data: workers.value,\n });\n\n\n return (\n
\n {dataTable()}\n
\n )\n}","import * as React from 'react';\n\nimport {\n BreadcrumbItem,\n G,\n RequireRole,\n SignalManager,\n SplitButton,\n InputSwitch,\n Tag,\n useConfirm,\n useDataTable,\n useDialogs,\n useForm,\n useInputSearch,\n useLoading,\n useMessage,\n useNumberState,\n useObjectState,\n usePaginator,\n useResolveName,\n useSearch,\n useSearchPaginate,\n useSearchFilters,\n useTranslation,\n ValidationBuilder,\n Avatar,\n usePermissions,\n useToast\n} from '@components'\nimport {\n IFieldValidation,\n IPropertyGroupType,\n IResourceStatusType,\n ISecurity,\n IUserIdentity,\n IWork,\n IWorker,\n ModuleManager,\n PropertyGroupObjectType,\n ResourceType\n} from '@models';\nimport { DynamicProperties } from '@components/user/DynamicProperties';\nimport './ViewWorkers.scss';\nimport { IContractor, ILegalForm, IWorkerDocumentType, IWorkerType } from '@models/resources';\nimport { ResourceStatus } from '@components/common/ResourceStatus';\nimport WorkerJobsDialog from '@containers/workers/WorkerJobsDialogContainer';\nimport ProfessionalQualificationsDialog from '@containers/workers/ProfessionalQualificationsDialogContainer';\nimport { RestrictWorker } from './RestrictWorker';\nimport { goToWorker, goToWorkerRequirements } from '@components/routes';\nimport useContractorFromAppUser from '@components/custom/useContractorFromAppUser';\nimport { useWorkFormSettings } from '@components/custom/useWorkFormSettings';\nimport { RestrictedWorkers } from './RestrictedWorkers';\n\nconst ADD_PERMISSION = 'workers.add';\n\nexport interface IProps {\n getWorkers: Function;\n propertyGroupTypes: IPropertyGroupType[];\n resourceStatusTypes: IResourceStatusType[];\n saveWorker: Function;\n restrictWorker: Function;\n removeRestrictedWorker: Function;\n reactivateWorker: Function;\n removeWorker: Function;\n security: ISecurity;\n work: IWork;\n worker: IWorker;\n appUsers: IUserIdentity[];\n workerTypes: IWorkerType[];\n workerDocumentTypes: IWorkerDocumentType[];\n contractors: IContractorProperties[];\n getRequirements: Function;\n legalForms: ILegalForm[];\n moduleManager: ModuleManager;\n}\n\nexport interface IContractorProperties extends IContractor {\n value: string;\n propertyGroupTypeId: number;\n}\n\nfunction AddWorker({\n onChange, propertyGroupTypes, saveWorker, workId, work, security, workerTypes,\n workerDocumentTypes, fieldValidations, contractors, legalForms, moduleManager\n}: {\n onChange: Function,\n propertyGroupTypes: IPropertyGroupType[],\n saveWorker: Function,\n workId: number,\n work: IWork,\n security: ISecurity,\n workerTypes: IWorkerType[],\n workerDocumentTypes: IWorkerDocumentType[],\n contractors: IContractorProperties[],\n fieldValidations: IFieldValidation[],\n legalForms: ILegalForm[],\n moduleManager: ModuleManager,\n}) {\n const settings = useWorkFormSettings({ work: work, scope: 'worker' })\n const { t } = useTranslation();\n const messages = useMessage({\n successMessage: t('Worker added successfully'),\n autoClear: true,\n });\n const selectedWorkerType = useNumberState();\n const selectedWorkerDocumentType = useNumberState();\n const selectedContractor = useNumberState();\n\n const [availableWorkerTypes, setAvailableWorkerTypes] = React.useState([]);\n\n const [selectedFile, setSelectedFile] = React.useState();\n const [createJobRelations, setCreateJobRelations] = React.useState(false);\n\n const [shouldValidateCode, setShouldValidateCode] = React.useState(false);\n\n const loading = useLoading();\n\n const workerSettings = work.workerSettings;\n\n const form = useForm({\n initialValues: {\n id: 0,\n workId: workId,\n name: '',\n surname: '',\n code: '',\n workerTypeId: selectedWorkerType.value,\n workerDocumentTypeId: selectedWorkerDocumentType.value,\n contractorId: selectedContractor.value,\n },\n validateOnMount: true,\n validate: ValidationBuilder\n .new()\n .notEmpty('name')\n .notEmpty('surname', 'Apellido obligatorio')\n .notEmpty('code')\n .notEmpty('workerDocumentTypeId')\n .notEmptyIf(workerSettings?.workerTypeIsMandatory, 'workerTypeId')\n .withFieldValidations(ResourceType.Worker, shouldValidateCode ? fieldValidations : undefined)\n .lift(),\n validateOnChange: true,\n });\n\n React.useEffect(() => {\n const res = moduleManager.validateData('WorkerCode', { workerDocumentTypeId: form.values.workerDocumentTypeId });\n\n setShouldValidateCode(res ?? false);\n form.setFieldValue('code', '');\n }, [form.values.workerDocumentTypeId]);\n\n const addRecord = useObjectState({ properties: [] });\n\n const doAdd = loading.wrap(async (..._: any) => {\n const newRecord: IWorker = {\n ...addRecord.value,\n ...form.values,\n isActive: true,\n properties: addRecord.value.properties,\n };\n\n const resp = await saveWorker(workId, newRecord, { createJobRelations, imageFile: selectedFile });\n\n let respMessage = resp;\n if (respMessage.error == 'restricted.worker.message') {\n respMessage.error = `${t('restricted.worker.message')} ${form.values.code}`;\n }else if (respMessage.error == 'worker.code.exists.message') {\n respMessage.error = `${t('worker.code.exists.message')} ${form.values.code}`;\n }\n\n messages.set(respMessage);\n\n if (resp.hasValue) {\n onChange(true);\n }\n });\n\n const contractorUser = useContractorFromAppUser(workId, security);\n\n const contractorData = useSearch({\n workId: workId,\n search: 'workers/contractor.get',\n lazy: true\n });\n\n React.useEffect(() => {\n if (contractorUser || form.values.contractorId) {\n contractorData.doSearch({\n contractorId: contractorUser ?? form.values.contractorId\n });\n }\n }, [form.values.contractorId, contractorUser]);\n\n const onSelectPhoto = (e: React.ChangeEvent) => {\n const file = e.target.files![e.target.files?.length! - 1];\n setSelectedFile(file);\n }\n\n const contractor = contractorData.value && contractorData.value.length > 0\n ? contractorData.value[0]\n : undefined;\n\n const sm = SignalManager.create(work.settingsObj?.signals, 'worker');\n\n const cannotSave = () => {\n if (work.workerSettings?.showWorkerImage == true) {\n if ((form.isInvalid() || selectedFile == undefined || selectedFile.type != 'image/jpeg')) {\n return true;\n } else {\n return false;\n }\n } else {\n if (form.isInvalid()) {\n return true;\n } else {\n return false;\n }\n }\n }\n\n React.useEffect(() => {\n //TODO: refactor this\n if (workId != 21) {\n if (form.values.contractorId) {\n workerTypeCalculator(form.values.contractorId);\n }\n if (contractor) {\n workerTypeCalculator(contractor.id);\n }\n }\n else {\n setAvailableWorkerTypes(workerTypes);\n }\n }, [form.values.contractorId, contractor]);\n\n\n const workerTypeCalculator = (contractorId: number) => {\n const contractor = contractors.find(x => x.id == contractorId);\n const selectedLegalForm = contractor?.legalFormId;\n const selectedWorkerTypes = legalForms.find(x => x.id == selectedLegalForm)?.workerTypes?.map(x => x.workerType).map(x => x.id) ?? [];\n\n if (selectedWorkerTypes.length > 0) {\n setAvailableWorkerTypes(workerTypes.filter(x => selectedWorkerTypes?.includes(x.id)));\n }\n else {\n //TODO\n if (workId != 19) {\n const value = JSON.parse(contractor?.value ?? \"[]\");\n const c: any[] = [workerTypes.find(x => x.name == \"TRABAJADOR AUTONOMO SOCIO\")];\n if (Object.keys(value).length) {\n if (value.Metal == true) {\n c.push(workerTypes.find(x => x.name == \"TRABAJADOR REGIMEN GENERAL CONVENIO METAL\"));\n }\n if (value.Construcción == true) {\n c.push(workerTypes.find(x => x.name == \"TRABAJADOR REGIMEN GENERAL CONVENIO CONSTRUCCION\"));\n }\n if (value[\"Madera y Mueble\"] == true) {\n c.push(workerTypes.find(x => x.name == \"TRABAJADOR REGIMEN GENERAL CONVENIO MADERA\"));\n }\n if (value[\"Vidrio y Rotulación\"] == true) {\n c.push(workerTypes.find(x => x.name == \"TRABAJADOR REGIMEN GENERAL CONVENIO VIDRIO, ROTULACION Y CERAMICA\"));\n }\n if (value.Otros != undefined) {\n c.push(workerTypes.find(x => x.name == \"TRABAJADOR REGIMEN GENERAL\"));\n }\n }\n setAvailableWorkerTypes(c);\n }\n }\n }\n\n sm.current.setValues(form.values, { contractor });\n\n const filterDocumentTypes = moduleManager\n .filterDependency('worker.documentTypes', {\n contractor\n });\n\n const documentTypes = workerDocumentTypes\n .filter(filterDocumentTypes);\n\n return
\n
\n
\n
\n \n {form.input('name')}\n \n \n {form.input('surname')}\n \n \n {form.select('workerDocumentTypeId', { options: documentTypes })}\n \n \n {form.input('code')}\n \n \n \n {form.select('contractorId', { options: contractors, filter: true })}\n \n \n {settings.show('workerTypeId') &&\n \n {form.select('workerTypeId', { options: availableWorkerTypes })}\n \n }\n {work.workerSettings?.showWorkerImage == true &&\n \n }\n {(work.workerSettings?.showWorkerImage == true && selectedFile == null) &&\n {t('You must upload a JPEG')}\n }\n {(work.workerSettings?.showWorkerImage == true && selectedFile != null && selectedFile.type != 'image/jpeg') &&\n {t('You must upload a JPEG')}}\n
\n
\n\n
\n\n \n
\n
\n\n {messages.render()}\n
\n {work.settingsObj?.createJobRelations! == true &&\n
\n setCreateJobRelations(e.target.value)} />\n {t('createJobRelations.workers')}\n
}\n \n {loading.render()}\n \n {t('Add')}\n \n
\n
\n}\n\nenum FormType {\n List = 0,\n AddWorker = 1,\n RestrictedWorkers = 2,\n}\n\ntype IWorkerResult = IWorker & {\n contractorName: string;\n validatedCount: number;\n totalCount: number;\n photoId?: number;\n}\n\nfunction ViewWorkersImpl(props: IProps) {\n const loading = useLoading();\n const { t } = useTranslation();\n const dialogs = useDialogs();\n const filterKey = `filters.workers[workId=${props.work.id}]`;\n const filter = useInputSearch({ filterKey });\n const searchTerm = filter;\n const settings = useWorkFormSettings({ work: props.work, scope: 'worker' });\n const toast = useToast();\n\n const viewWorkersProps = {\n security: props.security,\n moduleManager: props.moduleManager,\n work: props.work,\n };\n\n const permissionCtx = {\n security: props.security,\n };\n\n const modulePerms = usePermissions(\n viewWorkersProps, {\n ctx: permissionCtx,\n }, {\n canAddWorkers: {\n name: 'resources.add',\n default: props.security.hasPermission(ADD_PERMISSION) || props.security.isContractor() || props.security.isGestor()\n }\n });\n\n const canAdd = modulePerms.get('canAddWorkers');\n\n const [formType, setFormType] = React.useState(FormType.List);\n\n const reload = loading.wrap(async () => {\n await paginateData.doSearch(userFilters.merge({ name: (filter instanceof String || typeof filter === 'string') ? searchTerm.value : undefined, workId: props.work.id }));\n });\n\n const initialize = loading.wrap(async (doReload: boolean = false) => {\n setFormType(FormType.List);\n\n if (doReload) {\n await reload();\n }\n });\n\n const selectWorker = (worker: IWorker | undefined) => {\n if (worker) {\n goToWorker(props.work.id, worker.id);\n }\n }\n const viewWorkerRequirements = (id: number) => {\n goToWorkerRequirements(props.work.id, id);\n }\n\n const renderStatus = (worker: IWorker) =>\n ;\n\n const resolveWorkerType = useResolveName(props.workerTypes, { translate: true });\n const resolveWorkerDocumentType = useResolveName(props.workerDocumentTypes, { translate: true });\n\n const renderWorkerType = (w: IWorker) => {\n return
\n {resolveWorkerType(w.workerTypeId)}\n
;\n }\n\n const renderWorkerDocumentType = (w: IWorker) => {\n return
\n {t(resolveWorkerDocumentType(w.workerDocumentTypeId))}\n
;\n }\n\n const doActivateWorker = loading.wrap(async (i: IWorker) => {\n await props.reactivateWorker(props.work.id, i.id);\n await reload();\n });\n\n const doDeactivateWorker = loading.wrap(async (i: IWorker) => {\n await props.removeWorker(i.id, props.work.id, false);\n await reload();\n });\n\n const doRemoveWorker = loading.wrap(async (i: IWorker) => {\n await props.removeWorker(i.id, props.work.id, true);\n await reload();\n });\n\n const confirmActivate = useConfirm({\n message: t('resource.activate.worker.confirm'),\n accept: doActivateWorker\n });\n const confirmDeactivate = useConfirm({\n message: t('resource.deactivate.worker.confirm'),\n accept: doDeactivateWorker\n });\n const confirmRemove = useConfirm({\n message: t('resource.remove.worker.confirm'),\n accept: doRemoveWorker\n });\n\n const userFilters = useSearchFilters({\n security: props.security,\n workId: props.work.id,\n name: 'workers/list',\n references: {\n contractor: props.contractors,\n },\n persist: true\n });\n\n React.useEffect(() => {\n if (userFilters.filters.active == null) {\n userFilters.setFilter('active', true);\n }\n }, [userFilters.filters]);\n\n const paginateData = useSearchPaginate({\n search: 'workers/list',\n workId: props.work.id,\n filters: userFilters.merge({ name: searchTerm.value, workId: props.work.id }),\n dependencies: [searchTerm.value, userFilters.filters],\n lazy: true,\n persist: true,\n //TODO\n limit: props.work.id == 21 ? 100 : 10,\n });\n\n const paginator = usePaginator({\n data: paginateData.value,\n onChange: (page, limit) => paginateData.doSearch(\n userFilters.merge({ name: searchTerm.value, workId: props.work.id }),\n page,\n limit),\n onExport: () => paginateData.exportToXls(\n userFilters.merge({ name: searchTerm.value, workId: props.work.id }),\n t('workers.export.filename')),\n });\n\n const renderPhoto = (w: IWorkerResult) => {\n if (w.photoId) {\n return \n }\n else {\n return \n }\n }\n\n const perms = usePermissions(props, {}, {\n deactivate: 'resource.deactivate',\n remove: 'workers.complete.remove',\n });\n\n const getWorkerActions = () => {\n const openQualificationsDialog = (d: any) => dialogs.show('professional-qualifications', d);\n return [\n { title: t('View data'), onClick: selectWorker },\n { title: t('Requirements'), onClick: (d: IWorkerResult) => viewWorkerRequirements(d.id) },\n { title: t('Jobs'), onClick: (r: IWorkerResult) => dialogs.show('jobs-dialog', r) },\n (props.security.hasPermission('workers.qualifications')) ? props.moduleManager.injectAction('professional-qualifications', { openQualificationsDialog: openQualificationsDialog }) : undefined,\n perms.get('deactivate')\n ? { title: t('resource.deactivate'), disabled: (r: IWorkerResult) => r.isActive == false, onClick: confirmDeactivate }\n : undefined,\n props.security.hasPermission('workers.force.status')\n ? { title: t('resource.activate'), disabled: (r: IWorkerResult) => r.isActive == true, onClick: confirmActivate }\n : undefined,\n perms.get('remove')\n ? { title: t('resource.remove'), onClick: confirmRemove }\n : undefined,\n props.security.hasPermission('restrict.resources')\n ? { title: t('restrict.worker'), onClick: (d: IWorkerResult) => dialogs.show('restrict-worker', { worker: d }) }\n : undefined,\n ];\n };\n\n\n const dataTable = useDataTable({\n className: `workers-table workers-table${'-' + props.work.id}`,\n columns:\n [\n props.work.workerSettings?.showWorkerImage == true\n ? { title: '', render: renderPhoto, className: 'td-avatar' }\n : undefined,\n {\n title: t('Name'),\n render: d => {d.name},\n field: 'name',\n className: 'td-md left',\n sortKey: 'name',\n },\n {\n title: t('Surname'),\n render: d => {d.surname},\n field: 'surname',\n className: 'td-md left',\n sortKey: 'surname',\n },\n {\n title: t('Contractor'),\n render: (d: IWorkerResult) => d.contractorName\n ? {d.contractorName}\n : null,\n className: 'w-25 left',\n sortKey: 'contractorName',\n },\n settings.show('workerTypeId')\n ? { title: t('Worker type'), render: renderWorkerType, className: 'td-lg', sortKey: 'workerType' }\n : undefined,\n props.work.workerSettings?.showGeneralIndicators == true\n ? {\n title: 'Documentation', className: 'td-indicator td-md center',\n render: (d: IWorkerResult) =>\n goToWorkerRequirements(props.work.id, d.id)} className='pointer'>\n \n \n }\n : undefined,\n settings.show('currentStatusType') && ![23, 22].includes(props.work.id)\n ? { field: 'currentStatusType', render: renderStatus, className: 'td-md' }\n : undefined,\n { title: t('Worker document type'), render: renderWorkerDocumentType, className: 'w-10 center', sortKey: 'workerDocumentType' },\n { title: t('worker.code'), render: d => {d.code}, field: 'code', className: 'w-10 center', sortKey: 'code' },\n ],\n actions: [\n {\n headerClassName: 'td-sm',\n actions: getWorkerActions()\n }\n ],\n data: paginateData.data,\n onSort: (key, order) => paginateData.sortBy(key, order),\n denyLocalSort: true,\n });\n\n const getActions = () => {\n const actions = [];\n const security = props.security;\n\n actions.push({\n label: t('workers.list'),\n command: () => setFormType(FormType.List),\n });\n if (canAdd) {\n actions.push({\n label: t(ADD_PERMISSION),\n command: () => setFormType(FormType.AddWorker)\n });\n }\n if (security.hasPermission('restrict.resources')) {\n actions.push({\n label: t('restrict.worker.add'),\n command: () => setFormType(FormType.RestrictedWorkers)\n });\n }\n\n return actions;\n }\n\n const contractors = useSearch({\n workId: props.work.id,\n search: 'machineries/contractors',\n filters: {\n workId: props.work.id,\n },\n });\n\n const actions = getActions();\n\n React.useEffect(() => {\n initialize(true);\n }, []);\n\n React.useEffect(() => {\n if(userFilters.filters.active == null){\n userFilters.setFilter('active', true);\n }\n }, [userFilters.filters]);\n\n const handleToast = (message: string, success: boolean) => {\n if (success) {\n toast.show(message)\n }\n else {\n toast.error(message)\n }\n }\n\n return
\n {toast.render()}\n setFormType(FormType.List)}\n text={t('Workers')} />\n\n
\n
\n
\n \n\n {filter.render()}\n\n CTRL+F\n {userFilters.renderAsButton()}\n {loading.renderBox()}\n \n \n \n
\n
\n
\n {dialogs.render('professional-qualifications', { title: t('Professional qualifications'), className: 'g pd', style: { maxHeight: 'fit-content', minHeight: 'fit-content', maxWidth: '80vw', minWidth: '80vw' } }, (r: IWorker) =>\n
\n \n
)}\n {formType === FormType.List && <>\n {dialogs.render('jobs-dialog', {\n title: (w: IWorker) => t('Jobs') + ': ' + w.name + ' ' + w.surname,\n className: 'g pd',\n style: { width: '60vw' }\n }, (r: IWorker) =>\n
\n \n
\n )}\n {dialogs.render('restrict-worker', {\n title: t('restrict.worker.add'),\n className: 'g pd',\n style: { width: '60vw' }\n }, (r: any) =>\n \n )}\n
\n {dataTable()}\n
\n
\n {paginator()}\n }\n {formType === FormType.AddWorker && <>\n
\n \n
\n }\n {formType === FormType.RestrictedWorkers && <>\n \n }\n
\n
\n
\n}\n\nexport const ViewWorkers = React.memo(ViewWorkersImpl, (prev, next) => {\n return prev.work.id === next.work.id;\n});\n","import { Action, Reducer } from 'redux';\nimport {\n} from '../models';\nimport * as DocumentActions from './actions/documents';\n\nexport interface IDocumentsState {\n}\n\n// types\nenum Types {\n}\n\nexport type KnownAction = {type: undefined};\n\nexport const plainActions = {\n pushTemporalResource: DocumentActions.pushTemporalResource,\n getDocumentsAndFolders: DocumentActions.getDocumentsAndFolders,\n getDocuments: DocumentActions.getDocuments,\n saveDocument: DocumentActions.saveDocument,\n getFolders: DocumentActions.getFolders,\n saveFolder: DocumentActions.saveFolder,\n removeDocument: DocumentActions.removeDocument,\n removeFolder: DocumentActions.removeFolder,\n}\n\nexport const actionCreators = {\n};\n\nexport const reducer: Reducer = (state: IDocumentsState | undefined, incomingAction: Action): IDocumentsState => {\n if (state === undefined) {\n return { };\n }\n\n const action = incomingAction as KnownAction;\n\n switch (action.type) {\n default:\n return state;\n }\n};\n","import * as React from 'react';\n\nimport { connect } from 'react-redux';\nimport { ApplicationState } from '../../store';\nimport * as WorkersStore from '../../store/workers';\nimport * as RequirementsStore from '../../store/requirements';\nimport { ViewWorkers } from '../../components/workers/ViewWorkers';\nimport { isWorkerPropertyGroupType } from '@models';\n\nexport default connect(\n (state: ApplicationState) => ({\n ...state.identity,\n ...state.user,\n ...WorkersStore.plainActions,\n ...RequirementsStore.plainActions,\n propertyGroupTypes: state.user.propertyGroupTypes.filter(isWorkerPropertyGroupType),\n moduleManager: state.modules.moduleManager,\n }),\n WorkersStore.actionCreators,\n)(ViewWorkers as any) as any; // eslint-disable-line @typescript-eslint/no-explicit-any","import { get as i18n } from '../i18n';\n\nexport interface IDocument {\n id: number;\n name: string;\n description?: string;\n userId: number;\n documentTypeId?: number;\n workId: number;\n folderId?: number;\n versions?: IDocumentVersion[];\n\n mimeType?: string;\n size?: number;\n dateTime: Date;\n tags?: string;\n title?: string;\n hasActiveVersion: boolean;\n\n temporalResource?: string;\n\n areaDownload?: boolean;\n\n sortOrder?: number;\n code?: string;\n edition?: string;\n year?: number;\n uploadDateTime?: string;\n documentKind?: DocumentKind;\n}\n\nexport interface IDocumentVersion {\n id: number;\n name: string;\n documentId: number;\n userId: number;\n mimeType?: string;\n size?: number;\n dateTime: Date;\n}\n\nexport interface IFolder {\n id?: number;\n workId: number;\n name: string;\n description?: string;\n parentFolderId?: number;\n userId?: number;\n dateTime?: string;\n folderKind?: FolderKind;\n\n sortOrder?: number;\n}\n\nexport interface IDocumentLog {\n id: number;\n workId: number;\n userId: number;\n documentId: number;\n documentLogTypeId: number;\n dateTime?: string;\n}\n\nexport enum DocumentLogType {\n VIEW = 1,\n CREATE = 2,\n UPDATE = 3,\n CREATE_FILE = 4,\n UPDATE_FILE = 5\n}\n\nexport enum DocumentKind {\n INTERNAL = 1,\n CONTRACTOR = 2,\n ALL = 3,\n}\n\nexport enum FolderKind {\n INTERNAL = 1,\n CONTRACTOR = 2,\n ALL = 3,\n}\n\nexport const documentKindOptions = [\n { id: DocumentKind.INTERNAL, name: i18n('document.kind.internal') },\n { id: DocumentKind.CONTRACTOR, name: i18n('document.kind.contractor') },\n { id: DocumentKind.ALL, name: i18n('document.kind.all') },\n];\n\nexport const folderKindOptions = [\n { id: FolderKind.INTERNAL, name: i18n('folder.kind.internal') },\n { id: FolderKind.CONTRACTOR, name: i18n('folder.kind.contractor') },\n { id: FolderKind.ALL, name: i18n('folder.kind.all') },\n];\n\nexport const documentLogTypes = [\n { id: DocumentLogType.VIEW, name: i18n('document.view') },\n { id: DocumentLogType.CREATE, name: i18n('document.logs.create') },\n { id: DocumentLogType.UPDATE, name: i18n('document.logs.update') },\n { id: DocumentLogType.CREATE_FILE, name: i18n('document.logs.create-file') },\n { id: DocumentLogType.UPDATE_FILE, name: i18n('document.logs.update-file') },\n]\n\nexport const documentIcons: any = {\n 'pdf': 'fas fa-file-pdf',\n 'jpeg': 'fas fa-image',\n 'png': 'fas fa-image',\n 'jpg': 'fas fa-image',\n 'rar': 'fas file-archive',\n 'zip': 'fas file-archive',\n 'tar': 'fas file-archive',\n 'xls': 'fas file-excel',\n 'xlsx': 'fas file-excel',\n '*': 'fas fa-file',\n};\n","import * as React from 'react';\n\nimport { useResolveName, useSearch, useTranslation, Timeline, classNames } from '@components';\nimport { DocumentLogType, IDocumentLog, documentLogTypes } from '@models/documents';\nimport DateUtils from '@utils/date-utils';\nimport { IWork } from '@models';\n\nexport interface IProps {\n workId: number;\n documentId: number;\n work: IWork;\n}\n\ntype SearchRow = IDocumentLog & { userName: string };\n\nexport function DocumentLogs(props: IProps) {\n const { t } = useTranslation();\n const resolveLogType = useResolveName(documentLogTypes);\n\n const filters = {\n documentId: props.documentId\n };\n const data = useSearch({\n search: 'documents.logs',\n workId: props.workId,\n normalizeKeys: true,\n filters,\n });\n\n const icons: { [key: number]: string | undefined } = {\n [DocumentLogType.UPDATE]: 'pi pi-pencil',\n [DocumentLogType.CREATE]: 'pi pi-info-circle',\n [DocumentLogType.UPDATE_FILE]: 'pi pi-upload',\n [DocumentLogType.VIEW]: 'pi pi-download',\n [DocumentLogType.CREATE_FILE]: 'pi pi-file',\n }\n\n const getIcon = (r: SearchRow) => {\n return icons[r.documentLogTypeId] ?? 'pi pi-question';\n }\n\n const documentLog2Event = (r: SearchRow) => ({\n id: r.id,\n date: r.dateTime,\n className: 'danger',\n icon: getIcon(r),\n status: r.documentLogTypeId,\n eventName: resolveLogType(r.documentLogTypeId),\n appUserId: r.userId,\n kind: 'documentLog',\n userName: r.userName,\n });\n\n const showEvent = (r: SearchRow) =>\n [\n DocumentLogType.CREATE,\n DocumentLogType.UPDATE,\n DocumentLogType.CREATE_FILE,\n DocumentLogType.UPDATE_FILE,\n ]\n .includes(r.documentLogTypeId);\n\n const logEvents = (data.value ?? []).filter(showEvent).map(documentLog2Event);\n\n return
\n {data.renderLoading()}\n <>\n {item.eventName}\n {item.leftIcon && }\n {item.displayDate &&\n {DateUtils.format(item.displayDate)}}\n }\n content={item => <>\n {DateUtils.formatDateTimeFromUtc(item.date)}\n {item.userName}\n }\n marker={(item) => }\n value={logEvents} />\n
\n}","import * as React from 'react';\n\nimport { useForm, useTranslation, G, ValidationBuilder } from '@components';\nimport { IFolder, folderKindOptions } from '@models/documents';\n\nexport interface IProps {\n folder?: IFolder;\n loading?: boolean;\n\n onCancel?: Function;\n onSubmit?: Function;\n\n workId: number;\n}\n\nexport function FolderForm(props: IProps) {\n const { t } = useTranslation();\n\n const form = useForm>({\n initialValues: props.folder ?? { workId: props.workId, name: '' },\n validateOnMount: true,\n validate: f => ValidationBuilder.create(f).notEmpty('name').build(),\n });\n\n return
\n
\n \n {form.input('name', { autoFocus: true })}\n \n \n {form.input('sortOrder', { type: 'number' })}\n \n \n {form.select('folderKind', {\n blank: true,\n options: folderKindOptions,\n })}\n \n\n {form.errorBox()}\n
\n
\n {props.onCancel && props.onCancel?.()}\n className={'button'}>{t('Cancel')}}\n {props.onSubmit && props.onSubmit?.(form.values)}>{t('Save')}}\n
\n
;\n}\n","import * as React from 'react';\n\nimport { G, Loading, Message, useForm, useTranslation, ValidationBuilder } from '@components';\nimport { folderKindOptions } from '@models/documents';\n\nexport interface IProps {\n folderId?: number;\n loading?: boolean;\n onCancel?: Function;\n onSave?: Function;\n workId: number;\n}\n\ntype IFileFormData = {\n name: string;\n title?: string;\n description?: string;\n folderId?: number;\n workId: number;\n code?: string;\n edition?: string;\n year?: number;\n}\n\nexport function UploadFileForm(props: IProps) {\n const { t } = useTranslation();\n const form = useForm({\n initialValues: {\n name: '',\n title: '',\n description: '',\n code: '',\n edition: '',\n year: undefined,\n folderId: props.folderId,\n workId: props.workId,\n },\n validate: d => ValidationBuilder\n .create(d)\n .notEmpty('title')\n // .custom('You must select one file', () => selectedFile.current != null)\n .build(),\n });\n\n const selectedFile = React.useRef();\n\n const handleFile = (e: any) => {\n e.persist();\n const files = e.target.files;\n if (files.length > 0) {\n selectedFile.current = files[0];\n form.setFieldValue('name', files[0].name);\n }\n }\n\n const handleSave = (...e: any[]) => {\n props.onSave?.(form.values, selectedFile.current);\n }\n\n return
\n
\n \n {form.span('name', { autoFocus: true })}\n \n \n {form.input('title')}\n \n \n {form.input('code')}\n \n \n {form.input('edition')}\n \n \n {form.input('year', { type: 'number' })}\n \n \n {form.input('sortOrder', { type: 'number' })}\n \n \n {form.select('folderKind', {\n blank: true,\n options: folderKindOptions,\n })}\n \n \n
\n \n
\n
\n\n {props.loading &&
\n \n
}\n\n {form.isInvalid() &&
\n {'Invalid form'}\n
}\n\n {form.errorBox()}\n
\n\n
\n {props.onCancel && }\n {props.onSave && {t('Save')}}\n
\n
\n}\n","import * as React from 'react';\n\nimport { G, useForm, useTranslation, ValidationBuilder } from '@components';\nimport { IDocument, documentKindOptions } from '@models/documents';\n\nexport interface IProps {\n document: IDocument;\n folderId?: number;\n loading?: boolean;\n onCancel?: Function;\n onSave?: Function;\n workId: number;\n}\n\ntype IFileFormData = {\n name: string;\n title?: string;\n description?: string;\n folderId?: number;\n workId: number;\n}\n\n\nexport function EditDocumentForm(props: IProps) {\n const { t } = useTranslation();\n const form = useForm({\n initialValues: props.document,\n validate: d => ValidationBuilder\n .create(d)\n .customValidations([\n {\n name: 'sortOrder',\n msg: t('SortOrderMustBeGreaterThanZero'),\n validation: (d: any) => d.sortOrder > 0,\n }\n ])\n .build()\n ,\n });\n\n const selectedFile = React.useRef();\n\n const handleFile = (e: any) => {\n e.persist();\n const files = e.target.files;\n if (files.length > 0) {\n selectedFile.current = files[0];\n form.setFieldValue('name', files[0].name);\n }\n }\n\n const handleSave = (...e: any[]) => {\n props.onSave?.(form.values, selectedFile.current);\n }\n\n return
\n
\n \n {form.span('name', { autoFocus: true })}\n \n \n {form.input('title')}\n \n \n {form.input('code')}\n \n \n {form.input('edition')}\n \n \n {form.input('year', { type: 'number' })}\n \n \n {form.input('sortOrder', { type: 'number' })}\n \n \n {form.select('documentKind', {\n blank: true,\n options: documentKindOptions,\n })}\n \n \n
\n \n
\n
\n\n {form.errorBox()}\n
\n\n
\n {props.onCancel && }\n {props.onSave && {t('Save')}}\n
\n
\n}\n","import * as React from 'react';\n\nimport { Tree } from 'primereact/tree';\nimport TreeNode from \"primereact/treenode/treenode\";\nimport { Toast } from \"primereact/toast\";\n\nimport {\n useDialogs, useLoading, useMessage, useRemoteData, useTranslation, SplitButton,\n IPermissions,\n usePermissions,\n classNames,\n Tag,\n useTreeTable,\n} from '@components';\nimport { ModuleManager, IOption, ISecurity, IWork } from '@models';\nimport { documentIcons, DocumentKind, IDocument, IFolder, } from '@models/documents';\nimport { downloadFileFromUrl } from '@utils';\n\nimport { DocumentLogs } from './DocumentLogs';\nimport { FolderForm } from './FolderForm';\nimport { UploadFileForm } from './UploadFileForm';\nimport { EditDocumentForm } from './EditDocumentForm';\nimport './ManageDocuments.scss';\nimport { useConfirm } from '@utils/hooks';\nimport dateUtils from '@utils/date-utils';\n\ntype SaveDocumentT = (workId: number, doc: IDocument) => Promise>;\ntype RemoveDocumentT = (workId: number, docId: number) => Promise>;\ntype RemoveFolderT = (workId: number, folderId: number) => Promise>;\ntype SaveFolderT = (workId: number, folder: IFolder) => Promise>;\n\nexport interface IProps {\n moduleManager: ModuleManager;\n getDocuments: Function;\n getFolders: Function;\n removeDocument: RemoveDocumentT;\n removeFolder: RemoveFolderT;\n pushTemporalResource: Function;\n saveDocument: SaveDocumentT;\n saveFolder: SaveFolderT;\n security: ISecurity;\n work: IWork;\n}\n\nconst createFolderNode = (f: IFolder) => {\n return {\n key: `folder_${f.id}`,\n icon: 'pi pi-folder',\n draggable: true,\n droppable: true,\n label: f.name,\n data: f,\n children: [],\n sortOrder: f.sortOrder,\n }\n}\n\nconst createDocumentNode = (f: IDocument) => {\n return {\n key: `document_${f.id}`,\n icon: iconForDocument(f.name),\n draggable: true,\n droppable: true,\n label: f.title ?? f.name,\n data: f,\n children: [],\n sortOrder: (f.sortOrder ?? 100) * 10000\n }\n}\n\nconst iconForDocument = (name: string) => {\n const icons = documentIcons;\n\n const n = name.toLowerCase();\n const k = Object.keys(icons)\n .find(k => n.includes(k)) ?? '*';\n\n return icons[k];\n}\n\ntype FolderOrDoc = IFolder | IDocument;\n\nfunction isDocument(o: any): o is IDocument {\n return o.__typename === 'Document';\n}\n\nfunction isFolder(o: any): o is IFolder {\n return o.__typename === 'Folder';\n}\n\nconst createDocumentsModel = (folders: IFolder[], documents: IDocument[]) => {\n const nodes: TreeNode[] = [];\n const hierarchy: any = {};\n\n const stack: FolderOrDoc[] = [...folders, ...documents];\n let it = 0;\n\n while (stack.length > 0 && it < 100000) {\n const f = stack.pop();\n\n if (isFolder(f)) {\n if (f && f.parentFolderId === null) {\n const n = createFolderNode(f);\n nodes.push(n);\n hierarchy[f.id!] = n;\n } else if (f && f.parentFolderId && hierarchy[f.parentFolderId!]) {\n const n = createFolderNode(f);\n hierarchy[f.id!] = n;\n hierarchy[f.parentFolderId!].children.push(n);\n hierarchy[f.parentFolderId!].children =\n hierarchy[f.parentFolderId!]\n .children\n .sort((a: any, b: any) => a.sortOrder - b.sortOrder);\n } else if (f) {\n stack.splice(0, 0, f);\n }\n }\n else if (isDocument(f)) {\n if (f.folderId && hierarchy[f.folderId!]) {\n const n = createDocumentNode(f);\n hierarchy[f.folderId!].children.push(n);\n hierarchy[f.folderId!].children =\n hierarchy[f.folderId!]\n .children\n .sort((a: any, b: any) => a.sortOrder - b.sortOrder);\n } else if (f && f.folderId === null) {\n const n = createDocumentNode(f);\n nodes.push(n);\n } else if (f) {\n stack.splice(0, 0, f);\n }\n }\n\n it++;\n }\n\n return nodes.sort((a: any, b: any) => a.sortOrder - b.sortOrder);;\n}\n\nconst nodeIsFolder = (key: string) => {\n return key?.startsWith('folder_') ?? false;\n}\n\nconst nodeIsDocument = (key: string) => {\n return key?.startsWith('document_') ?? false;\n}\n\nconst nodeKeyGetId = (key: string) => {\n return parseInt(key.split('_')[1]);\n}\n\ntype CreateMenuOpts = {\n actions: any;\n security: ISecurity;\n permissions: IPermissions;\n}\n\nconst createMenu = (t: Function, key: string, opts: CreateMenuOpts) => {\n const actions = opts.actions ?? {};\n const security = opts.security;\n const perms = opts.permissions;\n const isGestor = security.isGestor();\n\n if (nodeIsFolder(key)) {\n const id = nodeKeyGetId(key);\n return [\n {\n label: t('Add folder'),\n icon: 'pi pi-plus',\n command: () => actions.addFolder(id),\n iF: perms.get('addFolder'),\n },\n {\n label: t('Edit folder'),\n icon: 'pi pi-pencil',\n command: () => actions.editFolder(id),\n iF: perms.get('addFolder'),\n },\n {\n label: t('Upload file'),\n icon: 'pi pi-upload',\n command: () => actions.uploadFile(id),\n iF: perms.get('addFile'),\n },\n {\n label: t('Remove folder'),\n icon: 'pi pi-trash',\n command: () => actions.removeFolder(id),\n iF: perms.get('addFolder'),\n }\n ].filter(f => f.iF == undefined || f.iF == true);\n }\n else if (nodeIsDocument(key)) {\n const id = nodeKeyGetId(key);\n const items = [\n {\n label: t('Download file'),\n icon: 'pi pi-download',\n command: (_: any) => actions.downloadFile(id),\n },\n {\n label: t('document.show-logs'),\n icon: 'pi pi-list',\n command: (_: any) => actions.showDocumentLogs(id),\n iF: perms.get('addFolder'),\n },\n {\n label: t('Edit document'),\n icon: 'pi pi-pencil',\n command: (ev: any) => actions.editDocument(id, ev),\n iF: perms.get('removeFile'),\n },\n {\n label: t('Remove file'),\n icon: 'pi pi-trash',\n command: (ev: any) => actions.removeDocument(id, ev),\n iF: perms.get('removeFile'),\n }\n ];\n\n return items.filter(f => f.iF == undefined || f.iF == true);\n }\n}\n\ntype Node = {\n type: 'document' | 'folder',\n label: string,\n data: any,\n icon?: string | undefined,\n id: string,\n parentId: string | undefined,\n code: string | undefined,\n year: number | undefined,\n edition: string | undefined,\n date: string | undefined,\n sortOrder: number | undefined,\n};\n\nexport function ManageDocuments(props: IProps) {\n const loading = useLoading();\n const messages = useMessage();\n const { t } = useTranslation();\n\n const cm = React.useRef(null);\n const toast = React.useRef(null);\n\n const [model, setModel] = React.useState([]);\n const [expandedKeys, setExpandedKeys] = React.useState({});\n const [selectedNode, setSelectedNode] = React.useState();\n\n const [documents, setDocuments] = React.useState();\n const [folders, setFolders] = React.useState();\n\n const [includeDocumentKinds, setIncludeDocumentKinds] = React.useState([]);\n\n const perms = usePermissions(props, {}, {\n includeDocumentKinds: 'includeDocumentKinds'\n });\n\n const foldersQuery = useRemoteData(\n props.getFolders,\n { parameters: [props.work.id, includeDocumentKinds] });\n\n\n const documentsQuery = useRemoteData(\n props.getDocuments,\n { parameters: [props.work.id, includeDocumentKinds] });\n\n const dialogs = useDialogs();\n\n React.useEffect(() => {\n setModel(createDocumentsModel(folders ?? [], documents ?? []));\n }, [folders, documents]);\n\n React.useEffect(() => {\n foldersQuery.query();\n documentsQuery.query();\n }, [includeDocumentKinds])\n\n React.useEffect(() => {\n setFolders(foldersQuery.value);\n }, [foldersQuery.value])\n\n React.useEffect(() => {\n setDocuments(documentsQuery.value);\n }, [documentsQuery.value]);\n\n\n React.useEffect(() => {\n const include = perms.get('includeDocumentKinds');\n\n if (include) {\n setIncludeDocumentKinds([1, 2, 3]);\n }\n }, [ perms.get('includeDocumentKinds')])\n\n const initializeFolders = loading.wrap(async () => {\n await foldersQuery.query();\n setFolders(foldersQuery.value);\n });\n const initializeDocuments = loading.wrap(async () => {\n await documentsQuery.query();\n setDocuments(documentsQuery.value);\n });\n\n // Acciones\n const doDownloadFile = (documentId: number) => {\n const document = documents?.find(d => d.id === documentId)!;\n const name = document.name;\n const url = `/api/files/${props.work.id}/document/${documentId}`;\n\n downloadFileFromUrl(url, name);\n }\n\n const doMoveFolder = async (folderId: number, target: number) => {\n const f = folders?.find(s => s.id === folderId)!;\n f.parentFolderId = target;\n\n const result = await props.saveFolder(props.work.id, f);\n messages.set(result);\n\n await initializeFolders();\n }\n\n const doRemoveFolder = loading.wrap(async (folderId: number) => {\n const f = foldersQuery.value.find(s => s.id === folderId)!;\n const result = await props.removeFolder(props.work.id, f.id!);\n messages.set(result);\n\n await initializeFolders();\n });\n\n const confirmRemove = useConfirm({\n message: t('documents.remove.confirm'),\n icon: 'pi pi-trash',\n accept: (id: number) => doRemoveDocument(id),\n });\n\n const doRemoveDocument = loading.wrap(async (documentId: number) => {\n const f = documents?.find(s => s.id === documentId)!;\n const result = await props.removeDocument(props.work.id, f.id!);\n messages.set(result);\n\n await initializeDocuments();\n });\n\n const doSaveFolder = loading.wrap(async (f: IFolder) => {\n const resp = await props.saveFolder(props.work.id, f);\n messages.clear();\n if (resp.hasValue) {\n dialogs.clear();\n await initializeFolders();\n }\n else {\n messages.set(resp);\n }\n });\n\n const doSaveDocument = loading.wrap(async (f: IDocument) => {\n f.areaDownload = true;\n const resp = await props.saveDocument(props.work.id, f);\n messages.clear();\n if (resp.hasValue) {\n dialogs.clear();\n await initializeDocuments();\n }\n else {\n messages.set(resp);\n }\n });\n\n const doUploadFile = loading.wrap(async (d: any, file: File) => {\n const fileId = file\n ? await props.pushTemporalResource(file)\n : undefined;\n const doc = {\n ...d,\n temporalResource: fileId?.value,\n folderId: d.folderId === true ? undefined : d.folderId,\n areaDownload: true,\n };\n\n const resp = await props.saveDocument(props.work.id, doc);\n messages.set(resp);\n\n dialogs.clear();\n\n await initializeDocuments();\n });\n\n const doSaveFile = loading.wrap(async (d: any, file: File) => {\n const fileId = file\n ? await props.pushTemporalResource(file)\n : undefined;\n const doc: IDocument = {\n ...d,\n temporalResource: fileId?.value,\n areaDownload: true,\n };\n\n const resp = await props.saveDocument(props.work.id, doc);\n messages.set(resp);\n\n dialogs.clear();\n\n await initializeDocuments();\n });\n\n const menuActions = {\n addFolder: (id: number) => dialogs.show('folder', { workId: props.work.id, name: '', parentFolderId: id }),\n downloadFile: (id: number) => doDownloadFile(id),\n editFolder: (id: number) => dialogs.show('folder', foldersQuery.value.find(f => f.id === id)),\n uploadFile: (folderId: number) => dialogs.show('upload-file', folderId),\n showDocumentLogs: (id: number) => dialogs.show('logs', id),\n removeFolder: doRemoveFolder,\n removeDocument: confirmRemove,\n editDocument: (id: number) => dialogs.show('edit-document', documentsQuery.value.find(d => d.id == id)),\n };\n\n const permissions = usePermissions(props, { debug: false }, {\n addFile: { name: 'work.add.file', default: props.security.isGestor(), },\n addFolder: { name: 'work.add.folder', default: props.security.isGestor(), },\n removeFile: { name: 'work.removeDocument', default: props.security.isGestor(), }\n });\n\n const createNodeMenu = (nodeKey: string) => {\n return createMenu(t, nodeKey, {\n actions: menuActions,\n security: props.security,\n permissions: permissions,\n });\n }\n\n const handleDragAndDrop = async (event: any) => {\n const dragNode = event.dragNode;\n const dropNode = event.dropNode ?? event.dropIndex;\n if (!isNaN(dropNode)) {\n const movingObject = dragNode;\n movingObject.data.sortOrder = dropNode;\n const newModel = [...model];\n\n const k = model.find(d => d.key == dragNode.key)!;\n const index = model.indexOf(k);\n\n const [dragNodeObj] = newModel.splice(index, 1);\n newModel.splice(dropNode, 0, dragNodeObj);\n\n for (let i = 0; i < newModel.length; i++) {\n newModel[i].data.sortOrder = i;\n\n if (isFolder(newModel[i].data)) {\n await props.saveFolder(props.work.id, newModel[i].data);\n }\n else {\n await props.saveDocument(props.work.id, newModel[i].data);\n }\n }\n\n setModel([...newModel]);\n }\n\n else if (nodeIsFolder(dropNode.key) && nodeIsFolder(dragNode.key)) {\n await doMoveFolder(dragNode.data.id, dropNode.data.id);\n }\n else if (nodeIsFolder(dropNode.key) && nodeIsDocument(dragNode.key)) {\n const documentId = nodeKeyGetId(dragNode.key);\n const doc: IDocument = documents?.find(d => d.id === documentId)!;\n const folderId = dropNode.data.id;\n doc.folderId = folderId;\n\n await doSaveDocument(doc);\n }\n }\n\n const permissionIcons: { [key: number]: string | undefined } = {\n [DocumentKind.INTERNAL]: 'internal',\n [DocumentKind.CONTRACTOR]: 'contractor',\n [DocumentKind.ALL]: 'all',\n };\n\n const renderPermissions = (node: TreeNode | Node) => {\n const icon = permissionIcons[node.data.documentKind] ?? 'all';\n return ;\n }\n\n const renderDocumentLabel = (data: any, label: string | any) => {\n if (data) {\n const icon = typeof (label) === 'object' ? label.icon : undefined;\n const text = typeof (label) === 'object' ? label.title : label;\n const info = typeof (label) === 'object' ? label.info : undefined;\n const pre = text ? `${text}: ` : '';\n return \n }\n else {\n return null;\n }\n }\n\n const createNodeTemplate = (node: TreeNode) => {\n const documentId = nodeKeyGetId(node.key as string);\n const actions = createNodeMenu(node.key as string);\n\n if (nodeIsDocument(node.key as string)) {\n return
doDownloadFile(documentId)}>\n {permissions.get('addFile') && renderPermissions(node)}\n {permissions.get('addFile') && node.data.sortOrder &&\n ({node.data.sortOrder})}\n {node.data.title ?? node.label}\n \n {props.work.id != 21 &&\n
\n {renderDocumentLabel(node.data.code, {\n info: t('document.code'),\n icon: 'pi pi-bars',\n })}\n {renderDocumentLabel(node.data.edition, {\n info: t('document.edition'),\n icon: 'pi pi-bookmark'\n })}\n {renderDocumentLabel(node.data.year, {\n icon: 'pi pi-sort-numeric-up',\n info: t('document.year'),\n })}\n {renderDocumentLabel(\n dateUtils.formatFromUtc(node.data.uploadDateTime),\n { icon: 'pi pi-calendar', info: t('document.upload-time') })}\n
}\n \n
\n }\n else {\n return
\n {permissions.isGestor() && node.data.sortOrder &&\n ({node.data.sortOrder})}\n\n {node.label}\n \n \n
\n }\n }\n\n const document2Node = (d: IDocument) => {\n return {\n label: d.title,\n data: d,\n id: `document_${d.id}`,\n parentId: `folder_${d.folderId}`,\n code: d.code,\n year: d.year,\n edition: d.edition,\n date: dateUtils.formatFromUtc(d.uploadDateTime),\n icon: iconForDocument(d.name),\n sortOrder: 1000 * (d.sortOrder ?? 1000),\n\n } as Node\n }\n\n const folder2Node = (f: IFolder) => {\n return {\n label: f.name,\n data: f,\n id: `folder_${f.id}`,\n parentId: `folder_${f.parentFolderId}`,\n icon: 'pi pi-folder',\n sortOrder: f.sortOrder,\n } as Node\n }\n\n const createNodes = (docs: IDocument[], folders: IFolder[]) => {\n let res: Node[] = [];\n if (docs != undefined) {\n res = res.concat(docs\n .sort((a: IDocument, b: IDocument) => (b.sortOrder ?? 0) - (a.sortOrder ?? 0))\n .map(document2Node));\n }\n if (folders != undefined) {\n res = res\n .concat(\n folders\n .sort((a: IFolder, b: IFolder) => (b.sortOrder ?? 0) - (a.sortOrder ?? 0))\n .map(folder2Node));\n }\n\n return res;\n }\n\n const [treeNodes, setTreeNodes] = React.useState([]);\n React.useEffect(() => {\n const data = createNodes(documentsQuery.value, foldersQuery.value);\n setTreeNodes(data);\n }, [includeDocumentKinds, foldersQuery.value, documentsQuery.value]);\n\n const treeTable = useTreeTable({\n data: treeNodes,\n sortProperty: 'sortOrder',\n selectable: true,\n columns: [\n {\n title: '',\n className: 'td-expand',\n render: (node: Node) => {\n return \n {node.icon && }\n {permissions.get('addFile') && renderPermissions(node)}\n {permissions.get('addFile') && node.data.sortOrder &&\n ({node.data.sortOrder})}\n {node.data.title ?? node.label}\n ;\n }\n },\n { title: 'document.code', field: 'code', className: 'td-md' },\n { title: 'document.year', field: 'year', className: 'td-md' },\n { title: 'document.edition', field: 'edition', className: 'td-md' },\n { title: 'document.upload-time', field: 'date', className: 'td-md' },\n {\n title: '',\n className: 'td-actions',\n render: (node: Node) => {\n const nodeActions = createNodeMenu(node.id as string);\n\n if ((nodeActions?.length ?? 0) > 0) {\n return \n\n }\n else {\n return null;\n }\n }\n },\n ]\n });\n\n return
\n {dialogs.render('edit-document', { title: t('Edit document'), className: 'g pd' }, (document: IDocument) =>\n \n )}\n {dialogs.render('upload-file', { title: t('Upload file'), className: 'g pd' }, (folderId: number) =>\n \n )}\n {dialogs.render('folder', { title: t('Folder'), className: 'g pd' }, (data: any) =>\n )}\n {dialogs.render('logs', { title: t('document.logs'), className: 'g pd' }, (id: number) =>\n )}\n\n
\n {messages.render()}\n {foldersQuery.renderLoading({ className: 'lg md pd center' })}\n \n {permissions.get('addFile') &&\n }\n {permissions.get('addFolder') &&\n }\n
\n\n \n\n
\n
\n
\n \n {t('document.kind.contractor')}\n \n {t('document.kind.internal')}\n \n {t('document.kind.all')}\n
\n \n {props.work.id != 21 && false && <>\n
{t(\"document.code\")}
\n
{t(\"Edition\")}
\n
{t(\"Year\")}
\n
{t(\"Upload date\")}
\n }\n
\n\n {(![21, 23].includes(props.work.id)) && treeTable()}\n {props.work.id == 23 && <>
{treeTable()}
}\n {props.work.id == 21 &&\n setExpandedKeys(e.value)}\n contextMenuSelectionKey={selectedNode}\n onContextMenuSelectionChange={event => setSelectedNode(event.value)}\n // onContextMenu={event => cm.current.show(event.originalEvent)}\n value={model} />}\n
\n
\n}\n","import * as React from 'react';\n\nimport { connect } from 'react-redux';\nimport { ApplicationState } from '../../store';\nimport * as DocumentsStore from '@store/documents';\nimport { ManageDocuments } from '@components/documents/ManageDocuments';\n\nexport default connect(\n (state: ApplicationState) => ({\n ...state.identity,\n ...state.user,\n ...DocumentsStore.plainActions,\n\tmoduleManager: state.modules.moduleManager,\n work: state.user.work,\n }),\n {}\n)(ManageDocuments as any) as any; // eslint-disable-line @typescript-eslint/no-explicit-any\n","import * as React from 'react';\n\nimport { connect } from 'react-redux';\nimport { ApplicationState } from '../../store';\nimport * as DocumentsStore from '@store/documents';\nimport { WorkDocuments } from '@components/work/WorkDocuments';\n\nexport default connect(\n (state: ApplicationState) => ({\n ...state.identity,\n ...state.user,\n ...DocumentsStore.plainActions,\n work: state.user.work,\n }),\n {}\n)(WorkDocuments as any) as any; // eslint-disable-line @typescript-eslint/no-explicit-any\n","import * as React from 'react';\n\nimport { BreadcrumbItem, useTranslation } from '@components';\nimport ManageDocuments from '@containers/documents/ManageDocumentsContainer';\nimport { IWork } from '@models';\n\nexport interface IProps {\n work: IWork;\n}\n\nexport function WorkDocuments(props: IProps) {\n const { t } = useTranslation();\n\n return
\n \n \n
\n}\n","import * as React from 'react';\nimport { connect } from 'react-redux';\n\nimport { ApplicationState } from '../../store';\nimport * as User from '@store/user';\nimport * as AdminActions from '@store/admin';\nimport { ManageWorkerAppUser } from '@components/users/ManageWorkerAppUser';\n\nexport default connect(\n (state: ApplicationState) => ({\n ...state.identity,\n ...state.user,\n ...User.plainActions,\n work: state.user.work,\n ...AdminActions.plainActions,\n }),\n User.actionCreators,\n)(ManageWorkerAppUser as any) as any; // eslint-disable-line @typescript-eslint/no-explicit-any\n","import * as React from 'react';\n\nimport { G, ValidationBuilder, useLoading, useForm, useTranslation, Tag, Accordion, AccordionTab, InputText, classNames } from '@components';\nimport { IWork, IWorker } from '@models';\nimport { useMessage } from '@utils/hooks';\nimport './ManageWorkerAppUser.scss';\n\ntype IWorkerWithAppUser = IWorker & {\n userEmail?: string;\n appUser?: number;\n id?: string;\n password?: string;\n passwordConfirmation?: string;\n}\n\nexport interface IProps {\n associateAppUserToWorker: Function;\n onCancel: Function;\n onSuccess: Function;\n work: IWork;\n worker: IWorkerWithAppUser;\n}\n\ntype NewUser = {\n email: string;\n userName: string;\n password: string;\n passwordConfirmation: string;\n}\n\nexport function ManageWorkerAppUser(props: IProps) {\n const { t } = useTranslation();\n const loading = useLoading();\n\n const message = useMessage();\n\n const validate = (data: NewUser) => {\n return ValidationBuilder.create(data)\n .notEmpty('email', 'Email is required')\n .email('email',)\n .notEmpty('userName', 'Username is required')\n .notEmpty('password')\n .match('passwordConfirmation', data.password, 'Passwords do not match')\n .build()\n }\n\n const form = useForm({\n initialValues: {\n email: '',\n userName: '',\n password: '',\n passwordConfirmation: '',\n },\n validateOnMount: true,\n validate: validate,\n });\n\n const renderCreateUser = () => {\n return
\n
\n \n {form.input('email')}\n \n \n {form.input('userName')}\n \n \n {form.input('password', { type: 'password' })}\n \n \n {form.input('passwordConfirmation', { type: 'password' })}\n \n
\n
\n {form.errorBox()}\n
\n
;\n }\n\n const doCreateUser = loading.wrap(async () => {\n const user = {\n userName: form.values.userName,\n email: form.values.email,\n password: form.values.password,\n passwordConfirmation: form.values.passwordConfirmation,\n roles: [\"worker\"]\n };\n\n const resp = await props.associateAppUserToWorker(\n props.work.id,\n props.worker.id,\n user,\n true);\n\n\n message.set(resp);\n\n if (resp.hasValue) {\n props.onSuccess(form.values);\n }\n });\n\n return
\n
\n {props.worker.appUser == undefined && renderCreateUser()}\n {props.worker.appUser != null &&
\n {t('rrhh.worker.email')}\n {props.worker?.userEmail}\n
}\n
\n {message.renderIfError()}\n\n
\n {loading.render()}\n \n {props.worker.appUser == undefined &&\n \n }\n
\n
;\n}\n","import * as React from 'react';\n\nimport { G, ValidationBuilder, useForm, useTranslation } from '@components';\nimport { IDepartment, IWork, IWorker, IWorkspace } from '@models';\n\nexport interface IProps {\n worker?: IWorker;\n departments: IDepartment[];\n onCancel: Function;\n onSaveClicked: Function;\n workspaces: IWorkspace[];\n work: IWork;\n disabled?: boolean;\n}\n\nexport function WorkerForm(props: IProps) {\n const { t } = useTranslation();\n const form = useForm({\n initialValues: props.worker ?? {\n workId: props.work.id,\n name: '',\n code: '',\n surname: '',\n phone: '',\n isActive: true,\n },\n validateOnMount: true,\n validate: ValidationBuilder.create()\n .notEmpty('name')\n .notEmpty('surname')\n .notEmpty('code')\n .lift()\n });\n\n return
\n
\n \n {form.input('name')}\n \n \n {form.input('surname')}\n \n \n {form.input('code')}\n \n \n {form.input('phone')}\n \n \n {form.multiselect('departments', props.departments)}\n \n \n {form.multiselect('workspaces', props.workspaces)}\n \n
\n\n
\n \n \n
\n
;\n}\n","import * as React from 'react';\nimport { connect } from 'react-redux';\n\nimport { ApplicationState } from '../../store';\nimport * as User from '@store/user';\nimport { WorkUsers } from '@components/users/WorkUsers';\n\nexport default connect(\n (state: ApplicationState) => ({\n ...state.identity,\n ...state.user,\n ...User.plainActions,\n work: state.user.work,\n }),\n User.actionCreators,\n)(WorkUsers as any) as any; // eslint-disable-line @typescript-eslint/no-explicit-any\n","import * as React from 'react';\n\nimport {\n Portal,\n useDialogs,\n useLoading, useDataTable, useSearch, useTranslation,\n} from '@components';\nimport { IDepartment, IWork, IWorker, IWorkerWithRelations, IWorkspace } from '@models';\nimport ManageWorkerAppUser from '@containers/users/ManageWorkerAppUserContainer';\nimport { WorkerForm } from './WorkerForm';\n\nexport interface IProps {\n departments: IDepartment[];\n saveWorker: Function;\n workspaces: IWorkspace[];\n work: IWork;\n}\n\ntype Row = {\n id: number;\n name: string;\n surname: string;\n remarks?: string;\n code: string;\n phone?: string;\n departmentNames: string;\n workspaceNames: string;\n userEmail?: string;\n appUser?: number;\n}\n\nexport function WorkUsers(props: IProps) {\n const { t } = useTranslation();\n const loading = useLoading();\n\n const dialogs = useDialogs();\n\n const data = useSearch({\n workId: props.work.id,\n search: 'gestor/workUsers',\n normalizeKeys: true,\n filters: {\n workId: props.work.id,\n }\n });\n\n const dataTable = useDataTable({\n columns: [\n { title: t('Name'), render: d => d.name },\n { title: t('Surname'), field: 'surname' },\n { title: t('Phone'), field: 'phone' },\n { title: t('Code'), field: 'code' },\n { title: t('Workspaces'), field: 'workspaceNames' },\n { title: t('Departments'), field: 'departmentNames' },\n { title: t('UserName'), field: 'userEmail' }\n ],\n actions: [\n { icon: 'pi pi-pencil', onClick: r => dialogs.show('edit', r) },\n { icon: 'pi pi-lock', onClick: r => dialogs.show('app-user', r) },\n ],\n data: data.value,\n loading: data.loading,\n });\n\n const doSave = loading.wrap(async (worker: IWorkerWithRelations) => {\n const input = {\n id: worker.id,\n name: worker.name,\n code: worker.code,\n surname: worker.surname,\n departments: worker.departments,\n workspaces: worker.workspaces,\n phone: worker.phone,\n workId: worker.workId,\n isActive: worker.isActive,\n };\n const res = await props.saveWorker(input);\n\n data.doSearch();\n dialogs.clear();\n });\n\n const refresh = () => {\n dialogs.clear();\n data.doSearch();\n }\n\n return
\n \n \n \n\n {loading.render()}\n\n {dialogs.render('add', {title: t('rrhh.worker.add')}, () =>\n )}\n\n {dialogs.render('edit', {title: t('rrhh.worker.edit')}, (r: IWorkerWithRelations) =>\n )}\n\n {dialogs.render('app-user', {title: t('rrhh.worker.manageappuser')}, (r: any) =>\n )}\n {dataTable()}\n
\n}\n","import * as React from 'react';\n\nimport { connect } from 'react-redux';\nimport { ApplicationState } from '../../store';\nimport * as DocumentsStore from '@store/documents';\nimport * as RequirementsStore from '@store/requirements';\nimport { ViewRequirementDocument } from '@components/requirements/ViewRequirementDocument';\nimport { getQueryParameter } from '@utils';\n\nexport default connect(\n (state: ApplicationState, ownProps: any) => ({\n ...state.identity,\n ...state.user,\n ...DocumentsStore.plainActions,\n work: state.user.work,\n requirementId: parseInt(ownProps.match.params.requirementid),\n documentId: parseInt(ownProps.match.params.documentid),\n ...RequirementsStore.plainActions,\n versionId: getQueryParameter(\n window.location.search,\n 'versionId',\n { map: parseInt }),\n }),\n {}\n)(ViewRequirementDocument as any) as any; // eslint-disable-line @typescript-eslint/no-explicit-any\n","import * as React from 'react';\n\nimport { IWork } from '@models';\nimport { IRequirement } from '@models/requirements';\nimport { DocumentViewer } from '@components/viewers/DocumentViewer';\n\nimport './ViewRequirementDocument.scss';\n\ntype GetRequirementF = (\n workId: number,\n targetType: number,\n targetId: number,\n id: number\n) => Promise;\n\nexport interface IProps {\n documentId: number;\n getRequirement: GetRequirementF;\n requirementId: number;\n work: IWork;\n versionId?: number;\n}\n\nexport function ViewRequirementDocument(props: IProps) {\n const [req, setReq] = React.useState();\n const [docUrl, setDocUrl] = React.useState();\n const [mimeType, setMimeType] = React.useState();\n\n const loadRequirement = async () => {\n const req = await props.getRequirement(props.work.id, 0, 0, props.requirementId);\n setReq(req);\n\n if (req) {\n const documentUrl = props.versionId\n ? `/api/files/${req.workId}/document/${req.documents?.[0].document.id}/version/${props.versionId}`\n : `/api/files/${req.workId}/document/${req.documents?.[0].document.id}`;\n setMimeType(req.documents?.[0].document.mimeType);\n setDocUrl(documentUrl);\n }\n };\n\n React.useEffect(() => {\n loadRequirement();\n }, []);\n\n return
\n {docUrl &&\n }\n
\n}","import * as React from 'react';\n\nimport { connect } from 'react-redux';\nimport { ApplicationState } from '../../store';\nimport * as ContractorsStore from '@store/contractors';\nimport { EditContractorForm } from '@components/contractors/EditContractorForm';\nimport { isJobHasContractorPropertyGroupType } from '@models';\n\nexport default connect(\n (state: ApplicationState, props: any) => ({\n workId: props.workId ?? parseInt(props.match.params.workid),\n contractorId: props.contractorId ?? parseInt(props.match.params.contractorid),\n work: state.user.work,\n ...state.identity,\n ...state.user,\n ...ContractorsStore.plainActions,\n modules: state.modules.moduleManager,\n resourceStatusTypes: state.user.resourceStatusTypes,\n propertyGroupTypes: state.user.propertyGroupTypes.filter(isJobHasContractorPropertyGroupType),\n constants: state.constants,\n }),\n ContractorsStore.actionCreators,\n)(EditContractorForm as any) as any; // eslint-disable-line @typescript-eslint/no-explicit-any\n","import './EditContractor.scss';\n\nimport * as React from 'react';\n\nimport {\n FieldsBox, G, Portal,\n useForm, useLoading, useToast, useTranslation, useWorkFormSettings,\n useEvents,\n ValidationBuilder,\n} from '@components';\nimport { CountryRegionSelect } from '@components/common/CountryRegionSelect';\nimport { DynamicProperties } from '@components/user/DynamicProperties';\nimport {\n IConstants, ICountry, IFieldValidation, IPropertyGroup, IPropertyGroupType, ISecurity, IWork,\n PropertyGroupObjectType, PropertyTypes, ResourceType\n} from '@models';\nimport {\n IActivityType, IContractor, ILegalForm, IResourceStatusType\n} from '@models/resources';\nimport { delay, redirectTo } from '@utils';\nimport { ModuleManager } from '@modules';\n\ntype GetContractorF = (workId: number, id: number) => Promise;\n\nexport interface IProps {\n propertyGroupTypes: IPropertyGroupType[];\n legalForms: ILegalForm[];\n activityTypes: IActivityType[];\n constants: IConstants;\n getContractor: GetContractorF;\n work: IWork;\n contractor: IContractor;\n contractorId: number;\n security: ISecurity;\n saveContractor: Function;\n resourceStatusTypes: IResourceStatusType[];\n showRequirements?: boolean;\n modules: ModuleManager;\n}\n\nconst validateContractorF = (fieldValidations: IFieldValidation[] | undefined) =>\n ValidationBuilder\n .new()\n .notEmpty('name')\n .withFieldValidations(ResourceType.Contractor, fieldValidations)\n .lift();\n\nexport function EditContractorForm(props: IProps) {\n const { t } = useTranslation();\n const loading = useLoading();\n const toast = useToast();\n const events = useEvents();\n\n const settings = useWorkFormSettings({ work: props.work, scope: 'contractor' });\n\n const [selectedLegalForm, setSelectedLegalForm] = React.useState();\n\n const propertiesInvalid = React.useRef();\n\n const saveContractor = loading.wrap(async (req: IContractor) => {\n const resp = await props.saveContractor(props.work.id, req);\n\n if (resp.hasValue) {\n toast.show(t('Contractor saved successfully'));\n events.fire('save', resp.value, props);\n\n if (props.work.id != 21) {\n await delay(2000);\n redirectTo(`/work/${props.work.id}/contractors`)\n }\n }\n else {\n toast.error(t(resp.error))\n }\n });\n\n const doSave = (..._: any) => {\n if (selectedLegalForm?.hideContractorProperties) {\n form.values.properties.map((p: IPropertyGroup) => {\n if (props.propertyGroupTypes.find(g => g.id == p.propertyGroupTypeId)?.hidable) {\n p.value = \"{}\";\n p.valueObj = \"{}\";\n }\n });\n }\n saveContractor(form.values);\n }\n\n\n const initializeCountries = (workId: number) => {\n let countries: ICountry[] = [];\n props.constants.countries.forEach(c => countries.push(Object.assign({}, c)));\n if (workId == 19) {\n for (let c in countries) {\n if (countries[c].regions.length > 0) {\n countries[c].regions = [];\n }\n }\n }\n return countries;\n };\n\n const canSave = props.security.hasPermission('contractors.edit');\n\n const validateContractor = validateContractorF(props.work.validations);\n\n const form = useForm({\n readonly: !canSave,\n initialValues: {\n id: props.contractorId,\n workId: props.work.id,\n name: props.contractor.name,\n code: props.contractor.code,\n legalFormId: props.contractor.legalFormId,\n activityTypeId: props.contractor.activityTypeId,\n otherActivityType: props.contractor.otherActivityType,\n address: props.contractor.address,\n postalCode: props.contractor.postalCode,\n countryId: props.contractor.countryId,\n regionId: props.contractor.regionId,\n countyId: props.contractor.countyId,\n isActive: props.contractor.isActive,\n properties: props.contractor.properties,\n phone: props.contractor.phone,\n remarks: props.contractor.remarks,\n providerCode: props.contractor.providerCode,\n city: props.contractor.city,\n contactPerson: props.contractor.contactPerson,\n creationDate: props.contractor.creationDate\n },\n validate: validateContractor,\n onSubmit: (data: IContractor) => {\n return saveContractor(data);\n }\n })\n\n const updateRegion = ({ countryId, regionId, countyId }: any) => {\n form.setFieldValue('countryId', countryId);\n if (props.work.id == 21) {\n form.setFieldValue('regionId', regionId);\n form.setFieldValue('countyId', countyId);\n }\n }\n\n const calculateFormPropertiesAreValid = () => {\n const mandatoryPropertyIds: number[] = [];\n const mandatoryPropertyNames: string[] = [];\n\n //Si existen el formulario, evaluamos las propiedades dinámicas acordes a las existentes\n if (form.values.properties != undefined && form.values.properties.length > 0) {\n let hiddens: number = 0;\n if (props.propertyGroupTypes != undefined && props.propertyGroupTypes.length > 0) {\n const boolTextNames: string[] = [];\n props.propertyGroupTypes.map(g => {\n // ¿Está ocultada esta propiedad por la forma legal y la propiedad hidable del grupo de propiedades?\n const isHidden = selectedLegalForm?.hideContractorProperties && g.hidable;\n if (!isHidden) {\n if (g.mandatory) {\n // Si el grupo de propiedades no está oculto y es obligatorio -> cargamos su ID y los nombres de sus propiedades\n mandatoryPropertyIds.push(g.id!);\n if (g.properties != undefined && g.properties.length > 0) {\n g.properties.map(p => {\n mandatoryPropertyNames.push(p.name);\n // Si alguna de las propiedades es de tipo BoolText, la almacenamos\n if (p.typeId == PropertyTypes.BOOLTEXT) {\n boolTextNames.push(p.name);\n }\n })\n }\n }\n }\n else {\n // Si está ocultada, ya sea por:\n // 1- El grupo de propiedades no es ocultable\n // 2- La forma legal no oculta las propiedades\n // -> La contabilizamos\n hiddens += 1;\n }\n });\n if (mandatoryPropertyIds != undefined && mandatoryPropertyIds.length > 0) {\n const properties: any[] = [];\n\n // Evaluamos cuáles son las propiedades del formulario que son obligatorias\n form.values.properties.map((p: any) => {\n mandatoryPropertyIds.map(m => {\n if (p.propertyGroupTypeId == m) {\n properties.push(p);\n }\n })\n });\n\n if (properties != undefined && properties.length > 0) {\n const values: boolean[] = []\n\n properties.map(p => {\n // Si cualquiera de estas propiedades tiene valor, lo evaluamos\n if (p.valueObj != \"{}\") {\n mandatoryPropertyNames.map(m => {\n // Evaluamos si los BoolTexts hallados tienen valor de texto\n if (boolTextNames.includes(m)) {\n boolTextNames.map(b => {\n if (b == m) {\n if (p.valueObj != undefined) {\n if (p.valueObj[m + \"_text\"] != undefined) {\n const valueText = p.valueObj[m + \"_text\"];\n if (valueText == \"\" || valueText == undefined) {\n values.push(false);\n }\n else {\n values.push(true);\n }\n }\n }\n else {\n const value = JSON.parse(p.value)[m + \"_text\"];\n if (value == undefined || value == \"\") {\n values.push(false);\n }\n else {\n values.push(true);\n }\n }\n }\n })\n }\n // Obtenemos su valor teniendo en cuenta que undefined es false\n else {\n if (p.valueObj != undefined) {\n const value = p.valueObj[m];\n if (value != undefined) {\n values.push(value);\n }\n else {\n values.push(false);\n }\n }\n else {\n const value = JSON.parse(p.value)[m];\n if (value != undefined) {\n values.push(value);\n }\n else {\n values.push(false);\n }\n }\n }\n })\n }\n else {\n values.push(false);\n }\n });\n // Si existe algún true en el array, entonces el grupo de propiedades es válido\n if (values.some(v => v)) {\n propertiesInvalid.current = false;\n }\n else {\n if (hiddens < props.propertyGroupTypes.length) {\n propertiesInvalid.current = true;\n }\n }\n }\n }\n if (hiddens == props.propertyGroupTypes.filter(g => g.mandatory).length) {\n propertiesInvalid.current = false;\n }\n }\n }\n }\n\n React.useEffect(() => {\n calculateFormPropertiesAreValid();\n }, [form.values.properties, selectedLegalForm])\n\n React.useEffect(() => {\n const legalForm = props.legalForms.find(l => l.id == form.values.legalFormId);\n setSelectedLegalForm(legalForm);\n }, [form.values.legalFormId]);\n\n\n props.modules.injectComponents(\n 'contractor.edit.form',\n {...props, events },\n { form });\n\n return
\n\n \n {loading.render()}\n \n\n {toast.render()}\n\n {props.contractor &&\n
\n
\n \n {form.input('name', { autoFocus: true })}\n \n {/*// TODO: Revisar si es necesario */}\n \n {form.input('code')}\n \n {props.work.contractorSettings?.legalFormMandatory == true\n ? \n {form.select('legalFormId', props.legalForms)}\n \n : undefined\n }\n {settings.show('activityTypeId') &&\n \n {form.select('activityTypeId', props.activityTypes)}\n \n }\n {props.work.id != 21 &&\n \n {form.input('otherActivityType')}\n }\n \n {form.input('providerCode')}\n \n \n \n {form.input('address')}\n \n \n {form.input('postalCode')}\n \n {/* //TODO: Revisar si es necesario */}\n \n \n \n {/* //TODO: Revisar si es necesario */}\n {props.work.id != 21 &&\n \n {form.input('city')}\n }\n {/* //TODO: Revisar si es necesario */}\n {props.work.id != 21 &&\n {form.input('contactPerson')}}\n \n {form.input('phone')}\n \n \n {form.textarea('remarks')}\n \n \n
\n form.setFieldValue('properties', v)}\n embedPortal={'#embed-properties'}\n objectType={PropertyGroupObjectType.JobHasContractor}\n propertyGroupTypes={props.propertyGroupTypes} />\n {propertiesInvalid.current && {t('dynamic.properties.error')}}\n
\n\n {form.errorBox()}\n\n {props.security.isGestor() && < G label={t('DateTime.platform.start')}>\n {form.input('creationDate', { type: 'date' })}\n }\n\n
\n\n
\n
\n \n {canSave &&\n \n {t('Save')}\n }\n
\n
\n
\n }\n
\n}\n","import * as React from 'react';\n\nimport { G, Message, useForm, useLoading, useTranslation, validate, validations as V } from '@components';\nimport { IWork, IContractor } from '@models';\n\nexport interface IProps {\n createWorkContractorAppUser: Function;\n contractor: IContractor;\n onCancel: Function;\n onSuccess: Function;\n work: IWork;\n}\n\ntype FormData = {\n contractorId?: number;\n startDate: Date;\n userName: string;\n email: string;\n password1: string;\n password2: string;\n};\n\nexport const validateData = (data: FormData, i18n: Function|undefined = undefined) => {\n const t = i18n ?? function(n: string) { return n; };\n\n let errors: any = {};\n validate(data, 'userName', errors, V.notEmpty, t('Name is required'));\n validate(data, 'email', errors, V.notEmpty, t('Email is required'));\n validate(data, 'password1', errors, V.notEmpty, t('Password is required'));\n validate(data, 'password2', errors, V.notEmpty, t('Passwords do not match'));\n\n return errors;\n}\n\nexport function CreateWorkContractorAppUser(props: IProps) {\n const { t } = useTranslation();\n\n const loading = useLoading();\n\n const [error, setError] = React.useState();\n\n const saveUser = loading.wrap(async (formData: FormData) => {\n setError(undefined);\n const data = {\n userName: formData.userName,\n email: formData.email,\n password: formData.password1,\n };\n const resp = await props.createWorkContractorAppUser(props.work.id, props.contractor.id, data);\n if (resp.hasValue) {\n props.onSuccess(resp.value);\n }\n else {\n setError(resp.error);\n }\n });\n\n const form = useForm({\n initialValues: {\n contractorId: props.contractor.id,\n startDate: new Date(),\n userName: '',\n email: '',\n password1: '',\n password2: '',\n },\n validate: (data: FormData) => validateData(data, t),\n onSubmit: async (data: FormData) => {\n await saveUser(data);\n return { ok: true};\n }\n });\n\n return
\n \n {form.input('userName', { autoFocus: true })}\n \n \n {form.input('email', { type: 'email' })}\n \n \n {form.input('password1', { type: 'password' })}\n \n \n {form.input('password2', { type: 'password' })}\n \n\n
\n {loading.renderBox()}\n {error && }\n {form.errorBox()}\n
\n\n
\n \n
\n \n \n {t('Create')}\n \n
\n
\n
\n}","import * as React from 'react';\n\nimport { useLoading, useTranslation } from '@components';\n\ntype IColumn = string | Function | { title?: string; field: string; body?: Function; };\n\nexport interface IProps {\n source: T;\n footer?: any;\n columns: IColumn[];\n load: Function;\n onSelect: Function;\n\n onRequestCreate?: Function;\n createText?: string;\n}\n\nexport function ManageRelations(props: IProps) {\n const { t } = useTranslation();\n\n const loading = useLoading(true);\n const [listData, setListData] = React.useState([]);\n const [rows, setRows] = React.useState([]);\n const [filter, setFilter] = React.useState('');\n\n const fillList = loading.wrap(() => {\n const res = props.load();\n if (res.then) {\n res.then((d: R[]) => setListData(d));\n }\n else {\n setListData(res);\n }\n });\n\n React.useEffect(() => {\n fillList();\n }, []);\n\n React.useEffect(() => {\n if (filter == '') {\n setRows(listData);\n }\n else {\n setRows(listData.filter(r => JSON.stringify(r).includes(filter)));\n }\n }, [filter, listData]);\n\n const renderHeader = (l: IColumn, i: number) =>\n \n {typeof(l) === 'string' && l}\n {typeof(l) === 'object' && l.title && l.title}\n ;\n\n const renderRow = (l: IColumn, i: number, d: any) =>\n \n {typeof(l) === 'string' && d[l]}\n {typeof(l) === 'object' && l.body == undefined && d[l.field]}\n {typeof(l) === 'object' && l.body != undefined && l.body(d)}\n ;\n\n const requestCreate = (e: any) => {\n e.preventDefault();\n e.stopPropagation();\n\n props.onRequestCreate && props.onRequestCreate(props.source);\n }\n\n return
\n
\n
\n \n setFilter(e.target.value)}\n placeholder={t('Search')}\n value={filter} />\n
\n {props.onRequestCreate &&\n \n {props.createText}\n }\n
\n
\n {loading.render()}\n\n
\n \n \n \n {props.columns.map((l, i) => renderHeader(l, i))}\n \n \n \n {rows.map((d, i) =>\n props.onSelect(d)}>\n {props.columns.map((l, i) => renderRow(l, i, d))}\n )}\n \n
\n
\n
\n
\n {props.footer}\n
\n
\n}","import * as React from 'react';\n\nimport { CreateWorkContractorAppUser } from './CreateWorkContractorAppUser';\nimport { useConfirm, useDataTable, useFormDialog, useLoading, useRemoteData, useTranslation } from '@components';\nimport { ManageRelations } from '@components/common/ManageRelations';\nimport { IContractor, ISecurity, IUserIdentity, IWork } from '@models';\n\ntype GetContractorF = (workId: number, id: number) => Promise;\n\nexport interface IProps {\n contractor: IContractor;\n createWorkContractorAppUser: Function;\n getWorkUsers: Function;\n getContractorAppUsers: Function;\n hasPermission: Function;\n work: IWork;\n removeContractorAppUser: Function;\n contractorId: number;\n getContractor: GetContractorF;\n security: ISecurity;\n}\n\nfunction ContractorAccessDataForm(props: IProps) {\n const { t } = useTranslation();\n const loading = useLoading();\n const [users, setUsers] = React.useState([]);\n const [data, setData] = React.useState([]);\n\n const doRemoveAppUserRelation = loading.wrap(async (rel: IUserIdentity) => {\n await props.removeContractorAppUser(\n props.work.id,\n rel.id,\n props.contractorId\n );\n await initialize();\n });\n\n const initialize = loading.wrap(async () => {\n const userResp = await props.getWorkUsers(props.work.id);\n setUsers(userResp);\n const resp = await props.getContractorAppUsers(\n props.work.id,\n props.contractor.id);\n setData(resp);\n setUsers(userResp);\n });\n\n const appUsersDialog = useFormDialog({\n addTitle: t('Associate app user')\n });\n\n const createAppUser = useFormDialog({\n addTitle: t('Create app user'),\n });\n\n const confirmRemove = useConfirm({\n message: t('Are you sure to remove the app user associated with this contractor?'),\n accept: doRemoveAppUserRelation,\n });\n\n React.useEffect(() => {\n initialize();\n }, []);\n\n const dataTable = useDataTable({\n columns: [\n {title: 'Username', render: (d: IUserIdentity) => d.userName},\n {title: 'Email', render: (d: IUserIdentity) => d.email},\n ],\n actions: [\n (props.security.isGestor())\n ? {icon: 'trash', onClick: confirmRemove, tooltip: t('Remove app user relation')}\n : undefined\n ],\n data\n })\n\n const renderAppUserRelations = () => {\n return users}\n onRequestCreate={(w: IContractor) => {\n appUsersDialog.clear();\n createAppUser.showAdd();\n initialize();\n }}\n onSelect={async (user: IUserIdentity) => {\n appUsersDialog.clear();\n await associateAppUser(user);\n initialize();\n }}\n source={props.contractor}/>\n }\n\n const associateAppUser = async (user: IUserIdentity|number) => {\n const appUserId = typeof(user) === 'number' ? user : user.id;\n const resp = await props.createWorkContractorAppUser(\n props.work.id,\n props.contractorId,\n {\n id: appUserId,\n }\n )\n appUsersDialog.clear();\n await initialize();\n }\n\n const renderCreateAppUser = () => {\n return createAppUser.clear()}\n onSuccess={(_: any) => initialize() && createAppUser.clear()}\n work={props.work} />\n }\n\n return
\n
\n {t('Edit contractor access data')}\n
\n
\n {loading.renderBox()}\n {dataTable()}\n {appUsersDialog.render(renderAppUserRelations)}\n {createAppUser.render(renderCreateAppUser)}\n
\n \n {props.security.hasPermission('contractors.access.create') &&\n
\n \n
\n \n
\n
\n }\n
\n}\n\nexport function WorkContractorAccessData(props: IProps) {\n const data = useRemoteData(props.getContractor, {\n parameters: [props.work.id, props.contractorId]\n });\n return
\n {data.renderLoading()}\n {data.value && }\n
\n}","import * as React from 'react';\nimport { connect } from 'react-redux';\nimport { ApplicationState } from '../../store';\nimport * as ContractorsStore from '@store/contractors';\nimport { WorkContractorAccessData } from '@components/contractors/WorkContractorAccessData';\nimport { hasPermission } from '@utils/security';\n\nexport default connect(\n (state: ApplicationState, params: any) => ({\n ...ContractorsStore.plainActions,\n contractorId: params.contractorId ?? parseInt(params.match?.params?.contractorid),\n workId: params.workId ?? parseInt(params.match?.params?.workId),\n ...state.identity,\n ...state.user,\n ...ContractorsStore.plainActions,\n hasPermission: (p: string) => hasPermission(p, {\n user: state.identity?.user,\n explicit: true,\n }),\n }),\n ContractorsStore.actionCreators,\n)(WorkContractorAccessData as any) as any; // eslint-disable-line @typescript-eslint/no-explicit-any","import * as React from 'react';\nimport { Route } from 'react-router';\n\nimport { IContractor } from '@models';\nimport { DataLoader, useTranslation } from '@components';\nimport EditRequirements from '@containers/requirements/EditRequirementsContainer';\nimport { getIntParams } from '@utils';\n\nimport { getContractor } from '@store/actions/contractors';\nimport { RequirementTargetType } from '@models/requirements';\nimport EditContractorContainer from '@containers/contractors/EditContractorContainer';\nimport EditContractorFormContainer from '@containers/contractors/EditContractorFormContainer';\nimport WorkContractorAccessDataContainer from '@containers/contractors/WorkContractorAccessDataContainer';\n\nexport interface IProps {\n children?: any;\n clearContractorForm: Function;\n contractor: IContractor;\n}\n\nconst WrappedContractorRequirements = (props: any) => {\n const { t } = useTranslation();\n const { contractorid, workid } = getIntParams(props.match.params);\n\n return getContractor(workid, contractorid)}>\n {(contractor: IContractor) =>
\n
\n {t('Contractor requirements')}\n
\n
\n \n
\n
}\n
\n}\n\nconst WrappedContractorForm = (props: any) => {\n const { contractorid, workid } = getIntParams(props.match.params);\n\n return getContractor(workid, contractorid)}>\n {c => }\n \n}\n\nconst WrappedContractorAccesData = (props: any) => {\n const { contractorid, workid } = getIntParams(props.match.params);\n\n return \n}\n\nexport function ContractorRoutes(props: any) {\n return <>\n \n \n \n \n \n ;\n}","import * as React from 'react';\n\nimport { connect } from 'react-redux';\nimport { ApplicationState } from '../../store';\nimport { CommmunicationForm } from '@components/communications/CommunicationForm';\nimport * as UserStore from '@store/user';\nimport * as DocumentsStore from '@store/documents';\nimport * as Actions from '@store/actions/resources'\n\nexport default connect(\n (state: ApplicationState) => ({\n ...state.identity,\n ...state.user,\n ...state.constants,\n workspaces: state.user.workspaces,\n ...UserStore.plainActions,\n ...DocumentsStore.plainActions,\n ...Actions.getDepartments\n }),\n {},\n)(CommmunicationForm as any) as any; // eslint-disable-line @typescript-eslint/no-explicit-any\n","import * as React from 'react';\n\nimport {\n useForm,\n useTranslation,\n ValidationBuilder,\n} from '@components';\nimport { goToCommunications } from '@components/routes';\nimport {\n ICommunicationFile, IDepartment, IJob, IWork, IWorkspace,\n IUserIdentity,\n} from '@models';\nimport { RequirementTargetType } from '@models/requirements';\nimport { useDialogs, useLoading, useMessage } from '@utils/hooks';\nimport DateUtils from '@utils/date-utils';\n\nimport './CommunicationForm.scss';\nimport dateUtils from '@utils/date-utils';\n\nexport interface IProps {\n footer?: any;\n workspaces: IWorkspace[];\n work: IWork;\n getJobs: Function;\n departments: IDepartment[];\n saveCommunication: Function;\n getCommunicationReceivers: Function;\n pushTemporalResource: Function;\n}\n\n\nexport function CommmunicationForm(props: IProps) {\n // referencia al input file\n const inputFile = React.useRef();\n\n const { t } = useTranslation();\n const loading = useLoading();\n const dialogs = useDialogs();\n const messages = useMessage();\n\n // trabajos filtrados por workspace\n const [jobs, setJobs] = React.useState([]);\n // todos los trabajos\n const [allJobs, setAllJobs] = React.useState([]);\n\n // relaciones de la comunicacion (ficheros, trabajos, departamentos y workspaces)\n const [selectedFiles, setSelectedFiles] = React.useState([]);\n const [selectedJobs, setSelectedJobs] = React.useState([]);\n const [selectedDepartments, setSelectedDepartments] = React.useState([]);\n const [selectedWorkspaces, setSelectedWorkspaces] = React.useState([]);\n\n const todayOffset = new Date();\n todayOffset.setDate(todayOffset.getDate() - 1);\n\n const validateForm = (data: any) => {\n return ValidationBuilder.create(data)\n .notEmpty('title', t('Title is required'))\n .notEmpty('description', t('Description is required'))\n .notEmpty('startDate', t('startDate is required'))\n .notEmpty('endDate', t('endDate is required'))\n .notEmpty('users', t('Users is required'))\n .build();\n }\n\n const isValid = (data: any) => {\n return Object.keys(validateForm(data)).length == 0;\n }\n\n const form = useForm>({\n initialValues: {\n },\n validate: validateForm,\n validateOnMount: true,\n });\n\n // activamos el input file para que el usuario seleccione un fichero\n const fireAddFile = () => {\n inputFile.current.click();\n }\n\n // borramos uno de los ficheros seleccionados\n const removeSelectedFile = (f: ICommunicationFile) => {\n setSelectedFiles(fs => fs.filter(r => r != f));\n }\n\n // cuando el usuario selecciona un documento lo almacenamos como recurso temporal\n // y lo anhadimos a la lista selectedFiles (ficheros seleccionados para la comunicación)\n const onSelectDocument = loading.wrap(async (e: any) => {\n const file = e.target.files![e.target.files?.length! - 1];\n const resourceId = await props.pushTemporalResource(file);\n if (resourceId.hasValue) {\n setSelectedFiles(f => [\n {\n fileName: file.name,\n fileSize: file.size,\n temporalResourceId: resourceId.value,\n },\n ...f\n ]);\n }\n else {\n messages.set(resourceId);\n }\n });\n\n // almacenamos todos los trabajos\n //TODO: intentar evitar esto\n const initialize = async () => {\n const jobs = await props.getJobs(props.work.id);\n setAllJobs(jobs.data.work.jobs);\n }\n\n React.useEffect(() => {\n initialize();\n }, []);\n\n const cannotSave = () => {\n if (form.values.startDate != null) {\n return loading.isLoading() || form.isInvalid()\n || form.values.endDate < form.values.startDate\n || form.values.endDate == null\n || form.values.startDate == null\n || dateUtils.compareDates(dateUtils.parseDate(form.values.startDate), todayOffset) < 0;\n }\n else {\n return loading.isLoading() || form.isInvalid()\n || form.values.endDate < form.values.startDate\n || form.values.endDate == null\n || form.values.startDate == null\n }\n };\n\n form.observe('workspaces', setSelectedWorkspaces);\n form.observe('users', setSelectedDepartments);\n form.observe('jobs', setSelectedJobs);\n\n // si cambia el workspace filtramos los trabajos (jobs/setJobs) que puede seleccionar el usuario\n React.useEffect(() => {\n if (selectedWorkspaces.length > 0 && allJobs.length > 0) {\n const selectedJobs = allJobs.filter((j: any) => selectedWorkspaces.includes(j.workspaceId ?? 0));\n setJobs(selectedJobs);\n }\n else {\n setJobs([]);\n }\n }, [selectedWorkspaces, allJobs]);\n\n // crea un objeto ICommunication a partir de la información del formulario\n // procesando los archivos/departamentos/trabajos ...\n const getCommunication = () => {\n return {\n title: form.values.title ?? '',\n description: form.values.description ?? '',\n fromDate: form.values.startDate ?? new Date(),\n toDate: form.values.endDate ?? new Date(),\n workId: props.work.id,\n isRecursive: form.values.recursive ?? false,\n jobs: selectedJobs.map(id => ({\n jobId: id,\n })),\n targetType: selectedDepartments.includes(0)\n ? RequirementTargetType.Contractor\n : undefined,\n departments: selectedDepartments\n .filter(id => id > 0) // excluimos el departamento virtual que identifica a contratistas\n .map(id => ({\n departmentId: id\n })),\n workspaces: selectedWorkspaces.map(id => ({\n workspaceId: id,\n })),\n files: selectedFiles,\n };\n }\n\n const doAdd = loading.wrap(async (..._: any) => {\n const data = getCommunication();\n\n const resp = await props.saveCommunication(data);\n messages.set(resp);\n\n if (resp.hasValue) {\n goToCommunications(props.work.id);\n }\n else {\n messages.set(resp);\n }\n });\n\n // previsualizamos los posibles destinatarios\n const previewReceivers = loading.wrap(async () => {\n const c = getCommunication();\n const receivers = await props.getCommunicationReceivers(c);\n dialogs.show('receivers', receivers);\n });\n\n // incluimos un departamento virtual para identificar a los contratistas (targetType == 1)\n const availableDepartments = [\n { id: 0, name: t('Contractors') },\n ...props.departments,\n ];\n\n // listado de receivers de la comunicacion\n const renderReceivers = (receivers: IUserIdentity[]) => {\n if (receivers.length == 0) {\n return
\n \n {t('communications.receivers.empty')}\n \n
\n }\n else {\n receivers.sort((a, b) => a.userName.localeCompare(b.userName));\n return
\n \n \n \n \n \n \n \n \n {receivers.map((r) => \n \n \n )}\n \n
{t('username')}{t('email')}
{r.userName}{r.email}
\n
;\n }\n }\n\n\n const checkStartDate = (value: any) => {\n if (value != null) {\n if (dateUtils.dateIsLessOrEqual(dateUtils.parseDate(value), todayOffset)) {\n return {t('communications.startDate.error')}\n }\n else {\n return null;\n }\n }\n else {\n return null;\n }\n }\n\n const checkEndDate = (value: any) => {\n if (value < form.values.startDate) {\n return {t('communications.endDate.error')}\n }\n else {\n return null;\n }\n }\n\n return
\n {dialogs.render(\n 'receivers',\n { title: (receivers: IUserIdentity[]) => t('communications.receivers') + ` (${receivers.length})` },\n renderReceivers)}\n\n
\n
\n
\n \n {form.input('title', { containerClassName: 'span-5', autoFocus: true })}\n \n
\n {form.input('startDate', { type: 'date' })}\n {checkStartDate(form.values.startDate)}\n
\n \n
\n {form.input('endDate', { type: 'date' })}\n {checkEndDate(form.values.endDate)}\n
\n \n {form.checkBox('recursive')}\n \n {form.multiselect('users', availableDepartments, true)}\n
\n \n {t('communication.workspaces')}\n
\n {form.multiselect('workspaces', props.workspaces, true)}\n \n {form.multiselect('jobs', jobs, true)}\n
\n
\n {form.editor('description', { containerClassName: 'description-container' })}\n\n
\n \n {t('communications.files')}\n \n {selectedFiles.map(f =>
\n removeSelectedFile(f)} />\n {f.fileName}\n
)}\n
\n
\n
\n {form.errorBox()}\n
\n\n {/** FOOTER */}\n
\n {/* */}\n \n \n {loading.render()}\n {props.footer != undefined &&
{props.footer}
}\n\n
\n \n {t('communications.view.receivers')}\n \n\n \n {t('Create')}\n \n
\n
\n
\n \n
\n}","import * as React from 'react';\n\nimport {\n useDialogs,\n useLoading,\n useTranslation,\n usePaginator,\n useSearchPaginate,\n useDataTable,\n ProgressBar,\n useSearch,\n useSearchFilters,\n Portal,\n Tag,\n G,\n useForm,\n} from '@components';\nimport { ICommunication, ISecurity, IWorkspace } from '@models';\n\nimport './CommunicationsList.scss';\nimport { searchExportToXls } from '@store/actions/search';\nimport { downloadBlob } from '@utils/file-utils';\nimport dateUtils from '@utils/date-utils';\nimport i18next from 'i18next';\n\nexport interface IProps {\n footer?: any;\n onChange?: Function;\n onSubmit: Function;\n workSpaces: IWorkspace[];\n workId: number;\n saveCommunication: Function;\n getCommunication: Function;\n getDocuments: Function;\n getDepartmentWorkers: Function;\n security: ISecurity;\n}\n\ntype CommunicationRow = ICommunication & {\n receiverNames: string;\n total: number;\n validated: number;\n createdBy: number;\n communicationStatus: boolean;\n\n //Indica el departamento al que pertenece el usuario que creo la comunicacion\n departmentIds: number[];\n createdByName: string;\n}\n\nfunction ViewCommunication({ id, workId, row, getCommunication }: {\n id: number,\n workId: number,\n row: CommunicationRow,\n getCommunication: Function,\n}) {\n const { t } = useTranslation();\n const loading = useLoading(true);\n const [communication, setCommunication] = React.useState();\n\n const initialize = loading.wrap(async () => {\n const c = await getCommunication(workId, id);\n setCommunication(c);\n });\n\n React.useEffect(() => {\n initialize();\n }, []);\n\n const documents = communication?.documents ?? [];\n\n return
\n {loading.renderBox()}\n
\n
\n
\n {t('communications.files')}\n {documents.map(d =>
\n {d.name}\n \n \n \n
)}\n
\n
\n
\n}\n\nfunction EditCommunication({ id, workId, row, saveCommunication, getCommunication, clearDialog, reload }: {\n id: number,\n workId: number,\n row: CommunicationRow,\n getCommunication: Function,\n saveCommunication: Function,\n clearDialog: Function,\n reload: Function,\n}) {\n const { t } = useTranslation();\n const loading = useLoading();\n const [communication, setCommunication] = React.useState();\n\n const form = useForm>({\n initialValues: {\n toDate: row.toDate\n }\n });\n\n const initialize = loading.wrap(async () => {\n const c = await getCommunication(workId, id);\n setCommunication(c);\n });\n\n React.useEffect(() => {\n initialize();\n }, []);\n\n const doSave = loading.wrap(async () => {\n const comm: ICommunication = {\n departments: communication!.departments,\n description: communication!.description,\n isRecursive: communication!.isRecursive,\n fromDate: communication!.fromDate,\n toDate: form.values.toDate,\n file: communication!.file,\n id: communication!.id,\n title: communication!.title,\n jobs: communication!.jobs,\n workId: communication!.workId,\n isActive: communication!.isActive,\n targetType: communication!.targetType,\n workspaces: communication!.workspaces,\n }\n\n\n const res = await saveCommunication(comm);\n if (res.hasValue) {\n clearDialog();\n reload();\n }\n });\n\n const checkDate = (value: Date) => {\n if (value < row.fromDate) {\n return {t('communications.endDate.error')}\n }\n }\n\n return
\n {loading.renderBox()}\n
\n
\n \n {form.input('toDate', { type: 'date' })}\n \n {checkDate(form.values.toDate)}\n
\n
\n \n
\n}\n\nfunction RemoveCommunication({ row, deleteCommunication, clearDialog, reload }: {\n row: CommunicationRow,\n deleteCommunication: Function,\n clearDialog: Function,\n reload: Function,\n}) {\n const { t } = useTranslation();\n const loading = useLoading();\n\n const remove = loading.wrap(async () => {\n await deleteCommunication(row);\n clearDialog();\n reload();\n });\n\n return
\n {loading.renderBox()}\n
\n

{t('communication.remove.confirmation')}

\n
\n \n
\n}\n\n\nexport function CommunicationsList(props: IProps) {\n const { t } = useTranslation();\n\n const [anyDeleted, setAnyDeleted] = React.useState(false);\n\n const loading = useLoading();\n\n const userFilters = useSearchFilters({\n workId: props.workId,\n security: props.security,\n name: 'communications/list',\n references: {\n },\n persist: true,\n })\n\n const data = useSearchPaginate({\n search: props.security.isContractor() ? 'communications/list.contractors' : 'communications/list',\n filters: userFilters.merge({ workId: props.workId }),\n workId: props.workId,\n dependencies: [userFilters.filters],\n lazy: true,\n });\n\n const paginator = usePaginator({\n data: data.value,\n onChange: (page, limit) =>\n data.doSearch(userFilters.merge({ workId: props.workId }), page, limit),\n });\n\n const dialogs = useDialogs();\n\n React.useEffect(() => {\n if (anyDeleted) {\n reload();\n setAnyDeleted(false);\n }\n }, [anyDeleted]);\n\n const reload = loading.wrap(async () => {\n await data.doSearch(userFilters.merge({ workId: props.workId }));\n });\n\n React.useEffect(() => {\n reload();\n }, [userFilters.filters]);\n\n const showCommunication = (row: CommunicationRow) => {\n dialogs.show('communication', row);\n }\n\n const checkArrays = (arr1: any[], arr2: any[]) => {\n for (var i = 0; i < arr1.length; i++) {\n for (var j = 0; j < arr2.length; j++) {\n if (arr1[i] == arr2[j]) {\n return true;\n }\n }\n }\n return false;\n }\n\n const actions = () => {\n const actions = [\n {\n icon: 'fas fa-folder',\n title: t('communications.view.data'),\n onClick: showCommunication,\n disabled: (x: CommunicationRow) => false\n },\n ];\n if (props.security.user?.departments?.some(x => data.data.filter(d => d.departmentIds.includes(x))) || props.security.isGestor() || data.data.some(x => x.createdBy == props.security.user?.id)) {\n actions.push({\n icon: 'fas fa-edit',\n title: t('Edit end date'),\n onClick: (row: CommunicationRow) => {\n dialogs.show('communication-edit', row);\n },\n disabled: (x: CommunicationRow) => {\n if (props.security.isGestor()) {\n return false;\n } else {\n if (x.createdBy == props.security.user?.id) {\n return false;\n }\n else {\n if (checkArrays(x.departmentIds, props.security.user?.departments || [])) {\n return false;\n }\n else {\n return true;\n }\n }\n }\n }\n });\n }\n if (props.security.hasPolicy(\"communication.create\") || props.security.isGestor()) {\n actions.push({\n icon: 'fas fa-file-excel',\n title: t('communications.export'),\n onClick: (row: CommunicationRow) => {\n exportCommunicationToXls(row);\n },\n disabled: (x: CommunicationRow) => false\n });\n }\n if (!props.security.isContractor()) {\n actions.push({\n icon: 'fas fa-list',\n title: t('communications.receivers'),\n onClick: (row: CommunicationRow) => {\n dialogs.show('communication-receivers', row);\n },\n disabled: (x: CommunicationRow) => false\n });\n }\n if (props.security.isGestor()) {\n actions.push({\n icon: 'fas fa-trash',\n title: t('communications.remove'),\n onClick: (x: CommunicationRow) => dialogs.show('communication-delete', x),\n disabled: (x: CommunicationRow) => x.isActive == false,\n });\n }\n return actions;\n };\n\n React.useEffect(() => {\n actions();\n }, [data.data]);\n\n const cleanHTML = (html: string) => {\n const regexp: RegExp = /( |<([^>]+)>)/ig;\n return html.replace(regexp, '');\n }\n\n const dataTable = useDataTable({\n columns: !props.security.isContractor() ? [\n { title: t('UserName'), field: 'createdByName', className: 'center w-10' },\n { title: t('creation.date'), field: 'creationDate', className: 'center w-10', delegate: 'date' },\n { title: t('communication.fromDate'), field: 'fromDate', className: 'center w-10', delegate: 'date' },\n { title: t('communication.toDate'), field: 'toDate', className: 'center w-10', delegate: 'date' },\n {\n title: t('Title'), className: 'center',\n render: d =>\n
\n {d.title}\n
\n },\n {\n title: t('communications.validated'),\n render: d => {\n const percentage = ((d.validated / d.total) * 100).toFixed(2);\n return
\n \n
\n },\n //
\n // \n //
,\n className: 'center w-5'\n },\n { title: t('Status'), render: d => !d.communicationStatus ? {t('Inactive')} : {t('Active')}, className: 'center w-5' },\n ] : [\n { title: t('creation.date'), field: 'creationDate', className: 'center w-10', delegate: 'date' },\n { title: t('communication.fromDate'), field: 'fromDate', className: 'center w-10', delegate: 'date' },\n { title: t('communication.toDate'), field: 'toDate', className: 'center w-10', delegate: 'date' },\n { title: t('Title'), field: 'title', className: 'center' },\n { title: t('Status'), render: d => !d.communicationStatus ? {t('Inactive')} : {t('Active')}, className: 'center w-5' },\n ],\n actions: [\n {\n actions: actions(),\n }\n ],\n data: data.data,\n });\n\n\n const deleteCommunication = async (row: CommunicationRow) => {\n const c = await props.getCommunication(props.workId, row?.id);\n const communication: ICommunication = {\n id: c.id,\n workId: c.workId,\n title: c.title,\n description: c.description,\n fromDate: c.fromDate,\n toDate: c.toDate,\n departments: c.departments,\n jobs: c.jobs,\n workspaces: c.workspaces,\n file: c.file,\n isRecursive: c.isRecursive,\n targetType: c.targetType,\n }\n const res = await props.saveCommunication(communication, true);\n if (res.isError === false) {\n setAnyDeleted(true);\n }\n };\n\n const renderReceivers = (row: CommunicationRow) => {\n return \n }\n\n const renderEditCommunication = (row: CommunicationRow) => {\n return \n }\n\n const renderRemoveCommunication = (row: CommunicationRow) => {\n return \n }\n\n function RenderReceivers({ row }: { row: CommunicationRow }) {\n const searchForReceivers = useSearch({\n search: 'communications/receivers',\n workId: props.workId,\n filters: {\n communicationId: row.id,\n },\n lazy: true,\n });\n\n const cleanSearch = (search: any[]) => {\n const clean: any[] = [];\n search.map((s: any) => {\n if (clean.some(c => c.userId == s.userId) === false) {\n clean.push(s);\n }\n })\n\n return clean;\n }\n React.useEffect(() => {\n searchForReceivers.doSearch({ communicationId: row.id });\n }, []);\n\n const renderValidated = (row: any): string => {\n switch (row.status) {\n case 'Validated':\n return t('Validated')\n break;\n default:\n return t('Not validated')\n break;\n }\n }\n\n const dataTable = useDataTable({\n columns: [\n { title: t('name'), field: 'name', sortKey: 'name' },\n {\n title: t('ResourceType'), render: d => {\n switch (d.type) {\n case 'Worker':\n return t('communication.worker')\n break;\n default:\n return t('communication.contractor')\n break;\n }\n }, sortKey: 'type'\n },\n {\n title: t('Status'), render: d => {\n return renderValidated(d);\n }, sortKey: 'status'\n },\n { title: t('Validation date'), render: d => dateUtils.formatDateTimeFromUtc(d.validationDate), sortKey: 'validationDate' },\n ],\n data: cleanSearch(searchForReceivers.value),\n onSort: (key, order) => searchForReceivers.doSearch({ communicationId: row.id, sort: key, order: order }),\n });\n\n return
{dataTable()}
\n };\n\n const renderCommunication = (row: CommunicationRow) => {\n return \n }\n\n const exportToXls = async (filters: any, filename: string | undefined = undefined) => {\n const resp = await searchExportToXls(props.workId, 'communications/list.report', filters, i18next.languages[0]);\n downloadBlob(resp, filename ?? ('communications' + '.xlsx') ?? 'export.xlsx');\n }\n\n const exportCommunicationToXls = async (row: CommunicationRow) => {\n const resp = await searchExportToXls(props.workId, 'communications/report', { communicationId: row.id }, i18next.languages[0]);\n downloadBlob(resp, row.title + '.xlsx');\n }\n\n return
\n {dialogs.render('communication', { maximized: true, title: t('communication') }, renderCommunication)}\n {dialogs.render('communication-receivers', { maximized: true, title: t('communications.receivers') }, renderReceivers)}\n {dialogs.render('communication-edit', { title: t('Edit end date') }, renderEditCommunication)}\n {dialogs.render('communication-delete', { title: t('Delete communication') }, renderRemoveCommunication)}\n \n
\n \n exportToXls(userFilters.merge({ workId: props.workId }))}\n style={{ height: '23px', marginTop: '3px' }} />\n \n
\n {userFilters.renderAsButton({ className: 'fas fa-filter pointer' })}\n
\n
\n
\n {dataTable()}\n \n {paginator()}\n
\n}","import * as React from 'react';\n\nimport { connect } from 'react-redux';\nimport { ApplicationState } from '../../store';\nimport { CommunicationsList } from '@components/communications/CommunicationsList';\nimport * as UserStore from '@store/user';\nimport * as DocumentsStore from '@store/documents';\nimport * as Actions from '@store/actions/resources'\n\nexport default connect(\n (state: ApplicationState) => ({\n ...state.identity,\n ...state.user,\n ...state.constants,\n ...UserStore.plainActions,\n ...DocumentsStore.plainActions,\n ...Actions.getDepartments,\n workId: state.user.work?.id,\n }),\n {},\n)(CommunicationsList as any) as any; // eslint-disable-line @typescript-eslint/no-explicit-any\n","import * as React from 'react';\n\nimport { connect } from 'react-redux';\nimport { ApplicationState } from '../../store';\nimport { ValidateCommunication } from '@components/communications/ValidateCommunication';\nimport * as UserStore from '@store/user';\nimport * as DocumentsStore from '@store/documents';\nimport * as Actions from '@store/actions/resources'\n\nexport default connect(\n (state: ApplicationState) => ({\n ...state.identity,\n ...state.user,\n ...state.constants,\n ...UserStore.plainActions,\n ...DocumentsStore.plainActions,\n ...Actions.getDepartments,\n workId: state.user.work?.id,\n }),\n {\n ...UserStore.actionCreators,\n },\n)(ValidateCommunication as any) as any; // eslint-disable-line @typescript-eslint/no-explicit-any\n","import * as React from 'react';\n\nimport { useTranslation, useLoading, } from '@components';\nimport { ICommunication } from '@models';\n\nimport './ValidateCommunication.scss';\n\nexport interface IProps {\n communication: ICommunication;\n requestClose: Function;\n validateCommunication: Function;\n}\n\nexport function ValidateCommunication(props: IProps) {\n const { t } = useTranslation();\n const loading = useLoading();\n\n const doValidate = loading.wrap(async () => {\n props.validateCommunication(props.communication.id);\n props.requestClose();\n });\n\n return
\n
\n {loading.renderBox()}\n\n
\n {t('communication.validation.message')}\n {props.communication.title}\n
\n
\n\n
\n \n \n \n
\n
\n}","import * as React from 'react';\n\nimport { connect } from 'react-redux';\nimport { ApplicationState } from '../../store';\nimport { CurrentCommunications } from '@components/communications/CurrentCommunications';\nimport * as UserStore from '@store/user';\nimport * as DocumentsStore from '@store/documents';\nimport * as Actions from '@store/actions/resources'\n\nexport default connect(\n (state: ApplicationState) => ({\n ...state.identity,\n ...state.user,\n ...state.constants,\n ...UserStore.plainActions,\n ...DocumentsStore.plainActions,\n ...Actions.getDepartments,\n workId: state.user.work?.id,\n }),\n {},\n)(CurrentCommunications as any) as any; // eslint-disable-line @typescript-eslint/no-explicit-any\n","import * as React from 'react';\nimport { Route } from 'react-router';\n\nimport './Module.scss';\n\nimport EditContractorContainer from '@containers/contractors/EditContractorContainer';\nimport EditMachineryContainer from '@containers/machineries/EditMachineryContainer';\nimport EditWorkerContainer from '@containers/workers/EditWorkerContainer';\nimport JobContainer from '@containers/user/JobContainer';\nimport JobsContainer from '@containers/user/JobsContainer';\nimport JobLoader from '@containers/user/JobLoader';\nimport ManageContractorsContainer from '@containers/contractors/ManageContractorsContainer';\nimport ManageSubcontractorsContainer from '@containers/contractors/ManageSubcontractorsContainer';\nimport { ContractorModule } from '@components/contractors/ContractorModule';\nimport SelectWorkContainer from '@containers/user/SelectWorkContainer';\nimport ReportContainer from '@containers/reports/ReportContainer';\nimport WorkAccessControl from '@containers/work/WorkAccessControl';\nimport WorkContainer from '@containers/user/WorkContainer';\nimport WorkLoaderContainer from '@containers/user/WorkLoaderContainer';\nimport WorkReports from '@containers/work/WorkReportsContainer';\nimport WorkSubContractorRequestsContainer from '@containers/work/WorkSubContractorRequestsContainer';\n\nimport { redirectTo } from '@utils';\nimport { BreadCrumb, LoadingBox, useSignalR, useTranslation } from '@components';\nimport { ICommunication, IJob, IMessage, IWork, MessageType } from '@models';\nimport ViewMachineriesContainer from '@containers/machineries/ViewMachineriesContainer';\nimport ViewWorkersContainer from '@containers/workers/ViewWorkersContainer';\nimport WorkDocumentsContainer from '@containers/work/WorkDocumentsContainer';\nimport WorkUsersContainer from '@containers/users/WorkUsersContainer';\nimport WorkRequirementDocumentContainer from '@containers/work/WorkRequirementDocumentContainer';\nimport { ContractorRoutes } from '@components/contractors/ContractorRoutes';\nimport CommmunicationFormContainer from '@containers/communications/CommunicationFormContainer';\nimport CommunicationsListContainer from '@containers/communications/CommunicationsListContainer';\nimport CurrentCommunicationsContainer from '@containers/communications/CurrentCommunicationsContainer';\n\nexport interface IProps {\n communications: ICommunication[];\n loading: boolean;\n loadMessages: Function;\n loadingMessage?: string;\n location: any;\n match: any;\n initialize: Function;\n selectedJob?: IJob;\n version: number;\n works: IWork[];\n work?: IWork;\n}\n\nconst createItems = (url: string, props: IProps, t: Function) => {\n const items = [];\n const work = props.work;\n const job = props.selectedJob;\n\n items.push({\n label: t('Works'),\n command: () => redirectTo('/'),\n });\n\n if (work && url.startsWith(`/work/${work.id}/jobs`)) {\n items.push({\n label: work.name,\n command: () => redirectTo(`/work/${work.id}`),\n });\n items.push({\n label: t('Jobs'),\n command: () => redirectTo(`/work/${work.id}/jobs`),\n });\n }\n else if (url.startsWith('/work/') && work) {\n items.push({\n label: work.name,\n command: () => redirectTo(`/work/${work.id}`),\n });\n }\n\n return items;\n}\n\nconst wrapWork = (f: React.FC) => (props: any) => \n {f(props)}\n;\n\nconst wrapJob = (f: React.FC) => (props: any) =>\n \n \n {f(props)}\n \n ;\n\n// Jobs\nconst JobWrapper = wrapJob(p => );\nconst JobsWrapper = wrapWork(p => );\nconst ReportWrapper = wrapWork(p => );\n// Contractors\nconst ContractorWrapper = wrapWork(p => );\nconst ContractorsWrapper = wrapWork(p => );\nconst EditContractorWrapper = wrapWork(p => );\nconst EditContractorRequirementsWrapper = wrapWork(p => );\nconst WorkSubContractorRequestsWrapper = wrapWork(p => );\nconst SubcontractorsWrapper = wrapWork(p => );\n\n// Machinery\nconst EditMachineryWrapper = wrapWork(p => );\nconst MachineriesWrapper = wrapWork(p => );\n// Workers\nconst EditWorkerWrapper = wrapWork(p => );\nconst WorkersWrapper = wrapWork(p => );\n// Others\nconst WorkAccessControlWrapper = wrapWork(props => );\nconst WorkDocumentsWrapper = wrapWork(p => );\nconst WorkUsersWrapper = wrapWork(p => );\nconst WorkReportsWrapper = wrapWork(props => );\nconst WorkWrapper = wrapWork(p => );\n\nconst RequirementDocumentWrapper = wrapWork(p => );\n\nconst CommunicationFormWrapper = wrapWork(p => );\nconst CommunicationsListWrapper = wrapWork(p => );\nconst CurrentCommunicationsWrapper = wrapWork(p => );\nconst ContractorRoutesWrapper = wrapWork(p => );\n\nfunction Module(props: IProps) {\n const [items, setItems] = React.useState([]);\n const lastMessagesReload = React.useRef(new Date().getTime());\n const { t } = useTranslation();\n // console.log('RELOAD MODULE');\n const home = {\n icon: 'pi pi-home',\n command: () => redirectTo('/'),\n };\n\n const _ = useSignalR({\n key: 'MainModule',\n method: 'NotificationMessage',\n onMessage: r => {\n if (r.notificationType === MessageType.RELOAD_NOTIFICATIONS) {\n console.log(r);\n const dt = new Date().getTime();\n if (dt - lastMessagesReload.current > 1000 * 30) {\n lastMessagesReload.current = dt;\n props.loadMessages();\n }\n console.log(r);\n }\n }\n });\n\n React.useEffect(() => {\n if (props.match) {\n setItems(\n createItems(\n window.location.pathname,\n props,\n t));\n }\n }, [props.location, props.match]);\n\n React.useEffect(() => {\n if (!props.version) {\n props.initialize();\n }\n }, []);\n\n React.useEffect(() => {\n // no redirigir en caso de que ya estemos en communications\n if (props.communications?.length > 0 && !window.location.pathname.includes('communications/current')) {\n // redirigir a communications current\n redirectTo('/work/' + props.work?.id + '/communications/current');\n }\n }, [props.communications, window.location.pathname]);\n\n return
\n
\n {items.length > 0 &&\n }\n
\n \n \n {props.loading &&
\n \n
}\n\n \n\n \n \n \n \n \n \n \n \n \n {/* \n */}\n \n \n \n \n \n \n \n \n \n \n \n \n
;\n}\n\nexport default React.memo(\n Module,\n (prev, next) =>\n prev.location === next.location\n && prev.match == next.match);\n","import * as React from 'react';\n\nimport ValidateCommunicationContainer from '@containers/communications/ValidateCommunicationContainer';\nimport {\n useDialogs, useLoading, useTranslation, BreadcrumbItem, TabPanel, TabView, Portal\n} from '@components';\nimport { ICommunication } from '@models';\n\nimport './CurrentCommunications.scss';\nimport { redirectTo } from '@utils';\n\nexport interface IProps {\n communications: ICommunication[];\n workId: number;\n}\n\nexport function CurrentCommunications(props: IProps) {\n const loading = useLoading();\n const dialogs = useDialogs();\n const [activeTab, setActiveTab] = React.useState(0);\n const [currentDocuments, setCurrentDocuments] = React.useState([]);\n const { t } = useTranslation();\n\n const validate = () => {\n const c = props.communications[activeTab];\n dialogs.show('validate', c);\n }\n\n const communications = props.communications;\n\n const renderValidation = (c: ICommunication) => {\n return \n }\n\n React.useEffect(() => {\n if (communications.length == 0) {\n redirectTo(`/work/${props.workId}/`)\n }\n }, [communications]);\n\n React.useEffect(() => {\n if (communications[activeTab] != undefined) {\n setCurrentDocuments(communications[activeTab].documents ?? []);\n }\n }, [communications[activeTab]]);\n\n\n return
\n \n\n \n {loading.render()}\n\n \n \n\n {dialogs.render('validate', { title: t('communication.resolve') }, renderValidation)}\n\n setActiveTab(e.index)} activeIndex={activeTab}>\n {communications.map(c => \n
\n
\n {currentDocuments.length > 0 &&
}\n {currentDocuments.length > 0 && {t('communications.files')}}\n {currentDocuments.map(d =>
\n {d.name}\n \n \n \n
\n
)}\n
)}\n
\n
\n}","import { connect } from 'react-redux';\nimport { ApplicationState } from '../../store';\n\nimport * as UsersStore from '../../store/user';\nimport Module from '../../components/user/Module';\n\nexport default connect(\n (state: ApplicationState) => ({\n communications: state.user.communications,\n selectedJob: state.jobs?.selectedJob,\n work: state.user.work,\n version: state.user.version,\n loading: state.app.loading,\n loadingMessage: state.app.loadingMessage\n }),\n UsersStore.actionCreators,\n)(Module as any) as any; // eslint-disable-line @typescript-eslint/no-explicit-any\n","import { IAuthRequest } from \"../../models\";\nimport { q } from './graphql';\nimport * as HTTP from './utils';\n\nexport async function login(auth: IAuthRequest) {\n const resp = await HTTP.POST('/api/users/authenticate', auth);\n\n if (resp && !resp.error) {\n return {\n ok: true,\n value: await getUser(),\n message: undefined,\n };\n }\n return resp;\n}\n\nexport function getUser() {\n return q(`\nquery InitializeUser {\n user {\n id, userName, email, roles, policies,\n departments, workFunctions,\n workerIds, obliqueDepartments, contractorIds\n }\n}`, {}, { returnPath: 'user' });\n}\n\nexport default {\n getUser,\n login,\n}\n","import * as React from 'react';\n\nimport {\n FloatField, InputText, Message, Panel,\n classNames,\n useForm,\n useFormik,\n useLoading,\n useTranslation,\n validate,\n validations as V,\n ValidationBuilder,\n useToast,\n} from '@components';\nimport { IUserIdentity } from '@models';\nimport { login } from '@store/actions/identity';\nimport './LoginPanel.scss';\nimport { IRecoverPasswordData } from '@models/forms';\n\nexport interface IProps {\n className?: string;\n style?: any;\n user?: IUserIdentity;\n setUser: Function;\n initializeApp: Function;\n recoverPassword: Function;\n}\n\nenum FormType {\n Login = 0,\n ResetPassword = 1\n}\n\ninterface IResetFormData {\n email: string;\n userName: string;\n}\n\nexport default function LoginPanel(props: IProps) {\n const [error, setError] = React.useState(undefined);\n const [formType, setFormType] = React.useState(FormType.Login);\n\n const { t } = useTranslation();\n const toast = useToast();\n const loading = useLoading();\n\n const [referrer, setReferrer] = React.useState(undefined);\n\n const resetForm = useForm({\n initialValues: {\n email: '',\n userName: '',\n },\n validateOnMount: true,\n validate: ValidationBuilder.new().email('email').lift(),\n });\n\n const formik: any = useFormik({\n initialValues: {\n username: '',\n password: '',\n },\n validate: (data) => {\n let errors: any = {};\n validate(data, 'username', errors, V.notEmpty, t('Name is required'));\n validate(data, 'password', errors, V.notEmpty, t('Password is required'));\n\n return errors;\n },\n onSubmit: loading.wrap(async (data: any) => {\n const resp = await login(data);\n if (resp.ok) {\n props.setUser(resp.value);\n setError(undefined);\n props.initializeApp();\n { document.getElementById('container')!.className = \"\" }\n { document.getElementById('root')!.className = \"\" }\n sessionStorage.setItem('loginTime', Date.now().toString())\n }\n else {\n setError(resp.message);\n }\n })\n });\n\n const isFormFieldValid = (name: string) => !!(formik.touched[name] && formik.errors[name]);\n const getFormErrorMessage = (name: string) => {\n return isFormFieldValid(name) && {formik.errors[name]};\n };\n\n const header = () => {\n return
\n {t('Login')}\n
\n }\n\n const changePassword = (e: any) => {\n e.preventDefault();\n e.stopPropagation();\n setError(undefined);\n\n setFormType(FormType.ResetPassword);\n }\n\n const cancel = () => {\n setFormType(FormType.Login);\n resetForm.setFieldValues({ email: '' });\n }\n\n const doReset = loading.wrap(async () => {\n const form: IRecoverPasswordData = {\n email: resetForm.values.email,\n userName: resetForm.values.userName,\n }\n const res = await props.recoverPassword(form);\n resetForm.setFieldValue('email', '');\n resetForm.setFieldValue('userName', '');\n if (res.isError) {\n toast.error(t(res.error));\n }\n else {\n toast.show(t('password.reset.send'));\n }\n });\n\n React.useEffect(() => {\n setReferrer(document.referrer);\n }, []);\n\n return
\n \n {toast.render()}\n {formType === FormType.ResetPassword &&
\n
{t('password.reset.request')}
\n
\n {resetForm.input('email', { placeholder: 'Email', type: 'email' })}\n
\n
\n {resetForm.input('userName', { placeholder: t('Username'), type: 'text' })}\n
\n \n
\n \n\n \n\n {loading.render()}\n \n
\n
}\n\n {formType === FormType.Login && <>\n
\n {/* */}\n \n {/* */}\n {/* */}\n \n {/* */}\n
\n {formType === FormType.Login && !referrer?.includes('cae') &&\n {t('password.forget')}}\n \n {loading.render()}\n {formType === FormType.Login &&\n \n \n }\n
\n \n }\n {error && }\n
\n
\n}","import { connect } from 'react-redux';\nimport { ApplicationState } from '../../store';\nimport * as Identity from '../../store/identity';\nimport * as UserStore from '@store/user';\n\nimport LoginPanel, { IProps } from '../../components/auth/LoginPanel';\n\ntype Props =\n Identity.IdentityState\n & typeof Identity.actionCreators\n & IProps;\n\nexport default connect(\n (state: ApplicationState) => ({\n identity: state.identity,\n ...UserStore.plainActions,\n }),\n Identity.actionCreators\n)(LoginPanel as any) as any; // eslint-disable-line @typescript-eslint/no-explicit-any\n","import * as React from 'react';\nimport { connect } from 'react-redux';\nimport LoginPanel from '@containers/auth/LoginContainer';\nimport { useTranslation } from '@components';\n\nimport './Home.scss';\n\nconst Images = () => {\n return gstore;\n}\n\nconst Bottom = () => {\n return gstore;\n}\n\n\n\nexport default function Home(){\n const { t } = useTranslation();\n {document.getElementById('container')!.className = \"height\"}\n {document.getElementById('root')!.className = \"clip\"}\n return
\n
\n \n \n
\n
\n {t('home.text')}\n \"gstore\"\n
\n
\n \n
\n
\n}\n","import { connect } from 'react-redux';\nimport { ApplicationState } from '../store';\nimport * as Identity from '../store/identity';\nimport * as App from '../store/app';\n\nimport Home from '../components/Home';\n\ntype Props =\n Identity.IdentityState &\n App.IAppState;\n\nexport default connect(\n (state: ApplicationState) => ({\n user: state.identity?.user,\n loading: state.app.loading,\n })\n)(Home as any) as any; // eslint-disable-line @typescript-eslint/no-explicit-any\n","import * as React from 'react';\n\nimport { IUserIdentity } from '@models';\nimport Sec from '@utils/security';\nimport { ProgressBar, useTranslation } from '@components';\nimport AdminModule from '@containers/admin/ModuleContainer';\nimport UserModuleContainer from '@containers/user/UserModuleContainer';\nimport GuestHome from './guest/Home';\n\nimport './Home.css';\nimport { storageClear } from '@utils/storage';\n\nexport interface IProps {\n user: IUserIdentity;\n loading: boolean;\n match: any;\n}\n\nexport default function Home(props: IProps) {\n const { t } = useTranslation();\n\n React.useEffect(() => {\n storageClear(k => k.startsWith('filters'));\n }, []);\n\n if (props.user && Sec.isAdmin(props.user)) {\n return \n }\n else if (props.loading) {\n return
\n
\n {t(\"AppLoading\")}\n \n
\n
\n }\n else if (props.user) {\n return \n }\n else {\n return \n }\n}\n","import * as React from 'react';\n\nimport { IDocumentType, INotification } from '@models';\nimport {\n G,\n NotificationsBox,\n useForm,\n useTranslation,\n ValidationBuilder,\n} from '@components';\n\nexport interface IProps {\n data: IDocumentType;\n footer?: any;\n notifications: INotification[];\n onChange?: Function;\n onSubmit: Function;\n}\n\nexport const validateDocumentType = (data: IDocumentType) => {\n return ValidationBuilder.create(data).notEmpty('name').build();\n}\n\nexport const isValid = (data: IDocumentType) => {\n return Object.keys(validateDocumentType(data)).length == 0;\n}\n\nconst prepareData = (work: IDocumentType) => {\n return {\n id: work.id,\n name: work.name,\n description: work.description,\n }\n}\n\nexport function DocumentTypeForm(props: IProps) {\n const { t } = useTranslation();\n\n const form = useForm({\n initialValues: {\n id: props.data?.id ?? 0,\n name: props.data?.name ?? '',\n description: props.data?.description ?? '',\n isActive: true,\n },\n validate: validateDocumentType, \n onSubmit: (data: IDocumentType) => {\n props.onSubmit(prepareData(data));\n return { ok: true };\n },\n onChange: props.onChange,\n });\n\n return
\n
\n
\n \n {form.input('name', { autoFocus: true })}\n \n \n {form.input('description')}\n \n
\n
\n {form.errorBox()}\n \n
\n\n {props.footer != undefined && props.footer}\n
\n
\n}\n","import { connect } from 'react-redux';\nimport { ApplicationState } from '../../store';\nimport * as ConstantsStore from '../../store/constants';\nimport * as App from '../../store/app';\n\nimport { AdminDocumentTypes, IProps } from '../../components/admin/AdminDocumentTypes';\nimport { NotificationType } from '../../models';\n\ntype Props =\n App.IAppState &\n IProps;\n\nexport default connect(\n (state: ApplicationState) => ({\n documentTypes: state.constants.documentTypes,\n notifications: state.notifications.notifications\n .filter(n => n.ctx === 'admindocumenttypes'),\n loading: state.notifications.notifications\n .filter(n => n.ctx === 'admindocumenttypes' && n.type === NotificationType.LOADING),\n loadingMessage: state.app.loadingMessage\n }),\n ConstantsStore.actionCreators,\n)(AdminDocumentTypes as any) as any; // eslint-disable-line @typescript-eslint/no-explicit-any\n","import * as React from 'react';\nimport {\n useTranslation, useLoading, useDataTable, useFormDialog, ConfirmDialog,\n} from '@components';\nimport { IDocumentType, INotification, NotificationType } from '@models';\nimport { onNotification } from '@utils/hooks';\nimport { DocumentTypeForm } from './DocumentTypeForm';\n\nexport interface IProps {\n loading: boolean,\n documentTypes: IDocumentType[];\n notifications: INotification[];\n removeDocumentType: Function;\n saveDocumentType: Function;\n}\n\nexport function AdminDocumentTypes(props: IProps) {\n const { t } = useTranslation();\n const loading = useLoading(props.loading);\n const [showConfirmRemove, setShowConfirmRemove] = React.useState();\n const formDialog = useFormDialog({\n editTitle: t('Edit document type'),\n addTitle: t('Add document type'),\n });\n\n onNotification(\n {ctx: 'admindocumenttypes', type: NotificationType.SUCCESS},\n props.notifications,\n () => {\n formDialog.clear();\n });\n\n const dataTable = useDataTable({\n data: props.documentTypes,\n className: 'e',\n columns: [{field: 'id', className: 'td-sm'}, 'name', 'description'],\n actions: [\n {icon: 'pencil', tooltip: t('Edit'), onClick: formDialog.showEdit},\n {icon: 'trash', tooltip: t('Delete'), onClick: setShowConfirmRemove}\n ]\n });\n\n const Header = () => {\n return
\n formDialog.showAdd()}>\n \n {t('Add')}\n \n
\n };\n\n return (
\n {loading.renderBox()}\n\n {showConfirmRemove && setShowConfirmRemove(undefined)}\n message={`${t('Are you sure to delete the element ?')} ${showConfirmRemove.name}`}\n rejectLabel={t('Cancel')}\n acceptLabel={t('Delete')}\n reject={() => setShowConfirmRemove(undefined)}\n accept={() => props.removeDocumentType(showConfirmRemove.id)} />}\n\n {formDialog.render((data: IDocumentType) =>\n )}\n\n {dataTable({\n header:
\n })}\n
);\n}","import * as React from 'react';\n\nimport { INotification } from '@models';\nimport {\n Accordion,\n AccordionTab,\n Chip,\n classNames,\n InputGroup,\n InputText,\n MultiSelect,\n NotificationsBox,\n ValidationBuilder,\n useForm,\n useTranslation,\n G,\n} from '@components';\n\nimport './UserForm.css';\n\nexport interface IUserFormData {\n id?: string;\n userName?: string;\n email?: string;\n password?: string;\n passwordConfirmation?: string;\n roles: string[];\n policies: string[];\n}\n\nexport interface IProps {\n availableRoles: string[];\n data: IUserFormData;\n footer?: any;\n notifications: INotification[];\n onChange: Function;\n onSubmit?: Function;\n saveUser?: Function;\n}\n\nexport const validateUser = (data: IUserFormData) => {\n return ValidationBuilder.create(data)\n .notEmpty('userName')\n .notEmpty('email')\n .notEmptyIf(data.id == undefined, 'password')\n .match('passwordConfirmation', data.password, 'Passwords do not match')\n .build();\n}\n\nexport const isValidUser = (data: IUserFormData) => {\n return Object.keys(validateUser(data)).length == 0;\n}\n\nfunction UserPolicies(props: any) {\n const { t } = useTranslation();\n const [newPolicy, setNewPolicy] = React.useState('');\n\n const addPolicy = (e: any) => {\n e.preventDefault();\n e.stopPropagation();\n\n if (newPolicy && newPolicy.trim() !== '') {\n props.data.policies.push(newPolicy);\n setNewPolicy('');\n }\n }\n\n const removePolicy = (policy: string) => {\n const i = props.data.policies.indexOf(policy);\n props.data.policies.splice(i);\n }\n\n return (
\n {t('Policies')}\n\n
\n {(props.data?.policies ?? [])\n .map((p: string, i: number) =>\n removePolicy(p)}>)}\n
\n\n
\n
\n setNewPolicy(e.target.value)}\n className='p-inputtext p-component' />\n \n \n \n
\n
\n );\n}\n\nexport function UserForm(props: IProps) {\n const { t } = useTranslation();\n\n const form = useForm({\n initialValues: {\n id: props.data?.id,\n userName: props.data?.userName ?? '',\n password: '',\n passwordConfirmation: '',\n email: props.data?.email ?? '',\n roles: props.data?.roles ?? [],\n policies: props.data?.policies ?? []\n },\n validate: validateUser,\n onSubmit: (data: IUserFormData) => {\n if (props.saveUser) {\n props.saveUser(data);\n }\n if (props.onSubmit) {\n props.onSubmit(data);\n }\n return { ok: true };\n },\n onChange: props.onChange,\n });\n\n return
\n
\n
\n
\n \n {form.input('userName', { autoFocus: true })}\n \n \n \n {form.input('email', { className: 'flat-right', type: 'email' })}\n \n \n\n { props.data?.id && \n \n {form.suffixField('password', 'lock', () =>\n )}\n\n {form.suffixField('passwordConfirmation', 'lock', () =>\n )}\n \n }\n\n {props.data?.id == undefined &&\n \n {form.suffixField('password', 'lock', () =>\n )}\n\n {form.suffixField('passwordConfirmation', 'lock', () =>\n )}\n }\n
\n
\n {!props.data?.roles.includes('contractor') &&\n <>\n {t(\"Roles\")}\n {form.field('roles', t('Roles'), () =>\n )}\n }\n \n
\n\n
\n {form.errorBox()}\n \n
\n
\n {props.footer != undefined &&
{props.footer}
}\n
\n
\n}\n","import * as React from 'react';\n\nimport { INotification, IRole, IUserIdentity, NotificationType } from '@models';\nimport {\n ButtonSet, Chip, Column, DataTable, Dialog, Loading,\n LoadingBox,\n useSearch,\n useTranslation,\n useKeyListener,\n} from '@components';\nimport { onNotification, usePaginator } from '@utils/hooks';\nimport { IUserFormData, UserForm, isValidUser } from './UserForm';\nimport { keyIsEnter } from '@utils/key-utils';\nimport \"./AdminUsers.scss\"\n\nexport interface IProps {\n saveUser: Function;\n loading: boolean;\n loadingMessage?: string;\n loadingNotifications: INotification[];\n notifications: INotification[];\n users: IUserIdentity[];\n roles: IRole[];\n removeUser: Function;\n}\n\ntype UserWithWorksR = IUserIdentity & {\n workNames?: string;\n}\n\nconst ADMIN = '1'\nconst GESTOR = '60'\nconst NOT_ALLOWED = [ADMIN, GESTOR]\n\nexport default function AdminUsers(props: IProps) {\n const { t } = useTranslation();\n\n const userWorks = useSearch({\n workId: 0,\n search: 'admin/users'\n });\n\n const [users, setUsers] = React.useState(props.users.filter(u => !/\\w+-remove-\\d+/.test(u.userName)));\n const [searchFilter, setSearchFilter] = React.useState('');\n const [showEditUser, setShowEditUser] = React.useState();\n const [showDeleteUser, setShowDeleteUser] = React.useState();\n const [showAdd, setShowAdd] = React.useState(false);\n const [addUserData, setAddUserData] = React.useState({\n roles: [], policies: [],\n });\n\n const searchCtrl = React.useRef();\n useKeyListener({\n key: 'f',\n keyCtrl: true,\n handle: () => {\n searchCtrl.current?.focus();\n },\n });\n\n\n\n const fillUsers = () => {\n if (searchFilter && searchFilter.trim() != '') {\n const term = searchFilter.toLowerCase();\n setUsers(pairUsers(props.users.filter(u =>\n u.userName.toLowerCase().includes(term)\n || u.email.toLowerCase().includes(term))));\n }\n else {\n setUsers(pairUsers(props.users));\n }\n }\n\n const pairUsers = (users: IUserIdentity[]) => {\n return users.map(u => {\n const works = userWorks.value.find(w => w.id === u.id);\n return { ...u, workNames: works?.workNames };\n })\n }\n\n React.useEffect(() => {\n\n if(props.users.length > 0 && userWorks.value.length > 0)\n {\n fillUsers();\n }\n }, [props.users, userWorks.value]);\n\n const doSearch = () => {\n fillUsers();\n }\n\n const loading = props.loadingNotifications.length > 0;\n\n const AddUserFooter = () => {\n return
\n \n \n setShowAdd(false)}>\n {t('Cancel')}\n \n \n {t('Save')}\n \n \n
\n }\n\n onNotification({ ctx: 'adminusers', type: NotificationType.SUCCESS },\n props.notifications,\n (n: INotification) => {\n if (n.action === 'edit') {\n setShowEditUser(undefined);\n }\n else if (n.action === 'add') {\n setShowAdd(false);\n }\n });\n\n const EditUserFooter = () => {\n return
\n \n \n setShowEditUser(undefined)}>\n {t('Cancel')}\n \n \n {t('Save')}\n \n \n
\n }\n\n return
\n {loading && }\n {props.loading && }\n\n
\n keyIsEnter(e) ? doSearch() : undefined}\n onChange={e => setSearchFilter(e.target.value)}\n onBlur={_ => doSearch()}\n placeholder={t('Search')} />\n Ctrl+F\n setShowAdd(true)}>\n \n {t('Add user')}\n \n
\n\n \n \n \n \n
\n {d.roles.map((r: string, i: number) =>\n )}\n
} />\n
\n {d.policies.map((r: string, i: number) =>\n )}\n
} />\n d.workNames} />\n setShowEditUser(u)}\n className='pi pi-user-edit pointer' />} />\n setShowEditUser(u)}\n className='pi pi-cog pointer' />} />\n setShowEditUser(u)}\n className='pi pi-list pointer' />} />\n setShowDeleteUser(u)}\n className='pi pi-trash pointer' />}\n />\n \n\n {showAdd && setShowAdd(false)}>\n r.name).filter(r => r != 'contractor')}\n data={addUserData}\n footer={}\n notifications={props.notifications.filter(a => a.action === 'add')}\n onChange={setAddUserData}\n onSubmit={(data: IUserFormData) => props.saveUser(data)} />\n }\n\n {showEditUser && setShowEditUser(undefined)}>\n r.name).filter(r => r != 'contractor')}\n data={showEditUser}\n footer={}\n notifications={props.notifications.filter(a => a.action === 'edit')}\n onChange={setShowEditUser}\n onSubmit={(data: IUserFormData) => props.saveUser(data)} />\n }\n\n {showDeleteUser && setShowDeleteUser(undefined)}>\n
\n
\n

{NOT_ALLOWED.includes(showDeleteUser.id!.toString()) ? t('remove.user.not_allowed.text') : t('remove.user.confirm.text')}

\n
\n \n setShowDeleteUser(undefined)}>\n {t('Cancel')}\n \n {!NOT_ALLOWED.includes(showDeleteUser.id!.toString()) && {\n setShowDeleteUser(undefined);\n props.removeUser(+showDeleteUser.id!);\n }}>\n {t('Delete')}\n }\n \n
\n }\n
\n}\n","import { connect } from 'react-redux';\n\nimport { ApplicationState } from '../../store';\nimport * as Admin from '@store/admin';\nimport * as App from '@store/app';\n\nimport AdminUsers, { IProps } from '@components/admin/AdminUsers';\nimport { NotificationType } from '@models';\n\nexport default connect(\n (state: ApplicationState) => ({\n users: state.admin.users,\n roles: state.admin.roles,\n notifications: state.notifications.notifications\n .filter(n => n.ctx === 'adminusers'),\n loadingNotifications: state.notifications.notifications\n .filter(n => n.ctx === 'adminusers' && n.type === NotificationType.LOADING),\n loading: state.app.loading,\n loadingMessage: state.app.loadingMessage\n }),\n Admin.actionCreators,\n)(AdminUsers as any) as any; // eslint-disable-line @typescript-eslint/no-explicit-any\n","import { connect } from 'react-redux';\nimport { ApplicationState } from '../../store';\nimport * as Admin from '../../store/admin';\nimport * as App from '../../store/app';\n\nimport { AdminLoader, IProps } from '../../components/admin/AdminLoader';\n\ntype Props =\n Admin.IAdminState &\n App.IAppState &\n IProps;\n\nexport default connect(\n (state: ApplicationState) => ({\n users: state.admin.users,\n loading: state.app.loading,\n loadingMessage: state.app.loadingMessage\n }),\n Admin.actionCreators,\n)(AdminLoader as any) as any; // eslint-disable-line @typescript-eslint/no-explicit-any\n","import * as React from 'react';\n\nimport { LoadingBox } from '@components';\nimport { IUserIdentity } from '@models';\n\nexport interface IProps {\n children: any;\n loading: boolean;\n loadingMessage: string;\n users: IUserIdentity[];\n //\n initialize: Function;\n}\n\nexport function AdminLoader(props: IProps) {\n React.useEffect(() => {\n if (props.users.length === 0) {\n props.initialize();\n }\n }, []);\n\n if (props.loading) {\n return \n }\n else {\n return props.children;\n }\n}","import * as React from 'react';\n\nimport { BreadCrumb, useTranslation } from '@components';\nimport { redirectTo } from '@utils';\n\nconst createItems = (url: string, t: Function) => {\n const items = [];\n\n if (url.startsWith('/admin/configuration')) {\n items.push({\n label: t('Configuration'),\n command: () => redirectTo('/admin/configuration')\n });\n }\n else if (url.startsWith('/admin/works')) {\n items.push({\n label: t('Works'),\n command: () => redirectTo('/admin/works')\n });\n }\n else if (url.startsWith('/admin/users')) {\n items.push({\n label: t('Users'),\n command: () => redirectTo('/admin/users')\n });\n }\n else if (url.startsWith('/admin/work/')) {\n items.push({\n label: t('Works'),\n command: () => redirectTo('/admin/works')\n });\n const id = url.split('/admin/work/')[1].split('/')[0];\n items.push({\n label: `${t('Work')} ${id}`,\n command: () => redirectTo(`/admin/work/${id}`)\n });\n if (url.includes('permissions')) {\n items.push({\n label: t('Permissions'),\n command: () => redirectTo(`/admin/work/${id}/permissions`)\n });\n }\n if (url.includes('/configuration')) {\n items.push({\n label: t('Configuration'),\n command: () => redirectTo(`/admin/work/${id}/configuration`)\n });\n }\n }\n\n return items;\n}\n\nexport default function AdminRoutesWrapper(props: any) {\n const [items, setItems] = React.useState([]);\n const { t } = useTranslation();\n\n React.useEffect(() => {\n if (props.location) {\n setItems(createItems(props.location.pathname, t));\n }\n }, [props.location]);\n\n const home = {\n icon: 'pi pi-home',\n command: () => redirectTo('/'),\n };\n\n return
\n
\n {items.length > 0 &&\n }\n
\n \n \n
\n {props.children}\n
;\n}","import * as React from 'react';\nimport { connect } from 'react-redux';\nimport { ApplicationState } from '../../store';\nimport * as Admin from '../../store/admin';\n\nimport { IWork } from '../../models';\nimport { Loading } from '../../components';\n\nconst Loader = (props: any) => {\n const [work, setWork] = React.useState();\n const [loading, setLoading] = React.useState(true);\n\n const loadWork = () => {\n const id = props.match.params.id;\n const w = props.works.find((x: IWork) => x.id == id);\n if (w) {\n setWork(w);\n setLoading(false);\n }\n else {\n props.loadWorks();\n props.selectWork(parseInt(id));\n }\n }\n\n React.useEffect(() => {\n if (!work || work.id != props.id) {\n loadWork();\n }\n }, [props.workId, props.works]);\n\n if (loading) {\n return ;\n }\n else {\n return React.cloneElement(props.children, { work: work });\n }\n}\n\nexport default connect(\n (state: ApplicationState) => ({\n works: state.admin.works,\n }),\n Admin.actionCreators,\n)(Loader as any) as any; // eslint-disable-line @typescript-eslint/no-explicit-any\n","import * as React from 'react';\n\nimport { IConstants, IWorkspace, countriesToNode, IPropertyGroupType, PropertyGroupObjectType } from '@models';\nimport {\n G,\n TreeSelect,\n useForm,\n useTranslation,\n ValidationBuilder\n} from '@components';\nimport { DynamicProperties } from '@components/user/DynamicProperties';\n\nexport interface IProps {\n propertyGroupTypes: IPropertyGroupType[];\n data?: IWorkspace;\n footer?: any;\n onChange?: Function;\n onSubmit: Function;\n workId: number;\n constants: IConstants;\n}\n\nexport const validateWorkspace = (data: any) => {\n return ValidationBuilder.create(data)\n .notEmpty('name', 'Name is required')\n .build();\n}\n\nexport const isValid = (data: IWorkspace) => {\n return Object.keys(validateWorkspace(data)).length == 0;\n}\n\nconst getSelectedNodes = (w: IWorkspace|undefined) =>\n w ? [w.countryId, w.regionId, w.countyId].filter(d => d != undefined)\n : undefined;\n\nexport function WorkspaceForm(props: IProps) {\n const { t } = useTranslation();\n const countryNodes = countriesToNode(props.constants.countries);\n\n const [selectedRegionNode, setSelectedRegionNode] =\n React.useState(getSelectedNodes(props.data));\n\n const onSelectedRegionNodeChanged = (ev: any) => {\n setSelectedRegionNode(ev.value);\n const [countryId, regionId, countyId] =\n ev.value\n .concat([undefined, undefined, undefined])\n .slice(0, 3);\n\n form.setFieldValue('countryId', countryId);\n form.setFieldValue('regionId', regionId);\n form.setFieldValue('countyId', countyId);\n }\n\n const form = useForm>({\n initialValues: {\n description: props.data?.description ?? '',\n id: props.data?.id ?? 0,\n isActive: true,\n name: props.data?.name ?? '',\n workId: props.workId,\n countryId: props.data?.countryId,\n countyId: props.data?.countyId,\n regionId: props.data?.regionId,\n\n contact: props.data?.contact ?? '',\n address: props.data?.address ?? '',\n location: props.data?.location ?? '',\n postalCode: props.data?.postalCode ?? '',\n phone: props.data?.phone ?? '',\n fax: props.data?.fax ?? '',\n email: props.data?.email ?? '',\n properties: props.data?.properties,\n },\n validate: validateWorkspace,\n onSubmit: (data: IWorkspace) => {\n props.onSubmit(data);\n return { ok: true };\n },\n onChange: props.onChange,\n });\n\n React.useEffect(() => {\n form.setFieldValue('properties', props.data?.properties);\n }, [props.data]);\n\n return
\n
\n
\n \n {form.input('name', { autoFocus: true })}\n \n \n {form.input('description')}\n \n \n \n \n {/* CAMPOS NUEVOS */}\n \n {form.input('contact')}\n \n \n {form.input('address')}\n \n \n {form.input('location')}\n \n \n {form.input('postalCode')}\n \n \n {form.input('phone')}\n \n \n {form.input('fax')}\n \n \n {form.input('email')}\n \n {\n form.setFieldValue('properties', props);\n }}\n objectType={PropertyGroupObjectType.Workspace}\n propertyGroupTypes={props.propertyGroupTypes} />\n
\n
\n {form.errorBox()}\n
\n\n {props.footer != undefined &&
{props.footer}
}\n
\n
\n}","import * as React from 'react';\n\nimport * as Actions from '@store/actions/admin';\nimport {\n Column, ConfirmDialog, DataTable, Dialog, Loading, Message, useMemoized, useTranslation,\n} from '@components';\nimport { IConstants, IWork, IWorkspace } from '@models';\nimport { getGraphqlError } from '@utils';\nimport { WorkspaceForm } from './WorkspaceForm';\nimport { isWorkspacePropertyGroupType } from '@models/works';\n\nexport interface IProps {\n work: IWork;\n constants: IConstants;\n}\n\nexport function AdminWorkWorkspaces(props: IProps) {\n const { t } = useTranslation();\n const [error, setError] = React.useState();\n const [loading, setLoading] = React.useState(false);\n const [workspaces, setWorkspaces] = React.useState(\n props.work.workspaces ?? []\n );\n\n // add\n const [showAdd, setShowAdd] = React.useState(false);\n // edit\n const [showEdit, setShowEdit] = React.useState();\n // remove\n const [showConfirmRemove, setShowConfirmRemove] = React.useState();\n\n const formatWorkspaceRegions = useMemoized((countryId: number, regionId: number, countyId: number) => {\n const country = props.constants.countries.find(c => c.id == countryId);\n const region = country?.regions.find(r => r.id == regionId);\n const county = region?.counties.find(c => c.id == countyId);\n\n return [country, region, county]\n .filter(d => d != undefined)\n .map(d => d!.name)\n .join(', ');\n });\n\n const loadWorkspaces = async (workId: number) => {\n setLoading(true);\n\n const w = await Actions.getWork(workId);\n const workspaces = w.data.work.workspaces;\n setWorkspaces(workspaces);\n\n if (showEdit) {\n const currentWorkspace = workspaces.find((w: IWorkspace) => w.id == showEdit.id);\n setShowEdit(currentWorkspace);\n }\n\n setLoading(false);\n }\n const removeWorkspace = async (id: number) => {\n setLoading(true);\n setError(undefined);\n\n const resp = await Actions.removeWorkspace(id);\n if (resp.data.removeWorkspace?.value) {\n await loadWorkspaces(props.work.id);\n }\n else {\n setError(getGraphqlError(resp, 'removeWorkspace'));\n }\n setShowConfirmRemove(undefined);\n setLoading(false);\n }\n const saveWorkspace = async (w: IWorkspace) => {\n setLoading(true);\n await Actions.saveWorkspace(w);\n await loadWorkspaces(props.work.id);\n setShowAdd(false);\n setShowEdit(undefined);\n setLoading(false);\n }\n\n const AddEditFooter = (p: any) => {\n return
\n {error && }\n \n {loading && }\n
\n p.edit ? setShowEdit(undefined) : setShowAdd(false)}>\n {t('Cancel')}\n \n \n {t('Save')}\n \n
\n
\n }\n\n const ListFooter = (p: any) => {\n return
\n {error && }\n \n \n \n
\n }\n\n const propertyGroupTypes =\n props.work?.propertyGroupTypes?.filter(isWorkspacePropertyGroupType) ?? [];\n\n return (
\n {showAdd && setShowAdd(false)}\n visible>\n }\n onSubmit={(d: IWorkspace) => saveWorkspace(d)}\n workId={props.work.id} />\n }\n\n {showEdit && setShowEdit(undefined)}\n visible>\n }\n onSubmit={(d: IWorkspace) => saveWorkspace(d)}\n workId={props.work.id} />\n }\n\n {showConfirmRemove && setShowConfirmRemove(undefined)}\n message={`${t('Are you sure to delete the element ?')} ${showConfirmRemove.name}`}\n rejectLabel={t('Cancel')}\n acceptLabel={t('Delete')}\n reject={() => setShowConfirmRemove(undefined)}\n accept={() => removeWorkspace(showConfirmRemove.id)} />}\n\n \n \n \n \n formatWorkspaceRegions(d.countryId, d.regionId, d.countyId)} />\n \n setShowEdit(d)} />} />\n \n setShowConfirmRemove(d)} />} />\n \n\n \n \n
);\n}","import * as React from 'react';\n\nimport { IWorkShift } from '@models';\nimport {\n G,\n useForm,\n useTranslation,\n ValidationBuilder\n} from '@components';\nimport { formatMinutes, timeToMinutes } from '@utils';\n\nexport interface IProps {\n data?: IWorkShift;\n footer?: any;\n onChange?: Function;\n onSubmit: Function;\n workId: number;\n}\n\nexport const validateWorkShift = (data: any) => {\n return ValidationBuilder.create(data)\n .notEmpty('name', 'Name is required')\n .notEmpty('startMinutes', 'Value is required')\n .notEmpty('endMinutes', 'Value is required')\n .build();\n}\n\nexport const isValid = (data: IWorkShift) => {\n return Object.keys(validateWorkShift(data)).length == 0;\n}\n\nconst convert = (data: IWorkShift) => {\n return {\n ...data,\n startMinutes: timeToMinutes(data.startMinutes),\n endMinutes: timeToMinutes(data.endMinutes)\n };\n}\n\nexport function WorkShiftForm(props: IProps) {\n const { t } = useTranslation();\n\n const form = useForm>({\n initialValues: {\n id: props.data?.id ?? 0,\n name: props.data?.name ?? '',\n workId: props.workId,\n startMinutes: formatMinutes(props.data?.startMinutes ?? 0),\n endMinutes: formatMinutes(props.data?.endMinutes ?? 0),\n },\n validate: validateWorkShift,\n onSubmit: (data: IWorkShift) => {\n props.onSubmit(convert(data));\n return { ok: true };\n },\n onChange: props.onChange,\n });\n\n return
\n
\n
\n \n {form.input('name', { autoFocus: true })}\n \n \n {form.input('startMinutes', { type: 'time' })}\n \n \n {form.input('endMinutes', { type: 'time' })}\n \n
\n
\n {form.errorBox()}\n
\n\n {props.footer != undefined &&
{props.footer}
}\n
\n
\n}","import * as React from 'react';\n\nimport * as Actions from '@store/actions/admin';\nimport {\n Column, ConfirmDialog, DataTable, Dialog, Loading, Message, useTranslation,\n} from '@components';\nimport { IWork, IWorkShift } from '@models';\nimport { formatMinutes, getGraphqlError } from '@utils';\nimport { WorkShiftForm } from './WorkShiftForm';\n\nexport interface IProps {\n work: IWork;\n}\n\nexport function AdminWorkShifts(props: IProps) {\n const { t } = useTranslation();\n const [error, setError] = React.useState();\n const [loading, setLoading] = React.useState(false);\n const [workShifts, setWorkShifts] = React.useState(\n props.work.workShifts ?? []\n );\n\n // add\n const [showAdd, setShowAdd] = React.useState(false);\n // edit\n const [showEdit, setShowEdit] = React.useState();\n // remove\n const [showConfirmRemove, setShowConfirmRemove] = React.useState();\n\n const loadShifts = async (workId: number) => {\n setLoading(true);\n\n const w = await Actions.getWork(workId);\n setWorkShifts(w.data.work.workShifts);\n\n setLoading(false);\n }\n\n const removeWorkShift = async (id: number) => {\n setLoading(true);\n setError(undefined);\n\n const resp = await Actions.removeWorkShift(id);\n if (resp.data.removeWorkShift?.value) {\n await loadShifts(props.work.id);\n }\n else {\n setError(getGraphqlError(resp, 'removeWorkShift'));\n }\n setShowConfirmRemove(undefined);\n setLoading(false);\n }\n\n const saveWorkShift = async (data: IWorkShift) => {\n setLoading(true);\n setError(undefined);\n\n const resp = await Actions.saveWorkShift(data);\n if (!resp.data.saveWorkShift.isError) {\n await loadShifts(props.work.id);\n setShowAdd(false);\n setShowEdit(undefined);\n }\n else {\n setError(getGraphqlError(resp));\n }\n\n setLoading(false);\n }\n\n const AddEditFooter = (p: any) => {\n return
\n {error && }\n \n {loading && }\n
\n p.edit ? setShowEdit(undefined) : setShowAdd(false)}>\n {t('Cancel')}\n \n \n {t('Save')}\n \n
\n
\n }\n\n const ListFooter = (p: any) => {\n return
\n {error && }\n \n\n \n \n
\n }\n\n return (
\n {showAdd && setShowAdd(false)}\n visible>\n }\n onSubmit={(d: IWorkShift) => saveWorkShift(d)}\n workId={props.work.id} />\n }\n\n {showEdit && setShowEdit(undefined)}\n visible>\n }\n onSubmit={(d: IWorkShift) => saveWorkShift(d)}\n workId={props.work.id} />\n }\n\n {showConfirmRemove && setShowConfirmRemove(undefined)}\n message={
{`${t('Are you sure to delete the element ?')} ${showConfirmRemove.name}`}
}\n rejectLabel={t('Cancel')}\n acceptLabel={t('Delete')}\n reject={() => setShowConfirmRemove(undefined)}\n accept={() => removeWorkShift(showConfirmRemove.id)} />}\n\n \n \n \n formatMinutes(d.startMinutes)}\n className='center' />\n formatMinutes(d.endMinutes)}\n className='center' />\n \n setShowEdit(d)} />} />\n \n setShowConfirmRemove(d)} />} />\n \n\n \n \n
);\n}\n","import * as React from 'react';\n\nimport { ICountry, INotification, IWork } from '@models';\nimport {\n G,\n NotificationsBox,\n useForm,\n useTranslation,\n ValidationBuilder\n} from '@components';\n\nimport './WorkForm.css';\n\nexport interface IProps {\n countries: ICountry[];\n data: IWork;\n footer?: any;\n notifications: INotification[];\n onChange: Function;\n onSubmit: Function;\n}\n\nexport const validateWork = (data: IWork) => {\n return ValidationBuilder.create(data)\n .notEmpty('name', 'Name is required')\n .notEmpty('countryId', 'Country is required')\n .build();\n}\n\nexport const isValid = (data: IWork) => {\n return Object.keys(validateWork(data)).length == 0;\n}\n\nconst prepareData = (work: IWork) => {\n return {\n id: work.id,\n name: work.name,\n description: work.description,\n countryId: work.countryId,\n }\n}\n\nexport function WorkForm(props: IProps) {\n const { t } = useTranslation();\n\n const form = useForm({\n initialValues: {\n id: props.data?.id ?? 0,\n name: props.data?.name ?? '',\n description: props.data?.description ?? '',\n settings: props.data?.settings ?? '',\n countryId: props.data?.countryId ?? 0,\n permissions: [],\n users: [],\n workspaces: [],\n workShifts: [],\n legalForms: [],\n },\n validate: validateWork,\n onSubmit: (data: IWork) => {\n props.onSubmit(prepareData(data));\n return { ok: true };\n },\n onChange: props.onChange,\n });\n\n return
\n
\n
\n \n {form.input('name')}\n \n \n {form.input('description')}\n \n \n {form.select('countryId', props.countries)}\n \n
\n
\n {form.errorBox()}\n \n
\n\n {props.footer != undefined && props.footer}\n
\n
\n}\n","import * as React from 'react';\n\nimport { MultiSelect, useTranslation } from '@components';\nimport { INotification, IWork, NotificationType } from '@models';\nimport { IUserData } from '@models/identity';\nimport { onNotification } from '@utils/hooks';\n\nexport interface IProps {\n notifications: INotification[];\n onCancel: Function;\n users: IUserData[];\n saveWork: Function;\n work: IWork;\n}\n\nconst createUserInput = (u: IUserData) => ({\n id: u.id!,\n userName: u.userName,\n});\n\nconst createWorkInput = (w: IWork) => ({\n id: w.id,\n name: w.name,\n description: w.description,\n countryId: w.countryId\n})\n\nexport function AdminWorkUsers(props: IProps) {\n const { t } = useTranslation();\n\n const [selectedUsers, setSelectedUsers] = React.useState(\n props.work.users.map(u => u.id));\n\n const [loading, setLoading] = React.useState(false);\n\n onNotification({type: NotificationType.SUCCESS, ctx: 'adminworkusers'}, props.notifications, () => {\n setLoading(false);\n });\n\n const save = () => {\n const users = props.users\n .filter(u => selectedUsers.indexOf(u.id!) >= 0)\n .map(createUserInput);\n props.saveWork({...createWorkInput(props.work), users }, {ctx: 'adminworkusers'});\n }\n\n return
\n setSelectedUsers(e.value)}\n filter={true}\n options={props.users}\n optionLabel={'userName'}\n optionValue={'id'} />\n\n
\n
\n
\n \n props?.onCancel()}\n disabled={loading}>\n {t('Cancel')}\n \n \n {t('Save')}\n \n \n
\n
\n
\n}\n","import { connect } from 'react-redux';\nimport { ApplicationState } from '../../store';\nimport * as Admin from '../../store/admin';\nimport * as App from '../../store/app';\n\nimport { AdminWorkUsers, IProps } from '../../components/admin/AdminWorkUsers';\nimport { NotificationType } from '../../models';\n\ntype Props =\n Admin.IAdminState &\n App.IAppState &\n IProps;\n\nexport default connect(\n (state: ApplicationState) => ({\n users: state.admin.users,\n notifications: state.notifications.notifications\n .filter(n => n.ctx === 'adminworkusers'),\n loadingNotifications: state.notifications.notifications\n .filter(n => n.ctx === 'adminworkusers' && n.type === NotificationType.LOADING),\n loading: state.app.loading,\n loadingMessage: state.app.loadingMessage\n }),\n Admin.actionCreators,\n)(AdminWorkUsers as any) as any; // eslint-disable-line @typescript-eslint/no-explicit-any\n","import * as React from 'react';\n\nimport { INotification, IWorkI18NResource } from '@models';\nimport {\n NotificationsBox,\n useForm,\n useTranslation,\n ValidationBuilder,\n G,\n} from '@components';\nimport { defaultLanguage, languages } from '../../i18n';\n\nimport './WorkForm.css';\n\nexport interface IProps {\n data?: IWorkI18NResource;\n workId: number;\n footer?: any;\n notifications: INotification[];\n onChange?: Function;\n onSubmit: Function;\n}\n\nexport const validateI18NResource = (data: IWorkI18NResource) => {\n return ValidationBuilder.create(data)\n .notEmpty('name')\n .notEmpty('value')\n .build();\n}\n\nexport const isValid = (data: IWorkI18NResource) => {\n return Object.keys(validateI18NResource(data)).length == 0;\n}\n\nimport I18nResources from '../../i18n/es.json';\n\nexport function WorkI18NResourceForm(props: IProps){\n const { t } = useTranslation();\n\n const form = useForm({\n initialValues: {\n id: props.data?.id ?? 0,\n language: props.data?.language ?? defaultLanguage,\n name: props.data?.name ?? '',\n value: props.data?.value ?? '',\n workId: props.workId,\n },\n validate: validateI18NResource,\n onSubmit: (data: IWorkI18NResource) => {\n props.onSubmit(data);\n return { ok: true };\n },\n onChange: props.onChange,\n });\n\n const keys = Object.keys(I18nResources);\n\n return
\n
\n
\n \n {form.select('language', languages)}\n \n \n {form.autoComplete('name', { suggestions: keys })}\n \n \n {form.input('value')}\n \n
\n
\n {form.errorBox()}\n \n
\n {props.footer != undefined && props.footer}\n
\n
\n}","import * as React from 'react';\n\nimport {\n ConfirmDialog, Message, useDataTable, useFormDialog, useLoading, useTranslation\n} from '@components';\nimport { IWorkI18NResource } from '@models/resources';\nimport * as Actions from '@store/actions/resources';\nimport { WorkI18NResourceForm } from './WorkI18NResourceForm';\n\nexport interface IProps {\n workId: number;\n}\n\nexport function AdminWorkI18NResources(props: IProps) {\n const { t } = useTranslation();\n\n const [error, setError] = React.useState();\n const loading = useLoading(true);\n const [workI18NResources, setWorkI18NResources] = React.useState([]);\n const formDialog = useFormDialog({\n editTitle: t('Edit internationalization'),\n addTitle: t('Add internationalization'),\n });\n const [showConfirmRemove, setShowConfirmRemove] = React.useState();\n\n const initialize = loading.wrap(async () => {\n const res = await Actions.getWorkI18NResources(props.workId);\n\n setWorkI18NResources(res.data.work.workI18NResources)\n });\n\n React.useEffect(() => {\n initialize();\n }, []);\n\n const saveWorkI18NResource = async (w: IWorkI18NResource) => {\n\n await Actions.saveWorkI18NResource(w);\n await initialize();\n\n formDialog.clear();\n }\n\n const removeWorkI18NResource = async (id: number, workId: number) => {\n setError(undefined);\n\n workId = props.workId;\n await Actions.removeWorkI18NResource(id, workId);\n await initialize();\n\n formDialog.clear();\n }\n\n const dataTable = useDataTable({\n loading,\n data: workI18NResources,\n scrollable: true,\n tableStyle: { maxHeight: '300px' },\n scrollHeight: '300px',\n className: 'e',\n columns: [\n {field: 'language', title: 'Language', className: 'td-sm'},\n 'name',\n 'value'\n ],\n actions: [\n {icon: 'pencil', tooltip: t('Edit'), onClick: formDialog.showEdit, bodyClassName: 'td-sm'},\n {icon: 'trash', tooltip: t('Delete'), onClick: setShowConfirmRemove, bodyClassName: 'td-sm'},\n ],\n });\n\n return
\n {showConfirmRemove && setShowConfirmRemove(undefined)}\n message={`${t('Are you sure to delete the element ?')} ${showConfirmRemove.name}`}\n rejectLabel={t('Cancel')}\n acceptLabel={t('Delete')}\n reject={() => setShowConfirmRemove(undefined)}\n accept={() => removeWorkI18NResource(showConfirmRemove.id, showConfirmRemove.workId)} />}\n\n {formDialog.render((data:IWorkI18NResource) =>\n )}\n\n {dataTable()}\n\n
\n {error && }\n \n \n
\n
\n\n}","import * as React from 'react';\n\nimport { INotification, IActivityType } from '@models';\nimport {\n classNames,\n InputText,\n NotificationsBox,\n useForm,\n useTranslation,\n ValidationBuilder,\n} from '@components';\n\nimport './WorkForm.css';\n\nexport interface IProps {\n data?: IActivityType;\n workId: number;\n footer?: any;\n notifications: INotification[];\n onChange?: Function;\n onSubmit: Function;\n}\n\nexport const validateActivity = (data: IActivityType) => {\n return ValidationBuilder.create(data).notEmpty('name').build();\n}\n\nexport const isValid = (data: IActivityType) => {\n return Object.keys(validateActivity(data)).length == 0;\n}\n\nexport function ActivityTypeForm(props: IProps) {\n const { t } = useTranslation();\n\n const form = useForm({\n initialValues: {\n id: props.data?.id ?? 0,\n name: props.data?.name ?? '',\n workId: props.workId,\n },\n validate: validateActivity,\n onSubmit: (data: IActivityType) => {\n props.onSubmit(data);\n return {ok: true};\n },\n onChange: props.onChange,\n });\n\n return
\n
\n
\n {form.floatField('name', t('Name'), () =>\n )}\n
\n
\n {form.errorBox()}\n \n
\n {props.footer != undefined && props.footer}\n
\n
\n}","import * as React from 'react';\n\nimport {\n ConfirmDialog, Message, useDataTable, useFormDialog, useLoading, useTranslation\n} from '@components';\nimport { IActivityType } from '@models/resources';\nimport * as Actions from '@store/actions/resources';\nimport { ActivityTypeForm } from './ActivityTypeForm';\n\nexport interface IProps {\n workId: number;\n}\n\nexport function AdminActivityType(props: IProps) {\n const { t } = useTranslation();\n\n const [error, setError] = React.useState();\n const [activities, setActivities] = React.useState([]);\n const loading = useLoading(true);\n const formDialog = useFormDialog({\n editTitle: t('Edit activity'),\n addTitle: t('Add activity'),\n });\n const [showConfirmRemove, setShowConfirmRemove] = React.useState();\n\n const initialize = loading.wrap(async () => {\n const res = await Actions.getActivities(props.workId);\n\n setActivities(res.data.work.activities)\n });\n\n React.useEffect(() => {\n initialize();\n }, []);\n\n const saveActivity = loading.wrap(async (w: IActivityType) => {\n await Actions.saveActivity(w);\n await initialize();\n\n formDialog.clear();\n });\n\n const removeActivity = loading.wrap(async (id: number, workId: number) => {\n setError(undefined);\n\n workId = props.workId;\n await Actions.removeActivity(id, workId);\n await initialize();\n\n formDialog.clear();\n });\n\n const dataTable = useDataTable({\n data: activities,\n className: 'e',\n loading,\n columns: [{ field: 'id', className: 'td-sm' }, 'name'],\n actions: [\n { icon: 'pencil', tooltip: t('Edit'), onClick: formDialog.showEdit },\n { icon: 'trash', tooltip: t('Delete'), onClick: setShowConfirmRemove }\n ]\n });\n\n return
\n {showConfirmRemove && setShowConfirmRemove(undefined)}\n message={`${t('Are you sure to delete the element ?')} ${showConfirmRemove.name}`}\n rejectLabel={t('Cancel')}\n acceptLabel={t('Delete')}\n reject={() => setShowConfirmRemove(undefined)}\n accept={() => removeActivity(showConfirmRemove.id, showConfirmRemove.workId)} />}\n\n {formDialog.render((data: IActivityType) =>\n )}\n\n {dataTable()}\n\n
\n {error && }\n \n \n
\n
\n\n}","import * as React from 'react';\n\nimport { INotification, ILegalForm } from '@models';\nimport {\n classNames,\n InputText,\n NotificationsBox,\n useForm,\n useTranslation,\n ValidationBuilder,\n} from '@components';\n\nimport './WorkForm.css';\nimport { IWorkerType } from '@models/resources';\n\nexport interface IProps {\n data?: ILegalForm;\n workId: number;\n footer?: any;\n notifications: INotification[];\n onChange?: Function;\n onSubmit: Function;\n workerTypes: IWorkerType[];\n}\n\nexport const validateLegalForm = (data: ILegalForm) => {\n return ValidationBuilder.create(data)\n .notEmpty('name')\n .build();\n}\n\nexport const isValid = (data: ILegalForm) => {\n return Object.keys(validateLegalForm(data)).length == 0;\n}\n\nexport interface IWorkerTypeWithSelected extends ILegalForm {\n workerTypesReal: number[];\n};\n\nexport function LegalFormForm(props: IProps) {\n const { t } = useTranslation();\n\n const form = useForm({\n initialValues: {\n id: props.data?.id ?? 0,\n name: props.data?.name ?? '',\n workId: props.workId,\n workerTypesReal: props.data?.workerTypes?.map(wt => wt.workerType.id) ?? [],\n hideContractorProperties: props.data?.hideContractorProperties ?? false,\n },\n validate: validateLegalForm,\n onSubmit: () => {\n const data = getLegalForm();\n props.onSubmit(data);\n return { ok: true };\n },\n onChange: props.onChange,\n });\n\n const getLegalForm = () => {\n return {\n id: props.data?.id ?? 0,\n name: form.values.name,\n workId: props.workId,\n workerTypes: props.workerTypes.filter(wt => form.values.workerTypesReal.includes(wt.id)).map(wt => ({\n workerTypeId: wt.id,\n })),\n hideContractorProperties: form.values.hideContractorProperties,\n }\n }\n\n return
\n
\n
\n {form.floatField('name', t('Name'), () =>\n )}\n\n {form.multiselect('workerTypesReal', props.workerTypes, true)}\n
\n {form.checkBox('hideContractorProperties')}\n \n
\n
\n
\n {form.errorBox()}\n \n
\n {props.footer != undefined && props.footer}\n
\n
\n}","import * as React from 'react';\n\nimport {\n ConfirmDialog, Message, useDataTable, useFormDialog, useLoading, useTranslation\n} from '@components';\nimport { ILegalForm } from '@models/resources';\nimport * as Actions from '@store/actions/resources';\nimport { LegalFormForm } from './LegalFormForm';\n\nexport interface IProps {\n workId: number;\n}\n\nexport function AdminLegalForm(props: IProps) {\n const { t } = useTranslation();\n\n const [error, setError] = React.useState();\n const [legalForms, setLegalForms] = React.useState([]);\n const [workerTypes, setWorkerTypes] = React.useState([]);\n const loading = useLoading(true);\n const formDialog = useFormDialog({\n editTitle: t('Edit legal form'),\n addTitle: t('Add legal form'),\n });\n const [showConfirmRemove, setShowConfirmRemove] = React.useState();\n\n const initialize = loading.wrap(async () => {\n const res = await Actions.getLegalForms(props.workId);\n const workerTypes = await Actions.getWorkerTypes(props.workId);\n\n setLegalForms(res.data.work.legalForms);\n setWorkerTypes(workerTypes.data.work.workerTypes);\n });\n\n React.useEffect(() => {\n initialize();\n }, []);\n\n const saveLegalForm = loading.wrap(async (w: ILegalForm) => {\n await Actions.saveLegalForm(w);\n await initialize();\n\n formDialog.clear();\n });\n\n const removeLegalForm = loading.wrap(async (id: number, workId: number) => {\n setError(undefined);\n\n workId = props.workId;\n await Actions.removeLegalForm(id, workId);\n await initialize();\n\n formDialog.clear();\n });\n\n const dataTable = useDataTable({\n data: legalForms,\n loading,\n className: 'e',\n columns: [\n { field: 'id', className: 'td-sm' },\n 'name',\n { field: 'workerTypes', render: (w: ILegalForm) => w.workerTypes?.map(wt => wt.workerType.name).join(', '), title: t('Worker types') },\n {\n field: 'hideContractorProperties', title: t('hideContractorProperties'), render: (l: ILegalForm) => {\n if (l.hideContractorProperties) {\n return
\n \n
\n }\n return
\n \n
\n }\n }\n ],\n actions: [\n { icon: 'pencil', tooltip: t('Edit'), onClick: formDialog.showEdit },\n { icon: 'trash', tooltip: t('Delete'), onClick: setShowConfirmRemove }\n ]\n });\n\n return
\n {showConfirmRemove && setShowConfirmRemove(undefined)}\n message={`${t('Are you sure to delete the element ?')} ${showConfirmRemove.name}`}\n rejectLabel={t('Cancel')}\n acceptLabel={t('Delete')}\n reject={() => setShowConfirmRemove(undefined)}\n accept={() => removeLegalForm(showConfirmRemove.id, showConfirmRemove.workId)} />}\n\n {formDialog.render((data: ILegalForm) =>\n )}\n\n {dataTable()}\n\n
\n {error && }\n \n \n
\n
\n}","import * as React from 'react';\n\nimport { INotification, IWorkFunction } from '@models';\nimport {\n classNames,\n InputText,\n NotificationsBox,\n useForm,\n useTranslation,\n ValidationBuilder,\n} from '@components';\n\nimport './WorkForm.css';\n\nexport interface IProps {\n data?: IWorkFunction;\n workId: number;\n footer?: any;\n notifications: INotification[];\n onChange?: Function;\n onSubmit: Function;\n}\n\nexport const validateWorkFunction = (data: IWorkFunction) => {\n return ValidationBuilder.create(data).notEmpty('name').build();\n}\n\nexport const isValid = (data: IWorkFunction) => {\n return Object.keys(validateWorkFunction(data)).length == 0;\n}\n\nexport function WorkFunctionForm(props: IProps){\n const { t } = useTranslation();\n\n const form = useForm({\n initialValues:{\n id: props.data?.id ?? 0,\n name: props.data?.name ?? '',\n workId: props.workId,\n },\n validate: validateWorkFunction,\n onSubmit: (data: IWorkFunction) => {\n props.onSubmit(data);\n return {ok: true};\n },\n onChange: props.onChange,\n });\n\n return
\n
\n
\n {form.floatField('name', t('Name'), () =>\n )}\n
\n
\n {form.errorBox()}\n \n
\n {props.footer != undefined && props.footer}\n
\n
\n}","import * as React from 'react';\n\nimport { Loading, Message, Select, useLoading, useNumberState, useTranslation } from '@components';\n\ntype IColumn = string | Function | { title?: string; field: string; body?: Function; };\n\nexport interface IProps {\n columns: IColumn[];\n error?: string;\n loading?: boolean;\n loadRelations: Function; // -> Promise|D[]\n loadTargets: Function;\n\n onAdd: Function;\n onRemove: Function;\n\n source: S;\n\n targetLabel?: string;\n targetValue?: string;\n}\n\nexport function ManageManyToManyRelations(props: IProps) {\n const { t } = useTranslation();\n\n const loading = useLoading(false);\n const [relations, setRelations] = React.useState([]);\n const [targets, setTargets] = React.useState([]);\n const [requestRemove, setRequestRemove] = React.useState();\n const selectedTarget = useNumberState();\n\n const initializeTargets = () => {\n const res = props.loadTargets();\n\n if (res.then) {\n res.then(setTargets);\n }\n else {\n setTargets(res);\n }\n }\n\n const initialize = () => {\n const res = props.loadRelations();\n\n if (res.then) {\n res.then(setRelations);\n }\n else {\n setRelations(res);\n }\n }\n\n React.useEffect(() => {\n initialize();\n initializeTargets();\n }, []);\n\n const doRemove = loading.wrap(async (e: any) => {\n e.preventDefault();\n e.stopPropagation();\n\n await props.onRemove(requestRemove);\n\n await initialize();\n\n setRequestRemove(undefined);\n });\n\n const renderHeader = (l: IColumn, i: number) =>\n \n {typeof(l) === 'string' && t(l)}\n {typeof(l) === 'object' && l.title && t(l.title)}\n ;\n\n const renderRow = (l: IColumn, i: number, d: any) => {\n return \n {typeof(l) === 'string' && {d[l]}}\n {typeof(l) === 'object' && l.body == undefined && d[l.field]}\n {typeof(l) === 'object' && l.body != undefined && l.body(d)}\n ;\n }\n\n const doAdd = loading.wrap(async (e: any) => {\n e.preventDefault();\n e.stopPropagation();\n\n await props.onAdd(\n targets.find((t: any)=> t[props.targetValue || 'id'] == selectedTarget.value));\n initialize();\n });\n\n return
\n {props.error &&\n }\n\n {loading.render()}\n\n {requestRemove &&
\n
{t('Are you sure to delete the relation?')}
\n\n
\n
\n \n \n
\n
}\n\n \n \n \n {props.columns.map((l, i) => renderHeader(l, i))}\n \n \n \n \n {relations.map((d, i) =>\n \n {props.columns.map((l, i) => renderRow(l, i, d))}\n \n )}\n \n \n \n \n \n \n
\n setRequestRemove(d)}>\n
\n\n
\n
\n
;\n}","import * as React from 'react';\n\nimport {\n ConfirmDialog, Message, useDataTable, useFormDialog, useLoading, useTranslation\n} from '@components';\nimport { IWorkFunction, IWorker } from '@models/resources';\nimport * as Actions from '@store/actions/resources';\nimport { WorkFunctionForm } from './WorkFunctionForm';\nimport { ManageManyToManyRelations } from '../common/ManageManyToManyRelations';\n\nexport interface IProps {\n workId: number;\n}\n\nexport function AdminWorkFunction(props: IProps){\n const { t } = useTranslation();\n\n const [error, setError] = React.useState();\n const [workFunctions, setWorkFunctions] = React.useState([]);\n const loading = useLoading(true);\n\n const formDialog = useFormDialog({\n editTitle: t('Edit work function'),\n addTitle: t('Add work function'),\n });\n // workers\n const workersDialog = useFormDialog({\n editTitle:t('Work function workers')\n });\n\n const [showConfirmRemove, setShowConfirmRemove] = React.useState();\n\n const initialize = loading.wrap(async () => {\n const res = await Actions.getWorkFunctions(props.workId);\n\n setWorkFunctions(res.data.work.work_functions);\n });\n\n React.useEffect(() => {\n initialize();\n }, []);\n\n const saveWorkFunction = loading.wrap(async (w: IWorkFunction) => {\n await Actions.saveWorkFunction(w);\n await initialize();\n\n formDialog.clear();\n });\n\n const removeWorkFunction = loading.wrap(async (id: number, workId: number) => {\n setError(undefined);\n\n workId = props.workId;\n await Actions.removeWorkFunction(id, workId);\n await initialize();\n\n formDialog.clear();\n });\n\n const dataTable = useDataTable({\n data: workFunctions,\n className: 'e',\n loading,\n columns: [{field:'id', className:'td-sm'}, 'name'],\n actions: [\n {icon: 'sitemap', tooltip: t('Edit'), onClick: workersDialog.showEdit},\n {icon: 'pencil', tooltip: t('Edit'), onClick: formDialog.showEdit},\n {icon: 'trash', tooltip: t('Delete'), onClick: setShowConfirmRemove}\n ]\n });\n\n // add Worker\n const addWorkFunctionHasWorker = async (worker: IWorker, workFunction: IWorkFunction) => {\n loading.start('workers');\n\n const resp = await Actions.saveWorkFunctionHasWorker(props.workId, workFunction.id, worker.id);\n if (resp.hasValue) {\n workersDialog.clear();\n }\n else{\n workersDialog.setEditError(\n t('Cannot add worker relation'));\n }\n\n loading.stop();\n }\n\n // remove Worker\n const removeWorkFunctionHasWorker = async (worker: IWorker, workFunction: IWorkFunction) => {\n loading.start('workers');\n\n const resp = await Actions.removeWorkFunctionHasWorker(props.workId, workFunction.id, worker.id);\n if (!resp.hasValue){\n workersDialog.setEditError(\n t('Cannot remove worker relation'));\n }\n\n loading.stop();\n }\n\n return
\n {showConfirmRemove && setShowConfirmRemove(undefined)}\n message={`${t('Are you sure to delete the element ?')} ${showConfirmRemove.name}`}\n rejectLabel={t('Cancel')}\n acceptLabel={t('Delete')}\n reject={() => setShowConfirmRemove(undefined)}\n accept={() => removeWorkFunction(showConfirmRemove.id, showConfirmRemove.workId)} />}\n\n {workersDialog.render((workFunction: IWorkFunction, {error}: {error:string}) =>\n addWorkFunctionHasWorker(d, workFunction)}\n onRemove={(d: IWorker) => removeWorkFunctionHasWorker(d, workFunction)}\n loadTargets={async () => {\n const resp = await Actions.getWorkers(props.workId);\n return resp.data.work.workers;\n }}\n loadRelations={() => Actions.getWorkFunctionWorkers(props.workId, workFunction.id)} />)}\n\n {formDialog.render((data: IWorkFunction) =>\n )}\n\n {dataTable()}\n\n
\n {error && }\n \n \n
\n
\n}","import * as React from 'react';\n\nimport { Portal, useTranslation } from '@components';\nimport { redirectTo } from '@utils';\nimport { IWork } from '@models';\n\nexport interface IProps {\n children?: any;\n work: IWork;\n}\n\nexport function WorkToolbar({children, work}: IProps) {\n const { t } = useTranslation();\n\n return \n
\n {children}\n\n redirectTo(`/admin/work/${work.id}/events`)}\n className='pointer fas fa-code'/>\n\n redirectTo(`/admin/work/${work.id}/modules`)}\n className='pointer fas fa-box'/>\n\n redirectTo(`/admin/work/${work.id}/jobs`)}\n className='pointer'>J\n\n redirectTo(`/admin/work/${work.id}/contractors`)}\n className='pointer'>C\n\n redirectTo(`/admin/work/${work.id}/machineries`)}\n className='pointer'>M\n\n redirectTo(`/admin/work/${work.id}/workers`)}\n className='pointer'>T\n\n redirectTo(`/admin/work/${work.id}/validations`)}>\n\n redirectTo(`/admin/work/${work.id}/notifications`)}\n className='pointer fas fa-comment-alt'>\n redirectTo(`/admin/work/${work.id}/users`)}\n className='pi pi-users pointer' />\n redirectTo(`/admin/work/${work.id}/departments`)}\n className='pointer'>D\n redirectTo(`/admin/work/${work.id}/requirements`)}\n className='pointer'>R\n redirectTo(`/admin/work/${work.id}/configuration`)}\n className='pointer'>P\n redirectTo(`/admin/work/${work.id}/permissions`)}\n className='pi pi-lock pointer'>\n
\n \n}","import * as React from 'react';\n\nimport { INotification, IMachineryType } from '@models';\nimport {\n classNames,\n InputText,\n NotificationsBox,\n useForm,\n useTranslation,\n ValidationBuilder,\n} from '@components';\n\nimport './WorkForm.css';\n\nexport interface IProps {\n data?: IMachineryType;\n workId: number;\n footer?: any;\n notifications: INotification[];\n onChange?: Function;\n onSubmit: Function;\n}\n\nexport const validateMachinery = (data: IMachineryType) => {\n return ValidationBuilder.create(data).notEmpty('name').build();\n}\n\nexport const isValid = (data: IMachineryType) => {\n return Object.keys(validateMachinery(data)).length == 0;\n}\n\nexport function MachineryTypeForm(props: IProps) {\n const { t } = useTranslation();\n\n const form = useForm({\n initialValues: {\n id: props.data?.id ?? 0,\n name: props.data?.name ?? '',\n workId: props.workId,\n },\n validate: validateMachinery,\n onSubmit: (data: IMachineryType) => {\n props.onSubmit(data);\n return {ok: true};\n },\n onChange: props.onChange,\n });\n\n return
\n
\n
\n {form.floatField('name', t('Name'), () =>\n \n )}\n
\n
\n {form.errorBox()}\n \n
\n
\n\n
\n \n props.onSubmit}>\n {t('Add')}\n \n
\n \n
\n}","import * as React from 'react';\n\nimport { IMachinerySubType } from '@models';\nimport {\n classNames,\n InputText,\n useForm,\n useTranslation,\n ValidationBuilder,\n} from '@components';\n\nimport './WorkForm.css';\n\nexport interface IProps {\n data?: IMachinerySubType;\n parentId: number;\n onChange?: Function;\n onSubmit: Function;\n workId: number;\n}\n\nexport const validateMachinerySubType = (data: IMachinerySubType) => {\n return ValidationBuilder.create(data).notEmpty('name').build();\n}\n\nexport const isValid = (data: IMachinerySubType) => {\n return Object.keys(validateMachinerySubType(data)).length == 0;\n}\n\nexport function MachinerySubTypeForm(props: IProps) {\n const { t } = useTranslation();\n\n const form = useForm({\n initialValues: {\n id: props.data?.id ?? 0,\n name: props.data?.name ?? '',\n parentId: props.parentId,\n },\n validate: validateMachinerySubType,\n onSubmit: (data: IMachinerySubType) => {\n props.onSubmit(data);\n return {ok: true};\n },\n onChange: props.onChange,\n });\n\n return
\n
\n
\n {form.floatField('name', t('Name'), () =>\n \n )}\n
\n
\n {form.errorBox()}\n
\n
\n\n
\n \n props.onSubmit}>\n {t('Add')}\n \n
\n \n
\n}","import * as React from 'react';\n\nimport {\n Message, useConfirm, useDialogs, useFormDialog, useLoading, useTranslation, useTreeTable\n} from '@components';\nimport { IMachineryType, IMachinerySubType } from '@models/resources';\nimport * as Actions from '@store/actions/resources';\nimport { MachineryTypeForm } from './MachineryTypeForm';\nimport { MachinerySubTypeForm } from './MachinerySubTypeForm';\n\nexport interface IProps {\n workId: number;\n}\n\nexport function AdminMachineryType(props: IProps){\n const { t } = useTranslation();\n\n const [error, setError] = React.useState();\n const [machineryTypes, setMachineryTypes] = React.useState([]);\n const loading = useLoading(true);\n const dialogs = useDialogs();\n\n const confirmRemove = useConfirm({\n message: t('Are you sure to delete the element ?'),\n accept: (obj: any) => {\n if (obj.__typename === 'MachineryType') {\n removeMachineryType(props.workId, obj.id)\n } else {\n removeMachinerySubType(props.workId, obj.parentId, obj.id)\n }\n }\n });\n\n const initialize = loading.wrap(async() => {\n const res = await Actions.getMachineryTypes(props.workId);\n\n setMachineryTypes(res.data.work.machineryTypes);\n });\n\n React.useEffect(() => {\n initialize();\n }, []);\n\n const saveMachineryType = loading.wrap(async (m: IMachineryType) => {\n await Actions.saveMachineryType(m);\n await initialize();\n\n dialogs.clear();\n });\n\n const removeMachineryType = loading.wrap(async (workId: number, id: number) => {\n setError(undefined);\n\n workId = props.workId;\n\n await Actions.removeMachineryType(workId, id);\n await initialize();\n });\n\n // MACHINERY SUBTYPE ACTIONS\n const saveMachinerySubType = loading.wrap(async (m: IMachinerySubType) => {\n await Actions.saveMachinerySubType(props.workId, m);\n await initialize();\n\n dialogs.clear();\n });\n\n const removeMachinerySubType = loading.wrap(async (workId: number, parentId: number, id: number) => {\n setError(undefined);\n\n workId = props.workId;\n\n await Actions.removeMachinerySubType(workId, parentId, id);\n await initialize();\n });\n\n const dataTable = useTreeTable({\n data: machineryTypes,\n childrenProperty: 'subTypes',\n columns: [\n { title: 'Name', field: 'name', className: ' e' },\n ],\n actions: [\n { icon: 'fa fa-plus', headerClassName: 'td-sm', onClick: (r: any) => dialogs.show('add-subtype', r), disabled: (r: any) => r.__typename != 'MachineryType'},\n {\n icon: 'pencil',\n tooltip: t('Edit'),\n headerClassName: 'td-sm',\n onClick: (r: any) => {\n if (r.__typename === 'MachineryType') {\n dialogs.show('edit-machinery-type', r);\n }\n else {\n dialogs.show('edit-machinery-subtype', r);\n }\n }\n },\n {\n icon: 'trash', tooltip: t('Delete'), onClick: confirmRemove, headerClassName: 'td-sm',\n }\n ]\n });\n\n return
\n {dialogs.render('add-subtype', { title: t('Add machinery subtype') }, (mt: IMachineryType) => \n \n )}\n\n {dialogs.render('edit-machinery-subtype', {title: t('Edit machinery subtype')}, (data: IMachinerySubType) =>\n )}\n\n {dialogs.render('edit-machinery-type', {title: t('Edit machinery type')}, (data: IMachineryType) =>\n )}\n {dialogs.render('add-machinery-type', { title: t('Add machinery type') }, (data: IMachineryType) =>\n )\n }\n\n
\n {dataTable()}\n
\n\n
\n {error && }\n \n \n
\n
\n}","import * as React from 'react';\n\nimport { INotification } from '@models';\nimport { IWorkerDocumentType } from '@models/resources';\nimport {\n classNames,\n InputText,\n NotificationsBox,\n useForm,\n useTranslation,\n ValidationBuilder,\n} from '@components';\n\nimport './WorkForm.css';\n\nexport interface IProps {\n data?: IWorkerDocumentType;\n workId: number;\n footer?: any;\n notifications: INotification[];\n onChange?: Function;\n onSubmit: Function;\n}\n\nexport const validateWorkerDocumentType = (data: IWorkerDocumentType) => {\n return ValidationBuilder.create(data).notEmpty('name').build();\n}\n\nexport const isValid = (data: IWorkerDocumentType) => {\n return Object.keys(validateWorkerDocumentType(data)).length == 0;\n}\n\nexport function WorkerDocumentTypeForm(props: IProps) {\n const { t } = useTranslation();\n\n const form = useForm({\n initialValues: {\n id: props.data?.id ?? 0,\n name: props.data?.name ?? '',\n workId: props.workId,\n },\n validate: validateWorkerDocumentType,\n onSubmit: (data: IWorkerDocumentType) => {\n props.onSubmit(data);\n return {ok: true};\n },\n onChange: props.onChange,\n });\n\n return
\n
\n
\n {form.floatField('name', t('Name'), () =>\n \n )}\n
\n
\n {form.errorBox()}\n \n
\n {props.footer != undefined && props.footer}\n
\n
\n}","import * as React from 'react';\n\nimport {\n ConfirmDialog, Message, useDataTable, useFormDialog, useLoading, useMessage, useTranslation\n} from '@components';\nimport { IWorkerDocumentType } from '@models/resources';\nimport * as Actions from '@store/actions/resources';\nimport { WorkerDocumentTypeForm } from './WorkerDocumentTypeForm';\n\nexport interface IProps {\n workId: number;\n}\n\nexport function AdminWorkerDoucmentType(props: IProps) {\n const { t } = useTranslation();\n const msg = useMessage();\n\n const [error, setError] = React.useState();\n const [workerDocumentTypes, setWorkerDocumentTypes] = React.useState([]);\n const loading = useLoading(true);\n const formDialog = useFormDialog({\n editTitle: t('Edit worker document type'),\n addTitle: t('Add worker document type'),\n });\n const [showConfirmRemove, setShowConfirmRemove] = React.useState();\n\n const initialize = loading.wrap(async() => {\n const res = await Actions.getWorkerDocumentTypes(props.workId);\n\n setWorkerDocumentTypes(res.data.work.workerDocumentTypes);\n });\n\n React.useEffect(() => {\n initialize();\n }, []);\n\n const saveWorkerDocumentType = loading.wrap(async (w: IWorkerDocumentType) => {\n const res = await Actions.saveWorkerDocumentType(w);\n msg.set(res);\n await initialize();\n\n formDialog.clear();\n });\n\n const removeWorkerDocumentType = loading.wrap(async (workId: number, id: number) => {\n setError(undefined);\n\n workId = props.workId;\n const res = await Actions.removeWorkerDocumentType(workId, id);\n msg.set(res);\n await initialize();\n\n formDialog.clear();\n });\n\n const dataTable = useDataTable({\n data: workerDocumentTypes,\n className: 'e',\n loading,\n columns: [{field: 'id', className:'td-sm'}, 'name'],\n actions: [\n { icon: 'pencil', tooltip: t('Edit'), onClick: formDialog.showEdit},\n { icon: 'trash', tooltip: t('Delete'), onClick: setShowConfirmRemove}\n ]\n });\n\n return
\n {showConfirmRemove && setShowConfirmRemove(undefined)}\n message={`${t('Are you sure to delete the element ?')} ${showConfirmRemove.name}`}\n rejectLabel={t('Cancel')}\n acceptLabel={t('Delete')}\n reject={() => setShowConfirmRemove(undefined)}\n accept={() => removeWorkerDocumentType(showConfirmRemove.workId, showConfirmRemove.id)} />}\n\n {formDialog.render((data: IWorkerDocumentType) =>\n )}\n\n {dataTable()}\n
\n {error && }\n {msg.renderIfError()}\n \n \n
\n
\n}","import * as React from 'react';\n\nimport { INotification } from '@models';\nimport { IWorkerType } from '@models/resources';\nimport {\n classNames,\n InputText,\n NotificationsBox,\n useForm,\n useTranslation,\n ValidationBuilder,\n} from '@components';\n\nimport './WorkForm.css';\n\nexport interface IProps {\n data?: IWorkerType;\n workId: number;\n footer?: any;\n notifications: INotification[];\n onChange?: Function;\n onSubmit: Function;\n}\n\nexport const validateWorkerType = (data: IWorkerType) => {\n return ValidationBuilder.create(data).notEmpty('name').build();\n}\n\nexport const isValid = (data: IWorkerType) => {\n return Object.keys(validateWorkerType(data)).length == 0;\n}\n\nexport function WorkerTypeForm(props: IProps) {\n const { t } = useTranslation();\n\n const form = useForm({\n initialValues: {\n id: props.data?.id ?? 0,\n name: props.data?.name ?? '',\n workId: props.workId,\n },\n validate: validateWorkerType,\n onSubmit: (data: IWorkerType) => {\n props.onSubmit(data);\n return {ok: true};\n },\n onChange: props.onChange,\n });\n\n return
\n
\n
\n {form.floatField('name', t('Name'), () =>\n \n )}\n
\n
\n {form.errorBox()}\n \n
\n {props.footer != undefined && props.footer}\n
\n
\n}","import * as React from 'react';\n\nimport {\n ConfirmDialog, Message, useDataTable, useFormDialog, useLoading, useTranslation\n} from '@components';\nimport { IWorkerType } from '@models/resources';\nimport * as Actions from '@store/actions/resources';\nimport { WorkerTypeForm } from './WorkerTypeForm';\n\nexport interface IProps {\n workId: number;\n}\n\nexport function AdminWorkerType(props: IProps){\n const { t } = useTranslation();\n\n const [error, setError] = React.useState();\n const [workerTypes, setWorkerTypes] = React.useState([]);\n const loading = useLoading(true);\n const formDialog = useFormDialog({\n editTitle: t('Edit worker type'),\n addTitle: t('Add worker type'),\n });\n const [showConfirmRemove, setShowConfirmRemove] = React.useState();\n\n const initialize = loading.wrap(async() => {\n const res = await Actions.getWorkerTypes(props.workId);\n\n setWorkerTypes(res.data.work.workerTypes);\n });\n\n React.useEffect(() => {\n initialize();\n }, []);\n\n const saveWorkerType = loading.wrap(async (w: IWorkerType) => {\n await Actions.saveWorkerType(w);\n await initialize();\n\n formDialog.clear();\n });\n\n const removeWorkerType = loading.wrap(async (workId: number, id: number) => {\n setError(undefined);\n\n workId = props.workId;\n await Actions.removeWorkerType(workId, id);\n await initialize();\n\n formDialog.clear();\n })\n\n const dataTable = useDataTable({\n data: workerTypes,\n className: 'e',\n loading,\n columns: [{field: 'id', className:'td-sm'}, 'name'],\n actions: [\n { icon: 'pencil', tooltip: t('Edit'), onClick: formDialog.showEdit},\n { icon: 'trash', tooltip: t('Delete'), onClick: setShowConfirmRemove}\n ]\n });\n\n return
\n {showConfirmRemove && setShowConfirmRemove(undefined)}\n message={`${t('Are you sure to delete the element ?')} ${showConfirmRemove.name}`}\n rejectLabel={t('Cancel')}\n acceptLabel={t('Delete')}\n reject={() => setShowConfirmRemove(undefined)}\n accept={() => removeWorkerType(showConfirmRemove.workId, showConfirmRemove.id)} />}\n\n {formDialog.render((data: IWorkerType) =>\n )}\n\n {dataTable()}\n
\n {error && }\n \n \n
\n
\n}","import * as React from 'react';\n\nimport { AdminWorkWorkspaces } from './AdminWorkWorkspaces';\nimport { AdminWorkShifts } from './AdminWorkShifts';\nimport { Card, Dialog, Loading, onNotification, Portal, useTranslation } from '@components';\nimport { IConstants, ICountry, IMachineryType, INotification, IWork, NotificationType } from '@models';\nimport * as Actions from '@store/actions/admin';\nimport { WorkForm } from './WorkForm';\n\nimport './EditWork.scss';\nimport AdminWorkUsersContainer from '@containers/admin/AdminWorkUsersContainer';\nimport { AdminWorkI18NResources } from './AdminWorkI18NResources';\nimport { AdminActivityType } from './AdminActivityType';\nimport { AdminLegalForm } from './AdminLegalForm';\nimport { AdminWorkFunction } from './AdminWorkFunction';\nimport { WorkToolbar } from './WorkToolbar';\nimport { AdminMachineryType } from './AdminMachineryType';\nimport { AdminWorkerDoucmentType } from './AdminWorkerDocumentType';\nimport { AdminWorkerType } from './AdminWorkerType';\n\nexport interface IProps {\n constants: IConstants;\n countries: ICountry[];\n loadWorks: Function;\n machineryTypes: IMachineryType[];\n notifications: INotification[];\n work: IWork;\n}\n\nconst prepareWork = (data: IWork) => {\n return {\n id: data.id,\n name: data.name,\n description: data.description,\n countryId: data.countryId,\n } as IWork;\n}\n\nexport default function EditWork(props: IProps) {\n const [loading, setLoading] = React.useState(false);\n const [showEditUsers, setShowEditUsers] = React.useState();\n const [work, setWork] = React.useState(props.work);\n\n const { t } = useTranslation();\n\n onNotification({type: NotificationType.SUCCESS, ctx: 'adminworkusers'}, props.notifications, () => {\n setShowEditUsers(undefined);\n });\n\n const saveWork = async (data: IWork) => {\n setLoading(true);\n await Actions.saveWork(prepareWork(data));\n props.loadWorks();\n\n setLoading(false);\n }\n\n const WorkFormFooter = (p: any) => {\n return
\n \n {loading && }\n \n
\n }\n\n return (
\n \n \n
\n setWork(d)}\n onSubmit={saveWork}\n footer={} />\n
\n \n \n \n \n \n \n \n \n \n {/* \n \n */}\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n {showEditUsers && setShowEditUsers(undefined)}>\n setShowEditUsers(undefined)}\n work={showEditUsers} />\n }\n
);\n}","import { connect } from 'react-redux';\nimport { ApplicationState } from '../../store';\nimport * as Admin from '../../store/admin';\nimport * as App from '../../store/app';\n\nimport EditWork, { IProps } from '../../components/admin/EditWork';\nimport { NotificationType } from '../../models';\n\ntype Props =\n Admin.IAdminState &\n App.IAppState &\n IProps;\n\nexport default connect(\n (state: ApplicationState) => ({\n constants: state.constants,\n countries: state.constants.countries,\n users: state.admin.users,\n machineryTypes: state.user.machineryTypes,\n notifications: state.notifications.notifications\n .filter(n => n.ctx === 'adminwork' || n.ctx === 'adminworkusers'),\n loadingNotifications: state.notifications.notifications\n .filter(n => n.ctx === 'adminwork' && n.type === NotificationType.LOADING),\n loading: state.app.loading,\n loadingMessage: state.app.loadingMessage\n }),\n Admin.actionCreators,\n)(EditWork as any) as any; // eslint-disable-line @typescript-eslint/no-explicit-any\n","import { connect } from 'react-redux';\nimport { ApplicationState } from '../../store';\nimport * as Admin from '../../store/admin';\nimport * as App from '../../store/app';\n\nimport AdminWorks, { IProps } from '../../components/admin/AdminWorks';\nimport { NotificationType } from '../../models';\n\ntype Props =\n Admin.IAdminState &\n App.IAppState &\n IProps;\n\nexport default connect(\n (state: ApplicationState) => ({\n countries: state.constants.countries,\n constants: state.constants,\n users: state.admin.users,\n works: state.admin.works,\n notifications: state.notifications.notifications\n .filter(n => n.ctx === 'adminworks'),\n loadingNotifications: state.notifications.notifications\n .filter(n => n.ctx === 'adminworks' && n.type === NotificationType.LOADING),\n loading: state.app.loading,\n loadingMessage: state.app.loadingMessage\n }),\n Admin.actionCreators,\n)(AdminWorks as any) as any; // eslint-disable-line @typescript-eslint/no-explicit-any\n","import * as React from 'react';\n\nimport {\n ButtonSet, Column, DataTable, Dialog, Loading, LoadingBox,\n onNotification, useMemoized, useTranslation,\n} from '@components';\nimport { IConstants, ICountry, INotification, IUserIdentity, IWork, NotificationType } from '@models';\nimport AdminWorkUsersContainer from '@containers/admin/AdminWorkUsersContainer';\nimport { WorkForm, isValid } from './WorkForm';\nimport { redirectTo } from '@utils';\n\nexport interface IProps {\n constants: IConstants;\n countries: ICountry[];\n loading: boolean;\n loadingMessage?: string;\n loadingNotifications: INotification[];\n notifications: INotification[];\n selectWork: Function;\n saveWork: Function;\n users: IUserIdentity[];\n works: IWork[];\n}\n\nexport default function AdminWorks(props: IProps) {\n const { t } = useTranslation();\n const [showEdit, setShowEdit] = React.useState();\n const [showEditUsers, setShowEditUsers] = React.useState();\n const [showAdd, setShowAdd] = React.useState(false);\n const [addData, setAddData] = React.useState({\n id: 0,\n name: '',\n users: [],\n countryId: 0,\n workspaces: [],\n workShifts: [],\n permissions: [],\n settings: \"\",\n legalForms: [],\n });\n\n const loading = props.loadingNotifications.length > 0;\n\n const countryName = useMemoized((i: number) =>\n props.countries.find(c => c.id == i)?.name);\n\n const AddFooter = () => {\n return
\n \n \n setShowAdd(false)}>\n {t('Cancel')}\n \n \n {loading && }\n {t('Save')}\n \n \n
\n }\n\n onNotification({ ctx: 'adminworks', type: NotificationType.SUCCESS },\n props.notifications,\n (n: INotification) => {\n if (n.action === 'edit') {\n setShowEdit(undefined);\n }\n else if (n.action === 'add') {\n setShowAdd(false);\n }\n });\n\n const EditFooter = () => {\n return
\n \n \n setShowEdit(undefined)}>\n {t('Cancel')}\n \n \n {loading && }\n {t('Save')}\n \n \n
\n }\n\n const Header = () => {\n return
\n \n setShowAdd(true)}>\n \n {t('Add work')}\n \n
\n }\n\n const cancelEvent = (e: any | undefined) => {\n e?.preventDefault();\n e?.stopPropagation();\n }\n\n const configureWork = (workId: number, e: any | undefined = undefined) => {\n props.selectWork(workId, false);\n redirectTo(`/admin/work/${workId}`);\n e?.preventDefault();\n e?.stopPropagation();\n }\n\n return
\n {loading && }\n {props.loading && }\n\n ({ 'pointer': true})}\n rowHover\n onRowClick={e => configureWork(e.data.id)}\n header={
}\n >\n \n \n \n countryName(w.countryId)} />\n { setShowEdit(u); cancelEvent(e); }}\n className='pi pi-pencil pointer' />} />\n configureWork(u.id, e)}\n className='pi pi-cog pointer' />} />\n { setShowEditUsers(u); cancelEvent(e); }}\n className='pi pi-users pointer' />} />\n \n\n {showAdd && setShowAdd(false)}>\n }\n countries={props.countries}\n notifications={props.notifications.filter(a => a.action === 'add')}\n onChange={setAddData}\n onSubmit={(data: IWork) => props.saveWork(data)} />\n }\n\n {showEdit && setShowEdit(undefined)}>\n }\n countries={props.countries}\n notifications={props.notifications.filter(a => a.action === 'edit')}\n onChange={setShowEdit}\n onSubmit={(data: IWork) => props.saveWork(data)} />\n }\n\n {showEditUsers && setShowEditUsers(undefined)}>\n setShowEditUsers(undefined)}\n work={showEditUsers} />\n }\n
\n}\n","import * as React from 'react';\n\nimport './GraphQlUi.css';\n\nexport interface IProps {\n src: string;\n}\n\nexport default function GraphQlUi(props: IProps) {\n return \n}","import * as React from 'react';\n\nimport { IDepartment } from '@models';\nimport {\n Chips,\n G,\n ValidationBuilder,\n useForm,\n useTranslation,\n useLoading,\n} from '@components';\n\nexport interface IProps {\n data?: IDepartment;\n saveDepartment: Function;\n saveDepartmentPolicy: Function;\n removeDepartmentPolicy: Function;\n workId: number;\n onCancel?: Function;\n onSaved: Function;\n}\n\nexport function DepartmentForm(props: IProps) {\n const { t } = useTranslation();\n\n const loading = useLoading();\n const [policies, setPolicies] = React.useState(props.data?.policies ?? []);\n\n const form = useForm({\n initialValues: {\n id: props.data?.id ?? 0,\n code: props.data?.code,\n name: props.data?.name ?? '',\n description: props.data?.description ?? '',\n isOblique: props.data?.isOblique ?? false,\n notifyJobCreation: props.data?.notifyJobCreation ?? false,\n workId: props.workId,\n },\n validateOnMount: true,\n validate: (data: IDepartment) => {\n return ValidationBuilder.create(data).notEmpty('name').build();\n },\n });\n\n const doSave = loading.wrap(async () => {\n await props.saveDepartment(form.values);\n props.onSaved();\n });\n\n const onAddPoliciy = loading.wrap(async (e: any) => {\n await props.saveDepartmentPolicy(props.workId, props.data?.id ?? 0, e.value);\n setPolicies([...policies, e.value]);\n });\n\n const onRemovePolicy = loading.wrap(async (e: any) => {\n const value = e.value[0];\n await props.removeDepartmentPolicy(props.workId, props.data?.id ?? 0, value);\n setPolicies(policies.filter(p => p != value));\n });\n\n return
\n
\n \n {form.input('code', { autoFocus: true })}\n \n \n {form.input('name', { autoFocus: true })}\n \n \n {form.input('description')}\n \n \n {form.checkBox('isOblique', { containerClassName: 'right' })}\n \n \n {form.checkBox('notifyJobCreation', { containerClassName: 'right' })}\n \n {(props.data?.id ?? 0) > 0 && \n
\n \n
\n
}\n
\n\n
\n \n \n
\n
\n}\n","import { connect } from 'react-redux';\nimport { ApplicationState } from '../../store';\nimport * as Admin from '../../store/admin';\n\nimport { AdminWorkDepartments } from '@components/admin/AdminWorkDepartments';\n\nexport default connect(\n (state: ApplicationState) => ({\n ...Admin.plainActions,\n }),\n Admin.actionCreators,\n)(AdminWorkDepartments as any) as any; // eslint-disable-line @typescript-eslint/no-explicit-any\n","import * as React from 'react';\n\nimport { IWork, IDepartment, IOption, IWorker } from '@models';\nimport { WorkToolbar } from './WorkToolbar';\nimport { BreadcrumbItem, useDataTable, useDialogs, useFormDialog, useLoading, useRemoteData, useTranslation, useSearchFilters, useInputSearch, useKeyListener, R } from '@components';\nimport { DepartmentForm } from './DepartmentForm';\nimport * as Actions from '@store/actions/resources';\nimport { ManageManyToManyRelations } from '@components/common/ManageManyToManyRelations';\n\ntype GetDepartmentsF = (workId: number) => Promise;\ntype SaveDepartmentF = (workId: number, data: IDepartment) => Promise>;\n\nexport interface IProps {\n getWorkDepartments: GetDepartmentsF;\n saveDepartment: SaveDepartmentF;\n work: IWork;\n}\n\nexport function AdminWorkDepartments(props: IProps) {\n const { t } = useTranslation();\n const loading = useLoading();\n\n const dialogs = useDialogs();\n\n const [searchFilter, setSearchFilter] = React.useState('');\n const [departments, setDepartments] = React.useState([]);\n const [filter, setFilter] = React.useState('');\n\n const workersDialog = useFormDialog({\n editTitle: t('Workers'),\n });\n\n const data = useRemoteData(\n props.getWorkDepartments,\n {\n parameters: [props.work.id]\n });\n\n React.useEffect(() => {\n initialize();\n }, [data.value]);\n\n const userFilters = useSearchFilters({\n workId: props.work.id,\n name: 'admin.departments',\n references: {\n departments: data.value,\n },\n persist: false,\n });\n\n React.useEffect(() => {\n initialize();\n }, [userFilters.filters.isOblique, userFilters.filters.isNotOblique]);\n\n React.useEffect(() => {\n if(userFilters.filters.departments){\n const result = data.value?.filter(x => userFilters.filters.departments.includes(x.id));\n setDepartments(result);\n }else{\n userFilters.setFilter('departments', null);\n initialize();\n }\n }, [userFilters.filters.departments]);\n\n const initialize = () => {\n let result : IDepartment[] = data.value;\n if(userFilters.filters && userFilters.filters.isOblique == true && userFilters.filters.isNotOblique == true){\n doStringSearch(result);\n }else if(userFilters.filters && userFilters.filters.isOblique == true){\n userFilters.filters.isNotOblique && userFilters.setFilter('isNotOblique', false);\n setFilter('isOblique');\n result = data.value?.filter(x => x.isOblique == true);\n doStringSearch(result);\n }else if(userFilters.filters && userFilters.filters.isNotOblique == true){\n userFilters.filters.isOblique && userFilters.setFilter('isOblique', false);\n setFilter('isNotOblique');\n result = data.value?.filter(x => x.isOblique == false);\n doStringSearch(result);\n }else if(userFilters.filters && userFilters.filters.isOblique == false && userFilters.filters.isNotOblique == false){\n if(filter == 'isOblique'){\n setFilter('');\n userFilters.setFilter('isNotOblique', true);\n }else if(filter == 'isNotOblique'){\n setFilter('');\n userFilters.setFilter('isOblique', true);\n }\n }\n }\n\n const doStringSearch = (departments: IDepartment[]) => {\n if (searchFilter != '') {\n const filtered = departments.filter(x => x.name.toLowerCase().includes(searchFilter.toLowerCase()));\n if (filtered) {\n setDepartments(filtered);\n }\n }\n else {\n setDepartments(departments);\n }\n };\n\n React.useEffect(() => {\n initialize();\n }, [searchFilter]);\n\n\n const dataTable = useDataTable({\n tableStyle: { width: '100%' },\n columns: [\n { field: 'id', className: 'td-md', sortKey: 'id' },\n { title:'Code', field: 'code', sortKey:'code' },\n {\n title:'name',\n field: 'name',\n sortKey: 'name',\n render: (d: IDepartment) => {d.name}\n },\n { title:'description', field: 'description', sortKey:'description' },\n {\n title: 'Policies',\n render: r => {\n const policies = (r.policies ?? []).join(', ');\n return {policies}\n },\n sortKey: 'policies',\n },\n { title: 'notifyJobCreation', field: 'notifyJobCreation', delegate: 'boolean', className: 'td-md center', sortKey: 'notifyJobCreation' },\n { title: 'IsOblique', field: 'isOblique', delegate: 'boolean', className: 'td-md center', sortKey: 'isOblique' }\n ],\n actions: [\n {\n icon: 'fas fa-people-carry',\n onClick: (d: IDepartment) => workersDialog.showEdit(d)\n },\n {\n icon: 'fa fa-edit',\n onClick: (d: IDepartment) => dialogs.show('edit', d)\n }\n ],\n className: 'fixed-header-t36 fixed-table',\n data: departments,\n });\n\n const onSaved = () => {\n dialogs.clear();\n data.query();\n }\n\n const searchCtrl = React.useRef();\n useKeyListener({\n key: 'f',\n keyCtrl: true,\n handle: () => {\n searchCtrl.current?.focus();\n },\n });\n\n const addDepartmentHasWorker = async (worker: IWorker, department: IDepartment) => {\n loading.start('workers');\n workersDialog.clearErrors();\n\n const resp = await Actions.saveDepartmentHasWorker(props.work.id, department.id, worker.id);\n if (resp.hasValue) {\n workersDialog.clearErrors();\n }\n else {\n workersDialog.setEditError(\n t('Cannot add worker relation') + ': ' + worker.name + ' ' + worker.surname);\n }\n\n loading.stop();\n }\n\n // remove Worker\n const removeDepartmentHasWorker = async (worker: IWorker, department: IDepartment) => {\n loading.start('workers');\n\n workersDialog.clearErrors();\n const resp = await Actions.removeDepartmentHasWorker(props.work.id, department.id, worker.id);\n if (!resp.hasValue) {\n workersDialog.setEditError(\n t('Cannot remove worker relation'));\n }\n\n loading.stop();\n }\n\n\n return
\n \n \n {data.renderLoading()}\n {loading.render()}\n \n \n {t('Add department')}\n \n \n\n {workersDialog.render((department: IDepartment, { error }: { error: string }) =>\n addDepartmentHasWorker(d, department)}\n onRemove={(d: IWorker) => removeDepartmentHasWorker(d, department)}\n loading={loading.isLoading('workers')}\n targetLabel='fullName'\n loadTargets={() => Actions.getWorkers(props.work.id, true)}\n loadRelations={() => Actions.getDepartmentWorkers(props.work.id, department.id)} />)}\n\n\n {dialogs.render(\n 'add',\n { title: t('Add department'), className: 'g pd' },\n (_: any) =>\n \n )}\n {dialogs.render(\n 'edit',\n { title: t('Edit department'), className: 'g pd' },\n (dep: IDepartment) =>\n \n )}\n\n
\n
\n
\n keyIsEnter(e) ? doSearch() : undefined}\n onChange={e => setSearchFilter(e.target.value)}\n // onBlur={_ => doSearch()}\n placeholder={t('Search')} />\n Ctrl+F\n \n
\n
\n
\n {dataTable()}\n
;\n}\n","import * as React from 'react';\n\nimport { INotification, IUserIdentity, IWork, IWorkPermission } from '@models';\nimport { commonPermissions } from '../../security';\nimport * as Expressions from '@utils/expressions';\nimport {\n classNames,\n InputText,\n InputTextarea,\n Message,\n MultiSelect,\n NotificationsBox,\n Select,\n TabPanel,\n TabView,\n useForm,\n useLoading,\n useTranslation,\n ValidationBuilder,\n} from '@components';\n\nimport './PermissionForm.scss';\nimport { IJob } from '../../../../../GStore.Modules/FrontEnd/GStore.WebApp/ClientApp/src/models';\n\nexport interface IProps {\n availableRoles: string[];\n users: IUserIdentity[];\n works: IWork[];\n data?: IWorkPermission;\n workId: number;\n footer?: any;\n notifications?: INotification[];\n onChange?: Function;\n onSubmit?: Function;\n getJobs?: Function;\n}\n\nexport const validatePermission = (data: IWorkPermission|undefined) => {\n return ValidationBuilder.create(data).notEmpty('action').build();\n}\n\nexport const isValid = (data: IWorkPermission|undefined) => {\n return Object.keys(validatePermission(data)).length == 0;\n}\n\nfunction TestExpression({expression, users, works, getJobs}: {\n expression: string, users: IUserIdentity[], works: IWork[], getJobs?: Function\n}) {\n const loading = useLoading(false);\n const { t } = useTranslation();\n\n const [error, setError] = React.useState();\n const [result, setResult] = React.useState();\n const [teUser, setTeUser] = React.useState();\n const [teWork, setTeWork] = React.useState();\n const [teJob, setTeJob] = React.useState();\n const [containsJob, setContainsJob] = React.useState(false);\n const [jobs, setJobs] = React.useState([]);\n\n\n React.useEffect(() => {\n setContainsJob(expression.includes('Job.'));\n }\n , [expression]);\n\n const initializeJobs = loading.wrap(async () => {\n const jobs = await getJobs!(teWork);\n\n setJobs(jobs.data.work.jobs);\n });\n\n React.useMemo(() => {\n if (getJobs && teWork != undefined && containsJob) {\n initializeJobs();\n }\n }, [teWork]);\n\n const testExpression = loading.wrap((e: any = null) => {\n setError(undefined);\n if (e) {\n e.preventDefault();\n e.stopPropagation();\n }\n\n try {\n const work = works.find(w => w.id == teWork);\n const expr = Expressions.parse(expression);\n const r = Expressions.evaluate(expr, {\n identity: users.find(u => u.id == teUser),\n work,\n workId: work?.id,\n job: jobs.find(j => j.id == teJob),\n jobId: teJob,\n });\n if (expr) {\n setResult(r);\n }\n else {\n setError(t('Invalid expression'));\n }\n }\n catch (e) {\n setError((e as any).message);\n }\n });\n\n return
\n

{t('Test expression')}

\n\n
\n setTeUser(e.value)}\n options={users}\n optionLabel={'userName'}\n filter={true}\n optionValue={'id'} />\n setTeWork(e.value)}\n options={works}\n filter={true}\n optionLabel={'name'}\n optionValue={'id'} />\n setTeJob(e.value)}\n options={jobs}\n filter={true}\n optionLabel={'name'}\n optionValue={'id'} />\n \n \n {t('Test')}\n \n {loading.render()}\n
\n {error && }\n {!error && result != undefined && }\n
\n}\n\nexport function PermissionForm(props: IProps){\n const { t } = useTranslation();\n const loading = useLoading(false);\n const [activePanel, setActivePanel] = React.useState(0);\n\n const form = useForm({\n initialValues: {\n id: props.data?.id ?? 0,\n name: props.data?.name ?? '',\n action: props.data?.action ?? '',\n expression: props.data?.expression ?? '',\n roles: props.data?.roles ?? '',\n policies: props.data?.policies ?? '',\n workId: props.workId,\n },\n validate: validatePermission,\n onSubmit: (data: IWorkPermission) => {\n if (props.onSubmit) {\n props.onSubmit(data);\n }\n return {ok: true};\n },\n onChange: props.onChange,\n });\n\n const predefinedPermissions =\n commonPermissions.map(p => ({\n id: p,\n name: t(p) + ' (' + p + ')'\n }));\n\n return
\n
\n
\n
\n {form.floatField('action', t('Action'), () =>\n )}\n
\n
\n
\n setActivePanel(e.index)}>\n \n {form.field('expression', t('Expression'), () =>\n )}\n \n \n \n r)??[]}\n onChange={e => form.setFieldValue('roles', e.value.join(','))}\n />\n \n \n \n \n \n
\n
\n {form.errorBox()}\n {props.notifications &&\n }\n
\n {props.footer != undefined && props.footer}\n
\n
\n}\n","import { connect } from 'react-redux';\nimport { ApplicationState } from '../../store';\nimport * as Admin from '../../store/admin';\nimport * as UserActions from '../../store/user'\n\nimport { AdminWorkPermissions, IProps } from '../../components/admin/AdminWorkPermissions';\n\nexport default connect(\n (state: ApplicationState) => ({\n ...Admin.plainActions,\n ...UserActions.plainActions,\n availableRoles: state.admin.roles,\n users: state.admin.users,\n works: state.admin.works,\n }),\n Admin.actionCreators,\n)(AdminWorkPermissions as any) as any; // eslint-disable-line @typescript-eslint/no-explicit-any\n","import * as React from 'react';\n\nimport {\n useDataTable, useLoading, useTranslation, useConfirm, useFormDialog\n} from '@components';\nimport { PermissionForm } from './PermissionForm';\nimport { IDepartment, IRole, IUserIdentity, IWork, IWorkPermission } from '@models';\nimport { WorkToolbar } from './WorkToolbar';\n\nexport interface IProps {\n availableRoles: IRole[];\n loadWorkPermissions: Function;\n removeWorkPermission: Function,\n saveWorkPermission: Function;\n users: IUserIdentity[];\n work: IWork;\n works: IWork[];\n departments: IDepartment[];\n getJobs: Function;\n}\n\nexport function AdminWorkPermissions({\n availableRoles,\n loadWorkPermissions, removeWorkPermission, saveWorkPermission, users, work, works, getJobs\n}: IProps) {\n const loading = useLoading(true);\n const { t } = useTranslation();\n const dialog = useFormDialog({\n addTitle: t('Add permission'),\n editTitle: t('Edit permission')\n });\n const [permissions, setPermissions] = React.useState([]);\n const confirm = useConfirm({\n message: t('Are you sure to delete the permission ?'),\n });\n\n const initialize = loading.wrap(async () => {\n const perms = await loadWorkPermissions(work.id);\n setPermissions(perms);\n });\n\n React.useEffect(() => {\n initialize();\n }, []);\n\n const renderPermissionTitle = (p: IWorkPermission) => {\n return `${t(p.action)} (${p.action})`;\n }\n\n const table = useDataTable({\n actions: [\n {tooltip: t('Edit'), icon: 'pencil', onClick: dialog.showEdit},\n {tooltip: t('Remove'), icon: 'trash', onClick: (p: IWorkPermission, e: any) =>\n confirm({event: e, accept: () => performRemovePermission(p)})}],\n columns: [{render: renderPermissionTitle}, 'roles', 'policies', 'expression'],\n data: permissions,\n });\n\n const performSavePermission = async (perm: IWorkPermission) => {\n await saveWorkPermission(perm);\n await initialize();\n dialog.clear();\n }\n\n const performRemovePermission = async (p: IWorkPermission) => {\n await removeWorkPermission(work.id, p.id);\n await initialize();\n }\n\n return
\n \n dialog.showAdd()}>\n \n {t('Add permission')}\n \n \n\n {loading.renderBox({className: 'md pd', text: t('Loading permissions')})}\n {dialog.render((data: IWorkPermission) =>\n r.name)}\n users={users}\n works={works}\n data={data}\n workId={work.id}\n onSubmit={performSavePermission}\n getJobs={getJobs}\n footer={} />)}\n {table()}\n
\n}","import * as React from 'react';\n\nimport { useTranslation, Chip } from '@components';\nimport { SaveUserPolicies } from '@store/actions/user';\n\ninterface ISource {\n appUserId?: number,\n code?: string,\n departments?: string,\n id?: number,\n isActive?: boolean,\n legalFormId?: number,\n name?: string,\n phone?: string,\n policies?: string[],\n remarks?: string,\n surname?: string,\n userEmail?: string,\n userName?: string,\n workId?: number,\n}\n\n\ninterface IProps {\n source: string[];\n removePolicy: (policy: string) => void;\n addPolicy: (policy: string) => void;\n hasAssociatedUser?: number;\n}\n\nexport function ManagePolicies(props: IProps) {\n const { t } = useTranslation();\n\n const [newPolicy, setNewPolicy] = React.useState('');\n\n const addPolicy = (e: any) => {\n e.preventDefault();\n e.stopPropagation();\n\n if (newPolicy && newPolicy.trim() !== '') {\n props.addPolicy(newPolicy);\n setNewPolicy('');\n }\n }\n\n const removePolicy = (policy: string) => {\n props.removePolicy(policy);\n }\n\n function generateId() {\n return Date.now().toString(36) + Math.random().toString(36).substr(2, 9);\n }\n\n const chips = () => {\n const result = props.source.map((p, i) => chip(p, i));\n return result;\n };\n\n const chip = (p: string, i: number) => {\n const id = generateId();\n const chip = removePolicy(p)}>;\n return chip;\n };\n\n return
\n {props.hasAssociatedUser ?\n
\n {t('Policies')}\n\n
\n {chips()}\n
\n\n
\n
\n setNewPolicy(e.target.value)}\n className='p-inputtext p-component' />\n \n \n \n
\n
\n\n
\n :\n

El trabajador no tiene asociado un usuario

}\n
;\n}","import { connect } from 'react-redux';\n\nimport { ApplicationState } from '../../store';\nimport * as Admin from '@store/admin';\nimport { UserForm } from '@components/admin/UserForm';\n\nexport default connect(\n (state: ApplicationState) => ({\n availableRoles: state.admin.roles.map(r => r.name),\n notifications: [],\n }),\n Admin.actionCreators\n)(UserForm as any) as any; // eslint-disable-line @typescript-eslint/no-explicit-any\n","import * as React from 'react';\n\nimport * as Actions from '@store/actions/resources';\nimport { associateAppUserToWorker, getUsers, getUserById } from '@store/actions/admin';\nimport { IDepartment, INotification, IPropertyGroupType, IUserIdentity, IWorker, IWorkFunction, PropertyGroupObjectType, IWorkspace, ILegalForm, IWorkerWithRelations } from '@models';\nimport { ManageRelations } from '../common/ManageRelations';\nimport { DynamicProperties } from '@components/user/DynamicProperties';\nimport {\n G,\n NotificationsBox,\n TabPanel,\n TabView,\n useForm,\n useFormDialog,\n useLoading,\n useTranslation,\n ValidationBuilder,\n} from '@components';\n\nimport './WorkForm.css';\nimport { ManageManyToManyRelations } from '@components/common/ManageManyToManyRelations';\nimport { ManagePolicies } from '@components/common/ManagePolicies';\nimport { IUserFormData, isValidUser } from './UserForm';\nimport UserFormContainer from '@containers/admin/UserFormContainer';\nimport { SaveUserPolicies } from '@store/actions/user';\n\ntype IWorkerWithAppUserData = IWorker & {\n appUserId?: number;\n userEmail?: string;\n policies?: string[];\n}\n\nexport interface IProps {\n data?: IWorkerWithAppUserData;\n workId: number;\n footer?: any;\n notifications: INotification[];\n onChange?: Function;\n onSubmit: Function;\n propertyGroupTypes: IPropertyGroupType[];\n workspaces: IWorkspace[];\n legalForms: ILegalForm[];\n}\n\nconst RenderCreateAppUserRelation = ({ worker, workId, onCreated, role }: {\n onCreated: Function;\n workId: number;\n worker: IWorker;\n role?: string;\n}) => {\n const { t } = useTranslation();\n const loading = useLoading(false);\n\n const [data, setData] = React.useState({\n roles: [role].filter(r => r != undefined) as string[],\n policies: [],\n });\n\n const createAndAssociateUser = loading.wrap(async () => {\n await associateAppUserToWorker(workId, worker.id, data);\n onCreated();\n });\n\n return
\n {loading.renderBox()}\n {!loading.isLoading() &&\n }\n\n
\n \n \n {t('Create user')}\n \n
\n
\n}\n\nenum FormType {\n Edit = 0,\n AppUser = 1\n}\n\nexport function WorkerForm(props: IProps) {\n const { t } = useTranslation();\n const loading = useLoading();\n const [error, setError] = React.useState();\n const [editAccess, setEditAccess] = React.useState();\n const [formType, setFormType] = React.useState(FormType.Edit);\n const [policies, setPolicies] = React.useState(props.data?.policies ?? []);\n\n const createAppUserDialog = useFormDialog({\n portal: 'body',\n editTitle: t('Create new user'),\n });\n const appUsersDialog = useFormDialog({\n editTitle: t('Associate app user')\n });\n\n\n const validateWorker = (data: IWorkerWithRelations) => {\n return ValidationBuilder\n .create(data)\n .notEmpty('name')\n .notEmptyIf(props.workId != 21, 'surname')\n .notEmptyIf(props.workId == 21, 'code')\n .build();\n }\n\n const form = useForm({\n initialValues: {\n id: props.data?.id ?? 0,\n name: props.data?.name ?? '',\n isActive: true,\n surname: props.data?.surname ?? '',\n code: props.data?.code ?? '',\n phone: props.data?.phone ?? '',\n workspaceId: props.data?.workspaceId ?? 0,\n // legalFormId: props.data?.legalFormId,\n remarks: props.data?.remarks ?? '',\n workId: props.workId,\n properties: props.data?.properties\n },\n validate: validateWorker,\n validateOnMount: true,\n onSubmit: (data: IWorkerWithRelations) => {\n savePolicies();\n props.onSubmit(data);\n return { ok: true };\n },\n // onChange: props.onChange,\n });\n\n //save policies\n const savePolicies = async () => {\n const userId = props.data?.appUserId;\n if (userId) {\n const res = await SaveUserPolicies(userId, policies);\n if (res.value == false || res.isError == true) {\n setError(t('Cannot change policies to user'));\n }\n } else {\n setError(t('Cannot change policies to user'));\n }\n }\n\n //add policy\n const addPolicyToAppUser = (policy: string) => {\n const newPolicies = [...(policies ?? []), policy];\n setPolicies(newPolicies);\n }\n\n //remove policy\n const RemovePolicyToAppUser = async (policy: string) => {\n const newPolicies = (policies ?? []).filter(p => p !== policy);\n setPolicies(newPolicies);\n }\n\n\n //add Department\n const addDepartmentHasWorker = async (department: IDepartment, worker: IWorker) => {\n loading.start('departments');\n\n const resp = await Actions.saveDepartmentHasWorker(props.workId, department.id, worker.id);\n if (!resp.hasValue) {\n setError(t('Cannot add department relation'));\n }\n\n loading.stop('departments');\n }\n\n // remove Department\n const removeDepartmentHasWorker = async (department: IDepartment, worker: IWorker) => {\n loading.start('departments');\n\n const resp = await Actions.removeDepartmentHasWorker(props.workId, department.id, worker.id);\n if (!resp.hasValue) {\n setError(t('Cannot remove department relation'));\n }\n\n loading.stop('departments');\n }\n\n // add Workspace\n const addWorkerHasWorkspace = async (workspace: IWorkspace, worker: IWorker) => {\n loading.start('workspaces');\n\n const resp = await Actions.saveWorkerHasWorkspace(props.workId, worker.id, workspace.id);\n if (!resp.hasValue) {\n setError(t('Cannot add workspace relation'));\n }\n\n loading.stop('workspaces');\n }\n\n const removeWorkerHasWorkspace = async (workspace: IWorkspace, worker: IWorker) => {\n loading.start('workspaces');\n\n const resp = await Actions.removeWorkerHasWorkspace(props.workId, worker.id, workspace.id);\n if (!resp.hasValue) {\n setError(t('Cannot remove workspace relation'));\n }\n\n loading.stop('workspaces');\n }\n\n // add Work Function\n const addWorkFunctionHasWorker = async (workFunction: IWorkFunction, worker: IWorker) => {\n loading.start('work functions');\n\n const resp = await Actions.saveWorkFunctionHasWorker(props.workId, workFunction.id, worker.id);\n if (!resp.hasValue) {\n setError(t('Cannot add work function relation'));\n }\n\n loading.stop();\n }\n\n //remove Work Function\n const removeWorkFunctionHasWorker = async (workFunction: IWorkFunction, worker: IWorker) => {\n loading.start('work functions');\n\n const resp = await Actions.removeWorkFunctionHasWorker(props.workId, workFunction.id, worker.id);\n if (!resp.hasValue) {\n setError(t('Cannot remove work function relation'));\n }\n loading.stop();\n }\n\n const associateExistingUser = loading.wrap(async (worker: IWorker, user: IUserIdentity) => {\n await associateAppUserToWorker(props.workId, worker.id, {\n id: user.id,\n userName: user.userName,\n });\n await props.onChange?.();\n });\n\n const requestEditUser = loading.wrap(async (appUserId: number) => {\n const user = await getUserById(appUserId);\n setEditAccess(user);\n setFormType(FormType.AppUser);\n });\n\n const saveAppUser = loading.wrap(async (data: IUserIdentity) => {\n setFormType(FormType.Edit);\n });\n\n\n const cancelAppUserEdit = () => {\n setEditAccess(undefined);\n setFormType(FormType.Edit);\n }\n\n const onSystemUserCreated = () => {\n createAppUserDialog.clear();\n props.onChange?.();\n }\n\n return
\n
\n {formType === FormType.AppUser && editAccess &&\n \n \n \n
}\n onSubmit={saveAppUser} />}\n\n {createAppUserDialog.render((w: IWorker) =>\n )}\n\n {formType === FormType.Edit &&
\n
\n
\n \n {form.input('name', { autoFocus: true })}\n \n \n {form.input('surname')}\n \n \n {form.input('code')}\n \n \n {form.input('phone')}\n \n \n {form.textarea('remarks')}\n \n form.setFieldValue('properties', props)}\n isInternal={true}\n objectType={PropertyGroupObjectType.JobHasWorker}\n propertyGroupTypes={props.propertyGroupTypes} />\n
\n\n {props.data?.id != undefined &&\n \n \n addWorkerHasWorkspace(d, props.data!)}\n onRemove={(d: IWorkspace) => removeWorkerHasWorkspace(d, props.data!)}\n loading={loading.isLoading('workspaces')}\n loadTargets={async () => {\n const resp = await Actions.getWorkspaces(props.workId);\n return resp.data.work.workspaces;\n }}\n loadRelations={() => Actions.getWorkerHasWorkspaces(props.workId, props.data!.id)} />\n \n \n addDepartmentHasWorker(d, props.data!)}\n onRemove={(d: IDepartment) => removeDepartmentHasWorker(d, props.data!)}\n loading={loading.isLoading('departments')}\n loadTargets={async () => {\n const resp = await Actions.getDepartments(props.workId);\n return resp.data.work.departments;\n }}\n loadRelations={() => Actions.getWorkerDepartments(props.workId, props.data!.id)} />\n \n \n addWorkFunctionHasWorker(w, props.data!)}\n onRemove={(w: IWorkFunction) => removeWorkFunctionHasWorker(w, props.data!)}\n loading={loading.isLoading('work_functions')}\n loadTargets={async () => {\n const resp = await Actions.getWorkFunctions(props.workId);\n return resp.data.work.work_functions;\n }}\n loadRelations={() => Actions.getWorkerWorkFunctions(props.workId, props.data!.id)} />\n \n \n \n \n \n {props.data?.appUser != undefined &&\n
\n
\n \n {props.data?.userEmail}\n
\n
\n requestEditUser(props.data!.appUserId!)}>\n
\n
}\n {props.data?.appUser == undefined &&\n <>\n
\n \n {t('Associate app user')}\n \n
\n getUsers().then(r => r.data.users)}\n onRequestCreate={(w: IWorker) => {\n appUsersDialog.clear();\n createAppUserDialog.showEdit(w);\n }}\n onSelect={(user: IUserIdentity) => {\n associateExistingUser(props.data!, user);\n }}\n source={props.data!} />\n }\n \n }\n
\n {formType === FormType.Edit && props.footer != undefined && props.footer}\n
}\n
\n
\n {form.errorBox()}\n \n
\n
\n}","import { connect } from 'react-redux';\n\nimport { ApplicationState } from '../../store';\nimport * as Admin from '@store/admin';\n\nimport { AdminWorkWorkers } from '@components/admin/AdminWorkWorkers';\nimport * as WorkersStore from '../../store/workers';\n\nexport default connect(\n (state: ApplicationState) => ({\n ...WorkersStore.plainActions,\n ...Admin.plainActions,\n }),\n Admin.actionCreators,\n)(AdminWorkWorkers as any) as any; // eslint-disable-line @typescript-eslint/no-explicit-any\n","import * as React from 'react';\n\nimport { searchExportToXls } from '@store/actions/search';\nimport {\n ConfirmDialog, Message, useConfirm, useDataTable, useFormDialog, useInputSearch, useLoading, useMessage, useSearch, useSearchFilters, useTranslation\n} from '@components';\nimport { IPropertyGroupType, isRRHHPropertyGroupType, IWork } from '@models';\nimport { IDepartment, IWorker, IWorkerWithRelations } from '@models/resources';\nimport * as Actions from '@store/actions/resources';\nimport { WorkerForm } from './WorkerForm';\nimport { WorkToolbar } from './WorkToolbar';\nimport './AdminWorkWorkers.scss'\nimport i18next from 'i18next';\nimport { downloadBlob } from '@utils/file-utils';\n\ntype WorkerRow = IWorker & {\n departments: string;\n userEmail: string;\n workspaces: string;\n userName?: string;\n policies?: string[];\n};\n\nexport interface IProps {\n loadUsers?: Function;\n propertyGroupTypes: IPropertyGroupType[];\n work: IWork;\n reactivateWorker: Function;\n getWorkDepartments: Function;\n}\n\nexport function AdminWorkWorkers(props: IProps) {\n const { t } = useTranslation();\n\n const propertyGroupTypes =\n props.work?.propertyGroupTypes?.filter(isRRHHPropertyGroupType) ?? [];\n\n const [departments, setDepartments] = React.useState([]);\n\n const workspaces = props.work.workspaces;\n const legalForms = props.work.legalForms;\n\n const workId = props.work.id;\n\n const [error, setError] = React.useState();\n const loading = useLoading(true);\n const formDialog = useFormDialog({\n editTitle: t('rrhh.worker.edit'),\n addTitle: t('rrhh.worker.add'),\n });\n const message = useMessage();\n const [showConfirmDeactivate, setShowConfirmDeactivate] = React.useState();\n const [showConfirmActivate, setShowConfirmActivate] = React.useState();\n const [showConfirmRemove, setShowConfirmRemove] = React.useState();\n\n const userFilters = useSearchFilters({\n workId: workId,\n name: 'admin.workers',\n references: {\n workspaces: workspaces,\n departments: departments,\n },\n persist: true,\n });\n\n const initialize = loading.wrap(async () => {\n const departments = await props.getWorkDepartments(workId);\n setDepartments(departments ?? []);\n data.doSearch();\n });\n\n React.useEffect(() => {\n initialize();\n }, []);\n\n const refresh = async () => {\n await initialize();\n if (formDialog.currentEdit) {\n const s = data.value.find(c => c.id == formDialog.currentEdit?.id);\n formDialog.showEdit(s!);\n formDialog.clear();\n }\n\n if (props.loadUsers) {\n props.loadUsers();\n }\n }\n\n const saveWorker = async (w: IWorkerWithRelations) => {\n const res = await Actions.saveWorker(w);\n message.set(res);\n await initialize();\n\n formDialog.clear();\n }\n\n const removeWorker = async (id: number, workId: number, remove: boolean) => {\n setError(undefined);\n await Actions.removeWorker(id, workId, remove);\n await initialize();\n\n formDialog.clear();\n }\n\n const filterKey = `filters.admin.work.workers[workId=${workId}]`;\n\n const filter = useInputSearch({ filterKey });\n\n const data = useSearch({\n workId: workId,\n search: 'admin.workers',\n normalizeKeys: true,\n filters: userFilters.merge({ name: filter.value, workId: workId }),\n dependencies: [filter.value, userFilters.filters],\n });\n\n const exportToXls = async (filters: any, filename: string | undefined = undefined) => {\n const resp = await searchExportToXls(workId, 'admin.workers', filters, i18next.languages[0]);\n downloadBlob(resp, filename ?? (`admin.workers.${workId}` + '.xlsx') ?? 'export.xlsx');\n }\n\n const doActivateWorker = loading.wrap(async (w: WorkerRow) => {\n await props.reactivateWorker(w.workId, w.id);\n await refresh();\n });\n\n const dataTable = useDataTable({\n data: data.value,\n className: 'e fixed-header-t36 fixed-table',\n columns: [\n {\n className: 'td-md', sortKey: 'id', render: (w: WorkerRow) => {\n return
\n {w.id}\n
\n }\n },\n {\n title: 'Name', className: 'center', sortKey: 'name', render: (w: WorkerRow) => {\n return
\n {w.name}\n
\n }\n },\n {\n title: 'Surname', className: 'center', sortKey: 'surname', render: (w: WorkerRow) => {\n return
\n {w.surname}\n
\n }\n },\n {\n title: 'Phone', className: 'td-md', sortKey: 'phone', render: (w: WorkerRow) => {\n return
\n {w.phone}\n
\n }\n },\n {\n title: 'License number', className: 'td-lg', sortKey: 'code', render: (w: WorkerRow) => {\n return
\n {w.code}\n
\n }\n },\n {\n title: 'Workspaces', className: 'center', sortKey: 'workspaces', render: (w: WorkerRow) => {\n return
\n {w.workspaces}\n
\n }\n },\n {\n title: 'Departments', className: 'center', sortKey: 'departments', render: (w: WorkerRow) => {\n return
\n {w.departments}\n
\n }\n },\n {\n title: 'Policies', className: 'center', sortKey: 'policies', render: (w: WorkerRow) => {\n\n return
\n {w.policies && {w.policies?.join(', ')}}\n
\n }\n },\n {\n title: 'UserName', sortKey: 'userName', render: (w: WorkerRow) => {\n return
\n {w.userName}\n
\n }\n },\n {\n title: 'Email', sortKey: 'userEmail', render: (w: WorkerRow) => {\n return
\n {w.userEmail}\n
\n }\n },\n ],\n actions: [\n { icon: 'pencil', tooltip: t('Edit'), onClick: formDialog.showEdit },\n {\n icon: (w: WorkerRow) => w.isActive ? 'fas fa-eye-slash' : 'fas fa-check',\n tooltip: (w: WorkerRow) => w.isActive ? t('resource.deactivate') : t('resource.activate'),\n onClick: (w: WorkerRow) => w.isActive ? setShowConfirmDeactivate(w) : setShowConfirmActivate(w)\n },\n { icon: 'fas fa-trash', tooltip: t('Remove'), onClick: (w: WorkerRow) => setShowConfirmRemove(w) },\n ]\n });\n\n return
\n \n {loading.render()}\n formDialog.showAdd()}>\n \n {t('rrhh.worker.add')}\n \n exportToXls(userFilters.merge({ workId: props.work.id }))}>\n \n {t('Export to Excel')}\n \n \n {message.renderIfError()}\n\n {showConfirmDeactivate && setShowConfirmDeactivate(undefined)}\n message={`${t('Are you sure to deactivate the element ?')} ${showConfirmDeactivate.name}`}\n rejectLabel={t('Cancel')}\n acceptLabel={t('Delete')}\n reject={() => setShowConfirmDeactivate(undefined)}\n accept={() => removeWorker(showConfirmDeactivate.id, showConfirmDeactivate.workId, false)} />}\n\n {showConfirmActivate && setShowConfirmActivate(undefined)}\n message={`${t('reactivate.user.confirm.message')} ${showConfirmActivate.name} ${showConfirmActivate.surname ?? ''} ?`}\n rejectLabel={t('Cancel')}\n acceptLabel={t('Reactivate')}\n reject={() => setShowConfirmActivate(undefined)}\n accept={() => doActivateWorker(showConfirmActivate)} />}\n\n {showConfirmRemove && setShowConfirmDeactivate(undefined)}\n message={`${t('Are you sure to delete the element ?')} ${showConfirmRemove.name}`}\n rejectLabel={t('Cancel')}\n acceptLabel={t('Delete')}\n reject={() => setShowConfirmDeactivate(undefined)}\n accept={() => removeWorker(showConfirmRemove.id, showConfirmRemove.workId, true)} />}\n\n {formDialog.render((data: IWorker) =>\n )}\n\n {error && }\n\n\n
\n
\n {
\n {filter.render()}\n \n
}\n
\n
\n {dataTable()}\n
\n}\n","import * as React from 'react';\n\nimport { Chips, G, Select, useTranslation } from '@components';\nimport { IPropertyType, AllPropertyTypes, PropertyTypes } from '@models';\nimport { useObjectState } from '@utils/hooks';\n\nexport interface IProps {\n footer: any;\n loading?: boolean;\n onChange?: Function;\n parentId: number;\n}\n\nexport function PropertyTypeForm(props: IProps) {\n const { t } = useTranslation();\n\n const data = useObjectState({\n name: '',\n title: '',\n parentId: props.parentId,\n typeId: PropertyTypes.TEXT,\n selectOptions: \"\",\n }, {\n onChange: props.onChange,\n });\n\n const [selectOptions, setSelectOptions] = React.useState([]);\n\n const isValid =\n data.value.name != '' && data.value.title != '' && !props.loading;\n\n React.useEffect(() => {\n if (data.value.typeId != PropertyTypes.SELECT) {\n setSelectOptions([]);\n }\n }, [data.value.typeId]);\n\n React.useEffect(() => {\n data.set('selectOptions')(selectOptions.join(','));\n }, [selectOptions]);\n\n return
\n
\n \n \n \n \n \n \n \n \n \n {data.value.typeId == PropertyTypes.SELECT && \n
\n setSelectOptions([...selectOptions, d.value])}\n onRemove={d =>setSelectOptions(selectOptions.filter((o: any) => o != d.value))}\n />\n
\n
}\n
\n {props.footer({disabled: !isValid})}\n
\n}","import * as React from 'react';\n\nimport * as I18n from '../../i18n';\nimport { G, Select, useTranslation, InputSwitch } from '@components';\nimport { IPropertyGroupType } from '@models';\nimport { useObjectState } from '@utils/hooks';\nimport './PropertyGroupTypeForm.scss';\n\nexport interface IProps {\n footer: any;\n isInternal?: boolean;\n objectType: number;\n loading?: boolean;\n onChange?: Function;\n workId: number;\n}\n\nexport const dispositionTypes = [\n {id: 'embed', name: I18n.get('Embed')},\n {id: 'fluid', name: I18n.get('Fluid')},\n {id: 'column', name: I18n.get('Column')},\n {id: 'grid-2', name: I18n.get('Grid')},\n];\n\nexport function PropertyGroupTypeForm(props: IProps) {\n const { t } = useTranslation();\n\n const data = useObjectState({\n name: '',\n objectType: props.objectType,\n title: '',\n isInternal: props.isInternal,\n workId: props.workId,\n containerType: 'fluid',\n hidable: false,\n mandatory: false,\n // isolated: false,\n }, {\n onChange: props.onChange,\n });\n\n const isValid =\n data.value.name != '' && data.value.title != '' && !props.loading;\n\n return
\n
\n \n \n \n \n \n \n \n \n \n \n \n \n {/* \n \n */}\n
\n {props.footer({disabled: !isValid})}\n
\n}","import * as React from 'react';\n\nimport {\n InlineInputText,\n InlineSelect,\n useConfirm,\n useDialogs,\n useFormDialog,\n useLoading,\n useMessage,\n useObjectState,\n useResolveName,\n useStringState,\n useTranslation,\n useTreeTable,\n useForm,\n F\n} from '@components';\nimport {\n IPropertyGroupType,\n IPropertyType,\n AllPropertyTypes,\n IWork,\n} from '@models';\nimport { PropertyTypeForm } from './PropertyTypeForm';\nimport { PropertyGroupTypeForm, dispositionTypes } from './PropertyGroupTypeForm';\nimport { flatten } from \"@utils\";\n\nexport interface IProps {\n getPropertyGroupTypes: Function;\n isInternal?: boolean;\n loadWorks: Function;\n objectType: number;\n propertyGroupTypes: IPropertyGroupType[];\n removePropertyGroupType: Function;\n removePropertyType: Function;\n savePropertyGroupType: Function;\n savePropertyType: Function;\n work: IWork;\n}\n\nfunction PropertyGroupStyle({ group, onSave, onClose, workId }: any) {\n const color = useStringState('#ffffff');\n const { t } = useTranslation();\n\n React.useEffect(() => {\n if (group.style) {\n const style = JSON.parse(group.style);\n color.set(style.backgroundColor ?? '#ffffff');\n }\n }, []);\n\n const updateColor = async (_: any) => {\n const style = JSON.stringify({ backgroundColor: color.value });\n await onSave(workId, { ...group, style });\n\n onClose();\n }\n\n return
\n
\n \n
\n\n
\n \n
\n \n
\n
\n}\n\nfunction PropertyGroupTypeHidableForm({ propertyGroupType, onSave, onClose, workId }: any) {\n const form = useForm({\n initialValues: {\n hidable: propertyGroupType.hidable,\n mandatory: propertyGroupType.mandatory,\n },\n });\n const { t } = useTranslation();\n\n\n const doSave = async () => {\n await onSave(workId, {\n ...propertyGroupType,\n hidable: form.values.hidable,\n mandatory: form.values.mandatory\n })\n onClose();\n }\n\n return <>\n
\n
\n {form.checkBox('hidable')}\n \n
\n
\n {form.checkBox('mandatory')}\n \n
\n
\n
\n \n
\n \n
\n \n}\n\nfunction PropertyType({ propertyType, onSave, onClose, workId }: any) {\n const state = useObjectState(propertyType);\n const { t } = useTranslation();\n\n const doSave = async () => {\n await onSave(workId, { ...propertyType, help: state.value['help'] });\n onClose();\n }\n\n return
\n
\n \n
\n\n
\n \n
\n \n
\n
\n}\n\nconst parsePropertyGroup = (g: IPropertyGroupType) => {\n return {\n ...g,\n properties: g?.properties?.sort((a, b) => (a?.propertyOrder ?? 0) - (b?.propertyOrder ?? 0)),\n };\n}\n\nexport function PropertyGroupTypes(props: IProps) {\n const { t } = useTranslation();\n const loading = useLoading();\n const groupDialogs = useDialogs();\n const msg = useMessage();\n const dialogs = useFormDialog({\n addTitle: t('Add property group'),\n });\n const propertyDialog = useFormDialog({\n editTitle: t('Add property'),\n });\n const resolvePropertyTypeName = useResolveName(AllPropertyTypes, {\n defaultName: t('TEXT'),\n });\n\n const doRemove = loading.wrap(async (r: any) => {\n if (r.__typename === 'PropertyGroupTypeGraphType') {\n await props.removePropertyGroupType(props.work.id, r.id);\n }\n else {\n await props.removePropertyType(props.work.id, r.id);\n }\n props.loadWorks();\n });\n\n const confirmRemove = useConfirm({\n message: t('Are you sure you want to remove this property?'),\n accept: doRemove\n });\n\n const [data, setData] = React.useState(props.propertyGroupTypes);\n const [addRecord, setAddRecord] = React.useState();\n const [addPropertyRecord, setAddPropertyRecord] = React.useState();\n\n React.useEffect(() => {\n setData(props.propertyGroupTypes.map(parsePropertyGroup));\n }, [props.propertyGroupTypes]);\n\n const EditableText = ({ object, style, field, className }: any) =>\n object.__typename === 'PropertyGroupTypeGraphType'\n ? props.savePropertyGroupType(props.work.id, o)} />\n : props.savePropertyType(props.work.id, o)} />;\n\n const isPropertyType = (d: any) => d.__typename != 'PropertyGroupTypeGraphType';\n const isGroupType = (d: any) => !isPropertyType(d);\n\n const allowDrop = (event: React.DragEvent) => {\n event.preventDefault();\n }\n\n const onDrop = loading.wrap(async (prop: IPropertyType, event: React.DragEvent) => {\n const currentOrder = prop.propertyOrder;\n const sourceId = parseInt(event.dataTransfer.getData('text/plain'));\n const sourceProperty = flatten(props.propertyGroupTypes.map(g => g.properties ?? []))\n .find(r => r.id === sourceId);\n if (sourceProperty) {\n sourceProperty.propertyOrder = (currentOrder ?? 0);\n const parent = props.propertyGroupTypes.find(g => g.id === prop.parentId);\n const siblings = (parent?.properties ?? []).filter(r =>\n r.id != sourceId\n && (\n ((r.propertyOrder ?? 0) > (currentOrder ?? 0))\n || ((r.propertyOrder === currentOrder) && r.id! > prop.id!)));\n siblings?.forEach(s => s.propertyOrder = (s.propertyOrder ?? 0) + 1);\n prop.propertyOrder = (currentOrder ?? 0) + 1;\n\n await props.savePropertyType(props.work.id, sourceProperty);\n await props.savePropertyType(props.work.id, prop);\n for (const s of siblings ?? []) {\n await props.savePropertyType(props.work.id, s);\n }\n await reload();\n }\n });\n\n const onDragStart = (prop: IPropertyType, event: React.DragEvent) => {\n event.dataTransfer.setData('text/plain', prop.id + '');\n }\n\n const dataTable = useTreeTable({\n columns: [\n {\n title: 'Name', render: (d: any) => {\n if (d.__typename === 'PropertyTypeGraphType') {\n return
onDrop(d, e)}\n onDragOver={allowDrop}>\n
onDragStart(d, e)}>\n \n
\n \n
\n }\n else {\n return ;\n }\n }\n },\n { title: 'Title', render: (d: any) => },\n {\n title: 'Description', render: (d: any) => \n },\n {\n title: 'Type', render: (d: any) => d.__typename == 'PropertyTypeGraphType'\n ? props.savePropertyType(props.work.id, d)}\n field={'typeId'} />\n //resolvePropertyTypeName(d.propertyType)\n : props.savePropertyGroupType(props.work.id, o)}\n field='containerType' />\n }\n ],\n childrenProperty: 'properties',\n actions: [\n { icon: 'fas fa-palette', onClick: (g: any) => groupDialogs.show('color', g), disabled: isPropertyType },\n { icon: (g: any) => isGroupType(g) ? 'fas fa-edit' : 'far fa-qestion-circle', onClick: (g: any) => isGroupType(g) ? groupDialogs.show('settings', g) : groupDialogs.show('help', g) },\n { icon: 'plus', onClick: propertyDialog.showEdit, disabled: isPropertyType },\n { icon: 'trash', onClick: confirmRemove },\n ],\n expand: true,\n data,\n });\n\n const reload = async () => {\n const resp = await props.getPropertyGroupTypes(props.work.id);\n const types = resp.filter((p: IPropertyGroupType) => p.objectType == props.objectType && p.isInternal == props.isInternal);\n setData(types.map(parsePropertyGroup));\n }\n\n const doAddPropertyType = loading.wrap(async (ev: any) => {\n ev.preventDefault();\n ev.stopPropagation();\n\n const res = await props.savePropertyType(props.work.id, addPropertyRecord);\n msg.set(res);\n await reload();\n propertyDialog.clear();\n\n props.loadWorks();\n });\n\n const doAddPropertyGroup = loading.wrap(async (ev: any) => {\n ev.preventDefault();\n ev.stopPropagation();\n\n await props.savePropertyGroupType(props.work.id, addRecord);\n const resp = await props.getPropertyGroupTypes(props.work.id);\n const types = resp\n .filter((p: IPropertyGroupType) => p.objectType == props.objectType && p.isInternal == props.isInternal);\n setData(types);\n dialogs.clear();\n });\n\n return
\n {dataTable()}\n
\n\n {groupDialogs.render('color', { title: t('Set color') }, (group: IPropertyGroupType) =>\n \n )}\n {groupDialogs.render('help', { title: t('Set help text') }, (p: IPropertyType) =>\n \n )}\n\n {groupDialogs.render('settings', { title: t('Settings') }, (g: IPropertyGroupType) =>\n \n )}\n\n {dialogs.render((_: any) =>\n
\n }\n objectType={props.objectType}\n isInternal={props.isInternal}\n onChange={setAddRecord}\n workId={props.work.id} />\n )}\n\n {propertyDialog.render((data: IPropertyGroupType) =>\n
\n }\n onChange={setAddPropertyRecord}\n parentId={data.id!} />\n )}\n\n
\n
\n {msg.renderIfError()}\n {loading.render()}\n \n
\n
;\n}\n","import { connect } from 'react-redux';\nimport { ApplicationState } from '../../store';\nimport * as Admin from '../../store/admin';\n\nimport { PropertyGroupTypes } from '@components/admin/PropertyGroupTypes';\n\nexport default connect(\n (state: ApplicationState) => ({\n ...Admin.plainActions,\n }),\n Admin.actionCreators,\n)(PropertyGroupTypes as any) as any; // eslint-disable-line @typescript-eslint/no-explicit-any\n","import * as React from 'react';\n\nimport {\n F, Select, TabPanel, TabView, TogglePanel, useForm, InputSwitch, useLoading, useObjectState, useRemoteData, useTranslation\n} from '@components';\nimport {\n isContractorWorkerPropertyGroupType,\n isRRHHPropertyGroupType,\n isJobHasContractorPropertyGroupType, isMachineryPropertyGroupType, isJobPropertyGroupType,\n IWork, IWorkSettings, JobEncodingType, PropertyGroupObjectType\n} from '@models';\nimport PropertyGroupTypesContainer from '@containers/admin/PropertyGroupTypesContainer';\nimport { WorkToolbar } from './WorkToolbar';\nimport { INotificationTemplate, isWorkspacePropertyGroupType } from '@models/works';\n\ntype GetNotificationTemplatesF = (workId: number) => Promise;\n\nexport interface IProps {\n getNotificationTemplates: GetNotificationTemplatesF;\n getJobPropertyGroups: Function;\n saveJobPropertyGroup: Function;\n saveJobPropertyType: Function;\n saveWork: Function;\n work: IWork;\n}\n\nconst defaultSettings: IWorkSettings = {}\n\nfunction ContractorsConfiguration({ saveWork, work }: { saveWork: Function, work: IWork }) {\n const { t } = useTranslation();\n const loading = useLoading();\n\n const workSettings = work.settingsObj ?? defaultSettings;\n\n const form = useForm({\n initialValues: {\n id: work.id,\n name: work.name,\n countryId: work.countryId,\n settings: workSettings,\n contextData: work.contextData,\n __acceptSubContractorRequests: workSettings?.acceptSubContractorRequests,\n __mainContractorCanFulfillSubs: workSettings?.mainContractorCanFulfillSubs,\n __rememberSubContractorAcceptances: workSettings?.rememberSubContractorAcceptances,\n }\n });\n\n const doSave = loading.wrap(async (..._: any) => {\n const w = {\n ...form.values,\n settings: form.get('settings'),\n };\n w.settings['acceptSubContractorRequests'] = form.get('__acceptSubContractorRequests');\n w.settings['mainContractorCanFulfillSubs'] = form.get('__mainContractorCanFulfillSubs');\n w.settings['rememberSubContractorAcceptances'] = form.get('__rememberSubContractorAcceptances');\n\n w.settings = JSON.stringify(w.settings);\n delete w['__acceptSubContractorRequests'];\n delete w['__mainContractorCanFulfillSubs'];\n delete w['__rememberSubContractorAcceptances'];\n\n await saveWork(w);\n });\n\n return
\n
\n \n {form.checkBox('__acceptSubContractorRequests')}\n\n \n {form.checkBox('__mainContractorCanFulfillSubs')}\n\n \n {form.checkBox('__rememberSubcontractorAcceptances')}\n
\n
\n
\n
\n {loading.render()}\n \n {t('Save')}\n \n
\n
\n}\n\nfunction JobsConfiguration({ getNotificationTemplates, saveWork, work }: {\n getNotificationTemplates: GetNotificationTemplatesF, saveWork: Function, work: IWork\n}) {\n const { t } = useTranslation();\n const loading = useLoading();\n\n const notificationTemplates = useRemoteData(\n getNotificationTemplates,\n { parameters: [work.id] }\n );\n\n // const settings = useObjectState>(work.settingsObj ?? defaultSettings);\n const workSettings = work.settingsObj ?? defaultSettings;\n const workContextData = work.contextDataObj ?? {};\n\n const encodingOptions = [\n { id: JobEncodingType.Sequential, name: t('Sequential') },\n { id: JobEncodingType.SequentialByWorkspace, name: t('SequentialByWorkspace') },\n { id: JobEncodingType.Manual, name: t('job.encodingType.manual') },\n ];\n\n const reactivateResourcesBehaviorOptions = [\n { id: 1, name: t('reactivate.resources.behavior.return') },\n { id: 2, name: t('reactivate.resources.behavior.calculate') },\n ]\n\n const form = useForm({\n initialValues: {\n id: work.id,\n contractorInvitationTemplateId: work.contractorInvitationTemplateId,\n helpDeskEmail: work.helpDeskEmail,\n footerResource: work.footerResource,\n resetPasswordTemplateId: work.resetPasswordTemplateId,\n __jobEncodingType: workSettings.jobEncodingType,\n __jobEncodingPrefix: workSettings.jobEncodingPrefix,\n __allowAlwaysNotifyInformationLoaded: workSettings.allowAlwaysNotifyInformationLoaded,\n settings: workSettings,\n contextData: workContextData,\n __clientImage: workSettings.clientImage,\n __screenImage: workSettings.screenImage,\n __createJobRelations: workSettings.createJobRelations,\n __jobHiddenFields:\n workSettings.jobHiddenFields?.join\n ? workSettings.jobHiddenFields?.join(',')\n : '',\n __contractorHiddenFields:\n workSettings.contractorHiddenFields?.join\n ? workSettings.contractorHiddenFields?.join(',')\n : '',\n __workerHiddenFields:\n workSettings.workerHiddenFields?.join\n ? workSettings?.workerHiddenFields?.join(',')\n : '',\n __machineryHiddenFields:\n workSettings.machineryHiddenFields?.join\n ? workSettings?.machineryHiddenFields?.join(',')\n : '',\n __simpleDelayedRevokation: workSettings.simpleDelayedRevokation,\n __jobDelayedRevokation: workSettings.jobDelayedRevokation,\n __hideByDefaultEnded: workSettings.hideByDefaultEnded,\n __hideByDefaultEndedContractors: workSettings.hideByDefaultEndedContractors,\n __jobChainFinalisation: workSettings.jobChainFinalisation,\n __reactivateResourcesBehavior: workSettings.reactivateResourcesBehavior,\n contextDataPhone: workContextData?.phone,\n contextDataEmail: workContextData?.email,\n }\n });\n\n const doSave = loading.wrap(async (..._: any) => {\n const w = {\n ...form.values,\n settings: form.get('settings'),\n contextData: form.get('contextData'),\n };\n w.settings['jobEncodingType'] = w.__jobEncodingType;\n w.settings['jobEncodingPrefix'] = w.__jobEncodingPrefix;\n w.settings['jobHiddenFields'] = form.get('__jobHiddenFields')?.split(',')?.map(x => x.trim()) ?? [];\n w.settings['contractorHiddenFields'] = form.get('__contractorHiddenFields')?.split(',')?.map(x => x.trim()) ?? [];\n w.settings['workerHiddenFields'] = form.get('__workerHiddenFields')?.split(',')?.map(x => x.trim()) ?? [];\n w.settings['machineryHiddenFields'] = form.get('__machineryHiddenFields')?.split(',')?.map(x => x.trim()) ?? [];\n w.settings['clientImage'] = form.get('__clientImage');\n w.settings['screenImage'] = form.get('__screenImage');\n w.settings['createJobRelations'] = form.get('__createJobRelations');\n // w.settling\n w.settings['allowAlwaysNotifyInformationLoaded'] = form.get('__allowAlwaysNotifyInformationLoaded');\n w.settings['simpleDelayedRevokation'] = form.get('__simpleDelayedRevokation');\n w.settings['jobDelayedRevokation'] = form.get('__jobDelayedRevokation');\n w.settings['hideByDefaultEnded'] = form.get('__hideByDefaultEnded');\n w.settings['hideByDefaultEndedContractors'] = form.get('__hideByDefaultEndedContractors');\n w.settings['jobChainFinalisation'] = form.get('__jobChainFinalisation');\n w.settings['reactivateResourcesBehavior'] = form.get('__reactivateResourcesBehavior');\n w.contextData['phone'] = form.get('__contextDataPhone');\n w.contextData['email'] = form.get('__contextDataEmail');\n\n w.settings = JSON.stringify(w.settings);\n w.contextData = JSON.stringify(w.contextData);\n\n await saveWork({\n id: work.id,\n name: work.name,\n countryId: work.countryId,\n settings: w.settings,\n contextData: w.contextData,\n resetPasswordTemplateId: w.resetPasswordTemplateId,\n contractorInvitationTemplateId: w.contractorInvitationTemplateId,\n defaultEmail: form.get('defaultEmail'),\n helpDeskEmail: form.get('helpDeskEmail'),\n footerResource: form.get('footerResource'),\n });\n });\n\n return
\n
\n \n {form.input('defaultEmail', { type: 'email' })}\n \n \n form.setFieldValue('__jobEncodingType', v.target.value)}>\n \n \n \n form.setFieldValue('__jobEncodingPrefix', s.target.value)} />\n \n \n form.setFieldValue('__allowAlwaysNotifyInformationLoaded', s.target.value)} />\n \n \n form.setFieldValue('__jobHiddenFields', s.target.value)} />\n \n \n form.setFieldValue('__contractorHiddenFields', s.target.value)} />\n \n \n form.setFieldValue('__workerHiddenFields', s.target.value)} />\n \n \n form.setFieldValue('__machineryHiddenFields', s.target.value)} />\n \n \n form.setFieldValue('__createJobRelations', s.target.value)} />\n \n \n form.setFieldValue('__clientImage', s.target.value)} />\n \n \n form.setFieldValue('__screenImage', s.target.value)} />\n \n \n form.setFieldValue('__simpleDelayedRevokation', s.target.value)} />\n \n \n form.setFieldValue('__jobDelayedRevokation', s.target.value)} />\n \n \n form.setFieldValue('__hideByDefaultEnded', s.target.value)} />\n \n \n form.setFieldValue('__hideByDefaultEndedContractors', s.target.value)} />\n \n \n form.setFieldValue('__jobChainFinalisation', s.target.value)} />\n \n \n {form.select('contractorInvitationTemplateId', {\n blank: true,\n options: notificationTemplates.value ?? [],\n })}\n \n \n {form.select('resetPasswordTemplateId', {\n blank: true,\n options: notificationTemplates.value ?? [],\n })}\n \n \n {form.input('helpDeskEmail', { type: 'email' })}\n \n\n \n form.setFieldValue('__reactivateResourcesBehavior', v.target.value)}>\n \n \n\n \n \n
\n \n {form.input('footerResource', { type: 'text' })}\n \n \n {form.input('__contextDataPhone', { type: 'text' })}\n \n \n {form.input('__contextDataEmail', { type: 'text' })}\n \n
\n
\n
\n
\n
\n
\n {loading.render()}\n \n {t('Save')}\n \n
\n
\n}\n\nexport function AdminWorkConfiguration(props: IProps) {\n const { t } = useTranslation();\n\n return
\n \n\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
\n}\n","import { connect } from 'react-redux';\nimport { ApplicationState } from '../../store';\nimport * as Admin from '../../store/admin';\n\nimport { AdminWorkConfiguration, IProps } from '../../components/admin/AdminWorkConfiguration';\n\nexport default connect(\n (state: ApplicationState) => ({\n ...Admin.plainActions,\n }),\n Admin.actionCreators,\n)(AdminWorkConfiguration as any) as any; // eslint-disable-line @typescript-eslint/no-explicit-any\n","import * as React from 'react';\n\nimport { Card, Chip, G, useDialogs, useForm, useLoading, useToast, useTranslation, ValidationBuilder } from '@components';\nimport {\n IActivityType, IContractorInvitation, ICountry, ILegalForm,\n PropertyGroupObjectType, IPropertyGroupType, IWork, PropertyTypes, IPropertyGroup, IContractorInvitationRegisterData\n} from '@models';\nimport { delay, redirectTo } from '@utils';\nimport { CountryRegionSelect } from '@components/common/CountryRegionSelect';\nimport { DynamicProperties } from '@components/user/DynamicProperties';\nimport './RegisterContractor.scss';\n\nexport interface IProps {\n getContractorInvitation: Function;\n getWorkConstants: Function;\n registerContractorInvitation: Function;\n token: string;\n onSuccess?: Function;\n propertyGroupTypes?: IPropertyGroupType[],\n getWork: Function;\n}\n\n\nfunction RegisterContractorForm(props: IProps) {\n const { t } = useTranslation();\n const toast = useToast();\n const loading = useLoading(true);\n const [invitation, setInvitation] = React.useState();\n const [activityTypes, setActivityTypes] = React.useState([]);\n const [legalForms, setLegalForms] = React.useState([]);\n const [countries, setCountries] = React.useState([]);\n const [legalFormMandatory, setLegalFormMandatory] = React.useState(false);\n const [hiddenFields, setHiddenFields] = React.useState([]);\n const [selectedLegalForm, setSelectedLegalForm] = React.useState();\n const propertiesInvalid = React.useRef();\n const [isActive, setIsActive] = React.useState(false);\n const dialogs = useDialogs();\n\n React.useEffect(() => {\n if (invitation) {\n const updateValues: any = {\n workId: invitation.workId,\n email: invitation.email,\n invitationId: invitation.id,\n jobId: invitation.jobId,\n parentId: invitation.parentJobHasContractorId,\n name: invitation.name,\n shipmentNumber: invitation.shipmentNumber,\n jobsDescription: invitation.jobsDescription,\n startDate: invitation.startDate,\n };\n form.setFieldValues(updateValues);\n }\n }, [invitation, activityTypes, legalForms, countries]);\n\n const createValidation = (workId?: number) =>\n ValidationBuilder\n .new()\n .notEmpty('name', 'Contractor name is required')\n .notEmpty('code', 'Code is required')\n .minLength('code', 4, 'Code must be at least 4 characters long')\n .notEmptyIf(legalFormMandatory, 'legalFormId', 'Legal form is required')\n .notEmpty('address', 'Address is required')\n .notEmpty('postalCode', 'Postal Code is required')\n .notEmpty('countryId', 'Country is required')\n .notEmpty('city', 'City is required')\n .notEmpty('userName', 'Username is required')\n .notEmpty('password', 'Password is required')\n .notEmpty('contactName', 'Name is required')\n .notEmpty('contactSurname', 'Surname is required')\n .notEmpty('contactPhone', 'Phone is required')\n .notEmptyIf(workId == 21, 'contactEmail', 'Contact email is required')\n .notEmptyIf(workId != 21, 'otherActivityType', 'Activity type is required')\n .email('contactEmail',)\n .notEmpty('email', 'Email is required')\n .notEmpty('passwordConfirmation', 'Password confirmation')\n .equalTo('passwordConfirmation', 'password', 'Passwords do not match')\n .lift();\n\n const form = useForm({\n initialValues: {\n code: '',\n name: invitation?.name ?? '',\n workId: invitation?.workId!,\n remarks: '',\n legalFormId: 0,\n activityTypeId: undefined,\n address: '',\n postalCode: '',\n countryId: undefined,\n regionId: undefined,\n countyId: undefined,\n\n contactName: '',\n contactSurname: '',\n contactPhone: '',\n contactEmail: '',\n\n invitationId: invitation?.id,\n jobId: invitation?.jobId,\n email: invitation?.email!,\n password: '',\n passwordConfirmation: '',\n properties: [{\n \"value\": \"{}\",\n \"valueObj\": {}\n }],\n\n providerCode: '',\n shipmentNumber: invitation?.shipmentNumber,\n jobsDescription: invitation?.jobsDescription,\n startDate: invitation?.startDate,\n },\n validate: createValidation(invitation?.workId),\n validateOnMount: true,\n });\n\n const initialize = loading.wrap(async (token: string) => {\n const data = await props.getContractorInvitation(token);\n setInvitation(data);\n\n if (data.isActive == false) {\n setIsActive(false);\n dialogs.show('contractor-invitation-expired');\n return;\n }\n\n setIsActive(true);\n\n const constants = await props.getWorkConstants(data.workId);\n\n if (constants.workSettings != undefined && constants.workSettings.contractorHiddenFields != undefined) {\n setLegalFormMandatory(!constants.workSettings.contractorHiddenFields.includes('legalFormId'));\n }\n\n if (constants.workSettings != undefined && constants.workSettings.contractorHiddenFields != undefined) {\n const hiddenFields = constants.workSettings.contractorHiddenFields;\n setHiddenFields(hiddenFields);\n }\n\n setActivityTypes(constants.activityTypes);\n setLegalForms(constants.legalForms);\n if (data.workId != 21) {\n for (let c in constants.countries) {\n if (constants.countries[c].regions.length > 0) {\n constants.countries[c].regions = [];\n }\n }\n }\n setCountries(constants.countries);\n });\n\n const showField = (field: string) => {\n return !hiddenFields.includes(field);\n }\n\n const calculateProperties = () => {\n const values: IPropertyGroup[] = form.values.properties;\n let newValues: IPropertyGroup[] = [];\n if (selectedLegalForm?.hideContractorProperties) {\n values.map((p: IPropertyGroup) => {\n if (invitation?.propertyGroupTypes != undefined && invitation.propertyGroupTypes.find(g => g.id == p.propertyGroupTypeId)?.hidable) {\n newValues = values.filter(v => v.propertyGroupTypeId == undefined && v.propertyGroupTypeId != p.propertyGroupTypeId && v.value != \"{}\");\n }\n });\n return newValues;\n }\n newValues = values.filter(v => v.propertyGroupTypeId != undefined && v.value != \"{}\")\n\n return newValues;\n }\n\n const doSave = loading.wrap(async (..._: any) => {\n const contractorData: IContractorInvitationRegisterData = {\n activityTypeId: form.values.activityTypeId,\n otherActivityType: form.values.otherActivityType,\n code: form.values.code,\n email: form.values.email,\n legalFormId: form.values.legalFormId,\n name: form.values.name,\n password: form.values.password,\n properties: calculateProperties(),\n workId: invitation?.workId!,\n address: form.values.address,\n contactEmail: form.values.contactEmail,\n contactName: form.values.contactName,\n contactPhone: form.values.contactPhone,\n contactSurname: form.values.contactSurname,\n countryId: form.values.countryId,\n countyId: form.values.countyId,\n invitationId: invitation?.id,\n remarks: form.values.remarks,\n userName: form.values.userName,\n parentId: invitation?.parentJobHasContractorId,\n jobId: invitation?.jobId,\n postalCode: form.values.postalCode,\n city: form.values.city,\n }\n\n const resp = await props.registerContractorInvitation(contractorData);\n\n if (resp.hasValue) {\n toast.show(t('Contractor registered successfully'));\n props.onSuccess && props.onSuccess(form.values);\n }\n else {\n toast.error(t('Error'), { detail: t(resp.error) });\n }\n });\n\n React.useEffect(() => {\n const lf = legalForms.find(l => l.id == form.values.legalFormId);\n setSelectedLegalForm(lf);\n }, [form.values.legalFormId])\n\n const calculateFormPropertiesAreValid = () => {\n\n const mandatoryPropertyIds: number[] = [];\n const mandatoryPropertyNames: string[] = [];\n\n //Si existen el formulario, evaluamos las propiedades dinámicas acordes a las existentes\n if (form.values.properties != undefined && form.values.properties.length > 0) {\n let hiddens: number = 0;\n if (invitation?.propertyGroupTypes != undefined && invitation.propertyGroupTypes.length > 0) {\n const boolTextNames: string[] = [];\n invitation.propertyGroupTypes.map(g => {\n // ¿Está ocultada esta propiedad por la forma legal y la propiedad hidable del grupo de propiedades?\n const isHidden = selectedLegalForm?.hideContractorProperties && g.hidable;\n if (!isHidden) {\n if (g.mandatory) {\n // Si el grupo de propiedades no está oculto y es obligatorio -> cargamos su ID y los nombres de sus propiedades\n mandatoryPropertyIds.push(g.id!);\n if (g.properties != undefined && g.properties.length > 0) {\n g.properties.map(p => {\n mandatoryPropertyNames.push(p.name);\n // Si alguna de las propiedades es de tipo BoolText, la almacenamos\n if (p.typeId == PropertyTypes.BOOLTEXT) {\n boolTextNames.push(p.name);\n }\n })\n }\n }\n }\n else {\n // Si está ocultada, ya sea por:\n // 1- El grupo de propiedades no es ocultable\n // 2- La forma legal no oculta las propiedades\n // -> La contabilizamos\n hiddens += 1;\n }\n });\n if (mandatoryPropertyIds != undefined && mandatoryPropertyIds.length > 0) {\n const properties: any[] = [];\n\n // Evaluamos cuáles son las propiedades del formulario que son obligatorias\n form.values.properties.map((p: any) => {\n mandatoryPropertyIds.map(m => {\n if (p.propertyGroupTypeId == m) {\n properties.push(p);\n }\n })\n });\n if (properties != undefined && properties.length > 0) {\n const values: boolean[] = []\n\n properties.map(p => {\n // Si cualquiera de estas propiedades tiene valor, lo evaluamos\n if (p.valueObj != \"{}\") {\n mandatoryPropertyNames.map(m => {\n // Evaluamos si los BoolTexts hallados tienen valor de texto\n if (boolTextNames.includes(m)) {\n boolTextNames.map(b => {\n if (b == m) {\n const valueText = p.valueObj[m + \"_text\"];\n if (valueText == \"\" || valueText == undefined) {\n values.push(false);\n }\n else {\n values.push(true);\n }\n }\n })\n }\n // Obtenemos su valor teniendo en cuenta que undefined es false\n else {\n const value = p.valueObj[m];\n if (value != undefined) {\n values.push(value);\n }\n else {\n values.push(false);\n }\n }\n })\n }\n else {\n values.push(false);\n }\n });\n // Si existe algún true en el array, entonces el grupo de propiedades es válido\n if (values.some(v => v)) {\n propertiesInvalid.current = false;\n }\n else {\n if (hiddens < invitation.propertyGroupTypes.length) {\n propertiesInvalid.current = true;\n }\n }\n }\n }\n if (hiddens == invitation.propertyGroupTypes.filter(g => g.mandatory).length) {\n propertiesInvalid.current = false;\n }\n }\n }\n }\n\n React.useEffect(() => {\n calculateFormPropertiesAreValid();\n }, [form.values.properties, selectedLegalForm])\n\n React.useEffect(() => {\n initialize(props.token);\n }, []);\n\n return
\n {toast.render()}\n\n {dialogs.render('contractor-invitation-expired', {\n modal: true,\n showCloseFooter: false,\n closable: false,\n draggable: false,\n title: t('Inactive invitation'),\n }, () =>\n
\n
{t('contact.someone')}
\n
\n )}\n\n {invitation &&\n
\n
\n \n {t('contractor.register.message')}\n \n\n {loading.renderBox()}\n
\n
\n
\n

{t('Contractor data')}

\n \n {form.input('name')}\n \n \n {form.input('code')}\n \n {showField('activityTypeId') && \n {form.select('activityTypeId', {\n options: activityTypes,\n })}\n }\n {legalFormMandatory &&\n \n {form.select('legalFormId', {\n options: legalForms.sort((a, b) => a.name.localeCompare(b.name)),\n filter: true,\n })}\n }\n {invitation.workId != 21 &&\n \n {form.input('providerCode')}\n }\n {invitation.workId != 21 &&\n \n {form.input('otherActivityType')}\n }\n \n {form.input('address')}\n \n \n {form.input('postalCode')}\n \n \n
\n {\n form.setFieldValue('countryId', d.countryId);\n if (d.regionId) {\n form.setFieldValue('regionId', d.regionId);\n }\n if (d.countyId) {\n form.setFieldValue('countyId', d.countyId);\n }\n }} />\n {form.getFormErrorMessage('countryId')}\n
\n
\n \n {form.input('city')}\n \n \n {form.textarea('remarks')}\n \n\n {invitation.workId == 21 && <>
\n form.setFieldValue('properties', properties)} />\n {propertiesInvalid.current && {t('dynamic.properties.error')}}\n }\n\n
\n
\n

{t('Contact data')}

\n \n {form.input('contactName')}\n \n \n {form.input('contactSurname')}\n \n \n {form.input('contactPhone')}\n \n {invitation.workId == 21 && \n {form.input('contactEmail')}\n }\n
\n
\n

{t('Access data') + ' ' + '\\(' + t('User') + '\\)'}

\n \n {/* {form.input('username', {defaultValue: invitation.email})} */}\n {form.input('userName')}\n \n \n {form.input('email', { type: 'email' })}\n \n \n {form.input('password', { type: 'password' })}\n \n \n {form.input('passwordConfirmation', { type: 'password' })}\n \n
\n
\n {invitation.workId != 21 &&\n

{t('Other data')}

}\n {invitation.workId != 21 && <>
\n form.setFieldValue('properties', properties)} />\n {propertiesInvalid.current && {t('dynamic.properties.error')}}\n }\n
\n
\n {form.errorBox()}\n
\n
\n
\n \n {t('Create')}\n \n
\n
}\n
;\n}\n\nfunction RegisterContractorSuccess({ data }: { data: IContractorInvitation }) {\n const { t } = useTranslation();\n\n return
\n
\n \n
\n
\n \n {t('User created successfully')}\n \n \n
\n\n
\n \n \n \n
\n
\n
\n
\n
\n}\n\nenum State {\n INIT = 0,\n SUCCESS = 1,\n}\n\nexport function RegisterContractor(props: IProps) {\n const [state, setState] = React.useState(State.INIT);\n const [data, setData] = React.useState();\n\n const onSuccess = async (data: IContractorInvitation) => {\n setData(data);\n setState(State.SUCCESS);\n await delay(2000);\n redirectTo('/');\n }\n\n if (state == State.INIT) {\n return ;\n }\n else if (state == State.SUCCESS && data) {\n return \n }\n else {\n return null;\n }\n}\n","import * as React from 'react';\n\nimport { connect } from 'react-redux';\nimport { ApplicationState } from '../../store';\nimport * as ContractorsStore from '@store/contractors';\nimport * as AdminStore from '@store/actions/admin';\nimport { RegisterContractor } from '@components/contractors/RegisterContractor';\n\nexport default connect(\n (_: ApplicationState, props: any) => ({\n getContractorInvitation: ContractorsStore.plainActions.getContractorInvitation,\n getWorkConstants: ContractorsStore.plainActions.getWorkConstants,\n registerContractorInvitation: ContractorsStore.plainActions.registerContractorInvitation,\n token: props.match.params.token,\n getWork: AdminStore.getWork,\n }),\n {}\n)(RegisterContractor as any) as any; // eslint-disable-line @typescript-eslint/no-explicit-any\n","import * as React from 'react';\n\nimport { connect } from 'react-redux';\nimport { ApplicationState } from '../../store';\nimport { RecoverPassword } from '@components/identity/RecoverPassword';\nimport * as UserStore from '@store/user';\n\nexport default connect(\n (_: ApplicationState, props: any) => ({\n token: props.match.params.token,\n ...UserStore.plainActions,\n }),\n {}\n)(RecoverPassword as any) as any; // eslint-disable-line @typescript-eslint/no-explicit-any\n","import * as React from 'react';\n\nimport { useForm, useLoading, useToast, useTranslation, ValidationBuilder, G } from '@components';\nimport { delay, redirectTo } from '@utils';\nimport { IChangePasswordData } from '@models/forms';\n\nexport interface IProps {\n token: string;\n changeUserPassword: Function;\n}\n\ntype RecoverData = {\n email: string,\n password: string,\n passwordConfirm: string,\n userName: string\n}\n\nexport function RecoverPassword(props: IProps) {\n const loading = useLoading();\n const { t } = useTranslation();\n const toast = useToast();\n\n const form = useForm({\n initialValues: {\n email: '',\n password: '',\n passwordConfirm: '',\n userName: '',\n },\n validateOnMount: true,\n validate: data => ValidationBuilder.create(data)\n .notEmpty('email')\n .email('email')\n .notEmpty('password')\n .minLength('password', 4)\n .notEmpty('userName')\n .match('passwordConfirm', data.password, 'Passwords do not match')\n .build()\n });\n\n const changePassword = loading.wrap(async () => {\n const data: IChangePasswordData = {\n email: form.values.email,\n token: window.location.href.split('recover/')[1],\n password: form.values.password,\n userName: form.values.userName\n };\n\n const resp = await props.changeUserPassword(data);\n form.setFieldValue('email', '');\n if (resp.isError) {\n toast.error(t(resp.error));\n }\n else {\n toast.show(t('Password changed successfully'));\n await delay(2000);\n redirectTo('/');\n }\n });\n\n return
\n {toast.render()}\n
\n {t('password.reset')}\n \n {form.input('email', {type: 'email'})}\n \n \n {form.input('userName')}\n \n \n {form.input('password', {type: 'password'})}\n \n \n {form.input('passwordConfirm', {type: 'password'})}\n \n
\n {loading.render()}\n {t('Change password')}\n
\n
\n
\n}","import * as React from 'react';\n\nimport { ISecurity } from '@models';\nimport { Card, G, Tag, useForm, useLoading, useMessage, useTranslation, ValidationBuilder } from '@components';\nimport { IChangePasswordData } from '@models/forms';\n\nimport './ChangePassword.scss';\n\nexport interface IProps {\n changePassword: Function;\n security: ISecurity;\n}\n\nconst validateUserData = (data: IChangePasswordData) => {\n return ValidationBuilder.create(data)\n .notEmpty('password', 'Password is required')\n .equalTo('passwordConfirmation', 'password', 'Passwords do not match')\n .build();\n}\n\nexport function ChangePassword(props: IProps) {\n const loading = useLoading();\n const { t } = useTranslation();\n\n const messages = useMessage();\n const form = useForm({\n validateOnMount: true,\n initialValues: {\n userId: props.security.user?.id,\n password: '',\n passwordConfirmation: '',\n },\n loading: loading,\n validate: validateUserData,\n });\n\n const doChange = loading.wrap(async (..._: any) => {\n const resp = await props.changePassword({\n ...form.values,\n userId: props.security.user?.id,\n });\n messages.set(resp, { successMessage: t('Password changed successfully') });\n });\n\n return
\n \n
\n
\n {t('Changing password for user')} {props.security.user?.email}\n
\n \n {form.input('password', { type: 'password' })}\n \n \n {form.input('passwordConfirmation', { type: 'password' })}\n \n
\n
\n
\n {loading.render()}\n {t('Change password')}\n
\n {messages.render()}\n \n
\n}","import { connect } from 'react-redux';\nimport { ApplicationState } from '../../store';\nimport * as UserStore from '@store/user';\nimport { ChangePassword } from '@components/user/ChangePassword';\n\nexport default connect(\n (state: ApplicationState) => ({\n ...state.identity,\n ...UserStore.plainActions,\n }),\n {\n },\n)(ChangePassword as any) as any; // eslint-disable-line @typescript-eslint/no-explicit-any\n","import * as React from 'react';\n\nimport { Card, G, Tag, useForm, useLoading, useMessage, useTranslation, useWorkFormSettings, ValidationBuilder } from '@components';\nimport {\n IActivityType, IConstants, IContractor, IFieldValidation, ILegalForm, IPropertyGroupType, IResourceStatusType, ISecurity, IWork,\n PropertyGroupObjectType, ResourceType\n} from '@models';\n\nimport './ChangePassword.scss';\nimport { CountryRegionSelect } from '@components/common/CountryRegionSelect';\nimport { saveContractor } from '@store/actions/contractors';\nimport { useRemoteData, useToast } from '@utils/hooks';\nimport { DynamicProperties } from './DynamicProperties';\n\ntype GetContractorF = (workId: number, id: number) => Promise;\ntype ContractorFromAppUserF = (workId: number) => Promise;\n\nexport interface IProps {\n propertyGroupTypes: IPropertyGroupType[];\n legalForms: ILegalForm[];\n activityTypes: IActivityType[];\n constants: IConstants;\n getContractor: GetContractorF;\n getContractorFromAppUser: ContractorFromAppUserF;\n work: IWork;\n contractor: IContractor;\n contractorId: number;\n security: ISecurity;\n saveContractor: Function;\n resourceStatusTypes: IResourceStatusType[];\n // showRequirements?: boolean;\n}\n\nenum FormType {\n Data = 1,\n Requirements = 2,\n AccessData = 3,\n}\n\nconst validateUserData = (fieldValidations: IFieldValidation[] | undefined) => {\n return ValidationBuilder.new()\n .notEmpty('')\n .withFieldValidations(ResourceType.Contractor, fieldValidations)\n .lift();\n}\n\nfunction UserConfigurationForm(props: IProps) {\n const { t } = useTranslation();\n const loading = useLoading();\n const toast = useToast();\n // const dialogs = useDialogs();\n const saveContractor = loading.wrap(async (req: IContractor) => {\n const resp = await props.saveContractor(props.work.id, req);\n if (resp.hasValue) {\n toast.show(t('Contractor preferences updated'));\n return { ok: true };\n }\n else {\n return { ok: false, message: resp.error };\n }\n }\n );\n\n // const settings = useWorkFormSettings({work: props.work, scope: 'contractor'});\n\n const canSave = props.security.hasPermission('contractors.edit');\n\n // const validateContractor = validateUserData(props.work.validations ?? []);\n\n const form = useForm({\n readonly: !canSave,\n initialValues: {\n id: props.contractorId,\n workId: props.contractor.workId,\n name: props.contractor.name,\n code: props.contractor.code,\n address: props.contractor.address,\n postalCode: props.contractor.postalCode,\n countryId: props.contractor.countryId,\n regionId: props.contractor.regionId,\n countyId: props.contractor.countyId,\n isActive: props.contractor.isActive,\n properties: props.contractor.properties,\n phone: props.contractor.phone,\n remarks: props.contractor.remarks,\n providerCode: props.contractor.providerCode\n },\n // validate: validateContractor,\n onSubmit: (data: IContractor) => {\n return saveContractor(data);\n }\n })\n\n const doSave = (..._: any) => {\n return saveContractor(form.values);\n }\n\n return
\n \n
\n
\n {t('Changing preferences')}\n
\n \n {form.input('place')}\n \n
\n {form.input('iva')}{form.input('code')}\n
\n \n {form.input('social.region')}\n \n \n {form.input('activity')}\n \n {form.input('address')}\n \n
\n {form.input('postalCode')} {form.input('province')}\n
\n \n {form.input('phone')}\n \n \n {form.input('email')}\n \n form.setFieldValue('properties', v)}\n embedPortal={'#embed-properties'}\n objectType={PropertyGroupObjectType.JobHasContractor}\n propertyGroupTypes={props.propertyGroupTypes} />\n \n {form.textarea('remarks')}\n \n {form.errorBox()}\n
\n
\n
\n {loading.render()}\n {canSave && {t('Change preferences')}}\n
\n \n
\n}\n\nexport function UserConfiguration(props: IProps) {\n const data = useRemoteData(props.getContractor, {\n parameters: [props.work.id, props.contractorId]\n });\n\n return
\n {data.renderLoading()}\n {data.value && }\n
\n}","import * as React from 'react';\n\nimport { connect } from 'react-redux';\nimport { ApplicationState } from '../../store';\nimport * as ContractorsStore from '../../store/contractors';\nimport * as UserStore from '@store/user';\nimport { isJobHasContractorPropertyGroupType } from '../../models';\nimport { UserConfiguration } from '@components/user/UserConfiguration';\n\n\n\nexport default connect(\n (state: ApplicationState, params: any) => ({\n ...state.identity,\n ...UserStore.plainActions,\n contractorId: params.contractorId ?? parseInt(params.match?.params?.contractorid),\n workId: params.workId ?? parseInt(params.match?.params?.workid),\n ...state.identity,\n ...state.user,\n ...ContractorsStore.plainActions,\n constants: state.constants,\n propertyGroupTypes: state.user.propertyGroupTypes.filter(isJobHasContractorPropertyGroupType),\n resourceStatusTypes: state.user.resourceStatusTypes,\n }),\n UserStore.actionCreators,\n)(UserConfiguration as any) as any; // eslint-disable-line @typescript-eslint/no-explicit-any\n","import * as React from 'react';\n\nimport {\n Select,\n useConfirm,\n useLoading,\n useMemoized,\n useMessage,\n useRemoteData,\n useResolveName,\n useTranslation\n} from '@components';\nimport { IWork } from '@models';\nimport {\n IRequirementGroup,\n IRequirementType,\n RequirementTargetType,\n RequirementTypeDependencyType,\n requirementTargetTypes\n} from '@models/requirements';\nimport { flatten } from '@utils';\n\nexport interface IProps {\n getWorkRequirementGroups: Function;\n onClose: Function;\n onSuccess: Function;\n removeWorkRequirementTypeDependency: Function;\n saveWorkRequirementTypeDependency: Function;\n selectedTargetType: number|undefined;\n requirementGroups: IRequirementGroup[];\n requirementType: IRequirementType;\n work: IWork;\n}\n\nenum DependencyOptions {\n NONE = 0,\n PROPAGATE = 1,\n}\n\nexport function EditRequirementTypeDependencies(props: IProps) {\n const { t } = useTranslation();\n const loading = useLoading();\n const message = useMessage();\n\n const allRequirementGroups = useRemoteData(\n props.getWorkRequirementGroups,\n {\n parameters: [ props.work.id ],\n });\n\n const allDependencyOptions = React.useRef([\n {id: DependencyOptions.NONE, name: t('Select an option')},\n {id: DependencyOptions.PROPAGATE, name: t('Propagate validation')},\n ]);\n\n const allRequirementDependencyTypes = React.useRef([\n {id: RequirementTypeDependencyType.RequirementMustHaveBeenRead, name: t('RequirementMustHaveBeenRead')},\n {id: RequirementTypeDependencyType.RequirementMustHaveBeenValidated, name: t('RequirementMustHaveBeenValidated')},\n {id: RequirementTypeDependencyType.IBO, name: t('requirements.dependency.ibo')},\n ]);\n\n const [selectedDependencyType, setSelectedDependencyType] =\n React.useState(RequirementTypeDependencyType.RequirementMustHaveBeenValidated);\n const [dependencyOptions, setDependencyOptions] = React.useState(DependencyOptions.NONE);\n\n const [allRequirements, setAllRequirements] = React.useState(\n flatten(\n props.requirementGroups.map(g => g.requirementTypes ?? []))\n .filter(r => r.isActive && r.id != props.requirementType.id)\n );\n const [selected, setSelected] = React.useState();\n\n const resolveDependency = useMemoized((id: number) => {\n const d = allRequirements.find(d => d.id == id);\n return d?.title;\n }, [ allRequirements ]);\n const resolveDependencyType = useResolveName(allRequirementDependencyTypes.current);\n const dependencies = props.requirementType.dependencies ?? [];\n\n const doAddRequirement = loading.wrap(async () => {\n if (selected || selectedDependencyType === RequirementTypeDependencyType.IBO) {\n const propagate = dependencyOptions === DependencyOptions.PROPAGATE;\n\n const obj = {\n id: undefined,\n requirementTypeId: props.requirementType.id!,\n dependsOnRequirementId: selected,\n dependencyType: selectedDependencyType,\n propagate: propagate,\n };\n const res = await props.saveWorkRequirementTypeDependency(\n props.requirementType.workId,\n obj);\n message.set(res);\n\n if (res.hasValue) {\n obj.id = res.value;\n props.onSuccess({\n ...props.requirementType,\n dependencies: dependencies.concat([obj])\n }, false);\n }\n\n setDependencyOptions(DependencyOptions.NONE);\n }\n });\n\n const doRemove = loading.wrap(async (id: number) => {\n const res = await props.removeWorkRequirementTypeDependency(\n props.requirementType.workId,\n id);\n message.set(res);\n if (res.hasValue) {\n props.onSuccess({\n ...props.requirementType,\n dependencies: dependencies.filter(d => d.id != id)\n }, false);\n }\n });\n\n const confirm = useConfirm({\n message: t('Are you sure to remove this dependency?'),\n accept: doRemove,\n });\n\n const getRequirementTitle = (d: IRequirementType) => {\n const targetTypeName = requirementTargetTypes.find(r => r.id === d.targetType)?.name;\n return `${d?.name} - ${targetTypeName}: ${d?.title}`;\n }\n\n React.useEffect(() => {\n if (props.selectedTargetType === RequirementTargetType.JobHasContractor\n && allRequirementGroups.value != undefined) {\n const groups = flatten(allRequirementGroups.value.map(g => g.requirementTypes ?? []))\n .filter(r =>\n r.id != props.requirementType.id\n && (\n r.targetType === RequirementTargetType.Contractor\n || r.targetType === RequirementTargetType.JobHasContractor\n || r.targetType === RequirementTargetType.Job\n || r.targetType === RequirementTargetType.JobHasDepartment)\n )\n .map(r => ({...r, title: getRequirementTitle(r) })).sort((a, b) => a.title.localeCompare(b.title));\n setAllRequirements(groups);\n }\n else if (props.selectedTargetType === RequirementTargetType.JobHasWorker\n && allRequirementGroups.value != undefined) {\n const groups = flatten(allRequirementGroups.value.map(g => g.requirementTypes ?? []))\n .filter(r =>\n r.id != props.requirementType.id\n && (\n r.targetType === RequirementTargetType.Worker\n || r.targetType === RequirementTargetType.JobHasWorker\n || r.targetType === RequirementTargetType.Job\n || r.targetType === RequirementTargetType.JobHasContractor\n || r.targetType === RequirementTargetType.JobHasDepartment)\n )\n .map(r => ({...r, title: getRequirementTitle(r) })).sort((a, b) => a.title.localeCompare(b.title));\n setAllRequirements(groups);\n }\n else if (props.selectedTargetType === RequirementTargetType.JobHasMachinery\n && allRequirementGroups.value != undefined) {\n const groups = flatten(allRequirementGroups.value.map(g => g.requirementTypes ?? []))\n .filter(r =>\n r.id != props.requirementType.id\n && (\n r.targetType === RequirementTargetType.Machinery\n || r.targetType === RequirementTargetType.JobHasMachinery\n || r.targetType === RequirementTargetType.Job\n || r.targetType === RequirementTargetType.JobHasContractor\n || r.targetType === RequirementTargetType.JobHasDepartment)\n )\n .map(r => ({...r, title: getRequirementTitle(r) })).sort((a, b) => a.title.localeCompare(b.title));\n setAllRequirements(groups);\n }\n else if (allRequirementGroups.value != undefined) {\n const groups = flatten(allRequirementGroups.value.map(g => g.requirementTypes ?? []))\n .filter(r => r.id != props.requirementType.id)\n .map(r => ({...r, title: getRequirementTitle(r) }))\n .sort((a, b) => a.title.localeCompare(b.title));\n setAllRequirements(groups);\n }\n }, [ allRequirementGroups.value ]);\n\n return
\n {allRequirementGroups.renderLoading()}\n {allRequirementGroups.hasValues() &&\n
\n \n \n \n \n \n \n {dependencies.map((d, i) =>\n \n \n \n \n \n )}\n \n \n \n \n \n \n
\n \n \n
{resolveDependency(d.dependsOnRequirementId)}{resolveDependencyType(d.dependencyType)}\n {d.propagate\n && {t('Propagate validation')}}\n \n confirm(d.id, e)}/>\n
\n
\n
{t('Add requirement dependency')}
\n
\n {loading.renderBox()}\n
\n d.isActive)}\n optionLabel='title'\n optionValue='id'\n value={selected}\n filter\n filterBy={'name'}\n onChange={e => setSelected(e.target.value)}/>\n setSelectedDependencyType(e.target.value)}\n />\n setDependencyOptions(e.target.value)}/>\n\n \n doAddRequirement()}/>\n \n\n {message.render()}\n
\n
\n
\n
\n
\n }\n
\n \n
\n
;\n}","import { connect } from 'react-redux';\nimport { ApplicationState } from '../../../store';\nimport * as ConstantsStore from '../../../store/constants';\nimport * as App from '../../../store/app';\nimport * as Admin from '../../../store/admin';\n\nimport { EditRequirementTypeDependencies } from '@components/admin/requirementTypes/EditRequirementTypeDependencies';\n\nexport default connect(\n (state: ApplicationState) => ({\n ...Admin.plainActions,\n }),\n {},\n)(EditRequirementTypeDependencies as any) as any; // eslint-disable-line @typescript-eslint/no-explicit-any\n","import {IWork} from \"@models\";\nimport {RequirementTargetType} from \"@models/requirements\";\nimport {flatten} from \"@utils\";\n\nexport const getTargetEntityName = (target: RequirementTargetType) => {\n const targets = {\n [RequirementTargetType.Contractor]: 'Contractor',\n [RequirementTargetType.JobHasContractor]: 'JobHasContractor',\n [RequirementTargetType.JobHasDepartment]: 'JobHasDepartment',\n [RequirementTargetType.JobHasMachinery]: 'JobHasMachinery',\n [RequirementTargetType.JobHasWorker]: 'JobHasWorker',\n [RequirementTargetType.Machinery]: 'Machinery',\n [RequirementTargetType.Worker]: 'Worker',\n [RequirementTargetType.Job]: 'Job',\n };\n\n return targets[target];\n}\n\nexport const getReferenceValues = (p: string|undefined, work: IWork, constants: any) => {\n if (p?.endsWith('MachineryTypeId')) {\n return constants.machineryTypes;\n }\n else if (p?.endsWith('MachinerySubTypeId')) {\n const m = constants.machineryTypes;\n const s = m.map((m: any) => m.subTypes.map((s: any) => ({...s, name: m.name + ': ' + s.name})));\n\n return flatten(s);\n }\n else if (p?.endsWith('WorkShiftId')) {\n return constants.workShifts;\n }\n else if (p?.endsWith('WorkspaceId')) {\n return constants.workspaces;\n }\n else if (p?.endsWith('LegalFormId') || p === 'LegalFormId' || p === 'Contractor.LegalFormId') {\n return constants.legalForms;\n }\n else if (p?.endsWith('WorkerTypeId')) {\n return constants.workerTypes;\n }\n else if (p?.endsWith('ActivityTypeId')) {\n return constants.activityTypes;\n }\n else if (p?.endsWith('CountryId')) {\n return constants.countries;\n }\n else if (p?.endsWith('CountyId')) {\n const countries = constants.countries;\n const s = flatten(countries.map((c: any) => c.regions.map((r: any) =>\n ({...r, name: c.name + ': ' + r.name})\n )));\n\n const res = flatten(s.map((r: any) =>\n r.counties.map((c: any) =>\n ({...c, name: r.name + ': ' + c.name}))));\n\n return res;\n }\n else if (p?.endsWith('RegionId')) {\n const countries = constants.countries;\n const s = countries.map((c: any) => c.regions.map((r: any) =>\n ({...r, name: c.name + ': ' + r.name})\n ));\n\n return flatten(s);\n }\n else {\n return [];\n }\n}\n\nexport const propertyIsString = (propertyName: string) => {\n return !propertyName.includes(\"Id\");\n}\n\nexport const propertyOperatorName = (id: PropertyOperator) => {\n return allOperators.find(o => o.id === id)?.name ?? '?';\n}\n\nexport const propertyTitle = (target: RequirementTargetType, name: string) => {\n if (name == 'JobHasContractor.ParentId' || (target == RequirementTargetType.JobHasContractor && name === 'ParentId')) {\n return 'contractor.issubcontractor';\n }\n else {\n return name;\n }\n}\n\nexport const propertyIsReference = (name: string|undefined) => {\n const references = [\n 'MachineryTypeId', 'MachinerySubTypeId',\n 'Machinery.MachineryTypeId', 'Machinery.MachinerySubTypeId',\n 'CountryId', 'CountyId', 'RegionId',\n 'LegalFormId', 'ActivityTypeId',\n 'Contractor.LegalFormId', 'Contractor.ActivityTypeId',\n 'Job.ActivityTypeId', 'Job.WorkShiftId',\n 'Job.WorkspaceId',\n 'Worker.WorkerTypeId', 'WorkerTypeId',\n 'Worker.Contractor.LegalFormId',\n ];\n return name != undefined && references.includes(name);\n}\n\nexport const propertyIsBoolean = (name: string|undefined) => {\n return name && ['IsMain'].includes(name);\n}\n\nexport const propertyIsCheckExistence = (name: string|undefined) => {\n return name?.includes('ParentId');\n}\n\nexport enum Operator {\n AND = 1,\n OR = 2\n}\n\nexport enum PropertyOperator {\n EQUAL = 1,\n IN = 2,\n LESSER_THAN = 3,\n GREATER_THAN = 4,\n LESSER_EQUAL_THAN = 5,\n GREATER_EQUAL_THAN = 6,\n CONTAINS = 7,\n NOT_EQUAL = 8,\n TRUE = 9,\n FALSE = 10,\n IS_NULL = 11,\n IS_NOT_NULL = 12,\n}\n\nexport const getCommonProperties = (targetType: RequirementTargetType) => {\n if (targetType === RequirementTargetType.Worker) {\n return [\n 'Name', 'Surname', 'Code', 'Remarks', 'WorkerTypeId', 'LegalFormId',\n 'Contractor.LegalFormId',\n ];\n }\n else if (targetType === RequirementTargetType.JobHasWorker) {\n return [\n 'StartDate',\n 'Worker.Name', 'Worker.Surname', 'Worker.Code', 'Worker.Remarks',\n 'Worker.WorkerTypeId',\n 'Worker.LegalFormId',\n 'Worker.Contractor.LegalFormId',\n 'Job.ActivityTypeId',\n 'Job.WorkShiftId',\n 'Job.WorkspaceId',\n 'JobHasContractor.ParentId',\n ];\n }\n else if (targetType === RequirementTargetType.Contractor) {\n return [\n 'Name', 'Code', 'Remarks', 'LegalFormId', 'ActivityTypeId',\n 'Address', 'PostalCode', 'CountryId', 'RegionId', 'CountyId'\n ];\n }\n else if (targetType === RequirementTargetType.JobHasContractor) {\n return [\n 'Contractor.Name', 'Contractor.Code', 'Contractor.Remarks',\n 'Contractor.LegalFormId', 'Contractor.ActivityTypeId',\n 'Contractor.Address', 'Contractor.PostalCode',\n 'Contractor.CountryId', 'Contractor.RegionId',\n 'Contractor.CountyId', 'JobsDescription',\n 'StartDate', 'EndDate',\n 'ParentId',\n 'Job.ActivityTypeId',\n 'Job.WorkShiftId',\n 'Job.WorkspaceId'\n ];\n }\n else if (targetType === RequirementTargetType.Machinery) {\n return [\n 'Name', 'Code', 'Description', 'MachineryTypeId', 'MachinerySubTypeId',\n ];\n }\n else if (targetType === RequirementTargetType.JobHasMachinery) {\n return [\n 'Machinery.Name', 'Machinery.Code', 'Machinery.Description',\n 'Machinery.MachineryTypeId', 'Machinery.MachinerySubTypeId',\n 'Job.ActivityTypeId',\n 'Job.WorkShiftId',\n 'Job.WorkspaceId',\n 'JobHasContractor.ParentId',\n ];\n }\n else if (targetType === RequirementTargetType.JobHasDepartment) {\n return [\n 'DepartmentId', 'ResponsibleId' , 'DateTime', 'EndDateTime', 'IsMain',\n 'Department.Name',\n 'Job.ActivityTypeId',\n 'Job.WorkShiftId',\n 'Job.WorkspaceId'\n ];\n }\n else {\n return [];\n }\n}\n\nexport const allOperators = [\n {id: PropertyOperator.EQUAL, name: 'expressions.operator.Equal'},\n {id: PropertyOperator.GREATER_EQUAL_THAN, name: 'expressions.operator.GreaterEqualThan'},\n {id: PropertyOperator.GREATER_THAN, name: 'expressions.operator.GreaterThan'},\n {id: PropertyOperator.IN, name: 'expressions.operator.In'},\n {id: PropertyOperator.LESSER_EQUAL_THAN, name: 'expressions.operator.LesserEqualThan'},\n {id: PropertyOperator.LESSER_THAN, name: 'expressions.operator.LesserThan'},\n {id: PropertyOperator.CONTAINS, name: 'expressions.operator.Contains'},\n {id: PropertyOperator.NOT_EQUAL, name: 'expressions.operator.NotEqual'},\n {id: PropertyOperator.TRUE, name: 'expressions.operator.True'},\n {id: PropertyOperator.FALSE, name: 'expressions.operator.False'},\n {id: PropertyOperator.IS_NULL, name: 'expressions.operator.IsNull'},\n {id: PropertyOperator.IS_NOT_NULL, name: 'expressions.operator.IsNotNull'}\n];","import * as React from 'react';\n\nimport {useForm, useLoading, useMessage, useTranslation, MultiSelect} from '@components';\nimport {IRequirementType, RequirementTargetType} from '@models/requirements';\nimport {IPropertyGroupType, IWork, PropertyGroupObjectType} from '@models';\nimport {__d, flatten} from '@utils';\nimport {IExpression, Invocation, parse} from '@utils/expressions';\nimport {\n allOperators,\n getCommonProperties,\n getReferenceValues,\n getTargetEntityName,\n Operator,\n propertyIsBoolean,\n propertyIsCheckExistence,\n propertyIsReference,\n propertyIsString,\n PropertyOperator,\n propertyOperatorName,\n propertyTitle,\n} from './RequirementConstants';\n\nimport './EditRequirementTypeExpressions.scss';\n\nexport interface IProps {\n constants: any;\n onClose: Function;\n onSuccess: Function;\n requirementType: IRequirementType;\n saveRequirementType: Function;\n work: IWork;\n}\n\ninterface IPropertyExpression {\n property: string;\n operator: PropertyOperator;\n value: string | number | boolean | undefined;\n __display?: string;\n}\n\ninterface IExpressionFragment {\n id: number;\n operator: Operator;\n expressions: IPropertyExpression[];\n}\n\nconst matchTargetType = (a: PropertyGroupObjectType, b: RequirementTargetType) => {\n return (a == PropertyGroupObjectType.Contractor && b == RequirementTargetType.Contractor)\n || (a == PropertyGroupObjectType.JobHasContractor && b == RequirementTargetType.JobHasContractor)\n || (a == PropertyGroupObjectType.JobHasContractor && b == RequirementTargetType.Contractor)\n || (a == PropertyGroupObjectType.JobHasMachinery && b == RequirementTargetType.JobHasMachinery)\n || (a == PropertyGroupObjectType.JobHasWorker && b == RequirementTargetType.JobHasWorker)\n || (a == PropertyGroupObjectType.Machinery && b == RequirementTargetType.Machinery)\n || (a == PropertyGroupObjectType.JobHasMachinery && b == RequirementTargetType.Machinery)\n || (a == PropertyGroupObjectType.JobHasWorker && b == RequirementTargetType.Worker);\n}\n\nconst matchJobTargetType = (a: PropertyGroupObjectType, b: RequirementTargetType) => {\n return (a == PropertyGroupObjectType.Job && b == RequirementTargetType.JobHasContractor)\n || (a == PropertyGroupObjectType.Job && b == RequirementTargetType.JobHasWorker)\n || (a == PropertyGroupObjectType.Job && b == RequirementTargetType.JobHasMachinery)\n ;\n}\n\nconst getJobDynamicProperties = (targetType: RequirementTargetType, props: IPropertyGroupType[]) => {\n const g = props.filter(p => matchJobTargetType(p.objectType, targetType));\n return flatten(g.map(a => a.properties ?? []));\n}\n\nconst getDynamicProperties = (targetType: RequirementTargetType, props: IPropertyGroupType[]) => {\n const g = props.filter(p => matchTargetType(p.objectType, targetType));\n return flatten(g.map(a => a.properties ?? []));\n}\n\nconst propertyOperatorToCode = (o: PropertyOperator, propertyName: string) => {\n const isString = propertyIsString(propertyName);\n if (o === PropertyOperator.EQUAL) {\n return [\"==\", '', ''];\n }\n else if (o === PropertyOperator.GREATER_THAN) {\n return [\">\", '', ''];\n }\n else if (o === PropertyOperator.LESSER_THAN) {\n return [\"<\", '', ''];\n }\n else if (o === PropertyOperator.GREATER_EQUAL_THAN) {\n return [\">=\", '', ''];\n }\n else if (o === PropertyOperator.LESSER_EQUAL_THAN) {\n return [\"<=\", '' , ''];\n }\n else if (o === PropertyOperator.CONTAINS && isString) {\n return ['Contains', '(\"', '\")'];\n }\n else if (o === PropertyOperator.CONTAINS) {\n return ['Contains', '(', ')'];\n }\n else if (o === PropertyOperator.NOT_EQUAL) {\n return ['!=', '', ''];\n }\n else {\n return ['', '', ''];\n }\n}\n\nconst INVOCATION_NAME_EXP = new RegExp(/\\(\\\"([\\d|\\w|\\W|_|-]+)\\\"\\)/);\n\nconst propertyToCode = (p: IPropertyExpression, targetEntityName: string) => {\n const propIsBoolean = p.operator === PropertyOperator.TRUE\n || p.operator === PropertyOperator.FALSE;\n\n const resourcePrefix = (p.property.includes('.Job.') || p.property.startsWith('Job.'))\n ? '.Job'\n : targetEntityName === 'JobHasMachinery'\n ? '.Machinery'\n : targetEntityName === 'JobHasContractor'\n ? '.Contractor'\n : targetEntityName === 'JobHasWorker'\n ? '.Worker'\n : '';\n\n if ([PropertyOperator.IS_NOT_NULL, PropertyOperator.IS_NULL].includes(p.operator)) {\n const op = p.operator === PropertyOperator.IS_NULL ? '==' : '!=';\n const prefix = p.property.includes(targetEntityName + '.')\n ? ''\n : `${targetEntityName}.`;\n return `${prefix}${p.property} ${op} null`;\n }\n else if (p.property.includes('Property.') && propIsBoolean) {\n const name = p.property.split('Property.')[1];\n const v = p.operator === PropertyOperator.TRUE\n ? 'true'\n : 'false';\n return `${targetEntityName}${resourcePrefix}.GetBooleanProperty(\"${name}\") == ${v}`;\n }\n else if (p.property.includes('Property.')) {\n const name = p.property.split('.')[2];\n return `${targetEntityName}${resourcePrefix}.GetBooleanProperty(\"${name}\")`;\n }\n else {\n const [op, s, e] = propertyOperatorToCode(p.operator, p.property);\n const value = p.value;\n const sep = s != '' ? '.' : '';\n const prefix = p.property.includes(targetEntityName + '.')\n ? ''\n : `${targetEntityName}.`;\n return `${prefix}${p.property}${sep}${op}${s}${value}${e}`\n }\n}\n\nconst expressionToCode = (f: IExpressionFragment, targetEntityName: string) => {\n const op = f.operator === Operator.AND ? ' && ' : ' || ';\n\n const properties = f.expressions.map(p => propertyToCode(p, targetEntityName));\n\n return '(' + properties.join(op) + ')';\n}\n\nconst expressionsToCode = (fragments: IExpressionFragment[], target: RequirementTargetType) => {\n const targetName = getTargetEntityName(target);\n const source = [];\n for (const f of fragments) {\n if (f.expressions) {\n __d('expressionsToCode', targetName, f.expressions, expressionToCode(f, targetName));\n source.push(expressionToCode(f, targetName));\n }\n }\n\n return source.join(' && ');\n}\n\nconst getPropertyNameWithoutPath = (n: string) => {\n const p = n.split('.');\n\n return p[p.length - 1];\n}\n\nfunction ExpressionFragment({\n constants,\n fragment,\n onChangeOperator,\n onPropertiesChanged,\n requestRemove,\n requirementType,\n propertyGroupTypes,\n work,\n}: {\n constants: any,\n fragment: IExpressionFragment,\n onChangeOperator: Function,\n onPropertiesChanged: Function,\n requestRemove: Function,\n requirementType: IRequirementType,\n propertyGroupTypes: IPropertyGroupType[],\n work: IWork,\n}) {\n const { t } = useTranslation();\n\n const [selectedProperty, setSelectedProperty] = React.useState();\n const [selectedOperator, setSelectedOperator] = React.useState();\n const [operators, setOperators] = React.useState([]);\n const [isReference, setIsReference] = React.useState(false);\n const [referenceValues, setReferenceValues] = React.useState([]);\n const [selectedReference, setSelectedReference] = React.useState();\n const [selectedReferenceName, setSelectedReferenceName] = React.useState();\n const [selectedValue, setSelectedValue] = React.useState();\n\n const [properties, setProperties] = React.useState(fragment.expressions);\n const [displayValues, setDisplayValues] = React.useState({});\n\n const isBooleanProp =\n selectedOperator === PropertyOperator.TRUE\n || selectedOperator === PropertyOperator.FALSE\n || selectedOperator === PropertyOperator.IS_NULL\n || selectedOperator === PropertyOperator.IS_NOT_NULL;\n\n React.useEffect(() => {\n const r = referenceValues.find(r => r.id == selectedReference);\n setSelectedReferenceName(r?.name);\n }, [selectedReference]);\n\n React.useEffect(() => {\n const dvs: any = {};\n for (const i in properties) {\n const p = properties[i];\n const n = getPropertyNameWithoutPath(p.property);\n if (propertyIsReference(n) && p.__display == undefined && displayValues[i] == undefined) {\n const values = getReferenceValues(n, work, constants);\n const v = values.find((a: any) => a.id == p.value)?.name;\n\n if (v) {\n dvs[i] = v;\n }\n }\n }\n if (Object.keys(dvs).length > 0) {\n setDisplayValues(dvs);\n }\n }, [properties]);\n\n React.useEffect(() => {\n const isRef = propertyIsReference(selectedProperty);\n const isExst = propertyIsCheckExistence(selectedProperty);\n const isDyn = selectedProperty?.includes('Property');\n setIsReference(isRef);\n\n if (propertyIsBoolean(selectedProperty)) {\n setOperators([\n {id: PropertyOperator.TRUE, name: 'expressions.operator.True'},\n {id: PropertyOperator.FALSE, name: 'expressions.operator.False'},\n ]);\n setSelectedOperator(PropertyOperator.TRUE);\n }\n else if (isDyn) {\n setOperators([\n {id: PropertyOperator.TRUE, name: 'expressions.operator.True'},\n {id: PropertyOperator.FALSE, name: 'expressions.operator.False'},\n ]);\n setSelectedOperator(PropertyOperator.TRUE);\n }\n else if (isExst) {\n setOperators([\n {id: PropertyOperator.IS_NULL, name: 'expressions.operator.IsNull'},\n {id: PropertyOperator.IS_NOT_NULL, name: 'expressions.operator.IsNotNull'},\n ]);\n setSelectedOperator(PropertyOperator.IS_NULL);\n }\n else if (isRef) {\n setOperators([\n {id: PropertyOperator.EQUAL, name: 'expressions.operator.Equal'},\n {id: PropertyOperator.NOT_EQUAL, name: 'expressions.operator.NotEqual'}\n ]);\n setSelectedOperator(PropertyOperator.EQUAL);\n setReferenceValues(getReferenceValues(selectedProperty, work, constants));\n }\n else {\n setOperators(allOperators);\n }\n }, [selectedProperty]);\n\n const commonProperties = getCommonProperties(requirementType.targetType);\n const dynamicProperties = getDynamicProperties(requirementType.targetType, propertyGroupTypes);\n const jobDynamicProperties = getJobDynamicProperties(requirementType.targetType, propertyGroupTypes);\n\n const addProperty = (..._: any[]) => {\n const newProperty: IPropertyExpression = isReference\n ? { property: selectedProperty!, operator: selectedOperator!, value: selectedReference, __display: selectedReferenceName }\n : propertyIsBoolean(selectedProperty!)\n ? { property: selectedProperty!, operator: PropertyOperator.EQUAL, value: selectedOperator === PropertyOperator.TRUE }\n : { property: selectedProperty!, operator: selectedOperator!, value: selectedValue };\n\n setSelectedProperty(undefined);\n setSelectedOperator(undefined);\n setSelectedReference(undefined);\n setSelectedValue(undefined);\n\n __d('Add property', newProperty);\n\n const newProperties = properties.concat([newProperty]);\n setProperties(newProperties);\n\n onPropertiesChanged(newProperties);\n }\n\n const removePropertyByIndex = (indx: number) => {\n const v = properties.filter((_, i) => i != indx);\n setProperties(v);\n\n onPropertiesChanged(v);\n }\n\n const dynamicPropertyPrefix =\n requirementType.targetType == RequirementTargetType.JobHasContractor\n ? 'Contractor.'\n : requirementType.targetType == RequirementTargetType.JobHasWorker\n ? 'Worker.'\n : requirementType.targetType == RequirementTargetType.JobHasMachinery\n ? 'Machinery.'\n : '';\n\n return
\n
\n onChangeOperator(parseInt(e.target.value))}>\n \n \n \n
\n requestRemove(fragment)} />\n
\n\n
\n \n \n \n \n \n \n {properties.map((p, i) => \n \n \n \n \n )}\n \n
\n \n \n \n
{t(propertyTitle(requirementType.targetType, p.property))}{t(propertyOperatorName(p.operator))}\n {typeof(p.value) === 'boolean' && {JSON.stringify(p.value)}}\n {p.__display && p.__display}\n {!p.__display && displayValues[i] &&\n {displayValues[i]}}\n {!p.__display && !displayValues[i] && p.value}\n \n removePropertyByIndex(i)} />\n
\n
\n\n
\n \n \n {isReference &&\n }\n {!isReference && !isBooleanProp &&\n setSelectedValue(e.target.value)} /> }\n \n \n \n
\n
\n}\n\nconst astGetPropertyName = (ast: IExpression) => {\n if (ast.type === 'path') {\n const name = (ast.values ?? [])\n .filter((a: any) => typeof(a) === 'string').join('.');\n\n return name;\n }\n else {\n return '???';\n }\n}\n\nconst parseOperator = (name: string|undefined) => {\n if (name === 'Contains') {\n return PropertyOperator.CONTAINS;\n }\n else {\n return PropertyOperator.EQUAL;\n }\n}\n\nconst astGetPropertyOperator = (ast: IExpression) => {\n if (ast.type === 'path') {\n const operator = (ast.values ?? [])\n .find((a: any) => a && a.type && a.type == 'invocation') as Invocation;\n\n return parseOperator(operator?.name);\n }\n else {\n return PropertyOperator.LESSER_EQUAL_THAN;\n }\n}\n\nconst astGetInvocation = (ast: IExpression) => {\n const i = (ast.values ?? [])\n .find((v: any) => v && v.type && v.type === 'invocation') as Invocation;\n\n return i;\n}\n\nconst astNodeToExpression = (ast: IExpression) => {\n const propertyName = astGetPropertyName(ast);\n const operator = astGetPropertyOperator(ast);\n const invocation = astGetInvocation(ast);\n const p: IPropertyExpression = {\n property: propertyName,\n operator: operator,\n value: invocation?.args?.value ?? '',\n };\n\n return p;\n}\n\nconst parseAstOperator = (op: string) => {\n const map: any = {\n '==': PropertyOperator.EQUAL,\n '!=': PropertyOperator.NOT_EQUAL,\n };\n\n return map[op] ?? PropertyOperator.EQUAL;\n}\n\nconst astHasBooleanPropInvocation = (ast: IExpression) => {\n const res = (ast.values ?? [])\n .find((i: any) => i && i.type == 'invocation' && i.name == 'GetBooleanProperty');\n\n return res != undefined;\n}\n\nconst astGetPath = (ast: IExpression) => {\n return (ast.values ?? [])\n .filter((i: any) => typeof(i) === 'string')\n .join('.');\n}\n\nconst astToFragments: (ast: IExpression, isRoot?: boolean) => IExpressionFragment[] =\n (ast: IExpression, isRoot: boolean = false) => {\n if (ast.type === 'binaryop'\n && (\n (ast.left?.op !== ast.op && ast.left?.op === 'AND') ||\n (ast.right?.op !== ast.op && ast.right?.op === 'AND') ||\n (ast.left?.op !== ast.op && ast.left?.op === 'OR') ||\n (ast.right?.op !== ast.op && ast.right?.op === 'OR')\n )\n && (ast.op === 'AND' || ast.op === 'OR')\n && isRoot) {\n const left = astToFragments(ast.left!, false);\n const right = astToFragments(ast.right!, false);\n\n return left.concat(right);\n }\n const root: IExpressionFragment = {\n id: new Date().getTime() * Math.random(),\n operator: Operator.AND,\n expressions: [],\n };\n if (ast.type === 'path') {\n const e = astNodeToExpression(ast);\n // return IPropertyExpression\n root.expressions.push(e);\n }\n else if (ast.type === 'binaryop' && astHasBooleanPropInvocation(ast.left!)) {\n const value = ast.right?.value === true;\n const i = astGetInvocation(ast.left!);\n const propertyName = i.args.value!;\n const propertyPath = astGetPath(ast.left!);\n const operator = value ? PropertyOperator.TRUE : PropertyOperator.FALSE;\n\n root.expressions.push({\n property: `${propertyPath}.Property.${propertyName}`,\n operator,\n value: '',\n });\n }\n else if (ast.type === 'binaryop' && (ast.op === '==' || ast.op === '!=')) {\n const property = (ast.left!.values ?? []).join('.');\n const valueIsNull = ast.right!.type === 'path'\n && (ast.right!.values?.length ?? 0) >= 1\n && ast.right!.values![0] === 'null';\n const op = valueIsNull\n ? (parseAstOperator(ast.op) == PropertyOperator.EQUAL\n ? PropertyOperator.IS_NULL\n : PropertyOperator.IS_NOT_NULL)\n : parseAstOperator(ast.op);\n\n root.expressions.push({\n property,\n operator: op,\n value: ast.right!.value as any\n });\n }\n else if (ast.type === 'binaryop') {\n const { left, op, right } = ast;\n root.operator = op === 'AND' ? Operator.AND : Operator.OR;\n\n const a = astToFragments(left as IExpression);\n const b = astToFragments(right as IExpression);\n\n for (const e of a) {\n for (const x of e.expressions) {\n root.expressions.push(x);\n }\n }\n\n for (const e of b) {\n for (const x of e.expressions) {\n root.expressions.push(x);\n }\n }\n }\n\n return [root];\n}\n\nexport function EditRequirementTypeExpression(props: IProps) {\n const { t } = useTranslation();\n const loading = useLoading();\n const message = useMessage();\n\n const [fragments, setFragments] = React.useState([]);\n const [selectedOperator, setSelectedOperator] = React.useState(Operator.OR);\n\n const form = useForm({\n initialValues: props.requirementType,\n });\n\n const parseAndSetExpression = (expression: string) => {\n const ast = parse(expression);\n __d('ast', ast, expression);\n setFragments(astToFragments(ast, true));\n }\n\n React.useEffect(() => {\n if (props.requirementType?.expression) {\n try {\n parseAndSetExpression(props.requirementType.expression);\n }\n catch (e) {\n console.error(e);\n }\n }\n }, [props.requirementType]);\n\n const doSave = loading.wrap(async () => {\n if (form.values.expression && form.values.expression.trim() == '()') {\n form.values.expression = null;\n }\n const res = await props.saveRequirementType(props.requirementType.workId, form.values);\n message.set(res);\n\n if (res.hasValue) {\n props.onSuccess(form.values);\n }\n });\n\n const appendFragment = (...args: any[]) => {\n const newFragment = {\n id: (new Date().getTime() * Math.random()),\n operator: selectedOperator,\n expressions: [],\n };\n setFragments(f => f.concat([newFragment]));\n }\n\n const removeFragment = (f: IExpressionFragment) => {\n setFragments(a => a.filter(b => b.id != f.id));\n }\n\n const updateFragment = (f: IExpressionFragment, p: IPropertyExpression[], op: Operator|undefined = undefined) => {\n const newFragment = {...f, expressions: p};\n if (op) {\n newFragment.operator = op;\n }\n __d('Update fragment', newFragment);\n const newFragments = fragments.map(i => i == f ? newFragment : i);\n setFragments(newFragments);\n }\n\n React.useEffect(() => {\n try {\n form.setFieldValue('expression',\n expressionsToCode(fragments, props.requirementType.targetType));\n }\n catch (e) {\n form.setFieldValue('expression', null);\n }\n }, [ fragments ]);\n\n return
\n
\n
\n
\n {fragments.length === 0 &&\n \n {t('expressions.add-logic-operator')}\n }\n {fragments.map((f, i) =>\n updateFragment(f, f.expressions, o)}\n onPropertiesChanged={(p: IPropertyExpression[]) => updateFragment(f, p)}\n propertyGroupTypes={props.work.propertyGroupTypes ?? []}\n requestRemove={removeFragment}\n requirementType={props.requirementType}\n work={props.work} />)}\n
\n
\n {form.textarea('expression', { rows: 10 })}\n
\n
\n
\n
\n
\n \n \n
\n
\n \n \n
\n
\n}\n","import { connect } from 'react-redux';\nimport { ApplicationState } from '../../../store';\n\nimport { EditRequirementTypeExpression } from '@components/admin/requirementTypes/EditRequirementTypeExpression';\n\nexport default connect(\n (state: ApplicationState) => ({\n constants: {\n ...state.user,\n ...state.constants,\n }\n }),\n {},\n)(EditRequirementTypeExpression as any) as any; // eslint-disable-line @typescript-eslint/no-explicit-any\n","import * as React from 'react';\n\nimport { G, Tag, useConfirm, useForm, useLoading, useMessage, useRemoteData, useTranslation } from '@components';\nimport {\n IRequirementTypeDocumentRestriction, IRequirementGroup, IRequirementType\n} from '@models/requirements';\n\nexport interface IProps {\n getRequirementType: (workId: number, id: number) => Promise,\n onClose: Function;\n onSuccess: Function;\n removeWorkRequirementTypeDependency: Function;\n removeRequirementTypeDocumentRestriction: Function;\n saveWorkRequirementTypeDependency: Function;\n saveRequirementTypeDocumentRestriction: Function;\n requirementGroups: IRequirementGroup[];\n requirementType: IRequirementType;\n}\n\nconst commonMimeTypes = [\n {id: 'doc,docx', name: 'Word'},\n {id: 'xls,xlsx', name: 'Excel'},\n {id: 'pdf', name: 'Pdf'},\n {id: 'rar', name: 'Rar'},\n {id: 'zip', name: 'Zip'},\n {id: 'jpeg, jpg', name: 'JPG'},\n {id: 'png', name: 'PNG'},\n];\n\ntype IRequirementTypeDocumentRestrictionM = IRequirementTypeDocumentRestriction & {\n __mimeTypes: string[];\n __excludeMimeTypes: string[];\n}\n\nfunction AddDocumentRestriction({\n onSuccess,\n requirementType,\n saveRequirementTypeDocumentRestriction,\n workId,\n}: {\n onSuccess: Function,\n requirementType: IRequirementType,\n saveRequirementTypeDocumentRestriction: Function,\n workId: number,\n}) {\n const { t } = useTranslation();\n const loading = useLoading();\n const messages = useMessage();\n\n const form = useForm({\n initialValues: {\n isActive: true,\n name: '',\n title: '',\n requirementTypeId: requirementType.id!,\n __excludeMimeTypes: [],\n __mimeTypes: []\n },\n loading: loading,\n });\n\n const doSave = loading.wrap(async () => {\n const obj = form.values;\n obj.mimeTypes = obj.__mimeTypes.join(',');\n obj.excludeMimeTypes = obj.__excludeMimeTypes.join(',');\n\n const res = await saveRequirementTypeDocumentRestriction(workId, requirementType.id, obj);\n messages.set(res);\n\n if (res.hasValue) {\n onSuccess();\n }\n });\n\n return
\n
\n \n {form.input('name')}\n \n \n {form.input('title')}\n \n \n {form.multiselect('__mimeTypes', commonMimeTypes)}\n \n \n {form.multiselect('__excludeMimeTypes', commonMimeTypes)}\n \n \n {form.input('regexp')}\n \n
\n {messages.render()}\n
\n {loading.render()}\n {t('Save')}\n
\n
\n}\n\nfunction DocumentRestrictionRepresentation({restriction}: {restriction: IRequirementTypeDocumentRestriction}) {\n const { t } = useTranslation();\n const style = ['success', 'info', 'warn', 'error'];\n const restrictions: ('mimeTypes'| 'excludeMimeTypes' |'regexp'|'limitFileSize')[] = ['mimeTypes', 'excludeMimeTypes' ,'regexp', 'limitFileSize'];\n const reps = restrictions\n .filter(r => restriction[r])\n .map((r, i) => );\n\n return
\n {reps}\n
\n}\n\nenum FormType {\n List = 1,\n Add = 2,\n}\n\nexport function EditRequirementTypeDocumentRestrictions(props: IProps) {\n const { t } = useTranslation();\n const [formType, setFormType] = React.useState(FormType.List);\n const requirementType = useRemoteData(\n props.getRequirementType,\n {\n parameters: [props.requirementType.workId, props.requirementType.id],\n });\n const loading = useLoading();\n const message = useMessage();\n\n const documentRestrictions = (requirementType.value?.documentRestrictions ?? []).filter(r => r.isActive);\n const reload = () => {\n requirementType.query();\n setFormType(FormType.List);\n }\n\n const doRemove = loading.wrap(async (id: number) => {\n const resp = await props.removeRequirementTypeDocumentRestriction(\n props.requirementType.workId,\n props.requirementType.id,\n id);\n message.set(resp);\n reload();\n });\n\n const confirm = useConfirm({\n message: t('Are you sure to remove this document restriction?'),\n accept: doRemove,\n });\n\n const onCancel = () => {\n if (formType === FormType.Add) {\n setFormType(FormType.List);\n }\n else {\n props.onClose();\n }\n }\n\n return
\n
\n {formType === FormType.List && <>\n \n \n \n \n \n \n \n \n \n \n {documentRestrictions.length == 0 && \n \n }\n {documentRestrictions.map((d, i) => \n \n \n \n \n )}\n \n
\n
\n \n {t('There is no document restrictions')}\n \n
\n
{d.name}{d.title}\n \n \n confirm(d.id, e)}>\n
\n }\n {formType === FormType.Add &&\n }\n
\n
\n {message.render()}\n \n \n {formType === FormType.List &&\n }\n
\n
\n}","import { connect } from 'react-redux';\nimport { ApplicationState } from '../../../store';\nimport * as ConstantsStore from '../../../store/constants';\nimport * as App from '../../../store/app';\nimport * as Admin from '../../../store/admin';\n\nimport { EditRequirementTypeDocumentRestrictions } from '@components/admin/requirementTypes/EditRequirementTypeDocumentRestrictions';\n\nexport default connect(\n (state: ApplicationState) => ({\n ...Admin.plainActions,\n }),\n {},\n)(EditRequirementTypeDocumentRestrictions as any) as any; // eslint-disable-line @typescript-eslint/no-explicit-any\n","import * as React from 'react';\n\nimport { IRequirementType, IRequirementTypeSuggestion } from '@models/requirements';\nimport { IOption } from '@models';\nimport { useConfirm, useDataTable, useForm, useRemoteData, useTranslation, ValidationBuilder } from '@components';\n\ntype GetF = (workId: number, id: number) => Promise;\ntype SaveF = (workId: number, suggestion: IRequirementTypeSuggestion) => Promise>;\ntype RemoveF = (workId: number, id: number) => Promise>;\n\nexport interface IProps {\n getRequirementType: GetF;\n onClose: Function;\n onSuccess: Function;\n saveRequirementTypeSuggestion: SaveF;\n removeRequirementTypeSuggestion: RemoveF;\n requirementTypeId: number;\n workId: number;\n}\n\nenum FormType {\n LIST = 1,\n ADD = 2,\n}\n\nexport function RequirementTypeSuggestions(props: IProps) {\n const { t } = useTranslation();\n\n const [formType, setFormType] = React.useState(FormType.LIST);\n\n const data = useRemoteData(\n props.getRequirementType,\n {\n parameters: [props.workId, props.requirementTypeId],\n });\n\n const onDelete = data.loading.wrap(async (suggestion: IRequirementTypeSuggestion) => {\n await props.removeRequirementTypeSuggestion(props.workId, suggestion.id!);\n await data.query();\n });\n\n const confirmDelete = useConfirm({\n message: t('Are you sure to delete the element ?'),\n accept: onDelete,\n });\n\n const dataTable = useDataTable({\n data: data.value?.suggestions ?? [],\n columns: [\n 'name'\n ],\n actions: [\n {icon: 'trash', className: 'td-sm', onClick: confirmDelete }\n ]\n });\n\n const addForm = useForm({\n initialValues: {\n name: '',\n requirementTypeId: props.requirementTypeId,\n },\n validate: d => ValidationBuilder.create(d).notEmpty('name').build(),\n });\n\n const onCancel = () => {\n if (formType === FormType.LIST) {\n props.onClose();\n }\n else {\n setFormType(FormType.LIST);\n }\n }\n\n const onSave = data.loading.wrap(async () => {\n const _ = await props.saveRequirementTypeSuggestion(props.workId, addForm.values);\n data.query();\n setFormType(FormType.LIST);\n });\n\n return
\n {data.renderLoading()}\n {formType === FormType.LIST &&\n
\n {dataTable()}\n
}\n\n {formType === FormType.ADD &&\n
\n {addForm.input('name', {placeholder: t('Suggestion')})}\n {addForm.errorBox()}\n
}\n\n
\n \n {formType === FormType.LIST &&\n setFormType(FormType.ADD)}>{t('Add')}}\n {formType === FormType.ADD &&\n onSave()}>{t('Save')}}\n
\n
\n}","import { connect } from 'react-redux';\nimport { ApplicationState } from '../../../store';\nimport * as ConstantsStore from '../../../store/constants';\nimport * as AdminStore from '../../../store/admin';\n\nimport { RequirementTypeSuggestions } from '../../../components/admin/requirementTypes/RequirementTypeSuggestions';\n\nexport default connect(\n (state: ApplicationState) => ({\n ...AdminStore.plainActions,\n }),\n {},\n)(RequirementTypeSuggestions as any) as any; // eslint-disable-line @typescript-eslint/no-explicit-any\n","import { connect } from 'react-redux';\nimport { ApplicationState } from '../../../store';\nimport * as ConstantsStore from '../../../store/constants';\nimport * as AdminStore from '../../../store/admin';\n\nimport { RequirementTypeValidationHolderForm } from '../../../components/admin/requirementTypes/RequirementTypeValidationHolderForm';\n\nexport default connect(\n (state: ApplicationState) => ({\n ...AdminStore.plainActions,\n }),\n {},\n)(RequirementTypeValidationHolderForm as any) as any; // eslint-disable-line @typescript-eslint/no-explicit-any\n","import * as React from 'react';\n\nimport { IRequirementType, IRequirementTypeValidationHolder } from '@models/requirements';\nimport { useConfirm, useDataTable, useMemoized, useRemoteData, useTranslation } from '@components';\nimport RequirementTypeValidationHolder from '@containers/admin/requirementTypes/RequirementTypeValidationHolderContainer';\nimport { IOption, IWork } from '@models';\n\ntype GetF = (workId: number, id: number) => Promise;\ntype GetWorkResourcesF = (workId: number) => Promise;\ntype SaveF = (workId: number, data: IRequirementTypeValidationHolder) => Promise>;\ntype RemoveF = (workId: number, id: number) => Promise>;\n\nexport interface IProps {\n getRequirementType: GetF;\n getWorkResources: GetWorkResourcesF;\n onClose: Function;\n requirementType: IRequirementType;\n saveRequirementTypeValidationHolder: SaveF;\n removeRequirementTypeValidationHolder: RemoveF;\n}\n\nenum FormType {\n LIST = 1,\n ADD = 2,\n EDIT = 3,\n}\n\nexport function RequirementTypeValidationHolders(props: IProps) {\n const { t } = useTranslation();\n\n const work = useRemoteData(\n props.getWorkResources,\n { parameters: [props.requirementType.workId] });\n\n const createNewHolderRecord = () =>\n ({ requirementTypeId: props.requirementType.id! });\n\n const [formType, setFormType] = React.useState(FormType.LIST);\n const [editHolderRecord, setEditHolder] = React.useState();\n const [addHolderRecord, setAddHolderRecord] = React.useState(\n createNewHolderRecord());\n\n React.useEffect(() => {\n if (editHolderRecord) {\n setFormType(FormType.EDIT);\n }\n else {\n setFormType(FormType.LIST);\n }\n }, [editHolderRecord]);\n\n const data = useRemoteData(\n props.getRequirementType,\n {\n parameters: [props.requirementType.workId, props.requirementType.id]\n });\n\n const doDelete = data.loading.wrap(async (holder: IRequirementTypeValidationHolder) => {\n await props.removeRequirementTypeValidationHolder(props.requirementType.workId, holder.id!);\n await data.query();\n });\n\n const confirmDelete = useConfirm({\n message: t('Are you sure to delete the element ?'),\n accept: doDelete,\n });\n\n const resolveUserName = useMemoized(\n (id: number) => work.value?.users?.find(u => u.id == id)?.userName);\n const resolveDepartment = useMemoized(\n (id: number) => work.value?.departments?.find(u => u.id == id)?.name);\n const resolveWorkFunction = useMemoized(\n (id: number) => work.value?.workFunctions?.find(u => u.id == id)?.name);\n\n const renderHolder = (r: IRequirementTypeValidationHolder) => {\n if (r.appUserId) {\n return resolveUserName(r.appUserId);\n }\n else if (r.jobResponsible) {\n return t('job.responsible');\n }\n else if (r.departmentId) {\n return resolveDepartment(r.departmentId);\n }\n else if (r.workFunctionId) {\n return resolveWorkFunction(r.workFunctionId);\n }\n else if (r.jobImpliedRso) {\n return t('job.rso.implied');\n }\n else {\n return r.policy;\n }\n }\n\n const dataTable = useDataTable({\n data: data.value?.validationHolders ?? [],\n columns: [\n { className: 'td-sm center', render: r => r.onlyNotifications ? : null },\n { className: 'td-sm center', render: r => r.isBlocking ? : null },\n { field: 'validationOrder', className: 'td-sm center' },\n { title: t('Holder'), render: renderHolder },\n { field: 'optional', delegate: 'boolean', className: 'td-md', title: 'requirement.holder.optional' },\n ],\n actions: [\n { icon: 'pencil', onClick: setEditHolder },\n { icon: 'trash', onClick: confirmDelete }\n ]\n });\n\n const onCancel = () => {\n if (formType === FormType.LIST) {\n props.onClose();\n }\n else {\n setEditHolder(undefined);\n setFormType(FormType.LIST);\n }\n }\n\n const onSaveClicked = data.loading.wrap(async () => {\n if (formType === FormType.EDIT) {\n await props.saveRequirementTypeValidationHolder(props.requirementType.workId, editHolderRecord!);\n }\n else {\n await props.saveRequirementTypeValidationHolder(props.requirementType.workId, addHolderRecord);\n }\n\n await data.query();\n\n setFormType(FormType.LIST);\n });\n\n return
\n {data.renderLoading()}\n\n
\n {formType === FormType.LIST &&\n dataTable()}\n {formType === FormType.ADD &&\n }\n {formType === FormType.EDIT &&\n }\n
\n\n
\n \n {(formType === FormType.ADD || formType == FormType.EDIT) &&\n }\n {formType === FormType.LIST &&\n }\n
\n
;\n}\n","import * as React from 'react';\n\nimport { IWork } from '@models';\nimport { IRequirementTypeValidationHolder } from '@models/requirements';\nimport { R, useForm, useRemoteData, useTranslation } from '@components';\n\ntype GetWorkResourcesF = (id: number) => Promise;\n\nexport interface IProps {\n getWorkResources: GetWorkResourcesF;\n onChange: Function;\n validationHolder: IRequirementTypeValidationHolder;\n workId: number;\n}\n\nexport function RequirementTypeValidationHolderForm(props: IProps) {\n const { t } = useTranslation();\n\n const work = useRemoteData(props.getWorkResources, { parameters: [props.workId] });\n\n const form = useForm({\n initialValues: props.validationHolder,\n onChange: props.onChange,\n });\n\n return
\n {work.renderLoading()}\n
\n \n {form.checkBox('optional')}\n \n\n \n {form.checkBox('isBlocking')}\n \n \n {form.checkBox('onlyNotifications')}\n \n \n {form.input('validationOrder', { type: 'number', map: parseInt })}\n \n \n {form.checkBox('jobResponsible')}\n \n \n {form.checkBox('jobImpliedRso')}\n \n \n {form.select('appUserId', { blank: true, options: work.value?.users ?? [], optionLabel: 'userName' })}\n \n \n {form.select('departmentId', { blank: true, options: work.value?.departments ?? [] })}\n \n \n {form.select('workFunctionId', { blank: true, options: work.value?.workFunctions ?? [] })}\n \n
\n
\n}\n","import { connect } from 'react-redux';\nimport { ApplicationState } from '../../../store';\nimport * as ConstantsStore from '../../../store/constants';\nimport * as AdminStore from '../../../store/admin';\n\nimport { RequirementTypeValidationHolders } from '../../../components/admin/requirementTypes/RequirementTypeValidationHolders';\n\nexport default connect(\n (state: ApplicationState) => ({\n ...AdminStore.plainActions,\n }),\n {},\n)(RequirementTypeValidationHolders as any) as any; // eslint-disable-line @typescript-eslint/no-explicit-any\n","import * as React from 'react';\n\nimport {\n BreadcrumbItem,\n classNames,\n F,\n G,\n i18n,\n IRemoteData,\n R,\n SplitButton,\n Tag,\n ValidationBuilder,\n useConfirm,\n useDialogs,\n useForm,\n useLoading,\n useMemoized,\n useDebounce,\n useMessage,\n useRemoteData,\n useTranslation,\n Chips,\n Button\n} from '@components';\nimport Constants from '../../Constants';\nimport { INotificationTemplate, IWork, IUserIdentity } from '@models';\nimport {\n IRequirementExpirationType,\n IRequirementGroup,\n IRequirementType,\n IRequirementTypeDocumentRestriction,\n IRequirementValidationType,\n RequirementTargetType,\n RequirementTypeKind,\n requirementTargetTypes\n} from '@models/requirements';\nimport EditRequirementTypeDependenciesContainer\n from '@containers/admin/requirementTypes/EditRequirementTypeDependenciesContainer';\nimport EditRequirementTypeExpression from '@containers/admin/requirementTypes/EditRequirementTypeExpressionContainer';\nimport EditRequirementTypeDocumentRestrictionsContainer\n from '@containers/admin/requirementTypes/EditRequirementTypeDocumentRestrictionsContainer';\nimport RequirementTypeSuggestions from '@containers/admin/requirementTypes/RequirementTypeSuggestionsContainer';\nimport RequirementTypeValidationHolders\n from '@containers/admin/requirementTypes/RequirementTypeValidationHoldersContainer';\nimport { WorkToolbar } from './WorkToolbar';\n\nimport './AdminWorkRequirements.scss';\nimport { flatten } from '@utils';\n\nconst requirementTypeKinds = [\n { id: RequirementTypeKind.Mandatory, name: i18n('Mandatory') },\n { id: RequirementTypeKind.Optional, name: i18n('Optional') }\n];\n\nfunction AddRequirementGroupInput({\n onClose, onSuccess, saveRequirementGroup, workId,\n}: {\n onClose: Function,\n onSuccess: Function,\n saveRequirementGroup: Function,\n workId: number,\n}) {\n const { t } = useTranslation();\n const loading = useLoading();\n const message = useMessage();\n\n const form = useForm({\n initialValues: {\n name: '',\n title: '',\n description: '',\n workId: workId,\n isActive: true,\n },\n validateOnMount: true,\n validate: ValidationBuilder\n .new()\n .notEmpty('name')\n .notEmpty('title')\n .lift(),\n });\n\n const doSave = loading.wrap(async (..._: any) => {\n const res = await saveRequirementGroup(workId, form.values);\n message.set(res);\n if (res.hasValue) {\n onSuccess();\n }\n });\n\n return
\n
\n
\n {form.input('name', { autoFocus: true })}\n {form.input('title')}\n {form.input('description')}\n {form.input('color', { type: 'color' })}\n
\n {form.textarea('legend', { containerClassName: 'legend-container', containerStyle: { height: '100%' } })}\n
\n
\n
\n

Previsualización

\n
\n
\n
\n
\n
\n {message.render()}\n
\n onClose()}>{t('Cancel')}\n \n {t('Save')}\n \n
\n
\n}\n\nfunction EditRequirementGroup({\n onClose, onSuccess, saveRequirementGroup, workId,\n data\n}: {\n data: IRequirementGroup,\n onClose: Function,\n onSuccess: Function,\n saveRequirementGroup: Function,\n workId: number,\n}) {\n const { t } = useTranslation();\n const loading = useLoading();\n const message = useMessage();\n\n const form = useForm({\n initialValues: data,\n validateOnMount: true,\n validate: ValidationBuilder\n .new()\n .notEmpty('name')\n .notEmpty('title')\n .lift(),\n });\n\n const doSave = loading.wrap(async (..._: any) => {\n const res = await saveRequirementGroup(workId, form.values);\n message.set(res);\n if (res.hasValue) {\n onSuccess();\n }\n });\n\n return
\n
\n
\n {form.input('orderValue', { type: 'number' })}\n
\n {form.textarea('legend', { containerClassName: 'legend-container', containerStyle: { height: '100%' } })}\n
\n
\n
\n

Previsualización

\n
\n
\n
\n
\n
\n {message.render()}\n
\n onClose()}>{t('Cancel')}\n \n {t('Save')}\n \n
\n
\n}\n\nfunction AddRequirementTypeInput({\n group, onClose, onSuccess,\n requirementExpirationTypes,\n requirementValidationTypes,\n saveRequirementType,\n}: {\n group: IRequirementGroup,\n onClose: Function,\n onSuccess: Function,\n requirementExpirationTypes: IRequirementExpirationType[],\n requirementValidationTypes: IRequirementValidationType[],\n saveRequirementType: Function,\n}) {\n const { t } = useTranslation();\n const loading = useLoading();\n const message = useMessage();\n const form = useForm({\n initialValues: {\n name: '',\n title: '',\n description: '',\n criteria: '',\n template: '',\n kindId: RequirementTypeKind.Mandatory,\n workId: group.workId,\n requirementGroupId: group.id!,\n targetType: RequirementTargetType.Contractor,\n expirationTypeId: requirementExpirationTypes?.[0]?.id,\n isActive: true,\n isResourcePicture: false,\n },\n validateOnMount: true,\n validate: ValidationBuilder.new().notEmpty('name').lift(),\n });\n\n const doSave = loading.wrap(async () => {\n const res = await saveRequirementType(group.workId, form.values);\n message.set(res);\n if (res.hasValue) {\n onSuccess();\n }\n });\n\n return
\n
\n \n {form.select('kindId', requirementTypeKinds)}\n \n \n {form.input('name')}\n \n \n {form.input('title')}\n \n \n {form.input('description')}\n \n \n {form.select('targetType', requirementTargetTypes)}\n \n \n {form.select('expirationTypeId', requirementExpirationTypes)}\n \n \n {form.select('validationTypeId', requirementValidationTypes)}\n \n \n {form.checkBox('isResourcePicture')}\n \n
\n {loading.renderBox()}\n {message.render()}\n
\n \n \n
\n
\n}\n\nfunction RequirementTypeConfiguration({\n onClose, onSuccess,\n requirementType, requirementExpirationTypes, requirementValidationTypes,\n saveRequirementType,\n templates,\n users\n}: {\n onClose: Function,\n onSuccess: Function,\n requirementType: IRequirementType,\n requirementExpirationTypes: IRequirementExpirationType[],\n requirementValidationTypes: IRequirementValidationType[],\n saveRequirementType: Function,\n templates: INotificationTemplate[],\n users: IUserIdentity[],\n}) {\n const { t } = useTranslation();\n const loading = useLoading();\n const message = useMessage();\n const [excludeUsersIds, setExcludeUsersIds] = React.useState(requirementType.usersExcludedChargedNotifications ?? []);\n\n const form = useForm({\n initialValues: requirementType\n });\n\n const billingTypes = [\n { id: 1, name: t('') },\n { id: 2, name: t('Generic documentation') },\n { id: 3, name: t('Juridic documentation') }\n ];\n\n const doSave = loading.wrap(async () => {\n form.values.usersExcludedChargedNotifications = excludeUsersIds;\n const resp = await saveRequirementType(requirementType.workId, form.values);\n message.set(resp);\n if (resp.hasValue) {\n onSuccess(form.values);\n onClose();\n }\n });\n\n const customChip = (item : string) => {\n const user = users.find(u => u.id == parseInt(item));\n return (\n
\n {user?.userName}\n
\n );\n };\n\n const addChip = (item: string) => {\n\n const isNumeric = /^\\d+$/.test(item);\n\n if(isNumeric){\n setExcludeUsersIds([...excludeUsersIds, parseInt(item)])\n }else{\n const user = users.find(u => u.userName == item);\n if(user){\n setExcludeUsersIds([...excludeUsersIds, user.id])\n }\n }\n };\n\n const chipsOnClick = () => {\n if(excludeUsersIds.length > 0){\n const users = excludeUsersIds.join(',');\n navigator.clipboard.writeText(users);\n }else{\n navigator.clipboard.readText().then(text => {\n const users = text.split(',');\n setExcludeUsersIds(users.map(u => parseInt(u)));\n });\n }\n };\n\n\n return
\n
\n
\n
\n \n {form.select('kindId', requirementTypeKinds)}\n \n \n {form.checkBox('isShared', { containerClassName: 'center' })}\n \n \n {form.checkBox('isPublic', { containerClassName: 'center' })}\n \n \n {form.select('validationTypeId',\n requirementValidationTypes.map(v => ({ ...v, name: t(v.name) })))}\n \n \n {form.select('expirationTypeId', requirementExpirationTypes)}\n \n \n {form.input('expirationThreshold', { type: 'number' })}\n \n \n {form.editor('criteria', { className: 'criteria-editor' })}\n \n \n {form.input('template')}\n \n \n {form.select('billingTypeId', billingTypes)}\n \n
\n
\n
\n
\n \n {form.input('color', { type: 'color' })}\n \n
\n
\n
\n
\n \n {form.select('messageTemplateId', templates)}\n \n \n {form.input('orderValue', { type: 'number' })}\n \n \n {form.checkBox('notifyContractors', { containerClassName: 'center' })}\n \n \n {form.checkBox('notifyResponsible', { containerClassName: 'center' })}\n \n \n {form.checkBox('requireJobInformationAccess', { containerClassName: 'center' })}\n \n \n {form.input('notifyTitle')}\n \n \n {form.input('notifyPolicy')}\n \n \n
\n addChip(d.value)}\n onRemove={d => setExcludeUsersIds(excludeUsersIds.filter((o: any) => o != d.value))}\n allowDuplicate={false}\n itemTemplate={customChip}\n />\n chipsOnClick()}\n icon={excludeUsersIds.length > 0 ? 'pi pi-upload' : 'pi pi-download' }\n className='exclude-users-chips-button'\n />\n
\n
\n \n {form.checkBox('expirationRequired')}\n \n \n {form.checkBox('isResourcePicture')}\n \n
\n
\n
\n
\n \n \n
\n
\n}\n\nfunction RequirementTypeSetPolicy({ onClose, onSuccess, requirementType, saveRequirementType }: {\n onClose: Function, onSuccess: Function, requirementType: IRequirementType, saveRequirementType: Function,\n}) {\n const { t } = useTranslation();\n const loading = useLoading();\n const message = useMessage();\n\n const form = useForm({\n initialValues: requirementType\n });\n\n const doSave = loading.wrap(async () => {\n const resp = await saveRequirementType(requirementType.workId, form.values);\n message.set(resp);\n if (resp.hasValue) {\n onSuccess(form.values);\n onClose();\n }\n });\n\n return
\n
\n \n {form.input('policy')}\n \n
\n
\n \n \n
\n
\n}\n\nfunction DocumentRestrictionRepresentation({ restriction }: { restriction: IRequirementTypeDocumentRestriction }) {\n const { t } = useTranslation();\n\n const style = ['success', 'info', 'warn', 'error'];\n const restrictions: ('mimeTypes' | 'regexp' | 'limitFileSize')[] = ['mimeTypes', 'regexp', 'limitFileSize'];\n const reps = restrictions\n .filter(r => restriction[r])\n .map((r, i) => );\n\n return
\n {reps}\n
\n}\n\nfunction RequirementTypeInfo({\n requirementGroups, requirementType, requirementValidationTypes,\n}: {\n requirementGroups: IRequirementGroup[],\n requirementType: IRequirementType,\n requirementValidationTypes: IRequirementValidationType[],\n}) {\n const { t } = useTranslation();\n\n const form = useForm({\n initialValues: requirementType,\n readonly: true,\n });\n\n const [allRequirements, setAllRequirements] = React.useState(\n flatten(requirementGroups.map(g => g.requirementTypes ?? []))\n .filter(r => r.isActive && r.id != requirementType.id));\n const resolveDependency = useMemoized((id: number) => {\n return allRequirements.find(d => d.id == id)?.name;\n });\n const dependencies = requirementType.dependencies ?? [];\n const documentRestrictions =\n (requirementType.documentRestrictions ?? []).filter(r => r.isActive);\n\n return
\n \n {form.checkBox('isShared')}\n \n \n {form.checkBox('isPublic')}\n \n \n {form.select('validationTypeId', requirementValidationTypes)}\n \n \n {form.input('policy')}\n \n \n \n {form.values.expression}\n \n \n \n
\n
    \n {dependencies.map((d, i) =>\n
  • {resolveDependency(d.dependsOnRequirementId)}
  • )}\n
\n
\n
\n \n
\n {documentRestrictions.map((d, i) =>\n
\n {d.name} {d.title} \n
)}\n
\n
\n
\n}\n\nfunction RequirementTypeRow({\n className,\n notificationTemplates,\n requirementGroup,\n requirementGroups, requestRefresh, requirementType,\n requirementExpirationTypes,\n requirementValidationTypes,\n saveRequirementType,\n selectedTargetType,\n work,\n requestSelected,\n users\n}: {\n className?: string,\n notificationTemplates: INotificationTemplate[],\n requirementGroup: IRequirementGroup,\n requirementGroups: IRequirementGroup[],\n requestRefresh: Function,\n requirementType: IRequirementType,\n requirementExpirationTypes: IRequirementExpirationType[],\n requirementValidationTypes: IRequirementValidationType[],\n saveRequirementType: Function,\n selectedTargetType: number | undefined,\n work: IWork,\n requestSelected: Function,\n users: IUserIdentity[]\n}) {\n const { t } = useTranslation();\n const splitButton = React.useRef();\n const dialogs = useDialogs({\n onShow: () => requestSelected?.(requirementType.id),\n });\n const loading = useLoading();\n const [expanded, setExpanded] = React.useState(false);\n\n const form = useForm({\n initialValues: requirementType,\n });\n\n const saveChanges = async (..._: any) => {\n if (form.hasChanges()) {\n await saveRequirementType(requirementType.workId, form.values);\n }\n }\n\n const doRemove = async () => {\n const obj = {\n ...form.values,\n isActive: false\n };\n await saveRequirementType(requirementType.workId, obj);\n requestRefresh();\n }\n\n const confirmRemove = useConfirm({\n accept: doRemove,\n message: t('Are you sure to remove this requirement type?'),\n target: () => splitButton.current.container,\n });\n\n const actions = [\n { label: t('Configure'), command: dialogs.showFromEvent('configuration') },\n { label: t('Set security policy'), command: dialogs.showFromEvent('set-policy') },\n { label: t('Edit expression'), command: dialogs.showFromEvent('edit-expression') },\n { label: t('Edit dependencies'), command: dialogs.showFromEvent('edit-dependencies') },\n { label: t('Document restrictions'), command: dialogs.showFromEvent('edit-document-restrictions') },\n { label: t('Suggestions'), command: dialogs.showFromEvent('suggestions') },\n { label: t('Validation holders'), command: dialogs.showFromEvent('validationHolders') },\n { label: t('Remove requirement'), command: confirmRemove },\n ];\n\n const onSuccess = (r: IRequirementType, close: boolean = true) => {\n form.setFieldValues(r);\n if (close) {\n dialogs.clear();\n }\n }\n\n const allowDrop = (event: React.DragEvent) => {\n event.preventDefault();\n }\n\n const onDrop = loading.wrap(async (event: React.DragEvent) => {\n const currentOrder = requirementType.orderValue;\n const sourceId = parseInt(event.dataTransfer.getData('text/plain'));\n const sourceRequirement = requirementGroup.requirementTypes?.find(r => r.id === sourceId);\n if (sourceRequirement) {\n sourceRequirement.orderValue = (currentOrder ?? 0);\n const siblings = requirementGroup\n .requirementTypes?.filter(r =>\n r.id != sourceRequirement.id\n && (\n ((r.orderValue ?? 0) > (currentOrder ?? 0))\n || ((r.orderValue === currentOrder) && r.id! > requirementType.id!)));\n siblings?.forEach(s => s.orderValue = (s.orderValue ?? 0) + 1);\n requirementType.orderValue = (currentOrder ?? 0) + 1;\n\n await saveRequirementType(requirementType.workId, requirementType);\n await saveRequirementType(requirementType.workId, sourceRequirement);\n for (const s of siblings ?? []) {\n await saveRequirementType(requirementType.workId, s);\n }\n await requestRefresh();\n }\n });\n\n const onDragStart = (event: React.DragEvent) => {\n event.dataTransfer.setData('text/plain', requirementType.id + '');\n }\n\n return <>\n \n \n {dialogs.render('edit-document-restrictions', {\n title: t('Edit document restrictions') + ': ' + requirementType.name,\n }, () =>\n )}\n {dialogs.render(\n 'edit-dependencies',\n {\n title: t('Edit requirement dependencies') + ': ' + requirementType.name,\n style: { width: '80%' }\n }, () =>\n )}\n {dialogs.render('edit-expression', {\n title: t('Edit requirement expression') + ': ' + requirementType.name,\n style: { width: '80%' }\n }, () =>\n )}\n {dialogs.render('suggestions', {\n title: t('Suggestions') + ': ' + requirementType.name,\n style: { width: '80%' }\n }, () =>\n )}\n {dialogs.render('configuration', {\n title: t('Requirement configuration') + ': ' + requirementType.name,\n style: { width: '90%' }\n }, () =>\n )}\n {dialogs.render('set-policy', {\n title: t('Set policy') + ': ' + requirementType.name,\n }, () =>\n )}\n {dialogs.render('validationHolders', {\n title: t('Validation holders') + ': ' + requirementType.name,\n style: { width: '50%' }\n }, () =>\n )}\n\n
\n \n
\n \n \n
\n setExpanded(e => !e)} />\n {requirementType.id}\n {form.input('name', { onBlur: saveChanges })}\n\n
\n
\n \n \n {form.input('title', { onBlur: saveChanges })}\n \n \n {form.input('description', { onBlur: saveChanges })}\n \n \n {form.select('targetType', { onBlur: saveChanges, options: requirementTargetTypes })}\n \n \n {form.select('expirationTypeId', { onBlur: saveChanges, options: requirementExpirationTypes })}\n \n \n dialogs.show('edit-dependencies')}>\n \n \n dialogs.show('edit-expression')}>\n \n\n \n dialogs.show('configuration')}>\n \n \n \n \n \n {expanded && \n \n \n \n \n }\n \n}\n\nfunction RequirementGroupRow({\n query,\n notificationTemplates,\n requirementGroup,\n requirementGroups,\n requirementExpirationTypes,\n requirementValidationTypes,\n saveRequirementGroup,\n saveRequirementType,\n selectedTargetType,\n work,\n users\n}: {\n notificationTemplates: INotificationTemplate[],\n query: IRemoteData,\n requirementGroup: IRequirementGroup,\n requirementGroups: IRequirementGroup[],\n requirementExpirationTypes: IRequirementExpirationType[],\n requirementValidationTypes: IRequirementValidationType[],\n saveRequirementGroup: Function,\n saveRequirementType: Function,\n selectedTargetType: number | undefined,\n work: IWork,\n users: IUserIdentity[]\n}) {\n const { t } = useTranslation();\n const dialogs = useDialogs();\n const colorRef = React.useRef();\n const form = useForm({\n initialValues: requirementGroup\n });\n const [requirementTypes, setRequirementTypes] = React.useState([]);\n const [selectedRequirementType, setSelectedRequirementType] = React.useState();\n const saveChanges = async (..._: any) => {\n await saveRequirementGroup(form.values.workId, form.values);\n }\n\n const pickColor = (..._: any) => {\n colorRef.current.click();\n }\n\n const actions = [\n { label: t('Add requirement'), command: dialogs.showFromEvent('add-requirement') },\n { label: t('Configure'), command: dialogs.showFromEvent('edit-requirement') }\n ];\n\n const refresh = () => {\n dialogs.clear();\n return query.query();\n }\n\n React.useEffect(() => {\n setRequirementTypes(requirementGroup.requirementTypes ?? []);\n }, [requirementGroup.requirementTypes]);\n\n return <>\n \n {dialogs.render('edit-requirement', { title: t('Configure'), maximized: true }, () => {\n return ;\n })}\n {dialogs.render('add-requirement', { title: t('Add requirement') }, () => {\n return dialogs.clear()}\n onSuccess={refresh}\n requirementExpirationTypes={requirementExpirationTypes}\n requirementValidationTypes={requirementValidationTypes}\n saveRequirementType={saveRequirementType} />\n })}\n \n
\n \n \n {form.input('color', { ref: colorRef, onBlur: saveChanges, type: 'color', containerClassName: 'hide' })}\n {form.input('name', { onBlur: saveChanges })}\n
\n \n \n {form.input('title', { onBlur: saveChanges })}\n \n \n {form.input('description', { onBlur: saveChanges })}\n \n \n \n \n \n \n \n \n \n \n {requirementTypes\n .filter(r => r.isActive)\n .sort((a, b) => (a.orderValue ?? -100) - (b.orderValue ?? -100))\n .map(r =>\n setSelectedRequirementType(id)}\n work={work}\n users={users} />)}\n ;\n}\n\nfunction RequirementGroups({\n notificationTemplates,\n query,\n requirementExpirationTypes,\n requirementValidationTypes,\n saveRequirementGroup,\n saveRequirementType,\n selectedTargetType,\n work,\n workId,\n users\n}: {\n notificationTemplates: INotificationTemplate[],\n query: IRemoteData,\n requirementExpirationTypes: IRequirementExpirationType[],\n requirementValidationTypes: IRequirementValidationType[],\n saveRequirementGroup: Function,\n saveRequirementType: Function,\n selectedTargetType: number | undefined,\n work: IWork,\n workId: number,\n users: IUserIdentity[]\n}) {\n const { t } = useTranslation();\n const [data, setData] = React.useState([]);\n\n React.useEffect(() => {\n const d = query.value ?? [];\n setData(d.sort((a, b) => (a.orderValue ?? 100) - (b.orderValue ?? 100)));\n }, [query.value]);\n\n return <>\n \n \n \n \n \n \n \n \n\n \n {data.map(r =>\n )}\n \n
{t('Name')}{t('Title')}{t('Description')}\n \n \n \n \n \n
\n \n}\n\nexport interface IProps {\n getNotificationTemplates: Function;\n getWorkRequirementGroups: Function;\n requirementExpirationTypes: IRequirementExpirationType[];\n saveWorkRequirementGroup: Function;\n saveWorkRequirementType: Function;\n work: IWork;\n users: IUserIdentity[];\n}\n\nexport function AdminWorkRequirements(props: IProps) {\n const { t } = useTranslation();\n const dialogs = useDialogs();\n\n const requirementValidationTypes = props.work.requirementValidationTypes ?? [];\n const [selectedTargetType, setSelectedTargetType] = React.useState();\n\n const query = useRemoteData(\n props.getWorkRequirementGroups, {\n parameters: [props.work.id, selectedTargetType],\n });\n\n const notificationTemplates = useRemoteData(\n props.getNotificationTemplates, {\n parameters: [props.work.id],\n });\n\n const refresh = () => {\n dialogs.clear();\n return query.query();\n }\n\n React.useEffect(() => {\n query.query();\n }, [selectedTargetType]);\n\n return
\n \n\n \n {query.renderLoading()}\n \n\n
\n
\n
\n \n \n
\n
\n {dialogs.render(\n 'add-requirement-group',\n { title: t('Add requirement group'), maximized: true },\n () => )}\n \n
\n
\n
;\n}\n","import { connect } from 'react-redux';\n\nimport { ApplicationState } from '../../store';\nimport * as Admin from '../../store/admin';\n\nimport { AdminWorkRequirements } from '@components/admin/AdminWorkRequirements';\n\nexport default connect(\n (state: ApplicationState) => ({\n ...Admin.plainActions,\n requirementExpirationTypes: state.constants.requirementExpirationTypes,\n users: state.admin.users,\n }),\n Admin.actionCreators,\n)(AdminWorkRequirements as any) as any; // eslint-disable-line @typescript-eslint/no-explicit-any\n","import * as React from 'react';\n\nimport { G, ValidationBuilder, useForm, useTranslation } from '@components';\nimport { INotificationTemplate } from '@models';\n\ntype OnSubmitF = (template: INotificationTemplate) => any;\n\nexport interface IProps {\n data?: INotificationTemplate;\n isLoading?: boolean;\n onCancel?: Function;\n onSubmit?: OnSubmitF;\n showFooter?: boolean;\n workId: number;\n}\n\nexport function NotificationTemplateForm(props: IProps) {\n const { t } = useTranslation();\n\n const form = useForm({\n initialValues: {\n id: props.data?.id,\n title: props.data?.title ?? '',\n message: props.data?.message ?? '',\n name: props.data?.name ?? '',\n workId: props.workId,\n },\n validate: d => ValidationBuilder.create(d)\n .notEmpty('name')\n .notEmpty('title')\n .notEmpty('message')\n .build(),\n });\n\n return
\n
\n \n {form.input('name')}\n \n \n {form.input('title')}\n \n \n {form.textarea('message', { rows: 10 })}\n \n {form.errorBox()}\n
\n {props.showFooter &&
\n \n props.onSubmit?.(form.values)}>{t('Save')}\n
}\n
\n}","import { connect } from 'react-redux';\nimport { ApplicationState } from '../../store';\nimport * as Admin from '@store/admin';\n\nimport { AdminNotificationTemplates } from '@components/admin/AdminNotificationTemplates';\n\nexport default connect(\n (state: ApplicationState) => ({\n ...Admin.plainActions,\n }),\n Admin.actionCreators,\n)(AdminNotificationTemplates as any) as any; // eslint-disable-line @typescript-eslint/no-explicit-any\n","import * as React from 'react';\n\nimport { INotificationTemplate, IOption, IWork } from '@models';\nimport { useConfirm, useDataTable, useDialogs, useForm, useLoading, useRemoteData, useTranslation } from '@components';\nimport { NotificationTemplateForm } from './NotificationTemplateForm';\n\nimport './NotificationMessages.scss';\n\ntype GetF = (workId: number) => Promise;\ntype RemoveF = (workId: number, id: number) => Promise>;\ntype SaveF = (workId: number, data: INotificationTemplate) => Promise>;\n\nexport interface IProps {\n getNotificationTemplates: GetF;\n removeNotificationTemplate: RemoveF;\n saveNotificationTemplate: SaveF;\n work: IWork;\n}\n\ntype Filters = {\n action?: string;\n title?: string;\n}\n\nexport function AdminNotificationTemplates(props: IProps) {\n const { t } = useTranslation();\n\n const dialogs = useDialogs();\n const loading = useLoading();\n\n const data = useRemoteData(\n props.getNotificationTemplates,\n {\n parameters: [props.work.id]\n });\n\n const doRemove = loading.wrap(async (r: INotificationTemplate) => {\n await props.removeNotificationTemplate(props.work.id, r.id!);\n data.query();\n });\n\n const confirmDelete = useConfirm({\n accept: doRemove,\n message: t('Are you sure to delete the element ?'),\n });\n\n const doSave = loading.wrap(async (r: INotificationTemplate) => {\n const _ = await props.saveNotificationTemplate(props.work.id, r);\n await data.query();\n dialogs.clear();\n });\n\n const filtersForm = useForm({\n initialValues: {},\n });\n \n const [filteredTemplates, setFilteredTemplates] = React.useState(data.value ?? []);\n\n const isBlank = (s: string|undefined) =>\n s == undefined || s == '';\n\n const filterTemplate = (m: INotificationTemplate, filters: Filters) => {\n const predicates = [\n [\n isBlank(filters.action),\n m.name.toLowerCase().includes(filters.action?.toLowerCase() ?? ''),\n ],\n [\n isBlank(filters.title),\n m.title.toLowerCase().includes(filters.title?.toLowerCase() ?? ''),\n ],\n ];\n\n return predicates\n .reduce((a, b) => a && (b[0] == true || b[1] == true), true);\n };\n\n React.useEffect(() => {\n setFilteredTemplates(\n (data.value ?? [])\n .filter(m => filterTemplate(m, filtersForm.values)));\n }, [data.value, filtersForm.values]);\n\n const dataTable = useDataTable({\n columns: [\n { title: 'id', field: 'id', sortable: true },\n { title: 'name', field: 'name', sortable: true },\n { title: 'title', field: 'title', sortable: true },\n { title: 'message', field: 'message', sortable: true },\n ],\n actions: [\n { icon: 'pencil', onClick: (r: INotificationTemplate) => dialogs.showFromEvent('edit', r)() },\n { icon: 'trash', onClick: confirmDelete }\n ],\n data: filteredTemplates,\n });\n\n return
\n {data.renderLoading()}\n\n {dialogs.render('edit', { title: t('Edit template'), style: { minWidth: '60%' }, className: 'g pd' }, (d: INotificationTemplate) =>\n dialogs.clear()}\n onSubmit={doSave}\n showFooter={true}\n workId={props.work.id} />)}\n\n {dialogs.render('add', { title: t('Add template'), style: { minWidth: '60%' }, className: 'g pd' }, (_: any) =>\n dialogs.clear()}\n onSubmit={doSave}\n showFooter={true}\n workId={props.work.id} />)}\n\n
\n
\n {t('Action')}\n {filtersForm.input('action', { placeholder: t('name')})}\n
\n
\n {t('Title')}\n {filtersForm.input('title', { placeholder: t('title')})}\n
\n
\n\n {dataTable()}\n\n
\n \n
\n
\n}\n","import * as React from 'react';\n\nimport { G, ValidationBuilder, useForm, useTranslation } from '@components';\nimport {\n getNotificationMessageActions,\n getNotificationResourceTypes,\n getResourceTypes,\n INotificationMessage,\n INotificationTemplate,\n ResourceType,\n} from '@models';\nimport { IWorkDepartment } from '@models/works';\n\ntype OnSubmitF = (data: INotificationMessage) => any;\n\nexport interface IProps {\n data?: INotificationMessage;\n templates: INotificationTemplate[];\n isLoading?: boolean;\n onCancel?: Function;\n onSubmit?: OnSubmitF;\n showFooter?: boolean;\n workId: number;\n departments: IWorkDepartment[];\n}\n\nexport function NotificationMessageForm(props: IProps) {\n const { t } = useTranslation();\n\n const commonActions = getNotificationMessageActions(t).sort((a, b) => a.name.localeCompare(b.name));\n\n const notificationResourceTypes = getNotificationResourceTypes(t);\n\n const resourceTypes = getResourceTypes(t);\n\n const form = useForm>({\n initialValues: {\n id: props.data?.id,\n action: props.data?.action,\n resourceType: props.data?.resourceType,\n restrictToResourceType: props.data?.restrictToResourceType,\n restrictToResourceId: props.data?.restrictToResourceId,\n notificationTemplateId: props.data?.notificationTemplateId,\n byMail: props.data?.byMail ?? false,\n workId: props.workId,\n actionKey: props.data?.actionKey\n },\n validate: d => ValidationBuilder.create(d)\n .notEmpty('action')\n .notEmpty('resourceType')\n .notEmpty('notificationTemplateId')\n .build(),\n });\n\n const obliqueDepartments = props.departments.filter(d => d.isOblique === true);\n\n return
\n
\n \n {form.select('action', { options: commonActions, filter: true })}\n \n {form.values.action == 20 &&\n \n {form.input('actionKey')}\n \n }\n \n {form.select('resourceType', notificationResourceTypes)}\n \n {form.values.resourceType == ResourceType.ObliqueDepartment && <>\n \n {form.select('restrictToResourceId', obliqueDepartments)}\n \n }\n \n {form.select('notificationTemplateId', { options: props.templates, filter: true })}\n \n \n {form.select('restrictToResourceType', resourceTypes)}\n \n \n {form.checkBox('byMail', { containerClassName: 'center' })}\n \n {form.errorBox()}\n
\n {props.showFooter &&
\n \n props.onSubmit?.(form.values)}>{t('Save')}\n
}\n
\n}\n","import { connect } from 'react-redux';\nimport { ApplicationState } from '../../store';\nimport * as Admin from '@store/admin';\n\nimport { AdminWorkMessages } from '@components/admin/AdminWorkMessages';\n\nexport default connect(\n (state: ApplicationState) => ({\n ...Admin.plainActions,\n }),\n Admin.actionCreators,\n)(AdminWorkMessages as any) as any; // eslint-disable-line @typescript-eslint/no-explicit-any\n","import * as React from 'react';\n\nimport {\n useLoading, useRemoteData, useDataTable, useDialogs, useTranslation,\n useResolveName, useConfirm,\n useForm,\n} from '@components';\nimport {\n getNotificationResourceTypes, getResourceTypes, IOption, IWork\n} from '@models';\nimport {\n getNotificationMessageActions, INotificationMessage, INotificationTemplate\n} from '@models/works';\n\nimport './NotificationMessages.scss';\nimport { NotificationMessageForm } from './NotificationMessageForm';\n\ntype GetNotificationMessagesF = (workId: number) => Promise;\ntype GetNotificationTemplatesF = (workId: number) => Promise;\ntype RemoveNotificationMessageF = (workId: number, id: number) => Promise>;\ntype SaveNotificationMessageF = (workId: number, data: INotificationMessage) => Promise>;\n\ntype INotificationMessageRow = INotificationMessage & {\n actionName: string;\n}\n\nexport interface IProps {\n getNotificationMessages: GetNotificationMessagesF;\n getNotificationTemplates: GetNotificationTemplatesF;\n removeNotificationMessage: RemoveNotificationMessageF;\n saveNotificationMessage: SaveNotificationMessageF;\n work: IWork;\n}\n\ntype Filters = {\n email?: boolean;\n action?: number;\n resourceType?: number;\n template?: number;\n restrictResource?: number;\n}\n\nexport function AdminWorkMessages(props: IProps) {\n const { t } = useTranslation();\n const dialogs = useDialogs();\n const loading = useLoading();\n\n const actions = React.useRef(getNotificationMessageActions(t));\n const resourceTypes = React.useRef(getNotificationResourceTypes(t));\n const resourceTypeRestrict = React.useRef(getResourceTypes(t));\n\n const resolveAction = useResolveName(actions.current);\n const resolveResourceType = useResolveName(resourceTypes.current);\n const resolveRestrictResourceType = useResolveName(resourceTypeRestrict.current);\n const resolveDepartment = useResolveName(props.work.departments ?? []);\n\n const filtersForm = useForm({\n initialValues: {},\n });\n\n const templates = useRemoteData(\n props.getNotificationTemplates,\n {\n parameters: [props.work.id]\n });\n\n const messages = useRemoteData(\n props.getNotificationMessages,\n {\n parameters: [props.work.id]\n });\n\n const [filteredMessages, setFilteredMessages] = React.useState(messages.value ?? []);\n\n const filterMessage = (m: INotificationMessage, filters: Filters) => {\n const predicates = [\n [filters.email != true, m.byMail == true],\n [filters.action == undefined, m.action == filters.action],\n [filters.resourceType == undefined, m.resourceType == filters.resourceType],\n [filters.template == undefined, m.notificationTemplateId == filters.template],\n [filters.restrictResource == undefined, m.restrictToResourceType == filters.restrictResource],\n ];\n\n return predicates\n .reduce((a, b) => a && (b[0] == true || b[1] == true), true);\n };\n\n React.useEffect(() => {\n setFilteredMessages(\n (messages.value ?? [])\n .filter(m => filterMessage(m, filtersForm.values)));\n }, [messages.value, filtersForm.values]);\n\n const doRemove = loading.wrap(async (r: INotificationMessage) => {\n await props.removeNotificationMessage(props.work.id, r.id!);\n messages.query();\n });\n\n const confirmDelete = useConfirm({\n accept: doRemove,\n message: t('Are you sure to delete the element ?'),\n });\n\n const dataTable = useDataTable({\n columns: [\n { title: 'Action', render: r => r.actionName, sortKey: 'actionName', },\n {\n title: 'ResourceType', render: r => {\n const resourceType = resolveResourceType(r.resourceType);\n const department = r.restrictToResourceId;\n if (department) {\n const departmentName = resolveDepartment(department);\n const value = resourceType + ' (' + departmentName + ')';\n\n return {value};\n }\n else {\n return resourceType;\n }\n }, sortKey: 'resourceType',\n },\n { title: 'Template', render: r => r.notificationTemplate?.name, sortKey: 'notificationTemplateName' },\n {\n title: 'Restrict resource',\n field: 'restrictToResourceType',\n render: r => resolveRestrictResourceType(r.restrictToResourceType),\n sortable: true\n },\n { title: 'Email', field: 'byMail', delegate: 'boolean', className: 'td-md', sortable: true },\n ],\n actions: [\n {\n icon: 'pencil',\n onClick: r => dialogs.showFromEvent('edit', r)()\n },\n { icon: 'trash', onClick: confirmDelete }\n ],\n data: filteredMessages\n .map(m => ({\n ...m,\n notificationTemplateName: m.notificationTemplate?.name,\n actionName: resolveAction(m.action),\n }))\n .sort((a, b) => a.actionName.localeCompare(b.actionName))\n });\n\n const doSave = loading.wrap(async (r: INotificationMessage) => {\n const _ = await props.saveNotificationMessage(props.work.id, r);\n await messages.query();\n dialogs.clear();\n });\n\n return
\n
\n
\n {t('Email')}\n {filtersForm.checkBox('email')}\n
\n
\n {t('Action')}\n {filtersForm.select('action', {\n options: actions.current, blank: true, blankText: t('Action'), filter: true\n })}\n
\n
\n {t('ResourceType')}\n {filtersForm.select('resourceType', {\n options: resourceTypes.current, blank: true, blankText: t('ResourceType'),\n })}\n
\n
\n {t('Template')}\n {filtersForm.select('template', {\n options: templates.value ?? [], blank: true, blankText: t('Template')\n })}\n
\n
\n {t('Email')}\n {filtersForm.select('restrictResource', { options: resourceTypes.current, blank: true })}\n
\n
\n {templates.renderLoading()}\n {messages.renderLoading()}\n\n {dialogs.render('edit', { title: t('Edit message'), className: 'pd g' }, (d: INotificationMessage) =>\n dialogs.clear()}\n templates={templates.value}\n onSubmit={doSave}\n showFooter={true}\n departments={props.work.departments ?? []}\n workId={props.work.id} />)}\n\n {dialogs.render('add', { title: t('Add message'), className: 'pd g' }, (_: any) =>\n dialogs.clear()}\n templates={templates.value}\n onSubmit={doSave}\n showFooter={true}\n departments={props.work.departments ?? []}\n workId={props.work.id} />)}\n {dataTable()}\n\n
\n \n
\n
\n}\n","import { connect } from 'react-redux';\nimport { ApplicationState } from '../../store';\nimport * as Admin from '@store/admin';\n\nimport { AdminWorkNotifications } from '@components/admin/AdminWorkNotifications';\n\nexport default connect(\n (state: ApplicationState) => ({\n ...Admin.plainActions,\n }),\n Admin.actionCreators,\n)(AdminWorkNotifications as any) as any; // eslint-disable-line @typescript-eslint/no-explicit-any\n","import * as React from 'react';\n\nimport AdminNotificationTemplates from '@containers/admin/AdminNotificationTemplatesContainer';\nimport AdminWorkMessages from '@containers/admin/AdminWorkMessagesContainer';\nimport { IWork } from '@models';\nimport { WorkToolbar } from './WorkToolbar';\n\nimport { TabPanel, TabView, useTranslation } from '@components';\n\nexport interface IProps {\n work: IWork;\n}\n\nexport function AdminWorkNotifications(props: IProps) {\n const { t } = useTranslation();\n\n return (
\n \n\n \n \n \n \n \n \n \n \n
)\n}\n\n","import * as React from 'react';\n\nimport { useForm, useMessage, useTranslation, G, ValidationBuilder, SplitButton } from '@components';\nimport { createFieldValidation, fieldValidationResourceTypes, IFieldValidation, ResourceType } from '@models';\n\nimport './FieldValidationForm.scss';\n\nexport interface IProps {\n data?: IFieldValidation;\n onCancel?: Function;\n onSave?: Function;\n workId: number;\n}\n\nconst validate = (d: Partial) =>\n ValidationBuilder.create(d)\n .notEmpty('name')\n .notEmpty('resourceType')\n .notEmpty('field')\n .notEmpty('errorMessage')\n .build();\n\nconst decodeExpression = (e: string|undefined) => {\n if (e && e != '') {\n return atob(e);\n }\n else {\n return undefined;\n }\n}\n\nconst encodeExpression = (e: string|undefined) => {\n if (e && e != '') {\n return btoa(e);\n }\n else {\n return undefined;\n }\n}\n\nexport function FieldValidationForm(props: IProps) {\n const { t } = useTranslation();\n const messages = useMessage();\n\n const [expression, setExpression] = React.useState(\n decodeExpression(props.data?.value) ?? '');\n const [result, setResult] = React.useState();\n const [testExpression, setTestExpression] = React.useState('');\n\n const form = useForm>({\n initialValues: props.data ?? { workId: props.workId },\n validate,\n });\n\n React.useEffect(() => {\n form.setFieldValue('value', encodeExpression(expression));\n }, [expression]);\n\n const DNI = `\ni => {\n let numero, let_, letra;\n const dniRegexp = /^[XYZ]?\\\\d{5,8}[A-Z]$/;\n\n const dni = i.code.toUpperCase();\n\n if (dniRegexp.test(dni) === true) {\n numero = dni.substr(0, dni.length-1);\n numero = numero.replace('X', 0);\n numero = numero.replace('Y', 1);\n numero = numero.replace('Z', 2);\n\n let_ = dni.substr(dni.length - 1, 1);\n numero = numero % 23;\n letra = 'TRWAGMYFPDXBNJZSQVHLCKET';\n letra = letra.substring(numero, numero+1);\n if (letra != let_) {\n return false;\n } else {\n return true;\n }\n }\n else {\n return false;\n }\n}\n`;\n\n const CIF = `i => {\n const cif = i.code.toUpperCase();\n\n if (!cif || cif.length < 4) {\n return false;\n }\n else {\n return true;\n }\n }`;\n\n //STOP!!!!\n\n const actions = [\n { label: t('DNI'), command: () => setExpression(DNI)},\n { label: t('CIF'), command: () => setExpression(CIF)}\n ]\n\n const doTestExpression = () => {\n try {\n const f = createFieldValidation(form.values.value);\n const res = f.call(null, JSON.parse(testExpression));\n setResult(JSON.stringify(res));\n messages.set({hasValue: true, value: res});\n }\n catch (e) {\n console.log(e);\n messages.setError(e + '');\n }\n }\n\n return
\n
\n
\n \n {form.input('name', { autoFocus: true })}\n \n \n {form.input('field')}\n \n \n {form.select('resourceType', fieldValidationResourceTypes)}\n \n \n {form.input('errorMessage', { autoFocus: true })}\n \n
\n
\n
\n {t('Validation')}\n \n \n
\n setExpression(e.target.value)} />\n
\n
\n
\n \n setTestExpression(e.target.value)} />\n\n \n
\n\n
\n {messages.render()}\n
\n\n {result &&
\n            {result}\n        
}\n\n
\n {props.onCancel &&\n }\n {props.onSave &&\n }\n
\n
\n}","import { connect } from 'react-redux';\nimport { ApplicationState } from '../../store';\nimport * as Admin from '@store/admin';\n\nimport { AdminWorkValidations } from '@components/admin/AdminWorkValidations';\n\nexport default connect(\n (state: ApplicationState) => ({\n ...Admin.plainActions,\n }),\n Admin.actionCreators,\n)(AdminWorkValidations as any) as any; // eslint-disable-line @typescript-eslint/no-explicit-any\n","import * as React from 'react';\n\nimport {\n BreadcrumbItem,\n useConfirm,\n useDataTable,\n useDialogs,\n useLoading,\n useMessage,\n useRemoteData,\n useResolveName,\n useTranslation\n} from '@components';\nimport { WorkToolbar } from '@components/admin/WorkToolbar';\nimport { fieldValidationResourceTypes, IOption } from '@models';\nimport { IFieldValidation, IWork } from '@models/works';\nimport { FieldValidationForm } from './FieldValidationForm';\n\ntype GetT = (workId: number) => Promise;\ntype RemoveT = (workId: number, id: number) => Promise>;\ntype SaveT = (workId: number, data: IFieldValidation) => Promise>;\n\nexport interface IProps {\n getFieldValidations: GetT;\n removeFieldValidation: RemoveT;\n saveFieldValidation: SaveT;\n work: IWork;\n}\n\nexport function AdminWorkValidations(props: IProps) {\n const { t } = useTranslation();\n const dialogs = useDialogs();\n const loading = useLoading();\n const messages = useMessage();\n const resolveResourceType = useResolveName(fieldValidationResourceTypes);\n const confirm = useConfirm({\n message: t('Are you sure to delete the element ?'),\n accept: console.log\n });\n\n const data = useRemoteData(props.getFieldValidations, { parameters: [ props.work.id ] });\n const dataTable = useDataTable({\n data: data.value,\n loading: data.loading,\n columns: [\n 'name',\n { title: 'ResourceType', render: d => resolveResourceType(d.resourceType) },\n 'field', 'errorMessage'\n ],\n actions: [\n { icon: 'pencil', onClick: (r: IFieldValidation) => dialogs.show('edit', r) },\n { icon: 'trash', onClick: confirm }\n ]\n });\n\n const doSave = loading.wrap(async (v: IFieldValidation) => {\n const res = await props.saveFieldValidation(props.work.id, v);\n messages.set(res);\n\n dialogs.clear();\n return data.query();\n });\n\n return (
\n {dialogs.render('add', { title: t('Add validation') }, () =>\n \n )}\n {dialogs.render('edit', { title: t('Edit validation') }, (data: IFieldValidation) =>\n \n )}\n\n \n \n \n\n {loading.render()}\n {data.renderLoading()}\n \n\n {dataTable()}\n
)\n}","import { connect } from 'react-redux';\nimport { ApplicationState } from '../../../store';\nimport * as Admin from '../../../store/admin';\nimport * as App from '../../../store/app';\n\nimport { ManageContractorSettings } from '@components/admin/contractors/ManageContractorSettings';\n\nexport default connect(\n (state: ApplicationState) => ({\n ...Admin.plainActions,\n }),\n Admin.actionCreators,\n)(ManageContractorSettings as any) as any; // eslint-disable-line @typescript-eslint/no-explicit-any\n","import * as React from 'react';\n\nimport { useForm, useLoading, useTranslation } from '@components';\nimport { IContractorSettings, IWork } from '@models';\nimport { WorkToolbar } from '../WorkToolbar';\n\nexport interface IProps {\n work: IWork;\n saveContractorSettings: Function;\n}\n\nexport function ManageContractorSettings(props: IProps) {\n const loading = useLoading();\n const { t } = useTranslation();\n\n const contractorSettings = props.work.contractorSettings ?? {\n showGeneralIndicators: false,\n legalFormMandatory: false,\n jhcStartDateMandatory: false,\n jhcDescriptionMandatory: false,\n cifCantBeRepeated: false,\n canAddSubWorkers: false,\n canAddSubMachineries: false,\n workId: props.work.id\n };\n\n const form = useForm({\n initialValues: contractorSettings,\n });\n\n const doSave = loading.wrap(async () => {\n await props.saveContractorSettings(props.work.id, form.values);\n });\n\n return
\n \n\n {t('contractor.settings')}\n\n
\n
\n {form.checkBox('showGeneralIndicators')}\n \n
\n
\n {form.checkBox('legalFormMandatory')}\n \n
\n
\n {form.checkBox('jhcStartDateMandatory')}\n \n
\n
\n {form.checkBox('jhcDescriptionMandatory')}\n \n
\n
\n {form.checkBox('cifCantBeRepeated')}\n \n
\n
\n {form.checkBox('canAddSubWorkers')}\n \n
\n
\n {form.checkBox('canAddSubMachineries')}\n \n
\n
\n
\n\n
\n {loading.render()}\n doSave()}>{t('Save')}\n
\n
;\n}\n","import { connect } from 'react-redux';\nimport { ApplicationState } from '../../../store';\nimport * as Admin from '../../../store/admin';\nimport * as App from '../../../store/app';\n\nimport { ManageMachinerySettings } from '@components/admin/machineries/ManageMachinerySettings';\n\nexport default connect(\n (state: ApplicationState) => ({\n ...Admin.plainActions,\n }),\n Admin.actionCreators,\n)(ManageMachinerySettings as any) as any; // eslint-disable-line @typescript-eslint/no-explicit-any\n","import * as React from 'react';\n\nimport { useForm, useLoading, useTranslation } from '@components';\nimport { IMachinerySettings, IWork } from '@models';\nimport { WorkToolbar } from '../WorkToolbar';\n\nexport interface IProps {\n work: IWork;\n saveMachinerySettings: Function;\n}\n\nexport function ManageMachinerySettings(props: IProps) {\n const loading = useLoading();\n const { t } = useTranslation();\n\n const machinerySettings = props.work.machinerySettings ?? {\n showGeneralIndicators: false,\n subTypeMandatory: false,\n onlyLicenseNumber: false,\n workId: props.work.id\n };\n\n const form = useForm({\n initialValues: machinerySettings,\n });\n\n const doSave = loading.wrap(async () => {\n await props.saveMachinerySettings(props.work.id, form.values);\n });\n\n return
\n \n\n {t('machinery.settings')}\n\n
\n
\n {form.checkBox('showGeneralIndicators')}\n \n
\n
\n {form.checkBox('subTypeMandatory')}\n \n
\n
\n {form.checkBox('onlyLicenseNumber')}\n \n
\n
\n
\n
\n {loading.render()}\n doSave()}>{t('Save')}\n
\n
;\n}\n","import { connect } from 'react-redux';\nimport { ApplicationState } from '../../../store';\nimport * as Admin from '../../../store/admin';\nimport * as App from '../../../store/app';\n\nimport { ManageWorkerSettings } from '@components/admin/workers/ManageWorkerSettings';\n\nexport default connect(\n (state: ApplicationState) => ({\n ...Admin.plainActions,\n }),\n Admin.actionCreators,\n)(ManageWorkerSettings as any) as any; // eslint-disable-line @typescript-eslint/no-explicit-any\n","import * as React from 'react';\n\nimport { useForm, useLoading, useTranslation } from '@components';\nimport { IWorkerSettings, IWork } from '@models';\nimport { WorkToolbar } from '../WorkToolbar';\n\nexport interface IProps {\n work: IWork;\n saveWorkerSettings: Function;\n}\n\nexport function ManageWorkerSettings(props: IProps) {\n const loading = useLoading();\n const { t } = useTranslation();\n\n const workerSettings = props.work.workerSettings ?? {\n showWorkerImage: false,\n showGeneralIndicators: false,\n\t workerTypeIsMandatory: false,\n workId: props.work.id\n };\n\n const form = useForm({\n initialValues: workerSettings,\n });\n\n const doSave = loading.wrap(async () => {\n await props.saveWorkerSettings(props.work.id, form.values);\n });\n\n return
\n \n\n {t('worker.settings')}\n\n
\n
\n {form.checkBox('showWorkerImage')}\n \n
\n
\n {form.checkBox('showGeneralIndicators')}\n \n
\n
\n {form.checkBox('workerTypeIsMandatory')}\n \n
\n
\n
\n
\n {loading.render()}\n doSave()}>{t('Save')}\n
\n
;\n}\n","import { connect } from 'react-redux';\nimport { ApplicationState } from '../../../store';\nimport * as Admin from '../../../store/admin';\nimport * as App from '../../../store/app';\n\nimport { ManageJobSettings } from '@components/admin/jobs/ManageJobSettings';\n\nexport default connect(\n (state: ApplicationState) => ({\n ...Admin.plainActions,\n }),\n Admin.actionCreators,\n)(ManageJobSettings as any) as any; // eslint-disable-line @typescript-eslint/no-explicit-any\n","import * as React from 'react';\n\nimport { useForm, useLoading, useTranslation } from '@components';\nimport { IJobSettings, IWork } from '@models';\nimport { WorkToolbar } from '../WorkToolbar';\n\nexport interface IProps {\n work: IWork;\n saveJobSettings: Function;\n}\n\nexport function ManageJobSettings(props: IProps) {\n const loading = useLoading();\n const { t } = useTranslation();\n\n const jobSettings = props.work.jobSettings ?? {\n noInformationLoadedState: false,\n skipInformationLoadedState: false,\n colorizeContractorIndicators: false,\n freeRequirementsAreMandatory: false,\n omitJobHasContractorDefaultNotification: false,\n showResourceIncidenceIndicator: true,\n jobHasContractorNotificationTargetPolicy: undefined,\n informationLoadedNotificationPolicy: undefined,\n workId: props.work.id\n };\n\n const form = useForm({\n initialValues: jobSettings,\n });\n\n const doSave = loading.wrap(async () => {\n await props.saveJobSettings(props.work.id, form.values);\n });\n\n return
\n \n\n {t('job.settings')}\n\n
\n
\n {form.checkBox('noInformationLoadedState')}\n \n
\n
\n {form.checkBox('skipInformationLoadedState')}\n \n
\n
\n {form.checkBox('colorizeContractorIndicators')}\n \n
\n
\n {form.checkBox('freeRequirementsAreMandatory')}\n \n
\n
\n {form.checkBox('omitJobHasContractorDefaultNotification')}\n \n
\n
\n {form.checkBox('showResourceIncidenceIndicator')}\n \n
\n
\n \n {form.input('jobHasContractorNotificationTargetPolicy')}\n\n \n {form.input('informationLoadedNotificationPolicy')}\n
\n
\n
\n
\n {loading.render()}\n doSave()}>{t('Save')}\n
\n
;\n}\n","import { connect } from 'react-redux';\nimport { ApplicationState } from '@store';\nimport * as Admin from '@store/admin';\n\nimport { ManageWorkModules } from '@components/admin/modules/ManageWorkModules';\n\n\nexport default connect(\n (state: ApplicationState) => ({\n availableModules: state.admin.availableModules,\n ...Admin.plainActions\n }),\n Admin.actionCreators,\n)(ManageWorkModules as any) as any; // eslint-disable-line @typescript-eslint/no-explicit-any\n","import * as React from 'react';\n\nimport { InputSwitch, useLoading, useTranslation } from '@components';\nimport { IWork, IModuleInfo, IWorkHasModule } from '@models';\nimport { WorkToolbar } from '../WorkToolbar';\n\nexport interface IProps {\n availableModules: IModuleInfo[];\n saveWorkHasModule: Function;\n work: IWork;\n}\n\ntype ModuleRelation = {\n workHasModule: IWorkHasModule,\n moduleInfo: IModuleInfo,\n}\n\nexport function ManageWorkModules(props: IProps) {\n const loading = useLoading();\n const { t } = useTranslation();\n\n const [data, setData] = React.useState([]);\n\n React.useEffect(() => {\n const relations = props.work.workHasModules ?? [];\n const allModules = props.availableModules ?? [];\n\n const workRelations = allModules\n .map(m => {\n const r = relations.find(r => r.moduleName == m.id);\n return {\n moduleInfo: m,\n workHasModule: {\n workId: props.work.id,\n moduleName: m.id,\n isActive: r?.isActive ?? false,\n },\n };\n });\n setData(workRelations);\n }, [props.availableModules, props.work]);\n\n\n const saveModuleRelation = loading.wrap((raw: ModuleRelation) => {\n props.saveWorkHasModule(props.work.id, raw.workHasModule);\n });\n\n const toggleModuleRelation = (raw: ModuleRelation) => {\n const newRel = {...raw, workHasModule: {\n ...raw.workHasModule,\n isActive: !(raw.workHasModule?.isActive ?? false)\n }\n };\n\n saveModuleRelation(newRel);\n\n return newRel;\n }\n\n const toggleWorkHasModule = (raw: ModuleRelation) => {\n return (e: any) => {\n setData(d =>\n d.map(r => r.moduleInfo.id == raw.moduleInfo.id\n ? toggleModuleRelation(raw)\n : r));\n }\n }\n\n return
\n \n\n
\n {t('work.modules')}\n {loading.render()}\n
\n\n
\n \n \n \n \n \n \n \n \n \n \n \n {data.map((d, k) => \n \n \n \n \n \n )}\n \n
{t('Name')}{t('EntryPoint')}{t('Description')}{t('Version')}
\n \n {d.moduleInfo.id}{d.moduleInfo.name}{d.moduleInfo.description}{d.moduleInfo.version}
\n
\n
\n}\n","import * as React from 'react';\n\nimport { IEventTrigger, getEventTriggerTypes, } from '@models';\nimport {\n Message,\n useForm,\n useTranslation,\n ValidationBuilder,\n} from '@components';\n\nimport './EventTriggerForm.scss';\nimport { getEventResourceTypes } from '@models/resources';\n\nexport interface IProps {\n data?: IEventTrigger;\n error?: string;\n workId: number;\n footer?: any;\n onChange?: Function;\n onSubmit: Function;\n}\n\nexport const validate = (data: IEventTrigger) => {\n return ValidationBuilder\n .create(data)\n .notEmpty('name')\n .notEmpty('eventTriggerTypeId')\n .notEmpty('resourceTypeId')\n .build();\n}\n\nexport const isValid = (data: IEventTrigger) => {\n return Object.keys(validate(data)).length == 0;\n}\n\nexport function EventTriggerForm(props: IProps) {\n const { t } = useTranslation();\n\n const resourceTypes = getEventResourceTypes(t);\n const eventTriggerTypes = getEventTriggerTypes(t);\n\n const editor = React.useRef();\n\n const form = useForm({\n initialValues: {\n id: props.data?.id ?? 0,\n name: props.data?.name ?? '',\n workId: props.workId,\n code: props.data?.code ?? '',\n resourceTypeId: props.data?.resourceTypeId ?? 1,\n eventTriggerTypeId: props.data?.eventTriggerTypeId ?? 1,\n },\n validate: validate,\n onSubmit: (data: IEventTrigger) => {\n data.code = editor.current.getValue();\n props.onSubmit(data);\n return {ok: true};\n },\n onChange: props.onChange,\n });\n\n React.useEffect(() => {\n (window.require as any)(['vs/editor/editor.main'], function() {\n const monaco = (window as any).monaco;\n if (editor.current == undefined) {\n editor.current = monaco.editor.create(document.getElementById('code-container'), {\n value: form.values.code,\n language: 'csharp',\n theme: \"vs-dark\",\n });\n\n window.onresize = function () {\n editor.current.layout();\n };\n }\n });\n }, []);\n\n return
\n
\n
\n {form.input('name', { containerClassName: 'e' })}\n {form.select('eventTriggerTypeId', eventTriggerTypes)}\n {form.select('resourceTypeId', resourceTypes)}\n
\n\n
\n
\n\n
\n {form.errorBox()}\n {props.error != undefined && }\n
\n {props.footer != undefined && props.footer}\n
\n
\n}","import { connect } from 'react-redux';\nimport { ApplicationState } from '@store';\nimport * as Admin from '@store/admin';\n\nimport { ManageWorkEvents } from '@components/admin/events/ManageWorkEvents';\n\n\nexport default connect(\n (state: ApplicationState) => ({\n ...Admin.plainActions\n }),\n Admin.actionCreators,\n)(ManageWorkEvents as any) as any; // eslint-disable-line @typescript-eslint/no-explicit-any\n","import * as React from 'react';\n\nimport { useDataTable, useFormDialog, useLoading, useMessage, useResolveName, useTranslation } from '@components';\nimport { getEventTriggerTypes, getResourceTypes, IEventTrigger, IWork } from '@models';\nimport { WorkToolbar } from '../WorkToolbar';\n\nimport { EventTriggerForm } from './EventTriggerForm';\n\nexport interface IProps {\n getEventTriggers: Function;\n saveEventTrigger: Function;\n\n work: IWork;\n}\n\nexport function ManageWorkEvents(props: IProps) {\n const { t } = useTranslation();\n const loading = useLoading();\n const [eventTriggers, setEventTriggers] = React.useState([]);\n const messages = useMessage();\n\n const resourceTypes = React.useRef(getResourceTypes(t));\n const eventTriggerTypes = React.useRef(getEventTriggerTypes(t));\n\n const resolveEventTriggerType = useResolveName(eventTriggerTypes.current);\n const resolveResourceType = useResolveName(resourceTypes.current);\n\n const formDialog = useFormDialog({\n editTitle: t('Edit'),\n addTitle: t('Add'),\n });\n\n const initialize = loading.wrap(async () => {\n const res = await props.getEventTriggers(props.work.id);\n setEventTriggers(res);\n });\n\n React.useEffect(() => {\n initialize();\n }, []);\n\n const table = useDataTable({\n data: eventTriggers,\n className: 'e',\n loading,\n columns: [\n {field:'id', className:'td-sm'},\n 'name',\n {field: 'eventTriggerTypeId', title: 'eventTriggerType', render: (a) => resolveEventTriggerType(a.eventTriggerTypeId) },\n {field: 'resourceTypeId', title: 'resourceType', render: (a) => resolveResourceType(a.resourceTypeId) },\n ],\n actions: [\n {icon: 'pencil', tooltip: t('Edit'), onClick: formDialog.showEdit}\n ]\n });\n\n const saveTrigger = loading.wrap(async (data: IEventTrigger) => {\n const res = await props.saveEventTrigger(props.work.id, data);\n messages.set(res);\n if (res.value) {\n // formDialog.clear();\n\n await initialize();\n }\n });\n\n const createElement = (tag: string) => {\n const el = document.createElement(tag);\n document.body.append(el);\n return el as any;\n }\n\n React.useEffect(() => {\n (window as any).require = { paths: { vs: '/js/monaco/min/vs' } };\n (window as any).define = console.log;\n\n\t\tcreateElement('script').src = '/js/monaco/min/vs/loader.js';\n createElement('script').src = '/js/monaco/min/vs/editor/editor.main.nls.js';\n createElement('script').src = '/js/monaco/min/vs/editor/editor.main.js';\n }, []);\n\n return
\n \n\n {table()}\n\n \n\n {formDialog.render((data: IEventTrigger) =>\n )}\n\n
\n \n \n
\n
\n}\n","import { connect } from 'react-redux';\nimport { ApplicationState } from '../../store';\n\nimport { ModuleView } from '@components/modules/ModuleView';\n\nexport default connect(\n (state: ApplicationState, props: any) => ({\n state,\n moduleName: props.match.params.module,\n moduleView: props.match.params.view,\n match: props.match,\n params: props,\n }),\n { },\n)(ModuleView as any) as any; // eslint-disable-line @typescript-eslint/no-explicit-any\n","import * as React from 'react';\n\nimport { Loading } from '@components/custom/Loading';\nimport { getModule } from '../../modules';\nimport { ApplicationState } from '@store';\n\nexport interface IProps {\n moduleName: string;\n moduleView: string;\n mach: any;\n params: any;\n state: ApplicationState;\n}\n\nexport function ModuleView(props: any) {\n const module = getModule(props.moduleName);\n const moduleView = window.location.href.substring(\n window.location.href.indexOf(props.moduleView)\n );\n\n return module?.handleView({\n route: moduleView,\n state: props.state,\n params: props.params,\n security: props.state.identity.security,\n }) ??
;\n}\n","import ModuleManager from \"./ModuleManager\";\n\nexport const getModule = (name: string) => {\n return (window as any).__modules[name];\n}\nexport { ModuleManager };\n","import * as React from 'react';\nimport { connect } from 'react-redux';\nimport { ApplicationState } from '../../store';\n\nimport { Loading } from '@components';\nimport { redirectTo } from '@utils';\n\nconst Loader = (props: any) => {\n const [loading, setLoading] = React.useState(true);\n\n React.useEffect(() => {\n const work = props.state.user.work;\n if (work) {\n setLoading(false);\n redirectTo(`/modules/${work.id}/${props.moduleName}/${props.moduleView}`);\n }\n }, [props.state.work.work]);\n\n if (loading) {\n return ;\n }\n else {\n return null;\n }\n}\n\nexport default connect(\n (state: ApplicationState, props: any) => ({\n state,\n moduleName: props.match.params.module,\n moduleView: props.match.params.view,\n params: props,\n }),\n { },\n )(Loader as any) as any; // eslint-disable-line @typescript-eslint/no-explicit-any","import * as React from 'react';\n\nimport { useForm, useLoading, useToast, useTranslation, F, ValidationBuilder } from '@components';\nimport { CountryRegionSelect } from '@components/common/CountryRegionSelect';\nimport useContractorFromAppUser from '@components/custom/useContractorFromAppUser';\nimport { DynamicProperties } from '@components/user/DynamicProperties';\nimport { IContractor, IConstants, IOption, IPropertyGroupType, ISecurity, IUserIdentity, PropertyGroupObjectType, ModuleManager } from '@models';\nimport { goBack } from '@utils';\n\nimport './UserProfile.scss';\n\ntype SaveContractorT = (workId: number, data: IContractor) => Promise>;\n\nexport interface IProps {\n constants: IConstants;\n getContractorFromAppUser: Function;\n propertyGroupTypes: IPropertyGroupType[];\n saveContractor: SaveContractorT;\n security: ISecurity;\n user: IUserIdentity;\n workId: number;\n moduleManager: ModuleManager;\n}\n\nfunction ContractorUserProfileImpl(props: IProps) {\n const { t } = useTranslation();\n const toast = useToast();\n const loading = useLoading(true);\n\n const contractorId = useContractorFromAppUser(props.workId, props.security);\n const [contractor, setContractor] = React.useState();\n\n const form = useForm>({\n initialValues: {},\n validate: ValidationBuilder\n .create()\n .notEmpty('name')\n .notEmpty('code')\n .lift(),\n });\n\n const initialize = loading.wrap(async (workId: number) => {\n const data = await props.getContractorFromAppUser(workId);\n\n setContractor(data);\n form.setFieldValues(data);\n });\n\n React.useEffect(() => {\n initialize(props.workId);\n }, [props.workId]);\n\n const updateRegion = ({ countryId, regionId, countyId }: any) => {\n form.setFieldValue('countryId', countryId);\n form.setFieldValue('regionId', regionId);\n form.setFieldValue('countyId', countyId);\n }\n\n const doSave = loading.wrap(async () => {\n const res = await props.saveContractor(props.workId, form.values);\n\n if (res.hasValue && res.value) {\n toast.show(t('data.success'));\n }\n else {\n toast.error(res.error ?? t('data.error'));\n }\n\n await initialize(props.workId);\n });\n\n return (
\n {loading.renderBox()}\n\n {toast.render()}\n\n {!loading.isLoading() &&
\n
\n {contractor?.name}\n
\n
\n
\n \n {form.input('name', { autoFocus: true })}\n \n \n \n \n \n {form.input('code')}\n \n \n {form.input('phone')}\n \n \n {form.textarea('remarks', { rows: 8 })}\n \n
\n
\n \n {form.input('address')}\n \n \n \n \n\n \n {form.input('postalCode')}\n \n\n {contractor &&\n
\n form.setFieldValue('properties', v)}\n embedPortal={'#embed-properties'}\n objectType={PropertyGroupObjectType.JobHasContractor}\n propertyGroupTypes={props.propertyGroupTypes} />\n
}\n\n
\n
\n
\n \n \n doSave()}>{t('Save')}\n
\n
}\n
);\n}\n\n\nexport default function ContractorUserProfile(props: IProps) {\n\n return props\n .moduleManager\n .renderComponent(\n 'ContractorUserProfile',\n { ...props },\n ContractorUserProfileImpl,\n true);\n}","import { connect } from 'react-redux';\nimport { ApplicationState } from '../store';\n\nimport ContractorProfile from '../components/ContractorProfile';\nimport * as UserStore from '../store/user';\nimport * as ContractorStore from '../store/contractors';\n\nimport { isJobHasContractorPropertyGroupType } from '@models';\n\nexport default connect(\n (state: ApplicationState) => ({\n constants: state.constants,\n workId: state.user?.work?.id,\n propertyGroupTypes: state.user.propertyGroupTypes.filter(isJobHasContractorPropertyGroupType),\n user: state.identity?.user,\n ...UserStore.plainActions,\n ...ContractorStore.plainActions,\n moduleManager: state.modules.moduleManager,\n }),\n {},\n)(ContractorProfile as any) as any; // eslint-disable-line @typescript-eslint/no-explicit-any\n","import { connect } from 'react-redux';\nimport { ApplicationState } from '../store';\n\nimport WorkerProfile from '../components/WorkerProfile';\nimport * as UserStore from '../store/user';\nimport * as WorkerStore from '../store/workers';\n\nexport default connect(\n (state: ApplicationState) => ({\n constants: state.constants,\n workId: state.user?.work?.id,\n user: state.identity?.user,\n ...UserStore.plainActions,\n ...WorkerStore.plainActions,\n }),\n {},\n)(WorkerProfile as any) as any; // eslint-disable-line @typescript-eslint/no-explicit-any\n","import * as React from 'react';\n\nimport { useForm, useLoading, useToast, useTranslation, F, ValidationBuilder } from '@components';\nimport { IConstants, IOption, ISecurity, IUserIdentity, IWorker } from '@models';\nimport { goBack } from '@utils';\n\nimport './UserProfile.scss';\n\ntype SaveWorkerT = (workId: number, data: IWorker) => Promise>;\n\nexport interface IProps {\n constants: IConstants;\n getWorker: Function;\n user: IUserIdentity;\n saveWorker: SaveWorkerT;\n security: ISecurity;\n workId: number;\n}\n\nexport default function WorkerUserProfile(props: IProps) {\n const { t } = useTranslation();\n const toast = useToast();\n const loading = useLoading(true);\n\n const [worker, setWorker] = React.useState();\n\n React.useEffect(() => {\n const workerIds = props.security.getWorkerIds();\n if (workerIds.length > 0 && workerIds[0]) {\n initialize(props.workId, workerIds[0]);\n }\n }, [props.security, props.workId]);\n\n const form = useForm>({\n initialValues: {},\n readonly: loading.isLoading(),\n validate: ValidationBuilder\n .create()\n .notEmpty('name')\n .notEmpty('code')\n .lift(),\n });\n\n const initialize = loading.wrap(async (workId: number, workerId: number) => {\n const worker = await props.getWorker(workId, workerId);\n\n setWorker(worker);\n form.setFieldValues(worker);\n });\n\n const doSave = loading.wrap(async () => {\n const res = await props.saveWorker(props.workId, form.values);\n\n if (res.hasValue && res.value) {\n toast.show(t('data.success'));\n }\n else {\n toast.error(res.error ?? t('data.error'));\n }\n });\n\n return (
\n\n {toast.render()}\n\n
\n
\n {worker?.name}\n  \n {worker?.surname}\n
\n
\n
\n
\n \n {form.input('name', { autoFocus: true, className: 'e' })}\n \n \n {form.input('surname', { className: 'e' })}\n \n \n \n \n \n {form.input('phone', { className: 'e' })}\n \n
\n \n {form.textarea('remarks', { rows: 8 })}\n \n
\n
\n
\n \n \n {loading.renderBox()}\n doSave()}>{t('Save')}\n
\n
\n
);\n}\n","import { connect } from 'react-redux';\nimport { ApplicationState } from '../store';\n\nimport UserProfile from '../components/UserProfile';\nimport * as UserStore from '../store/user';\n\nexport default connect(\n (state: ApplicationState) => ({\n workId: state.user?.work?.id,\n user: state.identity?.user,\n security: state.identity?.security,\n ...UserStore.plainActions,\n }),\n {},\n)(UserProfile as any) as any; // eslint-disable-line @typescript-eslint/no-explicit-any\n","import * as React from 'react';\n\nimport ContractorProfile from '@containers/ContractorProfileContainer';\nimport WorkerProfile from '@containers/WorkerProfileContainer';\nimport { ISecurity, IUserIdentity } from '@models';\n\nexport interface IProps {\n security: ISecurity;\n user: IUserIdentity;\n workId?: number;\n}\n\nexport default function UserProfile(props: IProps) {\n if (props.workId == undefined) {\n return null;\n }\n else if (props.security.isWorker()) {\n return ;\n }\n else if (props.security.isContractor()) {\n return ;\n }\n else {\n return (
\n TODO\n
);\n }\n}\n","import * as React from 'react';\nimport * as ReactDOM from 'react-dom';\nimport { Route } from 'react-router';\n\nimport Layout from '@components/Layout';\nimport Home from '@containers/HomeContainer';\nimport AdminDocumentTypesContainer from '@containers/admin/AdminDocumentTypesContainer';\nimport AdminUsers from '@containers/admin/AdminUsersContainer';\nimport AdminLoader from '@containers/admin/AdminLoaderContainer';\nimport AdminRoutesWrapper from './components/admin/AdminRoutesWrapper';\nimport AdminWorkLoader from '@containers/admin/AdminWorkLoader';\nimport EditWorkContainer from '@containers/admin/EditWorkContainer';\nimport AdminWorks from '@containers/admin/AdminWorksContainer';\nimport AdminDevelGraphqlUi from '@components/admin/devel/GraphQlUi';\nimport AdminWorkDepartments from '@containers/admin/AdminWorkDepartmentsContainer';\nimport AdminWorkPermissions from '@containers/admin/AdminWorkPermissionsContainer';\nimport AdminWorkWorkers from '@containers/admin/AdminWorkWorkersContainer';\nimport AdminWorkConfiguration from '@containers/admin/AdminWorkConfigurationContainer';\nimport RegisterContractorContainer from '@containers/contractors/RegisterContractorContainer';\nimport ResetPasswordContainer from '@containers/identity/ResetPasswordContainer';\nimport ChangePasswordContainer from '@containers/user/ChangePasswordContainer';\nimport UserConfigurationContainer from '@containers/user/UserConfigurationContainer';\nimport AdminWorkRequirementsContainer from '@containers/admin/AdminWorkRequirementsContainer';\nimport AdminWorkNotifications from '@containers/admin/AdminWorkNotificationsContainer';\nimport AdminWorkValidations from '@containers/admin/AdminWorkValidationsContainer';\nimport AdminWorkContractorsSettings from '@containers/admin/contractors/ManageContractorSettingsContainer';\nimport AdminWorkMachineriesSettings from '@containers/admin/machineries/ManageMachinerySettingsContainer';\nimport AdminWorkWorkersSettings from '@containers/admin/workers/ManageWorkerSettingsContainer';\nimport AdminWorkJobsSettings from '@containers/admin/jobs/ManageJobSettingsContainer';\nimport AdminWorkModules from '@containers/admin/modules/ManageWorkModulesContainer';\nimport AdminWorkEvents from '@containers/admin/events/ManageWorkEventsContainer';\nimport ModuleViewContainer from '@containers/modules/ModuleViewContainer';\nimport ModuleViewRedirectionContainer from '@containers/modules/ModuleViewRedirectionContainer';\nimport WorkLoader from '@containers/user/WorkLoaderContainer';\nimport UserProfileContainer from '@containers/UserProfileContainer';\n\nconst ModuleViewWrapper = (props: any) => {\n return \n \n \n}\n\nconst UserProfileWrapper = (props: any) => {\n return \n \n \n}\n\nconst AdminWrapper = (props: any) => {\n return \n {props.children}\n \n}\n\nconst AdminDocumentTypesWrapper = (props: any) => \n \n\n\nconst AdminUsersWrapper = (props: any) => \n \n\n\nconst AdminWorkWrapper = (props: any) => \n \n \n \n\n\nconst AdminWorksWrapper = (props: any) => \n \n\n\nconst AdminWorkPermissionsWrapper = (props: any) => \n \n \n \n\n\nconst AdminWorkRequirementsWrapper = (props: any) => \n \n \n \n\n\nconst AdminWorkConfigurationWrapper = (props: any) => \n \n \n \n\n\nconst AdminWorkDepartmentsWrapper = (props: any) => \n \n \n \n\n\nconst AdminWorkNotificationsWrapper = (props: any) => \n \n \n \n\n\nconst AdminWorkValidationsWrapper = (props: any) => \n \n \n \n\n\nconst AdminWorkUsersWrapper = (props: any) => \n \n \n \n\n\nconst AdminWorkContractorsSettingsWrapper = (props: any) => \n \n \n \n\n\nconst AdminWorkMachineriesSettingsWrapper = (props: any) => \n \n \n \n\n\nconst AdminWorkWorkersSettingsWrapper = (props: any) => \n \n \n \n\n\nconst AdminWorkJobSettingsWrapper = (props: any) => \n \n \n \n;\n\nconst AdminWorkModulesWrapper = (props: any) => \n \n \n \n\n\nconst AdminWorkEventsWrapper = (props: any) => \n \n \n \n\n\nconst AdminDevelVoyagerWrapper = (props: any) => \n \n\n\nconst AdminDevelGraphqlUiWrapper = (props: any) => \n \n\n\nconst AdminRoutes = (props: any) => {\n return \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n}\n\nexport default () => (\n \n \n \n \n \n \n \n \n \n \n \n {/* */}\n \n);\n\n(window as any).React = React;\n(window as any).ReactDOM = ReactDOM;\n","// In production, we register a service worker to serve assets from local cache.\n\n// This lets the app load faster on subsequent visits in production, and gives\n// it offline capabilities. However, it also means that developers (and users)\n// will only see deployed updates on the \"N+1\" visit to a page, since previously\n// cached resources are updated in the background.\n\n// To learn more about the benefits of this model, read https://goo.gl/KwvDNy.\n// This link also includes instructions on opting out of this behavior.\n\nconst isLocalhost = Boolean(\n window.location.hostname === 'localhost' ||\n // [::1] is the IPv6 localhost address.\n window.location.hostname === '[::1]' ||\n // 127.0.0.1/8 is considered localhost for IPv4.\n window.location.hostname.match(\n /^127(?:\\.(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)){3}$/\n )\n);\n\nexport default function register() {\n if (process.env.NODE_ENV === 'production' && 'serviceWorker' in navigator) {\n // The URL constructor is available in all browsers that support SW.\n const url = process.env.PUBLIC_URL as string;\n const publicUrl = new URL(url, window.location.toString());\n if (publicUrl.origin !== window.location.origin) {\n // Our service worker won't work if PUBLIC_URL is on a different origin\n // from what our page is served on. This might happen if a CDN is used to\n // serve assets; see https://github.com/facebookincubator/create-react-app/issues/2374\n return;\n }\n\n window.addEventListener('load', () => {\n const swUrl = `${process.env.PUBLIC_URL}/service-worker.js`;\n\n if (isLocalhost) {\n // This is running on localhost. Lets check if a service worker still exists or not.\n checkValidServiceWorker(swUrl);\n } else {\n // Is not local host. Just register service worker\n registerValidSW(swUrl);\n }\n });\n }\n}\n\nfunction registerValidSW(swUrl: string) {\n navigator.serviceWorker\n .register(swUrl)\n .then(registration => {\n registration.onupdatefound = () => {\n const installingWorker = registration.installing as ServiceWorker;\n installingWorker.onstatechange = () => {\n if (installingWorker.state === 'installed') {\n if (navigator.serviceWorker.controller) {\n // At this point, the old content will have been purged and\n // the fresh content will have been added to the cache.\n // It's the perfect time to display a \"New content is\n // available; please refresh.\" message in your web app.\n console.log('New content is available; please refresh.');\n } else {\n // At this point, everything has been precached.\n // It's the perfect time to display a\n // \"Content is cached for offline use.\" message.\n console.log('Content is cached for offline use.');\n }\n }\n };\n };\n })\n .catch(error => {\n console.error('Error during service worker registration:', error);\n });\n}\n\nfunction checkValidServiceWorker(swUrl: string) {\n // Check if the service worker can be found. If it can't reload the page.\n fetch(swUrl)\n .then(response => {\n // Ensure service worker exists, and that we really are getting a JS file.\n const contentType = response.headers.get('content-type');\n if (response.status === 404 || (contentType && contentType.indexOf('javascript') === -1)) {\n // No service worker found. Probably a different app. Reload the page.\n navigator.serviceWorker.ready.then(registration => {\n registration.unregister().then(() => {\n window.location.reload();\n });\n });\n } else {\n // Service worker found. Proceed as normal.\n registerValidSW(swUrl);\n }\n })\n .catch(() => {\n console.log('No internet connection found. App is running in offline mode.');\n });\n}\n\nexport function unregister() {\n if ('serviceWorker' in navigator) {\n navigator.serviceWorker.ready.then(registration => {\n registration.unregister();\n });\n }\n}\n","import * as React from 'react';\nimport * as ReactDOM from 'react-dom';\nimport { Provider } from 'react-redux';\nimport { ConnectedRouter } from 'connected-react-router';\nimport configureStore from './store/configureStore';\nimport App from './App';\nimport registerServiceWorker from './registerServiceWorker';\nimport History from './AppHistory';\nimport Constants from './Constants';\n\nimport * as NotificationsStore from './store/notifications';\n\nimport * as signalR from '@microsoft/signalr';\n\nimport './i18n';\nimport 'primereact/resources/themes/saga-blue/theme.css';\nimport 'primereact/resources/primereact.min.css';\nimport 'primeicons/primeicons.css';\nimport './styles/index.scss';\n\nimport * as AppActions from './store/app';\nimport { MessageType, parseMessage } from '@models/notifications';\n\n(window as any).process = {\n ...(window as any).process,\n};\n\n// Create browser history to use in the Redux store\nconst baseUrl = document.getElementsByTagName('base')[0].getAttribute('href') as string;\n\n// Get the application-wide store instance, prepopulating with state from the server where available.\nconst store = configureStore(History);\nAppActions.actionCreators.initialize()(store.dispatch);\n\nconst signalConnection = new signalR.HubConnectionBuilder()\n .withUrl(\"/notifications\")\n // .configureLogging(signalR.LogLevel.Information)\n .withAutomaticReconnect()\n .build();\n\nasync function startSignalNotifications() {\n try {\n await signalConnection.start();\n }\n catch (err) {\n console.log(err);\n setTimeout(startSignalNotifications, 5000);\n }\n};\n\nsignalConnection.onclose(async () => {\n await startSignalNotifications();\n});\n\nlet __last_reloadns = new Date().getTime();\n\nsignalConnection.on('NotificationMessage', rawMessage => {\n const message = parseMessage(rawMessage);\n if (message.notificationType == MessageType.RELOAD_NOTIFICATIONS) {\n const cs = new Date().getTime();\n if (cs - __last_reloadns > 1000 * 30) {\n\n const randomTime = Math.floor(Math.random() * (10 * 1000));\n\n setTimeout(() => {\n NotificationsStore.actionCreators.addMessage(message)(store.dispatch, store.getState);\n }, randomTime);\n }\n }\n else {\n NotificationsStore.actionCreators.addMessage(message)(store.dispatch, store.getState);\n }\n});\nReactDOM.render(\n \n \n \n \n ,\n document.getElementById('root'));\n\nif (Constants.isDebug) {\n registerServiceWorker();\n}\n\nsetTimeout(\n () => {\n NotificationsStore.actionCreators.loadMessages()(store.dispatch, store.getState);\n startSignalNotifications();\n },\n 1000);\n","import { applyMiddleware, combineReducers, compose, createStore, Middleware } from 'redux';\nimport thunk from 'redux-thunk';\nimport { connectRouter, routerMiddleware } from 'connected-react-router';\nimport { History } from 'history';\nimport { ApplicationState, reducers } from './';\n\nimport { isDebug } from '../Constants';\n\nfunction logger(store: any) {\n return function dispatchAndLog(dispatch: any) {\n console.log('prev state', store.getState())\n return (action: any) => {\n console.log('action', action);\n dispatch(action);\n console.log('new state', store.getState());\n };\n }\n}\n\nexport default function configureStore(history: History, initialState?: ApplicationState) {\n const middleware: any = [\n thunk,\n // isDebug ? logger : undefined,\n routerMiddleware(history)\n ].filter(identity => identity !== undefined);\n\n const rootReducer = combineReducers({\n ...reducers,\n router: connectRouter(history)\n });\n\n const enhancers = [];\n const windowIfDefined = typeof window === 'undefined' ? null : window as any; // eslint-disable-line @typescript-eslint/no-explicit-any\n if (windowIfDefined && windowIfDefined.__REDUX_DEVTOOLS_EXTENSION__) {\n enhancers.push(windowIfDefined.__REDUX_DEVTOOLS_EXTENSION__());\n }\n\n return createStore(\n rootReducer,\n initialState,\n compose(applyMiddleware(...middleware), ...enhancers)\n );\n}\n"],"sourceRoot":""}