{"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","models/jobs.ts","components/requirements/ViewRequirementHistory.tsx","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","getXml","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","TEXTAREA","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","saveSubMainContractorRequest","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","JobStatusType","parseJobProperty","jobProperty","aJob","JobLogType","jobStatusTypes","INFORMATION_LOADED","rawJobStatusTypes","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","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","canViewHelpDesk","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","restrictMachinery","getMachineries","MachineriesActions","saveMachinery","removeMachinery","reactivateMachinery","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","SOLTEC_WITH_CODE","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","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","CreateContractorInvitationImpl","doSendInvitation","onCreate","formIsValid","validateJob","validateCode","builder","JobDataImpl","codeIsManual","jobEncodingType","Manual","jobPropertiesCreate","validateWorkspaces","ManageJobDepartmentsContainer","validateContractor","contractorSettings","jhcStartDateMandatory","jhcDescriptionMandatory","currentSearchTerm","setActiveIndex","setContractors","setSelectedContractor","debouncedSearchTerm","selfContractors","jobContractors","filteredData","foundContractor","jc","isParentUndefined","parentContractor","isParentMatch","contractorsToExclude","isArray","filterContractors","jobsDescription","shipmentNumber","saveNewContractor","main","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","newData","validateContractorRequest","Result","gridColumn","ProcessContractorRequest","ACCEPT","accepted","acceptedDate","discarded","discardedDate","setResult","resultOptions","REJECT","ContractorRequestData","JobContractorRequestsImpl","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","showRemarksInInformationLoadedForm","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","JobFormImpl","availableWorkers","setAvailableWorkers","setSelectedDepartment","selectedResponsible","setSelectedResponsible","setDepartments","resolveDepartment","resolveWorker","formSettings","worksSpacesSearch","workSpaces","setWorkSpaces","filterWorkers","filterDepartment","availableDepartments","setAvailableDepartments","obliqueDepartments","de","calculateAvailableDepartments","todayOffset","setDate","newDepartments","removeDepartment","JobForm","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","toXml","paginateData","work_id","confirmInvalidate","doActivateContractor","resolveActivityType","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","MachineryJobsDialog","WorkerJobsFormImpl","reactiveWorkerRelation","removeWorkerRelation","setPropertyGroups","newWorker","RestrictWorker","setDisabled","clearDialogs","RestrictedWorkers","ADD_PERMISSION","AddWorker","selectedWorkerType","selectedWorkerDocumentType","availableWorkerTypes","setAvailableWorkerTypes","shouldValidateCode","setShouldValidateCode","contractorUser","workerTypeCalculator","selectedWorkerTypes","Metal","Construcción","Construccion","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","__showHelpDesk","__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.64df6ec0.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 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 getXml?: Function;\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 || props.workId == 22) && 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 || props.workId == 22) && !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 {props.getXml && {\n props.getXml && props.getXml();\n }} />}\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 ISubMainContractorRequest,\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, rawJobStatusTypes\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 ISubMainContractorRequest,\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 rawJobStatusTypes,\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 showRemarksInInformationLoadedForm: 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 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 showRemarksInInformationLoadedForm,\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 showRemarksInInformationLoadedForm,\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 showRemarksInInformationLoadedForm,\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.TEXTAREA) {\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, ISubMainContractorRequest\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 saveSubMainContractorRequest(workId: number, request: ISubMainContractorRequest) {\n return m(`mutation SaveSubMainContractorRequest($workId: Int!, $request: SubMainContractorRequestGraphInputType!) {\n saveSubMainContractorRequest(workId: $workId, request: $request) {\n hasValue, value, error\n }\n }`, { workId, request }, {\n returnPath: 'saveSubMainContractorRequest'\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 showHelpDesk?: 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 ISubMainContractorRequest {\n workId: number,\n jobId: number,\n targetContractorId: number,\n startDate?: Date;\n jobsDescription: string;\n shipmentNumber: 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 TEXTAREA = 5,\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 { id: PropertyTypes.TEXTAREA, name: 'TEXTAREA' },\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 const data = ensureType(inputData);\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, showRemarksInInformationLoadedForm\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 { 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 const rawJobStatusTypes = [\n { id: JobStatusType.PENDING, name:'job.status.pending' },\n { id: JobStatusType.INFORMATION_LOADED, name: 'job.status.informationLoaded' },\n { id: JobStatusType.AUTHORIZED, name: 'job.status.authorized' },\n { id: JobStatusType.FINALIZED, name: 'job.status.finalized' },\n { id: JobStatusType.NOT_AUTHORIZED, name: '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';\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 * 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 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 saveSubMainContractorRequest: ContractorActions.saveSubMainContractorRequest,\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 canViewHelpDesk = props.work?.settingsObj?.showHelpDesk ?? false;\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 && canViewHelpDesk && 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 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 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[0].kind == 'file') {\n const file = e.dataTransfer.items[0].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 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\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 SOLTEC_PLATAFORMA_ELEVADORA = 75;\n const SOLTEC_GRUA_AUTOPROPULSADA = 76;\n const SOLTEC_CAMION_PLUMA = 77;\n const SOLTEC_TURISMO_FURGONETA = 78;\n const SOLTEC_CAMIONES = 79;\n const SOLTEC_REMOLQUES = 80;\n const SOLTEC_MAQUINARIA_CON_MATRICULA = 81;\n const SOLTEC_MAQUINARIA_SIN_MATRICULA = 83;\n const SOLTEC_EQUIPOS_DE_TRABAJO = 85;\n const SOLTEC_GRUA_TORRE = 84;\n const SOLTEC_GRUAS_AUTODESPLEGABLES = 122;\n\n const SOLTEC_WITH_CODE : number[] = [SOLTEC_PLATAFORMA_ELEVADORA, SOLTEC_MAQUINARIA_SIN_MATRICULA, SOLTEC_GRUA_TORRE, SOLTEC_EQUIPOS_DE_TRABAJO, SOLTEC_GRUAS_AUTODESPLEGABLES];\n const SOLTEC_WITH_LICENSE : number[] = [SOLTEC_GRUA_AUTOPROPULSADA, SOLTEC_CAMION_PLUMA, SOLTEC_TURISMO_FURGONETA, SOLTEC_CAMIONES, SOLTEC_REMOLQUES, SOLTEC_MAQUINARIA_CON_MATRICULA];\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') && props.work.id != 22) || (props.work.id == 22 && SOLTEC_WITH_CODE.includes(selectedMachineryTypeId))) &&\n \n {form.input('name', { autoFocus: true })}\n }\n {((settings.show('code') && ![23, 22].includes(props.work.id)) || (props.work.id === 23 && [MAQUINARIA_SIN_MATRICULA, PLATAFORMA_ELEVADORA, EQUIPOS_DE_TRABAJO].includes(selectedMachineryTypeId)) || (props.work.id == 22 && SOLTEC_WITH_CODE.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() && [23, 22].includes(props.work.id)) {\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 currentStatus: 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\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, ModuleManager } 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 moduleManager: ModuleManager;\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\n function CreateContractorInvitationImpl(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 // return true;\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\nexport default function CreateContractorInvitation(props: IProps) {\n\n return props\n .moduleManager\n .renderComponent(\n 'CreateContractorInvitation',\n { ...props },\n CreateContractorInvitationImpl,\n true);\n}","import * as React from 'react';\nimport { connect } from 'react-redux';\nimport { ApplicationState } from '../../store';\nimport * as ContractorsStore from '../../store/contractors';\n// import { CreateContractorInvitation } from '../../components/contractors/CreateContractorInvitation';\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 moduleManager: state.modules.moduleManager\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, ISubMainContractorRequest\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 saveSubMainContractorRequest: Function;\n searchContractors: Function;\n security: ISecurity;\n work: IWork;\n getJobContractors: Function;\n getContractorFromAppUser: Function;\n main: boolean;\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\n const doSearch = loading.wrap(async (term: string|undefined) => {\n const selfContractors = await props.getContractorFromAppUser(props.work.id);\n let data = await props.searchContractors(props.work.id, term ?? '');\n const jobContractors: IJobHasContractor[] = await props.getJobContractors(props.work.id, props.job.id);\n\n const filteredData = data.filter((d : any) => {\n const foundContractor = jobContractors.find((jc: IJobHasContractor) => jc.contractorId == d.id);\n if (!foundContractor) return true; // Mantener en data si no se encuentra el contratista\n\n const isParentUndefined = props.parentContractor == undefined && foundContractor.parentId == undefined;\n const isParentMatch = props.parentContractor?.id == foundContractor?.parentId;\n\n return !(isParentUndefined || isParentMatch); // Eliminar de data si alguna condición se cumple\n });\n\n data = filteredData;\n\n\n const contractorsToExclude = Array.isArray(selfContractors)\n ? selfContractors.map((c: any) => c.id)\n : selfContractors ? [selfContractors.id] : [];\n data = data\n .filter((d: IContractor) => !contractorsToExclude.includes(d.id))\n .sort((a: IContractor, b: IContractor) => a.name.localeCompare(b.name));\n\n const filterContractors : any = props.modules\n .filterDependency('job.add_main_contractor', {\n data, props, jobContractors\n });\n\n if(filterContractors() == true){\n setContractors(data);\n }else{\n setContractors(filterContractors)\n }\n\n });\n\n React.useEffect(() => {\n doSearch(debouncedSearchTerm);\n }, [debouncedSearchTerm]);\n\n React.useEffect(() => {\n setActiveIndex(selectedContractor ? 1 : 0);\n }, [selectedContractor]);\n\n\n const saveSubMainContractorRequest = loading.wrap(async (data: Partial) => {\n const inputData: ISubMainContractorRequest = {\n workId: props.work.id,\n jobId: props.job?.id,\n targetContractorId: data.contractorId!,\n jobsDescription: data.jobsDescription!,\n shipmentNumber: data.shipmentNumber! || '',\n startDate: data.startDate!,\n };\n const resp = await props.saveSubMainContractorRequest(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\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 if (props.main ===false) {\n\n return saveSubMainContractorRequest(data);\n }\n else 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 contractorIds: number[];\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 keys\n if (props.work.id !== 23) {\n if(!props.contractorIds.includes(contractorId) && props.work.id === 22){\n return false;\n }\n\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) || props.contractorIds.includes(r.contractorId)){\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() && <>\n editOverlay.show(e, { type: 'description', data: d })}\n className={!applyFilters(d) ? 'disabled-tag' : 'pointer fas fa-edit'} />\n {d.jobsDescription}\n }\n {isJobContractor(d) && !canEdit &&\n {d.jobsDescription}}\n {isJobContractor(d) && canEdit && props.security.isContractor() && !props.contractorIds.includes(d.contractorId) &&\n <> editOverlay.show(e, { type: 'description', data: d })}\n className={!applyFilters(d) ? 'disabled-tag' : 'pointer fas fa-edit'} />\n {d.jobsDescription}\n \n }\n {isJobContractor(d) && canEdit && props.security.isContractor() && props.contractorIds.includes(d.contractorId) &&\n {d.jobsDescription}\n }\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, ModuleManager\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 moduleManager: ModuleManager;\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\nfunction JobContractorRequestsImpl(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}\n\n\nexport function JobContractorRequests(props: IProps) {\n\n\n return props\n .moduleManager\n .renderComponent(\n 'JobContractorRequests',\n { ...props, ProcessContractorRequest },\n JobContractorRequestsImpl,\n true);\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\n\nexport default connect(\n (state: ApplicationState) => ({\n ...JobsStore.plainActions,\n ...state.identity,\n ...state.user,\n activityTypes: state.user.activityTypes,\n moduleManager: state.modules.moduleManager,\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 ...state.user,\n ...state.identity,\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, IWork } 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 work: IWork\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 {props.work.jobSettings?.showRemarksInInformationLoadedForm &&\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 = ![22, 23].includes(props.work.id);\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 main={props.main}/>\n }\n \n }\n else {\n return Routes.goToJob(workid, jobid)}\n onSuccess={() => Routes.goToJobContractors(workid, jobid)}\n work={props.work}\n main={props.main}/>;\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 }\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\nfunction JobFormImpl(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 {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\n\n\nexport function JobForm(props: IProps) {\n return props\n .moduleManager\n .renderComponent(\n 'JobForm',\n { ...props },\n JobFormImpl,\n true);\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 ModuleManager,\n rawJobStatusTypes,\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 calculateStatusTypes = (jobStatusTypes: {id: number, name : string}[] ) => {\n return jobStatusTypes.filter(filterStatusTypes);\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: calculateStatusTypes(rawJobStatusTypes),\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 if(props.work.id == 23){\n (parents && parents[0]?.id != 0) && parents.unshift({ id: 0, name: \"AZSA\" });\n }\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 />, [23,22].includes(props.work.id))}\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 toXml = () => paginateData.exportToXls(\n userFilters.merge({ name: filter.value, work_id: props.work.id }),\n t('contractors.export.filename'), true)\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 getXml: toXml\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: toXml,\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';\nimport { restrictMachinery } from '@store/actions/machineries';\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 function ViewMachineries(props: IProps) {\n return props\n .modules\n .renderComponent(\n 'ViewMachineries',\n { ...props, restrictMachinery, RestrictedMachineries, MachineryJobsDialog, ResourceStatus, goToMachineryRequirements },\n ViewMachineriesImpl,\n true);\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 let 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 || value.Construccion == true) {\n\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\" || x.name == \"TRABAJADORES REGIMEN GENERAL\"));\n }\n }\n c = c.filter(x => x != undefined);\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 toXml = () => paginateData.exportToXls(\n userFilters.merge({ name: searchTerm.value, workId: props.work.id }),\n t('workers.export.filename'))\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 getXml: toXml\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: toXml,\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 const dt = new Date().getTime();\n if (dt - lastMessagesReload.current > 1000 * 30) {\n lastMessagesReload.current = dt;\n props.loadMessages();\n }\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 __showHelpDesk: workSettings.showHelpDesk,\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['showHelpDesk'] = form.get('__showHelpDesk');\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('__showHelpDesk', 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 showRemarksInInformationLoadedForm: true,\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 {form.checkBox('showRemarksInInformationLoadedForm')}\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":""}