{"version":3,"file":"main.d4bcba062f4f0a6e.js","mappings":"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","names":["CustomHttpUrlEncodingCodec","HttpUrlEncodingCodec","encodeKey","key","encodeURIComponent","encodeValue","value","__ngFactoryType__","factory","ɵfac","providedIn","CustomHttpParams","constructor","params","this","encoder","Map","map","jsonObject","toJsonValue","Object","keys","forEach","parseJsonValueIntoMap","has","param","get","Array","from","append","delete","clone","set","undefined","toHttpParams","HttpParams","fromObject","reduce","obj","r","toString","join","operation","paramSet","indexOf","nextChar","substr","length","JSON","parse","stringify","prefix","httpParamsMap","isArray","i","UserAvailableResourcesRequestModel","startDate","endDate","unitId","filteredProjectId","workPackageId","excludedUserIds","excludedNhrIds","fullName","year","week","numberOfWeeks","pageNumber","pageSize","skills","ListQueryOptions","pageIndex","columnFilters","sortColumn","sortDirection","isEmpty","getPageNumber","UserListQueryOptions","localOnly","validOnly","includeSupplierUsers","onlyCoordinators","isForWpCreator","super","UserResourceListQueryOptions","projectId","validFrom","validUntil","generateRequestModel","WorkPackageListOptions","UnitQuestionsListOptions","attachmentsListColumnsInfoObj","attachmentId","label","selected","selectable","sortable","filterable","questionId","documentType","fileName","fileType","fileSize","uploader","uploadedOn","outdater","outdatedOn","outdatedComment","metadata","url","attachmentsListColumnsInfo","attachmentsListColumnsWithFilters","entries","filter","_key","_value","nonHumanResourcesListColumnsInfoObj","systemId","name","remark","type","version","serialNumber","unitName","unitCoordinatorFullName","countryCode","countryName","nonHumanResourceId","workingHoursPerWeek","payrollCompany","costCenter","city","divisionCode","businessUnitCode","productGroupCode","hourlyRateCategory","nonHumanResourcesListColumnsInfo","nonHumanResourcesListColumnsWithFilters","projectsListColumnsInfoObj","sapNumber","projectNumber","title","scope","projectManagerFullName","technicalProjectManagerFullName","submitterUnitName","gateName","customerCountryCode","placeOfManufacturingCountryCode","emtOrderFromUnitName","emtOrderFromCountryCode","status","projectTypeCode","reportedHours","percentDone","projectUserStatus","projectsListColumnsInfo","projectsListColumnsWithFilters","questionsViewListColumnsInfoObj","workPackageDisplayId","workPackageTitle","projectTitle","questionTitle","numberOfReplies","creatorFullName","creatorWorkPackageRole","createdOn","lastRepliedByFullName","lastRepliedOn","questionsViewListColumnsInfo","questionsViewListColumnsWithFilters","unitsListColumnsInfoObj","code","level","parentUnitId","deputyUnitCoodinators","isDisabled","unitsListColumnsInfo","unitsListColumnsWithFilters","usersListColumnsInfoObj","userId","hitachiId","globalEmployeeId","localEmployeeId","firstName","lastName","email","abbreviation","unit","unitCoordinator","photoUrl","role","unitAssignments","usersListColumnsInfo","usersListColumnsWithFilters","workPackageViewListColumnsInfoObj","displayId","levelTitle","sequenceNumber","latestEstimatedStartDate","latestEstimatedEndDate","latestEstimatedHours","estimatedStartDate","estimatedEndDate","estimatedHours","confirmedStartDate","openQuestionsCount","confirmedEndDate","confirmedHours","latestConfirmedEndDate","latestConfirmedHours","plannedStartDate","latestPlannedEndDate","plannedHours","supplierUnit","supplierUnitCoordinatorFullName","submitterHourlyRateCategory","supplierHourlyRateCategory","isFlagged","submitterUnit","submitterUnitCoordinatorFullName","coordinator","responsibles","submitterProjectTypeCode","supplierProjectTypeCode","supplierProjectNumberANDActivityItemCategoryNumber","submitterProjectNumberANDActivityItemCategoryNumber","pmFullName","technicalPMFullName","additionalSupplierProjectTypeCodes","additionalSupplierProjectNumberANDActivityItemCategoryNumbers","additionalSupplierUnitNames","additionalSupplierHourlyRateCategory","contractName","workPackageViewListColumnsInfo","workPackageViewListColumnsWithFilters","MilestoneBaseModel","dueDate","isCompleted","sortOrder","fromJSON","json","assertRequiredProperties","moment","parseZone","overrides","toJSON","ActivityFieldDtoModel","newValue","oldValue","AttachmentSlimDtoModel","size","UserSlimDtoModel","MetadataModel","canOutdateAttachment","fields","AvailableProjectDtoModel","BackgroundColorDtoModel","unitBackgroundColorId","backgroundColor","CapacityDtoModel","totalHours","availableHours","weekStartDate","availability","hasHoliday","holidayDescription","holidayHours","totalProductiveHours","totalNonProductiveHours","isoWeekDateIdentifier","getAvailability","ContractHourlyRateCategoryPairDtoModel","contractHourlyRateCategoryPairId","contractId","submitterHourlyRateCategoryIsDefault","submitterActivityTypeDescription","supplierHourlyRateCategoryIsDefault","supplierActivityTypeDescription","submitterHourlyRateCategoryLabel","supplierHourlyRateCategoryLabel","disabled","ContractDtoModel","model","costObject","categoryActivityItem","contractHourlyRateCategoryPairs","submitterEmployeeNumber","usersNotificationSentTo","supplierSubmitterPairLabel","UnitSlimDtoModel","item","submitterCostCenter","matchesContract","contract","workPackage","contractSubmitterUnit","contractSupplierUnit","CostObjectDtoModel","Error","levelId","projectType","serviceOrder","FeedbackDtoModel","feedbackId","creator","isSupplierFeedback","rating","comment","RatingDtoModel","GateDtoModel","gateId","description","Int32IdNameDtoModel","id","MilestoneImportDtoModel","LevelImportListDtoModel","codePath","levelNumber","responsibleEngineer","projectNumberForSubmitterSettings","activityItemCategoryNumberForSubmitterSettings","hours","hourlyRate","cost","costToComplete","isHidden","isExisting","isSelected","isDeletedInSap","milestones","children","projectStatus","wbsStatus","wbsUserStatus","some","child","fromSimilarObject","LevelListNestedDtoModel","LevelListDtoModel","hasWarningSign","warningMessage","remainingHours","hasWorkPackages","canEditLevel","canCreateWorkPackage","sumReportedHoursFromChildren","sumHoursFromChildren","sumAvailableHoursFromChildren","MilestoneListDtoModel","sort","a","b","sum","hasChildren","LevelSlimDtoModel","getLevelPath","childrenLen","levels","MetadataSlimDtoModel","fieldReducer","l","deepCopy","path","parts","split","haystack","trim","j","m","milestoneId","isOverdue","NonHumanResourcePlanningEntryDtoModel","planningEntryId","workingDays","note","noteCreatedBy","noteCreatedOn","unitCategoryId","canUpdate","canUpdatePlannedEntry","NonHumanResourceUnitAssignmentDtoModel","nonHumanResourceUnitAssignmentId","canDelete","canEdit","lastPlannedDate","isExpired","NonHumanResourceDtoModel","nonHumanResourceUnitAssignments","capacityUnit","assignment","isHumanResource","isValidFrom","isSameOrBefore","isValidUntil","isSameOrAfter","isValidUntilInPast","checkDate","isBefore","copy","SlimCapacityPlanningDtoModel","PlanningEntryDtoModel","resourceCapacityUnit","values","CapacityUnits","cu","ProjectDashboardDtoModel","ProjectRecentListDtoModel","assign","ProjectImportListPartialDtoModel","projectManager","technicalProjectManager","emtOrderFromUnit","structure","getDate","ProjectImportListDtoModel","ProjectTypeDtoModel","numberOfLevels","useOnlyAsSupplierProjectType","useOnlyAsAdditionalSupplierProjectType","QuestionDashboardDtoModel","text","projectName","questionCreator","questionCreatorWorkPackageRole","QuestionDtoModel","replyCounter","attachments","canReplyToQuestion","canConcludeQuestion","canUpdateQuestion","canReopenQuestion","RangeSettingModel","fromDate","toDate","ratingId","stars","NonHumanResourceSlimDtoModel","ResponsibleResourceDtoModel","plannedHoursNotIncludedInTotal","totalPlannedHours","planningEntries","capacities","canRemoveResponsibleUser","canRemoveResponsibleUserMessage","canEditResponsibleUser","isHWCapacityUnit","HoursWeek","getId","getName","ResponsibleUserDtoModel","isCoordinator","wasUserPlannedInNewVersion","createFromUserListDtoModel","user","RoleListDtoModel","roleId","userCanSelectRole","RoleDtoModel","SkillDtoModel","categoryId","TimeTrackingEntryViewDtoModel","date","notes","canUpdateTimecardEntry","isTimecardEntryDisabled","guid","TimeTrackingWorkPackageDtoModel","rows","d","TimeTrackingRowDtoModel","TimeTrackingProjectDtoModel","workPackages","calculateTotalHours","calculateTotalPlannedHours","calculateTotalHoursOfWeekDay","dayIndex","wp","position","hour","days","replace","Number","isNaN","acc","sums","day","TimeTrackingRowModel","timecardCategoryName","timecardCategoryCode","sapCode","isVisible","hourlyRateLabel","activityTypeDescription","getHoursOfWeekDay","UnitBackgroundColorDtoModel","UnitCalendarLinkDtoModel","calendarLink","UnitCategoryDtoModel","defaultTimecardCategoryId","isNonProductive","isWork","isRework","isQualityAssurance","isEnabled","hasReportedHours","assignmentValidFrom","assignmentValidUntil","UnitCostCenterActivityTypeModel","activityType","isDefault","unitCostCenterActivityTypeId","UnitCostCenterModel","unitCostCenterId","unitCostCenterActivityTypes","uid","toCostCenerSaveRequestJSON","costCenterId","UnitListDtoModel","UnitPlanningCapacityDtoModel","UnitPlanningColumnTotalDtoModel","totalPlanned","totalRecorded","totalAvailableToBePlanned","totalConfirmed","NonHumanResourcePlanningSlimDtoModel","UnitPlanningNonHumanResourceWeekTotalDtoModel","UnitPlanningNonHumanResourceDtoModel","nonHumanResource","projects","totals","project","total","UnitPlanningProjectDtoModel","UnitPlanningUserWorkPackageDtoModel","isCrossUtilized","weeks","UnitPlanningUserWeekEntryViewSlimDtoModel","displayName","UnitPlanningResourceDtoModel","planningResourceId","isUserType","UnitPlanningSlimDtoModel","UnitPlanningUserWeekTotalDtoModel","totalProductivePlannedHours","totalNonProductivePlannedHours","UserPlanningSlimDtoModel","UnitPlanningWeekRowSlimDtoModel","categoryName","UnitPlanningUserDtoModel","nonProductiveCategories","npc","UnitPlanningWeekTotalDtoModel","UnitSelectorDtoModel","flag","_disabled","group","_group","UnitLevel","UNKNOWN","parentUnit","UnitSkillDtoModel","order","canUpdateSkills","canSelectSkills","canUpdateCategories","canManageMatrix","importPunchedHoursFromEtime","directUserSubmissionOfTimecard","migratedToEtime","migratedToReiwa","fromSimilarModel","UnitDtoModel","deputyUnitCoordinators","submitterContracts","supplierContracts","migratedToReiway","transferReportedHoursEnabled","UserNotificationRoleDtoModel","roleName","roleCode","orderBy","notificationSettings","setting","UserNotificationSettingsDtoModel","notificationName","hasCustomValues","notificationTypeId","firstAlertValue","secondAlertValue","UserPlanningTimeTrackingWorkPackageDtoModel","startWeek","endWeek","snapshotWorkPackageTotalHours","UserPlanningTimeTrackingEntryViewDtoModel","UserPlanningTimeTrackingProjectDtoModel","calculateTotalHoursOfRow","weekIndex","UserPlanningTimeTrackingRowModel","prev","UserPlanningTimeTrackingRowDtoModel","WEEK","startOf","UserQuestionNotificationDtoModel","userWorkingDays","isChecked","utcOffset","UserUnitAssignmentDtoModel","userUnitAssignmentId","lastReportedDate","WorkPackageDashboardDtoModel","numberOfOpenQuestions","WorkPackageStatus","Draft","numberOfNonHumanResourcesPlanned","numberOfResponsibleUsers","WorkpackageSupplierSettingsDtoModel","additionalSupplierProjectTypeCode","additionalSupplierProjectNumber","additionalSupplierActivityItemCategoryNumber","contracts","PaginationInfoModel","paginationInfo","numberOfTotalResults","changedProperties","AttachmentCreateRequestModel","blobUrl","blobName","FileDownloadResponseModel","NonHumanResourceListDtoModel","NonHumanResourceListResponseModel","items","ActivityDtoModel","activityId","changingUser","action","actionText","formerWorkPackageStatus","formerQuestionStatus","workPackageStatus","questionStatus","activityNotifiedUsers","activityFields","notificationsSent","ProjectActivityViewResponseModel","activities","activity","ProjectDashboardListResponseModel","ProjectListViewDtoModel","ProjectListResponseModel","ProjectWorkpackageTotalsDtoModel","ProjectWorkpackageWeekDtoModel","isHighlight","hasNotes","ProjectPlanningWorkpackageDtoModel","ProjectPlanningLevelDtoModel","workpackages","ProjectPlanningViewResponseModel","ProjectSlimResponseModel","childUnitContracts","structureLen","levelPath","ProjectViewResponseModel","canUpdateProjectStructureFromSap","canUpdateProjectStructureManually","canArchiveProject","canUnarchiveProject","canExportProject","isUserSupplierUnitCoordinatorForProject","getSubmitterContractsBySupplierId","supplierId","hasSubmitterContractsWithSupplier","toISOString","QuestionCreateResponseModel","QuestionDashboardListResponseModel","QuestionListResponseModel","QuestionUserNotificationResponseModel","workPackageRole","users","QuestionUserNotificationListResponseModel","QuestionListItemDtoModel","QuestionsViewListResponseModel","ReplyDtoModel","replyId","ReplyListResponseModel","UnitListResponseModel","UserPlanningResourceSlimDtoModel","isHuman","fromNonHumanResourcePlanningSlimDtoModel","fromUserPlanningSlimDtoModel","UnitPlanningResourceDataDtoModel","resource","fromUnitPlanningNonHumanResourceDtoModel","newTotals","fromUnitPlanningUserDtoModel","UnitPlanningDtoModel2","weeksTotal","resourceDatas","nonHumanResources","humanResource","combinedResourceData","UnitPlanningViewResponseModel2","units","availableSkills","unitBackgroundColors","availableProjects","skill","UnitPlanningDtoModel","UserListViewResponseItemModel","activeDirectoryId","unitCoordinatorId","unitCoordinatorPhotoUrl","UserListViewResponseModel","WorkPackageViewListItemResponseModel","WorkPackageViewListResponseModel","ScopeChangeDtoModel","scopeChangeId","estimatedNewEndDate","estimatedAdditionalHours","confirmedNewEndDate","confirmedAdditionalHours","ResponsibleUserWorkPackageViewDtoModel","reportedWorkHours","reportedReworkHours","reportedQaHours","reportedTotalHours","SuspensionDtoModel","suspensionId","KpiDtoModel","firstPassedYield","costOfPoorQuality","submitterOrSupplierEfficiency","supplierEfficiency","onTimeDelivery","WorkPackageReworkDtoModel","reworkId","defects","WorkPackageViewResponseModel","additionalSuppplierHourlyRateCategories","plannedEndDate","responsibleUsers","plannedNonHumanResources","createdBy","submitterUnitCoordinator","submitterUnitDeputyUnitCoordinators","supplierUnitCoordinator","supplierUnitDeputyUnitCoordinators","submitterProjectNumber","submitterHourlyRateCategories","submitterActivityItemCategoryNumber","supplierProjectNumber","supplierHourlyRateCategories","supplierActivityItemCategoryNumber","timezone","timezoneOffset","conclusion","hasEverBeenInForecastedStatus","hasEverBeenInIssuedStatus","isSelfAssigned","kpis","submitterFeedbacks","supplierFeedbacks","scopeChanges","reworks","suspensions","hourlyRateCategories","diff","getOriginalAttachments","includeOutdatedAttachments","attachment","DocumentType","WorkPackage","getScopeChangeAttachments","relevantAttachments","ScopeChange","push","canUpdateCreator","canEditThroughLifeCycle","canDuplicate","canMoveWorkPackage","canAddAdditionalSupplier","isDeleteEnabled","canSendToDraft","canSelfAssign","canSendToForecasted","canSendToIssued","canSendToQualityAssurance","canShowSendToConfirmed","showSendToConfirmed","canSendToConfirmed","canSendToReadyToResumeWork","canResumeWork","canSendToInProgress","canSendToReadyForApproval","canApproveScopeChange","canDeclineScopeChange","canSendToOnHold","canSendToClose","canSendToScopeChange","canEditScopeChange","canCancelScopeChange","canSendToReadyForScopeChangeApproval","canEditSubmitterSettings","canEditSupplierSettings","canEditResourcePlanning","canUploadOutputDocuments","canReadSummaryTab","canReadAndEditPlanningTab","isReadOnlyMode","canReadPlanningTab","canReadDocumentsTab","canReadActivityTab","canOutdateDocuments","canCreateFeedback","canCreateSupplierFeedback","shouldOpenCloseDialog","canReadQuestionsTab","canCreateQuestion","canReadPlanningInSidebar","canReadFeedbackInSidebar","canReadKpisInSidebar","hasReachedForecasted","including","Forecasted","hasReachedIsIssued","Issued","hasReachedConfirmed","Confirmed","hasReachedInProgress","InProgress","hasReachedReadyForApproval","ReadyForApproval","isInReadyForScopeChangeApproval","ReadyForScopeChangeApproval","isInQualityAssurance","InQualityAssurance","isInForecasted","isInIssued","isInDraft","isInConfirmed","isInProgress","isInReadyToResumeWork","ReadyToResumeWork","isInOnHold","OnHold","isInClosed","Closed","isAllowedScopeChangeInReadyForApproval","allowedScopeChangeInReadyForApproval","isInScopeChangeStates","isBeforeConfirmed","showNewlyProposedSchedule","isInReadyForApproval","getWorkPackageCoordinator","find","responsibleUser","getLatestSuspension","getLatestScopeChange","getSumOfConfirmedHours","scopeChange","getSumOfConfirmedAdditionalHours","isPlannedEndDateExceeded","WorkPackageLogicHelper","arePlannedHoursExceeded","isPlannedEndDateOverdue","getWorkPackageResponsibleNames","concatenator","ProjectTypeListResponseModel","RatingListResponseModel","TimeZoneDtoModel","timezoneId","offset","CountryDtoModel","CountryListResponseModel","GateListResponseModel","RoleListResponseModel","ResourceLinkDtoModel","linkCode","UserPreferencesUpdateRequestModel","displayInLocalLanguage","defaultUserLandingPage","UserCalendarLinksResponseModel","calendarAllLink","calendarProductiveLink","calendarNonProductiveLink","calendarUnitProductiveLinks","calendarUnitNonProductiveLinks","link","BaseDataService","apiService","getAllCountries$","getCountries$","pipe","event","HttpEventType","Response","response","body","slice","getAllLinks$","getLinks$","getAllRatings$","getRatings$","getAllGates$","getGates$","getAllProjectTypes$","getProjectTypes$","getAllUnits$","getUnits$","getUnitByUnitId$","getAllRoles$","getRoles$","getTimeZones$","getCalendarLinks$","putUserPreferences$","timeZone","request","mapTo","getDBCreationDate$","i0","i1","CustomHttpErrorResponse","HttpErrorResponse","message","init","CollAppApiService","httpClient","request$","getAllUsersEmployeeNumber$","filterString","limit","queryParameters","getContractCostCenters$","getCostObjects$","getCostObjectsForContracts$","getCostObjectsByUnitId$","getCostObjectsByWorkpackageId$","workpackageId","getAllPayrollCompanies$","getprofitCentersByPayrollCompany$","getDownloadUrl$","patchOutdateFile$","postFilesInline$","upload","obj2fd","getHealth$","getImportsUsersAndUnits$","postProjectLevel$","deleteProjectLevel$","getProjectLevels$","parentLevelId","getLevelInformation$","getProjectStructure$","isFilteredByRights","updateProjectLevel$","swapProjectLevels$","assignWorkPackageToUser$","putProjectStructurePreset$","getProjects$","options","postProject$","postWorkPackageQuestionReopen$","postWorkPackageQuestionConclude$","getQuestionReplies$","postWorkPackageQuestionReply$","postWorkPackageQuestion$","putWorkPackageQuestion$","putProjectByProjectId$","archiveProject$","unarchiveProject$","exportProject$","patchProjectByProjectId$","getOpenWorkPackageTitles$","getProjectView$","getProjectScopeView$","getProjectActivityView$","activityFetchType","getWorkPackageActivityView$","getCurrentAdditionalSuppliers$","getAdditionalSuppliers$","contractSupplierUnitId","excludedPairIds","getAvailableContracts$","wokpackageId","wpCreatorId","list","getLatestImportFileForManuallyUpdate$","getLatestImportFileForCreateNewProject$","getProjectExportList$","postProjectsImport$","file","postProjectsParseImportFile$","getUnitCostCentersByUnitId$","console","warn","getUnitActivityTypesByCostCenter$","getUnitActivityTypesByCostCenterAndUnitId$","getSupplierActivityTypes$","supplierUnitId","getProjectsForUnitCoordinator$","requestOptions","getProjectSelectors$","onlySubmitterProjects","getUnitCoordinatorsForConfirmingWP$","getUnitCoordinators$","getL1Units$","getColorsByL1Unit$","putColors$","getUnitsViewResponse$","getUnitViewResponseByUnitId$","getNonHumanResources$","getNonHumanResourcesViewResponse$","postNonHumanResource$","putNonHumanResource$","getNonHumanResourceById$","postUnit$","getUnitSelectors$","unitFetchType","includeChildren","getAvailableUnitSelectors$","getIsMonthlyByUnitId$","getUnitSlimByUnitId$","getUnitDefects$","getDefaultNonProductiveCategories$","getUnitTimesheetExportTemplate$","putUnit$","disableUnit$","getUsers$","getAvailableResourceUsers$","getResponsibleUserCapacity$","getResponsibleResourceCapacity$","postUser$","getUsersView$","getUserById$","getUserByEmail$","getUserViewByEmail$","getWorkPackageTransitionInformation$","to","newStatus","getAdUserByEmail$","putUser$","getCurrentUser$","getSubstituteUser$","headers","HttpHeaders","Mystique","putTimecard$","putTimecardMonth$","monthNr","cancelUserPlanning$","confirmUserPlanning$","saveNonHumanResourcePlanning$","confirmNonHumanResourcePlanning$","cancelNonHumanResourcePlanning$","getTimecard$","isMyTimecard","timecardFilters","environment","apiEndpoint","makeHeaderFilterRequestParams","doHttpRequest$","getTimecardMonth$","monthNumber","getUserPlanning$","isoWeekYear","isoWeek","headerFilters","getNonHumanResourcePlanning$","getUnitPlanning$","getProjectPlanning$","getUserPlanningResources$","weekNumber","getTimecardWeeks$","amount","getTimecardMonths$","month","putTimecardStatus$","putTimecardStatusMonth$","getTimesheetMonth$","withCrossUtilize","isSubmitterView","getTimesheet$","getTimesheetWeeks$","getTimesheetMonths$","getTimesheetExport$","templateView","getTimecardExport$","putUserSettings$","getWorkPackages$","getBasicWorkPackages$","getBasicWorkPackageDetail$","getQuestions$","getProjectLevelWorkpackages$","getProjectWorkpackages$","orderByLastUpdated","filters","wpStatus","wpStatusType","wpSorting","wpSortDirection","getWorkPackageView$","getWorkPackageAttachments$","getWorkPackageResourcePlanningView$","getQuestionUserNotificationRecipients$","questionAction","getWorkPackageQuestions$","putWorkPackage$","updateAdditionalSuppliers$","duplicateWorkPackage$","originalProjectId","originalWorkPackageId","moveWorkPackage$","deleteWorkPackage$","postWorkPackage$","postAdhocWorkPackage$","requestPayload","confirmWorkPackageResourcePlanning$","saveWorkPackageResourcePlanning$","cancelWorkPackageResourcePlanning$","putWorkPackageStatusToForecasted$","putWorkPackageStatusToDraft$","putWorkPackageStatusToIssued$","putWorkPackageStatusToClosed$","putWorkPackageStatusToInProgress$","selfAssignWorkPackage$","putWorkPackageStatusToConfirmed$","putWorkPackageStatusToOnHold$","putWorkPackageStatusToQualityAssurance$","postOutputDocuments$","postWorkPackageRework$","postFeedback$","postWorkPackageScopeChange$","putWorkPackageScopeChange$","deleteWorkPackageScopeChange$","putWorkPackageStatusToReadyForScopeChangeApproval$","putWorkPackageStatusToReadyToResumeWork$","putWorkPackageStatusToScopeChange$","putWorkPackageStatusToReadyForApproval$","putWorkPackageSubmitterSettings$","putWorkPackageSupplierSettings$","getDashboard$","getDashboardProjects$","getDashboardWorkPackages$","viewTypes","forSupplierUnitCoordinator","statusFilters","workPackageViewTypes","getDashboardQuestions$","getDashboardFiltersVisibility$","getUserNotificationView$","putUserNotificationView$","getUserNotificationDefaults$","getWorkPackageFeedbackRecipients$","getSkills$","putSkills$","getSkillCategories$","putSkillCategories$","getSkillUnits$","getSkillRatings$","putSkillRatings$","getHourlyRatesCategories$","deleteHoliday$","holidaysToDelete","updateHoliday$","holidaysToUpdate","copyHolidaysToNextYear$","holidaysToCreateCopyOf","getPublicHolidayCities$","getPublicHolidayData$","cities","queryParams","filterItem","selectedListIds","filterId","selectedRadioId","method","getEndpointUrl","reportProgress","observe","catchError","e","error","customErrorData","prepareError","customError","customStatusText","errorMessage","throwError","statusCode","statusText","allErrors","errorResponse","errors","DashboardViewResponseModel","WorkPackageDashboardListResponseModel","DashboardFiltersVisibilityResponseModel","isSelfAssignViewFilterVisible","isSubmitterViewFilterVisible","isSupplierViewFilterVisible","DashboardService","numItems","NonHumanResourceViewResponseModel","NonHumanResourceCreateResponseModel","NonHumanResourceService","BasicWorkPackageDetailResponseModel","canAddUserToWorkPackage","isUserAlreadyResponsible","BasicWorkPackageViewListItemResponseModel","BasicWorkPackageViewListResponseModel","AvailableProjectListResponseModel","WorkPackageUpdateStatusRequestModel","commentMessage","sendNotifications","ProjectStructurePresetUpdateRequestModel","UserMinimalModel","WorkPackageListDtoModel","creatorPhotoUrl","coordinatorFullName","coordinatorPhotoUrl","WorkPackageListResponseModel","ProjectScopeViewResponseModel","gate","canEditProject","canEditProjectType","ProjectCreateResponseModel","WorkPackageCreateResponseModel","LevelListResponseModel","WorkPackageSubmitterSettingsUpdateRequestModel","LevelCreateResponseModel","Pair","first","second","PublicHolidayDtoModel","WorkPackageResourcePlanningViewResponseModel","earliestPlannedDate","earliestPlannedDateAfterViewRange","latestPlannedDate","latestPlannedDateBeforeViewRange","hoursThreshold","MAX_SAFE_INTEGER","resourcesProjects","publicHolidays","canAddResources","canEditResourcePlanningDates","canSetWorkPackageCoordinator","canViewUserPlanning","parseInt","dictionary","WorkPackageTransitionInformationResponseModel","l5Units","notificationRecipients","WorkPackageCloseRequestModel","SuspensionCreateRequestModel","ReplyCreateResponseModel","ConclusionCreateResponseModel","ReopenCreateResponseModel","AttachmentListResponseModel","AttachmentOutdateResponseModel","ProjectSelectorDtoModel","ProjectSelectorListResponseModel","ProjectStructureResponseModel","LevelInfoResponseModel","isUserUnitCoordinator","newEndDate","newStartDate","ProjectService","checkWorkPackagePathParameters","createStatusUpdateRequestModel","escape","putProject$","patchProject$","supplier","excludedString","postProjectsImportSingleProject$","conclude","reopen","reply","codeMap","populateCodeMapByStructure","requestModel","switchMap","EMPTY","putAdditionalSuppliers$","doWorkPackageStatusTransition$","transition","workPackageStatusForm","WorkPackageConclusion","Completed","createOutputDocumentsUploadRequest$","createWorkPackageRework$","createFeedback$","createWorkPackageScopeChange$","updateWorkPackageScopeChange$","data","hourlyRateCategoriesPairs","activityItemCategoryNumber","workPackgeId","SkillCategoryWithSkillsDtoModel","SkillsResponseModel","categories","category","SkillCategoryDtoModel","SkillRatingValueDtoModel","SkillRatingSkillDtoModel","ratings","SkillRatingCategoryDtoModel","UserBaseSlimDtoModel","SkillRatingResponseModel","SkillsService","TimeTrackingDayInfoDtoModel","isHoliday","punchedHours","calculatedHours","TimeTrackingUserDtoModel","submittedOn","statusCodeName","timeTrackingStatusCodeName","TimeTrackingUnitUsersDtoModel","timeTrackingUsers","TimesheetViewResponseModel","unitUsers","totalPlannedNonProductiveHours","totalPlannedProductiveHours","isAllowedToChangeSubmitterView","canRejectAndApproveMultipleTimecards","TimeTrackingStatus","Done","canExportTimesheet","shouldSubmitBeDisplayed","canAccessTimecards","isTimesheetExportApproved","TimeTrackingWeekNavigatorItemDtoModel","Open","TimeTrackingWeekNavigatorViewResponseModel","TimecardViewResponseModel","nonProductive","salesforceProjects","totalReportedHours","canSave","canSaveTimecard","canSendToApproval","canSendTimecardToApproval","canApproveTimecard","canRejectTimecard","isSubmitEnabled","isReopenEnabled","isRejectEnabled","monthSplitActiveMonthName","canCreateAdHocWorkPackage","canAddNewNpc","UserListDtoModel","UserPlanningViewResponseModel","canUpdatePlannedNonProductiveWeeks","canUpdatePlannedProjectWeeks","canAssignNewWorkPackage","UnitPlanningViewResponseModel","NonHumanResourcePlanningViewResponseModel","TimeTrackingMonthNavigatorItemDtoModel","TimeTrackingMonthNavigatorViewResponseModel","months","TimeTrackingService","getTimeCardMonths$","getUnitPlanning2$","UnitSelectorListResponseModel","UnitCreateResponseModel","UnitViewResponseModel","unitCostCenters","monthlyView","hiddenLevels","profitCenter","canEditUnitDetails","canEditUnitContracts","canDisableUnit","NonProductiveCategoryModel","costCenters","HIDDEN_LEVELS_DEFAULT","UnitsViewResponseModel","canCreateUnit","TimesheetExportTemplateResponseModel","timesheetExportTemplateColumns","timesheetExportTemplateHighlighting","timesheetExportNonProductiveTemplateColumns","timesheetExportNonProductiveTemplateHighlighting","DefaultNonProductiveCategoryResponseModel","UnitCoordinatorResponseModel","coordinators","UnitSlimWithoutCoordinatorDtoModel","UnitService","getUnitById$","getUnitViewByUnitId$","getUnitsForUnitSelector$","getAvailableUnitsForUnitSelector$","getTimeSheetExportTemplate$","color","colors","UserSettingsDtoModel","recentProjects","projectsTable","unitsTable","nonHumanResourcesTable","usersTable","workPackagesTable","workPackageQuestionsTable","questionsTable","userResourceTable","attachmentList","timesheetWithCrossUtilizeUsers","recentTimesheetUnits","recentSkillUnits","recentPlanningUnits","recentUsedSupplierUnits","nonHumanResourcesPlanningTable","dashboardWorkPackageFilters","userPlanningTotals","unitPlanningTotals","userPlanningRange","unitPlanningRange","projectPlanningRange","projectPlanningTotals","timecardRange","timesheetRange","workPackagePlanningRange","workPackagePlanningTotals","timesheetTotals","workPackageSidePanel","userPlanningSidePanel","unitPlanningSidePanel","unitPlanningSidePanelIndex","userPlanningSidePanelIndex","workPackageSidePanelIndex","unitPlanningCapacityUnit","projectPlanningCapacityUnit","projectsStrucureHeaderFilters","projectPlanningHeaderFilters","timecardHeaderfilters","planningHeaderfilters","projectPlanningCompactFilter","projectsStructureHeaderFilters","ProjectStructureFiltersSettingsModel","ProjectPlanningFiltersSettingsModel","DEFAULT_USER_SETTINGS","UserDtoModel","photoLargeUrl","accountEnabled","permissions","settings","hasPermissions","any","anyOf","all","allOf","userPermissions","allOfIndex","anyOfIndex","UserCreateResponseModel","UserViewResponseModel","userUnitAssignments","canEditAdminFields","canEditUserDetails","canEditUserRole","canEditUserCollAppData","UsersViewResponseModel","canCreateUsers","isAllowedToCreateUsers","UserSettingRequestModel","AvailableResourceDtoModel","resourceId","isUser","canAddToResponsibles","AvailableResourcesResponseModel","UnitPlanningUserListViewResponseModel","UserNotificationViewResponseModel","roles","UserSlimWithUnitDtoModel","UserService","findUsers$","search","limitUnit","excludeUserIds","excludeNhrIds","selectedSkills","saveDashboardSettings$","saveUserSetting$","saveProjectListSettings$","saveTimesheetCrossUtilizationSettings$","withCrossUtilization","saveUnitListSettings$","saveNonHumanResourceListSettings$","saveActivitiesSettings$","saveUserListSettings$","saveWorkPackageListSettings$","SaveWorkPackageQuestionListSettings$","SaveQuestionsListSettings$","SaveUserResourceListSettings$","saveNonHumanResourcePlanningListSettings$","saveAttachmentSettings$","saveUserPlanningTotalsSettings$","selectedTotals","saveTimesheetTotalsSettings$","saveProjectPlanningRangeSettings$","range","saveUnitPlanningTotalsSettings$","forkJoin","selectedCapacityUnit","saveProjectPlanningTotalsSettings$","saveWorkPackagePlanningTotalsSettings$","saveWorkPackageSidepanel$","isOpen","saveUserPlanningSidePanel$","saveUnitPlanningSidePanel$","saveUnitPlanningSidePanelIndex$","index","saveUserPlanningSidePanelIndex$","saveWorkPackageSidePanelIndex$","saveUnitPlanningRangeSettings$","saveUserPlanningRangeSettings$","saveTimecardRangeSettings$","saveTimesheetRangeSettings$","saveProjectStructureFilters$","saveWorkPackagePlanningRangeSettings$","saveTimecardHeaderFilters$","payload","saveProjectPlanningFilters$","savePlanningHeaderFilters$","saveProjectPlanningCompactFilter$","pathname","form","namespace","fd","FormData","formKey","Date","File","AssertionError","requiredProperties","requiredProperty","MOBILE","window","screen","availWidth","TimeZoneService","injector","toastyService","dateAdapter","lastUserId","notificationReceived","destroyed$","Subject","createMissingDateImplError","ngOnDestroy","next","complete","handleUserChange","checkTimeZone","userTimeZoneOffset","Math","floor","getNonDstTimeZoneOffset","timeZoneLabel","getTimeZoneOffsetLabel","injectionTokens","WeakMap","TOAST_DATA","PortalInjector","toastyPortal","ComponentPortal","TimeZoneToastyComponent","info","portal","timeout","onClick","region","area","offsetHours","abs","offsetMinutes","jan","getFullYear","getTimezoneOffset","jul","max","i2","ctx","ctx_r0","dbCreationDate","AppComponent_Conditional_0_Conditional_3_Template","AppComponent_Conditional_0_Conditional_5_Template","bannerClassModifier","environmentTitle","staticVersion","staticBuildNumber","tmp_3_0","userTimeZone$","$event","_r2","layoutService","onSidebarPortalAttached","_r3","onNavbarPortalAttached","_r4","onAsidePortalAttached","SUBSTITUTED_USER_ID_PARAM_NAME","AppComponent","APP_VERSION","buildNumber","BUILD_NUMBER","cdRef","accessControlService","appInsightsService","browserDetectionService","router","loadingService","titleService","momentPipe","timeZoneService","translateService","baseDataService","renderer","store","inject","Store","select","UserSelectors","userTimeZone","takeUntil","hostClass","showBanner","isEnvironmentBannerVisible","mobile","primaryNavOpen","isLoadingIndicatorVisible","isLoadingRoute","isLoadingLazyRouteModule","routeLoadCount","routeConfigLoadCount","validUntilNotificationReceived","Logging","msalLoggingEnabled","piiLoggingEnabled","log","events$","subscribe","AuthenticationError","AuthorizationCheckError","trackException","exception","clearStorageIfNewDeploy","start","toLowerCase","addLangs","setDefaultLang","use","ngOnInit","memes","devMessages","versionAndBuild","randomMeme","random","randomDevMessage","isIEOrEdge","setAuthenticatedUserContext","clearAuthenticatedUserContext","tap","timer","now","warning","msg","fromNow","transform","events","hasChanges","RouteConfigLoadStart","RouteConfigLoadEnd","NavigationStart","navigationStartSuccessfull","NavigationEnd","navigationEndSuccessfull","NavigationCancel","NavigationError","wasLoadingIndicatorVisible","isLoading","detectChanges","isLoading$","isGuardsCheckInProgress$","isGuardsCheckInProgress","route","routerState","root","firstChild","routeConfig","urlAfterRedirects","outlet","share","pathFromRoot","contextFound","loadedConfig","_loadedConfig","module","setContext","resetContext","mergeMap","routeData","setNavbarComponent","navbar","setSidebarComponent","sidebar","setAsideComponent","aside","setEmbeddedSidebar","hasEmbeddedSidebar","appTitle","instant","setTitle","onPrimaryNavOpenToggle","localStorage","sessionStorage","getItem","deleteAllCookies","clear","setItem","hardReload","addSubstitutedUserIdToUrl","_event","setDbCreationDate","adjustLinksForSubstituteUser","isUserSubstituted","setTimeout","document","querySelectorAll","currentHref","getAttribute","selectSnapshot","substitutedParam","newUrl","includes","setAttribute","urlDestination","substitutedUserId","URL","location","origin","searchParams","navigateByUrl","replaceUrl","take","datePart","cookies","cookie","eqPos","i3","i4","i5","i6","i7","i8","i9","i10","i11","i12","selectors","hostVars","hostBindings","rf","AppComponent_Conditional_0_Template","AppComponent_Conditional_8_Template","AppComponent_Conditional_10_Template","AppComponent_Conditional_14_Template","AppComponent_Conditional_20_Template","sidebarPortal$","navbarPortal$","tmp_6_0","tmp_7_0","tmp_8_0","asidePortal$","getAdministrationPermissions","getReportingPermissions","getPowerBIPermissions","getSkillAdministrationPermissions","getColorsPermissions","getUCDeputyPermissions","CollappCommonModule","LocalDateHelperService","MomentPipe","MomentLocalPipe","MomentUtcPipe","TimeTrackingStatusPipe","DecimalPipe","imports","CommonModule","NgxsModule","forFeature","sharedStates","TranslateModule","DATE_DEFAULT_FORMAT","formatDate","format","keepLocalTime","isValid","newFormat","COLLAPP_DATE_FORMAT","COLLAPP_DATE_TIME_FORMAT","COLLAPP_SHORT_MONTH_YEAR_FORMAT","COLLAPP_LONG_MONTH_YEAR_FORMAT","COLLAPP_SHORT_DAY_MONTH_FORMAT","COLLAPP_SHORT_WEEK_DAY_FORMAT","newDate","WINDOW","InjectionToken","defaultView","DOCUMENT","CapacityUnitShortPipe","_args","DaysWeek","pure","standalone","chrcPairPipe","getTextFromContractHourlyRateCategoryPairDtoModel","chrcPairTooltipPipe","getTooltipFromContractHourlyRateCategoryPairDtoModel","strToNumber","parseFloat","locale","decimalDigits","num","maxFactionDigits","MAX_FRACTION_DIGITS","toFixed","FunctionPipe","handler","context","call","momentValue","CollAppProjectTypePipe","BaseDataSelectors","projectTypeByCode","CollappQuestionStatusPipe","QuestionStatus","Concluded","SafePipe","sanitizer","bypassSecurityTrustHtml","bypassSecurityTrustStyle","bypassSecurityTrustScript","bypassSecurityTrustUrl","bypassSecurityTrustResourceUrl","CollAppTimecardStatusPipe","Unknown","Pending","Rejected","Submitted","Ready","Reopen","ToMomentPipe","CollAppUnitLevelPipe","formatCollAppUser","defaultValue","CollAppUserPipe","WorkPackageRole","NoRole","WorkPackageCreator","ProjectManager","TechnicalProjectManager","SubmitterUnitCoordinator","SubmitterUnitL1Coordinator","SubmitterUnitL2Coordinator","SubmitterUnitL3Coordinator","SubmitterUnitL4Coordinator","SubmitterUnitL5Coordinator","SupplierUnitCoordinator","SupplierUnitL1Coordinator","SupplierUnitL2Coordinator","SupplierUnitL3Coordinator","SupplierUnitL4Coordinator","SupplierUnitL5Coordinator","WorkPackageCoordinator","WorkPackageResponsible","Administrator","freeze","CollAppWorkPackageRolePipe","isToday","isSame","today","getIsoWeekDate","parsedIsoWeek","isoWeeksInYear","adjustDate","parent","CollappDateAdapter","MomentDateAdapter","MAT_MOMENT_DATE_ADAPTER_OPTIONS","strict","useUtc","CollappMomentDateAdapter","instanceCounter","dateLocale","_utcOffset","_utcOffsetChanges$","instanceNumber","utcOffsetChanges$","asObservable","getFirstDayOfWeek","createDate","parseFormat","toIso8601","deserialize","previousUtcOffset","MAT_DATE_LOCALE","COLLAPP_MAT_MOMENT_DATE_FORMATS","dateInput","display","monthYearLabel","dateA11yLabel","monthYearA11yLabel","CollappMomentDateModule","parentModule","provide","useValue","MAT_DATE_FORMATS","useClass","deps","useExisting","DateAdapter","MatMomentDateModule","BUTTON_HOST_ATTRIBUTES","CollappButtonComponent","MatButton","loading","_loading","coerceBooleanProperty","elementRef","platform","ngZone","_animationMode","attr","nativeElement","hasAttribute","classList","add","ANIMATION_MODULE_TYPE","CollappButtonComponent_Conditional_2_Template","disableRipple","CollappButtonModule","MatRippleModule","MatCommonModule","MatButtonModule","MatProgressSpinnerModule","endDateSuffix","DatesRangeComponent","_hasDateRangeError","_hasEndDateError","hasDateRangeError","hasEndDateError","DatesRangeComponent_Conditional_12_Template","DatesRangeModule","MatTooltipModule","item_r1","item_r2","ctx_r2","isDropdownOpen","CollappWpAddAdditionalSuppliersDialogComponent","supplierControl","controls","supplierHourlyRateCategoryControl","dialogRef","_formBuilder","suppliers","c","u","Validators","required","valueChanges","reset","selectedSupplierUnit","filteredContracts","concat","valid","close","chrcps","onOpen","onClose","cancel","MAT_DIALOG_DATA","decls","vars","consts","template","CollappWpAddAdditionalSuppliersDialogComponent_ng_template_14_Template","CollappWpAddAdditionalSuppliersDialogComponent_ng_template_20_Template","CollappWpAddAdditionalSuppliersDialogComponent_Conditional_24_Template","CollappWpAddAdditionalSuppliersDialogComponent_Conditional_25_Template","dirty","WorkPackageWizardDialogMode","Create","Edit","Duplicate","Move","pathInfo","pathParts","filename","pop","dirname","extIndex","lastIndexOf","extension","basename","AzureBlobService","blobServiceUrl","azureBlobServiceUrl","blobContainerName","azureBlobTemporaryAttachmentsContainer","pipeline","newPipeline","AnonymousCredential","retryOptions","maxTries","blobServiceClient","BlobServiceClient","containerClient","getContainerClient","uploadFile$","blobNameMaxLength","getBlobName","blobClient","getBlobClient","blockBlobClient","getBlockBlobClient","abortController","AbortController","Observable","subject","Sent","uploadBrowserData","blobHTTPHeaders","blobContentType","onProgress","progress","UploadProgress","loaded","loadedBytes","abortSignal","signal","then","result","responseEvent","HttpResponse","catch","errorResponseEvent","abort","fileGuid","fileExtension","GUID_NUM_CHARS","AttachmentOutdateRequestModel","OutdateAttachmentDialogComponent","dialogService","projectService","errorHandlerService","savingForm","confirmDialogRef","maxLength","onSubmit","markAllAsTouched","getRawValue","success","handleError","pristine","showConfirmDialog","afterClosed","closeConfirmed","ctx_r1","getAttachmentTooltip","attachment_r1","attachment_r3","attachment_r4","combinedFileSize","FormAttachmentsComponent_td_14_Conditional_1_Template","dataSource","attachment_r5","FormAttachmentsComponent_td_17_Conditional_1_Template","isExistingFormAttachmentFile","attachment_r6","outdatedFilterControl","item_r8","_r7","stopPropagation","FormAttachmentsComponent_th_24_ng_template_6_Template","FormAttachmentsComponent_th_24_ng_template_7_Template","attachmentListFilterForm","outdatedStateList","_r9","attachment_r10","$implicit","openOutdateAttachmentDialog","state","FormAttachmentsComponent_td_25_Conditional_1_Template","FormAttachmentsComponent_td_25_Conditional_2_Template","isAttachmentOutdateable","FormAttachmentsComponent_td_29_Case_1_Template","FormAttachmentsComponent_td_29_Case_2_Template","FormAttachmentsComponent_td_29_Case_3_Template","FormAttachmentsComponent_td_29_Case_4_Template","FormAttachmentsComponent_td_29_Case_5_Template","tmp_2_0","attachment_r11","attachmentStatus","PENDING","UPLOADING","ERROR","CANCELLED","attachment_r12","_r13","cancelUpload","_r14","retryUpload","_r15","markForRemoval","_r16","unmarkForRemoval","_r17","onQuestionClick","uploadProgressPercent","FormAttachmentsComponent_td_33_Conditional_2_Template","FormAttachmentsComponent_td_33_Conditional_3_Template","FormAttachmentsComponent_td_33_Conditional_4_Template","FormAttachmentsComponent_td_33_Conditional_5_Template","FormAttachmentsComponent_td_33_Conditional_6_Template","FormAttachmentsComponent_td_33_Conditional_7_Template","FormAttachmentsComponent_td_33_Conditional_8_Template","isAttachmentDownloadable","isAttachmentUploading","isAttachmentResumable","isAttachmentRemovable","isAttachmentRestorable","FormAttachmentsComponent_Conditional_48_tr_0_Template","displayedFilterColumns","attachmentUploadProgressBackgroundPosition","attachment_r18","isAttachmentOutdated","isAttachmentRemoved","newAttachmentsCount","openFileSelector_r21","_r20","openFileSelector","_r19","onDrop","FormAttachmentsComponent_Conditional_54_ng_template_1_Template","FormAttachmentsComponent_Conditional_55_Conditional_1_Template","existingAttachmentsCount","ATTACHMENT_STATE_OUTDATED","ATTACHMENT_STATE_CURRENT","FileAttachmentState","DEFAULT","OUTDATED","NEW","FormAttachmentFileStatus","UPLOADED","REMOVED","ExistingFormAttachmentFile","Project","_canOutdateAttachment","NewFormAttachmentFile","fileLastModified","lastModified","uploadProgress","_uploadProgress","_uploadProgressPercent","round","attachmentFile","FormAttachmentsComponent","nextId","_newFiles","writeValue","hostId","placeholder","_placeholder","stateChanges","errorStateMatcher","_errorStateTracker","matcher","empty","shouldLabelFloat","_required","setDisabledState","attachmentOutdatingDisabled","_attachmentsOutdatingDisabled","allow","existingAttachmentsRemovalDisabled","_existingAttachmentsRemovalDisabled","hideFilters","_hideFilters","existingFiles","_existingAttachmentsSubject$","allowDuplicates","_allowDuplicates","_combinedFileSize","_uploader","uploadsPending","newAttachmentUploads","_newAttachmentsSubject$","allAttachmentsCount","filteredAttachmentsCount","filteredData","errorState","ngControl","_parentForm","_parentFormGroup","_defaultErrorStateMatcher","dialog","activatedRoute","azureBlobService","autofilled","describedBy","allowDownloadAll","dropped","EventEmitter","uploadComplete","markedForRemoval","unmarkedForRemoval","removedFiles","outdatedAttachment","focused","controlType","MatTableDataSource","displayedColumns","existingAttachmentUrlRenewals","BehaviorSubject","outdateAttachmentDialogRef","_onChange","_onTouched","valueAccessor","_ErrorStateTracker","sortingDataAccessor","property","getFileExtensionFromFilename","isNewFormAttachmentFile","Te","existingAttachments$","newAttachments$","allAttachments$","combineLatest","newFiles","shareReplay","bufferSize","refCount","_filtersChange$","filterForm","sanitizeFilters","filteredAttachments$","merge","getColumnFilters","withLatestFrom","allFiles","included","updateErrorState","ngDoCheck","AttachmentListSelectors","active","direction","patchValue","urlRenewalAttachmentsToBeRemoved","Set","existingFile","subscription","getAttachmentDownloadUrlRenewalSubscription","unsubscribe","_","files","calculateTotalFileSize","emit","sortChange","debounceTime","LIST_COLUMNS_FILTER_CHANGE_DEBOUNCE_TIME","dispatch","SaveAttachmentListOptions","wasPristine","newFormAttachmentFiles","existingFormAttachmentFiles","unmappableFilesCount","registerOnChange","fn","registerOnTouched","setDescribedByIds","ids","onContainerClick","droppedFiles","observables","droppedFile","fileEntry","isFile","subject$","AsyncSubject","finalize","startNewFileUploads","addFile","navigate","relativeTo","tab","queryParamsHandling","newAttachmentIsRemovable","existingAttachmentIsNotRemovableByCondition","formAttachmentFile","uploadFile","open","width","disableClose","closeOnNavigation","autoFocus","panelClass","replaceExistingAttachment","replacement","existingAttachments","splice","isDuplicateFile","newFile","fallbackForEmptyMimeType","newAttachment","newFormAttachment","pendingFile","existingSubscription","extensionLength","min","ATTACHMENT_NAME_MAX_CHARS","basenameLength","formAttachmentFiles","totalFileSize","filterValue","dt","Subscription","expand","duration","viewQuery","MatSort","MatFormFieldControl","FormAttachmentsComponent_Conditional_1_Template","FormAttachmentsComponent_th_4_Template","FormAttachmentsComponent_td_5_Template","FormAttachmentsComponent_td_6_Template","FormAttachmentsComponent_th_8_Template","FormAttachmentsComponent_td_9_Template","FormAttachmentsComponent_td_10_Template","FormAttachmentsComponent_th_12_Template","FormAttachmentsComponent_td_13_Template","FormAttachmentsComponent_td_14_Template","FormAttachmentsComponent_th_16_Template","FormAttachmentsComponent_td_17_Template","FormAttachmentsComponent_td_18_Template","FormAttachmentsComponent_th_20_Template","FormAttachmentsComponent_td_21_Template","FormAttachmentsComponent_td_22_Template","FormAttachmentsComponent_th_24_Template","FormAttachmentsComponent_td_25_Template","FormAttachmentsComponent_td_26_Template","FormAttachmentsComponent_th_28_Template","FormAttachmentsComponent_td_29_Template","FormAttachmentsComponent_td_30_Template","FormAttachmentsComponent_th_32_Template","FormAttachmentsComponent_td_33_Template","FormAttachmentsComponent_td_34_Template","FormAttachmentsComponent_th_36_Template","FormAttachmentsComponent_th_38_Template","FormAttachmentsComponent_th_40_Template","FormAttachmentsComponent_th_42_Template","FormAttachmentsComponent_th_44_Template","FormAttachmentsComponent_th_46_Template","FormAttachmentsComponent_tr_47_Template","FormAttachmentsComponent_Conditional_48_Template","FormAttachmentsComponent_tr_49_Template","FormAttachmentsComponent_tr_50_Template","FormAttachmentsComponent_Conditional_51_Template","FormAttachmentsComponent_Conditional_52_Template","FormAttachmentsComponent_Conditional_53_Template","FormAttachmentsComponent_Conditional_54_Template","FormAttachmentsComponent_Conditional_55_Template","StateBadgeComponent","_state","_stateLabel","isNew","isOutdated","stateLabel","FileExtensionPipe","FileSizePipe","bytes","precision","parsedBytes","String","isFinite","FormAttachmentsModule","provideHttpClient","withInterceptorsFromDi","RouterModule","FormsModule","ReactiveFormsModule","MatFormFieldModule","MatInputModule","MatIconModule","MatSortModule","MatTableModule","NgxFileDropModule","SpinnerModule","MatDialogModule","FormSectionModule","FlexLayoutModule","AlertModule","NgSelectMaterialModule","i13","i14","i15","i16","i17","i18","i19","_r1","onActionClick","actionLabel","FormSectionComponent","actionClicked","class","hasErrors","FormSectionComponent_Conditional_4_Template","NgOptionTextComponent","tooltip","inputs","ngContentSelectors","_c0","NgSelectModule","NgSelectErrorStateMatcher","ngSelect","isErrorState","control","invalid","touched","submitted","NgSelectFormFieldControlDirective","v","host","multiple","searchTerm","matDialogContent","element","focusEvent","blurEvent","openEvent","setFontSizeToDropDown","matDialogContentElement","closest","setStyle","closeEvent","removeStyle","statusChanges","s","changeEvent","oldState","newState","target","contains","focus","computedStyles","getComputedStyle","fontSize","panel","dropdownPanel","contentElementRef","style","personIconSize","items_r4","item_r6","_r5","clear_r7","PeopleSelectComponent_ng_template_4_Conditional_1_For_1_Template","userTrackByFn","PeopleSelectComponent_ng_template_4_Conditional_0_Template","PeopleSelectComponent_ng_template_4_Conditional_1_Template","simple","numberOfResults","numberOfMaxTotalResults","PeopleSelectComponent_ng_template_6_Conditional_0_Conditional_0_Template","PeopleSelectComponent_ng_template_6_Conditional_0_Conditional_1_Template","PeopleSelectComponent_ng_template_6_Conditional_0_Template","listInitialized","PeopleSelectComponent","userControl","userSelect","_limitUnit","refresh$","_unitId","_isoWeekYear","_isoWeek","_numberOfWeeks","_simple","_multiple","_localOnly","clearable","_clearable","_includeSupplierUsers","_onlyCoordinators","largeModifierClass","multipleModifierClass","_elementRef","tabIndex","userService","peopleSelectClass","appendTo","preload","usersCompare","CompareWithUtility","planningResourceCompare","typeahead$","UntypedFormControl","filteredUsersSubject$","filteredUsers$","initialDropDownOpen$","dropdown$","DEBOUNCE_INPUT_CHANGE_TIME_SMALL","distinctUntilChanged","prepareRequest$","processUserListResponse","ngAfterViewInit","preloadResources","ngOnChanges","changes","setUserControlDisabledState","currentValue","setValue","onBlur","markAsTouched","disable","enable","isUserPlanningDataAvailable","getUserPlanningData$","numberOfUsers","PeopleSelectComponent_ng_template_3_Template","PeopleSelectComponent_ng_template_4_Template","PeopleSelectComponent_ng_template_5_Template","PeopleSelectComponent_ng_template_6_Template","_c1","PeopleSelectModule","PersonModule","PersonIconModule","MatBadgeModule","PersonIconOverlayTemplateDirective","initials","onAvatarError","avatarUnavailable","unknown","userImageSrc","PersonIconComponent_Conditional_5_ng_template_1_Template","overlayTemplate","PersonIconComponent_Conditional_6_Case_1_Template","PersonIconComponent_Conditional_6_Case_2_Template","tmp_1_0","hat","hatTypes","SANTA","BUNNY","defaultBackgroundColor","HatType","NONE","PersonIconComponent","personIconSmallClass","personIconTinyClass","personIconClass","badge","forceIsPerson","isRect","_userBackgroundColor","updateUserData","isFirstChange","colorCalcModifier","colorHue","toUpperCase","char1","codePointAt","char2","fromCodePoint","updateHats","production","yooUsers","currentUser","SUPER_ADMIN_ROLE_NAME","contentQueries","dirIndex","TemplateRef","PersonIconComponent_Conditional_2_Template","PersonIconComponent_Conditional_3_Template","PersonIconComponent_Conditional_4_Template","PersonIconComponent_Conditional_5_Template","PersonIconComponent_Conditional_6_Template","PersonComponent","toolTip","collapsible","_collapsible","collapsibleMinWidth","_collapsibleMinWidth","_collapsibleMinWidthAndUnit","isNumber","collapsibleMinWidthAndUnit","hasLabel","_displayName","isCollapsed","isContentOverflowing","isTooltipVisible","isDisplayNameOverflowing","hostRef","personListItem","tooltipSuffix","_inputDirty","_sizeDirty","createTooltipText","onResize","checkContentOverflow","hostElement","scrollWidth","clientWidth","displayNameEl","displayNameElement","PersonComponent_Conditional_5_Template","ProjectTreeStructureModule","MatCheckboxModule","MatTreeModule","LevelModelTreeNode","nestingLevel","partiallySelected","expandable","decapitalize","propertyName","create","isDeleted","updateSelectedStates","someChildrenSelected","someChildrenPartiallySelected","allChildrenDeleted","every","LevelChangeIndicatorComponent","_deleted","_existing","_hasChanges","deleted","existing","LevelChangeIndicatorComponent_Conditional_0_Template","LevelChangeIndicatorComponent_Conditional_1_Template","LevelChangeIndicatorComponent_Conditional_2_Template","getOldValueTooltipFor","node_r2","getOldValueFor","ProjectTreeStructureComponent_mat_tree_node_1_Conditional_8_Conditional_7_Template","ProjectTreeStructureComponent_mat_tree_node_1_Conditional_8_Conditional_8_Template","projectStructureItemSelectionToggle","ProjectTreeStructureComponent_mat_tree_node_1_Conditional_6_Template","ProjectTreeStructureComponent_mat_tree_node_1_Conditional_7_Template","ProjectTreeStructureComponent_mat_tree_node_1_Conditional_8_Template","ProjectTreeStructureComponent_mat_tree_node_1_Conditional_9_Template","ProjectTreeStructureComponent_mat_tree_node_1_Conditional_10_Template","labelPosition","node_r5","ProjectTreeStructureComponent_mat_nested_tree_node_2_Conditional_12_Template","getExpandedState","nestedTreeControl","isExpanded","COLLAPP_PROJECT_TREE_STRUCTURE_CONTROL_VALUE_ACCESSOR","NG_VALUE_ACCESSOR","forwardRef","ProjectTreeStructureComponent","multi","_labelPosition","_changeDetector","_isInitialized","_triggerChange","hasChild","nodeData","getChildren","node","NestedTreeControl","nestedDataSource","MatTreeNestedDataSource","ngAfterContentInit","updateValueFromDataSourceAndTriggerChange","expandAll","source","hasChangesAfterMapping","updateChildrenRecursive","toggleExpansion","dataNodes","collapseAll","expandDescendants","collapseDescendants","selectAll","selectRecursive","deselectAll","deselectRecursive","ProjectTreeStructureComponent_mat_tree_node_1_Template","ProjectTreeStructureComponent_mat_nested_tree_node_2_Template","trigger","animate","EXPANSION_PANEL_ANIMATION_TIMING","LoadingSpinnerComponent","diameter","AddAdditionalSupplierButtonModule","addSupplierUnit","AddAdditionalSupplierButtonComponent_Conditional_0_Conditional_3_Template","AddAdditionalSupplierButtonComponent_Conditional_0_Conditional_5_Template","additionalSuppliersAndChrcpService","canAdd","availableToAdd$","AddAdditionalSupplierButtonComponent","unitControl","existingUnits","forceDisabled","existingUnitIds","addDialogRef","initAdditionalSuppliers","checkIfDifferentAdditionalUnitsOrDisable","openAdditionalSupplierUnitDialog","availableContracts","additionalUnitsIds","existingUnit","areAllInExisting","filterAdditionalUnitsComparedToExisting","availableContract","adjustSuppliersByCHRCP","save$","onDialogSuccess","bind","onDialogError","isModified","lastAddedSupplierUnit","checkInputs","errorMsg","loadData$","features","AddAdditionalSupplierButtonComponent_Conditional_0_Template","UnitSelectModule","UnitSelectComponent","item_r3","UnitSelectComponent_ng_template_4_Conditional_4_Template","ctx_r3","isSkillUnitSelector","UnitSelectComponent_ng_template_5_Conditional_0_For_1_Conditional_5_Template","UnitSelectComponent_ng_template_5_Conditional_0_For_1_Template","unitOptionTrackByFn","items_r8","summary","UnitSelectComponent_ng_template_5_Conditional_0_Template","UnitSelectComponent_ng_template_5_Conditional_1_Template","showSummary","item_r9","UnitSelectComponent_ng_template_6_Conditional_3_Template","_r10","unitSelect_r11","canAddSupplierUnit","UnitSelectComponent_Conditional_7_ng_template_0_Conditional_1_Conditional_1_Template","UnitSelectComponent_Conditional_7_ng_template_0_Conditional_1_Conditional_2_Template","UnitSelectComponent_Conditional_7_ng_template_0_Conditional_0_Template","UnitSelectComponent_Conditional_7_ng_template_0_Conditional_1_Template","UnitSelectComponent_Conditional_7_ng_template_0_Template","UnitSelectFetchType","AllUnits","UserUnitsWithChildren","UserL3Units","AllL1ToL4Units","AllL4Units","UserL1Units","WorkPackageUnitsSubmitterView","WorkPackageUnitsSupplierView","UserCoordinatorUnitsAndContractSuppliers","Skills","AllL1Units","AvailableUnitsForWorkPackage","GROUP_RECENTLY_VIEWED","GROUP_SEARCH_RESULTS","_id","_uid","_showSummary","recentUnits","_recentUnits","option","currentList","filteredUnitsSubject$","updatedList","_recentSkillUnits","unitSelect","disabledItems","newItems","disabledUnitIds","clearSearchOnAdd","_clearSearchOnAdd","closeOnSelect","_closeOnSelect","initFetch","_initFetch","setInitFetchDefault","_setInitFetchDefault","loadingSubject$","fetchType","selectedUnits","unitService","unitSelectClass","unitsCompare","filteredUnits$","listeners$","of","unitControlChange$","searchedUnits","extendSearchedUnits","setUnitControlDisabledState","unitTrackByFn","searchUnits","term","UnitSelectComponent_ng_template_3_Template","UnitSelectComponent_ng_template_4_Template","UnitSelectComponent_ng_template_5_Template","UnitSelectComponent_ng_template_6_Template","UnitSelectComponent_Conditional_7_Template","AccessGuard","canActivate","substituteUser$","checkAccessAndPermissions$","canLoginAsSubstituteUser","userIdFromUrl","loginSubstituteUser$","canActivateChild","childRoute","canLoad","segments","routeUrl","segment","locationHref","href","routeUrlIndex","routeUrlWithQueryParams","match","returnUrl","checkAccessControl$","hasAccess","checkPermissions","createUrlTree","RETURN_URL_QUERY_PARAM","accessControlPending$","skipWhile","accessControlPending","access","CanDeactivateGuard","canDeactivate","component","nextState","sidebarComponent$","navbarComponent$","asideComponent$","innerObservables","value$","isObservable","addGuardsCheck","removeGuardsCheck","compareByHourlyRateCategoryPair","compareDatesAsc","compareDatesDesc","compareCreatedOnAsc","compareCreatedOnDesc","compareUploadedOnDesc","gatesCompare","o1","o2","countriesCompare","compareCountryByCode","listOption","selectedValue","levelsCompare","compareConclusionValues","projectsCompare","p1","p2","projectTypesCompare","compareProjectTypeByCode","compareTimecardCategoryByCode","tc1","tc2","rolesCompare","contractsCompare","c1","c2","compareBySupplierHourlyRateCategory","compareBySubmitterHourlyRateCategory","sortUserAsc","localeCompare","sortUserDesc","FILE_TYPE_FALLBACK","newFileType","splittedFileName","decimalToHex","hex","cryptoObj","crypto","msCrypto","getRandomValues","buffer","Uint8Array","guidHolder","guidResponse","targetUrl","getTime","getRelativeUrlOrDefault","defaultUrl","DEFAULT_RETURN_URL","utoa","btoa","unescape","atou","decodeURIComponent","atob","greaterThan","fractionDigits","roundTo2Decimals","o","getPrototypeOf","getOwnPropertyNames","charAt","isInApproval","isInProposal","getApplicableStartDate","getApplicableEndDate","isAfter","nowNoTimeZone","areEstimatedHoursShown","isCostToCompleteExceeded","MaterialModule","forRoot","ngModule","forChild","A11yModule","BidiModule","ObserversModule","OverlayModule","PlatformModule","PortalModule","ScrollingModule","CdkStepperModule","CdkTableModule","CdkTreeModule","DragDropModule","MatAutocompleteModule","MatButtonToggleModule","MatCardModule","MatChipsModule","MatDatepickerModule","MatExpansionModule","MaterialFileInputModule","MatListModule","MatMenuModule","MatOptionModule","MatPaginatorModule","MatProgressBarModule","MatRadioModule","MatSidenavModule","MatSliderModule","MatSlideToggleModule","MatSnackBarModule","MatStepperModule","MatTabsModule","MatToolbarModule","ContractModelType","NamedResources","ProjectBasedOrder","DashboardWorkPackageViewType","SubmitterView","SuppplierView","SelfAssignedView","Question","Output","Rework","SameAsType","SameAsSubmitter","SameAsSupplier","Level1","Level2","Level3","Level4","Level5","Unresolved","workPackageConclusions","workPackageStatusName","WorkPackageStatusTransition","getTransitionInfo","getFromStatusName","getToStatusName","M2","Pcs","ContractSaveRequestModel","submitterUnitId","fteHoursWeek","hoursPerWeek","removedContractHourlyRateCategoryPairIds","employeeNumber","notificationSentTo","UnitCreateRequestModel","deputyUnitCoordinatorIds","defect","UnitUpdateRequestModel","removedSubmitterContractIds","removedCostCenterIds","removedActivityTypeIds","payrollCompanies","payroleCompany","isLoadingPayrollCompanies","profitCenters","isLoadingProfitCenters","monthlyTimecardSubmission","costCenterService","EditUnitDialogComponent_Conditional_36_Conditional_6_Conditional_3_Conditional_1_Template","showErrors","onSubmitterContractRemoved","EditUnitDialogComponent_Conditional_36_Conditional_6_Conditional_3_Template","EditUnitDialogComponent_Conditional_36_Conditional_7_Conditional_1_Template","isLoadingDefaultNonProductiveCategories","isFormInEditMode","EditUnitDialogComponent_Conditional_36_Conditional_11_ng_template_1_Conditional_0_Template","hasTimesheetExportTemplateFormErrors","EditUnitDialogComponent_Conditional_36_Conditional_11_Conditional_3_Conditional_30_Template","areTimesheetExportTemplateColumnsRequired","areTimesheetExportNonProductiveTemplateColumnsRequired","isLevel4OrBelow","EditUnitDialogComponent_Conditional_36_Conditional_11_ng_template_1_Template","EditUnitDialogComponent_Conditional_36_Conditional_11_Conditional_2_Template","EditUnitDialogComponent_Conditional_36_Conditional_11_Conditional_3_Template","isLoadingTimesheetExportTemplate","EditUnitDialogComponent_Conditional_36_Conditional_2_Template","EditUnitDialogComponent_Conditional_36_Conditional_3_Template","EditUnitDialogComponent_Conditional_36_Conditional_5_Template","EditUnitDialogComponent_Conditional_36_Conditional_6_Template","EditUnitDialogComponent_Conditional_36_Conditional_7_Template","EditUnitDialogComponent_Conditional_36_Conditional_9_Template","EditUnitDialogComponent_Conditional_36_Conditional_11_Template","displayTimecardApprovalOption","isLevel4","isLevel3","isLevel3OrBelow","isLoadingDefectList","canSeeTimesheetExportTemplate","disableUnit","EditUnitDialogComponent","isAnyAdmin","canEditUnitTimesheetExportTemplate","isSubmitButtonEnabled","saving","disabledUnitItems","fetchTypes","formBuilder","disableUnitDetails","effect","isDirty","markAsDirty","initParentUnitListeners","patchForm","editUnit","createUnit","DisableUnit","getRequestData","CreateUnit","UpdateUnit","patchDefectList","patchDefaultNonProductiveCategories","defaultNonProductiveCategories","getTimeSheetExportTemplate","timesheetExportTemplate","updateFormValidation","isPayroleComanyInitialized","selectedUnit","previousLevel","initPayrollCoampanies","initPayrollCompanyListeners","updateTimesheetExportTemplateForm","updateNonProductiveCategoriesForm","updatePayrollCompanyForm","updateMonthlySubmissionForm","setValidators","removeValidators","getDeletedActivityTypeIds","getDeletedCostCenterIds","costObjectCode","EditUnitDialogComponent_Conditional_2_Template","EditUnitDialogComponent_Conditional_3_Template","EditUnitDialogComponent_Conditional_29_Template","EditUnitDialogComponent_Conditional_35_Template","EditUnitDialogComponent_Conditional_36_Template","EditUnitDialogComponent_Conditional_38_Template","EditUnitDialogComponent_Conditional_41_Template","EditUnitDialogComponent_Conditional_42_Template","AngularApplicationInsightsConfig","ApplicationInsightsService","appInsights","_injector","config","trackEvent","customProperties","ex","trackPageView","pageView","uri","additionalTelemetry","trackPageViewPerformance","pageViewPerformance","severityLevel","trackTrace","trace","trackMetric","metric","trackDependencyData","dependency","startTrackPage","stopTrackPage","measurements","startTrackEvent","stopTrackEvent","properties","authenticatedUserId","accountId","storeInCookie","flush","async","addTelemetryInitializer","telemetryInitializer","instrumentationKey","ApplicationInsights","loadAppInsights","getRouter","disableAngularRouteTracking","Router","WorkPackageCombinedFilterType","TO_BE_ISSUED","IN_PROGRESS","AWAITING_ACTION","TO_BE_CLOSED","TO_BE_CONFIRMED_IN_MY_UNIT","CollAppSubmitterAndSupplierSettingsItemLabelPipe","fallbackValue","ProjectsSharedModule","SharedModule","WorkPackageDialogService","workPackageDialogOpen","_openWorkPackageDialog","workPackageDialogClosed","loadingIndicatorService","toastService","workPackageDialogChangeSubject$","workPackageDialogOpenSubject$","workPackageDialogCloseSubject$","workPackageDialogChange$","workPackageDialogOpen$","workPackageDialogClose$","showArchiveProjectsForbiddenDialog","names","showOkDialog","openCreateWorkPackageDialog","openWorkPackageWizardDialog","mode","openCreateAdHocWorkPackageDialog","openDeleteWorkPackageDialog","openDeleteWorkPackageDialogWithRedirect","openEditWorkPackageDialog","toPromise","openDuplicateWorkPackageDialog","openAssignWorkPackageDialog","addLoadingRequest","Promise","__webpack_require__","AssignWorkPackageComponent","finally","removeLoadingRequest","openMoveWorkPackageDialog","openCreateFeedbackDialog","openFeedbackDialog","openScopeChangeCreateDialog","openScopeChangeDialog","openScopeChangeUpdateDialog","openCreateQuestionDialog","EditCreateQuestionDialogComponent","openEditQuestionDialog","question","openReopenDialog","ReopenQuestionDialogComponent","openConcludeDialog","ConcludeQuestionDialogComponent","WorkPackageWizardDialogComponent","CreateFeedbackDialogComponent","closeOnError","WorkPackageScopeChangeDialogComponent","AuthenticationUserInfoModel","fromUser","AuthenticationStart","AuthenticationSuccess","username","AuthenticationEnd","authenticated","AuthorizationCheckStart","AuthorizationCheckSuccess","AuthorizationCheckEnd","authorized","AccessControlError","originalError","AccessControlService","accessControlPendingSubject$","getValue","substituteUserId","_substituteUserId","msalGuardConfig","msalService","msalBroadcastService","destyref","DestroyRef","canImpersonateUsers$","permission","takeUntilDestroyed","_error","_canLoginAsSubstituteUser","subscriptions","loggedIn","isLoginFailure","eventsSubject$","clearTimeout","checkAccount","msalSubject$","eventType","EventType","LOGIN_SUCCESS","ACQUIRE_TOKEN_SUCCESS","LOGIN_FAILURE","ACQUIRE_TOKEN_FAILURE","onAuthenticationFailure","val","onAuthenticationSuccess","isUserLoginRequired","msalError","isUserAuthorizationCurrentlyInvalid","parsedError","isUserAuthorizationExpired","isUserAuthorizationNotYetValid","getUserInfoFromError","login","loginRedirect","errorCode","storageKey","removeItem","logout","UserStateActions","ClearAllUserData","ClearBaseData","isUserPlus","getCurrentUserOrOriginalUser","isAdmin","isSuperadmin","finalUser","selectOnce","originalUser","substituteUser","SetOriginalUser","SetLoginUser","ClearOriginalUser","RefreshBaseData","MarkImpersonation","logoutSubstituteUser$","getAbsoluteUrl","commands","navigationExtras","localUrl","prepareExternalUrl","getIsLoggedIn","getIsLoginFailure","ogUser","ClearLoginUser","errorObj","prototype","hasOwnProperty","instance","getAllAccounts","MSAL_GUARD_CONFIG","ActivityTypeModel","activityTypeCode","ActivityTypesService","getActivityTypesByCostCenterAndUnitId","firstValueFrom","getActivityTypesByCostCenter$","WorkpackageSupplierSettingsUpdateDtoModel","fromWorkpackageSupplierSettingsDtoModel","workpackageSupplierSettingsDtoModel","AdditionalSuppliersAndChrcpService","isModifiedSubject$","availableToAddSubject$","current","currentSubject$","added","addedSubject$","isSaving","isModified$","combinedSubject$","combined$","combined","currentAdditionalSuppliers","expcludedPairdIds","curr","chrcp","availableAdditionalSuppliers","workpackageSupplierSettings","as","additionalSupplierSettings","wpss","adjustAddedAdditionalSupplier","adjustAvailableAdditionalSupplierToAdd","update","isCurrentIndex","newIndex","entryToUpdate","newContract","newEntry","foundAddedSetting","availableSupplierContract","newAvailableSupplierContract","newWpss","canEditAdditionalSupplierProjectSettings","indexToFilter","findIndex","availableChrcp","filteredContractHourlyRateCategoryPairs","newAvailableAdditionalSuppliersToAdd","BasicDialogService","defaultConfirmTitle","defaultOkTitle","defaultOkText","defaultErrorTitle","defaultErrorText","defaultConfirmText","confirmCancelWithOnlyOutdatedAttachmentsText","confirmCancelWithOutdatedAttachmentsText","navigationConfirmTitle","navigationConfirmText","hasOpenDialogs","openDialogs","callback","BasicDialogComponent","BasicDialogType","INFO","showErrorDialog","confirmationCallback","cancellationCallback","PROMPT","showNavigationConfirmDialog","saveAndContinueCallback","discardAndContinueCallback","NAVIGATION_PROMPT","showOutdatedAttachmentsCancelDialog","useConfirmDialog","hasNewOutdatedAttachments","dialogText","BrowserDetectionService","_platformId","_isBrowser","isPlatformBrowser","matched","matchUserAgent","navigator","userAgent","browser","versionNumber","opr","opera","rv","ie","edge","safari","android","_browser","isBrowser","getInfo","getPlatform","getVersion","getVersionNumber","isIE","msie","isEdge","isMobile","ipad","iphone","isDesktop","cros","mac","linux","win","isWebKit","chrome","ua","exec","platformMatch","PLATFORM_ID","CollappDialogService","showNotificationDialog","recipients","isCommentRequired","showSendNotifications","NotificationDialogComponent","CostCenterModel","costCenterDescription","CostCenterService","allCostCenters","availableCostCenters","computed","cs","canChangeCostCenter","canAddCostCenter","allActivityTypesByCostCenter","isInitDone","getErrorMessages","initialCostCenters","currentCostCenters","initialCostCenter","initialActivityType","activityTypeService","_this","_asyncToGenerator","setInitialCostCenters","initAllCostCenters","changeCostCenterByIndex","_this2","isOldIndexDefault","newCostCenter","cc","addActivityTypesByCostCenter","_this3","activityTypes","activityTypeToActivityTypeModel","p","removeCostCenterByIndex","changeCostCenterDefaultByIndex","changeActivityTypeDefaultByIndex","costCenterIndex","activityTypeIndex","newActivityTypes","at","removeActivityTypeByIndex","changeActivityTypeByIndex","newActivityType","addEmptyActivityTypeByIndex","isActivityTypeDefaultSetByIndex","addEmptyCostCenter","shouldBeDefault","getDeletedCostCenters","getDeletedActivityTypes","currentCostCenter","currentActivityTypes","cat","errorMessages","getCostCenterByUnitId$","_this4","l3UnitId","_this5","getUnitCostCenters","getCostCenters$","costCenterToUnitCostCenter","ErrorHandlerService","trackError","notifyUser","getToastForApiError","formattedDate","utc","ExportService","provideWorkPackageExport","fileDownload","KEY_MAP","Del","Esc","Left","Right","Up","Down","Menu","Scroll","Win","KEY_ALIAS","command","ctrl","del","down","esc","left","right","up","KeyboardShortcutsService","zone","handleKeyboardEvent","getKeyFromEvent","isInputEvent","isEventFromInput","listener","listeners","bindings","runGuarded","terminal","terminalWhitelist","normalizedKeys","runOutsideAngular","addEventListener","listen","addListener","priority","normalizeTerminal","normalizeTerminalWhitelist","normalizeInputs","normalizeBindings","unlisten","removeListener","keyIdentifier","startsWith","fromCharCode","altKey","ctrlKey","metaKey","shiftKey","normalizeKey","Node","isContentEditable","nodeName","normalized","listenerToRemove","LayoutService","rendererFactory","defaultInjector","sidebarPortalSubject$","navbarPortalSubject$","asidePortalSubject$","sidebarComponentSubject$","navbarComponentSubject$","asideComponentSubject$","createRenderer","resolve","sidebarComponentPortal","navbarComponentPortal","asideComponentPortal","hasSidebar","ref","ComponentRef","LoadingIndicatorService","loadingRequestsSubject$","guardChecksSubject$","count","ProjectScopeResolver","SetProjectScopeView","ProjectViewResolver","paramMap","ClearViews","SetProjectView","recentProject","AddRecentProject","WorkPackageViewResolver","SetWorkPackageView","icon","ALERT_CLASS","AlertComponent","className","AlertComponent_Conditional_0_Template","CollAppBadgeComponent","preventMenuFromClosing","triggerChange","columns_r3","composeColumnSelectorInfoForList","listColumnsInfo","selectedColumns","colInfo","col","ColumnSelectorComponent","change","_columnsInfo","columnsInfo","setColumnInfo","ColumnSelectorComponent_ng_template_4_Template","menu_r4","views","shortname","adminClass","activeMenuRegex","hidden","PrimaryNavigationComponent_Conditional_1_For_3_Conditional_0_ng_container_0_Template","internalLink_r5","_c2","ɵ$index_9_r3","user_r4","PrimaryNavigationComponent_Conditional_1_For_3_Conditional_1_ng_container_0_Template","externalLink_r6","PrimaryNavigationComponent_Conditional_1_For_3_Conditional_0_Template","PrimaryNavigationComponent_Conditional_1_For_3_Conditional_1_Template","PrimaryNavigationComponent_Conditional_1_For_5_Conditional_0_ng_container_0_Template","ɵ$index_20_r9","PrimaryNavigationComponent_Conditional_1_For_5_Conditional_1_ng_container_0_Template","PrimaryNavigationComponent_Conditional_1_For_5_Conditional_0_Template","PrimaryNavigationComponent_Conditional_1_For_5_Conditional_1_Template","PrimaryNavigationComponent_Conditional_1_Conditional_12_Conditional_1_ng_template_0_Template","PrimaryNavigationComponent_Conditional_1_Conditional_12_Conditional_1_Template","ctx_r9","originalUser$","PrimaryNavigationComponent_Conditional_1_For_3_Template","navItemTrackByFn","PrimaryNavigationComponent_Conditional_1_For_5_Template","PrimaryNavigationComponent_Conditional_1_ng_container_7_Template","PrimaryNavigationComponent_Conditional_1_ng_container_8_Template","PrimaryNavigationComponent_Conditional_1_Conditional_12_Template","adminItems","userItems","profileUserMenu_r11","profileUserTooltipDelay","user_r13","logOutSubstituteUser","PrimaryNavigationComponent_ng_template_7_Conditional_5_Template","PrimaryNavigationComponent_ng_template_7_Conditional_6_Template","PrimaryNavigationComponent_ng_template_7_Conditional_20_Template","_r12","logOutUser","_c3","_c4","_c5","_c6","_c7","item_r16","first_r17","isAciveLink","menuItemTooltipDelay","PrimaryNavigationComponent_ng_template_8_Conditional_0_Template","item_r20","first_r21","getExternalLink","PrimaryNavigationComponent_ng_template_10_Conditional_0_Template","PrimaryNavigationComponent","primaryNavClass","toggle","user$","Boolean","links","currentRoute","view","toggleMenuOpen","snapshot","decode","PrimaryNavigationComponent_Conditional_1_Template","PrimaryNavigationComponent_Conditional_3_Template","PrimaryNavigationComponent_ng_template_7_Template","PrimaryNavigationComponent_ng_template_8_Template","PrimaryNavigationComponent_ng_template_10_Template","LOGIN_REDIRECT_DELAY","REMOVE_CLASS_DELAY","LIST_COLUMNS_SELECTION_CHANGE_DEBOUNCE_TIME","LIST_COLUMNS_FILTER_CHANGE_DEBOUNCE_TIME_SMALL","DEBOUNCE_RXJS_MERGE","DEBOUNCE_CLICK_SMALL","DEBOUNCE_INPUT_CHANGE_SMALL","DROPDOWN_FILTER_RESULTS_LIMIT","SCROLL_TO_ELEM_DELAY","UPLOAD_PAYLOAD_MAX_SIZE","HOURS_MIN_VALUE","HOURS_MAX_VALUE","LEVEL_HOURS_MIN_VALUE","LEVEL_COST_MIN_VALUE","LEVEL_HOURLY_RATE_MIN_VALUE","WORK_PACKAGE_ESTIMATED_HOURS_MIN_VALUE","DEFAULT_PAGE_SIZE_OPTIONS","DEFAULT_PAGE_SIZE","PROJECT_LIST_PAGE_SIZE_OPTIONS","PROJECT_LIST_DEFAULT_PAGE_SIZE","UNIT_LIST_PAGE_SIZE_OPTIONS","UNIT_LIST_DEFAULT_PAGE_SIZE","NON_HUMAN_RESOURCE_LIST_PAGE_SIZE_OPTIONS","NON_HUMAN_RESOURCE_LIST_DEFAULT_PAGE_SIZE","USER_LIST_PAGE_SIZE_OPTIONS","USER_LIST_DEFAULT_PAGE_SIZE","WORK_PACKAGE_LIST_PAGE_SIZE_OPTIONS","WORK_PACKAGE_LIST_DEFAULT_PAGE_SIZE","WORK_PACKAGE_LIST_EXPORT_TIMEOUT","WORK_PACKAGE_QUESTION_LIST_PAGE_SIZE_OPTIONS","WORK_PACKAGE_QUESTION_LIST_DEFAULT_PAGE_SIZE","QUESTIONS_LIST_PAGE_SIZE_OPTIONS","QUESTIONS_LIST_DEFAULT_PAGE_SIZE","USER_RESOURCE_LIST_PAGE_SIZE_OPTIONS","USER_RESOURCE_LIST_DEFAULT_PAGE_SIZE","NON_HUMAN_RESOURCE_PLANNING_LIST_DEFAULT_PAGE_SIZE","WORK_PACKAGE_ACTIVITIES_DEFAULT_PAGE_SIZE","WEEKLY_PLANNED_HOURS_MIN","WEEKLY_PLANNED_HOURS_MAX","TIME_TRACKING_HOURS_MIN","TIME_TRACKING_HOURS_MAX","HOLIDAY_SEPARATOR","WORKING_DAYS_SPLIT_SYMBOL","CollAppCountryNamePipe","country","countryByCode","suffix","CollappDateComponent","_exceeded","_overdue","exceededClassName","overdueClassName","exceeded","originalState","overdue","CollappDateComponent_Conditional_3_Template","confirm","BasicDialogComponent_Conditional_9_Conditional_0_Template","BasicDialogComponent_Conditional_9_Conditional_1_Template","BasicDialogComponent_Conditional_9_Conditional_2_Template","basicDialogType","ignoreAndContinue","saveAndContinue","closeAndAbort","doCallbackAndClose","closeDialog","callbackRef","successful","BasicDialogComponent_Conditional_9_Template","BasicDialogComponent_Conditional_10_Template","recipientsAsString","NotificationDialogComponent_Conditional_15_Template","NotificationDialogComponent_Conditional_16_Template","NotificationDialogComponent_Conditional_17_Template","hasError","CollAppRolePipe","column_r2","onColumnSelectionChange","ColumnSelectorMenuComponent","isNewWay","columnsInternal","columns","columnInfo","column","checked","trackByColumnName","ColumnSelectorMenuComponent_For_1_Template","RootSharedModule","PersonListItemComponent","CollAppUnitPipe","ToastyModule","nameLength","_user","ProgressBarComponent","progressBarWarn","progressBarLabel","setProgress","progressValue","progressBarFill","ProjectStatus","Active","Archived","CollAppProjectStatusPipe","ResponsiblesTooltipPipe","ResponsiblesPipe","maxResponsibles","listOfResponsibles","ShowMoreComponent","expanded","toggleState","providers","ToastyConfig","ToastyService","useFactory","toastyServiceFactory","SafeHtmlPipe","domSanitized","toast","ToastComponent_Conditional_2_Conditional_1_Template","ToastComponent_Conditional_2_Conditional_2_Template","ToastComponent_Conditional_3_Conditional_1_ng_template_0_Template","ToastComponent_Conditional_3_Conditional_2_Conditional_0_Template","ToastComponent_Conditional_3_Conditional_2_Conditional_1_Template","ToastComponent_Conditional_3_Conditional_1_Template","ToastComponent_Conditional_3_Conditional_2_Template","ToastComponent","clickToast","closeToast","click","preventDefault","outputs","ToastComponent_Conditional_1_Template","ToastComponent_Conditional_2_Template","ToastComponent_Conditional_3_Template","showClose","opacity","toast_r2","ToastyComponent","POSITIONS","_position","toasts","ToastyEventType","ADD","CLEAR","CLEAR_ALL","clearAll","isFunction","apply","unshift","_setTimeout","onRemove","toastTrackByFn","ToastyComponent_For_2_Template","ToastType","SUCCESS","WARNING","FILEDOWNLOAD","ToastyEvent","uniqueCounter","eventSource$","linkName","local","optionsNew","isString","emitEvent","toastyOptions","newType","_checkConfigItem","onAdd","force","CreateQuestion","UpdateQuestion","CreateConclusion","CreateReopen","CreateReply","CreateUser","UpdateUser","CreateNonHumanResource","UpdateNonHumanResource","countriesSortFn","defaultBaseDataState","countries","gates","projectTypes","contractModels","contractModelId","eTag","hasImpersonatedUser","BaseDataState","refreshBaseData$","getState","refresh","eTag_lookup","requests","patchState","clearBaseData","setState","markImpersonation","__decorate","Action","tslib_es6","Sn","Function","State","defaults","basicProjectTypeByCode","createSelector","roleById","gateById","basicProjectTypes","Selector","AttachmentListState","UserState","ProjectState","SettingsState","DashboardState","ProjectListState","TimecardsState","TimesheetState","UnitPlanningState","UnitListState","NonHumanResourceListState","UserListState","WorkPackageListState","WorkPackageQuestionListState","WorkPackageState","QuestionsListState","UserResourceListState","NonHumanResourcePlanningListState","SkillsState","ActivitiesState","UserPlanningTotalsState","UnitPlanningTotalsState","ProjectPlanningTotalsState","UserPlanningRangeState","UnitPlanningRangeState","ProjectPlanningRangeState","TimesheetRangeState","TimesheetTotalsState","WorkPackagePlanningTotalsState","WorkPackagePlanningRangeState","TimecardRangeState","WorkpackageSidepanelState","UserPlanningSidepanelState","UnitPlanningSidepanelState","UnitPlanningSidepanelIndexState","UserPlanningSidepanelIndexState","WorkPackageSidepanelIndexState","ProjectActionTypes","SetProjectActivityView","RefreshAllProjectViews","RefreshProjectView","RefreshProjectStructure","RefreshWorkPackageView","defaultProjectState","projectView","projectStructure","projectScopeView","projectActivityView","workPackageView","clearViews","setProjectView","setProjectScopeView","setProjectActivityView","setWorkPackageView","refreshAllProjectViews$","refreshProjectView$","refreshProjectStructure$","refreshWorkPackageView$","ProjectSelectors","projectState","ActivitiesActionTypes","InitActivitiesSettings","SetActivitiesSettings","ResetActivitiesSettings","SaveActivitiesSettings","defaultActivitiesState","GenericListState","setActivitiesSettings$","resetActivitiesSettings","ActivitiesSelectors","AttachmentListActionTypes","InitAttachmentListSettings","SetAttachmentListSettings","ResetAttachmentListSettings","SaveAttachmentListSettings","tslib__WEBPACK_IMPORTED_MODULE_1__","defaultAttachmentListState","setAttachmentListOptions$","cloneListOptions","initAttachmentListSettings","cloneListSettings","setAttachmentListSettings","newSettings","resetAttachmentListSettings","saveAttachmentListSettings$","tslib__WEBPACK_IMPORTED_MODULE_6__","DashboardActionTypes","SetDashboardWorkPackagesFilter","SetDashboardWorkPackageFilter","SetDashboardSettings","ResetDashboardSettings","SaveDashboardSettings","InitDashboardSettings","filterType","viewType","defaultDashboardState","workPackagesFilter","setWorkPackagesFilter$","setDashboardWorkPackageFilter$","setDashboardSettings$","resetDashboardSettings","initDashboardSettings","DashboardSelectors","cloneSelectedColumns","viewListInfo","columnKey","sanitizedColumnFilters","sanitizedSortColumn","sanitizedSelectedColumns","SettingsActionTypes","SetTestString","test","TimecardsActionTypes","SetNonProductiveCategoriesListExpandedState","SetProjectsListExpandedState","AddExpandedProjectId","RemoveExpandedProjectId","setNonProductiveCategoriesListExpandedState","nonProductiveCategoriesListExpanded","setProjectsListExpandedState","projectsListExpanded","addExpandedProjectsId","collapsedProjectsIds","removeExpandedProjectsId","TimecardsSelectors","TimecardRangeActionTypes","InitTimecardRangeSettings","SetTimecardRangeSettings","ResetTimecardRangeSettings","SaveTimecardRangeSettings","defaultTimecardRangeState","initTimecardRangeSettings","setTimecardRangeSettings$","resetTimecardRangeSettings","WorkPackagePlanningRangeActionTypes","InitWorkPackagePlanningRangeSettings","SetWorkPackagePlanningRangeSettings","ResetWorkPackagePlanningRangeSettings","SaveWorkPackagePlanningRangeSettings","defaultWorkPackagePlanningRangeState","initWorkPackagePlanningRangeSettings","setWorkPackagePlanningRangeSettings$","resetWorkPackagePlanningRangeSettings","WorkPackagePlanningTotalsActionTypes","InitWorkPackagePlanningTotalsSettings","SetWorkPackagePlanningTotalsSettings","ResetWorkPackagePlanningTotalsSettings","SaveWorkPackagePlanningTotalsSettings","defaultWorkPackagePlanningTotalsState","initWorkPackagePlanningTotalsSettings","setWorkPackagePlanningTotalsSettings$","resetWorkPackagePlanningTotalsSettings","openState","closedState","defaultState","initWorkpackageSidepanel","openWorkpackageSidepanel$","closeWorkpackageSidepanel$","toggleWorkpackageSidepanel$","CloseWorkpackageSidepanel","OpenWorkpackageSidepanel","InitWorkpackageSidepanel","ToggleWorkpackageSidepanel","setLoginUser","SettingsSelectors","TimecardRangeSelectors","WorkPackagePlanningRangeSelectors","WorkPackagePlanningTotalsSelectors","WorkpackageSidepanelSelectors","UserPlanningSidepanelIndexActionTypes","InitUserPlanningSidepanelIndex","SetUserPlanningSidepanelIndex","ResetUserPlanningSidepanelIndex","initUserPlanningSidepanelIndex","setUserPlanningSidepanelIndex$","resetUserPlanningSidepanelIndex","UserPlanningSidepanelIndexSelectors","WorkPackageSidepanelIndexActionTypes","InitWorkPackageSidepanelIndex","SetWorkPackageSidepanelIndex","ResetWorkPackageSidepanelIndex","initWorkPackageSidepanelIndex","setWorkPackageSidepanelIndex$","resetWorkPackageSidepanelIndex","WorkPackageSidepanelIndexSelectors","defaultNonHumanResourceListState","setNonHumanResourceListSelectedColumns$","SaveNonHumanResourceListSettings","setNonHumanResourceListOptions$","resetNonHumanResourceListOptions$","InitNonHumanResourceListSettings","setNonHumanResourceListSettings$","resetNonHumanResourceListSettings","SetNonHumanResourceListSelectedColumns","SetNonHumanResourceListOptions","ResetNonHumanResourceListOptions","SetNonHumanResourceListSettings","ResetNonHumanResourceListSettings","NonHumanResourceListSelectors","NonHumanResourceListActionTypes","NonHumanResourcePlanningListActionTypes","SetNonHumanResourcePlanningListSelectedColumns","SetNonHumanResourcePlanningListOptions","InitNonHumanResourcePlanningListSettings","SetNonHumanResourcePlanningListSettings","ResetNonHumanResourcePlanningListSettings","SaveNonHumanResourcePlanningListSettings","nonHumanResourcePlanningListColumnsInfoObj","nonHumanResourcePlanningListColumnsInfo","defaultNonHumanResourcePlanningListState","setNonHumanResourcePlanningListSelectedColumns$","setNonHumanResourcePlanningListOptions$","initNonHumanResourcePlanningListSettings","setNonHumanResourcePlanningListSettings$","resetNonHumanResourcePlanningListSettings","NonHumanResourcePlanningListSelectors","defaultProjectListState","setProjectListSelectedColumns$","SaveProjectListSettings","setProjectListOptions$","resetProjectListOptions$","initProjectListSettings","setProjectListSettings$","resetProjectListSettings","SetProjectListSelectedColumns","SetProjectListOptions","ResetProjectListOptions","InitProjectListSettings","SetProjectListSettings","ResetProjectListSettings","ProjectListSelectors","ProjectListActionTypes","ProjectPlanningRangeActionTypes","InitProjectPlanningRangeSettings","SetProjectPlanningRangeSettings","ResetProjectPlanningRangeSettings","SaveProjectPlanningRangeSettings","defaultProjectPlanningRangeState","initProjectPlanningRangeSettings","setProjectPlanningRangeSettings$","resetProjectPlanningRangeSettings","tslib__WEBPACK_IMPORTED_MODULE_4__","ProjectPlanningTotalsActionTypes","InitProjectPlanningTotalsSettings","SetProjectPlanningTotalsSettings","ResetProjectPlanningTotalsSettings","SaveProjectPlanningTotalsSettings","defaultProjectPlanningTotalsState","initProjectPlanningTotalsSettings","setProjectPlanningTotalsSettings$","resetProjectPlanningTotalsSettings","tslib__WEBPACK_IMPORTED_MODULE_5__","defaultQuestionsListState","setQuestionsListSelectedColumns$","SaveQuestionsListSettings","setQuestionsListOptions$","resetQuestionsListOptions$","initQuestionsListSettings","setQuestionsListSettings$","resetQuestionsListSettings","saveQuestionsListSettings$","SetQuestionsListSelectedColumns","SetQuestionsListOptions","ResetQuestionsListOptions","InitQuestionsListSettings","SetQuestionsListSettings","ResetQuestionsListSettings","QuestionsListSelectors","QuestionsListActionTypes","SkillsActionTypes","InitSkillsSettings","AddSkillsRecentUnit","SkillsSelectors","recentSkillsUnits","mostRecentSkillsUnit","initUserSkillsSettingsState","addSkillsRecentUnit","existingUnitIndex","updatedRecentUnits","tslib__WEBPACK_IMPORTED_MODULE_2__","TimecardViewExpandsActions","SetExpandsIds","expandedProjectIds","expandedSpecialRowNames","TimecardViewExpandsState","expandsStatus","setExpandsIds","TimesheetRangeActionTypes","InitTimesheetRangeSettings","SetTimesheetRangeSettings","ResetTimesheetRangeSettings","SaveTimesheetRangeSettings","TimesheetRangeSelectors","defaultTimesheetRangeState","initTimesheetRangeSettings","setTimesheetRangeSettings$","resetTimesheetRangeSettings","TimesheetTotalsActionTypes","InitTimesheetTotalsSettings","SetTimesheetTotalsSettings","ResetTimesheetTotalsSettings","SaveTimesheetTotalsSettings","TimesheetTotalsSelectors","defaultTimesheetTotalsState","initTimesheetTotalsSettings","setTimesheetTotalsSettings$","resetTimesheetTotalsSettings","TimesheetActionTypes","InitUserTimesheetSettings","SetTimesheetCrossUtilizationState","ResetTimesheetCrossUtilizationState","SaveTimesheetCrossUtilizationSettings","AddTimesheetRecentUnit","AddExpandedUnitId","RemoveExpandedUnitId","TimesheetSelectors","withCrossUtilizedUsers","mostRecentTimesheetUnit","collapsedUnitIds","defaultTimesheetState","initUserTimesheetSettingsState","setCrossUtilizationStateState$","resetUserCrossUtilizationState","saveTimesheetSettings$","addTimesheetRecentUnit","addExpandedUnitsId","removeExpandedUnitsId","tslib__WEBPACK_IMPORTED_MODULE_3__","defaultUnitListState","setUnitListSelectedColumns$","SaveUnitListSettings","setUnitListOptions$","resetUnitListOptions$","InitUnitListSettings","setUnitListSettings$","resetUnitListSettings","SetUnitListSelectedColumns","SetUnitListOptions","ResetUnitListOptions","SetUnitListSettings","ResetUnitListSettings","UnitListSelectors","UnitListActionTypes","UnitPlanningRangeActionTypes","InitUnitPlanningRangeSettings","SetUnitPlanningRangeSettings","ResetUnitPlanningRangeSettings","SaveUnitPlanningRangeSettings","UnitPlanningRangeSelectors","defaultUnitPlanningRangeState","initUnitPlanningRangeSettings","setUnitPlanningRangeSettings$","resetUnitPlanningRangeSettings","UnitPlanningSidepanelIndexActionTypes","InitUnitPlanningSidepanelIndex","SetUnitPlanningSidepanelIndex","ResetUnitPlanningSidepanelIndex","UnitPlanningSidepanelIndexSelectors","initUnitPlanningSidepanelIndex","setUnitPlanningSidepanelIndex$","resetUnitPlanningSidepanelIndex","UnitPlanningSidepanelActionTypes","InitUnitPlanningSidepanel","OpenUnitPlanningSidepanel","CloseUnitPlanningSidepanel","ToggleUnitPlanningSidepanel","UnitPlanningSidepanelSelectors","initUnitPlanningSidepanel","openUnitPlanningSidepanel$","closeUnitPlanningSidepanel$","toggleUnitPlanningSidepanel$","UnitPlanningTotalsActionTypes","InitUnitPlanningTotalsSettings","SetUnitPlanningTotalsSettings","ResetUnitPlanningTotalsSettings","SaveUnitPlanningTotalsSettings","UnitPlanningTotalsSelectors","defaultUnitPlanningTotalsState","initUnitPlanningTotalsSettings","setUnitPlanningTotalsSettings$","resetUnitPlanningTotalsSettings","UnitPlanningActionTypes","InitUnitPlanningSettings","AddUnitPlanningRecentUnit","SetUnitPlanningFilters","mostRecentPlanningUnit","unitSettingsForUnit","unitSettings","initUnitPlanningSettingsState","addUnitPlanningRecentUnit","setUnitPlanningFilters","g","selectedCategories","selectedResources","defaultUserListState","setUserListSelectedColumns$","SaveUserListSettings","setUserListOptions$","resetUserListOptions$","initUserListSettings","setUserListSettings$","resetUserListSettings","SetUserListSelectedColumns","SetUserListOptions","ResetUserListOptions","InitUserListSettings","SetUserListSettings","ResetUserListSettings","UserListSelectors","UserListActionTypes","UserPlanningRangeActionTypes","InitUserPlanningRangeSettings","SetUserPlanningRangeSettings","ResetUserPlanningRangeSettings","SaveUserPlanningRangeSettings","UserPlanningRangeSelectors","defaultUserPlanningRangeState","initUserPlanningRangeSettings","setUserPlanningRangeSettings$","resetUserPlanningRangeSettings","UserPlanningSidepanelSelectors","UserPlanningSidepanelActionTypes","InitUserPlanningSidepanel","OpenUserPlanningSidepanel","CloseUserPlanningSidepanel","ToggleUserPlanningSidepanel","initUserPlanningSidepanel","openUserPlanningSidepanel$","closeUserPlanningSidepanel$","toggleUserPlanningSidepanel$","UserPlanningTotalsSelectors","UserPlanningTotalsActionTypes","InitUserPlanningTotalsSettings","SetUserPlanningTotalsSettings","ResetUserPlanningTotalsSettings","SaveUserPlanningTotalsSettings","defaultUserPlanningTotalsState","initUserPlanningTotalsSettings","setUserPlanningTotalsSettings$","resetUserPlanningTotalsSettings","UserResourceListActionTypes","SetUserResourceListSelectedColumns","SetUserResourceListOptions","InitUserResourceListSettings","SetUserResourceListSettings","ResetUserResourceListSettings","SaveUserResourceListSettings","UserResourceListSelectors","userResourceListColumnsInfoObj","userResourceListColumnsInfo","defaultUserResourceListState","setUserResourceListSelectedColumns$","setUserResourceListOptions$","initUserResourceListSettings","setUserResourceListSettings$","resetUserResourceListSettings","saveUserResourceListSettings$","defaultWorkPackageListState","setWorkPackageListSelectedColumns$","SaveWorkPackageListSettings","setWorkPackageListOptions$","resetWorkPackageListOptions$","initWorkPackageListSettings","setWorkPackageListSettings$","resetWorkPackageListSettings","SetWorkPackageListSelectedColumns","SetWorkPackageListOptions","ResetWorkPackageListOptions","InitWorkPackageListSettings","SetWorkPackageListSettings","ResetWorkPackageListSettings","WorkPackageListSelectors","WorkPackageListActionTypes","WorkPackageQuestionListActionTypes","SetWorkPackageQuestionListSelectedColumns","SetWorkPackageQuestionListOptions","InitWorkPackageQuestionListSettings","SetWorkPackageQuestionListSettings","ResetWorkPackageQuestionListSettings","SaveWorkPackageQuestionListSettings","workPackageQuestionListColumnsInfoObj","workPackageQuestionListColumnsInfo","defaultWorkPackageQuestionListState","setWorkPackageQuestionListSelectedColumns$","setWorkPackageQuestionListOptions$","initWorkPackageQuestionListSettings","setWorkPackageQuestionListSettings$","resetWorkPackageQuestionListSettings","saveWorkPackageQuestionListSettings$","WorkPackageQuestionListSelectors","WorkpackageSidepanelActionTypes","WorkPackageActionTypes","InitWorkPackageSettings","AddWorkPackageRecentSupplierUnit","recentSupplierUnits","initWorkPackageSettingsState","addWorkPackageRecentUnit","WorkPackageSelectors","mostRecentUsedSupplierUnits","SetRecentProjects","SetRecentTimecard","timecard","UpdateTimecard","UpdateUserTimeZone","UpdateUserLocalLanguageSettings","useLocal","UpdateDefaultUserLandingPage","UpdateUserWorkingDays","UpdateProjectStructureFilterSettings","projectStructureHeaderFilterSettings","UpdateTimecardHeaderFilterSettings","filterSettings","UpdatePlanningHeaderFilterSettings","UpdateProjectPlanningFilterSettings","projectPlanningHeaderFilterSettings","UpdateProjectPlanningCompactFilter","recentTimecard","projectStructureFilterSettings","timecardHeaderFilterSettings","projectPlaningFilterSettings","defaultUserState","projectListSettingsAction","unitListSettingsAction","nonHumanResourceListSettingsAction","userListSettingsAction","workPackageListSettingsAction","activitiesSettingsAction","workPackageQuestionListSettingsAction","questionsListSettingsAction","userResourceListSettingsAction","attachmentsListSettingsAction","nonHumanResourcePlanningListSettingsAction","timesheetSettingsAction","skillsSettingsAction","unitPlanningSettingsAction","workPackageSettingsAction","workPackageSidepanelAction","userPlanningSidePanelAction","unitPlanningSidePanelAction","unitPlanningSidePanelIndexAction","userPlanningSidePanelIndexAction","workPackagePlanningSidePanelIndexAction","dashboardSettingsAction","userPlanningTotalsSettingsAction","unitPlanningTotalsSettingsAction","unitPlanningRangeSettingsAction","projectPlanningTotalsSettingsAction","projectPlanningRangeSettingsAction","userPlanningRangeSettingsAction","timecardRangeSettingsAction","timesheetRangeSettingsAction","workPackagePlanningRangeSettingsAction","workPackagePlanningTotalsSettingsAction","timesheetTotalsSettingsAction","clearLoginUser","clearAllUserData","setOriginalUser","clearOriginalUser","addRecentProject","existingProjectIndex","setRecentProjects","setRecentTimecard","updateTimecard","updateSettingsProjectStructureFilters","updateSettingsProjectPlanningFilters","updateTimecardHeaderFilterSettings","updatePlanningHeaderFilterSettings","updateProjectPlanningCompactFilter","updateUserTimeZone","updateUserWorkingDays","updateDefaultUserLandingPage","updateUserLocalLanguageSettings","tslib__WEBPACK_IMPORTED_MODULE_26__","msalApiEndpointResource","msalConfig","apiEndpointId","clientId","cacheLocation","endpoints","ngxsDevelopmentModeEnabled","ngxsReduxDevtoolsEnabled","ngxsLoggingEnabled","httpInterceptorProviders","HTTP_INTERCEPTORS","ImpersonationInterceptor","intercept","isMystique","handle","impersonatingRequest","AppInsightsInterceptor","MsalInterceptor","ClipboardService","clipboard","writeText","reject","textArea","createTextArea","appendChild","setSelectionRange","execCommand","blur","selection","getSelection","removeAllRanges","isCopySuccessInIE11","parentNode","removeChild","run","isRTL","documentElement","createElement","border","padding","margin","top","pageYOffset","scrollTop","clipboardData","getData","GlobalErrorHandlerService","ErrorHandler","LoginGuard","foundReturnUrlCandidate","queryParamMap","returnUrlParam","pathFromHere","urlSegment","decodedReturnUrl","parseUrl","getRouteBasePath","APP_PROVIDERS","TransferState","MSAL_INSTANCE","MSALInstanceFactory","PublicClientApplication","auth","authority","redirectUri","navigateToLoginRequestUrl","postLogoutRedirectUri","cache","BrowserCacheLocation","LocalStorage","storeAuthStateInCookie","MSALGuardConfigFactory","authRequest","scopes","tenant","interactionType","InteractionType","Redirect","MSAL_INTERCEPTOR_CONFIG","MSALInterceptorConfigFactory","protectedResourceMap","MsalGuard","MsalBroadcastService","MsalService","LOCALE_ID","CustomPreloadingStrategy","preloadedModules","load","NotFoundComponent","DefaultUserLandingPageType","Dashboard","Timecard","MyPlanning","Timesheet","UnitPlanning","LoginComponent_Case_0_ng_container_6_Template","logoutButtonTemplate_r1","LoginComponent_Case_1_ng_container_10_Template","basicUserInfo","LoginComponent_Case_2_ng_container_12_Template","relativeAccessTime$","LoginComponent_Case_3_ng_container_12_Template","LoginComponent_Case_4_Conditional_4_Template","LoginComponent_Case_4_ng_container_8_Template","LoginComponent_Case_5_Conditional_1_Conditional_2_Template","LoginComponent_Case_5_Conditional_1_ng_container_6_Template","loginButtonTemplate_r3","LoginComponent_Case_5_Conditional_0_Template","LoginComponent_Case_5_Conditional_1_Template","isRedirectingToAuthenticationProvider","AccessErrorType","AUTHENTICATION_IN_PROGRESS","AUTHENTICATION_ERROR","UNAUTHORIZED","AUTHORIZATION_INVALID","AUTHORIZATION_EXPIRED","AUTHORIZATION_NOT_YET_VALID","LoginComponent","keyboardShortcutsService","base64EncodedReturnUrl","accessErrorTypes","accessErrorType","getDefaultUserLandingPagePath","getAccessErrorType","shortcutSubscription","E","queryParamsMap","handleRedirectObservable","LoginComponent_Case_0_Template","LoginComponent_Case_1_Template","LoginComponent_Case_2_Template","LoginComponent_Case_3_Template","LoginComponent_Case_4_Template","LoginComponent_Case_5_Template","LoginComponent_Case_6_Template","LoginComponent_ng_template_7_Template","LoginComponent_ng_template_9_Template","LoginComponent_ng_template_11_Template","NoAccessComponent","LogoutComponent_Conditional_1_Conditional_5_Template","LogoutComponent","LogoutComponent_Conditional_0_Template","LogoutComponent_Conditional_1_Template","RedirectComponent","encapsulation","routes","redirectTo","pathMatch","loadChildren","DashboardModule","ProjectsModule","WpModule","WorkPackagesModule","QuestionsModule","AdministrationModule","UserModule","TimesheetModule","UnitPlanningModule","AppRoutingModule","useHash","preloadingStrategy","scrollPositionRestoration","anchorScrolling","MsalRedirectComponent","authService","ApplicationInsightsModule","applicationInsightsService","CustomerMissingTranslationHandler","HttpLoaderFactory","TranslateHttpLoader","createCustomerMissingTranslationHandler","AppModule","bootstrap","MsalModule","BrowserModule","BrowserAnimationsModule","missingTranslationHandler","MissingTranslationHandler","loader","TranslateLoader","HttpClient","developmentMode","NgxsStoragePluginModule","_decorateModuleRef","appComponent","ApplicationRef","components","enableDebugTools","decorateModuleRef","enableProdMode","__NgCli_bootstrap_1","bootstrapModule","err","webpackContext","req","webpackContextResolve","exports"],"ignoreList":[],"sourceRoot":"webpack:///","sources":["./src/app/api/custom-http-url-encoding-codec.ts","./src/app/api/custom-http-params.ts","./src/app/api/models/requests/user-available-resources.request.model.ts","./src/app/api/list-query-options.ts","./src/app/api/meta-info/attachments-list.info.ts","./src/app/api/meta-info/non-human-resources-list.info.ts","./src/app/api/meta-info/projects-list.info.ts","./src/app/api/meta-info/questions-list.info.ts","./src/app/api/meta-info/units-list.info.ts","./src/app/api/meta-info/users-list.info.ts","./src/app/api/meta-info/work-packages-list.info.ts","./src/app/api/models/base/milestone.base.model.ts","./src/app/api/models/dtos/activity-field.dto.model.ts","./src/app/api/models/dtos/attachment-slim.dto.model.ts","./src/app/api/models/dtos/available-project.dto.model.ts","./src/app/api/models/dtos/background-color.dto.model.ts","./src/app/api/models/dtos/capacity.dto.model.ts","./src/app/api/models/dtos/contract-hourly-rate-category-pair.dto.model.ts","./src/app/api/models/dtos/contract.dto.model.ts","./src/app/api/models/dtos/costObject.dto.model.ts","./src/app/api/models/dtos/feedback.dto.model.ts","./src/app/api/models/dtos/gate.dto.model.ts","./src/app/api/models/dtos/int32-id-name.dto.model.ts","./src/app/api/models/dtos/milestone-import.dto.model.ts","./src/app/api/models/dtos/level-import-list.dto.model.ts","./src/app/api/models/dtos/level-list-nested.dto.model.ts","./src/app/api/models/dtos/level-list.dto.model.ts","./src/app/api/models/dtos/level-slim.dto.model.ts","./src/app/api/models/dtos/metadata-slim.dto.model.ts","./src/app/api/models/dtos/milestone-list.dto.model.ts","./src/app/api/models/dtos/non-human-resource-planning-entry.dto.model.ts","./src/app/api/models/dtos/non-human-resource-unit-assignment.dto.model.ts","./src/app/api/models/dtos/non-human-resource.dto.model.ts","./src/app/api/models/dtos/planning-capacity-slim.dto.model.ts","./src/app/api/models/dtos/planning-entry.dto.model.ts","./src/app/api/models/dtos/project-dashboard.dto.model.ts","./src/app/api/models/dtos/project-import-list-partial.dto.model.ts","./src/app/api/models/dtos/project-import-list.dto.model.ts","./src/app/api/models/dtos/project-recent-list.dto.model.ts","./src/app/api/models/dtos/project-type.dto.model.ts","./src/app/api/models/dtos/question-dashboard.dto.model.ts","./src/app/api/models/dtos/question.dto.model.ts","./src/app/api/models/dtos/range-setting.dto.model.ts","./src/app/api/models/dtos/rating.dto.model.ts","./src/app/api/models/dtos/non-human-resource-slim.dto.model.ts","./src/app/api/models/dtos/responsible-resource-dto.model.ts","./src/app/api/models/dtos/responsible-user-dto.model.ts","./src/app/api/models/dtos/role-list.dto.model.ts","./src/app/api/models/dtos/role.dto.model.ts","./src/app/api/models/dtos/skill.dto.model.ts","./src/app/api/models/dtos/time-tracking-entry-view.dto.model.ts","./src/app/api/models/dtos/time-tracking-work-package.dto.model.ts","./src/app/api/models/dtos/time-tracking-project.dto.model.ts","./src/app/api/models/dtos/time-tracking-row.dto.model.ts","./src/app/api/models/dtos/unit-background-color.dto.model.ts","./src/app/api/models/dtos/unit-calendar-link.dto.model.ts","./src/app/api/models/dtos/unit-category.dto.model.ts","./src/app/api/models/dtos/unit-cost-center-activity-type.dto.model.ts","./src/app/api/models/dtos/unit-cost-center.dto.model.ts","./src/app/api/models/dtos/unit-list.dto.model.ts","./src/app/api/models/dtos/unit-planning-capacity.dto.model.ts","./src/app/api/models/dtos/unit-planning-column-total.dto.model.ts","./src/app/api/models/dtos/non-human-resource-planning-slim.dto.model.ts","./src/app/api/models/dtos/unit-planning-non-human-resource-week-total.dto.model.ts","./src/app/api/models/dtos/unit-planning-non-human-resource.dto.model.ts","./src/app/api/models/dtos/unit-planning-user-work-package.dto.model.ts","./src/app/api/models/dtos/unit-planning-project.dto.model.ts","./src/app/api/models/dtos/unit-planning-resource.dto.model.ts","./src/app/api/models/dtos/unit-planning-slim.dto.model.ts","./src/app/api/models/dtos/unit-planning-user-week-entry-view-slim.dto.model.ts","./src/app/api/models/dtos/unit-planning-user-week-total.dto.model.ts","./src/app/api/models/dtos/user-planning-slim.dto.model.ts","./src/app/api/models/dtos/unit-planning-week-row-slim.dto.model.ts","./src/app/api/models/dtos/unit-planning-user.dto.model.ts","./src/app/api/models/dtos/unit-planning-week-total.dto.model.ts","./src/app/api/models/dtos/unit-selector.dto.model.ts","./src/app/api/models/dtos/unit-skill.dto.model.ts","./src/app/api/models/dtos/unit-slim.dto.model.ts","./src/app/api/models/dtos/unit.dto.model.ts","./src/app/api/models/dtos/user-notification-role.dto.model.ts","./src/app/api/models/dtos/user-notification-settings.dto.model.ts","./src/app/api/models/dtos/user-planning-time-tracking-work-package.dto.model.ts","./src/app/api/models/dtos/user-planning-time-tracking-project.dto.model.ts","./src/app/models/user-planning-time-tracking-row.ts","./src/app/api/models/dtos/user-planning-time-tracking-row.dto.model.ts","./src/app/api/models/dtos/user-planning-week-tracking-entry-view.dto.model.ts","./src/app/api/models/dtos/user-question-notification.dto.model.ts","./src/app/api/models/dtos/user-slim.dto.model.ts","./src/app/api/models/dtos/user-unit-assignment.dto.model.ts","./src/app/api/models/dtos/work-package-dashboard.dto.model.ts","./src/app/api/models/dtos/workpackage-supplier-setting.dto.model.ts","./src/app/api/models/pagination-info.model.ts","./src/app/api/models/metadata.model.ts","./src/app/api/models/requests/attachment-create.request.model.ts","./src/app/api/models/responses/file-download.response.model.ts","./src/app/api/models/dtos/non-human-resource-list.dto.model.ts","./src/app/api/models/responses/non-human-resource-list.response.model.ts","./src/app/api/models/dtos/activity.dto.model.ts","./src/app/api/models/responses/project-activity-view.response.model.ts","./src/app/api/models/responses/project-dashboard-list.response.model.ts","./src/app/api/models/dtos/project-list-view.dto.model.ts","./src/app/api/models/responses/project-list.response.model.ts","./src/app/api/models/dtos/project-planning-workpackage-totals.dto.model.ts","./src/app/api/models/dtos/project-planning-workpackage-week.dto.model.ts","./src/app/api/models/dtos/project-planning-workpackage.dto.model.ts","./src/app/api/models/dtos/project-planning-level.dto.model.ts","./src/app/api/models/responses/project-planning-view.response.model.ts","./src/app/api/models/responses/project-slim.response.model.ts","./src/app/api/models/responses/project-view.response.model.ts","./src/app/api/models/responses/question-create.response.model.ts","./src/app/api/models/responses/question-dashboard-list.response.model.ts","./src/app/api/models/responses/question-list-response.model.ts","./src/app/api/models/responses/question-user-notification.response.model.ts","./src/app/api/models/responses/question-user-notification-list.response.model.ts","./src/app/api/models/dtos/question-list-item.dto.model.ts","./src/app/api/models/responses/questions-view-list.response.model.ts","./src/app/api/models/dtos/reply-dto.model.ts","./src/app/api/models/responses/reply-list.response.model.ts","./src/app/api/models/responses/unit-list.response.model.ts","./src/app/api/models/dtos/unit-planning-resource-slim.dto.model.ts","./src/app/api/models/dtos/unit-planning-resource-data.dto.model.ts","./src/app/api/models/dtos/unit-planning.dto.model2.ts","./src/app/api/models/responses/unit-planning-view.response.model2.ts","./src/app/api/models/dtos/user-list-view-response-item.dto.model.ts","./src/app/api/models/responses/user-list-view.response.model.ts","./src/app/api/models/responses/work-package-view-list-item.response.model.ts","./src/app/api/models/responses/work-package-view-list.response.model.ts","./src/app/api/models/dtos/scope-change.dto.model.ts","./src/app/api/models/dtos/responsible-user-work-package-view-dto.model.ts","./src/app/api/models/dtos/suspension.dto.model.ts","./src/app/api/models/dtos/kpi.dto.model.ts","./src/app/api/models/dtos/work-package-rework.dto.model.ts","./src/app/api/models/responses/work-package-view.response.model.ts","./src/app/api/models/responses/project-type-list.response.model.ts","./src/app/api/models/responses/rating-list.response.model.ts","./src/app/api/models/dtos/time-zone.dto.model.ts","./src/app/api/models/dtos/country.dto.model.ts","./src/app/api/models/responses/country-list.response.model.ts","./src/app/api/models/responses/gate-list.response.model.ts","./src/app/api/models/responses/role-list.response.model.ts","./src/app/api/models/dtos/resource-link.dto.model.ts","./src/app/api/models/requests/user-preferences-update.request.model.ts","./src/app/api/models/responses/user-calendar-links-response.model.ts","./src/app/api/services/base-data.service.ts","./src/app/api/models/custom-http-error-response.class.ts","./src/app/api/services/collapp-api.service.ts","./src/app/api/models/responses/dashboard-view.response.model.ts","./src/app/api/models/responses/work-package-dashboard-list.response.model.ts","./src/app/api/models/responses/dashboard-filters-visibility.response.model.ts","./src/app/api/services/dashboard.service.ts","./src/app/api/models/responses/non-human-resource-view.response.model.ts","./src/app/api/models/responses/non-human-resource-create.response.model.ts","./src/app/api/services/non-human-resource.service.ts","./src/app/api/models/responses/basic-work-package-detail.response.model.ts","./src/app/api/models/responses/basic-work-package-view-list-item.response.model.ts","./src/app/api/models/responses/basic-work-package-view-list.response.model.ts","./src/app/api/models/responses/available-project-list.response.model.ts","./src/app/api/models/requests/work-package-update-status.request.model.ts","./src/app/api/models/requests/project-structure-preset-update.request.model.ts","./src/app/api/models/dtos/user-minimal.dto.model.ts","./src/app/api/models/dtos/work-package-list.dto.model.ts","./src/app/api/models/responses/work-package-list.response.model.ts","./src/app/api/models/responses/project-scope-view.response.model.ts","./src/app/api/models/responses/project-create.response.model.ts","./src/app/api/models/responses/work-package-create.response.model.ts","./src/app/api/models/responses/level-list.response.model.ts","./src/app/api/models/requests/work-package-submitter-settings-update.request.model.ts","./src/app/api/models/responses/level-create.response.model.ts","./src/app/helpers/data-structure.utility.ts","./src/app/api/models/dtos/public-holiday.dto.model.ts","./src/app/api/models/responses/work-package-resource-planning-view.response.model.ts","./src/app/api/models/responses/work-package-transition-information.response.model.ts","./src/app/api/models/requests/work-package-close.request.model.ts","./src/app/api/models/requests/suspension-create.request.model.ts","./src/app/api/models/responses/reply-create.response.model.ts","./src/app/api/models/responses/conclusion-create.response.model.ts","./src/app/api/models/responses/reopen-create.response.model.ts","./src/app/api/models/responses/attachment-list.response.model.ts","./src/app/api/models/responses/attachment-outdate.response.model.ts","./src/app/api/models/dtos/project-selector.dto.model.ts","./src/app/api/models/responses/project-selector-list.response.model.ts","./src/app/api/models/responses/project-structure.response.model.ts","./src/app/api/models/responses/level-info.response.model.ts","./src/app/api/services/project.service.ts","./src/app/api/models/dtos/skill-category-with-skills.dto.model.ts","./src/app/api/models/responses/skills.response.model.ts","./src/app/api/models/dtos/skill-category.dto.model.ts","./src/app/api/models/dtos/skill-rating-value.dto.model.ts","./src/app/api/models/dtos/skill-ratings-skill.dto.model.ts","./src/app/api/models/dtos/skill-rating-category.dto.model.ts","./src/app/api/models/dtos/user-base-slim.dto.model.ts","./src/app/api/models/responses/skill-rating.response.model.ts","./src/app/api/services/skills.service.ts","./src/app/api/models/dtos/time-tracking-day-info.dto.model.ts","./src/app/api/models/dtos/time-tracking-user.dto.model.ts","./src/app/api/models/dtos/time-tracking-unit-users.dto.models.ts","./src/app/api/models/responses/timesheet-view.response.model.ts","./src/app/api/models/dtos/time-tracking-week-navigator-item.dto.model.ts","./src/app/api/models/responses/time-tracking-week-navigator-view.response.model.ts","./src/app/api/models/responses/timecard-view.response.model.ts","./src/app/api/models/dtos/user-list.dto.model.ts","./src/app/api/models/responses/user-planning-view.response.model.ts","./src/app/api/models/dtos/unit-planning.dto.model.ts","./src/app/api/models/responses/unit-planning-view.response.model.ts","./src/app/api/models/responses/non-human-resource-planning-view.response.model.ts","./src/app/api/models/dtos/time-tracking-month-navigator-item.dto.model.ts","./src/app/api/models/responses/time-tracking-month-navigator-view.response.model.ts","./src/app/api/services/time-tracking.service.ts","./src/app/api/models/responses/unit-selector-list.response.model.ts","./src/app/api/models/responses/unit-create.response.model.ts","./src/app/api/models/responses/unit-view.response.model.ts","./src/app/api/models/responses/units-view.response.model.ts","./src/app/api/models/responses/timesheet-export-template.response.model.ts","./src/app/api/models/responses/default-non-productive-category-response.model.ts","./src/app/api/models/responses/unit-coordinator-response.model.ts","./src/app/api/models/dtos/unit-slim-without-coordinator.dto.model.ts","./src/app/api/services/unit.service.ts","./src/app/api/models/dtos/user-settings.dto.model.ts","./src/app/api/models/dtos/user.dto.model.ts","./src/app/api/models/responses/user-create.response.model.ts","./src/app/api/models/responses/user-view.response.model.ts","./src/app/api/models/responses/users-view.response.model.ts","./src/app/api/models/requests/user-setting.request.model.ts","./src/app/api/models/dtos/available-resource.dto.model.ts","./src/app/api/models/responses/available-resources.response.model.ts","./src/app/api/models/responses/unit-planning-user-list-view.response.model.ts","./src/app/api/models/responses/user-notification-view.response.model.ts","./src/app/api/models/dtos/user-slim-with-unit.dto.model.ts","./src/app/api/services/user.service.ts","./src/app/api/utilities/api.utility.ts","./src/app/services/constants.ts","./src/app/services/time-zone.service.ts","./src/app/app.component.html","./src/app/app.component.ts","./src/app/app.permisions.ts","./src/app/collapp-common/collapp-common.module.ts","./src/app/collapp-common/date/format-date.ts","./src/app/collapp-common/window.ts","./src/app/collapp-common/pipes/capacity-unit-short.pipe.ts","./src/app/collapp-common/pipes/contractHourlyRateCategory.pipe.ts","./src/app/collapp-common/pipes/contractHourlyRateCategoryToltip.pipe.ts","./src/app/collapp-common/pipes/decimal.pipe.ts","./src/app/collapp-common/pipes/function.pipe.ts","./src/app/collapp-common/pipes/moment-utc.pipe.ts","./src/app/collapp-common/pipes/moment-local.pipe.ts","./src/app/collapp-common/pipes/moment.pipe.ts","./src/app/collapp-common/pipes/project-type.pipe.ts","./src/app/collapp-common/pipes/question-status.pipe.ts","./src/app/collapp-common/pipes/safe.pipe.ts","./src/app/collapp-common/pipes/time-tracking-status.pipe.ts","./src/app/collapp-common/pipes/timecard-status.pipe.ts","./src/app/collapp-common/pipes/to-moment.pipe.ts","./src/app/collapp-common/pipes/unit-level.pipe.ts","./src/app/collapp-common/pipes/user.pipe.ts","./src/app/models/work-package-role.enum.ts","./src/app/collapp-common/pipes/work-package-role.pipe.ts","./src/app/collapp-common/services/local-date-helper.service.ts","./src/app/collapp-core/collapp-date-adapter-error.ts","./src/app/collapp-core/collapp-date-adapter.ts","./src/app/collapp-core/date/constants.ts","./src/app/collapp-moment-date-adapter/moment-date-adapter.ts","./src/app/collapp-moment-date-adapter/moment-date-formats.ts","./src/app/collapp-moment-date-adapter/index.ts","./src/app/components/collapp-button/button.html","./src/app/components/collapp-button/button.ts","./src/app/components/collapp-button/collapp-button-module.ts","./src/app/components/dates-range/dates-range.component.html","./src/app/components/dates-range/dates-range.component.ts","./src/app/components/dates-range/dates-range.module.ts","./src/app/components/dialogs/collapp-wp-add-additional-suppliers-dialog/collapp-wp-add-additional-suppliers-dialog.component.html","./src/app/components/dialogs/collapp-wp-add-additional-suppliers-dialog/collapp-wp-add-additional-suppliers-dialog.component.ts","./src/app/components/dialogs/work-package-wizard/dialog-types.ts","./src/app/helpers/path.utility.ts","./src/app/services/azure-blob.service.ts","./src/app/api/models/requests/attachment-outdate-request.model.ts","./src/app/components/form-attachments/components/outdate-attachment-dialog/outdate-attachment-dialog.component.ts","./src/app/components/form-attachments/components/outdate-attachment-dialog/outdate-attachment-dialog.component.html","./src/app/components/form-attachments/form-attachments.component.html","./src/app/components/form-attachments/form-attachments.component.ts","./src/app/components/form-attachments/components/state-badge/state-badge.component.ts","./src/app/components/form-attachments/components/state-badge/state-badge.component.html","./src/app/collapp-common/pipes/file-extension.pipe.ts","./src/app/collapp-common/pipes/file-size.pipe.ts","./src/app/components/form-attachments/form-attachments.module.ts","./src/app/components/form-section/form-section.component.html","./src/app/components/form-section/form-section.component.ts","./src/app/components/form-section/form-section.module.ts","./src/app/components/ng-select-mat/ng-option-text.component.ts","./src/app/components/ng-select-mat/ng-option-text.component.html","./src/app/components/ng-select-mat/ng-select-material.module.ts","./src/app/components/ng-select-mat/ng-select.directive.ts","./src/app/components/notifications/time-zone-notification.component.ts","./src/app/components/notifications/time-zone-notification.component.html","./src/app/components/people-select/people-select.component.html","./src/app/components/people-select/people-select.component.ts","./src/app/components/people-select/people-select.module.ts","./src/app/components/person-icon/person-icon.module.ts","./src/app/components/person-icon/person-icon-overlay-template.directive.ts","./src/app/components/person-icon/person-icon.component.html","./src/app/components/person-icon/person-icon.component.ts","./src/app/components/person/person.module.ts","./src/app/components/person/person.component.html","./src/app/components/person/person.component.ts","./src/app/components/project-tree-structure/project-tree-structure.module.ts","./src/app/components/project-tree-structure/level-model-tree-node.ts","./src/app/components/project-tree-structure/components/level-change-indicator.component.html","./src/app/components/project-tree-structure/components/level-change-indicator.component.ts","./src/app/components/project-tree-structure/project-tree-structure.component.html","./src/app/components/project-tree-structure/project-tree-structure.component.ts","./src/app/components/spinner/spinner.component.ts","./src/app/components/spinner/spinner.component.html","./src/app/components/spinner/spinner.module.ts","./src/app/components/dialogs/add-additional-supplier-button/add-additional-supplier-button.module.ts","./src/app/components/dialogs/add-additional-supplier-button/add-additional-supplier-button.component.html","./src/app/components/dialogs/add-additional-supplier-button/add-additional-supplier-button.component.ts","./src/app/components/unit-select/unit-select.module.ts","./src/app/components/unit-select/unit-select.component.html","./src/app/components/unit-select/unit-select.component.ts","./src/app/guards/access.guard.ts","./src/app/guards/can-deactivate.guard.ts","./src/app/helpers/compare-with.utility.ts","./src/app/helpers/file-type.utility.ts","./src/app/helpers/guid.ts","./src/app/helpers/hard-reload.ts","./src/app/helpers/login.utility.ts","./src/app/helpers/number.utility.ts","./src/app/helpers/object.utility.ts","./src/app/helpers/string.utility.ts","./src/app/helpers/utilities.ts","./src/app/helpers/work-package-logic-helper.ts","./src/app/material.module.ts","./src/app/models/contract-model-type.enum.ts","./src/app/models/dashboard-work-package-view-type.enum.ts","./src/app/models/document-type.enum.ts","./src/app/models/non-productive-category.model.ts","./src/app/models/project-planning-filter-settings.interface.ts","./src/app/models/project-structure-filter-settings.interface.ts","./src/app/models/question-status.enum.ts","./src/app/models/sameAs.enum.ts","./src/app/models/time-tracking-row.ts","./src/app/models/time-tracking-status.enum.ts","./src/app/models/unit-level.enum.ts","./src/app/models/work-package-conclusion.enum.ts","./src/app/models/work-package-status.enum.ts","./src/app/modules/administration/non-human-resources/capacity-units.ts","./src/app/api/models/requests/contract-save.request.model.ts","./src/app/api/models/requests/unit-create.request.model.ts","./src/app/api/models/requests/unit-update.request.model.ts","./src/app/modules/administration/units/dialogs/edit-unit/edit-unit-dialog.component.html","./src/app/modules/administration/units/dialogs/edit-unit/edit-unit-dialog.component.ts","./src/app/modules/application-insights/application-insights.service.ts","./src/app/modules/dashboard/dashboard-work-packages/filter-types.ts","./src/app/modules/projects-shared/pipes/submitter-and-supplier-settings-item-label.pipe.ts","./src/app/modules/projects-shared/projects-shared.module.ts","./src/app/modules/projects-shared/services/work-package-dialog.service.ts","./src/app/services/access-control.service.ts","./src/app/api/models/dtos/activity-type.dto.model.ts","./src/app/services/activity-types.service.ts","./src/app/api/models/dtos/workpackage-supplier-setting-update.dto.model.ts","./src/app/services/additional-suppliers-and-chrcp.service.ts","./src/app/services/basic-dialog.service.ts","./src/app/services/browser-detection.service.ts","./src/app/services/collapp-dialog.service.ts","./src/app/api/models/dtos/cost-center.dto.model.ts","./src/app/services/cost-center.service.ts","./src/app/services/error-handler.service.ts","./src/app/helpers/error-message.utility.ts","./src/app/services/export.service.ts","./src/app/services/keyboard-shortcuts.service.ts","./src/app/services/layout.service.ts","./src/app/services/loading-indicator.service.ts","./src/app/services/project-scope-resolver.service.ts","./src/app/services/project-view-resolver.service.ts","./src/app/services/work-package-view-resolver.service.ts","./src/app/shared/alert/alert.component.html","./src/app/shared/alert/alert.component.ts","./src/app/shared/alert/alert.module.ts","./src/app/shared/collapp-badge/collapp-badge.component.ts","./src/app/shared/collapp-badge/collapp-badge.component.html","./src/app/shared/column-selector/column-selector.component.html","./src/app/shared/column-selector/column-selector.component.ts","./src/app/app-nav-views.ts","./src/app/shared/components/primary-nav/primary-nav.component.html","./src/app/shared/components/primary-nav/primary-nav.component.ts","./src/app/shared/constants.ts","./src/app/shared/country-name.pipe.ts","./src/app/shared/date/date.component.html","./src/app/shared/date/date.component.ts","./src/app/shared/dialogs/basic-dialog/basic.dialog.component.html","./src/app/shared/dialogs/basic-dialog/basic.dialog.component.ts","./src/app/shared/dialogs/notification-dialog/notification-dialog.component.html","./src/app/shared/dialogs/notification-dialog/notification-dialog.component.ts","./src/app/shared/gate.pipe.ts","./src/app/shared/role.pipe.ts","./src/app/shared/column-selector/column-selector-menu.component.html","./src/app/shared/column-selector/column-selector-menu.component.ts","./src/app/shared/index.ts","./src/app/shared/person-list-item/person-list-item.component.ts","./src/app/shared/person-list-item/person-list-item.component.html","./src/app/shared/progress-bar/progress-bar.component.ts","./src/app/shared/progress-bar/progress-bar.component.html","./src/app/models/project-status.enum.ts","./src/app/shared/project-status.pipe.ts","./src/app/shared/responsibles-tooltip.pipe.ts","./src/app/shared/responsibles.pipe.ts","./src/app/shared/show-more/show-more.component.ts","./src/app/shared/show-more/show-more.component.html","./src/app/shared/toasty/index.ts","./src/app/shared/toasty/safe.pipe.ts","./src/app/shared/toasty/toast.component.html","./src/app/shared/toasty/toast.component.ts","./src/app/shared/toasty/toasty.component.html","./src/app/shared/toasty/toasty.component.ts","./src/app/shared/toasty/toasty.service.ts","./src/app/shared/toasty/toasty.utils.ts","./src/app/shared/unit.pipe.ts","./src/app/state/base-data/base-data.actions.ts","./src/app/state/base-data/base-data.state.ts","./src/app/state/base-data/base-data.selectors.ts","./src/app/state/index.ts","./src/app/state/project/project.actions.ts","./src/app/state/project/project.state.ts","./src/app/state/project/project.selectors.ts","./src/app/state/settings/activities/activities.actions.ts","./src/app/state/settings/activities/activities.state.ts","./src/app/state/settings/activities/activities.selectors.ts","./src/app/state/settings/attachment-list/attachment-list.actions.ts","./src/app/state/settings/attachment-list/attachment-list.selectors.ts","./src/app/state/settings/attachment-list/attachment-list.state.ts","./src/app/state/settings/dashboard/dashboard.actions.ts","./src/app/state/settings/dashboard/dashboard.state.ts","./src/app/state/settings/dashboard/dashboard.selectors.ts","./src/app/state/settings/generic-list/generic-list.state.ts","./src/app/state/settings/settings.actions.ts","./src/app/state/settings/timecards/timecards.actions.ts","./src/app/state/settings/timecards/timecards.state.ts","./src/app/state/settings/timecards/timecards.selectors.ts","./src/app/state/settings/timecard-range/timecard-range.actions.ts","./src/app/state/settings/timecard-range/timecard-range.state.ts","./src/app/state/settings/work-package-planning-range/work-package-planning-range.actions.ts","./src/app/state/settings/work-package-planning-range/work-package-planning-range.state.ts","./src/app/state/settings/work-package-planning-totals/work-package-planning-totals.actions.ts","./src/app/state/settings/work-package-planning-totals/work-package-planning-totals.state.ts","./src/app/state/settings/work-package-sidepanel/work-package-sidepanel.state.ts","./src/app/state/settings/settings.state.ts","./src/app/state/settings/settings.selectors.ts","./src/app/state/settings/timecard-range/timecard-range.selectors.ts","./src/app/state/settings/work-package-planning-range/work-package-planning-range.selectors.ts","./src/app/state/settings/work-package-planning-totals/work-package-planning-totals.selectors.ts","./src/app/state/settings/work-package-sidepanel/work-package-sidepanel.selectors.ts","./src/app/state/settings/user-planning-sidepanel-index/user-planning-sidepanel-index.actions.ts","./src/app/state/settings/user-planning-sidepanel-index/user-planning-sidepanel-index.state.ts","./src/app/state/settings/user-planning-sidepanel-index/user-planning-sidepanel-index.selectors.ts","./src/app/state/settings/work-package-sidepanel-index/work-package-sidepanel-index.actions.ts","./src/app/state/settings/work-package-sidepanel-index/work-package-sidepanel-index.state.ts","./src/app/state/settings/work-package-sidepanel-index/work-package-sidepanel-index.selectors.ts","./src/app/state/settings/non-human-resource-list/non-human-resource-list.state.ts","./src/app/state/settings/non-human-resource-list/non-human-resource-list.selectors.ts","./src/app/state/settings/non-human-resource-list/non-human-resource-list.actions.ts","./src/app/state/settings/non-human-resource-planning-list/non-human-resource-planning-list.actions.ts","./src/app/api/meta-info/non-human-resources-planning-list.info.ts","./src/app/state/settings/non-human-resource-planning-list/non-human-resource-planning-list.state.ts","./src/app/state/settings/non-human-resource-planning-list/non-human-resource-planning-list.selectors.ts","./src/app/state/settings/project-list/project-list.state.ts","./src/app/state/settings/project-list/project-list.selectors.ts","./src/app/state/settings/project-list/project-list.actions.ts","./src/app/state/settings/project-planning-range/project-planning-range.actions.ts","./src/app/state/settings/project-planning-range/project-planning-range.state.ts","./src/app/state/settings/project-planning-totals/project-planning-totals.actions.ts","./src/app/state/settings/project-planning-totals/project-planning-totals.state.ts","./src/app/state/settings/questions-list/questions-list.state.ts","./src/app/state/settings/questions-list/questions-list.selectors.ts","./src/app/state/settings/questions-list/questions-list.actions.ts","./src/app/state/settings/skills/skills.actions.ts","./src/app/state/settings/skills/skills.selectors.ts","./src/app/state/settings/skills/skills.state.ts","./src/app/state/settings/timecard-view-expands/timecard-view-expands.actions.ts","./src/app/state/settings/timecard-view-expands/timecard-view-expands.state.ts","./src/app/state/settings/timesheet-range/timesheet-range.actions.ts","./src/app/state/settings/timesheet-range/timesheet-range.selectors.ts","./src/app/state/settings/timesheet-range/timesheet-range.state.ts","./src/app/state/settings/timesheet-totals/timesheet-totals.actions.ts","./src/app/state/settings/timesheet-totals/timesheet-totals.selectors.ts","./src/app/state/settings/timesheet-totals/timesheet-totals.state.ts","./src/app/state/settings/timesheet/timesheet.actions.ts","./src/app/state/settings/timesheet/timesheet.selectors.ts","./src/app/state/settings/timesheet/timesheet.state.ts","./src/app/state/settings/unit-list/unit-list.state.ts","./src/app/state/settings/unit-list/unit-list.selectors.ts","./src/app/state/settings/unit-list/unit-list.actions.ts","./src/app/state/settings/unit-planning-range/unit-planning-range.actions.ts","./src/app/state/settings/unit-planning-range/unit-planning-range.selectors.ts","./src/app/state/settings/unit-planning-range/unit-planning-range.state.ts","./src/app/state/settings/unit-planning-sidepanel-index/unit-planning-sidepanel-index.actions.ts","./src/app/state/settings/unit-planning-sidepanel-index/unit-planning-sidepanel-index.selectors.ts","./src/app/state/settings/unit-planning-sidepanel-index/unit-planning-sidepanel-index.state.ts","./src/app/state/settings/unit-planning-sidepanel/unit-planning-sidepanel.actions.ts","./src/app/state/settings/unit-planning-sidepanel/unit-planning-sidepanel.selectors.ts","./src/app/state/settings/unit-planning-sidepanel/unit-planning-sidepanel.state.ts","./src/app/state/settings/unit-planning-totals/unit-planning-totals.actions.ts","./src/app/state/settings/unit-planning-totals/unit-planning-totals.selectors.ts","./src/app/state/settings/unit-planning-totals/unit-planning-totals.state.ts","./src/app/state/settings/unit-planning/unit-planning.actions.ts","./src/app/state/settings/unit-planning/unit-planning.state.ts","./src/app/state/settings/user-list/user-list.state.ts","./src/app/state/settings/user-list/user-list.selectors.ts","./src/app/state/settings/user-list/user-list.actions.ts","./src/app/state/settings/user-planning-range/user-planning-range.actions.ts","./src/app/state/settings/user-planning-range/user-planning-range.selectors.ts","./src/app/state/settings/user-planning-range/user-planning-range.state.ts","./src/app/state/settings/user-planning-sidepanel/user-planning-sidepanel.selectors.ts","./src/app/state/settings/user-planning-sidepanel/user-planning-sidepanel.actions.ts","./src/app/state/settings/user-planning-sidepanel/user-planning-sidepanel.state.ts","./src/app/state/settings/user-planning-totals/user-planning-totals.selectors.ts","./src/app/state/settings/user-planning-totals/user-planning-totals.actions.ts","./src/app/state/settings/user-planning-totals/user-planning-totals.state.ts","./src/app/state/settings/user-resource-list/user-resource-list.actions.ts","./src/app/state/settings/user-resource-list/user-resource-list.selectors.ts","./src/app/api/meta-info/user-resources-list.info.ts","./src/app/state/settings/user-resource-list/user-resource-list.state.ts","./src/app/state/settings/work-package-list/work-package-list.state.ts","./src/app/state/settings/work-package-list/work-package-list.selectors.ts","./src/app/state/settings/work-package-list/work-package-list.actions.ts","./src/app/state/settings/work-package-question-list/work-package-question-list.actions.ts","./src/app/api/meta-info/work-package-questions-list.info.ts","./src/app/state/settings/work-package-question-list/work-package-question-list.state.ts","./src/app/state/settings/work-package-question-list/work-package-question-list.selectors.ts","./src/app/state/settings/work-package-sidepanel/work-package-sidepanel.actions.ts","./src/app/state/settings/work-package/work-package.actions.ts","./src/app/state/settings/work-package/work-package.state.ts","./src/app/state/settings/work-package/work-package.selectors.ts","./src/app/state/user/user.actions.ts","./src/app/state/user/user.selectors.ts","./src/app/state/user/user.state.ts","./src/environments/environment.integration.ts","./src/app/http-interceptors/index.ts","./src/app/http-interceptors/impersonation-interceptor.ts","./src/app/http-interceptors/app-insights-interceptor.ts","./src/app/services/clipboard.service.ts","./src/app/services/global-error-handler.service.ts","./src/app/guards/login.guard.ts","./src/app/app.providers.ts","./src/app/helpers/custom-preloading-strategy.ts","./src/app/components/not-found/not-found.component.ts","./src/app/components/not-found/not-found.component.html","./src/app/models/default-user-landing-page-type.enum.ts","./src/app/components/login/login.component.html","./src/app/components/login/login.component.ts","./src/app/components/no-access/no-access.component.ts","./src/app/components/no-access/no-access.component.html","./src/app/components/logout/logout.component.html","./src/app/components/logout/logout.component.ts","./src/app/components/redirect.component.ts","./src/app/app-routing.module.ts","./src/app/msal-redirect.component.ts","./src/app/modules/application-insights/application-insights.module.ts","./src/app/helpers/CustomMissingTranslationHandler.class.ts","./src/app/app.module.ts","./src/module-decorators.ts","./src/main.ts","./node_modules/moment/locale/ sync de-ch"],"sourcesContent":["import { Injectable } from '@angular/core';\nimport { HttpUrlEncodingCodec } from '@angular/common/http';\n\n/**\n * @TODO Check this Angular Bug concerning HttpUrlEncoding : https://github.com/angular/angular/issues/18261\n */\n@Injectable({\n providedIn: 'root',\n})\nexport class CustomHttpUrlEncodingCodec extends HttpUrlEncodingCodec {\n encodeKey(key: string): string {\n return encodeURIComponent(key);\n }\n\n encodeValue(value: string): string {\n return encodeURIComponent(value);\n }\n}\n","import { HttpParams } from '@angular/common/http';\nimport { JsonObject, JsonValue } from '@angular-devkit/core';\nimport { CustomHttpUrlEncodingCodec } from './custom-http-url-encoding-codec';\n\n/** Params used to construct an `CustomHttpParams` instance. */\nexport type CustomHttpParamsObject = Record;\n\n/**\n * The operation identifier for `CustomHttpParams.clone`.\n */\nconst enum Operation {\n APPEND,\n SET,\n DELETE,\n}\n\n/**\n * @TODO Check this Angular Bug concerning HttpUrlEncoding : https://github.com/angular/angular/issues/18261\n *\n * An HTTP request/response body that represents serialized parameters,\n * per the MIME type `application/x-www-form-urlencoded`.\n *\n * This class is immutable - all mutation operations return a new instance.\n */\nexport class CustomHttpParams /* implements HttpParams */ {\n private map: Map;\n\n private encoder: CustomHttpUrlEncodingCodec = new CustomHttpUrlEncodingCodec();\n\n constructor(params: CustomHttpParamsObject | Map = {} as CustomHttpParamsObject) {\n if (params instanceof Map) {\n this.map = new Map(params);\n } else {\n const map = new Map();\n const jsonObject = this.toJsonValue(params) as JsonObject;\n Object\n .keys(jsonObject)\n .forEach((key) => {\n this.parseJsonValueIntoMap(jsonObject[key], key, map);\n });\n this.map = map;\n }\n }\n\n /**\n * Check whether the body has one or more values for the given parameter name.\n */\n has(param: string): boolean {\n return this.map.has(param);\n }\n\n /**\n * Get the first value for the given parameter name, or `null` if it's not present.\n */\n get(param: string): string | null {\n const res = this.map.get(param);\n\n return res != null ? res : null;\n }\n\n /**\n * Get all the parameter names for this body.\n */\n keys(): string[] {\n return Array.from(this.map ? this.map.keys() : []);\n }\n\n /**\n * Construct a new body with an appended value for the given parameter name.\n */\n append(param: string, value: any): CustomHttpParams {\n if (value == null) {\n return this.delete(param);\n }\n\n return this.clone(param, this.toJsonValue(value), Operation.APPEND);\n }\n\n /**\n * Construct a new body with a new value for the given parameter name.\n */\n set(param: string, value: any): CustomHttpParams {\n if (value == null) {\n return this.delete(param);\n }\n\n return this.clone(param, this.toJsonValue(value), Operation.SET);\n }\n\n /**\n * Construct a new body with all values for the given parameter removed.\n */\n delete(param: string): CustomHttpParams {\n return this.clone(param, undefined, Operation.DELETE);\n }\n\n /**\n * Construct a `HttpParams` object with all the current parameters.\n */\n toHttpParams(): HttpParams {\n return new HttpParams({\n fromObject: this.keys()\n .reduce((obj, key) => ({ ...obj, [key]: this.get(key)! }), {} as Record),\n encoder: new CustomHttpUrlEncodingCodec(),\n });\n }\n\n /**\n * Serialize the body to an encoded string, where key-value pairs (separated by `=`) are\n * separated by `&`s.\n */\n toString(): string {\n return this.keys()\n .map((key) => `${this.encoder.encodeKey(key)}=${this.encoder.encodeValue(this.map.get(key)!)}`)\n .join('&');\n }\n\n /**\n * Returns a clone of the object according to the operation provided.\n */\n private clone(param: string, value: JsonValue | undefined, operation: Operation): CustomHttpParams {\n const map: Map = new Map();\n let paramSet = false;\n\n if (operation !== Operation.APPEND) {\n this.keys()\n .forEach((key) => {\n // Check if key and param might be the same\n if (key.indexOf(param) === 0) {\n const nextChar = key.substr(param.length, 1);\n const isExactParamMatch = (nextChar === '' || nextChar === '[');\n if (!isExactParamMatch) {\n // If key and param are not an exact match, just add the existing key-value pair\n map.set(key, this.map.get(key)!);\n } else if (operation === Operation.SET && !paramSet) {\n // On the first call, replace existing key with param.\n // Remove all matches on subsequent calls (skipped).\n // e.g. `param` will be set and `param[second]` will be ignored.\n paramSet = true;\n this.parseJsonValueIntoMap(value as JsonValue, param, map);\n }\n // else:\n // operation == DELETE : just skip setting the param\n // operation == SET and param was already set : skip to remove obsolete params\n } else {\n // If key and param are not the same, just add the existing key-value pair\n map.set(key, this.map.get(key)!);\n }\n });\n }\n\n if (\n operation === Operation.APPEND\n || (operation === Operation.SET && !paramSet)\n ) {\n this.parseJsonValueIntoMap(value as JsonValue, param, map);\n }\n\n return new CustomHttpParams(map);\n }\n\n /**\n * Converts an object to basic JSON values.\n */\n private toJsonValue(obj: Record): JsonValue {\n return JSON.parse(JSON.stringify(obj));\n }\n\n /**\n * Called recursively to construct HTTP param key-value pairs from nested objects.\n */\n private parseJsonValueIntoMap(obj: JsonValue, prefix: string, httpParamsMap: Map): void {\n if (obj != null && typeof obj !== 'function') {\n if (Array.isArray(obj)) {\n for (let i = 0; i < obj.length; i += 1) {\n this.parseJsonValueIntoMap(obj[i], `${prefix}[${i}]`, httpParamsMap);\n }\n } else if (typeof obj !== 'object') {\n // This is primitive value (string, number, boolean)\n httpParamsMap.set(prefix, `${obj}`);\n } else {\n // This is an object\n Object\n .keys(obj)\n .forEach((key) => {\n this.parseJsonValueIntoMap(obj[key], `${prefix}[${key}]`, httpParamsMap);\n });\n }\n }\n }\n}\n","import moment from 'moment';\nimport { SkillFilterDto } from '../../interfaces/dtos/skill-filter.dto';\n\nexport class UserAvailableResourcesRequestModel {\n constructor(\n private startDate?: moment.Moment,\n private endDate?: moment.Moment,\n private unitId?: number,\n private filteredProjectId?: number,\n private workPackageId?: number,\n private excludedUserIds?: string[],\n private excludedNhrIds?: string[],\n private fullName?: string,\n private year?: number,\n private week?: number,\n private numberOfWeeks?: number,\n private pageNumber?: number,\n private pageSize?: number,\n private skills?: SkillFilterDto[],\n ) {\n }\n}\n","/* eslint-disable max-classes-per-file */\nimport { SortDirection } from '@angular/material/sort';\nimport moment from 'moment';\nimport { UserColumnFilters } from './filter-columns';\nimport { CustomHttpParams } from './custom-http-params';\nimport { isEmpty } from '../helpers/utilities';\nimport { UserAvailableResourcesRequestModel } from './models/requests/user-available-resources.request.model';\nimport { SkillFilterDto } from './interfaces/dtos/skill-filter.dto';\n\nexport class ListQueryOptions {\n /**\n * Derived from pageIndex parameter:\n * API is not zero-index based.\n */\n private readonly pageNumber?: number;\n\n constructor(\n protected pageIndex?: number,\n protected pageSize?: number,\n protected columnFilters?: Record,\n protected sortColumn?: string,\n protected sortDirection?: SortDirection,\n ) {\n // API is not zero-index based.\n this.pageNumber = (pageIndex != null ? pageIndex + 1 : undefined);\n this.sortColumn = (!isEmpty(sortColumn) ? sortColumn : undefined);\n this.sortDirection = (!isEmpty(sortDirection) ? sortDirection : undefined);\n }\n\n /**\n * Uses a template-builder based approach to generate the query parameters\n */\n toHttpParams(): CustomHttpParams {\n return new CustomHttpParams({\n pageNumber: this.pageNumber,\n pageSize: this.pageSize,\n columnFilters: this.columnFilters,\n sortColumn: this.sortColumn,\n sortDirection: this.sortDirection,\n });\n }\n\n getPageNumber(): number {\n return this.pageNumber || 1;\n }\n}\n\nexport class UserListQueryOptions extends ListQueryOptions {\n constructor(\n pageIndex?: number,\n pageSize?: number,\n columnFilters?: UserColumnFilters,\n sortColumn?: string,\n sortDirection?: SortDirection,\n private localOnly?: boolean,\n private validOnly?: boolean,\n public unitId?: number,\n public includeSupplierUsers?: boolean,\n public onlyCoordinators?: boolean,\n public isForWpCreator?: boolean,\n ) {\n super(pageIndex, pageSize, columnFilters, sortColumn, sortDirection);\n }\n\n toHttpParams(): CustomHttpParams {\n return super.toHttpParams()\n .set('localOnly', this.localOnly)\n .set('unitId', this.unitId)\n .set('includeSupplierUsers', this.includeSupplierUsers)\n .set('onlyCoordinators', this.onlyCoordinators)\n .set('isForWpCreator', this.isForWpCreator);\n }\n}\n\nexport class UserResourceListQueryOptions extends UserListQueryOptions {\n constructor(\n unitId?: number,\n private projectId?: number,\n private workPackageId?: number,\n private excludedUserIds?: string[],\n private excludedNhrIds?: string[],\n private fullName?: string,\n pageIndex?: number,\n pageSize?: number,\n sortColumn?: string,\n sortDirection?: SortDirection,\n private validFrom?: moment.Moment,\n private validUntil?: moment.Moment,\n private year?: number,\n private week?: number,\n private numberOfWeeks?: number,\n private skills?: SkillFilterDto[],\n ) {\n super(pageIndex, pageSize, undefined, sortColumn, sortDirection, undefined, undefined, unitId);\n\n this.validFrom = (validFrom ? validFrom.clone() : undefined);\n this.validUntil = (validUntil ? validUntil.clone() : undefined);\n }\n\n generateRequestModel(): UserAvailableResourcesRequestModel {\n return new UserAvailableResourcesRequestModel(\n this.validFrom,\n this.validUntil,\n this.unitId,\n this.projectId,\n this.workPackageId,\n this.excludedUserIds,\n this.excludedNhrIds,\n this.fullName,\n this.year,\n this.week,\n this.numberOfWeeks,\n super.getPageNumber(),\n this.pageSize,\n this.skills,\n );\n }\n}\n\nexport class WorkPackageListOptions extends ListQueryOptions {}\n\nexport class UnitQuestionsListOptions extends ListQueryOptions {}\n","import { ListColumnInfo, ListColumnsInfo, ObjectPropertyNames } from './base';\nimport { AttachmentColumnFilters } from '../filter-columns';\nimport { AttachmentSlimDto } from '../interfaces/dtos/attachment-slim.dto';\nimport { ReadonlyCompleteMap } from '../../app.types';\n\nexport type AttachmentsListColumnKey = ObjectPropertyNames;\n\n// This defines the object that should implement all properties of 'AttachmentSlimDto' exactly.\n// It's used for linting mostly and discarded later.\nconst attachmentsListColumnsInfoObj: ListColumnsInfo = {\n attachmentId: {\n label: 'Attachment ID',\n selected: false,\n selectable: false,\n sortable: false,\n filterable: false,\n },\n projectId: {\n label: 'Project ID',\n selected: false,\n selectable: false,\n sortable: false,\n filterable: false,\n },\n workPackageId: {\n label: 'Work Package ID',\n selected: false,\n selectable: false,\n sortable: false,\n filterable: false,\n },\n questionId: {\n label: 'Question ID',\n selected: false,\n selectable: false,\n sortable: false,\n filterable: false,\n },\n documentType: {\n label: 'Document Type',\n selected: false,\n selectable: false,\n sortable: true,\n filterable: false,\n },\n fileName: {\n label: 'Name',\n selected: true,\n selectable: true,\n sortable: true,\n filterable: false,\n },\n fileType: {\n label: 'Type',\n selected: true,\n selectable: true,\n sortable: true,\n filterable: false,\n },\n fileSize: {\n label: 'Size',\n selected: true,\n selectable: true,\n sortable: true,\n filterable: true,\n },\n uploader: {\n label: 'Uploader',\n selected: true,\n selectable: true,\n sortable: true,\n filterable: false,\n },\n uploadedOn: {\n label: 'Uploaded',\n selected: true,\n selectable: true,\n sortable: true,\n filterable: false,\n },\n outdater: {\n label: 'Outdater',\n selected: true,\n selectable: true,\n sortable: true,\n filterable: true,\n },\n outdatedOn: {\n label: 'Outdated',\n selected: false,\n selectable: false,\n sortable: false,\n filterable: false,\n },\n outdatedComment: {\n label: 'Outdated Comment',\n selected: false,\n selectable: false,\n sortable: false,\n filterable: false,\n },\n metadata: {\n label: 'Metadata',\n selected: false,\n selectable: false,\n sortable: false,\n filterable: false,\n },\n url: {\n label: 'Url',\n selected: false,\n selectable: false,\n sortable: false,\n filterable: false,\n },\n validUntil: {\n label: 'Valid until',\n selected: false,\n selectable: false,\n sortable: false,\n filterable: false,\n },\n};\n\n// Defines the sorting of columns!!!\n// The Map is not really readonly - we just pretend that it is :)\nexport const attachmentsListColumnsInfo: ReadonlyCompleteMap = new Map([\n ['documentType', attachmentsListColumnsInfoObj.documentType],\n ['fileName', attachmentsListColumnsInfoObj.fileName],\n ['fileType', attachmentsListColumnsInfoObj.fileType],\n ['fileSize', attachmentsListColumnsInfoObj.fileSize],\n ['uploader', attachmentsListColumnsInfoObj.uploader],\n ['uploadedOn', attachmentsListColumnsInfoObj.uploadedOn],\n ['outdater', attachmentsListColumnsInfoObj.outdater],\n ['outdatedOn', attachmentsListColumnsInfoObj.outdatedOn],\n]) as ReadonlyCompleteMap;\n\n/* eslint-disable @typescript-eslint/no-unused-vars */\n\nexport const attachmentsListColumnsWithFilters: (keyof AttachmentColumnFilters)[] = Array.from(\n attachmentsListColumnsInfo.entries(),\n)\n .filter(([_key, value]) => value.filterable)\n .map(([key, _value]) => key as keyof AttachmentColumnFilters);\n\n/* eslint-enable @typescript-eslint/no-unused-vars */\n","import { ListColumnInfo, ListColumnsInfo, ObjectPropertyNames } from './base';\nimport { UnitColumnFilters } from '../filter-columns';\nimport { ReadonlyCompleteMap } from '../../app.types';\nimport { NonHumanResourceListDto } from '../interfaces/dtos/non-human-resource-list.dto';\n\nexport type NonHumanResourcesListColumnKey = ObjectPropertyNames;\n\n// This defines the object that should implement all properties of 'NonHumanResourceListDto' exactly.\n// It's used for linting mostly and discarded later.\nconst nonHumanResourcesListColumnsInfoObj: ListColumnsInfo = {\n systemId: {\n label: 'System ID',\n selected: true,\n selectable: true,\n sortable: true,\n filterable: true,\n },\n name: {\n label: 'Name',\n selected: true,\n selectable: true,\n sortable: true,\n filterable: true,\n },\n remark: {\n label: 'Remark',\n selected: true,\n selectable: true,\n sortable: true,\n filterable: true,\n },\n type: {\n label: 'Type',\n selected: true,\n selectable: true,\n sortable: true,\n filterable: true,\n },\n version: {\n label: 'Version',\n selected: true,\n selectable: true,\n sortable: true,\n filterable: true,\n },\n serialNumber: {\n label: 'Serial Number',\n selected: true,\n selectable: true,\n sortable: true,\n filterable: true,\n },\n unitId: {\n label: 'Unit ID',\n selected: false,\n selectable: false,\n sortable: false,\n filterable: false,\n },\n unitName: {\n label: 'Unit',\n selected: true,\n selectable: true,\n sortable: true,\n filterable: true,\n },\n unitCoordinatorFullName: {\n label: 'Unit Coordinator',\n selected: true,\n selectable: true,\n sortable: true,\n filterable: true,\n },\n validFrom: {\n label: 'Valid From',\n selected: true,\n selectable: true,\n sortable: true,\n filterable: true,\n },\n validUntil: {\n label: 'Valid Until',\n selected: true,\n selectable: true,\n sortable: true,\n filterable: true,\n },\n countryCode: {\n label: 'Country Code',\n selected: false,\n selectable: false,\n sortable: false,\n filterable: false,\n },\n countryName: {\n label: 'Country',\n selected: true,\n selectable: true,\n sortable: true,\n filterable: true,\n },\n nonHumanResourceId: {\n label: 'Equipment, Infrastructure, Tools ID',\n selected: false,\n selectable: false,\n sortable: false,\n filterable: false,\n },\n workingHoursPerWeek: {\n label: 'Working Hours Per Week',\n selected: false,\n selectable: true,\n sortable: true,\n filterable: true,\n },\n payrollCompany: {\n label: 'Payroll Company',\n selected: false,\n selectable: true,\n sortable: true,\n filterable: true,\n },\n costCenter: {\n label: 'Cost Center',\n selected: false,\n selectable: true,\n sortable: true,\n filterable: true,\n },\n city: {\n label: 'City',\n selected: false,\n selectable: true,\n sortable: true,\n filterable: true,\n },\n divisionCode: {\n label: 'Division',\n selected: false,\n selectable: true,\n sortable: true,\n filterable: true,\n },\n businessUnitCode: {\n label: 'Business Unit',\n selected: false,\n selectable: true,\n sortable: true,\n filterable: true,\n },\n productGroupCode: {\n label: 'Product Group',\n selected: false,\n selectable: true,\n sortable: true,\n filterable: true,\n },\n hourlyRateCategory: {\n label: 'common.hrc',\n selected: false,\n selectable: true,\n sortable: true,\n filterable: true,\n },\n};\n\n// Defines the sorting of columns!!!\n// The Map is not really readonly - we just pretend that it is :)\nexport const nonHumanResourcesListColumnsInfo: ReadonlyCompleteMap<\nNonHumanResourcesListColumnKey,\nListColumnInfo\n> = new Map([\n ['systemId', nonHumanResourcesListColumnsInfoObj.systemId],\n ['nonHumanResourceId', nonHumanResourcesListColumnsInfoObj.nonHumanResourceId],\n ['name', nonHumanResourcesListColumnsInfoObj.name],\n ['countryCode', nonHumanResourcesListColumnsInfoObj.countryCode],\n ['countryName', nonHumanResourcesListColumnsInfoObj.countryName],\n ['city', nonHumanResourcesListColumnsInfoObj.city],\n ['hourlyRateCategory', nonHumanResourcesListColumnsInfoObj.hourlyRateCategory],\n ['workingHoursPerWeek', nonHumanResourcesListColumnsInfoObj.workingHoursPerWeek],\n ['remark', nonHumanResourcesListColumnsInfoObj.remark],\n ['type', nonHumanResourcesListColumnsInfoObj.type],\n ['version', nonHumanResourcesListColumnsInfoObj.version],\n ['serialNumber', nonHumanResourcesListColumnsInfoObj.serialNumber],\n ['costCenter', nonHumanResourcesListColumnsInfoObj.costCenter],\n ['payrollCompany', nonHumanResourcesListColumnsInfoObj.payrollCompany],\n ['divisionCode', nonHumanResourcesListColumnsInfoObj.divisionCode],\n ['businessUnitCode', nonHumanResourcesListColumnsInfoObj.businessUnitCode],\n ['productGroupCode', nonHumanResourcesListColumnsInfoObj.productGroupCode],\n ['validFrom', nonHumanResourcesListColumnsInfoObj.validFrom],\n ['validUntil', nonHumanResourcesListColumnsInfoObj.validUntil],\n ['unitName', nonHumanResourcesListColumnsInfoObj.unitName],\n ['unitId', nonHumanResourcesListColumnsInfoObj.unitId],\n ['unitCoordinatorFullName', nonHumanResourcesListColumnsInfoObj.unitCoordinatorFullName],\n]) as ReadonlyCompleteMap;\n\n/* eslint-disable @typescript-eslint/no-unused-vars */\n\nexport const nonHumanResourcesListColumnsWithFilters: (keyof UnitColumnFilters)[] = Array.from(\n nonHumanResourcesListColumnsInfo.entries(),\n)\n .filter(([_key, value]) => value.filterable)\n .map(([key, _value]) => key as keyof UnitColumnFilters);\n\n/* eslint-enable @typescript-eslint/no-unused-vars */\n","import { ListColumnInfo, ListColumnsInfo, ObjectPropertyNames } from './base';\nimport { ProjectColumnFilters } from '../filter-columns';\nimport { ReadonlyCompleteMap } from '../../app.types';\nimport { ProjectListViewDto } from '../interfaces/dtos/project-list-view';\n\nexport type ProjectsListColumnKey = ObjectPropertyNames;\n\n// This defines the object that should implement all properties of 'ProjectListDto' exactly.\n// It's used for linting mostly and discarded later.\nconst projectsListColumnsInfoObj: ListColumnsInfo = {\n projectId: {\n label: 'Project ID',\n selected: false,\n selectable: false,\n sortable: false,\n filterable: false,\n },\n sapNumber: {\n label: 'Sap Number',\n selected: false,\n selectable: false,\n sortable: false,\n filterable: true,\n },\n projectNumber: {\n label: 'Number',\n selected: true,\n selectable: true,\n sortable: true,\n filterable: true,\n },\n title: {\n label: 'Project Title',\n selected: true,\n selectable: true,\n sortable: true,\n filterable: true,\n },\n scope: {\n label: 'Description',\n selected: false,\n selectable: false,\n sortable: false,\n filterable: false,\n },\n projectManagerFullName: {\n label: 'Project Manager',\n selected: true,\n selectable: true,\n sortable: true,\n filterable: true,\n },\n technicalProjectManagerFullName: {\n label: 'Technical Project Manager',\n selected: true,\n selectable: true,\n sortable: true,\n filterable: true,\n },\n submitterUnitName: {\n label: 'Submitter Unit',\n selected: false,\n selectable: true,\n sortable: true,\n filterable: true,\n },\n gateName: {\n label: 'Gate',\n selected: true,\n selectable: true,\n sortable: true,\n filterable: true,\n },\n customerCountryCode: {\n label: 'Customer Country',\n selected: true,\n selectable: true,\n sortable: true,\n filterable: true,\n },\n placeOfManufacturingCountryCode: {\n label: 'Place of Manufacturing Country',\n selected: false,\n selectable: true,\n sortable: true,\n filterable: true,\n },\n emtOrderFromUnitName: {\n label: 'EMT-Order From Unit',\n selected: false,\n selectable: true,\n sortable: true,\n filterable: true,\n },\n emtOrderFromCountryCode: {\n label: 'EMT-Order From Country',\n selected: false,\n selectable: true,\n sortable: true,\n filterable: true,\n },\n status: {\n label: 'Status',\n selected: true,\n selectable: true,\n sortable: true,\n filterable: true,\n },\n projectTypeCode: {\n label: 'Type',\n selected: false,\n selectable: true,\n sortable: true,\n filterable: true,\n },\n payrollCompany: {\n label: 'Payroll Company',\n selected: false,\n selectable: true,\n sortable: true,\n filterable: true,\n },\n reportedHours: {\n label: 'Total Reported Hours',\n selected: false,\n selectable: false,\n sortable: false,\n filterable: false,\n },\n percentDone: {\n label: '% Done',\n selected: true,\n selectable: true,\n sortable: true,\n filterable: true,\n },\n projectUserStatus: {\n label: 'Project Status',\n selected: false,\n selectable: true,\n sortable: true,\n filterable: true,\n },\n};\n\n// Defines the sorting of columns!!!\n// The Map is not really readonly - we just pretend that it is :)\nexport const projectsListColumnsInfo: ReadonlyCompleteMap<\nProjectsListColumnKey,\nListColumnInfo\n> = new Map([\n ['projectId', projectsListColumnsInfoObj.projectId],\n ['sapNumber', projectsListColumnsInfoObj.sapNumber],\n ['projectNumber', projectsListColumnsInfoObj.projectNumber],\n ['title', projectsListColumnsInfoObj.title],\n ['scope', projectsListColumnsInfoObj.scope],\n ['projectManagerFullName', projectsListColumnsInfoObj.projectManagerFullName],\n ['technicalProjectManagerFullName', projectsListColumnsInfoObj.technicalProjectManagerFullName],\n ['submitterUnitName', projectsListColumnsInfoObj.submitterUnitName],\n ['gateName', projectsListColumnsInfoObj.gateName],\n ['customerCountryCode', projectsListColumnsInfoObj.customerCountryCode],\n ['placeOfManufacturingCountryCode', projectsListColumnsInfoObj.placeOfManufacturingCountryCode],\n ['emtOrderFromUnitName', projectsListColumnsInfoObj.emtOrderFromUnitName],\n ['emtOrderFromCountryCode', projectsListColumnsInfoObj.emtOrderFromCountryCode],\n ['status', projectsListColumnsInfoObj.status],\n ['projectTypeCode', projectsListColumnsInfoObj.projectTypeCode],\n ['payrollCompany', projectsListColumnsInfoObj.payrollCompany],\n ['percentDone', projectsListColumnsInfoObj.percentDone],\n ['projectUserStatus', projectsListColumnsInfoObj.projectUserStatus],\n]) as ReadonlyCompleteMap;\n\n/* eslint-disable @typescript-eslint/no-unused-vars */\n\nexport const projectsListColumnsWithFilters: (keyof ProjectColumnFilters)[] = Array.from(\n projectsListColumnsInfo.entries(),\n)\n .filter(([_key, value]) => value.filterable)\n .map(([key, _value]) => key as keyof ProjectColumnFilters);\n\n/* eslint-enable @typescript-eslint/no-unused-vars */\n","import { ListColumnInfo, ListColumnsInfo, ObjectPropertyNames } from './base';\nimport { QuestionsColumnFilters } from '../filter-columns';\nimport { ReadonlyCompleteMap } from '../../app.types';\nimport { QuestionListItemDtoModel } from '../models/dtos/question-list-item.dto.model';\n\nexport type QuestionsViewListColumnKeys = ObjectPropertyNames;\nconst questionsViewListColumnsInfoObj: ListColumnsInfo = {\n projectId: {\n label: 'Project Id',\n selected: false,\n selectable: false,\n sortable: false,\n filterable: false,\n },\n workPackageId: {\n label: 'Work Package ID',\n selected: false,\n selectable: false,\n sortable: false,\n filterable: false,\n },\n workPackageDisplayId: {\n label: 'Work Package ID',\n selected: true,\n selectable: true,\n sortable: true,\n filterable: true,\n },\n workPackageTitle: {\n label: 'Work Package Name',\n selected: true,\n selectable: true,\n sortable: true,\n filterable: true,\n },\n projectTitle: {\n label: 'Project',\n selected: true,\n selectable: true,\n sortable: true,\n filterable: true,\n },\n questionTitle: {\n label: 'Question Title',\n selected: true,\n selectable: true,\n sortable: true,\n filterable: true,\n },\n numberOfReplies: {\n label: 'Number of Replies',\n selected: true,\n selectable: true,\n sortable: true,\n filterable: true,\n },\n creatorFullName: {\n label: 'Created By',\n selected: true,\n selectable: true,\n sortable: true,\n filterable: true,\n },\n creatorWorkPackageRole: {\n label: 'Role of Creator',\n selected: false,\n selectable: true,\n sortable: true,\n filterable: true,\n },\n createdOn: {\n label: 'Created On',\n selected: true,\n selectable: true,\n sortable: true,\n filterable: true,\n },\n lastRepliedByFullName: {\n label: 'Last Replied By',\n selected: true,\n selectable: true,\n sortable: true,\n filterable: true,\n },\n lastRepliedOn: {\n label: 'Last Replied On',\n selected: true,\n selectable: true,\n sortable: true,\n filterable: true,\n },\n status: {\n label: 'Status',\n selected: false,\n selectable: true,\n sortable: true,\n filterable: true,\n },\n questionId: {\n label: 'Question Id',\n selected: false,\n selectable: false,\n sortable: false,\n filterable: false,\n },\n};\n\n// Defines the sorting of columns!!!\n// The Map is not really readonly - we just pretend that it is :)\nexport const questionsViewListColumnsInfo: ReadonlyCompleteMap<\nQuestionsViewListColumnKeys,\nListColumnInfo\n> = new Map([\n ['questionId', questionsViewListColumnsInfoObj.questionId],\n ['workPackageDisplayId', questionsViewListColumnsInfoObj.workPackageDisplayId],\n ['workPackageTitle', questionsViewListColumnsInfoObj.workPackageTitle],\n ['projectTitle', questionsViewListColumnsInfoObj.projectTitle],\n ['questionTitle', questionsViewListColumnsInfoObj.questionTitle],\n ['numberOfReplies', questionsViewListColumnsInfoObj.numberOfReplies],\n ['creatorFullName', questionsViewListColumnsInfoObj.creatorFullName],\n ['creatorWorkPackageRole', questionsViewListColumnsInfoObj.creatorWorkPackageRole],\n ['createdOn', questionsViewListColumnsInfoObj.createdOn],\n ['lastRepliedByFullName', questionsViewListColumnsInfoObj.lastRepliedByFullName],\n ['lastRepliedOn', questionsViewListColumnsInfoObj.lastRepliedOn],\n ['status', questionsViewListColumnsInfoObj.status],\n]) as ReadonlyCompleteMap;\n\n/* eslint-disable @typescript-eslint/no-unused-vars */\n\nexport const questionsViewListColumnsWithFilters: (keyof QuestionsColumnFilters)[] = Array.from(\n questionsViewListColumnsInfo.entries(),\n)\n .filter(([_key, value]) => value.filterable)\n .map(([key, _value]) => key as keyof QuestionsColumnFilters);\n\n/* eslint-enable @typescript-eslint/no-unused-vars */\n","import { ListColumnInfo, ListColumnsInfo, ObjectPropertyNames } from './base';\nimport { UnitColumnFilters } from '../filter-columns';\nimport { UnitListDto } from '../interfaces/dtos/unit-list.dto';\nimport { ReadonlyCompleteMap } from '../../app.types';\n\nexport type UnitsListColumnKey = ObjectPropertyNames;\n\n// This defines the object that should implement all properties of 'UnitListDto' exactly.\n// It's used for linting mostly and discarded later.\nconst unitsListColumnsInfoObj: ListColumnsInfo = {\n unitId: {\n label: 'Unit ID',\n selected: false,\n selectable: false,\n sortable: false,\n filterable: false,\n },\n code: {\n label: 'Unit Code',\n selected: true,\n selectable: true,\n sortable: true,\n filterable: true,\n },\n name: {\n label: 'Unit Name',\n selected: true,\n selectable: true,\n sortable: true,\n filterable: true,\n },\n level: {\n label: 'Unit Level',\n selected: true,\n selectable: true,\n sortable: true,\n filterable: true,\n },\n parentUnitId: {\n label: 'Parent Unit',\n selected: false,\n selectable: false,\n sortable: false,\n filterable: false,\n },\n unitCoordinatorFullName: {\n label: 'Unit Coordinator',\n selected: false,\n selectable: true,\n sortable: true,\n filterable: true,\n },\n deputyUnitCoodinators: {\n label: 'Deputy Unit Coordinators',\n selected: false,\n selectable: true,\n sortable: true,\n filterable: true,\n },\n isDisabled: {\n label: 'Disabled',\n selected: false,\n selectable: true,\n sortable: true,\n filterable: true,\n },\n};\n\n// Defines the sorting of columns!!!\n// The Map is not really readonly - we just pretend that it is :)\nexport const unitsListColumnsInfo: ReadonlyCompleteMap<\nUnitsListColumnKey,\nListColumnInfo\n> = new Map([\n ['unitId', unitsListColumnsInfoObj.unitId],\n ['code', unitsListColumnsInfoObj.code],\n ['name', unitsListColumnsInfoObj.name],\n ['level', unitsListColumnsInfoObj.level],\n ['parentUnitId', unitsListColumnsInfoObj.parentUnitId],\n ['unitCoordinatorFullName', unitsListColumnsInfoObj.unitCoordinatorFullName],\n ['deputyUnitCoodinators', unitsListColumnsInfoObj.deputyUnitCoodinators],\n ['isDisabled', unitsListColumnsInfoObj.isDisabled],\n]) as ReadonlyCompleteMap;\n\n/* eslint-disable @typescript-eslint/no-unused-vars */\n\nexport const unitsListColumnsWithFilters: (keyof UnitColumnFilters)[] = Array.from(unitsListColumnsInfo.entries())\n .filter(([_key, value]) => value.filterable)\n .map(([key, _value]) => key as keyof UnitColumnFilters);\n\n/* eslint-enable @typescript-eslint/no-unused-vars */\n","import { ListColumnInfo, ListColumnsInfo, ObjectPropertyNames } from './base';\nimport { UserColumnFilters } from '../filter-columns';\nimport { UserListDto } from '../interfaces/dtos/user-list.dto';\nimport { ReadonlyCompleteMap } from '../../app.types';\n\nexport type UsersListColumnKey = ObjectPropertyNames;\ntype UserListWithoutFullname = Omit;\n\n// This defines the object that should implement all properties of 'UserListDto' exactly.\n// It's used for linting mostly and discarded later.\nconst usersListColumnsInfoObj: ListColumnsInfo = {\n userId: {\n label: 'User ID',\n selected: false,\n selectable: false,\n sortable: false,\n filterable: false,\n },\n hitachiId: {\n label: 'Hitachi ID',\n selected: false,\n selectable: true,\n sortable: true,\n filterable: true,\n },\n globalEmployeeId: {\n label: 'Glob. Emp. ID',\n selected: false,\n selectable: true,\n sortable: true,\n filterable: true,\n },\n localEmployeeId: {\n label: 'Loc. Emp. ID',\n selected: false,\n selectable: true,\n sortable: true,\n filterable: true,\n },\n firstName: {\n label: 'First Name',\n selected: true,\n selectable: true,\n sortable: true,\n filterable: true,\n },\n lastName: {\n label: 'Last Name',\n selected: true,\n selectable: true,\n sortable: true,\n filterable: true,\n },\n email: {\n label: 'Email',\n selected: false,\n selectable: true,\n sortable: true,\n filterable: true,\n },\n abbreviation: {\n label: 'Abbrev.',\n selected: false,\n selectable: true,\n sortable: true,\n filterable: true,\n },\n payrollCompany: {\n label: 'Payroll Company',\n selected: false,\n selectable: true,\n sortable: true,\n filterable: true,\n },\n costCenter: {\n label: 'Cost Center',\n selected: false,\n selectable: true,\n sortable: true,\n filterable: true,\n },\n countryCode: {\n label: 'Country',\n selected: true,\n selectable: true,\n sortable: true,\n filterable: true,\n },\n city: {\n label: 'City',\n selected: true,\n selectable: true,\n sortable: true,\n filterable: true,\n },\n divisionCode: {\n label: 'Division',\n selected: false,\n selectable: true,\n sortable: true,\n filterable: true,\n },\n businessUnitCode: {\n label: 'Business Unit',\n selected: false,\n selectable: true,\n sortable: true,\n filterable: true,\n },\n productGroupCode: {\n label: 'Local Group Unit',\n selected: false,\n selectable: true,\n sortable: true,\n filterable: true,\n },\n unit: {\n label: 'Unit',\n selected: true,\n selectable: true,\n sortable: true,\n filterable: true,\n },\n unitCoordinator: {\n label: 'Unit Coord.',\n selected: true,\n selectable: true,\n sortable: true,\n filterable: true,\n },\n validFrom: {\n label: 'Valid From',\n selected: false,\n selectable: true,\n sortable: true,\n filterable: true,\n },\n validUntil: {\n label: 'Valid Until',\n selected: false,\n selectable: true,\n sortable: true,\n filterable: true,\n },\n hourlyRateCategory: {\n label: 'common.hrc',\n selected: true,\n selectable: true,\n sortable: true,\n filterable: true,\n },\n workingHoursPerWeek: {\n label: 'Work. Hours Per Week',\n selected: true,\n selectable: true,\n sortable: true,\n filterable: true,\n },\n photoUrl: {\n label: 'Profile Photo',\n selected: false,\n selectable: false,\n sortable: false,\n filterable: false,\n },\n role: {\n label: 'Role',\n selected: false,\n selectable: true,\n sortable: true,\n filterable: true,\n },\n metadata: {\n label: 'Metadata',\n selected: false,\n selectable: false,\n sortable: false,\n filterable: false,\n },\n unitAssignments: {\n label: 'Unit Assignments',\n selected: false,\n selectable: false,\n sortable: false,\n filterable: false,\n },\n};\n\n// Defines the sorting of columns!!!\n// The Map is not really readonly - we just pretend that it is :)\nexport const usersListColumnsInfo: ReadonlyCompleteMap<\nUsersListColumnKey,\nListColumnInfo\n> = new Map([\n ['userId', usersListColumnsInfoObj.userId],\n ['hitachiId', usersListColumnsInfoObj.hitachiId],\n ['globalEmployeeId', usersListColumnsInfoObj.globalEmployeeId],\n ['localEmployeeId', usersListColumnsInfoObj.localEmployeeId],\n ['firstName', usersListColumnsInfoObj.firstName],\n ['lastName', usersListColumnsInfoObj.lastName],\n ['countryCode', usersListColumnsInfoObj.countryCode],\n ['city', usersListColumnsInfoObj.city],\n ['hourlyRateCategory', usersListColumnsInfoObj.hourlyRateCategory],\n ['workingHoursPerWeek', usersListColumnsInfoObj.workingHoursPerWeek],\n ['email', usersListColumnsInfoObj.email],\n ['abbreviation', usersListColumnsInfoObj.abbreviation],\n ['costCenter', usersListColumnsInfoObj.costCenter],\n ['payrollCompany', usersListColumnsInfoObj.payrollCompany],\n ['divisionCode', usersListColumnsInfoObj.divisionCode],\n ['businessUnitCode', usersListColumnsInfoObj.businessUnitCode],\n ['productGroupCode', usersListColumnsInfoObj.productGroupCode],\n ['validFrom', usersListColumnsInfoObj.validFrom],\n ['validUntil', usersListColumnsInfoObj.validUntil],\n ['photoUrl', usersListColumnsInfoObj.photoUrl],\n ['unit', usersListColumnsInfoObj.unit],\n ['unitCoordinator', usersListColumnsInfoObj.unitCoordinator],\n ['role', usersListColumnsInfoObj.role],\n ['metadata', usersListColumnsInfoObj.metadata],\n ['unitAssignments', usersListColumnsInfoObj.unitAssignments],\n]) as ReadonlyCompleteMap;\n\n/* eslint-disable @typescript-eslint/no-unused-vars */\n\nexport const usersListColumnsWithFilters: (keyof UserColumnFilters)[] = Array.from(usersListColumnsInfo.entries())\n .filter(([_key, value]) => value.filterable)\n .map(([key, _value]) => key as keyof UserColumnFilters);\n\n/* eslint-enable @typescript-eslint/no-unused-vars */\n","import { ListColumnInfo, ListColumnsInfo, ObjectPropertyNames } from './base';\nimport { WorkPackageColumnFilters } from '../filter-columns';\nimport { ReadonlyCompleteMap } from '../../app.types';\nimport { WorkPackageViewListItemResponseModel } from '../models/responses/work-package-view-list-item.response.model';\n\nexport type WorkPackageViewListColumnKeys = ObjectPropertyNames;\n\n// This defines the object that should implement all properties of 'WorkPackageListDto' exactly.\n// It's used for linting mostly and discarded later.\nconst workPackageViewListColumnsInfoObj: ListColumnsInfo = {\n status: {\n label: 'Status',\n selected: true,\n selectable: true,\n sortable: true,\n filterable: true,\n },\n workPackageId: {\n label: 'WP-ID',\n selected: false,\n selectable: false,\n sortable: false,\n filterable: false,\n },\n displayId: {\n label: 'WP-ID',\n selected: true,\n selectable: true,\n sortable: true,\n filterable: true,\n },\n projectId: {\n label: 'Project ID',\n selected: false,\n selectable: false,\n sortable: false,\n filterable: false,\n },\n workPackageTitle: {\n label: 'Title',\n selected: true,\n selectable: true,\n sortable: true,\n filterable: true,\n },\n projectNumber: {\n label: 'Project Number',\n selected: false,\n selectable: false,\n sortable: false,\n filterable: false,\n },\n projectTitle: {\n label: 'Project',\n selected: true,\n selectable: true,\n sortable: true,\n filterable: true,\n },\n levelTitle: {\n label: 'Project Level',\n selected: false,\n selectable: true,\n sortable: true,\n filterable: true,\n },\n sequenceNumber: {\n label: 'Sequence Number',\n selected: false,\n selectable: false,\n sortable: false,\n filterable: false,\n },\n scope: {\n label: 'Scope',\n selected: false,\n selectable: false,\n sortable: false,\n filterable: false,\n },\n creatorFullName: {\n label: 'WP Creator',\n selected: true,\n selectable: true,\n sortable: true,\n filterable: true,\n },\n latestEstimatedStartDate: {\n label: 'Submitter Estimated Start Date',\n selected: false,\n selectable: true,\n sortable: true,\n filterable: true,\n },\n latestEstimatedEndDate: {\n label: 'Submitter Estimated End Date',\n selected: true,\n selectable: true,\n sortable: true,\n filterable: true,\n },\n latestEstimatedHours: {\n label: 'Submitter Estimated Hours',\n selected: true,\n selectable: true,\n sortable: true,\n filterable: true,\n },\n estimatedStartDate: {\n label: 'Submitter Estimated Start Date',\n selected: false,\n selectable: false,\n sortable: false,\n filterable: false,\n },\n estimatedEndDate: {\n label: 'Submitter Estimated End Date',\n selected: false,\n selectable: false,\n sortable: false,\n filterable: false,\n },\n estimatedHours: {\n label: 'Submitter Estimated Hours',\n selected: false,\n selectable: false,\n sortable: false,\n filterable: false,\n },\n confirmedStartDate: {\n label: 'Supplier Confirmed Start Date',\n selected: false,\n selectable: true,\n sortable: true,\n filterable: true,\n },\n openQuestionsCount: {\n label: 'Open Questions Count',\n selected: false,\n selectable: false,\n sortable: false,\n filterable: false,\n },\n confirmedEndDate: {\n label: 'Supplier Confirmed End Date',\n selected: false,\n selectable: false,\n sortable: false,\n filterable: false,\n },\n confirmedHours: {\n label: 'Supplier Confirmed Hours',\n selected: false,\n selectable: false,\n sortable: false,\n filterable: false,\n },\n latestConfirmedEndDate: {\n label: 'Supplier Confirmed End Date',\n selected: false,\n selectable: true,\n sortable: true,\n filterable: true,\n },\n latestConfirmedHours: {\n label: 'Supplier Confirmed Hours',\n selected: false,\n selectable: true,\n sortable: true,\n filterable: true,\n },\n plannedStartDate: {\n label: 'Supplier Planned Start Date',\n selected: false,\n selectable: true,\n sortable: true,\n filterable: true,\n },\n latestPlannedEndDate: {\n label: 'Supplier Planned End Date',\n selected: false,\n selectable: true,\n sortable: true,\n filterable: true,\n },\n plannedHours: {\n label: 'Supplier Planned Hours',\n selected: false,\n selectable: true,\n sortable: true,\n filterable: true,\n },\n reportedHours: {\n label: 'work-package.reported-hours',\n selected: false,\n selectable: true,\n sortable: true,\n filterable: true,\n },\n supplierUnit: {\n label: 'Supplier Unit',\n selected: false,\n selectable: true,\n sortable: true,\n filterable: true,\n },\n supplierUnitCoordinatorFullName: {\n label: 'Supplier Unit Coordinator',\n selected: false,\n selectable: true,\n sortable: true,\n filterable: true,\n },\n submitterHourlyRateCategory: {\n label: 'work-package.submitter.hrc',\n selected: false,\n selectable: true,\n sortable: true,\n filterable: true,\n },\n supplierHourlyRateCategory: {\n label: 'work-package.supplier.hrc',\n selected: false,\n selectable: true,\n sortable: true,\n filterable: true,\n },\n isFlagged: {\n label: 'Flagged',\n selected: false,\n selectable: false,\n sortable: false,\n filterable: false,\n },\n submitterUnit: {\n label: 'Submitter Unit',\n selected: false,\n selectable: true,\n sortable: true,\n filterable: true,\n },\n submitterUnitCoordinatorFullName: {\n label: 'Submitter Unit Coordinator',\n selected: false,\n selectable: true,\n sortable: true,\n filterable: true,\n },\n coordinator: {\n label: 'WP Coordinator',\n selected: false,\n selectable: true,\n sortable: true,\n filterable: true,\n },\n responsibles: {\n label: 'WP Responsibles',\n selected: false,\n selectable: true,\n sortable: true,\n filterable: true,\n },\n submitterProjectTypeCode: {\n label: 'work-package.submitter.project-type',\n selected: false,\n selectable: true,\n sortable: true,\n filterable: true,\n },\n supplierProjectTypeCode: {\n label: 'work-package.supplier.project-type',\n selected: false,\n selectable: true,\n sortable: true,\n filterable: true,\n },\n supplierProjectNumberANDActivityItemCategoryNumber: {\n label: 'work-package.supplier.project-number-activity-category-item',\n selected: false,\n selectable: true,\n sortable: true,\n filterable: true,\n },\n submitterProjectNumberANDActivityItemCategoryNumber: {\n label: 'work-package.submitter.project-number-activity-category-item',\n selected: false,\n selectable: true,\n sortable: true,\n filterable: true,\n },\n pmFullName: {\n label: 'common.project-manager',\n selected: false,\n selectable: true,\n sortable: true,\n filterable: true,\n },\n technicalPMFullName: {\n label: 'common.technical-project-manager',\n selected: false,\n selectable: true,\n sortable: true,\n filterable: true,\n },\n additionalSupplierProjectTypeCodes: {\n label: 'work-package.additional-supplier.project-type',\n selected: false,\n selectable: true,\n sortable: true,\n filterable: true,\n },\n additionalSupplierProjectNumberANDActivityItemCategoryNumbers: {\n label: 'work-package.additional-supplier.project-number-activity-category-item',\n selected: false,\n selectable: true,\n sortable: true,\n filterable: true,\n },\n additionalSupplierUnitNames: {\n label: 'work-package.additional-supplier.units',\n selected: false,\n selectable: true,\n sortable: true,\n filterable: true,\n },\n additionalSupplierHourlyRateCategory: {\n label: 'work-package.additional-supplier.hrcs',\n selected: false,\n selectable: true,\n sortable: true,\n filterable: true,\n },\n contractName: {\n label: 'common.contract',\n selected: false,\n selectable: true,\n sortable: true,\n filterable: true,\n },\n};\n\n// Defines the sorting of columns!!!\n// The Map is not really readonly - we just pretend that it is :)\nexport const workPackageViewListColumnsInfo: ReadonlyCompleteMap<\nWorkPackageViewListColumnKeys,\nListColumnInfo\n> = new Map([\n ['workPackageId', workPackageViewListColumnsInfoObj.workPackageId],\n ['displayId', workPackageViewListColumnsInfoObj.displayId],\n ['projectId', workPackageViewListColumnsInfoObj.projectId],\n ['projectTitle', workPackageViewListColumnsInfoObj.projectTitle],\n ['levelTitle', workPackageViewListColumnsInfoObj.levelTitle],\n ['sequenceNumber', workPackageViewListColumnsInfoObj.sequenceNumber],\n ['workPackageTitle', workPackageViewListColumnsInfoObj.workPackageTitle],\n ['status', workPackageViewListColumnsInfoObj.status],\n ['scope', workPackageViewListColumnsInfoObj.scope],\n ['openQuestionsCount', workPackageViewListColumnsInfoObj.openQuestionsCount],\n\n ['latestEstimatedStartDate', workPackageViewListColumnsInfoObj.latestEstimatedStartDate],\n ['latestEstimatedEndDate', workPackageViewListColumnsInfoObj.latestEstimatedEndDate],\n ['latestEstimatedHours', workPackageViewListColumnsInfoObj.latestEstimatedHours],\n\n ['confirmedStartDate', workPackageViewListColumnsInfoObj.confirmedStartDate],\n ['latestConfirmedEndDate', workPackageViewListColumnsInfoObj.latestConfirmedEndDate],\n ['latestConfirmedHours', workPackageViewListColumnsInfoObj.latestConfirmedHours],\n\n ['plannedStartDate', workPackageViewListColumnsInfoObj.plannedStartDate],\n ['latestPlannedEndDate', workPackageViewListColumnsInfoObj.latestPlannedEndDate],\n ['plannedHours', workPackageViewListColumnsInfoObj.plannedHours],\n\n ['reportedHours', workPackageViewListColumnsInfoObj.reportedHours],\n ['contractName', workPackageViewListColumnsInfoObj.contractName],\n\n ['submitterUnit', workPackageViewListColumnsInfoObj.submitterUnit],\n ['submitterProjectTypeCode', workPackageViewListColumnsInfoObj.submitterProjectTypeCode],\n ['submitterProjectNumberANDActivityItemCategoryNumber', workPackageViewListColumnsInfoObj.submitterProjectNumberANDActivityItemCategoryNumber],\n ['submitterHourlyRateCategory', workPackageViewListColumnsInfoObj.submitterHourlyRateCategory],\n\n ['supplierUnit', workPackageViewListColumnsInfoObj.supplierUnit],\n ['supplierProjectTypeCode', workPackageViewListColumnsInfoObj.supplierProjectTypeCode],\n ['supplierProjectNumberANDActivityItemCategoryNumber', workPackageViewListColumnsInfoObj.supplierProjectNumberANDActivityItemCategoryNumber],\n ['supplierHourlyRateCategory', workPackageViewListColumnsInfoObj.supplierHourlyRateCategory],\n\n ['additionalSupplierUnitNames', workPackageViewListColumnsInfoObj.additionalSupplierUnitNames],\n ['additionalSupplierProjectTypeCodes', workPackageViewListColumnsInfoObj.additionalSupplierProjectTypeCodes],\n ['additionalSupplierProjectNumberANDActivityItemCategoryNumbers', workPackageViewListColumnsInfoObj.additionalSupplierProjectNumberANDActivityItemCategoryNumbers],\n ['additionalSupplierHourlyRateCategory', workPackageViewListColumnsInfoObj.additionalSupplierHourlyRateCategory],\n\n ['pmFullName', workPackageViewListColumnsInfoObj.pmFullName],\n ['technicalPMFullName', workPackageViewListColumnsInfoObj.technicalPMFullName],\n ['submitterUnitCoordinatorFullName', workPackageViewListColumnsInfoObj.submitterUnitCoordinatorFullName],\n ['creatorFullName', workPackageViewListColumnsInfoObj.creatorFullName],\n ['supplierUnitCoordinatorFullName', workPackageViewListColumnsInfoObj.supplierUnitCoordinatorFullName],\n ['coordinator', workPackageViewListColumnsInfoObj.coordinator],\n ['responsibles', workPackageViewListColumnsInfoObj.responsibles],\n\n ['isFlagged', workPackageViewListColumnsInfoObj.isFlagged]\n]) as ReadonlyCompleteMap;\n\n/* eslint-disable @typescript-eslint/no-unused-vars */\n\nexport const workPackageViewListColumnsWithFilters: (keyof WorkPackageColumnFilters)[] = Array.from(\n workPackageViewListColumnsInfo.entries(),\n)\n .filter(([_key, value]) => value.filterable)\n .map(([key, _value]) => key as keyof WorkPackageColumnFilters);\n\n/* eslint-enable @typescript-eslint/no-unused-vars */\n","import moment from 'moment';\nimport { MilestoneBase } from '../../interfaces/base/milestone.base';\nimport { assertRequiredProperties } from '../../utilities/api.utility';\n\nexport class MilestoneBaseModel {\n constructor(\n readonly title: string,\n readonly dueDate: moment.Moment,\n readonly isCompleted: boolean,\n readonly sortOrder: number,\n ) {\n this.dueDate = dueDate.clone();\n }\n\n static fromJSON(json: MilestoneBase): MilestoneBaseModel {\n assertRequiredProperties(json, [\n 'title',\n 'dueDate',\n 'isCompleted',\n 'sortOrder',\n ]);\n\n return new MilestoneBaseModel(\n json.title,\n moment(json.dueDate)\n .parseZone(),\n json.isCompleted,\n json.sortOrder,\n );\n }\n\n clone(overrides?: Partial): MilestoneBaseModel {\n return new MilestoneBaseModel(\n (overrides && overrides.title != null\n ? overrides.title\n : this.title\n ),\n (overrides && overrides.dueDate != null\n ? overrides.dueDate\n : this.dueDate\n ),\n (overrides && overrides.isCompleted != null\n ? overrides.isCompleted\n : this.isCompleted\n ),\n (overrides && overrides.sortOrder != null\n ? overrides.sortOrder\n : this.sortOrder\n ),\n );\n }\n\n toJSON(): MilestoneBase {\n return {\n title: this.title,\n dueDate: this.dueDate.toJSON(),\n isCompleted: this.isCompleted,\n sortOrder: this.sortOrder,\n };\n }\n}\n","import { ActivityFieldDto } from '../../interfaces/dtos/activity-field.dto';\nimport { ActivityFieldType } from '../../../models/activity-field-type.enum';\nimport { assertRequiredProperties } from '../../utilities/api.utility';\n\nexport class ActivityFieldDtoModel {\n constructor(\n readonly type: ActivityFieldType,\n readonly name: string,\n readonly newValue: string,\n readonly oldValue: string = '',\n ) {\n }\n\n static fromJSON(json: ActivityFieldDto): ActivityFieldDtoModel {\n assertRequiredProperties(json, [\n 'type',\n 'name',\n ]);\n\n return new ActivityFieldDtoModel(\n json.type,\n json.name,\n json.newValue || '',\n json.oldValue || '',\n );\n }\n\n toJSON(): ActivityFieldDto {\n return {\n name: this.name,\n oldValue: this.oldValue,\n newValue: this.newValue,\n type: this.type,\n };\n }\n}\n","import moment from 'moment';\nimport { AttachmentSlimDto } from '../../interfaces/dtos/attachment-slim.dto';\nimport { UserSlimDtoModel } from './user-slim.dto.model';\nimport { DocumentType } from '../../../models/document-type.enum';\nimport { AttachmentSlimDtoMetadata } from '../../interfaces/metadata';\nimport { ApiModelNew } from '../types';\nimport { MetadataModel } from '../metadata.model';\n\nexport class AttachmentSlimDtoModel implements ApiModelNew {\n /**\n * @deprecated\n */\n get fileName(): string { return this.name; }\n\n /**\n * @deprecated\n */\n get fileType(): string { return this.type; }\n\n /**\n * @deprecated\n */\n get fileSize(): number { return this.size; }\n\n constructor(\n readonly attachmentId: string,\n /**\n * Defines a usual Attachment or a Output Document\n */\n readonly documentType: DocumentType,\n /**\n * The name of the file.\n */\n readonly name: string,\n /**\n * The MIME type of the file.\n */\n readonly type: string,\n /**\n * The size of the file in bytes.\n */\n readonly size: number,\n readonly uploader: UserSlimDtoModel | null = null,\n readonly uploadedOn: moment.Moment | null = null,\n readonly outdater: UserSlimDtoModel | null = null,\n readonly outdatedOn: moment.Moment | null = null,\n readonly outdatedComment: string | null = null,\n readonly projectId: number | null = null,\n readonly workPackageId: number | null = null,\n // TODO: This a temporary quick fix to allow to jump to questions. Remove it eventually.\n readonly questionId: number | null = null,\n readonly metadata: MetadataModel,\n readonly url: string | null = null,\n readonly validUntil: moment.Moment | null = null,\n ) {\n this.uploadedOn = (uploadedOn != null ? uploadedOn.clone() : uploadedOn);\n this.outdatedOn = (outdatedOn != null ? outdatedOn.clone() : outdatedOn);\n this.validUntil = (validUntil != null ? validUntil.clone() : validUntil);\n }\n\n static fromJSON(json: AttachmentSlimDto): AttachmentSlimDtoModel {\n return new AttachmentSlimDtoModel(\n json.attachmentId,\n json.documentType,\n json.fileName,\n json.fileType,\n json.fileSize,\n (json.uploader\n ? UserSlimDtoModel.fromJSON(json.uploader)\n : null\n ),\n (json.uploadedOn\n ? moment(json.uploadedOn)\n .parseZone()\n : moment()\n ),\n (json.outdater\n ? UserSlimDtoModel.fromJSON(json.outdater)\n : null\n ),\n (json.outdatedOn\n ? moment(json.outdatedOn)\n .parseZone()\n : null\n ),\n json.outdatedComment,\n json.projectId,\n json.workPackageId,\n json.questionId,\n new MetadataModel(json.metadata),\n json.url,\n (json.validUntil\n ? moment(json.validUntil)\n .parseZone()\n : moment()\n ),\n );\n }\n\n canOutdateAttachment(): boolean {\n return this.metadata.fields && this.metadata.fields.canOutdateAttachment;\n }\n\n clone(overrides?: Partial): AttachmentSlimDtoModel {\n return new AttachmentSlimDtoModel(\n (overrides && overrides.attachmentId != null\n ? overrides.attachmentId\n : this.attachmentId\n ),\n (overrides && overrides.documentType != null\n ? overrides.documentType\n : this.documentType\n ),\n (overrides && overrides.name != null\n ? overrides.name\n : this.name\n ),\n (overrides && overrides.type != null\n ? overrides.type\n : this.type\n ),\n (overrides && overrides.size != null\n ? overrides.size\n : this.size\n ),\n (overrides && overrides.uploader !== undefined\n ? overrides.uploader\n : this.uploader?.clone() || null\n ),\n (overrides && overrides.uploadedOn !== undefined\n ? overrides.uploadedOn\n : this.uploadedOn?.clone() || null\n ),\n (overrides && overrides.outdater !== undefined\n ? overrides.outdater\n : this.outdater?.clone() || null\n ),\n (overrides && overrides.outdatedOn !== undefined\n ? overrides.outdatedOn\n : this.outdatedOn?.clone() || null\n ),\n (overrides && overrides.outdatedComment\n ? overrides.outdatedComment\n : this.outdatedComment\n ),\n (overrides && overrides.projectId\n ? overrides.projectId\n : this.projectId\n ),\n (overrides && overrides.workPackageId\n ? overrides.workPackageId\n : this.workPackageId\n ),\n (overrides && overrides.questionId\n ? overrides.questionId\n : this.questionId\n ),\n (overrides && overrides.metadata\n ? overrides.metadata\n : this.metadata.clone()\n ),\n (overrides && overrides.url\n ? overrides.url\n : this.url\n ),\n (overrides && overrides.validUntil\n ? overrides.validUntil\n : this.validUntil\n ),\n );\n }\n\n toJSON(): AttachmentSlimDto {\n return {\n attachmentId: this.attachmentId,\n projectId: this.projectId,\n workPackageId: this.workPackageId,\n questionId: this.questionId,\n documentType: this.documentType,\n fileName: this.fileName,\n fileType: this.fileType,\n fileSize: this.fileSize,\n uploader: (this.uploader ? this.uploader.toJSON() : null),\n uploadedOn: (this.uploadedOn ? this.uploadedOn.toJSON() : null),\n outdater: (this.outdater ? this.outdater.toJSON() : null),\n outdatedOn: (this.outdatedOn ? this.outdatedOn.toJSON() : null),\n outdatedComment: this.outdatedComment,\n metadata: this.metadata.toJSON(),\n url: this.url,\n validUntil: (this.validUntil ? this.validUntil.toJSON() : null),\n };\n }\n}\n","import { AvailableProjectDto } from '../../interfaces/dtos/available-project.dto';\nimport { assertRequiredProperties } from '../../utilities/api.utility';\n\nexport class AvailableProjectDtoModel {\n constructor(\n readonly projectId: number,\n readonly title: string,\n readonly projectNumber: string = '',\n ) {}\n\n static fromJSON(json: AvailableProjectDto): AvailableProjectDtoModel {\n assertRequiredProperties(json, [\n 'projectId',\n 'title',\n 'projectNumber',\n ]);\n\n return new AvailableProjectDtoModel(\n json.projectId,\n json.title,\n json.projectNumber ?? undefined,\n );\n }\n\n clone(): AvailableProjectDtoModel {\n return new AvailableProjectDtoModel(\n this.projectId,\n this.title,\n this.projectNumber,\n );\n }\n\n toJSON(): AvailableProjectDto {\n return {\n projectId: this.projectId,\n title: this.title,\n projectNumber: this.projectNumber,\n };\n }\n}\n","import { ApiModelNew } from '../types';\nimport { assertRequiredProperties } from '../../utilities/api.utility';\nimport { BackgroundColorResponse } from '../../interfaces/responses/background-colors-response';\n\nexport class BackgroundColorDtoModel implements ApiModelNew {\n constructor(\n public unitBackgroundColorId: number,\n public unitId: number,\n public backgroundColor: string,\n public name: string,\n ) {\n }\n\n static fromJSON(json: BackgroundColorResponse): BackgroundColorDtoModel {\n assertRequiredProperties(json, [\n 'unitBackgroundColorId',\n 'unitId',\n 'backgroundColor',\n 'name',\n ]);\n\n return new BackgroundColorDtoModel(\n json.unitBackgroundColorId,\n json.unitId,\n json.backgroundColor,\n json.name,\n );\n }\n\n clone(): BackgroundColorDtoModel {\n return new BackgroundColorDtoModel(\n this.unitBackgroundColorId,\n this.unitId,\n this.backgroundColor,\n this.name,\n );\n }\n\n toJSON(): BackgroundColorResponse {\n return {\n unitBackgroundColorId: this.unitBackgroundColorId,\n unitId: this.unitId,\n backgroundColor: this.backgroundColor,\n name: this.name,\n };\n }\n}\n","import moment from 'moment';\nimport { assertRequiredProperties } from '../../utilities/api.utility';\nimport { CapacityDto } from '../../interfaces/dtos/capacity.dto';\n\nexport class CapacityDtoModel {\n readonly isoWeekDateIdentifier: string;\n\n constructor(\n readonly userId: string,\n readonly year: number,\n readonly week: number,\n readonly totalHours: number,\n public plannedHours: number,\n public availableHours: number,\n readonly weekStartDate: moment.Moment | null,\n readonly availability: number,\n public hasHoliday: boolean,\n public holidayDescription: string | null = null,\n public holidayHours: number,\n public totalProductiveHours: number,\n public totalNonProductiveHours: number,\n ) {\n this.isoWeekDateIdentifier = `${year}-W${week}`;\n }\n\n static fromJSON(json: CapacityDto): CapacityDtoModel {\n assertRequiredProperties(json, [\n 'week',\n 'totalHours',\n 'plannedHours',\n 'availableHours',\n ]);\n\n return new CapacityDtoModel(\n json.userId,\n json.year,\n json.week,\n json.totalHours,\n json.plannedHours,\n json.availableHours,\n (json.weekStartDate\n ? moment(json.weekStartDate)\n .parseZone()\n : null\n ),\n CapacityDtoModel.getAvailability(json.plannedHours, json.availableHours),\n json.hasHoliday,\n json.holidayDescription,\n json.holidayHours,\n json.totalProductiveHours,\n json.totalNonProductiveHours,\n );\n }\n\n static getAvailability(plannedHours: number, availableHours: number): number {\n return (plannedHours / availableHours) * 100;\n }\n\n clone(): CapacityDtoModel {\n return new CapacityDtoModel(\n this.userId,\n this.year,\n this.week,\n this.totalHours,\n this.plannedHours,\n this.availableHours,\n this.weekStartDate != null ? this.weekStartDate.clone() : null,\n this.availability,\n this.hasHoliday,\n this.holidayDescription,\n this.holidayHours,\n this.totalProductiveHours,\n this.totalNonProductiveHours,\n );\n }\n\n toJSON(): CapacityDto {\n return {\n userId: this.userId,\n year: this.year,\n week: this.week,\n totalHours: this.totalHours,\n plannedHours: this.plannedHours,\n availableHours: this.availableHours,\n weekStartDate: (this.weekStartDate != null ? this.weekStartDate.toJSON() : null),\n hasHoliday: this.hasHoliday,\n holidayDescription: this.holidayDescription,\n holidayHours: this.holidayHours,\n totalProductiveHours: this.totalProductiveHours,\n totalNonProductiveHours: this.totalNonProductiveHours,\n };\n }\n}\n","import { ContractHourlyRateCategoryPairDto } from '../../interfaces/dtos/contract-hourly-rate-category-pair.dto';\nimport { assertRequiredProperties } from '../../utilities/api.utility';\n\nexport class ContractHourlyRateCategoryPairDtoModel {\n readonly submitterHourlyRateCategoryLabel: string;\n\n readonly supplierHourlyRateCategoryLabel: string;\n\n disabled?: boolean;\n\n constructor(\n readonly contractHourlyRateCategoryPairId: number | null = null,\n readonly contractId: number | null = null,\n readonly submitterHourlyRateCategory: string | null = null,\n readonly submitterHourlyRateCategoryIsDefault: boolean = false,\n readonly submitterActivityTypeDescription: string | null = null,\n readonly supplierHourlyRateCategory: string | null = null,\n readonly supplierHourlyRateCategoryIsDefault: boolean = false,\n readonly supplierActivityTypeDescription: string | null = null,\n ) {\n this.submitterHourlyRateCategoryLabel = `${this.submitterHourlyRateCategory}${this.submitterHourlyRateCategoryIsDefault ? ' (Default)' : ''}`;\n this.supplierHourlyRateCategoryLabel = `${this.supplierHourlyRateCategory}${this.supplierHourlyRateCategoryIsDefault ? ' (Default)' : ''}`;\n this.disabled = false;\n }\n\n static fromJSON(json: ContractHourlyRateCategoryPairDto): ContractHourlyRateCategoryPairDtoModel {\n assertRequiredProperties(json, [\n ]);\n\n return new ContractHourlyRateCategoryPairDtoModel(\n json.contractHourlyRateCategoryPairId,\n json.contractId,\n json.submitterHourlyRateCategory,\n json.submitterHourlyRateCategoryIsDefault || false,\n json.submitterActivityTypeDescription,\n json.supplierHourlyRateCategory,\n json.supplierHourlyRateCategoryIsDefault || false,\n json.supplierActivityTypeDescription,\n );\n }\n\n clone(): ContractHourlyRateCategoryPairDtoModel {\n return new ContractHourlyRateCategoryPairDtoModel(\n this.contractHourlyRateCategoryPairId,\n this.contractId,\n this.submitterHourlyRateCategory,\n this.submitterHourlyRateCategoryIsDefault,\n this.submitterActivityTypeDescription,\n this.supplierHourlyRateCategory,\n this.supplierHourlyRateCategoryIsDefault,\n this.supplierActivityTypeDescription,\n );\n }\n\n toJSON(): ContractHourlyRateCategoryPairDto {\n return {\n contractHourlyRateCategoryPairId: this.contractHourlyRateCategoryPairId,\n contractId: this.contractId,\n submitterHourlyRateCategory: this.submitterHourlyRateCategory,\n submitterHourlyRateCategoryIsDefault: this.submitterHourlyRateCategoryIsDefault,\n submitterActivityTypeDescription: this.submitterActivityTypeDescription,\n supplierHourlyRateCategory: this.supplierHourlyRateCategory,\n supplierHourlyRateCategoryIsDefault: this.supplierHourlyRateCategoryIsDefault,\n supplierActivityTypeDescription: this.supplierActivityTypeDescription,\n };\n }\n}\n\n/**\n * Static model for the hourly rate default category 'Auto' at the end of the select dropdowns.\n */\nexport const autoHourlyRateCategory = new ContractHourlyRateCategoryPairDtoModel(\n -1,\n null,\n 'Auto',\n false,\n '',\n 'Auto',\n false,\n '',\n);\n","import { UserSlimDtoModel } from './user-slim.dto.model';\nimport { ContractDto } from '../../interfaces/dtos/contract.dto';\nimport { ContractHourlyRateCategoryPairDtoModel } from './contract-hourly-rate-category-pair.dto.model';\nimport { UnitSlimDtoModel } from './unit-slim.dto.model';\nimport { WorkPackageViewResponseModel } from '../responses/work-package-view.response.model';\nimport { assertRequiredProperties } from '../../utilities/api.utility';\nimport { CostObjectDtoModel } from './costObject.dto.model';\n\nexport class ContractDtoModel {\n readonly supplierSubmitterPairLabel: string;\n\n constructor(\n readonly contractId: number | null = null,\n readonly submitterUnit: UnitSlimDtoModel | null = null,\n readonly supplierUnit: UnitSlimDtoModel | null = null,\n readonly model: string | null = null,\n readonly costObject: string | null | CostObjectDtoModel = null,\n readonly categoryActivityItem: string | null = null,\n public contractHourlyRateCategoryPairs: ContractHourlyRateCategoryPairDtoModel[] = [],\n readonly submitterEmployeeNumber: string | null = null,\n readonly costCenter: string | null = null,\n readonly usersNotificationSentTo: UserSlimDtoModel[] = [],\n ) {\n this.contractHourlyRateCategoryPairs = [...contractHourlyRateCategoryPairs];\n this.usersNotificationSentTo = [...usersNotificationSentTo];\n\n this.supplierSubmitterPairLabel = `${this.supplierUnit ? this.supplierUnit.name : 'unknown'} (${this.submitterUnit ? this.submitterUnit.name : 'unknown'})`;\n }\n\n static fromJSON(json: ContractDto): ContractDtoModel {\n assertRequiredProperties(json, [\n // 'contractId',\n ]);\n\n return new ContractDtoModel(\n json.contractId,\n (json.submitterUnit\n ? UnitSlimDtoModel.fromJSON(json.submitterUnit)\n : null\n ),\n (json.supplierUnit\n ? UnitSlimDtoModel.fromJSON(json.supplierUnit)\n : null\n ),\n json.model,\n json.costObject,\n json.categoryActivityItem,\n (Array.isArray(json.contractHourlyRateCategoryPairs) ? json.contractHourlyRateCategoryPairs : [])\n .map((item) => ContractHourlyRateCategoryPairDtoModel.fromJSON(item)),\n json.submitterEmployeeNumber,\n json.submitterCostCenter,\n (Array.isArray(json.usersNotificationSentTo) ? json.usersNotificationSentTo : [])\n .map((item) => UserSlimDtoModel.fromJSON(item)),\n );\n }\n\n /**\n * @deprecated new wp should be matched by workPackage.contractId === c.contractId\n * Looks if the properties contractSubmitterUnit and supplierUnit of a\n * work package match with the provided contract.\n *\n * @param contract\n * @param workPackage\n */\n static matchesContract(contract: ContractDtoModel, workPackage: WorkPackageViewResponseModel): boolean {\n if (workPackage.contractSubmitterUnit == null || workPackage.contractSupplierUnit == null) {\n return false;\n }\n\n if (contract.submitterUnit == null || contract.submitterUnit.unitId !== workPackage.contractSubmitterUnit.unitId) {\n return false;\n }\n\n if (contract.supplierUnit == null || contract.supplierUnit.unitId !== workPackage.contractSupplierUnit.unitId) {\n return false;\n }\n\n return true;\n }\n\n clone(): ContractDtoModel {\n return new ContractDtoModel(\n this.contractId,\n this.submitterUnit ? this.submitterUnit.clone() : null,\n this.supplierUnit ? this.supplierUnit.clone() : null,\n this.model,\n this.costObject,\n this.categoryActivityItem,\n this.contractHourlyRateCategoryPairs.map((item) => item.clone()),\n this.submitterEmployeeNumber,\n this.costCenter,\n this.usersNotificationSentTo,\n );\n }\n\n toJSON(): ContractDto {\n if (this.costObject instanceof CostObjectDtoModel) {\n throw new Error('CostObjectDtoModel is not supported in toJSON');\n }\n\n return {\n contractId: this.contractId,\n submitterUnit: (this.submitterUnit\n ? this.submitterUnit.toJSON()\n : null\n ),\n supplierUnit: (this.supplierUnit\n ? this.supplierUnit.toJSON()\n : null\n ),\n model: this.model,\n costObject: this.costObject,\n categoryActivityItem: this.categoryActivityItem,\n contractHourlyRateCategoryPairs: this.contractHourlyRateCategoryPairs.map((item) => item.toJSON()),\n submitterEmployeeNumber: this.submitterEmployeeNumber,\n submitterCostCenter: this.costCenter,\n usersNotificationSentTo: this.usersNotificationSentTo.map((item) => item.toJSON()),\n };\n }\n}\n","\nimport { CostObjectDto } from '../../interfaces/dtos/cost-object.dto';\nimport { assertRequiredProperties } from '../../utilities/api.utility';\n\nexport class CostObjectDtoModel {\n constructor(\n readonly levelId: number,\n readonly projectTitle: string,\n readonly levelTitle: string,\n readonly code: string, // TODO: COLLAPP-4535 COST OBJECT | project number\n readonly item: string | null, // activityItemCategoryNumber\n readonly projectType: string, // PROJECT TYPE\n readonly serviceOrder: string,\n ) {\n }\n\n static fromJSON(json: CostObjectDto): CostObjectDtoModel {\n assertRequiredProperties(json, [\n 'projectTitle',\n 'code',\n ]);\n\n return new CostObjectDtoModel(\n json.levelId,\n json.projectTitle,\n json.levelTitle,\n json.code,\n json.item,\n json.projectType,\n json.serviceOrder,\n );\n }\n\n toJSON(): CostObjectDto {\n return {\n levelId: this.levelId,\n projectTitle: this.projectTitle,\n levelTitle: this.levelTitle,\n code: this.code,\n item: this.item || null,\n projectType: this.projectType,\n serviceOrder: this.serviceOrder,\n };\n }\n}\n","import moment from 'moment';\nimport { RatingDtoModel } from './rating.dto.model';\nimport { UserSlimDtoModel } from './user-slim.dto.model';\nimport { FeedbackDto } from '../../interfaces/dtos/feedback.dto';\nimport { assertRequiredProperties } from '../../utilities/api.utility';\n\nexport class FeedbackDtoModel {\n constructor(\n readonly feedbackId: number,\n readonly createdOn: moment.Moment,\n readonly creator: UserSlimDtoModel,\n readonly isSupplierFeedback: boolean,\n readonly rating: RatingDtoModel,\n readonly comment: string = '',\n ) {\n this.createdOn = createdOn.clone();\n }\n\n static fromJSON(json: FeedbackDto): FeedbackDtoModel {\n assertRequiredProperties(json, [\n 'feedbackId',\n 'createdOn',\n 'creator',\n 'rating',\n ]);\n\n return new FeedbackDtoModel(\n json.feedbackId,\n moment(json.createdOn)\n .parseZone(),\n UserSlimDtoModel.fromJSON(json.creator),\n json.isSupplierFeedback,\n RatingDtoModel.fromJSON(json.rating),\n json.comment || '',\n );\n }\n\n toJSON(): FeedbackDto {\n return {\n feedbackId: this.feedbackId,\n createdOn: this.createdOn.toJSON(),\n creator: this.creator.toJSON(),\n isSupplierFeedback: this.isSupplierFeedback,\n rating: this.rating,\n comment: this.comment,\n };\n }\n}\n","import { GateDto } from '../../interfaces/dtos/gate.dto';\nimport { assertRequiredProperties } from '../../utilities/api.utility';\n\nexport class GateDtoModel {\n constructor(\n readonly gateId: number,\n readonly name: string,\n readonly code: string | null = null,\n readonly description: string | null = null,\n ) {\n }\n\n static fromJSON(json: GateDto): GateDtoModel {\n assertRequiredProperties(json, [\n 'gateId',\n 'name',\n ]);\n\n return new GateDtoModel(\n json.gateId,\n json.name,\n json.code,\n json.description,\n );\n }\n\n clone(): GateDtoModel {\n return new GateDtoModel(\n this.gateId,\n this.name,\n this.code,\n this.description,\n );\n }\n\n toJSON(): GateDto {\n return {\n gateId: this.gateId,\n code: this.code,\n name: this.name,\n description: this.description,\n };\n }\n}\n","import { Int32IdNameDto } from '../../interfaces/dtos/int32-id-name.dto';\n\nexport class Int32IdNameDtoModel {\n constructor(\n readonly id: number,\n readonly name: string,\n ) {}\n\n static fromJSON(json: Int32IdNameDto): Int32IdNameDtoModel {\n return new Int32IdNameDtoModel(\n json.id,\n json.name,\n );\n }\n\n clone(): Int32IdNameDtoModel {\n return new Int32IdNameDtoModel(\n this.id,\n this.name,\n );\n }\n\n toJSON(): Int32IdNameDto {\n return {\n id: this.id,\n name: this.name,\n };\n }\n}\n","import moment from 'moment';\nimport { MilestoneBaseModel } from '../base/milestone.base.model';\nimport { MilestoneImportDto } from '../../interfaces/dtos/milestone-import.dto';\nimport { assertRequiredProperties } from '../../utilities/api.utility';\n\nexport class MilestoneImportDtoModel extends MilestoneBaseModel {\n static fromJSON(json: MilestoneImportDto): MilestoneImportDtoModel {\n assertRequiredProperties(json, [\n 'title',\n 'dueDate',\n 'isCompleted',\n 'sortOrder',\n ]);\n\n return new MilestoneImportDtoModel(\n json.title,\n moment(json.dueDate)\n .parseZone(),\n json.isCompleted,\n json.sortOrder,\n );\n }\n\n clone(overrides?: Partial): MilestoneImportDtoModel {\n return new MilestoneImportDtoModel(\n (overrides && overrides.title != null\n ? overrides.title\n : this.title\n ),\n (overrides && overrides.dueDate != null\n ? overrides.dueDate\n : this.dueDate\n ),\n (overrides && overrides.isCompleted != null\n ? overrides.isCompleted\n : this.isCompleted\n ),\n (overrides && overrides.sortOrder != null\n ? overrides.sortOrder\n : this.sortOrder\n ),\n );\n }\n}\n","import moment from 'moment';\nimport { LevelImportListDto } from '../../interfaces/dtos/level-import-list.dto';\nimport { UserSlimDtoModel } from './user-slim.dto.model';\nimport { LevelImportListDtoMetadata } from '../../interfaces/metadata';\nimport { MetadataModel } from '../metadata.model';\nimport { MilestoneImportDtoModel } from './milestone-import.dto.model';\nimport { ApiModelNew } from '../types';\nimport { isEmpty } from '../../../helpers/utilities';\n\nexport class LevelImportListDtoModel implements ApiModelNew {\n constructor(\n readonly levelId: number | undefined,\n readonly codePath: string = '',\n readonly levelNumber: number,\n readonly title: string = '',\n readonly responsibleEngineer: UserSlimDtoModel | undefined,\n readonly projectNumberForSubmitterSettings: string | undefined,\n readonly activityItemCategoryNumberForSubmitterSettings: string | undefined,\n readonly startDate: moment.Moment | undefined,\n readonly endDate: moment.Moment | undefined,\n readonly hours: number = 0,\n readonly hourlyRate: number = 0,\n readonly cost: number | undefined,\n readonly costToComplete: number | undefined,\n readonly sortOrder: number | undefined,\n readonly isHidden: boolean = false,\n readonly isExisting: boolean = false,\n readonly isSelected: boolean = false,\n readonly isDeletedInSap: boolean = false,\n readonly milestones: readonly MilestoneImportDtoModel[],\n readonly children: readonly LevelImportListDtoModel[],\n readonly metadata: MetadataModel,\n readonly projectStatus: string | null = '',\n readonly projectUserStatus: string | null = '',\n readonly wbsStatus: string | null = '',\n readonly wbsUserStatus: string | null = '',\n ) {\n this.startDate = (startDate != null ? startDate.clone() : startDate);\n this.endDate = (endDate != null ? endDate.clone() : endDate);\n this.milestones = [...milestones];\n this.children = [...children];\n\n // This is a quick fix to sanitize the data coming from the backend.\n // Levels can't be de-selected if they have children which are selected.\n if (this.children.length > 0) {\n this.isSelected = this.children.some((child) => child.isSelected);\n }\n }\n\n static fromJSON(json: LevelImportListDto): LevelImportListDtoModel {\n return new LevelImportListDtoModel(\n (!isEmpty(json.levelId)\n ? json.levelId\n : undefined\n ),\n (json.codePath ?? undefined),\n (json.levelNumber ?? 0),\n json.title,\n (json.responsibleEngineer\n ? UserSlimDtoModel.fromJSON(json.responsibleEngineer)\n : undefined\n ),\n json.projectNumberForSubmitterSettings,\n json.activityItemCategoryNumberForSubmitterSettings,\n (json.startDate\n ? moment(json.startDate)\n .parseZone()\n : undefined\n ),\n (json.endDate\n ? moment(json.endDate)\n .parseZone()\n : undefined\n ),\n json.hours,\n (json.hourlyRate\n ? json.hourlyRate\n : undefined\n ),\n (json.cost\n ? json.cost\n : undefined\n ),\n (json.costToComplete\n ? json.costToComplete\n : undefined\n ),\n (json.sortOrder\n ? json.sortOrder\n : undefined\n ),\n json.isHidden,\n json.isExisting,\n json.isSelected,\n json.isDeletedInSap,\n (Array.isArray(json.milestones) ? json.milestones : [])\n .map((item) => MilestoneImportDtoModel.fromJSON(item)),\n (Array.isArray(json.children) ? json.children : [])\n .map((item) => LevelImportListDtoModel.fromJSON(item)),\n new MetadataModel(json.metadata),\n json.projectStatus,\n json.projectUserStatus,\n json.wbsStatus,\n json.wbsUserStatus,\n );\n }\n\n static fromSimilarObject(model: LevelImportListDtoModel): LevelImportListDtoModel {\n return new LevelImportListDtoModel(\n (!isEmpty(model.levelId)\n ? model.levelId\n : undefined\n ),\n (model.codePath ?? undefined),\n (model.levelNumber ?? 0),\n (!isEmpty(model.title)\n ? model.title\n : undefined\n ),\n (!isEmpty(model.responsibleEngineer)\n ? model.responsibleEngineer.clone()\n : undefined\n ),\n (!isEmpty(model.projectNumberForSubmitterSettings)\n ? model.projectNumberForSubmitterSettings\n : undefined\n ),\n (!isEmpty(model.activityItemCategoryNumberForSubmitterSettings)\n ? model.activityItemCategoryNumberForSubmitterSettings\n : undefined\n ),\n (!isEmpty(model.startDate)\n ? model.startDate.clone()\n : undefined\n ),\n (!isEmpty(model.endDate)\n ? model.endDate.clone()\n : undefined\n ),\n (!isEmpty(model.hours)\n ? model.hours\n : undefined\n ),\n (!isEmpty(model.hourlyRate)\n ? model.hourlyRate\n : undefined\n ),\n (!isEmpty(model.cost)\n ? model.cost\n : undefined\n ),\n (!isEmpty(model.costToComplete)\n ? model.costToComplete\n : undefined\n ),\n (!isEmpty(model.sortOrder)\n ? model.sortOrder\n : undefined\n ),\n (!isEmpty(model.isHidden)\n ? model.isHidden\n : undefined\n ),\n (!isEmpty(model.isExisting)\n ? model.isExisting\n : undefined\n ),\n (!isEmpty(model.isSelected)\n ? model.isSelected\n : undefined\n ),\n (!isEmpty(model.isDeletedInSap)\n ? model.isDeletedInSap\n : undefined\n ),\n (Array.isArray(model.milestones)\n ? model.milestones\n .map((item) => item.clone())\n : []\n ),\n (Array.isArray(model.children)\n ? model.children\n .map((item) => item.clone())\n : []\n ),\n model.metadata.clone(),\n (!isEmpty(model.projectStatus)\n ? model.projectStatus\n : null\n ),\n (!isEmpty(model.projectUserStatus)\n ? model.projectUserStatus\n : null\n ),\n (!isEmpty(model.wbsStatus)\n ? model.wbsStatus\n : null\n ),\n (!isEmpty(model.wbsUserStatus)\n ? model.wbsUserStatus\n : null\n ),\n );\n }\n\n clone(overrides?: Partial): LevelImportListDtoModel {\n return new LevelImportListDtoModel(\n (overrides && overrides.levelId !== undefined\n ? overrides.levelId\n : this.levelId\n ),\n (overrides?.codePath ?? this.codePath),\n (overrides && overrides.levelNumber !== undefined\n ? overrides.levelNumber\n : this.levelNumber\n ),\n (overrides && overrides.title !== undefined\n ? overrides.title\n : this.title\n ),\n (overrides && overrides.responsibleEngineer !== undefined\n ? overrides.responsibleEngineer\n : this.responsibleEngineer\n ),\n (overrides && overrides.projectNumberForSubmitterSettings !== undefined\n ? overrides.projectNumberForSubmitterSettings\n : this.projectNumberForSubmitterSettings\n ),\n (overrides && overrides.activityItemCategoryNumberForSubmitterSettings !== undefined\n ? overrides.activityItemCategoryNumberForSubmitterSettings\n : this.activityItemCategoryNumberForSubmitterSettings\n ),\n (overrides && overrides.startDate !== undefined\n ? overrides.startDate\n : this.startDate\n ),\n (overrides && overrides.endDate !== undefined\n ? overrides.endDate\n : this.endDate\n ),\n (overrides && overrides.hours !== undefined\n ? overrides.hours\n : this.hours\n ),\n (overrides && overrides.hourlyRate !== undefined\n ? overrides.hourlyRate\n : this.hourlyRate\n ),\n (overrides && overrides.cost !== undefined\n ? overrides.cost\n : this.cost\n ),\n (overrides && overrides.costToComplete !== undefined\n ? overrides.costToComplete\n : this.costToComplete\n ),\n (overrides && overrides.sortOrder !== undefined\n ? overrides.sortOrder\n : this.sortOrder\n ),\n (overrides && overrides.isHidden !== undefined\n ? overrides.isHidden\n : this.isHidden\n ),\n (overrides && overrides.isExisting !== undefined\n ? overrides.isExisting\n : this.isExisting\n ),\n (overrides && overrides.isSelected !== undefined\n ? overrides.isSelected\n : this.isSelected\n ),\n (overrides && overrides.isDeletedInSap !== undefined\n ? overrides.isDeletedInSap\n : this.isDeletedInSap\n ),\n (overrides && overrides.milestones !== undefined\n ? overrides.milestones\n : this.milestones\n ),\n (overrides && overrides.children !== undefined\n ? overrides.children\n : this.children\n ),\n (overrides && overrides.metadata !== undefined\n ? overrides.metadata\n : this.metadata\n ),\n (overrides && overrides.projectStatus !== undefined\n ? overrides.projectStatus\n : this.projectStatus\n ),\n (overrides && overrides.projectUserStatus !== undefined\n ? overrides.projectUserStatus\n : this.projectUserStatus\n ),\n (overrides && overrides.wbsStatus !== undefined\n ? overrides.wbsStatus\n : this.wbsStatus\n ),\n (overrides && overrides.wbsUserStatus !== undefined\n ? overrides.wbsUserStatus\n : this.wbsUserStatus\n ),\n );\n }\n\n toJSON(): LevelImportListDto {\n return {\n levelId: this.levelId,\n codePath: this.codePath,\n levelNumber: this.levelNumber,\n title: this.title,\n responsibleEngineer: (this.responsibleEngineer ? this.responsibleEngineer.toJSON() : null),\n projectNumberForSubmitterSettings: this.projectNumberForSubmitterSettings,\n activityItemCategoryNumberForSubmitterSettings: this.activityItemCategoryNumberForSubmitterSettings,\n startDate: (this.startDate ? this.startDate.toJSON() : null),\n endDate: (this.endDate ? this.endDate.toJSON() : null),\n hours: this.hours,\n hourlyRate: this.hourlyRate,\n cost: this.cost,\n costToComplete: this.costToComplete,\n isHidden: this.isHidden,\n isExisting: this.isExisting,\n isSelected: this.isSelected,\n isDeletedInSap: this.isDeletedInSap,\n milestones: this.milestones.map((item) => item.toJSON()),\n children: this.children.map((item) => item.toJSON()),\n metadata: this.metadata.toJSON(),\n projectStatus: this.projectStatus,\n projectUserStatus: this.projectUserStatus,\n wbsStatus: this.wbsStatus,\n wbsUserStatus: this.wbsUserStatus,\n };\n }\n}\n","import moment from 'moment';\nimport { LevelListNestedDto } from '../../interfaces/dtos/level-list-nested.dto';\nimport { UserSlimDtoModel } from './user-slim.dto.model';\nimport { MilestoneListDtoModel } from './milestone-list.dto.model';\nimport { LevelListDtoModel } from './level-list.dto.model';\nimport { MetadataModel } from '../metadata.model';\nimport { assertRequiredProperties } from '../../utilities/api.utility';\n\nexport class LevelListNestedDtoModel extends LevelListDtoModel {\n constructor(\n levelId: number,\n title: string,\n projectNumberForSubmitterSettings: string,\n activityItemCategoryNumberForSubmitterSettings: string,\n sortOrder: number,\n isHidden: boolean,\n isDeletedInSap: boolean,\n codePath: string,\n startDate: moment.Moment | null,\n endDate: moment.Moment | null,\n reportedHours: number,\n hasWarningSign: boolean | null,\n warningMessage: string | null,\n hours: number,\n availableHours: number,\n hourlyRate: number,\n remainingHours: number | null,\n cost: number | null,\n costToComplete: number | null,\n responsibleEngineer: UserSlimDtoModel | null,\n readonly children: readonly LevelListNestedDtoModel[],\n hasWorkPackages: boolean,\n milestones: readonly MilestoneListDtoModel[],\n readonly canEditLevel: boolean,\n readonly canCreateWorkPackage: boolean,\n metadata: MetadataModel = new MetadataModel(),\n ) {\n super(\n levelId,\n title,\n projectNumberForSubmitterSettings,\n activityItemCategoryNumberForSubmitterSettings,\n sortOrder,\n isHidden,\n isDeletedInSap,\n codePath,\n startDate,\n endDate,\n reportedHours,\n hours,\n availableHours,\n hourlyRate,\n remainingHours,\n cost,\n costToComplete,\n responsibleEngineer,\n children.length > 0,\n hasWorkPackages,\n milestones,\n metadata,\n hasWarningSign,\n warningMessage,\n canEditLevel,\n canCreateWorkPackage,\n );\n\n this.children = [...children];\n }\n\n static fromJSON(json: LevelListNestedDto): LevelListNestedDtoModel {\n assertRequiredProperties(json, [\n 'levelId',\n 'title',\n 'sortOrder',\n 'isHidden',\n 'isDeletedInSap',\n ]);\n\n const children = (Array.isArray(json.children)\n ? json.children.map((item) => LevelListNestedDtoModel.fromJSON(item))\n : []\n );\n\n return new LevelListNestedDtoModel(\n json.levelId,\n json.title,\n json.projectNumberForSubmitterSettings,\n json.activityItemCategoryNumberForSubmitterSettings,\n json.sortOrder,\n json.isHidden,\n json.isDeletedInSap,\n (json.codePath ?? undefined),\n json.startDate != null\n ? moment(json.startDate)\n .parseZone()\n : null,\n json.endDate != null\n ? moment(json.endDate)\n .parseZone()\n : null,\n json.reportedHours || LevelListNestedDtoModel.sumReportedHoursFromChildren(children),\n json.hasWarningSign,\n json.warningMessage,\n json.hours || LevelListNestedDtoModel.sumHoursFromChildren(children),\n json.availableHours || LevelListNestedDtoModel.sumAvailableHoursFromChildren(children),\n json.hourlyRate || 0,\n json.remainingHours,\n json.cost,\n json.costToComplete,\n (json.responsibleEngineer\n ? UserSlimDtoModel.fromJSON(json.responsibleEngineer)\n : null\n ),\n children,\n json.hasWorkPackages,\n (Array.isArray(json.milestones)\n ? json.milestones.map((item) => MilestoneListDtoModel.fromJSON(item))\n .sort((a, b) => (a.sortOrder - b.sortOrder))\n : []\n ),\n !!json.canEditLevel,\n !!json.canCreateWorkPackage,\n new MetadataModel(json.metadata || {}),\n );\n }\n\n // The backend sends us 0 for hours, for the higher levels.\n private static sumHoursFromChildren(children: readonly LevelListNestedDtoModel[]): number {\n return children.reduce((sum, child) => sum + child.hours, 0);\n }\n\n // The backend sends us 0 for reportedHours, for the higher levels.\n private static sumReportedHoursFromChildren(children: readonly LevelListNestedDtoModel[]): number {\n return children.reduce((sum, child) => sum + child.reportedHours, 0);\n }\n\n // The backend sends us 0 for availableHours, for the higher levels.\n private static sumAvailableHoursFromChildren(children: readonly LevelListNestedDtoModel[]): number {\n return children.reduce((sum, child) => sum + child.availableHours, 0);\n }\n}\n","import moment from 'moment';\nimport { MetadataModel } from '../metadata.model';\nimport { LevelListDto } from '../../interfaces/dtos/level-list.dto';\nimport { UserSlimDtoModel } from './user-slim.dto.model';\nimport { MilestoneListDtoModel } from './milestone-list.dto.model';\nimport { assertRequiredProperties } from '../../utilities/api.utility';\n\nexport class LevelListDtoModel {\n constructor(\n readonly levelId: number,\n readonly title: string,\n readonly projectNumberForSubmitterSettings: string,\n readonly activityItemCategoryNumberForSubmitterSettings: string,\n readonly sortOrder: number,\n readonly isHidden: boolean,\n readonly isDeletedInSap: boolean,\n readonly codePath: string = '',\n readonly startDate: moment.Moment | null = null,\n readonly endDate: moment.Moment | null = null,\n readonly reportedHours: number = 0,\n readonly hours: number = 0,\n readonly availableHours: number = 0,\n readonly hourlyRate: number = 0,\n readonly remainingHours: number | null = null,\n readonly cost: number | null = null,\n readonly costToComplete: number | null = null,\n readonly responsibleEngineer: UserSlimDtoModel | null = null,\n readonly hasChildren: boolean = false,\n readonly hasWorkPackages: boolean = false,\n readonly milestones: readonly MilestoneListDtoModel[] = [],\n readonly metadata: MetadataModel = new MetadataModel(),\n readonly hasWarningSign: boolean | null = null,\n readonly warningMessage: string | null = null,\n readonly canEditLevel: boolean,\n readonly canCreateWorkPackage: boolean,\n ) {\n this.startDate = (startDate != null ? startDate.clone() : startDate);\n this.endDate = (endDate != null ? endDate.clone() : endDate);\n this.milestones = [...milestones];\n }\n\n static fromJSON(json: LevelListDto): LevelListDtoModel {\n assertRequiredProperties(json, [\n 'levelId',\n 'title',\n 'sortOrder',\n 'isHidden',\n 'isDeletedInSap',\n ]);\n\n return new LevelListDtoModel(\n json.levelId,\n json.title,\n json.projectNumberForSubmitterSettings,\n json.activityItemCategoryNumberForSubmitterSettings,\n json.sortOrder,\n json.isHidden,\n json.isDeletedInSap,\n (json.codePath ?? undefined),\n json.startDate != null\n ? moment(json.startDate)\n .parseZone()\n : null,\n json.endDate != null\n ? moment(json.endDate)\n .parseZone()\n : null,\n json.reportedHours || 0,\n json.hours || 0,\n json.availableHours || 0,\n json.hourlyRate || 0,\n json.remainingHours,\n json.cost,\n json.costToComplete,\n (json.responsibleEngineer\n ? UserSlimDtoModel.fromJSON(json.responsibleEngineer)\n : undefined\n ),\n json.hasChildren,\n json.hasWorkPackages,\n (Array.isArray(json.milestones)\n ? json.milestones.map((item) => MilestoneListDtoModel.fromJSON(item))\n : undefined\n ),\n new MetadataModel(json.metadata || {}),\n json.hasWarningSign,\n json.warningMessage,\n !!json.canEditLevel,\n !!json.canCreateWorkPackage,\n );\n }\n\n clone(overrides?: Partial): LevelListDtoModel {\n return new LevelListDtoModel(\n (overrides && overrides.levelId != null\n ? overrides.levelId\n : this.levelId\n ),\n (overrides && overrides.title != null\n ? overrides.title\n : this.title\n ),\n (overrides && overrides.projectNumberForSubmitterSettings != null\n ? overrides.projectNumberForSubmitterSettings\n : this.projectNumberForSubmitterSettings\n ),\n (overrides && overrides.activityItemCategoryNumberForSubmitterSettings != null\n ? overrides.activityItemCategoryNumberForSubmitterSettings\n : this.activityItemCategoryNumberForSubmitterSettings\n ),\n (overrides && overrides.sortOrder != null\n ? overrides.sortOrder\n : this.sortOrder\n ),\n (overrides && overrides.isHidden != null\n ? overrides.isHidden\n : this.isHidden\n ),\n (overrides && overrides.isDeletedInSap != null\n ? overrides.isDeletedInSap\n : this.isDeletedInSap\n ),\n (overrides?.codePath ?? this.codePath),\n (overrides && overrides.startDate !== undefined\n ? overrides.startDate\n : this.startDate?.clone() || null\n ),\n (overrides && overrides.endDate !== undefined\n ? overrides.endDate\n : this.endDate?.clone() || null\n ),\n (overrides && overrides.reportedHours !== undefined\n ? overrides.reportedHours\n : this.reportedHours\n ),\n (overrides && overrides.hours !== undefined\n ? overrides.hours\n : this.hours\n ),\n (overrides && overrides.availableHours !== undefined\n ? overrides.availableHours\n : this.availableHours\n ),\n (overrides && overrides.hourlyRate !== undefined\n ? overrides.hourlyRate\n : this.hourlyRate\n ),\n (overrides && overrides.remainingHours !== undefined\n ? overrides.remainingHours\n : this.remainingHours\n ),\n (overrides && overrides.cost !== undefined\n ? overrides.cost\n : this.cost\n ),\n (overrides && overrides.costToComplete !== undefined\n ? overrides.costToComplete\n : this.costToComplete\n ),\n (overrides && overrides.responsibleEngineer !== undefined\n ? overrides.responsibleEngineer\n : this.responsibleEngineer?.clone() || null\n ),\n (overrides && overrides.hasChildren !== undefined\n ? overrides.hasChildren\n : this.hasChildren\n ),\n (overrides && overrides.hasWorkPackages !== undefined\n ? overrides.hasWorkPackages\n : this.hasWorkPackages\n ),\n (overrides && overrides.milestones !== undefined\n ? overrides.milestones\n : this.milestones.map((item) => item.clone())\n ),\n (overrides && overrides.metadata !== undefined\n ? overrides.metadata\n : this.metadata.clone()\n ),\n (overrides && overrides.hasWarningSign !== undefined\n ? overrides.hasWarningSign\n : this.hasWarningSign\n ),\n (overrides && overrides.warningMessage !== undefined\n ? overrides.warningMessage\n : this.warningMessage\n ),\n (overrides && overrides.canEditLevel !== undefined\n ? overrides.canEditLevel\n : this.canEditLevel\n ),\n (overrides && overrides.canCreateWorkPackage !== undefined\n ? overrides.canCreateWorkPackage\n : this.canCreateWorkPackage\n ),\n );\n }\n}\n","import moment from 'moment';\nimport { LevelSlimDto } from '../../interfaces/dtos/level-slim.dto';\nimport { assertRequiredProperties } from '../../utilities/api.utility';\n\nexport class LevelSlimDtoModel {\n constructor(\n readonly levelId: number,\n readonly title: string,\n readonly codePath: string = '',\n readonly startDate: moment.Moment | null = null,\n readonly endDate: moment.Moment | null = null,\n readonly isDeletedInSap: boolean,\n readonly children: LevelSlimDtoModel[] = [],\n ) {\n this.startDate = (startDate != null ? startDate.clone() : startDate);\n this.endDate = (endDate != null ? endDate.clone() : endDate);\n this.children = [...children];\n }\n\n static fromJSON(json: LevelSlimDto): LevelSlimDtoModel {\n assertRequiredProperties(json, [\n 'levelId',\n 'title',\n ]);\n\n return new LevelSlimDtoModel(\n json.levelId,\n json.title,\n (json.codePath ?? undefined),\n (json.startDate\n ? moment(json.startDate)\n .parseZone()\n : null\n ),\n (json.endDate\n ? moment(json.endDate)\n .parseZone()\n : null\n ),\n json.isDeletedInSap,\n (Array.isArray(json.children) ? json.children : [])\n .map((item) => LevelSlimDtoModel.fromJSON(item)),\n );\n }\n\n clone(): LevelSlimDtoModel {\n return new LevelSlimDtoModel(\n this.levelId,\n this.title,\n this.codePath,\n this.startDate ? this.startDate.clone() : null,\n this.endDate ? this.endDate.clone() : null,\n this.isDeletedInSap,\n this.children.map((child) => child.clone()),\n );\n }\n\n /**\n * Recursively search for the received level id.\n * It will continue by searching its children.\n *\n * @param levelId\n */\n getLevelPath(levelId: number): LevelSlimDtoModel[] {\n if (this.levelId === levelId) {\n return [this];\n }\n\n // Look in children\n if (this.children.length > 0) {\n const childrenLen = this.children.length;\n let i = 0;\n let levels: LevelSlimDtoModel[] = [];\n\n while (levels.length === 0 && i < childrenLen) {\n levels = this.children[i].getLevelPath(levelId);\n i += 1;\n }\n\n if (levels.length > 0) {\n return [this, ...levels];\n }\n }\n\n return [];\n }\n\n toJSON(): LevelSlimDto {\n return {\n levelId: this.levelId,\n title: this.title,\n codePath: this.codePath,\n startDate: this.startDate ? this.startDate.toJSON() : null,\n endDate: this.endDate ? this.endDate.toJSON() : null,\n isDeletedInSap: this.isDeletedInSap,\n children: this.children.map((item) => item.toJSON()),\n };\n }\n}\n","import { Diff } from '../../../app.types';\nimport { deepCopy } from '../../../helpers/object.utility';\nimport { MetadataSlimDto } from '../../interfaces/dtos/metadata-slim.dto';\n\nfunction fieldReducer(obj: any, key: string, value: any): T {\n return { ...obj, [key]: deepCopy(value) };\n}\n\nexport class MetadataSlimDtoModel implements MetadataSlimDto {\n readonly fields: Diff;\n\n constructor(\n protected metadata: T = {} as any,\n ) {\n this.fields = Object.entries((this.metadata.fields || {}))\n .reduce((obj, value) => fieldReducer(obj, value[0], value[1]), {} as any);\n }\n\n static fromJSON(json: MetadataSlimDto): MetadataSlimDtoModel {\n return new MetadataSlimDtoModel(json);\n }\n\n get(path: string): any | undefined {\n const parts = path.split('.');\n let value: any | undefined = this.metadata;\n let haystack: any | undefined;\n let key: string;\n\n for (let i = 0, l = parts.length; i < l && value !== undefined; i += 1) {\n key = parts[i];\n haystack = value;\n value = undefined;\n\n if (!key || key.trim() === '' || !haystack || typeof haystack !== 'object') {\n // eslint-disable-next-line no-continue\n continue;\n }\n\n const keys = Object.keys(haystack);\n\n for (let j = 0, m = keys.length; j < m; j += 1) {\n if (keys[j] === key) {\n value = haystack[key];\n break;\n }\n }\n }\n\n return value;\n }\n\n has(path: string): boolean {\n return (this.get(path) !== undefined);\n }\n\n clone(overrides?: { metadata: T }): MetadataSlimDtoModel {\n return new MetadataSlimDtoModel(\n (overrides && overrides.metadata\n ? overrides.metadata\n : deepCopy(this.metadata)\n ),\n );\n }\n\n toJSON(): T {\n return deepCopy(this.metadata);\n }\n}\n","import moment from 'moment';\nimport { MilestoneListDto } from '../../interfaces/dtos/milestone-list.dto';\nimport { MilestoneBaseModel } from '../base/milestone.base.model';\nimport { assertRequiredProperties } from '../../utilities/api.utility';\n\nexport class MilestoneListDtoModel extends MilestoneBaseModel {\n constructor(\n readonly milestoneId: number,\n title: string,\n dueDate: moment.Moment,\n isCompleted: boolean,\n readonly isOverdue: boolean,\n sortOrder: number,\n ) {\n super(\n title,\n dueDate,\n isCompleted,\n sortOrder,\n );\n }\n\n static fromJSON(json: MilestoneListDto): MilestoneListDtoModel {\n assertRequiredProperties(json, [\n 'milestoneId',\n 'title',\n 'dueDate',\n 'isCompleted',\n 'isOverdue',\n 'sortOrder',\n ]);\n\n return new MilestoneListDtoModel(\n json.milestoneId,\n json.title,\n moment(json.dueDate)\n .parseZone(),\n json.isCompleted,\n json.isOverdue,\n json.sortOrder,\n );\n }\n\n clone(overrides?: Partial): MilestoneListDtoModel {\n return new MilestoneListDtoModel(\n (overrides && overrides.milestoneId != null\n ? overrides.milestoneId\n : this.milestoneId\n ),\n (overrides && overrides.title != null\n ? overrides.title\n : this.title\n ),\n (overrides && overrides.dueDate != null\n ? overrides.dueDate\n : this.dueDate\n ),\n (overrides && overrides.isCompleted != null\n ? overrides.isCompleted\n : this.isCompleted\n ),\n (overrides && overrides.isOverdue != null\n ? overrides.isOverdue\n : this.isOverdue\n ),\n (overrides && overrides.sortOrder != null\n ? overrides.sortOrder\n : this.sortOrder\n ),\n );\n }\n\n toJSON(): MilestoneListDto {\n return {\n milestoneId: this.milestoneId,\n title: this.title,\n dueDate: this.dueDate.toJSON(),\n isCompleted: this.isCompleted,\n isOverdue: this.isOverdue,\n sortOrder: this.sortOrder,\n };\n }\n}\n","import moment from 'moment';\nimport { NonHumanResourcePlanningEntryDto, PlanningEntryDtoMetadata } from '../../interfaces/dtos/planning-entry.dto';\nimport { assertRequiredProperties } from '../../utilities/api.utility';\nimport { MetadataModel } from '../metadata.model';\n\nexport class NonHumanResourcePlanningEntryDtoModel {\n /**\n * Derived from the received Meta Data\n * for easier access\n */\n readonly canUpdate: boolean;\n\n constructor(\n readonly planningEntryId: number,\n readonly nonHumanResourceId: string,\n readonly weekStartDate: moment.Moment,\n readonly plannedHours: number | null = null,\n readonly unitBackgroundColorId: number | null = null,\n readonly workingDays: string | null,\n readonly note: string | null,\n readonly noteCreatedBy: string | null,\n readonly noteCreatedOn: moment.Moment | null,\n public holidayDescription: string | null = null,\n public holidayHours: number,\n readonly workPackageId?: number | null,\n readonly unitCategoryId?: number | null,\n readonly metadata: MetadataModel = new MetadataModel(),\n ) {\n this.weekStartDate = (weekStartDate != null ? weekStartDate.clone() : weekStartDate);\n this.canUpdate = (this.metadata.fields && this.metadata.fields.canUpdatePlannedEntry) || false;\n this.noteCreatedOn = (noteCreatedOn != null ? noteCreatedOn.clone() : noteCreatedOn);\n }\n\n static fromJSON(json: NonHumanResourcePlanningEntryDto): NonHumanResourcePlanningEntryDtoModel {\n assertRequiredProperties(json, [\n 'planningEntryId',\n 'nonHumanResourceId',\n 'weekStartDate',\n ]);\n\n return new NonHumanResourcePlanningEntryDtoModel(\n json.planningEntryId,\n json.nonHumanResourceId,\n moment(json.weekStartDate)\n .parseZone(),\n json.plannedHours,\n json.unitBackgroundColorId,\n json.workingDays,\n json.note,\n json.noteCreatedBy,\n json.noteCreatedOn ? moment(json.noteCreatedOn).parseZone() : null,\n json.holidayDescription,\n json.holidayHours,\n json.workPackageId,\n json.unitCategoryId,\n new MetadataModel(json.metadata),\n );\n }\n\n clone(): NonHumanResourcePlanningEntryDtoModel {\n return new NonHumanResourcePlanningEntryDtoModel(\n this.planningEntryId,\n this.nonHumanResourceId,\n this.weekStartDate,\n this.plannedHours,\n this.unitBackgroundColorId,\n this.workingDays,\n this.note,\n this.noteCreatedBy,\n this.noteCreatedOn,\n this.holidayDescription,\n this.holidayHours,\n this.workPackageId,\n this.unitCategoryId,\n this.metadata.clone(),\n );\n }\n\n toJSON(): NonHumanResourcePlanningEntryDto {\n return {\n workPackageId: this.workPackageId,\n nonHumanResourceId: this.nonHumanResourceId,\n weekStartDate: this.weekStartDate.toJSON(),\n plannedHours: this.plannedHours,\n unitBackgroundColorId: this.unitBackgroundColorId,\n workingDays: this.workingDays,\n note: this.note,\n noteCreatedBy: this.noteCreatedBy,\n noteCreatedOn: this.noteCreatedOn ? this.noteCreatedOn.toJSON() : null,\n planningEntryId: this.planningEntryId,\n unitCategoryId: this.unitCategoryId,\n metadata: this.metadata.toJSON(),\n holidayDescription: this.holidayDescription,\n holidayHours: this.holidayHours,\n };\n }\n}\n","import moment from 'moment';\nimport { PlanningResourceUnitAssignment } from '../../../modules/user/planning2/planning-resource.interface';\nimport { UnitSlimDtoModel } from './unit-slim.dto.model';\nimport { MetadataModel } from '../metadata.model';\nimport { assertRequiredProperties } from '../../utilities/api.utility';\nimport { isEmpty } from '../../../helpers/utilities';\nimport { NonHumanResourceUnitAssignmentDtoMetadata, NonHumanResourceUnitAssignmentDto } from '../../interfaces/dtos/non-human-resource-unit-assignment.dto';\n\nexport class NonHumanResourceUnitAssignmentDtoModel implements PlanningResourceUnitAssignment {\n readonly canDelete: boolean;\n\n readonly canEdit: boolean;\n\n readonly lastPlannedDate: moment.Moment | undefined;\n\n readonly isExpired: boolean;\n\n constructor(\n readonly nonHumanResourceUnitAssignmentId: number,\n readonly unit: UnitSlimDtoModel,\n readonly validFrom: moment.Moment,\n readonly validUntil: moment.Moment | undefined,\n readonly hourlyRateCategory: string,\n readonly workingHoursPerWeek: number,\n readonly metadata: MetadataModel = new MetadataModel(),\n ) {\n this.validFrom = validFrom.clone();\n this.validUntil = (validUntil != null ? validUntil.clone() : validUntil);\n\n this.canDelete = !!this.metadata.fields.canDelete;\n this.canEdit = !!this.metadata.fields.canEdit;\n this.lastPlannedDate = (!isEmpty(this.metadata.fields.lastPlannedDate)\n ? moment(this.metadata.fields.lastPlannedDate)\n .parseZone()\n : undefined\n );\n this.isExpired = !!this.metadata.fields.isExpired;\n }\n\n static fromJSON(json: NonHumanResourceUnitAssignmentDto): NonHumanResourceUnitAssignmentDtoModel {\n assertRequiredProperties(json, [\n 'nonHumanResourceUnitAssignmentId',\n 'unit',\n 'hourlyRateCategory',\n 'workingHoursPerWeek',\n 'validFrom',\n ]);\n\n return new NonHumanResourceUnitAssignmentDtoModel(\n json.nonHumanResourceUnitAssignmentId,\n UnitSlimDtoModel.fromJSON(json.unit),\n moment(json.validFrom)\n .parseZone(),\n (!isEmpty(json.validUntil)\n ? moment(json.validUntil)\n .parseZone()\n : undefined\n ),\n json.hourlyRateCategory,\n json.workingHoursPerWeek,\n new MetadataModel(json.metadata || {}),\n );\n }\n\n clone(): NonHumanResourceUnitAssignmentDtoModel {\n return new NonHumanResourceUnitAssignmentDtoModel(\n this.nonHumanResourceUnitAssignmentId,\n this.unit.clone(),\n this.validFrom.clone(),\n this.validUntil?.clone(),\n this.hourlyRateCategory,\n this.workingHoursPerWeek,\n this.metadata.clone(),\n );\n }\n\n toJSON(): NonHumanResourceUnitAssignmentDto {\n return {\n nonHumanResourceUnitAssignmentId: this.nonHumanResourceUnitAssignmentId,\n unit: this.unit.toJSON(),\n validFrom: this.validFrom.toJSON(),\n validUntil: (this.validUntil != null ? this.validUntil.toJSON() : null),\n hourlyRateCategory: this.hourlyRateCategory,\n workingHoursPerWeek: this.workingHoursPerWeek,\n metadata: this.metadata.toJSON(),\n };\n }\n}\n","import moment from 'moment';\nimport { PlanningResource, PlanningResourceUnitAssignment } from '../../../modules/user/planning2/planning-resource.interface';\nimport { ApiModelNew } from '../types';\nimport { assertRequiredProperties } from '../../utilities/api.utility';\nimport { NonHumanResourceDto } from '../../interfaces/dtos/non-human-resource.dto';\nimport { MetadataModel } from '../metadata.model';\nimport { UnitSlimDtoModel } from './unit-slim.dto.model';\nimport { NonHumanResourceUnitAssignmentDtoModel } from './non-human-resource-unit-assignment.dto.model';\n\nexport class NonHumanResourceDtoModel implements ApiModelNew, PlanningResource {\n constructor(\n readonly nonHumanResourceId: string,\n readonly name: string,\n readonly systemId: string | null,\n readonly remark: string | null,\n readonly payrollCompany: string | null,\n readonly costCenter: string | null,\n readonly countryCode: string | null,\n readonly countryName: string | null,\n readonly city: string | null,\n readonly divisionCode: string | null,\n readonly productGroupCode: string | null,\n readonly unit: UnitSlimDtoModel | null,\n readonly businessUnitCode: string | null,\n readonly hourlyRateCategory: string | null,\n readonly workingHoursPerWeek: number | null,\n readonly nonHumanResourceUnitAssignments: NonHumanResourceUnitAssignmentDtoModel[] | null,\n readonly metadata: MetadataModel = new MetadataModel(),\n readonly validFrom: moment.Moment | null = null,\n readonly validUntil: moment.Moment | null = null,\n readonly capacityUnit: string | null = null,\n ) {\n this.unit = (unit != null ? unit.clone() : unit);\n this.validFrom = (validFrom != null ? validFrom.clone() : validFrom);\n this.validUntil = (validUntil != null ? validUntil.clone() : validUntil);\n\n if (nonHumanResourceUnitAssignments) {\n this.nonHumanResourceUnitAssignments = nonHumanResourceUnitAssignments.map((assignment) => assignment.clone());\n }\n }\n\n get id(): string {\n return this.nonHumanResourceId;\n }\n\n get isHumanResource(): boolean {\n return false;\n }\n\n get unitAssignments(): PlanningResourceUnitAssignment[] | null {\n return this.nonHumanResourceUnitAssignments;\n }\n\n static fromJSON(json: NonHumanResourceDto): NonHumanResourceDtoModel {\n assertRequiredProperties(json, [\n 'nonHumanResourceId',\n 'name',\n ]);\n\n return new NonHumanResourceDtoModel(\n json.nonHumanResourceId,\n json.name,\n json.systemId,\n json.remark,\n json.payrollCompany,\n json.costCenter,\n json.countryCode,\n json.countryName,\n json.city,\n json.divisionCode,\n json.productGroupCode,\n (json.unit ? UnitSlimDtoModel.fromJSON(json.unit) : null),\n json.businessUnitCode,\n json.hourlyRateCategory,\n json.workingHoursPerWeek,\n (json.nonHumanResourceUnitAssignments\n ? json.nonHumanResourceUnitAssignments\n .map((assignment) => NonHumanResourceUnitAssignmentDtoModel.fromJSON(assignment))\n : null),\n new MetadataModel(json.metadata || {}),\n (json.validFrom ? moment(json.validFrom).parseZone() : null),\n (json.validUntil ? moment(json.validUntil).parseZone() : null),\n json.capacityUnit,\n );\n }\n\n /**\n * If no value is given the optional field is evaluated as not valid.\n */\n isValidFrom(startDate: moment.Moment): boolean {\n if (this.validFrom != null) {\n return this.validFrom.isSameOrBefore(startDate) || startDate < moment();\n }\n\n return false;\n }\n\n /**\n * If no value is given the optional field is evaluated as valid.\n */\n isValidUntil(endDate: moment.Moment): boolean {\n if (this.validUntil != null) {\n return this.validUntil.isSameOrAfter(endDate);\n }\n\n return true;\n }\n\n isValidUntilInPast(checkDate: moment.Moment = moment()): boolean {\n return this.validUntil != null && this.validUntil.isBefore(checkDate);\n }\n\n toJSON(): NonHumanResourceDto {\n return {\n nonHumanResourceId: this.nonHumanResourceId,\n name: this.name,\n systemId: this.systemId,\n remark: this.remark,\n payrollCompany: this.payrollCompany,\n costCenter: this.costCenter,\n countryCode: this.countryCode,\n countryName: this.countryName,\n city: this.city,\n divisionCode: this.divisionCode,\n productGroupCode: this.productGroupCode,\n unit: this.unit ? this.unit.toJSON() : null,\n businessUnitCode: this.businessUnitCode,\n hourlyRateCategory: this.hourlyRateCategory,\n workingHoursPerWeek: this.workingHoursPerWeek,\n nonHumanResourceUnitAssignments: this.nonHumanResourceUnitAssignments\n ? this.nonHumanResourceUnitAssignments.map((assignment) => assignment.toJSON())\n : null,\n metadata: this.metadata,\n validFrom: this.validFrom ? this.validFrom.toJSON() : null,\n validUntil: this.validUntil ? this.validUntil.toJSON() : null,\n capacityUnit: this.capacityUnit,\n };\n }\n\n clone(overrides?: Partial): NonHumanResourceDtoModel {\n const copy = { ...this, ...overrides };\n\n return new NonHumanResourceDtoModel(\n copy.nonHumanResourceId,\n copy.name,\n copy.systemId,\n copy.remark,\n copy.payrollCompany,\n copy.costCenter,\n copy.countryCode,\n copy.countryName,\n copy.city,\n copy.divisionCode,\n copy.productGroupCode,\n copy.unit ? copy.unit.clone() : null,\n copy.businessUnitCode,\n copy.hourlyRateCategory,\n copy.workingHoursPerWeek,\n copy.nonHumanResourceUnitAssignments\n ? copy.nonHumanResourceUnitAssignments.map((assignment) => assignment.clone())\n : null,\n copy.metadata.clone(),\n copy.validFrom ? copy.validFrom.clone() : null,\n copy.validUntil ? copy.validUntil.clone() : null,\n );\n }\n}\n","import moment from 'moment';\nimport { CapacityPlanningSlimDto } from '../../interfaces/dtos/planning-capacity-slim.dto';\nimport { assertRequiredProperties } from '../../utilities/api.utility';\n\nexport class SlimCapacityPlanningDtoModel {\n constructor(\n readonly weekStartDate: moment.Moment | null,\n readonly totalHours: number,\n readonly availableHours: number,\n public hasHoliday: boolean,\n public holidayDescription: string | null = null,\n public holidayHours: number,\n ) {\n }\n\n static fromJSON(json: CapacityPlanningSlimDto): SlimCapacityPlanningDtoModel {\n assertRequiredProperties(json, [\n 'weekStartDate',\n 'totalHours',\n 'availableHours',\n ]);\n\n return new SlimCapacityPlanningDtoModel(\n (json.weekStartDate\n ? moment(json.weekStartDate)\n .parseZone()\n : null\n ),\n json.totalHours,\n json.availableHours,\n json.hasHoliday,\n json.holidayDescription,\n json.holidayHours,\n );\n }\n\n clone(): SlimCapacityPlanningDtoModel {\n return new SlimCapacityPlanningDtoModel(\n this.weekStartDate != null ? this.weekStartDate.clone() : null,\n this.totalHours,\n this.availableHours,\n this.hasHoliday,\n this.holidayDescription,\n this.holidayHours,\n );\n }\n\n toJSON(): CapacityPlanningSlimDto {\n return {\n weekStartDate: (this.weekStartDate != null ? this.weekStartDate.toJSON() : null),\n totalHours: this.totalHours,\n availableHours: this.availableHours,\n hasHoliday: this.hasHoliday,\n holidayDescription: this.holidayDescription,\n holidayHours: this.holidayHours,\n };\n }\n}\n","import moment from 'moment';\nimport { CapacityUnits } from '../../../modules/administration/non-human-resources/capacity-units';\nimport { PlanningEntryDto, PlanningEntryDtoMetadata } from '../../interfaces/dtos/planning-entry.dto';\nimport { assertRequiredProperties } from '../../utilities/api.utility';\nimport { MetadataModel } from '../metadata.model';\n\nexport class PlanningEntryDtoModel {\n /**\n * Derived from the received Meta Data\n * for easier access\n */\n readonly canUpdate: boolean;\n\n constructor(\n readonly planningEntryId: number,\n readonly userId: string,\n readonly weekStartDate: moment.Moment,\n readonly plannedHours: number | null = null,\n readonly unitBackgroundColorId: number | null,\n readonly workingDays: string | null,\n readonly note: string | null,\n readonly noteCreatedBy: string | null,\n readonly noteCreatedOn: moment.Moment | null,\n public holidayDescription: string | null = null,\n public holidayHours: number,\n readonly workPackageId?: number | null,\n readonly unitCategoryId?: number | null,\n readonly resourceCapacityUnit: CapacityUnits | null = null,\n readonly metadata: MetadataModel = new MetadataModel(),\n ) {\n this.weekStartDate = (weekStartDate != null ? weekStartDate.clone() : weekStartDate);\n this.canUpdate = (this.metadata.fields && this.metadata.fields.canUpdatePlannedEntry) || false;\n this.noteCreatedOn = (noteCreatedOn != null ? noteCreatedOn.clone() : noteCreatedOn);\n }\n\n static fromJSON(json: PlanningEntryDto): PlanningEntryDtoModel {\n assertRequiredProperties(json, [\n 'planningEntryId',\n 'userId',\n 'weekStartDate',\n 'resourceCapacityUnit',\n ]);\n\n return new PlanningEntryDtoModel(\n json.planningEntryId,\n json.userId,\n moment(json.weekStartDate)\n .parseZone(),\n json.plannedHours,\n json.unitBackgroundColorId,\n json.workingDays,\n json.note,\n json.noteCreatedBy,\n json.noteCreatedOn ? moment(json.noteCreatedOn).parseZone() : null,\n json.holidayDescription,\n json.holidayHours,\n json.workPackageId,\n json.unitCategoryId,\n Object.values(CapacityUnits).filter((cu) => cu.toString() === json.resourceCapacityUnit)?.[0],\n new MetadataModel(json.metadata || {}),\n );\n }\n\n clone(): PlanningEntryDtoModel {\n return new PlanningEntryDtoModel(\n this.planningEntryId,\n this.userId,\n this.weekStartDate,\n this.plannedHours,\n this.unitBackgroundColorId,\n this.workingDays,\n this.note,\n this.noteCreatedBy,\n this.noteCreatedOn,\n this.holidayDescription,\n this.holidayHours,\n this.workPackageId,\n this.unitCategoryId,\n this.resourceCapacityUnit,\n );\n }\n\n toJSON(): PlanningEntryDto {\n return {\n workPackageId: this.workPackageId,\n userId: this.userId,\n weekStartDate: this.weekStartDate.toJSON(),\n plannedHours: this.plannedHours,\n unitBackgroundColorId: this.unitBackgroundColorId,\n workingDays: this.workingDays,\n note: this.note,\n noteCreatedBy: this.noteCreatedBy,\n noteCreatedOn: this.noteCreatedOn ? this.noteCreatedOn.toJSON() : null,\n planningEntryId: this.planningEntryId,\n unitCategoryId: this.unitCategoryId,\n metadata: this.metadata.toJSON(),\n holidayDescription: this.holidayDescription,\n holidayHours: this.holidayHours,\n resourceCapacityUnit: this.resourceCapacityUnit?.toString() || '',\n };\n }\n}\n","import { ProjectRecentListDtoModel } from './project-recent-list.dto.model';\nimport { ProjectDashboardDto } from '../../interfaces/dtos/project-dashboard.dto';\nimport { assertRequiredProperties } from '../../utilities/api.utility';\n\nexport class ProjectDashboardDtoModel extends ProjectRecentListDtoModel {\n constructor(\n projectId: number,\n title: string,\n readonly projectNumber: string,\n readonly projectTypeCode: string,\n ) {\n super(\n projectId,\n title,\n );\n }\n\n static fromJSON(json: ProjectDashboardDto): ProjectDashboardDtoModel {\n assertRequiredProperties(json, [\n 'projectNumber',\n 'projectTypeCode',\n ]);\n\n return new ProjectDashboardDtoModel(\n json.projectId,\n json.title,\n json.projectNumber,\n json.projectTypeCode,\n );\n }\n\n toJSON(): ProjectDashboardDto {\n return Object.assign(super.toJSON(), {\n projectNumber: this.projectNumber,\n projectTypeCode: this.projectTypeCode,\n });\n }\n}\n","import moment, { Moment } from 'moment';\nimport { ProjectImportListDto } from '../../interfaces/dtos/project-import-list.dto';\nimport { UserSlimDtoModel } from './user-slim.dto.model';\nimport { LevelImportListDtoModel } from './level-import-list.dto.model';\nimport { ProjectTypeCode } from '../../../models/project-type.enum';\nimport { ProjectImportListDtoMetadata } from '../../interfaces/metadata';\nimport { MetadataModel } from '../metadata.model';\nimport { ApiModelNew } from '../types';\nimport { assertRequiredProperties } from '../../utilities/api.utility';\n\nexport class ProjectImportListPartialDtoModel implements ApiModelNew {\n constructor(\n readonly sapNumber: string,\n readonly projectNumber: string,\n readonly title: string,\n readonly customerCountryCode: string,\n readonly projectManager: UserSlimDtoModel | null,\n readonly technicalProjectManager: UserSlimDtoModel | null,\n readonly projectTypeCode: ProjectTypeCode,\n readonly emtOrderFromUnit: string,\n readonly emtOrderFromCountryCode: string,\n readonly structure: readonly LevelImportListDtoModel[],\n readonly metadata: ProjectImportListDtoMetadata,\n readonly projectStatus: string | null,\n readonly projectUserStatus: string | null,\n readonly wbsStatus: string | null,\n readonly wbsUserStatus: string | null,\n readonly getDate: Moment | null,\n ) {\n this.structure = [...structure];\n }\n\n // eslint-disable-next-line complexity\n static fromJSON(json: ProjectImportListDto): ProjectImportListPartialDtoModel {\n assertRequiredProperties(json, [\n ]);\n\n return new ProjectImportListPartialDtoModel(\n json.sapNumber || '',\n json.projectNumber || '',\n json.title || '',\n json.customerCountryCode || '',\n (json.projectManager\n ? UserSlimDtoModel.fromJSON(json.projectManager)\n : null\n ),\n (json.technicalProjectManager\n ? UserSlimDtoModel.fromJSON(json.technicalProjectManager)\n : null\n ),\n (json.projectTypeCode != null\n ? json.projectTypeCode\n : ProjectTypeCode.ProjectWithWBSPlanning1\n ),\n json.emtOrderFromUnit || '',\n json.emtOrderFromCountryCode || '',\n (Array.isArray(json.structure) ? json.structure : [])\n .map((item) => LevelImportListDtoModel.fromJSON(item)),\n new MetadataModel(json.metadata || {}) as any,\n json.projectStatus,\n json.projectUserStatus,\n json.wbsStatus,\n json.wbsUserStatus,\n (json.getDate ? moment(json.getDate) : null),\n );\n }\n\n clone(overrides?: Partial): ProjectImportListPartialDtoModel {\n // const cls = Object.getPrototypeOf(this).constructor;\n\n return new ProjectImportListPartialDtoModel(\n (overrides && overrides.sapNumber != null\n ? overrides.sapNumber\n : this.sapNumber\n ),\n (overrides && overrides.projectNumber != null\n ? overrides.projectNumber\n : this.projectNumber\n ),\n (overrides && overrides.title != null\n ? overrides.title\n : this.title\n ),\n (overrides && overrides.customerCountryCode != null\n ? overrides.customerCountryCode\n : this.customerCountryCode\n ),\n (overrides && overrides.projectManager !== undefined\n ? overrides.projectManager\n : this.projectManager?.clone() || null\n ),\n (overrides && overrides.technicalProjectManager !== undefined\n ? overrides.technicalProjectManager\n : this.technicalProjectManager?.clone() || null\n ),\n (overrides && overrides.projectTypeCode != null\n ? overrides.projectTypeCode\n : this.projectTypeCode\n ),\n (overrides && overrides.emtOrderFromUnit != null\n ? overrides.emtOrderFromUnit\n : this.emtOrderFromUnit\n ),\n (overrides && overrides.emtOrderFromCountryCode != null\n ? overrides.emtOrderFromCountryCode\n : this.emtOrderFromCountryCode\n ),\n (overrides && overrides.structure\n ? overrides.structure\n : this.structure.map((item) => item.clone())\n ),\n (overrides && overrides.metadata\n ? overrides.metadata\n : new MetadataModel(this.metadata) as any\n ),\n (overrides && overrides.projectStatus != null\n ? overrides.projectStatus\n : this.projectStatus\n ),\n (overrides && overrides.projectUserStatus != null\n ? overrides.projectUserStatus\n : this.projectUserStatus\n ),\n (overrides && overrides.wbsStatus != null\n ? overrides.wbsStatus\n : this.wbsStatus\n ),\n (overrides && overrides.wbsUserStatus != null\n ? overrides.wbsUserStatus\n : this.wbsUserStatus\n ),\n (overrides && overrides.getDate !== undefined\n ? overrides.getDate?.clone() || null\n : this.getDate\n ),\n );\n }\n\n toJSON(): ProjectImportListDto {\n return {\n sapNumber: this.sapNumber,\n projectNumber: this.projectNumber,\n title: this.title,\n customerCountryCode: this.customerCountryCode,\n projectManager: (this.projectManager ? this.projectManager.toJSON() : null),\n technicalProjectManager: (this.technicalProjectManager ? this.technicalProjectManager.toJSON() : null),\n projectTypeCode: this.projectTypeCode,\n emtOrderFromUnit: this.emtOrderFromUnit,\n emtOrderFromCountryCode: this.emtOrderFromCountryCode,\n structure: this.structure.map((item) => item.toJSON()),\n metadata: { ...this.metadata },\n projectStatus: this.projectStatus,\n projectUserStatus: this.projectUserStatus,\n wbsStatus: this.wbsStatus,\n wbsUserStatus: this.wbsUserStatus,\n getDate: (this.getDate ? this.getDate.toJSON() : null),\n };\n }\n}\n","import moment, { Moment } from 'moment';\nimport { ProjectImportListDto } from '../../interfaces/dtos/project-import-list.dto';\nimport { UserSlimDtoModel } from './user-slim.dto.model';\nimport { LevelImportListDtoModel } from './level-import-list.dto.model';\nimport { ProjectTypeCode } from '../../../models/project-type.enum';\nimport { ProjectImportListDtoMetadata } from '../../interfaces/metadata';\nimport { MetadataModel } from '../metadata.model';\nimport { ProjectImportListPartialDtoModel } from './project-import-list-partial.dto.model';\nimport { assertRequiredProperties } from '../../utilities/api.utility';\n\nexport class ProjectImportListDtoModel extends ProjectImportListPartialDtoModel {\n constructor(\n readonly sapNumber: string,\n readonly projectNumber: string,\n readonly title: string,\n readonly customerCountryCode: string,\n readonly projectManager: UserSlimDtoModel,\n readonly technicalProjectManager: UserSlimDtoModel | null,\n readonly projectTypeCode: ProjectTypeCode,\n readonly emtOrderFromUnit: string,\n readonly emtOrderFromCountryCode: string,\n readonly structure: readonly LevelImportListDtoModel[],\n readonly metadata: ProjectImportListDtoMetadata,\n readonly projectStatus: string | null,\n readonly projectUserStatus: string | null,\n readonly wbsStatus: string | null,\n readonly wbsUserStatus: string | null,\n readonly getDate: Moment | null,\n ) {\n super(\n sapNumber,\n projectNumber,\n title,\n customerCountryCode,\n projectManager,\n technicalProjectManager,\n projectTypeCode,\n emtOrderFromUnit,\n emtOrderFromCountryCode,\n structure,\n metadata,\n projectStatus,\n projectUserStatus,\n wbsStatus,\n wbsUserStatus,\n getDate,\n );\n }\n\n static fromJSON(json: ProjectImportListDto): ProjectImportListDtoModel {\n assertRequiredProperties(json, [\n 'projectManager',\n ]);\n\n return new ProjectImportListDtoModel(\n json.sapNumber || '',\n json.projectNumber || '',\n json.title || '',\n json.customerCountryCode || '',\n UserSlimDtoModel.fromJSON(json.projectManager),\n json.technicalProjectManager ? UserSlimDtoModel.fromJSON(json.technicalProjectManager) : null,\n (json.projectTypeCode != null\n ? json.projectTypeCode\n : ProjectTypeCode.ProjectWithWBSPlanning3\n ),\n json.emtOrderFromUnit || '',\n json.emtOrderFromCountryCode || '',\n (Array.isArray(json.structure) ? json.structure : [])\n .map((item) => LevelImportListDtoModel.fromJSON(item)),\n new MetadataModel(json.metadata || {}) as any,\n json.projectStatus,\n json.projectUserStatus,\n json.wbsStatus,\n json.wbsUserStatus,\n json.getDate ? moment(json.getDate) : null,\n );\n }\n\n clone(overrides?: Partial): ProjectImportListDtoModel {\n return new ProjectImportListDtoModel(\n (overrides && overrides.sapNumber != null\n ? overrides.sapNumber\n : this.sapNumber\n ),\n (overrides && overrides.projectNumber != null\n ? overrides.projectNumber\n : this.projectNumber\n ),\n (overrides && overrides.title != null\n ? overrides.title\n : this.title\n ),\n (overrides && overrides.customerCountryCode != null\n ? overrides.customerCountryCode\n : this.customerCountryCode\n ),\n (overrides && overrides.projectManager\n ? overrides.projectManager\n : this.projectManager.clone()\n ),\n (overrides && overrides.technicalProjectManager\n ? overrides.technicalProjectManager\n : this.technicalProjectManager?.clone() || null\n ),\n (overrides && overrides.projectTypeCode != null\n ? overrides.projectTypeCode\n : this.projectTypeCode\n ),\n (overrides && overrides.emtOrderFromUnit != null\n ? overrides.emtOrderFromUnit\n : this.emtOrderFromUnit\n ),\n (overrides && overrides.emtOrderFromCountryCode != null\n ? overrides.emtOrderFromCountryCode\n : this.emtOrderFromCountryCode\n ),\n (overrides && overrides.structure\n ? overrides.structure\n : this.structure.map((item) => item.clone())\n ),\n (overrides && overrides.metadata\n ? overrides.metadata\n : new MetadataModel(this.metadata) as any\n ),\n (overrides && overrides.projectStatus != null\n ? overrides.projectStatus\n : this.projectStatus\n ),\n (overrides && overrides.projectUserStatus != null\n ? overrides.projectUserStatus\n : this.projectUserStatus\n ),\n (overrides && overrides.wbsStatus != null\n ? overrides.wbsStatus\n : this.wbsStatus\n ),\n (overrides && overrides.wbsUserStatus != null\n ? overrides.wbsUserStatus\n : this.wbsUserStatus\n ),\n (overrides && overrides.getDate != null\n ? overrides.getDate\n : this.getDate?.clone() || null\n ),\n );\n }\n}\n","import { ProjectRecentListDto } from '../../interfaces/dtos/project-recent-list.dto';\nimport { assertRequiredProperties } from '../../utilities/api.utility';\n\nexport class ProjectRecentListDtoModel {\n constructor(\n readonly projectId: number,\n readonly title: string,\n ) {\n }\n\n static fromJSON(json: ProjectRecentListDto): ProjectRecentListDtoModel {\n assertRequiredProperties(json, [\n 'projectId',\n 'title',\n ]);\n\n return new ProjectRecentListDtoModel(\n json.projectId,\n json.title,\n );\n }\n\n toJSON(): ProjectRecentListDto {\n return {\n projectId: this.projectId,\n title: this.title,\n };\n }\n}\n","import { ProjectTypeDto } from '../../interfaces/dtos/project-type.dto';\nimport { ProjectTypeCode } from '../../../models/project-type.enum';\nimport { assertRequiredProperties } from '../../utilities/api.utility';\n\nexport class ProjectTypeDtoModel {\n constructor(\n readonly projectTypeCode: ProjectTypeCode,\n readonly name: string,\n readonly numberOfLevels: number,\n readonly useOnlyAsSupplierProjectType: boolean,\n readonly useOnlyAsAdditionalSupplierProjectType: boolean,\n ) {\n }\n\n static fromJSON(json: ProjectTypeDto): ProjectTypeDtoModel {\n assertRequiredProperties(json, [\n 'projectTypeCode',\n 'name',\n 'numberOfLevels',\n 'useOnlyAsSupplierProjectType',\n 'useOnlyAsAdditionalSupplierProjectType',\n ]);\n\n return new ProjectTypeDtoModel(\n json.projectTypeCode,\n json.name,\n json.numberOfLevels,\n json.useOnlyAsSupplierProjectType,\n json.useOnlyAsAdditionalSupplierProjectType,\n );\n }\n\n toJSON(): ProjectTypeDto {\n return {\n projectTypeCode: this.projectTypeCode,\n name: this.name,\n numberOfLevels: this.numberOfLevels,\n useOnlyAsSupplierProjectType: this.useOnlyAsSupplierProjectType,\n useOnlyAsAdditionalSupplierProjectType: this.useOnlyAsAdditionalSupplierProjectType,\n };\n }\n}\n","import moment from 'moment';\nimport { ApiModelNew } from '../types';\nimport { QuestionDashboardDto } from '../../interfaces/dtos/question-dashboard.dto';\nimport { UserSlimDtoModel } from './user-slim.dto.model';\nimport { WorkPackageRole } from '../../../models/work-package-role.enum';\nimport { assertRequiredProperties } from '../../utilities/api.utility';\n\nexport class QuestionDashboardDtoModel implements ApiModelNew {\n constructor(\n readonly questionId: number,\n readonly title: string,\n readonly text: string,\n readonly createdOn: moment.Moment,\n readonly workPackageId: number,\n readonly workPackageTitle: string,\n readonly projectId: number,\n readonly projectName: string,\n readonly questionCreator: UserSlimDtoModel,\n readonly questionCreatorWorkPackageRole: WorkPackageRole | null = null,\n ) {\n this.createdOn = createdOn.clone();\n }\n\n static fromJSON(json: QuestionDashboardDto): QuestionDashboardDtoModel {\n assertRequiredProperties(json, [\n 'questionId',\n 'title',\n 'text',\n 'createdOn',\n 'workPackageId',\n 'workPackageTitle',\n 'projectId',\n 'projectName',\n 'questionCreator',\n ]);\n\n return new QuestionDashboardDtoModel(\n json.questionId,\n json.title,\n json.text,\n moment(json.createdOn)\n .parseZone(),\n json.workPackageId,\n json.workPackageTitle,\n json.projectId,\n json.projectName,\n UserSlimDtoModel.fromJSON(json.questionCreator),\n json.questionCreatorWorkPackageRole,\n );\n }\n\n toJSON(): QuestionDashboardDto {\n return {\n questionId: this.questionId,\n title: this.title,\n text: this.text,\n createdOn: this.createdOn.toJSON(),\n workPackageId: this.workPackageId,\n workPackageTitle: this.workPackageTitle,\n projectId: this.projectId,\n projectName: this.projectName,\n questionCreator: this.questionCreator.toJSON(),\n questionCreatorWorkPackageRole: (this.questionCreatorWorkPackageRole\n ? this.questionCreatorWorkPackageRole\n : null),\n };\n }\n\n clone(overrides?: Partial): QuestionDashboardDtoModel {\n const clone = QuestionDashboardDtoModel.fromJSON(this.toJSON());\n\n if (overrides) {\n Object.assign(clone, overrides);\n }\n\n return clone;\n }\n}\n","import moment from 'moment';\nimport { QuestionStatus } from '../../../models/question-status.enum';\nimport { QuestionDto } from '../../interfaces/dtos/question.dto';\nimport { UserSlimDtoModel } from './user-slim.dto.model';\nimport { AttachmentSlimDtoModel } from './attachment-slim.dto.model';\nimport { MetadataModel } from '../metadata.model';\nimport { QuestionMetadata } from '../../interfaces/metadata';\nimport { WorkPackageRole } from '../../../models/work-package-role.enum';\nimport { assertRequiredProperties } from '../../utilities/api.utility';\n\nexport class QuestionDtoModel {\n constructor(\n readonly questionId: number,\n readonly title: string,\n readonly text: string,\n readonly creator: UserSlimDtoModel,\n readonly status: QuestionStatus,\n readonly createdOn: moment.Moment,\n readonly replyCounter: number = 0,\n readonly attachments: readonly AttachmentSlimDtoModel[] = [],\n readonly creatorWorkPackageRole: WorkPackageRole | null = null,\n readonly metadata: MetadataModel = new MetadataModel(),\n ) {\n this.createdOn = createdOn.clone();\n this.attachments = [...attachments];\n }\n\n static fromJSON(json: QuestionDto): QuestionDtoModel {\n assertRequiredProperties(json, [\n 'questionId',\n 'title',\n 'text',\n 'status',\n 'creator',\n ]);\n\n return new QuestionDtoModel(\n json.questionId,\n json.title,\n json.text,\n UserSlimDtoModel.fromJSON(json.creator),\n json.status,\n moment(json.createdOn)\n .parseZone(),\n json.replyCounter || 0,\n (Array.isArray(json.attachments) ? json.attachments : [])\n .map((item) => AttachmentSlimDtoModel.fromJSON(item)),\n json.creatorWorkPackageRole,\n new MetadataModel(json.metadata || {}),\n );\n }\n\n canReplyToQuestion(): boolean {\n return this.metadata.fields.canReplyToQuestion;\n }\n\n canConcludeQuestion(): boolean {\n return this.metadata.fields.canConcludeQuestion;\n }\n\n canUpdateQuestion(): boolean {\n return this.metadata.fields.canUpdateQuestion;\n }\n\n canReopenQuestion(): boolean {\n return this.metadata.fields.canReopenQuestion;\n }\n\n toJSON(): QuestionDto {\n return {\n questionId: this.questionId,\n title: this.title,\n text: this.text,\n creator: this.creator.toJSON(),\n status: this.status,\n createdOn: this.createdOn.toJSON(),\n replyCounter: this.replyCounter,\n attachments: this.attachments.map((item) => item.toJSON()),\n creatorWorkPackageRole: this.creatorWorkPackageRole,\n metadata: this.metadata.toJSON(),\n };\n }\n}\n","import moment from 'moment';\nimport { RangeSetting } from '../../interfaces/dtos/range-setting.dto';\n\nexport class RangeSettingModel {\n constructor(\n readonly fromDate: moment.Moment,\n readonly toDate: moment.Moment | null,\n ) {\n this.fromDate = fromDate.clone();\n this.toDate = toDate ? toDate.clone() : null;\n }\n\n static fromJSON(json: RangeSetting): RangeSettingModel {\n return new RangeSettingModel(\n moment(json.fromDate).parseZone(),\n json.toDate ? moment(json.toDate).parseZone() : null,\n );\n }\n\n toJSON(): RangeSetting {\n return {\n fromDate: this.fromDate.toString(),\n toDate: this.toDate ? this.toDate.toString() : null,\n };\n }\n}\n","import { RatingDto } from '../../interfaces/dtos/rating.dto';\nimport { ApiModelNew } from '../types';\nimport { assertRequiredProperties } from '../../utilities/api.utility';\n\nexport class RatingDtoModel implements ApiModelNew {\n constructor(\n readonly ratingId: number,\n readonly stars: number,\n readonly title: string,\n readonly description: string,\n ) {\n }\n\n static fromJSON(json: RatingDto): RatingDtoModel {\n assertRequiredProperties(json, [\n 'ratingId',\n 'stars',\n 'title',\n 'description',\n ]);\n\n return new RatingDtoModel(\n json.ratingId,\n json.stars,\n json.title,\n json.description,\n );\n }\n\n clone(overrides?: Partial): RatingDtoModel {\n return new RatingDtoModel(\n (overrides && overrides.ratingId != null\n ? overrides.ratingId\n : this.ratingId\n ),\n (overrides && overrides.stars != null\n ? overrides.stars\n : this.stars\n ),\n (overrides && overrides.title != null\n ? overrides.title\n : this.title\n ),\n (overrides && overrides.description != null\n ? overrides.description\n : this.description\n ),\n );\n }\n\n toJSON(): RatingDto {\n return {\n ratingId: this.ratingId,\n stars: this.stars,\n title: this.title,\n description: this.description,\n };\n }\n}\n","import moment from 'moment';\nimport { ApiModelNew } from '../types';\nimport { assertRequiredProperties } from '../../utilities/api.utility';\nimport { NonHumanResourceSlimDto } from '../../interfaces/dtos/non-human-resource-slim.dto';\n\nexport class NonHumanResourceSlimDtoModel implements ApiModelNew {\n constructor(\n readonly nonHumanResourceId: string,\n readonly name: string,\n readonly validFrom: moment.Moment | null = null,\n readonly validUntil: moment.Moment | null = null,\n ) {\n this.validFrom = (validFrom != null ? validFrom.clone() : validFrom);\n this.validUntil = (validUntil != null ? validUntil.clone() : validUntil);\n }\n\n static fromJSON(json: NonHumanResourceSlimDto): NonHumanResourceSlimDtoModel {\n assertRequiredProperties(json, [\n 'nonHumanResourceId',\n 'name',\n ]);\n\n return new NonHumanResourceSlimDtoModel(\n json.nonHumanResourceId,\n json.name,\n (json.validFrom\n ? moment(json.validFrom)\n .parseZone()\n : null\n ),\n (json.validUntil\n ? moment(json.validUntil)\n .parseZone()\n : null\n ),\n );\n }\n\n /**\n * If no value is given the optional field is evaluated as not valid.\n */\n isValidFrom(startDate: moment.Moment): boolean {\n if (this.validFrom != null) {\n return this.validFrom.isSameOrBefore(startDate) || startDate < moment();\n }\n\n return false;\n }\n\n /**\n * If no value is given the optional field is evaluated as valid.\n */\n isValidUntil(endDate: moment.Moment): boolean {\n if (this.validUntil != null) {\n return this.validUntil.isSameOrAfter(endDate);\n }\n\n return true;\n }\n\n isValidUntilInPast(checkDate: moment.Moment = moment()): boolean {\n return this.validUntil != null && this.validUntil.isBefore(checkDate);\n }\n\n toJSON(): NonHumanResourceSlimDto {\n return {\n nonHumanResourceId: this.nonHumanResourceId,\n name: this.name,\n validFrom: (this.validFrom ? this.validFrom.toJSON() : null),\n validUntil: (this.validUntil ? this.validUntil.toJSON() : null),\n };\n }\n\n clone(overrides?: Partial): NonHumanResourceSlimDtoModel {\n return new NonHumanResourceSlimDtoModel(\n overrides && overrides.nonHumanResourceId != null\n ? overrides.nonHumanResourceId\n : this.nonHumanResourceId,\n overrides && overrides.name != null\n ? overrides.name\n : this.name,\n overrides && overrides.validFrom !== undefined\n ? overrides.validFrom\n : this.validFrom?.clone() || null,\n overrides && overrides.validUntil !== undefined\n ? overrides.validUntil\n : this.validUntil?.clone() || null,\n );\n }\n}\n","import moment from 'moment';\nimport { CapacityUnits } from '../../../modules/administration/non-human-resources/capacity-units';\nimport { MetadataModel } from '../metadata.model';\nimport { ResponsibleUserMetadata } from '../../interfaces/metadata';\nimport { NonHumanResourcePlanningEntryDtoModel } from './non-human-resource-planning-entry.dto.model';\nimport { CapacityDtoModel } from './capacity.dto.model';\nimport { NonHumanResourceSlimDtoModel } from './non-human-resource-slim.dto.model';\nimport { ResponsibleResourceDto } from '../../interfaces/dtos/responsible-resource.dto';\nimport { assertRequiredProperties } from '../../utilities/api.utility';\n\nexport class ResponsibleResourceDtoModel extends NonHumanResourceSlimDtoModel {\n readonly canRemoveResponsibleUser: boolean;\n\n readonly canRemoveResponsibleUserMessage: string | null;\n\n readonly canEditResponsibleUser: boolean;\n\n constructor(\n nonHumanResourceId: string,\n name: string,\n validFrom: moment.Moment | null,\n validUntil: moment.Moment | null,\n /** This is the total of all the planningEntries of the user, even those not visible or transmitted */\n public plannedHours: number,\n public reportedHours: number,\n public plannedHoursNotIncludedInTotal: number,\n public totalPlannedHours: number,\n readonly planningEntries: NonHumanResourcePlanningEntryDtoModel[],\n readonly capacities: CapacityDtoModel[],\n readonly metadata: MetadataModel = new MetadataModel(),\n readonly capacityUnit: CapacityUnits | null = null,\n ) {\n super(\n nonHumanResourceId,\n name,\n validFrom,\n validUntil,\n );\n this.planningEntries = [...planningEntries];\n this.capacities = [...capacities];\n this.planningEntries = [...planningEntries];\n this.capacityUnit = capacityUnit;\n\n this.canRemoveResponsibleUser = (this.metadata\n && this.metadata.fields\n && this.metadata.fields.canRemoveResponsibleUser) || false;\n\n this.canRemoveResponsibleUserMessage = (this.metadata\n && this.metadata.fields\n && this.metadata.fields.canRemoveResponsibleUserMessage) || null;\n\n this.canEditResponsibleUser = (this.metadata\n && this.metadata.fields\n && this.metadata.fields.canEditResponsibleUser) || false;\n }\n\n get isHWCapacityUnit(): boolean {\n return this.capacityUnit === CapacityUnits.HoursWeek;\n }\n\n getId(): string {\n return this.nonHumanResourceId;\n }\n\n getName(): string {\n return this.name;\n }\n\n static fromJSON(json: ResponsibleResourceDto): ResponsibleResourceDtoModel {\n assertRequiredProperties(json, [\n 'capacityUnit',\n ]);\n\n return new ResponsibleResourceDtoModel(\n json.nonHumanResourceId,\n json.name,\n (json.validFrom\n ? moment(json.validFrom)\n .parseZone()\n : null\n ),\n (json.validUntil\n ? moment(json.validUntil)\n .parseZone()\n : null\n ),\n json.plannedHours || 0,\n json.reportedHours || 0,\n json.plannedHoursNotIncludedInTotal || 0,\n json.totalPlannedHours || 0,\n (Array.isArray(json.planningEntries) ? json.planningEntries : [])\n .map((item) => NonHumanResourcePlanningEntryDtoModel.fromJSON(item)),\n (Array.isArray(json.capacities) ? json.capacities : [])\n .map((item) => CapacityDtoModel.fromJSON(item)),\n new MetadataModel(json.metadata || {} as any),\n Object.values(CapacityUnits).filter((cu) => cu.toString() === json.capacityUnit)?.[0],\n );\n }\n\n toJSON(): ResponsibleResourceDto {\n return Object.assign(super.toJSON(), {\n planningEntries: this.planningEntries.map((item) => item.toJSON()),\n plannedHours: this.plannedHours,\n reportedHours: this.reportedHours,\n plannedHoursNotIncludedInTotal: this.plannedHoursNotIncludedInTotal,\n totalPlannedHours: this.totalPlannedHours,\n capacities: this.capacities.map((item) => item.toJSON()),\n metadata: this.metadata.toJSON(),\n capacityUnit: this.capacityUnit,\n });\n }\n}\n","import moment from 'moment';\nimport { CapacityUnits } from '../../../modules/administration/non-human-resources/capacity-units';\nimport { ResponsibleUserDto } from '../../interfaces/dtos/responsible-user.dto';\nimport { UserSlimDtoModel } from './user-slim.dto.model';\nimport { MetadataModel } from '../metadata.model';\nimport { ResponsibleUserMetadata } from '../../interfaces/metadata';\nimport { PlanningEntryDtoModel } from './planning-entry.dto.model';\nimport { CapacityDtoModel } from './capacity.dto.model';\n\nexport class ResponsibleUserDtoModel extends UserSlimDtoModel {\n readonly canRemoveResponsibleUser: boolean;\n\n readonly canRemoveResponsibleUserMessage: string | null;\n\n readonly canEditResponsibleUser: boolean;\n\n readonly capacityUnit: CapacityUnits = CapacityUnits.HoursWeek;\n\n constructor(\n userId: string,\n fullName: string,\n email: string,\n photoUrl: string | null,\n validFrom: moment.Moment | null,\n validUntil: moment.Moment | null,\n /** This is the total of all the planningEntries of the user, even those not visible or transmitted */\n public plannedHours: number,\n public reportedHours: number,\n public isCoordinator: boolean,\n readonly wasUserPlannedInNewVersion: boolean,\n readonly planningEntries: PlanningEntryDtoModel[],\n readonly capacities: CapacityDtoModel[],\n readonly metadata: MetadataModel = new MetadataModel(),\n ) {\n super(\n userId,\n fullName,\n email,\n photoUrl,\n undefined, // TODO: check if this is correct\n validFrom,\n validUntil,\n );\n this.planningEntries = [...planningEntries];\n this.capacities = [...capacities];\n this.planningEntries = [...planningEntries];\n\n this.canRemoveResponsibleUser = (this.metadata\n && this.metadata.fields\n && this.metadata.fields.canRemoveResponsibleUser) || false;\n\n this.canRemoveResponsibleUserMessage = (this.metadata\n && this.metadata.fields\n && this.metadata.fields.canRemoveResponsibleUserMessage) || null;\n\n this.canEditResponsibleUser = (this.metadata\n && this.metadata.fields\n && this.metadata.fields.canEditResponsibleUser) || false;\n }\n\n getId(): string {\n return this.userId;\n }\n\n getName(): string {\n return this.fullName;\n }\n\n static fromJSON(json: ResponsibleUserDto, isCoordinator: boolean = false): ResponsibleUserDtoModel {\n return new ResponsibleUserDtoModel(\n json.userId,\n json.fullName,\n json.email,\n json.photoUrl,\n (json.validFrom\n ? moment(json.validFrom)\n .parseZone()\n : null\n ),\n (json.validUntil\n ? moment(json.validUntil)\n .parseZone()\n : null\n ),\n json.plannedHours || 0,\n json.reportedHours || 0,\n (json.isCoordinator != null ? json.isCoordinator : isCoordinator),\n (json.wasUserPlannedInNewVersion != null ? json.wasUserPlannedInNewVersion : false),\n (Array.isArray(json.planningEntries) ? json.planningEntries : [])\n .map((item) => PlanningEntryDtoModel.fromJSON(item)),\n (Array.isArray(json.capacities) ? json.capacities : [])\n .map((item) => CapacityDtoModel.fromJSON(item)),\n new MetadataModel(json.metadata || {} as any),\n );\n }\n\n static createFromUserListDtoModel(\n user?: UserSlimDtoModel,\n isCoordinator: boolean = false,\n ): ResponsibleUserDtoModel {\n if (!user) {\n throw new Error('No ResponsibleUserDtoModel can be created from UserSlimDtoModel');\n }\n\n const metadata = {\n fields: {\n canRemoveResponsibleUser: true,\n canEditResponsibleUser: true,\n canRemoveResponsibleUserMessage: null,\n },\n };\n const {\n userId, fullName, email, photoUrl, validFrom, validUntil,\n } = user;\n\n return new ResponsibleUserDtoModel(\n userId,\n fullName,\n email,\n photoUrl,\n (validFrom ? validFrom.clone() : null),\n (validUntil ? validUntil.clone() : null),\n 0,\n 0,\n isCoordinator,\n false,\n [],\n [],\n new MetadataModel(metadata),\n );\n }\n\n toJSON(): ResponsibleUserDto {\n return Object.assign(super.toJSON(), {\n planningEntries: this.planningEntries.map((item) => item.toJSON()),\n plannedHours: this.plannedHours,\n reportedHours: this.reportedHours,\n isCoordinator: this.isCoordinator,\n wasUserPlannedInNewVersion: this.wasUserPlannedInNewVersion,\n capacities: this.capacities.map((item) => item.toJSON()),\n metadata: this.metadata.toJSON(),\n });\n }\n}\n","import { RoleListDto } from '../../interfaces/dtos/role-list.dto';\nimport { assertRequiredProperties } from '../../utilities/api.utility';\nimport { MetadataModel } from '../metadata.model';\n\nexport class RoleListDtoModel {\n readonly userCanSelectRole: boolean;\n\n constructor(\n readonly roleId: number,\n readonly name: string,\n readonly metadata: MetadataModel = new MetadataModel(),\n ) {\n this.userCanSelectRole = (this.metadata.fields && this.metadata.fields.userCanSelectRole) || false;\n }\n\n static fromJSON(json: RoleListDto): RoleListDtoModel {\n assertRequiredProperties(json, [\n 'roleId',\n 'name',\n ]);\n\n return new RoleListDtoModel(\n json.roleId,\n json.name,\n new MetadataModel(json.metadata),\n );\n }\n\n toJSON(): RoleListDto {\n return {\n roleId: this.roleId,\n name: this.name,\n metadata: this.metadata.toJSON(),\n };\n }\n}\n","import { RoleDto } from '../../interfaces/dtos/role.dto';\nimport { assertRequiredProperties } from '../../utilities/api.utility';\n\nexport class RoleDtoModel {\n constructor(\n readonly roleId: number,\n readonly name: string,\n ) {\n }\n\n static fromJSON(json: RoleDto): RoleDtoModel {\n assertRequiredProperties(json, [\n 'roleId',\n 'name',\n ]);\n\n return new RoleDtoModel(\n json.roleId,\n json.name,\n );\n }\n\n clone(): RoleDtoModel {\n return new RoleDtoModel(\n this.roleId,\n this.name,\n );\n }\n\n toJSON(): RoleDto {\n return {\n roleId: this.roleId,\n name: this.name,\n };\n }\n}\n","import { SkillDto } from '../../interfaces/dtos/skill.dto';\n\nexport class SkillDtoModel {\n constructor(\n readonly categoryId: number,\n readonly isSelected: boolean,\n readonly id: number,\n readonly name: string | null,\n ) {}\n\n static fromJSON(json: SkillDto): SkillDtoModel {\n return new SkillDtoModel(\n json.categoryId,\n json.isSelected,\n json.id,\n json.name,\n );\n }\n\n clone(): SkillDtoModel {\n return new SkillDtoModel(\n this.categoryId,\n this.isSelected,\n this.id,\n this.name,\n );\n }\n\n toJSON(): SkillDto {\n return {\n categoryId: this.categoryId,\n isSelected: this.isSelected,\n id: this.id,\n name: this.name,\n };\n }\n}\n","import moment from 'moment';\nimport { CapacityUnits } from '../../../modules/administration/non-human-resources/capacity-units';\nimport { TimeTrackingEntryViewDto } from '../../interfaces/dtos/time-tracking-entry-view.dto';\nimport { MetadataModel } from '../metadata.model';\nimport { assertRequiredProperties } from '../../utilities/api.utility';\nimport guid from '../../../helpers/guid';\nimport { NoteInterfaceWithResourceData } from '../../interfaces/note.interface';\n\nexport class TimeTrackingEntryViewDtoModel {\n /**\n * Derived from the received Meta Data\n * for easier access\n */\n readonly canUpdateTimecardEntry: boolean;\n\n readonly isTimecardEntryDisabled: boolean;\n\n constructor(\n public id: string,\n readonly date: moment.Moment,\n public value: number,\n readonly metadata: MetadataModel = new MetadataModel(),\n public note: string | null,\n public notes: NoteInterfaceWithResourceData[] | null,\n readonly noteCreatedBy: string | null,\n readonly noteCreatedOn: moment.Moment | null,\n readonly resourceCapacityUnit: CapacityUnits | null = null,\n ) {\n this.date = date.clone();\n this.noteCreatedOn = noteCreatedOn?.clone() || null;\n\n this.canUpdateTimecardEntry = (this.metadata.fields && this.metadata.fields.canUpdateTimecardEntry) || false;\n this.isTimecardEntryDisabled = (this.metadata.fields && this.metadata.fields.isTimecardEntryDisabled) || false;\n }\n\n static fromJSON(json: TimeTrackingEntryViewDto): TimeTrackingEntryViewDtoModel {\n assertRequiredProperties(json, [\n 'date',\n 'value',\n ]);\n\n return new TimeTrackingEntryViewDtoModel(\n guid(),\n moment(json.date)\n .parseZone(),\n json.value,\n new MetadataModel(json.metadata || {}),\n json.note,\n json.notes,\n // MOCK:\n // [\n // {\n // createdBy: 'seb',\n // note: 'text1',\n // createdOn: '2023-09-25',\n // workpackageTitle: 'wptitle',\n // },\n // {\n // createdBy: 'seb',\n // note: 'text2',\n // createdOn: '2023-09-25',\n // workpackageTitle: 'wptitle',\n // },\n // ],\n json.noteCreatedBy,\n json.noteCreatedOn ? moment(json.noteCreatedOn).parseZone() : null,\n Object.values(CapacityUnits).filter((cu) => cu.toString() === json.resourceCapacityUnit)?.[0],\n );\n }\n\n toJSON(): TimeTrackingEntryViewDto {\n return {\n date: this.date.toJSON(),\n value: this.value,\n metadata: this.metadata.toJSON(),\n note: this.note,\n notes: this.notes,\n noteCreatedBy: this.noteCreatedBy,\n noteCreatedOn: this.noteCreatedOn ? this.noteCreatedOn.toJSON() : null,\n resourceCapacityUnit: this.resourceCapacityUnit?.toString() || '',\n };\n }\n\n clone(): TimeTrackingEntryViewDtoModel {\n return new TimeTrackingEntryViewDtoModel(\n this.id,\n this.date,\n this.value,\n this.metadata,\n this.note,\n this.notes,\n this.noteCreatedBy,\n this.noteCreatedOn,\n this.resourceCapacityUnit,\n );\n }\n}\n","import { TimeTrackingWorkPackageDto } from '../../interfaces/dtos/time-tracking-work-package.dto';\nimport { TimeTrackingRowDtoModel } from './time-tracking-row.dto.model';\nimport { assertRequiredProperties } from '../../utilities/api.utility';\n\nexport class TimeTrackingWorkPackageDtoModel {\n constructor(\n readonly workPackageId: number,\n readonly sequenceNumber: number,\n readonly title: string,\n readonly projectNumber: string | null,\n readonly projectTitle: string,\n readonly projectId: number,\n readonly rows: TimeTrackingRowDtoModel[],\n readonly hasWarningSign: boolean,\n readonly warningMessage: string | null,\n ) {\n this.rows = rows.map((d) => d.clone());\n }\n\n static fromJSON(json: TimeTrackingWorkPackageDto): TimeTrackingWorkPackageDtoModel {\n assertRequiredProperties(json, [\n 'workPackageId',\n 'sequenceNumber',\n 'title',\n 'rows',\n ]);\n\n return new TimeTrackingWorkPackageDtoModel(\n json.workPackageId,\n json.sequenceNumber,\n json.title,\n json.projectNumber,\n json.projectTitle,\n json.projectId,\n (Array.isArray(json.rows) ? json.rows : [])\n .map((item) => TimeTrackingRowDtoModel.fromJSON(item)),\n json.hasWarningSign,\n json.warningMessage,\n );\n }\n\n toJSON(): TimeTrackingWorkPackageDto {\n return {\n workPackageId: this.workPackageId,\n sequenceNumber: this.sequenceNumber,\n title: this.title,\n projectNumber: this.projectNumber,\n projectTitle: this.projectTitle,\n projectId: this.projectId,\n rows: this.rows.map((item) => item.toJSON()),\n hasWarningSign: this.hasWarningSign,\n warningMessage: this.warningMessage,\n };\n }\n\n clone(): TimeTrackingWorkPackageDtoModel {\n return new TimeTrackingWorkPackageDtoModel(\n this.workPackageId,\n this.sequenceNumber,\n this.title,\n this.projectNumber,\n this.projectTitle,\n this.projectId,\n this.rows,\n this.hasWarningSign,\n this.warningMessage,\n );\n }\n}\n","import { TimeTrackingProjectDto } from '../../interfaces/dtos/time-tracking-project.dto';\nimport { TimeTrackingWorkPackageDtoModel } from './time-tracking-work-package.dto.model';\nimport { assertRequiredProperties } from '../../utilities/api.utility';\n\nexport class TimeTrackingProjectDtoModel {\n /**\n * Not provided from the API:\n * Used to aggregate the total hours of every work package\n * per day.\n */\n readonly totalHours: number[];\n\n /**\n * An aggregate of the total planned hours for this project.\n */\n readonly totalPlannedHours: number;\n\n constructor(\n readonly projectId: number,\n readonly projectNumber: string,\n readonly projectTitle: string,\n readonly workPackages: readonly TimeTrackingWorkPackageDtoModel[],\n ) {\n this.workPackages = workPackages.map((d) => d.clone());\n\n // Calculates for every day the sum of reported work package hours\n this.totalHours = this.calculateTotalHours();\n this.totalPlannedHours = this.calculateTotalPlannedHours();\n }\n\n static fromJSON(json: TimeTrackingProjectDto): TimeTrackingProjectDtoModel {\n assertRequiredProperties(json, [\n 'projectId',\n 'projectTitle',\n 'workPackages',\n ]);\n\n return new TimeTrackingProjectDtoModel(\n json.projectId,\n json.projectNumber || '',\n json.projectTitle,\n (Array.isArray(json.workPackages) ? json.workPackages : [])\n .map((item) => TimeTrackingWorkPackageDtoModel.fromJSON(item)),\n );\n }\n\n /**\n * Sums the hours reported in work packages for a specific week day.\n * @param dayIndex\n */\n calculateTotalHoursOfWeekDay(dayIndex: number): number {\n let sum = 0;\n\n this.workPackages.forEach((wp) => {\n wp.rows.forEach((position) => {\n const hour = +`${position.days[dayIndex].value}`.replace(',', '.');\n\n if (!Number.isNaN(hour)) {\n sum += hour;\n }\n });\n });\n\n this.totalHours[dayIndex] = sum;\n\n return sum;\n }\n\n calculateTotalPlannedHours(): number {\n return this.workPackages.reduce((acc, wp) => acc + (wp.rows.length ? (wp.rows[0].totalPlannedHours || 0) : 0), 0);\n }\n\n toJSON(): TimeTrackingProjectDto {\n return {\n projectId: this.projectId,\n projectNumber: this.projectNumber,\n projectTitle: this.projectTitle,\n workPackages: this.workPackages.map((item) => item.toJSON()),\n };\n }\n\n clone(): TimeTrackingProjectDtoModel {\n return new TimeTrackingProjectDtoModel(\n this.projectId,\n this.projectNumber,\n this.projectTitle,\n this.workPackages,\n );\n }\n\n /**\n * Returns a list of summed hours. Every entry in the list\n * represents a day of the week. The hours are summed\n * for every work package.\n */\n private calculateTotalHours(): number[] {\n const sums: number[] = [];\n\n this.workPackages.forEach((wp) => {\n wp.rows.forEach((position) => {\n position.days.forEach((day, dayIndex) => {\n if (!Number.isNaN(day.value)) {\n // Make sure the sums are initialized for every day\n sums[dayIndex] = (sums[dayIndex] || 0) + day.value;\n }\n });\n });\n });\n\n return sums;\n }\n}\n","import { TimeTrackingRowDto } from '../../interfaces/dtos/time-tracking-row.dto';\nimport { TimeTrackingEntryViewDtoModel } from './time-tracking-entry-view.dto.model';\nimport { TimecardCategoryCode } from '../../../models/timecard-category-code.enum';\nimport { TimeTrackingRowModel } from '../../../models/time-tracking-row';\nimport { assertRequiredProperties } from '../../utilities/api.utility';\n\nexport class TimeTrackingRowDtoModel extends TimeTrackingRowModel {\n constructor(\n days: TimeTrackingEntryViewDtoModel[],\n readonly unitCategoryId: number,\n readonly unitName: string | null = null,\n readonly timecardCategoryName: string | null = null,\n readonly timecardCategoryCode: TimecardCategoryCode | null = null,\n readonly totalPlannedHours: number | null = null,\n readonly sapCode: string | null = null,\n readonly isVisible: boolean = true,\n public hourlyRateLabel: string | null = null,\n public activityTypeDescription: string | null = null,\n public canDelete: boolean = false,\n ) {\n super(days);\n }\n\n static fromJSON(json: TimeTrackingRowDto): TimeTrackingRowDtoModel {\n assertRequiredProperties(json, [\n 'days',\n ]);\n\n return new TimeTrackingRowDtoModel(\n (Array.isArray(json.days) ? json.days : [])\n .map((item) => TimeTrackingEntryViewDtoModel.fromJSON(item)),\n json.unitCategoryId,\n json.unitName,\n json.timecardCategoryName,\n json.timecardCategoryCode,\n json.totalPlannedHours,\n json.sapCode,\n json.isVisible,\n json.hourlyRateLabel,\n json.activityTypeDescription,\n );\n }\n\n /**\n * Extracts the hours of specific week day\n * @param dayIndex\n */\n getHoursOfWeekDay(dayIndex: number): number {\n if (this.days[dayIndex]) {\n const hour = +`${this.days[dayIndex].value}`.replace(',', '.');\n\n if (!Number.isNaN(hour)) {\n return hour;\n }\n }\n\n return 0;\n }\n\n clone(): TimeTrackingRowDtoModel {\n return new TimeTrackingRowDtoModel(\n this.days.map((day) => day.clone()),\n this.unitCategoryId,\n this.unitName,\n this.timecardCategoryName,\n this.timecardCategoryCode,\n this.totalPlannedHours,\n this.sapCode,\n this.isVisible,\n this.hourlyRateLabel,\n this.activityTypeDescription,\n this.canDelete,\n );\n }\n\n toJSON(): TimeTrackingRowDto {\n return {\n days: this.days.map((item) => item.toJSON()),\n unitCategoryId: this.unitCategoryId,\n unitName: this.unitName,\n timecardCategoryName: this.timecardCategoryName,\n timecardCategoryCode: this.timecardCategoryCode,\n totalPlannedHours: this.totalPlannedHours,\n sapCode: this.sapCode,\n isVisible: this.isVisible,\n hourlyRateLabel: this.hourlyRateLabel,\n activityTypeDescription: this.activityTypeDescription,\n };\n }\n}\n","import { UnitBackgroundColorDto } from '../../interfaces/dtos/unit-background-color.dto';\nimport { assertRequiredProperties } from '../../utilities/api.utility';\n\nexport class UnitBackgroundColorDtoModel {\n constructor(\n readonly unitBackgroundColorId: number,\n readonly unitId: number,\n readonly backgroundColor: string,\n readonly name: string | null,\n ) {}\n\n static fromJSON(json: UnitBackgroundColorDto): UnitBackgroundColorDtoModel {\n assertRequiredProperties(json, [\n 'unitBackgroundColorId',\n 'unitId',\n 'backgroundColor',\n ]);\n\n return new UnitBackgroundColorDtoModel(\n json.unitBackgroundColorId,\n json.unitId,\n json.backgroundColor,\n json.name,\n );\n }\n\n toJSON(): UnitBackgroundColorDto {\n return {\n unitBackgroundColorId: this.unitBackgroundColorId,\n unitId: this.unitId,\n backgroundColor: this.backgroundColor,\n name: this.name,\n };\n }\n\n clone(): UnitBackgroundColorDtoModel {\n return new UnitBackgroundColorDtoModel(\n this.unitBackgroundColorId,\n this.unitId,\n this.backgroundColor,\n this.name,\n );\n }\n}\n","import { UnitCalendarLinkDto } from '../../interfaces/dtos/unit-calendar-link.dto';\n\nexport class UnitCalendarLinkDtoModel {\n constructor(\n readonly unitName: string | null,\n readonly level: number,\n readonly calendarLink: string | null,\n ) {}\n\n static fromJSON(json: UnitCalendarLinkDto): UnitCalendarLinkDtoModel {\n return new UnitCalendarLinkDtoModel(\n json.unitName,\n json.level,\n json.calendarLink,\n );\n }\n\n toJSON(): UnitCalendarLinkDto {\n return {\n unitName: this.unitName,\n level: this.level,\n calendarLink: this.calendarLink,\n };\n }\n}\n","import moment from 'moment';\nimport { UnitCategoryDto } from '../../interfaces/dtos/unit-category.dto';\nimport { assertRequiredProperties } from '../../utilities/api.utility';\n\nexport class UnitCategoryDtoModel {\n constructor(\n readonly unitCategoryId: number,\n readonly defaultTimecardCategoryId: number | null,\n readonly name: string | null,\n readonly sapCode: string | null,\n readonly isNonProductive: boolean,\n readonly isWork: boolean,\n readonly isRework: boolean,\n readonly isQualityAssurance: boolean,\n readonly isEnabled: boolean,\n readonly hasReportedHours: boolean,\n readonly unitName: string | null,\n readonly assignmentValidFrom: moment.Moment,\n readonly assignmentValidUntil: moment.Moment | null,\n ) {}\n\n static fromJSON(json: UnitCategoryDto): UnitCategoryDtoModel {\n assertRequiredProperties(json, [\n 'unitCategoryId',\n 'assignmentValidFrom',\n ]);\n\n return new UnitCategoryDtoModel(\n json.unitCategoryId,\n json.defaultTimecardCategoryId,\n json.name,\n json.sapCode,\n json.isNonProductive,\n json.isWork,\n json.isRework,\n json.isQualityAssurance,\n json.isEnabled,\n json.hasReportedHours,\n json.unitName,\n moment(json.assignmentValidFrom)\n .parseZone(),\n (json.assignmentValidUntil\n ? moment(json.assignmentValidUntil)\n .parseZone()\n : null\n ),\n );\n }\n\n clone(): UnitCategoryDtoModel {\n return new UnitCategoryDtoModel(\n this.unitCategoryId,\n this.defaultTimecardCategoryId,\n this.name,\n this.sapCode,\n this.isNonProductive,\n this.isWork,\n this.isRework,\n this.isQualityAssurance,\n this.isEnabled,\n this.hasReportedHours,\n this.unitName,\n this.assignmentValidFrom,\n this.assignmentValidUntil,\n );\n }\n}\n","import { assertRequiredProperties } from '../../utilities/api.utility';\nimport { UnitCostCenterActivityTypeDto } from '../../interfaces/dtos/unit-cost-center-activity-type.dto';\n\nexport class UnitCostCenterActivityTypeModel implements UnitCostCenterActivityTypeDto {\n constructor(\n readonly activityType: string,\n readonly isDefault: boolean,\n readonly description: string,\n readonly unitCostCenterActivityTypeId: number | null = null,\n ) {}\n\n static fromJSON(json: UnitCostCenterActivityTypeDto): UnitCostCenterActivityTypeModel {\n assertRequiredProperties(json, [\n 'activityType',\n ]);\n\n return new UnitCostCenterActivityTypeModel(\n json.activityType,\n json.isDefault,\n json.description,\n json.unitCostCenterActivityTypeId,\n );\n }\n\n toJSON(): UnitCostCenterActivityTypeDto {\n return {\n activityType: this.activityType,\n isDefault: this.isDefault,\n description: this.description,\n unitCostCenterActivityTypeId: this.unitCostCenterActivityTypeId,\n };\n }\n}\n","import { assertRequiredProperties } from '../../utilities/api.utility';\nimport { UnitCostCenterDto } from '../../interfaces/dtos/unit-cost-center.dto';\nimport { UnitCostCenterActivityTypeModel } from './unit-cost-center-activity-type.dto.model';\nimport { CostCenerSaveRequest } from '../../interfaces/requests/cost-center-save.request';\n\nexport class UnitCostCenterModel {\n constructor(\n readonly unitCostCenterId: string | null,\n readonly costCenter: string,\n readonly description: string,\n readonly isDefault: boolean,\n readonly unitCostCenterActivityTypes: readonly UnitCostCenterActivityTypeModel[],\n ) {\n this.unitCostCenterActivityTypes = [...unitCostCenterActivityTypes];\n }\n\n // in some old cases it is possible to have the same cost center with different unitCostCenterId\n // we also need the name since new cost centers have no unitCostCenterId (in case it is a new cost center we know the name will be unique)\n get uid(): string {\n return `${this.unitCostCenterId}${this.costCenter}`;\n }\n\n get name(): string {\n return this.costCenter;\n }\n\n static fromJSON(json: UnitCostCenterDto): UnitCostCenterModel {\n assertRequiredProperties(json, []);\n\n return new UnitCostCenterModel(\n json.unitCostCenterId,\n json.costCenter,\n json.description,\n json.isDefault,\n json.unitCostCenterActivityTypes.map((item) => UnitCostCenterActivityTypeModel.fromJSON(item)),\n );\n }\n\n toJSON(): UnitCostCenterDto {\n return {\n unitCostCenterId: this.unitCostCenterId,\n costCenter: this.costCenter,\n description: this.description,\n isDefault: this.isDefault,\n unitCostCenterActivityTypes: this.unitCostCenterActivityTypes.map((item) => item.toJSON()),\n };\n }\n\n toCostCenerSaveRequestJSON(): CostCenerSaveRequest {\n return {\n costCenterId: Number(this.unitCostCenterId),\n description: this.description,\n name: this.costCenter,\n isDefault: this.isDefault,\n unitCostCenterActivityTypes: this.unitCostCenterActivityTypes.map((item) => item.toJSON()),\n };\n }\n}\n","import { UnitListDto } from '../../interfaces/dtos/unit-list.dto';\nimport { UnitLevel } from '../../../models/unit-level.enum';\nimport { assertRequiredProperties } from '../../utilities/api.utility';\n\nexport class UnitListDtoModel {\n constructor(\n readonly unitId: number,\n readonly code: string,\n readonly level: UnitLevel,\n readonly name: string,\n readonly deputyUnitCoodinators: string,\n readonly unitCoordinatorFullName: string,\n readonly parentUnitId: number | null = null,\n readonly isDisabled: boolean,\n ) {\n }\n\n static fromJSON(json: UnitListDto): UnitListDtoModel {\n assertRequiredProperties(json, [\n 'unitId',\n 'code',\n 'level',\n 'name',\n // @TODO Verify once seed data was fixed, because otherwise no units will be created for the base data\n // 'unitCoordinator',\n // 'deputyUnitCoordinators',\n ]);\n\n return new UnitListDtoModel(\n json.unitId,\n json.code,\n json.level,\n json.name,\n json.deputyUnitCoodinators,\n json.unitCoordinatorFullName,\n json.parentUnitId,\n json.isDisabled,\n );\n }\n}\n","import moment from 'moment';\nimport { assertRequiredProperties } from '../../utilities/api.utility';\nimport { UnitPlanningCapacityDto } from '../../interfaces/dtos/unit-planning-capacity.dto';\nimport { CapacityDtoModel } from './capacity.dto.model';\n\nexport class UnitPlanningCapacityDtoModel {\n constructor(\n readonly totalHours: number,\n public plannedHours: number,\n public availableHours: number,\n public totalProductiveHours: number,\n public totalNonProductiveHours: number,\n readonly weekStartDate: moment.Moment | null,\n readonly availability: number,\n public hasHoliday: boolean,\n public holidayDescription: string | null = null,\n public holidayHours: number,\n ) {}\n\n static fromJSON(json: UnitPlanningCapacityDto): UnitPlanningCapacityDtoModel {\n assertRequiredProperties(json, [\n 'totalHours',\n 'plannedHours',\n 'availableHours',\n ]);\n\n return new UnitPlanningCapacityDtoModel(\n json.totalHours,\n json.plannedHours,\n json.availableHours,\n json.totalProductiveHours,\n json.totalNonProductiveHours,\n (json.weekStartDate\n ? moment(json.weekStartDate)\n .parseZone()\n : null\n ),\n CapacityDtoModel.getAvailability(json.plannedHours, json.availableHours),\n json.hasHoliday,\n json.holidayDescription,\n json.holidayHours,\n );\n }\n\n static getAvailability(plannedHours: number, availableHours: number): number {\n return (plannedHours / availableHours) * 100;\n }\n\n clone(): UnitPlanningCapacityDtoModel {\n return new UnitPlanningCapacityDtoModel(\n this.totalHours,\n this.plannedHours,\n this.availableHours,\n this.totalProductiveHours,\n this.totalNonProductiveHours,\n this.weekStartDate != null ? this.weekStartDate.clone() : null,\n this.availability,\n this.hasHoliday,\n this.holidayDescription,\n this.holidayHours,\n );\n }\n\n toJSON(): UnitPlanningCapacityDto {\n return {\n totalHours: this.totalHours,\n plannedHours: this.plannedHours,\n availableHours: this.availableHours,\n totalProductiveHours: this.totalProductiveHours,\n totalNonProductiveHours: this.totalNonProductiveHours,\n weekStartDate: (this.weekStartDate != null ? this.weekStartDate.toJSON() : null),\n hasHoliday: this.hasHoliday,\n holidayDescription: this.holidayDescription,\n holidayHours: this.holidayHours,\n };\n }\n}\n","import { UnitPlanningColumnTotalDto } from '../../interfaces/dtos/unit-planning-column-total.dto';\n\nexport class UnitPlanningColumnTotalDtoModel {\n constructor(\n readonly totalPlanned: number,\n readonly totalRecorded: number,\n readonly totalAvailableToBePlanned: number,\n readonly totalConfirmed: number,\n ) {}\n\n static fromJSON(json: UnitPlanningColumnTotalDto): UnitPlanningColumnTotalDtoModel {\n return new UnitPlanningColumnTotalDtoModel(\n json.totalPlanned,\n json.totalRecorded,\n json.totalAvailableToBePlanned,\n json.totalConfirmed,\n );\n }\n\n toJSON(): UnitPlanningColumnTotalDto {\n return {\n totalPlanned: this.totalPlanned,\n totalRecorded: this.totalRecorded,\n totalAvailableToBePlanned: this.totalAvailableToBePlanned,\n totalConfirmed: this.totalConfirmed,\n };\n }\n\n clone(): UnitPlanningColumnTotalDtoModel {\n return new UnitPlanningColumnTotalDtoModel(\n this.totalPlanned,\n this.totalRecorded,\n this.totalAvailableToBePlanned,\n this.totalConfirmed,\n );\n }\n}\n","import { CapacityUnits } from '../../../modules/administration/non-human-resources/capacity-units';\n\nimport { NonHumanResourcePlanningSlimDto } from '../../interfaces/dtos/non-human-resource-planning-slim.dto';\n\nexport class NonHumanResourcePlanningSlimDtoModel {\n constructor(\n readonly nonHumanResourceId: string,\n readonly name: string | null,\n readonly capacityUnit: CapacityUnits | null,\n ) {}\n\n static fromJSON(json: NonHumanResourcePlanningSlimDto): NonHumanResourcePlanningSlimDtoModel {\n return new NonHumanResourcePlanningSlimDtoModel(\n json.nonHumanResourceId,\n json.name,\n Object.values(CapacityUnits).filter((capacityUnit) => capacityUnit === json.capacityUnit)?.[0] || null,\n );\n }\n\n clone(): NonHumanResourcePlanningSlimDtoModel {\n return new NonHumanResourcePlanningSlimDtoModel(\n this.nonHumanResourceId,\n this.name,\n this.capacityUnit,\n );\n }\n}\n","import moment from 'moment';\nimport { UnitPlanningNonHumanResourceWeekTotalDto } from '../../interfaces/dtos/unit-planning-non-human-resource-week-total.dto';\n\nexport class UnitPlanningNonHumanResourceWeekTotalDtoModel {\n constructor(\n readonly weekStartDate: moment.Moment,\n readonly totalPlannedHours: number | null,\n readonly workingDays: string | null,\n ) {\n this.weekStartDate = weekStartDate.clone();\n }\n\n static fromJSON(\n json: UnitPlanningNonHumanResourceWeekTotalDto,\n ): UnitPlanningNonHumanResourceWeekTotalDtoModel {\n return new UnitPlanningNonHumanResourceWeekTotalDtoModel(\n moment(json.weekStartDate).parseZone(),\n json.totalPlannedHours,\n json.workingDays,\n );\n }\n\n clone(): UnitPlanningNonHumanResourceWeekTotalDtoModel {\n return new UnitPlanningNonHumanResourceWeekTotalDtoModel(\n this.weekStartDate.clone(),\n this.totalPlannedHours,\n this.workingDays,\n );\n }\n}\n","import { assertRequiredProperties } from '../../utilities/api.utility';\nimport { UnitPlanningNonHumanResourceDto } from '../../interfaces/dtos/unit-planning-non-human-resource.dto';\nimport { UnitPlanningProjectDtoModel } from './unit-planning-project.dto.model';\nimport { MetadataSlimDtoModel } from './metadata-slim.dto.model';\nimport { NonHumanResourcePlanningSlimDtoModel } from './non-human-resource-planning-slim.dto.model';\nimport { UnitPlanningNonHumanResourceWeekTotalDtoModel } from './unit-planning-non-human-resource-week-total.dto.model';\nimport { SlimCapacityPlanningDtoModel } from './planning-capacity-slim.dto.model';\n\nexport class UnitPlanningNonHumanResourceDtoModel {\n constructor(\n readonly nonHumanResource: NonHumanResourcePlanningSlimDtoModel,\n readonly projects: UnitPlanningProjectDtoModel[],\n readonly totals: UnitPlanningNonHumanResourceWeekTotalDtoModel[],\n readonly capacities: SlimCapacityPlanningDtoModel[],\n readonly metadata: MetadataSlimDtoModel,\n ) {\n this.nonHumanResource = this.nonHumanResource.clone();\n\n if (projects) {\n this.projects = this.projects.map((project) => project.clone());\n }\n\n if (totals) {\n this.totals = this.totals.map((total) => total.clone());\n }\n\n if (capacities) {\n this.capacities = this.capacities.map((item) => item.clone());\n }\n }\n\n static fromJSON(json: UnitPlanningNonHumanResourceDto): UnitPlanningNonHumanResourceDtoModel {\n assertRequiredProperties(json, [\n 'nonHumanResource',\n ]);\n\n return new UnitPlanningNonHumanResourceDtoModel(\n NonHumanResourcePlanningSlimDtoModel.fromJSON(json.nonHumanResource),\n (Array.isArray(json.projects) ? json.projects : [])\n .map(UnitPlanningProjectDtoModel.fromJSON),\n (Array.isArray(json.totals) ? json.totals : [])\n .map(UnitPlanningNonHumanResourceWeekTotalDtoModel.fromJSON),\n (Array.isArray(json.capacities) ? json.capacities : [])\n .map(SlimCapacityPlanningDtoModel.fromJSON),\n MetadataSlimDtoModel.fromJSON(json.metadata),\n );\n }\n\n clone(): UnitPlanningNonHumanResourceDtoModel {\n return new UnitPlanningNonHumanResourceDtoModel(\n this.nonHumanResource.clone(),\n this.projects?.map((item) => item.clone()) || null,\n this.totals?.map((item) => item.clone()) || null,\n this.capacities?.map((item) => item.clone()) || null,\n this.metadata.clone(),\n );\n }\n}\n","import { UnitPlanningUserWorkPackageDto } from '../../interfaces/dtos/unit-planning-user-work-package.dto';\nimport { UnitPlanningColumnTotalDtoModel } from './unit-planning-column-total.dto.model';\nimport { UnitPlanningUserWeekEntryViewSlimDtoModel } from './unit-planning-user-week-entry-view-slim.dto.model';\n\nexport class UnitPlanningUserWorkPackageDtoModel {\n constructor(\n readonly workPackageId: number,\n readonly sequenceNumber: number,\n readonly title: string | null,\n readonly isCrossUtilized: boolean,\n readonly weeks: UnitPlanningUserWeekEntryViewSlimDtoModel[],\n readonly totals: UnitPlanningColumnTotalDtoModel | null,\n ) {\n this.weeks = this.weeks.map((week) => week.clone());\n }\n\n static fromJSON(json: UnitPlanningUserWorkPackageDto): UnitPlanningUserWorkPackageDtoModel {\n return new UnitPlanningUserWorkPackageDtoModel(\n json.workPackageId,\n json.sequenceNumber,\n json.title,\n json.isCrossUtilized,\n json.weeks.map((week) => UnitPlanningUserWeekEntryViewSlimDtoModel.fromJSON(week)),\n json.totals ? UnitPlanningColumnTotalDtoModel.fromJSON(json.totals) : null,\n );\n }\n\n clone(): UnitPlanningUserWorkPackageDtoModel {\n return new UnitPlanningUserWorkPackageDtoModel(\n this.workPackageId,\n this.sequenceNumber,\n this.title,\n this.isCrossUtilized,\n this.weeks.map((week) => week.clone()),\n this.totals?.clone() || null,\n );\n }\n}\n","import { UnitPlanningUserWorkPackageDtoModel } from './unit-planning-user-work-package.dto.model';\nimport { UnitPlanningProjectDto } from '../../interfaces/dtos/unit-planning-project.dto';\n\nexport class UnitPlanningProjectDtoModel {\n constructor(\n readonly projectId: number,\n readonly projectNumber: string,\n readonly projectTitle: string,\n readonly displayName: string,\n readonly workPackages: UnitPlanningUserWorkPackageDtoModel[],\n ) {\n if (this.workPackages) {\n this.workPackages = this.workPackages.map((wp) => wp.clone());\n }\n }\n\n static fromJSON(json: UnitPlanningProjectDto): UnitPlanningProjectDtoModel {\n return new UnitPlanningProjectDtoModel(\n json.projectId,\n json.projectNumber,\n json.projectTitle,\n json.displayName,\n json.workPackages.map((wp) => UnitPlanningUserWorkPackageDtoModel.fromJSON(wp)),\n );\n }\n\n clone(): UnitPlanningProjectDtoModel {\n return new UnitPlanningProjectDtoModel(\n this.projectId,\n this.projectNumber,\n this.projectTitle,\n this.displayName,\n this.workPackages.map((wp) => wp.clone()),\n );\n }\n}\n","import moment from 'moment';\nimport { UnitPlanningResourceDto } from '../../interfaces/dtos/unit-planning-resource.dto';\nimport { assertRequiredProperties } from '../../utilities/api.utility';\n\nexport class UnitPlanningResourceDtoModel implements Omit {\n constructor(\n readonly planningResourceId: string,\n readonly fullName: string,\n readonly email: string | null,\n readonly photoUrl: string | null = null,\n readonly validFrom: moment.Moment | null = null,\n readonly validUntil: moment.Moment | null = null,\n readonly isUserType: boolean,\n ) {\n this.validFrom = (validFrom != null ? validFrom.clone() : validFrom);\n this.validUntil = (validUntil != null ? validUntil.clone() : validUntil);\n }\n\n get id(): string {\n return this.planningResourceId;\n }\n\n static fromJSON(json: UnitPlanningResourceDto): UnitPlanningResourceDtoModel {\n assertRequiredProperties(json, [\n 'planningResourceId',\n 'fullName',\n ]);\n\n return new UnitPlanningResourceDtoModel(\n json.planningResourceId,\n json.fullName,\n json.email,\n json.photoUrl,\n (json.validFrom\n ? moment(json.validFrom)\n .parseZone()\n : null\n ),\n (json.validUntil\n ? moment(json.validUntil)\n .parseZone()\n : null\n ),\n json.isUserType,\n );\n }\n\n /**\n * If no value is given the optional field is evaluated as not valid.\n */\n isValidFrom(startDate: moment.Moment): boolean {\n if (this.validFrom != null) {\n return this.validFrom.isSameOrBefore(startDate);\n }\n\n return false;\n }\n\n /**\n * If no value is given the optional field is evaluated as valid.\n */\n isValidUntil(endDate: moment.Moment): boolean {\n if (this.validUntil != null) {\n return this.validUntil.isSameOrAfter(endDate);\n }\n\n return true;\n }\n\n isValidUntilInPast(checkDate: moment.Moment = moment()): boolean {\n return this.validUntil != null && this.validUntil.isBefore(checkDate);\n }\n\n toJSON(): UnitPlanningResourceDto {\n return {\n planningResourceId: this.planningResourceId,\n fullName: this.fullName,\n email: this.email,\n photoUrl: this.photoUrl,\n validFrom: (this.validFrom ? this.validFrom.toJSON() : null),\n validUntil: (this.validUntil ? this.validUntil.toJSON() : null),\n isUserType: this.isUserType,\n };\n }\n\n clone(overrides?: Partial): UnitPlanningResourceDtoModel {\n return new UnitPlanningResourceDtoModel(\n overrides && overrides.planningResourceId != null\n ? overrides.planningResourceId\n : this.planningResourceId,\n overrides && overrides.fullName != null\n ? overrides.fullName\n : this.fullName,\n overrides && overrides.email != null\n ? overrides.email\n : this.email,\n overrides && overrides.photoUrl !== undefined\n ? overrides.photoUrl\n : this.photoUrl,\n overrides && overrides.validFrom !== undefined\n ? overrides.validFrom\n : this.validFrom?.clone() || null,\n overrides && overrides.validUntil !== undefined\n ? overrides.validUntil\n : this.validUntil?.clone() || null,\n overrides && overrides.isUserType != null\n ? overrides.isUserType\n : this.isUserType,\n );\n }\n}\n","import { assertRequiredProperties } from '../../utilities/api.utility';\nimport { UnitLevel } from '../../../models/unit-level.enum';\nimport { UnitPlanningSlimDto } from '../../interfaces/dtos/unit-planning-slim.dto';\n\nexport class UnitPlanningSlimDtoModel {\n constructor(\n readonly name: string,\n readonly level: UnitLevel,\n readonly unitId: number,\n readonly parentUnitId: number | null,\n ) {}\n\n static fromJSON(json: UnitPlanningSlimDto): UnitPlanningSlimDtoModel {\n assertRequiredProperties(json, [\n 'unitId',\n ]);\n\n return new UnitPlanningSlimDtoModel(\n json.name,\n json.level,\n json.unitId,\n json.parentUnitId,\n );\n }\n\n clone(): UnitPlanningSlimDtoModel {\n return new UnitPlanningSlimDtoModel(\n this.name,\n this.level,\n this.unitId,\n this.parentUnitId,\n );\n }\n\n toJSON(): UnitPlanningSlimDto {\n return {\n name: this.name,\n level: this.level,\n unitId: this.unitId,\n parentUnitId: this.parentUnitId,\n };\n }\n}\n","import moment from 'moment';\nimport { CapacityUnits } from '../../../modules/administration/non-human-resources/capacity-units';\nimport guid from '../../../helpers/guid';\nimport { UnitPlanningUserWeekEntryViewSlimDto } from '../../interfaces/dtos/unit-planning-user-week-entry-view-slim.dto';\nimport { MetadataSlimDtoModel } from './metadata-slim.dto.model';\n\nexport class UnitPlanningUserWeekEntryViewSlimDtoModel {\n constructor(\n readonly id: string,\n readonly weekStartDate: moment.Moment,\n readonly week: number,\n readonly year: number,\n readonly plannedHours: number,\n readonly unitBackgroundColorId: number | null,\n readonly metadata: MetadataSlimDtoModel,\n readonly workingDays: string,\n readonly note: string | null,\n readonly noteCreatedBy: string | null,\n readonly noteCreatedOn: moment.Moment | null,\n readonly resourceCapacityUnit: CapacityUnits | null = null,\n ) {\n this.metadata = this.metadata.clone();\n }\n\n static fromJSON(json: UnitPlanningUserWeekEntryViewSlimDto): UnitPlanningUserWeekEntryViewSlimDtoModel {\n return new UnitPlanningUserWeekEntryViewSlimDtoModel(\n guid(),\n moment(json.weekStartDate).parseZone(),\n json.week,\n json.year,\n json.plannedHours,\n json.unitBackgroundColorId,\n new MetadataSlimDtoModel(json.metadata),\n json.workingDays,\n json.note,\n json.noteCreatedBy,\n json.noteCreatedOn ? moment(json.noteCreatedOn) : null,\n Object.values(CapacityUnits).filter((cu) => cu.toString() === json.resourceCapacityUnit)?.[0],\n );\n }\n\n clone(): UnitPlanningUserWeekEntryViewSlimDtoModel {\n return new UnitPlanningUserWeekEntryViewSlimDtoModel(\n this.id,\n this.weekStartDate.clone(),\n this.week,\n this.year,\n this.plannedHours,\n this.unitBackgroundColorId,\n this.metadata.clone(),\n this.workingDays,\n this.note,\n this.noteCreatedBy,\n this.noteCreatedOn?.clone() || null,\n this.resourceCapacityUnit,\n );\n }\n}\n","import moment from 'moment';\nimport { UnitPlanningUserWeekTotalDto } from '../../interfaces/dtos/unit-planning-user-week-total.dto';\n\nexport class UnitPlanningUserWeekTotalDtoModel {\n constructor(\n readonly weekStartDate: moment.Moment,\n readonly totalProductivePlannedHours: number | null,\n readonly totalNonProductivePlannedHours: number | null,\n readonly totalPlannedHours: number | null,\n readonly workingDays: string | null,\n ) {\n this.weekStartDate = weekStartDate.clone();\n }\n\n static fromJSON(json: UnitPlanningUserWeekTotalDto): UnitPlanningUserWeekTotalDtoModel {\n return new UnitPlanningUserWeekTotalDtoModel(\n moment(json.weekStartDate).parseZone(),\n json.totalProductivePlannedHours,\n json.totalNonProductivePlannedHours,\n json.totalPlannedHours,\n json.workingDays,\n );\n }\n\n clone(): UnitPlanningUserWeekTotalDtoModel {\n return new UnitPlanningUserWeekTotalDtoModel(\n this.weekStartDate.clone(),\n this.totalProductivePlannedHours,\n this.totalNonProductivePlannedHours,\n this.totalPlannedHours,\n this.workingDays,\n );\n }\n}\n","import { assertRequiredProperties } from '../../utilities/api.utility';\nimport { UserPlanningSlimDto } from '../../interfaces/dtos/user-planning-slim.dto';\n\nexport class UserPlanningSlimDtoModel {\n constructor(\n readonly userId: string,\n readonly fullName: string,\n readonly photoUrl: string | null = null,\n ) {}\n\n static fromJSON(json: UserPlanningSlimDto): UserPlanningSlimDtoModel {\n assertRequiredProperties(json, [\n 'userId',\n 'fullName',\n ]);\n\n return new UserPlanningSlimDtoModel(\n json.userId,\n json.fullName,\n json.photoUrl,\n );\n }\n\n clone(): UserPlanningSlimDtoModel {\n return new UserPlanningSlimDtoModel(\n this.userId,\n this.fullName,\n this.photoUrl,\n );\n }\n}\n","import { UnitPlanningWeekRowSlimDto } from '../../interfaces/dtos/unit-planning-week-row-slim.dto';\nimport { UnitPlanningColumnTotalDtoModel } from './unit-planning-column-total.dto.model';\nimport { UnitPlanningUserWeekEntryViewSlimDtoModel } from './unit-planning-user-week-entry-view-slim.dto.model';\n\nexport class UnitPlanningWeekRowSlimDtoModel {\n constructor(\n readonly unitCategoryId: number | null,\n readonly categoryName: string | null,\n readonly sapCode: string | null,\n readonly isVisible: boolean,\n readonly unitName: string | null,\n readonly weeks: UnitPlanningUserWeekEntryViewSlimDtoModel[],\n readonly totalPlanned: number | null,\n readonly totalRecorded: number | null,\n readonly totals: UnitPlanningColumnTotalDtoModel | null,\n ) {\n this.weeks = weeks.map((week) => week.clone());\n }\n\n static fromJSON(json: UnitPlanningWeekRowSlimDto): UnitPlanningWeekRowSlimDtoModel {\n return new UnitPlanningWeekRowSlimDtoModel(\n json.unitCategoryId,\n json.categoryName,\n json.sapCode,\n json.isVisible,\n json.unitName,\n json.weeks.map(UnitPlanningUserWeekEntryViewSlimDtoModel.fromJSON),\n json.totalPlanned,\n json.totalRecorded,\n json.totals ? UnitPlanningColumnTotalDtoModel.fromJSON(json.totals) : null,\n );\n }\n\n clone(): UnitPlanningWeekRowSlimDtoModel {\n return new UnitPlanningWeekRowSlimDtoModel(\n this.unitCategoryId,\n this.categoryName,\n this.sapCode,\n this.isVisible,\n this.unitName,\n this.weeks.map((week) => week.clone()),\n this.totalPlanned,\n this.totalRecorded,\n this.totals ? this.totals.clone() : null,\n );\n }\n}\n","import { UnitPlanningUserDto } from '../../interfaces/dtos/unit-planning-user.dto';\nimport { assertRequiredProperties } from '../../utilities/api.utility';\nimport { UserPlanningSlimDtoModel } from './user-planning-slim.dto.model';\nimport { MetadataSlimDtoModel } from './metadata-slim.dto.model';\nimport { UnitPlanningProjectDtoModel } from './unit-planning-project.dto.model';\nimport { UnitPlanningUserWeekTotalDtoModel } from './unit-planning-user-week-total.dto.model';\nimport { UnitPlanningWeekRowSlimDtoModel } from './unit-planning-week-row-slim.dto.model';\nimport { SlimCapacityPlanningDtoModel } from './planning-capacity-slim.dto.model';\n\nexport class UnitPlanningUserDtoModel {\n constructor(\n readonly user: UserPlanningSlimDtoModel,\n readonly totals: UnitPlanningUserWeekTotalDtoModel[],\n readonly projects: UnitPlanningProjectDtoModel[],\n readonly nonProductiveCategories: UnitPlanningWeekRowSlimDtoModel[],\n readonly capacities: SlimCapacityPlanningDtoModel[],\n readonly metadata: MetadataSlimDtoModel,\n ) {\n if (totals) {\n this.totals = totals.map((total) => total.clone());\n }\n\n if (projects) {\n this.projects = projects.map((project) => project.clone());\n }\n\n if (nonProductiveCategories) {\n this.nonProductiveCategories = nonProductiveCategories.map((npc) => npc.clone());\n }\n\n if (capacities) {\n this.capacities = capacities\n .map((item) => item.clone())\n .sort((a, b) => (a.weekStartDate && b.weekStartDate && a.weekStartDate.isBefore(b.weekStartDate) ? -1 : 1));\n }\n\n this.metadata = this.metadata.clone();\n }\n\n static fromJSON(json: UnitPlanningUserDto): UnitPlanningUserDtoModel {\n assertRequiredProperties(json, [\n 'user',\n ]);\n\n return new UnitPlanningUserDtoModel(\n UserPlanningSlimDtoModel.fromJSON(json.user),\n (Array.isArray(json.totals) ? json.totals : [])\n .map(UnitPlanningUserWeekTotalDtoModel.fromJSON),\n (Array.isArray(json.projects) ? json.projects : [])\n .map(UnitPlanningProjectDtoModel.fromJSON),\n (Array.isArray(json.nonProductiveCategories) ? json.nonProductiveCategories : [])\n .map(UnitPlanningWeekRowSlimDtoModel.fromJSON),\n (Array.isArray(json.capacities) ? json.capacities : [])\n .map(SlimCapacityPlanningDtoModel.fromJSON),\n MetadataSlimDtoModel.fromJSON(json.metadata),\n );\n }\n\n clone(): UnitPlanningUserDtoModel {\n return new UnitPlanningUserDtoModel(\n this.user.clone(),\n this.totals?.map((item) => item.clone()) || null,\n this.projects?.map((item) => item.clone()) || null,\n this.nonProductiveCategories?.map((item) => item.clone()) || null,\n this.capacities?.map((item) => item.clone()) || null,\n this.metadata.clone(),\n );\n }\n}\n","import moment from 'moment';\nimport { UnitPlanningWeekTotalDto } from '../../interfaces/dtos/unit-planning-week-total.dto';\n\nexport class UnitPlanningWeekTotalDtoModel {\n constructor(\n readonly weekStartDate: moment.Moment,\n readonly totalHours: number | null,\n ) {\n }\n\n static fromJSON(json: UnitPlanningWeekTotalDto): UnitPlanningWeekTotalDtoModel {\n return new UnitPlanningWeekTotalDtoModel(\n moment(json.weekStartDate).parseZone(),\n json.totalHours,\n );\n }\n\n clone(): UnitPlanningWeekTotalDtoModel {\n return new UnitPlanningWeekTotalDtoModel(\n this.weekStartDate,\n this.totalHours,\n );\n }\n}\n","import { UnitSelectorDto } from '../../interfaces/dtos/unit-selector.dto';\nimport { UnitLevel } from '../../../models/unit-level.enum';\nimport { UnitSlimDtoModel } from './unit-slim.dto.model';\nimport { UserSlimDtoModel } from './user-slim.dto.model';\nimport { assertRequiredProperties } from '../../utilities/api.utility';\nimport { Unit } from '../../../models/unit.interface';\n\nexport class UnitSelectorDtoModel implements Unit {\n set disabled(flag: boolean) {\n this._disabled = flag;\n }\n\n get disabled(): boolean {\n return this._disabled;\n }\n\n set group(name: string | undefined) {\n this._group = name;\n }\n\n get group(): string | undefined {\n return this._group;\n }\n\n /**\n * This property is not set from the backend.\n * It is purely used in the frontend, in order\n * to disable certain elements from the list.\n */\n private _disabled: boolean = false;\n\n /**\n * This property is not set from the backend.\n * The frontend uses it to distinguish sets of units in a list.\n */\n private _group: string | undefined = undefined;\n\n constructor(\n readonly unitId: number,\n readonly name: string,\n readonly level: UnitLevel = UnitLevel.UNKNOWN,\n readonly unitCoordinator: UserSlimDtoModel | null,\n readonly parentUnit: UnitSlimDtoModel | null,\n ) {\n }\n\n static fromJSON(json: UnitSelectorDto): UnitSelectorDtoModel {\n assertRequiredProperties(json, [\n 'unitId',\n 'name',\n ]);\n\n return new UnitSelectorDtoModel(\n json.unitId,\n json.name,\n json.level,\n (json.unitCoordinator ? UserSlimDtoModel.fromJSON(json.unitCoordinator) : null),\n (json.parentUnit ? UnitSlimDtoModel.fromJSON(json.parentUnit) : null),\n );\n }\n}\n","import { UnitSkillDto } from '../../interfaces/dtos/unit-skill.dto';\n\nexport class UnitSkillDtoModel {\n set group(name: string | undefined) {\n this._group = name;\n }\n\n get group(): string | undefined {\n return this._group;\n }\n\n private _group: string | undefined = undefined;\n\n constructor(\n readonly unitId: number,\n readonly name: string,\n readonly order: number,\n readonly canUpdateSkills: boolean,\n readonly canSelectSkills: boolean,\n readonly canUpdateCategories: boolean,\n readonly canManageMatrix: boolean,\n readonly level: number,\n readonly metadata: Record,\n ) {}\n\n static fromJSON(json: UnitSkillDto): UnitSkillDtoModel {\n return new UnitSkillDtoModel(\n json.unitId,\n json.name,\n json.order,\n json.canUpdateSkills,\n json.canSelectSkills,\n json.canUpdateCategories,\n json.canManageMatrix,\n json.level,\n json.metadata,\n );\n }\n\n clone(): UnitSkillDtoModel {\n return new UnitSkillDtoModel(\n this.unitId,\n this.name,\n this.order,\n this.canUpdateSkills,\n this.canSelectSkills,\n this.canUpdateCategories,\n this.canManageMatrix,\n this.level,\n this.metadata,\n );\n }\n\n toJSON(): UnitSkillDto {\n return {\n unitId: this.unitId,\n name: this.name,\n order: this.order,\n canUpdateSkills: this.canUpdateSkills,\n canSelectSkills: this.canSelectSkills,\n canUpdateCategories: this.canUpdateCategories,\n canManageMatrix: this.canManageMatrix,\n level: this.level,\n metadata: this.metadata,\n };\n }\n}\n","import { UnitSlimDto } from '../../interfaces/dtos/unit-slim.dto';\nimport { UserSlimDtoModel } from './user-slim.dto.model';\nimport { UnitLevel } from '../../../models/unit-level.enum';\nimport { ApiModelNew } from '../types';\nimport { assertRequiredProperties } from '../../utilities/api.utility';\n\nexport class UnitSlimDtoModel implements ApiModelNew {\n constructor(\n readonly unitId: number,\n readonly code: string,\n readonly name: string,\n readonly level: UnitLevel,\n readonly unitCoordinator: UserSlimDtoModel | null = null,\n readonly importPunchedHoursFromEtime: boolean,\n readonly directUserSubmissionOfTimecard: boolean,\n readonly migratedToEtime: boolean,\n readonly migratedToReiwa: boolean,\n ) {\n }\n\n static fromJSON(json: UnitSlimDto): UnitSlimDtoModel {\n assertRequiredProperties(json, [\n 'unitId',\n 'code',\n 'name',\n 'level',\n ]);\n\n return new UnitSlimDtoModel(\n json.unitId,\n json.code,\n json.name,\n json.level,\n (json.unitCoordinator ? UserSlimDtoModel.fromJSON(json.unitCoordinator) : null),\n json.importPunchedHoursFromEtime,\n json.directUserSubmissionOfTimecard,\n json.migratedToEtime,\n json.migratedToReiwa,\n );\n }\n\n static fromSimilarModel(model: Partial): UnitSlimDtoModel {\n assertRequiredProperties(model, [\n 'unitId',\n 'code',\n 'name',\n 'level',\n 'importPunchedHoursFromEtime',\n 'directUserSubmissionOfTimecard',\n 'migratedToEtime',\n 'migratedToReiwa',\n ]);\n\n return new UnitSlimDtoModel(\n model.unitId,\n model.code,\n model.name,\n model.level,\n (model.unitCoordinator ? model.unitCoordinator.clone() : null),\n model.importPunchedHoursFromEtime,\n model.directUserSubmissionOfTimecard,\n model.migratedToEtime,\n model.migratedToReiwa,\n );\n }\n\n clone(): UnitSlimDtoModel {\n return new UnitSlimDtoModel(\n this.unitId,\n this.code,\n this.name,\n this.level,\n this.unitCoordinator,\n this.importPunchedHoursFromEtime,\n this.directUserSubmissionOfTimecard,\n this.migratedToEtime,\n this.migratedToReiwa,\n );\n }\n\n toJSON(): UnitSlimDto {\n return {\n unitId: this.unitId,\n code: this.code,\n name: this.name,\n level: this.level,\n unitCoordinator: (this.unitCoordinator ? this.unitCoordinator.toJSON() : null),\n importPunchedHoursFromEtime: this.importPunchedHoursFromEtime,\n directUserSubmissionOfTimecard: this.directUserSubmissionOfTimecard,\n migratedToEtime: this.migratedToEtime,\n migratedToReiwa: this.migratedToReiwa,\n };\n }\n}\n","import { UnitDto } from '../../interfaces/dtos/unit.dto';\nimport { UserSlimDtoModel } from './user-slim.dto.model';\nimport { ContractDtoModel } from './contract.dto.model';\nimport { UnitLevel } from '../../../models/unit-level.enum';\nimport { UnitSlimDtoModel } from './unit-slim.dto.model';\nimport { assertRequiredProperties } from '../../utilities/api.utility';\n\nexport class UnitDtoModel {\n constructor(\n readonly unitId: number,\n readonly code: string,\n readonly name: string,\n readonly level: UnitLevel,\n readonly parentUnit: UnitSlimDtoModel | null,\n readonly unitCoordinator: UserSlimDtoModel | null,\n readonly deputyUnitCoordinators: readonly UserSlimDtoModel[] = [],\n readonly submitterContracts: readonly ContractDtoModel[] = [],\n readonly supplierContracts: readonly ContractDtoModel[] = [],\n readonly migratedToReiway: boolean = false,\n readonly transferReportedHoursEnabled: boolean = false,\n ) {\n this.deputyUnitCoordinators = [...deputyUnitCoordinators];\n this.submitterContracts = [...submitterContracts];\n this.supplierContracts = [...supplierContracts];\n }\n\n static fromJSON(json: UnitDto): UnitDtoModel {\n assertRequiredProperties(json, [\n 'unitId',\n 'code',\n 'name',\n 'level',\n ]);\n\n return new UnitDtoModel(\n json.unitId,\n json.code,\n json.name,\n json.level,\n (json.parentUnit\n ? UnitSlimDtoModel.fromJSON(json.parentUnit)\n : null\n ),\n (json.unitCoordinator\n ? UserSlimDtoModel.fromJSON(json.unitCoordinator)\n : null\n ),\n (Array.isArray(json.deputyUnitCoordinators) ? json.deputyUnitCoordinators : [])\n .map((item) => UserSlimDtoModel.fromJSON(item)),\n (Array.isArray(json.submitterContracts) ? json.submitterContracts : [])\n .map((item) => ContractDtoModel.fromJSON(item)),\n (Array.isArray(json.supplierContracts) ? json.supplierContracts : [])\n .map((item) => ContractDtoModel.fromJSON(item)),\n json.migratedToReiway,\n json.transferReportedHoursEnabled,\n );\n }\n\n clone(): UnitDtoModel {\n return new UnitDtoModel(\n this.unitId,\n this.code,\n this.name,\n this.level,\n (this.parentUnit\n ? this.parentUnit.clone()\n : null\n ),\n (this.unitCoordinator\n ? this.unitCoordinator.clone()\n : null\n ),\n this.deputyUnitCoordinators.map((item) => item.clone()),\n this.submitterContracts.map((item) => item.clone()),\n this.supplierContracts.map((item) => item.clone()),\n this.migratedToReiway,\n this.transferReportedHoursEnabled,\n );\n }\n\n toJSON(): UnitDto {\n return {\n unitId: this.unitId,\n code: this.code,\n name: this.name,\n level: this.level,\n parentUnit: (this.parentUnit\n ? this.parentUnit.toJSON()\n : null\n ),\n unitCoordinator: (this.unitCoordinator\n ? this.unitCoordinator.toJSON()\n : null\n ),\n deputyUnitCoordinators: this.deputyUnitCoordinators.map((item) => item.toJSON()),\n submitterContracts: this.submitterContracts.map((item) => item.toJSON()),\n supplierContracts: this.supplierContracts.map((item) => item.toJSON()),\n migratedToReiway: this.migratedToReiway,\n transferReportedHoursEnabled: this.transferReportedHoursEnabled,\n };\n }\n}\n","import { UserNotificationRoleDto } from '../../interfaces/dtos/user-notification-role.dto';\nimport { UserNotificationSettingsDtoModel } from './user-notification-settings.dto.model';\n\nexport class UserNotificationRoleDtoModel {\n constructor(\n readonly roleName: string | null,\n readonly roleCode: string | null,\n readonly orderBy: number,\n readonly notificationSettings: UserNotificationSettingsDtoModel[],\n ) {\n if (notificationSettings) {\n this.notificationSettings = notificationSettings.map((setting) => setting.clone());\n }\n }\n\n static fromJSON(json: UserNotificationRoleDto): UserNotificationRoleDtoModel {\n return new UserNotificationRoleDtoModel(\n json.roleName,\n json.roleCode,\n json.orderBy,\n (Array.isArray(json.notificationSettings) ? json.notificationSettings : [])\n .map(UserNotificationSettingsDtoModel.fromJSON),\n );\n }\n\n toJSON(): UserNotificationRoleDto {\n return {\n roleName: this.roleName,\n roleCode: this.roleCode,\n orderBy: this.orderBy,\n notificationSettings: this.notificationSettings,\n };\n }\n\n clone(): UserNotificationRoleDtoModel {\n return new UserNotificationRoleDtoModel(\n this.roleName,\n this.roleCode,\n this.orderBy,\n (Array.isArray(this.notificationSettings) ? this.notificationSettings : [])\n .map((setting) => setting.clone()),\n );\n }\n}\n","import { UserNotificationSettingsDto } from '../../interfaces/dtos/user-notification-settings.dto';\n\nexport class UserNotificationSettingsDtoModel {\n constructor(\n readonly userId: string,\n readonly notificationName: string | null,\n readonly hasCustomValues: boolean,\n readonly orderBy: number,\n readonly notificationTypeId: number,\n readonly isEnabled: boolean,\n readonly firstAlertValue: number | null,\n readonly secondAlertValue: number | null,\n readonly isBefore: boolean,\n ) {}\n\n static fromJSON(json: UserNotificationSettingsDto): UserNotificationSettingsDtoModel {\n return new UserNotificationSettingsDtoModel(\n json.userId,\n json.notificationName,\n json.hasCustomValues,\n json.orderBy,\n json.notificationTypeId,\n json.isEnabled,\n json.firstAlertValue,\n json.secondAlertValue,\n json.isBefore,\n );\n }\n\n toJSON(): UserNotificationSettingsDto {\n return {\n userId: this.userId,\n notificationName: this.notificationName,\n hasCustomValues: this.hasCustomValues,\n orderBy: this.orderBy,\n notificationTypeId: this.notificationTypeId,\n isEnabled: this.isEnabled,\n firstAlertValue: this.firstAlertValue,\n secondAlertValue: this.secondAlertValue,\n isBefore: this.isBefore,\n };\n }\n\n clone(): UserNotificationSettingsDtoModel {\n return new UserNotificationSettingsDtoModel(\n this.userId,\n this.notificationName,\n this.hasCustomValues,\n this.orderBy,\n this.notificationTypeId,\n this.isEnabled,\n this.firstAlertValue,\n this.secondAlertValue,\n this.isBefore,\n );\n }\n}\n","import { assertRequiredProperties } from '../../utilities/api.utility';\nimport { UserPlanningTimeTrackingEntryViewDtoModel } from './user-planning-week-tracking-entry-view.dto.model';\nimport { UserPlanningTimeTrackingWorkPackageDto } from '../../interfaces/dtos/user-planning-time-tracking-work-package.dto';\n\nexport class UserPlanningTimeTrackingWorkPackageDtoModel {\n constructor(\n readonly workPackageId: number,\n readonly sequenceNumber: number,\n readonly title: string,\n readonly projectNumber: string | null,\n readonly projectTitle: string,\n readonly startWeek: number,\n readonly endWeek: number,\n readonly weeks: UserPlanningTimeTrackingEntryViewDtoModel[],\n readonly isCrossUtilized: boolean = false,\n readonly snapshotWorkPackageTotalHours: number,\n readonly totalPlanned: number | null = null,\n readonly totalRecorded: number | null = null,\n readonly totalAvailableToBePlanned: number | null = null,\n readonly totalConfirmed: number | null = null,\n readonly projectId: number | null = null,\n ) {\n this.weeks = [...weeks];\n }\n\n static fromJSON(json: UserPlanningTimeTrackingWorkPackageDto): UserPlanningTimeTrackingWorkPackageDtoModel {\n assertRequiredProperties(json, [\n 'workPackageId',\n 'sequenceNumber',\n 'title',\n 'startWeek',\n 'endWeek',\n 'weeks',\n ]);\n\n return new UserPlanningTimeTrackingWorkPackageDtoModel(\n json.workPackageId,\n json.sequenceNumber,\n json.title,\n json.projectNumber,\n json.projectTitle,\n json.startWeek,\n json.endWeek,\n (Array.isArray(json.weeks) ? json.weeks : [])\n .map((item) => UserPlanningTimeTrackingEntryViewDtoModel.fromJSON(item)),\n json.isCrossUtilized,\n json.snapshotWorkPackageTotalHours,\n json.totalPlanned,\n json.totalRecorded,\n json.totalAvailableToBePlanned,\n json.totalConfirmed,\n json.projectId,\n );\n }\n\n clone(): UserPlanningTimeTrackingWorkPackageDtoModel {\n return new UserPlanningTimeTrackingWorkPackageDtoModel(\n this.workPackageId,\n this.sequenceNumber,\n this.title,\n this.projectNumber,\n this.projectTitle,\n this.startWeek,\n this.endWeek,\n this.weeks.map((item) => item.clone()),\n this.isCrossUtilized,\n this.snapshotWorkPackageTotalHours,\n this.totalPlanned,\n this.totalRecorded,\n this.totalAvailableToBePlanned,\n this.totalConfirmed,\n this.projectId,\n );\n }\n\n toJSON(): UserPlanningTimeTrackingWorkPackageDto {\n return {\n workPackageId: this.workPackageId,\n sequenceNumber: this.sequenceNumber,\n title: this.title,\n projectNumber: this.projectNumber,\n projectTitle: this.projectTitle,\n startWeek: this.startWeek,\n endWeek: this.endWeek,\n weeks: this.weeks.map((item) => item.toJSON()),\n isCrossUtilized: this.isCrossUtilized,\n snapshotWorkPackageTotalHours: this.snapshotWorkPackageTotalHours,\n totalPlanned: this.totalPlanned,\n totalRecorded: this.totalRecorded,\n totalAvailableToBePlanned: this.totalAvailableToBePlanned,\n totalConfirmed: this.totalConfirmed,\n projectId: this.projectId,\n };\n }\n}\n","import { assertRequiredProperties } from '../../utilities/api.utility';\nimport { UserPlanningTimeTrackingProjectDto } from '../../interfaces/dtos/user-planning-time-tracking-project.dto';\nimport { UserPlanningTimeTrackingWorkPackageDtoModel } from './user-planning-time-tracking-work-package.dto.model';\n\nexport class UserPlanningTimeTrackingProjectDtoModel {\n /**\n * Not provided from the API:\n * Used to aggregate the total hours of every work package\n * per day.\n */\n readonly totalHours: number[];\n\n constructor(\n readonly projectId: number,\n readonly projectNumber: string,\n readonly projectTitle: string,\n readonly workPackages: readonly UserPlanningTimeTrackingWorkPackageDtoModel[],\n readonly totalPlanned: number | null = null,\n readonly totalRecorded: number | null = null,\n readonly totalAvailableToBePlanned: number | null = null,\n readonly totalConfirmed: number | null = null,\n ) {\n this.workPackages = [...workPackages];\n\n // Calculates for every day the sum of reported work package hours\n this.totalHours = this.calculateTotalHours();\n }\n\n static fromJSON(json: UserPlanningTimeTrackingProjectDto): UserPlanningTimeTrackingProjectDtoModel {\n assertRequiredProperties(json, [\n 'projectId',\n 'projectNumber',\n 'projectTitle',\n 'workPackages',\n ]);\n\n return new UserPlanningTimeTrackingProjectDtoModel(\n json.projectId,\n json.projectNumber,\n json.projectTitle,\n (Array.isArray(json.workPackages) ? json.workPackages : [])\n .map((item) => UserPlanningTimeTrackingWorkPackageDtoModel.fromJSON(item)),\n json.totalPlanned,\n json.totalRecorded,\n json.totalAvailableToBePlanned,\n json.totalConfirmed,\n );\n }\n\n clone(): UserPlanningTimeTrackingProjectDtoModel {\n return new UserPlanningTimeTrackingProjectDtoModel(\n this.projectId,\n this.projectNumber,\n this.projectTitle,\n this.workPackages.map((item) => item.clone()),\n this.totalPlanned,\n this.totalRecorded,\n this.totalAvailableToBePlanned,\n this.totalConfirmed,\n );\n }\n\n toJSON(): UserPlanningTimeTrackingProjectDto {\n return {\n projectId: this.projectId,\n projectNumber: this.projectNumber,\n projectTitle: this.projectTitle,\n workPackages: this.workPackages.map((item) => item.toJSON()),\n totalPlanned: this.totalPlanned,\n totalRecorded: this.totalRecorded,\n totalAvailableToBePlanned: this.totalAvailableToBePlanned,\n totalConfirmed: this.totalConfirmed,\n };\n }\n\n /**\n * Sums the hours reported in work packages for a specific week day.\n * @param dayIndex\n */\n calculateTotalHoursOfRow(weekIndex: number): number {\n let sum = 0;\n\n this.workPackages.forEach((wp) => {\n const hours = wp.weeks[weekIndex].plannedHours;\n\n if (hours) {\n sum += hours;\n }\n });\n\n this.totalHours[weekIndex] = sum;\n\n return sum;\n }\n\n /**\n * Returns a list of summed hours. Every entry in the list\n * represents a day of the week. The hours are summed\n * for every work package.\n */\n private calculateTotalHours(): number[] {\n const sums: number[] = [];\n\n this.workPackages.forEach((wp) => {\n wp.weeks.forEach((week, weekIndex) => {\n if (week.plannedHours) {\n // Make sure the sums are initialized for every day\n sums[weekIndex] = (sums[weekIndex] || 0) + week.plannedHours;\n }\n });\n });\n\n return sums;\n }\n}\n","import { UserPlanningTimeTrackingEntryViewDtoModel } from '../api/models/dtos/user-planning-week-tracking-entry-view.dto.model';\n\nexport abstract class UserPlanningTimeTrackingRowModel {\n /**\n * Total hours of the entire row.\n */\n readonly totalHours: number;\n\n constructor(\n readonly weeks: readonly UserPlanningTimeTrackingEntryViewDtoModel[],\n ) {\n this.weeks = [...weeks];\n\n this.totalHours = this.weeks\n .reduce((prev, week) => (week.plannedHours == null ? 0 : week.plannedHours) + prev, 0);\n }\n}\n","import { UserPlanningTimeTrackingRowModel } from '../../../models/user-planning-time-tracking-row';\nimport { assertRequiredProperties } from '../../utilities/api.utility';\nimport { UserPlanningTimeTrackingEntryViewDtoModel } from './user-planning-week-tracking-entry-view.dto.model';\nimport { UserPlanningTimeTrackingRowDto } from '../../interfaces/dtos/user-planning-time-tracking.dto';\n\nexport class UserPlanningTimeTrackingRowDtoModel extends UserPlanningTimeTrackingRowModel {\n constructor(\n public weeks: UserPlanningTimeTrackingEntryViewDtoModel[],\n readonly unitCategoryId: number | null = null,\n readonly categoryName: string | null = null,\n readonly sapCode: string | null = null,\n readonly isVisible: boolean,\n public unitName: string | null = null,\n readonly totalPlanned: number | null = null,\n readonly totalRecorded: number | null = null,\n readonly isEnabled: boolean = true,\n public canDelete: boolean = false,\n ) {\n super(weeks);\n }\n\n static fromJSON(json: UserPlanningTimeTrackingRowDto): UserPlanningTimeTrackingRowDtoModel {\n assertRequiredProperties(json, [\n 'weeks',\n ]);\n\n return new UserPlanningTimeTrackingRowDtoModel(\n (Array.isArray(json.weeks) ? json.weeks : [])\n .map((item) => UserPlanningTimeTrackingEntryViewDtoModel.fromJSON(item)),\n json.unitCategoryId,\n json.categoryName,\n json.sapCode,\n json.isVisible,\n json.unitName,\n json.totalPlanned,\n json.totalRecorded,\n json.isEnabled,\n );\n }\n\n clone(): UserPlanningTimeTrackingRowDtoModel {\n return new UserPlanningTimeTrackingRowDtoModel(\n this.weeks.map((item) => item.clone()),\n this.unitCategoryId,\n this.categoryName,\n this.sapCode,\n this.isVisible,\n this.unitName,\n this.totalPlanned,\n this.totalRecorded,\n this.isEnabled,\n );\n }\n\n toJSON(): UserPlanningTimeTrackingRowDto {\n return {\n weeks: this.weeks.map((item) => item.toJSON()),\n unitCategoryId: this.unitCategoryId,\n categoryName: this.categoryName,\n sapCode: this.sapCode,\n isVisible: this.isVisible,\n unitName: this.unitName,\n totalPlanned: this.totalPlanned,\n totalRecorded: this.totalRecorded,\n isEnabled: this.isEnabled,\n };\n }\n}\n","import moment from 'moment';\nimport { MetadataModel } from '../metadata.model';\nimport { assertRequiredProperties } from '../../utilities/api.utility';\nimport { UserPlanningWeekTimeTrackingEntryViewDto } from '../../interfaces/dtos/user-planning-week-tracking-entry-view.dto';\n\nexport class UserPlanningTimeTrackingEntryViewDtoModel {\n readonly isoWeekDateIdentifier: string;\n\n readonly weekStartDate: moment.Moment;\n\n /**\n * Derived from the received Meta Data\n * for easier access\n */\n readonly canUpdatePlannedEntry: boolean;\n\n constructor(\n public week: number,\n public year: number,\n public plannedHours?: number,\n public planningEntryId?: number,\n public unitBackgroundColorId?: number | null,\n public workingDays?: string | null,\n public note?: string | null,\n public noteCreatedBy?: string | null,\n public noteCreatedOn?: moment.Moment | null,\n readonly metadata: MetadataModel = new MetadataModel(),\n ) {\n this.isoWeekDateIdentifier = `${year}-W${week}`;\n this.weekStartDate = moment(`${year}-W${week}`, moment.HTML5_FMT.WEEK)\n .startOf('isoWeek').parseZone();\n this.canUpdatePlannedEntry = (this.metadata.fields && this.metadata.fields.canUpdatePlannedEntry) || false;\n\n if (this.noteCreatedOn) {\n this.noteCreatedOn = moment(this.noteCreatedOn);\n }\n }\n\n static fromJSON(json: UserPlanningWeekTimeTrackingEntryViewDto): UserPlanningTimeTrackingEntryViewDtoModel {\n assertRequiredProperties(json, [\n 'week',\n 'year',\n ]);\n\n return new UserPlanningTimeTrackingEntryViewDtoModel(\n json.week,\n json.year,\n json.plannedHours,\n json.planningEntryId,\n json.unitBackgroundColorId,\n json.workingDays,\n json.note,\n json.noteCreatedBy,\n (json.noteCreatedOn\n ? moment(json.noteCreatedOn)\n .parseZone()\n : null\n ),\n new MetadataModel(json.metadata || {}),\n );\n }\n\n clone(): UserPlanningTimeTrackingEntryViewDtoModel {\n return new UserPlanningTimeTrackingEntryViewDtoModel(\n this.week,\n this.year,\n this.plannedHours,\n this.planningEntryId,\n this.unitBackgroundColorId,\n this.workingDays,\n this.note,\n this.noteCreatedBy,\n this.noteCreatedOn?.clone(),\n this.metadata.clone(),\n );\n }\n\n toJSON(): UserPlanningWeekTimeTrackingEntryViewDto {\n return {\n week: this.week,\n year: this.year,\n planningEntryId: this.planningEntryId,\n unitBackgroundColorId: this.unitBackgroundColorId,\n workingDays: this.workingDays,\n plannedHours: this.plannedHours,\n note: this.note,\n noteCreatedBy: this.noteCreatedBy,\n noteCreatedOn: this.noteCreatedOn?.toJSON(),\n metadata: this.metadata.toJSON(),\n };\n }\n}\n","import moment from 'moment';\nimport { UserQuestionNotificationDto } from '../../interfaces/dtos/user-question-notification.dto';\nimport { UserSlimDtoModel } from './user-slim.dto.model';\nimport { assertRequiredProperties } from '../../utilities/api.utility';\n\nexport class UserQuestionNotificationDtoModel extends UserSlimDtoModel {\n constructor(\n userId: string,\n fullName: string,\n email: string,\n photoUrl: string | null,\n userWorkingDays: string | null | undefined,\n validFrom: moment.Moment | null,\n validUntil: moment.Moment | null,\n public isChecked: boolean,\n ) {\n super(\n userId,\n fullName,\n email,\n photoUrl,\n userWorkingDays,\n validFrom,\n validUntil,\n );\n }\n\n static fromJSON(json: UserQuestionNotificationDto): UserQuestionNotificationDtoModel {\n assertRequiredProperties(json, [\n 'userId',\n 'fullName',\n 'email',\n 'isChecked',\n ]);\n\n return new UserQuestionNotificationDtoModel(\n json.userId,\n json.fullName,\n json.email,\n json.photoUrl,\n json.userWorkingDays,\n (json.validFrom\n ? moment(json.validFrom)\n .parseZone()\n : null\n ),\n (json.validUntil\n ? moment(json.validUntil)\n .parseZone()\n : null\n ),\n json.isChecked,\n );\n }\n}\n","import moment from 'moment';\nimport { UserSlimDto } from '../../interfaces/dtos/user-slim.dto';\nimport { ApiModelNew } from '../types';\nimport { assertRequiredProperties } from '../../utilities/api.utility';\nimport { BasicUser } from '../../../models/user.interface';\n\nexport class UserSlimDtoModel implements BasicUser, ApiModelNew {\n constructor(\n readonly userId: string,\n readonly fullName: string,\n readonly email: string,\n readonly photoUrl: string | null = null,\n readonly userWorkingDays: string | null = null,\n readonly validFrom: moment.Moment | null = null,\n readonly validUntil: moment.Moment | null = null,\n ) {\n this.validFrom = (validFrom != null ? validFrom.clone() : validFrom);\n this.validUntil = (validUntil != null ? validUntil.clone() : validUntil);\n }\n\n get id(): string {\n return this.userId;\n }\n\n static fromJSON(json: UserSlimDto): UserSlimDtoModel {\n assertRequiredProperties(json, [\n 'userId',\n 'fullName',\n 'email',\n ]);\n\n return new UserSlimDtoModel(\n json.userId,\n json.fullName,\n json.email,\n json.photoUrl,\n json.userWorkingDays,\n (json.validFrom\n ? moment(json.validFrom)\n .parseZone()\n : null\n ),\n (json.validUntil\n ? moment(json.validUntil)\n .parseZone()\n : null\n ),\n );\n }\n\n /**\n * If no value is given the optional field is evaluated as not valid.\n */\n isValidFrom(startDate: moment.Moment): boolean {\n if (this.validFrom != null) {\n return this.validFrom.isSameOrBefore(startDate.clone().utcOffset(0, true), 'day');\n }\n\n return false;\n }\n\n /**\n * If no value is given the optional field is evaluated as valid.\n */\n isValidUntil(endDate: moment.Moment): boolean {\n if (this.validUntil != null) {\n return this.validUntil.isSameOrAfter(endDate);\n }\n\n return true;\n }\n\n isValidUntilInPast(checkDate: moment.Moment = moment()): boolean {\n return this.validUntil != null && this.validUntil.isBefore(checkDate);\n }\n\n toJSON(): UserSlimDto {\n return {\n userId: this.userId,\n fullName: this.fullName,\n email: this.email,\n photoUrl: this.photoUrl,\n userWorkingDays: this.userWorkingDays,\n validFrom: (this.validFrom ? this.validFrom.toJSON() : null),\n validUntil: (this.validUntil ? this.validUntil.toJSON() : null),\n };\n }\n\n clone(overrides?: Partial): UserSlimDtoModel {\n return new UserSlimDtoModel(\n overrides && overrides.userId != null\n ? overrides.userId\n : this.userId,\n overrides && overrides.fullName != null\n ? overrides.fullName\n : this.fullName,\n overrides && overrides.email != null\n ? overrides.email\n : this.email,\n overrides && overrides.photoUrl !== undefined\n ? overrides.photoUrl\n : this.photoUrl,\n overrides && overrides.userWorkingDays !== undefined\n ? overrides.userWorkingDays\n : this.userWorkingDays,\n overrides && overrides.validFrom !== undefined\n ? overrides.validFrom\n : this.validFrom?.clone() || null,\n overrides && overrides.validUntil !== undefined\n ? overrides.validUntil\n : this.validUntil?.clone() || null,\n );\n }\n}\n","import moment from 'moment';\nimport { PlanningResourceUnitAssignment } from '../../../modules/user/planning2/planning-resource.interface';\nimport { UserUnitAssignmentDto, UserUnitAssignmentDtoMetadata } from '../../interfaces/dtos/user-unit-assignment.dto';\nimport { UnitSlimDtoModel } from './unit-slim.dto.model';\nimport { MetadataModel } from '../metadata.model';\nimport { assertRequiredProperties } from '../../utilities/api.utility';\nimport { isEmpty } from '../../../helpers/utilities';\n\nexport class UserUnitAssignmentDtoModel implements PlanningResourceUnitAssignment {\n readonly canDelete: boolean;\n\n readonly canEdit: boolean;\n\n readonly lastPlannedDate: moment.Moment | undefined;\n\n readonly lastReportedDate: moment.Moment | undefined;\n\n readonly isExpired: boolean;\n\n constructor(\n readonly userUnitAssignmentId: number,\n readonly unit: UnitSlimDtoModel,\n readonly validFrom: moment.Moment,\n readonly validUntil: moment.Moment | undefined,\n readonly hourlyRateCategory: string,\n readonly activityTypeDescription: string,\n readonly workingHoursPerWeek: number,\n readonly metadata: MetadataModel = new MetadataModel(),\n ) {\n this.validFrom = validFrom.clone();\n this.validUntil = (validUntil != null ? validUntil.clone() : validUntil);\n\n this.canDelete = !!this.metadata.fields.canDelete;\n this.canEdit = !!this.metadata.fields.canEdit;\n this.lastPlannedDate = (!isEmpty(this.metadata.fields.lastPlannedDate)\n ? moment(this.metadata.fields.lastPlannedDate)\n .parseZone()\n : undefined\n );\n this.lastReportedDate = (!isEmpty(this.metadata.fields.lastReportedDate)\n ? moment(this.metadata.fields.lastReportedDate)\n .parseZone()\n : undefined\n );\n this.isExpired = !!this.metadata.fields.isExpired;\n }\n\n static fromJSON(json: UserUnitAssignmentDto): UserUnitAssignmentDtoModel {\n assertRequiredProperties(json, [\n 'userUnitAssignmentId',\n 'unit',\n 'hourlyRateCategory',\n 'workingHoursPerWeek',\n 'validFrom',\n ]);\n\n return new UserUnitAssignmentDtoModel(\n json.userUnitAssignmentId,\n UnitSlimDtoModel.fromJSON(json.unit),\n moment(json.validFrom)\n .parseZone(),\n (!isEmpty(json.validUntil)\n ? moment(json.validUntil)\n .parseZone()\n : undefined\n ),\n json.hourlyRateCategory,\n json.activityTypeDescription,\n json.workingHoursPerWeek,\n new MetadataModel(json.metadata || {}),\n );\n }\n\n clone(): UserUnitAssignmentDtoModel {\n return new UserUnitAssignmentDtoModel(\n this.userUnitAssignmentId,\n this.unit.clone(),\n this.validFrom.clone(),\n this.validUntil?.clone(),\n this.hourlyRateCategory,\n this.activityTypeDescription,\n this.workingHoursPerWeek,\n this.metadata.clone(),\n );\n }\n\n toJSON(): UserUnitAssignmentDto {\n return {\n userUnitAssignmentId: this.userUnitAssignmentId,\n unit: this.unit.toJSON(),\n validFrom: this.validFrom.toJSON(),\n validUntil: (this.validUntil != null ? this.validUntil.toJSON() : null),\n hourlyRateCategory: this.hourlyRateCategory,\n activityTypeDescription: this.activityTypeDescription,\n workingHoursPerWeek: this.workingHoursPerWeek,\n metadata: this.metadata.toJSON(),\n };\n }\n}\n","import moment from 'moment';\nimport { WorkPackageDashboardDto } from '../../interfaces/dtos/work-package-dashboard.dto';\nimport { WorkPackageStatus } from '../../../models/work-package-status.enum';\nimport { assertRequiredProperties } from '../../utilities/api.utility';\n\nexport class WorkPackageDashboardDtoModel {\n constructor(\n readonly workPackageId: number,\n readonly displayId: string,\n readonly projectId: number,\n readonly title: string,\n readonly projectNumber: string = '',\n readonly projectTitle: string,\n readonly reportedHours: number,\n readonly numberOfOpenQuestions: number = 0,\n readonly status: WorkPackageStatus = WorkPackageStatus.Draft,\n readonly estimatedStartDate: moment.Moment,\n readonly latestEstimatedEndDate: moment.Moment,\n readonly latestEstimatedHours: number = 0,\n readonly plannedStartDate: moment.Moment | null = null,\n readonly latestPlannedEndDate: moment.Moment | null = null,\n readonly plannedHours: number = 0,\n readonly costToComplete: number = 0,\n readonly latestConfirmedHours: number = 0,\n readonly latestConfirmedEndDate: moment.Moment | null = null,\n readonly numberOfNonHumanResourcesPlanned: number = 0,\n readonly numberOfResponsibleUsers: number = 0,\n ) {\n this.estimatedStartDate = (estimatedStartDate != null ? estimatedStartDate.clone() : estimatedStartDate);\n this.latestEstimatedEndDate = (latestEstimatedEndDate != null\n ? latestEstimatedEndDate.clone()\n : latestEstimatedEndDate);\n this.plannedStartDate = (plannedStartDate != null ? plannedStartDate.clone() : plannedStartDate);\n this.latestPlannedEndDate = (latestPlannedEndDate != null ? latestPlannedEndDate.clone() : latestPlannedEndDate);\n this.latestConfirmedEndDate = (latestConfirmedEndDate != null\n ? latestConfirmedEndDate.clone()\n : latestConfirmedEndDate);\n }\n\n // eslint-disable-next-line complexity\n static fromJSON(json: WorkPackageDashboardDto): WorkPackageDashboardDtoModel {\n assertRequiredProperties(json, [\n 'workPackageId',\n 'displayId',\n 'projectId',\n 'title',\n // 'projectNumber',\n 'projectTitle',\n 'reportedHours',\n // 'numberOfOpenQuestions',\n 'status',\n 'estimatedStartDate',\n 'latestEstimatedEndDate',\n 'latestEstimatedHours',\n // 'plannedStartDate',\n // 'latestPlannedEndDate',\n // 'plannedHours',\n // 'costToComplete',\n // 'latestConfirmedHours',\n // 'latestConfirmedEndDate',\n ]);\n\n return new WorkPackageDashboardDtoModel(\n json.workPackageId,\n json.displayId,\n json.projectId,\n json.title,\n json.projectNumber ?? undefined,\n json.projectTitle,\n json.reportedHours,\n json.numberOfOpenQuestions || 0,\n json.status,\n moment(json.estimatedStartDate)\n .parseZone(),\n moment(json.latestEstimatedEndDate)\n .parseZone(),\n json.latestEstimatedHours || 0,\n (json.plannedStartDate != null\n ? moment(json.plannedStartDate)\n .parseZone()\n : null\n ),\n (json.latestPlannedEndDate != null\n ? moment(json.latestPlannedEndDate)\n .parseZone()\n : null\n ),\n json.plannedHours || 0,\n json.costToComplete || 0,\n json.latestConfirmedHours || 0,\n (json.latestConfirmedEndDate != null\n ? moment(json.latestConfirmedEndDate)\n .parseZone()\n : null\n ),\n json.numberOfNonHumanResourcesPlanned || 0,\n json.numberOfResponsibleUsers || 0,\n );\n }\n\n toJSON(): WorkPackageDashboardDto {\n return {\n workPackageId: this.workPackageId,\n displayId: this.displayId,\n projectId: this.projectId,\n title: this.title,\n projectNumber: this.projectNumber,\n projectTitle: this.projectTitle,\n reportedHours: this.reportedHours,\n numberOfOpenQuestions: this.numberOfOpenQuestions,\n status: this.status,\n estimatedStartDate: this.estimatedStartDate.toJSON(),\n latestEstimatedEndDate: this.latestEstimatedEndDate.toJSON(),\n latestEstimatedHours: this.latestEstimatedHours,\n plannedStartDate: (this.plannedStartDate != null ? this.plannedStartDate.toJSON() : null),\n latestPlannedEndDate: (this.latestPlannedEndDate != null ? this.latestPlannedEndDate.toJSON() : null),\n plannedHours: this.plannedHours,\n costToComplete: this.costToComplete,\n latestConfirmedHours: this.latestConfirmedHours,\n latestConfirmedEndDate: (this.latestConfirmedEndDate != null ? this.latestConfirmedEndDate.toJSON() : null),\n numberOfNonHumanResourcesPlanned: this.numberOfNonHumanResourcesPlanned,\n numberOfResponsibleUsers: this.numberOfResponsibleUsers,\n };\n }\n}\n","import { ContractDtoModel } from './contract.dto.model';\nimport { WorkpackageSupplierSettingsDto } from '../../interfaces/dtos/workpackageSupplierSettings.dto';\nimport { ProjectTypeCode } from '../../../models/project-type.enum';\nimport { MetadataModel } from '../metadata.model';\n\nexport class WorkpackageSupplierSettingsDtoModel {\n constructor(\n readonly additionalSupplierProjectTypeCode: string = ProjectTypeCode.SameAsSubmitter,\n readonly additionalSupplierProjectNumber: string | null = null,\n readonly additionalSupplierActivityItemCategoryNumber: string | null = null,\n public contracts: ContractDtoModel[] = [],\n readonly metadata: MetadataModel = new MetadataModel(),\n ) {\n this.contracts = [...contracts];\n }\n\n static fromJSON(json: WorkpackageSupplierSettingsDto): WorkpackageSupplierSettingsDtoModel {\n // assertRequiredProperties(json, [\n // 'additionalSupplierProjectTypeCode',\n // ]);\n\n return new WorkpackageSupplierSettingsDtoModel(\n json.additionalSupplierProjectTypeCode,\n json.additionalSupplierProjectNumber,\n json.additionalSupplierActivityItemCategoryNumber,\n (Array.isArray(json.contracts) ? json.contracts : [])\n .map((item) => ContractDtoModel.fromJSON(item)),\n new MetadataModel(json.metadata || {}),\n );\n }\n\n clone(): WorkpackageSupplierSettingsDtoModel {\n return new WorkpackageSupplierSettingsDtoModel(\n this.additionalSupplierProjectTypeCode,\n this.additionalSupplierProjectNumber,\n this.additionalSupplierActivityItemCategoryNumber,\n this.contracts.map((item) => item.clone()),\n this.metadata.clone(),\n );\n }\n\n toJSON(): WorkpackageSupplierSettingsDto {\n return {\n additionalSupplierProjectTypeCode: this.additionalSupplierProjectTypeCode,\n additionalSupplierProjectNumber: this.additionalSupplierProjectNumber,\n additionalSupplierActivityItemCategoryNumber: this.additionalSupplierActivityItemCategoryNumber,\n contracts: this.contracts.map((item) => item.toJSON()),\n metadata: this.metadata,\n };\n }\n}\n","import { PaginationInfo } from '../interfaces/pagination-info';\n\nexport class PaginationInfoModel implements PaginationInfo {\n readonly pageNumber: number;\n\n readonly pageSize: number;\n\n readonly numberOfTotalResults: number;\n\n constructor(paginationInfo?: PaginationInfo) {\n this.pageNumber = ((paginationInfo && paginationInfo.pageNumber) || 1);\n this.pageSize = ((paginationInfo && paginationInfo.pageSize) || 0);\n this.numberOfTotalResults = ((paginationInfo && paginationInfo.numberOfTotalResults) || 0);\n }\n}\n","import { Metadata } from '../interfaces/metadata';\nimport { ChangedProperty } from '../interfaces/changed-property';\nimport { PaginationInfoModel } from './pagination-info.model';\nimport { deepCopy } from '../../helpers/object.utility';\nimport { PaginationInfo } from '../interfaces/pagination-info';\nimport { ApiModelNew } from './types';\nimport { Diff } from '../../app.types';\n\nfunction fieldReducer(obj: any, key: string, value: any): T {\n return { ...obj, [key]: deepCopy(value) };\n}\n\n// export type CollappJsonPrimitive = string | number | boolean | null;\n// export interface CollappJsonObject { [prop: string]: CollappJsonPrimitive | CollappJsonArray | CollappJsonObject; }\n// export interface CollappJsonArray extends Array {}\n// export type CollappJsonValue = CollappJsonPrimitive | CollappJsonObject | CollappJsonArray;\n\nexport class MetadataModel implements Metadata, ApiModelNew {\n readonly changedProperties: ChangedProperty[];\n\n readonly fields: Diff;\n\n readonly paginationInfo: PaginationInfoModel;\n\n constructor(\n protected metadata: T = {} as any,\n ) {\n this.changedProperties = (Array.isArray(this.metadata.changedProperties)\n ? this.metadata.changedProperties as any as ChangedProperty[]\n : []\n );\n this.fields = Object.entries((this.metadata.fields || {}))\n .reduce((obj, value) => fieldReducer(obj, value[0], value[1]), {} as any);\n this.paginationInfo = new PaginationInfoModel(this.metadata.paginationInfo as PaginationInfo);\n }\n\n get(path: string): any | undefined {\n const parts = path.split('.');\n let value: any | undefined = this.metadata;\n let haystack: any | undefined;\n let key: string;\n\n for (let i = 0, l = parts.length; i < l && value !== undefined; i += 1) {\n key = parts[i];\n haystack = value;\n value = undefined;\n\n if (!key || key.trim() === '' || !haystack || typeof haystack !== 'object') {\n // eslint-disable-next-line no-continue\n continue;\n }\n\n const keys = Object.keys(haystack);\n\n for (let j = 0, m = keys.length; j < m; j += 1) {\n if (keys[j] === key) {\n value = haystack[key];\n break;\n }\n }\n }\n\n return value;\n }\n\n has(path: string): boolean {\n return (this.get(path) !== undefined);\n }\n\n clone(overrides?: { metadata: T }): MetadataModel {\n return new MetadataModel(\n (overrides && overrides.metadata\n ? overrides.metadata\n : deepCopy(this.metadata)\n ),\n );\n }\n\n toJSON(): T {\n return deepCopy(this.metadata);\n }\n}\n","import { AttachmentCreateRequest } from '../../interfaces/requests/attachment-create.request';\nimport { ApiModelNew } from '../types';\nimport { assertRequiredProperties } from '../../utilities/api.utility';\n\nexport class AttachmentCreateRequestModel implements ApiModelNew {\n constructor(\n readonly blobUrl: string,\n readonly blobName: string,\n readonly fileName: string,\n ) {\n }\n\n static fromJSON(json: AttachmentCreateRequest): AttachmentCreateRequestModel {\n assertRequiredProperties(json, [\n 'blobUrl',\n 'blobName',\n 'fileName',\n ]);\n\n return new AttachmentCreateRequestModel(\n json.blobUrl,\n json.blobName,\n json.fileName,\n );\n }\n\n clone(): AttachmentCreateRequestModel {\n return new AttachmentCreateRequestModel(\n this.blobUrl,\n this.blobName,\n this.fileName,\n );\n }\n\n toJSON(): AttachmentCreateRequest {\n return {\n blobUrl: this.blobUrl,\n blobName: this.blobName,\n fileName: this.fileName,\n };\n }\n}\n","import moment from 'moment';\nimport { FileDownloadResponse } from '../../interfaces/responses/file-download.response';\nimport { assertRequiredProperties } from '../../utilities/api.utility';\n\nexport class FileDownloadResponseModel {\n constructor(\n readonly url: string,\n readonly validUntil: moment.Moment,\n ) {\n this.validUntil = validUntil.clone();\n }\n\n static fromJSON(json: FileDownloadResponse): FileDownloadResponseModel {\n assertRequiredProperties(json, [\n 'url',\n 'validUntil',\n ]);\n\n return new FileDownloadResponseModel(\n json.url,\n moment(json.validUntil)\n .parseZone(),\n );\n }\n\n toJSON(): FileDownloadResponse {\n return {\n url: this.url,\n validUntil: this.validUntil.toJSON(),\n };\n }\n}\n","import moment from 'moment';\nimport { assertRequiredProperties } from '../../utilities/api.utility';\nimport { NonHumanResourceListDto } from '../../interfaces/dtos/non-human-resource-list.dto';\n\nexport class NonHumanResourceListDtoModel {\n constructor(\n readonly nonHumanResourceId: string,\n readonly systemId: string | null,\n readonly name: string | null,\n readonly remark: string | null,\n readonly type: string | null,\n readonly version: string | null,\n readonly serialNumber: string | null,\n readonly unitName: string | null,\n readonly unitId: number | null,\n readonly unitCoordinatorFullName: string | null,\n readonly validFrom: moment.Moment | null,\n readonly validUntil: moment.Moment | null,\n readonly countryCode: string | null,\n readonly countryName: string | null,\n readonly productGroupCode: string | null,\n readonly businessUnitCode: string | null,\n readonly workingHoursPerWeek: number | null,\n readonly hourlyRateCategory: string | null,\n readonly divisionCode: string | null,\n readonly city: string | null,\n readonly costCenter: string | null,\n readonly payrollCompany: string | null,\n ) {}\n\n static fromJSON(json: NonHumanResourceListDto): NonHumanResourceListDtoModel {\n assertRequiredProperties(json, [\n 'nonHumanResourceId',\n ]);\n\n return new NonHumanResourceListDtoModel(\n json.nonHumanResourceId,\n json.systemId,\n json.name,\n json.remark,\n json.type,\n json.version,\n json.serialNumber,\n json.unitName,\n json.unitId,\n json.unitCoordinatorFullName,\n (json.validFrom\n ? moment(json.validFrom)\n .parseZone()\n : null),\n (json.validUntil\n ? moment(json.validUntil)\n .parseZone()\n : null\n ),\n json.countryCode,\n json.countryName,\n json.productGroupCode,\n json.businessUnitCode,\n json.workingHoursPerWeek,\n json.hourlyRateCategory,\n json.divisionCode,\n json.city,\n json.costCenter,\n json.payrollCompany,\n );\n }\n\n clone(): NonHumanResourceListDtoModel {\n return new NonHumanResourceListDtoModel(\n this.nonHumanResourceId,\n this.systemId,\n this.name,\n this.remark,\n this.type,\n this.version,\n this.serialNumber,\n this.unitName,\n this.unitId,\n this.unitCoordinatorFullName,\n this.validFrom ? this.validFrom.clone() : null,\n this.validUntil ? this.validUntil.clone() : null,\n this.countryCode,\n this.countryName,\n this.productGroupCode,\n this.businessUnitCode,\n this.workingHoursPerWeek,\n this.hourlyRateCategory,\n this.divisionCode,\n this.city,\n this.costCenter,\n this.payrollCompany,\n );\n }\n}\n","import { MetadataModel } from '../metadata.model';\nimport { NonHumanResourceListResponseMetadata } from '../../interfaces/metadata';\nimport { assertRequiredProperties } from '../../utilities/api.utility';\nimport { NonHumanResourceListDtoModel } from '../dtos/non-human-resource-list.dto.model';\nimport { NonHumanResourceListResponse } from '../../interfaces/responses/non-human-resource-list.response';\n\nexport class NonHumanResourceListResponseModel {\n constructor(\n readonly items: readonly NonHumanResourceListDtoModel[],\n readonly metadata: MetadataModel,\n ) {\n this.items = [...items];\n }\n\n static fromJSON(json: NonHumanResourceListResponse): NonHumanResourceListResponseModel {\n assertRequiredProperties(json, [\n 'items',\n ]);\n\n return new NonHumanResourceListResponseModel(\n json.items.map((item) => NonHumanResourceListDtoModel.fromJSON(item)),\n new MetadataModel(json.metadata),\n );\n }\n}\n","import moment from 'moment';\nimport { ActivityDto } from '../../interfaces/dtos/activity.dto';\nimport { QuestionStatus } from '../../../models/question-status.enum';\nimport { WorkPackageStatus } from '../../../models/work-package-status.enum';\nimport { ActivityFieldDtoModel } from './activity-field.dto.model';\nimport { ActivityActionType } from '../../../models/activity-action-type.enum';\nimport { ActivityType } from '../../../models/activity-type.enum';\nimport { assertRequiredProperties } from '../../utilities/api.utility';\n\nexport class ActivityDtoModel {\n constructor(\n readonly activityId: number,\n readonly projectId: number,\n readonly createdOn: moment.Moment,\n readonly changingUser: string,\n readonly workPackageId: number | null,\n readonly questionId: number | null,\n readonly workPackageDisplayId: string = '',\n readonly action: ActivityActionType,\n readonly actionText: string,\n readonly workPackageTitle: string = '',\n readonly formerWorkPackageStatus: WorkPackageStatus | null,\n readonly formerQuestionStatus: QuestionStatus | null,\n readonly workPackageStatus: WorkPackageStatus | null,\n readonly questionStatus: QuestionStatus | null,\n readonly comment: string = '',\n readonly activityType: ActivityType,\n readonly activityNotifiedUsers: readonly string[] = [],\n readonly activityFields: readonly ActivityFieldDtoModel[] = [],\n readonly notificationsSent: boolean | null = null,\n ) {\n this.createdOn = createdOn.clone();\n this.activityNotifiedUsers = [...activityNotifiedUsers];\n this.activityFields = [...activityFields];\n }\n\n static fromJSON(json: ActivityDto): ActivityDtoModel {\n assertRequiredProperties(json, [\n 'activityId',\n 'projectId',\n 'createdOn',\n 'changingUser',\n ]);\n\n return new ActivityDtoModel(\n json.activityId,\n json.projectId,\n moment(json.createdOn)\n .parseZone(),\n json.changingUser,\n json.workPackageId,\n json.questionId,\n json.workPackageDisplayId || '',\n json.action,\n json.actionText,\n json.workPackageTitle || '',\n json.formerWorkPackageStatus,\n json.formerQuestionStatus,\n json.workPackageStatus,\n json.questionStatus,\n json.comment || '',\n json.activityType,\n [...json.activityNotifiedUsers],\n (Array.isArray(json.activityFields) ? json.activityFields : [])\n .map((item) => ActivityFieldDtoModel.fromJSON(item)),\n json.notificationsSent,\n );\n }\n}\n","import { ProjectActivityViewResponse } from '../../interfaces/responses/project-activity-view.response';\nimport { ActivityDtoModel } from '../dtos/activity.dto.model';\nimport { ProjectActivityListResponseMetadata } from '../../interfaces/metadata';\nimport { MetadataModel } from '../metadata.model';\nimport { assertRequiredProperties } from '../../utilities/api.utility';\n\nexport class ProjectActivityViewResponseModel {\n constructor(\n readonly projectId: number,\n readonly activities: readonly ActivityDtoModel[],\n readonly metadata: MetadataModel,\n ) {\n this.activities = [...activities];\n }\n\n static fromJSON(json: ProjectActivityViewResponse): ProjectActivityViewResponseModel {\n assertRequiredProperties(json, [\n 'projectId',\n ]);\n\n return new ProjectActivityViewResponseModel(\n json.projectId,\n (Array.isArray(json.activities) ? json.activities : [])\n .map((activity) => ActivityDtoModel.fromJSON(activity)),\n new MetadataModel(json.metadata),\n );\n }\n}\n","import { ProjectDashboardListResponse } from '../../interfaces/responses/project-dashboard-list.response';\nimport { ProjectDashboardDtoModel } from '../dtos/project-dashboard.dto.model';\nimport { MetadataModel } from '../metadata.model';\nimport { assertRequiredProperties } from '../../utilities/api.utility';\n\nexport class ProjectDashboardListResponseModel {\n constructor(\n readonly items: readonly ProjectDashboardDtoModel[] = [],\n readonly metadata: MetadataModel = new MetadataModel(),\n ) {\n this.items = [...items];\n }\n\n static fromJSON(json: ProjectDashboardListResponse): ProjectDashboardListResponseModel {\n assertRequiredProperties(json, [\n ]);\n\n return new ProjectDashboardListResponseModel(\n (Array.isArray(json.items) ? json.items : [])\n .map((item) => ProjectDashboardDtoModel.fromJSON(item)),\n new MetadataModel(json.metadata || {}),\n );\n }\n\n toJSON(): ProjectDashboardListResponse {\n return {\n items: this.items.map((item) => item.toJSON()),\n metadata: this.metadata.toJSON(),\n };\n }\n}\n","import { ProjectStatus } from '../../../models/project-status.enum';\nimport { ProjectTypeCode } from '../../../models/project-type.enum';\nimport { ProjectListViewDto } from '../../interfaces/dtos/project-list-view';\nimport { assertRequiredProperties } from '../../utilities/api.utility';\n\nexport class ProjectListViewDtoModel {\n constructor(\n readonly projectId: number,\n readonly sapNumber: string | null = null,\n readonly projectNumber: string = '',\n readonly title: string = '',\n readonly scope: string = '',\n readonly projectManagerFullName: string | null = null,\n readonly technicalProjectManagerFullName: string | null = null,\n readonly submitterUnitName: string | null = null,\n readonly gateName: string | null = null,\n readonly customerCountryCode: string | null = null,\n readonly placeOfManufacturingCountryCode: string | null = null,\n readonly emtOrderFromUnitName: string = '',\n readonly emtOrderFromCountryCode: string = '',\n readonly status: ProjectStatus | null = null,\n readonly projectTypeCode: ProjectTypeCode | null = null,\n readonly payrollCompany: string | null = null,\n readonly reportedHours: number = 0,\n readonly percentDone: number = 0,\n readonly projectUserStatus: string | null = null,\n ) {\n }\n\n static fromJSON(json: ProjectListViewDto): ProjectListViewDtoModel {\n assertRequiredProperties(json, [\n // 'projectId',\n ]);\n\n return new ProjectListViewDtoModel(\n json.projectId,\n json.sapNumber,\n json.projectNumber,\n json.title,\n json.scope,\n json.projectManagerFullName,\n json.technicalProjectManagerFullName,\n json.submitterUnitName,\n json.gateName,\n json.customerCountryCode,\n json.placeOfManufacturingCountryCode,\n json.emtOrderFromUnitName || '',\n json.emtOrderFromCountryCode || '',\n (json.status != null ? json.status : null),\n (json.projectTypeCode != null ? json.projectTypeCode : null),\n json.payrollCompany,\n json.reportedHours || 0,\n json.percentDone || 0,\n json.projectUserStatus,\n );\n }\n\n toJSON(): ProjectListViewDto {\n return {\n projectId: this.projectId,\n sapNumber: this.sapNumber,\n projectNumber: this.projectNumber,\n title: this.title,\n scope: this.scope,\n projectManagerFullName: this.projectManagerFullName,\n technicalProjectManagerFullName: this.technicalProjectManagerFullName,\n submitterUnitName: this.submitterUnitName,\n gateName: this.gateName,\n customerCountryCode: this.customerCountryCode,\n placeOfManufacturingCountryCode: this.placeOfManufacturingCountryCode,\n emtOrderFromUnitName: this.emtOrderFromUnitName,\n emtOrderFromCountryCode: this.emtOrderFromCountryCode,\n status: this.status,\n projectTypeCode: this.projectTypeCode,\n payrollCompany: this.payrollCompany,\n reportedHours: this.reportedHours,\n percentDone: this.percentDone,\n projectUserStatus: this.projectUserStatus,\n };\n }\n}\n","import { ProjectListResponse } from '../../interfaces/responses/project-list.response';\nimport { WithPaginationInfo } from '../../interfaces/metadata';\nimport { MetadataModel } from '../metadata.model';\nimport { ProjectListViewDtoModel } from '../dtos/project-list-view.dto.model';\nimport { assertRequiredProperties } from '../../utilities/api.utility';\n\nexport class ProjectListResponseModel {\n constructor(\n readonly items: readonly ProjectListViewDtoModel[],\n readonly metadata: MetadataModel,\n ) {\n this.items = [...items];\n }\n\n static fromJSON(json: ProjectListResponse): ProjectListResponseModel {\n assertRequiredProperties(json, [\n 'items',\n ]);\n\n return new ProjectListResponseModel(\n json.items.map((item) => ProjectListViewDtoModel.fromJSON(item)),\n new MetadataModel(json.metadata),\n );\n }\n\n toJSON(): ProjectListResponse {\n return {\n items: this.items.map((item) => item.toJSON()),\n metadata: this.metadata.toJSON(),\n };\n }\n}\n","import { ProjectWorkpackageTotalsDto } from '../../interfaces/dtos/project-workpackage-totals.dto';\n\nexport class ProjectWorkpackageTotalsDtoModel {\n constructor(\n readonly totalRecorded: number | null,\n readonly totalAvailableToBePlanned: number | null,\n readonly totalConfirmed: number,\n readonly totalPlanned: number | null,\n ) {}\n\n static fromJSON(json: ProjectWorkpackageTotalsDto): ProjectWorkpackageTotalsDtoModel {\n return new ProjectWorkpackageTotalsDtoModel(\n json.totalRecorded,\n json.totalAvailableToBePlanned,\n json.totalConfirmed,\n json.totalPlanned,\n );\n }\n\n clone(): ProjectWorkpackageTotalsDtoModel {\n return new ProjectWorkpackageTotalsDtoModel(\n this.totalRecorded,\n this.totalAvailableToBePlanned,\n this.totalConfirmed,\n this.totalPlanned,\n );\n }\n}\n","import moment from 'moment';\nimport { ProjectWorkpackageWeekDto } from '../../interfaces/dtos/project-workpackage-week.dto';\nimport { assertRequiredProperties } from '../../utilities/api.utility';\nimport { MetadataSlimDtoModel } from './metadata-slim.dto.model';\nimport { NoteInterfaceWithResourceData } from '../../interfaces/note.interface';\n\nexport class ProjectWorkpackageWeekDtoModel {\n constructor(\n readonly weekStartDate: moment.Moment | null,\n readonly plannedHours: number,\n readonly isHighlight: boolean,\n readonly metadata: MetadataSlimDtoModel,\n public notes: NoteInterfaceWithResourceData[] | null,\n public hasNotes: boolean = false,\n ) {}\n\n static fromJSON(json: ProjectWorkpackageWeekDto): ProjectWorkpackageWeekDtoModel {\n assertRequiredProperties(json, [\n 'weekStartDate',\n ]);\n\n return new ProjectWorkpackageWeekDtoModel(\n json.weekStartDate ? moment(json.weekStartDate) : null,\n json.plannedHours,\n json.isHighlight,\n MetadataSlimDtoModel.fromJSON(json.metadata),\n json.notes,\n json.hasNotes,\n );\n }\n\n clone(): ProjectWorkpackageWeekDtoModel {\n return new ProjectWorkpackageWeekDtoModel(\n this.weekStartDate?.clone() || null,\n this.plannedHours,\n this.isHighlight,\n this.metadata?.clone() || null,\n this.notes?.map((note) => ({ ...note })) || null,\n this.hasNotes,\n );\n }\n}\n","import { ProjectWorkpackageDto } from '../../interfaces/dtos/project-workpackage.dto';\nimport { assertRequiredProperties } from '../../utilities/api.utility';\nimport { ProjectWorkpackageTotalsDtoModel } from './project-planning-workpackage-totals.dto.model';\nimport { ProjectWorkpackageWeekDtoModel } from './project-planning-workpackage-week.dto.model';\n\nexport class ProjectPlanningWorkpackageDtoModel {\n constructor(\n readonly workPackageId: number,\n readonly sequenceNumber: number,\n readonly title: string,\n readonly totals: ProjectWorkpackageTotalsDtoModel,\n readonly weeks: ProjectWorkpackageWeekDtoModel[],\n ) {\n if (totals) {\n this.totals = totals.clone();\n }\n if (weeks) {\n this.weeks = [...weeks];\n }\n }\n\n static fromJSON(json: ProjectWorkpackageDto): ProjectPlanningWorkpackageDtoModel {\n assertRequiredProperties(json, [\n 'workPackageId',\n ]);\n\n const totals = ProjectWorkpackageTotalsDtoModel.fromJSON(json.totals);\n const weeks = (Array.isArray(json.weeks) ? json.weeks : [])\n .map(ProjectWorkpackageWeekDtoModel.fromJSON);\n\n return new ProjectPlanningWorkpackageDtoModel(\n json.workPackageId,\n json.sequenceNumber,\n json.title,\n totals,\n weeks,\n );\n }\n\n clone(): ProjectPlanningWorkpackageDtoModel {\n return new ProjectPlanningWorkpackageDtoModel(\n this.workPackageId,\n this.sequenceNumber,\n this.title,\n this.totals.clone() || null,\n this.weeks?.map((item) => item.clone()) || null,\n );\n }\n}\n","import { assertRequiredProperties } from '../../utilities/api.utility';\nimport { ProjectLevelDto, ProjectPlanningTotalsType } from '../../interfaces/dtos/project-level.dto';\nimport { ProjectPlanningWorkpackageDtoModel } from './project-planning-workpackage.dto.model';\nimport { ProjectWorkpackageWeekDtoModel } from './project-planning-workpackage-week.dto.model';\n\nexport class ProjectPlanningLevelDtoModel {\n constructor(\n readonly children: ProjectPlanningLevelDtoModel[],\n readonly totals: {[key in ProjectPlanningTotalsType]: number},\n readonly levelId: number,\n readonly name: string[],\n readonly codePath: string,\n readonly levelNumber: number,\n readonly workPackages: ProjectPlanningWorkpackageDtoModel[],\n readonly hasWorkPackages: boolean,\n readonly weeks: ProjectWorkpackageWeekDtoModel[],\n ) {\n if (workPackages) {\n this.workPackages = [...workPackages];\n }\n if (weeks) {\n this.weeks = [...weeks];\n }\n if (children) {\n this.children = [...children];\n }\n if (name) {\n this.name = [...name];\n }\n }\n\n static fromJSON(json: ProjectLevelDto): ProjectPlanningLevelDtoModel {\n assertRequiredProperties(json, [\n 'levelId',\n ]);\n\n const workpackages = (Array.isArray(json.workPackages) ? json.workPackages : [])\n .map(ProjectPlanningWorkpackageDtoModel.fromJSON);\n\n const weeks = (Array.isArray(json.weeks) ? json.weeks.map(ProjectWorkpackageWeekDtoModel.fromJSON) : []);\n\n return new ProjectPlanningLevelDtoModel(\n json.children?.map(ProjectPlanningLevelDtoModel.fromJSON) || null,\n json.totals,\n json.levelId,\n json.name,\n json.codePath,\n json.levelNumber,\n workpackages,\n json.hasWorkPackages,\n weeks,\n );\n }\n\n clone(): ProjectPlanningLevelDtoModel {\n return new ProjectPlanningLevelDtoModel(\n this.children,\n this.totals,\n this.levelId,\n [...this.name],\n this.codePath,\n this.levelNumber,\n this.workPackages?.map((item) => item.clone()) || null,\n this.hasWorkPackages,\n this.weeks?.map((item) => item.clone()) || null,\n );\n }\n}\n","import { ProjectPlanningViewResponse } from '../../interfaces/responses/project-planning-view.response';\nimport { ProjectPlanningLevelDtoModel } from '../dtos/project-planning-level.dto.model';\n\nexport class ProjectPlanningViewResponseModel {\n constructor(\n readonly projectId: number,\n readonly levels: ProjectPlanningLevelDtoModel[],\n ) {\n if (levels) {\n this.levels = [...levels];\n }\n }\n\n static fromJSON(json: ProjectPlanningViewResponse): ProjectPlanningViewResponseModel {\n return new ProjectPlanningViewResponseModel(\n json.projectId,\n (Array.isArray(json.levels) ? json.levels : [])\n .map(ProjectPlanningLevelDtoModel.fromJSON),\n );\n }\n\n clone(): ProjectPlanningViewResponseModel {\n return new ProjectPlanningViewResponseModel(\n this.projectId,\n this.levels?.map((item) => item.clone()) || null,\n );\n }\n}\n","import { LevelSlimDtoModel } from '../dtos/level-slim.dto.model';\nimport { ProjectSlimResponse } from '../../interfaces/responses/project-slim.response';\nimport { ContractDtoModel } from '../dtos/contract.dto.model';\nimport { UnitSlimDtoModel } from '../dtos/unit-slim.dto.model';\n\nexport class ProjectSlimResponseModel {\n constructor(\n readonly projectId: number,\n readonly projectNumber: string | null,\n readonly title: string | null,\n readonly projectTypeCode: string,\n readonly submitterUnit: UnitSlimDtoModel,\n readonly structure: LevelSlimDtoModel[] = [],\n readonly childUnitContracts: readonly ContractDtoModel[] = [],\n ) {\n if (structure) {\n this.structure = structure.map((level) => level.clone());\n }\n\n if (childUnitContracts) {\n this.childUnitContracts = childUnitContracts.map((contract) => contract.clone());\n }\n }\n\n static getLevelPath(levelId?: number, structure: readonly LevelSlimDtoModel[] = []): LevelSlimDtoModel[] {\n if (!levelId || structure.length === 0) {\n return [];\n }\n\n const structureLen = structure.length;\n let levelPath: LevelSlimDtoModel[] = [];\n let i = 0;\n\n // Look for work package in level and receive the path\n while (levelPath.length === 0 && i < structureLen) {\n levelPath = structure[i].getLevelPath(levelId);\n i += 1;\n }\n\n return levelPath;\n }\n\n static fromJSON(json: ProjectSlimResponse): ProjectSlimResponseModel {\n return new ProjectSlimResponseModel(\n json.projectId,\n json.projectNumber,\n json.title,\n json.projectTypeCode,\n UnitSlimDtoModel.fromJSON(json.submitterUnit),\n Array.isArray(json.structure) ? json.structure.map((level) => LevelSlimDtoModel.fromJSON(level)) : [],\n Array.isArray(json.childUnitContracts)\n ? json.childUnitContracts.map((level) => ContractDtoModel.fromJSON(level))\n : [],\n );\n }\n\n toJSON(): ProjectSlimResponse {\n return {\n projectId: this.projectId,\n projectNumber: this.projectNumber,\n title: this.title,\n projectTypeCode: this.projectTypeCode,\n submitterUnit: this.submitterUnit.toJSON(),\n structure: this.structure.map((level) => level.toJSON()),\n childUnitContracts: this.childUnitContracts.map((level) => level.toJSON()),\n };\n }\n}\n","import moment, { Moment } from 'moment';\nimport { ProjectViewResponse } from '../../interfaces/responses/project-view.response';\nimport { LevelSlimDtoModel } from '../dtos/level-slim.dto.model';\nimport { MetadataModel } from '../metadata.model';\nimport { ContractDtoModel } from '../dtos/contract.dto.model';\nimport { ProjectTypeCode } from '../../../models/project-type.enum';\nimport { ProjectViewResponseMetadata } from '../../interfaces/metadata';\nimport { UnitSlimDtoModel } from '../dtos/unit-slim.dto.model';\nimport { assertRequiredProperties } from '../../utilities/api.utility';\n\nexport class ProjectViewResponseModel {\n canUpdateProjectStructureFromSap: boolean;\n\n canUpdateProjectStructureManually: boolean;\n\n canCreateWorkPackage: boolean;\n\n canArchiveProject: boolean;\n\n canUnarchiveProject: boolean;\n\n canExportProject: boolean;\n\n isUserSupplierUnitCoordinatorForProject: boolean;\n\n // eslint-disable-next-line complexity\n constructor(\n readonly projectId: number,\n readonly title: string,\n readonly status: string | null = null,\n readonly sapNumber: string | null = null,\n readonly projectNumber: string = '',\n readonly projectTypeCode: ProjectTypeCode = ProjectTypeCode.Unknown,\n readonly customerCountryCode: string = '',\n readonly getDate: Moment | null = null,\n readonly structure: readonly LevelSlimDtoModel[] = [],\n readonly submitterUnit: UnitSlimDtoModel | null = null,\n readonly childUnitContracts: readonly ContractDtoModel[] = [],\n readonly metadata: MetadataModel = new MetadataModel(),\n ) {\n this.structure = [...structure];\n this.childUnitContracts = [...childUnitContracts];\n\n this.canUpdateProjectStructureFromSap = (this.metadata.fields\n && this.metadata.fields.canUpdateProjectStructureFromSap) || false;\n this.canUpdateProjectStructureManually = (this.metadata.fields\n && this.metadata.fields.canUpdateProjectStructureManually) || false;\n this.canCreateWorkPackage = (this.metadata.fields && this.metadata.fields.canCreateWorkPackage) || false;\n this.canArchiveProject = (this.metadata.fields && this.metadata.fields.canArchiveProject) || false;\n this.canUnarchiveProject = (this.metadata.fields && this.metadata.fields.canUnarchiveProject) || false;\n this.canExportProject = (this.metadata.fields && this.metadata.fields.canExportProject) || false;\n this.isUserSupplierUnitCoordinatorForProject = (this.metadata.fields\n && this.metadata.fields.isUserSupplierUnitCoordinatorForProject) || false;\n }\n\n static getLevelPath(levelId?: number, structure: readonly LevelSlimDtoModel[] = []): LevelSlimDtoModel[] {\n if (!levelId || structure.length === 0) {\n return [];\n }\n\n const structureLen = structure.length;\n let levelPath: LevelSlimDtoModel[] = [];\n let i = 0;\n\n // Look for work package in level and receive the path\n while (levelPath.length === 0 && i < structureLen) {\n levelPath = structure[i].getLevelPath(levelId);\n i += 1;\n }\n\n return levelPath;\n }\n\n static fromJSON(json: ProjectViewResponse): ProjectViewResponseModel {\n assertRequiredProperties(json, [\n 'projectId',\n 'title',\n ]);\n\n return new ProjectViewResponseModel(\n json.projectId,\n json.title,\n json.projectUserStatus,\n json.sapNumber,\n json.projectNumber ?? undefined,\n (json.projectTypeCode != null\n ? json.projectTypeCode\n : ProjectTypeCode.Unknown\n ),\n json.customerCountryCode || '',\n (json.getDate\n ? moment(json.getDate)\n : null\n ),\n (Array.isArray(json.structure)\n ? json.structure\n .map((item) => LevelSlimDtoModel.fromJSON(item))\n : []\n ),\n (json.submitterUnit\n ? UnitSlimDtoModel.fromJSON(json.submitterUnit)\n : null\n ),\n (Array.isArray(json.childUnitContracts)\n ? json.childUnitContracts\n .map((item) => ContractDtoModel.fromJSON(item))\n : []\n ),\n // FIXME remove cast to any\n new MetadataModel(json.metadata || {} as any),\n );\n }\n\n /**\n * Looks recursively if the work package exists in the project. If the work package was found,\n * the path of levels is returned as an array: [l1, l2, l3, ...]\n *\n * @param levelId\n */\n getLevelPath(levelId: number): LevelSlimDtoModel[] {\n return ProjectViewResponseModel.getLevelPath(levelId, this.structure);\n }\n\n /**\n * Returns contracts of submitter it has with a supplier.\n * @param supplierId\n */\n getSubmitterContractsBySupplierId(supplierId: number): ContractDtoModel[] {\n return this.childUnitContracts\n .filter((contract) => contract.supplierUnit && contract.supplierUnit.unitId === supplierId);\n }\n\n hasSubmitterContractsWithSupplier(supplierId: number): boolean {\n return this.getSubmitterContractsBySupplierId(supplierId).length > 0;\n }\n\n toJSON(): ProjectViewResponse {\n return {\n projectId: this.projectId,\n title: this.title,\n projectUserStatus: this.status,\n sapNumber: this.sapNumber,\n projectNumber: this.projectNumber,\n projectTypeCode: this.projectTypeCode,\n customerCountryCode: this.customerCountryCode,\n getDate: this.getDate ? this.getDate.toISOString() : null,\n structure: this.structure.map((item) => item.toJSON()),\n submitterUnit: this.submitterUnit ? this.submitterUnit.toJSON() : null,\n childUnitContracts: this.childUnitContracts.map((item) => item.toJSON()),\n metadata: this.metadata.toJSON(),\n };\n }\n}\n","import { QuestionCreateResponse } from '../../interfaces/responses/question-create.response';\nimport { assertRequiredProperties } from '../../utilities/api.utility';\n\nexport class QuestionCreateResponseModel {\n constructor(\n readonly questionId: number,\n ) {\n }\n\n static fromJSON(json: QuestionCreateResponse): QuestionCreateResponseModel {\n assertRequiredProperties(json, [\n 'questionId',\n ]);\n\n return new QuestionCreateResponseModel(\n json.questionId,\n );\n }\n\n toJSON(): QuestionCreateResponse {\n return {\n questionId: this.questionId,\n };\n }\n}\n","import { ApiModelNew } from '../types';\nimport { QuestionDashboardListResponse } from '../../interfaces/responses/question-dashboard-list.response';\nimport { QuestionDashboardDtoModel } from '../dtos/question-dashboard.dto.model';\nimport { Metadata } from '../../interfaces/metadata';\n\nexport class QuestionDashboardListResponseModel implements ApiModelNew {\n constructor(\n readonly items: readonly QuestionDashboardDtoModel[],\n readonly metadata: Metadata,\n ) {\n this.items = [...items];\n }\n\n static fromJSON(json: QuestionDashboardListResponse): QuestionDashboardListResponseModel {\n return new QuestionDashboardListResponseModel(\n json.items\n ? json.items.map((item) => QuestionDashboardDtoModel.fromJSON(item))\n : [],\n json.metadata || {},\n );\n }\n\n toJSON(): QuestionDashboardListResponse {\n return {\n items: this.items.map((item) => item.toJSON()),\n metadata: { ...this.metadata },\n };\n }\n\n clone(overrides?: Partial): QuestionDashboardListResponseModel {\n return new QuestionDashboardListResponseModel(\n overrides && overrides.items\n ? overrides.items || []\n : this.items.map((item) => item.clone()),\n ({\n ...(overrides && overrides.metadata\n ? overrides.metadata\n : this.metadata),\n }),\n );\n }\n}\n","import { QuestionListResponse } from '../../interfaces/responses/question-list.response';\nimport { QuestionDtoModel } from '../dtos/question.dto.model';\nimport { QuestionListResponseMetadata } from '../../interfaces/metadata';\nimport { MetadataModel } from '../metadata.model';\nimport { assertRequiredProperties } from '../../utilities/api.utility';\n\nexport class QuestionListResponseModel {\n constructor(\n readonly items: readonly QuestionDtoModel[],\n readonly metadata: MetadataModel = new MetadataModel(),\n ) {\n this.items = [...items];\n }\n\n static fromJSON(json: QuestionListResponse): QuestionListResponseModel {\n assertRequiredProperties(json, [\n 'items',\n ]);\n\n return new QuestionListResponseModel(\n (Array.isArray(json.items) ? json.items : [])\n .map((item) => QuestionDtoModel.fromJSON(item)),\n new MetadataModel(json.metadata || {}),\n );\n }\n\n toJSON(): QuestionListResponse {\n return {\n items: this.items.map((item) => item.toJSON()),\n metadata: this.metadata.toJSON(),\n };\n }\n}\n","import { QuestionUserNotificationResponse } from '../../interfaces/responses/question-user-notification.response';\nimport { WorkPackageRole } from '../../../models/work-package-role.enum';\nimport { UserQuestionNotificationDtoModel } from '../dtos/user-question-notification.dto.model';\nimport { assertRequiredProperties } from '../../utilities/api.utility';\n\nexport class QuestionUserNotificationResponseModel {\n constructor(\n readonly workPackageRole: WorkPackageRole,\n readonly users: readonly UserQuestionNotificationDtoModel[],\n ) {\n this.users = [...users];\n }\n\n static fromJSON(json: QuestionUserNotificationResponse): QuestionUserNotificationResponseModel {\n assertRequiredProperties(json, [\n 'workPackageRole',\n ]);\n\n return new QuestionUserNotificationResponseModel(\n json.workPackageRole,\n (Array.isArray(json.users)\n ? json.users\n .map((item) => UserQuestionNotificationDtoModel.fromJSON(item))\n : []\n ),\n );\n }\n}\n","import { QuestionListResponseMetadata } from '../../interfaces/metadata';\nimport { MetadataModel } from '../metadata.model';\nimport { QuestionUserNotificationResponseModel } from './question-user-notification.response.model';\nimport { QuestionUserNotificationListResponse } from '../../interfaces/responses/question-user-notification-list.response';\nimport { assertRequiredProperties } from '../../utilities/api.utility';\n\nexport class QuestionUserNotificationListResponseModel {\n constructor(\n readonly items: readonly QuestionUserNotificationResponseModel[],\n readonly metadata: MetadataModel,\n ) {\n this.items = [...items];\n }\n\n static fromJSON(json: QuestionUserNotificationListResponse): QuestionUserNotificationListResponseModel {\n assertRequiredProperties(json, [\n 'items',\n ]);\n\n return new QuestionUserNotificationListResponseModel(\n (Array.isArray(json.items)\n ? json.items\n .map((item) => QuestionUserNotificationResponseModel.fromJSON(item))\n : []\n ),\n new MetadataModel(json.metadata),\n );\n }\n}\n","import moment from 'moment';\nimport { QuestionStatus } from '../../../models/question-status.enum';\nimport { WorkPackageRole } from '../../../models/work-package-role.enum';\nimport { QuestionListItemDto } from '../../interfaces/dtos/question-list-item.dto';\nimport { assertRequiredProperties } from '../../utilities/api.utility';\n\nexport class QuestionListItemDtoModel {\n constructor(\n readonly projectId: number,\n readonly workPackageId: number,\n readonly questionId: number,\n readonly workPackageDisplayId: string,\n readonly workPackageTitle: string,\n readonly projectTitle: string,\n readonly questionTitle: string,\n readonly numberOfReplies: number = 0,\n readonly creatorFullName: string,\n readonly creatorWorkPackageRole: WorkPackageRole | null = null,\n readonly createdOn: moment.Moment,\n readonly lastRepliedByFullName: string | null = null,\n readonly lastRepliedOn: moment.Moment | null = null,\n readonly status: QuestionStatus,\n ) {\n this.createdOn = createdOn.clone();\n this.lastRepliedOn = (lastRepliedOn != null ? lastRepliedOn.clone() : lastRepliedOn);\n }\n\n static fromJSON(json: QuestionListItemDto): QuestionListItemDtoModel {\n assertRequiredProperties(json, [\n 'projectId',\n 'workPackageId',\n 'questionId',\n 'workPackageDisplayId',\n 'workPackageTitle',\n 'projectTitle',\n 'questionTitle',\n 'creatorFullName',\n 'createdOn',\n 'status',\n ]);\n\n return new QuestionListItemDtoModel(\n json.projectId,\n json.workPackageId,\n json.questionId,\n json.workPackageDisplayId,\n json.workPackageTitle,\n json.projectTitle,\n json.questionTitle,\n json.numberOfReplies,\n json.creatorFullName,\n json.creatorWorkPackageRole,\n moment(json.createdOn)\n .parseZone(),\n json.lastRepliedByFullName,\n (json.lastRepliedOn != null\n ? moment(json.lastRepliedOn)\n .parseZone()\n : null\n ),\n json.status,\n );\n }\n\n toJSON(): QuestionListItemDto {\n return {\n projectId: this.projectId,\n workPackageId: this.workPackageId,\n questionId: this.questionId,\n workPackageDisplayId: this.workPackageDisplayId,\n workPackageTitle: this.workPackageTitle,\n projectTitle: this.projectTitle,\n questionTitle: this.questionTitle,\n numberOfReplies: this.numberOfReplies,\n creatorFullName: this.creatorFullName,\n creatorWorkPackageRole: this.creatorWorkPackageRole,\n createdOn: this.createdOn.toJSON(),\n lastRepliedByFullName: this.lastRepliedByFullName,\n lastRepliedOn: (this.lastRepliedOn != null ? this.lastRepliedOn.toJSON() : null),\n status: this.status,\n };\n }\n}\n","import { MetadataModel } from '../metadata.model';\nimport { WithPaginationInfo } from '../../interfaces/metadata';\nimport { QuestionsViewListResponse } from '../../interfaces/responses/questions-view-list.response';\nimport { QuestionListItemDtoModel } from '../dtos/question-list-item.dto.model';\nimport { assertRequiredProperties } from '../../utilities/api.utility';\n\nexport class QuestionsViewListResponseModel {\n constructor(\n readonly items: readonly QuestionListItemDtoModel[],\n readonly metadata: MetadataModel,\n ) {\n this.items = [...items];\n }\n\n static fromJSON(json: QuestionsViewListResponse): QuestionsViewListResponseModel {\n assertRequiredProperties(json, [\n 'items',\n ]);\n\n return new QuestionsViewListResponseModel(\n (Array.isArray(json.items) ? json.items : [])\n .map((item) => QuestionListItemDtoModel.fromJSON(item)),\n new MetadataModel(json.metadata),\n );\n }\n}\n","import moment from 'moment';\nimport { ReplyDto } from '../../interfaces/dtos/reply.dto';\nimport { UserSlimDtoModel } from './user-slim.dto.model';\nimport { ReplyType } from '../../../models/reply-type.enum';\nimport { WorkPackageRole } from '../../../models/work-package-role.enum';\nimport { assertRequiredProperties } from '../../utilities/api.utility';\n\nexport class ReplyDtoModel {\n constructor(\n readonly replyId: number,\n readonly questionId: number,\n readonly type: ReplyType,\n readonly text: string,\n readonly creator: UserSlimDtoModel,\n readonly createdOn: moment.Moment,\n readonly creatorWorkPackageRole: WorkPackageRole | null = null,\n ) {\n this.createdOn = createdOn.clone();\n }\n\n static fromJSON(json: ReplyDto): ReplyDtoModel {\n assertRequiredProperties(json, [\n 'replyId',\n 'questionId',\n 'type',\n 'text',\n 'creator',\n 'createdOn',\n // 'creatorWorkPackageRole',\n ]);\n\n return new ReplyDtoModel(\n json.replyId,\n json.questionId,\n json.type,\n json.text,\n UserSlimDtoModel.fromJSON(json.creator),\n moment(json.createdOn)\n .parseZone(),\n json.creatorWorkPackageRole,\n );\n }\n\n toJSON(): ReplyDto {\n return {\n replyId: this.replyId,\n questionId: this.questionId,\n type: this.type,\n text: this.text,\n creator: this.creator.toJSON(),\n createdOn: this.createdOn.toJSON(),\n creatorWorkPackageRole: this.creatorWorkPackageRole,\n };\n }\n}\n","import { QuestionReplyListResponseMetadata } from '../../interfaces/metadata';\nimport { MetadataModel } from '../metadata.model';\nimport { ReplyListResponse } from '../../interfaces/responses/reply-list.response';\nimport { ReplyDtoModel } from '../dtos/reply-dto.model';\nimport { assertRequiredProperties } from '../../utilities/api.utility';\n\nexport class ReplyListResponseModel {\n constructor(\n readonly items: readonly ReplyDtoModel[],\n readonly metadata: MetadataModel,\n ) {\n this.items = [...items];\n }\n\n static fromJSON(json: ReplyListResponse): ReplyListResponseModel {\n assertRequiredProperties(json, [\n // 'items',\n ]);\n\n return new ReplyListResponseModel(\n (Array.isArray(json.items) ? json.items : [])\n .map((item) => ReplyDtoModel.fromJSON(item)),\n new MetadataModel(json.metadata),\n );\n }\n}\n","import { UnitListResponse } from '../../interfaces/responses/unit-list.response';\nimport { UnitListDtoModel } from '../dtos/unit-list.dto.model';\nimport { MetadataModel } from '../metadata.model';\nimport { UnitListResponseMetadata } from '../../interfaces/metadata';\nimport { assertRequiredProperties } from '../../utilities/api.utility';\n\nexport class UnitListResponseModel {\n constructor(\n readonly items: readonly UnitListDtoModel[],\n readonly metadata: MetadataModel,\n ) {\n this.items = [...items];\n }\n\n static fromJSON(json: UnitListResponse): UnitListResponseModel {\n assertRequiredProperties(json, [\n 'items',\n ]);\n\n return new UnitListResponseModel(\n json.items.map((item) => UnitListDtoModel.fromJSON(item)),\n new MetadataModel(json.metadata),\n );\n }\n}\n","import { CapacityUnits } from '../../../modules/administration/non-human-resources/capacity-units';\nimport { NonHumanResourcePlanningSlimDtoModel } from './non-human-resource-planning-slim.dto.model';\nimport { UserPlanningSlimDtoModel } from './user-planning-slim.dto.model';\n\nexport class UserPlanningResourceSlimDtoModel {\n constructor(\n readonly id: string,\n readonly name: string,\n readonly photoUrl: string | null = null,\n readonly capacityUnit: CapacityUnits | null,\n readonly isHuman: boolean | null = null,\n ) {\n if (isHuman) {\n this.capacityUnit = CapacityUnits.HoursWeek;\n }\n }\n\n static fromNonHumanResourcePlanningSlimDtoModel(\n model: NonHumanResourcePlanningSlimDtoModel,\n ): UserPlanningResourceSlimDtoModel {\n return new UserPlanningResourceSlimDtoModel(\n model.nonHumanResourceId,\n model.name || '',\n '',\n model.capacityUnit,\n false,\n );\n }\n\n static fromUserPlanningSlimDtoModel(\n model: UserPlanningSlimDtoModel,\n ): UserPlanningResourceSlimDtoModel {\n return new UserPlanningResourceSlimDtoModel(\n model.userId,\n model.fullName,\n model.photoUrl,\n CapacityUnits.HoursWeek,\n true,\n );\n }\n\n clone(): UserPlanningResourceSlimDtoModel {\n return new UserPlanningResourceSlimDtoModel(\n this.id,\n this.name,\n this.photoUrl,\n this.capacityUnit,\n this.isHuman,\n );\n }\n}\n","import moment from 'moment';\nimport { UnitPlanningUserWeekTotalDtoModel } from './unit-planning-user-week-total.dto.model';\nimport { UnitPlanningUserDtoModel } from './unit-planning-user.dto.model';\nimport { UserPlanningResourceSlimDtoModel } from './unit-planning-resource-slim.dto.model';\nimport { UnitPlanningWeekRowSlimDtoModel } from './unit-planning-week-row-slim.dto.model';\nimport { UnitPlanningProjectDtoModel } from './unit-planning-project.dto.model';\nimport { MetadataSlimDtoModel } from './metadata-slim.dto.model';\nimport { SlimCapacityPlanningDtoModel } from './planning-capacity-slim.dto.model';\nimport { UnitPlanningNonHumanResourceDtoModel } from './unit-planning-non-human-resource.dto.model';\n\nexport class UnitPlanningResourceDataDtoModel {\n constructor(\n readonly resource: UserPlanningResourceSlimDtoModel,\n readonly projects: UnitPlanningProjectDtoModel[],\n readonly totals: UnitPlanningUserWeekTotalDtoModel[], // mybe not required\n readonly capacities: SlimCapacityPlanningDtoModel[],\n readonly metadata: MetadataSlimDtoModel,\n readonly nonProductiveCategories: UnitPlanningWeekRowSlimDtoModel[],\n ) {\n this.resource = this.resource.clone();\n\n if (projects) {\n this.projects = this.projects.map((project) => project.clone());\n }\n\n if (totals) {\n this.totals = this.totals.map((total) => total.clone());\n }\n\n if (capacities) {\n this.capacities = this.capacities.map((item) => item.clone());\n }\n }\n\n static fromUnitPlanningNonHumanResourceDtoModel(\n model: UnitPlanningNonHumanResourceDtoModel,\n ): UnitPlanningResourceDataDtoModel {\n const newTotals: UnitPlanningUserWeekTotalDtoModel[] = model.totals\n .map((total) => new UnitPlanningUserWeekTotalDtoModel(\n moment(total.weekStartDate),\n 0,\n 0,\n total.totalPlannedHours,\n total.workingDays,\n ));\n\n return new UnitPlanningResourceDataDtoModel(\n UserPlanningResourceSlimDtoModel.fromNonHumanResourcePlanningSlimDtoModel(model.nonHumanResource),\n model.projects,\n newTotals,\n model.capacities,\n model.metadata,\n [],\n );\n }\n\n static fromUnitPlanningUserDtoModel(\n model: UnitPlanningUserDtoModel,\n ): UnitPlanningResourceDataDtoModel {\n return new UnitPlanningResourceDataDtoModel(\n UserPlanningResourceSlimDtoModel.fromUserPlanningSlimDtoModel(model.user),\n model.projects,\n model.totals,\n model.capacities,\n model.metadata,\n model.nonProductiveCategories,\n );\n }\n\n clone(): UnitPlanningResourceDataDtoModel {\n return new UnitPlanningResourceDataDtoModel(\n this.resource.clone(),\n this.projects?.map((item) => item.clone()) || null,\n this.totals?.map((item) => item.clone()) || null,\n this.capacities?.map((item) => item.clone()) || null,\n this.metadata.clone(),\n this.nonProductiveCategories?.map((item) => item.clone()) || null,\n );\n }\n}\n","import { UnitPlanningResourceDataDtoModel } from './unit-planning-resource-data.dto.model';\nimport { UnitPlanningSlimDtoModel } from './unit-planning-slim.dto.model';\nimport { UnitPlanningUserDtoModel } from './unit-planning-user.dto.model';\nimport { UnitPlanningDto } from '../../interfaces/dtos/unit-planning.dto';\nimport { assertRequiredProperties } from '../../utilities/api.utility';\nimport { UnitPlanningNonHumanResourceDtoModel } from './unit-planning-non-human-resource.dto.model';\nimport { UnitPlanningWeekTotalDtoModel } from './unit-planning-week-total.dto.model';\n\nexport class UnitPlanningDtoModel2 {\n constructor(\n readonly unit: UnitPlanningSlimDtoModel,\n readonly weeksTotal: UnitPlanningWeekTotalDtoModel[] | null,\n readonly totalPlannedHours: number | null,\n readonly resourceDatas: UnitPlanningResourceDataDtoModel[] | null,\n ) {\n if (resourceDatas) {\n this.resourceDatas = [...resourceDatas];\n }\n }\n\n static fromJSON(json: UnitPlanningDto): UnitPlanningDtoModel2 {\n assertRequiredProperties(json, [\n 'unit',\n ]);\n\n const nonHumanResources = (Array.isArray(json.nonHumanResources) ? json.nonHumanResources : [])\n .map(UnitPlanningNonHumanResourceDtoModel.fromJSON);\n\n const humanResource = (Array.isArray(json.users) ? json.users : [])\n .map(UnitPlanningUserDtoModel.fromJSON);\n\n const resourceDataNonHuman = nonHumanResources\n .map(UnitPlanningResourceDataDtoModel.fromUnitPlanningNonHumanResourceDtoModel);\n\n const resourceDataHuman = humanResource\n .map(UnitPlanningResourceDataDtoModel.fromUnitPlanningUserDtoModel);\n\n const combinedResourceData = [\n ...resourceDataNonHuman,\n ...resourceDataHuman,\n ];\n\n return new UnitPlanningDtoModel2(\n UnitPlanningSlimDtoModel.fromJSON(json.unit),\n (Array.isArray(json.weeksTotal) ? json.weeksTotal : [])\n .map(UnitPlanningWeekTotalDtoModel.fromJSON),\n json.totalPlannedHours,\n combinedResourceData,\n );\n }\n\n clone(): UnitPlanningDtoModel2 {\n return new UnitPlanningDtoModel2(\n this.unit.clone(),\n this.weeksTotal?.map((item) => item.clone()) || null,\n this.totalPlannedHours,\n this.resourceDatas?.map((item) => item.clone()) || null,\n );\n }\n}\n","import { UnitPlanningViewResponse } from '../../interfaces/responses/unit-planning-view.response';\nimport { UnitCategoryDtoModel } from '../dtos/unit-category.dto.model';\nimport { UnitPlanningCapacityDtoModel } from '../dtos/unit-planning-capacity.dto.model';\nimport { MetadataSlimDtoModel } from '../dtos/metadata-slim.dto.model';\nimport { Int32IdNameDtoModel } from '../dtos/int32-id-name.dto.model';\nimport { UnitBackgroundColorDtoModel } from '../dtos/unit-background-color.dto.model';\nimport { AvailableProjectDtoModel } from '../dtos/available-project.dto.model';\nimport { UnitPlanningDtoModel2 as UnitPlanningDtoModel } from '../dtos/unit-planning.dto.model2';\n\nexport class UnitPlanningViewResponseModel2 {\n constructor(\n readonly capacities: UnitPlanningCapacityDtoModel[],\n readonly units: UnitPlanningDtoModel[],\n readonly nonProductiveCategories: UnitCategoryDtoModel[],\n readonly availableSkills: Int32IdNameDtoModel[],\n readonly unitBackgroundColors: UnitBackgroundColorDtoModel[],\n readonly availableProjects: AvailableProjectDtoModel[],\n readonly metadata: MetadataSlimDtoModel,\n ) {\n if (capacities) {\n this.capacities = [...capacities];\n }\n\n if (nonProductiveCategories) {\n this.nonProductiveCategories = [...nonProductiveCategories];\n }\n\n if (units) {\n this.units = [...units];\n }\n\n this.availableSkills = availableSkills.map((skill) => skill.clone());\n this.unitBackgroundColors = unitBackgroundColors.map((item) => item.clone());\n this.availableProjects = availableProjects.map((item) => item.clone());\n }\n\n static fromJSON(json: UnitPlanningViewResponse): UnitPlanningViewResponseModel2 {\n return new UnitPlanningViewResponseModel2(\n (Array.isArray(json.capacities)\n ? json.capacities\n .map(UnitPlanningCapacityDtoModel.fromJSON)\n : []\n ),\n (Array.isArray(json.units)\n ? json.units\n .map(UnitPlanningDtoModel.fromJSON)\n : []\n ),\n (Array.isArray(json.nonProductiveCategories)\n ? json.nonProductiveCategories\n .map(UnitCategoryDtoModel.fromJSON)\n : []\n ),\n (Array.isArray(json.availableSkills)\n ? json.availableSkills\n .map(Int32IdNameDtoModel.fromJSON)\n : []\n ),\n (Array.isArray(json.unitBackgroundColors)\n ? json.unitBackgroundColors\n .map(UnitBackgroundColorDtoModel.fromJSON)\n : []\n ),\n (Array.isArray(json.availableProjects)\n ? json.availableProjects\n .map(AvailableProjectDtoModel.fromJSON)\n : []\n ),\n MetadataSlimDtoModel.fromJSON(json.metadata),\n );\n }\n\n clone(): UnitPlanningViewResponseModel2 {\n return new UnitPlanningViewResponseModel2(\n this.capacities?.map((item) => item.clone()) || null,\n this.units?.map((item) => item.clone()) || null,\n this.nonProductiveCategories?.map((item) => item.clone()) || null,\n this.availableSkills?.map((item) => item.clone()),\n this.unitBackgroundColors?.map((item) => item.clone()),\n this.availableProjects?.map((item) => item.clone()),\n this.metadata.clone(),\n );\n }\n}\n","import moment from 'moment';\nimport { MetadataModel } from '../metadata.model';\nimport { UserListDtoMetadata } from '../../interfaces/metadata';\nimport { assertRequiredProperties } from '../../utilities/api.utility';\nimport { UserListViewResponseItem } from '../../interfaces/dtos/user-list-view-response-item.dto';\n\nexport class UserListViewResponseItemModel {\n readonly fullName: string;\n\n constructor(\n readonly userId: string,\n readonly activeDirectoryId: string,\n readonly email: string,\n readonly photoUrl: string | null,\n readonly hitachiId: string | null,\n readonly globalEmployeeId: string | null,\n readonly localEmployeeId: string | null,\n readonly firstName: string | null,\n readonly lastName: string | null,\n readonly abbreviation: string | null,\n readonly payrollCompany: string | null,\n readonly costCenter: string | null,\n readonly countryCode: string | null,\n readonly city: string | null,\n readonly divisionCode: string | null,\n readonly productGroupCode: string | null,\n readonly unitName: string | null,\n readonly unitCoordinatorFullName: string | null,\n readonly unitCoordinatorId: string | null,\n readonly unitCoordinatorPhotoUrl: string | null,\n readonly validFrom: moment.Moment | null,\n readonly validUntil: moment.Moment | null,\n readonly businessUnitCode: string | null,\n readonly hourlyRateCategory: string | null,\n readonly workingHoursPerWeek: number | null,\n readonly roleName: string | null,\n readonly metadata: UserListDtoMetadata,\n ) {\n if (this.firstName && this.lastName) {\n this.fullName = `${this.firstName} ${this.lastName}`.trim();\n } else {\n this.fullName = '';\n }\n\n this.validFrom = (validFrom != null ? validFrom.clone() : validFrom);\n this.validUntil = (validUntil != null ? validUntil.clone() : validUntil);\n }\n\n static fromJSON(json: UserListViewResponseItem): UserListViewResponseItemModel {\n assertRequiredProperties(json, [\n 'userId',\n 'activeDirectoryId',\n 'email',\n ]);\n\n return new UserListViewResponseItemModel(\n json.userId,\n json.activeDirectoryId,\n json.email,\n json.photoUrl,\n json.hitachiId,\n json.globalEmployeeId,\n json.localEmployeeId,\n json.firstName,\n json.lastName,\n json.abbreviation,\n json.payrollCompany,\n json.costCenter,\n json.countryCode,\n json.city,\n json.divisionCode,\n json.productGroupCode,\n json.unitName,\n json.unitCoordinatorFullName,\n json.unitCoordinatorId,\n json.unitCoordinatorPhotoUrl,\n (json.validFrom\n ? moment(json.validFrom)\n : null\n ),\n (json.validUntil\n ? moment(json.validUntil)\n : null\n ),\n json.businessUnitCode,\n json.hourlyRateCategory,\n json.workingHoursPerWeek,\n json.roleName,\n new MetadataModel(json.metadata || {}) as UserListDtoMetadata,\n );\n }\n\n toJSON(): UserListViewResponseItem {\n return {\n userId: this.userId,\n activeDirectoryId: this.activeDirectoryId,\n email: this.email,\n photoUrl: this.photoUrl,\n hitachiId: this.hitachiId,\n globalEmployeeId: this.globalEmployeeId,\n localEmployeeId: this.localEmployeeId,\n firstName: this.firstName,\n lastName: this.lastName,\n fullName: this.fullName,\n abbreviation: this.abbreviation,\n payrollCompany: this.payrollCompany,\n costCenter: this.costCenter,\n countryCode: this.countryCode,\n city: this.city,\n divisionCode: this.divisionCode,\n productGroupCode: this.productGroupCode,\n unitName: this.unitName,\n unitCoordinatorFullName: this.unitCoordinatorFullName,\n unitCoordinatorId: this.unitCoordinatorId,\n unitCoordinatorPhotoUrl: this.unitCoordinatorPhotoUrl,\n validFrom: this.validFrom ? this.validFrom : null,\n validUntil: this.validUntil ? this.validUntil : null,\n businessUnitCode: this.businessUnitCode,\n hourlyRateCategory: this.hourlyRateCategory,\n workingHoursPerWeek: this.workingHoursPerWeek,\n roleName: this.roleName,\n metadata: this.metadata,\n };\n }\n}\n","import { MetadataModel } from '../metadata.model';\nimport { UserListResponseMetadata } from '../../interfaces/metadata';\nimport { assertRequiredProperties } from '../../utilities/api.utility';\nimport { UserListViewResponse } from '../../interfaces/responses/user-list-view.response';\nimport { UserListViewResponseItemModel } from '../dtos/user-list-view-response-item.dto.model';\n\nexport class UserListViewResponseModel {\n constructor(\n readonly items: readonly UserListViewResponseItemModel[],\n readonly metadata: MetadataModel = new MetadataModel(),\n ) {\n this.items = [...items];\n }\n\n static fromJSON(json: UserListViewResponse): UserListViewResponseModel {\n assertRequiredProperties(json, [\n 'items',\n ]);\n\n return new UserListViewResponseModel(\n (Array.isArray(json.items) ? json.items : [])\n .map((item) => UserListViewResponseItemModel.fromJSON(item)),\n new MetadataModel(json.metadata),\n );\n }\n\n toJSON(): UserListViewResponse {\n return {\n items: this.items.map((item) => item.toJSON()),\n metadata: this.metadata.toJSON(),\n };\n }\n}\n","import moment from 'moment';\nimport { WorkPackageStatus } from '../../../models/work-package-status.enum';\nimport { WorkPackageViewListItemResponse } from '../../interfaces/responses/work-package-view-list-item.response';\nimport { assertRequiredProperties } from '../../utilities/api.utility';\n\nexport class WorkPackageViewListItemResponseModel {\n // eslint-disable-next-line max-lines-per-function\n constructor(\n readonly workPackageId: number | null = null,\n readonly projectId: number | null = null,\n readonly displayId: string | null = null,\n readonly projectNumber: string | null = null,\n readonly projectTitle: string | null = null,\n readonly levelTitle: string | null = null,\n readonly sequenceNumber: number | null = null,\n readonly status: WorkPackageStatus = WorkPackageStatus.Draft,\n readonly workPackageTitle: string | null = null,\n readonly scope: string | null = null,\n readonly estimatedStartDate: moment.Moment | null = null,\n readonly estimatedEndDate: moment.Moment | null = null,\n readonly estimatedHours: number = 0,\n readonly confirmedStartDate: moment.Moment | null = null,\n readonly confirmedEndDate: moment.Moment | null = null,\n readonly confirmedHours: number = 0,\n readonly openQuestionsCount: number = 0,\n readonly latestConfirmedEndDate: moment.Moment | null = null,\n readonly latestConfirmedHours: number | null = null, // TODO: latestConfirmedHours = 0 per default?\n readonly latestEstimatedStartDate: moment.Moment | null = null,\n readonly latestEstimatedEndDate: moment.Moment | null = null,\n readonly latestEstimatedHours: number = 0,\n readonly plannedStartDate: moment.Moment | null = null,\n readonly latestPlannedEndDate: moment.Moment | null = null,\n readonly plannedHours: number = 0,\n readonly reportedHours: number = 0,\n readonly supplierUnit: string | null = null,\n readonly supplierUnitCoordinatorFullName: string | null = null,\n readonly submitterUnit: string | null = null,\n readonly submitterUnitCoordinatorFullName: string | null = null,\n readonly submitterHourlyRateCategory: string | null = null,\n readonly supplierHourlyRateCategory: string | null = null,\n readonly isFlagged: boolean = false,\n readonly creatorFullName: string | null = null,\n readonly responsibles: string | null = null,\n readonly coordinator: string | null = null,\n readonly submitterProjectTypeCode: string | null = null,\n readonly supplierProjectTypeCode: string | null = null,\n readonly supplierProjectNumberANDActivityItemCategoryNumber: string | null = null,\n readonly submitterProjectNumberANDActivityItemCategoryNumber: string | null = null,\n readonly pmFullName: string | null = null,\n readonly technicalPMFullName: string | null = null,\n readonly additionalSupplierProjectTypeCodes: string | null = null,\n readonly additionalSupplierProjectNumberANDActivityItemCategoryNumbers: string | null = null,\n readonly additionalSupplierUnitNames: string | null = null,\n readonly additionalSupplierHourlyRateCategory: string | null = null,\n readonly contractName: string | null = null,\n ) {\n this.estimatedStartDate = (estimatedStartDate != null ? estimatedStartDate.clone() : estimatedStartDate);\n this.estimatedEndDate = (estimatedEndDate != null ? estimatedEndDate.clone() : estimatedEndDate);\n this.confirmedStartDate = (confirmedStartDate != null ? confirmedStartDate.clone() : confirmedStartDate);\n this.confirmedEndDate = (confirmedEndDate != null ? confirmedEndDate.clone() : confirmedEndDate);\n this.latestConfirmedEndDate = (latestConfirmedEndDate != null\n ? latestConfirmedEndDate.clone()\n : latestConfirmedEndDate);\n this.latestEstimatedStartDate = (latestEstimatedStartDate != null\n ? latestEstimatedStartDate.clone()\n : latestEstimatedStartDate);\n this.latestEstimatedEndDate = (latestEstimatedEndDate != null\n ? latestEstimatedEndDate.clone()\n : latestEstimatedEndDate);\n this.plannedStartDate = (plannedStartDate != null ? plannedStartDate.clone() : plannedStartDate);\n this.latestPlannedEndDate = (latestPlannedEndDate != null ? latestPlannedEndDate.clone() : latestPlannedEndDate);\n }\n\n // eslint-disable-next-line max-lines-per-function, complexity\n static fromJSON(json: WorkPackageViewListItemResponse): WorkPackageViewListItemResponseModel {\n assertRequiredProperties(json, [\n ]);\n\n return new WorkPackageViewListItemResponseModel(\n json.workPackageId,\n json.projectId,\n json.displayId,\n json.projectNumber,\n json.projectTitle,\n json.levelTitle,\n json.sequenceNumber,\n json.status || WorkPackageStatus.Draft,\n json.workPackageTitle,\n json.scope,\n (json.estimatedStartDate != null\n ? moment(json.estimatedStartDate)\n .parseZone()\n : null\n ),\n (json.estimatedEndDate != null\n ? moment(json.estimatedEndDate)\n .parseZone()\n : null\n ),\n json.estimatedHours || 0,\n (json.confirmedStartDate != null\n ? moment(json.confirmedStartDate)\n .parseZone()\n : null\n ),\n (json.confirmedEndDate != null\n ? moment(json.confirmedEndDate)\n .parseZone()\n : null\n ),\n json.confirmedHours || 0,\n json.openQuestionsCount || 0,\n (json.latestConfirmedEndDate != null\n ? moment(json.latestConfirmedEndDate)\n .parseZone()\n : null\n ),\n json.latestConfirmedHours,\n (json.latestEstimatedStartDate != null\n ? moment(json.latestEstimatedStartDate)\n .parseZone()\n : null\n ),\n (json.latestEstimatedEndDate != null\n ? moment(json.latestEstimatedEndDate)\n .parseZone()\n : null\n ),\n json.latestEstimatedHours || 0,\n (json.plannedStartDate != null\n ? moment(json.plannedStartDate)\n .parseZone()\n : null\n ),\n (json.latestPlannedEndDate != null\n ? moment(json.latestPlannedEndDate)\n .parseZone()\n : null\n ),\n json.plannedHours || 0,\n json.reportedHours || 0,\n json.supplierUnit,\n json.supplierUnitCoordinatorFullName,\n json.submitterUnit,\n json.submitterUnitCoordinatorFullName,\n json.submitterHourlyRateCategory,\n json.supplierHourlyRateCategory,\n json.isFlagged || false,\n json.creatorFullName,\n json.responsibles,\n json.coordinator,\n json.submitterProjectTypeCode,\n json.supplierProjectTypeCode,\n json.supplierProjectNumberANDActivityItemCategoryNumber,\n json.submitterProjectNumberANDActivityItemCategoryNumber,\n json.pmFullName,\n json.technicalPMFullName,\n json.additionalSupplierProjectTypeCodes,\n json.additionalSupplierProjectNumberANDActivityItemCategoryNumbers,\n json.additionalSupplierUnitNames,\n json.additionalSupplierHourlyRateCategory,\n json.contractName\n );\n }\n}\n","import { MetadataModel } from '../metadata.model';\nimport { WithPaginationInfo } from '../../interfaces/metadata';\nimport { WorkPackageViewListResponse } from '../../interfaces/responses/work-package-view-list.response';\nimport { WorkPackageViewListItemResponseModel } from './work-package-view-list-item.response.model';\nimport { assertRequiredProperties } from '../../utilities/api.utility';\n\nexport class WorkPackageViewListResponseModel {\n constructor(\n readonly items: readonly WorkPackageViewListItemResponseModel[],\n readonly metadata: MetadataModel = new MetadataModel(),\n ) {\n this.items = [...items];\n }\n\n // TODO: Remove\n // public toJSON(): WorkPackageViewListResponse {\n // return {\n // items: this.items.map((item) => item.toJSON()),\n // metadata: this.metadata.toJSON(),\n // };\n // }\n\n static fromJSON(json: WorkPackageViewListResponse): WorkPackageViewListResponseModel {\n assertRequiredProperties(json, [\n 'items',\n ]);\n\n return new WorkPackageViewListResponseModel(\n (Array.isArray(json.items)\n ? json.items\n .map((item) => WorkPackageViewListItemResponseModel.fromJSON(item))\n : []\n ),\n new MetadataModel(json.metadata || {}),\n );\n }\n}\n","import moment from 'moment';\nimport { ScopeChangeDto } from '../../interfaces/dtos/scope-change.dto';\nimport { AttachmentSlimDtoModel } from './attachment-slim.dto.model';\nimport { assertRequiredProperties } from '../../utilities/api.utility';\n\nexport class ScopeChangeDtoModel {\n constructor(\n readonly scopeChangeId: number,\n readonly workPackageId: number,\n readonly title: string,\n readonly scope: string,\n readonly createdOn: moment.Moment,\n readonly estimatedNewEndDate: moment.Moment,\n readonly estimatedAdditionalHours: number,\n readonly confirmedNewEndDate: moment.Moment | null,\n readonly confirmedAdditionalHours: number = 0,\n readonly attachments: AttachmentSlimDtoModel[] = [],\n ) {\n this.createdOn = createdOn.clone();\n this.estimatedNewEndDate = estimatedNewEndDate.clone();\n this.confirmedNewEndDate = (confirmedNewEndDate != null ? confirmedNewEndDate.clone() : confirmedNewEndDate);\n this.attachments = [...attachments];\n }\n\n static fromJSON(json: ScopeChangeDto): ScopeChangeDtoModel {\n assertRequiredProperties(json, [\n 'scopeChangeId',\n 'workPackageId',\n 'title',\n 'scope',\n 'createdOn',\n 'estimatedNewEndDate',\n 'estimatedAdditionalHours',\n // 'confirmedNewEndDate',\n // 'confirmedAdditionalHours',\n // 'attachments',\n ]);\n\n return new ScopeChangeDtoModel(\n json.scopeChangeId,\n json.workPackageId,\n json.title,\n json.scope,\n moment(json.createdOn)\n .parseZone(),\n moment(json.estimatedNewEndDate)\n .parseZone(),\n json.estimatedAdditionalHours,\n (json.confirmedNewEndDate\n ? moment(json.confirmedNewEndDate)\n .parseZone()\n : null\n ),\n json.confirmedAdditionalHours || 0,\n (Array.isArray(json.attachments) ? json.attachments : [])\n .map((item) => AttachmentSlimDtoModel.fromJSON(item)),\n );\n }\n\n clone(): ScopeChangeDtoModel {\n return new ScopeChangeDtoModel(\n this.scopeChangeId,\n this.workPackageId,\n this.title,\n this.scope,\n this.createdOn.clone(),\n this.estimatedNewEndDate.clone(),\n this.estimatedAdditionalHours,\n this.confirmedNewEndDate ? this.confirmedNewEndDate.clone() : null,\n this.confirmedAdditionalHours,\n this.attachments.map((item) => item.clone()),\n );\n }\n\n toJSON(): ScopeChangeDto {\n return {\n scopeChangeId: this.scopeChangeId,\n workPackageId: this.workPackageId,\n title: this.title,\n scope: this.scope,\n createdOn: this.createdOn.toJSON(),\n estimatedNewEndDate: this.estimatedNewEndDate.toJSON(),\n estimatedAdditionalHours: this.estimatedAdditionalHours,\n confirmedNewEndDate: this.confirmedNewEndDate ? this.confirmedNewEndDate.toJSON() : null,\n confirmedAdditionalHours: this.confirmedAdditionalHours,\n attachments: this.attachments.map((item) => item.toJSON()),\n };\n }\n}\n","import moment from 'moment';\nimport { ResponsibleUserWorkPackageViewDto } from '../../interfaces/dtos/responsible-user-work-package-view.dto';\nimport { UserSlimDtoModel } from './user-slim.dto.model';\nimport { MetadataModel } from '../metadata.model';\nimport { Metadata } from '../../interfaces/metadata';\nimport { assertRequiredProperties } from '../../utilities/api.utility';\nimport { PlanningEntryDtoModel } from './planning-entry.dto.model';\n\nexport class ResponsibleUserWorkPackageViewDtoModel extends UserSlimDtoModel {\n /**\n * A sum of all reported hours\n */\n readonly reportedTotalHours: number;\n\n constructor(\n userId: string,\n fullName: string,\n email: string,\n photoUrl: string | null,\n validFrom: moment.Moment | null,\n validUntil: moment.Moment | null,\n readonly reportedHours: number,\n readonly reportedWorkHours: number,\n readonly reportedReworkHours: number,\n readonly reportedQaHours: number,\n readonly plannedHours: number,\n readonly plannedHoursNotIncludedInTotal: number,\n readonly totalPlannedHours: number,\n readonly planningEntries: readonly PlanningEntryDtoModel[],\n readonly isCoordinator: boolean,\n readonly wasUserPlannedInNewVersion: boolean,\n readonly metadata: MetadataModel,\n ) {\n super(\n userId,\n fullName,\n email,\n photoUrl,\n undefined, // TODO: check if this is correct\n validFrom,\n validUntil,\n );\n\n this.planningEntries = [...planningEntries];\n this.reportedTotalHours = this.reportedWorkHours + this.reportedReworkHours + this.reportedQaHours;\n }\n\n static fromJSON(json: ResponsibleUserWorkPackageViewDto): ResponsibleUserWorkPackageViewDtoModel {\n assertRequiredProperties(json, [\n 'userId',\n 'fullName',\n 'email',\n 'isCoordinator',\n ]);\n\n return new ResponsibleUserWorkPackageViewDtoModel(\n json.userId,\n json.fullName,\n json.email,\n json.photoUrl,\n (json.validFrom\n ? moment(json.validFrom)\n .parseZone()\n : null\n ),\n (json.validUntil\n ? moment(json.validUntil)\n .parseZone()\n : null\n ),\n json.reportedHours,\n json.reportedWorkHours,\n json.reportedReworkHours,\n json.reportedQaHours,\n json.plannedHours,\n json.plannedHoursNotIncludedInTotal,\n json.totalPlannedHours,\n (Array.isArray(json.planningEntries)\n ? json.planningEntries\n .map((item) => PlanningEntryDtoModel.fromJSON(item))\n : []\n ),\n json.isCoordinator,\n json.wasUserPlannedInNewVersion,\n new MetadataModel(json.metadata),\n );\n }\n\n toJSON(): ResponsibleUserWorkPackageViewDto {\n return Object.assign(super.toJSON(), {\n reportedHours: this.reportedHours,\n reportedWorkHours: this.reportedWorkHours,\n reportedReworkHours: this.reportedReworkHours,\n reportedQaHours: this.reportedQaHours,\n plannedHours: this.plannedHours,\n plannedHoursNotIncludedInTotal: this.plannedHoursNotIncludedInTotal,\n totalPlannedHours: this.totalPlannedHours,\n planningEntries: this.planningEntries.map((item) => item.toJSON()),\n isCoordinator: this.isCoordinator,\n wasUserPlannedInNewVersion: this.wasUserPlannedInNewVersion,\n metadata: this.metadata.toJSON(),\n });\n }\n}\n","import moment from 'moment';\nimport { SuspensionDto } from '../../interfaces/dtos/suspension.dto';\nimport { assertRequiredProperties } from '../../utilities/api.utility';\n\nexport class SuspensionDtoModel {\n constructor(\n readonly suspensionId: number,\n readonly workPackageId: number,\n readonly estimatedNewEndDate: moment.Moment,\n readonly confirmedNewEndDate: moment.Moment | null,\n readonly createdOn: moment.Moment,\n ) {\n this.estimatedNewEndDate = estimatedNewEndDate.clone();\n this.confirmedNewEndDate = (confirmedNewEndDate != null ? confirmedNewEndDate.clone() : confirmedNewEndDate);\n this.createdOn = createdOn.clone();\n }\n\n static fromJSON(json: SuspensionDto): SuspensionDtoModel {\n assertRequiredProperties(json, [\n 'suspensionId',\n 'workPackageId',\n 'estimatedNewEndDate',\n // 'confirmedNewEndDate',\n 'createdOn',\n ]);\n\n return new SuspensionDtoModel(\n json.suspensionId,\n json.workPackageId,\n moment(json.estimatedNewEndDate)\n .parseZone(),\n (json.confirmedNewEndDate\n ? moment(json.confirmedNewEndDate)\n .parseZone()\n : null),\n moment(json.createdOn)\n .parseZone(),\n );\n }\n\n toJSON(): SuspensionDto {\n return {\n suspensionId: this.suspensionId,\n workPackageId: this.workPackageId,\n estimatedNewEndDate: this.estimatedNewEndDate.toJSON(),\n confirmedNewEndDate: this.confirmedNewEndDate ? this.confirmedNewEndDate.toJSON() : null,\n createdOn: this.createdOn.toJSON(),\n };\n }\n}\n","import { KpiDto } from '../../interfaces/dtos/kpi.dto';\nimport { RatingDtoModel } from './rating.dto.model';\nimport { assertRequiredProperties } from '../../utilities/api.utility';\n\nexport class KpiDtoModel {\n constructor(\n readonly firstPassedYield: number,\n readonly costOfPoorQuality: number,\n readonly submitterOrSupplierEfficiency: number,\n readonly supplierEfficiency: number,\n readonly onTimeDelivery: number,\n readonly rating: RatingDtoModel,\n ) {\n }\n\n static fromJSON(json: KpiDto): KpiDtoModel {\n assertRequiredProperties(json, [\n 'firstPassedYield',\n 'costOfPoorQuality',\n 'submitterOrSupplierEfficiency',\n 'supplierEfficiency',\n 'onTimeDelivery',\n 'rating',\n ]);\n\n return new KpiDtoModel(\n json.firstPassedYield,\n json.costOfPoorQuality,\n json.submitterOrSupplierEfficiency,\n json.supplierEfficiency,\n json.onTimeDelivery,\n RatingDtoModel.fromJSON(json.rating),\n );\n }\n\n toJSON(): KpiDto {\n return {\n firstPassedYield: this.firstPassedYield,\n costOfPoorQuality: this.costOfPoorQuality,\n submitterOrSupplierEfficiency: this.submitterOrSupplierEfficiency,\n supplierEfficiency: this.supplierEfficiency,\n onTimeDelivery: this.onTimeDelivery,\n rating: this.rating,\n };\n }\n}\n","import moment from 'moment';\nimport { WorkPackageReworkDto } from '../../interfaces/dtos/work-package-rework.dto';\nimport { AttachmentSlimDtoModel } from './attachment-slim.dto.model';\nimport { ApiModelNew } from '../types';\nimport { assertRequiredProperties } from '../../utilities/api.utility';\n\nexport class WorkPackageReworkDtoModel implements ApiModelNew {\n constructor(\n readonly reworkId: number,\n readonly workPackageId: number,\n readonly createdOn: moment.Moment,\n readonly description: string = '',\n readonly defects: readonly string[] = [],\n readonly attachments: readonly AttachmentSlimDtoModel[] = [],\n ) {\n this.createdOn = createdOn.clone();\n this.defects = [...defects];\n this.attachments = [...attachments];\n }\n\n static fromJSON(json: WorkPackageReworkDto): WorkPackageReworkDtoModel {\n assertRequiredProperties(json, [\n 'reworkId',\n 'workPackageId',\n 'createdOn',\n ]);\n\n return new WorkPackageReworkDtoModel(\n json.reworkId,\n json.workPackageId,\n moment(json.createdOn)\n .parseZone(),\n json.description,\n [...json.defects],\n (Array.isArray(json.attachments) ? json.attachments : [])\n .map((item) => AttachmentSlimDtoModel.fromJSON(item)),\n );\n }\n\n // eslint-disable-next-line complexity\n clone(overrides?: Partial): WorkPackageReworkDtoModel {\n return new WorkPackageReworkDtoModel(\n (overrides && overrides.reworkId != null\n ? overrides.reworkId\n : this.reworkId\n ),\n (overrides && overrides.workPackageId != null\n ? overrides.workPackageId\n : this.workPackageId\n ),\n (overrides && overrides.createdOn != null\n ? overrides.createdOn\n : this.createdOn\n ),\n (overrides && overrides.description != null\n ? overrides.description\n : this.description\n ),\n (overrides && overrides.defects != null\n ? overrides.defects\n : [...this.defects]\n ),\n (overrides && overrides.attachments != null\n ? overrides.attachments\n : this.attachments.map((item) => item.clone())\n ),\n );\n }\n\n toJSON(): WorkPackageReworkDto {\n return {\n reworkId: this.reworkId,\n workPackageId: this.workPackageId,\n description: this.description,\n defects: [...this.defects],\n createdOn: this.createdOn.toJSON(),\n attachments: this.attachments.map((item) => item.toJSON()),\n };\n }\n}\n","import moment from 'moment';\nimport { WorkPackageViewResponse } from '../../interfaces/responses/work-package-view.response';\nimport { UnitSlimDtoModel } from '../dtos/unit-slim.dto.model';\nimport { UserSlimDtoModel } from '../dtos/user-slim.dto.model';\nimport { MetadataModel } from '../metadata.model';\nimport { WorkPackageStatus } from '../../../models/work-package-status.enum';\nimport { ScopeChangeDtoModel } from '../dtos/scope-change.dto.model';\nimport { AttachmentSlimDtoModel } from '../dtos/attachment-slim.dto.model';\nimport { WorkPackageViewResponseMetadata } from '../../interfaces/metadata';\nimport { ResponsibleUserWorkPackageViewDtoModel } from '../dtos/responsible-user-work-package-view-dto.model';\nimport { SuspensionDtoModel } from '../dtos/suspension.dto.model';\nimport { DocumentType } from '../../../models/document-type.enum';\nimport { FeedbackDtoModel } from '../dtos/feedback.dto.model';\nimport { KpiDtoModel } from '../dtos/kpi.dto.model';\nimport { WorkPackageConclusion } from '../../../models/work-package-conclusion.enum';\nimport { WorkPackageReworkDtoModel } from '../dtos/work-package-rework.dto.model';\nimport { WorkPackageLogicHelper } from '../../../helpers/work-package-logic-helper';\nimport { assertRequiredProperties } from '../../utilities/api.utility';\nimport { LevelSlimDtoModel } from '../dtos/level-slim.dto.model';\nimport { ResponsibleResourceDtoModel } from '../dtos/responsible-resource-dto.model';\nimport { ProjectSlimResponseModel } from './project-slim.response.model';\nimport { ContractHourlyRateCategoryPairDtoModel } from '../dtos/contract-hourly-rate-category-pair.dto.model';\n\n// TODO: I am not a fan of all those accessors since they force angular to check more\nexport class WorkPackageViewResponseModel {\n // eslint-disable-next-line max-lines-per-function\n constructor(\n readonly additionalSuppplierHourlyRateCategories: ContractHourlyRateCategoryPairDtoModel[] = [],\n readonly workPackageId: number,\n readonly sequenceNumber: number,\n readonly projectId: number,\n readonly project: ProjectSlimResponseModel,\n readonly level: LevelSlimDtoModel | null,\n readonly title: string,\n readonly estimatedStartDate: moment.Moment,\n readonly estimatedEndDate: moment.Moment,\n readonly estimatedHours: number = 0,\n readonly latestEstimatedStartDate: moment.Moment,\n readonly latestEstimatedEndDate: moment.Moment,\n readonly latestEstimatedHours: number = 0,\n readonly confirmedStartDate: moment.Moment | undefined,\n readonly confirmedEndDate: moment.Moment | null = null,\n // TODO: `confirmedHours` is nullable in the API but we use '0' as default in the FE\n readonly confirmedHours: number = 0,\n readonly latestConfirmedEndDate: moment.Moment | null = null,\n // TODO: `latestConfirmedHours` is nullable in the API but we use '0' as default in the FE\n readonly latestConfirmedHours: number = 0,\n readonly plannedStartDate: moment.Moment | null = null,\n readonly latestPlannedEndDate: moment.Moment | null = null,\n readonly plannedEndDate: moment.Moment | null = null,\n // TODO: `plannedHours` is nullable in the API but we use '0' as default in the FE\n readonly plannedHours: number = 0,\n readonly costToComplete: number = 0,\n readonly responsibleUsers: readonly ResponsibleUserWorkPackageViewDtoModel[] = [],\n readonly plannedNonHumanResources: readonly ResponsibleResourceDtoModel[] = [],\n readonly createdBy: UserSlimDtoModel | null = null,\n readonly submitterUnit: UnitSlimDtoModel | null = null,\n readonly submitterUnitCoordinator: UserSlimDtoModel | null = null,\n readonly submitterUnitDeputyUnitCoordinators: readonly UserSlimDtoModel[] = [],\n readonly contractSubmitterUnit: UnitSlimDtoModel | null = null,\n readonly supplierUnit: UnitSlimDtoModel | null = null,\n readonly contractSupplierUnit: UnitSlimDtoModel | null = null,\n readonly contractId: number | null = null,\n readonly supplierUnitCoordinator: UserSlimDtoModel | null = null,\n readonly supplierUnitDeputyUnitCoordinators: readonly UserSlimDtoModel[] = [],\n readonly submitterProjectTypeCode: string | null = null,\n readonly submitterProjectNumber: string | null = null,\n readonly submitterHourlyRateCategories: string[] | null = null,\n readonly submitterActivityItemCategoryNumber: string | null = null,\n readonly supplierProjectTypeCode: string | null = null,\n readonly supplierProjectNumber: string | null = null,\n readonly supplierHourlyRateCategories: string[] | null = null,\n readonly supplierActivityItemCategoryNumber: string | null = null,\n readonly scope: string | null = null,\n readonly status: WorkPackageStatus = WorkPackageStatus.Draft,\n readonly timezone: string,\n readonly timezoneOffset: number,\n readonly conclusion: WorkPackageConclusion | null = null,\n readonly openQuestionsCount: number = 0,\n readonly hasEverBeenInForecastedStatus: boolean = false,\n readonly hasEverBeenInIssuedStatus: boolean = false,\n readonly isSelfAssigned: boolean = false,\n readonly kpis: KpiDtoModel | null,\n readonly submitterFeedbacks: readonly FeedbackDtoModel[] = [],\n readonly supplierFeedbacks: readonly FeedbackDtoModel[] = [],\n readonly attachments: readonly AttachmentSlimDtoModel[] = [],\n readonly scopeChanges: readonly ScopeChangeDtoModel[] = [],\n readonly reworks: readonly WorkPackageReworkDtoModel[] = [],\n readonly suspensions: readonly SuspensionDtoModel[] = [],\n readonly hourlyRateCategories: ContractHourlyRateCategoryPairDtoModel[] = [],\n readonly metadata: MetadataModel = new MetadataModel(),\n // TODO: `plannedHoursNotIncludedInTotal` is nullable in the API but we use '0' as default in the FE\n readonly plannedHoursNotIncludedInTotal: number = 0,\n ) {\n this.estimatedStartDate = (\n estimatedStartDate != null\n ? estimatedStartDate.clone()\n : estimatedStartDate\n );\n this.estimatedEndDate = (\n estimatedEndDate != null\n ? estimatedEndDate.clone()\n : estimatedEndDate\n );\n this.latestEstimatedStartDate = (\n latestEstimatedStartDate != null\n ? latestEstimatedStartDate.clone()\n : latestEstimatedStartDate\n );\n this.latestEstimatedEndDate = (\n latestEstimatedEndDate != null\n ? latestEstimatedEndDate.clone()\n : latestEstimatedEndDate\n );\n this.confirmedStartDate = (\n confirmedStartDate != null\n ? confirmedStartDate.clone()\n : confirmedStartDate\n );\n this.confirmedEndDate = (\n confirmedEndDate != null\n ? confirmedEndDate.clone()\n : confirmedEndDate\n );\n this.latestConfirmedEndDate = (\n latestConfirmedEndDate != null\n ? latestConfirmedEndDate.clone()\n : latestConfirmedEndDate\n );\n this.plannedStartDate = (\n plannedStartDate != null\n ? plannedStartDate.clone()\n : plannedStartDate\n );\n this.latestPlannedEndDate = (\n latestPlannedEndDate != null\n ? latestPlannedEndDate.clone()\n : latestPlannedEndDate\n );\n this.plannedEndDate = (\n plannedEndDate != null\n ? plannedEndDate.clone()\n : plannedEndDate\n );\n\n this.responsibleUsers = [...responsibleUsers];\n this.plannedNonHumanResources = [...plannedNonHumanResources];\n this.submitterUnitDeputyUnitCoordinators = [...submitterUnitDeputyUnitCoordinators];\n this.supplierUnitDeputyUnitCoordinators = [...supplierUnitDeputyUnitCoordinators];\n this.submitterFeedbacks = [...submitterFeedbacks];\n this.supplierFeedbacks = [...supplierFeedbacks];\n this.attachments = [...attachments];\n\n this.scopeChanges = [...scopeChanges]\n // The ScopeChanges should already be sorted in descending order - just making sure that they really are.\n .sort((a, b) => b.createdOn.diff(a.createdOn));\n\n this.reworks = [...reworks]\n // The Rework entries should already be sorted in descending order - just making sure that they really are.\n .sort((a, b) => b.createdOn.diff(a.createdOn));\n\n this.suspensions = [...suspensions]\n // The Suspension should already be sorted in descending order - just making sure that they really are.\n .sort((a, b) => b.createdOn.diff(a.createdOn));\n }\n\n // eslint-disable-next-line max-lines-per-function, complexity\n static fromJSON(json: WorkPackageViewResponse): WorkPackageViewResponseModel {\n assertRequiredProperties(json, [\n 'workPackageId',\n 'sequenceNumber',\n 'projectId',\n // 'level',\n 'title',\n 'estimatedStartDate',\n 'estimatedEndDate',\n 'estimatedHours',\n 'latestEstimatedStartDate',\n 'latestEstimatedEndDate',\n 'latestEstimatedHours',\n\n 'costToComplete',\n 'status',\n 'timezone',\n 'timezoneOffset',\n 'hourlyRateCategories',\n // 'kpis',\n ]);\n\n return new WorkPackageViewResponseModel(\n (Array.isArray(json.additionalSuppplierHourlyRateCategories) ? json.additionalSuppplierHourlyRateCategories : [])\n .map((item) => ContractHourlyRateCategoryPairDtoModel.fromJSON(item)),\n json.workPackageId,\n json.sequenceNumber,\n json.projectId,\n ProjectSlimResponseModel.fromJSON(json.project),\n (json.level != null\n ? LevelSlimDtoModel.fromJSON(json.level)\n : null\n ),\n json.title,\n moment(json.estimatedStartDate)\n .parseZone(),\n moment(json.estimatedEndDate)\n .parseZone(),\n json.estimatedHours,\n moment(json.latestEstimatedStartDate)\n .parseZone(),\n moment(json.latestEstimatedEndDate)\n .parseZone(),\n json.latestEstimatedHours,\n (json.confirmedStartDate != null\n ? moment(json.confirmedStartDate)\n .parseZone()\n : undefined\n ),\n (json.confirmedEndDate != null\n ? moment(json.confirmedEndDate)\n .parseZone()\n : null\n ),\n json.confirmedHours || 0,\n (json.latestConfirmedEndDate != null\n ? moment(json.latestConfirmedEndDate)\n .parseZone()\n : null\n ),\n json.latestConfirmedHours || 0,\n (json.plannedStartDate != null\n ? moment(json.plannedStartDate)\n .parseZone()\n : null\n ),\n (json.latestPlannedEndDate != null\n ? moment(json.latestPlannedEndDate)\n .parseZone()\n : null\n ),\n (json.plannedEndDate != null\n ? moment(json.plannedEndDate)\n .parseZone()\n : null\n ),\n json.plannedHours || 0,\n json.costToComplete,\n (Array.isArray(json.responsibleUsers) ? json.responsibleUsers : [])\n .map((item) => ResponsibleUserWorkPackageViewDtoModel.fromJSON(item)),\n (Array.isArray(json.plannedNonHumanResources) ? json.plannedNonHumanResources : [])\n .map((item) => ResponsibleResourceDtoModel.fromJSON(item)),\n (json.createdBy != null\n ? UserSlimDtoModel.fromJSON(json.createdBy)\n : null\n ),\n (json.submitterUnit != null\n ? UnitSlimDtoModel.fromJSON(json.submitterUnit)\n : null\n ),\n (json.submitterUnitCoordinator != null\n ? UserSlimDtoModel.fromJSON(json.submitterUnitCoordinator)\n : null\n ),\n (Array.isArray(json.submitterUnitDeputyUnitCoordinators) ? json.submitterUnitDeputyUnitCoordinators : [])\n .map((item) => UserSlimDtoModel.fromJSON(item)),\n (json.contractSubmitterUnit != null\n ? UnitSlimDtoModel.fromJSON(json.contractSubmitterUnit)\n : null\n ),\n (json.supplierUnit != null\n ? UnitSlimDtoModel.fromJSON(json.supplierUnit)\n : null\n ),\n (json.contractSupplierUnit != null\n ? UnitSlimDtoModel.fromJSON(json.contractSupplierUnit)\n : null\n ),\n json.contractId,\n (json.supplierUnitCoordinator != null\n ? UserSlimDtoModel.fromJSON(json.supplierUnitCoordinator)\n : null\n ),\n (Array.isArray(json.supplierUnitDeputyUnitCoordinators) ? json.supplierUnitDeputyUnitCoordinators : [])\n .map((item) => UserSlimDtoModel.fromJSON(item)),\n json.submitterProjectTypeCode,\n json.submitterProjectNumber,\n // json.submitterHourlyRateCategory,\n (Array.isArray(json.submitterHourlyRateCategories) ? json.submitterHourlyRateCategories : []),\n json.submitterActivityItemCategoryNumber,\n json.supplierProjectTypeCode,\n json.supplierProjectNumber,\n // json.supplierHourlyRateCategories,\n (Array.isArray(json.supplierHourlyRateCategories) ? json.supplierHourlyRateCategories : []),\n json.supplierActivityItemCategoryNumber,\n json.scope,\n json.status,\n json.timezone,\n json.timezoneOffset,\n json.conclusion,\n json.openQuestionsCount,\n json.hasEverBeenInForecastedStatus,\n json.hasEverBeenInIssuedStatus,\n json.isSelfAssigned,\n (json.kpis != null\n ? KpiDtoModel.fromJSON(json.kpis)\n : null\n ),\n (Array.isArray(json.submitterFeedbacks) ? json.submitterFeedbacks : [])\n .map((item) => FeedbackDtoModel.fromJSON(item)),\n (Array.isArray(json.supplierFeedbacks) ? json.supplierFeedbacks : [])\n .map((item) => FeedbackDtoModel.fromJSON(item)),\n (Array.isArray(json.attachments) ? json.attachments : [])\n .map((item) => AttachmentSlimDtoModel.fromJSON(item)),\n (Array.isArray(json.scopeChanges) ? json.scopeChanges : [])\n .map((item) => ScopeChangeDtoModel.fromJSON(item)),\n (Array.isArray(json.reworks) ? json.reworks : [])\n .map((item) => WorkPackageReworkDtoModel.fromJSON(item)),\n (Array.isArray(json.suspensions) ? json.suspensions : [])\n .map((item) => SuspensionDtoModel.fromJSON(item)),\n (Array.isArray(json.hourlyRateCategories) ? json.hourlyRateCategories : [])\n .map((item) => ContractHourlyRateCategoryPairDtoModel.fromJSON(item)),\n new MetadataModel(json.metadata || {}),\n json.plannedHoursNotIncludedInTotal || 0,\n );\n }\n\n static getLevelPath(levelId?: number, structure: readonly LevelSlimDtoModel[] = []): LevelSlimDtoModel[] {\n if (!levelId || structure.length === 0) {\n return [];\n }\n\n const structureLen = structure.length;\n let levelPath: LevelSlimDtoModel[] = [];\n let i = 0;\n\n // Look for work package in level and receive the path\n while (levelPath.length === 0 && i < structureLen) {\n levelPath = structure[i].getLevelPath(levelId);\n i += 1;\n }\n\n return levelPath;\n }\n\n /**\n * Gets the attachment that were uploaded when the work package was created/edited.\n */\n getOriginalAttachments(includeOutdatedAttachments: boolean): AttachmentSlimDtoModel[] {\n return this.attachments.filter((attachment) => attachment.documentType === DocumentType.WorkPackage\n && (\n includeOutdatedAttachments || attachment.outdatedOn == null\n ));\n }\n\n /**\n * Gets the attachment that were uploaded in scope changes.\n */\n getScopeChangeAttachments(includeOutdatedAttachments: boolean): AttachmentSlimDtoModel[] {\n const attachments: AttachmentSlimDtoModel[] = [];\n\n this.scopeChanges.forEach((scope) => {\n const relevantAttachments = scope.attachments\n .filter((attachment) => attachment.documentType === DocumentType.ScopeChange\n && (\n includeOutdatedAttachments || attachment.outdatedOn == null\n ));\n\n attachments.push(...relevantAttachments);\n });\n\n return attachments;\n }\n\n /**\n * Checks if work package is allowed to be edited.\n */\n canEdit(): boolean {\n return this.metadata.fields && this.metadata.fields.canEdit;\n }\n\n /**\n * Checks if a Creator is allowed to be edited.\n */\n canUpdateCreator(): boolean {\n return this.metadata.fields && this.metadata.fields.canUpdateCreator;\n }\n\n /**\n * Submitter Unit coordinator (and deputies), they can edit the WP at any state (from DRAFT to READY FOR APPROVAL) to:\n * - change the WP creator to another person\n * - upload new documents to the Scope\n */\n canEditThroughLifeCycle(): boolean {\n return this.metadata.fields && this.metadata.fields.canEditThroughLifeCycle;\n }\n\n /**\n * Checks if work package is allowed to be duplicated.\n */\n canDuplicate(): boolean {\n return this.metadata.fields && this.metadata.fields.canDuplicate;\n }\n\n canMoveWorkPackage(): boolean {\n return this.metadata.fields && this.metadata.fields.canMoveWorkPackage;\n }\n\n canDelete(): boolean {\n return this.metadata.fields && this.metadata.fields.canDelete;\n }\n\n canAddAdditionalSupplier(): boolean {\n return this.metadata.fields?.canAddAdditionalSupplier;\n }\n\n isDeleteEnabled(): boolean {\n return this.metadata.fields && this.metadata.fields.isDeleteEnabled;\n }\n\n canSendToDraft(): boolean {\n return this.metadata.fields && this.metadata.fields.canSendToDraft;\n }\n\n canSelfAssign(): boolean {\n return this.metadata.fields && this.metadata.fields.canSelfAssign;\n }\n\n canSendToForecasted(): boolean {\n return this.metadata.fields && this.metadata.fields.canSendToForecasted;\n }\n\n canSendToIssued(): boolean {\n return this.metadata.fields && this.metadata.fields.canSendToIssued;\n }\n\n canSendToQualityAssurance(): boolean {\n return this.metadata.fields && this.metadata.fields.canSendToQualityAssurance;\n }\n\n canShowSendToConfirmed(): boolean {\n return this.metadata.fields && this.metadata.fields.showSendToConfirmed;\n }\n\n canSendToConfirmed(): boolean {\n return this.metadata.fields && this.metadata.fields.canSendToConfirmed;\n }\n\n canSendToReadyToResumeWork(): boolean {\n return this.metadata.fields && this.metadata.fields.canSendToReadyToResumeWork;\n }\n\n canResumeWork(): boolean {\n return this.metadata.fields && this.metadata.fields.canResumeWork;\n }\n\n canSendToInProgress(): boolean {\n return this.metadata.fields && this.metadata.fields.canSendToInProgress;\n }\n\n canSendToReadyForApproval(): boolean {\n return this.metadata.fields && this.metadata.fields.canSendToReadyForApproval;\n }\n\n canApproveScopeChange(): boolean {\n return this.metadata.fields && this.metadata.fields.canApproveScopeChange;\n }\n\n canDeclineScopeChange(): boolean {\n return this.metadata.fields && this.metadata.fields.canDeclineScopeChange;\n }\n\n canSendToOnHold(): boolean {\n return this.metadata.fields && this.metadata.fields.canSendToOnHold;\n }\n\n canSendToClose(): boolean {\n return this.metadata.fields && this.metadata.fields.canSendToClose;\n }\n\n canSendToScopeChange(): boolean {\n return this.metadata.fields && this.metadata.fields.canSendToScopeChange;\n }\n\n canEditScopeChange(): boolean {\n return this.metadata.fields && this.metadata.fields.canEditScopeChange;\n }\n\n canCancelScopeChange(): boolean {\n return this.metadata.fields && this.metadata.fields.canCancelScopeChange;\n }\n\n canSendToReadyForScopeChangeApproval(): boolean {\n return this.metadata.fields && this.metadata.fields.canSendToReadyForScopeChangeApproval;\n }\n\n canEditSubmitterSettings(): boolean {\n return this.metadata.fields && this.metadata.fields.canEditSubmitterSettings;\n }\n\n canEditSupplierSettings(): boolean {\n return this.metadata.fields && this.metadata.fields.canEditSupplierSettings;\n }\n\n canEditResourcePlanning(): boolean {\n return this.metadata.fields && this.metadata.fields.canEditResourcePlanning;\n }\n\n canUploadOutputDocuments(): boolean {\n return this.metadata.fields && this.metadata.fields.canUploadOutputDocuments;\n }\n\n canReadSummaryTab(): boolean {\n return this.metadata.fields && this.metadata.fields.canReadSummaryTab;\n }\n\n canReadAndEditPlanningTab(): boolean {\n return this.metadata.fields && this.metadata.fields.canReadAndEditPlanningTab;\n }\n\n // can read and not write (does not check rights)\n isReadOnlyMode(): boolean {\n return !this.canReadAndEditPlanningTab() && this.canReadPlanningTab();\n }\n\n canReadPlanningTab(): boolean {\n return this.metadata.fields && this.metadata.fields.canReadPlanningTab;\n }\n\n canReadDocumentsTab(): boolean {\n return this.metadata.fields && this.metadata.fields.canReadDocumentsTab;\n }\n\n canReadActivityTab(): boolean {\n return this.metadata.fields && this.metadata.fields.canReadActivityTab;\n }\n\n canOutdateDocuments(): boolean {\n // return this.metadata.fields && this.metadata.fields.canEditResourcePlanning;\n return true;\n }\n\n canCreateFeedback(): boolean {\n return this.metadata.fields && this.metadata.fields.canCreateFeedback;\n }\n\n canCreateSupplierFeedback(): boolean {\n return this.metadata.fields && this.metadata.fields.canCreateSupplierFeedback;\n }\n\n shouldOpenCloseDialog(): boolean {\n return this.metadata.fields?.shouldOpenCloseDialog;\n }\n\n /**\n * Whether the user can view the questions tab.\n */\n canReadQuestionsTab(): boolean {\n return this.metadata.fields && this.metadata.fields.canReadQuestionsTab;\n }\n\n canCreateQuestion(): boolean {\n return this.metadata.fields && this.metadata.fields.canCreateQuestion;\n }\n\n canReadPlanningInSidebar(): boolean {\n return this.metadata.fields && this.metadata.fields.canReadPlanningInSidebar;\n }\n\n canReadFeedbackInSidebar(): boolean {\n return this.metadata.fields && this.metadata.fields.canReadFeedbackInSidebar;\n }\n\n canReadKpisInSidebar(): boolean {\n return this.metadata.fields && this.metadata.fields.canReadKpisInSidebar;\n }\n\n hasReachedForecasted(including: boolean = true): boolean {\n return including ? this.status >= WorkPackageStatus.Forecasted : this.status > WorkPackageStatus.Forecasted;\n }\n\n hasReachedIsIssued(): boolean {\n return this.status >= WorkPackageStatus.Issued;\n }\n\n hasReachedConfirmed(): boolean {\n return this.status >= WorkPackageStatus.Confirmed;\n }\n\n hasReachedInProgress(): boolean {\n return this.status >= WorkPackageStatus.InProgress;\n }\n\n hasReachedReadyForApproval(): boolean {\n return this.status >= WorkPackageStatus.ReadyForApproval;\n }\n\n isInReadyForScopeChangeApproval(): boolean {\n return this.status === WorkPackageStatus.ReadyForScopeChangeApproval;\n }\n\n isInQualityAssurance(): boolean {\n return this.status === WorkPackageStatus.InQualityAssurance;\n }\n\n isInForecasted(): boolean {\n return this.status === WorkPackageStatus.Forecasted;\n }\n\n isInIssued(): boolean {\n return this.status === WorkPackageStatus.Issued;\n }\n\n isInDraft(): boolean {\n return this.status === WorkPackageStatus.Draft;\n }\n\n isInConfirmed(): boolean {\n return this.status === WorkPackageStatus.Confirmed;\n }\n\n isInProgress(): boolean {\n return this.status === WorkPackageStatus.InProgress;\n }\n\n isInReadyToResumeWork(): boolean {\n return this.status === WorkPackageStatus.ReadyToResumeWork;\n }\n\n isInOnHold(): boolean {\n return this.status === WorkPackageStatus.OnHold;\n }\n\n isInClosed(): boolean {\n return this.status === WorkPackageStatus.Closed;\n }\n\n isAllowedScopeChangeInReadyForApproval(): boolean {\n return this.metadata.fields && this.metadata.fields.allowedScopeChangeInReadyForApproval;\n }\n\n /**\n * Looks recursively if the work package exists in the project. If the work package was found,\n * the path of levels is returned as an array: [l1, l2, l3, ...]\n *\n * @param levelId\n */\n getLevelPath(levelId: number): LevelSlimDtoModel[] {\n return WorkPackageViewResponseModel.getLevelPath(levelId, this.project.structure);\n }\n\n /**\n * True if one of the states are\n */\n isInScopeChangeStates(): boolean {\n return this.status === WorkPackageStatus.ScopeChange\n || this.status === WorkPackageStatus.ReadyForScopeChangeApproval;\n }\n\n /**\n * A schedule is before confirmed, if it is in one of\n * the following states:\n * Draft, Forecasted, Issued\n */\n isBeforeConfirmed(): boolean {\n const states = [\n WorkPackageStatus.Draft,\n WorkPackageStatus.Forecasted,\n WorkPackageStatus.Issued,\n ];\n\n return states.indexOf(this.status) > -1;\n }\n\n /**\n * A schedule is newly proposed if it is in one of\n * the following states:\n * ReadyForScopeChangeApproval, ScopeChange, ReadyToResumeWork\n */\n showNewlyProposedSchedule(): boolean {\n const states = [\n WorkPackageStatus.ReadyForScopeChangeApproval,\n WorkPackageStatus.ScopeChange,\n WorkPackageStatus.ReadyToResumeWork,\n ];\n\n return states.indexOf(this.status) > -1;\n }\n\n isInReadyForApproval(): boolean {\n return this.status === WorkPackageStatus.ReadyForApproval;\n }\n\n /**\n * Looks for the work package coordinator in the planned resources.\n */\n getWorkPackageCoordinator(): ResponsibleUserWorkPackageViewDtoModel | undefined {\n if (this.responsibleUsers.length === 0) {\n return undefined;\n }\n\n return this.responsibleUsers.find((responsibleUser) => responsibleUser.isCoordinator);\n }\n\n /**\n * Get the newest ScopeChange back\n */\n getLatestSuspension(): SuspensionDtoModel | null {\n if (this.suspensions.length === 0) {\n return null;\n }\n\n return this.suspensions[0];\n }\n\n /**\n * Get the newest ScopeChange back\n */\n getLatestScopeChange(): ScopeChangeDtoModel | null {\n if (this.scopeChanges.length === 0) {\n return null;\n }\n\n return this.scopeChanges[0];\n }\n\n /**\n * Get the sum of confirmed ours from the WP and all scope changes\n */\n getSumOfConfirmedHours(): number {\n let { confirmedHours } = this;\n\n this.scopeChanges.forEach((scopeChange) => {\n if (scopeChange.confirmedAdditionalHours != null) {\n confirmedHours += scopeChange.confirmedAdditionalHours;\n }\n });\n\n return confirmedHours;\n }\n\n /**\n * Get the sum of confirmed additional hours, which are the difference of the planned hours and the sum\n * of all confirmed additional hours for all scope changes.\n */\n getSumOfConfirmedAdditionalHours(): number {\n return this.plannedHours - this.getSumOfConfirmedHours();\n }\n\n /**\n * Getter is Planned End Date exceeded\n */\n get isPlannedEndDateExceeded(): boolean {\n return WorkPackageLogicHelper.isPlannedEndDateExceeded(this);\n }\n\n /**\n * Getter is Planned Hours exceeded\n */\n get arePlannedHoursExceeded(): boolean {\n return WorkPackageLogicHelper.arePlannedHoursExceeded(this);\n }\n\n get isPlannedEndDateOverdue(): boolean {\n return WorkPackageLogicHelper.isPlannedEndDateOverdue(this);\n }\n\n /**\n * Merges all names of the responsibles to one string.\n */\n getWorkPackageResponsibleNames(concatenator: string = ', '): string {\n if (this.responsibleUsers.length === 0) {\n return '';\n }\n\n return this.responsibleUsers\n .map((responsibleUser) => responsibleUser.fullName)\n .join(concatenator);\n }\n\n // eslint-disable-next-line max-lines-per-function, complexity\n toJSON(): WorkPackageViewResponse {\n return {\n additionalSuppplierHourlyRateCategories: this.additionalSuppplierHourlyRateCategories\n .map((item) => item.toJSON()),\n workPackageId: this.workPackageId,\n sequenceNumber: this.sequenceNumber,\n projectId: this.projectId,\n project: this.project.toJSON(),\n level: (this.level ? this.level.toJSON() : null),\n title: this.title,\n estimatedStartDate: this.estimatedStartDate.toJSON(),\n estimatedEndDate: this.estimatedEndDate.toJSON(),\n estimatedHours: this.estimatedHours,\n latestEstimatedStartDate: this.latestEstimatedStartDate.toJSON(),\n latestEstimatedEndDate: this.latestEstimatedEndDate.toJSON(),\n latestEstimatedHours: this.latestEstimatedHours,\n confirmedStartDate: (this.confirmedStartDate != null ? this.confirmedStartDate.toJSON() : null),\n confirmedEndDate: (this.confirmedEndDate != null ? this.confirmedEndDate.toJSON() : null),\n confirmedHours: this.confirmedHours,\n latestConfirmedEndDate: (this.latestConfirmedEndDate != null ? this.latestConfirmedEndDate.toJSON() : null),\n latestConfirmedHours: this.latestConfirmedHours,\n plannedStartDate: (this.plannedStartDate != null ? this.plannedStartDate.toJSON() : null),\n latestPlannedEndDate: (this.latestPlannedEndDate != null ? this.latestPlannedEndDate.toJSON() : null),\n plannedEndDate: (this.plannedEndDate != null ? this.plannedEndDate.toJSON() : null),\n plannedHours: this.plannedHours,\n costToComplete: this.costToComplete,\n responsibleUsers: this.responsibleUsers.map((item) => item.toJSON()),\n plannedNonHumanResources: this.plannedNonHumanResources.map((item) => item.toJSON()),\n createdBy: (this.createdBy != null ? this.createdBy.toJSON() : null),\n submitterUnit: (this.submitterUnit != null ? this.submitterUnit.toJSON() : null),\n submitterUnitCoordinator: (this.submitterUnitCoordinator != null ? this.submitterUnitCoordinator.toJSON() : null),\n submitterUnitDeputyUnitCoordinators: this.submitterUnitDeputyUnitCoordinators.map((item) => item.toJSON()),\n contractSubmitterUnit: (this.contractSubmitterUnit != null ? this.contractSubmitterUnit.toJSON() : null),\n supplierUnit: (this.supplierUnit != null ? this.supplierUnit.toJSON() : null),\n contractSupplierUnit: (this.contractSupplierUnit != null ? this.contractSupplierUnit.toJSON() : null),\n contractId: this.contractId,\n supplierUnitCoordinator: (this.supplierUnitCoordinator != null ? this.supplierUnitCoordinator.toJSON() : null),\n supplierUnitDeputyUnitCoordinators: this.supplierUnitDeputyUnitCoordinators.map((item) => item.toJSON()),\n submitterProjectTypeCode: this.submitterProjectTypeCode,\n submitterProjectNumber: this.submitterProjectNumber,\n submitterHourlyRateCategories: this.submitterHourlyRateCategories,\n submitterActivityItemCategoryNumber: this.submitterActivityItemCategoryNumber,\n supplierProjectTypeCode: this.supplierProjectTypeCode,\n supplierProjectNumber: this.supplierProjectNumber,\n supplierHourlyRateCategories: this.supplierHourlyRateCategories,\n supplierActivityItemCategoryNumber: this.supplierActivityItemCategoryNumber,\n scope: this.scope,\n status: this.status,\n timezone: this.timezone,\n timezoneOffset: this.timezoneOffset,\n conclusion: this.conclusion,\n openQuestionsCount: this.openQuestionsCount,\n hasEverBeenInForecastedStatus: this.hasEverBeenInForecastedStatus,\n hasEverBeenInIssuedStatus: this.hasEverBeenInIssuedStatus,\n isSelfAssigned: this.isSelfAssigned,\n kpis: this.kpis,\n submitterFeedbacks: this.submitterFeedbacks.map((item) => item.toJSON()),\n supplierFeedbacks: this.supplierFeedbacks.map((item) => item.toJSON()),\n attachments: this.attachments.map((item) => item.toJSON()),\n scopeChanges: this.scopeChanges.map((item) => item.toJSON()),\n reworks: this.reworks.map((item) => item.toJSON()),\n suspensions: this.suspensions.map((item) => item.toJSON()),\n hourlyRateCategories: this.hourlyRateCategories.map((item) => item.toJSON()),\n metadata: this.metadata,\n plannedHoursNotIncludedInTotal: this.plannedHoursNotIncludedInTotal,\n };\n }\n}\n","import { ProjectTypeListResponse } from '../../interfaces/responses/project-type-list.response';\nimport { ProjectTypeDtoModel } from '../dtos/project-type.dto.model';\nimport { MetadataModel } from '../metadata.model';\nimport { assertRequiredProperties } from '../../utilities/api.utility';\n\nexport class ProjectTypeListResponseModel {\n constructor(\n readonly items: readonly ProjectTypeDtoModel[],\n readonly metadata: MetadataModel = new MetadataModel(),\n ) {\n this.items = [...items];\n }\n\n static fromJSON(json: ProjectTypeListResponse): ProjectTypeListResponseModel {\n assertRequiredProperties(json, [\n 'items',\n ]);\n\n return new ProjectTypeListResponseModel(\n (Array.isArray(json.items) ? json.items : [])\n .map((item) => ProjectTypeDtoModel.fromJSON(item)),\n new MetadataModel(json.metadata || {}),\n );\n }\n\n toJSON(): ProjectTypeListResponse {\n return {\n items: this.items.map((item) => item.toJSON()),\n metadata: this.metadata.toJSON(),\n };\n }\n}\n","import { RatingListResponse } from '../../interfaces/responses/rating-list.response';\nimport { RatingDtoModel } from '../dtos/rating.dto.model';\nimport { ApiModelNew } from '../types';\nimport { assertRequiredProperties } from '../../utilities/api.utility';\n\nexport class RatingListResponseModel implements ApiModelNew {\n constructor(\n readonly items: readonly RatingDtoModel[],\n ) {\n this.items = [...items];\n }\n\n static fromJSON(json: RatingListResponse): RatingListResponseModel {\n assertRequiredProperties(json, [\n 'items',\n ]);\n\n return new RatingListResponseModel(\n json.items.map((item) => RatingDtoModel.fromJSON(item)),\n );\n }\n\n clone(overrides?: Partial): RatingListResponseModel {\n return new RatingListResponseModel(\n (overrides && overrides.items\n ? overrides.items\n : this.items.map((item) => item.clone())\n ),\n );\n }\n\n toJSON(): RatingListResponse {\n return {\n items: this.items.map((item) => item.toJSON()),\n };\n }\n}\n","import { TimeZoneDto } from '../../interfaces/dtos/time-zone.dto';\nimport { assertRequiredProperties } from '../../utilities/api.utility';\n\nexport class TimeZoneDtoModel {\n constructor(\n readonly timezoneId: string,\n readonly offset: number,\n ) {\n }\n\n static fromJSON(json: TimeZoneDto): TimeZoneDtoModel {\n assertRequiredProperties(json, [\n 'timezoneId',\n 'offset',\n ]);\n\n return new TimeZoneDtoModel(\n json.timezoneId,\n json.offset,\n );\n }\n\n toJSON(): TimeZoneDto {\n return {\n timezoneId: this.timezoneId,\n offset: this.offset,\n };\n }\n}\n","import { CountryDto } from '../../interfaces/dtos/country.dto';\nimport { assertRequiredProperties } from '../../utilities/api.utility';\n\nexport class CountryDtoModel {\n constructor(\n readonly countryCode: string,\n readonly name: string,\n ) {\n }\n\n static fromJSON(json: CountryDto): CountryDtoModel {\n assertRequiredProperties(json, [\n 'countryCode',\n 'name',\n ]);\n\n return new CountryDtoModel(\n json.countryCode,\n json.name,\n );\n }\n\n toJSON(): CountryDto {\n return {\n countryCode: this.countryCode,\n name: this.name,\n };\n }\n}\n","import { CountryListResponse } from '../../interfaces/responses/country-list.response';\nimport { CountryDtoModel } from '../dtos/country.dto.model';\nimport { MetadataModel } from '../metadata.model';\nimport { assertRequiredProperties } from '../../utilities/api.utility';\n\nexport class CountryListResponseModel {\n constructor(\n readonly items: readonly CountryDtoModel[],\n readonly metadata: MetadataModel,\n ) {\n this.items = [...items];\n }\n\n static fromJSON(json: CountryListResponse): CountryListResponseModel {\n assertRequiredProperties(json, [\n 'items',\n ]);\n\n return new CountryListResponseModel(\n (Array.isArray(json.items) ? json.items : [])\n .map((item) => CountryDtoModel.fromJSON(item)),\n new MetadataModel(json.metadata),\n );\n }\n\n toJSON(): CountryListResponse {\n return {\n items: this.items.map((item) => item.toJSON()),\n metadata: this.metadata.toJSON(),\n };\n }\n}\n","import { GateListResponse } from '../../interfaces/responses/gate-list.response';\nimport { GateDtoModel } from '../dtos/gate.dto.model';\nimport { MetadataModel } from '../metadata.model';\nimport { assertRequiredProperties } from '../../utilities/api.utility';\n\nexport class GateListResponseModel {\n constructor(\n readonly items: readonly GateDtoModel[],\n readonly metadata: MetadataModel = new MetadataModel({}),\n ) {\n this.items = [...items];\n }\n\n static fromJSON(json: GateListResponse): GateListResponseModel {\n assertRequiredProperties(json, [\n 'items',\n ]);\n\n return new GateListResponseModel(\n (Array.isArray(json.items) ? json.items : [])\n .map((item) => GateDtoModel.fromJSON(item)),\n new MetadataModel(json.metadata),\n );\n }\n\n clone(): GateListResponseModel {\n return new GateListResponseModel(\n this.items.map((item) => item.clone()),\n this.metadata.clone(),\n );\n }\n\n toJSON(): GateListResponse {\n return {\n items: this.items.map((item) => item.toJSON()),\n metadata: this.metadata.toJSON(),\n };\n }\n}\n","import { RoleListResponse } from '../../interfaces/responses/role-list.response';\nimport { RoleListDtoModel } from '../dtos/role-list.dto.model';\nimport { MetadataModel } from '../metadata.model';\nimport { assertRequiredProperties } from '../../utilities/api.utility';\n\nexport class RoleListResponseModel {\n constructor(\n readonly items: readonly RoleListDtoModel[] = [],\n readonly metadata: MetadataModel = new MetadataModel(),\n ) {\n this.items = [...items];\n }\n\n static fromJSON(json: RoleListResponse): RoleListResponseModel {\n assertRequiredProperties(json, [\n 'items',\n ]);\n\n return new RoleListResponseModel(\n json.items.map((item) => RoleListDtoModel.fromJSON(item)),\n new MetadataModel(json.metadata),\n );\n }\n\n toJSON(): RoleListResponse {\n return {\n items: this.items.map((item) => item.toJSON()),\n metadata: this.metadata.toJSON(),\n };\n }\n}\n","import { ResourceLinkDto } from '../../interfaces/dtos/resource-link.dto';\n\nexport class ResourceLinkDtoModel {\n constructor(\n readonly linkCode: string | null,\n readonly url: string | null,\n ) {}\n\n static fromJSON(json: ResourceLinkDto): ResourceLinkDtoModel {\n return new ResourceLinkDtoModel(\n json.linkCode,\n json.url,\n );\n }\n\n clone(): ResourceLinkDtoModel {\n return new ResourceLinkDtoModel(\n this.linkCode,\n this.url,\n );\n }\n}\n","import { DefaultUserLandingPageType } from 'src/app/models/default-user-landing-page-type.enum';\nimport { UserPreferencesUpdateRequest } from '../../interfaces/requests/user-preferences-update.request';\nimport { assertRequiredProperties } from '../../utilities/api.utility';\n\nexport class UserPreferencesUpdateRequestModel {\n constructor(\n readonly timezone: string,\n readonly displayInLocalLanguage: boolean,\n readonly userWorkingDays: string,\n readonly defaultUserLandingPage: DefaultUserLandingPageType,\n ) {\n }\n\n static fromJSON(json: UserPreferencesUpdateRequest): UserPreferencesUpdateRequestModel {\n assertRequiredProperties(json, [\n 'timezone',\n ]);\n\n return new UserPreferencesUpdateRequestModel(\n json.timezone,\n json.displayInLocalLanguage,\n json.userWorkingDays,\n json.defaultUserLandingPage,\n );\n }\n\n toJSON(): UserPreferencesUpdateRequest {\n return {\n timezone: this.timezone,\n displayInLocalLanguage: this.displayInLocalLanguage,\n userWorkingDays: this.userWorkingDays,\n defaultUserLandingPage: this.defaultUserLandingPage,\n };\n }\n}\n","import { UserCalendarLinksResponse } from '../../interfaces/responses/user-calendar-links-response';\nimport { UnitCalendarLinkDtoModel } from '../dtos/unit-calendar-link.dto.model';\n\nexport class UserCalendarLinksResponseModel {\n constructor(\n readonly calendarAllLink: string | null,\n readonly calendarProductiveLink: string | null,\n readonly calendarNonProductiveLink: string | null,\n readonly calendarUnitProductiveLinks: UnitCalendarLinkDtoModel[] | null,\n readonly calendarUnitNonProductiveLinks: UnitCalendarLinkDtoModel[] | null,\n ) {}\n\n static fromJSON(json: UserCalendarLinksResponse): UserCalendarLinksResponseModel {\n return new UserCalendarLinksResponseModel(\n json.calendarAllLink,\n json.calendarProductiveLink,\n json.calendarNonProductiveLink,\n json.calendarUnitProductiveLinks\n ? json.calendarUnitProductiveLinks.map((link) => UnitCalendarLinkDtoModel.fromJSON(link))\n : null,\n json.calendarUnitNonProductiveLinks\n ? json.calendarUnitNonProductiveLinks.map((link) => UnitCalendarLinkDtoModel.fromJSON(link))\n : null,\n );\n }\n\n toJSON(): UserCalendarLinksResponse {\n return {\n calendarAllLink: this.calendarAllLink,\n calendarProductiveLink: this.calendarProductiveLink,\n calendarNonProductiveLink: this.calendarNonProductiveLink,\n calendarUnitProductiveLinks: this.calendarUnitProductiveLinks\n ? this.calendarUnitProductiveLinks.map((link) => link.toJSON())\n : null,\n calendarUnitNonProductiveLinks: this.calendarUnitNonProductiveLinks\n ? this.calendarUnitNonProductiveLinks.map((link) => link.toJSON())\n : null,\n };\n }\n}\n","import { Injectable } from '@angular/core';\nimport { HttpEventType, HttpResponse } from '@angular/common/http';\nimport { Observable } from 'rxjs';\nimport { filter, map, mapTo } from 'rxjs/operators';\nimport { CollAppApiService } from './collapp-api.service';\nimport { CountryDtoModel } from '../models/dtos/country.dto.model';\nimport { GateDtoModel } from '../models/dtos/gate.dto.model';\nimport { UnitDto } from '../interfaces/dtos/unit.dto';\nimport { UnitDtoModel } from '../models/dtos/unit.dto.model';\nimport { UnitListDtoModel } from '../models/dtos/unit-list.dto.model';\nimport { CountryListResponse } from '../interfaces/responses/country-list.response';\nimport { GateListResponse } from '../interfaces/responses/gate-list.response';\nimport { UnitListResponse } from '../interfaces/responses/unit-list.response';\nimport { RoleListResponse } from '../interfaces/responses/role-list.response';\nimport { RoleListDtoModel } from '../models/dtos/role-list.dto.model';\nimport { ProjectTypeListResponse } from '../interfaces/responses/project-type-list.response';\nimport { ProjectTypeListResponseModel } from '../models/responses/project-type-list.response.model';\nimport { ProjectTypeDtoModel } from '../models/dtos/project-type.dto.model';\nimport { RatingListResponseModel } from '../models/responses/rating-list.response.model';\nimport { RatingDtoModel } from '../models/dtos/rating.dto.model';\nimport { RatingListResponse } from '../interfaces/responses/rating-list.response';\nimport { TimeZoneDto } from '../interfaces/dtos/time-zone.dto';\nimport { TimeZoneDtoModel } from '../models/dtos/time-zone.dto.model';\nimport { CountryListResponseModel } from '../models/responses/country-list.response.model';\nimport { GateListResponseModel } from '../models/responses/gate-list.response.model';\nimport { RoleListResponseModel } from '../models/responses/role-list.response.model';\nimport { ResourceLinkDtoModel } from '../models/dtos/resource-link.dto.model';\nimport { ResourceLinkDto } from '../interfaces/dtos/resource-link.dto';\nimport { UserPreferencesUpdateRequestModel } from '../models/requests/user-preferences-update.request.model';\nimport { UserCalendarLinksResponse } from '../interfaces/responses/user-calendar-links-response';\nimport { UserCalendarLinksResponseModel } from '../models/responses/user-calendar-links-response.model';\nimport { CostObjectDtoModel } from '../models/dtos/costObject.dto.model';\nimport { CostObjectDto } from '../interfaces/dtos/cost-object.dto';\nimport { DefaultUserLandingPageType } from 'src/app/models/default-user-landing-page-type.enum';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class BaseDataService {\n constructor(\n private apiService: CollAppApiService,\n ) { }\n\n /**\n * Gets a list of all countries\n *\n * @return {Observable}\n */\n getAllCountries$(): Observable {\n return this.apiService\n .getCountries$()\n .pipe(\n filter((event) => event.type === HttpEventType.Response),\n map((response: HttpResponse) => CountryListResponseModel.fromJSON(response.body!)),\n map((response) => response.items.slice(0)),\n );\n }\n\n /**\n * Gets a list of all links\n *\n * @return {Observable}\n */\n getAllLinks$(): Observable {\n return this.apiService\n .getLinks$()\n .pipe(\n filter((event) => event.type === HttpEventType.Response),\n map((response: HttpResponse) => response.body!\n .map((link) => ResourceLinkDtoModel.fromJSON(link))),\n map((response) => response.slice(0)),\n );\n }\n\n /**\n * Gets a list of all ratings\n */\n getAllRatings$(): Observable {\n return this.apiService\n .getRatings$()\n .pipe(\n filter((event) => event.type === HttpEventType.Response),\n map((response: HttpResponse) => RatingListResponseModel.fromJSON(response.body!)),\n map((response) => response.items),\n );\n }\n\n /**\n * Gets a list of all gates\n *\n * @return {Observable}\n */\n getAllGates$(): Observable {\n return this.apiService\n .getGates$()\n .pipe(\n filter((event) => event.type === HttpEventType.Response),\n map((response: HttpResponse) => GateListResponseModel.fromJSON(response.body!)),\n map((response) => response.items.slice(0)),\n );\n }\n\n /**\n * Gets a list of all project types\n */\n getAllProjectTypes$(): Observable {\n return this.apiService\n .getProjectTypes$()\n .pipe(\n filter((event) => event.type === HttpEventType.Response),\n map((response: HttpResponse) => ProjectTypeListResponseModel.fromJSON(response.body!)),\n map((response) => response.items),\n );\n }\n\n /**\n * Gets a list of all units\n *\n * @return {Observable}\n */\n getAllUnits$(): Observable {\n return this.apiService\n .getUnits$()\n .pipe(\n filter((event) => event.type === HttpEventType.Response),\n map((response: HttpResponse) => response.body!\n .items\n .map((unit) => UnitListDtoModel.fromJSON(unit))),\n );\n }\n\n /**\n * Gets a single units by units id\n *\n * @param {string} unitId\n * @return {Observable}\n */\n getUnitByUnitId$(unitId: number): Observable {\n return this.apiService\n .getUnitByUnitId$(unitId)\n .pipe(\n filter((event) => event.type === HttpEventType.Response),\n map((response: HttpResponse) => UnitDtoModel.fromJSON(response.body!)),\n );\n }\n\n /**\n * Gets a list of all roles\n */\n getAllRoles$(): Observable {\n return this.apiService\n .getRoles$()\n .pipe(\n filter((event) => event.type === HttpEventType.Response),\n map((response: HttpResponse) => RoleListResponseModel.fromJSON(response.body!)),\n map((response) => response.items),\n );\n }\n\n /**\n * Gets the time zone list.\n */\n getTimeZones$(): Observable {\n return this.apiService\n .getTimeZones$()\n .pipe(\n filter((event) => event.type === HttpEventType.Response),\n map((response: HttpResponse) => (Array.isArray(response.body) ? response.body : [])\n .map((item) => TimeZoneDtoModel.fromJSON(item))),\n );\n }\n\n getCalendarLinks$(): Observable {\n return this.apiService\n .getCalendarLinks$()\n .pipe(\n filter((event) => event.type === HttpEventType.Response),\n map((response: HttpResponse) => (response != null\n ? UserCalendarLinksResponseModel.fromJSON(response.body!)\n : null)),\n );\n }\n\n putUserPreferences$(timeZone: string, displayInLocalLanguage: boolean, userWorkingDays: string, defaultUserLandingPage: DefaultUserLandingPageType): Observable {\n const request = new UserPreferencesUpdateRequestModel(\n timeZone,\n displayInLocalLanguage,\n userWorkingDays,\n defaultUserLandingPage,\n );\n\n return this.apiService\n .putUserPreferences$(request.toJSON())\n .pipe(\n filter((event) => event.type === HttpEventType.Response),\n mapTo(undefined),\n );\n }\n\n /**\n * Gets the currently used database server name\n *\n * @return {Observable}\n */\n getDBCreationDate$(): Observable {\n return this.apiService\n .getDBCreationDate$()\n .pipe(\n filter((event) => event.type === HttpEventType.Response),\n map((response: HttpResponse) => response.body!),\n );\n }\n}\n","import { HttpErrorResponse, HttpHeaders } from '@angular/common/http';\n\nexport class CustomHttpErrorResponse extends HttpErrorResponse {\n name: any;\n\n message: string;\n\n constructor(name: string, message: string, init: {\n error?: any;\n headers?: HttpHeaders;\n status?: number;\n statusText?: string;\n url?: string;\n }) {\n super(init);\n\n this.name = name;\n this.message = message;\n }\n}\n","import { Injectable } from '@angular/core';\nimport { HttpClient, HttpErrorResponse, HttpEvent, HttpEventType, HttpHeaders, HttpParams, HttpResponse } from '@angular/common/http';\nimport { Observable, throwError } from 'rxjs';\nimport { SortDirection } from '@angular/material/sort';\nimport { catchError, filter, map } from 'rxjs/operators';\nimport { CollappFilterDropdownListRadioSetting } from '../../models/collapp-filter-dropdown-list-radio.interface';\nimport { AvailableRequestRequestOptions } from '../../models/available-projects-request.options';\nimport { AvailalbeProjectListResponse } from '../interfaces/responses/available-project-list.response';\nimport { BasicWorkpackagesRequestOptions } from '../../models/basic-workpackages-request.options';\nimport { BasicWorkPackageDetailResponse } from '../interfaces/responses/basic-work-package-detail.response';\nimport { LevelInfoResponse } from '../interfaces/responses/level-info.response';\nimport { getEndpointUrl, obj2fd } from '../utilities/api.utility';\nimport { CountryListResponse } from '../interfaces/responses/country-list.response';\nimport { InlineFileDto } from '../interfaces/dtos/inline-file.dto';\nimport { GateListResponse } from '../interfaces/responses/gate-list.response';\nimport { ImportUserAndUnitResponse } from '../interfaces/responses/import-user-and-unit.response';\nimport { LevelPlanningUpdateRequest } from '../interfaces/requests/level-planning-update.request';\nimport { ProjectStructurePresetUpdateRequest } from '../interfaces/requests/project-structure-preset-update.request';\nimport { UserSettingDto } from '../interfaces/dtos/user-setting.dto';\nimport { ProjectListResponse } from '../interfaces/responses/project-list.response';\nimport { ProjectViewResponse } from '../interfaces/responses/project-view.response';\nimport { ProjectActivityViewResponse } from '../interfaces/responses/project-activity-view.response';\nimport { ProjectImportListResponse } from '../interfaces/responses/project-import-list.response';\nimport { UnitListResponse } from '../interfaces/responses/unit-list.response';\nimport { UnitCreateRequest } from '../interfaces/requests/unit-create.request';\nimport { UnitSelectorListResponse } from '../interfaces/responses/unit-selector-list.response';\nimport { UnitDto } from '../interfaces/dtos/unit.dto';\nimport { UnitSlimDto } from '../interfaces/dtos/unit-slim.dto';\nimport { UnitUpdateRequest } from '../interfaces/requests/unit-update.request';\nimport { UserCreateRequest } from '../interfaces/requests/user-create.request';\nimport { UserDto } from '../interfaces/dtos/user.dto';\nimport { UserUpdateRequest } from '../interfaces/requests/user-update.request';\nimport { WorkPackageListResponse } from '../interfaces/responses/work-package-list.response';\nimport { WorkPackageViewResponse } from '../interfaces/responses/work-package-view.response';\nimport { WorkPackageUpdateStatusRequest } from '../interfaces/requests/work-package-update-status.request';\nimport { ProjectCreateRequest } from '../interfaces/requests/project-create.request';\nimport { ProjectUpdateRequest } from '../interfaces/requests/project-update.request';\nimport { WorkPackageCreateRequest } from '../interfaces/requests/work-package-create.request';\nimport { WorkPackageUpdateRequest } from '../interfaces/requests/work-package-update.request';\nimport { RoleListResponse } from '../interfaces/responses/role-list.response';\nimport { ProjectScopeViewResponse } from '../interfaces/responses/project-scope-view.response';\nimport { ProjectCreateResponse } from '../interfaces/responses/project-create.response';\nimport { WorkPackageCreateResponse } from '../interfaces/responses/work-package-create.response';\nimport { ProjectImportListDto } from '../interfaces/dtos/project-import-list.dto';\nimport { LevelListResponse } from '../interfaces/responses/level-list.response';\nimport { ProjectTypeListResponse } from '../interfaces/responses/project-type-list.response';\nimport { LevelCreateRequest } from '../interfaces/requests/level-create.request';\nimport { LevelCreateResponse } from '../interfaces/responses/level-create.response';\nimport { WorkPackageSubmitterSettingsUpdateRequest } from '../interfaces/requests/work-package-submitter-settings-update.request';\nimport { WorkPackageSupplierSettingsUpdateRequest } from '../interfaces/requests/work-package-supplier-settings-update.request';\nimport { WorkPackageResourcePlanningViewResponse } from '../interfaces/responses/work-package-resource-planning-view.response';\nimport { WorkPackageResourcePlanningUpdateRequest } from '../interfaces/requests/work-package-resource-planning-update.request';\nimport {\n ListQueryOptions,\n UserListQueryOptions,\n UserResourceListQueryOptions,\n WorkPackageListOptions,\n UnitQuestionsListOptions,\n} from '../list-query-options';\nimport { WorkPackageStatus } from '../../models/work-package-status.enum';\nimport { ScopeChangeCreateRequest } from '../interfaces/requests/scope-change-create.request';\nimport { ScopeChangeUpdateRequest } from '../interfaces/requests/scope-change-update.request';\nimport { ProjectUpdateFromSapRequest } from '../interfaces/requests/project-update-from-sap.request';\nimport { UnitCreateResponse } from '../interfaces/responses/unit-create.response';\nimport { TimecardViewResponse } from '../interfaces/responses/timecard-view.response';\nimport { UserCreateResponse } from '../interfaces/responses/user-create.response';\nimport { WorkPackageTransitionInformationResponse } from '../interfaces/responses/work-package-transition-information.response';\nimport { TimecardSaveRequest } from '../interfaces/requests/timecard-save.request';\nimport { TimeTrackingWeekNavigatorViewResponse } from '../interfaces/responses/time-tracking-week-navigator-view.response';\nimport { RatingListResponse } from '../interfaces/responses/rating-list.response';\nimport { WorkPackageCloseRequest } from '../interfaces/requests/work-package-close.request';\nimport { SuspensionCreateRequest } from '../interfaces/requests/suspension-create.request';\nimport { UnitsViewResponse } from '../interfaces/responses/units-view.response';\nimport { UnitViewResponse } from '../interfaces/responses/unit-view.response';\nimport { UserViewResponse } from '../interfaces/responses/user-view.response';\nimport { UsersViewResponse } from '../interfaces/responses/users-view.response';\nimport { WorkPackageUploadOutputDocumentsRequest } from '../interfaces/requests/work-package-upload-output-documents.request';\nimport { UnitSelectorAvailableRequestOptions, UnitSelectorRequestOptions } from './unit.service';\nimport { FileDownloadResponse } from '../interfaces/responses/file-download.response';\nimport { QuestionListResponse } from '../interfaces/responses/question-list.response';\nimport { WorkPackageQuestionColumnFilters } from '../filter-columns';\nimport { QuestionCreateResponse } from '../interfaces/responses/question-create.response';\nimport { QuestionUpdateRequest } from '../interfaces/requests/question-update.request';\nimport { QuestionCreateRequest } from '../interfaces/requests/question-create.request';\nimport { ReplyCreateResponse } from '../interfaces/responses/reply-create.response';\nimport { ReplyCreateRequest } from '../interfaces/requests/reply-create.request';\nimport { ConclusionCreateRequest } from '../interfaces/requests/conclusion-create.request';\nimport { ConclusionCreateResponse } from '../interfaces/responses/conclusion-create.response';\nimport { ReopenCreateRequest } from '../interfaces/requests/reopen-create.request';\nimport { ReopenCreateResponse } from '../interfaces/responses/reopen-create.response';\nimport { TimesheetViewResponse } from '../interfaces/responses/timesheet-view.response';\nimport { TimecardStatusUpdateRequest } from '../interfaces/requests/timecard-status-update.request';\nimport { WorkPackageDuplicateRequest } from '../interfaces/requests/work-package-duplicate.request';\nimport { ProjectSelectorListResponse } from '../interfaces/responses/project-selector-list.response';\nimport { SelectorRequestOptions } from '../../models/selector-request.options';\nimport { ActivityFetchType } from '../../models/activity-fetch-type.enum';\nimport { DashboardViewResponse } from '../interfaces/responses/dashboard-view.response';\nimport { ProjectDashboardDto } from '../interfaces/dtos/project-dashboard.dto';\nimport { WorkPackageDashboardDto } from '../interfaces/dtos/work-package-dashboard.dto';\nimport { QuestionDashboardDto } from '../interfaces/dtos/question-dashboard.dto';\nimport { TimeZoneDto } from '../interfaces/dtos/time-zone.dto';\nimport { UserSlimDto } from '../interfaces/dtos/user-slim.dto';\nimport { TimesheetExportTemplateResponse } from '../interfaces/responses/timesheet-export-template.response';\nimport { WorkPackageReworkCreateRequest } from '../interfaces/requests/work-package-rework-create.request';\nimport { UserSettingRequest } from '../interfaces/requests/user-setting.request';\nimport { WorkPackageViewListResponse } from '../interfaces/responses/work-package-view-list.response';\nimport { AttachmentListResponse } from '../interfaces/responses/attachment-list.response';\nimport { DocumentType } from '../../models/document-type.enum';\nimport { LevelSwapRequest } from '../interfaces/requests/level-swap.request';\nimport { DefectListResponse } from '../interfaces/responses/defect-list.response';\nimport { ReplyListResponse } from '../interfaces/responses/reply-list.response';\nimport { QuestionUserNotificationListResponse } from '../interfaces/responses/question-user-notification-list.response';\nimport { DefaultNonProductiveCategoryResponse } from '../interfaces/responses/default-non-productive-category.response';\nimport { CustomHttpParams } from '../custom-http-params';\n\nimport { QuestionsViewListResponse } from '../interfaces/responses/questions-view-list.response';\nimport { AttachmentOutdateRequest } from '../interfaces/requests/attachment-outdate-request';\nimport { AttachmentOutdateResponse } from '../interfaces/responses/attachment-outdate.response';\nimport { QuestionAction } from '../../models/question-action.enum';\nimport { FeedbackCreateRequest } from '../interfaces/requests/feedback-create.request';\nimport { UserListViewResponse } from '../interfaces/responses/user-list-view.response';\nimport { AvailableResourcesResponse } from '../interfaces/responses/available-resources.response';\nimport { ResponsibleUserDto } from '../interfaces/dtos/responsible-user.dto';\nimport { UserPlanningViewResponse } from '../interfaces/responses/user-planning-view.response';\nimport { PlanningSaveRequest } from '../interfaces/requests/planning-save-request';\nimport { ProjectStructureResponse } from '../interfaces/responses/project-structure.response';\nimport { UnitPlanningViewResponse } from '../interfaces/responses/unit-planning-view.response';\nimport { NonHumanResourceListResponse } from '../interfaces/responses/non-human-resource-list.response';\nimport { NonHumanResourceViewResponse } from '../interfaces/responses/non-human-resource-view.response';\nimport { NonHumanResourceCreateRequest } from '../interfaces/requests/non-human-resource-create.request';\nimport { NonHumanResourceCreateResponse } from '../interfaces/responses/non-human-resource-create.response';\nimport { NonHumanResourceUpdateRequest } from '../interfaces/requests/non-human-resource-update.request';\nimport { ResponsibleResourceDto } from '../interfaces/dtos/responsible-resource.dto';\nimport { UnitPlanningUserListViewResponse } from '../interfaces/responses/unit-planning-user-list-view.response';\nimport { NonHumanResourcePlanningViewResponse } from '../interfaces/responses/non-human-resource-planning-view.response';\nimport { NonHumanResourceDto } from '../interfaces/dtos/non-human-resource.dto';\nimport { UserNotificationViewResponse } from '../interfaces/responses/user-notification-view.response';\nimport { OldPlannedResourcesRequest } from '../interfaces/requests/old-planned-resources.request';\nimport { UserNotificationSettingsUpdateRequest } from '../interfaces/requests/user-notification-settings-update.request';\nimport { UserNotificationSettingsDto } from '../interfaces/dtos/user-notification-settings.dto';\nimport { ResourceLinkDto } from '../interfaces/dtos/resource-link.dto';\nimport { SkillsResponse } from '../interfaces/responses/skills.response';\nimport { SkillCategoryDto } from '../interfaces/dtos/skill-category.dto';\nimport { UpdateSkillCategoryRequest } from '../interfaces/requests/update-skill-category.request';\nimport { UpdateSkillsRequest } from '../interfaces/requests/update-skills.request';\nimport { UnitSkillDto } from '../interfaces/dtos/unit-skill.dto';\nimport { SkillRatingResponse } from '../interfaces/responses/skill-rating.response';\nimport { UpdateUserSkillRatingsRequest } from '../interfaces/requests/update-user-skill-ratings.request';\nimport { UnitPlanningViewRequest } from '../interfaces/requests/unit-planning-view.request';\nimport { DashboardWorkPackageViewType } from '../../models/dashboard-work-package-view-type.enum';\nimport { DashboardFiltersVisibilityResponse } from '../interfaces/responses/dashboard-filters-visibility.response';\nimport { UnitSlimDtoWithoutCoordinatorDto } from '../interfaces/dtos/unit-slim-without-coordinator.dto';\nimport { BackgroundColorResponse } from '../interfaces/responses/background-colors-response';\nimport { BackgroundColorsRequest } from '../interfaces/requests/background-colors-request';\nimport { UserPreferencesUpdateRequest } from '../interfaces/requests/user-preferences-update.request';\nimport { WorkPackageMoveRequest } from '../interfaces/requests/work-package-move.request';\nimport { BasicWorkPackageViewListResponse } from '../interfaces/responses/basic-work-package-view-list.response';\nimport { UserCalendarLinksResponse } from '../interfaces/responses/user-calendar-links-response';\nimport { ProjectStructureFiltersSettingsModel } from '../../models/project-structure-filter-settings.interface';\nimport { CustomHttpErrorResponse } from '../models/custom-http-error-response.class';\nimport { environment } from '../../../environments/environment';\nimport { AdhocWorkpackageRequestModel } from '../models/requests/adhoc-workpackage.request.model';\nimport { ContractDto } from '../interfaces/dtos/contract.dto';\nimport { AdditionalSuppliersUpdateRequest } from '../interfaces/requests/work-package-additional-suppliers-update.request';\nimport { ContractDtoModel } from '../models/dtos/contract.dto.model';\nimport { WorkpackageSupplierSettingsDto } from '../interfaces/dtos/workpackageSupplierSettings.dto';\nimport { ProjectPlanningViewRequestModel } from '../models/requests/project-planning-view.request.model';\nimport { ProjectPlanningViewResponse } from '../interfaces/responses/project-planning-view.response';\nimport { CostObjectDto } from '../interfaces/dtos/cost-object.dto';\nimport { ActivityTypeDto } from '../interfaces/dtos/unit-cost-center-activity-type.dto';\nimport { CostCenterDto } from '../interfaces/dtos/cost-center.dto';\nimport { TimesheetExportViewType } from 'src/app/modules/timesheet/timesheet.component';\nimport { PublicHolidayDeleteDto } from 'src/app/modules/administration/holidays/models/public-holiday-delete.dto';\nimport { PublicHolidaysUpdateDto, PublicHolidayUpdateDto } from 'src/app/modules/administration/holidays/models/public-holiday-update.dto';\nimport { PublicHolidaysCreateCopy } from 'src/app/modules/administration/holidays/models/public-holiday-create-copy.dto';\nimport { PublicHolidayDto } from 'src/app/modules/administration/holidays/models/public-holiday.dto';\nimport { PublicHolidaysCitiesDto } from 'src/app/modules/administration/holidays/models/public-holiday-cities.dto';\nimport { encodeUri } from '@azure/core-http';\nimport { TimeTrackingMonthNavigatorViewResponse } from '../interfaces/responses/time-tracking-month-navigator-view.response';\nimport { UserSlimWithUnitDto } from '../interfaces/dtos/user-slim-with-unit.dto';\n\n/**\n * Workpackage Collaboration Platform API\n * Version: v1\n *\n * Built from Swagger Specification 2.0 on 2018-10-12T14:34:52.808Z\n */\n@Injectable({\n providedIn: 'root',\n})\nexport class CollAppApiService {\n static readonly version: string = 'v1';\n\n constructor(private httpClient: HttpClient) { }\n\n /**\n * Gets a list of all countries\n *\n * @return {Observable>}\n */\n getCountries$(): Observable> {\n const url = '/Lookup/Countries';\n\n return this.request$('GET', url, null);\n }\n\n /**\n * Gets a list of names and employee numbers of all users filtered by a part of the employee number\n */\n getAllUsersEmployeeNumber$(filterString: string, limit = 20): Observable> {\n const url = '/Lookup/AllUsersEmployeeNumber';\n const queryParameters = new CustomHttpParams({filterString, limit});\n\n return this.request$('GET', url, null, queryParameters);\n }\n\n /**\n * Gets a list of all cost centers for a contract by unitId of the unit the contract belongs to\n */\n getContractCostCenters$(unitId: number): Observable> {\n const url = '/Lookup/ContractCostCenters';\n const queryParameters = new CustomHttpParams({unitId});\n\n return this.request$('GET', url, null, queryParameters);\n }\n\n /**\n * Gets a list of all Cost Objects\n *\n * @return {Observable>}\n */\n getCostObjects$(filterString: string, userId: string, limit = 20): Observable> {\n const url = '/Lookup/CostObjects';\n const queryParameters = new CustomHttpParams({filterString, userId, limit});\n return this.request$('GET', url, null, queryParameters);\n }\n\n /**\n * Gets a list of all Cost Objects filtered by the given unit\n *\n * @return {Observable>}\n */\n getCostObjectsForContracts$(filterString: string, unitId: number, limit = 20): Observable> {\n const url = '/Lookup/CostObjectsForContracts';\n const queryParameters = new CustomHttpParams({filterString, unitId, limit});\n return this.request$('GET', url, null, queryParameters);\n }\n\n getCostObjectsByUnitId$(filterString: string, unitId: number, limit = 20): Observable> {\n const url = '/Lookup/CostObjectsByUnit';\n const queryParameters = new CustomHttpParams({filterString, unitId, limit});\n\n return this.request$('GET', url, null, queryParameters);\n }\n\n getCostObjectsByWorkpackageId$(filterString: string, workpackageId: number, limit = 20): Observable> {\n const url = '/Lookup/CostObjectsByWorkPackage';\n const queryParameters = new CustomHttpParams({filterString, workpackageId, limit});\n\n return this.request$('GET', url, null, queryParameters);\n }\n\n getAllPayrollCompanies$(): Observable> {\n const url = '/Lookup/AllPayrollCompanies';\n\n return this.request$('GET', url, null);\n }\n\n getprofitCentersByPayrollCompany$(payrollCompany: string): Observable> {\n const url = '/Lookup/ProfitCentersByPayrollCompany';\n const queryParameters = new CustomHttpParams({payrollCompany});\n\n return this.request$('GET', url, null, queryParameters);\n }\n\n /**\n * Gets a list of all links\n *\n * @return {Observable>}\n */\n getLinks$(): Observable> {\n const url = '/Lookup/Links';\n\n return this.request$('GET', url, null);\n }\n\n /**\n * Gets an attachments URL including the SAS token\n *\n * @param {string} attachmentId\n * @return {Observable>}\n */\n getDownloadUrl$(attachmentId: string): Observable> {\n const url = `/Files/${attachmentId}`;\n\n return this.request$('GET', url, null);\n }\n\n /**\n * Marks an attachment as outdated\n *\n * @param {string} attachmentId\n * @param {AttachmentOutdateRequest} request\n * @return {Observable>}\n */\n patchOutdateFile$(\n attachmentId: string,\n request: AttachmentOutdateRequest,\n ): Observable> {\n const url = `/Files/${attachmentId}/Outdate`;\n\n return this.request$('PATCH', url, request);\n }\n\n /**\n * Uploads an inline file for the WYSIWYG editor to the blob\n *\n * @param {File} upload\n * @return {Observable>}\n */\n postFilesInline$(upload: File): Observable> {\n const url = '/Files/Inline';\n\n const body = obj2fd({\n upload,\n });\n\n return this.request$('POST', url, body);\n }\n\n /**\n * Gets a list of all ratings\n *\n * @return {Observable>}\n */\n getRatings$(): Observable> {\n const url = '/Lookup/Ratings';\n\n return this.request$('GET', url, null);\n }\n\n /**\n * Gets a list of all gates\n *\n * @return {Observable>}\n */\n getGates$(): Observable> {\n const url = '/Lookup/Gates';\n\n return this.request$('GET', url, null);\n }\n\n /**\n * Checks the current health (availabilty) of the application\n *\n * @return {Observable>}\n */\n getHealth$(): Observable> {\n const url = '/Health';\n\n return this.request$('GET', url, null);\n }\n\n /**\n * Imports a list of users and units\n *\n * @return {Observable>}\n */\n getImportsUsersAndUnits$(): Observable> {\n const url = '/Imports/UsersAndUnits';\n\n return this.request$('GET', url, null);\n }\n\n /**\n * Creates a new level\n *\n * @param {number} projectId\n * @param {LevelCreateRequest} request\n * @return {Observable>}\n */\n postProjectLevel$(projectId: number, request: LevelCreateRequest): Observable> {\n const url = `/Projects/${projectId}/Levels`;\n\n return this.request$('POST', url, request);\n }\n\n /**\n * Deletes a specific project level and its children, if any\n *\n * @param {number} projectId\n * @param {number} levelId\n */\n deleteProjectLevel$(projectId: number, levelId: number): Observable> {\n const url = `/Projects/${projectId}/Levels/${levelId}`;\n\n return this.request$('DELETE', url, null);\n }\n\n /**\n * Gets a flat list of levels for the current project and, if given, the current parent level\n */\n getProjectLevels$(projectId: number, parentLevelId?: number): Observable> {\n const url = `/Projects/${projectId}/Levels${parentLevelId ? `/${parentLevelId}` : ''}`;\n\n return this.request$('GET', url, null);\n }\n\n /**\n * Gets infos about a level\n */\n getLevelInformation$(levelId?: number): Observable> {\n const url = `/Levels/Info/${levelId}`;\n\n return this.request$('GET', url, null);\n }\n\n /**\n *\n */\n getProjectStructure$(projectId: number, isFilteredByRights: boolean): Observable> {\n const url = `/Projects/${projectId}/Structure`;\n\n const queryParameters = new CustomHttpParams({\n isFilteredByRights,\n });\n\n return this.request$('GET', url, null, queryParameters);\n }\n\n /**\n * Updates a specific project level\n *\n * @param {number} projectId\n * @param {number} levelId\n * @param {LevelPlanningUpdateRequest} request\n * @return {Observable>}\n */\n updateProjectLevel$(\n projectId: number,\n levelId: number,\n request: LevelPlanningUpdateRequest,\n ): Observable> {\n const url = `/Projects/${projectId}/Levels/${levelId}`;\n\n return this.request$('PATCH', url, request);\n }\n\n /**\n * Swaps the to provided levels' order\n *\n * @param {number} projectId\n * @param {LevelSwapRequest} request\n * @return {Observable>}\n */\n swapProjectLevels$(projectId: number, request: LevelSwapRequest): Observable> {\n const url = `/Projects/${projectId}/Levels/Swap`;\n\n return this.request$('PATCH', url, request);\n }\n\n assignWorkPackageToUser$(\n projectId: number,\n workPackageId: number,\n userId: string,\n ): Observable> {\n const url = `/Projects/${projectId}/WorkPackages/${workPackageId}/${userId}`;\n\n return this.request$('PUT', url, null);\n }\n\n /**\n * Saves the project structure preset for the current user\n *\n * @param {ProjectStructurePresetUpdateRequest} request\n * @return {Observable>}\n */\n putProjectStructurePreset$(\n request: ProjectStructurePresetUpdateRequest,\n ): Observable> {\n const url = '/Projects/Levels/Preset';\n\n return this.request$('PUT', url, request);\n }\n\n /**\n * Gets a page of a list of filtered projects\n *\n * @return {Observable>}\n */\n getProjects$(options: ListQueryOptions): Observable> {\n const url = '/Projects';\n\n const queryParameters = options.toHttpParams();\n\n return this.request$('GET', url, null, queryParameters);\n }\n\n /**\n * Creates a new project\n *\n * @param {ProjectCreateRequest} request\n * @return {Observable>}\n */\n postProject$(request: ProjectCreateRequest): Observable> {\n const url = '/Projects';\n\n return this.request$('POST', url, request);\n }\n\n /**\n *\n * @param projectId\n * @param workPackageId\n * @param questionId\n * @param request\n *\n * @return {Observable>}\n */\n postWorkPackageQuestionReopen$(\n projectId: number,\n workPackageId: number,\n questionId: number,\n request: ReopenCreateRequest,\n ): Observable> {\n const url = `/Projects/${projectId}/WorkPackages/${workPackageId}/Questions/${questionId}/Reopen`;\n\n return this.request$('POST', url, request);\n }\n\n /**\n *\n * @param projectId\n * @param workPackageId\n * @param questionId\n * @param request\n *\n * @return {Observable>}\n */\n postWorkPackageQuestionConclude$(\n projectId: number,\n workPackageId: number,\n questionId: number,\n request: ConclusionCreateRequest,\n ): Observable> {\n const url = `/Projects/${projectId}/WorkPackages/${workPackageId}/Questions/${questionId}/Conclude`;\n\n return this.request$('POST', url, request);\n }\n\n /**\n *\n * @param projectId\n * @param workPackageId\n * @param questionId\n *\n * @return {Observable>}\n */\n getQuestionReplies$(\n projectId: number,\n workPackageId: number,\n questionId: number,\n ): Observable> {\n const url = `/Projects/${projectId}/WorkPackages/${workPackageId}/Questions/${questionId}/Replies`;\n\n return this.request$('GET', url, null);\n }\n\n /**\n *\n * @param projectId\n * @param workPackageId\n * @param questionId\n * @param request\n *\n * @return {Observable>}\n */\n postWorkPackageQuestionReply$(\n projectId: number,\n workPackageId: number,\n questionId: number,\n request: ReplyCreateRequest,\n ): Observable> {\n const url = `/Projects/${projectId}/WorkPackages/${workPackageId}/Questions/${questionId}/Reply`;\n\n return this.request$('POST', url, request);\n }\n\n /**\n * Creates a new Question\n *\n * @param {number} projectId\n * @param {number} workPackageId\n * @param {QuestionCreateRequest} request\n *\n * @return {Observable>}\n */\n postWorkPackageQuestion$(\n projectId: number,\n workPackageId: number,\n request: QuestionCreateRequest,\n ): Observable> {\n const url = `/Projects/${projectId}/WorkPackages/${workPackageId}/Questions`;\n\n return this.request$('POST', url, request);\n }\n\n /**\n * Updates an existing Question\n *\n * @param {number} projectId\n * @param {number} workPackageId\n * @param {QuestionUpdateRequest} request\n *\n * @return {Observable>}\n */\n putWorkPackageQuestion$(\n projectId: number,\n workPackageId: number,\n request: QuestionUpdateRequest,\n ): Observable> {\n const url = `/Projects/${projectId}/WorkPackages/${workPackageId}/Questions`;\n\n return this.request$('PUT', url, request);\n }\n\n /**\n * Updates an existing project\n *\n * @param {number} projectId\n * @param {ProjectUpdateRequest} request\n * @return {Observable>} - Returns the updated project\n */\n putProjectByProjectId$(projectId: number, request: ProjectUpdateRequest): Observable> {\n const url = `/Projects/${projectId}`;\n\n return this.request$('PUT', url, request);\n }\n\n /**\n * Archive an existing project\n *\n * @param {number} projectId\n * @return {Observable>} - Returns the archived project\n */\n archiveProject$(projectId: number): Observable> {\n const url = `/Projects/${projectId}/Archive`;\n\n return this.request$('PUT', url);\n }\n\n /**\n * Unarchive an existing project\n *\n * @param {number} projectId\n * @return {Observable>} - Returns the unarchived project\n */\n unarchiveProject$(projectId: number): Observable> {\n const url = `/Projects/${projectId}/Unarchive`;\n\n return this.request$('PUT', url);\n }\n\n /**\n * Exports an existing project\n *\n * @param {number} projectId\n * @return {Observable>} - Returns the exported project as excel file\n */\n exportProject$(projectId: number): Observable> {\n const url = `/Projects/${projectId}/Export`;\n\n return this.request$('GET', url);\n }\n\n /**\n * Updates an existing project from SAP\n *\n * @param {number} projectId\n * @param {ProjectUpdateFromSapRequest} request\n * @return {Observable>}\n */\n patchProjectByProjectId$(\n projectId: number,\n request: ProjectUpdateFromSapRequest,\n ): Observable> {\n const url = `/Projects/${projectId}`;\n\n return this.request$('PATCH', url, request);\n }\n\n /**\n * Gets a list of open workPackage names by project id\n *\n * @param {number} projectId\n * @return {Observable>}\n */\n getOpenWorkPackageTitles$(projectId: number): Observable> {\n const url = `/Projects/${projectId}/OpenWorkPackageTitles`;\n\n return this.request$('GET', url, null);\n }\n\n /**\n * Gets a ProjectViewResponse by project id\n * NOTE: \"General\" will fall away, once the GET endpoint for receiving a single project\n * is not used any more.\n *\n * @param {number} projectId\n * @return {Observable>}\n */\n getProjectView$(projectId: number): Observable> {\n const url = `/Projects/${projectId}`;\n\n return this.request$('GET', url, null);\n }\n\n /**\n * Gets a ProjectScopeViewResponse by project id\n *\n * @param {number} projectId\n * @return {Observable>}\n */\n getProjectScopeView$(projectId: number): Observable> {\n const url = `/Projects/${projectId}/Scope`;\n\n return this.request$('GET', url, null);\n }\n\n /**\n * Gets a ProjectActivityView by project id and the filtering of the Paginator\n *\n * @param {number} projectId\n * @param {number} pageNumber\n * @param {number} pageSize\n * @param {ActivityFetchType} [activityFetchType]\n * @return {Observable>}\n */\n getProjectActivityView$(\n projectId: number,\n pageNumber?: number,\n pageSize?: number,\n activityFetchType?: ActivityFetchType,\n ): Observable> {\n const url = `/Projects/${projectId}/Activity`;\n\n const options = new ListQueryOptions(\n pageNumber,\n pageSize,\n );\n\n const queryParameters = options.toHttpParams()\n .set('activityFetchType', activityFetchType);\n\n return this.request$('GET', url, null, queryParameters);\n }\n\n /**\n * Gets a ProjectActivityView by project id and the filtering of the Paginator\n *\n * @param {number} projectId\n * @param {number} workPackageId\n * @param {number} pageNumber\n * @param {number} pageSize\n * @param {ActivityFetchType} [activityFetchType]\n * @return {Observable>}\n */\n getWorkPackageActivityView$(\n projectId: number,\n workPackageId: number,\n pageNumber?: number,\n pageSize?: number,\n activityFetchType?: ActivityFetchType,\n ): Observable> {\n const url = `/Projects/${projectId}/Activity`;\n\n const options = new ListQueryOptions(\n pageNumber,\n pageSize,\n );\n\n const queryParameters = options.toHttpParams()\n .set('workPackageId', workPackageId)\n .set('activityFetchType', activityFetchType);\n\n return this.request$('GET', url, null, queryParameters);\n }\n\n getCurrentAdditionalSuppliers$(\n projectId: number,\n workPackageId: number,\n ): Observable> {\n const url = `/Projects/${projectId}/WorkPackages/CurrentAdditionalSuppliers`;\n\n const queryParameters = new CustomHttpParams({\n workPackageId,\n });\n\n return this.request$('GET', url, null, queryParameters);\n }\n\n getAdditionalSuppliers$(\n projectId: number,\n workPackageId: number,\n contractSupplierUnitId: number,\n excludedPairIds: string,\n ): Observable> {\n const url = `/Projects/${projectId}/WorkPackages/AdditionalSuppliers`;\n\n const queryParameters = new CustomHttpParams({\n workPackageId,\n contractSupplierUnitId,\n excludedPairIds,\n });\n\n return this.request$('GET', url, null, queryParameters);\n }\n\n getAvailableContracts$(\n projectId: number,\n wokpackageId?: number,\n wpCreatorId?: string,\n ): Observable {\n let url = `/projects/${projectId}/AvailableContracts`;\n if (wokpackageId !== undefined) {\n url += `/${wokpackageId}`;\n }\n if (wpCreatorId !== undefined) {\n url += `/${wpCreatorId}`;\n }\n\n return this.request$('GET', url).pipe(\n filter((event) => event.type === HttpEventType.Response),\n // eslint-disable-next-line arrow-body-style\n map((response: HttpResponse) => {\n const list: ContractDtoModel[] = [];\n response.body.forEach((item: any) => {\n list.push(ContractDtoModel.fromJSON(item));\n });\n return list;\n }),\n );\n }\n\n /**\n * Get the latest project import file's name for a given projectId\n *\n * @param {number} projectId\n * @return {Observable>} - Returns the latest file name, if any\n */\n getLatestImportFileForManuallyUpdate$(projectId: number): Observable> {\n const url = `/Projects/LatestImportFileForUpdate/${projectId}`;\n\n return this.request$('GET', url);\n }\n\n /**\n * Get the latest project import file's name for creating a new project\n * @return {Observable>} - Returns the latest file name, if any\n */\n getLatestImportFileForCreateNewProject$(): Observable> {\n const url = '/Projects/LatestImportFileForCreate';\n\n return this.request$('GET', url);\n }\n\n /**\n * Returns a link for downloading the created export file down.\n *\n * @return {Observable>}\n */\n getProjectExportList$(options: WorkPackageListOptions): Observable> {\n const url = '/WorkPackages/ExportList';\n\n const queryParameters = options.toHttpParams();\n\n return this.request$('GET', url, null, queryParameters);\n }\n\n /**\n * Imports a project file and returns a list of projects including their structure\n *\n * @param {File} file\n * @param {string} [sapNumber]\n * @return {Observable>}\n */\n postProjectsImport$(file: File | null, sapNumber?: string): Observable> {\n const url = '/Projects/Import';\n\n const body = obj2fd({\n file,\n sapNumber,\n });\n\n return this.request$('POST', url, body);\n }\n\n /**\n * Imports a project file and returns the project specified by SapNumber in the request\n * @param {File} file\n * @param {string} sapNumber\n * @return {Observable>}\n */\n postProjectsParseImportFile$(\n file: File | null,\n sapNumber: string,\n projectId: number,\n ): Observable> {\n const url = '/Projects/ParseImportFile';\n\n const body = obj2fd({\n file,\n sapNumber,\n projectId,\n });\n\n return this.request$('POST', url, body);\n }\n\n /**\n * Gets a list of all project types\n *\n * @return {Observable>}\n */\n getProjectTypes$(): Observable> {\n const url = '/Lookup/ProjectTypes';\n\n return this.request$('GET', url, null);\n }\n\n getUnitCostCentersByUnitId$(unitId: string): Observable> {\n if (!unitId) {\n console.warn('getUnitCostCentersByUnitId$ called without unitId');\n }\n const url = `/Lookup/UnitCostCenters`;\n\n const queryParameters = new CustomHttpParams({unitId});\n\n return this.request$('GET', url, null, queryParameters);\n }\n\n getUnitActivityTypesByCostCenter$(costCenter: string): Observable> {\n if (!costCenter) {\n console.warn('getUnitActivityTypesByCostCenter called without costCenter');\n }\n const url = `/Lookup/UnitActivityTypes`;\n\n const queryParameters = new CustomHttpParams({costCenter});\n\n return this.request$('GET', url, null, queryParameters);\n }\n\n getUnitActivityTypesByCostCenterAndUnitId$(unitId: string, costCenter: string): Observable> {\n if (!costCenter) {\n console.warn('getUnitActivityTypesByCostCenter called without costCenter');\n }\n const url = `/Lookup/UserUnitAssignmentActivityType`;\n\n const queryParameters = new CustomHttpParams({unitId, costCenter});\n\n return this.request$('GET', url, null, queryParameters);\n }\n\n /**\n * get a list of activity types for a supplierunit\n */\n getSupplierActivityTypes$(supplierUnitId: string): Observable> {\n const url = '/Lookup/SupplierActivityTypes';\n\n const queryParameters = new CustomHttpParams({supplierUnitId});\n\n return this.request$('GET', url, null, queryParameters);\n }\n\n /**\n * Gets a limited list of projects the unit coordinator has access to.\n */\n getProjectsForUnitCoordinator$(\n requestOptions: AvailableRequestRequestOptions,\n ): Observable> {\n const url = '/Projects/AvailableProjects';\n\n const queryParameters = new CustomHttpParams({\n limit: requestOptions.limit,\n filterString: requestOptions.filterString,\n });\n\n return this.request$('GET', url, null, queryParameters);\n }\n\n /**\n * Gets a limited list of projects the user has access to.\n */\n getProjectSelectors$(\n requestOptions: SelectorRequestOptions,\n ): Observable> {\n const url = '/Projects/ProjectSelectorProjects';\n\n const queryParameters = new CustomHttpParams({\n limit: requestOptions.limit,\n filterString: requestOptions.filterString,\n onlySubmitterProjects: requestOptions.onlySubmitterProjects,\n });\n\n return this.request$('GET', url, null, queryParameters);\n }\n\n /**\n * Gets a list of all coordinators of a given Unit for Confirming WP\n * @return {Observable>}\n */\n getUnitCoordinatorsForConfirmingWP$(unitId: number): Observable> {\n const url = `/Units/${unitId}/UnitCoordinatorForConfirmingWP`;\n\n return this.request$('GET', url, null);\n }\n\n /**\n * Gets a list of all coordinators of a given Unit\n * @return {Observable>}\n */\n getUnitCoordinators$(unitId: number): Observable> {\n const url = `/Units/${unitId}/UnitCoordinators`;\n\n return this.request$('GET', url, null);\n }\n\n /**\n * Gets a list of all units\n * @return {Observable>}\n */\n getUnits$(options?: ListQueryOptions): Observable> {\n const url = '/Units';\n\n const queryParameters = (options ? options.toHttpParams() : undefined);\n\n return this.request$('GET', url, null, queryParameters);\n }\n\n /**\n * Gets a list of L1 units\n * @return {Observable>}\n */\n getL1Units$(): Observable> {\n const url = '/Units/L1Units';\n\n return this.request$('GET', url, null);\n }\n\n /**\n * Gets a list of colors for a L1 unit\n * @return\n */\n getColorsByL1Unit$(unitId: number): Observable> {\n const url = `/Units/${unitId}/BackgroundColors`;\n\n return this.request$('GET', url, null);\n }\n\n /**\n * Updates existing background color definitions\n * Response and request are the same\n */\n putColors$(unitId: number, request: BackgroundColorsRequest): Observable> {\n const url = `/Units/${unitId}/BackgroundColors`;\n\n return this.request$('PUT', url, request);\n }\n\n /**\n * Gets the view response of the units view in the administration section\n * @return {Observable>}\n */\n getUnitsViewResponse$(): Observable> {\n const url = '/Units/UnitsViewResponse';\n\n return this.request$('GET', url, null);\n }\n\n /**\n * Gets a view response of a unit\n *\n * @param {number} unitId\n * @return {Observable>}\n */\n getUnitViewResponseByUnitId$(unitId: number): Observable> {\n const url = `/Units/${unitId}/UnitViewResponse`;\n\n return this.request$('GET', url, null);\n }\n\n /**\n * Gets a list of all non-juman resources\n * @return {Observable>}\n */\n getNonHumanResources$(options?: ListQueryOptions): Observable> {\n const url = '/NonHumanResources';\n\n const queryParameters = (options ? options.toHttpParams() : undefined);\n\n return this.request$('GET', url, null, queryParameters);\n }\n\n /**\n * Gets the view response of the non-human resource view in the administration section\n * @return {Observable>}\n */\n getNonHumanResourcesViewResponse$(id: string): Observable> {\n const url = `/NonHumanResources/${id}/NonHumanViewResponse`;\n\n return this.request$('GET', url, null);\n }\n\n /**\n * Creates a new non-human resource\n *\n * @param {UnitCreateRequest} request\n * @return {Observable>}\n */\n postNonHumanResource$(\n request: NonHumanResourceCreateRequest,\n ): Observable> {\n const url = '/NonHumanResources';\n\n return this.request$('POST', url, request);\n }\n\n /**\n * Updates an existing non-human resource\n *\n * @param {string} nonHumanResourceId\n * @param {NonHumanResourceUpdateRequest} request\n * @return {Observable>}\n */\n putNonHumanResource$(\n nonHumanResourceId: string,\n request: NonHumanResourceUpdateRequest,\n ): Observable> {\n const url = `/NonHumanResources/${nonHumanResourceId}`;\n\n return this.request$('PUT', url, request);\n }\n\n /**\n * Gets a single NHR by id.\n *\n * @param {string} userId\n * @return {Observable>}\n */\n getNonHumanResourceById$(nonHumanResourceId: string): Observable> {\n const url = `/NonHumanResources/${nonHumanResourceId}/ById`;\n\n return this.request$('GET', url, null);\n }\n\n /**\n * Creates a new unit\n *\n * @param {UnitCreateRequest} request\n * @return {Observable>}\n */\n postUnit$(request: UnitCreateRequest): Observable> {\n const url = '/Units';\n\n return this.request$('POST', url, request);\n }\n\n /**\n * Gets a list of all units\n *\n * @return {Observable>}\n */\n getUnitSelectors$(\n requestOptions: UnitSelectorRequestOptions,\n ): Observable> {\n const url = '/Units/UnitSelectorUnits';\n\n const queryParameters = new CustomHttpParams({\n unitFetchType: requestOptions.unitFetchType,\n limit: requestOptions.limit,\n includeChildren: requestOptions.includeChildren,\n filterString: requestOptions.filterString,\n date: requestOptions.date,\n });\n\n return this.request$('GET', url, null, queryParameters);\n }\n\n getAvailableUnitSelectors$(\n requestOptions: UnitSelectorAvailableRequestOptions,\n ): Observable> {\n const url = `/Projects/${requestOptions.projectId}/WorkPackages/AvailableUnitsForWorkPackage`;\n\n const queryParameters = new CustomHttpParams({\n ...requestOptions,\n });\n\n return this.request$('GET', url, null, queryParameters);\n }\n\n /**\n * Gets a single unit by ID\n *\n * @param {number} unitId\n * @return {Observable>}\n */\n getUnitByUnitId$(unitId: number): Observable> {\n const url = `/Units/${unitId}`;\n\n return this.request$('GET', url, null);\n }\n\n /**\n * A flag if the unit displays the full month or only a week\n */\n getIsMonthlyByUnitId$(unitId: number): Observable> {\n const url = `/Units/${unitId}/MonthlyView`;\n\n return this.request$('GET', url, null);\n }\n\n /**\n * Gets a single (slim) unit by ID\n */\n getUnitSlimByUnitId$(unitId: number): Observable> {\n const url = `/Units/Slim/${unitId}`;\n\n return this.request$('GET', url, null);\n }\n\n /**\n * Gets a list of defects for a unit.\n * If no unit id is provided, a default list of defects is provided.\n *\n * @param unitId\n */\n getUnitDefects$(unitId?: number): Observable> {\n const url = unitId != null ? `/Units/${unitId}/Defects` : '/Units/Defects';\n\n return this.request$('GET', url, null);\n }\n\n /**\n * Gets a list of the default non productive categories a unit has.\n *\n * @return {Observable>}\n */\n getDefaultNonProductiveCategories$(): Observable> {\n const url = '/Units/DefaultNonProductiveCategories';\n\n return this.request$('GET', url, null);\n }\n\n /**\n * Gets a unit's timesheet export template.\n * If no unit id is provided, a default template is provided.\n *\n * @param unitId\n */\n getUnitTimesheetExportTemplate$(unitId?: number): Observable> {\n const url = unitId != null ? `/Units/${unitId}/TimesheetExportTemplate` : '/Units/TimesheetExportTemplate';\n\n return this.request$('GET', url, null);\n }\n\n /**\n * Updates an existing unit\n *\n * @param {number} unitId\n * @param {UnitUpdateRequest} request\n * @return {Observable>}\n */\n putUnit$(unitId: number, request: UnitUpdateRequest): Observable> {\n const url = `/Units/${unitId}`;\n\n return this.request$('PUT', url, request);\n }\n\n /**\n * Disables the given unit\n *\n * @param {number} unitId\n * @return {Observable>}\n */\n disableUnit$(unitId: number): Observable> {\n const url = `/Units/${unitId}/Disable`;\n\n return this.request$('PUT', url);\n }\n\n /**\n * Gets a page of a list of filtered users\n */\n getUsers$(options: UserListQueryOptions): Observable> {\n const url = '/Users';\n\n const queryParameters = options.toHttpParams();\n\n return this.request$('GET', url, null, queryParameters);\n }\n\n getAvailableResourceUsers$(\n options: UserResourceListQueryOptions,\n ): Observable> {\n const url = '/Users/AvailableResources';\n\n const request = options.generateRequestModel();\n\n return this.request$('PUT', url, request);\n }\n\n getResponsibleUserCapacity$(\n projectId: number,\n workPackageId: number,\n year: number,\n week: number,\n numberOfWeeks: number,\n userId: string,\n ): Observable> {\n const url = `/Projects/${projectId}/WorkPackages/${workPackageId}/ResourcePlanning/${year}/${week}/NumberOfWeeks/${numberOfWeeks}/ResponsibleUser/${userId}`;\n\n return this.request$('GET', url);\n }\n\n getResponsibleResourceCapacity$(\n projectId: number,\n workPackageId: number,\n year: number,\n week: number,\n numberOfWeeks: number,\n userId: string,\n ): Observable> {\n const url = `/Projects/${projectId}/WorkPackages/${workPackageId}/ResourcePlanning/${year}/${week}/NumberOfWeeks/${numberOfWeeks}/NonHumanResource/${userId}`;\n\n return this.request$('GET', url);\n }\n\n /**\n * Creates a new user\n *\n * @param {UserCreateRequest} request\n * @return {Observable>}\n */\n postUser$(request: UserCreateRequest): Observable> {\n const url = '/Users';\n\n return this.request$('POST', url, request);\n }\n\n /**\n * Gets the view for users in the administration section\n *\n * @return {Observable>}\n */\n getUsersView$(): Observable> {\n const url = '/Users/UsersViewResponse';\n\n return this.request$('GET', url);\n }\n\n /**\n * Gets a single user by id.\n *\n * @param {string} userId\n * @return {Observable>}\n */\n getUserById$(userId: string): Observable> {\n const url = `/Users/${userId}/ById`;\n\n return this.request$('GET', url, null);\n }\n\n /**\n * Gets a single user by email address\n *\n * @param {string} email\n * @return {Observable>}\n */\n getUserByEmail$(email: string): Observable> {\n const url = `/Users/${email}`;\n\n return this.request$('GET', url, null);\n }\n\n /**\n * Gets a view for a user by email address\n *\n * @param {string} email\n * @return {Observable>}\n *\n * @TODO Check if getting user by EMAIL instead of ID is really required\n */\n getUserViewByEmail$(email: string): Observable> {\n const url = `/Users/${email}/UserViewResponse`;\n\n return this.request$('GET', url, null);\n }\n\n /**\n * Get User Recipiens of a Workpackage\n *\n * @param {number} projectId\n * @param {number} workPackageId\n * @param {WorkPackageStatus} to\n * @return {Observable>}\n */\n getWorkPackageTransitionInformation$(\n projectId: number,\n workPackageId: number,\n to: WorkPackageStatus,\n ): Observable> {\n const url = `/Projects/${projectId}/WorkPackages/${workPackageId}/TransitionInformation`;\n\n const queryParameters = new CustomHttpParams({\n newStatus: to,\n });\n\n return this.request$('GET', url, null, queryParameters);\n }\n\n /**\n * Gets a single AAD user by email address\n *\n * @param {string} email\n * @return {Observable>}\n */\n getAdUserByEmail$(email: string): Observable> {\n const url = `/Users/${email}/AADUser`;\n\n return this.request$('GET', url, null);\n }\n\n /**\n * Updates an existing user\n *\n * @param {string} userId\n * @param {UserUpdateRequest} request\n * @return {Observable>}\n */\n putUser$(userId: string, request: UserUpdateRequest): Observable> {\n const url = `/Users/${userId}`;\n\n return this.request$('PUT', url, request);\n }\n\n /**\n * Gets the currently authenticated user\n *\n * @return {Observable>}\n */\n getCurrentUser$(): Observable> {\n const url = '/Users/Me';\n\n return this.request$('GET', url, null);\n }\n\n /**\n * Gets another user\n *\n * @return {Observable>}\n */\n getSubstituteUser$(userId: string): Observable> {\n const url = '/Users/Me';\n const headers = new HttpHeaders({\n Mystique: userId,\n });\n\n return this.request$('GET', url, undefined, undefined, headers);\n }\n\n /**\n * Updates the timecard of a user.\n *\n * @param userId\n * @param year\n * @param week\n * @param request\n */\n putTimecard$(\n userId: string,\n year: number,\n week: number,\n request: TimecardSaveRequest,\n ): Observable> {\n const url = `/Users/${userId}/Timecard/${year}/${week}`;\n\n return this.request$('PUT', url, request);\n }\n\n /**\n * Updates the timecard of a user.\n *\n * @param userId\n * @param year\n * @param monthNr\n * @param request\n */\n putTimecardMonth$(\n userId: string,\n year: number,\n monthNr: number,\n request: TimecardSaveRequest,\n ): Observable> {\n const url = `/Users/${userId}/Timecard/Monthly/${year}/${monthNr}`;\n\n return this.request$('PUT', url, request);\n }\n\n /**\n * Cancels the planning of a user.\n *\n * @param userId\n * @param year\n * @param week\n * @param request\n */\n cancelUserPlanning$(userId: string, request: PlanningSaveRequest): Observable> {\n const url = `/Users/${userId}/Planning/Cancel`;\n\n return this.request$('PUT', url, request);\n }\n\n /**\n * Confirms the planning of a user.\n *\n * @param userId\n * @param year\n * @param week\n * @param request\n */\n confirmUserPlanning$(userId: string, request: PlanningSaveRequest): Observable> {\n const url = `/Users/${userId}/Planning/Confirm`;\n\n return this.request$('PUT', url, request);\n }\n\n /**\n * Saves the planning of a NHR.\n *\n * @param nonHumanResourceId\n * @param year\n * @param week\n * @param request\n */\n saveNonHumanResourcePlanning$(\n nonHumanResourceId: string,\n request: PlanningSaveRequest,\n ): Observable> {\n const url = `/NonHumanResource/${nonHumanResourceId}/Planning/Save`;\n\n return this.request$('PUT', url, request);\n }\n\n /**\n * Confirms the planning of a NHR.\n *\n * @param nonHumanResourceId\n * @param year\n * @param week\n * @param request\n */\n confirmNonHumanResourcePlanning$(\n nonHumanResourceId: string,\n request: PlanningSaveRequest,\n ): Observable> {\n const url = `/NonHumanResource/${nonHumanResourceId}/Planning/Confirm`;\n\n return this.request$('PUT', url, request);\n }\n\n /**\n * Cancels the planning of a NHR.\n *\n * @param nonHumanResourceId\n * @param year\n * @param week\n * @param request\n */\n cancelNonHumanResourcePlanning$(\n nonHumanResourceId: string,\n request: PlanningSaveRequest,\n ): Observable> {\n const url = `/NonHumanResource/${nonHumanResourceId}/Planning/Cancel`;\n\n return this.request$('PUT', url, request);\n }\n\n /**\n * Gets a timecard of a particular week of a user.\n *\n * @param userId\n * @param year\n * @param week\n */\n getTimecard$(\n userId: string,\n year: number,\n week: number,\n isMyTimecard: boolean,\n timecardFilters?: CollappFilterDropdownListRadioSetting[],\n ): Observable> {\n const url = `${environment.apiEndpoint}/Users/${userId}/Timecard/${year}/${week}`;\n\n let queryParameters = new HttpParams();\n queryParameters = queryParameters.set('isMyTimecard', isMyTimecard);\n\n if (timecardFilters && timecardFilters.length) {\n queryParameters = this.makeHeaderFilterRequestParams(timecardFilters, queryParameters);\n }\n\n return this.doHttpRequest$('GET', url, null, queryParameters);\n }\n\n /**\n * Gets a timecard of a particular month of a user.\n *\n * @param userId\n * @param year\n * @param monthNumber 1-12\n */\n getTimecardMonth$(\n userId: string,\n year: number,\n monthNumber: number,\n isMyTimecard: boolean,\n timecardFilters?: CollappFilterDropdownListRadioSetting[],\n ): Observable> {\n const url = `${environment.apiEndpoint}/Users/${userId}/Timecard/Monthly/${year}/${monthNumber}`;\n\n let queryParameters = new HttpParams();\n queryParameters = queryParameters.set('isMyTimecard', isMyTimecard);\n\n if (timecardFilters && timecardFilters.length) {\n queryParameters = this.makeHeaderFilterRequestParams(timecardFilters, queryParameters);\n }\n\n return this.doHttpRequest$('GET', url, null, queryParameters);\n }\n\n /**\n * Gets planning of a particular period of a user.\n */\n getUserPlanning$(\n userId: string,\n isoWeekYear: number,\n isoWeek: number,\n numberOfWeeks?: number,\n headerFilters?: CollappFilterDropdownListRadioSetting[],\n ): Observable> {\n const url = `${environment.apiEndpoint}/Users/${userId}/Planning/${isoWeekYear}/${isoWeek}`;\n\n let queryParameters = new HttpParams();\n if (numberOfWeeks) {\n queryParameters = queryParameters.set('numberOfWeeks', numberOfWeeks.toString());\n }\n\n if (headerFilters && headerFilters.length) {\n queryParameters = this.makeHeaderFilterRequestParams(headerFilters, queryParameters);\n }\n\n return this.doHttpRequest$('GET', url, null, queryParameters);\n }\n\n /**\n * Gets planning of a particular period of a NHR.\n */\n getNonHumanResourcePlanning$(\n nonHumanResourceId: string,\n isoWeekYear: number,\n isoWeek: number,\n numberOfWeeks?: number,\n headerFilters?: CollappFilterDropdownListRadioSetting[],\n ): Observable> {\n const url = `${environment.apiEndpoint}/NonHumanResource/${nonHumanResourceId}/Planning/${isoWeekYear}/${isoWeek}`;\n\n let queryParameters = new HttpParams();\n if (numberOfWeeks) {\n queryParameters = queryParameters.set('numberOfWeeks', numberOfWeeks.toString());\n }\n\n if (headerFilters && headerFilters.length) {\n queryParameters = this.makeHeaderFilterRequestParams(headerFilters, queryParameters);\n }\n\n return this.doHttpRequest$('GET', url, null, queryParameters);\n }\n\n /**\n * Gets planning of a particular week of a unit.\n */\n getUnitPlanning$(\n unitId: number,\n request: UnitPlanningViewRequest,\n ): Observable> {\n const url = `/Planning/Unit/${unitId}`;\n\n return this.request$('PUT', url, request);\n }\n\n /**\n * Gets planning of a particular time period of a project.\n */\n getProjectPlanning$(\n projectId: number,\n request: ProjectPlanningViewRequestModel,\n ): Observable> {\n const url = `${environment.apiEndpoint}/projects/${projectId}/planning`;\n const queryParameters = request.toHttpParams();\n\n return this.doHttpRequest$('GET', url, null, queryParameters);\n }\n\n /**\n * Gets a list of users available in a given timeframe for the unit planning.\n */\n getUserPlanningResources$(\n unitId: number,\n name: string,\n isoWeekYear: number,\n isoWeek: number,\n numberOfWeeks: number,\n isForWpCreator?: boolean,\n ): Observable> {\n const url = `/Planning/${unitId}/PlanningResources/`;\n\n const queryParameters = new CustomHttpParams({\n name,\n year: isoWeekYear,\n startWeek: isoWeek,\n weekNumber: numberOfWeeks,\n isForWpCreator,\n });\n\n return this.request$('GET', url, null, queryParameters);\n }\n\n /**\n * Gets Weeks by user year week and amount.\n *\n * @param userId\n * @param year\n * @param week\n * @param amount\n */\n getTimecardWeeks$(\n userId: string,\n year: number,\n week: number,\n amount: number,\n ): Observable> {\n const url = `/Users/${userId}/Timecard/WeekNavigator/${year}/${week}/NumberOfWeeks/${amount}`;\n\n return this.request$('GET', url, null);\n }\n\n getTimecardMonths$(\n userId: string,\n year: number,\n month: number,\n amount: number,\n ): Observable> {\n const url = `/Users/${userId}/Timecard/MonthNavigator/${year}/${month}/NumberOfMonths/${amount}`;\n\n return this.request$('GET', url, null);\n }\n\n /**\n * Updates the states of users timecards.\n */\n putTimecardStatus$(\n year: number,\n week: number,\n request: TimecardStatusUpdateRequest,\n ): Observable> {\n const url = `/Users/Timecard/${year}/${week}/UpdateTimecardStatus`;\n\n return this.request$('PUT', url, request);\n }\n\n /**\n * Updates the states of users timecards.\n */\n putTimecardStatusMonth$(\n year: number,\n monthNr: number,\n request: TimecardStatusUpdateRequest,\n ): Observable> {\n const url = `/Users/Timecard/${year}/${monthNr}/UpdateMonthlyTimecardStatus`;\n\n return this.request$('PUT', url, request);\n }\n\n /**\n * Gets a timecard of a particular month of a user.\n */\n getTimesheetMonth$(\n unitId: number,\n year: number,\n monthNumber: number,\n withCrossUtilize: boolean,\n isSubmitterView: boolean | undefined,\n ): Observable> {\n const url = `/Units/${unitId}/Timesheets/Monthly/${year}/${monthNumber}`;\n\n const params = new CustomHttpParams({\n withCrossUtilize,\n isSubmitterView,\n });\n\n return this.request$('GET', url, null, params);\n }\n\n /**\n * Gets a timecard of a particular week of a user.\n */\n getTimesheet$(\n unitId: number,\n year: number,\n week: number,\n withCrossUtilize: boolean,\n isSubmitterView: boolean | undefined,\n ): Observable> {\n const url = `/Units/${unitId}/Timesheets/${year}/${week}`;\n\n const params = new CustomHttpParams({\n withCrossUtilize,\n isSubmitterView,\n });\n\n return this.request$('GET', url, null, params);\n }\n\n /**\n * Gets Weeks by user year week and amount.\n *\n * @param unitId\n * @param year\n * @param week\n * @param amount\n */\n getTimesheetWeeks$(\n unitId: number,\n year: number,\n week: number,\n amount: number,\n ): Observable> {\n const url = `/Units/${unitId}/Timesheets/WeekNavigator/${year}/${week}/NumberOfWeeks/${amount}`;\n\n return this.request$('GET', url, null);\n }\n\n getTimesheetMonths$(\n unitId: number,\n year: number,\n month: number,\n amount: number,\n ): Observable> {\n const url = `/Units/${unitId}/Timesheets/MonthNavigator/${year}/${month}/NumberOfMonths/${amount}`;\n\n return this.request$('GET', url, null);\n }\n\n /**\n * Generates an Excel file export of the given timesheet.\n */\n getTimesheetExport$(\n unitId: number,\n year: number,\n week: number,\n withCrossUtilize: boolean,\n templateView: TimesheetExportViewType,\n ): Observable> {\n const url = `/Units/${unitId}/Timesheets/${year}/${week}/Report/${templateView}`;\n\n const params = new CustomHttpParams({\n withCrossUtilize,\n });\n\n return this.request$('GET', url, null, params);\n }\n\n /**\n * Generates an Excel file export of the given timecard.\n */\n getTimecardExport$(userId: string, year: number, week: number): Observable> {\n const url = `/Users/${userId}/Timecard/${year}/${week}/Report`;\n\n return this.request$('GET', url, null);\n }\n\n /**\n * Gets a page of a list of filtered roles\n *\n * @param {number} [pageNumber]\n * @param {number} [pageSize]\n * @param {any} [columnFilters]\n * @param {string} [sortColumn]\n * @param {SortDirection} [sortDirection]\n * @return {Observable>}\n */\n getRoles$(\n pageNumber?: number,\n pageSize?: number,\n columnFilters?: any,\n sortColumn?: string,\n sortDirection?: SortDirection,\n ): Observable> {\n const url = '/Users/Roles';\n\n const options = new ListQueryOptions(pageNumber, pageSize, columnFilters, sortColumn, sortDirection);\n\n const queryParameters = options.toHttpParams();\n\n return this.request$('GET', url, null, queryParameters);\n }\n\n /**\n * Gets the time zone list.\n *\n * @return {Observable>}\n */\n getTimeZones$(): Observable> {\n const url = '/Users/Timezones';\n\n return this.request$('GET', url, null);\n }\n\n getCalendarLinks$(): Observable> {\n const url = '/Users/CalendarLinks';\n\n return this.request$('GET', url, null);\n }\n\n /**\n * Updates the user's preferences.\n *\n * @return {Observable>}\n */\n putUserPreferences$(request: UserPreferencesUpdateRequest): Observable> {\n const url = '/Users/Preferences';\n\n return this.request$('PUT', url, request);\n }\n\n /**\n * Gets the currently used database server name\n *\n * @return {Observable>}\n */\n getDBCreationDate$(): Observable> {\n const url = '/Lookup/DBCreationDate';\n\n return this.request$('GET', url, null);\n }\n\n /**\n * Updates the users' settings.\n *\n * @return {Observable>}\n */\n putUserSettings$(request: UserSettingRequest): Observable> {\n const url = '/Users/UserSettings';\n\n return this.request$('PUT', url, request);\n }\n\n /**\n * Gets a page of a list of filtered work packages\n */\n getWorkPackages$(options: WorkPackageListOptions): Observable> {\n const url = '/WorkPackages';\n\n const queryParameters = options.toHttpParams();\n\n return this.request$('GET', url, null, queryParameters);\n }\n\n /**\n * Gets a page of a list of filtered work packages\n */\n getBasicWorkPackages$(\n options: BasicWorkpackagesRequestOptions,\n ): Observable> {\n const url = '/WorkPackages/Basic';\n\n const queryParameters = new CustomHttpParams({\n limit: options.limit,\n filterString: options.filterString,\n projectId: options.projectId,\n });\n\n return this.request$('GET', url, null, queryParameters);\n }\n\n /**\n * Gets a page of a list of filtered work packages\n */\n getBasicWorkPackageDetail$(\n projectId: number,\n workPackageId: number,\n userId: string,\n ): Observable> {\n const url = `/Projects/${projectId}/WorkPackages/${workPackageId}/Basic`;\n\n const queryParameters = new CustomHttpParams({\n userId,\n });\n\n return this.request$('GET', url, null, queryParameters);\n }\n\n /**\n * Gets a list of filtered Questions\n */\n getQuestions$(options: UnitQuestionsListOptions): Observable> {\n const url = '/Questions';\n\n const queryParameters = options.toHttpParams();\n\n return this.request$('GET', url, null, queryParameters);\n }\n\n /**\n * Gets a list of work packages for a given level\n *\n * @param {number} projectId\n * @param {number} levelId\n * @return {Observable>}\n */\n getProjectLevelWorkpackages$(\n projectId: number,\n levelId: number,\n ): Observable> {\n const url = `/Projects/${projectId}/Levels/${levelId}/WorkPackages`;\n\n return this.request$('GET', url, null);\n }\n\n /**\n * Gets a list of work packages for a given project\n *\n * @param {number} projectId\n * @return {Observable>}\n */\n getProjectWorkpackages$(\n projectId: number,\n orderByLastUpdated: boolean = false,\n filters: ProjectStructureFiltersSettingsModel | null = null,\n ): Observable> {\n const url = `${environment.apiEndpoint}/Projects/${projectId}/WorkPackages`;\n\n // we avoid using CustomHttpParams, it double-encode values and deprecated\n // customHttpParams was originally to avoid angular bug, which is fixed since 2017\n let queryParameters = new HttpParams();\n\n if (orderByLastUpdated) {\n queryParameters = queryParameters.set('orderByLastUpdated', orderByLastUpdated);\n }\n if (filters?.wpStatus?.length) {\n queryParameters = queryParameters.set('wp-status-filter-list', filters.wpStatus?.join(','));\n if (filters?.wpStatusType) {\n queryParameters = queryParameters.set('wp-status-filter-mode', filters.wpStatusType);\n }\n }\n if (filters?.wpSorting) {\n queryParameters = queryParameters.set('wp-sort-field', filters.wpSorting);\n if (filters?.wpSortDirection) {\n queryParameters = queryParameters.set('wp-sort-direction', filters.wpSortDirection);\n }\n }\n\n return this.doHttpRequest$('GET', url, null, queryParameters);\n }\n\n /**\n * Gets a WorkPackageViewResponse by project id and work package id\n *\n * @param {number} projectId\n * @param {number} workPackageId\n * @return {Observable>}\n */\n getWorkPackageView$(projectId: number, workPackageId: number): Observable> {\n const url = `/Projects/${projectId}/WorkPackages/${workPackageId}`;\n\n return this.request$('GET', url);\n }\n\n /**\n * Fetches a list of attachments of a specific type from a work package.\n *\n * @param projectId\n * @param workPackageId\n * @param type\n */\n getWorkPackageAttachments$(\n projectId: number,\n workPackageId: number,\n type: DocumentType,\n ): Observable> {\n const url = `/Projects/${projectId}/WorkPackages/${workPackageId}/Attachments`;\n\n const queryParameters = new CustomHttpParams({\n type,\n });\n\n return this.request$('GET', url, null, queryParameters);\n }\n\n /**\n * Gets the view for the resource planning of a work package.\n */\n getWorkPackageResourcePlanningView$(\n projectId: number,\n workPackageId: number,\n year: number,\n week: number,\n numberOfWeeks: number,\n ): Observable> {\n const url = `/Projects/${projectId}/WorkPackages/${workPackageId}/ResourcePlanning/${year}/${week}/NumberOfWeeks/${numberOfWeeks}`;\n\n return this.request$('GET', url);\n }\n\n /**\n * Gets the Users which have a related Role like WP-Creator, WP-Unit-Coordinator etc.\n *\n * @param {number} projectId\n * @param {number} workPackageId\n * @param {number} questionId\n * @return {Observable>}\n */\n getQuestionUserNotificationRecipients$(\n projectId: number,\n workPackageId: number,\n questionId: number | null,\n questionAction: QuestionAction,\n ): Observable> {\n let url = '';\n if (questionId != null && questionId > 0) {\n url = `/Projects/${projectId}/WorkPackages/${workPackageId}/Questions/${questionId}/UsersForNotification/${questionAction}`;\n } else {\n url = `/Projects/${projectId}/WorkPackages/${workPackageId}/Questions/UsersForNotification/${questionAction}`;\n }\n\n return this.request$('GET', url);\n }\n\n /**\n * Gets a page of a list of questions\n *\n * @param {number} projectId\n * @param {number} workPackageId\n * @param {number} [pageNumber]\n * @param {number} [pageSize]\n * @param {WorkPackageQuestionColumnFilters} [columnFilters]\n * @param {number} [questionId]\n * @return {Observable>}\n */\n getWorkPackageQuestions$(\n projectId: number,\n workPackageId: number,\n pageNumber?: number,\n pageSize?: number,\n columnFilters?: WorkPackageQuestionColumnFilters,\n questionId?: number,\n ): Observable> {\n let url = '';\n if (questionId != null) {\n url = `/Projects/${projectId}/WorkPackages/${workPackageId}/Questions/${questionId}`;\n } else {\n url = `/Projects/${projectId}/WorkPackages/${workPackageId}/Questions`;\n }\n\n const options = new ListQueryOptions(pageNumber, pageSize, columnFilters);\n\n const queryParameters = options.toHttpParams();\n\n return this.request$('GET', url, null, queryParameters);\n }\n\n /**\n * Updates an existing Work Package\n *\n * @param {number} projectId\n * @param {number} workPackageId\n * @param {WorkPackageUpdateRequest} request\n * @returns {Observable>}\n */\n putWorkPackage$(\n projectId: number,\n workPackageId: number,\n request: WorkPackageUpdateRequest,\n ): Observable> {\n const url = `/Projects/${projectId}/WorkPackages/${workPackageId}`;\n\n return this.request$('PUT', url, request);\n }\n\n updateAdditionalSuppliers$(\n projectId: number,\n workPackageId: number,\n request: AdditionalSuppliersUpdateRequest,\n ): Observable> {\n const url = `/Projects/${projectId}/WorkPackages/${workPackageId}/UpdateAdditionalSuppliers`;\n\n return this.request$('PUT', url, request);\n }\n\n /**\n * Updates an existing Work Package\n *\n * @param {number} originalProjectId\n * @param {number} originalWorkPackageId\n * @param {WorkPackageUpdateRequest} request\n * @returns {Observable>}\n */\n duplicateWorkPackage$(\n originalProjectId: number,\n originalWorkPackageId: number,\n request: WorkPackageDuplicateRequest,\n ): Observable> {\n const url = `/Projects/${originalProjectId}/WorkPackages/${originalWorkPackageId}/Duplicate`;\n\n return this.request$('POST', url, request);\n }\n\n moveWorkPackage$(\n originalProjectId: number,\n originalWorkPackageId: number,\n request: WorkPackageMoveRequest,\n ): Observable> {\n const url = `/Projects/${originalProjectId}/WorkPackages/${originalWorkPackageId}/Move`;\n\n return this.request$('PUT', url, request);\n }\n\n /**\n * Deletes a specific Work Package\n *\n * @param {number} projectId\n * @param {number} workPackageId\n * @returns {Observable>}\n */\n deleteWorkPackage$(projectId: number, workPackageId: number): Observable> {\n const url = `/Projects/${projectId}/WorkPackages/${workPackageId}`;\n\n return this.request$('DELETE', url, null);\n }\n\n /**\n * Creates a new Work Package\n *\n * @param {number} projectId\n * @param {WorkPackageCreateRequest} request\n * @returns {Observable>}\n */\n postWorkPackage$(\n projectId: number,\n request: WorkPackageCreateRequest,\n ): Observable> {\n const url = `/Projects/${projectId}/WorkPackages`;\n\n return this.request$('POST', url, request);\n }\n\n /**\n * Post data to create ad-hoc workpackage\n * @param request\n * @returns\n */\n postAdhocWorkPackage$(\n requestPayload: AdhocWorkpackageRequestModel,\n ): Observable> {\n const url = '/CreateAdHoc';\n return this.request$('POST', url, requestPayload);\n }\n\n /**\n * Confirms the resource planning of a work package.\n *\n * @param projectId\n * @param workPackageId\n * @param request\n */\n confirmWorkPackageResourcePlanning$(\n projectId: number,\n workPackageId: number,\n request: WorkPackageResourcePlanningUpdateRequest,\n ): Observable> {\n const url = `/Projects/${projectId}/WorkPackages/${workPackageId}/ResourcePlanning/Confirm`;\n\n return this.request$('PUT', url, request);\n }\n\n /**\n * Saves the resource planning of a work package.\n *\n * @param projectId\n * @param workPackageId\n * @param request\n */\n saveWorkPackageResourcePlanning$(\n projectId: number,\n workPackageId: number,\n request: WorkPackageResourcePlanningUpdateRequest,\n ): Observable> {\n const url = `/Projects/${projectId}/WorkPackages/${workPackageId}/ResourcePlanning/Save`;\n\n return this.request$('PUT', url, request);\n }\n\n /**\n * Cancels the resource planning of a work package.\n *\n * @param projectId\n * @param workPackageId\n * @param request\n */\n cancelWorkPackageResourcePlanning$(\n projectId: number,\n workPackageId: number,\n request: OldPlannedResourcesRequest,\n ): Observable> {\n const url = `/Projects/${projectId}/WorkPackages/${workPackageId}/ResourcePlanning/Cancel`;\n\n return this.request$('PUT', url, request);\n }\n\n /**\n * Updates a specific Work Package status to Forecasted\n *\n * @param {number} projectId\n * @param {number} workPackageId\n * @param {WorkPackageUpdateStatusRequest} request\n * @return {Observable>}\n */\n putWorkPackageStatusToForecasted$(\n projectId: number,\n workPackageId: number,\n request: WorkPackageUpdateStatusRequest,\n ): Observable> {\n const url = `/Projects/${projectId}/WorkPackages/${workPackageId}/UpdateToForecasted`;\n\n return this.request$('PUT', url, request);\n }\n\n /**\n * Updates a specific work package status to Draft\n *\n * @param {number} projectId\n * @param {number} workPackageId\n * @param {WorkPackageUpdateStatusRequest} request\n * @return {Observable>}\n */\n putWorkPackageStatusToDraft$(\n projectId: number,\n workPackageId: number,\n request: WorkPackageUpdateStatusRequest,\n ): Observable> {\n const url = `/Projects/${projectId}/WorkPackages/${workPackageId}/ReturnToDraft`;\n\n return this.request$('PUT', url, request);\n }\n\n /**\n * Updates a specific work package status to Issued\n *\n * @param {number} projectId\n * @param {number} workPackageId\n * @param {WorkPackageUpdateStatusRequest} request\n * @return {Observable>}\n */\n putWorkPackageStatusToIssued$(\n projectId: number,\n workPackageId: number,\n request: WorkPackageUpdateStatusRequest,\n ): Observable> {\n const url = `/Projects/${projectId}/WorkPackages/${workPackageId}/UpdateToIssued`;\n\n return this.request$('PUT', url, request);\n }\n\n /**\n * Updates a specific work package status to InProgress\n *\n * @param {number} projectId\n * @param {number} workPackageId\n * @param {WorkPackageCloseRequest} request\n * @return {Observable>}\n */\n putWorkPackageStatusToClosed$(\n projectId: number,\n workPackageId: number,\n request: WorkPackageCloseRequest,\n ): Observable> {\n const url = `/Projects/${projectId}/WorkPackages/${workPackageId}/UpdateToClosed`;\n\n return this.request$('PUT', url, request);\n }\n\n /**\n * Updates a specific work package status to InProgress\n *\n * @param {number} projectId\n * @param {number} workPackageId\n * @param {WorkPackageUpdateStatusRequest} request\n * @return {Observable>}\n */\n putWorkPackageStatusToInProgress$(\n projectId: number,\n workPackageId: number,\n request: WorkPackageUpdateStatusRequest,\n ): Observable> {\n const url = `/Projects/${projectId}/WorkPackages/${workPackageId}/UpdateToInProgress`;\n\n return this.request$('PUT', url, request);\n }\n\n /**\n * Self-assign a specific work package\n *\n * @param {number} projectId\n * @param {number} workPackageId\n * @param {WorkPackageUpdateStatusRequest} request\n * @return {Observable>}\n */\n selfAssignWorkPackage$(\n projectId: number,\n workPackageId: number,\n request: WorkPackageUpdateStatusRequest,\n ): Observable> {\n const url = `/Projects/${projectId}/WorkPackages/${workPackageId}/SelfAssign`;\n\n return this.request$('PUT', url, request);\n }\n\n /**\n * Updates a specific work package status to Confirmed\n *\n * @param {number} projectId\n * @param {number} workPackageId\n * @param {WorkPackageUpdateStatusRequest} request\n * @return {Observable>}\n */\n putWorkPackageStatusToConfirmed$(\n projectId: number,\n workPackageId: number,\n request: WorkPackageUpdateStatusRequest,\n ): Observable> {\n const url = `/Projects/${projectId}/WorkPackages/${workPackageId}/UpdateToConfirmed`;\n\n return this.request$('PUT', url, request);\n }\n\n /**\n * Updates a specific work package status to On Hold\n *\n * @param {number} projectId\n * @param {number} workPackageId\n * @param {WorkPackageUpdateStatusRequest} request\n * @return {Observable>}\n */\n putWorkPackageStatusToOnHold$(\n projectId: number,\n workPackageId: number,\n request: WorkPackageUpdateStatusRequest,\n ): Observable> {\n const url = `/Projects/${projectId}/WorkPackages/${workPackageId}/UpdateToOnHold`;\n\n return this.request$('PUT', url, request);\n }\n\n /**\n * Updates a specific work package status to Quality Assurance\n *\n * @param {number} projectId\n * @param {number} workPackageId\n * @param {WorkPackageUpdateStatusRequest} request\n * @return {Observable>}\n */\n putWorkPackageStatusToQualityAssurance$(\n projectId: number,\n workPackageId: number,\n request: WorkPackageUpdateStatusRequest,\n ): Observable> {\n const url = `/Projects/${projectId}/WorkPackages/${workPackageId}/UpdateToQualityAssurance`;\n\n return this.request$('PUT', url, request);\n }\n\n /**\n * Upload output Documents for Workpackage Detail\n *\n * @param {number} projectId\n * @param {number} workPackageId\n * @param {WorkPackageUploadOutputDocumentsRequest} request\n * @return {Observable>}\n */\n postOutputDocuments$(\n projectId: number,\n workPackageId: number,\n request: WorkPackageUploadOutputDocumentsRequest,\n ): Observable> {\n const url = `/Projects/${projectId}/WorkPackages/${workPackageId}/OutputDocuments`;\n\n return this.request$('POST', url, request);\n }\n\n /**\n * Create a new rework entry and do the work package transition\n *\n * @param {number} projectId\n * @param {WorkPackageReworkCreateRequest} request\n * @return {Observable>}\n */\n postWorkPackageRework$(\n projectId: number,\n request: WorkPackageReworkCreateRequest,\n ): Observable> {\n const url = `/Projects/${projectId}/WorkPackages/${request.workPackageId}/Rework`;\n\n return this.request$('POST', url, request);\n }\n\n /**\n * Create a new feedback entry\n *\n * @param {number} projectId\n * @param {FeedbackCreateRequest} request\n * @return {Observable>}\n */\n postFeedback$(projectId: number, request: FeedbackCreateRequest): Observable> {\n const url = `/Projects/${projectId}/WorkPackages/${request.workPackageId}/Feedback`;\n\n return this.request$('POST', url, request);\n }\n\n /**\n * Updates a specific work package status to Scope Change and creates the related scope change\n *\n * @param {number} projectId\n * @param {number} workPackageId\n * @param {ScopeChangeCreateRequest} request\n * @return {Observable>}\n */\n postWorkPackageScopeChange$(\n projectId: number,\n workPackageId: number,\n request: ScopeChangeCreateRequest,\n ): Observable> {\n const url = `/Projects/${projectId}/WorkPackages/${workPackageId}/ScopeChange`;\n\n return this.request$('POST', url, request);\n }\n\n /**\n * Updates an existing scope change\n *\n * @param {number} projectId\n * @param {number} workPackageId\n * @param {number} scopeChangeId\n * @param {ScopeChangeUpdateRequest} request\n * @return {Observable>}\n */\n putWorkPackageScopeChange$(\n projectId: number,\n workPackageId: number,\n scopeChangeId: number,\n request: ScopeChangeUpdateRequest,\n ): Observable> {\n const url = `/Projects/${projectId}/WorkPackages/${workPackageId}/ScopeChange/${scopeChangeId}`;\n\n return this.request$('PUT', url, request);\n }\n\n /**\n * Deletes an existing scope change\n *\n * @param {number} projectId\n * @param {number} workPackageId\n * @param {number} scopeChangeId\n * @return {Observable>}\n */\n deleteWorkPackageScopeChange$(\n projectId: number,\n workPackageId: number,\n scopeChangeId: number,\n ): Observable> {\n const url = `/Projects/${projectId}/WorkPackages/${workPackageId}/ScopeChange/${scopeChangeId}`;\n\n return this.request$('DELETE', url, null);\n }\n\n /**\n * Updates a specific work package status to Ready For Scope Change Approval\"\n *\n * @param {number} projectId\n * @param {number} workPackageId\n * @param {WorkPackageUpdateStatusRequest} request\n * @return {Observable>}\n */\n putWorkPackageStatusToReadyForScopeChangeApproval$(\n projectId: number,\n workPackageId: number,\n request: WorkPackageUpdateStatusRequest,\n ): Observable> {\n const url = `/Projects/${projectId}/WorkPackages/${workPackageId}/UpdateToReadyForScopeChangeApproval`;\n\n return this.request$('PUT', url, request);\n }\n\n /**\n * Updates a specific work package status to Ready to Resume Work\n *\n * @param {number} projectId\n * @param {number} workPackageId\n * @param {SuspensionCreateRequest} request\n * @return {Observable>}\n */\n putWorkPackageStatusToReadyToResumeWork$(\n projectId: number,\n workPackageId: number,\n request: SuspensionCreateRequest,\n ): Observable> {\n const url = `/Projects/${projectId}/WorkPackages/${workPackageId}/UpdateToReadyToResumeWork`;\n\n return this.request$('PUT', url, request);\n }\n\n /**\n * Updates a specific work package status to ScopeChange\n *\n * @param {number} projectId\n * @param {number} workPackageId\n * @param {WorkPackageUpdateStatusRequest} request\n * @return {Observable>}\n */\n putWorkPackageStatusToScopeChange$(\n projectId: number,\n workPackageId: number,\n request: WorkPackageUpdateStatusRequest,\n ): Observable> {\n const url = `/Projects/${projectId}/WorkPackages/${workPackageId}/UpdateToScopeChange`;\n\n return this.request$('PUT', url, request);\n }\n\n /**\n * Updates a specific work package status to Ready for Approval\"\n *\n * @param {number} projectId\n * @param {number} workPackageId\n * @param {WorkPackageUpdateStatusRequest} request\n * @return {Observable>}\n */\n putWorkPackageStatusToReadyForApproval$(\n projectId: number,\n workPackageId: number,\n request: WorkPackageUpdateStatusRequest,\n ): Observable> {\n const url = `/Projects/${projectId}/WorkPackages/${workPackageId}/UpdateToReadyForApproval`;\n\n return this.request$('PUT', url, request);\n }\n\n /**\n * Updates submitter settings\n *\n * @param {number} projectId\n * @param {number} workPackageId\n * @param {WorkPackageSubmitterSettingsUpdateRequest} request\n * @return {Observable>}\n */\n putWorkPackageSubmitterSettings$(\n projectId: number,\n workPackageId: number,\n request: WorkPackageSubmitterSettingsUpdateRequest,\n ): Observable> {\n const url = `/Projects/${projectId}/WorkPackages/${workPackageId}/UpdateSubmitterSettings`;\n\n return this.request$('PUT', url, request);\n }\n\n /**\n * Updates supplier settings\n *\n * @param {number} projectId\n * @param {number} workPackageId\n * @param {WorkPackageSupplierSettingsUpdateRequest} request\n * @return {Observable>}\n */\n putWorkPackageSupplierSettings$(\n projectId: number,\n workPackageId: number,\n request: WorkPackageSupplierSettingsUpdateRequest,\n ): Observable> {\n const url = `/Projects/${projectId}/WorkPackages/${workPackageId}/UpdateSupplierSettings`;\n\n return this.request$('PUT', url, request);\n }\n\n /**\n * Fetches the dashboard view.\n *\n * @return {Observable>}\n */\n getDashboard$(): Observable> {\n const url = '/Dashboard';\n\n return this.request$('GET', url, null);\n }\n\n /**\n * Fetches the latest projects of a given user for display on the dashboard view.\n *\n * @param userId\n * @return {Observable>}\n */\n getDashboardProjects$(userId: string): Observable> {\n const url = `/Dashboard/Projects/${userId}`;\n\n return this.request$('GET', url, null);\n }\n\n /**\n * Fetches the latest work packages of a given user for display on the dashboard view,\n * filtered by their status.\n *\n * @param userId\n * @param status\n * @param forSupplierUnitCoordinator\n * @return {Observable>}\n */\n getDashboardWorkPackages$(\n userId: string,\n status: WorkPackageStatus[],\n viewTypes: DashboardWorkPackageViewType[],\n forSupplierUnitCoordinator?: boolean,\n ): Observable> {\n const url = '/Dashboard/WorkPackages/';\n\n const queryParameters = new CustomHttpParams({\n userId,\n statusFilters: status,\n forSupplierUnitCoordinator,\n workPackageViewTypes: viewTypes,\n });\n\n return this.request$('GET', url, null, queryParameters);\n }\n\n /**\n * Fetches the latest questions of a given user for display on the dashboard view.\n *\n * @param userId\n * @return {Observable>}\n */\n getDashboardQuestions$(userId: string): Observable> {\n const url = `/Dashboard/Questions/${userId}`;\n\n return this.request$('GET', url, null);\n }\n\n /**\n * Fetches the view type filters for the dashboard.\n *\n * @param userId\n * @return {Observable>}\n */\n getDashboardFiltersVisibility$(): Observable> {\n const url = '/Dashboard/Filters';\n\n return this.request$('GET', url, null);\n }\n\n getUserNotificationView$(): Observable> {\n const url = '/Users/NotificationSettings';\n\n return this.request$('GET', url, null);\n }\n\n putUserNotificationView$(request: UserNotificationSettingsUpdateRequest): Observable> {\n const url = '/Users/NotificationSettings';\n\n return this.request$('PUT', url, request);\n }\n\n getUserNotificationDefaults$(roleCode: string): Observable> {\n const url = '/Users/NotificationSettings/Default';\n\n const queryParameters = new CustomHttpParams({\n roleCode,\n });\n\n return this.request$('GET', url, null, queryParameters);\n }\n\n getWorkPackageFeedbackRecipients$(\n projectId: number,\n workPackageId: number,\n isSupplierFeedback: boolean,\n ): Observable> {\n const url = `/Projects/${projectId}/WorkPackages/${workPackageId}/FeedbackRecipients`;\n\n const queryParameters = new CustomHttpParams({\n isSupplierFeedback,\n });\n\n return this.request$('GET', url, null, queryParameters);\n }\n\n getSkills$(unitId: number): Observable> {\n const url = `/Skills/${unitId}`;\n\n return this.request$('GET', url, null);\n }\n\n putSkills$(unitId: number, request: UpdateSkillsRequest): Observable> {\n const url = `/Skills/${unitId}`;\n\n return this.request$('PUT', url, request);\n }\n\n getSkillCategories$(unitId: number): Observable> {\n const url = `/Skills/Categories/${unitId}`;\n\n return this.request$('GET', url, null);\n }\n\n putSkillCategories$(unitId: number, request: UpdateSkillCategoryRequest): Observable> {\n const url = `/Skills/Categories/${unitId}`;\n\n return this.request$('PUT', url, request);\n }\n\n getSkillUnits$(): Observable> {\n const url = '/Units/Skills';\n\n return this.request$('GET', url, null);\n }\n\n getSkillRatings$(unitId: number): Observable> {\n const url = `/Skills/Ratings/${unitId}`;\n\n return this.request$('GET', url, null);\n }\n\n putSkillRatings$(unitId: number, request: UpdateUserSkillRatingsRequest): Observable> {\n const url = `/Skills/Ratings/${unitId}`;\n\n return this.request$('PUT', url, request);\n }\n\n getHourlyRatesCategories$(userId: string): Observable> {\n const url = `/Units/HourlyRateCategoriesOfUserUnit/${userId}`;\n\n return this.request$('GET', url, null);\n }\n\n /**\n * Delete a specific holiday\n */\n deleteHoliday$(holidaysToDelete: PublicHolidayDeleteDto): Observable> {\n const url = `/PublicHolidays`;\n return this.request$('DELETE', url, holidaysToDelete);\n }\n\n /**\n * Update a specific holiday\n */\n updateHoliday$(holidaysToUpdate: PublicHolidaysUpdateDto): Observable> {\n const url = `/PublicHolidays/Update`;\n return this.request$('PUT', url, holidaysToUpdate);\n }\n\n /**\n * Copy all of the holidays of the specified cities to the next year\n */\n copyHolidaysToNextYear$(holidaysToCreateCopyOf: PublicHolidaysCreateCopy): Observable> {\n const url = `/PublicHolidays/Create`;\n return this.request$('POST', url, holidaysToCreateCopyOf);\n }\n\n /**\n * Get all public holidays cities\n */\n getPublicHolidayCities$(): Observable> {\n const url = `/Cities`;\n return this.request$('GET', url);\n }\n\n /**\n * Get all public holidays for the specified year and cities\n */\n getPublicHolidayData$(year: number, cities: number[]): Observable> {\n const url = `/PublicHolidays?cityIds=${ encodeURIComponent(cities.join(';')) }&year=${ year}`;\n return this.request$('GET', url);\n }\n\n // eslint-disable-next-line max-len\n private makeHeaderFilterRequestParams(headerFilters: CollappFilterDropdownListRadioSetting[], queryParameters: HttpParams): HttpParams {\n let queryParams = queryParameters;\n if (headerFilters && headerFilters.length) {\n headerFilters.forEach((filterItem: CollappFilterDropdownListRadioSetting) => {\n if (filterItem.selectedListIds && filterItem.selectedListIds.length) {\n queryParams = queryParams.set(`${filterItem.filterId}-ids`, filterItem.selectedListIds.join(','));\n }\n if (filterItem.selectedRadioId) {\n queryParams = queryParams.set(`${filterItem.filterId}-mode`, filterItem.selectedRadioId);\n }\n });\n }\n return queryParams;\n }\n\n // eslint-disable-next-line max-lines-per-function\n private request$(\n method: string,\n url: string,\n body?: any,\n queryParameters?: CustomHttpParams,\n headers?: HttpHeaders,\n ): Observable> {\n const params = (queryParameters ? queryParameters.toHttpParams() : {});\n\n const request$ = this.httpClient.request(\n method,\n getEndpointUrl(url),\n {\n body,\n headers,\n reportProgress: true,\n observe: 'events',\n params,\n },\n );\n\n return request$\n .pipe(\n catchError((e: unknown) => {\n const error = e as HttpErrorResponse;\n const customErrorData = this.prepareError(error);\n // eslint-disable-next-line max-len\n const customError = new CustomHttpErrorResponse(customErrorData.customStatusText, customErrorData.errorMessage, error as any);\n\n return throwError(customError);\n }),\n );\n }\n\n /**\n * Do a http request without using CustomHttpParams\n * @param method\n * @param url\n * @param body\n * @param queryParameters\n * @param headers\n * @returns\n */\n // eslint-disable-next-line max-lines-per-function\n private doHttpRequest$(\n method: string,\n url: string,\n body?: any,\n queryParameters?: HttpParams,\n headers?: HttpHeaders,\n ): Observable> {\n const params = queryParameters || {};\n\n const request$ = this.httpClient.request(\n method,\n url,\n {\n body,\n headers,\n reportProgress: true,\n observe: 'events',\n params,\n },\n );\n\n return request$\n .pipe(\n catchError((e: unknown) => {\n const error = e as HttpErrorResponse;\n const customErrorData = this.prepareError(error);\n // eslint-disable-next-line max-len\n const customError = new CustomHttpErrorResponse(customErrorData.customStatusText, customErrorData.errorMessage, error as any);\n\n return throwError(customError);\n }),\n );\n }\n\n /**\n * Prepare the data for a customError\n * @param error\n * @returns\n */\n private prepareError(error: HttpErrorResponse): { customStatusText: string; errorMessage: string } {\n let statusCode: number = error.status;\n const { statusText } = error;\n const allErrors: string[] = [];\n\n if (error.error) {\n const errorResponse = error.error;\n if (typeof errorResponse === 'string') {\n allErrors.push(errorResponse);\n } else if (typeof errorResponse === 'object') {\n if (\n 'statusCode' in errorResponse\n && 'message' in errorResponse\n ) {\n // eslint-disable-next-line max-depth\n if (errorResponse.statusCode) {\n statusCode = errorResponse.statusCode;\n }\n\n allErrors.push(errorResponse.message);\n } else {\n Object.values(errorResponse).forEach((errors) => {\n if (Array.isArray(errors)) {\n allErrors.push(...errors);\n }\n });\n }\n }\n }\n\n const customStatusText = `${statusCode > 0 ? `${statusCode} ` : ''}${statusText}`;\n const errorMessage = allErrors.join(' \\n');\n\n return { customStatusText, errorMessage };\n }\n}\n","import { ApiModelNew } from '../types';\nimport {\n DashboardViewResponse,\n DashboardViewResponseMetadata,\n} from '../../interfaces/responses/dashboard-view.response';\nimport { UserSlimDtoModel } from '../dtos/user-slim.dto.model';\nimport { MetadataModel } from '../metadata.model';\n\nexport class DashboardViewResponseModel implements ApiModelNew {\n constructor(\n readonly users: readonly UserSlimDtoModel[],\n readonly metadata: MetadataModel = new MetadataModel(),\n ) {\n this.users = [...users];\n }\n\n static fromJSON(json: DashboardViewResponse): DashboardViewResponseModel {\n return new DashboardViewResponseModel(\n (Array.isArray(json.users) ? json.users : [])\n .map((item) => UserSlimDtoModel.fromJSON(item)),\n new MetadataModel(json.metadata),\n );\n }\n\n clone(overrides?: Partial): DashboardViewResponseModel {\n return new DashboardViewResponseModel(\n (overrides && overrides.users\n ? overrides.users\n : this.users.map((item) => item.clone())\n ),\n (overrides && overrides.metadata\n ? overrides.metadata\n : this.metadata.clone()\n ),\n );\n }\n\n toJSON(): DashboardViewResponse {\n return {\n users: this.users.map((item) => item.toJSON()),\n metadata: this.metadata.toJSON(),\n };\n }\n}\n","import { WorkPackageDashboardListResponse } from '../../interfaces/responses/work-package-dashboard-list.response';\nimport { WorkPackageDashboardDtoModel } from '../dtos/work-package-dashboard.dto.model';\nimport { MetadataModel } from '../metadata.model';\n\nexport class WorkPackageDashboardListResponseModel {\n constructor(\n readonly items: readonly WorkPackageDashboardDtoModel[],\n readonly metadata: MetadataModel,\n ) {\n this.items = [...items];\n }\n\n static fromJSON(json: WorkPackageDashboardListResponse): WorkPackageDashboardListResponseModel {\n return new WorkPackageDashboardListResponseModel(\n (Array.isArray(json.items) ? json.items : [])\n .map((item) => WorkPackageDashboardDtoModel.fromJSON(item)),\n new MetadataModel(json.metadata || {}),\n );\n }\n\n toJSON(): WorkPackageDashboardListResponse {\n return {\n items: this.items.map((item) => item.toJSON()),\n metadata: this.metadata.toJSON(),\n };\n }\n}\n","import { DashboardFiltersVisibilityResponse } from '../../interfaces/responses/dashboard-filters-visibility.response';\n\nexport class DashboardFiltersVisibilityResponseModel {\n constructor(\n readonly isSelfAssignViewFilterVisible: boolean,\n readonly isSubmitterViewFilterVisible: boolean,\n readonly isSupplierViewFilterVisible: boolean,\n ) {}\n\n static fromJSON(json: DashboardFiltersVisibilityResponse): DashboardFiltersVisibilityResponseModel {\n return new DashboardFiltersVisibilityResponseModel(\n json.isSelfAssignViewFilterVisible,\n json.isSubmitterViewFilterVisible,\n json.isSupplierViewFilterVisible,\n );\n }\n}\n","import { Injectable } from '@angular/core';\nimport { HttpEventType, HttpResponse } from '@angular/common/http';\nimport { Observable } from 'rxjs';\nimport { filter, map } from 'rxjs/operators';\nimport { CollAppApiService } from './collapp-api.service';\nimport { DashboardViewResponse } from '../interfaces/responses/dashboard-view.response';\nimport { DashboardViewResponseModel } from '../models/responses/dashboard-view.response.model';\nimport { ProjectDashboardDto } from '../interfaces/dtos/project-dashboard.dto';\nimport { ProjectDashboardListResponseModel } from '../models/responses/project-dashboard-list.response.model';\nimport { WorkPackageDashboardDto } from '../interfaces/dtos/work-package-dashboard.dto';\nimport { WorkPackageDashboardListResponseModel } from '../models/responses/work-package-dashboard-list.response.model';\nimport { QuestionDashboardDto } from '../interfaces/dtos/question-dashboard.dto';\nimport { QuestionDashboardListResponseModel } from '../models/responses/question-dashboard-list.response.model';\nimport { WorkPackageStatus } from '../../models/work-package-status.enum';\nimport { DashboardWorkPackageViewType } from '../../models/dashboard-work-package-view-type.enum';\nimport { DashboardFiltersVisibilityResponseModel } from '../models/responses/dashboard-filters-visibility.response.model';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class DashboardService {\n constructor(\n private apiService: CollAppApiService,\n ) { }\n\n /**\n * Fetches the dashboard view.\n *\n * @return {Observable}\n */\n getDashboard$(): Observable {\n return this.apiService\n .getDashboard$()\n .pipe(\n filter((event) => event.type === HttpEventType.Response),\n map((response: HttpResponse) => DashboardViewResponseModel.fromJSON(response.body!)),\n );\n }\n\n /**\n * Fetches the latest projects of a given user for display on the dashboard view.\n *\n * @param userId\n * @return {Observable}\n */\n getDashboardProjects$(userId: string): Observable {\n return this.apiService\n .getDashboardProjects$(userId)\n .pipe(\n filter((event) => event.type === HttpEventType.Response),\n map((response: HttpResponse) => {\n const items = response.body!;\n const numItems = (Array.isArray(items) ? items.length : 0);\n const metadata = {\n paginationInfo: {\n pageNumber: 1,\n pageSize: numItems,\n numberOfTotalResults: numItems,\n },\n };\n\n return ProjectDashboardListResponseModel.fromJSON({\n items,\n metadata,\n });\n }),\n );\n }\n\n /**\n * Fetches the latest work packages of a given user for display on the dashboard view,\n * filtered by their status.\n *\n * @param userId\n * @param status\n * @param forSupplierUnitCoordinator\n * @return {Observable}\n */\n getDashboardWorkPackages$(\n userId: string,\n status: WorkPackageStatus[],\n viewTypes: DashboardWorkPackageViewType[],\n forSupplierUnitCoordinator?: boolean,\n ): Observable {\n return this.apiService\n .getDashboardWorkPackages$(userId, status, viewTypes, forSupplierUnitCoordinator)\n .pipe(\n filter((event) => event.type === HttpEventType.Response),\n map((response: HttpResponse) => {\n const items = response.body!;\n const numItems = (Array.isArray(items) ? items.length : 0);\n const metadata = {\n paginationInfo: {\n pageNumber: 1,\n pageSize: numItems,\n numberOfTotalResults: numItems,\n },\n };\n\n return WorkPackageDashboardListResponseModel.fromJSON({\n items,\n metadata,\n });\n }),\n );\n }\n\n /**\n * Fetches the visibility state of the dashboard filters.\n *\n * @return {Observable}\n */\n getDashboardFiltersVisibility$(): Observable {\n return this.apiService\n .getDashboardFiltersVisibility$()\n .pipe(\n filter((event) => event.type === HttpEventType.Response),\n map((response: HttpResponse) => DashboardFiltersVisibilityResponseModel\n .fromJSON(response.body!)),\n );\n }\n\n /**\n * Fetches the latest questions of a given user for display on the dashboard view.\n *\n * @param userId\n * @return {Observable}\n */\n getDashboardQuestions$(userId: string): Observable {\n return this.apiService\n .getDashboardQuestions$(userId)\n .pipe(\n filter((event) => event.type === HttpEventType.Response),\n map((response: HttpResponse) => {\n const items = response.body!;\n const numItems = (Array.isArray(items) ? items.length : 0);\n const metadata = {\n paginationInfo: {\n pageNumber: 1,\n pageSize: numItems,\n numberOfTotalResults: numItems,\n },\n };\n\n return QuestionDashboardListResponseModel.fromJSON({\n items,\n metadata,\n });\n }),\n );\n }\n}\n","import { CollappFilterDropdownListRadioModel } from '../../../models/collapp-filter-dropdown-list-radio.interface';\nimport { AttachmentSlimDtoModel } from '../dtos/attachment-slim.dto.model';\nimport { MetadataModel } from '../metadata.model';\nimport { assertRequiredProperties } from '../../utilities/api.utility';\nimport { NonHumanResourceViewResponse } from '../../interfaces/responses/non-human-resource-view.response';\nimport { Metadata } from '../../interfaces/metadata';\nimport { NonHumanResourceUnitAssignmentDtoModel } from '../dtos/non-human-resource-unit-assignment.dto.model';\n\nexport class NonHumanResourceViewResponseModel {\n constructor(\n readonly nonHumanResourceId: string,\n readonly systemId: string,\n readonly name: string | null,\n readonly remark: string | null,\n readonly payrollCompany: string | null,\n readonly costCenter: string | null,\n readonly city: string | null,\n readonly nonHumanResourceUnitAssignments: readonly NonHumanResourceUnitAssignmentDtoModel[] = [],\n readonly metadata: MetadataModel = new MetadataModel(),\n readonly countryCode: string | null,\n readonly productGroupCode: string | null,\n readonly businessUnitCode: string | null,\n readonly divisionCode: string | null,\n readonly capacityUnit: string | null,\n readonly attachments: readonly AttachmentSlimDtoModel[] = [],\n readonly type: string | null,\n readonly serialNumber: string | null,\n readonly version: string | null,\n readonly headerFilters: CollappFilterDropdownListRadioModel[],\n ) {\n this.nonHumanResourceUnitAssignments = [...nonHumanResourceUnitAssignments];\n this.attachments = [...attachments];\n }\n\n static fromJSON(json: NonHumanResourceViewResponse): NonHumanResourceViewResponseModel {\n assertRequiredProperties(json, [\n 'nonHumanResourceId',\n 'systemId',\n 'metadata',\n ]);\n\n return new NonHumanResourceViewResponseModel(\n json.nonHumanResourceId,\n json.systemId,\n json.name,\n json.remark,\n json.payrollCompany,\n json.costCenter,\n json.city,\n (Array.isArray(json.nonHumanResourceUnitAssignments) ? json.nonHumanResourceUnitAssignments : [])\n .map((item) => NonHumanResourceUnitAssignmentDtoModel.fromJSON(item)),\n new MetadataModel(json.metadata || {}),\n json.countryCode,\n json.productGroupCode,\n json.businessUnitCode,\n json.divisionCode,\n json.capacityUnit,\n (Array.isArray(json.attachments) ? json.attachments : [])\n .map((item) => AttachmentSlimDtoModel.fromJSON(item)),\n json.type,\n json.serialNumber,\n json.version,\n json.headerFilters,\n );\n }\n\n toJSON(): NonHumanResourceViewResponse {\n return {\n nonHumanResourceId: this.nonHumanResourceId,\n systemId: this.systemId,\n name: this.name,\n remark: this.remark,\n payrollCompany: this.payrollCompany,\n costCenter: this.costCenter,\n city: this.city,\n countryCode: this.countryCode,\n productGroupCode: this.productGroupCode,\n businessUnitCode: this.businessUnitCode,\n divisionCode: this.divisionCode,\n capacityUnit: this.capacityUnit,\n nonHumanResourceUnitAssignments: this.nonHumanResourceUnitAssignments.map((item) => item.toJSON()),\n metadata: this.metadata.toJSON(),\n attachments: this.attachments.map((item) => item.toJSON()),\n type: this.type,\n serialNumber: this.serialNumber,\n version: this.version,\n headerFilters: this.headerFilters,\n };\n }\n}\n","import { assertRequiredProperties } from '../../utilities/api.utility';\nimport { NonHumanResourceCreateResponse } from '../../interfaces/responses/non-human-resource-create.response';\n\nexport class NonHumanResourceCreateResponseModel {\n constructor(\n readonly nonHumanResourceId: number,\n ) {\n }\n\n static fromJSON(json: NonHumanResourceCreateResponse): NonHumanResourceCreateResponseModel {\n assertRequiredProperties(json, [\n 'nonHumanResourceId',\n ]);\n\n return new NonHumanResourceCreateResponseModel(\n json.nonHumanResourceId,\n );\n }\n\n toJSON(): NonHumanResourceCreateResponse {\n return {\n nonHumanResourceId: this.nonHumanResourceId,\n };\n }\n}\n","import { Injectable } from '@angular/core';\nimport { HttpEventType, HttpResponse } from '@angular/common/http';\nimport { SortDirection } from '@angular/material/sort';\nimport { Observable } from 'rxjs';\nimport { filter, map, mapTo } from 'rxjs/operators';\nimport { CollAppApiService } from './collapp-api.service';\nimport { NonHumanResourceColumnFilters } from '../filter-columns';\nimport { ListQueryOptions } from '../list-query-options';\nimport { NonHumanResourceListResponseModel } from '../models/responses/non-human-resource-list.response.model';\nimport { NonHumanResourceListResponse } from '../interfaces/responses/non-human-resource-list.response';\nimport { NonHumanResourceViewResponseModel } from '../models/responses/non-human-resource-view.response.model';\nimport { NonHumanResourceViewResponse } from '../interfaces/responses/non-human-resource-view.response';\nimport { NonHumanResourceCreateResponse } from '../interfaces/responses/non-human-resource-create.response';\nimport { NonHumanResourceCreateResponseModel } from '../models/responses/non-human-resource-create.response.model';\nimport { NonHumanResourceCreateRequestModel } from '../models/requests/non-human-resource-create.request.model';\nimport { NonHumanResourceUpdateRequestModel } from '../models/requests/non-human-resource-update.request.model';\nimport { NonHumanResourceDtoModel } from '../models/dtos/non-human-resource.dto.model';\nimport { NonHumanResourceDto } from '../interfaces/dtos/non-human-resource.dto';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class NonHumanResourceService {\n constructor(private apiService: CollAppApiService) { }\n\n /**\n * Gets a list of all units\n */\n getNonHumanResources$(\n pageIndex?: number,\n pageSize?: number,\n columnFilters?: NonHumanResourceColumnFilters,\n sortColumn?: string,\n sortDirection?: SortDirection,\n ): Observable {\n const options = new ListQueryOptions(pageIndex, pageSize, columnFilters, sortColumn, sortDirection);\n\n return this.apiService\n .getNonHumanResources$(options)\n .pipe(\n filter((event) => event.type === HttpEventType.Response),\n map((response: HttpResponse) => NonHumanResourceListResponseModel\n .fromJSON(response.body!)),\n );\n }\n\n /**\n * Gets the view response of the units in the administration section\n */\n getNonHumanResourcesViewResponse$(id: string): Observable {\n return this\n .apiService\n .getNonHumanResourcesViewResponse$(id)\n .pipe(\n filter((event) => event.type === HttpEventType.Response),\n map((response: HttpResponse) => NonHumanResourceViewResponseModel\n .fromJSON(response.body!)),\n );\n }\n\n /**\n * Creates a new non-human resource.\n */\n postNonHumanResource$(\n nonHumanResource: NonHumanResourceCreateRequestModel,\n ): Observable {\n return this.apiService\n .postNonHumanResource$(nonHumanResource.toJSON())\n .pipe(\n filter((event) => event.type === HttpEventType.Response),\n map((response: HttpResponse) => NonHumanResourceCreateResponseModel\n .fromJSON(response.body!)),\n );\n }\n\n /**\n * Updates an existing unit.\n */\n putNonHumanResource$(nonHumanResource: NonHumanResourceUpdateRequestModel): Observable {\n return this.apiService\n .putNonHumanResource$(nonHumanResource.nonHumanResourceId, nonHumanResource.toJSON())\n .pipe(\n filter((event) => event.type === HttpEventType.Response),\n mapTo(undefined),\n );\n }\n\n /**\n * Gets a single user by id.\n *\n * @param {string} nonHumanResourceId\n * @return {Observable}\n */\n getNonHumanResourceById$(nonHumanResourceId: string): Observable {\n return this.apiService\n .getNonHumanResourceById$(nonHumanResourceId)\n .pipe(\n filter((event) => event.type === HttpEventType.Response),\n map((response: HttpResponse) => NonHumanResourceDtoModel.fromJSON(response.body!)),\n );\n }\n}\n","import moment from 'moment';\nimport { UserSlimDtoModel } from '../dtos/user-slim.dto.model';\nimport { BasicWorkPackageDetailResponse } from '../../interfaces/responses/basic-work-package-detail.response';\nimport { assertRequiredProperties } from '../../utilities/api.utility';\n\nexport class BasicWorkPackageDetailResponseModel {\n constructor(\n readonly latestEstimatedStartDate: moment.Moment | null = null,\n readonly latestEstimatedEndDate: moment.Moment | null = null,\n readonly plannedStartDate: moment.Moment | null = null,\n readonly latestPlannedEndDate: moment.Moment | null = null,\n readonly latestEstimatedHours: number | null = null,\n readonly plannedHours: number | null = null,\n readonly reportedHours: number | null = null,\n readonly remainingHours: number | null = null,\n readonly responsibleUsers: readonly UserSlimDtoModel[] = [],\n readonly canAddUserToWorkPackage: boolean = false,\n readonly isUserAlreadyResponsible: boolean = false,\n ) {\n this.latestEstimatedStartDate = latestEstimatedStartDate ? latestEstimatedStartDate.clone() : null;\n this.latestEstimatedEndDate = latestEstimatedEndDate ? latestEstimatedEndDate.clone() : null;\n this.plannedStartDate = plannedStartDate ? plannedStartDate.clone() : null;\n this.latestPlannedEndDate = latestPlannedEndDate ? latestPlannedEndDate.clone() : null;\n this.responsibleUsers = [...responsibleUsers];\n }\n\n static fromJSON(json: BasicWorkPackageDetailResponse): BasicWorkPackageDetailResponseModel {\n assertRequiredProperties(json, [\n 'latestEstimatedStartDate',\n 'latestEstimatedEndDate',\n 'plannedStartDate',\n 'latestPlannedEndDate',\n 'latestEstimatedHours',\n 'responsibleUsers',\n 'plannedHours',\n 'reportedHours',\n 'remainingHours',\n 'canAddUserToWorkPackage',\n 'isUserAlreadyResponsible',\n ]);\n\n return new BasicWorkPackageDetailResponseModel(\n moment(json.latestEstimatedStartDate).parseZone(),\n moment(json.latestEstimatedEndDate).parseZone(),\n moment(json.plannedStartDate).parseZone(),\n moment(json.latestPlannedEndDate).parseZone(),\n json.latestEstimatedHours,\n json.plannedHours,\n json.reportedHours,\n json.remainingHours,\n (Array.isArray(json.responsibleUsers) ? json.responsibleUsers : [])\n .map((item) => UserSlimDtoModel.fromJSON((item))),\n json.canAddUserToWorkPackage,\n json.isUserAlreadyResponsible,\n );\n }\n}\n","import { BasicWorkPackageViewListItemResponse } from '../../interfaces/responses/basic-work-package-view-list-item.response';\n\nexport class BasicWorkPackageViewListItemResponseModel {\n constructor(\n readonly workPackageId: number | null = null,\n readonly workPackageTitle: string | null = null,\n ) {}\n\n static fromJSON(json: BasicWorkPackageViewListItemResponse): BasicWorkPackageViewListItemResponseModel {\n return new BasicWorkPackageViewListItemResponseModel(\n json.workPackageId,\n json.workPackageTitle,\n );\n }\n}\n","import { BasicWorkPackageViewListResponse } from '../../interfaces/responses/basic-work-package-view-list.response';\nimport { BasicWorkPackageViewListItemResponseModel } from './basic-work-package-view-list-item.response.model';\nimport { assertRequiredProperties } from '../../utilities/api.utility';\n\nexport class BasicWorkPackageViewListResponseModel {\n constructor(\n readonly items: readonly BasicWorkPackageViewListItemResponseModel[],\n ) {\n this.items = [...items];\n }\n\n static fromJSON(json: BasicWorkPackageViewListResponse): BasicWorkPackageViewListResponseModel {\n assertRequiredProperties(json, [\n 'items',\n ]);\n\n return new BasicWorkPackageViewListResponseModel(\n (Array.isArray(json.items)\n ? json.items\n .map((item) => BasicWorkPackageViewListItemResponseModel.fromJSON(item))\n : []\n ),\n );\n }\n}\n","import { AvailalbeProjectListResponse } from '../../interfaces/responses/available-project-list.response';\nimport { AvailableProjectDtoModel } from '../dtos/available-project.dto.model';\nimport { assertRequiredProperties } from '../../utilities/api.utility';\n\nexport class AvailableProjectListResponseModel {\n constructor(\n readonly items: readonly AvailableProjectDtoModel[],\n ) {\n this.items = [...items];\n }\n\n static fromJSON(json: AvailalbeProjectListResponse): AvailableProjectListResponseModel {\n assertRequiredProperties(json, [\n 'items',\n ]);\n\n return new AvailableProjectListResponseModel(\n (Array.isArray(json.items) ? json.items : [])\n .map((item) => AvailableProjectDtoModel.fromJSON(item)),\n );\n }\n\n clone(): AvailableProjectListResponseModel {\n return new AvailableProjectListResponseModel(\n this.items.map((item) => item.clone()),\n );\n }\n\n toJSON(): AvailalbeProjectListResponse {\n return {\n items: this.items.map((item) => item.toJSON()),\n };\n }\n}\n","import { WorkPackageUpdateStatusRequest } from '../../interfaces/requests/work-package-update-status.request';\nimport { assertRequiredProperties } from '../../utilities/api.utility';\n\nexport class WorkPackageUpdateStatusRequestModel {\n constructor(\n readonly workPackageId: number,\n readonly commentMessage: string = '',\n readonly defects: readonly string[] = [],\n readonly supplierUnitId: number | null = null,\n readonly sendNotifications: boolean = true,\n ) {\n this.defects = [...defects];\n }\n\n static fromJSON(json: WorkPackageUpdateStatusRequest): WorkPackageUpdateStatusRequestModel {\n assertRequiredProperties(json, [\n 'workPackageId',\n ]);\n\n return new WorkPackageUpdateStatusRequestModel(\n json.workPackageId,\n json.commentMessage || '',\n (Array.isArray(json.defects)\n ? json.defects\n : []\n ),\n json.supplierUnitId,\n json.sendNotifications,\n );\n }\n\n toJSON(): WorkPackageUpdateStatusRequest {\n return {\n workPackageId: this.workPackageId,\n commentMessage: this.commentMessage,\n defects: [...this.defects],\n supplierUnitId: this.supplierUnitId,\n sendNotifications: this.sendNotifications,\n };\n }\n}\n","import { ProjectStructurePresetUpdateRequest } from '../../interfaces/requests/project-structure-preset-update.request';\nimport { assertRequiredProperties } from '../../utilities/api.utility';\n\nexport class ProjectStructurePresetUpdateRequestModel {\n constructor(\n readonly structure: readonly string[],\n ) {\n this.structure = [...structure];\n }\n\n static fromJSON(json: ProjectStructurePresetUpdateRequest): ProjectStructurePresetUpdateRequestModel {\n assertRequiredProperties(json, [\n 'structure',\n ]);\n\n return new ProjectStructurePresetUpdateRequestModel(\n (Array.isArray(json.structure) ? json.structure : [])\n .map((item) => item),\n );\n }\n\n toJSON(): ProjectStructurePresetUpdateRequest {\n return {\n structure: [...this.structure],\n };\n }\n}\n","import { MinimalUser } from '../../../models/user.interface';\nimport { assertRequiredProperties } from '../../utilities/api.utility';\nimport { UserMinimalDto } from '../../interfaces/dtos/user-minimal.dto';\n\nexport class UserMinimalModel implements MinimalUser {\n constructor(\n readonly fullName: string,\n readonly photoUrl?: string | null,\n ) {}\n\n static fromJSON(json: UserMinimalDto): UserMinimalModel {\n assertRequiredProperties(json, [\n 'fullName',\n 'photoUrl',\n ]);\n\n return new UserMinimalModel(\n json.fullName,\n json.photoUrl,\n );\n }\n\n toJSON(): UserMinimalDto {\n return {\n fullName: this.fullName,\n photoUrl: this.photoUrl,\n };\n }\n\n clone(): UserMinimalModel {\n return new UserMinimalModel(\n this.fullName,\n this.photoUrl,\n );\n }\n}\n","import moment from 'moment';\nimport { WorkPackageListDto } from '../../interfaces/dtos/work-package-list.dto';\nimport { WorkPackageStatus } from '../../../models/work-package-status.enum';\nimport { assertRequiredProperties } from '../../utilities/api.utility';\nimport { UserMinimalModel } from './user-minimal.dto.model';\n\nexport class WorkPackageListDtoModel {\n get costToComplete(): number {\n return this.remainingHours === null ? 0 : this.remainingHours;\n }\n\n // eslint-disable-next-line max-lines-per-function\n constructor(\n readonly workPackageId: number | null = null,\n readonly projectId: number | null = null,\n readonly displayId: string | null = null,\n readonly projectNumber: string | null = null,\n readonly projectTitle: string | null = null,\n readonly levelTitle: string | null = null,\n readonly sequenceNumber: number | null = null,\n readonly status: WorkPackageStatus | null = null,\n readonly title: string | null = null,\n readonly confirmedHours: number = 0,\n readonly openQuestionsCount: number = 0,\n readonly latestConfirmedEndDate: moment.Moment | null = null,\n readonly latestConfirmedHours: number | null = null, // TODO: latestConfirmedHours = 0 per default?\n readonly latestEstimatedStartDate: moment.Moment | null = null,\n readonly latestEstimatedEndDate: moment.Moment | null = null,\n readonly latestEstimatedHours: number = 0,\n readonly plannedStartDate: moment.Moment | null = null,\n readonly latestPlannedEndDate: moment.Moment | null = null,\n readonly plannedHours: number = 0,\n readonly reportedHours: number = 0,\n readonly creator: UserMinimalModel | null = null,\n readonly coordinator: UserMinimalModel | null = null,\n readonly remainingHours: number | null = null,\n readonly levelId?: number | null,\n ) {\n this.latestConfirmedEndDate = (latestConfirmedEndDate != null\n ? latestConfirmedEndDate.clone()\n : latestConfirmedEndDate);\n this.latestEstimatedStartDate = (latestEstimatedStartDate != null\n ? latestEstimatedStartDate.clone()\n : latestEstimatedStartDate);\n this.latestEstimatedEndDate = (latestEstimatedEndDate != null\n ? latestEstimatedEndDate.clone()\n : latestEstimatedEndDate);\n this.plannedStartDate = (plannedStartDate != null ? plannedStartDate.clone() : plannedStartDate);\n this.latestPlannedEndDate = (latestPlannedEndDate != null ? latestPlannedEndDate.clone() : latestPlannedEndDate);\n }\n\n // eslint-disable-next-line max-lines-per-function, complexity\n static fromJSON(json: WorkPackageListDto): WorkPackageListDtoModel {\n assertRequiredProperties(json, [\n ]);\n\n return new WorkPackageListDtoModel(\n json.workPackageId,\n json.projectId,\n json.displayId,\n json.projectNumber,\n json.projectTitle,\n json.levelTitle,\n json.sequenceNumber,\n json.status,\n json.workPackageTitle,\n json.confirmedHours || 0,\n json.openQuestionsCount || 0,\n (json.latestConfirmedEndDate != null\n ? moment(json.latestConfirmedEndDate)\n .parseZone()\n : null\n ),\n json.latestConfirmedHours,\n (json.latestEstimatedStartDate != null\n ? moment(json.latestEstimatedStartDate)\n .parseZone()\n : null\n ),\n (json.latestEstimatedEndDate != null\n ? moment(json.latestEstimatedEndDate)\n .parseZone()\n : null\n ),\n json.latestEstimatedHours || 0,\n (json.plannedStartDate != null\n ? moment(json.plannedStartDate)\n .parseZone()\n : null\n ),\n (json.latestPlannedEndDate != null\n ? moment(json.latestPlannedEndDate)\n .parseZone()\n : null\n ),\n json.plannedHours || 0,\n json.reportedHours || 0,\n json.creatorFullName ? new UserMinimalModel(\n json.creatorFullName,\n json.creatorPhotoUrl,\n ) : null,\n json.coordinatorFullName ? new UserMinimalModel(\n json.coordinatorFullName,\n json.coordinatorPhotoUrl,\n ) : null,\n json.remainingHours,\n json.levelId,\n );\n }\n}\n","import { WorkPackageListResponse } from '../../interfaces/responses/work-package-list.response';\nimport { WorkPackageListDtoModel } from '../dtos/work-package-list.dto.model';\nimport { MetadataModel } from '../metadata.model';\nimport { WithPaginationInfo } from '../../interfaces/metadata';\nimport { assertRequiredProperties } from '../../utilities/api.utility';\n\nexport class WorkPackageListResponseModel {\n constructor(\n readonly items: readonly WorkPackageListDtoModel[],\n readonly metadata: MetadataModel,\n ) {\n this.items = [...items];\n }\n\n // TODO Remove\n // public toJSON(): WorkPackageListResponse {\n // return {\n // items: this.items.map((item) => item.toJSON()),\n // metadata: this.metadata.toJSON(),\n // };\n // }\n\n static fromJSON(json: WorkPackageListResponse): WorkPackageListResponseModel {\n assertRequiredProperties(json, [\n 'items',\n ]);\n\n return new WorkPackageListResponseModel(\n (Array.isArray(json.items)\n ? json.items\n .map((item) => WorkPackageListDtoModel.fromJSON(item))\n : []\n ),\n new MetadataModel(json.metadata),\n );\n }\n}\n","import { ProjectScopeViewResponse } from '../../interfaces/responses/project-scope-view.response';\nimport { GateDtoModel } from '../dtos/gate.dto.model';\nimport { UnitSlimDtoModel } from '../dtos/unit-slim.dto.model';\nimport { UserSlimDtoModel } from '../dtos/user-slim.dto.model';\nimport { ProjectTypeCode } from '../../../models/project-type.enum';\nimport { AttachmentSlimDtoModel } from '../dtos/attachment-slim.dto.model';\nimport { MetadataModel } from '../metadata.model';\nimport { assertRequiredProperties } from '../../utilities/api.utility';\n\nexport class ProjectScopeViewResponseModel {\n readonly canEditProject: boolean;\n\n readonly canEditProjectType: boolean;\n\n readonly canArchiveProject: boolean;\n\n readonly canUnarchiveProject: boolean;\n\n constructor(\n readonly projectId: number | null,\n readonly scope: string | null,\n readonly sapNumber: string | null,\n readonly projectNumber: string | null,\n readonly title: string,\n readonly attachments: readonly AttachmentSlimDtoModel[] = [],\n readonly projectTypeCode: ProjectTypeCode = ProjectTypeCode.Unknown,\n readonly gate: GateDtoModel | null = null,\n readonly customerCountryCode: string = '',\n readonly placeOfManufacturingCountryCode: string = '',\n readonly emtOrderFromUnit: string | null = null,\n readonly emtOrderFromCountryCode: string = '',\n readonly submitterUnit: UnitSlimDtoModel | null = null,\n readonly projectManager: UserSlimDtoModel | null = null,\n readonly technicalProjectManager: UserSlimDtoModel | null = null,\n readonly metadata: MetadataModel = new MetadataModel(),\n ) {\n this.attachments = [...attachments];\n\n this.canEditProject = this.metadata.fields.canEditProject;\n this.canEditProjectType = this.metadata.fields.canEditProjectType;\n this.canArchiveProject = this.metadata.fields.canArchiveProject;\n this.canUnarchiveProject = this.metadata.fields.canUnarchiveProject;\n }\n\n static fromJSON(json: ProjectScopeViewResponse): ProjectScopeViewResponseModel {\n assertRequiredProperties(json, [\n // 'projectId',\n ]);\n\n return new ProjectScopeViewResponseModel(\n (json.projectId != null\n ? json.projectId\n : null\n ),\n (json.scope != null\n ? json.scope\n : null\n ),\n (json.sapNumber != null\n ? json.sapNumber\n : null\n ),\n (json.projectNumber != null\n ? json.projectNumber\n : null\n ),\n (json.title != null\n ? json.title\n : ''\n ),\n (Array.isArray(json.attachments) ? json.attachments : [])\n .map((item) => AttachmentSlimDtoModel.fromJSON(item)),\n (json.projectTypeCode != null\n ? json.projectTypeCode\n : ProjectTypeCode.Unknown\n ),\n (json.gate\n ? GateDtoModel.fromJSON(json.gate)\n : null\n ),\n json.customerCountryCode || '',\n json.placeOfManufacturingCountryCode || '',\n (json.emtOrderFromUnit != null\n ? json.emtOrderFromUnit\n : null\n ),\n json.emtOrderFromCountryCode || '',\n (json.submitterUnit\n ? UnitSlimDtoModel.fromJSON(json.submitterUnit)\n : null\n ),\n (json.projectManager\n ? UserSlimDtoModel.fromJSON(json.projectManager)\n : null\n ),\n (json.technicalProjectManager\n ? UserSlimDtoModel.fromJSON(json.technicalProjectManager)\n : null\n ),\n new MetadataModel(json.metadata || {}),\n );\n }\n\n toJSON(): ProjectScopeViewResponse {\n return {\n projectId: this.projectId,\n scope: this.scope,\n sapNumber: this.sapNumber,\n projectNumber: this.projectNumber,\n title: this.title,\n attachments: this.attachments.map((item) => item.toJSON()),\n projectTypeCode: this.projectTypeCode,\n gate: this.gate ? this.gate.toJSON() : null,\n customerCountryCode: this.customerCountryCode,\n placeOfManufacturingCountryCode: this.placeOfManufacturingCountryCode,\n emtOrderFromUnit: this.emtOrderFromUnit,\n emtOrderFromCountryCode: this.emtOrderFromCountryCode,\n submitterUnit: this.submitterUnit ? this.submitterUnit.toJSON() : null,\n projectManager: this.projectManager ? this.projectManager.toJSON() : null,\n technicalProjectManager: this.technicalProjectManager ? this.technicalProjectManager.toJSON() : null,\n metadata: this.metadata.toJSON(),\n };\n }\n}\n","import { ProjectCreateResponse } from '../../interfaces/responses/project-create.response';\nimport { assertRequiredProperties } from '../../utilities/api.utility';\n\nexport class ProjectCreateResponseModel {\n constructor(\n readonly projectId: number,\n ) {\n }\n\n static fromJSON(json: ProjectCreateResponse): ProjectCreateResponseModel {\n assertRequiredProperties(json, [\n 'projectId',\n ]);\n\n return new ProjectCreateResponseModel(\n json.projectId,\n );\n }\n\n toJSON(): ProjectCreateResponse {\n return {\n projectId: this.projectId,\n };\n }\n}\n","import { WorkPackageCreateResponse } from '../../interfaces/responses/work-package-create.response';\nimport { assertRequiredProperties } from '../../utilities/api.utility';\n\nexport class WorkPackageCreateResponseModel {\n constructor(\n readonly workPackageId: number,\n ) {\n }\n\n static fromJSON(json: WorkPackageCreateResponse): WorkPackageCreateResponseModel {\n assertRequiredProperties(json, [\n 'workPackageId',\n ]);\n\n return new WorkPackageCreateResponseModel(\n json.workPackageId,\n );\n }\n\n toJSON(): WorkPackageCreateResponse {\n return {\n workPackageId: this.workPackageId,\n };\n }\n}\n","import { LevelListResponse } from '../../interfaces/responses/level-list.response';\nimport { LevelListDtoModel } from '../dtos/level-list.dto.model';\nimport { MetadataModel } from '../metadata.model';\nimport { assertRequiredProperties } from '../../utilities/api.utility';\n\nexport class LevelListResponseModel {\n constructor(\n readonly items: readonly LevelListDtoModel[] = [],\n readonly metadata: MetadataModel = new MetadataModel(),\n ) {\n this.items = [...items]\n .sort((a, b) => (a.sortOrder - b.sortOrder));\n }\n\n static fromJSON(json: LevelListResponse): LevelListResponseModel {\n assertRequiredProperties(json, [\n 'items',\n ]);\n\n const items = json.items\n .map((item) => LevelListDtoModel.fromJSON(item))\n .sort((a, b) => (a.sortOrder - b.sortOrder));\n\n return new LevelListResponseModel(\n items,\n new MetadataModel(json.metadata || {}),\n );\n }\n\n clone(): LevelListResponseModel {\n return new LevelListResponseModel(\n this.items,\n this.metadata,\n );\n }\n}\n","import { WorkPackageSubmitterSettingsUpdateRequest } from '../../interfaces/requests/work-package-submitter-settings-update.request';\nimport { assertRequiredProperties } from '../../utilities/api.utility';\nimport { ContractHourlyRateCategoryPairDtoModel } from '../dtos/contract-hourly-rate-category-pair.dto.model';\n\nexport class WorkPackageSubmitterSettingsUpdateRequestModel {\n constructor(\n readonly workPackageId: number,\n readonly submitterHourlyRateCategories: ContractHourlyRateCategoryPairDtoModel[] | null,\n readonly submitterProjectTypeCode: string,\n readonly submitterProjectNumber: string,\n readonly submitterActivityItemCategoryNumber: string | null,\n ) {\n }\n\n static fromJSON(\n json: WorkPackageSubmitterSettingsUpdateRequest,\n ): WorkPackageSubmitterSettingsUpdateRequestModel {\n assertRequiredProperties(json, [\n 'workPackageId',\n 'submitterHourlyRateCategories',\n 'submitterProjectTypeCode',\n 'submitterProjectNumber',\n 'submitterActivityItemCategoryNumber',\n ]);\n\n return new WorkPackageSubmitterSettingsUpdateRequestModel(\n json.workPackageId,\n // json.submitterHourlyRateCategories,\n (Array.isArray(json.submitterHourlyRateCategories) ? json.submitterHourlyRateCategories : []),\n json.submitterProjectTypeCode,\n json.submitterProjectNumber,\n json.submitterActivityItemCategoryNumber,\n );\n }\n\n toJSON(): WorkPackageSubmitterSettingsUpdateRequest {\n return {\n workPackageId: this.workPackageId,\n submitterHourlyRateCategories: this.submitterHourlyRateCategories,\n submitterProjectTypeCode: this.submitterProjectTypeCode,\n submitterProjectNumber: this.submitterProjectNumber,\n submitterActivityItemCategoryNumber: this.submitterActivityItemCategoryNumber,\n };\n }\n}\n","import { LevelCreateResponse } from '../../interfaces/responses/level-create.response';\nimport { assertRequiredProperties } from '../../utilities/api.utility';\n\nexport class LevelCreateResponseModel {\n constructor(\n readonly levelId: number,\n ) {\n }\n\n static fromJSON(json: LevelCreateResponse): LevelCreateResponseModel {\n assertRequiredProperties(json, [\n 'levelId',\n ]);\n\n return new LevelCreateResponseModel(\n json.levelId,\n );\n }\n\n toJSON(): LevelCreateResponse {\n return {\n levelId: this.levelId,\n };\n }\n}\n","/**\n * A simple data structure that represents a pair of values.\n */\nexport class Pair {\n constructor(public first: K, public second: V) {}\n}\n","import { ApiModelNew } from '../types';\nimport { PublicHolidaysDto } from '../../interfaces/responses/public-holidays.dto';\n\nexport class PublicHolidayDtoModel implements ApiModelNew {\n constructor(\n public hasHoliday: boolean,\n public holidayDescription: string | null = null,\n public holidayHours: number,\n ) {\n }\n\n static fromJSON(json: PublicHolidaysDto): PublicHolidayDtoModel {\n return new PublicHolidayDtoModel(\n json.hasHoliday,\n json.holidayDescription,\n json.holidayHours,\n );\n }\n\n clone(): PublicHolidayDtoModel {\n return new PublicHolidayDtoModel(\n this.hasHoliday,\n this.holidayDescription,\n this.holidayHours,\n );\n }\n\n toJSON(): PublicHolidaysDto {\n return {\n hasHoliday: this.hasHoliday,\n holidayDescription: this.holidayDescription,\n holidayHours: this.holidayHours,\n };\n }\n}\n","import moment from 'moment';\nimport { WorkPackageResourcePlanningViewResponse } from '../../interfaces/responses/work-package-resource-planning-view.response';\nimport { ResponsibleUserDtoModel } from '../dtos/responsible-user-dto.model';\nimport { Pair } from '../../../helpers/data-structure.utility';\nimport { UnitSlimDtoModel } from '../dtos/unit-slim.dto.model';\nimport { WorkPackageResourcePlanningResponseMetadata } from '../../interfaces/metadata';\nimport { MetadataModel } from '../metadata.model';\nimport { assertRequiredProperties } from '../../utilities/api.utility';\nimport { WorkPackageStatus } from '../../../models/work-package-status.enum';\nimport { ResponsibleResourceDtoModel } from '../dtos/responsible-resource-dto.model';\nimport { UnitBackgroundColorDtoModel } from '../dtos/unit-background-color.dto.model';\nimport { PublicHolidayDtoModel } from '../dtos/public-holiday.dto.model';\n\nexport class WorkPackageResourcePlanningViewResponseModel {\n readonly canAddResources: boolean;\n\n readonly canEditResourcePlanningDates: boolean;\n\n readonly canSetWorkPackageCoordinator: boolean;\n\n readonly canViewUserPlanning: boolean;\n\n // eslint-disable-next-line complexity, max-lines-per-function\n constructor(\n readonly status: WorkPackageStatus,\n readonly estimatedStartDate: moment.Moment,\n readonly estimatedEndDate: moment.Moment,\n readonly estimatedHours: number = 0,\n readonly confirmedStartDate: moment.Moment | null = null,\n readonly confirmedEndDate: moment.Moment | null = null,\n readonly confirmedHours: number | null = null,\n readonly plannedStartDate: moment.Moment | null = null,\n readonly plannedEndDate: moment.Moment | null = null,\n readonly plannedHours: number = 0,\n readonly earliestPlannedDate: moment.Moment | null = null,\n readonly earliestPlannedDateAfterViewRange: moment.Moment | null = null,\n readonly latestPlannedDate: moment.Moment | null = null,\n readonly latestPlannedDateBeforeViewRange: moment.Moment | null = null,\n readonly hoursThreshold: number = Number.MAX_SAFE_INTEGER,\n readonly totalAvailableToBePlanned: number = Number.MAX_SAFE_INTEGER,\n readonly estimatedNewEndDate: moment.Moment | null = null,\n readonly supplierUnit: UnitSlimDtoModel | null = null,\n readonly responsibleUsers: readonly ResponsibleUserDtoModel[] = [],\n readonly plannedNonHumanResources: readonly ResponsibleResourceDtoModel[] = [],\n readonly resourcesProjects: readonly Pair[] = [],\n readonly unitBackgroundColors: UnitBackgroundColorDtoModel[] = [],\n readonly timezone: string | null = null,\n readonly metadata: MetadataModel = new MetadataModel(),\n readonly publicHolidays: PublicHolidayDtoModel[] = [],\n readonly latestConfirmedHours: number = 0,\n ) {\n this.estimatedStartDate = (estimatedStartDate != null ? estimatedStartDate.clone() : estimatedStartDate);\n this.estimatedEndDate = (estimatedEndDate != null ? estimatedEndDate.clone() : estimatedEndDate);\n this.confirmedStartDate = (confirmedStartDate != null ? confirmedStartDate.clone() : confirmedStartDate);\n this.confirmedEndDate = (confirmedEndDate != null ? confirmedEndDate.clone() : confirmedEndDate);\n this.plannedStartDate = (plannedStartDate != null ? plannedStartDate.clone() : plannedStartDate);\n this.plannedEndDate = (plannedEndDate != null ? plannedEndDate.clone() : plannedEndDate);\n this.earliestPlannedDate = (earliestPlannedDate != null ? earliestPlannedDate.clone() : earliestPlannedDate);\n this.earliestPlannedDateAfterViewRange = (earliestPlannedDateAfterViewRange != null\n ? earliestPlannedDateAfterViewRange.clone()\n : earliestPlannedDateAfterViewRange);\n this.latestPlannedDate = (latestPlannedDate != null ? latestPlannedDate.clone() : latestPlannedDate);\n this.latestPlannedDateBeforeViewRange = (latestPlannedDateBeforeViewRange != null\n ? latestPlannedDateBeforeViewRange.clone()\n : latestPlannedDateBeforeViewRange);\n this.estimatedNewEndDate = (estimatedNewEndDate != null ? estimatedNewEndDate.clone() : estimatedNewEndDate);\n this.responsibleUsers = [...responsibleUsers];\n this.plannedNonHumanResources = [...plannedNonHumanResources];\n this.resourcesProjects = [...resourcesProjects];\n this.unitBackgroundColors = unitBackgroundColors.map((item) => item.clone());\n\n this.canAddResources = (this.metadata.fields && this.metadata.fields.canAddResources) || false;\n this.canEditResourcePlanningDates = (this.metadata.fields\n && this.metadata.fields.canEditResourcePlanningDates) || false;\n this.canSetWorkPackageCoordinator = (this.metadata.fields\n && this.metadata.fields.canSetWorkPackageCoordinator) || false;\n this.canViewUserPlanning = (this.metadata.fields && this.metadata.fields.canViewUserPlanning) || false;\n }\n\n // eslint-disable-next-line max-lines-per-function, complexity\n static fromJSON(json: WorkPackageResourcePlanningViewResponse): WorkPackageResourcePlanningViewResponseModel {\n assertRequiredProperties(json, [\n 'status',\n 'estimatedStartDate',\n 'estimatedEndDate',\n 'estimatedHours',\n // Required in FE\n 'supplierUnit',\n ]);\n\n return new WorkPackageResourcePlanningViewResponseModel(\n json.status,\n moment(json.estimatedStartDate)\n .parseZone(),\n moment(json.estimatedEndDate)\n .parseZone(),\n json.estimatedHours || 0,\n (json.confirmedStartDate\n ? moment(json.confirmedStartDate)\n .parseZone()\n : null\n ),\n (json.confirmedEndDate\n ? moment(json.confirmedEndDate)\n .parseZone()\n : null\n ),\n json.confirmedHours,\n (json.plannedStartDate\n ? moment(json.plannedStartDate)\n .parseZone()\n : null\n ),\n (json.plannedEndDate\n ? moment(json.plannedEndDate)\n .parseZone()\n : null\n ),\n json.plannedHours || 0,\n (json.earliestPlannedDate\n ? moment(json.earliestPlannedDate)\n .parseZone()\n : null\n ),\n (json.earliestPlannedDateAfterViewRange\n ? moment(json.earliestPlannedDateAfterViewRange)\n .parseZone()\n : null\n ),\n (json.latestPlannedDate\n ? moment(json.latestPlannedDate)\n .parseZone()\n : null\n ),\n (json.latestPlannedDateBeforeViewRange\n ? moment(json.latestPlannedDateBeforeViewRange)\n .parseZone()\n : null\n ),\n (json.hoursThreshold != null\n ? json.hoursThreshold\n : Number.MAX_SAFE_INTEGER\n ),\n (json.totalAvailableToBePlanned != null\n ? json.totalAvailableToBePlanned\n : 0\n ),\n (json.estimatedNewEndDate\n ? moment(json.estimatedNewEndDate)\n .parseZone()\n : null\n ),\n (json.supplierUnit\n ? UnitSlimDtoModel.fromJSON(json.supplierUnit)\n : null\n ),\n (Array.isArray(json.responsibleUsers) ? json.responsibleUsers : [])\n .map((item) => ResponsibleUserDtoModel.fromJSON(item)),\n (Array.isArray(json.plannedNonHumanResources) ? json.plannedNonHumanResources : [])\n .map((item) => ResponsibleResourceDtoModel.fromJSON(item)),\n Object.entries(json.resourcesProjects || {})\n .map(([key, value]) => new Pair(parseInt(key, 10), value)),\n (Array.isArray(json.unitBackgroundColors) ? json.unitBackgroundColors : [])\n .map((item) => UnitBackgroundColorDtoModel.fromJSON(item)),\n json.timezone,\n new MetadataModel(json.metadata || {}),\n (Array.isArray(json.publicHolidays) ? json.publicHolidays : [])\n .map((item) => PublicHolidayDtoModel.fromJSON(item)),\n json.latestConfirmedHours || 0,\n );\n }\n\n // eslint-disable-next-line complexity\n toJSON(): WorkPackageResourcePlanningViewResponse {\n return {\n status: this.status,\n estimatedStartDate: this.estimatedStartDate.toJSON(),\n estimatedEndDate: this.estimatedEndDate.toJSON(),\n estimatedHours: this.estimatedHours,\n confirmedStartDate: (this.confirmedStartDate != null ? this.confirmedStartDate.toJSON() : null),\n confirmedEndDate: (this.confirmedEndDate != null ? this.confirmedEndDate.toJSON() : null),\n confirmedHours: this.confirmedHours,\n plannedStartDate: (this.plannedStartDate != null ? this.plannedStartDate.toJSON() : null),\n plannedEndDate: (this.plannedEndDate != null ? this.plannedEndDate.toJSON() : null),\n plannedHours: this.plannedHours,\n earliestPlannedDate: (this.earliestPlannedDate != null ? this.earliestPlannedDate.toJSON() : null),\n earliestPlannedDateAfterViewRange: (this.earliestPlannedDateAfterViewRange != null\n ? this.earliestPlannedDateAfterViewRange.toJSON()\n : null),\n latestPlannedDate: (this.latestPlannedDate != null ? this.latestPlannedDate.toJSON() : null),\n latestPlannedDateBeforeViewRange: (this.latestPlannedDateBeforeViewRange != null\n ? this.latestPlannedDateBeforeViewRange.toJSON()\n : null),\n hoursThreshold: this.hoursThreshold,\n totalAvailableToBePlanned: this.totalAvailableToBePlanned,\n estimatedNewEndDate: (this.estimatedNewEndDate != null ? this.estimatedNewEndDate.toJSON() : null),\n supplierUnit: (this.supplierUnit != null ? this.supplierUnit.toJSON() : null),\n responsibleUsers: this.responsibleUsers.map((item) => item.toJSON()),\n plannedNonHumanResources: this.plannedNonHumanResources.map((item) => item.toJSON()),\n resourcesProjects: this.resourcesProjects\n .reduce((dictionary, item) => ({\n ...dictionary,\n [item.first]: item.second,\n }), {} as Record),\n unitBackgroundColors: this.unitBackgroundColors.map((item) => item.toJSON()),\n timezone: this.timezone,\n metadata: this.metadata,\n publicHolidays: this.publicHolidays,\n latestConfirmedHours: this.latestConfirmedHours,\n };\n }\n}\n","import { UserSlimDtoModel } from '../dtos/user-slim.dto.model';\nimport { WorkPackageTransitionInformationResponse } from '../../interfaces/responses/work-package-transition-information.response';\nimport { UnitSlimDtoModel } from '../dtos/unit-slim.dto.model';\nimport { assertRequiredProperties } from '../../utilities/api.utility';\n\nexport class WorkPackageTransitionInformationResponseModel {\n constructor(\n readonly defects: readonly string[] = [],\n readonly l5Units: readonly UnitSlimDtoModel[] = [],\n readonly notificationRecipients: readonly UserSlimDtoModel[] = [],\n ) {\n this.defects = [...defects];\n this.l5Units = [...l5Units];\n this.notificationRecipients = [...notificationRecipients];\n }\n\n static fromJSON(\n json: WorkPackageTransitionInformationResponse,\n ): WorkPackageTransitionInformationResponseModel {\n assertRequiredProperties(json, [\n ]);\n\n return new WorkPackageTransitionInformationResponseModel(\n (Array.isArray(json.defects) ? json.defects : [])\n .map((item) => item),\n (Array.isArray(json.l5Units) ? json.l5Units : [])\n .map((item) => UnitSlimDtoModel.fromJSON(item)),\n (Array.isArray(json.notificationRecipients) ? json.notificationRecipients : [])\n .map((item) => UserSlimDtoModel.fromJSON(item)),\n );\n }\n\n toJSON(): WorkPackageTransitionInformationResponse {\n return {\n defects: [...this.defects],\n l5Units: this.l5Units.map((item) => item.toJSON()),\n notificationRecipients: this.notificationRecipients.map((item) => item.toJSON()),\n };\n }\n}\n","import { WorkPackageCloseRequest } from '../../interfaces/requests/work-package-close.request';\nimport { WorkPackageConclusion } from '../../../models/work-package-conclusion.enum';\nimport { assertRequiredProperties } from '../../utilities/api.utility';\n\nexport class WorkPackageCloseRequestModel {\n constructor(\n readonly workPackageId: number,\n readonly conclusion: WorkPackageConclusion,\n readonly ratingId: number,\n readonly commentMessage: string | null = null,\n readonly sendNotifications: boolean = true,\n ) {\n }\n\n static fromJSON(json: WorkPackageCloseRequest): WorkPackageCloseRequestModel {\n assertRequiredProperties(json, [\n 'workPackageId',\n 'conclusion',\n 'ratingId',\n // 'commentMessage',\n ]);\n\n return new WorkPackageCloseRequestModel(\n json.workPackageId,\n json.conclusion,\n json.ratingId,\n json.commentMessage,\n json.sendNotifications,\n );\n }\n\n toJSON(): WorkPackageCloseRequest {\n return {\n workPackageId: this.workPackageId,\n conclusion: this.conclusion,\n ratingId: this.ratingId,\n commentMessage: this.commentMessage,\n sendNotifications: this.sendNotifications,\n };\n }\n}\n","import moment from 'moment';\nimport { SuspensionCreateRequest } from '../../interfaces/requests/suspension-create.request';\nimport { assertRequiredProperties } from '../../utilities/api.utility';\n\nexport class SuspensionCreateRequestModel {\n constructor(\n readonly workPackageId: number,\n readonly estimatedNewEndDate: moment.Moment,\n readonly commentMessage: string = '',\n readonly sendNotifications: boolean = true,\n ) {\n this.estimatedNewEndDate = estimatedNewEndDate.clone();\n }\n\n static fromJSON(json: SuspensionCreateRequest): SuspensionCreateRequestModel {\n assertRequiredProperties(json, [\n 'workPackageId',\n 'estimatedNewEndDate',\n ]);\n\n return new SuspensionCreateRequestModel(\n json.workPackageId,\n moment(json.estimatedNewEndDate)\n .parseZone(),\n json.commentMessage || '',\n json.sendNotifications,\n );\n }\n\n toJSON(): SuspensionCreateRequest {\n return {\n workPackageId: this.workPackageId,\n estimatedNewEndDate: this.estimatedNewEndDate.toJSON(),\n commentMessage: this.commentMessage,\n sendNotifications: this.sendNotifications,\n };\n }\n}\n","import { ReplyCreateResponse } from '../../interfaces/responses/reply-create.response';\nimport { assertRequiredProperties } from '../../utilities/api.utility';\n\nexport class ReplyCreateResponseModel {\n constructor(\n readonly replyId: number,\n ) {\n }\n\n static fromJSON(json: ReplyCreateResponse): ReplyCreateResponseModel {\n assertRequiredProperties(json, [\n 'replyId',\n ]);\n\n return new ReplyCreateResponseModel(\n json.replyId,\n );\n }\n}\n","import { ConclusionCreateResponse } from '../../interfaces/responses/conclusion-create.response';\nimport { assertRequiredProperties } from '../../utilities/api.utility';\n\nexport class ConclusionCreateResponseModel {\n constructor(\n readonly replyId: number,\n ) {\n }\n\n static fromJSON(json: ConclusionCreateResponse): ConclusionCreateResponseModel {\n assertRequiredProperties(json, [\n 'replyId',\n ]);\n\n return new ConclusionCreateResponseModel(\n json.replyId,\n );\n }\n\n toJSON(): ConclusionCreateResponse {\n return {\n replyId: this.replyId,\n };\n }\n}\n","import { ReopenCreateResponse } from '../../interfaces/responses/reopen-create.response';\nimport { assertRequiredProperties } from '../../utilities/api.utility';\n\nexport class ReopenCreateResponseModel {\n constructor(\n readonly replyId: number,\n ) {\n }\n\n static fromJSON(json: ReopenCreateResponse): ReopenCreateResponseModel {\n assertRequiredProperties(json, [\n 'replyId',\n ]);\n\n return new ReopenCreateResponseModel(\n json.replyId,\n );\n }\n\n toJSON(): ReopenCreateResponse {\n return {\n replyId: this.replyId,\n };\n }\n}\n","import { MetadataModel } from '../metadata.model';\nimport { AttachmentSlimDtoModel } from '../dtos/attachment-slim.dto.model';\nimport { AttachmentListResponse } from '../../interfaces/responses/attachment-list.response';\nimport { assertRequiredProperties } from '../../utilities/api.utility';\n\nexport class AttachmentListResponseModel {\n constructor(\n readonly items: readonly AttachmentSlimDtoModel[],\n readonly metadata: MetadataModel = new MetadataModel(),\n ) {\n this.items = [...items];\n }\n\n static fromJSON(json: AttachmentListResponse): AttachmentListResponseModel {\n assertRequiredProperties(json, [\n 'items',\n ]);\n\n return new AttachmentListResponseModel(\n (Array.isArray(json.items) ? json.items : [])\n .map((item) => AttachmentSlimDtoModel.fromJSON(item)),\n new MetadataModel(json.metadata || {}),\n );\n }\n\n toJSON(): AttachmentListResponse {\n return {\n items: this.items.map((item) => item.toJSON()),\n metadata: this.metadata.toJSON(),\n };\n }\n}\n","import moment from 'moment';\nimport { AttachmentOutdateResponse } from '../../interfaces/responses/attachment-outdate.response';\nimport { UserSlimDtoModel } from '../dtos/user-slim.dto.model';\nimport { assertRequiredProperties } from '../../utilities/api.utility';\n\nexport class AttachmentOutdateResponseModel {\n constructor(\n readonly outdater: UserSlimDtoModel,\n readonly outdatedOn: moment.Moment,\n readonly outdatedComment: string,\n ) {\n this.outdatedOn = outdatedOn.clone();\n }\n\n static fromJSON(json: AttachmentOutdateResponse): AttachmentOutdateResponseModel {\n assertRequiredProperties(json, [\n 'outdater',\n 'outdatedOn',\n 'outdatedComment',\n ]);\n\n return new AttachmentOutdateResponseModel(\n UserSlimDtoModel.fromJSON(json.outdater),\n moment(json.outdatedOn)\n .parseZone(),\n json.outdatedComment,\n );\n }\n\n toJSON(): AttachmentOutdateResponse {\n return {\n outdater: (this.outdater ? this.outdater.toJSON() : null),\n outdatedOn: (this.outdatedOn ? this.outdatedOn.toJSON() : null),\n outdatedComment: this.outdatedComment,\n };\n }\n}\n","import { ProjectSelectorDto } from '../../interfaces/dtos/project-selector.dto';\nimport { ProjectTypeCode } from '../../../models/project-type.enum';\nimport { ContractDtoModel } from './contract.dto.model';\nimport { UnitSlimDtoModel } from './unit-slim.dto.model';\nimport { assertRequiredProperties } from '../../utilities/api.utility';\n\nexport class ProjectSelectorDtoModel {\n constructor(\n readonly projectId: number,\n readonly title: string,\n readonly projectTypeCode: ProjectTypeCode,\n readonly projectNumber: string = '',\n readonly childUnitContracts: readonly ContractDtoModel[] = [],\n readonly submitterUnit: UnitSlimDtoModel | null = null,\n ) {\n this.childUnitContracts = [...childUnitContracts];\n }\n\n static fromJSON(json: ProjectSelectorDto): ProjectSelectorDtoModel {\n assertRequiredProperties(json, [\n 'projectId',\n 'title',\n 'projectTypeCode',\n ]);\n\n return new ProjectSelectorDtoModel(\n json.projectId,\n json.title,\n json.projectTypeCode,\n json.projectNumber ?? undefined,\n (Array.isArray(json.childUnitContracts) ? json.childUnitContracts : [])\n .map((item) => ContractDtoModel.fromJSON(item)),\n (json.submitterUnit\n ? UnitSlimDtoModel.fromJSON(json.submitterUnit)\n : null\n ),\n );\n }\n\n clone(): ProjectSelectorDtoModel {\n return new ProjectSelectorDtoModel(\n this.projectId,\n this.title,\n this.projectTypeCode,\n this.projectNumber,\n this.childUnitContracts.map((item) => item.clone()),\n this.submitterUnit ? this.submitterUnit.clone() : null,\n );\n }\n\n toJSON(): ProjectSelectorDto {\n return {\n projectId: this.projectId,\n title: this.title,\n projectTypeCode: this.projectTypeCode,\n projectNumber: this.projectNumber,\n childUnitContracts: this.childUnitContracts.map((item) => item.toJSON()),\n submitterUnit: this.submitterUnit ? this.submitterUnit.toJSON() : null,\n };\n }\n}\n","import { ProjectSelectorListResponse } from '../../interfaces/responses/project-selector-list.response';\nimport { ProjectSelectorDtoModel } from '../dtos/project-selector.dto.model';\nimport { assertRequiredProperties } from '../../utilities/api.utility';\n\nexport class ProjectSelectorListResponseModel {\n constructor(\n readonly items: readonly ProjectSelectorDtoModel[],\n ) {\n this.items = [...items];\n }\n\n static fromJSON(json: ProjectSelectorListResponse): ProjectSelectorListResponseModel {\n assertRequiredProperties(json, [\n 'items',\n ]);\n\n return new ProjectSelectorListResponseModel(\n (Array.isArray(json.items) ? json.items : [])\n .map((item) => ProjectSelectorDtoModel.fromJSON(item)),\n );\n }\n\n clone(): ProjectSelectorListResponseModel {\n return new ProjectSelectorListResponseModel(\n this.items.map((item) => item.clone()),\n );\n }\n\n toJSON(): ProjectSelectorListResponse {\n return {\n items: this.items.map((item) => item.toJSON()),\n };\n }\n}\n","import { MetadataModel } from '../metadata.model';\nimport { assertRequiredProperties } from '../../utilities/api.utility';\nimport { LevelListNestedDtoModel } from '../dtos/level-list-nested.dto.model';\nimport { ProjectStructureResponse } from '../../interfaces/responses/project-structure.response';\n\nexport class ProjectStructureResponseModel {\n constructor(\n readonly items: readonly LevelListNestedDtoModel[] = [],\n readonly metadata: MetadataModel = new MetadataModel(),\n ) {\n this.items = [...items]\n .sort((a, b) => (a.sortOrder - b.sortOrder));\n }\n\n static fromJSON(json: ProjectStructureResponse): ProjectStructureResponseModel {\n assertRequiredProperties(json, [\n 'items',\n ]);\n\n const items = json.items\n .map((item) => LevelListNestedDtoModel.fromJSON(item))\n .sort((a, b) => (a.sortOrder - b.sortOrder));\n\n return new ProjectStructureResponseModel(\n items,\n new MetadataModel(json.metadata || {}),\n );\n }\n\n clone(): ProjectStructureResponseModel {\n return new ProjectStructureResponseModel(\n this.items,\n this.metadata,\n );\n }\n}\n","import moment from 'moment';\nimport { LevelInfoResponse } from '../../interfaces/responses/level-info.response';\nimport { assertRequiredProperties } from '../../utilities/api.utility';\n\nexport class LevelInfoResponseModel {\n constructor(\n readonly availableHours: number,\n readonly hours: number,\n readonly endDate: moment.Moment | null,\n readonly startDate: moment.Moment | null,\n readonly isUserUnitCoordinator: boolean = false,\n ) {\n this.endDate = endDate ? endDate.clone() : null;\n this.startDate = startDate ? startDate.clone() : null;\n }\n\n static fromJSON(json: LevelInfoResponse): LevelInfoResponseModel {\n assertRequiredProperties(json, [\n 'availableHours',\n 'hours',\n 'isUserUnitCoordinator',\n ]);\n const {\n availableHours, endDate, startDate, hours, isUserUnitCoordinator,\n } = json;\n\n return new LevelInfoResponseModel(\n availableHours,\n hours,\n endDate ? moment(endDate).parseZone() : null,\n startDate ? moment(startDate).parseZone() : null,\n isUserUnitCoordinator,\n );\n }\n\n clone(): LevelInfoResponseModel {\n const {\n availableHours, endDate, startDate, hours,\n } = this;\n const newEndDate = endDate?.clone() ?? null;\n const newStartDate = startDate ? startDate.clone() : null;\n\n return new LevelInfoResponseModel(availableHours, hours, newEndDate, newStartDate, this.isUserUnitCoordinator);\n }\n}\n","import { Injectable } from '@angular/core';\nimport {\n EMPTY, Observable, throwError,\n} from 'rxjs';\nimport moment from 'moment';\nimport { HttpEventType, HttpResponse } from '@angular/common/http';\nimport { SortDirection } from '@angular/material/sort';\nimport {\n filter, map, mapTo, switchMap,\n} from 'rxjs/operators';\nimport { escape } from 'html-escaper';\nimport { WpMinimalSettingsInterface } from '../../models/wp-minimal-settings.interface';\nimport { BasicWorkPackageDetailResponseModel } from '../models/responses/basic-work-package-detail.response.model';\nimport { BasicWorkPackageDetailResponse } from '../interfaces/responses/basic-work-package-detail.response';\nimport { BasicWorkPackageViewListResponseModel } from '../models/responses/basic-work-package-view-list.response.model';\nimport { BasicWorkPackageViewListResponse } from '../interfaces/responses/basic-work-package-view-list.response';\nimport { BasicWorkpackagesRequestOptions } from '../../models/basic-workpackages-request.options';\nimport { AvailableProjectDtoModel } from '../models/dtos/available-project.dto.model';\nimport { AvailableProjectListResponseModel } from '../models/responses/available-project-list.response.model';\nimport { AvailalbeProjectListResponse } from '../interfaces/responses/available-project-list.response';\nimport { AvailableRequestRequestOptions } from '../../models/available-projects-request.options';\nimport { LevelInfoResponse } from '../interfaces/responses/level-info.response';\nimport {\n ProjectColumnFilters,\n QuestionsColumnFilters,\n WorkPackageColumnFilters,\n WorkPackageQuestionColumnFilters,\n} from '../filter-columns';\nimport { ProjectUpdateRequestModel } from '../models/requests/project-update.request.model';\nimport { ProjectCreateRequestModel } from '../models/requests/project-create.request.model';\nimport { WorkPackageUpdateStatusRequestModel } from '../models/requests/work-package-update-status.request.model';\nimport { ProjectStructurePresetUpdateRequestModel } from '../models/requests/project-structure-preset-update.request.model';\nimport { WorkPackageListResponseModel } from '../models/responses/work-package-list.response.model';\nimport { WorkPackageCreateRequestModel } from '../models/requests/work-package-create.request.model';\nimport { WorkPackageUpdateRequestModel } from '../models/requests/work-package-update.request.model';\nimport { ProjectImportListResponse } from '../interfaces/responses/project-import-list.response';\nimport { LevelPlanningUpdateRequestModel } from '../models/requests/level-planning-update.request.model';\nimport { ProjectListResponse } from '../interfaces/responses/project-list.response';\nimport { ProjectListResponseModel } from '../models/responses/project-list.response.model';\nimport { ProjectImportListDtoModel } from '../models/dtos/project-import-list.dto.model';\nimport { ProjectImportListPartialDtoModel } from '../models/dtos/project-import-list-partial.dto.model';\nimport { WorkPackageViewResponse } from '../interfaces/responses/work-package-view.response';\nimport { WorkPackageViewResponseModel } from '../models/responses/work-package-view.response.model';\nimport { ProjectViewResponse } from '../interfaces/responses/project-view.response';\nimport { ProjectViewResponseModel } from '../models/responses/project-view.response.model';\nimport { ProjectActivityViewResponse } from '../interfaces/responses/project-activity-view.response';\nimport { ProjectActivityViewResponseModel } from '../models/responses/project-activity-view.response.model';\nimport { LevelSaveRequestModel } from '../models/requests/level-save.request.model';\nimport { ProjectScopeViewResponseModel } from '../models/responses/project-scope-view.response.model';\nimport { ProjectScopeViewResponse } from '../interfaces/responses/project-scope-view.response';\nimport { ProjectCreateResponseModel } from '../models/responses/project-create.response.model';\nimport { ProjectCreateResponse } from '../interfaces/responses/project-create.response';\nimport { WorkPackageCreateResponseModel } from '../models/responses/work-package-create.response.model';\nimport { WorkPackageCreateResponse } from '../interfaces/responses/work-package-create.response';\nimport { ProjectImportListDto } from '../interfaces/dtos/project-import-list.dto';\nimport { LevelListResponse } from '../interfaces/responses/level-list.response';\nimport { LevelListResponseModel } from '../models/responses/level-list.response.model';\nimport { LevelCreateRequestModel } from '../models/requests/level-create.request.model';\nimport { WorkPackageSupplierSettingsUpdateRequestModel } from '../models/requests/work-package-supplier-settings-update.request.model';\nimport { WorkPackageSubmitterSettingsUpdateRequestModel } from '../models/requests/work-package-submitter-settings-update.request.model';\nimport { LevelCreateResponseModel } from '../models/responses/level-create.response.model';\nimport { LevelCreateResponse } from '../interfaces/responses/level-create.response';\nimport { WorkPackageStatus, WorkPackageStatusTransition } from '../../models/work-package-status.enum';\nimport { WorkPackageResourcePlanningViewResponseModel } from '../models/responses/work-package-resource-planning-view.response.model';\nimport { WorkPackageResourcePlanningViewResponse } from '../interfaces/responses/work-package-resource-planning-view.response';\nimport { WorkPackageResourcePlanningUpdateRequestModel } from '../models/requests/work-package-resource-planning-update.request.model';\nimport { ScopeChangeCreateRequestModel } from '../models/requests/scope-change-create.request.model';\nimport { ScopeChangeUpdateRequestModel } from '../models/requests/scope-change-update.request.model';\nimport { ProjectUpdateFromSapRequestModel } from '../models/requests/project-update-from-sap.request.model';\nimport { WorkPackageTransitionInformationResponseModel } from '../models/responses/work-package-transition-information.response.model';\nimport { WorkPackageTransitionInformationResponse } from '../interfaces/responses/work-package-transition-information.response';\nimport { WorkPackageConclusion } from '../../models/work-package-conclusion.enum';\nimport { WorkPackageCloseRequestModel } from '../models/requests/work-package-close.request.model';\nimport { SuspensionCreateRequestModel } from '../models/requests/suspension-create.request.model';\nimport { WorkPackageStatusForm } from '../../modules/projects/dialogs/work-package-status-change/work-package-status-change-dialog.component';\nimport { WorkPackageUploadOutputDocumentsRequestModel } from '../models/requests/work-package-upload-output-documents.request.model';\nimport { QuestionListResponseModel } from '../models/responses/question-list-response.model';\nimport { FileDownloadResponse } from '../interfaces/responses/file-download.response';\nimport { FileDownloadResponseModel } from '../models/responses/file-download.response.model';\nimport { QuestionListResponse } from '../interfaces/responses/question-list.response';\nimport { QuestionCreateRequestModel } from '../models/requests/question-create.request.model';\nimport { QuestionUpdateRequestModel } from '../models/requests/question-update.request.model';\nimport { QuestionCreateResponseModel } from '../models/responses/question-create.response.model';\nimport { QuestionCreateResponse } from '../interfaces/responses/question-create.response';\nimport { ReplyCreateRequestModel } from '../models/requests/reply-create.request.model';\nimport { ReplyCreateResponse } from '../interfaces/responses/reply-create.response';\nimport { ReplyCreateResponseModel } from '../models/responses/reply-create.response.model';\nimport { ConclusionCreateRequestModel } from '../models/requests/conclusion-create.request.model';\nimport { ConclusionCreateResponse } from '../interfaces/responses/conclusion-create.response';\nimport { ConclusionCreateResponseModel } from '../models/responses/conclusion-create.response.model';\nimport { ReopenCreateResponse } from '../interfaces/responses/reopen-create.response';\nimport { ReopenCreateResponseModel } from '../models/responses/reopen-create.response.model';\nimport { ReopenCreateRequestModel } from '../models/requests/reopen-create.request.model';\nimport { ActivityFetchType } from '../../models/activity-fetch-type.enum';\nimport { WorkPackageDuplicateRequest } from '../interfaces/requests/work-package-duplicate.request';\nimport { SelectorRequestOptions } from '../../models/selector-request.options';\nimport { ProjectSelectorDtoModel } from '../models/dtos/project-selector.dto.model';\nimport { ProjectSelectorListResponse } from '../interfaces/responses/project-selector-list.response';\nimport WorkPackageReworkCreateRequestModel from '../models/requests/work-package-rework-create.request.model';\nimport { WorkPackageViewListResponse } from '../interfaces/responses/work-package-view-list.response';\nimport { WorkPackageViewListResponseModel } from '../models/responses/work-package-view-list.response.model';\nimport { AttachmentListResponseModel } from '../models/responses/attachment-list.response.model';\nimport { AttachmentListResponse } from '../interfaces/responses/attachment-list.response';\nimport { DocumentType } from '../../models/document-type.enum';\nimport { LevelSwapRequestModel } from '../models/requests/level-swap.request';\nimport { ReplyListResponse } from '../interfaces/responses/reply-list.response';\nimport { ReplyListResponseModel } from '../models/responses/reply-list.response.model';\nimport { QuestionUserNotificationListResponseModel } from '../models/responses/question-user-notification-list.response.model';\nimport { QuestionUserNotificationListResponse } from '../interfaces/responses/question-user-notification-list.response';\nimport { QuestionsViewListResponseModel } from '../models/responses/questions-view-list.response.model';\nimport { QuestionsViewListResponse } from '../interfaces/responses/questions-view-list.response';\nimport { ListQueryOptions, UnitQuestionsListOptions, WorkPackageListOptions } from '../list-query-options';\nimport { AttachmentOutdateRequestModel } from '../models/requests/attachment-outdate-request.model';\nimport { AttachmentOutdateResponse } from '../interfaces/responses/attachment-outdate.response';\nimport { AttachmentOutdateResponseModel } from '../models/responses/attachment-outdate.response.model';\nimport { WorkPackageListResponse } from '../interfaces/responses/work-package-list.response';\nimport { ProjectSelectorListResponseModel } from '../models/responses/project-selector-list.response.model';\nimport { QuestionAction } from '../../models/question-action.enum';\nimport FeedbackCreateRequestModel from '../models/requests/feedback-create.request.model';\nimport { isEmpty } from '../../helpers/utilities';\nimport { ResponsibleUserDtoModel } from '../models/dtos/responsible-user-dto.model';\nimport { ResponsibleUserDto } from '../interfaces/dtos/responsible-user.dto';\nimport { ProjectStructureResponse } from '../interfaces/responses/project-structure.response';\nimport { ProjectStructureResponseModel } from '../models/responses/project-structure.response.model';\nimport { ResponsibleResourceDto } from '../interfaces/dtos/responsible-resource.dto';\nimport { ResponsibleResourceDtoModel } from '../models/dtos/responsible-resource-dto.model';\nimport { CollAppApiService } from './collapp-api.service';\nimport { OldPlannedResourcesRequestModel } from '../models/requests/old-planned-resources.request.model';\nimport { UserSlimDtoModel } from '../models/dtos/user-slim.dto.model';\nimport { UserSlimDto } from '../interfaces/dtos/user-slim.dto';\nimport { LevelInfoResponseModel } from '../models/responses/level-info.response.model';\nimport { WorkPackageMoveRequest } from '../interfaces/requests/work-package-move.request';\nimport { ProjectStructureFiltersSettingsModel } from '../../models/project-structure-filter-settings.interface';\nimport { AdhocWorkpackageRequestModel } from '../models/requests/adhoc-workpackage.request.model';\nimport { ContractDtoModel } from '../models/dtos/contract.dto.model';\nimport { ContractDto } from '../interfaces/dtos/contract.dto';\nimport { WorkpackageSupplierSettingsDtoModel } from '../models/dtos/workpackage-supplier-setting.dto.model';\nimport { WorkpackageSupplierSettingsDto } from '../interfaces/dtos/workpackageSupplierSettings.dto';\nimport { AdditionalSuppliersUpdateRequest } from '../interfaces/requests/work-package-additional-suppliers-update.request';\nimport { ProjectPlanningViewRequestModel } from '../models/requests/project-planning-view.request.model';\nimport { ProjectPlanningViewResponseModel } from '../models/responses/project-planning-view.response.model';\nimport { ProjectPlanningViewResponse } from '../interfaces/responses/project-planning-view.response';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class ProjectService {\n constructor(\n private apiService: CollAppApiService,\n ) {}\n\n private static checkWorkPackagePathParameters(projectId: number, workPackageId: number): void {\n if (projectId == null) {\n throw new Error('No Project ID provided.');\n }\n\n if (workPackageId == null) {\n throw new Error('No Work Package ID provided.');\n }\n }\n\n /**\n *\n * @param workPackageId\n * @param commentMessage\n * @param supplierUnitId\n */\n private static createStatusUpdateRequestModel(\n workPackageId: number,\n commentMessage?: string,\n supplierUnitId?: number,\n sendNotifications?: boolean,\n ): WorkPackageUpdateStatusRequestModel {\n return new WorkPackageUpdateStatusRequestModel(\n workPackageId,\n commentMessage ? escape(commentMessage) : undefined,\n [],\n supplierUnitId,\n sendNotifications,\n );\n }\n\n /**\n * Gets an attachments URL including the SAS token\n *\n * @param {number} attachmentId\n * @return {Observable}\n */\n getDownloadUrl$(attachmentId: string): Observable {\n return this.apiService\n .getDownloadUrl$(attachmentId)\n .pipe(\n filter((event) => event.type === HttpEventType.Response),\n map((response: HttpResponse) => FileDownloadResponseModel.fromJSON(response.body!)),\n );\n }\n\n /**\n * Marks an attachment as outdated\n */\n patchOutdateFile$(\n attachmentId: string,\n request: AttachmentOutdateRequestModel,\n ): Observable {\n return this.apiService\n .patchOutdateFile$(attachmentId, request.toJSON())\n .pipe(\n filter((event) => event.type === HttpEventType.Response),\n map((response: HttpResponse) => AttachmentOutdateResponseModel\n .fromJSON(response.body!)),\n );\n }\n\n /**\n * Updates an existing project\n *\n * @param {ProjectUpdateRequestModel} request\n * @return {Observable}\n */\n putProject$(request: ProjectUpdateRequestModel): Observable {\n return this.apiService\n .putProjectByProjectId$(request.projectId, request.toJSON())\n .pipe(\n filter((event) => event.type === HttpEventType.Response),\n mapTo(undefined),\n );\n }\n\n /**\n * Archive an existing project\n *\n * @return {Observable}\n */\n archiveProject$(projectId: number): Observable {\n return this.apiService\n .archiveProject$(projectId)\n .pipe(\n filter((event) => event.type === HttpEventType.Response),\n mapTo(undefined),\n );\n }\n\n /**\n * Archive an existing project\n *\n * @return {Observable}\n */\n unarchiveProject$(projectId: number): Observable {\n return this.apiService\n .unarchiveProject$(projectId)\n .pipe(\n filter((event) => event.type === HttpEventType.Response),\n mapTo(undefined),\n );\n }\n\n /**\n * Exports an existing project\n *\n * @return {Observable}\n */\n exportProject$(projectId: number): Observable {\n return this.apiService\n .exportProject$(projectId)\n .pipe(\n filter((event) => event.type === HttpEventType.Response),\n map((response: HttpResponse) => FileDownloadResponseModel.fromJSON(response.body!)),\n );\n }\n\n /**\n * Updates an existing project from SAP\n *\n * @param {ProjectUpdateFromSapRequestModel} request\n * @return {Observable}\n */\n patchProject$(request: ProjectUpdateFromSapRequestModel): Observable {\n return this.apiService\n .patchProjectByProjectId$(request.projectId, request.toJSON())\n .pipe(\n filter((event) => event.type === HttpEventType.Response),\n mapTo(undefined),\n );\n }\n\n /**\n * Gets a list of open workPackages by project id\n *\n * @param {number} projectId\n * @return {Observable}\n */\n getOpenWorkPackageTitles$(projectId: number): Observable {\n return this.apiService\n .getOpenWorkPackageTitles$(projectId)\n .pipe(\n filter((event) => event.type === HttpEventType.Response),\n map((response: HttpResponse) => response.body!),\n );\n }\n\n /**\n * Gets a ProjectViewResponse by project id\n * NOTE: \"General\" will fall away, once the GET endpoint for receiving a single project\n * is not used any more.\n *\n * @param {number} projectId\n * @return {Observable}\n */\n getProjectView$(projectId: number): Observable {\n return this.apiService\n .getProjectView$(projectId)\n .pipe(\n filter((event) => event.type === HttpEventType.Response),\n map((response: HttpResponse) => ProjectViewResponseModel.fromJSON(response.body!)),\n );\n }\n\n /**\n * Gets a ProjectScopeViewResponse by project id\n *\n * @param {number} projectId\n * @return {Observable}\n */\n getProjectScopeView$(projectId: number): Observable {\n return this.apiService\n .getProjectScopeView$(projectId)\n .pipe(\n filter((event) => event.type === HttpEventType.Response),\n map((response: HttpResponse) => ProjectScopeViewResponseModel\n .fromJSON(response.body!)),\n );\n }\n\n /**\n * Gets a ProjectActivityView by project id and the filtering of the Paginator\n *\n * @param {number} projectId\n * @param {number} pageNumber\n * @param {number} pageSize\n * @param {ActivityFetchType} [activityFetchType]\n * @return {Observable}\n */\n getProjectActivityView$(\n projectId: number,\n pageNumber?: number,\n pageSize?: number,\n activityFetchType?: ActivityFetchType,\n ): Observable {\n return this.apiService\n .getProjectActivityView$(projectId, pageNumber, pageSize, activityFetchType)\n .pipe(\n filter((event) => event.type === HttpEventType.Response),\n map((response: HttpResponse) => ProjectActivityViewResponseModel\n .fromJSON(response.body!)),\n );\n }\n\n /**\n * Gets a WorkPackageActivityView by project Id and workPackage Id and the filtering of the Paginator\n *\n * @param {number} projectId\n * @param {number} workPackageId\n * @param {number} pageNumber\n * @param {number} pageSize\n * @param {ActivityFetchType} [activityFetchType]\n * @return {Observable}\n */\n getWorkPackageActivityView$(\n projectId: number,\n workPackageId: number,\n pageNumber?: number,\n pageSize?: number,\n activityFetchType?: ActivityFetchType,\n ): Observable {\n return this.apiService\n .getWorkPackageActivityView$(projectId, workPackageId, pageNumber, pageSize, activityFetchType)\n .pipe(\n filter((event) => event.type === HttpEventType.Response),\n map((response: HttpResponse) => ProjectActivityViewResponseModel\n .fromJSON(response.body!)),\n );\n }\n\n getCurrentAdditionalSuppliers$(\n projectId: number,\n workPackageId: number,\n ): Observable {\n return this.apiService\n .getCurrentAdditionalSuppliers$(projectId, workPackageId)\n .pipe(\n filter((event) => event.type === HttpEventType.Response),\n map((response: HttpResponse) => response.body!.map(\n (supplier) => WorkpackageSupplierSettingsDtoModel.fromJSON(supplier),\n )),\n );\n }\n\n getAdditionalSuppliers$(\n projectId: number,\n workPackageId: number,\n contractSupplierUnitId: number,\n excludedPairIds: number[] = [],\n ): Observable {\n const excludedString = excludedPairIds.join(';');\n return this.apiService\n .getAdditionalSuppliers$(projectId, workPackageId, contractSupplierUnitId, excludedString)\n .pipe(\n filter((event) => event.type === HttpEventType.Response),\n map((response: HttpResponse) => response.body!.map((supplier) => ContractDtoModel\n .fromJSON(supplier))),\n );\n }\n\n /**\n * Get the informations of an Workpackage transition\n */\n getWorkPackageTransitionInformation$(\n projectId: number,\n workPackageId: number,\n to: WorkPackageStatus,\n ): Observable {\n return this.apiService\n .getWorkPackageTransitionInformation$(projectId, workPackageId, to)\n .pipe(\n filter((event) => event.type === HttpEventType.Response),\n // eslint-disable-next-line max-len\n map((response: HttpResponse) => WorkPackageTransitionInformationResponseModel\n .fromJSON(response.body!)),\n );\n }\n\n /**\n * Get the latest project import file's name for a given projectId\n */\n getLatestImportFileForManuallyUpdate$(projectId: number): Observable {\n return this.apiService\n .getLatestImportFileForManuallyUpdate$(projectId)\n .pipe(\n filter((event) => event.type === HttpEventType.Response),\n map((response: HttpResponse) => response.body!),\n );\n }\n\n /**\n * Get the latest project import file's name for creating a new project\n */\n getLatestImportFileForCreateNewProject$(): Observable {\n return this.apiService\n .getLatestImportFileForCreateNewProject$()\n .pipe(\n filter((event) => event.type === HttpEventType.Response),\n map((response: HttpResponse) => response.body!),\n );\n }\n\n /**\n * Returns a FileDownloadResponsModel where the download link is impeded.\n *\n * @return {Observable}\n */\n getProjectExportList$(options: WorkPackageListOptions): Observable {\n return this.apiService\n .getProjectExportList$(options)\n .pipe(\n filter((event) => event.type === HttpEventType.Response),\n map((response: HttpResponse) => FileDownloadResponseModel.fromJSON(response.body!)),\n );\n }\n\n /**\n * Imports a project file and returns a list of projects including their structure\n *\n * @param {File} file\n * @param {string} [sapNumber]\n * @return {Observable}\n */\n postProjectsImport$(file: File, sapNumber?: string): Observable {\n return this.apiService\n .postProjectsImport$(file, sapNumber)\n .pipe(\n filter((event) => event.type === HttpEventType.Response),\n map((response: HttpResponse) => response.body!\n .items\n .map((project) => ProjectImportListPartialDtoModel.fromJSON(project))),\n );\n }\n\n /**\n * Imports a project file and returns the project specified by SapNumber in the request\n *\n * @param {File} file\n * @param {string} sapNumber\n * @return {Observable}\n */\n postProjectsImportSingleProject$(\n file: File,\n sapNumber: string,\n projectId: number,\n ): Observable {\n return this.apiService\n .postProjectsParseImportFile$(file, sapNumber, projectId)\n .pipe(\n filter((event) => event.type === HttpEventType.Response),\n map((response: HttpResponse) => ProjectImportListDtoModel.fromJSON(response.body!)),\n );\n }\n\n /**\n * Gets the Users which have a related Role like WP-Creator, WP-Unit-Coordinator etc.\n *\n * @param projectId\n * @param workPackageId\n * @param questionId\n *\n * @return {Observable}\n */\n getQuestionUserNotificationRecipients$(\n projectId: number,\n workPackageId: number,\n questionId: number | null,\n action: QuestionAction,\n ): Observable {\n return this.apiService.getQuestionUserNotificationRecipients$(projectId, workPackageId, questionId, action)\n .pipe(\n filter((event) => event.type === HttpEventType.Response),\n map((response: HttpResponse) => QuestionUserNotificationListResponseModel\n .fromJSON(response.body!)),\n );\n }\n\n /**\n * Creates a new conclusion for a question thread in a given work package.\n */\n postWorkPackageQuestionConclude$(\n projectId: number,\n workPackageId: number,\n questionId: number,\n conclude: ConclusionCreateRequestModel,\n ): Observable {\n return this.apiService\n .postWorkPackageQuestionConclude$(projectId, workPackageId, questionId, conclude.toJSON())\n .pipe(\n filter((event) => event.type === HttpEventType.Response),\n map((response: HttpResponse) => ConclusionCreateResponseModel\n .fromJSON(response.body!)),\n );\n }\n\n /**\n * Creates a new reopening question for a question thread in a given work package.\n */\n postWorkPackageQuestionReopen$(\n projectId: number,\n workPackageId: number,\n questionId: number,\n reopen: ReopenCreateRequestModel,\n ): Observable {\n return this.apiService\n .postWorkPackageQuestionReopen$(projectId, workPackageId, questionId, reopen.toJSON())\n .pipe(\n filter((event) => event.type === HttpEventType.Response),\n map((response: HttpResponse) => ReopenCreateResponseModel.fromJSON(response.body!)),\n );\n }\n\n /**\n *\n * @param projectId\n * @param workPackageId\n * @param questionId\n * @return {Observable}\n */\n getQuestionReplies$(\n projectId: number,\n workPackageId: number,\n questionId: number,\n ): Observable {\n return this.apiService\n .getQuestionReplies$(projectId, workPackageId, questionId)\n .pipe(\n filter((event) => event.type === HttpEventType.Response),\n map((response: HttpResponse) => ReplyListResponseModel.fromJSON(response.body!)),\n );\n }\n\n /**\n * Creates a new reply to a question thread of a given work package.\n */\n postWorkPackageQuestionReply$(\n projectId: number,\n workPackageId: number,\n questionId: number,\n reply: ReplyCreateRequestModel,\n ): Observable {\n return this.apiService\n .postWorkPackageQuestionReply$(projectId, workPackageId, questionId, reply.toJSON())\n .pipe(\n filter((event) => event.type === HttpEventType.Response),\n map((response: HttpResponse) => ReplyCreateResponseModel.fromJSON(response.body!)),\n );\n }\n\n /**\n * Creates a new Question\n */\n postWorkPackageQuestion$(\n projectId: number,\n workPackageId: number,\n request: QuestionCreateRequestModel,\n ): Observable {\n return this.apiService\n .postWorkPackageQuestion$(projectId, workPackageId, request.toJSON())\n .pipe(\n filter((event) => event.type === HttpEventType.Response),\n map((response: HttpResponse) => QuestionCreateResponseModel.fromJSON(response.body!)),\n );\n }\n\n /**\n * Updates an existing Question\n */\n putWorkPackageQuestion$(\n projectId: number,\n workPackageId: number,\n request: QuestionUpdateRequestModel,\n ): Observable {\n return this.apiService\n .putWorkPackageQuestion$(projectId, workPackageId, request.toJSON())\n .pipe(\n filter((event) => event.type === HttpEventType.Response),\n mapTo(undefined),\n );\n }\n\n /**\n * Creates a new project\n */\n postProject$(request: ProjectCreateRequestModel): Observable {\n return this.apiService\n .postProject$(request.toJSON())\n .pipe(\n filter((event) => event.type === HttpEventType.Response),\n map((response: HttpResponse) => ProjectCreateResponseModel.fromJSON(response.body!)),\n );\n }\n\n /**\n * Saves the project structure preset for the current user\n */\n putProjectStructurePreset$(structure: readonly LevelSaveRequestModel[]): Observable {\n const codeMap: string[] = [];\n\n const populateCodeMapByStructure = (levels: readonly LevelSaveRequestModel[]): void => {\n levels.forEach((level) => {\n if (level.isSelected) {\n if (level.children && level.children.length > 0) {\n codeMap.push(level.codePath!);\n populateCodeMapByStructure(level.children);\n } else {\n codeMap.push(level.codePath!);\n }\n }\n });\n };\n\n populateCodeMapByStructure(structure);\n\n const requestModel = new ProjectStructurePresetUpdateRequestModel(codeMap);\n\n return this.apiService\n .putProjectStructurePreset$(requestModel.toJSON())\n .pipe(\n filter((event) => event.type === HttpEventType.Response),\n switchMap(() => EMPTY),\n );\n }\n\n /**\n * Gets planning of a specific project\n */\n getProjectPlanning$(\n projectId: number,\n request: ProjectPlanningViewRequestModel,\n ): Observable {\n return this.apiService\n .getProjectPlanning$(projectId, request)\n .pipe(\n filter((event) => event.type === HttpEventType.Response),\n map((response: HttpResponse) => ProjectPlanningViewResponseModel\n .fromJSON(response.body!)),\n );\n }\n\n /**\n * Creates a new level\n */\n postProjectLevel$(projectId: number, request: LevelCreateRequestModel): Observable {\n return this.apiService\n .postProjectLevel$(projectId, request.toJSON())\n .pipe(\n filter((event) => event.type === HttpEventType.Response),\n map((response: HttpResponse) => LevelCreateResponseModel.fromJSON(response.body!)),\n );\n }\n\n /**\n * Updates a specific project level\n */\n updateProjectLevel$(\n projectId: number,\n levelId: number,\n request: LevelPlanningUpdateRequestModel,\n ): Observable {\n return this.apiService\n .updateProjectLevel$(projectId, levelId, request.toJSON())\n .pipe(\n filter((event) => event.type === HttpEventType.Response),\n mapTo(undefined),\n );\n }\n\n /**\n * Swaps the to provided levels' order\n */\n swapProjectLevels$(projectId: number, request: LevelSwapRequestModel): Observable {\n return this.apiService\n .swapProjectLevels$(projectId, request.toJSON())\n .pipe(\n filter((event) => event.type === HttpEventType.Response),\n mapTo(undefined),\n );\n }\n\n /**\n * Deletes a specific project level and its children, if any\n */\n deleteProjectLevel$(projectId: number, levelId: number): Observable {\n return this.apiService\n .deleteProjectLevel$(projectId, levelId)\n .pipe(\n filter((event) => event.type === HttpEventType.Response),\n mapTo(undefined),\n );\n }\n\n /**\n * Gets a flat list of levels for the current project and, if given, the current parent level\n */\n getProjectLevels$(projectId: number, parentLevelId?: number): Observable {\n return this.apiService\n .getProjectLevels$(projectId, parentLevelId)\n .pipe(\n filter((event) => event.type === HttpEventType.Response),\n map((response: HttpResponse) => LevelListResponseModel.fromJSON(response.body!)),\n );\n }\n\n /**\n * Gets a flat list of levels for the current project and, if given, the current parent level\n */\n getLevelInformation$(levelId?: number): Observable {\n return this.apiService\n .getLevelInformation$(levelId)\n .pipe(\n filter((event) => event.type === HttpEventType.Response),\n map((response: HttpResponse) => LevelInfoResponseModel.fromJSON(response.body!)),\n );\n }\n\n /**\n * Gets a nested list of levels for the current project\n * @param projectId\n * @param isFilteredByRights - if true, the levels will be filtered by the user's rights (this is used during copy and move)\n * @return {Observable}\n */\n getProjectStructure$(projectId: number, isFilteredByRights: boolean = false): Observable {\n return this.apiService\n .getProjectStructure$(projectId, isFilteredByRights)\n .pipe(\n filter((event) => event.type === HttpEventType.Response),\n map((response: HttpResponse) => ProjectStructureResponseModel\n .fromJSON(response.body!)),\n );\n }\n\n /**\n * Gets a page of a list of filtered projects\n *\n * @param {number} [pageIndex]\n * @param {number} [pageSize]\n * @param {ProjectColumnFilters} [columnFilters]\n * @param {string} [sortColumn]\n * @param {SortDirection} [sortDirection]\n * @return {Observable}\n */\n getProjects$(\n pageIndex?: number,\n pageSize?: number,\n columnFilters?: ProjectColumnFilters,\n sortColumn?: string,\n sortDirection?: SortDirection,\n ): Observable {\n const options = new ListQueryOptions(pageIndex, pageSize, columnFilters, sortColumn, sortDirection);\n\n return this.apiService\n .getProjects$(options)\n .pipe(\n filter((event) => event.type === HttpEventType.Response),\n map((response: HttpResponse) => ProjectListResponseModel.fromJSON(response.body!)),\n );\n }\n\n /**\n * Gets a page of a list of filtered work packages\n */\n getWorkPackages$(\n pageIndex?: number,\n pageSize?: number,\n columnFilters?: WorkPackageColumnFilters,\n sortColumn?: string,\n sortDirection?: SortDirection,\n ): Observable {\n const options = new WorkPackageListOptions(pageIndex, pageSize, columnFilters, sortColumn, sortDirection);\n\n return this.apiService\n .getWorkPackages$(options)\n .pipe(\n filter((event) => event.type === HttpEventType.Response),\n map((response: HttpResponse) => WorkPackageViewListResponseModel\n .fromJSON(response.body!)),\n );\n }\n\n /**\n * Assigns the given work package to the given user\n */\n assignWorkPackageToUser$(projectId: number, workpackageId: number, userId: string): Observable {\n return this.apiService\n .assignWorkPackageToUser$(projectId, workpackageId, userId)\n .pipe(\n filter((event) => event.type === HttpEventType.Response),\n mapTo(undefined),\n );\n }\n\n /**\n * Gets a limited list of projects a unit coordinator has access to.\n * Is slimmer than getProjectSelectors() as it only returns the minimal data.\n */\n getProjectsForUnitCoordinator$(\n requestOptions: AvailableRequestRequestOptions,\n ): Observable {\n return this.apiService\n .getProjectsForUnitCoordinator$(requestOptions)\n .pipe(\n filter((event) => event.type === HttpEventType.Response),\n map((response: HttpResponse) => AvailableProjectListResponseModel\n .fromJSON(response.body!)),\n map((response) => response.items),\n );\n }\n\n /**\n * Gets a page of a list of filtered work packages\n */\n getBasicWorkPackages$(\n requestOptions: BasicWorkpackagesRequestOptions,\n ): Observable {\n return this.apiService\n .getBasicWorkPackages$(requestOptions)\n .pipe(\n filter((event) => event.type === HttpEventType.Response),\n map((response: HttpResponse) => BasicWorkPackageViewListResponseModel\n .fromJSON(response.body!)),\n );\n }\n\n getBasicWorkPackageDetail$(\n projectId: number,\n workPackageId: number,\n userId: string,\n ): Observable {\n return this.apiService\n .getBasicWorkPackageDetail$(projectId, workPackageId, userId)\n .pipe(\n filter((event) => event.type === HttpEventType.Response),\n map((response: HttpResponse) => BasicWorkPackageDetailResponseModel\n .fromJSON(response.body!)),\n );\n }\n\n /**\n * Gets a list of filtered questions of a unit where the current user is related to\n *\n * @param {number} [pageIndex]\n * @param {number} [pageSize]\n * @param {QuestionsColumnFilters} [columnFilters]\n * @param {string} [sortColumn]\n * @param {SortDirection} [sortDirection]\n * @return {Observable}\n */\n getQuestions$(\n pageIndex?: number,\n pageSize?: number,\n columnFilters?: QuestionsColumnFilters,\n sortColumn?: string,\n sortDirection?: SortDirection,\n ): Observable {\n const options = new UnitQuestionsListOptions(pageIndex, pageSize, columnFilters, sortColumn, sortDirection);\n\n return this.apiService\n .getQuestions$(options)\n .pipe(\n filter((event) => event.type === HttpEventType.Response),\n map((response: HttpResponse) => QuestionsViewListResponseModel\n .fromJSON(response.body!)),\n );\n }\n\n /**\n * Gets a list of work packages for a given level\n *\n * @param {number} projectId\n * @param {number} levelId\n * @return {Observable}\n */\n getProjectLevelWorkpackages$(projectId: number, levelId: number): Observable {\n return this.apiService\n .getProjectLevelWorkpackages$(projectId, levelId)\n .pipe(\n filter((event) => event.type === HttpEventType.Response),\n map((response: HttpResponse) => WorkPackageListResponseModel.fromJSON(response.body!)),\n );\n }\n\n /**\n * Gets a list of work packages for a given level\n *\n * @param {number} projectId\n * @return {Observable}\n */\n getProjectWorkpackages$(\n projectId: number,\n orderByLastUpdated: boolean = false,\n filters: ProjectStructureFiltersSettingsModel | null = null,\n ): Observable {\n return this.apiService\n .getProjectWorkpackages$(projectId, orderByLastUpdated, filters)\n .pipe(\n filter((event) => event.type === HttpEventType.Response),\n map((response: HttpResponse) => WorkPackageListResponseModel.fromJSON(response.body!)),\n );\n }\n\n /**\n * Gets a WorkPackageViewResponseModel by project id and work package id\n *\n * @param {number} projectId\n * @param {number} workPackageId\n * @return {Observable}\n */\n getWorkPackageView$(projectId: number, workPackageId: number): Observable {\n return this.apiService\n .getWorkPackageView$(projectId, workPackageId)\n .pipe(\n filter((event) => event.type === HttpEventType.Response),\n map((response: HttpResponse) => WorkPackageViewResponseModel.fromJSON(response.body!)),\n );\n }\n\n /**\n * Fetches a list of attachments of a specific type from a work package.\n */\n getWorkPackageAttachments$(\n projectId: number,\n workPackageId: number,\n type: DocumentType,\n ): Observable {\n return this.apiService\n .getWorkPackageAttachments$(projectId, workPackageId, type)\n .pipe(\n filter((event) => event.type === HttpEventType.Response),\n map((response: HttpResponse) => AttachmentListResponseModel.fromJSON(response.body!)),\n );\n }\n\n /**\n * Gets the view to edit the resource planning of a work package.\n */\n getWorkPackageResourcePlanningView$(\n projectId: number,\n workPackageId: number,\n year: number,\n week: number,\n numberOfWeeks: number,\n ): Observable {\n return this.apiService\n .getWorkPackageResourcePlanningView$(projectId, workPackageId, year, week, numberOfWeeks)\n .pipe(\n filter((event) => event.type === HttpEventType.Response),\n // eslint-disable-next-line max-len\n map((response: HttpResponse) => WorkPackageResourcePlanningViewResponseModel\n .fromJSON(response.body!)),\n );\n }\n\n /**\n * Gets the user's capacity and planning information\n */\n getResponsibleUserCapacity$(\n projectId: number,\n workPackageId: number,\n year: number,\n week: number,\n numberOfWeeks: number,\n userId: string,\n ): Observable {\n return this.apiService\n .getResponsibleUserCapacity$(projectId, workPackageId, year, week, numberOfWeeks, userId)\n .pipe(\n filter((event) => event.type === HttpEventType.Response),\n map((response: HttpResponse) => ResponsibleUserDtoModel.fromJSON(response.body!)),\n );\n }\n\n /**\n * Gets the resource's capacity and planning information\n */\n getResponsibleResourceCapacity$(\n projectId: number,\n workPackageId: number,\n year: number,\n week: number,\n numberOfWeeks: number,\n nonHumanResourceId: string,\n ): Observable {\n return this.apiService\n .getResponsibleResourceCapacity$(projectId, workPackageId, year, week, numberOfWeeks, nonHumanResourceId)\n .pipe(\n filter((event) => event.type === HttpEventType.Response),\n map((response: HttpResponse) => ResponsibleResourceDtoModel.fromJSON(response.body!)),\n );\n }\n\n /**\n * Gets a list of questions for a given work package.\n *\n * @param {number} projectId\n * @param {number} workPackageId\n * @param {number} [pageIndex]\n * @param {number} [pageSize]\n * @param {WorkPackageQuestionColumnFilters} [columnFilters]\n * @param {number} [questionId]\n * @return {Observable}\n */\n getWorkPackageQuestions$(\n projectId: number,\n workPackageId: number,\n pageIndex?: number,\n pageSize?: number,\n columnFilters?: WorkPackageQuestionColumnFilters,\n questionId?: number,\n ): Observable {\n return this.apiService\n .getWorkPackageQuestions$(projectId, workPackageId, pageIndex, pageSize, columnFilters, questionId)\n .pipe(\n filter((event) => event.type === HttpEventType.Response),\n map((response: HttpResponse) => QuestionListResponseModel.fromJSON(response.body!)),\n );\n }\n\n /**\n * Creates a new Work Package within a project\n */\n postWorkPackage$(\n projectId: number,\n request: WorkPackageCreateRequestModel,\n ): Observable {\n return this.apiService\n .postWorkPackage$(projectId, request.toJSON())\n .pipe(\n filter((event) => event.type === HttpEventType.Response),\n map((response: HttpResponse) => WorkPackageCreateResponseModel\n .fromJSON(response.body!)),\n );\n }\n\n /**\n * Updates an existing Work Package within a project\n *\n * @param {number} projectId\n * @param {number} workPackageId\n * @param {WorkPackageUpdateRequest} request\n * @returns {Observable}\n */\n putWorkPackage$(\n projectId: number,\n workPackageId: number,\n request: WorkPackageUpdateRequestModel,\n ): Observable {\n return this.apiService\n .putWorkPackage$(projectId, workPackageId, request.toJSON())\n .pipe(\n filter((event) => event.type === HttpEventType.Response),\n mapTo(undefined),\n );\n }\n\n putAdditionalSuppliers$(\n projectId: number,\n workPackageId: number,\n request: AdditionalSuppliersUpdateRequest,\n ): Observable {\n return this.apiService\n .updateAdditionalSuppliers$(projectId, workPackageId, request)\n .pipe(\n filter((event) => event.type === HttpEventType.Response),\n mapTo(undefined),\n );\n }\n\n /**\n * Updates an existing Work Package within a project\n */\n duplicateWorkPackage$(\n originalProjectId: number,\n originalWorkPackageId: number,\n request: WorkPackageDuplicateRequest,\n ): Observable {\n return this.apiService\n .duplicateWorkPackage$(originalProjectId, originalWorkPackageId, request)\n .pipe(\n filter((event) => event.type === HttpEventType.Response),\n map((response: HttpResponse) => WorkPackageCreateResponseModel\n .fromJSON(response.body!)),\n );\n }\n\n moveWorkPackage$(\n originalProjectId: number,\n originalWorkPackageId: number,\n request: WorkPackageMoveRequest,\n ): Observable {\n return this.apiService\n .moveWorkPackage$(originalProjectId, originalWorkPackageId, request)\n .pipe(\n filter((event) => event.type === HttpEventType.Response),\n mapTo(undefined),\n );\n }\n\n /**\n * Deletes a specific Work Package\n *\n * @param {number} projectId\n * @param {number} workPackageId\n * @returns {Observable}\n */\n deleteWorkPackage$(projectId: number, workPackageId: number): Observable {\n return this.apiService\n .deleteWorkPackage$(projectId, workPackageId)\n .pipe(\n filter((event) => event.type === HttpEventType.Response),\n mapTo(undefined),\n );\n }\n\n /**\n * Saves the resource planning of a work package.\n */\n saveWorkPackageResourcePlanning$(\n projectId: number,\n workPackageId: number,\n request: WorkPackageResourcePlanningUpdateRequestModel,\n ): Observable {\n return this.apiService\n .saveWorkPackageResourcePlanning$(projectId, workPackageId, request.toJSON())\n .pipe(\n filter((event) => event.type === HttpEventType.Response),\n mapTo(undefined),\n );\n }\n\n /**\n * Cancels the resource planning of a work package.\n */\n cancelWorkPackageResourcePlanning$(\n projectId: number,\n workPackageId: number,\n request: OldPlannedResourcesRequestModel,\n ): Observable {\n return this.apiService\n .cancelWorkPackageResourcePlanning$(projectId, workPackageId, request.toJSON())\n .pipe(\n filter((event) => event.type === HttpEventType.Response),\n mapTo(undefined),\n );\n }\n\n /**\n * Confirms the resource planning of a work package.\n */\n confirmWorkPackageResourcePlanning$(\n projectId: number,\n workPackageId: number,\n request: WorkPackageResourcePlanningUpdateRequestModel,\n ): Observable {\n return this.apiService\n .confirmWorkPackageResourcePlanning$(projectId, workPackageId, request.toJSON())\n .pipe(\n filter((event) => event.type === HttpEventType.Response),\n mapTo(undefined),\n );\n }\n\n /**\n * Sets the work package to its next state by comparing from and to.\n * @param transition\n * @param workPackageStatusForm\n * @return {Observable}\n */\n // eslint-disable-next-line complexity, max-lines-per-function\n doWorkPackageStatusTransition$(\n transition: WorkPackageStatusTransition,\n workPackageStatusForm: WorkPackageStatusForm,\n ): Observable {\n const {\n projectId, workPackageId, from, to,\n } = transition;\n const {\n estimatedNewEndDate, rating, conclusion, comment, l5Units, sendNotifications,\n } = workPackageStatusForm;\n\n if (from === WorkPackageStatus.ReadyForScopeChangeApproval && to === WorkPackageStatus.ScopeChange) {\n return this.putWorkPackageStatusToScopeChange$(projectId, workPackageId, comment, sendNotifications);\n } if (from === WorkPackageStatus.InQualityAssurance && to === WorkPackageStatus.ReadyForApproval) {\n return this.putWorkPackageStatusToReadyForApproval$(projectId, workPackageId, comment, sendNotifications);\n } if (from === WorkPackageStatus.ReadyForApproval && to === WorkPackageStatus.Closed) {\n return this.putWorkPackageStatusToClosed$(\n projectId,\n workPackageId,\n rating!.ratingId,\n // TODO: Conclusion is of type string when coming directly from the raw form values.\n (!isEmpty(conclusion) ? parseInt(conclusion as any, 10) : WorkPackageConclusion.Completed),\n comment,\n sendNotifications,\n );\n } if (to === WorkPackageStatus.Forecasted) {\n return this.putWorkPackageStatusToForecasted$(projectId, workPackageId, comment, sendNotifications);\n } if (to === WorkPackageStatus.Issued) {\n return this.putWorkPackageStatusToIssued$(projectId, workPackageId, comment, sendNotifications);\n } if (to === WorkPackageStatus.Draft) {\n return this.putWorkPackageStatusToDraft$(projectId, workPackageId, comment, sendNotifications);\n } if (to === WorkPackageStatus.Confirmed) {\n return this.putWorkPackageStatusToConfirmed$(projectId, workPackageId, comment, l5Units, sendNotifications);\n } if (to === WorkPackageStatus.OnHold) {\n return this.putWorkPackageStatusToOnHold$(projectId, workPackageId, comment, sendNotifications);\n } if (to === WorkPackageStatus.InQualityAssurance) {\n return this.putWorkPackageStatusToQualityAssurance$(projectId, workPackageId, comment, sendNotifications);\n } if (to === WorkPackageStatus.ReadyToResumeWork) {\n return this.putWorkPackageStatusToReadyToResumeWork$(\n projectId,\n workPackageId,\n estimatedNewEndDate!,\n comment,\n sendNotifications,\n );\n } if (to === WorkPackageStatus.ReadyForScopeChangeApproval) {\n return this.putWorkPackageStatusToReadyForScopeChangeApproval$(\n projectId,\n workPackageId,\n comment,\n sendNotifications,\n );\n } if (to === WorkPackageStatus.InProgress && from === WorkPackageStatus.Draft) {\n return this.selfAssignWorkPackage$(projectId, workPackageId, comment);\n } if (to === WorkPackageStatus.InProgress) {\n return this.putWorkPackageStatusToInProgress$(projectId, workPackageId, comment, sendNotifications);\n }\n\n return throwError(new Error('No transition type found'));\n }\n\n /**\n * Updates a specific work package status to Draft\n */\n putWorkPackageStatusToDraft$(\n projectId: number,\n workPackageId: number,\n commentMessage?: string,\n sendNotifications?: boolean,\n ): Observable {\n ProjectService.checkWorkPackagePathParameters(projectId, workPackageId);\n const request = ProjectService.createStatusUpdateRequestModel(\n workPackageId,\n commentMessage,\n undefined,\n sendNotifications,\n );\n\n return this.apiService\n .putWorkPackageStatusToDraft$(projectId, workPackageId, request.toJSON())\n .pipe(\n filter((event) => event.type === HttpEventType.Response),\n mapTo(undefined),\n );\n }\n\n /**\n * Updates a specific work package status to Issued\n */\n putWorkPackageStatusToIssued$(\n projectId: number,\n workPackageId: number,\n commentMessage?: string,\n sendNotifications?: boolean,\n ): Observable {\n ProjectService.checkWorkPackagePathParameters(projectId, workPackageId);\n const request = ProjectService.createStatusUpdateRequestModel(\n workPackageId,\n commentMessage,\n undefined,\n sendNotifications,\n );\n\n return this.apiService\n .putWorkPackageStatusToIssued$(projectId, workPackageId, request.toJSON())\n .pipe(\n filter((event) => event.type === HttpEventType.Response),\n mapTo(undefined),\n );\n }\n\n /**\n * Updates a specific work package status to Forecasted\n */\n putWorkPackageStatusToForecasted$(\n projectId: number,\n workPackageId: number,\n commentMessage?: string,\n sendNotifications?: boolean,\n ): Observable {\n ProjectService.checkWorkPackagePathParameters(projectId, workPackageId);\n const request = ProjectService.createStatusUpdateRequestModel(\n workPackageId,\n commentMessage,\n undefined,\n sendNotifications,\n );\n\n return this.apiService\n .putWorkPackageStatusToForecasted$(projectId, workPackageId, request.toJSON())\n .pipe(\n filter((event) => event.type === HttpEventType.Response),\n mapTo(undefined),\n );\n }\n\n /**\n * Updates a specific work package status to Quality Assurance\n */\n putWorkPackageStatusToQualityAssurance$(\n projectId: number,\n workPackageId: number,\n commentMessage?: string,\n sendNotifications?: boolean,\n ): Observable {\n ProjectService.checkWorkPackagePathParameters(projectId, workPackageId);\n const request = ProjectService.createStatusUpdateRequestModel(\n workPackageId,\n commentMessage,\n undefined,\n sendNotifications,\n );\n\n return this.apiService\n .putWorkPackageStatusToQualityAssurance$(projectId, workPackageId, request.toJSON())\n .pipe(\n filter((event) => event.type === HttpEventType.Response),\n mapTo(undefined),\n );\n }\n\n /**\n * Updates a specific WorkPackage to status inProgress\n */\n putWorkPackageStatusToClosed$(\n projectId: number,\n workPackageId: number,\n ratingId: number,\n conclusion: WorkPackageConclusion,\n commentMessage?: string,\n sendNotifications?: boolean,\n ): Observable {\n ProjectService.checkWorkPackagePathParameters(projectId, workPackageId);\n const request = new WorkPackageCloseRequestModel(\n workPackageId,\n conclusion,\n ratingId,\n commentMessage,\n sendNotifications,\n );\n\n return this.apiService\n .putWorkPackageStatusToClosed$(projectId, workPackageId, request.toJSON())\n .pipe(\n filter((event) => event.type === HttpEventType.Response),\n mapTo(undefined),\n );\n }\n\n /**\n * Updates a specific WorkPackage to status inProgress\n */\n putWorkPackageStatusToInProgress$(\n projectId: number,\n workPackageId: number,\n commentMessage?: string,\n sendNotifications?: boolean,\n ): Observable {\n ProjectService.checkWorkPackagePathParameters(projectId, workPackageId);\n const request = ProjectService.createStatusUpdateRequestModel(\n workPackageId,\n commentMessage,\n undefined,\n sendNotifications,\n );\n\n return this.apiService\n .putWorkPackageStatusToInProgress$(projectId, workPackageId, request.toJSON())\n .pipe(\n filter((event) => event.type === HttpEventType.Response),\n mapTo(undefined),\n );\n }\n\n /**\n * Updates a specific WorkPackage to status inProgress\n */\n selfAssignWorkPackage$(projectId: number, workPackageId: number, commentMessage?: string): Observable {\n ProjectService.checkWorkPackagePathParameters(projectId, workPackageId);\n const request = ProjectService.createStatusUpdateRequestModel(workPackageId, commentMessage, undefined, false);\n\n return this.apiService\n .selfAssignWorkPackage$(projectId, workPackageId, request.toJSON())\n .pipe(\n filter((event) => event.type === HttpEventType.Response),\n mapTo(undefined),\n );\n }\n\n /**\n * Updates a specific work package status to Confirmed\n */\n putWorkPackageStatusToConfirmed$(\n projectId: number,\n workPackageId: number,\n commentMessage?: string,\n supplierUnitId?: number,\n sendNotifications?: boolean,\n ): Observable {\n ProjectService.checkWorkPackagePathParameters(projectId, workPackageId);\n const request = ProjectService.createStatusUpdateRequestModel(\n workPackageId,\n commentMessage,\n supplierUnitId,\n sendNotifications,\n );\n\n return this.apiService\n .putWorkPackageStatusToConfirmed$(projectId, workPackageId, request.toJSON())\n .pipe(\n filter((event) => event.type === HttpEventType.Response),\n mapTo(undefined),\n );\n }\n\n /**\n * Updates a specific work package status to Confirmed\n */\n putWorkPackageStatusToOnHold$(\n projectId: number,\n workPackageId: number,\n commentMessage?: string,\n sendNotifications?: boolean,\n ): Observable {\n ProjectService.checkWorkPackagePathParameters(projectId, workPackageId);\n const request = ProjectService.createStatusUpdateRequestModel(\n workPackageId,\n commentMessage,\n undefined,\n sendNotifications,\n );\n\n return this.apiService\n .putWorkPackageStatusToOnHold$(projectId, workPackageId, request.toJSON())\n .pipe(\n filter((event) => event.type === HttpEventType.Response),\n mapTo(undefined),\n );\n }\n\n createOutputDocumentsUploadRequest$(\n projectId: number,\n workPackageId: number,\n request: WorkPackageUploadOutputDocumentsRequestModel,\n ): Observable {\n return this.apiService\n .postOutputDocuments$(projectId, workPackageId, request.toJSON())\n .pipe(\n filter((event) => event.type === HttpEventType.Response),\n mapTo(undefined),\n );\n }\n\n /**\n * Create a rework entry of the given work package\n */\n createWorkPackageRework$(projectId: number, request: WorkPackageReworkCreateRequestModel): Observable {\n return this.apiService\n .postWorkPackageRework$(projectId, request.toJSON())\n .pipe(\n filter((event) => event.type === HttpEventType.Response),\n mapTo(undefined),\n );\n }\n\n /**\n * Create a feedback entry of the given work package\n */\n createFeedback$(projectId: number, request: FeedbackCreateRequestModel): Observable {\n return this.apiService\n .postFeedback$(projectId, request.toJSON())\n .pipe(\n filter((event) => event.type === HttpEventType.Response),\n mapTo(undefined),\n );\n }\n\n /**\n * Updates a specific work package status to Scope Change and creates the related scope change\n */\n createWorkPackageScopeChange$(request: ScopeChangeCreateRequestModel): Observable {\n return this.apiService\n .postWorkPackageScopeChange$(request.projectId, request.workPackageId, request.toJSON())\n .pipe(\n filter((event) => event.type === HttpEventType.Response),\n mapTo(undefined),\n );\n }\n\n /**\n * Updates an existing scope change\n */\n updateWorkPackageScopeChange$(request: ScopeChangeUpdateRequestModel): Observable {\n return this.apiService\n .putWorkPackageScopeChange$(request.projectId, request.workPackageId, request.scopeChangeId, request.toJSON())\n .pipe(\n filter((event) => event.type === HttpEventType.Response),\n mapTo(undefined),\n );\n }\n\n /**\n * Deletes an existing scope change\n */\n deleteWorkPackageScopeChange$(\n projectId: number,\n workPackageId: number,\n scopeChangeId: number,\n ): Observable {\n return this.apiService\n .deleteWorkPackageScopeChange$(projectId, workPackageId, scopeChangeId)\n .pipe(\n filter((event) => event.type === HttpEventType.Response),\n mapTo(undefined),\n );\n }\n\n /**\n * Updates a specific work package status to Confirmed\n */\n putWorkPackageStatusToReadyToResumeWork$(\n projectId: number,\n workPackageId: number,\n estimatedNewEndDate: moment.Moment,\n commentMessage?: string,\n sendNotifications?: boolean,\n ): Observable {\n ProjectService.checkWorkPackagePathParameters(projectId, workPackageId);\n const request = new SuspensionCreateRequestModel(\n workPackageId,\n estimatedNewEndDate,\n commentMessage,\n sendNotifications,\n );\n\n return this.apiService\n .putWorkPackageStatusToReadyToResumeWork$(projectId, workPackageId, request.toJSON())\n .pipe(\n filter((event) => event.type === HttpEventType.Response),\n mapTo(undefined),\n );\n }\n\n putWorkPackageStatusToReadyForScopeChangeApproval$(\n projectId: number,\n workPackageId: number,\n commentMessage?: string,\n sendNotifications?: boolean,\n ): Observable {\n ProjectService.checkWorkPackagePathParameters(projectId, workPackageId);\n const request = ProjectService.createStatusUpdateRequestModel(\n workPackageId,\n commentMessage,\n undefined,\n sendNotifications,\n );\n\n return this.apiService\n .putWorkPackageStatusToReadyForScopeChangeApproval$(projectId, workPackageId, request.toJSON())\n .pipe(\n filter((event) => event.type === HttpEventType.Response),\n mapTo(undefined),\n );\n }\n\n putWorkPackageSubmitterSettings$(\n projectId: number,\n workPackageId: number,\n data: WpMinimalSettingsInterface,\n ): Observable {\n ProjectService.checkWorkPackagePathParameters(projectId, workPackageId);\n\n const request = new WorkPackageSubmitterSettingsUpdateRequestModel(\n workPackageId,\n data.hourlyRateCategoriesPairs,\n data.projectTypeCode,\n // TODO: This is a tmp fix once we change the Submitter Settings dialog in the wp view we will change this\n typeof data.projectNumber !== 'string' ? data.projectNumber?.code : data.projectNumber.trim(),\n data.activityItemCategoryNumber,\n );\n\n return this.apiService\n .putWorkPackageSubmitterSettings$(projectId, workPackageId, request.toJSON())\n .pipe(\n filter((event) => event.type === HttpEventType.Response),\n mapTo(undefined),\n );\n }\n\n /**\n * Post the minimal data to create an ad-hoc Workpackage\n * @param requestData\n * @returns\n */\n // eslint-disable-next-line max-len\n postAdhocWorkPackage$(data: WpMinimalSettingsInterface, userId: string, year?: number, weekNumber?: number): Observable {\n const request: AdhocWorkpackageRequestModel = {\n submitterProjectTypeCode: data.projectTypeCode,\n submitterProjectNumber: typeof data.projectNumber !== 'string' ? data.projectNumber?.code : data.projectNumber.trim(),\n hourlyRateCategories: data.hourlyRateCategoriesPairs.map((item) => item.submitterHourlyRateCategory),\n submitterActivityItemCategoryNumber: data.activityItemCategoryNumber,\n year,\n weekNumber,\n userId,\n };\n return this.apiService\n .postAdhocWorkPackage$(request)\n .pipe(\n filter((event) => event.type === HttpEventType.Response),\n map((response: HttpResponse) => response.body as WorkPackageCreateResponse),\n );\n }\n\n putWorkPackageSupplierSettings$(\n projectId: number,\n workPackageId: number,\n request: WorkPackageSupplierSettingsUpdateRequestModel,\n ): Observable {\n ProjectService.checkWorkPackagePathParameters(projectId, workPackageId);\n\n return this.apiService\n .putWorkPackageSupplierSettings$(projectId, workPackageId, request.toJSON())\n .pipe(\n filter((event) => event.type === HttpEventType.Response),\n mapTo(undefined),\n );\n }\n\n putWorkPackageStatusToScopeChange$(\n projectId: number,\n workPackageId: number,\n commentMessage?: string,\n sendNotifications?: boolean,\n ): Observable {\n ProjectService.checkWorkPackagePathParameters(projectId, workPackageId);\n const request = ProjectService.createStatusUpdateRequestModel(\n workPackageId,\n commentMessage,\n undefined,\n sendNotifications,\n );\n\n return this.apiService\n .putWorkPackageStatusToScopeChange$(projectId, workPackageId, request.toJSON())\n .pipe(\n filter((event) => event.type === HttpEventType.Response),\n mapTo(undefined),\n );\n }\n\n putWorkPackageStatusToReadyForApproval$(\n projectId: number,\n workPackageId: number,\n commentMessage?: string,\n sendNotifications?: boolean,\n ): Observable {\n ProjectService.checkWorkPackagePathParameters(projectId, workPackageId);\n const request = ProjectService.createStatusUpdateRequestModel(\n workPackageId,\n commentMessage,\n undefined,\n sendNotifications,\n );\n\n return this.apiService\n .putWorkPackageStatusToReadyForApproval$(projectId, workPackageId, request.toJSON())\n .pipe(\n filter((event) => event.type === HttpEventType.Response),\n mapTo(undefined),\n );\n }\n\n /**\n * Gets a limited list of projects a user has access to (create privileges).\n */\n getProjectSelectors$(requestOptions: SelectorRequestOptions): Observable {\n return this.apiService\n .getProjectSelectors$(requestOptions)\n .pipe(\n filter((event) => event.type === HttpEventType.Response),\n map((response: HttpResponse) => ProjectSelectorListResponseModel\n .fromJSON(response.body!)),\n map((response) => response.items),\n );\n }\n\n getWorkPackageFeedbackRecipients$(\n projectId: number,\n workPackgeId: number,\n isSupplierFeedback: boolean,\n ): Observable {\n return this.apiService\n .getWorkPackageFeedbackRecipients$(projectId, workPackgeId, isSupplierFeedback)\n .pipe(\n filter((event) => event.type === HttpEventType.Response),\n map((response: HttpResponse) => response.body!.map(UserSlimDtoModel.fromJSON)),\n );\n }\n}\n","import { SkillDtoModel } from './skill.dto.model';\nimport { SkillCategoryWithSkillsDto } from '../../interfaces/dtos/skill-category-with-skills.dto';\n\nexport class SkillCategoryWithSkillsDtoModel {\n constructor(\n readonly id: number,\n readonly name: string | null,\n readonly skills: SkillDtoModel[],\n ) {\n this.skills = skills.map((skill) => skill.clone());\n }\n\n static fromJSON(json: SkillCategoryWithSkillsDto): SkillCategoryWithSkillsDtoModel {\n return new SkillCategoryWithSkillsDtoModel(\n json.id,\n json.name,\n json.skills.map(SkillDtoModel.fromJSON),\n );\n }\n\n clone(): SkillCategoryWithSkillsDtoModel {\n return new SkillCategoryWithSkillsDtoModel(\n this.id,\n this.name,\n this.skills,\n );\n }\n}\n","import { SkillCategoryWithSkillsDtoModel } from '../dtos/skill-category-with-skills.dto.model';\nimport { SkillsResponse } from '../../interfaces/responses/skills.response';\nimport { UnitSkillDtoModel } from '../dtos/unit-skill.dto.model';\n\nexport class SkillsResponseModel {\n constructor(\n readonly categories: SkillCategoryWithSkillsDtoModel[],\n readonly unit: UnitSkillDtoModel | null,\n ) {\n this.categories = categories.map((category) => category.clone());\n }\n\n static fromJSON(json: SkillsResponse): SkillsResponseModel {\n return new SkillsResponseModel(\n json.categories.map(SkillCategoryWithSkillsDtoModel.fromJSON),\n json.unit ? UnitSkillDtoModel.fromJSON(json.unit) : null,\n );\n }\n}\n","import { SkillCategoryDto } from '../../interfaces/dtos/skill-category.dto';\n\nexport class SkillCategoryDtoModel {\n constructor(\n readonly canDelete: boolean,\n readonly id: number,\n readonly name: string | null,\n ) {}\n\n static fromJSON(json: SkillCategoryDto): SkillCategoryDtoModel {\n return new SkillCategoryDtoModel(\n json.canDelete,\n json.id,\n json.name,\n );\n }\n}\n","import { SkillRatingValueDto } from '../../interfaces/dtos/skill-rating-value.dto';\n\nexport class SkillRatingValueDtoModel {\n constructor(\n readonly userId: string,\n readonly value: number,\n ) {}\n\n static fromJSON(json: SkillRatingValueDto): SkillRatingValueDtoModel {\n return new SkillRatingValueDtoModel(\n json.userId,\n json.value,\n );\n }\n\n clone(): SkillRatingValueDtoModel {\n return new SkillRatingValueDtoModel(\n this.userId,\n this.value,\n );\n }\n\n toJSON(): SkillRatingValueDto {\n return {\n userId: this.userId,\n value: this.value,\n };\n }\n}\n","import { SkillRatingValueDtoModel } from './skill-rating-value.dto.model';\nimport { SkillRatingSkillDto } from '../../interfaces/dtos/skill-rating-skill.dto';\n\nexport class SkillRatingSkillDtoModel {\n constructor(\n readonly ratings: SkillRatingValueDtoModel[],\n readonly id: number,\n readonly name: string | null,\n ) {\n this.ratings = ratings.map((rating) => rating.clone());\n }\n\n static fromJSON(json: SkillRatingSkillDto): SkillRatingSkillDtoModel {\n return new SkillRatingSkillDtoModel(\n json.ratings.map(SkillRatingValueDtoModel.fromJSON),\n json.id,\n json.name,\n );\n }\n\n clone(): SkillRatingSkillDtoModel {\n return new SkillRatingSkillDtoModel(\n this.ratings.map((rating) => rating.clone()),\n this.id,\n this.name,\n );\n }\n\n toJSON(): SkillRatingSkillDto {\n return {\n ratings: this.ratings.map((rating) => rating.toJSON()),\n id: this.id,\n name: this.name,\n };\n }\n}\n","import { SkillRatingSkillDtoModel } from './skill-ratings-skill.dto.model';\nimport { SkillRatingCategoryDto } from '../../interfaces/dtos/skill-rating-category.dto';\n\nexport class SkillRatingCategoryDtoModel {\n constructor(\n readonly skills: SkillRatingSkillDtoModel[],\n readonly id: number,\n readonly name: string | null,\n ) {\n this.skills = skills.map((skill) => skill.clone());\n }\n\n static fromJSON(json: SkillRatingCategoryDto): SkillRatingCategoryDtoModel {\n return new SkillRatingCategoryDtoModel(\n json.skills.map(SkillRatingSkillDtoModel.fromJSON),\n json.id,\n json.name,\n );\n }\n\n clone(): SkillRatingCategoryDtoModel {\n return new SkillRatingCategoryDtoModel(\n this.skills.map((skill) => skill.clone()),\n this.id,\n this.name,\n );\n }\n\n toJSON(): SkillRatingCategoryDto {\n return {\n skills: this.skills.map((skill) => skill.toJSON()),\n id: this.id,\n name: this.name,\n };\n }\n}\n","import { UserBaseSlimDto } from '../../interfaces/dtos/user-base-slim.dto';\n\nexport class UserBaseSlimDtoModel {\n constructor(\n readonly userId: string,\n readonly fullName: string,\n readonly photoUrl: string | null,\n ) {}\n\n static fromJSON(json: UserBaseSlimDto): UserBaseSlimDtoModel {\n return new UserBaseSlimDtoModel(\n json.userId,\n json.fullName,\n json.photoUrl,\n );\n }\n\n clone(): UserBaseSlimDtoModel {\n return new UserBaseSlimDtoModel(\n this.userId,\n this.fullName,\n this.photoUrl,\n );\n }\n\n toJSON(): UserBaseSlimDto {\n return {\n userId: this.userId,\n fullName: this.fullName,\n photoUrl: this.photoUrl,\n };\n }\n}\n","import { SkillRatingCategoryDtoModel } from '../dtos/skill-rating-category.dto.model';\nimport { UserBaseSlimDtoModel } from '../dtos/user-base-slim.dto.model';\nimport { SkillRatingResponse } from '../../interfaces/responses/skill-rating.response';\n\nexport class SkillRatingResponseModel {\n constructor(\n readonly categories: SkillRatingCategoryDtoModel[],\n readonly users: UserBaseSlimDtoModel[],\n ) {\n this.categories = categories.map((category) => category.clone());\n this.users = users.map((user) => user.clone());\n }\n\n static fromJSON(json: SkillRatingResponse): SkillRatingResponseModel {\n return new SkillRatingResponseModel(\n json.categories.map(SkillRatingCategoryDtoModel.fromJSON),\n json.users.map(UserBaseSlimDtoModel.fromJSON),\n );\n }\n\n toJSON(): SkillRatingResponse {\n return {\n categories: this.categories.map((category) => category.clone()),\n users: this.users.map((user) => user.clone()),\n };\n }\n}\n","import { Injectable } from '@angular/core';\nimport { filter, map, mapTo } from 'rxjs/operators';\nimport { Observable } from 'rxjs';\nimport { HttpEventType, HttpResponse } from '@angular/common/http';\nimport { CollAppApiService } from './collapp-api.service';\nimport { SkillsResponseModel } from '../models/responses/skills.response.model';\nimport { SkillsResponse } from '../interfaces/responses/skills.response';\nimport { SkillCategoryDtoModel } from '../models/dtos/skill-category.dto.model';\nimport { SkillCategoryDto } from '../interfaces/dtos/skill-category.dto';\nimport { UpdateSkillCategoryRequestModel } from '../models/requests/update-skill-category.request.model';\nimport { UpdateSkillsRequestModel } from '../models/requests/update-skills.request.model';\nimport { SkillRatingResponseModel } from '../models/responses/skill-rating.response.model';\nimport { UpdateUserSkillRatingsRequestModel } from '../models/requests/update-user-skill-ratings.request.model';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class SkillsService {\n constructor(private apiService: CollAppApiService) { }\n\n getSkills$(unitId: number): Observable {\n return this.apiService\n .getSkills$(unitId)\n .pipe(\n filter((event) => event.type === HttpEventType.Response),\n map((response: HttpResponse) => SkillsResponseModel.fromJSON(response.body!)),\n );\n }\n\n putSkills$(unitId: number, request: UpdateSkillsRequestModel): Observable {\n return this.apiService\n .putSkills$(unitId, request.toJSON())\n .pipe(\n filter((event) => event.type === HttpEventType.Response),\n mapTo(undefined),\n );\n }\n\n getSkillCategories$(unitId: number): Observable {\n return this.apiService\n .getSkillCategories$(unitId)\n .pipe(\n filter((event) => event.type === HttpEventType.Response),\n map((response: HttpResponse) => response.body!.map(SkillCategoryDtoModel.fromJSON)),\n );\n }\n\n putSkillCategories$(unitId: number, request: UpdateSkillCategoryRequestModel): Observable {\n return this.apiService\n .putSkillCategories$(unitId, request.toJSON())\n .pipe(\n filter((event) => event.type === HttpEventType.Response),\n mapTo(undefined),\n );\n }\n\n getSkillRatings$(unitId: number): Observable {\n return this.apiService\n .getSkillRatings$(unitId)\n .pipe(\n filter((event) => event.type === HttpEventType.Response),\n map((response: HttpResponse) => SkillRatingResponseModel.fromJSON(response.body!)),\n );\n }\n\n putSkillRatings$(unitId: number, request: UpdateUserSkillRatingsRequestModel): Observable {\n return this.apiService\n .putSkillRatings$(unitId, request.toJSON())\n .pipe(\n filter((event) => event.type === HttpEventType.Response),\n mapTo(undefined),\n );\n }\n}\n","import moment from 'moment';\nimport { TimeTrackingDayInfoDto } from '../../interfaces/dtos/time-tracking-day-info.dto';\nimport { assertRequiredProperties } from '../../utilities/api.utility';\n\nexport class TimeTrackingDayInfoDtoModel {\n /**\n * Not provided via API, used to\n * store the calculated hours\n */\n calculatedHours: number = 0;\n\n constructor(\n readonly date: moment.Moment,\n readonly isHoliday: boolean,\n readonly holidayDescription: string,\n readonly punchedHours: number | null = null,\n readonly reportedHours: number | null = null,\n ) {\n this.date = date.clone();\n }\n\n static fromJSON(json: TimeTrackingDayInfoDto): TimeTrackingDayInfoDtoModel {\n assertRequiredProperties(json, [\n 'date',\n 'isHoliday',\n ]);\n\n return new TimeTrackingDayInfoDtoModel(\n moment(json.date)\n .parseZone(),\n json.isHoliday,\n json.holidayDescription,\n json.punchedHours,\n json.reportedHours,\n );\n }\n\n toJSON(): TimeTrackingDayInfoDto {\n return {\n date: this.date.toJSON(),\n isHoliday: this.isHoliday,\n holidayDescription: this.holidayDescription,\n punchedHours: this.punchedHours,\n reportedHours: this.reportedHours,\n };\n }\n\n clone(): TimeTrackingDayInfoDtoModel {\n // eslint-disable-next-line max-len\n return new TimeTrackingDayInfoDtoModel(this.date, this.isHoliday, this.holidayDescription, this.punchedHours, this.reportedHours);\n }\n}\n","import { TimeTrackingUserDto } from '../../interfaces/dtos/time-tracking-user.dto';\nimport { UserSlimDtoModel } from './user-slim.dto.model';\nimport { TimeTrackingStatus, timeTrackingStatusCodeName } from '../../../models/time-tracking-status.enum';\nimport { TimeTrackingEntryViewDtoModel } from './time-tracking-entry-view.dto.model';\nimport { TimeTrackingRowModel } from '../../../models/time-tracking-row';\nimport { assertRequiredProperties } from '../../utilities/api.utility';\nimport moment from 'moment';\n\nexport class TimeTrackingUserDtoModel extends TimeTrackingRowModel {\n readonly statusCodeName: string;\n\n constructor(\n public days: readonly TimeTrackingEntryViewDtoModel[],\n readonly user: UserSlimDtoModel,\n readonly plannedHours: number,\n readonly status: TimeTrackingStatus,\n readonly submittedOn: moment.Moment | null = null,\n ) {\n super(days);\n\n this.statusCodeName = timeTrackingStatusCodeName[status];\n }\n\n static fromJSON(json: TimeTrackingUserDto): TimeTrackingUserDtoModel {\n assertRequiredProperties(json, [\n 'days',\n 'user',\n 'status',\n ]);\n\n return new TimeTrackingUserDtoModel(\n (Array.isArray(json.days) ? json.days : [])\n .map((item) => TimeTrackingEntryViewDtoModel.fromJSON(item)),\n UserSlimDtoModel.fromJSON(json.user),\n json.plannedHours,\n json.status,\n json.submittedOn ? moment(json.submittedOn).parseZone() : null,\n );\n }\n\n toJSON(): TimeTrackingUserDto {\n return {\n days: this.days.map((item) => item.toJSON()),\n user: this.user.toJSON(),\n plannedHours: this.plannedHours,\n status: this.status,\n submittedOn: this.submittedOn ? this.submittedOn.toJSON() : null,\n };\n }\n}\n","import { TimeTrackingUnitUsersDto } from '../../interfaces/dtos/time-tracking-unit-users.dto';\nimport { UnitSlimDtoModel } from './unit-slim.dto.model';\nimport { TimeTrackingUserDtoModel } from './time-tracking-user.dto.model';\nimport { assertRequiredProperties } from '../../utilities/api.utility';\n\nexport class TimeTrackingUnitUsersDtoModel {\n constructor(\n readonly unit: UnitSlimDtoModel,\n readonly timeTrackingUsers: readonly TimeTrackingUserDtoModel[],\n readonly isCrossUtilized: boolean,\n ) {\n this.timeTrackingUsers = [...timeTrackingUsers];\n }\n\n static fromJSON(json: TimeTrackingUnitUsersDto): TimeTrackingUnitUsersDtoModel {\n assertRequiredProperties(json, [\n 'unit',\n 'timeTrackingUsers',\n ]);\n\n return new TimeTrackingUnitUsersDtoModel(\n UnitSlimDtoModel.fromJSON(json.unit),\n (Array.isArray(json.timeTrackingUsers) ? json.timeTrackingUsers : [])\n .map((item) => TimeTrackingUserDtoModel.fromJSON(item)),\n json.isCrossUtilized,\n );\n }\n\n toJSON(): TimeTrackingUnitUsersDto {\n return {\n unit: this.unit.toJSON(),\n timeTrackingUsers: this.timeTrackingUsers.map((item) => item.toJSON()),\n isCrossUtilized: this.isCrossUtilized,\n };\n }\n}\n","import { TimeTrackingDayInfoDtoModel } from '../dtos/time-tracking-day-info.dto.model';\nimport { TimeTrackingRowDtoModel } from '../dtos/time-tracking-row.dto.model';\nimport { MetadataModel } from '../metadata.model';\nimport { TimeTrackingStatus } from '../../../models/time-tracking-status.enum';\nimport { TimesheetViewResponse } from '../../interfaces/responses/timesheet-view.response';\nimport { UnitSlimDtoModel } from '../dtos/unit-slim.dto.model';\nimport { TimesheetViewResponseMetadata } from '../../interfaces/metadata';\nimport { TimeTrackingUnitUsersDtoModel } from '../dtos/time-tracking-unit-users.dto.models';\nimport { assertRequiredProperties } from '../../utilities/api.utility';\n\nexport class TimesheetViewResponseModel {\n constructor(\n readonly status: TimeTrackingStatus,\n readonly days: readonly TimeTrackingDayInfoDtoModel[],\n readonly sums: readonly TimeTrackingRowDtoModel[],\n readonly unit: UnitSlimDtoModel,\n readonly unitUsers: readonly TimeTrackingUnitUsersDtoModel[] = [],\n readonly totalPlanned: number,\n readonly totalPlannedNonProductiveHours: number,\n readonly totalPlannedProductiveHours: number,\n readonly metadata: MetadataModel = new MetadataModel(),\n readonly isSubmitterView: boolean,\n readonly isAllowedToChangeSubmitterView: boolean,\n ) {\n this.days = [...days];\n this.sums = [...sums];\n this.unitUsers = [...unitUsers];\n }\n\n static fromJSON(json: TimesheetViewResponse): TimesheetViewResponseModel {\n assertRequiredProperties(json, [\n 'status',\n 'days',\n 'sums',\n 'unit',\n 'isSubmitterView',\n 'isAllowedToChangeSubmitterView'\n ]);\n\n return new TimesheetViewResponseModel(\n json.status,\n (Array.isArray(json.days) ? json.days : [])\n .map((item) => TimeTrackingDayInfoDtoModel.fromJSON(item)),\n (Array.isArray(json.sums) ? json.sums : [])\n .map((item) => TimeTrackingRowDtoModel.fromJSON(item)),\n UnitSlimDtoModel.fromJSON(json.unit),\n (Array.isArray(json.unitUsers) ? json.unitUsers : [])\n .map((item) => TimeTrackingUnitUsersDtoModel.fromJSON(item)),\n json.totalPlanned,\n json.totalPlannedNonProductiveHours,\n json.totalPlannedProductiveHours,\n new MetadataModel(json.metadata),\n json.isSubmitterView,\n json.isAllowedToChangeSubmitterView,\n );\n }\n\n /**\n * Flag which indicates whether the user is privileged to reject or approve timecards.\n */\n canRejectAndApproveMultipleTimecards(): boolean {\n if (this.status === TimeTrackingStatus.Done) {\n return false;\n }\n\n return this.metadata.fields && this.metadata.fields.canRejectAndApproveMultipleTimecards;\n }\n\n /**\n * Whether the user is privileged to export this timesheet view.\n */\n canExportTimesheet(): boolean {\n return this.metadata.fields && this.metadata.fields.canExportTimesheet;\n }\n\n /**\n * Whether the user is privileged to submit timecard information\n */\n shouldSubmitBeDisplayed(): boolean {\n return this.metadata.fields && this.metadata.fields.shouldSubmitBeDisplayed;\n }\n\n canAccessTimecards(): boolean {\n return this.metadata.fields && this.metadata.fields.canAccessTimecards;\n }\n\n /**\n * Whether this timesheet is enabled / valid for an export.\n */\n isTimesheetExportApproved(): boolean {\n return this.metadata.fields && this.metadata.fields.isTimesheetExportApproved;\n }\n\n toJSON(): TimesheetViewResponse {\n return {\n status: this.status,\n days: this.days.map((item) => item.toJSON()),\n sums: this.sums.map((item) => item.toJSON()),\n unit: this.unit.toJSON(),\n unitUsers: this.unitUsers.map((item) => item.toJSON()),\n totalPlanned: this.totalPlanned,\n totalPlannedNonProductiveHours: this.totalPlannedNonProductiveHours,\n totalPlannedProductiveHours: this.totalPlannedProductiveHours,\n metadata: this.metadata.toJSON(),\n isSubmitterView: this.isSubmitterView,\n isAllowedToChangeSubmitterView: this.isAllowedToChangeSubmitterView,\n };\n }\n}\n","import moment from 'moment';\nimport { TimeTrackingWeekNavigatorItemDto } from '../../interfaces/dtos/time-tracking-week-navigator-item.dto';\nimport { TimeTrackingStatus } from '../../../models/time-tracking-status.enum';\nimport { assertRequiredProperties } from '../../utilities/api.utility';\n\nexport class TimeTrackingWeekNavigatorItemDtoModel {\n constructor(\n readonly year: number,\n readonly weekNumber: number,\n readonly weekStartDate: moment.Moment,\n readonly status: TimeTrackingStatus = TimeTrackingStatus.Open,\n ) {\n this.weekStartDate = weekStartDate.clone();\n }\n\n static fromJSON(json: TimeTrackingWeekNavigatorItemDto): TimeTrackingWeekNavigatorItemDtoModel {\n assertRequiredProperties(json, [\n 'year',\n 'weekNumber',\n 'weekStartDate',\n 'status',\n ]);\n\n return new TimeTrackingWeekNavigatorItemDtoModel(\n json.year,\n json.weekNumber,\n moment(json.weekStartDate)\n .parseZone(),\n json.status,\n );\n }\n\n toJSON(): TimeTrackingWeekNavigatorItemDto {\n return {\n year: this.year,\n weekNumber: this.weekNumber,\n weekStartDate: this.weekStartDate.toJSON(),\n status: this.status,\n };\n }\n}\n","import { TimeTrackingWeekNavigatorViewResponse } from '../../interfaces/responses/time-tracking-week-navigator-view.response';\nimport { TimeTrackingWeekNavigatorItemDtoModel } from '../dtos/time-tracking-week-navigator-item.dto.model';\nimport { assertRequiredProperties } from '../../utilities/api.utility';\n\nexport class TimeTrackingWeekNavigatorViewResponseModel {\n constructor(\n readonly weeks: readonly TimeTrackingWeekNavigatorItemDtoModel[],\n ) {\n this.weeks = [...weeks];\n }\n\n static fromJSON(json: TimeTrackingWeekNavigatorViewResponse): TimeTrackingWeekNavigatorViewResponseModel {\n assertRequiredProperties(json, [\n 'weeks',\n ]);\n\n return new TimeTrackingWeekNavigatorViewResponseModel(\n (Array.isArray(json.weeks) ? json.weeks : [])\n .map((item) => TimeTrackingWeekNavigatorItemDtoModel.fromJSON(item)),\n );\n }\n\n toJSON(): TimeTrackingWeekNavigatorViewResponse {\n return {\n weeks: this.weeks.map((item) => item.toJSON()),\n };\n }\n}\n","import { CollappFilterDropdownListRadioModel } from '../../../models/collapp-filter-dropdown-list-radio.interface';\nimport { TimecardViewResponse } from '../../interfaces/responses/timecard-view.response';\nimport { TimeTrackingDayInfoDtoModel } from '../dtos/time-tracking-day-info.dto.model';\nimport { TimeTrackingRowDtoModel } from '../dtos/time-tracking-row.dto.model';\nimport { MetadataModel } from '../metadata.model';\nimport { TimeTrackingProjectDtoModel } from '../dtos/time-tracking-project.dto.model';\nimport { TimeTrackingStatus } from '../../../models/time-tracking-status.enum';\nimport { UnitSlimDtoModel } from '../dtos/unit-slim.dto.model';\nimport { UserSlimDtoModel } from '../dtos/user-slim.dto.model';\nimport { assertRequiredProperties } from '../../utilities/api.utility';\nimport moment from 'moment';\n\nexport class TimecardViewResponseModel {\n /**\n * Flag which indicates whether the user is privileged to save the timecard.\n */\n readonly canSave: boolean;\n\n /**\n * Flag which indicates whether the user is privileged to send the timecard to approval.\n */\n readonly canSendToApproval: boolean;\n\n /**\n * Flag which indicates whether the user is privileged to approve a timecard.\n */\n readonly canApproveTimecard: boolean;\n\n /**\n * Flag which indicates whether the user is privileged to reject a timecard.\n */\n readonly canRejectTimecard: boolean;\n\n readonly isSubmitEnabled: boolean;\n\n readonly isReopenEnabled: boolean;\n\n readonly isRejectEnabled: boolean;\n\n readonly canCreateAdHocWorkPackage: boolean;\n\n readonly canAddNewNpc: boolean;\n\n /**\n * Flag which indicate a week split on 2 months, tell the name of the active month\n */\n readonly monthSplitActiveMonthName: string | null;\n\n // eslint-disable-next-line complexity\n constructor(\n readonly status: TimeTrackingStatus,\n readonly submittedOn: moment.Moment | null = null,\n readonly days: readonly TimeTrackingDayInfoDtoModel[],\n readonly nonProductive: readonly TimeTrackingRowDtoModel[],\n readonly unit: UnitSlimDtoModel,\n readonly user: UserSlimDtoModel,\n readonly projects: readonly TimeTrackingProjectDtoModel[] = [],\n readonly salesforceProjects: readonly TimeTrackingProjectDtoModel[] = [],\n readonly metadata: MetadataModel,\n readonly headerFilters: CollappFilterDropdownListRadioModel[],\n readonly totalPlannedHours: number,\n readonly totalReportedHours: number,\n ) {\n this.days = days.map((d) => d.clone());\n this.nonProductive = nonProductive.map((d) => d.clone());\n this.projects = projects.map((d) => d.clone());\n this.salesforceProjects = salesforceProjects.map((d) => d.clone());\n\n this.canSave = (this.metadata.fields && this.metadata.fields.canSaveTimecard) || false;\n this.canSendToApproval = (this.metadata.fields && this.metadata.fields.canSendTimecardToApproval) || false;\n this.canApproveTimecard = (this.metadata.fields && this.metadata.fields.canApproveTimecard) || false;\n this.canRejectTimecard = (this.metadata.fields && this.metadata.fields.canRejectTimecard) || false;\n this.isSubmitEnabled = (this.metadata.fields && this.metadata.fields.isSubmitEnabled) || false;\n this.isReopenEnabled = (this.metadata.fields && this.metadata.fields.isReopenEnabled) || false;\n this.isRejectEnabled = (this.metadata.fields && this.metadata.fields.isRejectEnabled) || false;\n this.monthSplitActiveMonthName = (this.metadata.fields && this.metadata.fields.monthSplitActiveMonthName) || null;\n this.canCreateAdHocWorkPackage = (this.metadata.fields && this.metadata.fields.canCreateAdHocWorkPackage) || null;\n this.canAddNewNpc = (this.metadata.fields && this.metadata.fields.canAddNewNpc) || null;\n }\n\n static fromJSON(json: TimecardViewResponse): TimecardViewResponseModel {\n assertRequiredProperties(json, [\n 'status',\n 'days',\n 'nonProductive',\n 'unit',\n 'user',\n ]);\n\n return new TimecardViewResponseModel(\n json.status,\n json.submittedOn ? moment(json.submittedOn).parseZone() : null,\n (Array.isArray(json.days)\n ? json.days\n .map((item) => TimeTrackingDayInfoDtoModel.fromJSON(item))\n : []\n ),\n (Array.isArray(json.nonProductive)\n ? json.nonProductive\n .map((item) => TimeTrackingRowDtoModel.fromJSON(item))\n : []\n ),\n UnitSlimDtoModel.fromJSON(json.unit),\n UserSlimDtoModel.fromJSON(json.user),\n (Array.isArray(json.projects)\n ? json.projects\n .map((item) => TimeTrackingProjectDtoModel.fromJSON(item))\n : []\n ),\n (Array.isArray(json.salesforceProjects)\n ? json.salesforceProjects\n .map((item) => TimeTrackingProjectDtoModel.fromJSON(item))\n : []\n ),\n new MetadataModel(json.metadata),\n json.headerFilters,\n json.totalPlannedHours,\n json.totalReportedHours,\n );\n }\n\n clone(): TimecardViewResponseModel {\n return new TimecardViewResponseModel(\n this.status,\n this.submittedOn,\n this.days,\n this.nonProductive,\n this.unit,\n this.user,\n this.projects,\n this.salesforceProjects,\n this.metadata,\n this.headerFilters,\n this.totalPlannedHours,\n this.totalReportedHours,\n );\n }\n}\n","import moment from 'moment';\nimport { PlanningResource } from '../../../modules/user/planning2/planning-resource.interface';\nimport { UserListDto } from '../../interfaces/dtos/user-list.dto';\nimport { UnitSlimDtoModel } from './unit-slim.dto.model';\nimport { UserSlimDtoModel } from './user-slim.dto.model';\nimport { RoleDtoModel } from './role.dto.model';\nimport { MetadataModel } from '../metadata.model';\nimport { UserListDtoMetadata } from '../../interfaces/metadata';\nimport { assertRequiredProperties } from '../../utilities/api.utility';\nimport { UserUnitAssignmentDtoModel } from './user-unit-assignment.dto.model';\n\nexport class UserListDtoModel implements PlanningResource {\n readonly fullName: string;\n\n constructor(\n readonly userId: string,\n readonly email: string,\n readonly photoUrl: string | null,\n readonly hitachiId: string | null,\n readonly globalEmployeeId: string | null,\n readonly localEmployeeId: string | null,\n readonly firstName: string | null,\n readonly lastName: string | null,\n readonly abbreviation: string | null,\n readonly payrollCompany: string | null,\n readonly costCenter: string | null,\n readonly countryCode: string | null,\n readonly city: string | null,\n readonly divisionCode: string | null,\n readonly productGroupCode: string | null,\n readonly unit: UnitSlimDtoModel | null,\n readonly unitCoordinator: UserSlimDtoModel | null,\n readonly validFrom: moment.Moment | null,\n readonly validUntil: moment.Moment | null,\n readonly businessUnitCode: string | null,\n readonly hourlyRateCategory: string | null,\n readonly workingHoursPerWeek: number | null,\n readonly role: RoleDtoModel | null,\n readonly metadata: UserListDtoMetadata,\n readonly unitAssignments: UserUnitAssignmentDtoModel[] | null = null,\n ) {\n if (this.firstName && this.lastName) {\n this.fullName = `${this.firstName} ${this.lastName}`.trim();\n } else {\n this.fullName = '';\n }\n\n this.validFrom = (validFrom != null ? validFrom.clone() : validFrom);\n this.validUntil = (validUntil != null ? validUntil.clone() : validUntil);\n\n if (unitAssignments) {\n this.unitAssignments = [...unitAssignments];\n }\n }\n\n get name(): string {\n return this.fullName;\n }\n\n get id(): string {\n return this.userId;\n }\n\n get capacityUnit(): string {\n return 'h';\n }\n\n get isHumanResource(): boolean {\n return true;\n }\n\n static fromJSON(json: UserListDto): UserListDtoModel {\n assertRequiredProperties(json, [\n 'userId',\n 'email',\n ]);\n\n return new UserListDtoModel(\n json.userId,\n json.email,\n json.photoUrl,\n json.hitachiId,\n json.globalEmployeeId,\n json.localEmployeeId,\n json.firstName,\n json.lastName,\n json.abbreviation,\n json.payrollCompany,\n json.costCenter,\n json.countryCode,\n json.city,\n json.divisionCode,\n json.productGroupCode,\n (json.unit\n ? UnitSlimDtoModel.fromJSON(json.unit)\n : null\n ),\n (json.unitCoordinator\n ? UserSlimDtoModel.fromJSON(json.unitCoordinator)\n : null\n ),\n (json.validFrom\n ? moment(json.validFrom)\n .parseZone()\n : null\n ),\n (json.validUntil\n ? moment(json.validUntil)\n .parseZone()\n : null\n ),\n json.businessUnitCode,\n json.hourlyRateCategory,\n json.workingHoursPerWeek,\n (json.role\n ? RoleDtoModel.fromJSON(json.role)\n : null\n ),\n new MetadataModel(json.metadata || {}) as UserListDtoMetadata,\n (json.unitAssignments\n ? json.unitAssignments.map((assignment) => UserUnitAssignmentDtoModel.fromJSON(assignment))\n : null\n ),\n );\n }\n\n clone(): UserListDtoModel {\n return new UserListDtoModel(\n this.userId,\n this.email,\n this.photoUrl,\n this.hitachiId,\n this.globalEmployeeId,\n this.localEmployeeId,\n this.firstName,\n this.lastName,\n this.abbreviation,\n this.payrollCompany,\n this.costCenter,\n this.countryCode,\n this.city,\n this.divisionCode,\n this.productGroupCode,\n this.unit ? this.unit.clone() : null,\n this.unitCoordinator ? this.unitCoordinator.clone() : null,\n this.validFrom ? this.validFrom.clone() : null,\n this.validUntil ? this.validUntil.clone() : null,\n this.businessUnitCode,\n this.hourlyRateCategory,\n this.workingHoursPerWeek,\n this.role ? this.role.clone() : null,\n this.metadata,\n this.unitAssignments ? this.unitAssignments.map((assignment) => assignment.clone()) : null,\n );\n }\n\n toJSON(): UserListDto {\n return {\n userId: this.userId,\n email: this.email,\n photoUrl: this.photoUrl,\n hitachiId: this.hitachiId,\n globalEmployeeId: this.globalEmployeeId,\n localEmployeeId: this.localEmployeeId,\n firstName: this.firstName,\n lastName: this.lastName,\n fullName: this.fullName,\n abbreviation: this.abbreviation,\n payrollCompany: this.payrollCompany,\n costCenter: this.costCenter,\n countryCode: this.countryCode,\n city: this.city,\n divisionCode: this.divisionCode,\n productGroupCode: this.productGroupCode,\n unit: this.unit ? this.unit.toJSON() : null,\n unitCoordinator: this.unitCoordinator ? this.unitCoordinator.toJSON() : null,\n validFrom: this.validFrom ? this.validFrom.toJSON() : null,\n validUntil: this.validUntil ? this.validUntil.toJSON() : null,\n businessUnitCode: this.businessUnitCode,\n hourlyRateCategory: this.hourlyRateCategory,\n workingHoursPerWeek: this.workingHoursPerWeek,\n role: this.role ? this.role.toJSON() : null,\n metadata: this.metadata,\n unitAssignments: this.unitAssignments ? this.unitAssignments.map((assignment) => assignment.toJSON()) : null,\n };\n }\n}\n","import { CollappFilterDropdownListRadioModel } from '../../../models/collapp-filter-dropdown-list-radio.interface';\nimport { PlanningResource, PlanningViewResponseModel } from '../../../modules/user/planning2/planning-resource.interface';\nimport { MetadataModel } from '../metadata.model';\nimport { UnitSlimDtoModel } from '../dtos/unit-slim.dto.model';\nimport { assertRequiredProperties } from '../../utilities/api.utility';\nimport { CapacityDtoModel } from '../dtos/capacity.dto.model';\nimport { UserPlanningViewResponse } from '../../interfaces/responses/user-planning-view.response';\nimport { UserPlanningTimeTrackingRowDtoModel } from '../dtos/user-planning-time-tracking-row.dto.model';\nimport { UserPlanningTimeTrackingProjectDtoModel } from '../dtos/user-planning-time-tracking-project.dto.model';\nimport { UserListDtoModel } from '../dtos/user-list.dto.model';\nimport { UnitBackgroundColorDtoModel } from '../dtos/unit-background-color.dto.model';\n\nexport class UserPlanningViewResponseModel implements PlanningViewResponseModel {\n /**\n * Flag which indicates whether the user is privileged to update non productive weeks.\n */\n readonly canUpdatePlannedNonProductiveWeeks: boolean;\n\n /**\n * Flag which indicates whether the user is privileged to update planned project weeks.\n */\n readonly canUpdatePlannedProjectWeeks: boolean;\n\n /**\n * Flag which indicates whether the user can add a new work package. (This is the same as\n * canUpdatePlannedProjectWeeks for now)\n */\n canAssignNewWorkPackage: boolean;\n\n constructor(\n readonly nonProductiveCategories: readonly UserPlanningTimeTrackingRowDtoModel[] = [],\n readonly unit: UnitSlimDtoModel | null,\n readonly user: UserListDtoModel,\n readonly projects: readonly UserPlanningTimeTrackingProjectDtoModel[] = [],\n readonly capacities: CapacityDtoModel[],\n readonly unitBackgroundColors: UnitBackgroundColorDtoModel[] = [],\n readonly metadata: MetadataModel,\n public headerFilters: CollappFilterDropdownListRadioModel[],\n ) {\n this.nonProductiveCategories = [...nonProductiveCategories];\n this.projects = [...projects];\n this.capacities = [...capacities];\n this.unitBackgroundColors = unitBackgroundColors.map((item) => item.clone());\n this.canUpdatePlannedNonProductiveWeeks = (this.metadata.fields\n && this.metadata.fields.canUpdatePlannedNonProductiveWeeks) || false;\n this.canUpdatePlannedProjectWeeks = (this.metadata.fields\n && this.metadata.fields.canUpdatePlannedProjectWeeks) || false;\n this.canAssignNewWorkPackage = this.canUpdatePlannedProjectWeeks;\n }\n\n get resource(): PlanningResource {\n return this.user;\n }\n\n static fromJSON(json: UserPlanningViewResponse): UserPlanningViewResponseModel {\n assertRequiredProperties(json, [\n 'user',\n ]);\n\n return new UserPlanningViewResponseModel(\n (Array.isArray(json.nonProductiveCategories)\n ? json.nonProductiveCategories\n .map((item) => UserPlanningTimeTrackingRowDtoModel.fromJSON(item))\n : []\n ),\n json.unit ? UnitSlimDtoModel.fromJSON(json.unit) : null,\n UserListDtoModel.fromJSON(json.user),\n (Array.isArray(json.projects)\n ? json.projects\n .map((item) => UserPlanningTimeTrackingProjectDtoModel.fromJSON(item))\n : []\n ),\n (Array.isArray(json.capacities)\n ? json.capacities\n .map((item) => CapacityDtoModel.fromJSON(item))\n : []\n ),\n (Array.isArray(json.unitBackgroundColors)\n ? json.unitBackgroundColors\n .map((item) => UnitBackgroundColorDtoModel.fromJSON(item))\n : []\n ),\n new MetadataModel(json.metadata),\n json.headerFilters,\n );\n }\n\n clone(): UserPlanningViewResponseModel {\n return new UserPlanningViewResponseModel(\n this.nonProductiveCategories.map((item) => item.clone()),\n this.unit ? this.unit.clone() : null,\n this.user.clone(),\n this.projects.map((item) => item.clone()),\n this.capacities.map((item) => item.clone()),\n this.unitBackgroundColors.map((item) => item.clone()),\n this.metadata.clone(),\n this.headerFilters,\n );\n }\n}\n","import { UnitPlanningSlimDtoModel } from './unit-planning-slim.dto.model';\nimport { UnitPlanningUserDtoModel } from './unit-planning-user.dto.model';\nimport { UnitPlanningDto } from '../../interfaces/dtos/unit-planning.dto';\nimport { assertRequiredProperties } from '../../utilities/api.utility';\nimport { UnitPlanningNonHumanResourceDtoModel } from './unit-planning-non-human-resource.dto.model';\nimport { UnitPlanningWeekTotalDtoModel } from './unit-planning-week-total.dto.model';\n\nexport class UnitPlanningDtoModel {\n constructor(\n readonly unit: UnitPlanningSlimDtoModel,\n readonly users: UnitPlanningUserDtoModel[] | null,\n readonly nonHumanResources: UnitPlanningNonHumanResourceDtoModel[] | null,\n readonly weeksTotal: UnitPlanningWeekTotalDtoModel[] | null,\n readonly totalPlannedHours: number | null,\n ) {\n if (users) {\n this.users = [...users];\n }\n\n if (nonHumanResources) {\n this.nonHumanResources = [...nonHumanResources];\n }\n }\n\n static fromJSON(json: UnitPlanningDto): UnitPlanningDtoModel {\n assertRequiredProperties(json, [\n 'unit',\n ]);\n\n return new UnitPlanningDtoModel(\n UnitPlanningSlimDtoModel.fromJSON(json.unit),\n (Array.isArray(json.users) ? json.users : [])\n .map(UnitPlanningUserDtoModel.fromJSON),\n (Array.isArray(json.nonHumanResources) ? json.nonHumanResources : [])\n .map(UnitPlanningNonHumanResourceDtoModel.fromJSON),\n (Array.isArray(json.weeksTotal) ? json.weeksTotal : [])\n .map(UnitPlanningWeekTotalDtoModel.fromJSON),\n json.totalPlannedHours,\n );\n }\n\n clone(): UnitPlanningDtoModel {\n return new UnitPlanningDtoModel(\n this.unit.clone(),\n this.users?.map((item) => item.clone()) || null,\n this.nonHumanResources?.map((item) => item.clone()) || null,\n this.weeksTotal?.map((item) => item.clone()) || null,\n this.totalPlannedHours,\n );\n }\n}\n","import { UnitPlanningViewResponse } from '../../interfaces/responses/unit-planning-view.response';\nimport { UnitCategoryDtoModel } from '../dtos/unit-category.dto.model';\nimport { UnitPlanningDtoModel } from '../dtos/unit-planning.dto.model';\nimport { UnitPlanningCapacityDtoModel } from '../dtos/unit-planning-capacity.dto.model';\nimport { MetadataSlimDtoModel } from '../dtos/metadata-slim.dto.model';\nimport { Int32IdNameDtoModel } from '../dtos/int32-id-name.dto.model';\nimport { UnitBackgroundColorDtoModel } from '../dtos/unit-background-color.dto.model';\nimport { AvailableProjectDtoModel } from '../dtos/available-project.dto.model';\n\nexport class UnitPlanningViewResponseModel {\n constructor(\n readonly capacities: UnitPlanningCapacityDtoModel[],\n readonly units: UnitPlanningDtoModel[],\n readonly nonProductiveCategories: UnitCategoryDtoModel[],\n readonly availableSkills: Int32IdNameDtoModel[],\n readonly unitBackgroundColors: UnitBackgroundColorDtoModel[],\n readonly availableProjects: AvailableProjectDtoModel[],\n readonly metadata: MetadataSlimDtoModel,\n ) {\n if (capacities) {\n this.capacities = [...capacities];\n }\n\n if (nonProductiveCategories) {\n this.nonProductiveCategories = [...nonProductiveCategories];\n }\n\n if (units) {\n this.units = [...units];\n }\n\n this.availableSkills = availableSkills.map((skill) => skill.clone());\n this.unitBackgroundColors = unitBackgroundColors.map((item) => item.clone());\n this.availableProjects = availableProjects.map((item) => item.clone());\n }\n\n static fromJSON(json: UnitPlanningViewResponse): UnitPlanningViewResponseModel {\n return new UnitPlanningViewResponseModel(\n (Array.isArray(json.capacities)\n ? json.capacities\n .map(UnitPlanningCapacityDtoModel.fromJSON)\n : []\n ),\n (Array.isArray(json.units)\n ? json.units\n .map(UnitPlanningDtoModel.fromJSON)\n : []\n ),\n (Array.isArray(json.nonProductiveCategories)\n ? json.nonProductiveCategories\n .map(UnitCategoryDtoModel.fromJSON)\n : []\n ),\n (Array.isArray(json.availableSkills)\n ? json.availableSkills\n .map(Int32IdNameDtoModel.fromJSON)\n : []\n ),\n (Array.isArray(json.unitBackgroundColors)\n ? json.unitBackgroundColors\n .map(UnitBackgroundColorDtoModel.fromJSON)\n : []\n ),\n (Array.isArray(json.availableProjects)\n ? json.availableProjects\n .map(AvailableProjectDtoModel.fromJSON)\n : []\n ),\n MetadataSlimDtoModel.fromJSON(json.metadata),\n );\n }\n\n clone(): UnitPlanningViewResponseModel {\n return new UnitPlanningViewResponseModel(\n this.capacities?.map((item) => item.clone()) || null,\n this.units?.map((item) => item.clone()) || null,\n this.nonProductiveCategories?.map((item) => item.clone()) || null,\n this.availableSkills?.map((item) => item.clone()),\n this.unitBackgroundColors?.map((item) => item.clone()),\n this.availableProjects?.map((item) => item.clone()),\n this.metadata.clone(),\n );\n }\n}\n","import { CollappFilterDropdownListRadioModel } from '../../../models/collapp-filter-dropdown-list-radio.interface';\nimport { PlanningResource, PlanningViewResponseModel } from '../../../modules/user/planning2/planning-resource.interface';\nimport { MetadataModel } from '../metadata.model';\nimport { UnitSlimDtoModel } from '../dtos/unit-slim.dto.model';\nimport { assertRequiredProperties } from '../../utilities/api.utility';\nimport { CapacityDtoModel } from '../dtos/capacity.dto.model';\nimport { UserPlanningTimeTrackingRowDtoModel } from '../dtos/user-planning-time-tracking-row.dto.model';\nimport { UserPlanningTimeTrackingProjectDtoModel } from '../dtos/user-planning-time-tracking-project.dto.model';\nimport { NonHumanResourcePlanningViewResponse } from '../../interfaces/responses/non-human-resource-planning-view.response';\nimport { NonHumanResourceDtoModel } from '../dtos/non-human-resource.dto.model';\nimport { UnitBackgroundColorDtoModel } from '../dtos/unit-background-color.dto.model';\n\nexport class NonHumanResourcePlanningViewResponseModel implements PlanningViewResponseModel {\n /**\n * Flag which indicates whether the user is privileged to update non productive weeks.\n */\n readonly canUpdatePlannedNonProductiveWeeks: boolean;\n\n /**\n * Flag which indicates whether the user is privileged to update planned project weeks.\n */\n readonly canUpdatePlannedProjectWeeks: boolean;\n\n constructor(\n readonly nonProductiveCategories: readonly UserPlanningTimeTrackingRowDtoModel[] = [],\n readonly unit: UnitSlimDtoModel | null,\n readonly nonHumanResource: NonHumanResourceDtoModel,\n readonly projects: readonly UserPlanningTimeTrackingProjectDtoModel[] = [],\n readonly capacities: CapacityDtoModel[],\n readonly unitBackgroundColors: UnitBackgroundColorDtoModel[] = [],\n readonly metadata: MetadataModel,\n public headerFilters: CollappFilterDropdownListRadioModel[],\n ) {\n this.nonProductiveCategories = [...nonProductiveCategories];\n this.projects = [...projects];\n this.capacities = [...capacities];\n this.unitBackgroundColors = unitBackgroundColors.map((item) => item.clone());\n\n this.canUpdatePlannedNonProductiveWeeks = (this.metadata.fields\n && this.metadata.fields.canUpdatePlannedNonProductiveWeeks) || false;\n\n this.canUpdatePlannedProjectWeeks = (this.metadata.fields\n && this.metadata.fields.canUpdatePlannedProjectWeeks) || false;\n }\n\n get resource(): PlanningResource {\n return this.nonHumanResource;\n }\n\n static fromJSON(json: NonHumanResourcePlanningViewResponse): NonHumanResourcePlanningViewResponseModel {\n assertRequiredProperties(json, [\n 'nonHumanResource',\n ]);\n\n return new NonHumanResourcePlanningViewResponseModel(\n (Array.isArray(json.nonProductiveCategories)\n ? json.nonProductiveCategories\n .map((item) => UserPlanningTimeTrackingRowDtoModel.fromJSON(item))\n : []\n ),\n json.unit ? UnitSlimDtoModel.fromJSON(json.unit) : null,\n NonHumanResourceDtoModel.fromJSON(json.nonHumanResource),\n (Array.isArray(json.projects)\n ? json.projects\n .map((item) => UserPlanningTimeTrackingProjectDtoModel.fromJSON(item))\n : []\n ),\n (Array.isArray(json.capacities)\n ? json.capacities\n .map((item) => CapacityDtoModel.fromJSON(item))\n : []\n ),\n (Array.isArray(json.unitBackgroundColors)\n ? json.unitBackgroundColors\n .map((item) => UnitBackgroundColorDtoModel.fromJSON(item))\n : []\n ),\n new MetadataModel(json.metadata),\n json.headerFilters,\n );\n }\n\n clone(): NonHumanResourcePlanningViewResponseModel {\n return new NonHumanResourcePlanningViewResponseModel(\n this.nonProductiveCategories.map((item) => item.clone()),\n this.unit ? this.unit.clone() : null,\n this.nonHumanResource.clone(),\n this.projects.map((item) => item.clone()),\n this.capacities.map((item) => item.clone()),\n this.unitBackgroundColors.map((item) => item.clone()),\n this.metadata.clone(),\n this.headerFilters.map((item) => JSON.parse(JSON.stringify(item))),\n );\n }\n}\n","import { TimeTrackingStatus } from '../../../models/time-tracking-status.enum';\nimport { assertRequiredProperties } from '../../utilities/api.utility';\nimport { TimeTrackingMonthNavigatorItemDto } from '../../interfaces/dtos/time-tracking-month-navigator-item.dto';\n\nexport class TimeTrackingMonthNavigatorItemDtoModel {\n constructor(\n readonly year: number,\n readonly monthNumber: number,\n readonly status: TimeTrackingStatus = TimeTrackingStatus.Open,\n ) {\n }\n\n static fromJSON(json: TimeTrackingMonthNavigatorItemDto): TimeTrackingMonthNavigatorItemDtoModel {\n assertRequiredProperties(json, [\n 'year',\n 'monthNumber',\n 'status',\n ]);\n\n return new TimeTrackingMonthNavigatorItemDtoModel(\n json.year,\n json.monthNumber,\n json.status,\n );\n }\n\n toJSON(): TimeTrackingMonthNavigatorItemDto {\n return {\n year: this.year,\n monthNumber: this.monthNumber,\n status: this.status,\n };\n }\n}\n","import { assertRequiredProperties } from '../../utilities/api.utility';\nimport { TimeTrackingMonthNavigatorViewResponse } from '../../interfaces/responses/time-tracking-month-navigator-view.response';\nimport { TimeTrackingMonthNavigatorItemDtoModel } from '../dtos/time-tracking-month-navigator-item.dto.model';\n\nexport class TimeTrackingMonthNavigatorViewResponseModel {\n constructor(\n readonly months: readonly TimeTrackingMonthNavigatorItemDtoModel[],\n ) {\n this.months = [...months];\n }\n\n static fromJSON(json: TimeTrackingMonthNavigatorViewResponse): TimeTrackingMonthNavigatorViewResponseModel {\n assertRequiredProperties(json, [\n 'months',\n ]);\n\n return new TimeTrackingMonthNavigatorViewResponseModel(\n (Array.isArray(json.months) ? json.months : [])\n .map((item) => TimeTrackingMonthNavigatorItemDtoModel.fromJSON(item)),\n );\n }\n\n toJSON(): TimeTrackingMonthNavigatorViewResponse {\n return {\n months: this.months.map((item) => item.toJSON()),\n };\n }\n}\n","import { Injectable } from '@angular/core';\nimport { Observable } from 'rxjs';\nimport { filter, map, mapTo } from 'rxjs/operators';\nimport { HttpEventType, HttpResponse } from '@angular/common/http';\nimport { CollappFilterDropdownListRadioSetting } from '../../models/collapp-filter-dropdown-list-radio.interface';\nimport { UnitPlanningViewResponseModel2 } from '../models/responses/unit-planning-view.response.model2';\nimport { TimesheetViewResponseModel } from '../models/responses/timesheet-view.response.model';\nimport { CollAppApiService } from './collapp-api.service';\nimport { TimesheetViewResponse } from '../interfaces/responses/timesheet-view.response';\nimport { TimeTrackingWeekNavigatorViewResponseModel } from '../models/responses/time-tracking-week-navigator-view.response.model';\nimport { TimeTrackingWeekNavigatorViewResponse } from '../interfaces/responses/time-tracking-week-navigator-view.response';\nimport { TimecardSaveRequestModel } from '../models/requests/timecard-save.request.model';\nimport { TimecardStatusUpdateRequestModel } from '../models/requests/timecard-status-update.request.model';\nimport { TimecardViewResponseModel } from '../models/responses/timecard-view.response.model';\nimport { TimecardViewResponse } from '../interfaces/responses/timecard-view.response';\nimport { FileDownloadResponseModel } from '../models/responses/file-download.response.model';\nimport { FileDownloadResponse } from '../interfaces/responses/file-download.response';\nimport { UserPlanningViewResponseModel } from '../models/responses/user-planning-view.response.model';\nimport { UserPlanningViewResponse } from '../interfaces/responses/user-planning-view.response';\nimport { PlanningSaveRequestModel } from '../models/requests/planning-save.request.model';\nimport { UnitPlanningViewResponse } from '../interfaces/responses/unit-planning-view.response';\nimport { UnitPlanningViewResponseModel } from '../models/responses/unit-planning-view.response.model';\nimport { NonHumanResourcePlanningViewResponseModel } from '../models/responses/non-human-resource-planning-view.response.model';\nimport { NonHumanResourcePlanningViewResponse } from '../interfaces/responses/non-human-resource-planning-view.response';\nimport { UnitPlanningViewRequestModel } from '../models/requests/unit-planning-view.request.model';\nimport { TimesheetExportViewType } from 'src/app/modules/timesheet/timesheet.component';\nimport { TimeTrackingMonthNavigatorViewResponseModel } from '../models/responses/time-tracking-month-navigator-view.response.model';\nimport { TimeTrackingMonthNavigatorViewResponse } from '../interfaces/responses/time-tracking-month-navigator-view.response';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class TimeTrackingService {\n constructor(private apiService: CollAppApiService) {}\n\n /**\n * Fetches information about the work weeks in the Time Card WeekNavigator,\n * with an amount of weeks from the given week and year.\n * The amount can be a positive or negative Week Number.\n *\n * @param userId\n * @param year\n * @param week\n * @param amount\n */\n getTimecardWeeks$(\n userId: string,\n year: number,\n week: number,\n amount: number,\n ): Observable {\n return this.apiService\n .getTimecardWeeks$(userId, year, week, amount)\n .pipe(\n filter((event) => event.type === HttpEventType.Response),\n // eslint-disable-next-line max-len\n map((response: HttpResponse) => TimeTrackingWeekNavigatorViewResponseModel\n .fromJSON(response.body!)),\n );\n }\n\n /**\n *\n * @param userId\n * @param year\n * @param monthNr ex. 1-12\n * @param amount\n * @returns\n */\n getTimeCardMonths$(\n userId: string,\n year: number,\n monthNr: number,\n amount: number,\n ): Observable {\n return this.apiService\n .getTimecardMonths$(userId, year, monthNr, amount)\n .pipe(\n filter((event) => event.type === HttpEventType.Response),\n // eslint-disable-next-line max-len\n map((response: HttpResponse) => TimeTrackingMonthNavigatorViewResponseModel\n .fromJSON(response.body!)),\n );\n }\n\n /**\n * Updates a timecard of a user\n *\n * @return {Observable}\n */\n putTimecard$(\n userId: string,\n year: number,\n week: number,\n request: TimecardSaveRequestModel,\n ): Observable {\n return this.apiService\n .putTimecard$(userId, year, week, request.toJSON())\n .pipe(\n filter((event) => event.type === HttpEventType.Response),\n map((response: HttpResponse) => response.body),\n );\n }\n\n /**\n * Updates a timecard of a user\n *\n * @return {Observable}\n */\n putTimecardMonth$(\n userId: string,\n year: number,\n monthNr: number,\n request: TimecardSaveRequestModel,\n ): Observable {\n return this.apiService\n .putTimecardMonth$(userId, year, monthNr, request.toJSON())\n .pipe(\n filter((event) => event.type === HttpEventType.Response),\n map((response: HttpResponse) => response.body),\n );\n }\n\n /**\n * Confirms the planning of a user\n *\n * @return {Observable}\n */\n confirmUserPlanning$(userId: string, request: PlanningSaveRequestModel): Observable {\n return this.apiService\n .confirmUserPlanning$(userId, request.toJSON())\n .pipe(\n filter((event) => event.type === HttpEventType.Response),\n mapTo(undefined),\n );\n }\n\n /**\n * Cancels the planning of a user\n *\n * @return {Observable}\n */\n cancelUserPlanning$(userId: string, request: PlanningSaveRequestModel): Observable {\n return this.apiService\n .cancelUserPlanning$(userId, request.toJSON())\n .pipe(\n filter((event) => event.type === HttpEventType.Response),\n mapTo(undefined),\n );\n }\n\n /**\n * Saves the planning of a NHR\n *\n * @return {Observable}\n */\n saveNonHumanResourcePlanning$(\n nonHumanResourceId: string,\n request: PlanningSaveRequestModel,\n ): Observable {\n return this.apiService\n .saveNonHumanResourcePlanning$(nonHumanResourceId, request.toJSON())\n .pipe(\n filter((event) => event.type === HttpEventType.Response),\n mapTo(undefined),\n );\n }\n\n /**\n * Confirms the planning of a NHR\n *\n * @return {Observable}\n */\n confirmNonHumanResourcePlanning$(\n nonHumanResourceId: string,\n request: PlanningSaveRequestModel,\n ): Observable {\n return this.apiService\n .confirmNonHumanResourcePlanning$(nonHumanResourceId, request.toJSON())\n .pipe(\n filter((event) => event.type === HttpEventType.Response),\n mapTo(undefined),\n );\n }\n\n /**\n * Cancels the planning of a NHR\n *\n * @return {Observable}\n */\n cancelNonHumanResourcePlanning$(\n nonHumanResourceId: string,\n request: PlanningSaveRequestModel,\n ): Observable {\n return this.apiService\n .cancelNonHumanResourcePlanning$(nonHumanResourceId, request.toJSON())\n .pipe(\n filter((event) => event.type === HttpEventType.Response),\n mapTo(undefined),\n );\n }\n\n /**\n * Updates the statuses of timecards from users.\n */\n putTimecardStatus$(\n year: number,\n week: number,\n request: TimecardStatusUpdateRequestModel,\n ): Observable {\n return this.apiService\n .putTimecardStatus$(year, week, request.toJSON())\n .pipe(\n filter((event) => event.type === HttpEventType.Response),\n map((response: HttpResponse) => response.body),\n );\n }\n\n /**\n * Updates the statuses of timecards from users.\n * @param monthNr 1-12\n */\n putTimecardStatusMonth$(\n year: number,\n monthNr: number,\n request: TimecardStatusUpdateRequestModel,\n ): Observable {\n return this.apiService\n .putTimecardStatusMonth$(year, monthNr, request.toJSON())\n .pipe(\n filter((event) => event.type === HttpEventType.Response),\n map((response: HttpResponse) => response.body),\n );\n }\n\n /**\n * Gets a time card of a specific user\n *\n * @param userId\n * @param year\n * @param week\n */\n getTimecard$(\n userId: string,\n year: number,\n week: number,\n isMyTimecard: boolean,\n timecardFilters?: CollappFilterDropdownListRadioSetting[],\n ): Observable {\n return this.apiService\n .getTimecard$(userId, year, week, isMyTimecard, timecardFilters)\n .pipe(\n filter((event) => event.type === HttpEventType.Response),\n map((response: HttpResponse) => TimecardViewResponseModel.fromJSON(response.body!)),\n );\n }\n\n /**\n * Gets a time card of a specific user for a specific month\n *\n * @param userId\n * @param year\n * @param monthNumber 1-12\n * @param isMyTimecard\n * @param timecardFilters\n */\n getTimecardMonth$(\n userId: string,\n year: number,\n monthNumber: number,\n isMyTimecard: boolean,\n timecardFilters?: CollappFilterDropdownListRadioSetting[],\n ): Observable {\n return this.apiService\n .getTimecardMonth$(userId, year, monthNumber, isMyTimecard, timecardFilters)\n .pipe(\n filter((event) => event.type === HttpEventType.Response),\n map((response: HttpResponse) => TimecardViewResponseModel.fromJSON(response.body!)),\n );\n }\n\n /**\n * Gets planning of a specific user\n */\n getUserPlanning$(\n userId: string,\n isoWeekYear: number,\n isoWeek: number,\n numberOfWeeks?: number,\n headerFilters?: CollappFilterDropdownListRadioSetting[],\n ): Observable {\n return this.apiService\n .getUserPlanning$(userId, isoWeekYear, isoWeek, numberOfWeeks, headerFilters)\n .pipe(\n filter((event) => event.type === HttpEventType.Response),\n map((response: HttpResponse) => UserPlanningViewResponseModel\n .fromJSON(response.body!)),\n );\n }\n\n /**\n * Gets planning of a specific nonHumanResource\n */\n getNonHumanResourcePlanning$(\n nonHumanResourceId: string,\n isoWeekYear: number,\n isoWeek: number,\n numberOfWeeks?: number,\n headerFilters?: CollappFilterDropdownListRadioSetting[],\n ): Observable {\n return this.apiService\n .getNonHumanResourcePlanning$(nonHumanResourceId, isoWeekYear, isoWeek, numberOfWeeks, headerFilters)\n .pipe(\n filter((event) => event.type === HttpEventType.Response),\n map((response: HttpResponse) => NonHumanResourcePlanningViewResponseModel\n .fromJSON(response.body!)),\n );\n }\n\n /**\n * Gets planning of a specific unit\n */\n getUnitPlanning$(\n unitId: number,\n request: UnitPlanningViewRequestModel,\n ): Observable {\n return this.apiService\n .getUnitPlanning$(unitId, request.toJSON())\n .pipe(\n filter((event) => event.type === HttpEventType.Response),\n map((response: HttpResponse) => UnitPlanningViewResponseModel\n .fromJSON(response.body!)),\n );\n }\n\n /**\n * Gets planning of a specific unit\n */\n getUnitPlanning2$(\n unitId: number,\n request: UnitPlanningViewRequestModel,\n ): Observable {\n return this.apiService\n .getUnitPlanning$(unitId, request.toJSON())\n .pipe(\n filter((event) => event.type === HttpEventType.Response),\n map((response: HttpResponse) => UnitPlanningViewResponseModel2\n .fromJSON(response.body!)),\n );\n }\n\n /**\n * Gets a timesheet of a unit.\n */\n getTimesheet$(\n unitId: number,\n year: number,\n week: number,\n withCrossUtilize: boolean,\n isSubmitterView: boolean | undefined,\n ): Observable {\n return this\n .apiService\n .getTimesheet$(unitId, year, week, withCrossUtilize, isSubmitterView)\n .pipe(\n filter((event) => event.type === HttpEventType.Response),\n map((response: HttpResponse) => TimesheetViewResponseModel.fromJSON(response.body!)),\n );\n }\n\n /**\n * Gets a timesheet of a unit a specifc month.\n * @param monthNumber 1-12\n */\n getTimesheetMonth$(\n unitId: number,\n year: number,\n monthNumber: number,\n withCrossUtilize: boolean,\n isSubmitterView: boolean | undefined,\n ): Observable {\n return this\n .apiService\n .getTimesheetMonth$(unitId, year, monthNumber, withCrossUtilize, isSubmitterView)\n .pipe(\n filter((event) => event.type === HttpEventType.Response),\n map((response: HttpResponse) => TimesheetViewResponseModel.fromJSON(response.body!)),\n );\n }\n\n /**\n * Gets a list of weeks for the timesheet week navigator.\n *\n * @param unitId\n * @param year\n * @param week\n * @param amount\n */\n getTimesheetWeeks$(\n unitId: number,\n year: number,\n week: number,\n amount: number,\n ): Observable {\n return this.apiService\n .getTimesheetWeeks$(unitId, year, week, amount)\n .pipe(\n filter((event) => event.type === HttpEventType.Response),\n // eslint-disable-next-line max-len\n map((response: HttpResponse) => TimeTrackingWeekNavigatorViewResponseModel\n .fromJSON(response.body!)),\n );\n }\n\n /**\n * Used for the navigation of the timesheet months.\n *\n * @param monthNumber 1-12\n * @param amount\n * @returns\n */\n getTimesheetMonths$(\n unitId: number,\n year: number,\n monthNumber: number,\n amount: number,\n ): Observable {\n return this.apiService\n .getTimesheetMonths$(unitId, year, monthNumber, amount)\n .pipe(\n filter((event) => event.type === HttpEventType.Response),\n // eslint-disable-next-line max-len\n map((response: HttpResponse) => TimeTrackingMonthNavigatorViewResponseModel\n .fromJSON(response.body!)),\n );\n }\n\n /**\n * Generates an Excel file export of the given timesheet.\n */\n getTimesheetExport$(\n unitId: number,\n year: number,\n week: number,\n withCrossUtilize: boolean,\n templateView: TimesheetExportViewType,\n ): Observable {\n return this.apiService\n .getTimesheetExport$(unitId, year, week, withCrossUtilize, templateView)\n .pipe(\n filter((event) => event.type === HttpEventType.Response),\n map((response: HttpResponse) => FileDownloadResponseModel.fromJSON(response.body!)),\n );\n }\n\n /**\n * Generates an Excel file export of the given timesheet.\n */\n getTimecardExport$(userId: string, year: number, week: number): Observable {\n return this.apiService\n .getTimecardExport$(userId, year, week)\n .pipe(\n filter((event) => event.type === HttpEventType.Response),\n map((response: HttpResponse) => FileDownloadResponseModel.fromJSON(response.body!)),\n );\n }\n}\n","import { UnitSelectorListResponse } from '../../interfaces/responses/unit-selector-list.response';\nimport { UnitSelectorDtoModel } from '../dtos/unit-selector.dto.model';\nimport { MetadataModel } from '../metadata.model';\n\nexport class UnitSelectorListResponseModel {\n constructor(\n readonly items: readonly UnitSelectorDtoModel[],\n readonly metadata: MetadataModel,\n ) {\n this.items = [...items];\n }\n\n static fromJSON(json: UnitSelectorListResponse): UnitSelectorListResponseModel {\n return new UnitSelectorListResponseModel(\n json.items.map((item) => UnitSelectorDtoModel.fromJSON(item)),\n new MetadataModel(json.metadata),\n );\n }\n}\n","import { UnitCreateResponse } from '../../interfaces/responses/unit-create.response';\nimport { assertRequiredProperties } from '../../utilities/api.utility';\n\nexport class UnitCreateResponseModel {\n constructor(\n readonly unitId: number,\n ) {\n }\n\n static fromJSON(json: UnitCreateResponse): UnitCreateResponseModel {\n assertRequiredProperties(json, [\n 'unitId',\n ]);\n\n return new UnitCreateResponseModel(\n json.unitId,\n );\n }\n\n toJSON(): UnitCreateResponse {\n return {\n unitId: this.unitId,\n };\n }\n}\n","import { UnitViewResponse, UnitViewResponseMetadata } from '../../interfaces/responses/unit-view.response';\nimport { ContractDtoModel } from '../dtos/contract.dto.model';\nimport { MetadataModel } from '../metadata.model';\nimport { UnitLevel } from '../../../models/unit-level.enum';\nimport { UnitSlimDtoModel } from '../dtos/unit-slim.dto.model';\nimport { UserSlimDtoModel } from '../dtos/user-slim.dto.model';\nimport { UnitCostCenterModel } from '../dtos/unit-cost-center.dto.model';\nimport { NonProductiveCategoryModel } from '../../../models/non-productive-category.model';\nimport { assertRequiredProperties } from '../../utilities/api.utility';\nimport { HIDDEN_LEVELS_DEFAULT } from 'src/app/modules/administration/units/dialogs/edit-unit/edit-unit-dialog.component';\n\nexport class UnitViewResponseModel {\n readonly canEditUnitDetails: boolean;\n\n /** @deprecated */\n readonly canEditUnitContracts: boolean;\n\n canDisableUnit: boolean;\n\n constructor(\n readonly unitId: number,\n readonly name: string,\n readonly level: UnitLevel,\n readonly code: string,\n readonly parentUnit: UnitSlimDtoModel | null = null,\n readonly unitCoordinator: UserSlimDtoModel | null = null,\n readonly defects: readonly string[] = [],\n readonly nonProductiveCategories: readonly NonProductiveCategoryModel[] = [],\n readonly deputyUnitCoordinators: readonly UserSlimDtoModel[] = [],\n readonly submitterContracts: readonly ContractDtoModel[] = [],\n readonly supplierContracts: readonly ContractDtoModel[] = [],\n readonly unitCostCenters: readonly UnitCostCenterModel[] = [],\n public isDisabled: boolean,\n readonly migratedToEtime: boolean,\n readonly migratedToReiwa: boolean,\n readonly metadata: MetadataModel = new MetadataModel(),\n readonly directUserSubmissionOfTimecard: boolean,\n readonly monthlyView: boolean,\n readonly hiddenLevels: string,\n readonly payrollCompany: string = '',\n readonly profitCenter: string = '',\n ) {\n this.defects = [...defects];\n this.nonProductiveCategories = [...nonProductiveCategories];\n this.deputyUnitCoordinators = [...deputyUnitCoordinators];\n this.submitterContracts = [...submitterContracts];\n this.supplierContracts = [...supplierContracts];\n this.unitCostCenters = [...unitCostCenters];\n this.canEditUnitDetails = !!this.metadata.fields.canEditUnitDetails;\n this.canEditUnitContracts = !!this.metadata.fields.canEditUnitContracts;\n this.canDisableUnit = !!this.metadata.fields.canDisableUnit;\n }\n\n static fromJSON(json: UnitViewResponse): UnitViewResponseModel {\n assertRequiredProperties(json, [\n 'unitId',\n 'name',\n 'level',\n 'code',\n 'metadata',\n 'costCenters',\n ]);\n\n return new UnitViewResponseModel(\n json.unitId,\n json.name,\n json.level,\n json.code,\n (json.parentUnit\n ? UnitSlimDtoModel.fromJSON(json.parentUnit)\n : null\n ),\n (json.unitCoordinator\n ? UserSlimDtoModel.fromJSON(json.unitCoordinator)\n : null\n ),\n [...(Array.isArray(json.defects) ? json.defects : [])],\n (Array.isArray(json.nonProductiveCategories) ? json.nonProductiveCategories : [])\n .map((item) => NonProductiveCategoryModel.fromJSON(item)),\n (Array.isArray(json.deputyUnitCoordinators) ? json.deputyUnitCoordinators : [])\n .map((item) => UserSlimDtoModel.fromJSON(item)),\n (Array.isArray(json.submitterContracts) ? json.submitterContracts : [])\n .map((item) => ContractDtoModel.fromJSON(item)),\n (Array.isArray(json.supplierContracts) ? json.supplierContracts : [])\n .map((item) => ContractDtoModel.fromJSON(item)),\n (Array.isArray(json.costCenters) ? json.costCenters : [])\n .map((item) => UnitCostCenterModel.fromJSON(item)),\n json.isDisabled,\n json.migratedToEtime,\n json.migratedToReiwa,\n new MetadataModel(json.metadata || {}),\n json.directUserSubmissionOfTimecard,\n json.monthlyView,\n json.hiddenLevels || HIDDEN_LEVELS_DEFAULT,\n json.payrollCompany || '',\n json.profitCenter || '',\n );\n }\n\n toJSON(): UnitViewResponse {\n return {\n unitId: this.unitId,\n name: this.name,\n level: this.level,\n code: this.code,\n parentUnit: (this.parentUnit ? this.parentUnit.toJSON() : null),\n unitCoordinator: (this.unitCoordinator ? this.unitCoordinator.toJSON() : null),\n defects: [...this.defects],\n nonProductiveCategories: this.nonProductiveCategories.map((item) => item.toJSON()),\n deputyUnitCoordinators: this.deputyUnitCoordinators.map((item) => item.toJSON()),\n submitterContracts: this.submitterContracts.map((item) => item.toJSON()),\n supplierContracts: this.supplierContracts.map((item) => item.toJSON()),\n costCenters: this.unitCostCenters.map((item) => item.toJSON()),\n isDisabled: this.isDisabled,\n migratedToEtime: this.migratedToEtime,\n migratedToReiwa: this.migratedToReiwa,\n metadata: this.metadata.toJSON(),\n directUserSubmissionOfTimecard: this.directUserSubmissionOfTimecard,\n monthlyView: this.monthlyView,\n hiddenLevels: this.hiddenLevels,\n payrollCompany: this.payrollCompany,\n profitCenter: this.profitCenter\n };\n }\n}\n","import { UnitsViewResponse } from '../../interfaces/responses/units-view.response';\nimport { MetadataModel } from '../metadata.model';\nimport { assertRequiredProperties } from '../../utilities/api.utility';\n\nexport class UnitsViewResponseModel {\n readonly canCreateUnit: boolean;\n\n constructor(\n readonly metadata: MetadataModel,\n ) {\n this.canCreateUnit = (this.metadata.fields && this.metadata.fields.canCreateUnit) || false;\n }\n\n static fromJSON(json: UnitsViewResponse): UnitsViewResponseModel {\n assertRequiredProperties(json, [\n 'metadata',\n ]);\n\n return new UnitsViewResponseModel(\n new MetadataModel(json.metadata || {}),\n );\n }\n\n toJSON(): UnitsViewResponse {\n return {\n metadata: this.metadata.toJSON(),\n };\n }\n}\n","import { TimesheetExportTemplateResponse } from '../../interfaces/responses/timesheet-export-template.response';\nimport { assertRequiredProperties } from '../../utilities/api.utility';\n\nexport class TimesheetExportTemplateResponseModel {\n constructor(\n readonly timesheetExportTemplateColumns: string,\n readonly timesheetExportTemplateHighlighting: string,\n readonly timesheetExportNonProductiveTemplateColumns: string,\n readonly timesheetExportNonProductiveTemplateHighlighting: string,\n ) {\n }\n\n static fromJSON(json: TimesheetExportTemplateResponse): TimesheetExportTemplateResponseModel {\n assertRequiredProperties(json, [\n 'timesheetExportTemplateColumns',\n 'timesheetExportTemplateHighlighting',\n 'timesheetExportNonProductiveTemplateColumns',\n 'timesheetExportNonProductiveTemplateHighlighting',\n ]);\n\n return new TimesheetExportTemplateResponseModel(\n json.timesheetExportTemplateColumns,\n json.timesheetExportTemplateHighlighting,\n json.timesheetExportNonProductiveTemplateColumns,\n json.timesheetExportNonProductiveTemplateHighlighting,\n );\n }\n\n toJSON(): TimesheetExportTemplateResponse {\n return {\n timesheetExportTemplateColumns: this.timesheetExportTemplateColumns,\n timesheetExportTemplateHighlighting: this.timesheetExportTemplateHighlighting,\n timesheetExportNonProductiveTemplateColumns: this.timesheetExportNonProductiveTemplateColumns,\n timesheetExportNonProductiveTemplateHighlighting: this.timesheetExportNonProductiveTemplateHighlighting,\n };\n }\n}\n","import { DefaultNonProductiveCategoryResponse } from '../../interfaces/responses/default-non-productive-category.response';\nimport { assertRequiredProperties } from '../../utilities/api.utility';\n\nexport class DefaultNonProductiveCategoryResponseModel {\n constructor(\n readonly name: string,\n readonly sapCode: string,\n readonly defaultTimecardCategoryId: number,\n readonly isEnabled: boolean = true,\n readonly hasReportedHours: boolean = false,\n ) {\n }\n\n static fromJSON(json: DefaultNonProductiveCategoryResponse): DefaultNonProductiveCategoryResponseModel {\n assertRequiredProperties(json, [\n 'name',\n 'defaultTimecardCategoryId',\n ]);\n\n return new DefaultNonProductiveCategoryResponseModel(\n json.name,\n json.sapCode || '',\n json.defaultTimecardCategoryId,\n json.isEnabled,\n json.hasReportedHours,\n );\n }\n\n toJSON(): DefaultNonProductiveCategoryResponse {\n return {\n name: this.name,\n sapCode: this.sapCode,\n defaultTimecardCategoryId: this.defaultTimecardCategoryId,\n isEnabled: this.isEnabled,\n hasReportedHours: this.hasReportedHours,\n };\n }\n}\n","import { UnitCoordinatorResponse } from '../../interfaces/responses/unit-coordinator.response';\nimport { UserSlimDtoModel } from '../dtos/user-slim.dto.model';\n\nexport class UnitCoordinatorResponseModel {\n constructor(\n readonly coordinators: readonly UserSlimDtoModel[],\n ) {\n this.coordinators = [...coordinators];\n }\n\n static fromJSON(json: UnitCoordinatorResponse): UnitCoordinatorResponseModel {\n return new UnitCoordinatorResponseModel(\n (Array.isArray(json.coordinators) ? json.coordinators : [])\n .map((item) => UserSlimDtoModel.fromJSON(item)),\n );\n }\n}\n","import { UnitSlimDtoWithoutCoordinatorDto } from '../../interfaces/dtos/unit-slim-without-coordinator.dto';\nimport { UnitLevel } from '../../../models/unit-level.enum';\nimport { ApiModelNew } from '../types';\nimport { assertRequiredProperties } from '../../utilities/api.utility';\n\nexport class UnitSlimWithoutCoordinatorDtoModel implements ApiModelNew {\n constructor(\n readonly unitId: number,\n readonly code: string,\n readonly name: string,\n readonly level: UnitLevel,\n readonly importPunchedHoursFromEtime: boolean,\n readonly directUserSubmissionOfTimecard: boolean,\n ) {}\n\n static fromJSON(json: UnitSlimDtoWithoutCoordinatorDto): UnitSlimWithoutCoordinatorDtoModel {\n assertRequiredProperties(json, [\n 'unitId',\n 'code',\n 'name',\n 'level',\n ]);\n\n return new UnitSlimWithoutCoordinatorDtoModel(\n json.unitId,\n json.code,\n json.name,\n json.level,\n json.importPunchedHoursFromEtime,\n json.directUserSubmissionOfTimecard,\n );\n }\n\n static fromSimilarModel(\n model: Partial,\n ): UnitSlimWithoutCoordinatorDtoModel {\n assertRequiredProperties(model, [\n 'unitId',\n 'code',\n 'name',\n 'level',\n 'importPunchedHoursFromEtime',\n 'directUserSubmissionOfTimecard',\n ]);\n\n return new UnitSlimWithoutCoordinatorDtoModel(\n model.unitId,\n model.code,\n model.name,\n model.level,\n model.importPunchedHoursFromEtime,\n model.directUserSubmissionOfTimecard,\n );\n }\n\n clone(): UnitSlimWithoutCoordinatorDtoModel {\n return new UnitSlimWithoutCoordinatorDtoModel(\n this.unitId,\n this.code,\n this.name,\n this.level,\n this.importPunchedHoursFromEtime,\n this.directUserSubmissionOfTimecard,\n );\n }\n\n toJSON(): UnitSlimDtoWithoutCoordinatorDto {\n return {\n unitId: this.unitId,\n code: this.code,\n name: this.name,\n level: this.level,\n importPunchedHoursFromEtime: this.importPunchedHoursFromEtime,\n directUserSubmissionOfTimecard: this.directUserSubmissionOfTimecard,\n };\n }\n}\n","import { Injectable } from '@angular/core';\nimport { HttpEventType, HttpResponse } from '@angular/common/http';\nimport { SortDirection } from '@angular/material/sort';\nimport { Observable } from 'rxjs';\nimport { filter, map, mapTo } from 'rxjs/operators';\nimport { CollAppApiService } from './collapp-api.service';\nimport { UnitColumnFilters } from '../filter-columns';\nimport { UnitDtoModel } from '../models/dtos/unit.dto.model';\nimport { UnitSlimDtoModel } from '../models/dtos/unit-slim.dto.model';\nimport { UnitDto } from '../interfaces/dtos/unit.dto';\nimport { UnitSlimDto } from '../interfaces/dtos/unit-slim.dto';\nimport { UnitSelectorListResponseModel } from '../models/responses/unit-selector-list.response.model';\nimport { UnitListResponse } from '../interfaces/responses/unit-list.response';\nimport { UnitListResponseModel } from '../models/responses/unit-list.response.model';\nimport { UnitCreateRequestModel } from '../models/requests/unit-create.request.model';\nimport { UnitUpdateRequestModel } from '../models/requests/unit-update.request.model';\nimport { UnitSelectorListResponse } from '../interfaces/responses/unit-selector-list.response';\nimport { ListQueryOptions } from '../list-query-options';\nimport { UnitCreateResponse } from '../interfaces/responses/unit-create.response';\nimport { UnitCreateResponseModel } from '../models/responses/unit-create.response.model';\nimport { UnitViewResponseModel } from '../models/responses/unit-view.response.model';\nimport { UnitViewResponse } from '../interfaces/responses/unit-view.response';\nimport { UnitsViewResponseModel } from '../models/responses/units-view.response.model';\nimport { UnitsViewResponse } from '../interfaces/responses/units-view.response';\nimport { UnitSelectFetchType } from '../../components/unit-select';\nimport { SelectorRequestOptions } from '../../models/selector-request.options';\nimport { DefectListResponse } from '../interfaces/responses/defect-list.response';\nimport { TimesheetExportTemplateResponse } from '../interfaces/responses/timesheet-export-template.response';\nimport { TimesheetExportTemplateResponseModel } from '../models/responses/timesheet-export-template.response.model';\nimport { DefaultNonProductiveCategoryResponse } from '../interfaces/responses/default-non-productive-category.response';\nimport { DefaultNonProductiveCategoryResponseModel } from '../models/responses/default-non-productive-category-response.model';\nimport { UnitCoordinatorResponseModel } from '../models/responses/unit-coordinator-response.model';\nimport { UserSlimDto } from '../interfaces/dtos/user-slim.dto';\nimport { UnitSkillDtoModel } from '../models/dtos/unit-skill.dto.model';\nimport { UnitSkillDto } from '../interfaces/dtos/unit-skill.dto';\nimport { UnitSlimDtoWithoutCoordinatorDto } from '../interfaces/dtos/unit-slim-without-coordinator.dto';\nimport { UnitSlimWithoutCoordinatorDtoModel } from '../models/dtos/unit-slim-without-coordinator.dto.model';\nimport { BackgroundColorResponse } from '../interfaces/responses/background-colors-response';\nimport { BackgroundColorDtoModel } from '../models/dtos/background-color.dto.model';\nimport { BackgroundColorUpdateRequestModel } from '../models/requests/background-color-update.request.model';\n\nexport interface UnitSelectorRequestOptions extends SelectorRequestOptions {\n unitFetchType: UnitSelectFetchType;\n}\n\nexport interface UnitSelectorAvailableRequestOptions extends SelectorRequestOptions {\n workPackageId: number;\n projectId: number;\n}\n\n@Injectable({\n providedIn: 'root',\n})\nexport class UnitService {\n constructor(private apiService: CollAppApiService) { }\n\n /**\n * Gets a list of all units\n */\n getUnits$(\n pageIndex?: number,\n pageSize?: number,\n columnFilters?: UnitColumnFilters,\n sortColumn?: string,\n sortDirection?: SortDirection,\n ): Observable {\n const options = new ListQueryOptions(pageIndex, pageSize, columnFilters, sortColumn, sortDirection);\n\n return this.apiService\n .getUnits$(options)\n .pipe(\n filter((event) => event.type === HttpEventType.Response),\n map((response: HttpResponse) => UnitListResponseModel.fromJSON(response.body!)),\n );\n }\n\n /**\n * Gets a list of all Coordinators by a given UnitId\n */\n getUnitCoordinators$(unitId: number): Observable {\n return this.apiService\n .getUnitCoordinators$(unitId)\n .pipe(\n filter((event) => event.type === HttpEventType.Response),\n map((response: HttpResponse) => UnitCoordinatorResponseModel\n .fromJSON({ coordinators: response.body! })),\n );\n }\n\n /**\n * Gets a list of all Coordinators by a given UnitId\n */\n getUnitCoordinatorsForConfirmingWP$(unitId: number): Observable {\n return this.apiService\n .getUnitCoordinatorsForConfirmingWP$(unitId)\n .pipe(\n filter((event) => event.type === HttpEventType.Response),\n map((response: HttpResponse) => UnitCoordinatorResponseModel\n .fromJSON({ coordinators: response.body! })),\n );\n }\n\n /**\n * Gets a single unit dto\n */\n getUnitById$(unitId: number): Observable {\n return this\n .apiService\n .getUnitByUnitId$(unitId)\n .pipe(\n filter((event) => event.type === HttpEventType.Response),\n map((response: HttpResponse) => UnitDtoModel.fromJSON(response.body!)),\n );\n }\n\n getIsMonthlyByUnitId$(unitId: number): Observable {\n return this\n .apiService\n .getIsMonthlyByUnitId$(unitId)\n .pipe(\n filter((event) => event.type === HttpEventType.Response),\n map((response: HttpResponse) => response\n .body!),\n );\n\n }\n\n /**\n * Gets a single (slim) unit dto\n */\n getUnitSlimByUnitId$(unitId: number): Observable {\n return this\n .apiService\n .getUnitSlimByUnitId$(unitId)\n .pipe(\n filter((event) => event.type === HttpEventType.Response),\n map((response: HttpResponse) => UnitSlimDtoModel.fromJSON(response.body!)),\n );\n }\n\n /**\n * Gets the view response of the units in the administration section\n */\n getUnitsViewResponse$(): Observable {\n return this\n .apiService\n .getUnitsViewResponse$()\n .pipe(\n filter((event) => event.type === HttpEventType.Response),\n map((response: HttpResponse) => UnitsViewResponseModel.fromJSON(response.body!)),\n );\n }\n\n /**\n * Gets a view response of a specific unit.\n */\n getUnitViewByUnitId$(unitId: number): Observable {\n return this\n .apiService\n .getUnitViewResponseByUnitId$(unitId)\n .pipe(\n filter((event) => event.type === HttpEventType.Response),\n map((response: HttpResponse) => UnitViewResponseModel.fromJSON(response.body!)),\n );\n }\n\n /**\n * Gets the units as a tree-like structure.\n * Only units the users has access to are returned (including parents).\n */\n getUnitsForUnitSelector$(\n requestOptions: UnitSelectorRequestOptions,\n ): Observable {\n return this.apiService\n .getUnitSelectors$(requestOptions)\n .pipe(\n filter((event) => event.type === HttpEventType.Response),\n map((response: HttpResponse) => UnitSelectorListResponseModel\n .fromJSON(response.body!)),\n );\n }\n\n getAvailableUnitsForUnitSelector$(\n requestOptions: UnitSelectorAvailableRequestOptions,\n ): Observable {\n return this.apiService\n .getAvailableUnitSelectors$(requestOptions)\n .pipe(\n filter((event) => event.type === HttpEventType.Response),\n map((response: HttpResponse) => UnitSelectorListResponseModel\n .fromJSON(response.body!)),\n );\n }\n\n /**\n * Gets a list of defects by a unit.\n * If no unit id is provided, a default list of categories is provided.\n */\n getUnitDefects$(unitId?: number): Observable {\n return this.apiService\n .getUnitDefects$(unitId)\n .pipe(\n filter((event) => event.type === HttpEventType.Response),\n map((response: HttpResponse) => [...response.body!.items]),\n );\n }\n\n /**\n * Gets a list of non productive categories a unit has.\n * If no unit id is provided, a default list of categories is provided.\n */\n getDefaultNonProductiveCategories$(): Observable {\n return this.apiService\n .getDefaultNonProductiveCategories$()\n .pipe(\n filter((event) => event.type === HttpEventType.Response),\n map((response: HttpResponse) => (Array.isArray(response.body)\n ? response.body\n : [])),\n map((categories) => categories.map((item) => DefaultNonProductiveCategoryResponseModel.fromJSON(item))),\n );\n }\n\n /**\n * Gets a unit's timesheet export template.\n * If no unit id is provided, a default template is provided.\n */\n getTimeSheetExportTemplate$(unitId?: number): Observable {\n return this.apiService\n .getUnitTimesheetExportTemplate$(unitId)\n .pipe(\n filter((event) => event.type === HttpEventType.Response),\n map((response: HttpResponse) => TimesheetExportTemplateResponseModel\n .fromJSON(response.body!)),\n );\n }\n\n /**\n * Creates a new unit.\n */\n postUnit$(unit: UnitCreateRequestModel): Observable {\n return this.apiService\n .postUnit$(unit.toJSON())\n .pipe(\n filter((event) => event.type === HttpEventType.Response),\n map((response: HttpResponse) => UnitCreateResponseModel.fromJSON(response.body!)),\n );\n }\n\n /**\n * Updates an existing unit.\n */\n putUnit$(unit: UnitUpdateRequestModel): Observable {\n return this.apiService\n .putUnit$(unit.unitId, unit.toJSON())\n .pipe(\n filter((event) => event.type === HttpEventType.Response),\n mapTo(undefined),\n );\n }\n\n /**\n * Disables the given unit\n */\n disableUnit$(unitId: number): Observable {\n return this.apiService\n .disableUnit$(unitId)\n .pipe(\n filter((event) => event.type === HttpEventType.Response),\n mapTo(undefined),\n );\n }\n\n getSkillUnits$(): Observable {\n return this.apiService\n .getSkillUnits$()\n .pipe(\n filter((event) => event.type === HttpEventType.Response),\n map((response: HttpResponse) => response.body!.map(UnitSkillDtoModel.fromJSON)),\n );\n }\n\n getL1Units$(): Observable {\n return this.apiService\n .getL1Units$()\n .pipe(\n filter((event) => event.type === HttpEventType.Response),\n map((response: HttpResponse) => response.body!\n .map((unit) => UnitSlimWithoutCoordinatorDtoModel.fromJSON(unit))),\n );\n }\n\n getColorsByL1Unit$(unitId: number): Observable {\n return this.apiService\n .getColorsByL1Unit$(unitId)\n .pipe(\n filter((event) => event.type === HttpEventType.Response),\n map((response: HttpResponse) => response.body!\n .map((color) => BackgroundColorDtoModel.fromJSON(color))),\n );\n }\n\n /**\n * Updates existing background colors\n */\n putColors$(unitId: number, colors: BackgroundColorUpdateRequestModel): Observable {\n return this.apiService\n .putColors$(unitId, colors.toJSON())\n .pipe(\n filter((event) => event.type === HttpEventType.Response),\n mapTo(undefined),\n );\n }\n\n getHourlyRatesCategories$(userId: string): Observable {\n return this.apiService\n .getHourlyRatesCategories$(userId)\n .pipe(\n filter((event) => event.type === HttpEventType.Response),\n map((response: HttpResponse) => ((response.body?.items) ? response.body?.items : [])),\n );\n }\n\n getAllPayrollCompanies$(): Observable {\n return this.apiService\n .getAllPayrollCompanies$()\n .pipe(\n filter((event) => event.type === HttpEventType.Response),\n map((response: HttpResponse) => ((response.body) ? response.body : [])),\n );\n }\n\n getprofitCentersByPayrollCompany$(payrollCompany: string): Observable {\n return this.apiService\n .getprofitCentersByPayrollCompany$(payrollCompany)\n .pipe(\n filter((event) => event.type === HttpEventType.Response),\n map((response: HttpResponse) => ((response.body) ? response.body : [])),\n );\n }\n}\n","import { CollappFilterDropdownListRadioSetting } from '../../../models/collapp-filter-dropdown-list-radio.interface';\nimport { ProjectPlanningFiltersSettingsModel } from '../../../models/project-planning-filter-settings.interface';\nimport { CapacityUnits } from '../../../modules/administration/non-human-resources/capacity-units';\nimport { UserSettingsDto } from '../../interfaces/dtos/user-settings.dto';\nimport { ProjectRecentListDtoModel } from './project-recent-list.dto.model';\nimport { ProjectListStateModel } from '../../../state/settings/project-list';\nimport { UnitListStateModel } from '../../../state/settings/unit-list';\nimport { UserListStateModel } from '../../../state/settings/user-list';\nimport { WorkPackageListStateModel } from '../../../state/settings/work-package-list';\nimport { WorkPackageQuestionListStateModel } from '../../../state/settings/work-package-question-list';\nimport { QuestionsListStateModel } from '../../../state/settings/questions-list';\nimport { UserResourceListStateModel } from '../../../state/settings/user-resource-list';\nimport { assertRequiredProperties } from '../../utilities/api.utility';\nimport { AttachmentListStateModel } from '../../../state/settings/attachment-list/attachment-list-state.model';\nimport { UnitSlimDtoModel } from './unit-slim.dto.model';\nimport { NonHumanResourceListStateModel } from '../../../state/settings/non-human-resource-list';\nimport { NonHumanResourcePlanningListStateModel } from '../../../state/settings/non-human-resource-planning-list/non-human-resource-planning-list-state.model';\nimport { UnitSkillDtoModel } from './unit-skill.dto.model';\nimport { ActivitiesStateModel } from '../../../state/settings/activities/activities-state.model';\nimport { DashboardWorkPackageViewType } from '../../../models/dashboard-work-package-view-type.enum';\nimport { RangeSettingModel } from './range-setting.dto.model';\nimport { ProjectStructureFiltersSettingsModel } from '../../../models/project-structure-filter-settings.interface';\n\nexport class UserSettingsDtoModel {\n constructor(\n readonly recentProjects: readonly ProjectRecentListDtoModel[] = [],\n readonly projectsTable: ProjectListStateModel | null = null,\n readonly unitsTable: UnitListStateModel | null = null,\n readonly nonHumanResourcesTable: NonHumanResourceListStateModel | null = null,\n readonly usersTable: UserListStateModel | null = null,\n readonly workPackagesTable: WorkPackageListStateModel | null = null,\n readonly workPackageQuestionsTable: WorkPackageQuestionListStateModel | null,\n readonly questionsTable: QuestionsListStateModel | null = null,\n readonly userResourceTable: UserResourceListStateModel | null,\n readonly attachmentList: AttachmentListStateModel | null = null,\n readonly timesheetWithCrossUtilizeUsers: boolean | null = null,\n readonly recentTimesheetUnits: readonly UnitSlimDtoModel[] = [],\n readonly recentSkillUnits: readonly UnitSkillDtoModel[] = [],\n readonly recentPlanningUnits: readonly UnitSlimDtoModel[] = [],\n readonly recentUsedSupplierUnits: readonly UnitSlimDtoModel[] = [],\n readonly nonHumanResourcesPlanningTable: NonHumanResourcePlanningListStateModel | null = null,\n readonly activities: ActivitiesStateModel | null = null,\n readonly dashboardWorkPackageFilters: DashboardWorkPackageViewType[] | null = null,\n readonly userPlanningTotals: string[] | null = null,\n readonly unitPlanningTotals: string[] | null = null,\n readonly userPlanningRange: RangeSettingModel | null = null,\n readonly unitPlanningRange: RangeSettingModel | null = null,\n readonly projectPlanningRange: RangeSettingModel | null = null,\n readonly projectPlanningTotals: string[] | null = null,\n readonly timecardRange: RangeSettingModel | null = null,\n readonly timesheetRange: RangeSettingModel | null = null,\n readonly workPackagePlanningRange: RangeSettingModel | null = null,\n readonly workPackagePlanningTotals: string[] | null = null,\n readonly timesheetTotals: string[] | null = null,\n readonly workPackageSidePanel: boolean | null = null,\n readonly userPlanningSidePanel: boolean | null = null,\n readonly unitPlanningSidePanel: boolean | null = null,\n readonly unitPlanningSidePanelIndex: number | null = null,\n readonly userPlanningSidePanelIndex: number | null = null,\n readonly workPackageSidePanelIndex: number | null = null,\n readonly unitPlanningCapacityUnit: CapacityUnits | null = null,\n readonly projectPlanningCapacityUnit: CapacityUnits | null = null,\n public projectsStrucureHeaderFilters?: ProjectStructureFiltersSettingsModel | null,\n public projectPlanningHeaderFilters?: ProjectPlanningFiltersSettingsModel | null,\n public timecardHeaderfilters?: CollappFilterDropdownListRadioSetting[] | null,\n public planningHeaderfilters?: CollappFilterDropdownListRadioSetting[] | null,\n public projectPlanningCompactFilter?: boolean | null,\n ) {\n this.recentProjects = [...recentProjects];\n this.recentTimesheetUnits = recentTimesheetUnits.map((unit) => unit.clone());\n this.recentSkillUnits = recentSkillUnits.map((unit) => unit.clone());\n this.recentPlanningUnits = recentPlanningUnits.map((unit) => unit.clone());\n this.recentUsedSupplierUnits = recentUsedSupplierUnits.map((unit) => unit.clone());\n }\n\n // eslint-disable-next-line max-lines-per-function, complexity\n static fromJSON(json: UserSettingsDto): UserSettingsDtoModel {\n assertRequiredProperties(json, [\n // 'recentProjects',\n ]);\n const capacityUnit = Object.values(CapacityUnits)\n .filter((cu) => cu.toString() === json?.unitPlanningCapacityUnit)?.[0] || null;\n const projectPlanningCapacityUnit = Object.values(CapacityUnits)\n .filter((cu) => cu.toString() === json?.projectPlanningCapacityUnit)?.[0] || null;\n\n return new UserSettingsDtoModel(\n (Array.isArray(json.recentProjects) ? json.recentProjects : [])\n .map((item) => ProjectRecentListDtoModel.fromJSON(item)),\n (json.projectsTable\n ? JSON.parse(json.projectsTable)\n : null),\n (json.unitsTable\n ? JSON.parse(json.unitsTable)\n : null),\n (json.nonHumanResourcesTable\n ? JSON.parse(json.nonHumanResourcesTable)\n : null),\n (json.usersTable\n ? JSON.parse(json.usersTable)\n : null),\n (json.workPackagesTable\n ? JSON.parse(json.workPackagesTable)\n : null),\n (json.workPackageQuestionsTable\n ? JSON.parse(json.workPackageQuestionsTable)\n : null),\n (json.questionsTable\n ? JSON.parse(json.questionsTable)\n : null),\n (json.userResourceTable\n ? JSON.parse(json.userResourceTable)\n : null),\n (json.attachmentList\n ? JSON.parse(json.attachmentList)\n : null),\n (json.timesheetWithCrossUtilizeUsers != null\n ? json.timesheetWithCrossUtilizeUsers\n : null),\n (Array.isArray(json.recentTimesheetUnits) ? json.recentTimesheetUnits : [])\n .map((item) => UnitSlimDtoModel.fromJSON(item)),\n (Array.isArray(json.recentSkillUnits) ? json.recentSkillUnits : [])\n .map((item) => UnitSkillDtoModel.fromJSON(item)),\n (Array.isArray(json.recentPlanningUnits) ? json.recentPlanningUnits : [])\n .map((item) => UnitSlimDtoModel.fromJSON(item)),\n (Array.isArray(json.recentUsedSupplierUnits) ? json.recentUsedSupplierUnits : [])\n .map((item) => UnitSlimDtoModel.fromJSON(item)),\n (json.nonHumanResourcesPlanningTable\n ? JSON.parse(json.nonHumanResourcesPlanningTable)\n : null),\n (json.activities\n ? JSON.parse(json.activities)\n : null),\n json.dashboardWorkPackageFilters,\n json.userPlanningTotals ? JSON.parse(json.userPlanningTotals) : null,\n json.unitPlanningTotals ? JSON.parse(json.unitPlanningTotals) : null,\n json.userPlanningRange ? RangeSettingModel.fromJSON(JSON.parse(json.userPlanningRange)) : null,\n json.unitPlanningRange ? RangeSettingModel.fromJSON(JSON.parse(json.unitPlanningRange)) : null,\n json.projectPlanningRange ? RangeSettingModel.fromJSON(JSON.parse(json.projectPlanningRange)) : null,\n json.projectPlanningTotals ? JSON.parse(json.projectPlanningTotals) : null,\n json.timecardRange ? RangeSettingModel.fromJSON(JSON.parse(json.timecardRange)) : null,\n json.timesheetRange ? RangeSettingModel.fromJSON(JSON.parse(json.timesheetRange)) : null,\n json.workPackagePlanningRange ? RangeSettingModel.fromJSON(JSON.parse(json.workPackagePlanningRange)) : null,\n json.workPackagePlanningTotals ? JSON.parse(json.workPackagePlanningTotals) : null,\n json.timesheetTotals ? JSON.parse(json.timesheetTotals) : null,\n !!json.workPackageSidePanel,\n !!json.userPlanningSidePanel,\n !!json.unitPlanningSidePanel,\n json.unitPlanningSidePanelIndex ? json.unitPlanningSidePanelIndex : null,\n json.userPlanningSidePanelIndex ? json.userPlanningSidePanelIndex : null,\n json.workPackageSidePanelIndex ? json.workPackageSidePanelIndex : null,\n capacityUnit,\n projectPlanningCapacityUnit,\n json.projectsStructureHeaderFilters\n ? ProjectStructureFiltersSettingsModel.fromJSON(JSON.parse(json.projectsStructureHeaderFilters)) : null,\n json.projectPlanningHeaderFilters\n ? ProjectPlanningFiltersSettingsModel.fromJSON(JSON.parse(json.projectPlanningHeaderFilters)) : null,\n json.timecardHeaderfilters\n ? JSON.parse(json.timecardHeaderfilters) : null,\n json.planningHeaderfilters\n ? JSON.parse(json.planningHeaderfilters) : null,\n !!json.projectPlanningCompactFilter,\n );\n }\n\n clone(): UserSettingsDtoModel {\n return UserSettingsDtoModel.fromJSON(this.toJSON());\n }\n\n // eslint-disable-next-line complexity\n toJSON(): UserSettingsDto {\n return {\n recentProjects: [...this.recentProjects],\n projectsTable: this.projectsTable ? JSON.stringify(this.projectsTable) : null,\n unitsTable: this.unitsTable ? JSON.stringify(this.unitsTable) : null,\n nonHumanResourcesTable: this.nonHumanResourcesTable ? JSON.stringify(this.nonHumanResourcesTable) : null,\n usersTable: this.usersTable ? JSON.stringify(this.usersTable) : null,\n workPackagesTable: this.workPackagesTable ? JSON.stringify(this.workPackagesTable) : null,\n workPackageQuestionsTable: this.workPackageQuestionsTable ? JSON.stringify(this.workPackageQuestionsTable) : null,\n questionsTable: this.questionsTable ? JSON.stringify(this.questionsTable) : null,\n userResourceTable: this.userResourceTable ? JSON.stringify(this.userResourceTable) : null,\n attachmentList: this.attachmentList ? JSON.stringify(this.attachmentList) : null,\n timesheetWithCrossUtilizeUsers: this.timesheetWithCrossUtilizeUsers != null\n ? this.timesheetWithCrossUtilizeUsers\n : null,\n recentTimesheetUnits: this.recentTimesheetUnits.map((model) => model.toJSON()),\n recentSkillUnits: this.recentSkillUnits.map((model) => model.toJSON()),\n recentPlanningUnits: this.recentPlanningUnits.map((model) => model.toJSON()),\n recentUsedSupplierUnits: this.recentUsedSupplierUnits.map((model) => model.toJSON()),\n nonHumanResourcesPlanningTable: this.nonHumanResourcesPlanningTable != null\n ? JSON.stringify(this.nonHumanResourcesPlanningTable)\n : null,\n activities: this.activities != null ? JSON.stringify(this.activities) : null,\n dashboardWorkPackageFilters: this.dashboardWorkPackageFilters ? [...this.dashboardWorkPackageFilters] : null,\n userPlanningTotals: this.userPlanningTotals ? JSON.stringify(this.userPlanningTotals) : null,\n unitPlanningTotals: this.unitPlanningTotals ? JSON.stringify(this.unitPlanningTotals) : null,\n userPlanningRange: this.userPlanningRange ? JSON.stringify(this.userPlanningRange.toJSON()) : null,\n unitPlanningRange: this.unitPlanningRange ? JSON.stringify(this.unitPlanningRange.toJSON()) : null,\n projectPlanningRange: this.projectPlanningRange ? JSON.stringify(this.projectPlanningRange.toJSON()) : null,\n projectPlanningTotals: this.projectPlanningTotals ? JSON.stringify(this.projectPlanningTotals) : null,\n timecardRange: this.timecardRange ? JSON.stringify(this.timecardRange.toJSON()) : null,\n timesheetRange: this.timesheetRange ? JSON.stringify(this.timesheetRange.toJSON()) : null,\n workPackagePlanningRange: this.workPackagePlanningRange\n ? JSON.stringify(this.workPackagePlanningRange.toJSON())\n : null,\n timesheetTotals: this.timesheetTotals ? JSON.stringify(this.timesheetTotals) : null,\n workPackagePlanningTotals: this.workPackagePlanningTotals ? JSON.stringify(this.workPackagePlanningTotals) : null,\n workPackageSidePanel: this.workPackageSidePanel != null ? this.workPackageSidePanel : null,\n userPlanningSidePanel: this.userPlanningSidePanel != null ? this.userPlanningSidePanel : null,\n unitPlanningSidePanel: this.unitPlanningSidePanel != null ? this.unitPlanningSidePanel : null,\n unitPlanningSidePanelIndex: this.unitPlanningSidePanelIndex != null ? this.unitPlanningSidePanelIndex : null,\n userPlanningSidePanelIndex: this.userPlanningSidePanelIndex != null ? this.userPlanningSidePanelIndex : null,\n workPackageSidePanelIndex: this.workPackageSidePanelIndex != null ? this.workPackageSidePanelIndex : null,\n unitPlanningCapacityUnit: this.unitPlanningCapacityUnit?.toString() || null,\n projectPlanningCapacityUnit: this.projectPlanningCapacityUnit?.toString() || null,\n // eslint-disable-next-line max-len\n projectPlanningHeaderFilters: this.projectPlanningHeaderFilters ? JSON.stringify(this.projectPlanningHeaderFilters) : null,\n timecardHeaderfilters: this.timecardHeaderfilters ? JSON.stringify(this.timecardHeaderfilters) : null,\n planningHeaderfilters: this.planningHeaderfilters ? JSON.stringify(this.planningHeaderfilters) : null,\n // eslint-disable-next-line max-len\n projectPlanningCompactFilter: !!this.projectPlanningCompactFilter,\n };\n }\n}\n","/* eslint-disable complexity */\n/* eslint-disable max-lines-per-function */\nimport moment from 'moment';\nimport { CapacityUnits } from '../../../modules/administration/non-human-resources/capacity-units';\nimport { UserDto } from '../../interfaces/dtos/user.dto';\nimport { UnitSlimDtoModel } from './unit-slim.dto.model';\nimport { RoleDtoModel } from './role.dto.model';\nimport { UserSettingsDtoModel } from './user-settings.dto.model';\nimport { UserPermissions } from '../../user-permissions';\nimport { MetadataModel } from '../metadata.model';\nimport { UserSettingsDto } from '../../interfaces/dtos/user-settings.dto';\nimport { assertRequiredProperties } from '../../utilities/api.utility';\nimport { DefaultUserLandingPageType } from 'src/app/models/default-user-landing-page-type.enum';\n\nconst DEFAULT_USER_SETTINGS: UserSettingsDto = {\n recentProjects: [],\n projectsTable: null,\n unitsTable: null,\n nonHumanResourcesTable: null,\n usersTable: null,\n workPackagesTable: null,\n workPackageQuestionsTable: null,\n questionsTable: null,\n userResourceTable: null,\n attachmentList: null,\n timesheetWithCrossUtilizeUsers: null,\n recentTimesheetUnits: [],\n recentSkillUnits: [],\n recentPlanningUnits: [],\n recentUsedSupplierUnits: [],\n nonHumanResourcesPlanningTable: null,\n activities: null,\n dashboardWorkPackageFilters: [],\n userPlanningTotals: null,\n unitPlanningTotals: null,\n userPlanningRange: null,\n projectPlanningRange: null,\n projectPlanningTotals: null,\n unitPlanningRange: null,\n timecardRange: null,\n timesheetRange: null,\n workPackagePlanningRange: null,\n timesheetTotals: null,\n workPackagePlanningTotals: null,\n workPackageSidePanel: null,\n userPlanningSidePanel: null,\n unitPlanningCapacityUnit: CapacityUnits.HoursWeek,\n projectPlanningCompactFilter: false,\n};\n\nexport class UserDtoModel {\n readonly fullName: string;\n\n constructor(\n readonly userId: string,\n readonly activeDirectoryId: string,\n readonly email: string,\n readonly globalEmployeeId: string | null = null,\n readonly localEmployeeId: string | null = null,\n readonly firstName: string = '',\n readonly lastName: string = '',\n readonly photoUrl: string | null = null,\n readonly photoLargeUrl: string | null = null,\n readonly abbreviation: string = '',\n readonly payrollCompany: string | null = null,\n readonly costCenter: string | null = null,\n readonly countryCode: string = '',\n readonly city: string = '',\n readonly divisionCode: string | null = null,\n readonly businessUnitCode: string | null = null,\n readonly productGroupCode: string | null = null,\n readonly validFrom: moment.Moment | null,\n readonly validUntil: moment.Moment | null,\n readonly hourlyRateCategory: string | null = null,\n readonly workingHoursPerWeek: number | null = null,\n readonly userWorkingDays: string | null = null,\n readonly timezone: string = '',\n readonly timezoneOffset: number = 0,\n readonly accountEnabled: boolean = false,\n readonly unit: UnitSlimDtoModel | null = null,\n readonly role: RoleDtoModel | null = null,\n readonly displayInLocalLanguage: boolean = false,\n readonly permissions: UserPermissions = {},\n readonly settings: UserSettingsDtoModel = UserSettingsDtoModel.fromJSON(DEFAULT_USER_SETTINGS),\n readonly metadata: MetadataModel = new MetadataModel(),\n readonly defaultUserLandingPage: DefaultUserLandingPageType = 0,\n ) {\n this.validFrom = (validFrom ? validFrom.clone() : validFrom);\n this.validUntil = (validUntil ? validUntil.clone() : validUntil);\n\n this.fullName = `${this.firstName} ${this.lastName}`.trim();\n }\n\n /**\n * Checks if the user has the permissions\n * that were passed.\n * @param permissions\n */\n static fromJSON(json: UserDto): UserDtoModel {\n assertRequiredProperties(json, [\n 'userId',\n 'activeDirectoryId',\n // 'fullName',\n 'email',\n ]);\n\n return new UserDtoModel(\n json.userId,\n json.activeDirectoryId,\n json.email,\n json.globalEmployeeId,\n json.localEmployeeId,\n json.firstName || '',\n json.lastName || '',\n json.photoUrl,\n json.photoLargeUrl,\n json.abbreviation || '',\n json.payrollCompany,\n json.costCenter,\n json.countryCode || '',\n json.city || '',\n json.divisionCode,\n json.businessUnitCode,\n json.productGroupCode,\n (json.validFrom\n ? moment(json.validFrom)\n .parseZone()\n : null\n ),\n (json.validUntil\n ? moment(json.validUntil)\n .parseZone()\n : null\n ),\n json.hourlyRateCategory,\n json.workingHoursPerWeek,\n json.userWorkingDays,\n json.timezone,\n json.timezoneOffset,\n json.accountEnabled || false,\n (json.unit\n ? UnitSlimDtoModel.fromJSON(json.unit)\n : null\n ),\n (json.role\n ? RoleDtoModel.fromJSON(json.role)\n : null\n ),\n json.displayInLocalLanguage || false,\n json.permissions || {},\n UserSettingsDtoModel.fromJSON(json.settings || DEFAULT_USER_SETTINGS),\n new MetadataModel(json.metadata || {}),\n json.defaultUserLandingPage\n );\n }\n\n hasPermissions(permissions?: any): boolean {\n if (!permissions) {\n return true;\n }\n\n const {\n any: anyOf = [],\n all: allOf = [],\n }: {\n any: string[]; // eslint-disable-line id-blacklist\n all: string[];\n } = permissions;\n\n if (anyOf.length === 0 && allOf.length === 0) {\n return true;\n }\n\n const userPermissions = (this.permissions || {});\n\n let hasPermissions = true;\n\n if (allOf.length > 0) {\n let allOfIndex = allOf.length;\n while (hasPermissions && allOfIndex > 0) {\n allOfIndex -= 1;\n if (!userPermissions[allOf[allOfIndex]]) {\n hasPermissions = false;\n }\n }\n }\n\n if (hasPermissions && anyOf.length > 0) {\n hasPermissions = false;\n\n let anyOfIndex = anyOf.length;\n while (!hasPermissions && anyOfIndex > 0) {\n anyOfIndex -= 1;\n if (userPermissions[anyOf[anyOfIndex]]) {\n hasPermissions = true;\n }\n }\n }\n\n return hasPermissions;\n }\n\n clone(overrides?: Partial): UserDtoModel {\n const copy = { ...this, ...overrides };\n\n return new UserDtoModel(\n copy.userId,\n copy.activeDirectoryId,\n copy.email,\n copy.globalEmployeeId,\n copy.localEmployeeId,\n copy.firstName,\n copy.lastName,\n copy.photoUrl,\n copy.photoLargeUrl,\n copy.abbreviation,\n copy.payrollCompany,\n copy.costCenter,\n copy.countryCode,\n copy.city,\n copy.divisionCode,\n copy.businessUnitCode,\n copy.productGroupCode,\n copy.validFrom ? copy.validFrom : null,\n copy.validUntil ? copy.validUntil : null,\n copy.hourlyRateCategory,\n copy.workingHoursPerWeek,\n copy.userWorkingDays,\n copy.timezone,\n copy.timezoneOffset,\n copy.accountEnabled,\n copy.unit ? copy.unit.clone() : null,\n copy.role ? copy.role.clone() : null,\n copy.displayInLocalLanguage,\n copy.permissions,\n copy.settings.clone(),\n copy.metadata,\n copy.defaultUserLandingPage\n );\n }\n\n toJSON(): UserDto {\n return {\n userId: this.userId,\n activeDirectoryId: this.activeDirectoryId,\n email: this.email,\n globalEmployeeId: this.globalEmployeeId,\n localEmployeeId: this.localEmployeeId,\n firstName: this.firstName,\n lastName: this.lastName,\n fullName: this.fullName,\n photoUrl: this.photoUrl,\n photoLargeUrl: this.photoLargeUrl,\n abbreviation: this.abbreviation,\n payrollCompany: this.payrollCompany,\n costCenter: this.costCenter,\n countryCode: this.countryCode,\n city: this.city,\n divisionCode: this.divisionCode,\n businessUnitCode: this.businessUnitCode,\n productGroupCode: this.productGroupCode,\n validFrom: this.validFrom ? this.validFrom.toJSON() : null,\n validUntil: this.validUntil ? this.validUntil.toJSON() : null,\n // FIXME the return value does not correspond to he model value\n hourlyRateCategory: this.hourlyRateCategory || '',\n // FIXME the return value does not correspond to he model value\n workingHoursPerWeek: this.workingHoursPerWeek || 0,\n userWorkingDays: this.userWorkingDays,\n timezone: this.timezone,\n timezoneOffset: this.timezoneOffset,\n accountEnabled: this.accountEnabled,\n unit: this.unit ? this.unit.toJSON() : null,\n role: this.role ? this.role.toJSON() : null,\n displayInLocalLanguage: this.displayInLocalLanguage,\n permissions: this.permissions,\n settings: this.settings.toJSON(),\n metadata: this.metadata.toJSON(),\n defaultUserLandingPage: this.defaultUserLandingPage\n };\n }\n}\n","import { UserCreateResponse } from '../../interfaces/responses/user-create.response';\nimport { assertRequiredProperties } from '../../utilities/api.utility';\n\nexport class UserCreateResponseModel {\n constructor(\n readonly userId: string,\n ) {\n }\n\n static fromJSON(json: UserCreateResponse): UserCreateResponseModel {\n assertRequiredProperties(json, [\n 'userId',\n ]);\n\n return new UserCreateResponseModel(\n json.userId,\n );\n }\n\n toJSON(): UserCreateResponse {\n return {\n userId: this.userId,\n };\n }\n}\n","import { UserViewResponse } from '../../interfaces/responses/user-view.response';\nimport { RoleDtoModel } from '../dtos/role.dto.model';\nimport { UserUnitAssignmentDtoModel } from '../dtos/user-unit-assignment.dto.model';\nimport { MetadataModel } from '../metadata.model';\nimport { assertRequiredProperties } from '../../utilities/api.utility';\n\nexport class UserViewResponseModel {\n readonly fullName: string;\n\n constructor(\n readonly userId: string,\n readonly activeDirectoryId: string,\n readonly email: string,\n readonly globalEmployeeId: string,\n readonly localEmployeeId: string | null = null,\n readonly firstName: string = '',\n readonly lastName: string = '',\n readonly photoUrl: string | null = null,\n readonly abbreviation: string = '',\n readonly hitachiId: string | null = null,\n readonly payrollCompany: string | null = null,\n readonly costCenter: string | null = null,\n readonly countryCode: string = '',\n readonly city: string = '',\n readonly divisionCode: string | null = null,\n readonly businessUnitCode: string | null = null,\n readonly productGroupCode: string | null = null,\n readonly role: RoleDtoModel | null = null,\n readonly userUnitAssignments: readonly UserUnitAssignmentDtoModel[] = [],\n readonly metadata: MetadataModel = new MetadataModel(),\n ) {\n this.userUnitAssignments = [...userUnitAssignments];\n\n this.fullName = `${this.firstName} ${this.lastName}`.trim();\n }\n\n static fromJSON(json: UserViewResponse): UserViewResponseModel {\n assertRequiredProperties(json, [\n 'userId',\n 'activeDirectoryId',\n 'email',\n 'globalEmployeeId',\n 'metadata',\n ]);\n\n return new UserViewResponseModel(\n json.userId,\n json.activeDirectoryId,\n json.email,\n json.globalEmployeeId,\n json.localEmployeeId,\n json.firstName || '',\n json.lastName || '',\n json.photoUrl,\n json.abbreviation || '',\n json.hitachiId,\n json.payrollCompany,\n json.costCenter,\n json.countryCode || '',\n json.city || '',\n json.divisionCode,\n json.businessUnitCode,\n json.productGroupCode,\n (json.role\n ? RoleDtoModel.fromJSON(json.role)\n : null\n ),\n (Array.isArray(json.userUnitAssignments)\n ? json.userUnitAssignments\n .map((item) => UserUnitAssignmentDtoModel.fromJSON(item))\n : []\n ),\n new MetadataModel(json.metadata || {}),\n );\n }\n\n /**\n * These fields can be edited only by the admin,\n * see: https://yooapps.jira.com/browse/COLLAPP-503\n */\n canEditAdminFields(): boolean {\n return this.canEditUserDetails();\n }\n\n canEditUserRole(): boolean {\n return this.metadata.fields.canEditUserRole;\n }\n\n canEditUserCollAppData(): boolean {\n return this.metadata.fields.canEditUserCollAppData;\n }\n\n canEditUserDetails(): boolean {\n return this.metadata.fields.canEditUserDetails;\n }\n\n clone(): UserViewResponseModel {\n return new UserViewResponseModel(\n this.userId,\n this.activeDirectoryId,\n this.email,\n this.globalEmployeeId,\n this.localEmployeeId,\n this.firstName,\n this.lastName,\n this.photoUrl,\n this.abbreviation,\n this.hitachiId,\n this.payrollCompany,\n this.costCenter,\n this.countryCode,\n this.city,\n this.divisionCode,\n this.businessUnitCode,\n this.productGroupCode,\n this.role ? this.role.clone() : null,\n this.userUnitAssignments,\n this.metadata,\n );\n }\n\n toJSON(): UserViewResponse {\n return {\n userId: this.userId,\n activeDirectoryId: this.activeDirectoryId,\n email: this.email,\n globalEmployeeId: this.globalEmployeeId,\n localEmployeeId: this.localEmployeeId,\n firstName: this.firstName,\n lastName: this.lastName,\n fullName: this.fullName,\n photoUrl: this.photoUrl,\n abbreviation: this.abbreviation,\n hitachiId: this.hitachiId,\n payrollCompany: this.payrollCompany,\n costCenter: this.costCenter,\n countryCode: this.countryCode,\n city: this.city,\n divisionCode: this.divisionCode,\n businessUnitCode: this.businessUnitCode,\n productGroupCode: this.productGroupCode,\n role: this.role ? this.role.toJSON() : null,\n userUnitAssignments: this.userUnitAssignments.map((item) => item.toJSON()),\n metadata: this.metadata.toJSON(),\n };\n }\n}\n","import { UsersViewResponse } from '../../interfaces/responses/users-view.response';\nimport { MetadataModel } from '../metadata.model';\nimport { assertRequiredProperties } from '../../utilities/api.utility';\n\nexport class UsersViewResponseModel {\n readonly canCreateUsers: boolean;\n\n constructor(\n readonly metadata: MetadataModel,\n ) {\n this.canCreateUsers = (this.metadata.fields && this.metadata.fields.isAllowedToCreateUsers) || false;\n }\n\n static fromJSON(json: UsersViewResponse): UsersViewResponseModel {\n assertRequiredProperties(json, [\n 'metadata',\n ]);\n\n return new UsersViewResponseModel(\n new MetadataModel(json.metadata || {}),\n );\n }\n\n toJSON(): UsersViewResponse {\n return {\n metadata: this.metadata.toJSON(),\n };\n }\n}\n","import { UserSettingRequest } from '../../interfaces/requests/user-setting.request';\nimport { assertRequiredProperties } from '../../utilities/api.utility';\n\nexport class UserSettingRequestModel {\n constructor(\n readonly key: string,\n readonly value: string | boolean,\n ) {\n if (key === '') {\n throw new Error('The property \\'key\\' can not be an empty string.');\n }\n }\n\n static fromJSON(json: UserSettingRequest): UserSettingRequestModel {\n assertRequiredProperties(json, [\n 'key',\n 'value',\n ]);\n\n return new UserSettingRequestModel(\n json.key,\n json.value,\n );\n }\n\n toJSON(): UserSettingRequest {\n return {\n key: this.key,\n value: this.value,\n };\n }\n}\n","import moment from 'moment';\nimport { ApiModelNew } from '../types';\nimport { assertRequiredProperties } from '../../utilities/api.utility';\nimport { CapacityDtoModel } from './capacity.dto.model';\nimport { AvailableResourceDto } from '../../interfaces/dtos/available-resource.dto';\n\nexport class AvailableResourceDtoModel implements ApiModelNew {\n constructor(\n readonly resourceId: string,\n readonly isUser: boolean,\n readonly fullName: string | null,\n readonly email: string | null,\n readonly photoUrl: string | null = null,\n readonly validFrom: moment.Moment | null = null,\n readonly validUntil: moment.Moment | null = null,\n readonly capacities: CapacityDtoModel[] = [],\n readonly canAddToResponsibles: boolean = false,\n ) {\n this.capacities = [...capacities];\n }\n\n static fromJSON(json: AvailableResourceDto): AvailableResourceDtoModel {\n assertRequiredProperties(json, [\n 'resourceId',\n ]);\n\n return new AvailableResourceDtoModel(\n json.resourceId,\n json.isUser,\n json.fullName,\n json.email,\n json.photoUrl,\n (json.validFrom\n ? moment(json.validFrom)\n .parseZone()\n : null\n ),\n (json.validUntil\n ? moment(json.validUntil)\n .parseZone()\n : null\n ),\n (Array.isArray(json.capacities)\n ? json.capacities\n .map((item) => CapacityDtoModel.fromJSON(item))\n : []\n ),\n json.canAddToResponsibles,\n );\n }\n\n toJSON(): AvailableResourceDto {\n return {\n resourceId: this.resourceId,\n isUser: this.isUser,\n fullName: this.fullName,\n email: this.email,\n photoUrl: this.photoUrl,\n validFrom: this.validFrom ? this.validFrom.toJSON() : null,\n validUntil: this.validUntil ? this.validUntil.toJSON() : null,\n capacities: this.capacities.map((item) => item.toJSON()),\n canAddToResponsibles: this.canAddToResponsibles,\n };\n }\n\n clone(): AvailableResourceDtoModel {\n return new AvailableResourceDtoModel(\n this.resourceId,\n this.isUser,\n this.fullName,\n this.email,\n this.photoUrl,\n this.validFrom?.clone() || null,\n this.validUntil?.clone() || null,\n this.capacities,\n this.canAddToResponsibles,\n );\n }\n\n isValidUntil(endDate: moment.Moment): boolean {\n if (this.validUntil != null) {\n return this.validUntil.isSameOrAfter(endDate, 'days');\n }\n\n return true;\n }\n\n isValidFrom(startDate: moment.Moment): boolean {\n if (this.validFrom != null) {\n return this.validFrom.isSameOrBefore(startDate, 'days');\n }\n\n return false;\n }\n}\n","import { AvailableResourcesResponse } from '../../interfaces/responses/available-resources.response';\nimport { MetadataModel } from '../metadata.model';\nimport { AvailableResourceDtoModel } from '../dtos/available-resource.dto.model';\nimport { Int32IdNameDtoModel } from '../dtos/int32-id-name.dto.model';\n\nexport class AvailableResourcesResponseModel {\n constructor(\n readonly items: readonly AvailableResourceDtoModel[] = [],\n readonly availableSkills: readonly Int32IdNameDtoModel[] = [],\n readonly metadata: MetadataModel,\n ) {\n this.items = [...items];\n this.availableSkills = availableSkills.map((skill) => skill.clone());\n }\n\n static fromJSON(json: AvailableResourcesResponse): AvailableResourcesResponseModel {\n return new AvailableResourcesResponseModel(\n (Array.isArray(json.items) ? json.items : [])\n .map((item) => AvailableResourceDtoModel.fromJSON(item)),\n (Array.isArray(json.availableSkills) ? json.availableSkills : [])\n .map(Int32IdNameDtoModel.fromJSON),\n new MetadataModel(json.metadata),\n );\n }\n\n toJSON(): AvailableResourcesResponse {\n return {\n items: this.items.map((item) => item.toJSON()),\n availableSkills: this.availableSkills.map((skill) => skill.toJSON()),\n metadata: this.metadata.toJSON(),\n };\n }\n}\n","import { MetadataModel } from '../metadata.model';\nimport { UserListResponseMetadata } from '../../interfaces/metadata';\nimport { assertRequiredProperties } from '../../utilities/api.utility';\nimport { UnitPlanningUserListViewResponse } from '../../interfaces/responses/unit-planning-user-list-view.response';\nimport { UnitPlanningResourceDtoModel } from '../dtos/unit-planning-resource.dto.model';\n\nexport class UnitPlanningUserListViewResponseModel {\n constructor(\n readonly items: readonly UnitPlanningResourceDtoModel[],\n readonly metadata: MetadataModel = new MetadataModel(),\n ) {\n this.items = [...items];\n }\n\n static fromJSON(json: UnitPlanningUserListViewResponse): UnitPlanningUserListViewResponseModel {\n assertRequiredProperties(json, [\n 'items',\n ]);\n\n return new UnitPlanningUserListViewResponseModel(\n (Array.isArray(json.items) ? json.items : [])\n .map((item) => UnitPlanningResourceDtoModel.fromJSON(item)),\n new MetadataModel(json.metadata),\n );\n }\n\n toJSON(): UnitPlanningUserListViewResponse {\n return {\n items: this.items.map((item) => item.toJSON()),\n metadata: this.metadata.toJSON(),\n };\n }\n}\n","import { UserNotificationViewResponse } from '../../interfaces/responses/user-notification-view.response';\nimport { UserNotificationRoleDtoModel } from '../dtos/user-notification-role.dto.model';\nimport { MetadataModel } from '../metadata.model';\n\nexport class UserNotificationViewResponseModel {\n constructor(\n readonly roles: UserNotificationRoleDtoModel[],\n readonly metadata: MetadataModel = new MetadataModel(),\n ) {\n if (roles) {\n this.roles = roles.map((role) => role.clone());\n }\n }\n\n static fromJSON(json: UserNotificationViewResponse): UserNotificationViewResponseModel {\n return new UserNotificationViewResponseModel(\n (Array.isArray(json.roles) ? json.roles : [])\n .map((item) => UserNotificationRoleDtoModel.fromJSON(item)),\n new MetadataModel(json.metadata),\n );\n }\n\n toJSON(): UserNotificationViewResponse {\n return {\n roles: this.roles.map((role) => role.toJSON()),\n metadata: this.metadata.toJSON(),\n };\n }\n}\n","import moment from 'moment';\nimport { UserSlimDto } from '../../interfaces/dtos/user-slim.dto';\nimport { ApiModelNew } from '../types';\nimport { assertRequiredProperties } from '../../utilities/api.utility';\nimport { BasicUser } from '../../../models/user.interface';\nimport { Unit } from 'src/app/models/unit.interface';\nimport { UnitSlimDto } from '../../interfaces/dtos/unit-slim.dto';\nimport { UnitSlimDtoModel } from './unit-slim.dto.model';\nimport { UserSlimDtoModel } from './user-slim.dto.model';\nimport { UserSlimWithUnitDto } from '../../interfaces/dtos/user-slim-with-unit.dto';\n\nexport class UserSlimWithUnitDtoModel extends UserSlimDtoModel {\n constructor(\n readonly userId: string,\n readonly fullName: string,\n readonly email: string,\n readonly photoUrl: string | null = null,\n readonly userWorkingDays: string | null = null,\n readonly validFrom: moment.Moment | null = null,\n readonly validUntil: moment.Moment | null = null,\n readonly unit: UnitSlimDtoModel,\n ) {\n super(\n userId,\n fullName,\n email,\n photoUrl,\n userWorkingDays,\n validFrom,\n validUntil,\n );\n }\n\n get id(): string {\n return this.userId;\n }\n\n static fromJSON(json: UserSlimWithUnitDto): UserSlimWithUnitDtoModel {\n assertRequiredProperties(json, [\n 'userId',\n 'fullName',\n 'email',\n 'unit'\n ]);\n\n return new UserSlimWithUnitDtoModel(\n json.userId,\n json.fullName,\n json.email,\n json.photoUrl,\n json.userWorkingDays,\n (json.validFrom\n ? moment(json.validFrom)\n .parseZone()\n : null\n ),\n (json.validUntil\n ? moment(json.validUntil)\n .parseZone()\n : null\n ),\n UnitSlimDtoModel.fromJSON(json.unit as UnitSlimDto),\n );\n }\n\n toJSON(): UserSlimWithUnitDto {\n return {\n userId: this.userId,\n fullName: this.fullName,\n email: this.email,\n photoUrl: this.photoUrl,\n userWorkingDays: this.userWorkingDays,\n validFrom: (this.validFrom ? this.validFrom.toJSON() : null),\n validUntil: (this.validUntil ? this.validUntil.toJSON() : null),\n unit: this.unit?.toJSON(),\n };\n }\n\n clone(overrides?: Partial): UserSlimWithUnitDtoModel {\n return new UserSlimWithUnitDtoModel(\n overrides && overrides.userId != null\n ? overrides.userId\n : this.userId,\n overrides && overrides.fullName != null\n ? overrides.fullName\n : this.fullName,\n overrides && overrides.email != null\n ? overrides.email\n : this.email,\n overrides && overrides.photoUrl !== undefined\n ? overrides.photoUrl\n : this.photoUrl,\n overrides && overrides.userWorkingDays !== undefined\n ? overrides.userWorkingDays\n : this.userWorkingDays,\n overrides && overrides.validFrom !== undefined\n ? overrides.validFrom\n : this.validFrom?.clone() || null,\n overrides && overrides.validUntil !== undefined\n ? overrides.validUntil\n : this.validUntil?.clone() || null,\n overrides && overrides.unit !== undefined\n ? overrides.unit\n : this.unit?.clone() || null,\n );\n }\n}\n","import { Injectable } from '@angular/core';\nimport { HttpEventType, HttpResponse } from '@angular/common/http';\nimport { SortDirection } from '@angular/material/sort';\nimport { Observable, forkJoin } from 'rxjs';\nimport { filter, map, mapTo } from 'rxjs/operators';\nimport moment from 'moment';\nimport { CollappFilterDropdownListRadioSetting } from '../../models/collapp-filter-dropdown-list-radio.interface';\nimport { ProjectPlanningRangeStateModel } from '../../state/settings/project-planning-range/project-planning-range-state.model';\nimport { ProjectPlanningTotalsStateModel } from '../../state/settings/project-planning-totals/project-planning-totals-state.model';\nimport { ProjectPlanningFiltersSettingsModel } from '../../models/project-planning-filter-settings.interface';\nimport { CollAppApiService } from './collapp-api.service';\nimport { UserColumnFilters } from '../filter-columns';\nimport { UserDto } from '../interfaces/dtos/user.dto';\nimport { UserDtoModel } from '../models/dtos/user.dto.model';\nimport { UserCreateRequestModel } from '../models/requests/user-create.request.model';\nimport { UserUpdateRequestModel } from '../models/requests/user-update.request.model';\nimport { UserListQueryOptions, UserResourceListQueryOptions } from '../list-query-options';\nimport { UserCreateResponse } from '../interfaces/responses/user-create.response';\nimport { UserCreateResponseModel } from '../models/responses/user-create.response.model';\nimport { UserViewResponseModel } from '../models/responses/user-view.response.model';\nimport { UserViewResponse } from '../interfaces/responses/user-view.response';\nimport { UsersViewResponseModel } from '../models/responses/users-view.response.model';\nimport { UsersViewResponse } from '../interfaces/responses/users-view.response';\nimport { Unit, UnitIdentity } from '../../models/unit.interface';\nimport { UserSlimDto } from '../interfaces/dtos/user-slim.dto';\nimport { UserSlimDtoModel } from '../models/dtos/user-slim.dto.model';\nimport { ProjectListStateModel } from '../../state/settings/project-list';\nimport { UnitListStateModel } from '../../state/settings/unit-list';\nimport { UserListStateModel } from '../../state/settings/user-list';\nimport { WorkPackageListStateModel } from '../../state/settings/work-package-list';\nimport { WorkPackageQuestionListStateModel } from '../../state/settings/work-package-question-list';\nimport { UserSettingRequestModel } from '../models/requests/user-setting.request.model';\nimport { QuestionsListStateModel } from '../../state/settings/questions-list';\nimport { UserResourceListStateModel } from '../../state/settings/user-resource-list';\nimport { UserListViewResponse } from '../interfaces/responses/user-list-view.response';\nimport { UserListViewResponseModel } from '../models/responses/user-list-view.response.model';\nimport { AvailableResourcesResponse } from '../interfaces/responses/available-resources.response';\nimport { AvailableResourcesResponseModel } from '../models/responses/available-resources.response.model';\nimport { AttachmentListStateModel } from '../../state/settings/attachment-list/attachment-list-state.model';\nimport { NonHumanResourceListStateModel } from '../../state/settings/non-human-resource-list';\nimport { UnitPlanningUserListViewResponseModel } from '../models/responses/unit-planning-user-list-view.response.model';\nimport { UnitPlanningUserListViewResponse } from '../interfaces/responses/unit-planning-user-list-view.response';\nimport { NonHumanResourcePlanningListStateModel } from '../../state/settings/non-human-resource-planning-list';\nimport { UserNotificationViewResponseModel } from '../models/responses/user-notification-view.response.model';\nimport { UserNotificationViewResponse } from '../interfaces/responses/user-notification-view.response';\nimport { UserNotificationSettingsUpdateRequestModel } from '../models/requests/user-notification-settings-update.request.model';\nimport { UserNotificationSettingsDtoModel } from '../models/dtos/user-notification-settings.dto.model';\nimport { UserNotificationSettingsDto } from '../interfaces/dtos/user-notification-settings.dto';\nimport { SkillFilterDto } from '../interfaces/dtos/skill-filter.dto';\nimport { ActivitiesStateModel } from '../../state/settings/activities/activities-state.model';\nimport { DashboardWorkPackageViewType } from '../../models/dashboard-work-package-view-type.enum';\nimport { UserPlanningTotalsStateModel } from '../../state/settings/user-planning-totals';\nimport { UnitPlanningTotalsStateModel } from '../../state/settings/unit-planning-totals';\nimport { UnitPlanningRangeStateModel } from '../../state/settings/unit-planning-range';\nimport { UserPlanningRangeStateModel } from '../../state/settings/user-planning-range/user-planning-range-state.model';\nimport { TimecardRangeStateModel } from '../../state/settings/timecard-range';\nimport { TimesheetRangeStateModel } from '../../state/settings/timesheet-range';\nimport { WorkPackagePlanningRangeStateModel } from '../../state/settings/work-package-planning-range';\nimport { WorkPackagePlanningTotalsStateModel } from '../../state/settings/work-package-planning-totals';\nimport { TimesheetTotalsStateModel } from '../../state/settings/timesheet-totals';\nimport { WorkpackageSidepanelStateModel } from '../../state/settings/work-package-sidepanel/work-package-sidepanel-state.model';\nimport { UserPlanningSidepanelStateModel } from '../../state/settings/user-planning-sidepanel';\nimport { UnitPlanningSidepanelStateModel } from '../../state/settings/unit-planning-sidepanel';\nimport { UnitPlanningSidepanelIndexStateModel } from '../../state/settings/unit-planning-sidepanel-index';\nimport { UserPlanningSidepanelIndexStateModel } from '../../state/settings/user-planning-sidepanel-index';\nimport { WorkPackageSidepanelIndexStateModel } from '../../state/settings/work-package-sidepanel-index';\nimport { ProjectStructureFiltersSettingsModel } from '../../models/project-structure-filter-settings.interface';\nimport { UserSlimWithUnitDtoModel } from '../models/dtos/user-slim-with-unit.dto.model';\nimport { UserSlimWithUnitDto } from '../interfaces/dtos/user-slim-with-unit.dto';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class UserService {\n constructor(private apiService: CollAppApiService) { }\n\n /**\n * Gets the currently authenticated user\n */\n getCurrentUser$(): Observable {\n return this.apiService\n .getCurrentUser$()\n .pipe(\n filter((event) => event.type === HttpEventType.Response),\n map((response: HttpResponse) => UserDtoModel.fromJSON(response.body!)),\n );\n }\n\n /**\n * Gets another user\n */\n getSubstituteUser$(userId: string): Observable {\n return this.apiService\n .getSubstituteUser$(userId)\n .pipe(\n filter((event) => event.type === HttpEventType.Response),\n map((response: HttpResponse) => {\n const user = UserDtoModel.fromJSON(response.body!);\n if (user.userId === userId) {\n return user;\n }\n\n return null;\n }),\n );\n }\n\n /**\n * Gets the users view of the admin section\n *\n * @return {Observable}\n */\n getUsersView$(): Observable {\n return this.apiService\n .getUsersView$()\n .pipe(\n filter((event) => event.type === HttpEventType.Response),\n map((response: HttpResponse) => UsersViewResponseModel.fromJSON(response.body!)),\n );\n }\n\n /**\n * Gets a single user by id.\n *\n * @param {string} userId\n * @return {Observable}\n */\n getUserById$(userId: string): Observable {\n return this.apiService\n .getUserById$(userId)\n .pipe(\n filter((event) => event.type === HttpEventType.Response),\n map((response: HttpResponse) => UserSlimWithUnitDtoModel.fromJSON(response.body!)),\n );\n }\n\n /**\n * Gets a single user by email address\n *\n * @param {string} email\n * @return {Observable}\n */\n getUserByEmail$(email: string): Observable {\n return this.apiService\n .getUserByEmail$(email)\n .pipe(\n filter((event) => event.type === HttpEventType.Response),\n map((response: HttpResponse) => UserDtoModel.fromJSON(response.body!)),\n );\n }\n\n getAllUsersEmployeeNumber$(filterString: string, limit = 20): Observable {\n return this.apiService\n .getAllUsersEmployeeNumber$(filterString, limit)\n .pipe(\n filter((event) => event.type === HttpEventType.Response),\n map((response: HttpResponse) => UserListViewResponseModel.fromJSON(response.body!)),\n );\n }\n\n /**\n * Gets a view of an user by email address\n *\n * @param {string} email\n * @return {Observable}\n *\n * @TODO Check if getting user by EMAIL instead of ID is really required\n */\n getUserViewByEmail$(email: string): Observable {\n return this.apiService\n .getUserViewByEmail$(email)\n .pipe(\n filter((event) => event.type === HttpEventType.Response),\n map((response: HttpResponse) => UserViewResponseModel.fromJSON(response.body!)),\n );\n }\n\n /**\n * Gets a single AAD user by email address\n *\n * @param {string} email\n * @return {Observable}\n */\n getAdUserByEmail$(email: string): Observable {\n return this.apiService\n .getAdUserByEmail$(email)\n .pipe(\n filter((event) => event.type === HttpEventType.Response),\n map((response: HttpResponse) => UserDtoModel.fromJSON(response.body!)),\n );\n }\n\n /**\n * Returns a list of users whose names match the search string.\n * Max. 10 entries will be returned.\n *\n * @param search\n * @param localOnly - returns user from CollApp DB, false returns users from AD\n * @param validOnly - returns users that are currently valid, false returns all found users\n * @param [limitUnit] - reduces the list of users to this unit (including children)\n */\n findUsers$(\n search: string,\n localOnly: boolean,\n validOnly: boolean,\n limitUnit?: Unit | null,\n includeSupplierUsers: boolean = false,\n onlyCoordinators: boolean = false,\n isForWpCreator: boolean = false,\n ): Observable {\n const unitId = limitUnit ? limitUnit.unitId : undefined;\n const columnFilters: UserColumnFilters = {\n fullName: search,\n };\n\n // eslint-disable-next-line max-len\n const options = new UserListQueryOptions(0, 10, columnFilters, undefined, undefined, localOnly, validOnly, unitId, includeSupplierUsers, onlyCoordinators, isForWpCreator);\n\n return this.apiService\n .getUsers$(options)\n .pipe(\n filter((event) => event.type === HttpEventType.Response),\n map((response: HttpResponse) => UserListViewResponseModel.fromJSON(response.body!)),\n );\n }\n\n /**\n * Returns a list of users for the unit planning.\n */\n getUserPlanningResources$(\n unitId: number,\n search: string,\n isoWeekYear: number,\n isoWeek: number,\n numberOfWeeks: number,\n isForWpCreator?: boolean,\n ): Observable {\n return this.apiService\n .getUserPlanningResources$(unitId, search, isoWeekYear, isoWeek, numberOfWeeks, isForWpCreator)\n .pipe(\n filter((event) => event.type === HttpEventType.Response),\n map((response: HttpResponse) => UnitPlanningUserListViewResponseModel\n .fromJSON(response.body!)),\n );\n }\n\n /**\n * Gets a list of all users\n *\n * @param {number} [pageIndex]\n * @param {number} [pageSize]\n * @param {UserColumnFilters} [columnFilters]\n * @param {string} [sortColumn]\n * @param {SortDirection} [sortDirection]\n * @param {boolean} [localOnly]\n * @return {Observable}\n */\n getUsers$(\n pageIndex?: number,\n pageSize?: number,\n columnFilters?: UserColumnFilters,\n sortColumn?: string,\n sortDirection?: SortDirection,\n localOnly?: boolean,\n ): Observable {\n const options = new UserListQueryOptions(pageIndex, pageSize, columnFilters, sortColumn, sortDirection, localOnly);\n\n return this.apiService\n .getUsers$(options)\n .pipe(\n filter((event) => event.type === HttpEventType.Response),\n map((response: HttpResponse) => UserListViewResponseModel.fromJSON(response.body!)),\n );\n }\n\n getAvailableResourceUsers$(\n unit?: UnitIdentity,\n projectId?: number,\n workPackageId?: number,\n excludeUserIds?: string[],\n excludeNhrIds?: string[],\n fullName?: string,\n pageIndex?: number,\n pageSize?: number,\n sortColumn?: string,\n sortDirection?: SortDirection,\n validFrom?: moment.Moment,\n validUntil?: moment.Moment,\n year?: number,\n week?: number,\n numberOfWeeks?: number,\n selectedSkills?: SkillFilterDto[],\n ): Observable {\n const unitId = unit ? unit.unitId : undefined;\n const options = new UserResourceListQueryOptions(\n unitId,\n projectId,\n workPackageId,\n excludeUserIds,\n excludeNhrIds,\n fullName,\n pageIndex,\n pageSize,\n sortColumn,\n sortDirection,\n validFrom,\n validUntil,\n year,\n week,\n numberOfWeeks,\n selectedSkills,\n );\n\n return this.apiService\n .getAvailableResourceUsers$(options)\n .pipe(\n filter((event) => event.type === HttpEventType.Response),\n map((response: HttpResponse) => AvailableResourcesResponseModel\n .fromJSON(response.body!)),\n );\n }\n\n /**\n * Creates a new user\n */\n postUser$(request: UserCreateRequestModel): Observable {\n return this.apiService\n .postUser$(request.toJSON())\n .pipe(\n filter((event) => event.type === HttpEventType.Response),\n map((response: HttpResponse) => UserCreateResponseModel.fromJSON(response.body!)),\n );\n }\n\n /**\n * Updates an existing user\n */\n putUser$(request: UserUpdateRequestModel): Observable {\n return this.apiService\n .putUser$(request.userId, request.toJSON())\n .pipe(\n filter((event) => event.type === HttpEventType.Response),\n mapTo(undefined),\n );\n }\n\n /**\n * Saves the given dashboard settings.\n *\n * @param settings\n */\n saveDashboardSettings$(settings: DashboardWorkPackageViewType[]): Observable {\n return this.saveUserSetting$('DashboardWorkPackageFilters', settings.join(','));\n }\n\n /**\n * Saves the given project settings.\n *\n * @param settings\n */\n saveProjectListSettings$(settings: ProjectListStateModel): Observable {\n return this.saveUserSetting$('ProjectsTable', JSON.stringify(settings));\n }\n\n /**\n * Saves the current state of the cross utilization\n */\n saveTimesheetCrossUtilizationSettings$(withCrossUtilization: boolean): Observable {\n return this.saveUserSetting$('TimesheetWithCrossUtilizeUsers', withCrossUtilization);\n }\n\n /**\n * Saves the given unit settings.\n *\n * @param settings\n */\n saveUnitListSettings$(settings: UnitListStateModel): Observable {\n return this.saveUserSetting$('UnitsTable', JSON.stringify(settings));\n }\n\n /**\n * Saves the given non-human resources settings.\n *\n * @param settings\n */\n saveNonHumanResourceListSettings$(settings: NonHumanResourceListStateModel): Observable {\n return this.saveUserSetting$('NonHumanResourcesTable', JSON.stringify(settings));\n }\n\n /**\n * Saves the given work package activities settings.\n *\n * @param settings\n */\n saveActivitiesSettings$(settings: ActivitiesStateModel): Observable {\n return this.saveUserSetting$('Activities', JSON.stringify(settings));\n }\n\n /**\n * Saves the given user settings.\n *\n * @param settings\n */\n saveUserListSettings$(settings: UserListStateModel): Observable {\n return this.saveUserSetting$('UsersTable', JSON.stringify(settings));\n }\n\n /**\n * Saves the given work package settings.\n *\n * @param settings\n */\n saveWorkPackageListSettings$(settings: WorkPackageListStateModel): Observable {\n return this.saveUserSetting$('WorkPackagesTable', JSON.stringify(settings));\n }\n\n /**\n * Saves the given work package question list settings.\n *\n * @param settings\n */\n SaveWorkPackageQuestionListSettings$(settings: WorkPackageQuestionListStateModel): Observable {\n return this.saveUserSetting$('WorkPackageQuestionsTable', JSON.stringify(settings));\n }\n\n /**\n * Saves the given unit questions list settings.\n *\n * @param settings\n */\n SaveQuestionsListSettings$(settings: QuestionsListStateModel): Observable {\n return this.saveUserSetting$('QuestionsTable', JSON.stringify(settings));\n }\n\n /**\n * Saves the given unit resource planning list settings.\n *\n * @param settings\n */\n SaveUserResourceListSettings$(settings: UserResourceListStateModel): Observable {\n return this.saveUserSetting$('UserResourceTable', JSON.stringify(settings));\n }\n\n /**\n * Saves the given non-human resource WP planning list settings.\n *\n * @param settings\n */\n saveNonHumanResourcePlanningListSettings$(settings: NonHumanResourcePlanningListStateModel): Observable {\n return this.saveUserSetting$('NonHumanResourcesPlanningTable', JSON.stringify(settings));\n }\n\n /**\n * Saves the given attachment list settings.\n *\n * @param settings\n */\n saveAttachmentSettings$(settings: AttachmentListStateModel): Observable {\n return this.saveUserSetting$('AttachmentList', JSON.stringify(settings));\n }\n\n /**\n * Saves the given user planning totals settings.\n *\n * @param settings\n */\n saveUserPlanningTotalsSettings$(settings: UserPlanningTotalsStateModel): Observable {\n return this.saveUserSetting$('UserPlanningTotals', JSON.stringify(settings.selectedTotals));\n }\n\n /**\n * Saves the given unit planning totals settings.\n *\n * @param settings\n */\n saveTimesheetTotalsSettings$(settings: TimesheetTotalsStateModel): Observable {\n return this.saveUserSetting$('TimesheetTotals', JSON.stringify(settings.selectedTotals));\n }\n\n /**\n * Saves the given unit planning range settings.\n *\n * @param settings\n */\n saveProjectPlanningRangeSettings$(settings: ProjectPlanningRangeStateModel): Observable {\n return this.saveUserSetting$('ProjectPlanningRange', JSON.stringify(settings.range?.toJSON()));\n }\n\n /**\n * Saves the given unitplanning totals & capacityunit settings.\n *\n * @param settings\n */\n saveUnitPlanningTotalsSettings$(settings: UnitPlanningTotalsStateModel): Observable {\n return forkJoin([\n this.saveUserSetting$('UnitPlanningCapacityUnit', settings.selectedCapacityUnit?.toString()),\n this.saveUserSetting$('UnitPlanningTotals', JSON.stringify(settings.selectedTotals)),\n ]).pipe(\n mapTo(undefined),\n );\n }\n\n /**\n * Saves the given projectplanning totals & capacityunit settings.\n *\n * @param settings\n */\n saveProjectPlanningTotalsSettings$(settings: ProjectPlanningTotalsStateModel): Observable {\n return forkJoin([\n this.saveUserSetting$('ProjectPlanningCapacityUnit', settings.selectedCapacityUnit?.toString() || ''),\n this.saveUserSetting$('ProjectPlanningTotals', JSON.stringify(settings.selectedTotals)),\n ]).pipe(\n mapTo(undefined),\n );\n }\n\n /**\n * Saves the given work package planning totals settings.\n *\n * @param settings\n */\n saveWorkPackagePlanningTotalsSettings$(settings: WorkPackagePlanningTotalsStateModel): Observable {\n return this.saveUserSetting$('WorkPackagePlanningTotals', JSON.stringify(settings.selectedTotals));\n }\n\n /**\n * Saves the given work package sidepanel state.\n *\n * @param settings\n */\n saveWorkPackageSidepanel$(settings: WorkpackageSidepanelStateModel): Observable {\n return this.saveUserSetting$('WorkPackageSidePanel', JSON.stringify(settings.isOpen));\n }\n\n /**\n * Saves the given userplanning sidepanel state.\n *\n * @param settings\n */\n saveUserPlanningSidePanel$(settings: UserPlanningSidepanelStateModel): Observable {\n return this.saveUserSetting$('UserPlanningSidePanel', JSON.stringify(settings.isOpen));\n }\n\n /**\n * Saves the given unitPlanning sidepanel state.\n *\n * @param settings\n */\n saveUnitPlanningSidePanel$(settings: UnitPlanningSidepanelStateModel): Observable {\n return this.saveUserSetting$('UnitPlanningSidePanel', JSON.stringify(settings.isOpen));\n }\n\n /**\n * Saves the given unitPlanning sidepanel index state.\n *\n * @param settings\n */\n saveUnitPlanningSidePanelIndex$(settings: UnitPlanningSidepanelIndexStateModel): Observable {\n return this.saveUserSetting$('UnitPlanningSidePanelIndex', JSON.stringify(settings.index));\n }\n\n /**\n * Saves the given userPlanning sidepanel index state.\n *\n * @param settings\n */\n saveUserPlanningSidePanelIndex$(settings: UserPlanningSidepanelIndexStateModel): Observable {\n return this.saveUserSetting$('UserPlanningSidePanelIndex', JSON.stringify(settings.index));\n }\n\n /**\n * Saves the given wp sidepanel index state.\n *\n * @param settings\n */\n saveWorkPackageSidePanelIndex$(settings: WorkPackageSidepanelIndexStateModel): Observable {\n return this.saveUserSetting$('WorkPackageSidePanelIndex', JSON.stringify(settings.index));\n }\n\n /**\n * Saves the given unit planning range settings.\n *\n * @param settings\n */\n saveUnitPlanningRangeSettings$(settings: UnitPlanningRangeStateModel): Observable {\n return this.saveUserSetting$('UnitPlanningRange', JSON.stringify(settings.range?.toJSON()));\n }\n\n /**\n * Saves the given user planning range settings.\n *\n * @param settings\n */\n saveUserPlanningRangeSettings$(settings: UserPlanningRangeStateModel): Observable {\n return this.saveUserSetting$('UserPlanningRange', JSON.stringify(settings.range?.toJSON()));\n }\n\n /**\n * Saves the given timecard range settings.\n *\n * @param settings\n */\n saveTimecardRangeSettings$(settings: TimecardRangeStateModel): Observable {\n return this.saveUserSetting$('TimecardRange', JSON.stringify(settings.range?.toJSON()));\n }\n\n /**\n * Saves the given timesheet range settings.\n *\n * @param settings\n */\n saveTimesheetRangeSettings$(settings: TimesheetRangeStateModel): Observable {\n return this.saveUserSetting$('TimesheetRange', JSON.stringify(settings.range?.toJSON()));\n }\n\n /**\n * Send ProjectPlanningFilters in UserSettings\n * @param settings\n * @returns\n */\n saveProjectStructureFilters$(settings: ProjectStructureFiltersSettingsModel): Observable {\n return this.saveUserSetting$('ProjectsStructureHeaderFilters', JSON.stringify(settings));\n }\n\n /**\n * Saves the given work package planning range settings.\n *\n * @param settings\n */\n saveWorkPackagePlanningRangeSettings$(settings: WorkPackagePlanningRangeStateModel): Observable {\n return this.saveUserSetting$('WorkPackagePlanningRange', JSON.stringify(settings.range?.toJSON()));\n }\n\n getUserNotificationView$(): Observable {\n return this.apiService\n .getUserNotificationView$()\n .pipe(\n filter((event) => event.type === HttpEventType.Response),\n map((response: HttpResponse) => UserNotificationViewResponseModel\n .fromJSON(response.body!)),\n );\n }\n\n putUserNotificationView$(request: UserNotificationSettingsUpdateRequestModel): Observable {\n return this.apiService\n .putUserNotificationView$(request.toJSON())\n .pipe(\n filter((event) => event.type === HttpEventType.Response),\n mapTo(undefined),\n );\n }\n\n getUserNotificationDefaults$(roleCode: string): Observable {\n return this.apiService\n .getUserNotificationDefaults$(roleCode)\n .pipe(\n filter((event) => event.type === HttpEventType.Response),\n map((response: HttpResponse) => response.body!\n .map(UserNotificationSettingsDtoModel.fromJSON)),\n );\n }\n\n saveTimecardHeaderFilters$(payload: CollappFilterDropdownListRadioSetting[]): Observable {\n return this.saveUserSetting$('TimecardHeaderfilters', JSON.stringify(payload));\n }\n\n /**\n * Send ProjectPlanningFilters in UserSettings\n * @param settings\n * @returns\n */\n saveProjectPlanningFilters$(settings: ProjectPlanningFiltersSettingsModel): Observable {\n return this.saveUserSetting$('ProjectPlanningHeaderFilters', JSON.stringify(settings));\n }\n\n savePlanningHeaderFilters$(payload: CollappFilterDropdownListRadioSetting[]): Observable {\n return this.saveUserSetting$('PlanningHeaderfilters', JSON.stringify(payload));\n }\n\n saveProjectPlanningCompactFilter$(payload: boolean): Observable {\n return this.saveUserSetting$('ProjectPlanningCompactFilter', JSON.stringify(payload));\n }\n\n /**\n * Saves the given user setting provided as key-value pair.\n */\n private saveUserSetting$(key: string, value: string | boolean): Observable {\n const request = new UserSettingRequestModel(\n key,\n value,\n );\n\n return this.apiService\n .putUserSettings$(request.toJSON())\n .pipe(\n filter((event) => event.type === HttpEventType.Response),\n mapTo(undefined),\n );\n }\n}\n","import moment from 'moment';\nimport { environment } from '../../../environments/environment';\nimport { RequiredOnType } from '../../app.types';\n\nexport const getEndpointUrl = (pathname: string): string => environment.apiEndpoint + pathname;\n\nexport const obj2fd = (obj: any, form?: FormData, namespace?: string): FormData => {\n const fd = form || new FormData();\n let formKey;\n\n Object.entries(obj).forEach(([key, value]) => {\n formKey = namespace ? `${namespace}[${key}]` : key;\n\n if (value == null) {\n // Just skip value if null or undefined. FormData.delete() does not work cross-browser,\n // i.e. Internet Explorer / Edge does not support this spec.\n // fd.delete(formKey);\n\n } else if (moment.isMoment(value) || value instanceof Date) {\n fd.append(formKey, value.toISOString());\n } else if (typeof value === 'object' && !(value instanceof File)) {\n obj2fd(value, fd, formKey);\n } else if (value instanceof File) {\n // if it's a string or a File object\n // Don't use [] annotation for file arrays\n // Example attachments[1] => attachments\n fd.append(namespace || formKey, value);\n } else {\n fd.append(formKey, `${value}`);\n }\n });\n\n return fd;\n};\n\nexport class AssertionError extends Error {\n readonly name: string = 'AssertionError';\n}\n\n/**\n * Checks whether the given required properties are null or undefined on the given object.\n * Per default, throws an exception on error.\n */\nexport function assertRequiredProperties, KRequired extends keyof T>(\n obj: T,\n requiredProperties: KRequired[],\n): asserts obj is RequiredOnType {\n requiredProperties.forEach((requiredProperty) => {\n if (obj[requiredProperty] == null) {\n throw new AssertionError(`Missing required property '${requiredProperty.toString()}' on object.`);\n }\n });\n}\n","export const MOBILE: boolean = (typeof window !== 'undefined') ? (window.screen.availWidth < 800) : true;\n","import {\n Injectable, Injector, OnDestroy, Optional, ɵstringify as stringify,\n} from '@angular/core';\nimport { ComponentPortal, PortalInjector } from '@angular/cdk/portal';\nimport { Subject } from 'rxjs';\nimport { TOAST_DATA, ToastyService } from '../shared/toasty';\nimport { UserDtoModel } from '../api/models/dtos/user.dto.model';\nimport { TimeZoneToastyComponent } from '../components/notifications/time-zone-notification.component';\nimport { CollappDateAdapter, createMissingDateImplError } from '../collapp-core';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class TimeZoneService implements OnDestroy {\n private lastUserId: string = '';\n\n private notificationReceived: boolean = false;\n\n private dateAdapter: CollappDateAdapter;\n\n private destroyed$: Subject = new Subject();\n\n constructor(\n private injector: Injector,\n private toastyService: ToastyService,\n @Optional() dateAdapter?: CollappDateAdapter,\n ) {\n if (!dateAdapter) {\n throw createMissingDateImplError(stringify(TimeZoneService));\n }\n this.dateAdapter = dateAdapter;\n }\n\n ngOnDestroy(): void {\n this.destroyed$.next();\n this.destroyed$.complete();\n }\n\n handleUserChange(user?: UserDtoModel | null): void {\n if (!user || user.userId !== this.lastUserId) {\n this.notificationReceived = false;\n }\n\n if (user && !this.notificationReceived) {\n this.checkTimeZone(user);\n }\n\n if (user) {\n // Seconds to minutes\n const userTimeZoneOffset = Math.floor(user.timezoneOffset / 60);\n this.dateAdapter.utcOffset(userTimeZoneOffset);\n this.lastUserId = user.userId;\n } else {\n this.dateAdapter.utcOffset(0);\n this.lastUserId = '';\n }\n }\n\n checkTimeZone(user: UserDtoModel): void {\n // Seconds to minutes\n const userTimeZoneOffset = Math.floor(user.timezoneOffset / 60);\n const timeZoneOffset = this.getNonDstTimeZoneOffset() * -1;\n\n if (userTimeZoneOffset !== timeZoneOffset) {\n const timeZoneLabel = this.getTimeZoneOffsetLabel(user.timezone, user.timezoneOffset);\n\n const injectionTokens = new WeakMap([\n [TOAST_DATA, {\n timeZoneLabel,\n }],\n ]);\n\n const injector = new PortalInjector(this.injector, injectionTokens);\n const toastyPortal = new ComponentPortal(TimeZoneToastyComponent, undefined, injector);\n\n this.toastyService.info({\n portal: toastyPortal,\n timeout: 0,\n onClick: () => {\n this.notificationReceived = true;\n },\n // onRemove: () => {\n // this.notificationReceived = true;\n // },\n });\n }\n }\n\n getTimeZoneOffsetLabel(timeZone: string, offset: number): string {\n const [region, area]: string[] = timeZone.split('/');\n\n if (region && area) {\n const offsetHours = Math.floor(Math.abs(offset / 3600));\n const offsetMinutes = Math.floor(Math.abs(offset / 60) % 60);\n\n return `GMT${offset < 0 ? '-' : '+'}${offsetHours >= 10 ? offsetHours : `0${offsetHours}`}:${(offsetMinutes >= 10 ? offsetMinutes : `0${offsetMinutes}`)} ${area}`;\n }\n\n return '';\n }\n\n private getNonDstTimeZoneOffset(): number {\n const date = new Date();\n\n const jan = new Date(date.getFullYear(), 0, 1).getTimezoneOffset();\n const jul = new Date(date.getFullYear(), 6, 1).getTimezoneOffset();\n\n return Math.max(jan, jul);\n }\n}\n","@if (isEnvironmentBannerVisible) {\n
\n \n Environment: {{ environmentTitle }}, Version: {{ staticVersion }}, Build: {{ staticBuildNumber }}\n @if ((userTimeZone$ | async); as userTimeZone) {, User TZ: {{ userTimeZone }} }\n @if (dbCreationDate) {, DB-Date: {{ dbCreationDate }} }\n \n
\n}\n
\n
\n
\n
\n \n
\n @if (layoutService.sidebarPortal$ | async; as sidebarPortal) {\n
\n
\n
\n }\n @if (layoutService.navbarPortal$ | async; as navbarPortal) {\n
\n
\n \n
\n
\n }\n
\n
\n
\n
\n @if (layoutService.asidePortal$ | async; as asidePortal) {\n
\n
\n
\n }\n
\n
\n
\n
\n
\n
\n \n
\n @if (isLoadingIndicatorVisible) {\n
\n
\n
\n \n
\n
\n }\n","import {\n ChangeDetectorRef, Component, HostBinding, OnDestroy, OnInit, Renderer2, ViewEncapsulation, inject,\n} from '@angular/core';\nimport {\n NavigationCancel,\n NavigationEnd,\n NavigationError,\n NavigationStart,\n RouteConfigLoadEnd,\n RouteConfigLoadStart,\n Router,\n} from '@angular/router';\nimport { Title } from '@angular/platform-browser';\nimport { Observable, Subject, timer } from 'rxjs';\nimport {\n filter, map, mapTo, mergeMap, share, switchMap, take, takeUntil, tap,\n} from 'rxjs/operators';\nimport { Store } from '@ngxs/store';\nimport moment from 'moment';\n\nimport { MOBILE } from './services/constants';\n\nimport { AccessControlService, AuthenticationError, AuthorizationCheckError } from './services/access-control.service';\nimport { LayoutService } from './services/layout.service';\nimport { ApplicationInsightsService } from './modules/application-insights';\nimport { LoadingIndicatorService } from './services/loading-indicator.service';\nimport { UserSelectors } from './state';\nimport { BrowserDetectionService } from './services/browser-detection.service';\nimport { TimeZoneService } from './services/time-zone.service';\nimport { environment } from '../environments/environment';\nimport { ToastyService } from './shared/toasty';\nimport { MomentPipe } from './collapp-common/pipes';\nimport { TranslateService } from '@ngx-translate/core';\nimport { BaseDataService } from './api/services/base-data.service';\nimport { hardReload } from './helpers/hard-reload';\n\nexport const SUBSTITUTED_USER_ID_PARAM_NAME = 'substitutedUserId';\n\n@Component({\n selector: 'collapp-root',\n styleUrls: ['../styles/main.scss', './app.component.scss'],\n templateUrl: './app.component.html',\n encapsulation: ViewEncapsulation.None,\n standalone: false\n})\nexport class AppComponent implements OnInit, OnDestroy {\n static version: string = APP_VERSION;\n\n static buildNumber: string = BUILD_NUMBER;\n\n private readonly store = inject(Store);\n\n private destroyed$: Subject = new Subject();\n\n userTimeZone$: Observable = this.store.select(UserSelectors.userTimeZone).pipe(takeUntil(this.destroyed$));\n\n @HostBinding('class.app--has-environment-banner')\n hostClass: boolean = environment.showBanner;\n\n readonly isEnvironmentBannerVisible: boolean = environment.showBanner;\n\n readonly environmentTitle: string = environment.title;\n\n get staticVersion(): string {\n return AppComponent.version;\n }\n\n get staticBuildNumber(): string {\n return AppComponent.buildNumber;\n }\n\n dbCreationDate!: string | null;\n\n mobile: boolean = MOBILE;\n\n primaryNavOpen: boolean = false;\n\n readonly bannerClassModifier: string;\n\n isLoadingIndicatorVisible: boolean = false;\n\n isLoadingRoute: boolean = false;\n\n isLoadingLazyRouteModule: boolean = false;\n\n routeLoadCount: number = 0;\n\n routeConfigLoadCount: number = 0;\n\n private validUntilNotificationReceived: boolean = false;\n\n constructor(\n private cdRef: ChangeDetectorRef,\n private accessControlService: AccessControlService,\n private appInsightsService: ApplicationInsightsService,\n private browserDetectionService: BrowserDetectionService,\n public layoutService: LayoutService,\n public router: Router,\n private loadingService: LoadingIndicatorService,\n private titleService: Title,\n private toastyService: ToastyService,\n private momentPipe: MomentPipe,\n private timeZoneService: TimeZoneService,\n private translateService: TranslateService,\n private baseDataService: BaseDataService,\n private readonly renderer: Renderer2,\n ) {\n (window as any).Logging = {};\n (window as any).Logging.level = environment.msalLoggingEnabled ? 3 : -1;\n (window as any).Logging.piiLoggingEnabled = environment.msalLoggingEnabled;\n (window as any).Logging.log = (): void => {\n // No msal log\n };\n\n accessControlService.events$.pipe(takeUntil(this.destroyed$)).subscribe((event) => {\n if (event instanceof AuthenticationError || event instanceof AuthorizationCheckError) {\n appInsightsService.trackException({ exception: event.error });\n }\n });\n\n this.clearStorageIfNewDeploy();\n accessControlService.start();\n\n this.bannerClassModifier = environment.title.toLowerCase().replace(/[^a-z0-9]/g, '-');\n\n translateService.addLangs(['en']);\n translateService.setDefaultLang('en');\n translateService.use('en');\n }\n\n // eslint-disable-next-line max-lines-per-function\n ngOnInit(): void {\n if (window.console) {\n const memes = [\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░▄█████▄████░██░░░▄███▄▄░▀█▀░░█░\\n▄███████▀▀░█░▄█░▄███▀█████░█░░▀▄\\n█░█▀██▄▄▄▄█▀░█▀█▀██████▀░██▀█░░█\\n█░█░▀▀▀▀▀░░░█▀░█░███▀▀░░▄█▀░█░░█\\n█░░█▄░░░░▄▄▀░░░█░▀██▄▄▄██▀░░█▄░█\\n█░░░░▀█▀▀▀░░░░░░█░░▀▀▀▀░░░░▄█░░█\\n█░░░░░░░░░░░░░░░░▀▄░░░░░░▄█▀░░░█\\n█░░░░░░░░░░░░░░░░▀▀▀▀▀▀▀▄░░░░█░\\n░█░░░░░░▄▄▄▄▄▄▄░░░░░░░░░░░░░▄▀░\\n░░█░░░░░▀█▄░░░▀▀██▄░░░░░░░▄▀░░░\\n░░░▀▄░░░░░░▀▀▀▀▀░░░░░░░░▄▀░░░░\\n░░░░░▀▄▄░░░░░░░░░░░░▄▄▄▀▀█░░░░░\\n░░░░░░░░▀▀▄▄▄░░░░░░░░▄▄▄▀▀█░░░░░\\n░░░░░░░░░░▄▀▀█████▀▀▀▀░░░░██░░░░\\n░░░░░░░░░█░░░██░░░█▀▀▀▀▀▀▀▀█░░░░',\n ];\n\n const devMessages: string[] = [];\n\n const versionAndBuild = `Version ${AppComponent.version} | Build ${AppComponent.buildNumber}`;\n const randomMeme = memes[Math.floor(Math.random() * memes.length)];\n const randomDevMessage = devMessages[Math.floor(Math.random() * devMessages.length)];\n const url = 'https://yoo.digital';\n\n if (!this.browserDetectionService.isIEOrEdge()) {\n const args = [\n `\\n%cCollApp\\n\\n%c${versionAndBuild}\\n\\nMade with %c♥%c | ${url}\\n${randomDevMessage ? `\\n${randomDevMessage}\\n` : ''}\\n%c${randomMeme}\\n`,\n 'color: #ff000f; font-weight: 700; font-size: 2em; text-shadow: 1px 1px 0px white, 1px -1px 0px white, -1px 1px 0px white, -1px -1px 0px white;',\n 'color: #262626; background: #fff',\n 'color: #ff2424; background: #fff',\n 'color: #262626; background: #fff',\n 'font-family: Times, \"Courier New\", Courier, monospace;',\n ];\n\n window.console.log(...args);\n } else {\n window.console.log(`\\nCollApp\\n${versionAndBuild}\\nMade with ♥ | ${url}\\n${randomDevMessage ? `\\n${randomDevMessage}\\n` : ''}\\n${randomMeme}\\n`);\n }\n }\n\n this.store\n .select(UserSelectors.user)\n .pipe(takeUntil(this.destroyed$))\n .subscribe((user) => {\n if (user && user.userId) {\n this.appInsightsService.setAuthenticatedUserContext(user.userId);\n } else {\n this.appInsightsService.clearAuthenticatedUserContext();\n }\n\n this.timeZoneService.handleUserChange(user);\n });\n\n /**\n * Notifies the user one hour before his access to CollApp expires.\n *\n * @TODO Move to dedicated service and listen to user store changes.\n */\n this.store\n .select(UserSelectors.user)\n .pipe(\n map((user) => {\n if (user && user.validUntil) {\n return user.validUntil.clone();\n }\n\n return null;\n }),\n tap((validUntil) => {\n if (!validUntil) {\n // TODO Reset on user change. This is a dirty hack.\n this.validUntilNotificationReceived = false;\n }\n }),\n switchMap((validUntil) => timer(0, 60 * 1000).pipe(mapTo(validUntil))),\n filter((validUntil) => !this.validUntilNotificationReceived && validUntil != null),\n takeUntil(this.destroyed$),\n )\n .subscribe((validUntil: moment.Moment) => {\n const now = moment();\n const diff = validUntil.diff(now);\n const oneHour = 60 * 60 * 1000;\n if (diff < oneHour) {\n this.validUntilNotificationReceived = true;\n this.toastyService.warning({\n title: 'Access about to expire',\n msg: `Your access to CollApp is about to expire ${validUntil.fromNow()} on ${this.momentPipe.transform(validUntil, 'datetime')}. Please save all your work in progress.`,\n });\n }\n });\n\n this.router.events.pipe(takeUntil(this.destroyed$)).subscribe((event) => {\n // Assume values changed\n let hasChanges: boolean = true;\n\n if (event instanceof RouteConfigLoadStart) {\n this.routeConfigLoadCount += 1;\n } else if (event instanceof RouteConfigLoadEnd) {\n this.routeConfigLoadCount -= 1;\n } else if (event instanceof NavigationStart) {\n this.navigationStartSuccessfull(event);\n } else if (event instanceof NavigationEnd) {\n this.navigationEndSuccessfull(event);\n } else if (event instanceof NavigationCancel || event instanceof NavigationError) {\n this.routeLoadCount -= 1;\n } else {\n // No event matched, so there were no value changes\n hasChanges = false;\n }\n\n if (hasChanges) {\n this.isLoadingRoute = this.routeLoadCount > 0;\n this.isLoadingLazyRouteModule = this.routeConfigLoadCount > 0;\n const wasLoadingIndicatorVisible = this.isLoadingIndicatorVisible;\n this.isLoadingIndicatorVisible = this.isLoadingRoute || this.loadingService.isLoading;\n if (this.isLoadingIndicatorVisible !== wasLoadingIndicatorVisible) {\n this.cdRef.detectChanges();\n }\n }\n });\n\n this.loadingService.isLoading$.pipe(takeUntil(this.destroyed$)).subscribe((isLoading) => {\n const wasLoadingIndicatorVisible = this.isLoadingIndicatorVisible;\n this.isLoadingIndicatorVisible = isLoading || this.isLoadingRoute;\n if (this.isLoadingIndicatorVisible !== wasLoadingIndicatorVisible) {\n this.cdRef.detectChanges();\n }\n });\n\n this.loadingService.isGuardsCheckInProgress$.pipe(takeUntil(this.destroyed$)).subscribe((isGuardsCheckInProgress) => {\n if (isGuardsCheckInProgress) {\n this.isLoadingIndicatorVisible = false;\n } else {\n this.isLoadingIndicatorVisible = this.loadingService.isLoading || this.isLoadingRoute;\n }\n });\n\n const routerNavigationEnd$ = this.router.events.pipe(\n filter((event): event is NavigationEnd => event instanceof NavigationEnd),\n map((event) => {\n let route = this.router.routerState.root;\n let path = '';\n while (route.firstChild) {\n if (route.firstChild.routeConfig) {\n path += `/${route.firstChild.routeConfig.path}`;\n }\n route = route.firstChild;\n }\n\n return {\n urlAfterRedirects: event.urlAfterRedirects,\n route,\n path,\n };\n }),\n filter((info) => info.route.outlet === 'primary'),\n share(),\n );\n\n routerNavigationEnd$\n .pipe(\n map((info) => info.route),\n tap((route) => {\n let j = route.pathFromRoot.length;\n let contextFound = false;\n while (j > 0 && !contextFound) {\n j -= 1;\n const { routeConfig } = route.pathFromRoot[j];\n if (routeConfig) {\n // @TODO Refactor one https://github.com/angular/angular/issues/24069 is resolved\n // eslint-disable-next-line no-underscore-dangle\n const loadedConfig = (routeConfig as any)._loadedConfig as any;\n if (loadedConfig && loadedConfig.module) {\n this.layoutService.setContext(loadedConfig.module.injector);\n\n contextFound = true;\n }\n }\n }\n\n if (!contextFound) {\n this.layoutService.resetContext();\n }\n }),\n mergeMap((route) => route.data),\n takeUntil(this.destroyed$),\n )\n .subscribe((routeData: any) => {\n this.layoutService.setNavbarComponent(routeData.navbar);\n this.layoutService.setSidebarComponent(routeData.sidebar);\n this.layoutService.setAsideComponent(routeData.aside);\n this.layoutService.setEmbeddedSidebar(routeData.hasEmbeddedSidebar);\n\n const appTitle = this.translateService.instant('common.app-title');\n if (routeData.title) {\n this.titleService.setTitle(`${this.translateService.instant(routeData.title)} | ${appTitle}`);\n } else {\n this.titleService.setTitle(appTitle);\n }\n });\n }\n\n ngOnDestroy(): void {\n this.destroyed$.next();\n this.destroyed$.complete();\n }\n\n onPrimaryNavOpenToggle(): void {\n this.primaryNavOpen = !this.primaryNavOpen;\n }\n\n private clearStorageIfNewDeploy(): void {\n if (window.localStorage && window.sessionStorage) {\n const key = `${this.staticVersion}-${this.staticBuildNumber}`;\n\n if (window.localStorage.getItem(key) === null) {\n this.deleteAllCookies();\n window.sessionStorage.clear();\n window.localStorage.clear();\n window.localStorage.setItem(key, `${+new Date()}`);\n window.localStorage.setItem('version', `${this.staticVersion}`);\n hardReload();\n }\n }\n }\n\n private navigationStartSuccessfull(event: NavigationStart): void {\n this.routeLoadCount += 1;\n this.addSubstitutedUserIdToUrl(event.url);\n }\n\n private navigationEndSuccessfull(_event: NavigationEnd): void {\n this.routeLoadCount -= 1;\n if (this.isEnvironmentBannerVisible) {\n this.setDbCreationDate();\n }\n this.adjustLinksForSubstituteUser();\n }\n\n /**\n * Adjust all links on the page to include the substituted user id as a query parameter.\n * In case the user is substituted.\n */\n private adjustLinksForSubstituteUser(): void {\n const isUserSubstituted = this.accessControlService.isUserSubstituted();\n if (!isUserSubstituted) {\n return;\n }\n const TIMEOUT_TO_MAKE_SURE_LINKS_ARE_RDY = 200;\n setTimeout(() => {\n const as = document.querySelectorAll('a');\n as.forEach((a) => {\n const currentHref = a.getAttribute('href');\n const user = this.store.selectSnapshot(UserSelectors.user);\n const substitutedParam = `${SUBSTITUTED_USER_ID_PARAM_NAME}=${user?.userId}`;\n const hasParams = currentHref?.includes('?');\n const newUrl = hasParams ? `${currentHref}&${substitutedParam}` : `${currentHref}?${substitutedParam}`;\n this.renderer.setAttribute(a, 'href', newUrl);\n });\n }, TIMEOUT_TO_MAKE_SURE_LINKS_ARE_RDY);\n }\n\n /**\n * In case a navigation is triggered by the user, add the substituted user id to the URL.\n * This is an additional measure to adjustLinksForSubstituteUser, which only works for links on the page.\n */\n private addSubstitutedUserIdToUrl(urlDestination: string): void {\n const isUserSubstituted = this.accessControlService.isUserSubstituted();\n if (!isUserSubstituted) {\n return;\n }\n\n const user = this.store.selectSnapshot(UserSelectors.user);\n const substitutedUserId = user?.userId;\n const url = new URL(urlDestination, window.location.origin);\n const userIdFromUrl = url.searchParams.get(SUBSTITUTED_USER_ID_PARAM_NAME);\n if (!userIdFromUrl && substitutedUserId) {\n url.searchParams.set(SUBSTITUTED_USER_ID_PARAM_NAME, substitutedUserId);\n\n // Reconstruct the full URL with the new query parameter\n const newUrl = url.pathname + url.search;\n\n // Replace the current navigation with the new URL\n this.router.navigateByUrl(newUrl, { replaceUrl: true });\n }\n }\n\n /**\n * update / fetch currently used database creation date (dev & stage)\n */\n private setDbCreationDate(): void {\n this.baseDataService\n .getDBCreationDate$()\n .pipe(take(1), takeUntil(this.destroyed$))\n .subscribe((value) => {\n const [datePart] = new Date(value).toISOString().split('T');\n this.dbCreationDate = datePart;\n });\n }\n\n private deleteAllCookies(): void {\n const cookies = document.cookie.split(';');\n\n // eslint-disable-next-line no-restricted-syntax\n for (const cookie of cookies) {\n const eqPos = cookie.indexOf('=');\n const name = eqPos > -1 ? cookie.substr(0, eqPos) : cookie;\n document.cookie = `${name}=;expires=Thu, 01 Jan 1970 00:00:00 GMT`;\n }\n }\n}\n","export interface PermissionRules {\n // eslint-disable-next-line id-blacklist\n any?: string[];\n all?: string[];\n}\n\n/**\n * Permissions to access the administration route.\n */\nexport function getAdministrationPermissions(): PermissionRules {\n return {\n all: ['canAccessAdministration'],\n };\n}\n\n/**\n * Permissions to access the reporting route.\n */\nexport function getReportingPermissions(): PermissionRules {\n return {\n all: ['canAccessTimesheet'],\n };\n}\n\n/**\n * Permissions to access the power BI link.\n */\nexport function getPowerBIPermissions(): PermissionRules {\n return {\n all: ['canAccessPowerBI'],\n };\n}\n\n/**\n * Permissions to access the power BI link.\n */\nexport function getSkillAdministrationPermissions(): PermissionRules {\n return {\n all: ['canAccessSkillAdministration'],\n };\n}\n\n/**\n * Permissions to access colors\n */\nexport function getColorsPermissions(): PermissionRules {\n return {\n all: ['canAccessBackgroundColors'],\n };\n}\n\n/**\n * Permissions to do things that UC and Deputies have\n */\nexport function getUCDeputyPermissions(): PermissionRules {\n return {\n all: ['canDoUCDeputyActions'],\n };\n}\n","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { NgxsModule } from '@ngxs/store';\nimport { sharedStates } from '../state';\nimport {\n CollappQuestionStatusPipe,\n CollAppProjectTypePipe,\n CollAppTimecardStatusPipe,\n CollAppUnitLevelPipe,\n CollAppUserPipe,\n CollAppWorkPackageRolePipe,\n DecimalPipe,\n FileExtensionPipe,\n FileSizePipe,\n FunctionPipe,\n HoursPipe,\n CodePathWithProjectPipe,\n chrcPairTooltipPipe,\n chrcPairPipe,\n MomentLocalPipe,\n MomentPipe,\n MomentUtcPipe,\n SafePipe,\n StripHtmlPipe,\n ToMomentPipe,\n CapacityUnitPipe,\n CapacityUnitShortPipe,\n} from './pipes';\nimport { LocalDateHelperService } from './services';\nimport { NgHost } from './angular-contrib-host/host';\nimport { FeatureFlagDirective } from './directives';\nimport { ElevateOnHoverDirective } from './directives/elevate-on-hover/elevate-on-hover.directive';\nimport { WorkpackageTitlePipePipe } from './pipes/workpackage-title-pipe.pipe';\nimport { TimeTrackingStatusPipe } from './pipes/time-tracking-status.pipe';\nimport { WpFullTitlePipe } from './pipes/wp-fulltitle.pipe';\nimport { NpcCategoryNamePipe } from './pipes/npc-categoryname.pipe';\nimport { TranslateModule } from '@ngx-translate/core';\nimport { CostObjectPipe } from './pipes/costObject.pipe';\n\n@NgModule({\n imports: [\n CommonModule,\n // @TODO Is this correct?\n NgxsModule.forFeature(sharedStates),\n TranslateModule,\n CostObjectPipe,\n ],\n exports: [\n TranslateModule,\n CollAppProjectTypePipe,\n CollAppTimecardStatusPipe,\n CollAppUnitLevelPipe,\n CollAppUserPipe,\n CollAppWorkPackageRolePipe,\n CollappQuestionStatusPipe,\n FileExtensionPipe,\n DecimalPipe,\n FileSizePipe,\n FunctionPipe,\n WorkpackageTitlePipePipe,\n HoursPipe,\n CapacityUnitPipe,\n CapacityUnitShortPipe,\n CodePathWithProjectPipe,\n chrcPairTooltipPipe,\n chrcPairPipe,\n StripHtmlPipe,\n SafePipe,\n NgHost,\n MomentPipe,\n MomentLocalPipe,\n MomentUtcPipe,\n ToMomentPipe,\n FeatureFlagDirective,\n ElevateOnHoverDirective,\n TimeTrackingStatusPipe,\n WpFullTitlePipe,\n NpcCategoryNamePipe,\n CostObjectPipe,\n ],\n declarations: [\n CollAppProjectTypePipe,\n CollAppTimecardStatusPipe,\n CollAppUnitLevelPipe,\n CollAppUserPipe,\n CollAppWorkPackageRolePipe,\n FileExtensionPipe,\n CollappQuestionStatusPipe,\n DecimalPipe,\n FileSizePipe,\n FunctionPipe,\n HoursPipe,\n CapacityUnitPipe,\n CapacityUnitShortPipe,\n CodePathWithProjectPipe,\n chrcPairTooltipPipe,\n chrcPairPipe,\n StripHtmlPipe,\n SafePipe,\n NgHost,\n MomentPipe,\n MomentLocalPipe,\n MomentUtcPipe,\n ToMomentPipe,\n FeatureFlagDirective,\n ElevateOnHoverDirective,\n WorkpackageTitlePipePipe,\n TimeTrackingStatusPipe,\n WpFullTitlePipe,\n NpcCategoryNamePipe,\n ],\n providers: [\n LocalDateHelperService,\n MomentPipe,\n MomentLocalPipe,\n MomentUtcPipe,\n TimeTrackingStatusPipe,\n DecimalPipe,\n ],\n})\nexport class CollappCommonModule {\n}\n","import moment from 'moment';\nimport {\n COLLAPP_DATE_FORMAT,\n COLLAPP_DATE_TIME_FORMAT,\n COLLAPP_LONG_MONTH_YEAR_FORMAT,\n COLLAPP_SHORT_DAY_MONTH_FORMAT,\n COLLAPP_SHORT_MONTH_YEAR_FORMAT,\n COLLAPP_SHORT_WEEK_DAY_FORMAT,\n} from '../../collapp-core/date';\nimport { isEmpty } from '../../helpers/utilities';\n\nexport type DateFormatPatterns =\n 'date'\n | 'datetime'\n | 'shortMonthDate'\n | 'longMonthDate'\n | 'shortDayMonth'\n | 'shortWeekDay';\nconst DATE_DEFAULT_FORMAT = 'date';\n\n/**\n * Formats a given date according to the format.\n *\n * Possible predefined values for the format are\n * - date: Year, Month and Day\n * - datetime: Year, Month and Day as well as Hours and Minutes\n * - shortMonthDate: Month name (short) and Year\n * - longMonthDate: Month name (long) and Year\n * - shortDayMonth: Month as number, Day as number\n * - shortWeekDay: 3-letter week day name\n *\n * @param [utcOffset] - Optional: Format date as if having the given offset from UTC in minutes\n * @param [keepLocalTime=false] - Passing true will keep the same local time, but at the expense of choosing\n * a different point in Universal Time.\n */\nexport function formatDate(\n date: moment.Moment,\n format?: DateFormatPatterns | string,\n utcOffset?: number | null,\n keepLocalTime?: boolean,\n): string {\n if (!date.isValid()) {\n throw new Error('Given date is not valid.');\n }\n\n let newFormat = format;\n\n if (isEmpty(newFormat)) {\n newFormat = DATE_DEFAULT_FORMAT;\n }\n\n switch (newFormat) {\n case 'date':\n newFormat = COLLAPP_DATE_FORMAT;\n break;\n case 'datetime':\n newFormat = COLLAPP_DATE_TIME_FORMAT;\n break;\n case 'shortMonthDate':\n newFormat = COLLAPP_SHORT_MONTH_YEAR_FORMAT;\n break;\n case 'longMonthDate':\n newFormat = COLLAPP_LONG_MONTH_YEAR_FORMAT;\n break;\n case 'shortDayMonth':\n newFormat = COLLAPP_SHORT_DAY_MONTH_FORMAT;\n break;\n case 'shortWeekDay':\n newFormat = COLLAPP_SHORT_WEEK_DAY_FORMAT;\n break;\n default:\n break;\n }\n\n let newDate = date;\n\n if (utcOffset != null) {\n newDate = newDate\n .clone()\n .utcOffset(utcOffset, keepLocalTime);\n }\n\n return newDate.format(newFormat);\n}\n","import { inject, InjectionToken } from '@angular/core';\nimport { DOCUMENT } from '@angular/common';\n\nexport const WINDOW = new InjectionToken(\n 'An abstraction over global window object',\n {\n factory: (): Window => {\n const { defaultView } = inject(DOCUMENT);\n\n if (!defaultView) {\n throw new Error('Window is not available');\n }\n\n return defaultView;\n },\n },\n);\n","import { Pipe, PipeTransform } from '@angular/core';\nimport { CapacityUnits } from '../../modules/administration/non-human-resources/capacity-units';\n\n@Pipe({\n name: 'capacityUnitShort',\n standalone: false\n})\nexport class CapacityUnitShortPipe implements PipeTransform {\n transform(capacityUnit: CapacityUnits | null, ..._args: unknown[]): string | null {\n switch (capacityUnit) {\n case CapacityUnits.HoursWeek:\n return 'h';\n case CapacityUnits.DaysWeek:\n return 'days';\n default:\n return capacityUnit?.toString() || null;\n }\n }\n}\n","import { Pipe, PipeTransform } from '@angular/core';\nimport { ContractHourlyRateCategoryPairDtoModel } from '../../api/models/dtos/contract-hourly-rate-category-pair.dto.model';\nimport { isEmpty } from '../../helpers/utilities';\n\nexport function getTextFromContractHourlyRateCategoryPairDtoModel(\n item: ContractHourlyRateCategoryPairDtoModel,\n): string {\n return `${item.submitterHourlyRateCategory} / ${item.supplierHourlyRateCategory}`;\n}\n\n@Pipe({\n name: 'chrcPair',\n standalone: false\n})\nexport class chrcPairPipe implements PipeTransform {\n transform(value: ContractHourlyRateCategoryPairDtoModel): string|null {\n if (isEmpty(value)) {\n return null;\n }\n\n return getTextFromContractHourlyRateCategoryPairDtoModel(value);\n }\n}\n","import { Pipe, PipeTransform } from '@angular/core';\nimport { ContractHourlyRateCategoryPairDtoModel } from '../../api/models/dtos/contract-hourly-rate-category-pair.dto.model';\nimport { isEmpty } from '../../helpers/utilities';\n\nexport function getTooltipFromContractHourlyRateCategoryPairDtoModel(\n item: ContractHourlyRateCategoryPairDtoModel,\n): string {\n return `Submitter(${item.submitterHourlyRateCategory}) / Supplier(${item.supplierHourlyRateCategory})`;\n}\n\n@Pipe({\n name: 'chrcPairTooltip',\n standalone: false\n})\nexport class chrcPairTooltipPipe implements PipeTransform {\n transform(value: ContractHourlyRateCategoryPairDtoModel): string|null {\n if (isEmpty(value)) {\n return null;\n }\n\n return getTooltipFromContractHourlyRateCategoryPairDtoModel(value);\n }\n}\n","import { Pipe, PipeTransform, ɵstringify as stringify } from '@angular/core';\nimport { isEmpty } from '../../helpers/utilities';\nimport { MAX_FRACTION_DIGITS } from '../../shared/constants';\n\n/**\n * Transforms a string into a number (if needed).\n */\nfunction strToNumber(value: number | string): number {\n // Convert strings to numbers\n if (typeof value === 'string' && !Number.isNaN(Number(value) - parseFloat(value))) {\n return Number(value);\n }\n if (typeof value !== 'number') {\n throw new Error(`${value} is not a number`);\n }\n\n return value;\n}\n\n@Pipe({\n name: 'decimal',\n standalone: false\n})\nexport class DecimalPipe implements PipeTransform {\n transform(value: any, locale?: string, decimalDigits?: number): string|null {\n if (isEmpty(value)) {\n return null;\n }\n\n try {\n const num = strToNumber(value);\n const maxFactionDigits = (decimalDigits != null ? strToNumber(decimalDigits) : MAX_FRACTION_DIGITS);\n\n const formatted = num.toFixed(maxFactionDigits);\n\n return formatted.replace(/\\.00$/, '').replace(/\\.(\\d)0$/, '.$1');\n } catch (error) {\n throw new Error(`InvalidPipeArgument: '${value}' for pipe '${stringify(DecimalPipe)}'`);\n }\n }\n}\n","import { Pipe, PipeTransform } from '@angular/core';\n\n@Pipe({\n name: 'withFunc',\n standalone: false\n})\nexport class FunctionPipe implements PipeTransform {\n transform(value: T, handler: (value: T) => R, context?: any): R {\n if (context) {\n return handler.call(context, value);\n }\n\n return handler(value);\n }\n}\n","import { Pipe, PipeTransform, ɵstringify as stringify } from '@angular/core';\nimport { Moment } from 'moment';\nimport { isEmpty } from '../../helpers/utilities';\nimport { DateFormatPatterns, formatDate } from '../date';\n\n@Pipe({\n name: 'momentUtc',\n standalone: false\n})\nexport class MomentUtcPipe implements PipeTransform {\n /**\n * Converts the date into UTC time and outputs a string according to the given format.\n *\n * @param [keepLocalTime=false] - Passing true will keep the same local time, but at the expense of choosing\n * a different point in Universal Time.\n */\n transform(\n value: Moment | null | undefined,\n format?: DateFormatPatterns | string,\n keepLocalTime?: boolean,\n ): string | null {\n if (isEmpty(value)) {\n return null;\n }\n\n try {\n return formatDate(value, format, 0, keepLocalTime);\n } catch (error) {\n throw new Error(`InvalidPipeArgument: '${value}' for pipe '${stringify(MomentUtcPipe)}'`);\n }\n }\n}\n","import {\n Optional, Pipe, PipeTransform, ɵstringify as stringify,\n} from '@angular/core';\nimport { Moment } from 'moment';\nimport { CollappDateAdapter } from '../../collapp-core';\nimport { isEmpty } from '../../helpers/utilities';\nimport { DateFormatPatterns, formatDate } from '../date';\n\n@Pipe({\n name: 'momentLocal',\n standalone: false\n})\nexport class MomentLocalPipe implements PipeTransform {\n private dateAdapter: CollappDateAdapter;\n\n constructor(\n @Optional() dateAdapter?: CollappDateAdapter,\n ) {\n if (!dateAdapter) {\n throw new Error(`${stringify(MomentLocalPipe)}: No provider found for MomentDateAdapter.`);\n }\n\n this.dateAdapter = dateAdapter;\n }\n\n /**\n * Converts the date to the current local time and outputs a string according to the given format.\n *\n * @param [keepLocalTime=false] - Passing true will keep the same local time, but at the expense of choosing\n * a different point in Universal Time.\n */\n transform(\n value: Moment | null | undefined,\n format?: DateFormatPatterns | string,\n keepLocalTime?: boolean,\n ): string | null {\n if (isEmpty(value)) {\n return null;\n }\n\n try {\n return formatDate(value, format, this.dateAdapter.utcOffset(), keepLocalTime);\n } catch (error) {\n throw new Error(`InvalidPipeArgument: '${value}' for pipe '${stringify(MomentLocalPipe)}'`);\n }\n }\n}\n","import { Pipe, PipeTransform, ɵstringify as stringify } from '@angular/core';\nimport moment, { Moment } from 'moment';\nimport { isEmpty } from '../../helpers/utilities';\nimport { DateFormatPatterns, formatDate } from '../date';\n\n@Pipe({\n name: 'moment',\n standalone: false\n})\nexport class MomentPipe implements PipeTransform {\n /**\n * Uses the given date as-is and outputs a string according to the given format.\n */\n transform(value: Moment | string | null | undefined, format?: DateFormatPatterns | string): string | null {\n if (isEmpty(value)) {\n return null;\n }\n const momentValue = (typeof value === 'string') ? moment(value) : value;\n\n try {\n return formatDate(momentValue, format);\n } catch (error) {\n throw new Error(`InvalidPipeArgument: '${value}' for pipe '${stringify(MomentPipe)}'`);\n }\n }\n}\n","import { Pipe, PipeTransform } from '@angular/core';\nimport { Store } from '@ngxs/store';\nimport { BaseDataSelectors } from '../../state/base-data';\n\n@Pipe({\n name: 'collAppProjectType',\n standalone: false\n})\nexport class CollAppProjectTypePipe implements PipeTransform {\n constructor(\n private store: Store,\n ) {\n }\n\n transform(value?: string): any {\n if (value == null) {\n return '';\n }\n\n const projectType = this.store.selectSnapshot(BaseDataSelectors.projectTypeByCode(value));\n\n if (projectType) {\n return projectType.name;\n }\n\n throw new Error(`Unknown project type '${value}'`);\n }\n}\n","import { Pipe, PipeTransform } from '@angular/core';\nimport { isEmpty } from '../../helpers/utilities';\nimport { QuestionStatus } from '../../models/question-status.enum';\n\n@Pipe({\n name: 'collappQuestionStatus',\n standalone: false\n})\nexport class CollappQuestionStatusPipe implements PipeTransform {\n transform(value: QuestionStatus): string | null {\n if (isEmpty(value)) {\n return null;\n }\n\n if (value === QuestionStatus.Open) {\n return 'Open';\n }\n\n if (value === QuestionStatus.Concluded) {\n return 'Concluded';\n }\n\n return 'Unknown Status';\n }\n}\n","import { Pipe, PipeTransform } from '@angular/core';\nimport {\n DomSanitizer, SafeHtml, SafeResourceUrl, SafeScript, SafeStyle, SafeUrl,\n} from '@angular/platform-browser';\n\n@Pipe({\n name: 'safe',\n standalone: false\n})\nexport class SafePipe implements PipeTransform {\n constructor(\n protected sanitizer: DomSanitizer,\n ) {}\n\n transform(value: any, type: string): SafeHtml | SafeStyle | SafeScript | SafeUrl | SafeResourceUrl {\n switch (type) {\n case 'html':\n return this.sanitizer.bypassSecurityTrustHtml(value);\n case 'style':\n return this.sanitizer.bypassSecurityTrustStyle(value);\n case 'script':\n return this.sanitizer.bypassSecurityTrustScript(value);\n case 'url':\n return this.sanitizer.bypassSecurityTrustUrl(value);\n case 'resourceUrl':\n return this.sanitizer.bypassSecurityTrustResourceUrl(value);\n default:\n throw new Error(`Invalid safe type specified: ${type}`);\n }\n }\n}\n","import { Pipe, PipeTransform } from '@angular/core';\nimport { TimeTrackingStatus, timeTrackingStatusCodeName } from '../../models/time-tracking-status.enum';\n\n@Pipe({\n name: 'timeTrackingStatus',\n standalone: false\n})\nexport class TimeTrackingStatusPipe implements PipeTransform {\n transform(status: TimeTrackingStatus): string {\n return timeTrackingStatusCodeName[status];\n }\n}\n","import { Pipe, PipeTransform } from '@angular/core';\nimport { TimeTrackingStatus } from '../../models/time-tracking-status.enum';\n\n/**\n * This maps the generic time tracking states\n * to names that should be used in the time card view\n * @deprecated Use time-tracking-status.pipe.ts instead\n */\n@Pipe({\n name: 'collAppTimecardStatus',\n standalone: false\n})\nexport class CollAppTimecardStatusPipe implements PipeTransform {\n transform(value?: TimeTrackingStatus): any {\n if (value == null) {\n return '';\n }\n\n if (value === TimeTrackingStatus.Unknown) {\n return 'Unknown';\n }\n\n if (value === TimeTrackingStatus.Open) {\n return 'Open';\n }\n\n if (value === TimeTrackingStatus.Pending) {\n return 'Pending';\n }\n\n if (value === TimeTrackingStatus.Done) {\n return 'Approved';\n }\n\n if (value === TimeTrackingStatus.Rejected) {\n return 'Rejected';\n }\n\n if (value === TimeTrackingStatus.Submitted) {\n return 'Submitted';\n }\n\n if (value === TimeTrackingStatus.Ready) {\n return 'Ready';\n }\n\n if (value === TimeTrackingStatus.Reopen) {\n return 'Reopen';\n }\n\n throw new Error('Unexpected timecard status provided to the pipe');\n }\n}\n","import {\n Optional, Pipe, PipeTransform, ɵstringify as stringify,\n} from '@angular/core';\nimport moment from 'moment';\nimport { CollappDateAdapter } from '../../collapp-core';\nimport { isEmpty } from '../../helpers/utilities';\n\n@Pipe({\n name: 'toMoment',\n standalone: false\n})\nexport class ToMomentPipe implements PipeTransform {\n private dateAdapter: CollappDateAdapter;\n\n constructor(\n @Optional() dateAdapter?: CollappDateAdapter,\n ) {\n if (!dateAdapter) {\n throw new Error(`${stringify(ToMomentPipe)}: No provider found for MomentDateAdapter.`);\n }\n this.dateAdapter = dateAdapter;\n }\n\n /**\n * Converts the date input into a moment date object.\n */\n transform(value: moment.MomentInput | null | undefined): moment.Moment | null {\n if (isEmpty(value)) {\n return null;\n }\n\n try {\n return (moment.isMoment(value)\n ? value\n : moment(value)\n .parseZone()\n );\n } catch (error) {\n throw new Error(`InvalidPipeArgument: '${value}' for pipe '${stringify(ToMomentPipe)}'`);\n }\n }\n}\n","import { Pipe, PipeTransform } from '@angular/core';\nimport { Unit } from '../../models/unit.interface';\n\n@Pipe({\n name: 'collAppUnitLevel',\n standalone: false\n})\nexport class CollAppUnitLevelPipe implements PipeTransform {\n transform(unit?: Unit): number {\n if (unit == null) {\n return 0;\n }\n\n if (unit.level != null) {\n return unit.level + 1;\n }\n\n return 0;\n }\n}\n","import { Pipe, PipeTransform } from '@angular/core';\nimport { BasicUser, MinimalUser } from '../../models/user.interface';\nimport { isEmpty } from '../../helpers/utilities';\nimport { NonHumanResourceSlimDto } from '../../api/interfaces/dtos/non-human-resource-slim.dto';\n\n/**\n * Returns a string representation of a given user or list of users.\n *\n * @param [value]\n * @param [defaultValue]\n */\n// eslint-disable-next-line complexity\nexport function formatCollAppUser(\n value: MinimalUser |BasicUser | BasicUser[] | NonHumanResourceSlimDto | null | undefined,\n defaultValue?: string,\n): string | null {\n if (isEmpty(value)) {\n return (defaultValue != null ? defaultValue : null);\n }\n\n if (Array.isArray(value)) {\n return value\n .map((user) => formatCollAppUser(user, defaultValue))\n .filter((user) => user != null)\n .join(', ');\n }\n\n if ('fullName' in value && value.fullName) {\n return value.fullName;\n }\n\n if ('email' in value && value.email) {\n return value.email;\n }\n\n if ('name' in value && value.name) {\n return value.name;\n }\n\n return (defaultValue != null ? defaultValue : null);\n}\n\n@Pipe({\n name: 'collAppUser',\n standalone: false\n})\nexport class CollAppUserPipe implements PipeTransform {\n transform(value?: MinimalUser | BasicUser | BasicUser[] | null, defaultValue?: string): string | null {\n return formatCollAppUser(value, defaultValue);\n }\n}\n","/**\n * Roles of WorkPackage\n */\nexport enum WorkPackageRole {\n 'NoRole' = 0,\n 'WorkPackageCreator' = 1,\n 'ProjectManager' = 2,\n 'TechnicalProjectManager' = 3,\n 'SubmitterUnitCoordinator' = 4,\n 'SubmitterUnitL1Coordinator' = 5,\n 'SubmitterUnitL2Coordinator' = 6,\n 'SubmitterUnitL3Coordinator' = 7,\n 'SubmitterUnitL4Coordinator' = 8,\n 'SubmitterUnitL5Coordinator' = 9,\n 'SupplierUnitCoordinator' = 10,\n 'SupplierUnitL1Coordinator' = 11,\n 'SupplierUnitL2Coordinator' = 12,\n 'SupplierUnitL3Coordinator' = 13,\n 'SupplierUnitL4Coordinator' = 14,\n 'SupplierUnitL5Coordinator' = 15,\n 'WorkPackageCoordinator' = 16,\n 'WorkPackageResponsible' = 17,\n 'Administrator' = 18,\n}\n","import { Pipe, PipeTransform } from '@angular/core';\nimport { WorkPackageRole } from '../../models/work-package-role.enum';\n\nconst role: {[key in WorkPackageRole]: string } = Object.freeze({\n [WorkPackageRole.NoRole]: 'NoRole',\n [WorkPackageRole.WorkPackageCreator]: 'Work Package Creator',\n [WorkPackageRole.ProjectManager]: 'Project Manager',\n [WorkPackageRole.TechnicalProjectManager]: 'Technical Project Manager',\n [WorkPackageRole.SubmitterUnitCoordinator]: 'Submitter Unit Coordinator',\n [WorkPackageRole.SubmitterUnitL1Coordinator]: 'Submitter Unit Coordinator (L1)',\n [WorkPackageRole.SubmitterUnitL2Coordinator]: 'Submitter Unit Coordinator (L2)',\n [WorkPackageRole.SubmitterUnitL3Coordinator]: 'Submitter Unit Coordinator (L3)',\n [WorkPackageRole.SubmitterUnitL4Coordinator]: 'Submitter Unit Coordinator (L4)',\n [WorkPackageRole.SubmitterUnitL5Coordinator]: 'Submitter Unit Coordinator (L5)',\n [WorkPackageRole.SupplierUnitCoordinator]: 'Supplier Unit Coordinator',\n [WorkPackageRole.SupplierUnitL1Coordinator]: 'Supplier Unit Coordinator (L1)',\n [WorkPackageRole.SupplierUnitL2Coordinator]: 'Supplier Unit Coordinator (L2)',\n [WorkPackageRole.SupplierUnitL3Coordinator]: 'Supplier Unit Coordinator (L3)',\n [WorkPackageRole.SupplierUnitL4Coordinator]: 'Supplier Unit Coordinator (L4)',\n [WorkPackageRole.SupplierUnitL5Coordinator]: 'Supplier Unit Coordinator (L5)',\n [WorkPackageRole.WorkPackageCoordinator]: 'Work Package Coordinator',\n [WorkPackageRole.WorkPackageResponsible]: 'Work Package Responsible',\n [WorkPackageRole.Administrator]: 'Administrator',\n});\n\n@Pipe({\n name: 'collAppWorkPackageRole',\n standalone: false\n})\nexport class CollAppWorkPackageRolePipe implements PipeTransform {\n transform(value?: WorkPackageRole | null): string {\n if (value == null) {\n return '';\n }\n\n if (role[value] != null) {\n return role[value];\n }\n\n return '';\n }\n}\n","import { Injectable, Optional, ɵstringify as stringify } from '@angular/core';\nimport moment from 'moment';\nimport { CollappDateAdapter } from '../../collapp-core';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class LocalDateHelperService {\n constructor(\n @Optional() private dateAdapter: CollappDateAdapter,\n ) {\n if (!this.dateAdapter) {\n throw new Error(`${stringify(LocalDateHelperService)}: No provider found for MomentDateAdapter.`);\n }\n }\n\n /**\n * Checks if the passed date is today\n */\n isToday(date: moment.Moment): boolean {\n return date.isSame(this.dateAdapter.today(), 'day');\n }\n\n /**\n * Makes the best attempts to return a valid moment date object from the given year and week.\n * - week is clamped to the closest correct value\n * - the resulting date is 'start of the iso week' (monday at 00:00) in the users' time zone.\n * - in case everything fails, the resulting date will be the current ISO week date\n */\n getIsoWeekDate(isoWeekYear: number, isoWeek: number): moment.Moment {\n const parsedIsoWeek = isoWeek < 1 ? 1 : isoWeek;\n\n let date = moment(`${isoWeekYear}-W${parsedIsoWeek}`, moment.HTML5_FMT.WEEK);\n if (!date.isValid()) {\n // Assume the ISO week was invalid. The most common case is that the isoWeek number was too high.\n // Create a date with last ISO week of the given year.\n date = moment(`${isoWeekYear}-01-01`);\n date\n .isoWeek(date.isoWeeksInYear())\n .startOf('isoWeek');\n\n if (!date.isValid()) {\n // Safety fallback to the current ISO week date.\n date = moment()\n .startOf('isoWeek');\n }\n }\n\n return this.dateAdapter.adjustDate(date, false);\n }\n}\n","/**\n * Error for missing date implementation.\n */\nexport function createMissingDateImplError(parent: string): Error {\n return Error(\n `${parent}: No provider found for CollappDateAdapter. You must import the following `\n + 'module at your application root: CollappMomentDateModule, or provide a '\n + 'custom implementation.',\n );\n}\n","import { Injectable } from '@angular/core';\nimport { MomentDateAdapter } from '@angular/material-moment-adapter';\nimport { Observable, Subject } from 'rxjs';\nimport moment from 'moment';\n\n@Injectable({\n providedIn: 'root',\n})\nexport abstract class CollappDateAdapter extends MomentDateAdapter {\n /** A stream that emits when the UTC offset changes. */\n abstract readonly utcOffsetChanges$: Observable;\n\n protected abstract _utcOffsetChanges$: Subject;\n\n abstract adjustDate(date: moment.Moment, keepLocalTime?: boolean): moment.Moment;\n\n abstract adjustDate(date: moment.Moment | null, keepLocalTime?: boolean): moment.Moment | null;\n\n /**\n * Adjusts a date to the UTC offset currently set on this date adapter.\n *\n * @param [keepLocalTime=false] - Passing true will keep the same local time, but at the expense of\n * choosing a different point in Universal Time.\n */\n abstract adjustDate(date: moment.Moment | null, keepLocalTime?: boolean): moment.Moment | null;\n\n /**\n * Get the UTC offset in minutes.\n */\n abstract utcOffset(): number;\n\n /**\n * Setting the UTC offset by supplying minutes.\n * See the official MomentJS documentation for `moment().utcOffset(Number|String);` - this\n * method behaves the same way.\n */\n abstract utcOffset(value: number | string): void;\n\n abstract utcOffset(value?: number | string): number | void;\n}\n","export const COLLAPP_DATE_FORMAT = 'YYYY-MM-DD';\nexport const COLLAPP_DATE_TIME_FORMAT = 'YYYY-MM-DD HH:mm';\nexport const COLLAPP_SHORT_MONTH_YEAR_FORMAT = 'MMM YYYY';\nexport const COLLAPP_LONG_MONTH_YEAR_FORMAT = 'MMMM YYYY';\nexport const COLLAPP_SHORT_DAY_MONTH_FORMAT = 'MM-DD';\nexport const COLLAPP_SHORT_WEEK_DAY_FORMAT = 'ddd';\n","import {\n Inject, Injectable, OnDestroy, Optional, ɵstringify as stringify,\n} from '@angular/core';\nimport { MAT_DATE_LOCALE } from '@angular/material/core';\nimport { MatMomentDateAdapterOptions } from '@angular/material-moment-adapter';\nimport { Observable, Subject } from 'rxjs';\nimport moment from 'moment';\nimport { CollappDateAdapter } from '../collapp-core';\n\n/**\n * We do not expose the MomentDateAdapter configuration but set it here as an\n * application default.\n */\nconst MAT_MOMENT_DATE_ADAPTER_OPTIONS: MatMomentDateAdapterOptions = {\n strict: true,\n useUtc: true,\n};\n\n/** Adapts Moment.js Dates for use with Angular Material. */\n@Injectable({\n providedIn: 'root',\n})\nexport class CollappMomentDateAdapter extends CollappDateAdapter implements OnDestroy {\n private static instanceCounter: number = 0;\n\n /** A stream that emits when the UTC offset changes. */\n readonly utcOffsetChanges$: Observable;\n\n /**\n * UTC offset in minutes.\n */\n protected _utcOffset: number = 0;\n\n // eslint-disable-next-line rxjs/no-exposed-subjects\n protected _utcOffsetChanges$: Subject = new Subject();\n\n // eslint-disable-next-line no-plusplus\n private instanceNumber: number = CollappMomentDateAdapter.instanceCounter++;\n\n constructor(\n @Optional() @Inject(MAT_DATE_LOCALE) dateLocale: string,\n ) {\n super(dateLocale, MAT_MOMENT_DATE_ADAPTER_OPTIONS);\n\n /* eslint-disable no-console */\n\n if (this.instanceNumber > 0) {\n console.warn(`More than one instance of ${stringify(CollappMomentDateAdapter)} was created.`);\n }\n\n /* eslint-enable no-console */\n\n this.utcOffsetChanges$ = this._utcOffsetChanges$.asObservable();\n }\n\n /** @inheritdoc */\n ngOnDestroy(): void {\n this._utcOffsetChanges$.complete();\n }\n\n // region MomentDateAdapter overrides\n\n /** @inheritdoc */\n getFirstDayOfWeek(): number {\n /**\n * Ensures that the week starts on monday.\n * This is a Collapp default.\n */\n return 1;\n // return this._localeData.firstDayOfWeek;\n }\n\n /** @inheritdoc */\n createDate(year: number, month: number, date: number): moment.Moment {\n return this.adjustDate(super.createDate(year, month, date));\n }\n\n /** @inheritdoc */\n today(): moment.Moment {\n return this.adjustDate(super.today());\n }\n\n /** @inheritdoc */\n parse(value: any, parseFormat: string | string[]): moment.Moment | null {\n return this.adjustDate(super.parse(value, parseFormat));\n }\n\n /** @inheritdoc */\n toIso8601(date: moment.Moment): string {\n return this.clone(date)\n .toISOString(true);\n }\n\n /**\n * Returns the given value if given a valid Moment or null. Deserializes valid ISO 8601 strings\n * (https://www.ietf.org/rfc/rfc3339.txt) and valid Date objects into valid Moments and empty\n * string into null. Returns an invalid date for all other values.\n */\n deserialize(value: any): moment.Moment | null {\n return this.adjustDate(super.deserialize(value));\n }\n\n // endregion\n\n // region Custom MomentDateAdapter additions\n\n adjustDate(date: moment.Moment, keepLocalTime?: boolean): moment.Moment;\n\n adjustDate(date: moment.Moment | null, keepLocalTime?: boolean): moment.Moment | null;\n\n /**\n * Adjusts a date to the UTC offset currently set on this date adapter.\n *\n * @param [keepLocalTime=true] - Passing true will keep the same local time, but at the expense of choosing\n * a different point in Universal Time.\n */\n adjustDate(date: moment.Moment | null, keepLocalTime: boolean = true): moment.Moment | null {\n if (date != null) {\n return date\n .clone()\n // `setLocale()` is called in super.constructor() which in turn calls `createDate()` which leads to a call\n // here where `_utcOffset` is still `undefined`.\n .utcOffset(this._utcOffset || 0, keepLocalTime);\n }\n\n return date;\n }\n\n /**\n * Get the UTC offset in minutes.\n */\n utcOffset(): number;\n\n /**\n * Setting the UTC offset by supplying minutes.\n * See the official MomentJS documentation for `moment().utcOffset(Number|String);` - this\n * method behaves the same way.\n */\n utcOffset(value: number | string): void;\n\n utcOffset(value?: number | string): number | undefined {\n if (value == null) {\n return this._utcOffset;\n }\n\n const date = moment()\n .utcOffset(value);\n if (!date.isValid()) {\n throw new Error(`Invalid UTC offset \"${value}\" given.`);\n }\n const previousUtcOffset = this._utcOffset;\n\n const utcOffset = date.utcOffset();\n this._utcOffset = utcOffset;\n\n if (utcOffset !== previousUtcOffset) {\n this._utcOffsetChanges$.next(utcOffset);\n }\n\n return undefined;\n }\n\n // endregion\n}\n","import { MatDateFormats } from '@angular/material/core';\nimport { COLLAPP_DATE_FORMAT, COLLAPP_LONG_MONTH_YEAR_FORMAT, COLLAPP_SHORT_MONTH_YEAR_FORMAT } from '../collapp-core/date';\n\nexport const COLLAPP_MAT_MOMENT_DATE_FORMATS: MatDateFormats = {\n parse: {\n dateInput: COLLAPP_DATE_FORMAT, // previous default: 'l'\n },\n display: {\n dateInput: COLLAPP_DATE_FORMAT, // previous default: 'l'\n monthYearLabel: COLLAPP_SHORT_MONTH_YEAR_FORMAT, // previous default: 'MMM YYYY'\n dateA11yLabel: 'LL', // Month name, day of month, year in current locale, i.e. \"September 4 1986\"\n monthYearA11yLabel: COLLAPP_LONG_MONTH_YEAR_FORMAT, // previous default: 'MMMM YYYY'\n },\n};\n","import {\n NgModule, Optional, SkipSelf, ɵstringify as stringify,\n} from '@angular/core';\nimport { DateAdapter, MAT_DATE_FORMATS, MAT_DATE_LOCALE } from '@angular/material/core';\nimport { MatMomentDateModule } from '@angular/material-moment-adapter';\nimport { CollappMomentDateAdapter } from './moment-date-adapter';\nimport { COLLAPP_MAT_MOMENT_DATE_FORMATS } from './moment-date-formats';\nimport { CollappDateAdapter } from '../collapp-core';\n\nexport * from './moment-date-adapter';\nexport * from './moment-date-formats';\n\n@NgModule({\n imports: [\n MatMomentDateModule,\n ],\n providers: [\n {\n provide: MAT_DATE_LOCALE,\n useValue: 'en-GB',\n },\n {\n provide: MAT_DATE_FORMATS,\n useValue: COLLAPP_MAT_MOMENT_DATE_FORMATS,\n },\n {\n provide: CollappMomentDateAdapter,\n useClass: CollappMomentDateAdapter,\n deps: [MAT_DATE_LOCALE],\n },\n {\n provide: CollappDateAdapter,\n useExisting: CollappMomentDateAdapter,\n // deps: [MAT_DATE_LOCALE],\n },\n {\n provide: DateAdapter,\n useExisting: CollappMomentDateAdapter,\n // deps: [MAT_DATE_LOCALE],\n },\n ],\n})\nexport class CollappMomentDateModule {\n constructor(\n @Optional() @SkipSelf() parentModule?: CollappMomentDateModule,\n ) {\n if (parentModule) {\n throw new Error(`${stringify(CollappMomentDateModule)} is already loaded. Import it in the AppModule only.`);\n }\n }\n}\n","\n \n @if (loading) {\n \n \n \n }\n\n\n
\n
\n
\n","import { FocusMonitor } from '@angular/cdk/a11y';\nimport {\n ChangeDetectionStrategy,\n Component,\n ElementRef,\n Inject,\n Input,\n NgZone,\n Optional,\n ViewEncapsulation,\n} from '@angular/core';\nimport { ANIMATION_MODULE_TYPE } from '@angular/platform-browser/animations';\nimport { coerceBooleanProperty } from '@angular/cdk/coercion';\nimport { MatButton } from '@angular/material/button';\nimport { Platform } from '@angular/cdk/platform';\n\n/**\n * List of classes to add to CollappButton instances based on host attributes to\n * style as different variants.\n */\nconst BUTTON_HOST_ATTRIBUTES = [\n 'collapp-button',\n 'collapp-icon-button',\n 'collapp-stroked-button',\n 'collapp-flat-button',\n 'collapp-sharp-edge-button',\n];\n\n/**\n * Material design Collapp button.\n */\n@Component({\n selector: `button[collapp-button],\n button[collapp-icon-button],\n button[collapp-stroked-button],\n button[collapp-sharp-edge-button],\n button[collapp-flat-button]`,\n exportAs: 'collappButton',\n // eslint-disable-next-line @angular-eslint/no-host-metadata-property\n host: {\n '[attr.disabled]': 'disabled || null',\n '[class._mat-animation-noopable]': '_animationMode === \"NoopAnimations\"',\n },\n templateUrl: './button.html',\n // styleUrls: ['button.scss'],\n // eslint-disable-next-line @angular-eslint/no-inputs-metadata-property\n inputs: ['disabled', 'disableRipple', 'color'],\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush,\n standalone: false\n})\nexport class CollappButtonComponent extends MatButton {\n /** Whether the button displays a loading indicator. */\n get loading(): boolean { return this._loading; }\n\n @Input()\n set loading(value: boolean) {\n this._loading = coerceBooleanProperty(value);\n }\n\n private _loading: boolean = false;\n\n constructor(\n elementRef: ElementRef,\n platform: Platform,\n ngZone: NgZone,\n // _focusMonitor: FocusMonitor,\n @Optional() @Inject(ANIMATION_MODULE_TYPE) _animationMode: string,\n ) {\n super(elementRef,platform,ngZone, _animationMode);\n\n // For each of the variant selectors that is prevent in the button's host\n // attributes, add the correct corresponding class.\n BUTTON_HOST_ATTRIBUTES.forEach((attr) => {\n if (elementRef.nativeElement && elementRef.nativeElement.hasAttribute(attr)) {\n (elementRef.nativeElement as HTMLElement).classList.add(attr);\n }\n });\n }\n}\n\n/**\n * Material design Collapp anchor button.\n */\n@Component({\n selector: `a[collapp-button],\n a[collapp-icon-button],\n a[collapp-stroked-button],\n a[collapp-flat-button]`,\n exportAs: 'collappButton, collappAnchor',\n // eslint-disable-next-line @angular-eslint/no-host-metadata-property\n host: {\n // Note that we ignore the user-specified tabindex when it's disabled for\n // consistency with the `collapp-button` applied on native buttons where even\n // though they have an index, they're not tabbable.\n '[attr.tabindex]': 'disabled ? -1 : (tabIndex || 0)',\n '[attr.disabled]': 'disabled || null',\n '[attr.aria-disabled]': 'disabled.toString()',\n '(click)': '_haltDisabledEvents($event)',\n '[class._mat-animation-noopable]': '_animationMode === \"NoopAnimations\"',\n },\n // eslint-disable-next-line @angular-eslint/no-inputs-metadata-property\n inputs: ['disabled', 'disableRipple', 'color'],\n templateUrl: './button.html',\n // styleUrls: ['button.scss'],\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush,\n standalone: false\n})\nexport class CollappAnchorComponent extends CollappButtonComponent {\n /** Tabindex of the button. */\n @Input() tabIndex?: number;\n\n constructor(\n elementRef: ElementRef,\n platform: Platform,\n ngZone: NgZone,\n @Optional() @Inject(ANIMATION_MODULE_TYPE) animationMode: string,\n ) {\n super(elementRef, platform, ngZone, animationMode);\n }\n\n _haltDisabledEvents(event: Event): void {\n // A disabled button shouldn't apply any actions\n if (this.disabled) {\n event.preventDefault();\n event.stopImmediatePropagation();\n }\n }\n}\n","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { MatCommonModule, MatRippleModule } from '@angular/material/core';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatProgressSpinnerModule } from '@angular/material/progress-spinner';\nimport { CollappAnchorComponent, CollappButtonComponent } from './button';\n\n@NgModule({\n imports: [\n CommonModule,\n MatRippleModule,\n MatCommonModule,\n MatButtonModule,\n MatProgressSpinnerModule,\n ],\n exports: [\n MatCommonModule,\n CollappButtonComponent,\n CollappAnchorComponent,\n ],\n declarations: [\n CollappButtonComponent,\n CollappAnchorComponent,\n ],\n})\nexport class CollappButtonModule {\n}\n","
\n
{{ startDate | moment }}
\n
-
\n
\n
{{ endDate | moment }}
\n @if (endDateSuffix) {\n
({{ endDateSuffix }})
\n }\n
\n
\n","import {\n ChangeDetectionStrategy, Component, HostBinding, Input, ViewEncapsulation,\n} from '@angular/core';\nimport { coerceBooleanProperty } from '@angular/cdk/coercion';\nimport moment from 'moment';\n\n@Component({\n selector: 'dates-range',\n templateUrl: './dates-range.component.html',\n styleUrls: ['./dates-range.component.scss'],\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush,\n standalone: false\n})\nexport class DatesRangeComponent {\n @HostBinding('class.dates-range')\n hostClass: boolean = true;\n\n @Input()\n startDate: moment.Moment | null = null;\n\n @Input()\n endDate: moment.Moment | null = null;\n\n @Input()\n endDateSuffix: string | null = null;\n\n get hasDateRangeError(): boolean { return this._hasDateRangeError; }\n\n @Input()\n @HostBinding('class.dates-range--has-date-range-error')\n set hasDateRangeError(value: boolean) {\n this._hasDateRangeError = coerceBooleanProperty(value);\n }\n\n get hasEndDateError(): boolean { return this._hasEndDateError; }\n\n @Input()\n @HostBinding('class.dates-range--has-end-date-error')\n set hasEndDateError(value: boolean) {\n this._hasEndDateError = coerceBooleanProperty(value);\n }\n\n private _hasDateRangeError: boolean = false;\n\n private _hasEndDateError: boolean = false;\n}\n","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { MatTooltipModule } from '@angular/material/tooltip';\nimport { DatesRangeComponent } from './dates-range.component';\nimport { CollappCommonModule } from '../../collapp-common';\n\n@NgModule({\n imports: [\n CommonModule,\n MatTooltipModule,\n CollappCommonModule,\n ],\n exports: [\n DatesRangeComponent,\n ],\n declarations: [\n DatesRangeComponent,\n ],\n})\nexport class DatesRangeModule {\n}\n","
\n
\n

\n Add Additional Suppliers\n

\n \n
\n \n
\n
\n \n Supplier Unit\n \n \n {{item.name}}\n \n \n \n \n {{\"common.hrc\" | translate}}\n \n \n \n {{ isDropdownOpen ? (item | chrcPair) : item.supplierHourlyRateCategory}}\n \n \n \n \n
\n
\n
\n
\n \n \n @if (!form.dirty) {\n Close\n }\n @if (form.dirty) {\n Cancel\n }\n \n \n Add\n \n
\n\n
\n","import {\n Component, Inject, OnDestroy, OnInit, ViewEncapsulation,\n} from '@angular/core';\nimport { UntypedFormBuilder, UntypedFormControl, Validators } from '@angular/forms';\nimport { MatDialogRef, MAT_DIALOG_DATA } from '@angular/material/dialog';\nimport { Subject } from 'rxjs';\nimport { takeUntil, tap } from 'rxjs/operators';\nimport { ContractHourlyRateCategoryPairDtoModel } from '../../../api/models/dtos/contract-hourly-rate-category-pair.dto.model';\nimport { ContractDtoModel } from '../../../api/models/dtos/contract.dto.model';\nimport { UnitSlimDtoModel } from '../../../api/models/dtos/unit-slim.dto.model';\nimport { TypedFormBuilder } from '../../../form/typed-form-builder';\nimport { TypedFormGroup } from '../../../form/typed-form-group';\nimport { AddAdditionalSuppliersDialogCloseData, AddAdditionalSuppliersDialogData } from './collapp-wp-add-additional-suppliers-dialog.types';\n\nexport interface AdditionalSupplierForm {\n supplierUnit: UnitSlimDtoModel;\n supplierHourlyRateCategory: ContractHourlyRateCategoryPairDtoModel;\n}\n\n// TODO: Once nedest value binding is supported https://github.com/ng-select/ng-select/blob/master/src/demo/app/examples/bindings-nested-example/bindings-nested-example.component.html\n// we can just use contracts instead of extracting and filtering the suppliers\n\n@Component({\n selector: 'collapp-collapp-wp-add-additional-suppliers-dialog',\n templateUrl: './collapp-wp-add-additional-suppliers-dialog.component.html',\n styleUrls: ['./collapp-wp-add-additional-suppliers-dialog.component.scss'],\n encapsulation: ViewEncapsulation.None,\n standalone: false\n})\nexport class CollappWpAddAdditionalSuppliersDialogComponent implements OnInit, OnDestroy {\n contracts: ContractDtoModel[] = [];\n\n contractHourlyRateCategoryPairs: ContractHourlyRateCategoryPairDtoModel[] = [];\n\n form: TypedFormGroup;\n\n isDropdownOpen = false;\n\n get supplierControl(): UntypedFormControl { return this.form.controls.supplierUnit as UntypedFormControl; }\n\n get supplierHourlyRateCategoryControl(): UntypedFormControl {\n return this.form.controls.supplierHourlyRateCategory as UntypedFormControl;\n }\n\n suppliers: (UnitSlimDtoModel | null)[] = [];\n\n private destroyed$: Subject = new Subject();\n\n constructor(\n @Inject(MAT_DIALOG_DATA) data: AddAdditionalSuppliersDialogData,\n public dialogRef: MatDialogRef<\n CollappWpAddAdditionalSuppliersDialogComponent,\n AddAdditionalSuppliersDialogCloseData>,\n private _formBuilder: UntypedFormBuilder,\n ) {\n this.contracts = data.contracts;\n this.suppliers = this.contracts.map((c) => c.supplierUnit).filter((u) => !!u);\n\n const formBuilder: TypedFormBuilder = _formBuilder as any;\n this.form = formBuilder.group({\n supplierUnit: [null, Validators.required],\n supplierHourlyRateCategory: [null, Validators.required],\n });\n }\n\n ngOnInit(): void {\n this.supplierControl.valueChanges.pipe(\n tap(() => this.supplierHourlyRateCategoryControl.reset()),\n takeUntil(this.destroyed$),\n ).subscribe((selectedSupplierUnit) => {\n const filteredContracts = this.contracts.filter((c) => c.supplierUnit?.unitId === selectedSupplierUnit?.unitId);\n // eslint-disable-next-line arrow-body-style\n this.contractHourlyRateCategoryPairs = filteredContracts.reduce(\n (acc, c) => acc.concat(c.contractHourlyRateCategoryPairs),\n [] as ContractHourlyRateCategoryPairDtoModel[],\n );\n });\n }\n\n ngOnDestroy(): void {\n this.destroyed$.next();\n this.destroyed$.complete();\n }\n\n add(): void {\n if (!this.form.valid) {\n return;\n }\n this.dialogRef.close({\n chrcps: this.supplierHourlyRateCategoryControl.value,\n });\n }\n\n onOpen(): void {\n this.isDropdownOpen = true;\n }\n\n onClose(): void {\n this.isDropdownOpen = false;\n }\n\n cancel(): void {\n this.dialogRef.close();\n }\n}\n","import { ProjectViewResponseModel } from '../../../api/models/responses/project-view.response.model';\nimport { WorkPackageViewResponseModel } from '../../../api/models/responses/work-package-view.response.model';\nimport { LevelSlimDtoModel } from '../../../api/models/dtos/level-slim.dto.model';\nimport { ProjectSlimResponseModel } from '../../../api/models/responses/project-slim.response.model';\n\n/**\n * You can either create, edit or duplicate a work package with the wizard.\n */\nexport enum WorkPackageWizardDialogMode {\n Create = 'Create',\n Edit = 'Edit',\n Duplicate = 'Duplicate',\n Move = 'Move',\n}\n\n/**\n * Accepted parameters for the wizard dialog.\n */\nexport interface WorkPackageWizardDialogData {\n mode: WorkPackageWizardDialogMode;\n project?: ProjectViewResponseModel | ProjectSlimResponseModel;\n workPackage?: WorkPackageViewResponseModel;\n levels?: LevelSlimDtoModel[];\n}\n\nexport type WorkPackageWizardDialogResult = null | {\n workPackageId: number;\n projectId: number;\n};\n","export interface PathInfo {\n dirname: string;\n basename: string;\n filename: string;\n extension: string;\n}\n\n/**\n * Returns information about a file path or file name.\n *\n * @param path\n */\nexport function pathInfo(path: string): PathInfo {\n const pathParts = `${path}`.split('/');\n const filename = pathParts.pop() || '';\n const dirname = pathParts.join('/');\n\n const extIndex = filename.lastIndexOf('.');\n const extension = (extIndex !== -1 ? filename.substr(extIndex + 1) : '');\n const basename = (extIndex !== -1 ? filename.substr(0, extIndex) : filename);\n\n return {\n dirname,\n basename,\n filename,\n extension,\n };\n}\n","import { Injectable } from '@angular/core';\nimport { HttpErrorResponse, HttpEvent, HttpEventType, HttpProgressEvent, HttpResponse, HttpSentEvent } from '@angular/common/http';\nimport {\n AnonymousCredential,\n BlobServiceClient,\n BlobUploadCommonResponse,\n ContainerClient,\n newPipeline,\n} from '@azure/storage-blob';\nimport { AbortController } from '@azure/abort-controller';\nimport { TransferProgressEvent } from '@azure/core-http';\nimport { Observable } from 'rxjs';\nimport { environment } from '../../environments/environment';\nimport { pathInfo } from '../helpers/path.utility';\nimport guid from '../helpers/guid';\n\n/**\n * The number of characters in a GUID.\n */\nconst GUID_NUM_CHARS = 36;\n\nexport interface AzureBlobUploadResponse extends BlobUploadCommonResponse {\n blobUrl: string;\n blobName: string;\n fileName: string;\n}\n\n@Injectable({\n providedIn: 'root',\n})\nexport class AzureBlobService {\n private readonly containerClient: ContainerClient;\n\n constructor() {\n // @TODO Create configurable service and inject options there instead of pulling\n // them here from the environment config\n const blobServiceUrl = environment.azureBlobServiceUrl;\n const blobContainerName = environment.azureBlobTemporaryAttachmentsContainer;\n\n const pipeline = newPipeline(new AnonymousCredential(), {\n // httpClient: MyHTTPClient, // A customized HTTP client implementing IHttpClient interface\n // logger: MyLogger, // A customized logger implementing IHttpPipelineLogger interface\n retryOptions: { maxTries: 4 }, // Retry options\n // telemetry: { value: 'HighLevelSample V1.0.0' }, // Customized telemetry string\n });\n\n const blobServiceClient = new BlobServiceClient(\n blobServiceUrl,\n // `https://${account}.blob.core.windows.net/${accountSas}`,\n pipeline,\n );\n\n this.containerClient = blobServiceClient.getContainerClient(blobContainerName);\n }\n\n /**\n * Uploads a given file to the configured Azure Blob Storage.\n */\n uploadFile$(file: File, blobNameMaxLength?: number): Observable> {\n const fileSize = file.size || 1;\n const fileName = file.name;\n const { containerClient } = this;\n\n // Create a blob\n const blobName = this.getBlobName(file, blobNameMaxLength);\n const blobClient = containerClient.getBlobClient(blobName);\n const blockBlobClient = blobClient.getBlockBlobClient();\n\n const abortController = new AbortController();\n\n const observable$: Observable> = new Observable((subject) => {\n const sentEvent: HttpSentEvent = { type: HttpEventType.Sent };\n subject.next(sentEvent);\n\n blockBlobClient\n .uploadBrowserData(file, {\n blobHTTPHeaders: {\n // Provide the mime type of the file, albeit unsafe, since otherwise\n // the blob storage does not set a mime type on the uploaded content.\n blobContentType: file.type,\n },\n // blockSize: 4 * 1024 * 1024, // 4MB block size\n // concurrency: 20, // 20 concurrency\n onProgress: (progress: TransferProgressEvent) => {\n const uploadProgressEvent: HttpProgressEvent = {\n type: HttpEventType.UploadProgress,\n loaded: progress.loadedBytes,\n total: fileSize,\n };\n subject.next(uploadProgressEvent);\n },\n abortSignal: abortController.signal,\n })\n .then((result) => {\n const body: AzureBlobUploadResponse = {\n\n ...result,\n blobUrl: blobClient.url,\n blobName,\n fileName,\n };\n const responseEvent = new HttpResponse({\n body,\n });\n subject.next(responseEvent);\n subject.complete();\n })\n .catch((error) => {\n const errorResponseEvent = new HttpErrorResponse({ error });\n subject.error(errorResponseEvent);\n });\n\n return (): void => {\n abortController.abort();\n };\n });\n\n return observable$;\n }\n\n /**\n * Get a unique file name for the blob storage to avoid naming conflicts.\n */\n getBlobName(file: File, blobNameMaxLength?: number): string {\n if (blobNameMaxLength && blobNameMaxLength < GUID_NUM_CHARS) {\n throw new Error(`The name of the blob file can't be less than ${GUID_NUM_CHARS} chars`);\n }\n\n const fileGuid = guid();\n const info = pathInfo(file.name);\n const fileExtension = info.extension;\n\n if (\n fileExtension\n && (\n !blobNameMaxLength\n || blobNameMaxLength > GUID_NUM_CHARS + 1 // Do not include the `.` dot\n )\n ) {\n const blobName = `${fileGuid}.${fileExtension.toLowerCase()}`;\n\n if (blobNameMaxLength) {\n return blobName.substr(0, blobNameMaxLength);\n }\n\n return blobName;\n }\n\n return fileGuid;\n }\n}\n","import { AttachmentOutdateRequest } from '../../interfaces/requests/attachment-outdate-request';\nimport { assertRequiredProperties } from '../../utilities/api.utility';\n\nexport class AttachmentOutdateRequestModel {\n constructor(\n readonly attachmentId: string,\n readonly outdatedComment: string,\n ) {\n }\n\n static fromJSON(json: AttachmentOutdateRequest): AttachmentOutdateRequestModel {\n assertRequiredProperties(json, [\n 'attachmentId',\n 'outdatedComment',\n ]);\n\n return new AttachmentOutdateRequestModel(\n json.attachmentId,\n json.outdatedComment,\n );\n }\n\n toJSON(): AttachmentOutdateRequest {\n return {\n attachmentId: this.attachmentId,\n outdatedComment: this.outdatedComment,\n };\n }\n}\n","import { Component, Inject, OnDestroy } from '@angular/core';\nimport { UntypedFormBuilder, UntypedFormControl, Validators } from '@angular/forms';\nimport { MAT_DIALOG_DATA, MatDialogRef } from '@angular/material/dialog';\nimport { Subject } from 'rxjs';\nimport { takeUntil } from 'rxjs/operators';\nimport { ProjectService } from '../../../../api/services/project.service';\nimport { ToastyService } from '../../../../shared/toasty';\nimport { BasicDialogComponent } from '../../../../shared/dialogs/basic-dialog/basic.dialog.component';\nimport { BasicDialogService } from '../../../../services/basic-dialog.service';\nimport { TypedFormBuilder } from '../../../../form/typed-form-builder';\nimport { TypedFormGroup } from '../../../../form/typed-form-group';\nimport { ErrorHandlerService } from '../../../../services/error-handler.service';\nimport { ExistingFormAttachmentFile } from '../../index';\nimport { AttachmentOutdateRequestModel } from '../../../../api/models/requests/attachment-outdate-request.model';\nimport { AttachmentOutdateResponseModel } from '../../../../api/models/responses/attachment-outdate.response.model';\n\nexport interface OutdateAttachmentDialogData {\n /**\n * Should be set if a work package is edited.\n */\n attachment?: ExistingFormAttachmentFile;\n}\n\nexport type OutdateAttachmentDialogResult = ExistingFormAttachmentFile | undefined;\n\ntype MutableRequired = { -readonly [P in keyof T]-?: T[P] }; // Remove readonly and ?\n\nexport type OutdateAttachmentForm = MutableRequired>;\n\n@Component({\n templateUrl: './outdate-attachment-dialog.component.html',\n standalone: false\n})\nexport class OutdateAttachmentDialogComponent implements OnDestroy {\n /**\n * The project the work package belongs to\n */\n attachment: ExistingFormAttachmentFile;\n\n /**\n * Contains all the form controls\n */\n form: TypedFormGroup;\n\n /**\n * Marks the form as being saved.\n */\n savingForm: boolean = false;\n\n // =======\n // All form controls of the template for easier access.\n get fileName(): UntypedFormControl { return this.form.controls.fileName as UntypedFormControl; }\n\n get outdatedComment(): UntypedFormControl { return this.form.controls.outdatedComment as UntypedFormControl; }\n // =======\n\n private confirmDialogRef: MatDialogRef | null = null;\n\n /**\n * Triggers when the component is destroyed.\n * Necessary to inform other observers.\n *\n * @type {Subject}\n * @private\n */\n private destroyed$: Subject = new Subject();\n\n constructor(\n @Inject(MAT_DIALOG_DATA) data: OutdateAttachmentDialogData,\n public dialogRef: MatDialogRef,\n _formBuilder: UntypedFormBuilder,\n private dialogService: BasicDialogService,\n private projectService: ProjectService,\n private toastyService: ToastyService,\n private errorHandlerService: ErrorHandlerService,\n ) {\n const { attachment } = data;\n // Mandatory\n if (!attachment) {\n throw new Error('Missing required \\'attachment\\' in dialog data.');\n }\n\n this.attachment = attachment;\n\n const formBuilder = _formBuilder as TypedFormBuilder;\n this.form = formBuilder.group({\n fileName: [\n { value: attachment.fileName, disabled: true },\n ],\n outdatedComment: [\n attachment.outdatedComment,\n [Validators.required, Validators.maxLength(50)],\n ],\n });\n }\n\n ngOnDestroy(): void {\n this.destroyed$.next();\n this.destroyed$.complete();\n }\n\n onSubmit(): void {\n if (!this.form.valid) {\n this.form.markAllAsTouched();\n\n return;\n }\n\n if (this.savingForm) {\n return;\n }\n\n this.savingForm = true;\n const { outdatedComment } = this.form.getRawValue();\n const request = new AttachmentOutdateRequestModel(\n this.attachment.attachmentId,\n outdatedComment || '',\n );\n\n this.projectService\n .patchOutdateFile$(\n this.attachment.attachmentId,\n request,\n )\n .pipe(takeUntil(this.destroyed$))\n .subscribe(\n (response: AttachmentOutdateResponseModel) => {\n this.toastyService.success('Successfully marked attachment as outdated.');\n this.dialogRef.close(this.attachment.clone(response));\n this.savingForm = false;\n },\n (error: unknown) => {\n this.errorHandlerService.handleError(error as Error, 'An error has occurred while updating the submitter setting. Please try again.');\n this.savingForm = false;\n },\n );\n }\n\n cancel(): void {\n if (this.confirmDialogRef) {\n return;\n }\n\n if (this.form.pristine) {\n this.dialogRef.close();\n\n return;\n }\n\n const dialogRef = this.dialogService.showConfirmDialog();\n this.confirmDialogRef = dialogRef;\n\n dialogRef\n .afterClosed()\n .pipe(takeUntil(this.destroyed$))\n .subscribe((closeConfirmed) => {\n this.confirmDialogRef = null;\n\n if (closeConfirmed) {\n this.dialogRef.close();\n }\n });\n }\n}\n","\n
\n

Mark attachment as outdated

\n \n
\n
\n \n
\n \n Name\n \n \n
\n
\n \n Reason for marking attachment as outdated\n \n \n {{outdatedComment.value?.length || 0}} / 50\n \n Field is required.\n \n
\n
\n This action will be saved immediately and can not be undone.\n
\n
\n
\n \n Cancel\n Save\n
\n
\n
\n","
\n @if (loading) {\n
\n \n
\n }\n \n \n Name \n {{attachment.fileName}} \n \n \n\n \n Type \n {{attachment.fileName | fileExtension}} \n \n \n\n \n Size \n {{attachment.fileSize | fileSize}} \n @if (dataSource.data.length > 1) {\n {{combinedFileSize | fileSize}}\n }\n \n\n \n Uploaded \n \n @if ((attachment | withFunc:isExistingFormAttachmentFile)) {\n {{attachment.uploadedOn | momentLocal}}\n }\n \n \n \n\n \n Uploader \n {{attachment.uploader | collAppUser}} \n \n \n\n \n \n {{\"common.status\" | translate}}\n \n \n \n {{outdatedFilterControl.value}}\n \n \n {{item}}\n \n \n \n \n \n @if (isAttachmentOutdateable(attachment)) {\n \n archive\n \n }\n @if (!isAttachmentOutdateable(attachment)) {\n \n }\n \n \n \n\n \n \n \n @switch (attachment.status) {\n @case (attachmentStatus.PENDING) {\n
\n cloud_queue\n
\n }\n @case (attachmentStatus.UPLOADING) {\n
\n cloud_queue\n
\n }\n @case (attachmentStatus.ERROR) {\n
\n cloud_off\n
\n }\n @case (attachmentStatus.CANCELLED) {\n
\n cloud_off\n
\n }\n @default {\n
\n cloud_done\n
\n }\n }\n \n \n
\n\n \n \n \n
\n @if (isAttachmentDownloadable(attachment)) {\n \n get_app\n \n }\n @if (!disabled && isAttachmentUploading(attachment)) {\n \n highlight_off\n \n }\n @if (!disabled && isAttachmentResumable(attachment)) {\n \n replay\n \n }\n @if (!disabled && isAttachmentRemovable(attachment)) {\n \n remove_circle_outline\n \n }\n @if (!disabled && isAttachmentRestorable(attachment)) {\n \n undo\n \n }\n @if (disabled && attachment.questionId != null) {\n \n question_answer\n \n }\n @if (isAttachmentUploading(attachment)) {\n
\n {{attachment.uploadProgressPercent}}%\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 \n\n \n @if (!hideFilters) {\n \n \n }\n \n \n \n\n@if (allAttachmentsCount > 0 && filteredAttachmentsCount === 0) {\n
\n No attachments match your filter criteria\n
\n}\n@if (newAttachmentsCount > 0) {\n
\n You have {{ newAttachmentsCount }} newly uploaded {{ newAttachmentsCount === 1 ? 'file' : 'files' }}\n
\n}\n@if (allAttachmentsCount === 0 && disabled) {\n
\n No attachments available\n
\n}\n@if (!disabled) {\n \n \n
\n \n
\n \n Drop files here to attach them or\n .\n
\n
\n
\n \n}\n
\n@if (allowDownloadAll) {\n
\n @if (existingAttachmentsCount > 0) {\n \n Download all\n \n }\n
\n}\n","/* eslint-disable max-classes-per-file */\n/* eslint-disable complexity */\nimport {\n Component,\n DoCheck,\n EventEmitter,\n HostBinding,\n Input,\n OnDestroy,\n OnInit,\n Optional,\n Output,\n Self,\n ViewChild,\n} from '@angular/core';\nimport {\n ControlValueAccessor, UntypedFormBuilder, UntypedFormControl, FormGroupDirective, NgControl, NgForm,\n} from '@angular/forms';\nimport {\n _ErrorStateTracker,\n ErrorStateMatcher,\n} from '@angular/material/core';\nimport { MatDialog, MatDialogRef } from '@angular/material/dialog';\nimport { MatFormFieldControl } from '@angular/material/form-field';\nimport { MatSort } from '@angular/material/sort';\nimport { MatTableDataSource } from '@angular/material/table';\nimport { coerceBooleanProperty } from '@angular/cdk/coercion';\nimport {\n AsyncSubject,\n BehaviorSubject,\n combineLatest,\n concat,\n merge,\n Observable,\n Subject,\n Subscription,\n timer,\n} from 'rxjs';\nimport moment from 'moment';\nimport { FileSystemFileEntry, NgxFileDropEntry } from 'ngx-file-drop';\nimport {\n debounceTime,\n expand,\n filter,\n finalize,\n map,\n shareReplay,\n switchMap,\n takeUntil,\n tap,\n withLatestFrom,\n} from 'rxjs/operators';\nimport { HttpEventType, HttpResponse } from '@angular/common/http';\nimport { ActivatedRoute, Router } from '@angular/router';\nimport { Store } from '@ngxs/store';\nimport { TypedFormGroup } from '../../form/typed-form-group';\nimport { TypedFormBuilder } from '../../form/typed-form-builder';\nimport { AttachmentListSelectors } from '../../state/settings/attachment-list/attachment-list.selectors';\nimport { LIST_COLUMNS_FILTER_CHANGE_DEBOUNCE_TIME } from '../../shared/constants';\nimport { SaveAttachmentListOptions } from '../../state/settings/attachment-list';\nimport { UserSlimDtoModel } from '../../api/models/dtos/user-slim.dto.model';\nimport { ProjectService } from '../../api/services/project.service';\nimport { AzureBlobService, AzureBlobUploadResponse } from '../../services/azure-blob.service';\nimport { AttachmentCreateRequestModel } from '../../api/models/requests/attachment-create.request.model';\nimport { pathInfo } from '../../helpers/path.utility';\nimport { AttachmentSlimDtoModel } from '../../api/models/dtos/attachment-slim.dto.model';\nimport { ErrorHandlerService } from '../../services/error-handler.service';\nimport { formatCollAppUser, MomentPipe } from '../../collapp-common';\nimport { CollappDateAdapter } from '../../collapp-core';\nimport {\n OutdateAttachmentDialogComponent,\n} from './components/outdate-attachment-dialog';\nimport { AttachmentSlimDtoMetadata } from '../../api/interfaces/metadata';\nimport { getFileExtensionFromFilename } from '../../helpers/file-type.utility';\nimport { DocumentType } from '../../models/document-type.enum';\nimport { MetadataModel } from '../../api/models/metadata.model';\nimport { AttachmentColumnFilters } from '../../api/filter-columns';\nimport { attachmentsListColumnsWithFilters } from '../../api/meta-info/attachments-list.info';\nimport { isEmpty } from '../../helpers/utilities';\n\n// @TODO Limitation of the API\nconst ATTACHMENT_NAME_MAX_CHARS: number = 254;\nconst BLOB_NAME_MAX_CHARS: number = 254;\n\nconst ATTACHMENT_STATE_OUTDATED = 'Outdated';\nconst ATTACHMENT_STATE_CURRENT = 'Active';\nconst ATTACHMENT_STATE_ALL = 'All';\n\n/**\n * The state a displayed attachment can be in.\n */\nexport enum FileAttachmentState {\n DEFAULT,\n OUTDATED,\n NEW,\n}\n\n/**\n * The current state of the upload.\n */\nexport enum FormAttachmentFileStatus {\n PENDING = 'pending',\n UPLOADING = 'uploading',\n UPLOADED = 'uploaded',\n CANCELLED = 'cancelled',\n ERROR = 'error',\n REMOVED = 'removed',\n}\n\nexport interface FormAttachmentsTableData {\n fileName: string;\n fileType: string;\n fileSize: number;\n uploader?: UserSlimDtoModel | null;\n uploadedOn?: moment.Moment | null;\n status: FormAttachmentFileStatus;\n}\n\nexport class ExistingFormAttachmentFile extends AttachmentSlimDtoModel implements FormAttachmentsTableData {\n status: FormAttachmentFileStatus;\n\n url: string | null;\n\n get state(): FileAttachmentState {\n return (this.outdatedOn != null\n ? FileAttachmentState.OUTDATED\n : FileAttachmentState.DEFAULT\n );\n }\n\n protected readonly _canOutdateAttachment: boolean;\n\n constructor(\n attachmentId: string,\n name: string,\n type: string,\n size: number,\n url: string | null,\n uploader: UserSlimDtoModel | null,\n uploadedOn: moment.Moment | null,\n outdater: UserSlimDtoModel | null,\n outdatedOn: moment.Moment | null,\n outdatedComment: string | null,\n status: FormAttachmentFileStatus,\n questionId: number | null,\n metadata: MetadataModel,\n ) {\n super(\n attachmentId,\n DocumentType.Project, // Just set something\n name,\n type,\n size,\n uploader,\n uploadedOn || moment(),\n outdater,\n outdatedOn,\n outdatedComment,\n null, // projectId,\n null, // workPackageId,\n questionId,\n metadata,\n );\n\n this.url = url;\n this.status = (status != null ? status : FormAttachmentFileStatus.UPLOADED);\n\n this._canOutdateAttachment = !!(this.metadata.fields?.canOutdateAttachment);\n }\n\n canOutdateAttachment(): boolean {\n return this._canOutdateAttachment;\n }\n\n // eslint-disable-next-line complexity\n clone(overrides?: Partial>): ExistingFormAttachmentFile {\n // FIXME implement all overrides\n return new ExistingFormAttachmentFile(\n this.attachmentId,\n this.name,\n this.type,\n this.size,\n this.url,\n overrides?.uploader?.clone() ?? this.uploader?.clone() ?? null,\n overrides?.uploadedOn?.clone() ?? this.uploadedOn?.clone() ?? null,\n overrides?.outdater?.clone() ?? this.outdater?.clone() ?? null,\n overrides?.outdatedOn?.clone() ?? this.outdatedOn?.clone() ?? null,\n overrides?.outdatedComment ?? this.outdatedComment ?? null,\n overrides?.status ?? this.status,\n this.questionId,\n this.metadata.clone(),\n );\n }\n}\n\nexport class NewFormAttachmentFile implements FormAttachmentsTableData {\n /**\n * @deprecated\n */\n get fileName(): string { return this.name; }\n\n /**\n * @deprecated\n */\n get fileType(): string { return this.type; }\n\n /**\n * @deprecated\n */\n get fileSize(): number { return this.size; }\n\n /**\n * @deprecated\n */\n get fileLastModified(): number { return this.lastModified; }\n\n get uploadProgress(): number { return this._uploadProgress; }\n\n set uploadProgress(value: number) {\n this._uploadProgress = value;\n this._uploadProgressPercent = Math.round(value * 100);\n }\n\n get uploadProgressPercent(): number { return this._uploadProgressPercent; }\n\n get state(): FileAttachmentState { return FileAttachmentState.NEW; }\n\n private _uploadProgress: number = 0;\n\n private _uploadProgressPercent: number = 0;\n\n constructor(\n public file: File | null,\n public attachmentFile: AttachmentCreateRequestModel | null,\n readonly name: string,\n readonly type: string,\n readonly size: number,\n readonly lastModified: number,\n public uploader: UserSlimDtoModel | null = null,\n public uploadedOn: moment.Moment | null = null,\n public outdater: UserSlimDtoModel | null = null,\n public outdatedOn: moment.Moment | null = null,\n public outdatedComment: string | null = null,\n public status: FormAttachmentFileStatus = FormAttachmentFileStatus.PENDING,\n ) {\n }\n\n canOutdateAttachment(): boolean {\n return false;\n }\n}\n\nexport type FormAttachmentFile = NewFormAttachmentFile | ExistingFormAttachmentFile;\n\ntype AttachmentListTableColumnNames = 'fileName'\n| 'fileType'\n| 'fileSize'\n| 'uploadedOn'\n| 'uploader'\n| 'markAsOutdated'\n| 'uploadedIndication'\n| 'actions';\n\n@Component({\n selector: 'collapp-form-attachments',\n templateUrl: './form-attachments.component.html',\n styleUrls: ['./form-attachments.component.scss'],\n providers: [{ provide: MatFormFieldControl, useExisting: FormAttachmentsComponent }],\n standalone: false\n})\nexport class FormAttachmentsComponent\n implements MatFormFieldControl,\n ControlValueAccessor,\n DoCheck,\n OnInit,\n OnDestroy {\n static nextId: number = 0;\n\n // === MatFormFieldControl ===\n\n /** The value of the control. */\n get value(): AttachmentCreateRequestModel[] {\n return this._newFiles;\n }\n\n @Input()\n set value(value: AttachmentCreateRequestModel[]) {\n this.writeValue(value);\n }\n\n /**\n * Shows a loading indicator if it is set to true\n */\n @Input()\n loading: boolean = false;\n\n /**\n * Stream that emits whenever the state of the control changes such that the parent `MatFormField`\n * needs to run change detection.\n *\n * Already set through errorState mixin.\n */\n // public stateChanges: Subject = new Subject();\n\n /** The element ID for this control. */\n @Input()\n id: string = `collapp-form-attachments-${FormAttachmentsComponent.nextId++}`; // eslint-disable-line no-plusplus\n\n @HostBinding('id')\n get hostId(): string {\n return this.id;\n }\n\n /** The placeholder for this control. */\n get placeholder(): string { return this._placeholder; }\n\n @Input()\n set placeholder(value: string) {\n if (this._placeholder !== value) {\n this._placeholder = value;\n this.stateChanges.next();\n }\n }\n\n /**\n * Whether the input is currently in an autofilled state. If property is not present on the\n * control it is assumed to be false.\n */\n @Input()\n autofilled: boolean = false;\n\n // === /MatFormFieldControl ===\n\n /** An object used to control when error messages are shown. */\n @Input()\n get errorStateMatcher(): ErrorStateMatcher {\n return this._errorStateTracker.matcher;\n }\n set errorStateMatcher(value: ErrorStateMatcher) {\n this._errorStateTracker.matcher = value;\n }\n\n // === MatFormFieldControl additional custom ===\n\n @HostBinding('attr.aria-describedby')\n describedBy: string = '';\n\n @Input() allowDownloadAll: boolean = false;\n\n /**\n * Triggers when file is dropped in zone\n * @type {EventEmitter}\n */\n @Output()\n readonly dropped: EventEmitter = new EventEmitter();\n\n /**\n * Triggers when file has completed uploading to the blob storage\n * @type {EventEmitter}\n */\n @Output()\n readonly uploadComplete: EventEmitter = new EventEmitter();\n\n /**\n * Triggers when file is marked as removed\n * @type {EventEmitter}\n */\n @Output()\n readonly markedForRemoval: EventEmitter = new EventEmitter();\n\n /**\n * Triggers when the file isn't marked as removed anymore\n * @type {EventEmitter}\n */\n @Output()\n readonly unmarkedForRemoval: EventEmitter = new EventEmitter();\n\n @Output()\n readonly removedFiles: EventEmitter = new EventEmitter();\n\n /**\n * Triggers when a file is outdated\n */\n @Output()\n readonly outdatedAttachment: EventEmitter = new EventEmitter();\n\n @ViewChild(MatSort, { static: true }) sort!: MatSort;\n\n /** Gets the NgControl for this control. */\n // public ngControl: NgControl | null;\n\n /** Whether the control is focused. */\n focused: boolean = false;\n\n /** Whether the control is empty. */\n get empty(): boolean {\n return (this._newFiles.length === 0);\n }\n\n /** Whether the `MatFormField` label should try to float. */\n @HostBinding('class.mat-form-field-should-float')\n get shouldLabelFloat(): boolean {\n return true;\n }\n\n /** Whether the control is required. */\n get required(): boolean { return this._required; }\n\n @Input()\n set required(value: boolean) {\n this._required = coerceBooleanProperty(value);\n }\n\n /** Whether the control is disabled. */\n get disabled(): boolean { return this._disabled; }\n\n @Input()\n set disabled(value: boolean) {\n this.setDisabledState(coerceBooleanProperty(value));\n this.stateChanges.next();\n }\n\n /** Whether the outdating functionality should be disabled */\n get attachmentOutdatingDisabled(): boolean { return this._attachmentsOutdatingDisabled; }\n\n @Input()\n set attachmentOutdatingDisabled(allow: boolean) {\n this._attachmentsOutdatingDisabled = coerceBooleanProperty(allow);\n }\n\n /** To disallow the removing of the existing */\n get existingAttachmentsRemovalDisabled(): boolean { return this._existingAttachmentsRemovalDisabled; }\n\n @Input()\n set existingAttachmentsRemovalDisabled(allow: boolean) {\n this._existingAttachmentsRemovalDisabled = coerceBooleanProperty(allow);\n }\n\n get hideFilters(): boolean { return this._hideFilters; }\n\n @Input()\n set hideFilters(value: boolean) {\n this._hideFilters = coerceBooleanProperty(value);\n }\n\n /**\n * Whether the control is in an error state.\n *\n * Already set through errorState mixin.\n */\n // public errorState: boolean;\n\n /**\n * An optional name for the control type that can be used to distinguish `mat-form-field` elements\n * based on their control type. The form field will add a class,\n * `mat-form-field-type-{{controlType}}` to its root element.\n */\n controlType: string = 'attachments';\n\n // === /MatFormFieldControl additional custom ===\n\n // === custom controls ===\n\n get existingFiles(): ExistingFormAttachmentFile[] { return this._existingAttachmentsSubject$.value; }\n\n @Input()\n set existingFiles(value: ExistingFormAttachmentFile[]) {\n const existingFiles = (value || []).map((item) => new ExistingFormAttachmentFile(\n item.attachmentId,\n item.fileName,\n item.fileType,\n item.fileSize,\n item.url,\n (item.uploader ? item.uploader.clone() : null),\n (item.uploadedOn != null ? item.uploadedOn.clone() : null),\n (item.outdater != null ? item.outdater.clone() : null),\n (item.outdatedOn != null ? item.outdatedOn.clone() : null),\n item.outdatedComment,\n FormAttachmentFileStatus.UPLOADED,\n // TODO: This a temporary quick fix to allow to jump to questions.\n item.questionId || null,\n item.metadata.clone(),\n ));\n\n this._existingAttachmentsSubject$.next(existingFiles);\n }\n\n get allowDuplicates(): boolean { return this._allowDuplicates; }\n\n @Input()\n set allowDuplicates(value: boolean) {\n this._allowDuplicates = coerceBooleanProperty(value);\n }\n\n get combinedFileSize(): number { return this._combinedFileSize; }\n\n get uploader(): UserSlimDtoModel | null { return this._uploader; }\n\n @Input()\n set uploader(value: UserSlimDtoModel | null) {\n this._uploader = value;\n }\n\n get uploadsPending(): boolean { return this.newAttachmentUploads.size > 0; }\n\n dataSource: MatTableDataSource = new MatTableDataSource();\n\n readonly displayedColumns: readonly AttachmentListTableColumnNames[] = [\n 'fileName',\n 'fileType',\n 'fileSize',\n 'uploadedOn',\n 'uploader',\n 'markAsOutdated',\n 'uploadedIndication',\n 'actions',\n ];\n\n /**\n * Be aware that you should check sorting of the filter columns when changing the displayed columns!\n */\n readonly displayedFilterColumns: readonly string[] = [\n 'fileNameFilter',\n 'fileTypeFilter',\n 'fileSizeFilter',\n 'uploadedOnFilter',\n 'uploaderFilter',\n 'markAsOutdatedFilter',\n ];\n\n attachmentStatus: typeof FormAttachmentFileStatus = FormAttachmentFileStatus;\n\n get existingAttachmentsCount(): number { return this._existingAttachmentsSubject$.value.length; }\n\n get newAttachmentsCount(): number { return this._newAttachmentsSubject$.value.length; }\n\n get allAttachmentsCount(): number { return this.existingAttachmentsCount + this.newAttachmentsCount; }\n\n get filteredAttachmentsCount(): number { return this.dataSource.filteredData.length; }\n\n attachmentListFilterForm: TypedFormGroup;\n\n get outdatedFilterControl(): UntypedFormControl {\n return this.attachmentListFilterForm.controls.outdater as UntypedFormControl;\n }\n\n outdatedStateList: readonly string[] = [\n ATTACHMENT_STATE_OUTDATED,\n ATTACHMENT_STATE_CURRENT,\n ATTACHMENT_STATE_ALL,\n ];\n\n newAttachments$: Observable;\n\n existingAttachments$: Observable;\n\n allAttachments$: Observable;\n\n filteredAttachments$: Observable;\n\n // === /custom controls ===\n\n private _errorStateTracker: _ErrorStateTracker;\n\n private _placeholder: string = '';\n\n private _required: boolean = false;\n\n private _disabled: boolean = false;\n\n private _attachmentsOutdatingDisabled: boolean = false;\n\n private _existingAttachmentsRemovalDisabled: boolean = false;\n // === custom controls ===\n\n private _allowDuplicates: boolean = false;\n\n private _hideFilters: boolean = true;\n\n private _combinedFileSize: number = 0;\n\n private _uploader: UserSlimDtoModel | null = null;\n\n private _newFiles: AttachmentCreateRequestModel[] = [];\n\n private newAttachmentUploads: Map = new Map();\n\n private existingAttachmentUrlRenewals: Map = new Map();\n\n private _filtersChange$: Observable>;\n\n private _newAttachmentsSubject$: BehaviorSubject = new BehaviorSubject([]);\n\n private _existingAttachmentsSubject$: BehaviorSubject = new BehaviorSubject([]);\n\n /** Dialog for outdating an attachment */\n private outdateAttachmentDialogRef: MatDialogRef | null = null;\n\n private destroyed$: Subject = new Subject();\n\n /**\n * Emits whenever the component state changes and should cause the parent\n * form-field to update. Implemented as part of `MatFormFieldControl`.\n * @docs-private\n */\n readonly stateChanges = new Subject();\n\n /** Whether the chip grid is in an error state. */\n get errorState(): boolean {\n return this._errorStateTracker.errorState;\n }\n set errorState(value: boolean) {\n this._errorStateTracker.errorState = value;\n }\n\n // === /custom controls ===\n\n /**\n * @see https://angular.io/api/forms/ControlValueAccessor\n */\n // eslint-disable-next-line max-lines-per-function\n constructor(\n @Optional() @Self() public ngControl: NgControl,\n @Optional() _parentForm: NgForm,\n @Optional() _parentFormGroup: FormGroupDirective,\n _defaultErrorStateMatcher: ErrorStateMatcher,\n public dialog: MatDialog,\n private readonly activatedRoute: ActivatedRoute,\n private readonly router: Router,\n private readonly projectService: ProjectService,\n private readonly azureBlobService: AzureBlobService,\n private readonly errorHandlerService: ErrorHandlerService,\n private readonly dateAdapter: CollappDateAdapter,\n private readonly momentPipe: MomentPipe,\n private readonly _formBuilder: UntypedFormBuilder,\n private readonly store: Store\n ) {\n if (this.ngControl != null) {\n this.ngControl.valueAccessor = this;\n }\n\n this._errorStateTracker = new _ErrorStateTracker(\n _defaultErrorStateMatcher,\n ngControl,\n _parentFormGroup,\n _parentForm,\n this.stateChanges,\n );\n\n this.dataSource.sortingDataAccessor = (\n item: FormAttachmentFile,\n property: AttachmentListTableColumnNames,\n ): string | number => {\n switch (property) {\n case 'fileName':\n return item.fileName.toLowerCase();\n case 'fileType':\n // UpperCase File Extensions will be not proper sorted.\n return getFileExtensionFromFilename(item.fileName);\n case 'fileSize':\n return item.fileSize;\n case 'uploadedIndication':\n case 'uploadedOn':\n return (item.uploadedOn ? +item.uploadedOn : 0);\n case 'uploader':\n return (item.uploader ? item.uploader.fullName : '');\n // 'markAsOutdated' aka 'status'\n case 'markAsOutdated':\n if (this.isNewFormAttachmentFile(item)) {\n return 2;\n }\n\n if (this.isAttachmentOutdated(item)) {\n return 0;\n }\n\n return 1;\n default:\n return 0;\n }\n };\n\n const formBuilder = _formBuilder as TypedFormBuilder;\n\n this.attachmentListFilterForm = formBuilder\n .group(\n attachmentsListColumnsWithFilters\n .reduce((obj: any, value: string) => ({ ...obj, [value]: [''] }), {}),\n );\n\n this.existingAttachments$ = this._existingAttachmentsSubject$.asObservable();\n this.newAttachments$ = this._newAttachmentsSubject$.asObservable();\n\n /*\n * All files of the view (existing and new) as a shared observable.\n */\n this.allAttachments$ = combineLatest([\n this.existingAttachments$,\n this.newAttachments$,\n ])\n .pipe(\n map(([existingFiles, newFiles]) => [\n ...existingFiles,\n ...newFiles,\n ]),\n shareReplay({\n bufferSize: 1,\n refCount: true,\n }),\n );\n\n /*\n * In case the filter form changes, we normalize the filter values for future use, i.e. removing\n * empty values.\n * Do not directly listen to the filter form value changes but use this observable here.\n * No debounce time has been added here since this is only used when persisting the\n * filter settings in `ngOnInit()`.\n */\n this._filtersChange$ = this.attachmentListFilterForm.valueChanges\n .pipe(\n map((filterForm: Partial) => this.sanitizeFilters(filterForm)),\n takeUntil(this.destroyed$),\n );\n\n /*\n * The filtered files are all files (existing and new) with the filters from the filter form applied.\n */\n this.filteredAttachments$ = merge(\n this.allAttachments$,\n this._filtersChange$,\n )\n .pipe(\n map(() => this.getColumnFilters()),\n withLatestFrom(this.allAttachments$),\n map(([filters, allFiles]) => allFiles.filter((file) => {\n let included = true;\n\n if (filters.outdater) {\n switch (filters.outdater) {\n case ATTACHMENT_STATE_OUTDATED:\n included = file.outdater != null;\n break;\n case ATTACHMENT_STATE_CURRENT:\n included = file.outdater == null;\n break;\n default:\n break;\n }\n }\n\n return included;\n })),\n shareReplay({\n bufferSize: 1,\n refCount: true,\n }),\n );\n }\n\n updateErrorState(): void {\n this._errorStateTracker.updateErrorState();\n }\n\n ngDoCheck(): void {\n if (this.ngControl) {\n // We need to re-evaluate this on every change detection cycle, because there are some\n // error triggers that we can't subscribe to (e.g. parent form submissions). This means\n // that whatever logic is in here has to be super lean or we risk destroying the performance.\n this.updateErrorState();\n }\n }\n\n // eslint-disable-next-line max-lines-per-function\n ngOnInit(): void {\n const options = this.store.selectSnapshot(AttachmentListSelectors.options);\n this.sort.active = options.sortColumn;\n this.sort.direction = options.sortDirection;\n\n this.dataSource.sort = this.sort;\n this.attachmentListFilterForm.patchValue(options.columnFilters);\n\n /*\n * If the existing files change, we need to do some housekeeping with our subscriptions\n * for generating the Azure Blob Storage file download URLs since they can expire and / or\n * we don't want to keep subscriptions for files that have been removed.\n */\n this.existingAttachments$\n .pipe(\n takeUntil(this.destroyed$),\n )\n .subscribe((existingFiles) => {\n const urlRenewalAttachmentsToBeRemoved: Set = new Set(\n this.existingAttachmentUrlRenewals ? this.existingAttachmentUrlRenewals.keys() : [],\n );\n\n existingFiles.forEach((existingFile) => {\n if (urlRenewalAttachmentsToBeRemoved.has(existingFile)) {\n // Remove previously existing attachment renewals, leaving only obsolete attachments.\n urlRenewalAttachmentsToBeRemoved.delete(existingFile);\n } else {\n // Fetch the access restricted attachment url and\n // keep refreshing it before its `validUntil` is reached.\n const subscription = this.getAttachmentDownloadUrlRenewalSubscription(existingFile);\n this.existingAttachmentUrlRenewals.set(existingFile, subscription);\n }\n });\n\n // Everything left in `urlRenewalAttachmentsToBeRemoved` can be removed.\n urlRenewalAttachmentsToBeRemoved.forEach((attachment) => {\n const subscription = this.existingAttachmentUrlRenewals.get(attachment);\n if (subscription) {\n subscription.unsubscribe();\n }\n this.existingAttachmentUrlRenewals.delete(attachment);\n });\n });\n\n /*\n * If a new attachment file upload completed, refresh\n * the value of this control.\n */\n merge(\n this.newAttachments$,\n this.uploadComplete,\n )\n .pipe(\n withLatestFrom(this.newAttachments$),\n map(([_, files]) => files\n .map((file) => file.attachmentFile)\n .filter((file): file is AttachmentCreateRequestModel => file != null)),\n takeUntil(this.destroyed$),\n )\n .subscribe((files) => {\n if (files.length > 0) {\n this._newFiles = files;\n this._onChange(this.value);\n }\n });\n\n /*\n * If the files that should be displayed in the view change, we need to\n * 1) set the data source of the table to the current list of files\n * 2) re-calculate the total file size.\n */\n this.filteredAttachments$\n .pipe(\n takeUntil(this.destroyed$),\n )\n .subscribe((files) => {\n this.dataSource.data = [...files];\n this.calculateTotalFileSize(files);\n // this._onChange(this.value);\n });\n\n /*\n * Automatically trigger the `removedFiles` EventEmitter when a file has been marked or\n * unmarked for removal.\n */\n merge(\n this.markedForRemoval,\n this.unmarkedForRemoval,\n )\n .pipe(\n withLatestFrom(this.existingAttachments$),\n map(([_, existingFiles]) => existingFiles.filter((file) => file.status === FormAttachmentFileStatus.REMOVED)),\n takeUntil(this.destroyed$),\n )\n .subscribe((removedFiles) => {\n this.removedFiles.emit(removedFiles);\n });\n\n /*\n * In case the user settings for the attachment list change (filters, sorting), the\n * new settings should be persisted.\n */\n merge(\n this._filtersChange$,\n this.sort.sortChange,\n )\n .pipe(\n debounceTime(LIST_COLUMNS_FILTER_CHANGE_DEBOUNCE_TIME),\n map(() => {\n const columnFilters = this.getColumnFilters();\n const sortColumn = this.sort.active;\n const sortDirection = this.sort.direction;\n\n return {\n columnFilters,\n sortColumn,\n sortDirection,\n };\n }),\n takeUntil(this.destroyed$),\n )\n .subscribe(({ columnFilters, sortColumn, sortDirection }) => {\n // Fire & forget\n // eslint-disable-next-line rxjs/no-ignored-observable\n this.store.dispatch(new SaveAttachmentListOptions({\n pageIndex: 0,\n pageSize: 0,\n columnFilters,\n sortColumn,\n sortDirection,\n }));\n });\n }\n\n ngOnDestroy(): void {\n this._existingAttachmentsSubject$.complete();\n this._newAttachmentsSubject$.complete();\n this.stateChanges.complete();\n this.destroyed$.next();\n this.destroyed$.complete();\n }\n\n // === ControlValueAccessor ===\n\n /**\n * Writes a new value to the element.\n *\n * This method is called by the forms API to write to the view when programmatic\n * changes from model to view are requested.\n *\n * @param obj The new value for the element\n */\n // eslint-disable-next-line max-lines-per-function\n writeValue(\n obj: AttachmentCreateRequestModel\n | AttachmentCreateRequestModel[]\n | AttachmentSlimDtoModel\n | AttachmentSlimDtoModel[],\n ): void {\n const wasPristine = (this.ngControl ? this.ngControl.pristine : true);\n const files = (Array.isArray(obj) ? obj : [obj]);\n\n const newFormAttachmentFiles: NewFormAttachmentFile[] = [];\n const existingFormAttachmentFiles: ExistingFormAttachmentFile[] = [];\n\n let unmappableFilesCount = 0;\n\n files.forEach((file) => {\n if (file instanceof AttachmentCreateRequestModel) {\n // I don't know why the obj can be such a instance\n return;\n }\n if (file instanceof AttachmentSlimDtoModel) {\n existingFormAttachmentFiles.push(new ExistingFormAttachmentFile(\n file.attachmentId,\n file.name,\n file.type,\n file.size,\n null,\n (file.uploader ? file.uploader.clone() : null),\n (file.uploadedOn ? file.uploadedOn.clone() : null),\n null,\n null,\n null,\n FormAttachmentFileStatus.UPLOADED,\n // TODO: This a temporary quick fix to allow to jump to questions.\n file.questionId,\n file.metadata.clone(),\n ));\n } else {\n unmappableFilesCount += 1;\n }\n });\n\n if (existingFormAttachmentFiles.length > 0) {\n this._existingAttachmentsSubject$.next(existingFormAttachmentFiles);\n }\n this._newAttachmentsSubject$.next(newFormAttachmentFiles);\n\n // We 'reset' the value and notify the parent form of the changes while still keeping the formControl pristine.\n if (\n this.ngControl\n && wasPristine\n && (\n newFormAttachmentFiles.length > 0\n || existingFormAttachmentFiles.length > 0\n || unmappableFilesCount > 0\n )\n ) {\n this.ngControl.reset(this.value);\n }\n\n this.stateChanges.next();\n }\n\n /**\n * Registers a callback function that is called when the control's value\n * changes in the UI.\n *\n * This method is called by the forms API on initialization to update the form\n * model when values propagate from the view to the model.\n *\n * @param fn The callback function to register\n */\n registerOnChange(fn: (_: any) => void): void {\n this._onChange = fn;\n }\n\n /**\n * Registers a callback function is called by the forms API on initialization\n * to update the form model on blur.\n *\n * @param fn The callback function to register\n */\n registerOnTouched(fn: any): void {\n this._onTouched = fn;\n }\n\n /**\n * Function that is called by the forms API when the control status changes to\n * or from 'DISABLED'. Depending on the status, it enables or disables the\n * appropriate DOM element.\n *\n * @param isDisabled The disabled status to set on the element\n */\n setDisabledState(isDisabled: boolean): void {\n this._disabled = isDisabled;\n }\n\n // === /ControlValueAccessor ===\n\n // === MatFormFieldControl ===\n\n setDescribedByIds(ids: string[]): void {\n this.describedBy = ids.join(' ');\n }\n\n onContainerClick(): void {\n if (!this.disabled && !this.focused) {\n // this.focused = true;\n }\n }\n\n // === /MatFormFieldControl ===\n\n // === Binding to ngx-file-drop ===\n\n /**\n * Creates an attachment out of the dropped file\n * and adds it to the list of to-be-uploaded files (FormData)\n */\n onDrop(droppedFiles: NgxFileDropEntry[]): void {\n const observables: AsyncSubject[] = [];\n\n droppedFiles.forEach((droppedFile) => {\n if (droppedFile.fileEntry.isFile) {\n const fileEntry = droppedFile.fileEntry as FileSystemFileEntry;\n const subject$ = new AsyncSubject();\n observables.push(subject$);\n fileEntry.file((file: File) => {\n subject$.next(file);\n subject$.complete();\n });\n }\n });\n\n concat(...observables)\n .pipe(\n finalize(() => {\n this.startNewFileUploads();\n // Set status column filter to \"Active\" when a file is added\n this.attachmentListFilterForm.patchValue({ outdater: ATTACHMENT_STATE_CURRENT });\n }),\n takeUntil(this.destroyed$),\n )\n .subscribe(\n (file) => {\n this.addFile(file);\n },\n );\n }\n\n // === /Binding to ngx-file-drop ===\n\n /**\n * TODO: This a temporary quick fix to allow to jump to questions.\n * It is deprecated and will be replaced/refactored with: https://yooapps.jira.com/browse/COLLAPP-1309\n */\n onQuestionClick(questionId: number): void {\n this.router.navigate(\n [],\n {\n relativeTo: this.activatedRoute,\n queryParams: {\n tab: 'questions',\n questionId,\n },\n queryParamsHandling: 'merge',\n },\n );\n }\n\n getAttachmentTooltip(attachment: FormAttachmentFile): string | null {\n if (this.isAttachmentOutdated(attachment)) {\n return `Marked as outdated by ${formatCollAppUser(attachment.outdater)} on ${this.momentPipe.transform(attachment.outdatedOn)}:\\n${attachment.outdatedComment}`;\n }\n\n return null;\n }\n\n isNewFormAttachmentFile(file: any): file is NewFormAttachmentFile {\n return (file instanceof NewFormAttachmentFile);\n }\n\n isExistingFormAttachmentFile(file: any): file is ExistingFormAttachmentFile {\n return (file instanceof ExistingFormAttachmentFile);\n }\n\n isAttachmentRemoved(attachment: FormAttachmentFile): boolean {\n return (attachment.status === FormAttachmentFileStatus.REMOVED);\n }\n\n isAttachmentOutdated(attachment: FormAttachmentFile): boolean {\n return (attachment.outdatedOn != null);\n }\n\n isAttachmentOutdateable(attachment: FormAttachmentFile | ExistingFormAttachmentFile): boolean {\n return this.isAttachmentDownloadable(attachment)\n && !this.isAttachmentOutdated(attachment)\n && attachment.canOutdateAttachment()\n && !this.attachmentOutdatingDisabled;\n }\n\n isAttachmentDownloadable(attachment: FormAttachmentFile): boolean {\n return this.isExistingFormAttachmentFile(attachment);\n }\n\n isAttachmentUploading(attachment: FormAttachmentFile): boolean {\n return (\n attachment.status === FormAttachmentFileStatus.UPLOADING\n );\n }\n\n isAttachmentResumable(attachment: FormAttachmentFile): boolean {\n return (\n this.isNewFormAttachmentFile(attachment)\n && (\n attachment.status === FormAttachmentFileStatus.ERROR\n || attachment.status === FormAttachmentFileStatus.CANCELLED\n )\n );\n }\n\n isAttachmentRemovable(attachment: FormAttachmentFile): boolean {\n // If an attachment is new, it is removable.\n const newAttachmentIsRemovable = this.isNewFormAttachmentFile(attachment);\n\n // If an attachment exists, the ability to remove depends on the condition of removing existing attachments.\n const existingAttachmentIsNotRemovableByCondition = this.isExistingFormAttachmentFile(attachment)\n && !this.existingAttachmentsRemovalDisabled;\n\n return (\n !this.isAttachmentOutdated(attachment)\n && (\n attachment.status === FormAttachmentFileStatus.PENDING\n || attachment.status === FormAttachmentFileStatus.UPLOADED\n || attachment.status === FormAttachmentFileStatus.ERROR\n || attachment.status === FormAttachmentFileStatus.CANCELLED\n )\n && (\n existingAttachmentIsNotRemovableByCondition || newAttachmentIsRemovable\n )\n );\n }\n\n isAttachmentRestorable(attachment: FormAttachmentFile): boolean {\n return (\n attachment.status === FormAttachmentFileStatus.REMOVED\n );\n }\n\n attachmentUploadProgressBackgroundPosition(attachment: FormAttachmentFile): string {\n if (this.isNewFormAttachmentFile(attachment)) {\n return `${(100 - (attachment.uploadProgress * 100)).toFixed(2)}% 0`;\n }\n\n return '0 0';\n }\n\n markForRemoval(file: FormAttachmentFile): void {\n if (this.isNewFormAttachmentFile(file)) {\n const newFiles = this._newAttachmentsSubject$.value\n .filter((formAttachmentFile) => formAttachmentFile !== file);\n this._newAttachmentsSubject$.next(newFiles);\n } else {\n // eslint-disable-next-line no-param-reassign\n file.status = FormAttachmentFileStatus.REMOVED;\n this.markedForRemoval.emit(file);\n }\n }\n\n cancelUpload(attachment: FormAttachmentFile): void {\n if (this.isNewFormAttachmentFile(attachment)) {\n const upload = this.newAttachmentUploads.get(attachment);\n if (upload) {\n upload.unsubscribe();\n this.newAttachmentUploads.delete(attachment);\n // eslint-disable-next-line no-param-reassign\n attachment.status = FormAttachmentFileStatus.CANCELLED;\n }\n }\n }\n\n retryUpload(attachment: FormAttachmentFile): void {\n if (this.isNewFormAttachmentFile(attachment)) {\n this.uploadFile(attachment);\n\n // this._onTouched();\n // The next onChange is required even if no new files have been added yet to inform the\n // form validation of changes.\n this._onChange(this.value);\n this.stateChanges.next();\n }\n }\n\n unmarkForRemoval(file: FormAttachmentFile): void {\n if (this.isExistingFormAttachmentFile(file)) {\n // eslint-disable-next-line no-param-reassign\n file.status = FormAttachmentFileStatus.UPLOADED;\n this.unmarkedForRemoval.emit(file);\n }\n }\n\n openOutdateAttachmentDialog(attachment: ExistingFormAttachmentFile): void {\n if (this.outdateAttachmentDialogRef) {\n return;\n }\n\n if (!attachment) {\n return;\n }\n\n /* if (!this.workPackage.canEditSubmitterSettings()) {\n return;\n } */\n\n const dialogRef = this.dialog.open(OutdateAttachmentDialogComponent, {\n width: '300px',\n data: {\n attachment,\n },\n disableClose: true,\n closeOnNavigation: false,\n autoFocus: false,\n panelClass: ['collapp-dialog', 'collapp-dialog--small'],\n });\n\n dialogRef\n .afterClosed()\n .pipe(\n finalize(() => {\n dialogRef.close();\n this.outdateAttachmentDialogRef = null;\n }),\n takeUntil(this.destroyed$),\n )\n .subscribe((result) => {\n if (result) {\n this.replaceExistingAttachment(attachment, result);\n this.outdatedAttachment.emit();\n }\n });\n\n this.outdateAttachmentDialogRef = dialogRef;\n }\n\n private replaceExistingAttachment(\n attachment: ExistingFormAttachmentFile,\n replacement: ExistingFormAttachmentFile,\n ): void {\n const existingAttachments = this._existingAttachmentsSubject$.value;\n const index = existingAttachments.indexOf(attachment);\n if (index !== -1) {\n existingAttachments.splice(index, 1, replacement);\n this._existingAttachmentsSubject$.next(existingAttachments);\n }\n }\n\n private addFile(file: File): boolean {\n if (\n file instanceof File\n && !(\n !this.allowDuplicates\n && this.isDuplicateFile(file)\n )\n ) {\n const newFile = { type: (file?.type || '')};\n\n if (file.type === '') {\n newFile.type = this.fallbackForEmptyMimeType(file);\n }\n\n const newAttachment = new NewFormAttachmentFile(\n file,\n null,\n file.name,\n newFile.type,\n file.size,\n file.lastModified,\n (this.uploader ? this.uploader.clone() : null),\n this.dateAdapter.today(),\n null,\n null,\n null,\n FormAttachmentFileStatus.PENDING,\n );\n this._newAttachmentsSubject$.next([...this._newAttachmentsSubject$.value, newAttachment]);\n\n return true;\n }\n\n return false;\n }\n\n private fallbackForEmptyMimeType(file: File): string {\n return getFileExtensionFromFilename(file.name);\n }\n\n private isDuplicateFile(file: File): boolean {\n return (this._newAttachmentsSubject$.value\n .find((newFormAttachment) => (\n newFormAttachment.fileSize === file.size\n && newFormAttachment.fileType === file.type\n && newFormAttachment.fileName === file.name\n && newFormAttachment.fileLastModified === file.lastModified\n )) != null);\n }\n\n private _onChange: (value: any) => void = () => {}; // eslint-disable-line @typescript-eslint/no-empty-function\n\n private _onTouched: () => void = () => {}; // eslint-disable-line @typescript-eslint/no-empty-function\n\n private startNewFileUploads(): void {\n const pendingFilesForUpload = this._newAttachmentsSubject$.value\n .filter((item) => item.status === FormAttachmentFileStatus.PENDING);\n\n pendingFilesForUpload.forEach((pendingFile) => {\n this.uploadFile(pendingFile);\n });\n\n // this._onTouched();\n // The next onChange is required even if no new files have been added yet to inform the form validation of changes.\n this._onChange(this.value);\n this.stateChanges.next();\n }\n\n // eslint-disable-next-line max-lines-per-function\n private uploadFile(attachment: NewFormAttachmentFile): void {\n /* eslint-disable no-param-reassign */\n\n if (\n attachment.status === FormAttachmentFileStatus.UPLOADING\n || attachment.status === FormAttachmentFileStatus.UPLOADED\n || attachment.file == null\n ) {\n return;\n }\n\n // Just making sure no previous subscription exists (will never happen but ¯\\_(ツ)_/¯ )\n const existingSubscription = this.newAttachmentUploads.get(attachment);\n if (existingSubscription) {\n existingSubscription.unsubscribe();\n }\n\n attachment.status = FormAttachmentFileStatus.UPLOADING;\n attachment.uploadProgress = 0;\n\n const subscription = this.azureBlobService.uploadFile$(attachment.file, BLOB_NAME_MAX_CHARS)\n .pipe(\n finalize(() => {\n subscription.unsubscribe();\n this.newAttachmentUploads.delete(attachment);\n this._onTouched();\n this._onChange(this.value);\n this.stateChanges.next();\n }),\n tap((event) => {\n if (event.type === HttpEventType.UploadProgress) {\n attachment.uploadProgress = (event.loaded / (event.total || 100)) || 0;\n }\n }),\n filter((event) => event.type === HttpEventType.Response),\n map((response: HttpResponse) => response.body!),\n takeUntil(this.destroyed$),\n )\n .subscribe(\n (response) => {\n attachment.uploadProgress = 1;\n attachment.status = FormAttachmentFileStatus.UPLOADED;\n\n // Limit fileName to ATTACHMENT_NAME_MAX_CHARS. Favour file extension over file name while truncating.\n if (response.fileName.length > ATTACHMENT_NAME_MAX_CHARS) {\n const info = pathInfo(response.fileName);\n if (info.extension.length > 0) {\n const extensionLength = Math.min(info.extension.length, ATTACHMENT_NAME_MAX_CHARS - 1);\n const basenameLength = Math.max(0, ATTACHMENT_NAME_MAX_CHARS - extensionLength - 1);\n response.fileName = `${info.basename.substr(0, basenameLength)}.${info.extension.substr(0, extensionLength)}`;\n } else {\n response.fileName = info.basename.substr(0, ATTACHMENT_NAME_MAX_CHARS);\n }\n }\n\n const attachmentFile = AttachmentCreateRequestModel.fromJSON(response);\n // Set attachmentFile so it can be removed later when removing the attachment.\n attachment.attachmentFile = attachmentFile;\n // Remove uploaded file since it's no longer needed. Might free up some resources.\n attachment.file = null;\n\n this.uploadComplete.emit(attachment);\n },\n () => {\n attachment.uploadProgress = 0;\n attachment.status = FormAttachmentFileStatus.ERROR;\n },\n );\n\n this.newAttachmentUploads.set(attachment, subscription);\n\n /* eslint-enable no-param-reassign */\n }\n\n private calculateTotalFileSize(formAttachmentFiles: readonly FormAttachmentFile[]): void {\n let totalFileSize = 0;\n\n formAttachmentFiles.forEach((file) => {\n totalFileSize += file.fileSize;\n });\n\n this._combinedFileSize = totalFileSize;\n }\n\n private getColumnFilters(): Partial {\n return this.sanitizeFilters(this.attachmentListFilterForm.value);\n }\n\n private sanitizeFilters(value: Partial): Partial {\n return Object.entries(value)\n .reduce((filters, [key, filterValue]) => {\n if (!isEmpty(filterValue)) {\n return { ...filters, [key]: filterValue };\n }\n\n return filters;\n }, {} as Partial);\n }\n\n /**\n * Creates a new subscription that fetches the access restricted attachment url and\n * keeps refreshing it before its `validUntil` is reached.\n */\n private getAttachmentDownloadUrlRenewalSubscription(file: ExistingFormAttachmentFile): Subscription {\n if (file.url) {\n return new Subscription();\n }\n\n return this.projectService\n .getDownloadUrl$(file.attachmentId)\n .pipe(\n expand((response) => {\n const now = moment();\n const duration = response.validUntil\n .diff(now);\n\n if (duration <= 0) {\n throw new Error('Invalid validity date given for attachment URL');\n }\n\n // Time in milliseconds, threshold of 87.5%\n // e.g. 2h * 0.875 = 1h 45m\n const dueTime = duration * 0.875;\n\n return timer(dueTime)\n .pipe(\n switchMap(() => this.projectService\n .getDownloadUrl$(file.attachmentId)),\n );\n }),\n takeUntil(this.destroyed$),\n )\n .subscribe(\n (response) => {\n // eslint-disable-next-line no-param-reassign\n file.url = response.url;\n },\n (error: unknown) => {\n this.errorHandlerService.handleError(error as Error, 'Could not fetch attachment URL');\n },\n );\n }\n}\n","import { Component, HostBinding, Input } from '@angular/core';\nimport { FileAttachmentState } from '../../form-attachments.component';\n\n@Component({\n selector: 'collapp-attachment-state-badge',\n templateUrl: './state-badge.component.html',\n styleUrls: ['./state-badge.component.scss'],\n standalone: false\n})\nexport class StateBadgeComponent {\n get state(): FileAttachmentState { return this._state; }\n\n @Input()\n set state(value: FileAttachmentState) {\n this._state = value;\n switch (value) {\n case FileAttachmentState.NEW: {\n this._stateLabel = 'New';\n break;\n }\n case FileAttachmentState.OUTDATED: {\n this._stateLabel = 'Outdated';\n break;\n }\n default: {\n this._stateLabel = '';\n break;\n }\n }\n }\n\n @HostBinding('class.state-badge--outdated')\n get isNew(): boolean { return this.state === FileAttachmentState.OUTDATED; }\n\n @HostBinding('class.state-badge--new')\n get isOutdated(): boolean { return this.state === FileAttachmentState.NEW; }\n\n get stateLabel(): string { return this._stateLabel; }\n\n private _state: FileAttachmentState = FileAttachmentState.DEFAULT;\n\n private _stateLabel: string = '';\n}\n","{{ stateLabel }}\n","import { Pipe, PipeTransform } from '@angular/core';\nimport { getFileExtensionFromFilename } from '../../helpers/file-type.utility';\n\n@Pipe({\n name: 'fileExtension',\n standalone: false\n})\nexport class FileExtensionPipe implements PipeTransform {\n transform(value: string): string {\n return getFileExtensionFromFilename(value);\n }\n}\n","import { Pipe, PipeTransform } from '@angular/core';\n\n/*\n * Convert bytes into largest possible unit.\n * Takes an precision argument that defaults to 2.\n * Usage:\n * bytes | fileSize:precision\n * Example:\n * {{ 1024 | fileSize}}\n * formats to: 1 KB\n *\n * https://gist.github.com/JonCatmull/ecdf9441aaa37336d9ae2c7f9cb7289a\n*/\n@Pipe({\n name: 'fileSize',\n standalone: false\n})\nexport class FileSizePipe implements PipeTransform {\n private units: string[] = [\n 'bytes',\n 'KB',\n 'MB',\n 'GB',\n 'TB',\n 'PB',\n ];\n\n transform(bytes: number = 0, precision: number = 2): string {\n let parsedBytes = bytes;\n\n if (Number.isNaN(parseFloat(String(parsedBytes))) || !Number.isFinite(parsedBytes)) { return '?'; }\n\n let unit = 0;\n\n while (parsedBytes >= 1024) {\n parsedBytes /= 1024;\n unit += 1;\n }\n\n return `${parsedBytes.toFixed(+precision)} ${this.units[unit]}`;\n }\n}\n","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { RouterModule } from '@angular/router';\nimport { provideHttpClient, withInterceptorsFromDi } from '@angular/common/http';\nimport { FormsModule, ReactiveFormsModule } from '@angular/forms';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatDialogModule } from '@angular/material/dialog';\nimport { MatFormFieldModule } from '@angular/material/form-field';\nimport { MatIconModule } from '@angular/material/icon';\nimport { MatInputModule } from '@angular/material/input';\nimport { MatSortModule } from '@angular/material/sort';\nimport { MatTableModule } from '@angular/material/table';\nimport { MatTooltipModule } from '@angular/material/tooltip';\nimport { NgxFileDropModule } from 'ngx-file-drop';\nimport { FlexLayoutModule } from '@angular/flex-layout';\nimport { CollappCommonModule } from '../../collapp-common';\nimport { SpinnerModule } from '../spinner';\n\nimport { FormAttachmentsComponent } from './form-attachments.component';\nimport { OutdateAttachmentDialogComponent } from './components/outdate-attachment-dialog';\nimport { CollappButtonModule } from '../collapp-button';\nimport { FormSectionModule } from '../form-section';\nimport { AlertModule } from '../../shared/alert/alert.module';\nimport { NgSelectMaterialModule } from '../ng-select-mat';\nimport { StateBadgeComponent } from './components/state-badge';\n\n@NgModule({\n exports: [FormAttachmentsComponent, StateBadgeComponent, OutdateAttachmentDialogComponent],\n declarations: [FormAttachmentsComponent, StateBadgeComponent, OutdateAttachmentDialogComponent],\n imports: [\n CommonModule,\n RouterModule,\n FormsModule,\n ReactiveFormsModule,\n MatButtonModule,\n MatFormFieldModule,\n MatInputModule,\n MatIconModule,\n MatSortModule,\n MatTableModule,\n MatTooltipModule,\n NgxFileDropModule,\n CollappCommonModule,\n SpinnerModule,\n MatDialogModule,\n CollappButtonModule,\n FormSectionModule,\n FlexLayoutModule,\n AlertModule,\n NgSelectMaterialModule,\n ],\n providers: [provideHttpClient(withInterceptorsFromDi())],\n})\nexport class FormAttachmentsModule {}\n","
\n

{{ label }}

\n
\n @if (actionLabel) {\n \n {{ actionLabel }}\n \n }\n
\n
\n \n
\n","import {\n ChangeDetectionStrategy,\n Component,\n EventEmitter,\n HostBinding,\n Input,\n Output,\n ViewEncapsulation,\n} from '@angular/core';\n\n@Component({\n selector: 'collapp-form-section',\n templateUrl: './form-section.component.html',\n styleUrls: [\n './form-section.component.scss',\n ],\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush,\n standalone: false\n})\nexport class FormSectionComponent {\n @Input() label: string = '';\n\n @Input() actionLabel: string | null = null;\n\n @Output()\n readonly actionClicked: EventEmitter = new EventEmitter();\n\n @HostBinding() class: string = 'form-section';\n\n @HostBinding('class.form-section--error')\n @Input()\n hasErrors: boolean = false;\n\n onActionClick(): void {\n this.actionClicked.emit();\n }\n}\n","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { CollappButtonModule } from '../collapp-button';\nimport { FormSectionComponent } from './form-section.component';\n\n@NgModule({\n imports: [\n CommonModule,\n CollappButtonModule,\n ],\n exports: [\n FormSectionComponent,\n ],\n declarations: [\n FormSectionComponent,\n ],\n})\nexport class FormSectionModule {\n}\n","import { ChangeDetectionStrategy, Component, Input } from '@angular/core';\n\n@Component({\n selector: 'ng-option-text',\n changeDetection: ChangeDetectionStrategy.OnPush,\n templateUrl: \"./ng-option-text.component.html\",\n standalone: false\n})\nexport class NgOptionTextComponent {\n @Input()\n tooltip: string | null = null;\n}\n","\n \n","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { FormsModule, ReactiveFormsModule } from '@angular/forms';\nimport { NgSelectModule } from '@ng-select/ng-select';\n\nimport { NgOptionTextComponent } from './ng-option-text.component';\nimport { NgSelectFormFieldControlDirective } from './ng-select.directive';\n\n@NgModule({\n imports: [\n CommonModule,\n FormsModule,\n ReactiveFormsModule,\n NgSelectModule,\n ],\n exports: [\n NgSelectModule,\n NgOptionTextComponent,\n NgSelectFormFieldControlDirective,\n ],\n declarations: [\n NgOptionTextComponent,\n NgSelectFormFieldControlDirective,\n ],\n})\nexport class NgSelectMaterialModule {\n}\n","import { MatFormFieldControl } from '@angular/material/form-field';\nimport {\n Directive,\n DoCheck,\n ElementRef,\n HostBinding,\n Input,\n OnDestroy,\n OnInit,\n Optional,\n Renderer2,\n Self,\n} from '@angular/core';\nimport {\n UntypedFormControl, FormGroupDirective, NgControl, NgForm,\n} from '@angular/forms';\nimport { Subject } from 'rxjs';\nimport { takeUntil } from 'rxjs/operators';\nimport { NgSelectComponent } from '@ng-select/ng-select';\nimport { coerceBooleanProperty } from '@angular/cdk/coercion';\nimport { ErrorStateMatcher } from '@angular/material/core';\nimport { MatDialogContent } from '@angular/material/dialog';\n\nexport class NgSelectErrorStateMatcher {\n constructor(private ngSelect: NgSelectFormFieldControlDirective) {}\n\n isErrorState(control: UntypedFormControl | null, form: FormGroupDirective | NgForm | null): boolean {\n if (!control) {\n return this.ngSelect.required && this.ngSelect.empty;\n }\n\n return !!(control && control.invalid && (control.touched || (form && form.submitted)));\n }\n}\n\n@Directive({\n selector: 'ng-select[ngSelectMat]',\n providers: [{ provide: MatFormFieldControl, useExisting: NgSelectFormFieldControlDirective }],\n standalone: false\n})\nexport class NgSelectFormFieldControlDirective implements MatFormFieldControl, OnInit, OnDestroy, DoCheck {\n static nextId: number = 0;\n\n @HostBinding()\n @Input()\n id: string = `ng-select-${NgSelectFormFieldControlDirective.nextId++}`; // eslint-disable-line no-plusplus\n\n @HostBinding('attr.aria-describedby')\n describedBy: string = '';\n\n get placeholder(): string {\n return this._placeholder;\n }\n\n @Input()\n set placeholder(value: string) {\n this._placeholder = value;\n this.stateChanges.next();\n }\n\n get required(): boolean { return this._required; }\n\n @Input()\n set required(value: boolean) {\n this._required = coerceBooleanProperty(value);\n this.stateChanges.next();\n }\n\n get disabled(): boolean { return this._disabled; }\n\n @Input()\n set disabled(value: boolean) {\n this._disabled = coerceBooleanProperty(value);\n this.stateChanges.next();\n }\n\n get value(): any {\n return this._value;\n }\n\n @Input()\n set value(v: any) {\n this._value = v;\n this.stateChanges.next();\n }\n\n @Input()\n errorStateMatcher!: ErrorStateMatcher;\n\n get empty(): boolean {\n return (this._value === undefined || this._value === null)\n || (this.host.multiple && this._value.length === 0);\n }\n\n errorState: boolean = false;\n\n // eslint-disable-next-line rxjs/no-exposed-subjects\n stateChanges: Subject = new Subject();\n\n focused: boolean = false;\n\n get shouldLabelFloat(): boolean {\n return this.focused || !this.empty || !!(this.host.searchTerm && this.host.searchTerm.length);\n }\n\n private _value: any;\n\n private _disabled: boolean = false;\n\n private _required: boolean = false;\n\n private _placeholder: string = '';\n\n private destroyed$: Subject = new Subject();\n\n private _defaultErrorStateMatcher: ErrorStateMatcher = new NgSelectErrorStateMatcher(this);\n\n constructor(\n private host: NgSelectComponent,\n @Optional() @Self() public ngControl: NgControl,\n @Optional() private _parentForm: NgForm,\n @Optional() private _parentFormGroup: FormGroupDirective,\n @Optional() private matDialogContent: MatDialogContent,\n private element: ElementRef,\n private renderer: Renderer2,\n ) {\n this.host.focusEvent\n .asObservable()\n .pipe(\n takeUntil(this.destroyed$),\n )\n .subscribe(() => {\n this.focused = true;\n this.stateChanges.next();\n });\n\n this.host.blurEvent\n .asObservable()\n .pipe(\n takeUntil(this.destroyed$),\n )\n .subscribe(() => {\n this.focused = false;\n this.stateChanges.next();\n });\n\n this.host.openEvent\n .asObservable()\n .pipe(takeUntil(this.destroyed$))\n .subscribe(() => {\n // Is necessary because the open event is fired,\n // before the drop down panel is rendered.\n setTimeout(() => {\n this.setFontSizeToDropDown();\n }, 0);\n });\n }\n\n // eslint-disable-next-line max-lines-per-function\n ngOnInit(): void {\n // Prevent scrolling in mat-dialog-content when ng-select dropdown is open\n if (this.matDialogContent) {\n // @TODO Check this piece of code on every update to Angular and ng-select!\n // (prevent scrolling in mat-dialog-content)\n const matDialogContentElement: HTMLDivElement | null = this.element.nativeElement.closest('.mat-dialog-content');\n if (matDialogContentElement) {\n this.host\n .openEvent\n .pipe(\n takeUntil(this.destroyed$),\n )\n .subscribe(() => {\n this.renderer.setStyle(matDialogContentElement, 'overflow', 'hidden');\n });\n this.host\n .closeEvent\n .pipe(\n takeUntil(this.destroyed$),\n )\n .subscribe(() => {\n this.renderer.removeStyle(matDialogContentElement, 'overflow');\n });\n }\n }\n\n if (this.ngControl) {\n this._value = this.ngControl.value;\n this._disabled = this.ngControl.disabled !== null ? this.ngControl.disabled : true;\n\n this.ngControl.statusChanges\n ?.pipe(\n takeUntil(this.destroyed$),\n )\n .subscribe((s) => {\n const disabled = s === 'DISABLED';\n if (disabled !== this._disabled) {\n this._disabled = disabled;\n this.stateChanges.next();\n }\n });\n\n this.ngControl.valueChanges\n ?.pipe(\n takeUntil(this.destroyed$),\n )\n .subscribe((v) => {\n this._value = v;\n this.stateChanges.next();\n });\n } else {\n this.host.changeEvent\n .asObservable()\n .pipe(\n takeUntil(this.destroyed$),\n )\n .subscribe((v) => {\n this._value = v;\n this.stateChanges.next();\n });\n }\n }\n\n ngOnDestroy(): void {\n this.destroyed$.next();\n this.destroyed$.complete();\n }\n\n ngDoCheck(): void {\n // We need to re-evaluate this on every change detection cycle, because there are some\n // error triggers that we can't subscribe to (e.g. parent form submissions). This means\n // that whatever logic is in here has to be super lean or we risk destroying the performance.\n this.updateErrorState();\n }\n\n updateErrorState(): void {\n const oldState = this.errorState;\n const parent = this._parentFormGroup || this._parentForm;\n const matcher = this.errorStateMatcher || this._defaultErrorStateMatcher;\n const control = this.ngControl ? this.ngControl.control as UntypedFormControl : null;\n const newState = matcher.isErrorState(control, parent);\n\n if (newState !== oldState) {\n this.errorState = newState;\n this.stateChanges.next();\n }\n }\n\n setDescribedByIds(ids: string[]): void {\n if (ids) {\n this.describedBy = ids.join(' ');\n }\n }\n\n onContainerClick(event: MouseEvent): void {\n const target = event.target as HTMLElement;\n if (target.classList.contains('mat-form-field-infix')) {\n this.host.focus();\n this.host.open();\n }\n }\n\n /**\n * Ensures that font size is not lost, if dropdown panel is\n * appended outside of the ng-select e.g. body.\n */\n private setFontSizeToDropDown(): void {\n const { element } = this.host;\n const computedStyles = window.getComputedStyle(element);\n const { fontSize } = computedStyles;\n const panel = this.host.dropdownPanel;\n\n if (panel) {\n const domElem = panel.contentElementRef.nativeElement;\n domElem.style.fontSize = fontSize;\n }\n }\n}\n","import { Component, Inject, ViewEncapsulation } from '@angular/core';\nimport { TOAST_DATA } from '../../shared/toasty';\n\n@Component({\n templateUrl: './time-zone-notification.component.html',\n styleUrls: ['./time-zone-notification.component.scss'],\n encapsulation: ViewEncapsulation.None,\n standalone: false\n})\nexport class TimeZoneToastyComponent {\n constructor(\n @Inject(TOAST_DATA) public data: { timeZoneLabel: string },\n ) {\n }\n}\n","
\n Your computer's time zone does not appear to match your CollApp time zone preference of {{data.timeZoneLabel}}.
\n Update your preference\n
\n","\n \n
\n \n
\n
\n \n @if (simple) {\n {{ items.length }} selected\n }\n @if (!simple) {\n @for (item of items; track userTrackByFn($index, item)) {\n
\n
\n \n
\n
×
\n
\n }\n }\n
\n \n \n \n \n @if (listInitialized) {\n @if (localOnly && numberOfResults <= numberOfMaxTotalResults) {\n Displaying {{numberOfResults}} of {{numberOfMaxTotalResults}} available {{ type === 'user' ? 'users' : 'resources' }}\n } @else {\n Displaying {{numberOfResults}} filtered {{ type === 'user' ? 'users' : 'resources' }}\n }\n }\n \n\n","/* eslint-disable max-classes-per-file */\n/* eslint-disable @angular-eslint/no-conflicting-lifecycle */\nimport {\n AfterViewInit,\n Attribute,\n ChangeDetectionStrategy,\n Component,\n DoCheck,\n ElementRef,\n HostBinding,\n Input,\n OnChanges,\n OnDestroy,\n OnInit,\n Optional,\n Self,\n SimpleChanges,\n ViewChild,\n ViewEncapsulation,\n} from '@angular/core';\nimport { coerceBooleanProperty } from '@angular/cdk/coercion';\nimport {\n ControlValueAccessor, UntypedFormControl, FormGroupDirective, NgControl, NgForm,\n} from '@angular/forms';\nimport {\n ErrorStateMatcher,\n _ErrorStateTracker,\n} from '@angular/material/core';\nimport { MatFormFieldControl } from '@angular/material/form-field';\nimport {\n BehaviorSubject, merge, Observable, Subject,\n} from 'rxjs';\nimport {\n debounceTime,\n distinctUntilChanged,\n filter,\n map,\n mapTo,\n share,\n switchMap,\n take,\n takeUntil,\n tap,\n} from 'rxjs/operators';\nimport { NgSelectComponent } from '@ng-select/ng-select';\nimport { UserListViewResponseItemModel } from '../../api/models/dtos/user-list-view-response-item.dto.model';\nimport { UserDtoModel } from '../../api/models/dtos/user.dto.model';\nimport { UserService } from '../../api/services/user.service';\nimport { CompareWithUtility } from '../../helpers/compare-with.utility';\n\nimport { DEBOUNCE_INPUT_CHANGE_TIME_SMALL } from '../../shared/constants';\nimport { UserSlimDtoModel } from '../../api/models/dtos/user-slim.dto.model';\nimport { Unit } from '../../models/unit.interface';\nimport { BasicUser } from '../../models/user.interface';\n\nimport { ErrorHandlerService } from '../../services/error-handler.service';\nimport { UnitPlanningUserListViewResponseModel } from '../../api/models/responses/unit-planning-user-list-view.response.model';\nimport { UserListViewResponseModel } from '../../api/models/responses/user-list-view.response.model';\nimport { UnitPlanningResourceDtoModel } from '../../api/models/dtos/unit-planning-resource.dto.model';\n\ntype UserObject = UserDtoModel | UserListViewResponseItemModel | UserSlimDtoModel | UnitPlanningResourceDtoModel;\n\n@Component({\n selector: 'collapp-people-select',\n exportAs: 'collappPeopleSelect',\n templateUrl: './people-select.component.html',\n styleUrls: ['./people-select.component.scss'],\n providers: [\n { provide: MatFormFieldControl, useExisting: PeopleSelectComponent },\n ],\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush,\n standalone: false\n})\nexport class PeopleSelectComponent\n implements OnInit, AfterViewInit, OnDestroy, DoCheck, OnChanges, ControlValueAccessor,\n MatFormFieldControl {\n static nextId: number = 0;\n\n @HostBinding('class.collapp-people-select')\n readonly peopleSelectClass: boolean = true;\n\n // === MatFormFieldControl ===\n\n @Input()\n tabIndex: number = 0;\n\n @Input()\n disabled: boolean = false;\n\n @Input()\n disableRipple: boolean = false;\n\n /** The value of the control. */\n get value(): T | T[] | null {\n return this.userControl.value;\n }\n\n @Input()\n set value(value: T | T[] | null) {\n this.writeValue(value);\n }\n\n /** Already set through errorState mixin. */\n // public stateChanges: Observable;\n\n /** The element ID for this control. */\n @Input()\n id: string = `collapp-people-select-${PeopleSelectComponent.nextId++}`; // eslint-disable-line no-plusplus\n\n @Input()\n isForWpCreator: boolean = false;\n\n @HostBinding('id')\n get hostId(): string {\n return this.id;\n }\n\n /** The placeholder for this control. */\n get placeholder(): string { return this._placeholder; }\n\n @Input()\n set placeholder(value: string) {\n if (this._placeholder !== value) {\n this._placeholder = value;\n this.stateChanges.next();\n }\n }\n\n /**\n * Gets the NgControl for this control.\n *\n * This is already set in the constructor and contrary to the interface\n * ngControl *can* be null if this component is not used as reactive form control.\n */\n // public ngControl: NgControl | null;\n\n /** Whether the control is focused. */\n get focused(): boolean {\n return this.userSelect.focused;\n }\n\n /** Whether the control is empty. */\n get empty(): boolean {\n return (\n this.userControl.value == null\n || (\n Array.isArray(this.userControl.value)\n && this.userControl.value.length === 0\n )\n );\n }\n\n /** Whether the `MatFormField` label should try to float. */\n @HostBinding('class.mat-form-field-should-float')\n get shouldLabelFloat(): boolean {\n return true;\n }\n\n /** Whether the component is required */\n @Input()\n get required(): boolean { return this._required; }\n\n set required(value: boolean) {\n this._required = coerceBooleanProperty(value);\n }\n\n /**\n * Whether the component is disabled\n *\n * Already set through the Disabled mixin.\n */\n // @Input()\n // public disabled: boolean;\n\n /**\n * Whether the control is in an error state.\n *\n * Already set through errorState mixin.\n */\n // public errorState: boolean;\n\n /** An object used to control when error messages are shown. */\n @Input()\n get errorStateMatcher(): ErrorStateMatcher {\n return this._errorStateTracker.matcher;\n }\n set errorStateMatcher(value: ErrorStateMatcher) {\n this._errorStateTracker.matcher = value;\n }\n\n // === MatFormFieldControl additional custom ===\n\n @HostBinding('attr.aria-describedby')\n describedBy: string = '';\n\n /**\n * This limits the search of users to this unit (including children).\n */\n @Input()\n get limitUnit(): Unit | null | undefined {\n return this._limitUnit;\n }\n\n set limitUnit(value: Unit | null | undefined) {\n this._limitUnit = value;\n this.refresh$.next();\n }\n\n /**\n * Whether to only load currently valid users\n */\n @Input()\n validOnly: boolean = false;\n\n /**\n * Used to fetch unit planning users.\n */\n @Input()\n get unitId(): number | undefined { return this._unitId; }\n\n set unitId(value: number | undefined) {\n if (value !== this.unitId) {\n this._unitId = value;\n this.refresh$.next();\n }\n }\n\n /**\n * Used to fetch unit planning users.\n */\n @Input()\n get isoWeekYear(): number | undefined { return this._isoWeekYear; }\n\n set isoWeekYear(value: number | undefined) {\n if (value !== this.isoWeekYear) {\n this._isoWeekYear = value;\n this.refresh$.next();\n }\n }\n\n /**\n * Used to fetch unit planning users.\n */\n @Input()\n get isoWeek(): number | undefined { return this._isoWeek; }\n\n set isoWeek(value: number | undefined) {\n if (value !== this.isoWeek) {\n this._isoWeek = value;\n this.refresh$.next();\n }\n }\n\n /**\n * Used to fetch unit planning users.\n */\n @Input()\n get numberOfWeeks(): number | undefined { return this._numberOfWeeks; }\n\n set numberOfWeeks(value: number | undefined) {\n if (value !== this.numberOfWeeks) {\n this._numberOfWeeks = value;\n this.refresh$.next();\n }\n }\n\n @Input()\n size: 'normal' | 'large' = 'normal';\n\n @Input()\n type: 'user' | 'resource' = 'user';\n\n get simple(): boolean { return this._simple; }\n\n @Input()\n set simple(value: boolean) {\n this._simple = coerceBooleanProperty(value);\n }\n\n @Input()\n appendTo: string = 'body';\n\n @Input()\n preload: boolean = false;\n\n @ViewChild('userSelect', { static: true })\n private userSelect!: NgSelectComponent;\n\n /**\n * An optional name for the control type that can be used to distinguish `mat-form-field` elements\n * based on their control type. The form field will add a class,\n * `mat-form-field-type-{{controlType}}` to its root element.\n */\n readonly controlType: string = 'people-select';\n\n /**\n * Whether the input is currently in an autofilled state. If property is not present on the\n * control it is assumed to be false.\n */\n readonly autofilled: boolean = false;\n\n // === /MatFormFieldControl ===\n\n // === /MatFormFieldControl additional custom ===\n\n // === Custom controls ===\n\n get multiple(): boolean { return this._multiple; }\n\n @Input()\n set multiple(value: boolean) {\n this._multiple = coerceBooleanProperty(value);\n }\n\n get localOnly(): boolean { return this._localOnly; }\n\n @Input()\n set localOnly(value: boolean) {\n this._localOnly = coerceBooleanProperty(value);\n }\n\n /**\n * Allows the currently selected value to be cleared.\n */\n get clearable(): boolean { return this._clearable; }\n\n @Input()\n set clearable(value: boolean) {\n this._clearable = coerceBooleanProperty(value);\n }\n\n @Input()\n get includeSupplierUsers(): boolean { return this._includeSupplierUsers; }\n\n set includeSupplierUsers(value: boolean) {\n this._includeSupplierUsers = coerceBooleanProperty(value);\n }\n\n @Input()\n get onlyCoordinators(): boolean { return this._onlyCoordinators; }\n\n set onlyCoordinators(value: boolean) {\n this._onlyCoordinators = coerceBooleanProperty(value);\n }\n\n // === \\ Custom controls ===\n\n @HostBinding('class.collapp-people-select--large')\n get largeModifierClass(): boolean {\n return (this.size === 'large');\n }\n\n @HostBinding('class.collapp-people-select--multiple')\n get multipleModifierClass(): boolean {\n return this._multiple;\n }\n\n get personIconSize(): 'tiny' | 'small' {\n return this.size === 'normal' ? 'tiny' : 'small';\n }\n\n readonly usersCompare: (o1: any, o2: any) => boolean = CompareWithUtility.usersCompare;\n\n readonly planningResourceCompare: (o1: any, o2: any) => boolean = CompareWithUtility.planningResourceCompare;\n\n isLoading: boolean = false;\n\n listInitialized: boolean = false;\n\n filteredUsers$: Observable;\n\n numberOfResults: number = 0;\n\n numberOfMaxTotalResults: number = 0;\n\n // it must be public to use in the ng-select\n // eslint-disable-next-line rxjs/no-exposed-subjects\n typeahead$: Subject = new Subject();\n\n userControl: UntypedFormControl = new UntypedFormControl();\n\n private _errorStateTracker: _ErrorStateTracker;\n\n // === MatFormFieldControl ===\n private _placeholder: string = '';\n\n private _required: boolean = false;\n // === \\ MatFormFieldControl ===\n\n // === Custom controls ===\n private _multiple: boolean = false;\n\n private _localOnly: boolean = true;\n\n private _clearable: boolean = true;\n\n private _simple: boolean = false;\n\n private _limitUnit: Unit | null | undefined = null;\n\n private _isoWeekYear: number | undefined = undefined;\n\n private _isoWeek: number | undefined = undefined;\n\n private _unitId: number | undefined = undefined;\n\n private _numberOfWeeks: number | undefined = undefined;\n\n private _includeSupplierUsers: boolean = false;\n\n private _onlyCoordinators: boolean = false;\n // === \\ Custom controls ===\n\n private filteredUsersSubject$: BehaviorSubject = new BehaviorSubject([]);\n\n private refresh$: Subject = new Subject();\n\n private destroyed$: Subject = new Subject();\n\n /**\n * Emits whenever the component state changes and should cause the parent\n * form-field to update. Implemented as part of `MatFormFieldControl`.\n * @docs-private\n */\n readonly stateChanges = new Subject();\n\n /** Whether the chip grid is in an error state. */\n get errorState(): boolean {\n return this._errorStateTracker.errorState;\n }\n set errorState(value: boolean) {\n this._errorStateTracker.errorState = value;\n }\n\n constructor(\n _elementRef: ElementRef,\n _defaultErrorStateMatcher: ErrorStateMatcher,\n @Optional() _parentForm: NgForm,\n @Optional() _parentFormGroup: FormGroupDirective,\n @Self() @Optional() public ngControl: NgControl,\n // eslint-disable-next-line @angular-eslint/no-attribute-decorator\n @Attribute('tabindex') tabIndex: string,\n private readonly userService: UserService,\n private readonly errorHandlerService: ErrorHandlerService,\n ) {\n if (this.ngControl) {\n // Note: we provide the value accessor through here, instead of\n // the `providers` to avoid running into a circular import.\n this.ngControl.valueAccessor = this;\n }\n\n this._errorStateTracker = new _ErrorStateTracker(\n _defaultErrorStateMatcher,\n ngControl,\n _parentFormGroup,\n _parentForm,\n this.stateChanges,\n );\n\n this.tabIndex = Number.parseInt(tabIndex, 10) || 0;\n\n this.filteredUsers$ = this.filteredUsersSubject$.asObservable();\n }\n\n\n updateErrorState(): void {\n this._errorStateTracker.updateErrorState();\n }\n\n // eslint-disable-next-line max-lines-per-function\n ngOnInit(): void {\n this.userControl\n .valueChanges\n .pipe(\n takeUntil(this.destroyed$),\n )\n .subscribe((value) => {\n this._onChange(value);\n this.stateChanges.next();\n });\n\n const initialDropDownOpen$ = this.userSelect.openEvent\n .pipe(\n filter(() => !this.listInitialized),\n mapTo(''),\n takeUntil(this.destroyed$),\n share(),\n );\n\n const dropdown$ = merge(\n initialDropDownOpen$,\n this.typeahead$,\n )\n .pipe(\n debounceTime(DEBOUNCE_INPUT_CHANGE_TIME_SMALL),\n map((value) => (value ? value.trim() : '')),\n distinctUntilChanged(),\n );\n\n // Listens for changes in the filterable dropdown\n merge(\n dropdown$,\n this.refresh$,\n )\n .pipe(\n map((value) => (value ? value.trim() : '')),\n tap(() => {\n this.isLoading = true;\n }),\n switchMap((filterString) => {\n // eslint-disable-next-line max-len\n const request$: Observable = this.prepareRequest$(filterString);\n\n return request$.pipe(\n tap((response) => {\n if (filterString === '') {\n this.numberOfMaxTotalResults = response.metadata.paginationInfo.numberOfTotalResults || 0;\n }\n }),\n );\n }),\n takeUntil(this.destroyed$),\n )\n .subscribe(\n (response) => {\n this.processUserListResponse(response);\n },\n (error: unknown) => {\n this.isLoading = false;\n this.errorHandlerService.handleError(error as Error, 'Error occurred while fetching users');\n },\n );\n }\n\n ngAfterViewInit(): void {\n if (this.preload) {\n this.preloadResources();\n }\n }\n\n ngDoCheck(): void {\n if (this.ngControl) {\n this.updateErrorState();\n }\n }\n\n ngOnChanges(changes: SimpleChanges): void {\n // Updating the disabled state is handled by `mixinDisabled`, but we need to additionally let\n // the parent form field know to run change detection when the disabled state changes.\n if (changes.disabled) {\n this.setUserControlDisabledState(changes.disabled.currentValue);\n this.stateChanges.next();\n }\n }\n\n ngOnDestroy(): void {\n this.filteredUsersSubject$.complete();\n this.refresh$.complete();\n this.destroyed$.next();\n this.destroyed$.complete();\n }\n\n // =========\n\n /**\n * Sets the model value. Implemented as part of ControlValueAccessor.\n *\n * @param value\n */\n writeValue(value: any): void {\n this.userControl.setValue(value);\n this.stateChanges.next();\n }\n\n /**\n * Registers a callback to be triggered when the model value changes.\n * Implemented as part of ControlValueAccessor.\n *\n * @param fn - Callback to be registered.\n */\n registerOnChange(fn: (value: any) => void): void {\n this._onChange = fn;\n }\n\n /**\n * Registers a callback to be triggered when the control is touched.\n * Implemented as part of ControlValueAccessor.\n *\n * @param fn - Callback to be registered.\n */\n registerOnTouched(fn: any): void {\n this._onTouched = fn;\n }\n\n /**\n * Sets the disabled state of the control. Implemented as a part of ControlValueAccessor.\n *\n * @param {boolean} isDisabled - Whether the control should be disabled.\n */\n setDisabledState(isDisabled: boolean): void {\n this.disabled = isDisabled;\n this.setUserControlDisabledState(isDisabled);\n this.stateChanges.next();\n }\n\n // === /ControlValueAccessor ===\n\n // === MatFormFieldControl ===\n\n /** Sets the list of element IDs that currently describe this control. */\n setDescribedByIds(ids: string[]): void {\n this.describedBy = ids.join(' ');\n }\n\n /** Handles a click on the control's container. */\n onContainerClick(): void {\n // Nothing\n }\n\n // === /MatFormFieldControl ===\n\n userTrackByFn(index: number, user: UserObject): string {\n if (user instanceof UnitPlanningResourceDtoModel) {\n return user.planningResourceId;\n }\n\n return user.userId;\n }\n\n onBlur(): void {\n this.ngControl.control?.markAsTouched();\n }\n\n private setUserControlDisabledState(disabled: boolean): void {\n if (this.userControl.disabled !== disabled) {\n if (disabled) {\n this.userControl.disable();\n } else {\n this.userControl.enable();\n }\n }\n }\n\n /**\n * Prepare the requestObservable\n * @param filterString\n * @returns\n */\n // eslint-disable-next-line max-len\n private prepareRequest$(filterString: string): Observable {\n const isUserPlanningDataAvailable = this.unitId && this.isoWeekYear && this.isoWeek && this.numberOfWeeks;\n\n const getUserPlanningData$ = this.userService.getUserPlanningResources$(\n this.unitId,\n filterString,\n this.isoWeekYear,\n this.isoWeek,\n this.numberOfWeeks,\n this.isForWpCreator,\n );\n\n const getUsers$ = this.userService.findUsers$(\n filterString,\n this.localOnly,\n this.validOnly,\n this.limitUnit,\n this.includeSupplierUsers,\n this.onlyCoordinators,\n this.isForWpCreator,\n );\n\n return isUserPlanningDataAvailable ? getUserPlanningData$ : getUsers$;\n }\n\n /**\n * first call to API.. the API will then put it in cache\n */\n private preloadResources(): void {\n const request$ = this.prepareRequest$('');\n // eslint-disable-next-line rxjs-angular/prefer-takeuntil\n request$.pipe(take(1)).subscribe((response) => {\n this.processUserListResponse(response);\n if (response) {\n this.numberOfMaxTotalResults = response.metadata.paginationInfo.numberOfTotalResults || 0;\n }\n });\n }\n\n private processUserListResponse(response: UserListViewResponseModel | UnitPlanningUserListViewResponseModel): void {\n this.isLoading = false;\n\n if (!response) {\n return;\n }\n\n const users = [...response.items];\n const numberOfUsers = users.length;\n\n this.filteredUsersSubject$.next(users);\n this.numberOfResults = numberOfUsers;\n\n this.listInitialized = true;\n }\n\n /**\n * onChange function registered via registerOnChange (ControlValueAccessor).\n */\n private _onChange: (value: any) => void = () => {}; // eslint-disable-line @typescript-eslint/no-empty-function\n\n /**\n * onTouch function registered via registerOnTouch (ControlValueAccessor).\n */\n private _onTouched: () => any = () => {}; // eslint-disable-line @typescript-eslint/no-empty-function\n\n // =========\n}\n","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { FormsModule, ReactiveFormsModule } from '@angular/forms';\nimport { MatFormFieldModule } from '@angular/material/form-field';\nimport { NgSelectMaterialModule } from '../ng-select-mat';\nimport { PersonModule } from '../person';\n\nimport { PeopleSelectComponent } from './people-select.component';\n\n// Requires the importing module to also import ReactiveFormsModule\n@NgModule({\n imports: [\n CommonModule,\n FormsModule,\n ReactiveFormsModule,\n MatFormFieldModule,\n NgSelectMaterialModule,\n PersonModule,\n ],\n exports: [\n PeopleSelectComponent,\n ],\n declarations: [\n PeopleSelectComponent,\n ],\n})\nexport class PeopleSelectModule { }\n","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { MatBadgeModule } from '@angular/material/badge';\nimport { NgxsModule } from '@ngxs/store';\nimport { sharedStates } from '../../state';\nimport { CollappCommonModule } from '../../collapp-common';\nimport { PersonIconComponent } from './person-icon.component';\nimport { PersonIconOverlayTemplateDirective } from './person-icon-overlay-template.directive';\n\n@NgModule({\n imports: [\n CommonModule,\n MatBadgeModule,\n // @TODO Is this correct?\n NgxsModule.forFeature(sharedStates),\n CollappCommonModule,\n ],\n exports: [\n PersonIconComponent,\n PersonIconOverlayTemplateDirective,\n ],\n declarations: [\n PersonIconComponent,\n PersonIconOverlayTemplateDirective,\n ],\n})\nexport class PersonIconModule { }\n","import { Directive, TemplateRef } from '@angular/core';\n\n@Directive({\n selector: '[personIconOverlayTmp]',\n standalone: false\n})\nexport class PersonIconOverlayTemplateDirective {\n constructor(public template: TemplateRef) { }\n}\n","
\n
\n @if (avatarUnavailable && !unknown && initials) {\n \n {{initials}}\n \n }\n @if (avatarUnavailable && (unknown || !initials)) {\n \n \n \n }\n @if (userImageSrc) {\n \n }\n
\n @if (overlayTemplate) {\n
\n \n
\n }\n @if (hat !== hatTypes.NONE) {\n
\n @switch (hat) {\n @case (hatTypes.SANTA) {\n \n \n \n \n \n \n }\n @case (hatTypes.BUNNY) {\n \n \n \n \n \n \n \n }\n }\n
\n }\n
\n\n","import {\n Component,\n ContentChild,\n HostBinding,\n Input, OnChanges, OnInit, Optional,\n SimpleChanges,\n TemplateRef,\n ViewEncapsulation,\n ɵstringify as stringify,\n} from '@angular/core';\nimport { Store } from '@ngxs/store';\nimport { UserPlanningResourceSlimDtoModel } from '../../api/models/dtos/unit-planning-resource-slim.dto.model';\nimport { BasicUser } from '../../models/user.interface';\nimport { UserSelectors } from '../../state/user';\nimport { environment } from '../../../environments/environment';\nimport { CollappDateAdapter, createMissingDateImplError } from '../../collapp-core';\nimport { PersonIconOverlayTemplateDirective } from './person-icon-overlay-template.directive';\nimport { SUPER_ADMIN_ROLE_NAME } from '../../services/access-control.service';\nimport { NonHumanResourceSlimDto } from '../../api/interfaces/dtos/non-human-resource-slim.dto';\nimport { AvailableResourceDtoModel } from '../../api/models/dtos/available-resource.dto.model';\n\nconst defaultBackgroundColor: string = '#ababab';\n\n/**\n * A few funny \"hats\" to spice things up ;)\n */\nenum HatType {\n NONE = 'none',\n SANTA = 'santa',\n BUNNY = 'bunny',\n}\n\n@Component({\n selector: 'person-icon',\n templateUrl: './person-icon.component.html',\n styleUrls: ['./person-icon.component.scss'],\n encapsulation: ViewEncapsulation.None,\n standalone: false\n})\nexport class PersonIconComponent implements OnInit, OnChanges {\n @HostBinding('class.person-icon')\n readonly personIconClass: boolean = true;\n\n @HostBinding('class.person-icon--small')\n get personIconSmallClass(): boolean {\n return (this.size === 'small');\n }\n\n @HostBinding('class.person-icon--tiny')\n get personIconTinyClass(): boolean {\n return (this.size === 'tiny');\n }\n\n @Input()\n user: BasicUser | AvailableResourceDtoModel | null | undefined;\n\n @Input()\n unknown: boolean = false;\n\n @Input()\n size: 'tiny' | 'small' | 'normal' = 'normal';\n\n @Input()\n badge: string | null = null;\n\n @Input()\n forceIsPerson: boolean = false;\n\n @ContentChild(PersonIconOverlayTemplateDirective, { read: TemplateRef })\n overlayTemplate?: TemplateRef;\n\n avatarUnavailable: boolean = false;\n\n userImageSrc: string = '';\n\n initials: string = '';\n\n backgroundColor: string = defaultBackgroundColor;\n\n hatTypes: typeof HatType = HatType;\n\n hat: HatType = HatType.NONE;\n\n isRect: boolean = false;\n\n private _userBackgroundColor: string = defaultBackgroundColor;\n\n private dateAdapter: CollappDateAdapter;\n\n constructor(\n @Optional() dateAdapter: CollappDateAdapter,\n private store: Store,\n ) {\n if (!dateAdapter) {\n throw createMissingDateImplError(stringify(PersonIconComponent));\n }\n this.dateAdapter = dateAdapter;\n }\n\n ngOnInit(): void {\n this.updateUserData();\n }\n\n ngOnChanges(changes: SimpleChanges): void {\n if (changes.user && !changes.user.isFirstChange()) {\n this.updateUserData();\n }\n }\n\n onAvatarError(): void {\n this.avatarUnavailable = true;\n this.backgroundColor = this._userBackgroundColor;\n this.hat = HatType.NONE;\n }\n\n // eslint-disable-next-line complexity, max-lines-per-function\n private updateUserData(): void {\n let userImageSrc = '';\n let initials = '';\n let backgroundColor = defaultBackgroundColor;\n this.isRect = false;\n\n if (this.user) {\n if ((this.user as BasicUser).photoUrl) {\n userImageSrc = (this.user as BasicUser).photoUrl!;\n }\n if ((this.user as BasicUser).fullName || (this.user as unknown as NonHumanResourceSlimDto).name) {\n // Get a random but static starting point for the backgroundColor calculation\n // based on the UUID of the user\n const colorCalcModifier = parseInt((this.user as BasicUser)?.userId?.split('-')[0].replace('[^d]', ''), 10) || 1;\n let colorHue = 0;\n\n // Assume the users' name to be words separated by whitespace...\n const parts = `${(this.user as BasicUser).fullName || (this.user as unknown as NonHumanResourceSlimDto).name}`\n .replace(/\\s+/, ' ')\n .trim()\n .toUpperCase()\n .split(' ');\n\n // ...and get the first unicode character of the first word (assumed first name)\n const char1 = parts[0].codePointAt(0)!;\n // ...and get the first unicode character of the last word (assumed last name)\n const char2 = parts[parts.length - 1].codePointAt(0)!;\n\n if (parts.length >= 2) {\n initials = String.fromCodePoint(char1) + String.fromCodePoint(char2);\n // Calculate a static color from the initials, assuming uppercase ASCII chars (but also works with unicode)\n // Clipped to 360 since hue in hsl is 0 - 359\n colorHue = Math.round(((1 / (26 * 26)) * (26 * (char1 - 65) + (char2 - 65))) * 360 * colorCalcModifier) % 360;\n } else if (parts.length === 1) {\n initials = String.fromCodePoint(char1);\n colorHue = Math.round(((1 / 26) * (char1 - 65)) * 360 * colorCalcModifier) % 360;\n }\n\n backgroundColor = `hsl(${colorHue}, 85%, 55%)`;\n }\n\n if ((!(this.user as AvailableResourceDtoModel).isUser\n && !(this.user as BasicUser).userId)\n && !(this.user as unknown as UserPlanningResourceSlimDtoModel).isHuman\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n && !(this.user as any).isUserType) {\n this.isRect = true;\n }\n\n if (this.forceIsPerson) {\n this.isRect = false;\n }\n }\n\n this._userBackgroundColor = backgroundColor;\n if (userImageSrc !== '') {\n this.avatarUnavailable = false;\n // Reset the background color to prevent \"color halos\"\n backgroundColor = 'transparent';\n if (this.userImageSrc !== userImageSrc) {\n // Only update hats if the user image did change\n this.updateHats((this.user as BasicUser));\n }\n this.userImageSrc = userImageSrc;\n } else {\n this.avatarUnavailable = true;\n }\n this.initials = initials;\n this.backgroundColor = backgroundColor;\n }\n\n // eslint-disable-next-line complexity\n private updateHats(user: BasicUser | AvailableResourceDtoModel | null | undefined = this.user): void {\n // Hats are only for people!!! :rage:\n if (!user) {\n this.hat = HatType.NONE;\n\n return;\n }\n\n if (environment.production) {\n // Temporarily disable for production (dev, stage, prod)\n // so that ABB does not get a heart attack\n return;\n }\n\n const yooUsers = [\n 'Andra Szasz',\n 'Andrei Patrutiu',\n 'Benedikt Funk',\n 'Christoph Dörfel',\n 'Cédric Madörin',\n 'Dimitri Vranken',\n 'Dragan Boric',\n 'Emanuel Marsicovetere',\n 'Florian Wagner',\n 'Kelvin Louis',\n 'Marcel Grieder',\n 'Nathalie Madörin',\n 'Sacha Schmid',\n 'Yanick Recher',\n 'Sébastien Closs',\n ];\n\n const currentUser = this.store.selectSnapshot(UserSelectors.user)!;\n if (!yooUsers.includes(currentUser.fullName)) {\n return;\n }\n\n const today = this.dateAdapter.today();\n\n if (\n (currentUser.role && currentUser.role.name === SUPER_ADMIN_ROLE_NAME)\n && today.month() === 11\n && today.date() <= 25\n ) {\n this.hat = HatType.SANTA;\n } else if (\n Math.random() > 0.8\n && yooUsers.includes(user.fullName || '')\n ) {\n this.hat = HatType.BUNNY;\n } else {\n this.hat = HatType.NONE;\n }\n }\n}\n","import { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\nimport { MatTooltipModule } from '@angular/material/tooltip';\nimport { CollappCommonModule } from '../../collapp-common';\nimport { PersonIconModule } from '../person-icon';\nimport { PersonComponent } from './person.component';\n\n@NgModule({\n imports: [\n CommonModule,\n MatTooltipModule,\n CollappCommonModule,\n PersonIconModule,\n ],\n exports: [\n PersonIconModule,\n PersonComponent,\n ],\n declarations: [\n PersonComponent,\n ],\n})\nexport class PersonModule { }\n","\n
\n
{{ displayName }}
\n @if (hasLabel) {\n
{{ label }}
\n }\n
\n","/* eslint-disable @angular-eslint/no-conflicting-lifecycle */\nimport {\n AfterViewInit,\n ChangeDetectionStrategy,\n Component,\n DoCheck,\n ElementRef,\n HostBinding,\n HostListener,\n Input,\n OnChanges,\n OnDestroy,\n OnInit,\n SimpleChanges,\n ViewChild,\n ViewEncapsulation,\n} from '@angular/core';\nimport { coerceBooleanProperty } from '@angular/cdk/coercion';\nimport { Subject } from 'rxjs';\nimport { BasicUser } from '../../models/user.interface';\nimport { formatCollAppUser } from '../../collapp-common';\nimport { isNumber } from '../../helpers/number.utility';\n\nconst PERSON_CONTENT_MIN_WIDTH: number = 155;\n\n@Component({\n selector: 'person',\n templateUrl: './person.component.html',\n styleUrls: ['./person.component.scss'],\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush,\n standalone: false\n})\nexport class PersonComponent implements OnInit, OnChanges, DoCheck, AfterViewInit, OnDestroy {\n @HostBinding('class.person')\n readonly personListItem: boolean = true;\n\n @HostBinding('title')\n get title(): string | null {\n return this.toolTip;\n }\n\n @HostBinding('class.person--disabled')\n _disabled: boolean = false;\n\n @Input()\n size: 'tiny' | 'small' | 'normal' = 'small';\n\n @Input()\n badge: string | null = null;\n\n @Input()\n tooltipSuffix: string | null = null;\n\n @Input()\n set disabled(value: boolean) {\n this._disabled = coerceBooleanProperty(value);\n }\n\n @Input()\n label: string | null = null;\n\n @Input()\n user: BasicUser | null | undefined;\n\n get collapsible(): boolean { return this._collapsible; }\n\n @Input()\n set collapsible(value: boolean) {\n this._collapsible = coerceBooleanProperty(value);\n }\n\n get collapsibleMinWidth(): string | number | null | undefined { return this._collapsibleMinWidth; }\n\n @Input()\n set collapsibleMinWidth(value: string | number | null | undefined) {\n this._collapsibleMinWidth = value;\n if (value != null) {\n this._collapsibleMinWidthAndUnit = (isNumber(value) ? `${+value}px` : `${value}`);\n } else {\n this._collapsibleMinWidthAndUnit = null;\n }\n }\n\n get collapsibleMinWidthAndUnit(): string | null { return this._collapsibleMinWidthAndUnit; }\n\n toolTip: string = '';\n\n get hasLabel(): boolean { return this.label != null; }\n\n get displayName(): string { return this._displayName; }\n\n @HostBinding('class.person--is-collapsed')\n get isCollapsed(): boolean { return this.collapsible && this.isContentOverflowing; }\n\n get isTooltipVisible(): boolean {\n return (this.collapsible && this.isContentOverflowing) || this.isDisplayNameOverflowing;\n }\n\n @HostBinding('class.person--is-name-truncated')\n isDisplayNameOverflowing: boolean = false;\n\n @ViewChild('displayNameEl', { static: true })\n private displayNameEl?: ElementRef;\n\n isContentOverflowing: boolean = false;\n\n private _displayName: string = '';\n\n private _collapsible: boolean = false;\n\n private _collapsibleMinWidth: string | number | null | undefined;\n\n private _collapsibleMinWidthAndUnit: string | null = null;\n\n private _inputDirty: boolean = false;\n\n private _sizeDirty: boolean = false;\n\n private destroyed$: Subject = new Subject();\n\n constructor(\n private hostRef: ElementRef,\n ) {\n this.collapsibleMinWidth = PERSON_CONTENT_MIN_WIDTH;\n }\n\n ngOnInit(): void {\n this.createTooltipText();\n }\n\n @HostListener('window:resize')\n onResize(): void {\n this._sizeDirty = true;\n }\n\n ngOnChanges(changes: SimpleChanges): void {\n if ('user' in changes || 'tooltipSuffix' in changes) {\n this._inputDirty = true;\n this.createTooltipText();\n }\n }\n\n ngDoCheck(): void {\n if (this._inputDirty) {\n this._inputDirty = false;\n\n this._displayName = formatCollAppUser(this.user) || '';\n this.createTooltipText();\n }\n\n if (this.collapsible && this._sizeDirty) {\n this._sizeDirty = false;\n\n this.checkContentOverflow();\n }\n }\n\n ngAfterViewInit(): void {\n this._sizeDirty = true;\n }\n\n ngOnDestroy(): void {\n this.destroyed$.next();\n this.destroyed$.complete();\n }\n\n private createTooltipText(): void {\n const text = this.displayName + (this.tooltipSuffix ? ` (${this.tooltipSuffix})` : '');\n this.toolTip = text.length ? text : '';\n }\n\n private checkContentOverflow(): void {\n const hostElement = this.hostRef.nativeElement as HTMLDivElement;\n this.isContentOverflowing = (hostElement.scrollWidth > hostElement.clientWidth);\n\n if (this.displayNameEl) {\n const displayNameElement = this.displayNameEl.nativeElement as HTMLDivElement;\n this.isDisplayNameOverflowing = (displayNameElement.scrollWidth > displayNameElement.clientWidth);\n }\n }\n}\n","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatCheckboxModule } from '@angular/material/checkbox';\nimport { MatIconModule } from '@angular/material/icon';\nimport { MatTooltipModule } from '@angular/material/tooltip';\nimport { MatTreeModule } from '@angular/material/tree';\nimport { CollappCommonModule } from '../../collapp-common';\nimport { ProjectTreeStructureComponent } from './project-tree-structure.component';\nimport { LevelChangeIndicatorComponent } from './components';\n\n@NgModule({\n imports: [\n CommonModule,\n MatCheckboxModule,\n MatButtonModule,\n MatIconModule,\n MatTooltipModule,\n MatTreeModule,\n CollappCommonModule,\n ],\n exports: [\n ProjectTreeStructureComponent,\n LevelChangeIndicatorComponent,\n ],\n declarations: [\n ProjectTreeStructureComponent,\n LevelChangeIndicatorComponent,\n ],\n})\nexport class ProjectTreeStructureModule {\n}\n","import moment from 'moment';\nimport { LevelImportListDtoMetadata, LevelImportListDtoMetadataFields } from '../../api/interfaces/metadata';\nimport { ChangedProperty } from '../../api/interfaces/changed-property';\nimport { decapitalize } from '../../helpers/string.utility';\nimport { LevelImportListDtoModel } from '../../api/models/dtos/level-import-list.dto.model';\nimport { UserSlimDtoModel } from '../../api/models/dtos/user-slim.dto.model';\nimport { MilestoneImportDtoModel } from '../../api/models/dtos/milestone-import.dto.model';\nimport { MetadataModel } from '../../api/models/metadata.model';\n\nexport type BasicChanges = {\n [key in keyof T]?: ChangedProperty;\n};\n\n/** Level node with additional state information */\nexport class LevelModelTreeNode extends LevelImportListDtoModel {\n isSelected: boolean = false;\n\n readonly children: LevelModelTreeNode[];\n\n readonly parent: LevelModelTreeNode | null;\n\n readonly nestingLevel: number;\n\n readonly expandable: boolean;\n\n readonly hasChanges: boolean;\n\n readonly changes: BasicChanges;\n\n readonly isDeleted: boolean;\n\n readonly isDisabled: boolean;\n\n get selected(): boolean {\n return this.isSelected;\n }\n\n set selected(value: boolean) {\n this.isSelected = value;\n }\n\n partiallySelected: boolean = false;\n\n // eslint-disable-next-line max-lines-per-function\n constructor(\n levelId: number | undefined,\n parent: LevelModelTreeNode | null,\n nestingLevel: number,\n codePath: string,\n levelNumber: number,\n title: string,\n responsibleEngineer: UserSlimDtoModel | undefined,\n projectNumberForSubmitterSettings: string | undefined,\n activityItemCategoryNumberForSubmitterSettings: string | undefined,\n startDate: moment.Moment | undefined,\n endDate: moment.Moment | undefined,\n hours: number,\n hourlyRate: number | undefined,\n cost: number | undefined,\n costToComplete: number | undefined,\n isHidden: boolean,\n isExisting: boolean,\n isSelected: boolean,\n isDeletedInSap: boolean,\n milestones: readonly MilestoneImportDtoModel[],\n children: readonly LevelImportListDtoModel[],\n metadata: MetadataModel,\n ) {\n super(\n levelId,\n codePath,\n levelNumber,\n title,\n responsibleEngineer,\n projectNumberForSubmitterSettings,\n activityItemCategoryNumberForSubmitterSettings,\n startDate,\n endDate,\n hours,\n hourlyRate,\n cost,\n costToComplete,\n undefined,\n isHidden,\n isExisting,\n isSelected,\n isDeletedInSap,\n milestones,\n // Do not map children yet. Will be assigned later.\n [], // children,\n metadata,\n );\n\n this.parent = parent;\n this.nestingLevel = nestingLevel;\n\n this.children = (Array.isArray(children) ? children : [])\n .map((item) => LevelModelTreeNode.fromSimilarObject(item, this, nestingLevel + 1));\n\n this.expandable = (this.children.length > 0);\n\n const fields: LevelImportListDtoMetadataFields = this.metadata.fields || {};\n const changedProperties: ChangedProperty[] = this.metadata.changedProperties || [];\n\n this.hasChanges = (changedProperties.length > 0);\n this.changes = (changedProperties || [])\n .reduce((obj, value) => ({ ...obj, [decapitalize(value.propertyName)]: value }), Object.create(null));\n\n this.isSelected = isSelected;\n this.isDeleted = isDeletedInSap || false;\n this.isDisabled = (fields.isDisabled === true);\n\n this.updateSelectedStates();\n }\n\n static fromSimilarObject(\n model: LevelImportListDtoModel,\n parent?: LevelModelTreeNode,\n nestingLevel: number = 0,\n ): LevelModelTreeNode {\n return new LevelModelTreeNode(\n model.levelId,\n parent || null,\n nestingLevel,\n model.codePath,\n model.levelNumber,\n model.title,\n (model.responsibleEngineer\n ? model.responsibleEngineer.clone()\n : undefined\n ),\n model.projectNumberForSubmitterSettings,\n model.activityItemCategoryNumberForSubmitterSettings,\n (model.startDate\n ? model.startDate.clone()\n : undefined\n ),\n (model.endDate\n ? model.endDate.clone()\n : undefined\n ),\n model.hours,\n model.hourlyRate,\n model.cost,\n model.costToComplete,\n model.isHidden,\n model.isExisting,\n model.isSelected,\n model.isDeletedInSap,\n (Array.isArray(model.milestones) ? model.milestones : [])\n .map((item) => item.clone()),\n (Array.isArray(model.children) ? model.children : [])\n .map((item) => item.clone()),\n model.metadata.clone(),\n );\n }\n\n updateSelectedStates(): void {\n if (this.children.length > 0) {\n const someChildrenSelected = this.children.some((child) => child.isSelected);\n const someChildrenPartiallySelected = this.children.some((child) => child.partiallySelected);\n const allChildrenDeleted = !this.children.some((child) => !child.isDeleted);\n\n this.selected = someChildrenSelected || (allChildrenDeleted && !this.isDeletedInSap && !this.isHidden);\n\n this.partiallySelected = (\n someChildrenPartiallySelected\n || (\n someChildrenSelected\n && !this.children.every((child) => child.isSelected) // and not all children selected\n )\n );\n } else {\n this.partiallySelected = false;\n }\n }\n}\n","@if (deleted) {\n deleted from SAP\n}\n@if (!deleted && existing && hasChanges) {\n updated\n}\n@if (!deleted && !existing) {\n new\n}\n","import { Component, Input } from '@angular/core';\nimport { coerceBooleanProperty } from '@angular/cdk/coercion';\n\n@Component({\n selector: 'collapp-level-change-indicator',\n templateUrl: './level-change-indicator.component.html',\n styleUrls: ['./level-change-indicator.component.scss'],\n standalone: false\n})\nexport class LevelChangeIndicatorComponent {\n get deleted(): boolean { return this._deleted; }\n\n @Input()\n set deleted(value: boolean) {\n this._deleted = coerceBooleanProperty(value);\n }\n\n get existing(): boolean { return this._existing; }\n\n @Input()\n set existing(value: boolean) {\n this._existing = coerceBooleanProperty(value);\n }\n\n get hasChanges(): boolean { return this._hasChanges; }\n\n @Input()\n set hasChanges(value: boolean) {\n this._hasChanges = coerceBooleanProperty(value);\n }\n\n private _deleted: boolean = false;\n\n private _existing: boolean = false;\n\n private _hasChanges: boolean = false;\n}\n","\n \n \n
\n \n \n {{ node.codePath }}: {{ node.title }}\n \n \n
\n @if (node.responsibleEngineer || node.changes.responsibleEngineer) {\n
{{node.responsibleEngineer | collAppUser}}
\n }\n @if (!node.responsibleEngineer && !node.changes.responsibleEngineer) {\n
n/a
\n }\n @if (node.startDate || node.endDate) {\n
\n {{node.startDate | toMoment | moment}}@if (node.endDate) {\n -\n }@if (node.endDate) {\n {{node.endDate | toMoment | moment}}\n }\n
\n }\n @if (node.cost != undefined && node.changes.cost) {\n
{{ node.cost }}(cost)\n
\n }\n @if (node.hours != undefined && node.changes.hours) {\n
{{ node.hours }}(hours)\n
\n }\n
\n \n
\n \n
\n\n \n
\n \n
\n \n \n {{ node.codePath }}: {{ node.title }}\n \n \n
\n
\n \n
\n \n
\n @if (nestedTreeControl.isExpanded(node)) {\n
\n \n
\n }\n
\n
\n","import {\n AfterContentInit,\n ChangeDetectorRef,\n Component,\n forwardRef,\n HostBinding,\n Input,\n OnDestroy,\n OnInit,\n Optional,\n ɵstringify as stringify,\n} from '@angular/core';\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';\nimport { EXPANSION_PANEL_ANIMATION_TIMING } from '@angular/material/expansion';\nimport { MatTreeNestedDataSource } from '@angular/material/tree';\nimport { coerceBooleanProperty } from '@angular/cdk/coercion';\nimport { NestedTreeControl } from '@angular/cdk/tree';\nimport { Subject } from 'rxjs';\nimport {\n animate, state, style, transition, trigger,\n} from '@angular/animations';\nimport { LevelImportListDtoModel } from '../../api/models/dtos/level-import-list.dto.model';\nimport { formatDate } from '../../collapp-common';\nimport { LevelModelTreeNode } from './level-model-tree-node';\nimport { ProjectTypeCode } from '../../models/project-type.enum';\nimport { CollappDateAdapter, createMissingDateImplError } from '../../collapp-core';\n\n/**\n * Provider Expression that allows collapp-project-tree-structure to register\n * as a ControlValueAccessor. This allows it to support [(ngModel)] and ngControl.\n */\nexport const COLLAPP_PROJECT_TREE_STRUCTURE_CONTROL_VALUE_ACCESSOR: any = {\n provide: NG_VALUE_ACCESSOR,\n // eslint-disable-next-line @typescript-eslint/no-use-before-define, @angular-eslint/no-forward-ref\n useExisting: forwardRef(() => ProjectTreeStructureComponent),\n multi: true,\n};\n\n@Component({\n selector: 'collapp-project-tree-structure',\n exportAs: 'collappProjectTreeStructure',\n templateUrl: './project-tree-structure.component.html',\n styleUrls: ['./project-tree-structure.component.scss'],\n providers: [\n COLLAPP_PROJECT_TREE_STRUCTURE_CONTROL_VALUE_ACCESSOR,\n ],\n animations: [\n trigger('indicatorRotate', [\n state('collapsed, void', style({ transform: 'rotate(-90deg)' })),\n state('expanded', style({ transform: 'rotate(0deg)' })),\n transition('expanded <=> collapsed, void => collapsed', animate(EXPANSION_PANEL_ANIMATION_TIMING)),\n ]),\n ],\n standalone: false\n})\nexport class ProjectTreeStructureComponent\n implements OnInit, AfterContentInit, OnDestroy, ControlValueAccessor {\n @HostBinding('class.collapp-project-tree-structure')\n readonly hostClass: boolean = true;\n\n @Input()\n project!: { projectNumber: string; projectTypeCode: ProjectTypeCode };\n\n /** Whether the labels should appear after or before the checkboxes. Defaults to 'after' */\n @Input()\n get labelPosition(): 'before' | 'after' {\n return this._labelPosition;\n }\n\n set labelPosition(value: 'before' | 'after') {\n this._labelPosition = (value === 'before' ? 'before' : 'after');\n }\n\n /**\n * Value for the project-tree-structure.\n */\n @Input()\n get value(): LevelImportListDtoModel[] | null | undefined { return this._value; }\n\n set value(value: LevelImportListDtoModel[] | null | undefined) {\n this.writeValue(value);\n }\n\n /** Whether the project tree structure is disabled */\n @Input()\n get disabled(): boolean { return this._disabled; }\n\n set disabled(value: boolean) {\n this._disabled = coerceBooleanProperty(value);\n }\n\n /** Whether the project tree structure is required */\n @Input()\n get required(): boolean { return this._required; }\n\n set required(value: boolean) {\n this._required = coerceBooleanProperty(value);\n }\n\n nestedTreeControl: NestedTreeControl;\n\n nestedDataSource: MatTreeNestedDataSource;\n\n /** Whether the `value` has been set to its initial value. */\n private _isInitialized: boolean = false;\n\n /** Whether a change to the `value` needs to be triggered on the next change detection. */\n private _triggerChange: boolean = false;\n\n /** Whether the labels should appear after or before the checkboxes. Defaults to 'after' */\n private _labelPosition: 'before' | 'after' = 'after';\n\n /** Whether the project tree structure is disabled. */\n private _disabled: boolean = false;\n\n /** Whether the project tree structure is required. */\n private _required: boolean = false;\n\n private _value: LevelImportListDtoModel[] | null | undefined;\n\n private dateAdapter: CollappDateAdapter;\n\n private destroyed$: Subject = new Subject();\n\n constructor(\n private _changeDetector: ChangeDetectorRef,\n @Optional() dateAdapter?: CollappDateAdapter,\n ) {\n if (!dateAdapter) {\n throw createMissingDateImplError(stringify(ProjectTreeStructureComponent));\n }\n this.dateAdapter = dateAdapter;\n\n this.nestedTreeControl = new NestedTreeControl(this.getChildren);\n this.nestedDataSource = new MatTreeNestedDataSource();\n }\n\n ngOnInit(): void {\n if (!this.project) {\n throw new Error('Attribute \\'project\\' is required');\n }\n }\n\n /**\n * Initialize properties once content children are available.\n * This allows us to propagate relevant attributes to associated buttons.\n */\n ngAfterContentInit(): void {\n // Mark this component as initialized in AfterContentInit because the initial value can\n // possibly be set by NgModel on ProjectTreeStructureComponent, and it is possible that\n // the OnInit of the NgModel occurs *after* the OnInit of the ProjectTreeStructureComponent.\n this._isInitialized = true;\n\n if (this._triggerChange) {\n this._triggerChange = false;\n this.updateValueFromDataSourceAndTriggerChange();\n // @TODO This *will* throw an ExpressionChangedAfterItHasBeenCheckedError.\n // Currently no way to prevent that *but* this method is a last resort fail safe and will most likely\n // never be triggered. Errors are already prevented trough sanitizing LevelImportListDtoModel in the\n // constructor.\n }\n\n this.expandAll();\n }\n\n ngOnDestroy(): void {\n this.destroyed$.next();\n this.destroyed$.complete();\n }\n\n // === ControlValueAccessor ===\n\n /**\n * Sets the model value. Implemented as part of ControlValueAccessor.\n *\n * @param value\n */\n writeValue(value: LevelImportListDtoModel[] | null | undefined): void {\n const source = (Array.isArray(value) ? value : []);\n const data = source\n .map((level) => LevelModelTreeNode.fromSimilarObject(level, undefined, 0));\n\n this._value = value;\n this.nestedDataSource.data = data;\n\n if (this.hasChangesAfterMapping(data, source)) {\n if (this._isInitialized) {\n this.updateValueFromDataSourceAndTriggerChange();\n } else {\n this._triggerChange = true;\n }\n }\n }\n\n /**\n * Registers a callback to be triggered when the model value changes.\n * Implemented as part of ControlValueAccessor.\n *\n * @param fn - Callback to be registered.\n */\n registerOnChange(fn: (_: any) => void): void {\n this._onChange = fn;\n }\n\n /**\n * Registers a callback to be triggered when the control is touched.\n * Implemented as part of ControlValueAccessor.\n *\n * @param fn - Callback to be registered.\n */\n registerOnTouched(fn: any): void {\n this._onTouched = fn;\n }\n\n /**\n * Sets the disabled state of the control. Implemented as a part of ControlValueAccessor.\n *\n * @param {boolean} isDisabled - Whether the control should be disabled.\n */\n setDisabledState(isDisabled: boolean): void {\n this.disabled = isDisabled;\n }\n\n // === /ControlValueAccessor ===\n\n /**\n * Whether the given node has any child nodes, i.e. is expandable.\n */\n hasChild = (_: number, nodeData: LevelModelTreeNode): boolean => nodeData.expandable;\n\n getExpandedState(node: LevelModelTreeNode): 'expanded' | 'collapsed' {\n return this.nestedTreeControl.isExpanded(node) ? 'expanded' : 'collapsed';\n }\n\n getOldValueFor(property: keyof LevelImportListDtoModel, node: LevelModelTreeNode): string | undefined {\n if (property in node.changes) {\n return node.changes[property]?.oldValue;\n }\n\n return undefined;\n }\n\n getOldValueTooltipFor(property: keyof LevelImportListDtoModel, node: LevelModelTreeNode): string | null {\n let value = this.getOldValueFor(property, node);\n if (value == null) {\n return null;\n }\n\n if (value !== '') {\n switch (property) {\n case 'startDate':\n case 'endDate': {\n const date = this.dateAdapter.deserialize(value);\n value = (date != null\n ? formatDate(date, 'date')\n : `Invalid date \"${value}\"`\n );\n break;\n }\n default:\n break;\n }\n } else {\n value = 'n/a';\n }\n\n return `Previous value: ${value}`;\n }\n\n /**\n * Toggle the project structure item selection. Select/deselect all the descendant nodes.\n *\n * @param {LevelModelTreeNode} node\n */\n projectStructureItemSelectionToggle(node: LevelModelTreeNode): void {\n if (node.isDisabled) {\n return;\n }\n\n // eslint-disable-next-line no-param-reassign\n node.isSelected = !node.isSelected;\n\n const updateChildrenRecursive = (children: LevelModelTreeNode[], selected: boolean): void => {\n children.forEach((child) => {\n if (!child.isDisabled) {\n // eslint-disable-next-line no-param-reassign\n child.isSelected = selected;\n }\n if (child.children.length > 0) {\n updateChildrenRecursive(child.children, selected);\n }\n child.updateSelectedStates();\n });\n };\n\n if (node.children.length > 0) {\n updateChildrenRecursive(node.children, node.isSelected);\n }\n\n let parent: LevelModelTreeNode | null = node;\n while (parent) {\n parent.updateSelectedStates();\n parent = parent.parent;\n }\n this.updateValueFromDataSourceAndTriggerChange();\n }\n\n /**\n * Toggles the expanded state of all nodes.\n */\n toggleExpansion(): void {\n const expanded = this.nestedTreeControl\n .dataNodes\n .find((node) => this.nestedTreeControl.isExpanded(node));\n\n if (expanded) {\n this.collapseAll();\n } else {\n this.expandAll();\n }\n }\n\n /**\n * Expands all data nodes in the tree.\n */\n expandAll(): void {\n const levels = this.nestedDataSource.data || [];\n levels.forEach((level) => {\n this.nestedTreeControl.expandDescendants(level);\n });\n }\n\n /**\n * Collapse all dataNodes in the tree.\n */\n collapseAll(): void {\n const levels = this.nestedDataSource.data || [];\n levels.forEach((level) => {\n this.nestedTreeControl.collapseDescendants(level);\n });\n }\n\n /**\n * Selects all data nodes in the tree.\n */\n selectAll(): void {\n const selectRecursive = (levels: LevelModelTreeNode[]): void => {\n levels.forEach((level) => {\n if (!level.isDisabled) {\n // eslint-disable-next-line no-param-reassign\n level.isSelected = true;\n }\n if (level.children.length > 0) {\n selectRecursive(level.children);\n }\n });\n };\n selectRecursive(this.nestedDataSource.data);\n }\n\n /**\n * Deselects all data nodes in the tree.\n */\n deselectAll(): void {\n const deselectRecursive = (levels: LevelModelTreeNode[]): void => {\n levels.forEach((level) => {\n if (!level.isDisabled) {\n // eslint-disable-next-line no-param-reassign\n level.isSelected = false;\n }\n if (level.children.length > 0) {\n deselectRecursive(level.children);\n }\n });\n };\n deselectRecursive(this.nestedDataSource.data);\n }\n\n private getChildren = (node: LevelModelTreeNode): LevelModelTreeNode[] => node.children;\n\n /**\n * Checks data and source (which should be identical arrays in size and the amount of children)\n * for differences in the `isSelected` property.\n */\n private hasChangesAfterMapping(data: LevelModelTreeNode[], source: readonly LevelImportListDtoModel[]): boolean {\n const { length } = data;\n for (let i = 0; i < length; i += 1) {\n if (\n data[i].isSelected !== source[i].isSelected\n || this.hasChangesAfterMapping(data[i].children, source[i].children)\n ) {\n return true;\n }\n }\n\n return false;\n }\n\n private updateValueFromDataSourceAndTriggerChange(): void {\n // Prevent external modification of object properties by always providing a copy of the model\n this._value = this.nestedDataSource\n .data\n .map((level) => LevelImportListDtoModel.fromSimilarObject(level));\n this._onChange(this._value);\n }\n\n /** The method to be called in order to update ngModel */\n private _onChange: (value: any) => void = () => {}; // eslint-disable-line @typescript-eslint/no-empty-function\n\n /** onTouch function registered via registerOnTouch (ControlValueAccessor) */\n private _onTouched: () => any = () => {}; // eslint-disable-line @typescript-eslint/no-empty-function\n}\n","import { Component, Input } from '@angular/core';\n\n@Component({\n selector: 'collapp-loading-spinner',\n templateUrl: './spinner.component.html',\n styleUrls: ['./spinner.component.scss'],\n standalone: false\n})\nexport class LoadingSpinnerComponent {\n @Input()\n diameter: number = 64;\n}\n","\n \n\n
\n \n
\n","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { LoadingSpinnerComponent } from './spinner.component';\n\n@NgModule({\n imports: [\n CommonModule,\n ],\n exports: [\n LoadingSpinnerComponent,\n ],\n declarations: [\n LoadingSpinnerComponent,\n ],\n})\nexport class SpinnerModule {\n}\n","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { AddAdditionalSupplierButtonComponent } from './add-additional-supplier-button.component';\nimport { SpinnerModule } from '../../spinner';\n\n@NgModule({\n declarations: [\n AddAdditionalSupplierButtonComponent,\n ],\n imports: [\n CommonModule,\n SpinnerModule,\n ],\n exports: [\n AddAdditionalSupplierButtonComponent,\n ],\n})\nexport class AddAdditionalSupplierButtonModule { }\n","@if (canAdd && !forceDisabled) {\n \n @if ((additionalSuppliersAndChrcpService.availableToAdd$ | async) === undefined) {\n \n }\n @if ((additionalSuppliersAndChrcpService.availableToAdd$ | async) !== undefined) {\n \n Add additional supplier\n \n }\n\n}\n","import {\n Component, OnInit, OnDestroy, Input, OnChanges, SimpleChanges,\n} from '@angular/core';\nimport { MatDialog, MatDialogRef } from '@angular/material/dialog';\nimport { ApplicationInsightsService } from '../../../modules/application-insights';\nimport { Subject } from 'rxjs';\nimport { take, takeUntil } from 'rxjs/operators';\nimport { AdditionalSuppliersAndChrcpService } from '../../../services/additional-suppliers-and-chrcp.service';\nimport { UntypedFormControl } from '@angular/forms';\nimport { UnitSkillDtoModel } from '../../../api/models/dtos/unit-skill.dto.model';\nimport { UnitSelectorDtoModel } from '../../../api/models/dtos/unit-selector.dto.model';\nimport { ContractDtoModel } from '../../../api/models/dtos/contract.dto.model';\nimport { CollappWpAddAdditionalSuppliersDialogComponent } from '../collapp-wp-add-additional-suppliers-dialog/collapp-wp-add-additional-suppliers-dialog.component';\nimport { AddAdditionalSuppliersDialogCloseData, AddAdditionalSuppliersDialogData } from '../collapp-wp-add-additional-suppliers-dialog/collapp-wp-add-additional-suppliers-dialog.types';\n\n@Component({\n selector: 'add-additional-supplier-button',\n templateUrl: './add-additional-supplier-button.component.html',\n styleUrls: ['./add-additional-supplier-button.component.scss'],\n standalone: false\n})\nexport class AddAdditionalSupplierButtonComponent implements OnInit, OnDestroy, OnChanges {\n @Input()\n projectId!: number;\n\n @Input()\n workPackageId!: number;\n\n @Input()\n contractSupplierUnitId!: number;\n\n @Input()\n canAdd: boolean = false;\n\n @Input()\n unitControl: UntypedFormControl = new UntypedFormControl();\n\n @Input()\n existingUnits: UnitSelectorDtoModel[] | UnitSkillDtoModel[] = [];\n\n forceDisabled: boolean = false;\n\n private existingUnitIds: number[] = [];\n\n private readonly destroyed$: Subject = new Subject();\n\n private addDialogRef: MatDialogRef<\n CollappWpAddAdditionalSuppliersDialogComponent, AddAdditionalSuppliersDialogCloseData\n > | null = null;\n\n constructor(\n public dialog: MatDialog,\n private appInsightsService: ApplicationInsightsService,\n public additionalSuppliersAndChrcpService: AdditionalSuppliersAndChrcpService,\n ) {\n }\n\n ngOnInit(): void {\n this.additionalSuppliersAndChrcpService.canAdd = this.canAdd;\n this.initAdditionalSuppliers();\n }\n\n ngOnChanges(changes: SimpleChanges): void {\n if (changes.existingUnits) {\n this.checkIfDifferentAdditionalUnitsOrDisable();\n }\n }\n\n ngOnDestroy(): void {\n this.destroyed$.next();\n this.destroyed$.complete();\n }\n\n addSupplierUnit(): void {\n this.openAdditionalSupplierUnitDialog();\n }\n\n /**\n * Check if all additional Units are already in existingUnits , if yes, disable the button\n */\n private checkIfDifferentAdditionalUnitsOrDisable(): void {\n // at least one of the additional units must be different from the existing Units\n // really different, not the same with other hrc\n\n if (!this.additionalSuppliersAndChrcpService.availableContracts\n || this.additionalSuppliersAndChrcpService.availableContracts.length === 0) {\n this.forceDisabled = true;\n return;\n }\n\n if (this.existingUnits && this.existingUnits.length) {\n // eslint-disable-next-line max-len\n const additionalUnitsIds = this.additionalSuppliersAndChrcpService.availableContracts.map((item) => item.supplierUnit?.unitId);\n this.existingUnitIds = (this.existingUnits as UnitSelectorDtoModel[]).map((existingUnit) => existingUnit.unitId);\n // if all additionalIds are in existingUnits, we should forceDisabled=true\n let areAllInExisting = true;\n for (let i = 0; i < additionalUnitsIds.length; i++) {\n // eslint-disable-next-line max-len\n const foundIndex = this.existingUnitIds.indexOf(additionalUnitsIds[i] || 0);\n if (foundIndex === -1) {\n areAllInExisting = false;\n break;\n }\n }\n if (areAllInExisting) {\n this.forceDisabled = true;\n return;\n }\n }\n\n this.forceDisabled = false;\n }\n\n /**\n * Remove the additionalUnits which are already in ExistingUnits\n * Ignore the HRC\n */\n private filterAdditionalUnitsComparedToExisting(): ContractDtoModel[] {\n // eslint-disable-next-line max-len, arrow-body-style\n return this.additionalSuppliersAndChrcpService.availableContracts.filter((availableContract) => {\n return (this.existingUnitIds.indexOf(availableContract.supplierUnit?.unitId || 0) === -1);\n });\n }\n\n private openAdditionalSupplierUnitDialog(): void {\n const hasAdditionalSuppliers = (this.additionalSuppliersAndChrcpService.availableContracts?.length || 0) > 0;\n if (this.addDialogRef || !this.canAdd || !hasAdditionalSuppliers) {\n return;\n }\n const { contractSupplierUnitId } = this;\n const contracts = this.filterAdditionalUnitsComparedToExisting();\n if (!contractSupplierUnitId || !contracts) {\n this.appInsightsService.trackException(\n new Error('Contract supplier unit id is not defined or no contracts are available'),\n );\n return;\n }\n const dialogData: AddAdditionalSuppliersDialogData = {\n contracts,\n };\n this.addDialogRef = this.dialog.open<\n CollappWpAddAdditionalSuppliersDialogComponent,\n AddAdditionalSuppliersDialogData\n >(CollappWpAddAdditionalSuppliersDialogComponent, {\n data: dialogData,\n disableClose: true,\n closeOnNavigation: false,\n autoFocus: false,\n panelClass: ['collapp-dialog', 'collapp-dialog--small'],\n });\n this.addDialogRef.afterClosed()\n .pipe(\n // do not use takeUntil because the dialog is closed automatically before the value is emitted\n take(1),\n )\n // eslint-disable-next-line rxjs-angular/prefer-takeuntil\n .subscribe((data) => {\n if (!data) {\n return;\n }\n const { chrcps } = data;\n this.additionalSuppliersAndChrcpService.adjustSuppliersByCHRCP(chrcps);\n this.additionalSuppliersAndChrcpService.save$(\n this.projectId,\n this.workPackageId,\n ).subscribe({\n next: this.onDialogSuccess.bind(this),\n error: this.onDialogError.bind(this),\n });\n });\n }\n\n private onDialogSuccess(): void {\n if (!this.additionalSuppliersAndChrcpService.isModified) {\n return;\n }\n this.unitControl.setValue(\n this.additionalSuppliersAndChrcpService.lastAddedSupplierUnit,\n );\n this.addDialogRef = null;\n this.additionalSuppliersAndChrcpService.reset();\n }\n\n private onDialogError(error: Error): void {\n this.appInsightsService.trackException(error);\n this.addDialogRef = null;\n }\n\n private checkInputs(): void {\n if (\n this.canAdd && (\n !this.projectId\n || !this.workPackageId\n || !this.contractSupplierUnitId\n )\n ) {\n const errorMsg = 'Project id, work package id or contract supplier unit id is not defined';\n this.appInsightsService.trackException(\n new Error(errorMsg),\n );\n throw new Error(errorMsg);\n }\n }\n\n private initAdditionalSuppliers(): void {\n if (!this.canAdd) {\n return;\n }\n this.checkInputs();\n this.additionalSuppliersAndChrcpService.loadData$(\n this.projectId,\n this.workPackageId,\n this.contractSupplierUnitId,\n ).pipe(takeUntil(this.destroyed$)).subscribe(() => {\n this.checkIfDifferentAdditionalUnitsOrDisable();\n });\n }\n}\n","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { ReactiveFormsModule } from '@angular/forms';\nimport { CollappCommonModule } from '../../collapp-common';\nimport { UnitSelectComponent } from './unit-select.component';\nimport { NgSelectMaterialModule } from '../ng-select-mat';\nimport { AddAdditionalSupplierButtonModule } from '../dialogs/add-additional-supplier-button/add-additional-supplier-button.module';\n\n@NgModule({\n imports: [\n CommonModule,\n ReactiveFormsModule,\n CollappCommonModule,\n NgSelectMaterialModule,\n AddAdditionalSupplierButtonModule,\n ],\n exports: [\n UnitSelectComponent,\n ],\n declarations: [\n UnitSelectComponent,\n ],\n})\nexport class UnitSelectModule {\n}\n","\n \n {{ item.group }}\n \n \n
\n \n {{ item.name }} @if (!isSkillUnitSelector) {\n (Level {{ item | collAppUnitLevel }})\n }\n \n
\n
\n\n @if (!showSummary || !multiple) {\n @for (item of items; track unitOptionTrackByFn($index, item)) {\n
\n
\n \n {{ item.name }} @if (!isSkillUnitSelector) {\n (Level {{ item | collAppUnitLevel }})\n }\n \n
\n
×
\n
\n }\n}\n@if (showSummary && multiple) {\n \n {{ summary }}\n \n}\n
\n\n \n {{ item.name }} @if (!isSkillUnitSelector) {\n (Level {{ item | collAppUnitLevel }})\n }\n\n\n@if (!isSkillUnitSelector) {\n \n @if (canAddSupplierUnit) {\n \n }\n @if (listInitialized) {\n \n }\n \n}\n\n","/* eslint-disable @angular-eslint/no-conflicting-lifecycle */\n// eslint-disable-next-line max-classes-per-file\nimport {\n Attribute,\n ChangeDetectionStrategy,\n Component,\n DoCheck,\n HostBinding,\n Input,\n OnChanges,\n OnDestroy,\n OnInit,\n Optional,\n Output,\n Self,\n SimpleChanges,\n ViewChild,\n ViewEncapsulation,\n} from '@angular/core';\nimport { coerceBooleanProperty } from '@angular/cdk/coercion';\nimport {\n ControlValueAccessor, UntypedFormControl, FormGroupDirective, NgControl, NgForm,\n} from '@angular/forms';\nimport {\n ErrorStateMatcher,\n _ErrorStateTracker,\n} from '@angular/material/core';\nimport { MatFormFieldControl } from '@angular/material/form-field';\nimport {\n BehaviorSubject, merge, Observable, of, Subject,\n} from 'rxjs';\nimport {\n debounceTime,\n distinctUntilChanged,\n filter,\n map,\n mapTo,\n share,\n switchMap,\n takeUntil,\n tap,\n} from 'rxjs/operators';\nimport { NgSelectComponent } from '@ng-select/ng-select';\nimport moment from 'moment';\nimport { CompareWithUtility } from '../../helpers/compare-with.utility';\nimport { UnitSelectorDtoModel } from '../../api/models/dtos/unit-selector.dto.model';\nimport { UnitSelectorAvailableRequestOptions, UnitSelectorRequestOptions, UnitService } from '../../api/services/unit.service';\nimport { DEBOUNCE_INPUT_CHANGE_TIME_SMALL } from '../../shared/constants';\nimport { Unit, UnitIdentity } from '../../models/unit.interface';\nimport { ErrorHandlerService } from '../../services/error-handler.service';\nimport { UnitLevel } from '../../models/unit-level.enum';\nimport { UnitSkillDtoModel } from '../../api/models/dtos/unit-skill.dto.model';\nimport { I } from '@angular/cdk/keycodes';\n\n// TODO Maybe adapt nullable level in UnitIdentity base type\nexport interface UnitWithOptionalLevel extends UnitIdentity {\n name: string;\n level: UnitLevel | null;\n}\n\n/**\n * The possible types the unit selector fetches\n * its values:\n * - AllUnits: Will fetch all / consider all units while filtering\n * - UserUnitsWithChildren: Considers all units that a user has access to\n * - UserL3Units: All L3 units of a user (considers the path to parents).\n * - AllL1ToL4Units: All Units belonging to the L1 path\n * - AllL4Units: All L4 Units that exist\n * - UserL1Units: Every unit that is part of the L1 of the user\n * - WorkPackageUnitsSubmitterView: User can filter all submitter units of WP they can see\n * - WorkPackageUnitsSupplierView: User can filter all supplier units of WP they can see\n * - UserCoordinatorUnitsAndContractSuppliers: Every unit the user is (deputy) coordinator of and the\n * unit's contract suppliers\n */\nexport enum UnitSelectFetchType {\n AllUnits = 'AllUnits',\n UserUnitsWithChildren = 'UserUnitsWithChildren',\n UserL3Units = 'UserL3Units',\n AllL1ToL4Units = 'AllL1ToL4Units',\n AllL4Units = 'AllL4Units',\n UserL1Units = 'UserL1Units',\n WorkPackageUnitsSubmitterView = 'WorkPackageUnitsSubmitterView',\n WorkPackageUnitsSupplierView = 'WorkPackageUnitsSupplierView',\n UserCoordinatorUnitsAndContractSuppliers = 'UserCoordinatorUnitsAndContractSuppliers',\n Skills = 'Skills',\n AllL1Units = 'AllL1Units',\n AvailableUnitsForWorkPackage = 'AvailableUnitsForWorkPackage',\n}\n\nconst GROUP_RECENTLY_VIEWED = 'Recently viewed';\nconst GROUP_SEARCH_RESULTS = 'Search results';\n\n@Component({\n selector: 'collapp-unit-select',\n exportAs: 'collappUnitSelect',\n templateUrl: './unit-select.component.html',\n styleUrls: ['./unit-select.component.scss'],\n providers: [\n // eslint-disable-line @typescript-eslint/no-use-before-define\n { provide: MatFormFieldControl, useExisting: UnitSelectComponent },\n ],\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush,\n standalone: false\n})\nexport class UnitSelectComponent\n implements OnInit, OnDestroy, DoCheck, OnChanges, ControlValueAccessor,\n MatFormFieldControl {\n static nextId: number = 0;\n\n @HostBinding('class.collapp-unit-select')\n readonly unitSelectClass: boolean = true;\n\n // === MatFormFieldControl ===\n\n @Input()\n tabIndex: number = 0;\n\n @Input()\n disabled: boolean = false;\n\n @Input()\n disableRipple: boolean = false;\n\n /** The value of the control. */\n get value(): T | null { return this.unitControl.value; }\n\n @Input()\n set value(value: T | null) {\n this.writeValue(value);\n }\n\n /** The element ID for this control. */\n @HostBinding()\n @Input()\n get id(): string { return this._id; }\n\n set id(value: string) {\n this._id = (value != null ? value : this._uid);\n this.stateChanges.next();\n }\n\n /** The placeholder for this control. */\n get placeholder(): string { return this._placeholder; }\n\n @Input()\n set placeholder(value: string) {\n if (this._placeholder !== value) {\n this._placeholder = value;\n this.stateChanges.next();\n }\n }\n\n /** Whether to only show a summary (x units selected) or the list of selected units */\n get showSummary(): boolean { return this._showSummary; }\n\n @Input()\n set showSummary(value: boolean) {\n if (this._showSummary !== value) {\n this._showSummary = value;\n this.stateChanges.next();\n }\n }\n\n /**\n * Sets a list of units as recently viewed.\n * Recently viewed units are listed separately from searched units.\n */\n @Input()\n set recentUnits(units: readonly T[]) {\n if (this._recentUnits != null) {\n const recentUnits = units.map((unit) => {\n const option = new UnitSelectorDtoModel(\n unit.unitId,\n unit.name,\n unit.level,\n null,\n null,\n );\n\n option.group = GROUP_RECENTLY_VIEWED;\n\n return option;\n });\n\n // Replace current recently viewed units\n const currentList = this.filteredUnitsSubject$.value;\n this._recentUnits = recentUnits;\n\n const updatedList = [\n ...recentUnits,\n ...(currentList as UnitSelectorDtoModel[])\n .filter((unit) => unit.group !== GROUP_RECENTLY_VIEWED)\n .map((unit) => {\n // eslint-disable-next-line no-param-reassign\n unit.group = GROUP_SEARCH_RESULTS;\n\n return unit;\n }),\n ];\n\n this.filteredUnitsSubject$.next(updatedList);\n this.numberOfResults = updatedList.length;\n this.stateChanges.next();\n }\n }\n\n /**\n * Sets a list of units as recently viewed.\n * Recently viewed units are listed separately from searched units.\n */\n @Input()\n set recentSkillUnits(units: readonly UnitSkillDtoModel[]) {\n if (this._recentSkillUnits != null) {\n const recentUnits = units.map((unit) => {\n const option = UnitSkillDtoModel.fromJSON(unit.toJSON());\n\n // eslint-disable-next-line no-param-reassign\n option.group = GROUP_RECENTLY_VIEWED;\n\n return option;\n });\n\n // Replace current recently viewed units\n const currentList = this.filteredUnitsSubject$.value;\n this._recentSkillUnits = recentUnits;\n\n const updatedList = [\n ...recentUnits,\n ...(currentList as UnitSkillDtoModel[])\n .filter((unit) => unit.group !== GROUP_RECENTLY_VIEWED)\n .map((unit) => {\n // eslint-disable-next-line no-param-reassign\n unit.group = GROUP_SEARCH_RESULTS;\n\n return unit;\n }),\n ];\n\n this.filteredUnitsSubject$.next(updatedList);\n this.numberOfResults = updatedList.length;\n this.stateChanges.next();\n }\n }\n\n @Input()\n workPackageId: number | null = null;\n\n @Input()\n projectId: number | null = null;\n\n @Input()\n contractSupplierUnitId: number | null = null;\n\n @Input()\n canAddSupplierUnit: boolean | null = null;\n\n /** Whether the control is focused. */\n get focused(): boolean {\n return this.unitSelect.focused;\n }\n\n /** Whether the control is empty. */\n get empty(): boolean {\n return (\n this.unitControl.value == null\n || (\n Array.isArray(this.unitControl.value)\n && this.unitControl.value.length === 0\n )\n );\n }\n\n /** Whether the `MatFormField` label should try to float. */\n @HostBinding('class.mat-form-field-should-float')\n get shouldLabelFloat(): boolean {\n return true;\n }\n\n /** Whether the component is required */\n get required(): boolean { return this._required; }\n\n @Input()\n set required(value: boolean) {\n this._required = coerceBooleanProperty(value);\n }\n\n /**\n * Whether the component is disabled\n *\n * Already set through the Disabled mixin.\n */\n // @Input()\n // public disabled: boolean;\n\n /** An object used to control when error messages are shown. */\n @Input()\n get errorStateMatcher(): ErrorStateMatcher {\n return this._errorStateTracker.matcher;\n }\n set errorStateMatcher(value: ErrorStateMatcher) {\n this._errorStateTracker.matcher = value;\n }\n\n // === MatFormFieldControl additional custom ===\n\n @HostBinding('attr.aria-describedby')\n describedBy: string = '';\n\n /**\n * The number of elements to be shown in the list, after filtering.\n */\n @Input()\n limit: number = 40;\n\n @Input()\n date: moment.Moment | null = null;\n\n /**\n * The fetch type which should be applied when getting the list.\n */\n @Input()\n fetchType: UnitSelectFetchType = UnitSelectFetchType.UserUnitsWithChildren;\n\n /**\n * Include children parameter\n */\n @Input()\n includeChildren: boolean = false;\n\n @Output()\n readonly loading: Observable;\n\n @ViewChild('unitSelect', { static: true })\n private unitSelect!: NgSelectComponent;\n\n /**\n * An optional name for the control type that can be used to distinguish `mat-form-field` elements\n * based on their control type. The form field will add a class,\n * `mat-form-field-type-{{controlType}}` to its root element.\n */\n readonly controlType: string = 'unit-select';\n\n /**\n * Whether the input is currently in an autofilled state. If property is not present on the\n * control it is assumed to be false.\n */\n readonly autofilled: boolean = false;\n\n // === /MatFormFieldControl ===\n\n // === /MatFormFieldControl additional custom ===\n\n // === Custom controls ===\n\n /**\n * Contains a list of items that are supposed to be disabled.\n * It resets the map whenever changes occur.\n * @param items\n */\n @Input()\n set disabledItems(items: UnitIdentity[]) {\n const newItems = (Array.isArray(items) ? items : []);\n\n this.disabledUnitIds.clear();\n\n newItems.forEach((item) => {\n this.disabledUnitIds.add(item.unitId);\n });\n }\n\n /**\n * Flag that indicates whether multiple values can be selected.\n */\n get multiple(): boolean { return this._multiple; }\n\n @Input()\n set multiple(value: boolean) {\n this._multiple = coerceBooleanProperty(value);\n }\n\n get clearSearchOnAdd(): boolean { return this._clearSearchOnAdd; }\n\n @Input()\n set clearSearchOnAdd(value: boolean) {\n this._clearSearchOnAdd = coerceBooleanProperty(value);\n }\n\n get closeOnSelect(): boolean { return this._closeOnSelect; }\n\n @Input()\n set closeOnSelect(value: boolean) {\n this._closeOnSelect = coerceBooleanProperty(value);\n }\n\n /**\n * Flag that indicates whether a unfiltered list should be fetch on init.\n * If set to true, the user will have to filter, before seeing a list.\n */\n get initFetch(): boolean { return this._initFetch; }\n\n @Input()\n set initFetch(value: boolean) {\n this._initFetch = coerceBooleanProperty(value);\n }\n\n /**\n * If set to true in combination with initFetch,\n * the first value of the provided list will be set.\n */\n get setInitFetchDefault(): boolean { return this._setInitFetchDefault; }\n\n @Input()\n set setInitFetchDefault(value: boolean) {\n this._setInitFetchDefault = coerceBooleanProperty(value);\n }\n\n /**\n * Allows the currently selected value to be cleared.\n */\n get clearable(): boolean { return this._clearable; }\n\n @Input()\n set clearable(value: boolean) {\n this._clearable = coerceBooleanProperty(value);\n }\n\n // === \\ Custom controls ===\n\n readonly unitsCompare: (o1: any, o2: any) => boolean = CompareWithUtility.unitsCompare;\n\n get isLoading(): boolean { return this.loadingSubject$.value; }\n\n get isSkillUnitSelector(): boolean { return this.fetchType === UnitSelectFetchType.Skills; }\n\n listInitialized: boolean = false;\n\n filteredUnits$: Observable;\n\n numberOfResults: number = 0;\n\n numberOfMaxTotalResults: number = 0;\n\n // it must be public to use in the ng-select\n // eslint-disable-next-line rxjs/no-exposed-subjects\n typeahead$: Subject = new Subject();\n\n unitControl: UntypedFormControl = new UntypedFormControl();\n\n get summary(): string {\n if (this._multiple && this.value instanceof Array) {\n const selectedUnits = (this.value as UnitSelectorDtoModel[]).length;\n\n return `${selectedUnits} ${selectedUnits === 1 ? 'unit' : 'units'} selected`;\n }\n\n return '';\n }\n\n units: UnitSelectorDtoModel[] | UnitSkillDtoModel[] = [];\n\n // === MatFormFieldControl ===\n private _errorStateTracker: _ErrorStateTracker;\n\n private _placeholder: string = '';\n\n private _required: boolean = false;\n // === \\ MatFormFieldControl ===\n\n // === Custom controls ===\n /**\n * Unit IDs in this map will be set to disabled in the list\n */\n private disabledUnitIds: Set = new Set();\n\n private _multiple: boolean = false;\n\n private _initFetch: boolean = false;\n\n private _setInitFetchDefault: boolean = false;\n\n private _clearable: boolean = true;\n\n private _clearSearchOnAdd: boolean = true;\n\n private _closeOnSelect: boolean = true;\n\n private _showSummary: boolean = false;\n\n private _recentUnits: readonly UnitSelectorDtoModel[] = [];\n\n private _recentSkillUnits: readonly UnitSkillDtoModel[] = [];\n // === \\ Custom controls ===\n\n private filteredUnitsSubject$: BehaviorSubject<\n UnitSelectorDtoModel[] | UnitSkillDtoModel[]\n > = new BehaviorSubject([]);\n\n private loadingSubject$: BehaviorSubject = new BehaviorSubject(false);\n\n private _id: string;\n\n /** Unique id for this input. */\n // eslint-disable-next-line no-plusplus\n private _uid: string = `collapp-unit-select-${UnitSelectComponent.nextId++}`;\n\n private destroyed$: Subject = new Subject();\n\n /**\n * Emits whenever the component state changes and should cause the parent\n * form-field to update. Implemented as part of `MatFormFieldControl`.\n * @docs-private\n */\n readonly stateChanges = new Subject();\n\n /** Whether the chip grid is in an error state. */\n get errorState(): boolean {\n return this._errorStateTracker.errorState;\n }\n set errorState(value: boolean) {\n this._errorStateTracker.errorState = value;\n }\n\n constructor(\n _defaultErrorStateMatcher: ErrorStateMatcher,\n @Optional() _parentForm: NgForm,\n @Optional() _parentFormGroup: FormGroupDirective,\n @Optional() @Self() public ngControl: NgControl,\n // eslint-disable-next-line @angular-eslint/no-attribute-decorator\n @Attribute('tabindex') tabIndex: string,\n private errorHandlerService: ErrorHandlerService,\n private unitService: UnitService\n ) {\n if (this.ngControl != null) {\n // Note: we provide the value accessor through here, instead of\n // the `providers` to avoid running into a circular import.\n this.ngControl.valueAccessor = this;\n }\n\n this._errorStateTracker = new _ErrorStateTracker(\n _defaultErrorStateMatcher,\n ngControl,\n _parentFormGroup,\n _parentForm,\n this.stateChanges,\n );\n\n this.tabIndex = Number.parseInt(tabIndex, 10) || 0;\n\n // Set default id to internal uid\n this._id = this._uid;\n\n this.filteredUnits$ = this.filteredUnitsSubject$.asObservable();\n this.loading = this.loadingSubject$.asObservable();\n }\n\n\n updateErrorState(): void {\n this._errorStateTracker.updateErrorState();\n }\n\n // eslint-disable-next-line @angular-eslint/no-conflicting-lifecycle, max-lines-per-function\n ngOnInit(): void {\n this.unitControl\n .valueChanges\n .pipe(\n takeUntil(this.destroyed$),\n )\n .subscribe((value) => {\n this._onChange(value);\n this.stateChanges.next();\n });\n\n const initialDropDownOpen$ = this.unitSelect\n .openEvent\n .pipe(\n filter(() => !this.listInitialized),\n mapTo(''),\n takeUntil(this.destroyed$),\n share(),\n );\n\n // eslint-disable-next-line no-nested-ternary\n const listeners$ = this.isSkillUnitSelector\n ? (this.initFetch ? of('') : initialDropDownOpen$)\n : merge(\n (this.initFetch ? of('') : initialDropDownOpen$),\n this.typeahead$,\n ).pipe(\n debounceTime(DEBOUNCE_INPUT_CHANGE_TIME_SMALL),\n map((value) => (value ? value?.trim() : '')),\n distinctUntilChanged(),\n );\n\n const unitControlChange$ = this.unitControl.valueChanges\n .pipe(\n filter((value) => !!value?.unitId),\n distinctUntilChanged((a, b) => a.unitId === b.unitId),\n takeUntil(this.destroyed$),\n );\n\n // Listens for changes in the filterable dropdown\n (this.canAddSupplierUnit\n ? merge(listeners$, unitControlChange$)\n : listeners$\n )\n .pipe(\n tap(() => this.loadingSubject$.next(true)),\n // eslint-disable-next-line max-lines-per-function\n switchMap((filterString) => {\n if (this.fetchType === UnitSelectFetchType.AvailableUnitsForWorkPackage) {\n if (this.workPackageId == null || this.projectId == null) {\n throw new Error('WworkPackageId and projectId must be set');\n }\n\n const requestOptions: UnitSelectorAvailableRequestOptions = {\n workPackageId: this.workPackageId,\n projectId: this.projectId,\n filterString,\n limit: this.limit,\n };\n\n return this.unitService.getAvailableUnitsForUnitSelector$(requestOptions)\n .pipe(\n map((response) => [...response.items]),\n );\n }\n const requestOptions: UnitSelectorRequestOptions = {\n unitFetchType: this.fetchType,\n includeChildren: this.includeChildren,\n limit: this.limit,\n date: this.date?.toISOString(),\n };\n\n if (filterString.length > 0) {\n requestOptions.filterString = filterString;\n }\n\n if (this.fetchType === UnitSelectFetchType.AllL1Units) {\n return this.unitService.getL1Units$()\n .pipe(\n map((response) => [...response]),\n );\n }\n\n if (this.fetchType === UnitSelectFetchType.Skills) {\n return this.unitService\n .getSkillUnits$()\n .pipe(\n map((response) => [...this._recentSkillUnits, ...response.map((unit) => {\n // eslint-disable-next-line no-param-reassign\n unit.group = GROUP_SEARCH_RESULTS;\n\n return unit;\n })]),\n );\n }\n\n return this.unitService\n .getUnitsForUnitSelector$(requestOptions)\n .pipe(\n tap((response) => {\n if (filterString === '') {\n if (response.metadata.paginationInfo) {\n this.numberOfMaxTotalResults = response.metadata.paginationInfo.numberOfTotalResults || 0;\n }\n }\n }),\n map((response) => {\n const searchedUnits = response.items.map((unit) => this.extendSearchedUnits(unit));\n\n if (!filterString || filterString.trim() === '') {\n // Show recent units if filter string does not contain anything\n return [...this._recentUnits, ...searchedUnits];\n }\n\n return searchedUnits;\n }),\n );\n }),\n takeUntil(this.destroyed$),\n )\n .subscribe(\n (units: UnitSelectorDtoModel[] | UnitSkillDtoModel[]) => {\n this.loadingSubject$.next(false);\n\n this.filteredUnitsSubject$.next(units);\n this.numberOfResults = units.length;\n\n if (!this.listInitialized) {\n this.listInitialized = true;\n\n if (\n this.setInitFetchDefault\n && this.value == null\n && units.length > 0\n ) {\n // if no item was selected previously\n // Preselects the first value of the initial fetch,\n this.writeValue(units[0]);\n }\n }\n\n this.units = units;\n },\n (error: unknown) => {\n this.loadingSubject$.next(false);\n this.errorHandlerService.handleError(error as Error, 'Error occurred while fetching units');\n },\n );\n }\n\n // eslint-disable-next-line @angular-eslint/no-conflicting-lifecycle\n ngDoCheck(): void {\n if (this.ngControl) {\n this.updateErrorState();\n }\n }\n\n // eslint-disable-next-line @angular-eslint/no-conflicting-lifecycle\n ngOnChanges(changes: SimpleChanges): void {\n // Updating the disabled state is handled by `mixinDisabled`, but we need to additionally let\n // the parent form field know to run change detection when the disabled state changes.\n if (changes.disabled) {\n this.setUnitControlDisabledState(changes.disabled.currentValue);\n this.stateChanges.next();\n }\n }\n\n // eslint-disable-next-line @angular-eslint/no-conflicting-lifecycle\n ngOnDestroy(): void {\n this.filteredUnitsSubject$.complete();\n this.destroyed$.next();\n this.destroyed$.complete();\n }\n\n // === ControlValueAccessor ===\n\n /**\n * Sets the model value. Implemented as part of ControlValueAccessor.\n *\n * @param value\n */\n writeValue(value: UnitWithOptionalLevel | null): void {\n this.unitControl.setValue(value);\n this.stateChanges.next();\n }\n\n /**\n * Registers a callback to be triggered when the model value changes.\n * Implemented as part of ControlValueAccessor.\n *\n * @param fn - Callback to be registered.\n */\n registerOnChange(fn: (value: any) => void): void {\n this._onChange = fn;\n }\n\n /**\n * Registers a callback to be triggered when the control is touched.\n * Implemented as part of ControlValueAccessor.\n *\n * @param fn - Callback to be registered.\n */\n registerOnTouched(fn: any): void {\n this._onTouched = fn;\n }\n\n /**\n * Sets the disabled state of the control. Implemented as a part of ControlValueAccessor.\n *\n * @param {boolean} isDisabled - Whether the control should be disabled.\n */\n setDisabledState(isDisabled: boolean): void {\n this.disabled = isDisabled;\n this.setUnitControlDisabledState(isDisabled);\n this.stateChanges.next();\n }\n\n // === /ControlValueAccessor ===\n\n // === MatFormFieldControl ===\n\n /** Sets the list of element IDs that currently describe this control. */\n setDescribedByIds(ids: string[]): void {\n this.describedBy = ids.join(' ');\n }\n\n /** Handles a click on the control's container. */\n onContainerClick(): void {\n // Nothing\n }\n\n // === /MatFormFieldControl ===\n\n unitTrackByFn(unit: UnitSelectorDtoModel): number {\n return unit.unitId;\n }\n\n unitOptionTrackByFn(index: number, unit: UnitSelectorDtoModel): number {\n return unit.unitId;\n }\n\n onBlur(): void {\n this.ngControl.control?.markAsTouched();\n }\n\n searchUnits(term: string, item: UnitSkillDtoModel): boolean {\n const searchTerm = term.toLowerCase();\n\n return item.name.toLowerCase().indexOf(searchTerm) !== -1;\n }\n\n private setUnitControlDisabledState(disabled: boolean): void {\n if (this.unitControl.disabled !== disabled) {\n if (disabled) {\n this.unitControl.disable();\n } else {\n this.unitControl.enable();\n }\n }\n }\n\n // =========\n\n /** The method to be called in order to update ngModel */\n private _onChange: (value: any) => void = () => {}; // eslint-disable-line @typescript-eslint/no-empty-function\n\n /**\n * onTouch function registered via registerOnTouch (ControlValueAccessor).\n */\n private _onTouched: () => any = () => {}; // eslint-disable-line @typescript-eslint/no-empty-function\n\n // =========\n\n /**\n * Sets the selector item to disabled, if the unit is part of the\n * disabled map. Sets a group to distinguish between recently viewed and searched units.\n */\n private extendSearchedUnits(unit: UnitSelectorDtoModel): UnitSelectorDtoModel {\n /* eslint-disable no-param-reassign */\n\n unit.disabled = this.disabledUnitIds.has(unit.unitId);\n\n if (this._recentUnits != null && this._recentUnits.length > 0) {\n unit.group = GROUP_SEARCH_RESULTS;\n }\n\n return unit;\n\n /* eslint-enable no-param-reassign */\n }\n}\n","import { Inject, Injectable } from '@angular/core';\nimport { DOCUMENT } from '@angular/common';\nimport { ActivatedRouteSnapshot, Route, Router, RouterStateSnapshot, UrlSegment, UrlTree } from '@angular/router';\nimport { Observable, of } from 'rxjs';\nimport {\n map, skipWhile, switchMap, take,\n} from 'rxjs/operators';\nimport { Store } from '@ngxs/store';\nimport { AccessControlService } from '../services/access-control.service';\nimport { UserPermissions } from '../api/user-permissions';\nimport { UserSelectors } from '../state';\nimport { UserDtoModel } from '../api/models/dtos/user.dto.model';\nimport { RETURN_URL_QUERY_PARAM } from '../shared/constants';\nimport { SUBSTITUTED_USER_ID_PARAM_NAME } from '../app.component';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class AccessGuard {\n constructor(\n @Inject(DOCUMENT) private readonly document: Document,\n private readonly accessControlService: AccessControlService,\n private readonly router: Router,\n private readonly store: Store,\n ) { }\n\n /**\n * A guard deciding if a route can be activated.\n * If the guard returns `true`, navigation will continue. If the guard returns `false`,\n * navigation will be cancelled. If the guard returns a `UrlTree`, current navigation will\n * be cancelled and a new navigation will be kicked off to the `UrlTree` returned from the\n * guard.\n */\n canActivate(route: ActivatedRouteSnapshot, state: RouterStateSnapshot): Observable {\n return this.substituteUser$(state.url).pipe(\n switchMap(_ => this.checkAccessAndPermissions$(state.url, route.data.permissions)),\n );\n }\n\n /**\n * Substitute the user if the URL contains a substituted user ID and he is allowed to.\n */\n private substituteUser$(urlDestination: string): Observable {\n const canSubstituteUser = this.accessControlService.canLoginAsSubstituteUser();\n if (!canSubstituteUser) {\n return of(undefined);\n }\n const user = this.store.selectSnapshot(UserSelectors.user);\n const url = new URL(urlDestination, window.location.origin);\n const userIdFromUrl = url.searchParams.get(SUBSTITUTED_USER_ID_PARAM_NAME);\n if (user?.userId !== userIdFromUrl && userIdFromUrl) {\n return this.accessControlService.loginSubstituteUser$(userIdFromUrl).pipe(take(1), map(_ => undefined));\n }\n return of(undefined);\n }\n\n /**\n * A guard deciding if a child route can be activated.\n * If the guard returns `true`, navigation will continue. If the guard returns `false`,\n * navigation will be cancelled. If the guard returns a `UrlTree`, current navigation will\n * be cancelled and a new navigation will be kicked off to the `UrlTree` returned from the\n * guard.\n */\n canActivateChild(\n childRoute: ActivatedRouteSnapshot,\n state: RouterStateSnapshot,\n ): Observable {\n return this.canActivate(childRoute, state);\n }\n\n /**\n * A guard deciding if children can be loaded.\n */\n canLoad(route: Route, segments: UrlSegment[]): Observable {\n const routeUrl = segments.reduce((path, segment) => `${path}/${segment.path}`, '');\n const permissions = (route.data ? route.data.permissions : undefined);\n const locationHref = this.document.location.href;\n const routeUrlIndex = locationHref.indexOf(routeUrl);\n\n let url = routeUrl;\n\n if (routeUrlIndex !== -1) {\n // @TODO This is a workaround for not having access to the entire route info\n // at this point. This is not 100% foolproof!\n const routeUrlWithQueryParams = locationHref.substr(routeUrlIndex);\n const routeUrlSignificantParts = routeUrlWithQueryParams.substr(routeUrl.length);\n if (routeUrlSignificantParts.match(/^\\/?[?#]/)) {\n url = routeUrlWithQueryParams;\n }\n }\n\n return this.checkAccessAndPermissions$(url, permissions)\n .pipe(\n map((result) => {\n if (typeof result === 'boolean') {\n return result;\n }\n\n this.router.navigateByUrl(result);\n\n return false;\n }),\n );\n }\n\n private checkAccessAndPermissions$(returnUrl: string, permissions?: UserPermissions): Observable {\n return this.checkAccessControl$()\n .pipe(\n map((hasAccess) => {\n let result: boolean | UrlTree = hasAccess;\n\n if (hasAccess) {\n if (!this.checkPermissions(permissions)) {\n // no permissions so redirect to no-access page\n result = this.router.createUrlTree(['/no-access']);\n }\n } else {\n // not logged in so redirect to login page with the return url\n result = this.router.createUrlTree(['/login'], { queryParams: { [RETURN_URL_QUERY_PARAM]: returnUrl } });\n }\n\n return result;\n }),\n );\n }\n\n private checkAccessControl$(): Observable {\n return this.accessControlService\n .accessControlPending$\n .pipe(\n skipWhile((accessControlPending) => accessControlPending),\n take(1),\n map(() => this.accessControlService.access),\n );\n }\n\n private checkPermissions(permissions?: any): boolean {\n if (!permissions) {\n return true;\n }\n\n const user: UserDtoModel | null = this.store.selectSnapshot(UserSelectors.user);\n\n return user?.hasPermissions(permissions) ?? false;\n }\n}\n","import { Injectable } from '@angular/core';\nimport { ActivatedRouteSnapshot, RouterStateSnapshot } from '@angular/router';\nimport {\n forkJoin, isObservable, Observable, of,\n} from 'rxjs';\nimport {\n catchError, map, switchMap, take,\n} from 'rxjs/operators';\nimport { ComponentCanDeactivateDirective } from '../common-behaviors/can-deactivate';\nimport { LayoutService } from '../services/layout.service';\nimport { LoadingIndicatorService } from '../services/loading-indicator.service';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class CanDeactivateGuard {\n constructor(\n private layoutService: LayoutService,\n private loadingService: LoadingIndicatorService,\n ) {}\n\n canDeactivate(\n component: ComponentCanDeactivateDirective,\n route: ActivatedRouteSnapshot,\n state: RouterStateSnapshot,\n nextState: RouterStateSnapshot,\n ): Observable | boolean {\n // Check main component as well as any other components (navbar, sidebar, aside).\n return forkJoin([\n of(component),\n this.layoutService.sidebarComponent$.pipe(take(1)) as Observable,\n this.layoutService.navbarComponent$.pipe(take(1)) as Observable,\n this.layoutService.asideComponent$.pipe(take(1)) as Observable,\n ])\n .pipe(\n catchError(() => of([] as ComponentCanDeactivateDirective[])),\n switchMap((values) => {\n const innerObservables: (Observable)[] = [];\n\n let j = values.length;\n while (j > 0) {\n j -= 1;\n // Proceed only if component exists an provides the `canDeactivate` method.\n if (values[j] != null && typeof values[j].canDeactivate !== \"undefined\") {\n const value$ = values[j].canDeactivate(route, state, nextState);\n if (typeof value$ === 'boolean') {\n innerObservables.push(of(value$));\n } else if (isObservable(value$)) {\n innerObservables.push(value$);\n } else {\n throw new Error('Invalid response type given from \\'canDeactivate()\\'. Type has to resolve to boolean.');\n }\n }\n }\n\n // Prevent error when list of inner observables is empty.\n if (innerObservables.length === 0) {\n return of([] as boolean[]);\n }\n\n this.loadingService.addGuardsCheck();\n\n // Await completion of all the inner observables.\n return forkJoin(innerObservables);\n }),\n map((values) => {\n let canDeactivate = true;\n let j = values.length;\n while (j > 0 && canDeactivate) {\n j -= 1;\n canDeactivate = values[j];\n }\n\n this.loadingService.removeGuardsCheck();\n\n return canDeactivate;\n }),\n );\n }\n}\n","import moment from 'moment';\nimport { GateDtoModel } from '../api/models/dtos/gate.dto.model';\nimport { UserDtoModel } from '../api/models/dtos/user.dto.model';\nimport { UserListDtoModel } from '../api/models/dtos/user-list.dto.model';\nimport { UserSlimDtoModel } from '../api/models/dtos/user-slim.dto.model';\nimport { RoleDtoModel } from '../api/models/dtos/role.dto.model';\nimport { LevelSlimDtoModel } from '../api/models/dtos/level-slim.dto.model';\nimport { ProjectTypeDtoModel } from '../api/models/dtos/project-type.dto.model';\nimport { ContractDtoModel } from '../api/models/dtos/contract.dto.model';\nimport { Unit } from '../models/unit.interface';\nimport { ProjectViewResponseModel } from '../api/models/responses/project-view.response.model';\nimport { CountryDtoModel } from '../api/models/dtos/country.dto.model';\nimport { ContractHourlyRateCategoryPairDtoModel } from '../api/models/dtos/contract-hourly-rate-category-pair.dto.model';\nimport { BasicUser } from '../models/user.interface';\nimport { UnitPlanningResourceDtoModel } from '../api/models/dtos/unit-planning-resource.dto.model';\nimport { TimeTrackingRowDtoModel } from '../api/models/dtos/time-tracking-row.dto.model';\nimport { CostObjectDtoModel } from '../api/models/dtos/costObject.dto.model';\n\nexport class CompareWithUtility {\n static compareByHourlyRateCategoryPair(\n item: ContractHourlyRateCategoryPairDtoModel,\n selected: ContractHourlyRateCategoryPairDtoModel,\n ): boolean {\n return item.contractHourlyRateCategoryPairId === selected.contractHourlyRateCategoryPairId;\n }\n\n static compareDatesAsc(a: moment.Moment, b: moment.Moment): number {\n return a.diff(b);\n }\n\n static compareDatesDesc(a: moment.Moment, b: moment.Moment): number {\n return b.diff(a);\n }\n\n static compareCreatedOnAsc(a: { createdOn: moment.Moment }, b: { createdOn: moment.Moment }): number {\n return CompareWithUtility.compareDatesAsc(a.createdOn, b.createdOn);\n }\n\n static compareCreatedOnDesc(a: { createdOn: moment.Moment }, b: { createdOn: moment.Moment }): number {\n return CompareWithUtility.compareDatesDesc(a.createdOn, b.createdOn);\n }\n\n static compareUploadedOnDesc(a: { uploadedOn: moment.Moment }, b: { uploadedOn: moment.Moment }): number {\n return CompareWithUtility.compareDatesDesc(a.uploadedOn, b.uploadedOn);\n }\n\n static gatesCompare(o1: GateDtoModel, o2: GateDtoModel): boolean {\n if (!o1 || !o2) {\n return false;\n }\n\n return (o1.gateId === o2.gateId);\n }\n\n static countriesCompare(o1: CountryDtoModel, o2: CountryDtoModel): boolean {\n if (!o1 || !o2) {\n return false;\n }\n\n return (o1.countryCode === o2.countryCode);\n }\n\n /**\n * Compares an option (DTO) with a selected country code value.\n * @param listOption\n * @param selectedValue - country code\n */\n static compareCountryByCode(listOption: CountryDtoModel, selectedValue: string): boolean {\n if (!listOption || !selectedValue) {\n return false;\n }\n\n return (listOption.countryCode === selectedValue);\n }\n\n static levelsCompare(o1: LevelSlimDtoModel, o2: LevelSlimDtoModel): boolean {\n if (!o1 || !o2) {\n return false;\n }\n\n return (o1.levelId === o2.levelId);\n }\n\n static compareConclusionValues(o1: any, o2: any): boolean {\n if (!o1 || !o2) {\n return false;\n }\n\n return o1.id === o2.id;\n }\n\n static projectsCompare(p1: ProjectViewResponseModel, p2: ProjectViewResponseModel): boolean {\n if (!p1 || !p2) {\n return false;\n }\n\n return (p1.projectId === p2.projectId);\n }\n\n static projectTypesCompare(o1: ProjectTypeDtoModel, o2: ProjectTypeDtoModel): boolean {\n if (!o1 || !o2) {\n return false;\n }\n\n return (o1.projectTypeCode === o2.projectTypeCode);\n }\n\n /**\n * Compares an option (DTO) with a selected project type code\n * @param listOption\n * @param selectedValue\n */\n static compareProjectTypeByCode(listOption: ProjectTypeDtoModel, selectedValue: string): boolean {\n if (!listOption || !selectedValue) {\n return false;\n }\n\n return (listOption.projectTypeCode === selectedValue);\n }\n\n static compareTimecardCategoryByCode(tc1: TimeTrackingRowDtoModel, tc2: TimeTrackingRowDtoModel): boolean {\n if (!tc1 || !tc2) {\n return false;\n }\n\n return (tc1.timecardCategoryCode === tc2.timecardCategoryCode);\n }\n\n static rolesCompare(o1: RoleDtoModel, o2: RoleDtoModel): boolean {\n if (!o1 || !o2) {\n return false;\n }\n\n return (o1.roleId === o2.roleId);\n }\n\n static unitsCompare(o1: Unit, o2: Unit): boolean {\n if (!o1 || !o2) {\n return false;\n }\n\n return (o1.unitId === o2.unitId);\n }\n\n static contractsCompare(c1: ContractDtoModel, c2: ContractDtoModel): boolean {\n if (!c1 || !c2) {\n return false;\n }\n\n return (c1.contractId === c2.contractId);\n }\n\n static usersCompare(\n o1: UserDtoModel | UserListDtoModel | UserSlimDtoModel,\n o2: UserDtoModel | UserListDtoModel | UserSlimDtoModel,\n ): boolean {\n if (!o1 || !o2) {\n return false;\n }\n\n return (o1.userId === o2.userId);\n }\n\n static planningResourceCompare(o1: UnitPlanningResourceDtoModel, o2: UnitPlanningResourceDtoModel): boolean {\n if (!o1 || !o2) {\n return false;\n }\n\n return (o1.planningResourceId === o2.planningResourceId);\n }\n\n /**\n * Compares an option (DTO) with a selected supplier hourly rate category\n * @param listOption\n * @param selectedValue\n */\n static compareBySupplierHourlyRateCategory(\n listOption: ContractHourlyRateCategoryPairDtoModel,\n selectedValue: string,\n ): boolean {\n if (!listOption || !selectedValue) {\n return false;\n }\n\n return (listOption.supplierHourlyRateCategory === selectedValue);\n }\n\n /**\n * Compares an option (DTO) with a selected submitter hourly rate category\n * @param listOption\n * @param selectedValue\n */\n static compareBySubmitterHourlyRateCategory(\n listOption: ContractHourlyRateCategoryPairDtoModel,\n selectedValue: string,\n ): boolean {\n if (!listOption || !selectedValue) {\n return false;\n }\n\n return (listOption.submitterHourlyRateCategory === selectedValue);\n }\n\n static sortUserAsc(o1: BasicUser, o2: BasicUser): number {\n return o1.fullName.localeCompare(o2.fullName);\n }\n\n static sortUserDesc(o1: BasicUser, o2: BasicUser): number {\n return o2.fullName.localeCompare(o1.fullName);\n }\n}\n","const FILE_TYPE_FALLBACK: string = 'bin';\n\n/**\n * Returns the File Extensions from the Filename\n *\n * @param fileName\n */\nexport function getFileExtensionFromFilename(fileName: string): string {\n if (fileName === undefined || fileName === null) {\n return '';\n }\n\n if (fileName.length === 0) {\n return '';\n }\n\n let newFileType = '';\n const splittedFileName = fileName.split('.');\n if (splittedFileName.length > 1) {\n newFileType = splittedFileName[splittedFileName.length - 1];\n } else {\n newFileType = FILE_TYPE_FALLBACK;\n }\n\n return newFileType\n .toLowerCase();\n}\n","/* eslint-disable */\n/**\n * Converts decimal value to hex equivalent\n */\nfunction decimalToHex(value: number): string {\n let hex = value.toString(16);\n\n while (hex.length < 2) {\n hex = '0' + hex;\n }\n\n return hex;\n}\n\n/**\n * Generates RFC4122 version 4 guid (128 bits)\n */\nexport default function guid(): string {\n // RFC4122: The version 4 UUID is meant for generating UUIDs from truly-random or\n // pseudo-random numbers.\n // The algorithm is as follows:\n // Set the two most significant bits (bits 6 and 7) of the\n // clock_seq_hi_and_reserved to zero and one, respectively.\n // Set the four most significant bits (bits 12 through 15) of the\n // time_hi_and_version field to the 4-bit version number from\n // Section 4.1.3. Version4\n // Set all the other bits to randomly (or pseudo-randomly) chosen\n // values.\n // UUID = time-low \"-\" time-mid \"-\"time-high-and-version \"-\"clock-seq-reserved and low(2hexOctet)\"-\" node\n // time-low = 4hexOctet\n // time-mid = 2hexOctet\n // time-high-and-version = 2hexOctet\n // clock-seq-and-reserved = hexOctet:\n // clock-seq-low = hexOctet\n // node = 6hexOctet\n // Format: xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx\n // y could be 1000, 1001, 1010, 1011 since most significant two bits needs to be 10\n // y values are 8, 9, A, B\n const cryptoObj = window.crypto || (window as any).msCrypto; // for IE 11\n if (cryptoObj && cryptoObj.getRandomValues) {\n const buffer = new Uint8Array(16);\n cryptoObj.getRandomValues(buffer);\n //buffer[6] and buffer[7] represents the time_hi_and_version field. We will set the four most significant bits (4 through 7) of buffer[6] to represent decimal number 4 (UUID version number).\n buffer[6] |= 0x40; //buffer[6] | 01000000 will set the 6 bit to 1.\n buffer[6] &= 0x4f; //buffer[6] & 01001111 will set the 4, 5, and 7 bit to 0 such that bits 4-7 == 0100 = \"4\".\n //buffer[8] represents the clock_seq_hi_and_reserved field. We will set the two most significant bits (6 and 7) of the clock_seq_hi_and_reserved to zero and one, respectively.\n buffer[8] |= 0x80; //buffer[8] | 10000000 will set the 7 bit to 1.\n buffer[8] &= 0xbf; //buffer[8] & 10111111 will set the 6 bit to 0.\n\n return decimalToHex(buffer[0]) + decimalToHex(buffer[1]) + decimalToHex(buffer[2]) + decimalToHex(buffer[3]) + '-' + decimalToHex(buffer[4]) + decimalToHex(buffer[5]) + '-' + decimalToHex(buffer[6]) + decimalToHex(buffer[7]) + '-' +\n decimalToHex(buffer[8]) + decimalToHex(buffer[9]) + '-' + decimalToHex(buffer[10]) + decimalToHex(buffer[11]) + decimalToHex(buffer[12]) + decimalToHex(buffer[13]) + decimalToHex(buffer[14]) + decimalToHex(buffer[15]);\n } else {\n const guidHolder = 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx';\n const hex = '0123456789abcdef';\n let r = 0;\n let guidResponse = '';\n for (let i = 0; i < 36; i++) {\n if (guidHolder[i] !== '-' && guidHolder[i] !== '4') {\n // each x and y needs to be random\n r = Math.random() * 16 | 0;\n }\n if (guidHolder[i] === 'x') {\n guidResponse += hex[r];\n } else if (guidHolder[i] === 'y') {\n // clock-seq-and-reserved first hex is filtered and remaining hex values are random\n r &= 0x3; // bit and with 0011 to set pos 2 to zero ?0??\n r |= 0x8; // set pos 3 to 1 as 1???\n guidResponse += hex[r];\n } else {\n guidResponse += guidHolder[i];\n }\n }\n\n return guidResponse;\n }\n}\n","/**\n * Hard reload the page the document.\n *\n * @param targetUrl - The URL to reload the page to (if not provided, / will be used)\n */\nexport const hardReload = (targetUrl?:string):void => {\n window.location.href = `${targetUrl || '/'}?cache_bust=${new Date().getTime()}`;\n}\n","import { DEFAULT_RETURN_URL } from '../shared/constants';\n\n/**\n * Checks whether an url is relative to this app.\n */\nexport function getRelativeUrlOrDefault(url?: string | null, defaultUrl: string = DEFAULT_RETURN_URL): string {\n // only allow urls relative to this app!\n return url && url.match(/^\\/[^/]/)\n ? url\n : defaultUrl;\n}\n\n/**\n * ucs-2 string to base64 encoded ascii\n */\nexport function utoa(value: string): string {\n return window.btoa(unescape(encodeURIComponent(value)));\n}\n\n/**\n * base64 encoded ascii to ucs-2 string\n */\nexport function atou(value: string): string {\n return decodeURIComponent(escape(window.atob(value)));\n}\n","/**\n * The behavior of this method differs from that of the JavaScript Math.round() function.\n * In the following case for example, the method rounds down where Math.round() rounds up:\n *\n *
\n *   roundArithmetic(-2.5)\n *   -3\n *   Math.round(-2.5)\n *   -2\n * 
\n *\n * @param value - The number to be rounded.\n */\nexport function roundArithmetic(value: number): number {\n return (value >= 0 ? 1 : -1) * Math.round(Math.abs(value));\n}\n\n/**\n * Checks whether the given value `a` is greater than value `b`, limited by a given number of fraction digits.\n * Numbers are rounded before comparison and not just \"cut off\" after the offset.\n *\n *
\n *   greaterThan(1.235, 1.2348, 3)\n *   false\n *   greaterThan(1.2348, 1.2354, 3)\n *   false\n *   greaterThan(1.2356, 1.2354, 3)\n *   true\n * 
\n */\nexport function greaterThan(a: number, b: number, fractionDigits: number = 0): boolean {\n return Number.parseFloat(a.toFixed(fractionDigits)) > Number.parseFloat(b.toFixed(fractionDigits));\n}\n\n/**\n * Checks whether the given value `a` is greater than or equal to value `b`, limited by a given number\n * of fraction digits. Numbers are rounded before comparison and not just \"cut off\" after the offset.\n *\n *
\n *   greaterThan(1.235, 1.2348, 3)\n *   true\n *   greaterThan(1.2348, 1.2354, 3)\n *   true\n *   greaterThan(1.2356, 1.2354, 3)\n *   true\n * 
\n */\nexport function greaterThanOrEqual(a: number, b: number, fractionDigits: number = 0): boolean {\n return Number.parseFloat(a.toFixed(fractionDigits)) >= Number.parseFloat(b.toFixed(fractionDigits));\n}\n\n/**\n * Checks whether the given value `a` is less than value `b`, limited by a given number of fraction digits.\n * Numbers are rounded before comparison and not just \"cut off\" after the offset.\n *\n * @see `greaterThan` with parameters a and be switched.\n */\nexport function lessThan(a: number, b: number, fractionDigits: number = 0): boolean {\n return greaterThan(b, a, fractionDigits);\n}\n\n/**\n * Checks whether the given value `a` is less than or equal to value `b`, limited by a given number of fraction digits.\n * Numbers are rounded before comparison and not just \"cut off\" after the offset.\n *\n * @see `greaterThanOrEqual` with parameters a and be switched.\n */\nexport function lessThanOrEqual(a: number, b: number, fractionDigits: number = 0): boolean {\n return greaterThanOrEqual(b, a, fractionDigits);\n}\n\n/**\n * Checks whether a given value is a number or can be interpreted as a number.\n *\n * WARNING: Can not yet detect ' 2' as not a number (ignores whitespace).\n */\nexport function isNumber(value?: any): boolean {\n return (typeof value === 'string' || typeof value === 'number') && value !== '' && !Number.isNaN(+value);\n}\n\nexport function roundTo2Decimals(value: number): number {\n return Math.round(value * 100) / 100;\n}\n","/**\n * Makes a deep clone of the given object.\n *\n * @param {any} value\n */\nexport function deepCopy(value: T): T {\n if (Array.isArray(value)) {\n return value.map((o: T) => deepCopy(o)) as any;\n }\n\n if (value && typeof value === 'object') {\n if ((value as any).toJSON) {\n return JSON.parse(((value as any).toJSON as () => string)());\n }\n\n const copy = new (Object.getPrototypeOf(value).constructor)();\n\n Object.getOwnPropertyNames(value).forEach((key) => {\n copy[key] = deepCopy((value as any)[key]);\n });\n\n return copy;\n }\n\n return value;\n}\n","export const capitalize = (value: string): string => value.charAt(0)\n .toUpperCase()\n + value.slice(1);\n\nexport const decapitalize = (value: string): string => value.charAt(0)\n .toLowerCase()\n + value.slice(1);\n","/**\n * Checks whether a given value is empty in the sense of being `null`, `undefined` or an empty string.\n * @param value\n */\nexport function isEmpty(value: any): value is '' | null | undefined {\n // eslint-disable-next-line no-self-compare\n return value == null || value === '' || value !== value;\n}\n","import moment from 'moment';\nimport { WorkPackageStatus } from '../models/work-package-status.enum';\n\n/**\n * The minimal Work Package information needed by the WorkPackageLogicHelper.\n */\nexport interface WorkPackageForLogicChecks {\n status?: WorkPackageStatus;\n\n estimatedStartDate?: moment.Moment;\n latestEstimatedEndDate?: moment.Moment;\n plannedStartDate?: moment.Moment | null;\n latestPlannedEndDate?: moment.Moment | null;\n latestConfirmedEndDate?: moment.Moment | null;\n\n latestEstimatedHours: number;\n plannedHours: number;\n reportedHours?: number;\n latestConfirmedHours: number;\n\n costToComplete: number;\n}\n\n/**\n * A small utility class to help with business logic in the frontend.\n */\nexport class WorkPackageLogicHelper {\n /**\n * Checks whether a Work Package is in state ReadyForApproval or Closed.\n */\n static isInApproval(workPackage: WorkPackageForLogicChecks): boolean {\n return (\n workPackage.status === WorkPackageStatus.ReadyForApproval\n || workPackage.status === WorkPackageStatus.Closed\n );\n }\n\n /**\n * Checks whether a Work Package is in one of the proposal states, meaning it still has to be confirmed.\n * Proposal states are Draft, Forecasted and Issued.\n */\n static isInProposal(workPackage: WorkPackageForLogicChecks): boolean {\n return (\n workPackage.status === WorkPackageStatus.Draft\n || workPackage.status === WorkPackageStatus.Forecasted\n || workPackage.status === WorkPackageStatus.Issued\n );\n }\n\n /**\n * Returns the most appropriate start date depending on the Work Package's current state.\n */\n static getApplicableStartDate(workPackage: WorkPackageForLogicChecks): moment.Moment {\n if (WorkPackageLogicHelper.isInProposal(workPackage)) {\n return workPackage.estimatedStartDate!;\n }\n\n // Assume planned start date is available when Work Package is not in proposal anymore.\n return workPackage.plannedStartDate!;\n }\n\n /**\n * Returns the most appropriate end date depending on the Work Package's current state.\n */\n static getApplicableEndDate(workPackage: WorkPackageForLogicChecks): moment.Moment {\n if (WorkPackageLogicHelper.isInProposal(workPackage)) {\n return workPackage.latestEstimatedEndDate!;\n }\n\n // Assume planned end date is available when Work Package is not in proposal anymore.\n return workPackage.latestPlannedEndDate!;\n }\n\n /**\n * Checks whether a Work Package's planned end date exceeds the latest confirmed end date.\n */\n static isPlannedEndDateExceeded(workPackage: WorkPackageForLogicChecks): boolean {\n if (workPackage.latestPlannedEndDate && workPackage.latestConfirmedEndDate) {\n return workPackage.latestPlannedEndDate.isAfter(workPackage.latestConfirmedEndDate, 'day');\n }\n\n return false;\n }\n\n /**\n * Checks whether a Work Package's planned end date (or estimated end date) is overdue.\n */\n static isPlannedEndDateOverdue(workPackage: WorkPackageForLogicChecks): boolean {\n const nowNoTimeZone = moment().utcOffset(0, true);\n if (WorkPackageLogicHelper.isInProposal(workPackage)) {\n return workPackage.latestEstimatedEndDate!.isBefore(nowNoTimeZone, 'day');\n }\n\n if (WorkPackageLogicHelper.isInApproval(workPackage)) {\n return false;\n }\n\n if (workPackage.latestPlannedEndDate != null) {\n return workPackage.latestPlannedEndDate.isBefore(nowNoTimeZone, 'day');\n }\n\n return false;\n }\n\n /**\n * Checks whether a Work Package's estimated hours should be preferably shown at the current state.\n */\n static areEstimatedHoursShown(workPackage: WorkPackageForLogicChecks): boolean {\n return WorkPackageLogicHelper.isInProposal(workPackage);\n }\n\n /**\n * Checks whether a Work Package's planned hours exceed the latest confirmed hours.\n * This is ignored in the proposal state since `planned hours` are not yet available there.\n */\n static arePlannedHoursExceeded(workPackage: WorkPackageForLogicChecks): boolean {\n // In proposal state, the `plannedHours` are not yet available and therefore ignored\n if (WorkPackageLogicHelper.isInProposal(workPackage)) {\n return false;\n }\n\n const latestAvailableHours = workPackage.latestConfirmedHours || workPackage.latestEstimatedHours;\n\n return workPackage.plannedHours > latestAvailableHours;\n }\n\n /**\n * Checks whether the reported hours exceed the planned hours.\n */\n static isCostToCompleteExceeded(workPackage: WorkPackageForLogicChecks): boolean {\n return (workPackage.costToComplete < 0);\n }\n}\n","import { ModuleWithProviders, NgModule } from '@angular/core';\n\nimport { A11yModule } from '@angular/cdk/a11y';\nimport { BidiModule } from '@angular/cdk/bidi';\nimport { ObserversModule } from '@angular/cdk/observers';\nimport { OverlayModule } from '@angular/cdk/overlay';\nimport { PlatformModule } from '@angular/cdk/platform';\nimport { PortalModule } from '@angular/cdk/portal';\nimport { ScrollingModule } from '@angular/cdk/scrolling';\nimport { CdkStepperModule } from '@angular/cdk/stepper';\nimport { CdkTableModule } from '@angular/cdk/table';\nimport { CdkTreeModule } from '@angular/cdk/tree';\nimport { DragDropModule } from '@angular/cdk/drag-drop';\n\nimport { MatAutocompleteModule } from '@angular/material/autocomplete';\nimport { MatBadgeModule } from '@angular/material/badge';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatButtonToggleModule } from '@angular/material/button-toggle';\nimport { MatCardModule } from '@angular/material/card';\nimport { MatCheckboxModule } from '@angular/material/checkbox';\nimport { MatChipsModule } from '@angular/material/chips';\nimport { MatRippleModule , MatOptionModule } from '@angular/material/core';\nimport { MatDatepickerModule } from '@angular/material/datepicker';\nimport { MatDialogModule } from '@angular/material/dialog';\nimport { MatExpansionModule } from '@angular/material/expansion';\nimport { MatFormFieldModule } from '@angular/material/form-field';\nimport { MatIconModule } from '@angular/material/icon';\nimport { MatInputModule } from '@angular/material/input';\nimport { MatListModule } from '@angular/material/list';\nimport { MatMenuModule } from '@angular/material/menu';\nimport { MatPaginatorModule } from '@angular/material/paginator';\nimport { MatProgressBarModule } from '@angular/material/progress-bar';\nimport { MatProgressSpinnerModule } from '@angular/material/progress-spinner';\nimport { MatRadioModule } from '@angular/material/radio';\nimport { MatSidenavModule } from '@angular/material/sidenav';\nimport { MatSlideToggleModule } from '@angular/material/slide-toggle';\nimport { MatSliderModule } from '@angular/material/slider';\nimport { MatSnackBarModule } from '@angular/material/snack-bar';\nimport { MatSortModule } from '@angular/material/sort';\nimport { MatStepperModule } from '@angular/material/stepper';\nimport { MatTableModule } from '@angular/material/table';\nimport { MatTabsModule } from '@angular/material/tabs';\nimport { MatToolbarModule } from '@angular/material/toolbar';\nimport { MatTooltipModule } from '@angular/material/tooltip';\nimport { MatTreeModule } from '@angular/material/tree';\nimport { MaterialFileInputModule } from 'ngx-custom-material-file-input';\n\n// TODO Migration: do we really need to import everything? do we use everything?\n@NgModule({\n imports: [\n // CDK\n A11yModule,\n BidiModule,\n ObserversModule,\n OverlayModule,\n PlatformModule,\n PortalModule,\n ScrollingModule,\n CdkStepperModule,\n CdkTableModule,\n CdkTreeModule,\n DragDropModule,\n\n // Material\n MatAutocompleteModule,\n MatBadgeModule,\n MatButtonModule,\n MatButtonToggleModule,\n MatCardModule,\n MatCheckboxModule,\n MatChipsModule,\n MatDatepickerModule,\n MatDialogModule,\n MatExpansionModule,\n MaterialFileInputModule,\n MatFormFieldModule,\n MatIconModule,\n MatInputModule,\n MatListModule,\n MatMenuModule,\n MatOptionModule,\n MatPaginatorModule,\n MatProgressBarModule,\n MatProgressSpinnerModule,\n MatRadioModule,\n MatRippleModule,\n MatSidenavModule,\n MatSliderModule,\n MatSlideToggleModule,\n MatSnackBarModule,\n MatStepperModule,\n MatSortModule,\n MatTableModule,\n MatTabsModule,\n MatToolbarModule,\n MatTooltipModule,\n MatTreeModule,\n ],\n exports: [\n // CDK\n A11yModule,\n BidiModule,\n ObserversModule,\n OverlayModule,\n PlatformModule,\n PortalModule,\n ScrollingModule,\n CdkStepperModule,\n CdkTableModule,\n CdkTreeModule,\n DragDropModule,\n\n // Material\n MatAutocompleteModule,\n MatBadgeModule,\n MatButtonModule,\n MatButtonToggleModule,\n MatCardModule,\n MatCheckboxModule,\n MatChipsModule,\n MatDatepickerModule,\n MatDialogModule,\n MatExpansionModule,\n MaterialFileInputModule,\n MatFormFieldModule,\n MatIconModule,\n MatInputModule,\n MatListModule,\n MatMenuModule,\n MatOptionModule,\n MatPaginatorModule,\n MatProgressBarModule,\n MatProgressSpinnerModule,\n MatRadioModule,\n MatRippleModule,\n MatSidenavModule,\n MatSliderModule,\n MatSlideToggleModule,\n MatSnackBarModule,\n MatStepperModule,\n MatSortModule,\n MatTableModule,\n MatTabsModule,\n MatToolbarModule,\n MatTooltipModule,\n MatTreeModule,\n ],\n})\nexport class MaterialModule {\n static forRoot(): ModuleWithProviders {\n return {\n ngModule: MaterialModule,\n };\n }\n\n static forChild(): ModuleWithProviders {\n return {\n ngModule: MaterialModule,\n };\n }\n}\n","/**\n * Contract Model Types of Units\n */\nexport enum ContractModelType {\n NamedResources = '0',\n ProjectBasedOrder = '2',\n}\n","export enum DashboardWorkPackageViewType {\n SubmitterView = 0,\n SuppplierView = 1,\n SelfAssignedView = 2\n}\n","/**\n * Contains all the different attachment types\n */\nexport enum DocumentType {\n Project = 0,\n WorkPackage = 1,\n ScopeChange = 2,\n Question = 3,\n Output = 4,\n Rework = 5,\n}\n","import { escape } from 'html-escaper';\nimport { BasicNonProductiveCategory } from './basic-non-productive-category.interface';\nimport { assertRequiredProperties } from '../api/utilities/api.utility';\n\nexport interface NonProductiveCategory extends BasicNonProductiveCategory {\n unitCategoryId: number | null;\n defaultTimecardCategoryId: number | null;\n}\n\nexport class NonProductiveCategoryModel {\n constructor(\n public name: string | null,\n public sapCode: string | null,\n public isEnabled: boolean,\n public hasReportedHours: boolean,\n public unitCategoryId: number | null = null,\n public defaultTimecardCategoryId: number | null = null,\n ) {\n }\n\n static fromJSON(json: NonProductiveCategory): NonProductiveCategoryModel {\n assertRequiredProperties(json, [\n 'isEnabled',\n 'hasReportedHours',\n ]);\n\n return new NonProductiveCategoryModel(\n json.name,\n json.sapCode,\n json.isEnabled,\n json.hasReportedHours,\n json.unitCategoryId,\n json.defaultTimecardCategoryId,\n );\n }\n\n clone(): NonProductiveCategoryModel {\n return new NonProductiveCategoryModel(\n this.name,\n this.sapCode,\n this.isEnabled,\n this.hasReportedHours,\n this.unitCategoryId,\n this.defaultTimecardCategoryId,\n );\n }\n\n toJSON(): NonProductiveCategory {\n return {\n name: this.name ? escape(this.name) : null,\n sapCode: this.sapCode !== undefined && this.sapCode !== null ? escape(this.sapCode) : '',\n isEnabled: this.isEnabled,\n hasReportedHours: this.hasReportedHours,\n unitCategoryId: this.unitCategoryId,\n defaultTimecardCategoryId: this.defaultTimecardCategoryId,\n };\n }\n}\n","import { ProjectPlanningFiltersSettingsDto } from '../api/interfaces/dtos/project-planning-filter-settings.dto';\n\nexport class ProjectPlanningFiltersSettingsModel {\n constructor(\n readonly wpStatus?: string[],\n readonly wpStatusType?: string,\n readonly wpSorting?: string,\n readonly wpSortDirection?: string,\n ) {\n this.wpStatus = wpStatus ? [...wpStatus] : [];\n this.wpStatusType = wpStatusType;\n this.wpSorting = wpSorting;\n this.wpSortDirection = wpSortDirection;\n }\n\n static fromJSON(json: ProjectPlanningFiltersSettingsDto): ProjectPlanningFiltersSettingsModel {\n return new ProjectPlanningFiltersSettingsModel(\n json.wpStatus,\n json.wpStatusType,\n json.wpSorting,\n json.wpSortDirection,\n );\n }\n\n toJSON(): ProjectPlanningFiltersSettingsDto {\n return {\n wpStatus: this.wpStatus,\n wpStatusType: this.wpStatusType,\n wpSorting: this.wpSorting,\n wpSortDirection: this.wpSortDirection,\n };\n }\n}\n","import { ProjectPlanningFiltersSettingsDto } from '../api/interfaces/dtos/project-planning-filter-settings.dto';\n\nexport class ProjectStructureFiltersSettingsModel {\n constructor(\n readonly wpStatus?: string[],\n readonly wpStatusType?: string,\n readonly wpSorting?: string,\n readonly wpSortDirection?: string,\n ) {\n this.wpStatus = wpStatus ? [...wpStatus] : [];\n this.wpStatusType = wpStatusType;\n this.wpSorting = wpSorting;\n this.wpSortDirection = wpSortDirection;\n }\n\n static fromJSON(json: ProjectPlanningFiltersSettingsDto): ProjectStructureFiltersSettingsModel {\n return new ProjectStructureFiltersSettingsModel(\n json.wpStatus,\n json.wpStatusType,\n json.wpSorting,\n json.wpSortDirection,\n );\n }\n\n toJSON(): ProjectPlanningFiltersSettingsDto {\n return {\n wpStatus: this.wpStatus,\n wpStatusType: this.wpStatusType,\n wpSorting: this.wpSorting,\n wpSortDirection: this.wpSortDirection,\n };\n }\n}\n","/**\n * The status of the work package question.\n */\nexport enum QuestionStatus {\n Open = 0,\n Concluded = 1,\n}\n","export enum SameAsType {\n SameAsSubmitter = 'SameAsSubmitter',\n SameAsSupplier = 'SameAsSupplier',\n}\n","import { TimeTrackingEntryViewDtoModel } from '../api/models/dtos/time-tracking-entry-view.dto.model';\n\nexport abstract class TimeTrackingRowModel {\n /**\n * Total hours of the entire row / week.\n */\n readonly totalHours: number;\n\n constructor(\n readonly days: readonly TimeTrackingEntryViewDtoModel[],\n ) {\n this.days = [...days];\n\n this.totalHours = this.days\n .reduce((prev, day) => day.value + prev, 0);\n }\n}\n","/**\n * Contains all the states a timecard and timesheet can have\n */\nexport enum TimeTrackingStatus {\n Unknown = -1,\n Open = 0,\n Pending = 1,\n Done = 2,\n Rejected = 3,\n Submitted = 4,\n Ready = 5,\n Reopen = 6,\n}\n\nexport const timeTrackingStatusCodeName: { [key in TimeTrackingStatus]: string } = Object.freeze({\n [TimeTrackingStatus.Unknown]: 'unknown',\n [TimeTrackingStatus.Open]: 'open',\n [TimeTrackingStatus.Pending]: 'pending',\n [TimeTrackingStatus.Done]: 'done',\n [TimeTrackingStatus.Rejected]: 'rejected',\n [TimeTrackingStatus.Submitted]: 'submitted',\n [TimeTrackingStatus.Ready]: 'ready',\n [TimeTrackingStatus.Reopen]: 'reopen',\n // TODO: check if ther will be a ready state and clearify the statusnr.\n});\n","/**\n * Levels (depth) of units\n */\nexport enum UnitLevel {\n UNKNOWN = -1,\n Level1 = 0,\n Level2 = 1,\n Level3 = 2,\n Level4 = 3,\n Level5 = 4,\n}\n","/**\n * Possible conclusions of a closed work package\n */\nexport enum WorkPackageConclusion {\n Completed = 0,\n Unresolved = 1,\n}\n\nexport const workPackageConclusions: { [key in WorkPackageConclusion]: string } = Object.freeze({\n [WorkPackageConclusion.Completed]: 'Completed',\n [WorkPackageConclusion.Unresolved]: 'Unresolved',\n});\n","/**\n * Contains all the states a work package can be in.\n */\nexport enum WorkPackageStatus {\n Draft = 0,\n Forecasted = 1,\n Issued = 2,\n Confirmed = 3,\n InProgress = 4,\n OnHold = 5,\n ReadyToResumeWork = 6,\n ScopeChange = 7,\n ReadyForScopeChangeApproval = 8,\n InQualityAssurance = 9,\n ReadyForApproval = 10,\n Closed = 11,\n}\n\nexport const workPackageStatusName = new Map([\n [WorkPackageStatus.Draft, 'Draft'],\n [WorkPackageStatus.Forecasted, 'Forecasted'],\n [WorkPackageStatus.Issued, 'Issued'],\n [WorkPackageStatus.Confirmed, 'Confirmed'],\n [WorkPackageStatus.InProgress, 'In Progress'],\n [WorkPackageStatus.OnHold, 'On Hold'],\n [WorkPackageStatus.ReadyToResumeWork, 'Ready to Resume Work'],\n [WorkPackageStatus.ScopeChange, 'Scope Change'],\n [WorkPackageStatus.ReadyForScopeChangeApproval, 'Ready for Scope Change Approval'],\n [WorkPackageStatus.InQualityAssurance, 'In Quality Assurance'],\n [WorkPackageStatus.ReadyForApproval, 'Ready for Approval'],\n [WorkPackageStatus.Closed, 'Closed'],\n]);\n\n/**\n * A simple object that maps the upcoming work package transition.\n */\nexport class WorkPackageStatusTransition {\n constructor(\n public projectId: number,\n public workPackageId: number,\n public from: WorkPackageStatus,\n public to: WorkPackageStatus,\n public getTransitionInfo?: boolean,\n ) {}\n\n getFromStatusName(): string {\n return workPackageStatusName.get(this.from) || '';\n }\n\n getToStatusName(): string {\n return workPackageStatusName.get(this.to) || '';\n }\n}\n","export enum CapacityUnits {\n HoursWeek = 'h/week',\n DaysWeek = 'days/week',\n M2 = 'm2',\n Pcs = 'pcs',\n}\n\nexport function isHoursPerWeek(unit: CapacityUnits | string): boolean {\n return unit.toString() === CapacityUnits.HoursWeek.toString();\n}\n","import { ContractSaveRequest } from '../../interfaces/requests/contract-save.request';\nimport { ContractHourlyRateCategoryPairDtoModel } from '../dtos/contract-hourly-rate-category-pair.dto.model';\nimport { assertRequiredProperties } from '../../utilities/api.utility';\n\nexport class ContractSaveRequestModel {\n constructor(\n readonly supplierUnitId: number,\n readonly submitterUnitId: number | null = null,\n readonly contractId: number | null = null,\n readonly model: string | null = null,\n readonly fteHoursWeek: number | null = null,\n readonly hoursPerWeek: number | null = null,\n readonly contractHourlyRateCategoryPairs: readonly ContractHourlyRateCategoryPairDtoModel[] = [],\n readonly removedContractHourlyRateCategoryPairIds: readonly number[] = [],\n readonly employeeNumber: string | null = null,\n readonly costCenter: string | null = null,\n readonly notificationSentTo: string | null = null,\n readonly costObject: string | null = null,\n readonly categoryActivityItem: string | null = null,\n ) {\n this.contractHourlyRateCategoryPairs = [...contractHourlyRateCategoryPairs];\n this.removedContractHourlyRateCategoryPairIds = [...removedContractHourlyRateCategoryPairIds];\n }\n\n static fromJSON(json: ContractSaveRequest): ContractSaveRequestModel {\n assertRequiredProperties(json, [\n 'supplierUnitId',\n ]);\n\n return new ContractSaveRequestModel(\n json.supplierUnitId,\n json.submitterUnitId,\n json.contractId,\n json.model,\n json.fteHoursWeek,\n json.hoursPerWeek,\n (Array.isArray(json.contractHourlyRateCategoryPairs) ? json.contractHourlyRateCategoryPairs : [])\n .map((item) => ContractHourlyRateCategoryPairDtoModel.fromJSON(item)),\n (Array.isArray(json.removedContractHourlyRateCategoryPairIds)\n ? [...json.removedContractHourlyRateCategoryPairIds]\n : []),\n json.submitterEmployeeNumber,\n json.submitterCostCenter,\n json.notificationSentTo,\n json.costObject,\n json.categoryActivityItem,\n );\n }\n\n toJSON(): ContractSaveRequest {\n return {\n supplierUnitId: this.supplierUnitId,\n submitterUnitId: this.submitterUnitId,\n contractId: this.contractId,\n model: this.model,\n fteHoursWeek: this.fteHoursWeek,\n hoursPerWeek: this.hoursPerWeek,\n contractHourlyRateCategoryPairs: this.contractHourlyRateCategoryPairs.map((item) => item.toJSON()),\n removedContractHourlyRateCategoryPairIds: [...this.removedContractHourlyRateCategoryPairIds],\n submitterEmployeeNumber: this.employeeNumber,\n submitterCostCenter: this.costCenter,\n notificationSentTo: this.notificationSentTo,\n costObject: this.costObject,\n categoryActivityItem: this.categoryActivityItem,\n };\n }\n}\n","import { escape } from 'html-escaper';\nimport { UnitCreateRequest } from '../../interfaces/requests/unit-create.request';\nimport { ContractSaveRequestModel } from './contract-save.request.model';\nimport { NonProductiveCategoryModel } from '../../../models/non-productive-category.model';\nimport { assertRequiredProperties } from '../../utilities/api.utility';\nimport { CostCenerSaveRequest } from '../../interfaces/requests/cost-center-save.request';\n\nexport class UnitCreateRequestModel {\n constructor(\n readonly code: string,\n readonly name: string,\n readonly unitCoordinatorId: string,\n readonly parentUnitId: number | null = null,\n readonly defects: readonly string[] = [],\n readonly deputyUnitCoordinatorIds: readonly string[] = [],\n readonly submitterContracts: readonly ContractSaveRequestModel[] = [],\n readonly nonProductiveCategories: readonly NonProductiveCategoryModel[] = [],\n readonly timesheetExportTemplateColumns: string = '',\n readonly timesheetExportTemplateHighlighting: string = '',\n readonly timesheetExportNonProductiveTemplateColumns: string = '',\n readonly timesheetExportNonProductiveTemplateHighlighting: string = '',\n readonly directUserSubmissionOfTimecard: boolean,\n readonly monthlyView: boolean,\n readonly costCenters: readonly CostCenerSaveRequest[] = [],\n readonly hiddenLevels: string = '',\n readonly payrollCompany: string = '',\n readonly profitCenter: string = '',\n ) {\n this.defects = [...defects];\n this.deputyUnitCoordinatorIds = [...deputyUnitCoordinatorIds];\n this.submitterContracts = [...submitterContracts];\n this.nonProductiveCategories = [...nonProductiveCategories];\n }\n\n static fromJSON(json: UnitCreateRequest): UnitCreateRequestModel {\n assertRequiredProperties(json, [\n 'code',\n 'name',\n 'unitCoordinatorId',\n ]);\n\n return new UnitCreateRequestModel(\n json.code,\n json.name,\n json.unitCoordinatorId,\n json.parentUnitId,\n json.defects || [],\n json.deputyUnitCoordinatorIds || [],\n (Array.isArray(json.submitterContracts) ? json.submitterContracts : [])\n .map((item) => ContractSaveRequestModel.fromJSON(item)),\n (Array.isArray(json.nonProductiveCategories) ? json.nonProductiveCategories : [])\n .map((item) => NonProductiveCategoryModel.fromJSON(item)),\n json.timesheetExportTemplateColumns || '',\n json.timesheetExportTemplateHighlighting || '',\n json.timesheetExportNonProductiveTemplateColumns || '',\n json.timesheetExportNonProductiveTemplateHighlighting || '',\n json.directUserSubmissionOfTimecard,\n json.monthlyView,\n // TODO: check\n (Array.isArray(json.costCenters) ? json.costCenters : [])\n .map((item) => item),\n json.hiddenLevels || '',\n json.payrollCompany || '',\n json.profitCenter || '',\n );\n }\n\n toJSON(): UnitCreateRequest {\n return {\n code: escape(this.code),\n name: escape(this.name),\n defects: [...this.defects].map((defect) => escape(defect)),\n unitCoordinatorId: this.unitCoordinatorId,\n parentUnitId: this.parentUnitId,\n deputyUnitCoordinatorIds: [...this.deputyUnitCoordinatorIds],\n submitterContracts: this.submitterContracts.map((item) => item.toJSON()),\n nonProductiveCategories: this.nonProductiveCategories.map((item) => item.toJSON()),\n timesheetExportTemplateColumns: this.timesheetExportTemplateColumns,\n timesheetExportTemplateHighlighting: this.timesheetExportTemplateHighlighting,\n timesheetExportNonProductiveTemplateColumns: this.timesheetExportNonProductiveTemplateColumns,\n timesheetExportNonProductiveTemplateHighlighting: this.timesheetExportNonProductiveTemplateHighlighting,\n directUserSubmissionOfTimecard: this.directUserSubmissionOfTimecard,\n monthlyView: this.monthlyView,\n // TODO: check\n costCenters: this.costCenters.map((item) => item),\n hiddenLevels: this.hiddenLevels,\n payrollCompany: this.payrollCompany,\n profitCenter: this.profitCenter,\n };\n }\n}\n","import { UnitUpdateRequest } from '../../interfaces/requests/unit-update.request';\nimport { UnitCreateRequestModel } from './unit-create.request.model';\nimport { ContractSaveRequestModel } from './contract-save.request.model';\nimport { NonProductiveCategoryModel } from '../../../models/non-productive-category.model';\nimport { assertRequiredProperties } from '../../utilities/api.utility';\nimport { CostCenerSaveRequest } from '../../interfaces/requests/cost-center-save.request';\n\nexport class UnitUpdateRequestModel extends UnitCreateRequestModel {\n constructor(\n readonly unitId: number,\n code: string,\n name: string,\n unitCoordinatorId: string,\n parentUnitId: number | null,\n defects: readonly string[],\n deputyUnitCoordinatorIds: readonly string[],\n submitterContracts: readonly ContractSaveRequestModel[],\n nonProductiveCategories: readonly NonProductiveCategoryModel[],\n timesheetExportTemplateColumns: string,\n timesheetExportTemplateHighlighting: string,\n timesheetExportNonProductiveTemplateColumns: string,\n timesheetExportNonProductiveTemplateHighlighting: string,\n readonly removedSubmitterContractIds: readonly number[],\n directUserSubmissionOfTimecard: boolean,\n monthlyView: boolean,\n readonly costCenters: CostCenerSaveRequest[],\n readonly removedCostCenterIds: number[],\n readonly removedActivityTypeIds: number[],\n hiddenLevels: string,\n payrollCompany: string,\n profitCenter: string,\n ) {\n super(\n code,\n name,\n unitCoordinatorId,\n parentUnitId,\n defects,\n deputyUnitCoordinatorIds,\n submitterContracts,\n nonProductiveCategories,\n timesheetExportTemplateColumns,\n timesheetExportTemplateHighlighting,\n timesheetExportNonProductiveTemplateColumns,\n timesheetExportNonProductiveTemplateHighlighting,\n directUserSubmissionOfTimecard,\n monthlyView,\n costCenters,\n hiddenLevels,\n payrollCompany,\n profitCenter,\n );\n\n this.removedSubmitterContractIds = [...removedSubmitterContractIds];\n this.removedCostCenterIds = [...removedCostCenterIds];\n this.removedActivityTypeIds = [...removedActivityTypeIds];\n }\n\n static fromJSON(json: UnitUpdateRequest): UnitUpdateRequestModel {\n assertRequiredProperties(json, [\n 'unitId',\n 'code',\n 'name',\n 'unitCoordinatorId',\n ]);\n\n return new UnitUpdateRequestModel(\n json.unitId,\n json.code,\n json.name,\n json.unitCoordinatorId,\n json.parentUnitId || null,\n json.defects || [],\n json.deputyUnitCoordinatorIds || [],\n (Array.isArray(json.submitterContracts) ? json.submitterContracts : [])\n .map((item) => ContractSaveRequestModel.fromJSON(item)),\n (Array.isArray(json.nonProductiveCategories) ? json.nonProductiveCategories : [])\n .map((item) => NonProductiveCategoryModel.fromJSON(item)),\n json.timesheetExportTemplateColumns || '',\n json.timesheetExportTemplateHighlighting || '',\n json.timesheetExportNonProductiveTemplateColumns || '',\n json.timesheetExportNonProductiveTemplateHighlighting || '',\n json.removedSubmitterContractIds || [],\n json.directUserSubmissionOfTimecard,\n json.monthlyView,\n // TODO: check\n (Array.isArray(json.costCenters) ? json.costCenters : [])\n .map((item) => item),\n json.removedCostCenterIds || [],\n json.removedActivityTypeIds || [],\n json.hiddenLevels || '',\n json.payrollCompany || '',\n json.profitCenter || '',\n );\n }\n\n clone(): UnitUpdateRequestModel {\n return new UnitUpdateRequestModel(\n this.unitId,\n this.code,\n this.name,\n this.unitCoordinatorId,\n this.parentUnitId,\n this.defects,\n this.deputyUnitCoordinatorIds,\n this.submitterContracts,\n this.nonProductiveCategories,\n this.timesheetExportTemplateColumns,\n this.timesheetExportTemplateHighlighting,\n this.timesheetExportNonProductiveTemplateColumns,\n this.timesheetExportNonProductiveTemplateHighlighting,\n this.removedSubmitterContractIds,\n this.directUserSubmissionOfTimecard,\n this.monthlyView,\n this.costCenters,\n this.removedCostCenterIds,\n this.removedActivityTypeIds,\n this.hiddenLevels,\n this.payrollCompany,\n this.profitCenter,\n );\n }\n\n toJSON(): UnitUpdateRequest {\n return Object.assign(super.toJSON(), {\n unitId: this.unitId,\n removedSubmitterContractIds: [...this.removedSubmitterContractIds],\n costCenters: this.costCenters.map((item) => item),\n removedCostCenterIds: this.removedCostCenterIds,\n removedActivityTypeIds: this.removedActivityTypeIds,\n });\n }\n}\n","
\n
\n @if (unit) {\n

Edit Unit - {{ name?.value }} ({{ code?.value }})

\n } @else {\n

Create Unit {{ name?.value ? ' - ' + name?.value + ' ': '' }} {{ code?.value ? ' (' + code?.value + ')': '' }}

\n }\n\n \n
\n
\n \n \n
\n \n Unit Code\n \n \n \n \n Unit Name\n \n \n \n Unit Coordinator\n \n \n
\n
\n
\n \n Belongs to\n \n @if (parentUnit.value) {\n The unit will be on level {{ (parentUnit.value | collAppUnitLevel) + 1 }} \n }\n \n
\n
\n \n Deputy Unit Coordinator(s)\n \n \n
\n
\n @if (isLevel3) {\n
\n \n Payroll Company\n \n \n \n \n \n Profit Center\n \n \n \n \n
\n }\n
\n @if (isLevel3OrBelow) {\n \n
\n @if (unit?.metadata?.fields?.displayTimecardApprovalOption) {\n {{'unit.directSubmissionOfTimecard' | translate}}\n }\n @if (isLevel4) {\n {{'unit.monthlyTimecardSubmission' | translate}}\n }\n
\n \n @if (isLevel3) {\n \n
\n
\n
\n \n Hidden Levels:\n \n List of levels to be hidden from the project auto import structure, separated by semicolon (;) \n \n
\n
\n
\n
\n }\n\n @if (isLevel4) {\n \n \n \n \n @if (unit?.parentUnit?.unitId || parentUnit.value?.unitId) {\n \n @if (costCenterService.showErrors()) {\n \n {{ costCenterService.errors().join(' and ') }}\n \n }\n }\n \n }\n @if (isLevel3OrBelow && unit?.migratedToEtime !== true) {\n \n @if (isLoadingDefaultNonProductiveCategories) {\n \n }\n \n \n }\n \n @if (isLoadingDefectList) {\n \n }\n \n \n @if (canSeeTimesheetExportTemplate) {\n \n \n @if (hasTimesheetExportTemplateFormErrors) {\n
\n error_outline\n
\n }\n Timesheet Export Settings\n
\n @if (isLoadingTimesheetExportTemplate) {\n \n } @else {\n \n
\n \n Template Columns:\n \n \n List of columns to be exported, separated by semicolon (;) \n \n
\n
\n \n Highlighted Columns:\n \n List of booleans (TRUE or FALSE) defining which columns to highlight, separated by semicolon (;) \n \n
\n
\n \n Non Productive Template Columns:\n \n List of columns for non productive categories to be exported, separated by semicolon (;) \n \n
\n
\n \n Highlighted Non Productive Columns:\n \n List of booleans (TRUE or FALSE) defining which columns to highlight, separated by semicolon (;) \n \n
\n
\n @if (isLevel4OrBelow) {\n \n Timesheet export templates are not configurable. The configuration is inherited from the level 3 unit.\n \n }\n }\n
\n }\n
\n
\n }\n
\n
\n @if (unit) {\n \n }\n \n \n \n
\n
\n
\n","import {\n Component, Inject, OnDestroy, OnInit, ViewEncapsulation,\n effect,\n signal,\n} from '@angular/core';\nimport { MAT_DIALOG_DATA, MatDialogRef } from '@angular/material/dialog';\nimport { UntypedFormBuilder, UntypedFormControl, Validators } from '@angular/forms';\nimport { Store } from '@ngxs/store';\nimport { of, Subject } from 'rxjs';\nimport {\n catchError, distinctUntilChanged, filter, mapTo, switchMap, takeUntil,\n tap,\n} from 'rxjs/operators';\nimport { UnitService } from '../../../../../api/services/unit.service';\nimport { ContractDtoModel } from '../../../../../api/models/dtos/contract.dto.model';\nimport { CreateUnit, DisableUnit, UpdateUnit } from '../../../../../state';\nimport { UnitLevel } from '../../../../../models/unit-level.enum';\nimport { UnitCreateRequestModel } from '../../../../../api/models/requests/unit-create.request.model';\nimport { UnitUpdateRequestModel } from '../../../../../api/models/requests/unit-update.request.model';\nimport { ToastyService } from '../../../../../shared/toasty';\nimport { BasicDialogService } from '../../../../../services/basic-dialog.service';\nimport { Unit } from '../../../../../models/unit.interface';\nimport { UnitViewResponseModel } from '../../../../../api/models/responses/unit-view.response.model';\nimport { BasicUser } from '../../../../../models/user.interface';\nimport { UnitContractForm } from '../../components/unit-contract-list-control/unit-contract-list-control.component';\nimport { TypedFormBuilder } from '../../../../../form/typed-form-builder';\nimport { UnitSelectFetchType } from '../../../../../components/unit-select';\nimport { AccessControlService } from '../../../../../services/access-control.service';\nimport { NonProductiveCategoryModel } from '../../../../../models/non-productive-category.model';\nimport { ErrorHandlerService } from '../../../../../services/error-handler.service';\nimport { TypedFormGroup } from '../../../../../form/typed-form-group';\nimport { UnitUpdateRequest } from '../../../../../api/interfaces/requests/unit-update.request';\nimport { CostCenterService } from 'src/app/services/cost-center.service';\n\nexport const HIDDEN_LEVELS_DEFAULT = '0-0-00,0-0-00-FIN,0-0-00-FRP,0-0-00-PWA,0-0-00-RCT,0-0-00-RPI,0-0-00-RRP,0-0-00-TBS,0-0-01-101';\n\nexport interface EditUnitForm {\n unitId: number;\n code: string;\n name: string;\n unitCoordinator: BasicUser;\n parentUnit: Unit;\n defects: string[];\n directUserSubmissionOfTimecard: boolean;\n monthlyView: boolean;\n deputyUnitCoordinators: BasicUser[];\n submitterContracts: UnitContractForm[];\n removedSubmitterContractIds: number[];\n timesheetExportTemplateColumns: string;\n timesheetExportTemplateHighlighting: string;\n timesheetExportNonProductiveTemplateColumns: string;\n timesheetExportNonProductiveTemplateHighlighting: string;\n nonProductiveCategories: NonProductiveCategoryModel[];\n hiddenLevels: string;\n payrollCompany: string;\n profitCenter: string;\n}\n\nexport interface EditUnitDialogData {\n unit?: UnitViewResponseModel;\n}\n\n@Component({\n templateUrl: './edit-unit-dialog.component.html',\n styleUrls: ['./edit-unit-dialog.component.scss'],\n encapsulation: ViewEncapsulation.None,\n standalone: false\n})\nexport class EditUnitDialogComponent implements OnInit, OnDestroy {\n payrollCompanies = signal([]);\n\n isLoadingPayrollCompanies = signal(false);\n\n profitCenters = signal([]);\n\n isLoadingProfitCenters = signal(false);\n\n /**\n * The project the work package belongs to\n */\n unit?: UnitViewResponseModel;\n\n /**\n * Contains all the form controls\n */\n form: TypedFormGroup;\n\n /**\n * Marks the form as being saved\n */\n saving: boolean = false;\n\n /**\n * Set to True if the Form is in Edit Mode\n */\n isFormInEditMode: boolean = false;\n\n /**\n * This flag is set to true, if the unit will be or is on level 4.\n * Contracts should only be available to level 4 units.\n */\n level: UnitLevel = UnitLevel.UNKNOWN;\n\n /**\n * A list of units that should be disabled for\n * unit selectors.\n */\n disabledUnitItems: Unit[] = [];\n\n isLoadingDefectList: boolean = false;\n\n isLoadingDefaultNonProductiveCategories: boolean = false;\n\n isLoadingTimesheetExportTemplate: boolean = false;\n\n fetchTypes: typeof UnitSelectFetchType = UnitSelectFetchType;\n\n get payroleCompany(): UntypedFormControl { return this.form.controls.payrollCompany as UntypedFormControl; }\n\n get profitCenter(): UntypedFormControl { return this.form.controls.profitCenter as UntypedFormControl; }\n\n get code(): UntypedFormControl { return this.form.controls.code as UntypedFormControl; }\n\n get name(): UntypedFormControl { return this.form.controls.name as UntypedFormControl; }\n\n get unitCoordinator(): UntypedFormControl { return this.form.controls.unitCoordinator as UntypedFormControl; }\n\n get defects(): UntypedFormControl { return this.form.controls.defects as UntypedFormControl; }\n\n get parentUnit(): UntypedFormControl { return this.form.controls.parentUnit as UntypedFormControl; }\n\n get deputyUnitCoordinators(): UntypedFormControl { return this.form.controls.deputyUnitCoordinators as UntypedFormControl; }\n\n get submitterContracts(): UntypedFormControl { return this.form.controls.submitterContracts as UntypedFormControl; }\n\n get removedSubmitterContractIds(): UntypedFormControl {\n return this.form.controls.removedSubmitterContractIds as UntypedFormControl;\n }\n\n get nonProductiveCategories(): UntypedFormControl {\n return this.form.controls.nonProductiveCategories as UntypedFormControl;\n }\n\n get timesheetExportTemplateColumns(): UntypedFormControl {\n return this.form.controls.timesheetExportTemplateColumns as UntypedFormControl;\n }\n\n get timesheetExportTemplateHighlighting(): UntypedFormControl {\n return this.form.controls.timesheetExportTemplateHighlighting as UntypedFormControl;\n }\n\n get timesheetExportNonProductiveTemplateColumns(): UntypedFormControl {\n return this.form.controls.timesheetExportNonProductiveTemplateColumns as UntypedFormControl;\n }\n\n get timesheetExportNonProductiveTemplateHighlighting(): UntypedFormControl {\n return this.form.controls.timesheetExportNonProductiveTemplateHighlighting as UntypedFormControl;\n }\n\n get directUserSubmissionOfTimecard(): UntypedFormControl {\n return this.form.controls.directUserSubmissionOfTimecard as UntypedFormControl;\n }\n\n get monthlyTimecardSubmission(): UntypedFormControl {\n return this.form.controls.monthlyView as UntypedFormControl;\n }\n\n get canSeeTimesheetExportTemplate(): boolean {\n return this.isAnyAdmin && this.isLevel3OrBelow;\n }\n\n get canEditUnitTimesheetExportTemplate(): boolean {\n return this.isAnyAdmin && this.isLevel3;\n }\n\n get areTimesheetExportTemplateColumnsRequired(): boolean {\n return this.canEditUnitTimesheetExportTemplate;\n }\n\n get areTimesheetExportNonProductiveTemplateColumnsRequired(): boolean {\n return this.canEditUnitTimesheetExportTemplate;\n }\n\n get hasTimesheetExportTemplateFormErrors(): boolean {\n return (\n this.timesheetExportTemplateColumns.invalid\n || this.timesheetExportNonProductiveTemplateColumns.invalid\n );\n }\n\n get isLevel3(): boolean {\n return this.level === UnitLevel.Level3;\n }\n\n get isLevel3OrBelow(): boolean {\n return this.level >= UnitLevel.Level3;\n }\n\n get isLevel4(): boolean {\n return this.level === UnitLevel.Level4;\n }\n\n get isLevel4OrBelow(): boolean {\n return this.level >= UnitLevel.Level4;\n }\n\n get isSubmitButtonEnabled(): boolean {\n return this.form.valid\n && !this.saving\n && !this.isLoadingDefectList\n && !this.isLoadingDefaultNonProductiveCategories\n && !this.isLoadingTimesheetExportTemplate;\n }\n\n private isAnyAdmin: boolean = false;\n\n /**\n * Triggers when the component is destroyed.\n * Necessary to inform other observers.\n *\n * @type {Subject}\n * @private\n */\n private destroyed$: Subject = new Subject();\n\n // eslint-disable-next-line max-lines-per-function\n constructor(\n @Inject(MAT_DIALOG_DATA) data: EditUnitDialogData,\n public dialogRef: MatDialogRef,\n _formBuilder: UntypedFormBuilder,\n private unitService: UnitService,\n private errorHandlerService: ErrorHandlerService,\n private dialogService: BasicDialogService,\n private accessControlService: AccessControlService,\n private store: Store,\n private toastyService: ToastyService,\n public costCenterService: CostCenterService,\n ) {\n this.unit = data.unit;\n const formBuilder: TypedFormBuilder = _formBuilder as any;\n this.isAnyAdmin = this.accessControlService.isAnyAdmin();\n this.isFormInEditMode = !!this.unit;\n\n let disableUnitDetails = false;\n\n if (this.unit) {\n // Edit mode: Make sure user is allowed to edit fields\n disableUnitDetails = !this.unit.canEditUnitDetails;\n this.level = this.unit.level;\n }\n\n this.form = formBuilder.group({\n unitId: [\n [],\n ],\n code: [\n { value: undefined, disabled: disableUnitDetails },\n [Validators.required],\n ],\n name: [\n { value: undefined, disabled: disableUnitDetails },\n [Validators.required],\n ],\n unitCoordinator: [\n { value: undefined, disabled: false },\n [Validators.required],\n ],\n parentUnit: [\n { value: undefined, disabled: disableUnitDetails },\n ],\n defects: [\n [],\n ],\n deputyUnitCoordinators: [\n [],\n ],\n submitterContracts: [\n [],\n ],\n removedSubmitterContractIds: [\n [],\n ],\n timesheetExportTemplateColumns: [\n { value: '', disabled: false },\n ],\n timesheetExportTemplateHighlighting: [\n { value: '', disabled: false },\n ],\n timesheetExportNonProductiveTemplateColumns: [\n { value: '', disabled: false },\n ],\n timesheetExportNonProductiveTemplateHighlighting: [\n { value: '', disabled: false },\n ],\n nonProductiveCategories: [\n [],\n ],\n directUserSubmissionOfTimecard: this.unit?.directUserSubmissionOfTimecard,\n monthlyView: [\n { value: this.unit?.monthlyView, disabled: !this.isLevel4 },\n ],\n payrollCompany: [\n { value: '', disabled: false },\n ],\n profitCenter: [\n { value: '', disabled: true },\n ],\n hiddenLevels: [\n { value: HIDDEN_LEVELS_DEFAULT, disabled: false },\n ],\n });\n effect(() => {\n if (this.isLevel4 && this.costCenterService.isDirty()) {\n this.form.markAsDirty();\n }\n });\n }\n\n ngOnInit(): void {\n this.initParentUnitListeners();\n this.patchForm();\n }\n\n ngOnDestroy(): void {\n this.destroyed$.next();\n this.destroyed$.complete();\n }\n\n /**\n * Creates the necessary DTOs out of the form,\n * to either create a new work package or edit an existing.\n *\n * Preconditions: Form has to be valid.\n */\n // eslint-disable-next-line complexity\n onSubmit(): void {\n if (!this.form.valid) {\n return;\n }\n this.costCenterService.showErrors.set(true);\n if (this.isLevel4 && this.costCenterService.errors().length) {\n return;\n }\n\n if (this.saving) {\n return;\n }\n\n this.saving = true;\n\nif (!this.unit) {\n this.createUnit();\n } else {\n this.editUnit();\n }\n }\n\n close(): void {\n this.dialogRef.close();\n }\n\n /**\n * Add IDs of contracts that need to be removed.\n * @param contract\n */\n onSubmitterContractRemoved(contract: ContractDtoModel): void {\n if (contract) {\n const removedSubmitterContractIds: number[] = this.removedSubmitterContractIds.value;\n this.removedSubmitterContractIds.patchValue([...removedSubmitterContractIds, contract.contractId]);\n }\n }\n\n disableUnit(): void {\n if (!this.unit) {\n return;\n }\n\n this.unitService\n .disableUnit$(this.unit.unitId)\n .pipe(\n takeUntil(this.destroyed$),\n )\n .subscribe(() => {\n if (!this.unit) {\n return;\n }\n\n // eslint-disable-next-line rxjs/no-ignored-observable\n this.store.dispatch(new DisableUnit(this.unit.unitId));\n\n this.unit.isDisabled = true;\n this.unit.canDisableUnit = false;\n\n this.dialogRef.close(true);\n });\n }\n\n /**\n * Non productive categories are only part of the request,\n * if the unit is a level 3 unit.\n */\n private createUnit(): void {\n const request = UnitCreateRequestModel.fromJSON(this.getRequestData());\n\n // Notify application that unit was created\n this.unitService\n .postUnit$(request)\n .pipe(\n switchMap((response) => this.store.dispatch(new CreateUnit(response.unitId))\n .pipe(\n mapTo(response),\n )),\n takeUntil(this.destroyed$),\n )\n .subscribe(() => {\n this.saving = false;\n this.dialogRef.close(true);\n this.toastyService.success('Successfully created the unit.');\n }, (error: unknown) => {\n this.saving = false;\n this.errorHandlerService.handleError(error as Error, 'An error has occurred while creating the unit. Please try again.');\n });\n }\n\n /**\n * Non productive categories are only part of the request,\n * if the unit is a level 3 unit.\n */\n private editUnit(): void {\n const request = UnitUpdateRequestModel.fromJSON(this.getRequestData());\n\n // Notify the application that the unit was edited\n this.unitService\n .putUnit$(request)\n .pipe(\n switchMap(() => this.store.dispatch(new UpdateUnit(request.unitId))),\n takeUntil(this.destroyed$),\n )\n .subscribe(() => {\n this.saving = false;\n this.dialogRef.close(true);\n this.toastyService.success('Successfully updated the unit.');\n }, (error: unknown) => {\n this.saving = false;\n this.errorHandlerService.handleError(error as Error, 'An error has occurred while updating the unit. Please try again.');\n });\n }\n\n private patchForm(): void {\n if (this.unit) {\n this.parentUnit.disable();\n this.form.patchValue(this.unit);\n // Ensures that the unit itself can't be the parent\n this.disabledUnitItems = [this.unit];\n this.level = this.unit.level;\n } else {\n this.patchDefectList();\n this.patchDefaultNonProductiveCategories();\n }\n }\n\n /**\n * This gets the list of defects of a unit.\n * If there is no unit yet (creation process), a default list\n * will be provided.\n */\n private patchDefectList(): void {\n const unitId = this.unit != null ? this.unit.unitId : undefined;\n\n this.isLoadingDefectList = true;\n\n this.unitService\n .getUnitDefects$(unitId)\n .pipe(\n catchError((error: unknown) => {\n this.errorHandlerService.handleError(error as Error, 'Unit Defect List');\n\n return of([]);\n }),\n takeUntil(this.destroyed$),\n )\n .subscribe((defects) => {\n this.defects.patchValue(defects);\n this.isLoadingDefectList = false;\n });\n }\n\n /**\n * This gets the list of non productive categories of a unit.\n * If there is no unit yet (creation process), a default list\n * will be provided.\n */\n private patchDefaultNonProductiveCategories(): void {\n this.isLoadingDefaultNonProductiveCategories = true;\n\n this.unitService\n .getDefaultNonProductiveCategories$()\n .pipe(\n catchError((error: unknown) => {\n this.errorHandlerService.handleError(error as Error, 'Non Productive Categories');\n\n return of([]);\n }),\n takeUntil(this.destroyed$),\n )\n .subscribe((defaultNonProductiveCategories) => {\n this.nonProductiveCategories.patchValue(defaultNonProductiveCategories);\n this.isLoadingDefaultNonProductiveCategories = false;\n });\n }\n\n /**\n * This gets the timesheet export template of a unit.\n * If there is no unit yet (creation process), a default list\n * will be provided.\n */\n private getTimeSheetExportTemplate(unitId?: number): void {\n this.isLoadingTimesheetExportTemplate = true;\n\n this.unitService\n .getTimeSheetExportTemplate$(unitId)\n .pipe(takeUntil(this.destroyed$))\n .subscribe(\n (timesheetExportTemplate) => {\n this.form.patchValue({\n timesheetExportTemplateColumns: timesheetExportTemplate.timesheetExportTemplateColumns,\n timesheetExportTemplateHighlighting: timesheetExportTemplate.timesheetExportTemplateHighlighting,\n timesheetExportNonProductiveTemplateColumns: timesheetExportTemplate\n .timesheetExportNonProductiveTemplateColumns,\n timesheetExportNonProductiveTemplateHighlighting: timesheetExportTemplate\n .timesheetExportNonProductiveTemplateHighlighting,\n });\n\n this.isLoadingTimesheetExportTemplate = false;\n\n // TODO: Is this necessary here? I believe it could be removed...\n this.updateFormValidation();\n },\n (error: unknown) => {\n this.errorHandlerService.handleError(error as Error, 'An error has occurred while loading the timesheet export template');\n },\n );\n }\n\n private initParentUnitListeners(): void {\n let isPayroleComanyInitialized = false;\n this.parentUnit\n .valueChanges\n .pipe(takeUntil(this.destroyed$))\n .subscribe((selectedUnit: Unit) => {\n if (selectedUnit) {\n // The (new) level of the unit, after changing the parent => ParentLevel+1\n const previousLevel = this.level;\n this.level = (selectedUnit.level + 1);\n\n if (this.canSeeTimesheetExportTemplate) {\n if (this.isLevel3 && !isPayroleComanyInitialized) {\n isPayroleComanyInitialized = true;\n this.initPayrollCoampanies();\n this.initPayrollCompanyListeners();\n }\n if (this.isLevel3 && previousLevel !== UnitLevel.Level3) {\n // Reload default NPCs and timesheet export template if selecting a L2 parent\n this.getTimeSheetExportTemplate(this.unit != null ? this.unit.unitId : undefined);\n } else if (this.isLevel4OrBelow) {\n // Reload correct NPCs and timesheet export template if selecting a L3/L4 parent\n this.getTimeSheetExportTemplate(selectedUnit.unitId);\n }\n }\n\n this.updateFormValidation();\n }\n });\n }\n\n private initPayrollCoampanies(): void {\n this.isLoadingPayrollCompanies.set(true);\n const examplePayrollCompanies = ['PC 1', 'PC 2', 'PC 3'];\n this.payrollCompanies.set(examplePayrollCompanies);\n this.isLoadingPayrollCompanies.set(false);\n this.unitService\n .getAllPayrollCompanies$()\n .pipe(\n catchError((error: unknown) => {\n this.errorHandlerService.handleError(error as Error, 'Payroll Companies');\n\n return of([]);\n }),\n takeUntil(this.destroyed$),\n )\n .subscribe((payrollCompanies) => {\n this.isLoadingPayrollCompanies.set(false)\n this.payrollCompanies.set(payrollCompanies);\n });\n }\n\n private updateFormValidation(): void {\n this.updateTimesheetExportTemplateForm();\n this.updateNonProductiveCategoriesForm();\n this.updatePayrollCompanyForm();\n this.updateMonthlySubmissionForm();\n }\n\n private initPayrollCompanyListeners(): void {\n this.payroleCompany.valueChanges\n .pipe(\n distinctUntilChanged(),\n filter((payrollCompany) => !!payrollCompany),\n tap(() => this.isLoadingProfitCenters.set(true)),\n tap(() => this.profitCenters.set([])),\n tap(() => this.profitCenter.setValue('')),\n switchMap((payrollCompany) => this.unitService.getprofitCentersByPayrollCompany$(payrollCompany)),\n catchError((error: unknown) => {\n this.errorHandlerService.handleError(error as Error, 'Profit Centers');\n\n return of([]);\n }),\n takeUntil(this.destroyed$)\n )\n .subscribe((profitCenters) => {\n this.isLoadingProfitCenters.set(false)\n this.profitCenters.set(profitCenters);\n this.profitCenter.enable();\n });\n }\n\n private updateMonthlySubmissionForm(): void {\n if (this.isLevel4) {\n this.monthlyTimecardSubmission.enable();\n } else {\n this.monthlyTimecardSubmission.disable();\n }\n }\n\n private updatePayrollCompanyForm(): void {\n if (this.isLevel3) {\n this.payroleCompany.setValidators(Validators.required);\n } else {\n // make form not required\n this.payroleCompany.removeValidators(Validators.required);\n }\n }\n\n private updateTimesheetExportTemplateForm(): void {\n if (this.canEditUnitTimesheetExportTemplate) {\n this.timesheetExportTemplateColumns.setValidators([Validators.required]);\n this.timesheetExportTemplateColumns.enable();\n this.timesheetExportTemplateHighlighting.enable();\n this.timesheetExportNonProductiveTemplateColumns.setValidators([Validators.required]);\n this.timesheetExportNonProductiveTemplateColumns.enable();\n this.timesheetExportNonProductiveTemplateHighlighting.enable();\n } else {\n this.timesheetExportTemplateColumns.setValidators([]);\n this.timesheetExportTemplateColumns.disable();\n this.timesheetExportTemplateHighlighting.disable();\n this.timesheetExportNonProductiveTemplateColumns.setValidators([]);\n this.timesheetExportNonProductiveTemplateColumns.disable();\n this.timesheetExportNonProductiveTemplateHighlighting.disable();\n }\n }\n\n private updateNonProductiveCategoriesForm(): void {\n if (this.isLevel3OrBelow) {\n this.nonProductiveCategories.enable();\n } else {\n this.nonProductiveCategories.disable();\n }\n }\n\n private getRequestData(): UnitUpdateRequest {\n const {\n unitId,\n code,\n name,\n unitCoordinator,\n parentUnit,\n defects,\n deputyUnitCoordinators,\n submitterContracts,\n removedSubmitterContractIds,\n nonProductiveCategories,\n timesheetExportTemplateColumns,\n timesheetExportTemplateHighlighting,\n timesheetExportNonProductiveTemplateColumns,\n timesheetExportNonProductiveTemplateHighlighting,\n directUserSubmissionOfTimecard,\n monthlyView: monthlyTimecardSubmission,\n hiddenLevels,\n payrollCompany,\n profitCenter,\n } = this.form.getRawValue();\n const costCenters = this.costCenterService.costCenters().map(item => item.toCostCenerSaveRequestJSON());\n const deletedActivityTypeIds = this.costCenterService.getDeletedActivityTypeIds();\n const deletedCostCentersIds = this.costCenterService.getDeletedCostCenterIds();\n\n return {\n costCenters,\n removedActivityTypeIds: deletedActivityTypeIds,\n removedCostCenterIds: deletedCostCentersIds,\n unitId,\n code,\n name,\n unitCoordinatorId: unitCoordinator.userId,\n parentUnitId: parentUnit ? parentUnit.unitId : null,\n defects,\n deputyUnitCoordinatorIds: deputyUnitCoordinators.map((item) => item.userId),\n submitterContracts: submitterContracts.map((item) => ({\n // TODO Better type enforcement\n supplierUnitId: item.supplierUnit!.unitId,\n submitterUnitId: item.submitterUnit?.unitId ?? null,\n contractId: item.contractId,\n model: item.model,\n contractHourlyRateCategoryPairs: [\n ...(Array.isArray(item.contractHourlyRateCategoryPairs) ? item.contractHourlyRateCategoryPairs : []),\n ],\n removedContractHourlyRateCategoryPairIds: item.removedContractHourlyRateCategoryPairIds,\n submitterCostCenter: item.costCenter,\n submitterEmployeeNumber: item.submitterEmployeeNumber,\n notificationSentTo: item.usersNotificationSentTo ? item.usersNotificationSentTo.map((user) => user.email).join(',') : '',\n costObject: item.costObjectCode,\n categoryActivityItem: item.categoryActivityItem,\n })),\n nonProductiveCategories,\n timesheetExportTemplateColumns,\n timesheetExportTemplateHighlighting,\n timesheetExportNonProductiveTemplateColumns,\n timesheetExportNonProductiveTemplateHighlighting,\n removedSubmitterContractIds,\n directUserSubmissionOfTimecard: directUserSubmissionOfTimecard || false,\n monthlyView: monthlyTimecardSubmission || false,\n hiddenLevels,\n payrollCompany,\n profitCenter,\n };\n }\n}\n","import {\n Injectable, Injector, OnDestroy, Optional,\n} from '@angular/core';\nimport {\n NavigationCancel, NavigationEnd, NavigationError, NavigationStart, Router,\n} from '@angular/router';\nimport { Subject } from 'rxjs';\nimport { filter, takeUntil } from 'rxjs/operators';\n\nimport * as Common from '@microsoft/applicationinsights-common';\nimport { ApplicationInsights, DistributedTracingModes, Snippet } from '@microsoft/applicationinsights-web';\nimport {\n ICustomProperties, ITelemetryItem, ITelemetryPlugin, IChannelControls,\n} from '@microsoft/applicationinsights-core-js';\n\ntype AppInsightsConfig = Snippet['config'];\n\n/* eslint-disable no-console */\n\nexport class AngularApplicationInsightsConfig implements AppInsightsConfig {\n disableAngularRouteTracking?: boolean;\n\n instrumentationKey?: string;\n\n connectionString?: string;\n\n diagnosticLogInterval?: number;\n\n maxMessageLimit?: number;\n\n loggingLevelConsole?: number;\n\n loggingLevelTelemetry?: number;\n\n enableDebugExceptions?: boolean;\n\n endpointUrl?: string;\n\n extensionConfig?: Record;\n\n extensions?: ITelemetryPlugin[];\n\n channels?: IChannelControls[][];\n\n emitLineDelimitedJson?: boolean;\n\n accountId?: string;\n\n sessionRenewalMs?: number;\n\n sessionExpirationMs?: number;\n\n maxBatchSizeInBytes?: number;\n\n maxBatchInterval?: number;\n\n enableDebug?: boolean;\n\n disableExceptionTracking?: boolean;\n\n disableTelemetry?: boolean;\n\n samplingPercentage?: number;\n\n autoTrackPageVisitTime?: boolean;\n\n enableAutoRouteTracking?: boolean;\n\n disableAjaxTracking?: boolean;\n\n disableFetchTracking?: boolean;\n\n overridePageViewDuration?: boolean;\n\n maxAjaxCallsPerView?: number;\n\n disableDataLossAnalysis?: boolean;\n\n disableCorrelationHeaders?: boolean;\n\n distributedTracingMode?: DistributedTracingModes;\n\n correlationHeaderExcludedDomains?: string[];\n\n disableFlushOnBeforeUnload?: boolean;\n\n disableFlushOnUnload?: boolean;\n\n enableSessionStorageBuffer?: boolean;\n\n isCookieUseDisabled?: boolean;\n\n cookieDomain?: string;\n\n isRetryDisabled?: boolean;\n\n url?: string;\n\n isStorageUseDisabled?: boolean;\n\n isBeaconApiDisabled?: boolean;\n\n sdkExtension?: string;\n\n isBrowserLinkTrackingEnabled?: boolean;\n\n appId?: string;\n\n enableCorsCorrelation?: boolean;\n\n namePrefix?: string;\n\n enableRequestHeaderTracking?: boolean;\n\n enableResponseHeaderTracking?: boolean;\n\n enableAjaxErrorStatusText?: boolean;\n\n onunloadDisableBeacon?: boolean;\n}\n\ntype AppInsightsPublicInterface = Omit, 'getCookieMgr'>;\n\n@Injectable({\n providedIn: 'root',\n})\nexport class ApplicationInsightsService implements AppInsightsPublicInterface, OnDestroy {\n get context(): ApplicationInsights['context'] | undefined {\n return this.appInsights ? this.appInsights.context : undefined;\n }\n\n appInsights?: ApplicationInsights;\n\n private destroyed$: Subject = new Subject();\n\n constructor(\n private _injector: Injector,\n @Optional() private config?: AngularApplicationInsightsConfig,\n ) {\n }\n\n ngOnDestroy(): void {\n this.destroyed$.next();\n this.destroyed$.complete();\n }\n\n trackEvent(event: Common.IEventTelemetry, customProperties?: ICustomProperties): void;\n\n /** @deprecated */\n // eslint-disable-next-line @typescript-eslint/unified-signatures\n trackEvent(eventName: Common.IEventTelemetry['name'], customProperties?: ICustomProperties): void;\n\n /**\n * Log a user action or other occurrence.\n */\n trackEvent(event: Common.IEventTelemetry | Common.IEventTelemetry['name'], customProperties?: ICustomProperties): void {\n if (this.appInsights) {\n try {\n this.appInsights.trackEvent(typeof event === 'string' ? { name: event } : event, customProperties);\n } catch (ex) {\n console.warn('Angular application insights Error [trackEvent]: ', ex);\n }\n } else {\n console.warn('Application insights is not available. Telemetry will not be sent.');\n }\n }\n\n trackPageView(pageView?: Common.IPageViewTelemetry): void;\n\n /** @deprecated */\n trackPageView(name?: Common.IPageViewTelemetry['name'], uri?: Common.IPageViewTelemetry['uri'], additionalTelemetry?: Omit): void;\n\n /**\n * Logs that a page, or similar container was displayed to the user.\n */\n trackPageView(pageView?: Common.IPageViewTelemetry | Common.IPageViewTelemetry['name'], uri?: Common.IPageViewTelemetry['uri'], additionalTelemetry?: Omit): void {\n if (this.appInsights) {\n try {\n this.appInsights.trackPageView(typeof pageView === 'string' || uri != null || additionalTelemetry != null ? {\n name: pageView as string,\n uri,\n ...additionalTelemetry,\n } : pageView);\n } catch (ex) {\n console.warn('Angular application insights Error [trackPageView]: ', ex);\n }\n } else {\n console.warn('Application insights is not available. Telemetry will not be sent.');\n }\n }\n\n /**\n * Log a bag of performance information via the customProperties field.\n */\n trackPageViewPerformance(pageViewPerformance: Common.IPageViewPerformanceTelemetry): void {\n if (this.appInsights) {\n try {\n this.appInsights.trackPageViewPerformance(pageViewPerformance);\n } catch (ex) {\n console.warn('Angular application insights Error [trackPageViewPerformance]: ', ex);\n }\n } else {\n console.warn('Application insights is not available. Telemetry will not be sent.');\n }\n }\n\n trackException(exception: Common.IExceptionTelemetry): void;\n\n /** @deprecated */\n trackException(exception: Error, severityLevel?: Common.SeverityLevel | number, additionalTelemetry?: Omit): void;\n\n /**\n * Log an exception that you have caught.\n */\n trackException(exception: Common.IExceptionTelemetry | Error, severityLevel?: Common.SeverityLevel | number, additionalTelemetry?: Omit): void {\n if (this.appInsights) {\n try {\n this.appInsights.trackException('name' in exception && 'message' in exception ? {\n exception,\n severityLevel,\n ...additionalTelemetry,\n } : exception);\n } catch (ex) {\n console.warn('Angular application insights Error [trackException]: ', ex);\n }\n } else {\n console.warn('Application insights is not available. Telemetry will not be sent.');\n }\n }\n\n trackTrace(message: string, securityLevel?: Common.SeverityLevel, additionalTelemetry?: Omit): void;\n\n /** @deprecated */\n trackTrace(trace: Common.ITraceTelemetry, customProperties?: ICustomProperties): void;\n\n /**\n * Log a diagnostic scenario such entering or leaving a function.\n */\n trackTrace(trace: Common.ITraceTelemetry | string, customProperties?: ICustomProperties | Common.SeverityLevel, additionalTelemetry?: Omit): void {\n if (this.appInsights) {\n try {\n this.appInsights.trackTrace(typeof trace === 'string' ? {\n message: trace,\n severityLevel: (typeof customProperties === 'number' ? customProperties : undefined),\n ...additionalTelemetry,\n } : trace, typeof trace === 'string' ? undefined : customProperties as ICustomProperties);\n } catch (ex) {\n console.warn('Angular application insights Error [trackTrace]: ', ex);\n }\n } else {\n console.warn('Application insights is not available. Telemetry will not be sent.');\n }\n }\n\n /**\n * Log a numeric value that is not associated with a specific event. Typically used\n * to send regular reports of performance indicators.\n *\n * To send a single measurement, just use the `name` and `average` fields\n * of {@param metric}.\n *\n * If you take measurements frequently, you can reduce the telemetry bandwidth by\n * aggregating multiple measurements and sending the resulting average and modifying\n * the `sampleCount` field of {@param metric}.\n */\n trackMetric(metric: Common.IMetricTelemetry, customProperties?: ICustomProperties): void {\n if (this.appInsights) {\n try {\n this.appInsights.trackMetric(metric, customProperties);\n } catch (ex) {\n console.warn('Angular application insights Error [trackMetric]: ', ex);\n }\n } else {\n console.warn('Application insights is not available. Telemetry will not be sent.');\n }\n }\n\n /**\n * Log a dependency call (e.g. ajax)\n */\n trackDependencyData(dependency: Common.IDependencyTelemetry): void {\n if (this.appInsights) {\n try {\n this.appInsights.trackDependencyData(dependency);\n } catch (ex) {\n console.warn('Angular application insights Error [trackDependencyData]: ', ex);\n }\n } else {\n console.warn('Application insights is not available. Telemetry will not be sent.');\n }\n }\n\n /**\n * Starts the timer for tracking a page load time. Use this instead of `trackPageView` if you want to\n * control when the page view timer starts and stops, but don't want to calculate the duration yourself.\n * This method doesn't send any telemetry. Call `stopTrackPage` to log the end of the page view and send the event.\n * @param name A string that identifies this item, unique within this HTML document. Defaults to the document title.\n */\n startTrackPage(name?: string): void {\n if (this.appInsights) {\n try {\n this.appInsights.startTrackPage(name);\n } catch (ex) {\n console.warn('Angular application insights Error [startTrackPage]: ', ex);\n }\n } else {\n console.warn('Application insights is not available. Telemetry will not be sent.');\n }\n }\n\n /**\n * Stops the timer that was started by calling `startTrackPage` and sends the pageview load time telemetry with\n * the specified properties and measurements.\n * The duration of the page view will be the time between calling `startTrackPage` and `stopTrackPage`.\n */\n stopTrackPage(\n name?: string,\n url?: string,\n customProperties?: Record,\n measurements?: Record,\n ): void {\n if (this.appInsights) {\n try {\n this.appInsights.stopTrackPage(name, url, customProperties, measurements);\n } catch (ex) {\n console.warn('Angular application insights Error [stopTrackPage]: ', ex);\n }\n } else {\n console.warn('Application insights is not available. Telemetry will not be sent.');\n }\n }\n\n /**\n * Start timing an extended event. Call {@link stopTrackEvent} to log the event when it ends.\n * @param name A string that identifies this item, unique within this HTML document.\n */\n startTrackEvent(name?: string): void {\n if (this.appInsights) {\n try {\n this.appInsights.startTrackEvent(name);\n } catch (ex) {\n console.warn('Angular application insights Error [startTrackEvent]: ', ex);\n }\n } else {\n console.warn('Application insights is not available. Telemetry will not be sent.');\n }\n }\n\n /**\n * Log an extended event that you started timing with `startTrackEvent`.\n */\n stopTrackEvent(\n name: string,\n properties?: Record,\n measurements?: Record,\n ): void {\n if (this.appInsights) {\n try {\n this.appInsights.stopTrackEvent(name, properties, measurements);\n } catch (ex) {\n console.warn('Angular application insights Error [stopTrackEvent]: ', ex);\n }\n } else {\n console.warn('Application insights is not available. Telemetry will not be sent.');\n }\n }\n\n /**\n * Set the authenticated user id and the account id. Used for identifying a specific signed-in user. Parameters\n * must not contain whitespace or ,;=|\n *\n * The method will only set the `authenticatedUserId` and `accountId` in the current page view. To set them for\n * the whole session, you should set `storeInCookie = true`\n */\n setAuthenticatedUserContext(authenticatedUserId: string, accountId?: string, storeInCookie?: boolean): void {\n if (this.appInsights) {\n try {\n this.appInsights.setAuthenticatedUserContext(authenticatedUserId, accountId, storeInCookie);\n } catch (ex) {\n console.warn('Angular application insights Error [setAuthenticatedUserContext]: ', ex);\n }\n } else {\n console.warn('Application insights is not available. Telemetry will not be sent.');\n }\n }\n\n /**\n * Clears the authenticated user id and account id. The associated cookie is cleared, if present.\n */\n clearAuthenticatedUserContext(): void {\n if (this.appInsights) {\n try {\n this.appInsights.clearAuthenticatedUserContext();\n } catch (ex) {\n console.warn('Angular application insights Error [clearAuthenticatedUserContext]: ', ex);\n }\n } else {\n console.warn('Application insights is not available. Telemetry will not be sent.');\n }\n }\n\n /**\n * Manually trigger an immediate send of all telemetry still in the buffer.\n * @param {boolean} [async=true]\n */\n flush(async?: boolean): void {\n if (this.appInsights) {\n try {\n this.appInsights.flush(async);\n } catch (ex) {\n console.warn('Angular application insights Error [flush]: ', ex);\n }\n } else {\n console.warn('Application insights is not available. Telemetry will not be sent.');\n }\n }\n\n addTelemetryInitializer(telemetryInitializer: (item: ITelemetryItem) => boolean | void): void {\n if (this.appInsights) {\n try {\n this.appInsights.addTelemetryInitializer(telemetryInitializer);\n } catch (ex) {\n console.warn('Angular application insights Error [addTelemetryInitializer]: ', ex);\n }\n } else {\n console.warn('Application insights is not available. Telemetry will not be sent.');\n }\n }\n\n init(): void {\n if (this.config != null) {\n if (this.config.instrumentationKey) {\n try {\n const appInsights = new ApplicationInsights({\n config: this.config,\n });\n appInsights.loadAppInsights();\n this.appInsights = appInsights;\n\n const router = this.getRouter();\n\n // eslint-disable-next-line max-depth\n if (this.config.disableAngularRouteTracking || !router) {\n return;\n }\n\n router.events\n .pipe(\n filter((event) => event instanceof NavigationStart),\n takeUntil(this.destroyed$),\n )\n .subscribe((event: NavigationStart) => {\n this.startTrackPage(event.url);\n });\n\n router.events\n .pipe(\n filter((event) => (\n event instanceof NavigationEnd\n || event instanceof NavigationCancel\n || event instanceof NavigationError\n )),\n takeUntil(this.destroyed$),\n )\n .subscribe((event: NavigationEnd) => {\n this.stopTrackPage(event.url);\n });\n } catch (ex) {\n console.warn('Angular application insights Error [loadAppInsights]: ', ex);\n }\n } else {\n console.warn('An instrumentationKey value is required to initialize AppInsightsService');\n }\n } else {\n console.warn('You need forRoot on ApplicationInsightsModule, with instrumentationKey set at least');\n }\n }\n\n private getRouter(): Router | undefined {\n try {\n return this._injector.get(Router);\n } catch (ex) {\n // do nothing\n }\n\n return undefined;\n }\n}\n\n/* eslint-enable no-console */\n","/**\n * A list of filter combinations for the dashboard work packages.\n */\nexport enum WorkPackageCombinedFilterType {\n TO_BE_ISSUED = 1,\n IN_PROGRESS = 2,\n AWAITING_ACTION = 3,\n TO_BE_CLOSED = 4,\n TO_BE_CONFIRMED_IN_MY_UNIT = 5,\n}\n","import { Pipe, PipeTransform } from '@angular/core';\nimport { ProjectTypeCode } from '../../../models/project-type.enum';\nimport { isEmpty } from '../../../helpers/utilities';\n\n@Pipe({\n name: 'collAppSubmitterAndSupplierSettingsItemLabel',\n standalone: false\n})\nexport class CollAppSubmitterAndSupplierSettingsItemLabelPipe implements PipeTransform {\n transform(value?: string | null, fallbackValue?: string | null): string | null {\n if (isEmpty(value)) {\n return null;\n }\n\n switch (value) {\n case ProjectTypeCode.InternalOrder:\n case ProjectTypeCode.ServiceOrder:\n return 'Category';\n case ProjectTypeCode.SalesOrder:\n return 'Item';\n case ProjectTypeCode.ProjectWithNetworkPlanning1:\n case ProjectTypeCode.ProjectWithNetworkPlanning2:\n case ProjectTypeCode.ProjectWithNetworkPlanning3:\n return 'Activity';\n default:\n return this.transform(fallbackValue);\n }\n }\n}\n","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { MatDialogModule } from '@angular/material/dialog';\nimport { SharedModule } from '../../shared';\nimport { CollAppSubmitterAndSupplierSettingsItemLabelPipe } from './pipes';\n\n@NgModule({\n imports: [\n CommonModule,\n MatDialogModule,\n SharedModule,\n ],\n declarations: [\n CollAppSubmitterAndSupplierSettingsItemLabelPipe,\n ],\n exports: [\n CommonModule,\n CollAppSubmitterAndSupplierSettingsItemLabelPipe,\n ],\n providers: [\n CollAppSubmitterAndSupplierSettingsItemLabelPipe,\n ],\n})\nexport class ProjectsSharedModule {\n}\n","import { Injectable, OnDestroy } from '@angular/core';\nimport { Router } from '@angular/router';\nimport { MatDialog, MatDialogRef } from '@angular/material/dialog';\nimport { BehaviorSubject, Observable, Subject } from 'rxjs';\nimport { finalize } from 'rxjs/operators';\nimport { AssignWorkPackageDialogResult } from '../../../components/dialogs/assign-work-package/assign-work-package-dialog-result';\nimport { AssignWorkPackageComponent } from '../../../components/dialogs/assign-work-package/assign-work-package.component';\nimport { LevelSlimDtoModel } from '../../../api/models/dtos/level-slim.dto.model';\nimport { ProjectViewResponseModel } from '../../../api/models/responses/project-view.response.model';\nimport { WorkPackageViewResponseModel } from '../../../api/models/responses/work-package-view.response.model';\nimport { ScopeChangeDtoModel } from '../../../api/models/dtos/scope-change.dto.model';\nimport { QuestionDtoModel } from '../../../api/models/dtos/question.dto.model';\nimport {\n WorkPackageScopeChangeDialogComponent,\n WorkPackageScopeChangeDialogResult,\n} from '../../../components/dialogs/work-package-scope-change';\nimport {\n EditCreateQuestionDialogComponent,\n EditCreateQuestionDialogResult,\n} from '../../../components/dialogs/edit-create-question';\nimport {\n ConcludeQuestionDialogComponent,\n ConcludeQuestionDialogResult,\n} from '../../../components/dialogs/conclude-question';\nimport {\n ReopenQuestionDialogComponent,\n ReopenQuestionDialogResult,\n} from '../../../components/dialogs/reopen-question';\nimport type {\n WorkPackageWizardDialogComponent,\n WorkPackageWizardDialogData,\n WorkPackageWizardDialogResult,\n} from '../../../components/dialogs/work-package-wizard';\nimport { WorkPackageWizardDialogMode } from '../../../components/dialogs/work-package-wizard/dialog-types';\nimport {\n CreateFeedbackDialogComponent,\n FeedbackCreateDialogResult,\n} from '../../../components/dialogs/create-feedback';\nimport { BasicDialogComponent } from '../../../shared/dialogs/basic-dialog/basic.dialog.component';\nimport { BasicDialogService } from '../../../services/basic-dialog.service';\nimport { ProjectService } from '../../../api/services/project.service';\nimport { ErrorHandlerService } from '../../../services/error-handler.service';\nimport { ToastyService } from '../../../shared/toasty';\nimport { LoadingIndicatorService } from '../../../services/loading-indicator.service';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class WorkPackageDialogService implements OnDestroy {\n get workPackageDialogOpen(): boolean {\n return (this._openWorkPackageDialog !== null);\n }\n\n get workPackageDialogClosed(): boolean {\n return (this._openWorkPackageDialog === null);\n }\n\n workPackageDialogChange$: Observable;\n\n workPackageDialogOpen$: Observable<\n MatDialogRef | MatDialogRef\n >;\n\n workPackageDialogClose$: Observable<\n MatDialogRef | MatDialogRef\n >;\n\n private _openWorkPackageDialog: MatDialogRef<\n WorkPackageWizardDialogComponent,\n WorkPackageWizardDialogResult\n > | MatDialogRef | null = null;\n\n private workPackageDialogChangeSubject$: BehaviorSubject = new BehaviorSubject(false);\n\n private workPackageDialogOpenSubject$: Subject<\n MatDialogRef | MatDialogRef\n > = new Subject();\n\n private workPackageDialogCloseSubject$: Subject<\n MatDialogRef | MatDialogRef\n > = new Subject();\n\n private confirmDialogRef: MatDialogRef | null = null;\n\n constructor(\n private router: Router,\n private dialog: MatDialog,\n private dialogService: BasicDialogService,\n private projectService: ProjectService,\n private loadingIndicatorService: LoadingIndicatorService,\n private toastService: ToastyService,\n private errorHandlerService: ErrorHandlerService,\n ) {\n this.workPackageDialogChange$ = this.workPackageDialogChangeSubject$.asObservable();\n this.workPackageDialogOpen$ = this.workPackageDialogOpenSubject$.asObservable();\n this.workPackageDialogClose$ = this.workPackageDialogCloseSubject$.asObservable();\n }\n\n ngOnDestroy(): void {\n this.workPackageDialogChangeSubject$.complete();\n this.workPackageDialogOpenSubject$.complete();\n this.workPackageDialogCloseSubject$.complete();\n }\n\n showArchiveProjectsForbiddenDialog(response: string[]): void {\n let names = '';\n response.forEach((name: string) => {\n names += `
  • ${name}
  • `;\n });\n\n const title = 'Archive forbidden';\n const text = `You are not allowed to archive this project.
    \n The following workPackages are still open:\n
      ${names}
    `;\n\n const dialogRef = this.dialogService.showOkDialog(title, text);\n this.confirmDialogRef = dialogRef;\n\n dialogRef\n .afterClosed()\n .subscribe(() => {\n this.confirmDialogRef = null;\n });\n }\n\n openCreateWorkPackageDialog(\n project: ProjectViewResponseModel,\n levels?: LevelSlimDtoModel[],\n ): Promise> {\n return this.openWorkPackageWizardDialog({\n mode: WorkPackageWizardDialogMode.Create,\n project,\n levels,\n });\n }\n\n /**\n * Opten the dialog to create an ad-hoc workpackage\n * @param project\n * @param levels\n * @returns\n */\n openCreateAdHocWorkPackageDialog():\n Promise> {\n return this.openWorkPackageWizardDialog({\n mode: WorkPackageWizardDialogMode.Create,\n });\n }\n\n openDeleteWorkPackageDialog(workPackage: WorkPackageViewResponseModel): MatDialogRef {\n if (this.workPackageDialogOpen) {\n throw new Error('Trying to open a new work package wizard dialog while a previous dialog is still open.');\n }\n\n const { workPackageId, projectId } = workPackage;\n\n // Deletes the work package if user confirms\n\n const dialogRef = this.dialogService\n .showConfirmDialog(\n 'Delete Work Package',\n `Are you sure you want to delete ${workPackage.title}?`,\n () => this.projectService\n .deleteWorkPackage$(\n projectId,\n workPackageId,\n ),\n );\n\n dialogRef\n .afterClosed()\n .pipe(\n finalize(() => {\n dialogRef.close();\n this.workPackageDialogChangeSubject$.next(false);\n this.workPackageDialogCloseSubject$.next(dialogRef);\n this._openWorkPackageDialog = null;\n }),\n // takeUntil(this.destroyed$),\n );\n\n this.workPackageDialogChangeSubject$.next(true);\n this.workPackageDialogOpenSubject$.next(dialogRef);\n\n return dialogRef;\n }\n\n openDeleteWorkPackageDialogWithRedirect(\n workPackage: WorkPackageViewResponseModel,\n ): MatDialogRef {\n const dialogRef = this.openDeleteWorkPackageDialog(workPackage);\n\n dialogRef\n .afterClosed()\n .subscribe({\n next: () => {\n this.toastService.success('Work Package was successfully deleted.');\n this.router.navigate(['/dashboard']);\n },\n error: (error: unknown) => {\n this.errorHandlerService.handleError(error as Error, 'An error has occurred while deleting the Work Package. Please try again.');\n }}\n );\n\n return dialogRef;\n }\n\n openEditWorkPackageDialog(\n workPackage: WorkPackageViewResponseModel,\n ): Promise> {\n const levels = workPackage.level != null ? workPackage.getLevelPath(workPackage.level.levelId) : [];\n\n return this.projectService.getProjectView$(workPackage?.projectId)\n .toPromise()\n .then((project) => this.openWorkPackageWizardDialog({\n mode: WorkPackageWizardDialogMode.Edit,\n workPackage,\n project,\n levels,\n }));\n }\n\n /**\n * The project and work package passed are the source of the duplication.\n * In the wizard the new destination of the project will be selected.\n */\n openDuplicateWorkPackageDialog(\n workPackage: WorkPackageViewResponseModel,\n ): Promise> {\n const levels = workPackage.level != null ? workPackage.getLevelPath(workPackage.level.levelId) : [];\n const project = workPackage.project != null ? workPackage.project : undefined;\n\n return this.openWorkPackageWizardDialog({\n mode: WorkPackageWizardDialogMode.Duplicate,\n workPackage,\n project,\n levels,\n });\n }\n\n openAssignWorkPackageDialog(\n userId: string,\n ): Promise> {\n const data = { userId };\n this.loadingIndicatorService.addLoadingRequest();\n\n return import('../../../components/dialogs/assign-work-package')\n .then((m) => {\n const dialogRef = this.dialog.open(\n m.AssignWorkPackageComponent,\n {\n autoFocus: false,\n disableClose: true,\n closeOnNavigation: false,\n panelClass: ['collapp-dialog', 'collapp-dialog--large'],\n data,\n },\n );\n\n return dialogRef;\n })\n .catch((error) => {\n this.errorHandlerService.handleError(error, 'Error loading module');\n throw error;\n })\n .finally(() => this.loadingIndicatorService.removeLoadingRequest());\n }\n\n openMoveWorkPackageDialog(\n workPackage: WorkPackageViewResponseModel,\n ): Promise> {\n const levels = workPackage.level != null ? workPackage.getLevelPath(workPackage.level.levelId) : [];\n const project = workPackage.project != null ? workPackage.project : undefined;\n\n return this.openWorkPackageWizardDialog({\n mode: WorkPackageWizardDialogMode.Move,\n workPackage,\n project,\n levels,\n });\n }\n\n /**\n * The project and work package passed are the source of the duplication.\n * In the wizard the new destination of the project will be selected.\n */\n openCreateFeedbackDialog(\n projectId: number,\n\n workPackageId: number,\n isSupplierFeedback: boolean,\n ): Promise> {\n return this.openFeedbackDialog(projectId, workPackageId, isSupplierFeedback);\n }\n\n /**\n * Opens a dialog for creating a ScopeChange entry and transitioning the\n * given WorkPackage to the status 'Scope Change'.\n */\n openScopeChangeCreateDialog(\n workPackage: WorkPackageViewResponseModel,\n ): Promise> {\n return this.openScopeChangeDialog(workPackage);\n }\n\n /**\n * Opens a dialog for updating a ScopeChange entry.\n */\n openScopeChangeUpdateDialog(\n workPackage: WorkPackageViewResponseModel,\n scopeChange: ScopeChangeDtoModel,\n ): Promise> {\n return this.openScopeChangeDialog(workPackage, scopeChange);\n }\n\n /**\n * Opens a dialog for creating a question.\n */\n openCreateQuestionDialog(\n workPackage: WorkPackageViewResponseModel,\n ): Promise> {\n this.loadingIndicatorService.addLoadingRequest();\n\n return import('../../../components/dialogs/edit-create-question')\n .then((m) => this.dialog.open(\n m.EditCreateQuestionDialogComponent,\n {\n width: '300px',\n data: {\n workPackage,\n },\n disableClose: true,\n autoFocus: false,\n panelClass: ['collapp-dialog', 'collapp-dialog--large'],\n },\n ))\n .catch((error) => {\n this.errorHandlerService.handleError(error, 'Error loading module');\n throw error;\n })\n .finally(() => this.loadingIndicatorService.removeLoadingRequest());\n }\n\n /**\n * Opens a dialog for editing a question.\n */\n openEditQuestionDialog(\n workPackage: WorkPackageViewResponseModel,\n question: QuestionDtoModel,\n ): Promise> {\n this.loadingIndicatorService.addLoadingRequest();\n\n return import('../../../components/dialogs/edit-create-question')\n .then((m) => this.dialog.open(\n m.EditCreateQuestionDialogComponent,\n {\n width: '300px',\n data: {\n workPackage,\n question,\n },\n disableClose: true,\n autoFocus: false,\n panelClass: ['collapp-dialog', 'collapp-dialog--large'],\n },\n ))\n .catch((error) => {\n this.errorHandlerService.handleError(error, 'Error loading module');\n throw error;\n })\n .finally(() => this.loadingIndicatorService.removeLoadingRequest());\n }\n\n /**\n * Creates a Question Re-Open dialog.\n */\n openReopenDialog(\n workPackage: WorkPackageViewResponseModel,\n question: QuestionDtoModel,\n ): Promise> {\n this.loadingIndicatorService.addLoadingRequest();\n\n return import('../../../components/dialogs/reopen-question')\n .then((m) => this.dialog.open(\n m.ReopenQuestionDialogComponent,\n {\n width: '300px',\n data: {\n workPackage,\n question,\n },\n disableClose: true,\n autoFocus: false,\n panelClass: ['collapp-dialog', 'collapp-dialog--large'],\n },\n ))\n .catch((error) => {\n this.errorHandlerService.handleError(error, 'Error loading module');\n throw error;\n })\n .finally(() => this.loadingIndicatorService.removeLoadingRequest());\n }\n\n /**\n * Creates a Work Package Conclusion dialog.\n */\n openConcludeDialog(\n workPackage: WorkPackageViewResponseModel,\n question: QuestionDtoModel,\n ): Promise> {\n this.loadingIndicatorService.addLoadingRequest();\n\n return import('../../../components/dialogs/conclude-question')\n .then((m) => this.dialog.open(\n m.ConcludeQuestionDialogComponent,\n {\n width: '300px',\n data: {\n workPackage,\n question,\n },\n disableClose: true,\n autoFocus: false,\n panelClass: ['collapp-dialog', 'collapp-dialog--large'],\n },\n ))\n .catch((error) => {\n this.errorHandlerService.handleError(error, 'Error loading module');\n throw error;\n })\n .finally(() => this.loadingIndicatorService.removeLoadingRequest());\n }\n\n private openWorkPackageWizardDialog(\n data: WorkPackageWizardDialogData,\n ): Promise> {\n if (this.workPackageDialogOpen) {\n throw new Error('Trying to open a new work package wizard dialog while a previous dialog is still open.');\n }\n\n this.loadingIndicatorService.addLoadingRequest();\n\n return import('../../../components/dialogs/work-package-wizard')\n .then((m) => {\n const dialogRef = this.dialog.open(\n m.WorkPackageWizardDialogComponent,\n {\n autoFocus: false,\n disableClose: true,\n closeOnNavigation: false,\n panelClass: ['collapp-dialog', 'collapp-dialog--large'],\n data,\n },\n );\n\n dialogRef\n .afterClosed()\n .subscribe(() => {\n this.workPackageDialogChangeSubject$.next(false);\n this.workPackageDialogCloseSubject$.next(dialogRef);\n this._openWorkPackageDialog = null;\n });\n\n this.workPackageDialogChangeSubject$.next(true);\n this.workPackageDialogOpenSubject$.next(dialogRef);\n\n this._openWorkPackageDialog = dialogRef;\n\n return dialogRef;\n })\n .catch((error) => {\n this.errorHandlerService.handleError(error, 'Error loading module');\n throw error;\n })\n .finally(() => this.loadingIndicatorService.removeLoadingRequest());\n }\n\n /**\n * Opens a dialog for creating a Feedback entry\n */\n private openFeedbackDialog(\n projectId: number,\n workPackageId: number,\n isSupplierFeedback: boolean,\n ): Promise> {\n this.loadingIndicatorService.addLoadingRequest();\n\n return import('../../../components/dialogs/create-feedback')\n .then((m) => this.dialog.open(\n m.CreateFeedbackDialogComponent,\n {\n width: '300px',\n data: {\n workPackageId,\n projectId,\n closeOnError: false,\n isSupplierFeedback,\n },\n disableClose: true,\n closeOnNavigation: false,\n autoFocus: false,\n panelClass: ['collapp-dialog', 'collapp-dialog--large'],\n },\n ))\n .catch((error) => {\n this.errorHandlerService.handleError(error, 'Error loading module');\n throw error;\n })\n .finally(() => this.loadingIndicatorService.removeLoadingRequest());\n }\n\n /**\n * Opens a dialog for creating or updating a ScopeChange entry, possibly transitioning the\n * given WorkPackage to the status 'Scope Change'.\n */\n private openScopeChangeDialog(\n workPackage: WorkPackageViewResponseModel,\n scopeChange?: ScopeChangeDtoModel,\n ): Promise> {\n this.loadingIndicatorService.addLoadingRequest();\n\n return import('../../../components/dialogs/work-package-scope-change')\n .then((m) => this.dialog.open(\n m.WorkPackageScopeChangeDialogComponent,\n {\n width: '300px',\n data: {\n workPackage,\n scopeChange,\n closeOnError: false,\n },\n closeOnNavigation: false,\n disableClose: true,\n autoFocus: false,\n panelClass: ['collapp-dialog', 'collapp-dialog--large'],\n },\n ))\n .catch((error) => {\n this.errorHandlerService.handleError(error, 'Error loading module');\n throw error;\n })\n .finally(() => this.loadingIndicatorService.removeLoadingRequest());\n }\n}\n","/* eslint-disable max-classes-per-file */\nimport { DestroyRef, Inject, Injectable, OnDestroy, inject } from '@angular/core';\nimport { NavigationExtras, Router } from '@angular/router';\nimport {\n catchError, filter, finalize, mapTo, switchMap, takeUntil, tap, take,\n} from 'rxjs/operators';\nimport {\n BehaviorSubject, forkJoin, Observable, of, Subject, Subscription, throwError,\n} from 'rxjs';\nimport { Store } from '@ngxs/store';\nimport { HttpErrorResponse } from '@angular/common/http';\nimport { DOCUMENT, Location } from '@angular/common';\nimport moment from 'moment';\nimport {\n MsalBroadcastService, MsalGuardConfiguration, MsalService, MSAL_GUARD_CONFIG,\n} from '@azure/msal-angular';\nimport { AuthError, EventMessage, EventType } from '@azure/msal-browser';\nimport { UserDtoModel } from '../api/models/dtos/user.dto.model';\nimport { UserService } from '../api/services/user.service';\nimport {\n ClearBaseData,\n MarkImpersonation,\n RefreshBaseData,\n UserSelectors,\n UserStateActions,\n} from '../state';\nimport { BasicUser } from '../models/user.interface';\nimport { isEmpty } from '../helpers/utilities';\nimport { assertRequiredProperties } from '../api/utilities/api.utility';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\n\nexport const ADMIN_ROLE_NAME = 'Administrator';\nexport const SUPER_ADMIN_ROLE_NAME = 'Superadmin';\nexport const USER_PLUS_ROLE_NAME = 'User+';\n\nexport interface AuthenticationUserInfo extends BasicUser {\n userId: string;\n firstName: string;\n lastName: string;\n fullName: string;\n email: string;\n timezone: string;\n timezoneOffset: number;\n validFrom: string;\n validUntil: string;\n}\n\nexport class AuthenticationUserInfoModel {\n constructor(\n readonly userId: string,\n readonly firstName: string,\n readonly lastName: string,\n readonly fullName: string,\n readonly email: string,\n readonly timezone: string,\n readonly timezoneOffset: number,\n readonly validFrom: moment.Moment | undefined,\n readonly validUntil: moment.Moment | undefined,\n // Unused photoUrl\n readonly photoUrl?: string,\n ) {\n this.validFrom = (!isEmpty(validFrom) ? validFrom.clone() : undefined);\n this.validUntil = (!isEmpty(validUntil) ? validUntil.clone() : undefined);\n\n // this.fullName = `${this.firstName} ${this.lastName}`.trim();\n }\n\n static fromUser(user: AuthenticationUserInfo): AuthenticationUserInfoModel {\n assertRequiredProperties(user, [\n 'userId',\n 'firstName',\n 'lastName',\n 'fullName',\n 'email',\n 'timezone',\n 'timezoneOffset',\n ]);\n\n return new AuthenticationUserInfoModel(\n user.userId,\n user.firstName,\n user.lastName,\n user.fullName,\n user.email,\n user.timezone,\n user.timezoneOffset,\n (!isEmpty(user.validFrom)\n ? moment(user.validFrom)\n .parseZone()\n : undefined\n ),\n (!isEmpty(user.validUntil)\n ? moment(user.validUntil)\n .parseZone()\n : undefined\n ),\n );\n }\n}\n\nexport class AuthenticationStart {\n toString(): string {\n return 'AuthenticationStart[]';\n }\n}\n\nexport class AuthenticationSuccess {\n readonly username: string;\n\n constructor(username: string) {\n this.username = username;\n }\n\n toString(): string {\n return `AuthenticationSuccess[username=${this.username}]`;\n }\n}\n\nexport class AuthenticationError {\n readonly error: AccessControlError;\n\n constructor(error: AccessControlError) {\n this.error = error;\n }\n\n toString(): string {\n return `AuthenticationError[error=${this.error}`;\n }\n}\n\nexport class AuthenticationEnd {\n readonly authenticated: boolean;\n\n constructor(authenticated: boolean) {\n this.authenticated = authenticated;\n }\n\n toString(): string {\n return `AuthenticationEnd[authenticated=${this.authenticated}]`;\n }\n}\n\nexport class AuthorizationCheckStart {\n toString(): string {\n return 'AuthorizationCheckStart[]';\n }\n}\n\nexport class AuthorizationCheckSuccess {\n readonly user: UserDtoModel;\n\n constructor(user: UserDtoModel) {\n this.user = user;\n }\n\n toString(): string {\n return `AuthorizationCheckSuccess[user=${this.user.userId}]`;\n }\n}\n\nexport class AuthorizationCheckError {\n readonly error: AccessControlError;\n\n constructor(error: AccessControlError) {\n this.error = error;\n }\n\n toString(): string {\n return `AuthorizationCheckError[error=${this.error}]`;\n }\n}\n\nexport class AuthorizationCheckEnd {\n readonly authorized: boolean;\n\n constructor(authorized: boolean) {\n this.authorized = authorized;\n }\n\n toString(): string {\n return `AuthorizationCheckEnd[authorized=${this.authorized}]`;\n }\n}\n\n/**\n * Represents an access control event, allowing you to track the lifecycle of the user access control.\n *\n * The sequence of access control events is:\n *\n * - {@link AuthenticationStart},\n * - {@link AuthenticationSuccess},\n * - {@link AuthenticationError},\n * - {@link AuthorizationCheckStart},\n * - {@link AuthorizationCheckSuccess},\n * - {@link AuthorizationCheckError},\n * - {@link AuthorizationCheckEnd},\n * - {@link AuthenticationEnd}\n */\nexport declare type AccessControlEvent =\n AuthenticationStart\n | AuthenticationSuccess\n | AuthenticationError\n | AuthenticationEnd\n | AuthorizationCheckStart\n | AuthorizationCheckSuccess\n | AuthorizationCheckError\n | AuthorizationCheckEnd;\n\nexport class AccessControlError {\n constructor(\n readonly name: string,\n readonly message: string,\n readonly code: number,\n readonly originalError?: Error | string | null,\n ) {\n // do nothing - get rid of warning\n }\n\n toString(): string {\n return `AccessControlError[name=${this.name}, message:${this.message}, code:${this.code}]`;\n }\n}\n\n@Injectable({\n providedIn: 'root',\n})\nexport class AccessControlService implements OnDestroy {\n private readonly store = inject(Store);\n\n private readonly destyref = inject(DestroyRef);\n \n canImpersonateUsers$ = this.store.select(UserSelectors.permission('canImpersonateUsers')).pipe(takeUntilDestroyed(this.destyref));\n\n readonly accessControlPending$: Observable;\n\n get accessControlPending(): boolean {\n return this.accessControlPendingSubject$.getValue();\n }\n\n get substituteUserId(): string | null { return this._substituteUserId; }\n\n readonly events$: Observable;\n\n private eventsSubject$: Subject;\n\n private _error: AccessControlError | null = null;\n\n private _substituteUserId: string | null = null;\n\n private _canLoginAsSubstituteUser: boolean = false;\n\n private timer: any;\n\n private accessControlPendingSubject$: BehaviorSubject = new BehaviorSubject(false);\n\n private subscriptions: Subscription[] = [];\n\n private destroyed$: Subject = new Subject();\n\n private loggedIn: boolean = false;\n\n private isLoginFailure: boolean = false;\n\n constructor(\n @Inject(MSAL_GUARD_CONFIG) private msalGuardConfig: MsalGuardConfiguration,\n @Inject(DOCUMENT) protected document: Document,\n private readonly location: Location,\n private readonly router: Router,\n private readonly msalService: MsalService,\n private readonly userService: UserService,\n private readonly msalBroadcastService: MsalBroadcastService,\n ) {\n this.eventsSubject$ = new Subject();\n this.events$ = this.eventsSubject$.asObservable();\n\n this.accessControlPending$ = this.accessControlPendingSubject$.asObservable();\n }\n\n ngOnDestroy(): void {\n clearTimeout(this.timer);\n this.subscriptions.forEach((subscription) => subscription.unsubscribe());\n this.destroyed$.next();\n this.destroyed$.complete();\n }\n\n start(): void {\n if (this.accessControlPending) {\n throw new Error('Cannot start a new access control check while another one is still pending');\n }\n\n this.checkAccount();\n this.accessControlPendingSubject$.next(true);\n this._error = null;\n this.eventsSubject$.next(new AuthenticationStart());\n\n this.msalBroadcastService.msalSubject$\n .pipe(\n filter((msg: EventMessage) => msg.eventType === EventType.LOGIN_SUCCESS\n || msg.eventType === EventType.ACQUIRE_TOKEN_SUCCESS),\n take(1), // @TODO: investigate for a better solution\n takeUntil(this.destroyed$),\n )\n .subscribe(() => {\n this.checkAccount();\n });\n\n this.msalBroadcastService.msalSubject$\n .pipe(\n filter((msg: EventMessage) => msg.eventType === EventType.LOGIN_FAILURE\n || msg.eventType === EventType.ACQUIRE_TOKEN_FAILURE),\n takeUntil(this.destroyed$),\n )\n .subscribe(() => {\n this.checkAccount();\n this.onAuthenticationFailure();\n });\n\n this.canImpersonateUsers$\n .pipe(\n takeUntil(this.destroyed$),\n )\n .subscribe((val) => {\n this._canLoginAsSubstituteUser = val;\n });\n\n if (this.authenticated) {\n this.onAuthenticationSuccess();\n } else {\n this.onAuthenticationFailure();\n }\n }\n\n get access(): boolean {\n return (this.authenticated && this.authorized);\n }\n\n get authenticated(): boolean {\n return this.loggedIn;\n }\n\n get authorized(): boolean {\n return (this.store.selectSnapshot(UserSelectors.user) != null);\n }\n\n get error(): AccessControlError | null {\n return this._error;\n }\n\n /**\n * Check the most recent or a given error for whether a new\n * login request is required, sending the user to the login\n * endpoint where he can enter his credentials.\n *\n * Use this method to check for errors like\n *\n * login_required\n * AADSTS50058: A silent sign-in request was sent but no user is signed in.\n *\n * @param error\n */\n isUserLoginRequired(error?: AccessControlError): boolean {\n let msalError;\n\n if (error == null) {\n msalError = this.error;\n } else {\n msalError = error.originalError;\n }\n\n if (msalError && typeof msalError !== 'string' && msalError.name === 'login_required') {\n return true;\n }\n\n return false;\n }\n\n isUserAuthorizationCurrentlyInvalid(error?: AccessControlError | null): boolean {\n const parsedError = error == null ? this.error : error;\n\n return !!(parsedError && parsedError.code === 403 && parsedError.message === 'NoValidAssignment');\n }\n\n isUserAuthorizationExpired(error?: AccessControlError | null): boolean {\n const parsedError = error == null ? this.error : error;\n\n return !!(parsedError && parsedError.code === 403 && parsedError.message === 'ValidUntil');\n }\n\n isUserAuthorizationNotYetValid(error?: AccessControlError | null): boolean {\n const parsedError = error == null ? this.error : error;\n\n return !!(parsedError && parsedError.code === 403 && parsedError.message === 'ValidFrom');\n }\n\n getUserInfoFromError(error?: AccessControlError | null): AuthenticationUserInfoModel | undefined {\n const parsedError = error == null ? this.error : error;\n\n if (\n parsedError\n && parsedError.originalError\n && (parsedError.originalError as any).user\n ) {\n return AuthenticationUserInfoModel.fromUser((parsedError.originalError as any).user);\n }\n\n return undefined;\n }\n\n login(): void {\n this.msalService.loginRedirect()\n .subscribe(\n () => {\n // not used\n },\n (e: unknown) => {\n const error = e as AuthError;\n\n if (error.errorCode !== 'interaction_in_progress' && error.errorCode !== 'redirect_in_iframe') {\n throw e;\n }\n\n if (window.sessionStorage) {\n for (let i = 0; i < sessionStorage.length; i += 1) {\n const storageKey = sessionStorage.key(i);\n\n if (storageKey?.includes('interaction.status')) {\n sessionStorage.removeItem(storageKey);\n }\n }\n\n this.login();\n }\n },\n );\n }\n\n /**\n * Logs out the current user and redirects to the logout page.\n */\n logout(): void {\n /* eslint-disable rxjs/no-ignored-observable */\n\n this.store.dispatch(new UserStateActions.ClearAllUserData());\n this.store.dispatch(new ClearBaseData());\n\n this.msalService.logout();\n\n /* eslint-enable rxjs/no-ignored-observable */\n }\n\n canLoginAsSubstituteUser(): boolean {\n return this._canLoginAsSubstituteUser;\n }\n\n isUserPlus(user: UserDtoModel | null = null): boolean {\n const finalUser = user || this.getCurrentUserOrOriginalUser();\n\n return !!(finalUser?.role?.name === USER_PLUS_ROLE_NAME);\n }\n\n isAdmin(user: UserDtoModel | null = null): boolean {\n const finalUser = user || this.getCurrentUserOrOriginalUser();\n\n return !!(finalUser?.role?.name === ADMIN_ROLE_NAME);\n }\n\n isSuperadmin(user: UserDtoModel | null = null): boolean {\n const finalUser = user || this.getCurrentUserOrOriginalUser();\n\n return !!(finalUser?.role?.name === SUPER_ADMIN_ROLE_NAME);\n }\n\n isAnyAdmin(user: UserDtoModel | null = null): boolean {\n const finalUser = user || this.getCurrentUserOrOriginalUser();\n\n return this.isAdmin(finalUser) || this.isSuperadmin(finalUser);\n }\n\n isUserSubstituted(): boolean {\n return !!this._substituteUserId;\n }\n\n // eslint-disable-next-line max-lines-per-function\n loginSubstituteUser$(userId: string): Observable {\n return forkJoin([\n this.userService.getSubstituteUser$(userId),\n this.store.selectOnce(UserSelectors.user),\n this.store.selectOnce(UserSelectors.originalUser),\n ])\n .pipe(\n switchMap(([substituteUser, currentUser, originalUser]) => {\n // This might return null if the current user is lacking permission for SU.\n if (substituteUser == null) {\n return throwError(new Error(`Failed SU for user with ID ${userId}`));\n }\n\n if (currentUser == null && originalUser == null) {\n return of(null);\n }\n\n // In case we get a user for replacement, check whether we did do the SU before.\n\n // In case we did not do the SU before, use the current user.\n // TODO: Check after TypeScript upgrade. Remove \" && currentUser != null\".\n if (originalUser == null && currentUser != null) {\n // Backup the current user and set the substitute user as current user.\n return this.store.dispatch([\n new UserStateActions.SetOriginalUser(currentUser),\n new UserStateActions.SetLoginUser(substituteUser),\n ])\n .pipe(\n mapTo(substituteUser),\n );\n }\n\n // In case we already did a SU before, check whether the new SU is not ourselves.\n // TODO: Check after TypeScript upgrade. Remove \"if (originalUser != null) {\".\n if (originalUser != null) {\n if (originalUser.userId !== substituteUser.userId) {\n return this.store.dispatch([\n new UserStateActions.SetLoginUser(substituteUser),\n ])\n .pipe(\n mapTo(substituteUser),\n );\n }\n\n // In case it's ourselves, do a \"logout\".\n return this.store.dispatch([\n new UserStateActions.SetLoginUser(originalUser),\n new UserStateActions.ClearOriginalUser(),\n ])\n .pipe(\n mapTo(null),\n );\n }\n\n return of(null);\n }),\n tap((user) => {\n if (user) {\n // Remember the user for which we did the SU.\n this._substituteUserId = user.userId;\n\n // eslint-disable-next-line rxjs/no-ignored-observable\n this.store.dispatch([\n new RefreshBaseData(user, true),\n new MarkImpersonation(true),\n ]);\n } else {\n // No user means logout or something else. In any case reset the `substituteUserId`.\n this._substituteUserId = null;\n }\n }),\n mapTo(undefined),\n );\n }\n\n logoutSubstituteUser$(): Observable {\n // Try to get the original login user...\n return this.store.selectOnce(UserSelectors.originalUser)\n .pipe(\n switchMap((originalUser) => {\n if (originalUser) {\n // ...and restore it.\n return this.store.dispatch([\n new UserStateActions.SetLoginUser(originalUser),\n new UserStateActions.ClearOriginalUser(),\n new MarkImpersonation(false),\n ]).pipe(\n tap(() => {\n this._substituteUserId = null;\n // eslint-disable-next-line rxjs/no-ignored-observable\n this.store.dispatch(new RefreshBaseData(originalUser, true));\n }),\n );\n }\n\n return of(null);\n }),\n tap(() => {\n // Clear the user we did the SU for.\n this._substituteUserId = null;\n }),\n mapTo(undefined),\n );\n }\n\n /**\n * Create an absolute URL for a given route.\n * @see `Router.createUrlTree` for documentation of the input parameters.\n *\n * @param commands\n * @param navigationExtras\n */\n getAbsoluteUrl(commands: any[], navigationExtras?: NavigationExtras): string {\n const localUrl = this.router\n .createUrlTree(commands, navigationExtras)\n .toString();\n\n return `${this.document.location.origin}${this.location.prepareExternalUrl(localUrl)}`;\n }\n\n getIsLoggedIn(): boolean {\n return this.loggedIn;\n }\n\n getIsLoginFailure() : boolean {\n return this.isLoginFailure;\n }\n\n private getCurrentUserOrOriginalUser(): UserDtoModel | null {\n const ogUser = this.store.selectSnapshot(UserSelectors.originalUser);\n const user = this.store.selectSnapshot(UserSelectors.user);\n\n return user || ogUser;\n }\n\n private onAuthenticationSuccess(): void {\n this.eventsSubject$.next(new AuthenticationSuccess(''));\n this.eventsSubject$.next(new AuthorizationCheckStart());\n this.userService\n .getCurrentUser$()\n .pipe(\n switchMap((user) => this.store.dispatch(new UserStateActions.SetLoginUser(user))\n .pipe(\n switchMap(() => this.store.dispatch([\n new RefreshBaseData(user),\n new MarkImpersonation(false),\n ])),\n switchMap(() => of(user)),\n )),\n catchError((error: unknown) => this.store.dispatch(new UserStateActions.ClearLoginUser())\n .pipe(\n switchMap(() => this.store.dispatch(new ClearBaseData())),\n switchMap(() => throwError(error)),\n )),\n )\n .pipe(\n finalize(() => {\n this.eventsSubject$.next(new AuthorizationCheckEnd(this.authorized));\n this.eventsSubject$.next(new AuthenticationEnd(true));\n this.accessControlPendingSubject$.next(false);\n }),\n )\n .subscribe((user) => {\n this.eventsSubject$.next(new AuthorizationCheckSuccess(user));\n }, (error: unknown) => {\n if (error instanceof HttpErrorResponse) {\n const errorObj: Error | string | null = error.error;\n let errorMessage;\n\n if (errorObj != null) {\n errorMessage = typeof errorObj !== 'string' && 'message' in errorObj ? errorObj.message : errorObj;\n } else {\n errorMessage = `${error.status} ${error.statusText}`;\n }\n\n this._error = new AccessControlError('API Error', errorMessage, error.status, errorObj);\n } else {\n this._error = new AccessControlError('Application Error', (Object.prototype.hasOwnProperty.call(error, 'message') ? (error as HttpErrorResponse).message : error as string), 500);\n }\n this.eventsSubject$.next(new AuthorizationCheckError(error as AccessControlError));\n });\n }\n\n private onAuthenticationFailure(): void {\n if (this.error) {\n this._error = new AccessControlError('ADAL Error', this.error.message, 401, this.error);\n this.eventsSubject$.next(new AuthenticationError(this._error));\n this.isLoginFailure = true;\n }\n this.eventsSubject$.next(new AuthenticationEnd(false));\n this.accessControlPendingSubject$.next(false);\n }\n\n private checkAccount(): void {\n this.loggedIn = this.msalService.instance.getAllAccounts().length > 0;\n }\n}\n","import { assertRequiredProperties } from '../../utilities/api.utility';\nimport { ActivityTypeDto } from '../../interfaces/dtos/unit-cost-center-activity-type.dto';\n\nexport class ActivityTypeModel implements ActivityTypeDto {\n constructor(\n readonly activityTypeCode: string,\n readonly activityTypeDescription: string,\n ) {}\n\n get name(): string {\n return this.activityTypeCode;\n }\n\n get description(): string {\n return this.activityTypeDescription;\n }\n\n static fromJSON(json: ActivityTypeDto): ActivityTypeModel {\n assertRequiredProperties(json, [\n 'activityTypeCode',\n ]);\n\n return new ActivityTypeModel(\n json.activityTypeCode,\n json.activityTypeDescription,\n );\n }\n\n toJSON(): ActivityTypeDto {\n return {\n activityTypeCode: this.activityTypeCode,\n activityTypeDescription: this.activityTypeDescription,\n };\n }\n}\n","import { Injectable, inject } from '@angular/core';\nimport { Observable, filter, firstValueFrom, map } from 'rxjs';\nimport { CollAppApiService } from '../api/services/collapp-api.service';\nimport { ActivityTypeDto } from '../api/interfaces/dtos/unit-cost-center-activity-type.dto';\nimport { HttpEventType, HttpResponse } from '@angular/common/http';\nimport { ActivityTypeModel } from '../api/models/dtos/activity-type.dto.model';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class ActivityTypesService {\n\n private readonly apiService = inject(CollAppApiService);\n\n getActivityTypesByCostCenterAndUnitId(unitId: string, costCenter: string): Promise {\n return firstValueFrom((this.apiService\n .getUnitActivityTypesByCostCenterAndUnitId$(unitId, costCenter)\n .pipe(\n filter((event) => event.type === HttpEventType.Response),\n map((response: HttpResponse) => response.body!.map(r => ActivityTypeModel.fromJSON(r)),\n ))));\n }\n\n getSupplierActivityTypes$(supplierId: string): Observable {\n return (this.apiService\n .getSupplierActivityTypes$(supplierId)\n .pipe(\n filter((event) => event.type === HttpEventType.Response),\n map((response: HttpResponse) => response.body!.map(r => ActivityTypeModel.fromJSON(r)),\n )));\n }\n\n getActivityTypesByCostCenter$(costCenter: string): Observable {\n return (this.apiService\n .getUnitActivityTypesByCostCenter$(costCenter)\n .pipe(\n filter((event) => event.type === HttpEventType.Response),\n map((response: HttpResponse) => response.body!.map(r => ActivityTypeModel.fromJSON(r)),\n )));\n }\n}\n","import { ProjectTypeCode } from '../../../models/project-type.enum';\nimport { WorkpackageSupplierSettingsUpdateDto } from '../../interfaces/dtos/workpackageSupplierSettingsUpdate.dto';\nimport { ContractHourlyRateCategoryPairDtoModel } from './contract-hourly-rate-category-pair.dto.model';\nimport { WorkpackageSupplierSettingsDtoModel } from './workpackage-supplier-setting.dto.model';\n\nexport class WorkpackageSupplierSettingsUpdateDtoModel {\n constructor(\n readonly workPackageId: number,\n readonly additionalSupplierProjectTypeCode: string = ProjectTypeCode.SameAsSubmitter,\n readonly additionalSupplierProjectNumber: string | null = null,\n readonly additionalSupplierActivityItemCategoryNumber: string | number | null = null,\n public supplierHourlyRateCategories: ContractHourlyRateCategoryPairDtoModel[] = [],\n ) {\n this.supplierHourlyRateCategories = [...supplierHourlyRateCategories];\n }\n\n static fromWorkpackageSupplierSettingsDtoModel(\n workpackageSupplierSettingsDtoModel: WorkpackageSupplierSettingsDtoModel,\n workPackageId: number,\n ): WorkpackageSupplierSettingsUpdateDtoModel {\n return new WorkpackageSupplierSettingsUpdateDtoModel(\n workPackageId,\n workpackageSupplierSettingsDtoModel.additionalSupplierProjectTypeCode,\n workpackageSupplierSettingsDtoModel.additionalSupplierProjectNumber,\n workpackageSupplierSettingsDtoModel.additionalSupplierActivityItemCategoryNumber,\n workpackageSupplierSettingsDtoModel.contracts\n .map((contract) => contract.contractHourlyRateCategoryPairs)\n .reduce((acc, val) => acc.concat(val), []),\n );\n }\n\n static fromJSON(json: WorkpackageSupplierSettingsUpdateDto): WorkpackageSupplierSettingsUpdateDtoModel {\n // assertRequiredProperties(json, [\n // 'additionalSupplierProjectTypeCode',\n // ]);\n\n return new WorkpackageSupplierSettingsUpdateDtoModel(\n json.workPackageId,\n json.supplierProjectTypeCode,\n json.supplierProjectNumber,\n json.supplierActivityItemCategoryNumber,\n (Array.isArray(json.supplierHourlyRateCategories) ? json.supplierHourlyRateCategories : [])\n .map((item) => ContractHourlyRateCategoryPairDtoModel.fromJSON(item)),\n );\n }\n\n clone(): WorkpackageSupplierSettingsUpdateDtoModel {\n return new WorkpackageSupplierSettingsUpdateDtoModel(\n this.workPackageId,\n this.additionalSupplierProjectTypeCode,\n this.additionalSupplierProjectNumber,\n this.additionalSupplierActivityItemCategoryNumber,\n this.supplierHourlyRateCategories.map((item) => item.clone()),\n );\n }\n\n toJSON(): WorkpackageSupplierSettingsUpdateDto {\n return {\n workPackageId: this.workPackageId,\n supplierProjectTypeCode: this.additionalSupplierProjectTypeCode,\n supplierProjectNumber: this.additionalSupplierProjectNumber,\n supplierActivityItemCategoryNumber: this.additionalSupplierActivityItemCategoryNumber,\n supplierHourlyRateCategories: this.supplierHourlyRateCategories.map((item) => item.toJSON()),\n };\n }\n}\n","/* eslint-disable @typescript-eslint/member-ordering */\nimport { Injectable } from '@angular/core';\nimport { BehaviorSubject, Observable, combineLatest } from 'rxjs';\nimport {\n map, switchMap, take, tap,\n} from 'rxjs/operators';\nimport { ContractDtoModel } from '../api/models/dtos/contract.dto.model';\nimport { ProjectService } from '../api/services/project.service';\nimport { ContractHourlyRateCategoryPairDtoModel } from '../api/models/dtos/contract-hourly-rate-category-pair.dto.model';\nimport { WorkpackageSupplierSettingsDtoModel } from '../api/models/dtos/workpackage-supplier-setting.dto.model';\nimport { UnitSlimDtoModel } from '../api/models/dtos/unit-slim.dto.model';\nimport { AdditionalSuppliersUpdateRequest } from '../api/interfaces/requests/work-package-additional-suppliers-update.request';\nimport { WorkpackageSupplierSettingsUpdateDtoModel } from '../api/models/dtos/workpackage-supplier-setting-update.dto.model';\nimport { MetadataModel } from '../api/models/metadata.model';\nimport { WpMinimalSettingsInterface } from '../models/wp-minimal-settings.interface';\nimport { SameAsType } from '../models/sameAs.enum';\n\n// hrc = hourly rate category is now called activity item category\n@Injectable({\n providedIn: 'root',\n})\nexport class AdditionalSuppliersAndChrcpService {\n isLoading = true;\n\n isSaving = false;\n\n lastAddedSupplierUnit: UnitSlimDtoModel | null = null;\n\n private isModifiedSubject$ = new BehaviorSubject(false);\n\n isModified$ = this.isModifiedSubject$.asObservable();\n\n private readonly availableToAddSubject$ = new BehaviorSubject([]);\n\n private currentSubject$: BehaviorSubject = new BehaviorSubject([]);\n\n private addedSubject$: BehaviorSubject = new BehaviorSubject([]);\n\n private readonly combinedSubject$ = new BehaviorSubject([]);\n\n combined$: Observable = this.combinedSubject$.asObservable();\n\n readonly availableToAdd$: Observable = this.availableToAddSubject$.asObservable();\n\n canAdd = false;\n\n projectId: number | undefined;\n\n workPackageId: number | undefined;\n\n contractSupplierUnitId: number | undefined;\n\n get isModified(): boolean {\n return this.isModifiedSubject$.getValue();\n }\n\n get availableContracts(): ContractDtoModel[] {\n return this.availableToAddSubject$.getValue();\n }\n\n private get current(): WorkpackageSupplierSettingsDtoModel[] {\n return this.currentSubject$.getValue();\n }\n\n private set current(value: WorkpackageSupplierSettingsDtoModel[]) {\n this.currentSubject$.next(value);\n }\n\n private get added(): WorkpackageSupplierSettingsDtoModel[] {\n return this.addedSubject$.getValue();\n }\n\n private set added(value: WorkpackageSupplierSettingsDtoModel[]) {\n this.addedSubject$.next(value);\n }\n\n constructor(private projectService: ProjectService) {\n combineLatest([this.currentSubject$, this.addedSubject$]).pipe(\n map(([current, added]) => [...current, ...added]),\n ).subscribe((combined) => {\n this.combinedSubject$.next(combined);\n });\n this.addedSubject$.subscribe((added) => {\n this.isModifiedSubject$.next(added.length > 0);\n });\n }\n\n reset(): void {\n this.current = [];\n this.added = [];\n this.availableToAddSubject$.next([]);\n this.isLoading = true;\n this.isSaving = false;\n }\n\n loadData$(projectId: number, workPackageId: number, contractSupplierUnitId: number): Observable {\n this.isLoading = true;\n return this.projectService.getCurrentAdditionalSuppliers$(\n projectId,\n workPackageId,\n ).pipe(\n take(1),\n tap((currentAdditionalSuppliers) => {\n this.current = currentAdditionalSuppliers;\n }),\n switchMap((currentAdditionalSuppliers) => {\n const expcludedPairdIds = currentAdditionalSuppliers\n .reduce(\n (acc, curr) => [...acc, ...curr.contracts],\n [],\n )\n .reduce(\n (acc, curr) => [...acc, ...curr.contractHourlyRateCategoryPairs.map(\n (chrcp) => chrcp.contractHourlyRateCategoryPairId,\n )],\n [],\n ).filter((id) => id !== null) as number[];\n\n return this.projectService.getAdditionalSuppliers$(\n projectId,\n workPackageId,\n contractSupplierUnitId,\n expcludedPairdIds,\n );\n }),\n tap((availableAdditionalSuppliers) => {\n this.availableToAddSubject$.next(availableAdditionalSuppliers);\n this.isLoading = false;\n }),\n map(() => undefined),\n );\n }\n\n save$(projectId: number, workPackageId: number): Observable {\n this.isSaving = true;\n const additionalSuppliers = [...this.current, ...this.added];\n\n const workpackageSupplierSettings: WorkpackageSupplierSettingsUpdateDtoModel[] = additionalSuppliers.map(\n (as) => WorkpackageSupplierSettingsUpdateDtoModel.fromWorkpackageSupplierSettingsDtoModel(as, workPackageId),\n );\n\n const request: AdditionalSuppliersUpdateRequest = {\n workPackageId,\n additionalSupplierSettings: workpackageSupplierSettings.map((wpss) => wpss.toJSON()),\n };\n\n return this.projectService.putAdditionalSuppliers$(\n projectId,\n workPackageId,\n request,\n );\n }\n\n /**\n * Adjusts the added and available additional suppliers based on the chrcps\n * @param chrcps ContractHourlyRateCategoryPairDtoModel[]\n */\n adjustSuppliersByCHRCP(\n chrcps: ContractHourlyRateCategoryPairDtoModel[],\n ): void {\n chrcps.forEach((chrcp) => {\n this.adjustAddedAdditionalSupplier(chrcp);\n this.adjustAvailableAdditionalSupplierToAdd(chrcp);\n });\n }\n\n // eslint-disable-next-line max-len\n // public getAvailableHourlyRateCategoryPairsByContractId$(contractId: number):\n // Observable {\n\n update(form: WpMinimalSettingsInterface, index: number): void {\n const isCurrentIndex = index < this.current.length;\n const newIndex = isCurrentIndex ? index : index - this.current.length;\n const entryToUpdate = isCurrentIndex ? this.current[index] : this.added[newIndex];\n const existingContract = entryToUpdate.contracts[0];\n const newContract = existingContract.clone();\n newContract.contractHourlyRateCategoryPairs = form.hourlyRateCategoriesPairs;\n\n const newEntry = new WorkpackageSupplierSettingsDtoModel(\n form.projectTypeCode || '',\n typeof form.projectNumber !== 'string' ? form.projectNumber?.code : form.projectNumber.trim(),\n form.activityItemCategoryNumber || null,\n [newContract],\n entryToUpdate.metadata,\n );\n if (isCurrentIndex) {\n this.currentSubject$.next([\n ...this.current.slice(0, index),\n newEntry,\n ...this.current.slice(index + 1),\n ]);\n } else {\n this.addedSubject$.next([\n ...this.added.slice(0, newIndex),\n newEntry,\n ...this.added.slice(newIndex + 1),\n ]);\n }\n }\n\n /**\n * @description Searches the contract in the AvailableAdditionalSuppliersToAdd based on the\n * chrcp and adds it to the addedAdditionalSuppliers\n */\n private adjustAddedAdditionalSupplier(\n chrcp: ContractHourlyRateCategoryPairDtoModel,\n ): void {\n // find if already exist in new Settings\n const foundAddedSetting = this.added.find((setting) => setting.contracts[0].contractId === chrcp.contractId);\n if (foundAddedSetting) {\n // update actual setting\n foundAddedSetting.contracts[0].contractHourlyRateCategoryPairs.push(chrcp);\n // trigger a change\n this.added = [...this.added];\n } else {\n // create a new Setting\n // eslint-disable-next-line max-len\n const availableSupplierContract = this.availableContracts.find((contract) => contract.contractId === chrcp.contractId);\n if (!availableSupplierContract) {\n return;\n }\n\n const newAvailableSupplierContract: ContractDtoModel = availableSupplierContract.clone();\n newAvailableSupplierContract.contractHourlyRateCategoryPairs = [chrcp];\n\n // eslint-disable-next-line max-len\n const newWpss = new WorkpackageSupplierSettingsDtoModel(\n SameAsType.SameAsSupplier,\n SameAsType.SameAsSupplier,\n null,\n [newAvailableSupplierContract],\n new MetadataModel({\n fields: {\n canEditAdditionalSupplierProjectSettings: true,\n },\n }),\n );\n this.added = [...this.added, newWpss];\n }\n }\n\n /**\n * @description Searches the contract in the AvailableAdditionalSuppliersToAdd based on the\n * chrcp and removes it from the contractHourlyRateCategoryPairs\n * If the contractHourlyRateCategoryPairs is empty, the contract is removed from the\n * AvailableAdditionalSuppliersToAdd\n */\n private adjustAvailableAdditionalSupplierToAdd(\n chrcp: ContractHourlyRateCategoryPairDtoModel,\n ): void {\n // eslint-disable-next-line arrow-body-style\n const indexToFilter = this.availableToAddSubject$.value.findIndex((contract) => {\n return contract.contractHourlyRateCategoryPairs\n .some((availableChrcp) => availableChrcp.contractId === chrcp.contractId);\n });\n const filteredContractHourlyRateCategoryPairs = this.availableToAddSubject$.value[indexToFilter]\n .contractHourlyRateCategoryPairs\n .filter(\n (availableChrcp) => availableChrcp.contractHourlyRateCategoryPairId !== chrcp.contractHourlyRateCategoryPairId,\n );\n\n this.lastAddedSupplierUnit = this.availableToAddSubject$.value[indexToFilter].supplierUnit;\n const newAvailableAdditionalSuppliersToAdd = [...this.availableToAddSubject$.value];\n if (filteredContractHourlyRateCategoryPairs.length === 0) {\n newAvailableAdditionalSuppliersToAdd.splice(indexToFilter, 1);\n this.availableToAddSubject$.next([...newAvailableAdditionalSuppliersToAdd]);\n return;\n }\n\n newAvailableAdditionalSuppliersToAdd[indexToFilter]\n .contractHourlyRateCategoryPairs = filteredContractHourlyRateCategoryPairs;\n this.availableToAddSubject$.next([...newAvailableAdditionalSuppliersToAdd]);\n }\n}\n","/* eslint-disable lines-between-class-members */\nimport { Injectable } from '@angular/core';\nimport { MatDialog, MatDialogRef } from '@angular/material/dialog';\nimport { Observable } from 'rxjs';\nimport {\n BasicDialogComponent,\n BasicDialogData,\n BasicDialogType,\n} from '../shared/dialogs/basic-dialog/basic.dialog.component';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class BasicDialogService {\n private defaultConfirmTitle: string = 'Please confirm';\n private defaultOkTitle: string = 'Success';\n private defaultOkText: string = 'The command was successfully executed.';\n private defaultErrorTitle: string = 'Error';\n private defaultErrorText: string = 'An error has occurred while saving your data. Please try again. If the problem persists, please contact your administrator.';\n private defaultConfirmText: string = 'Do you really want to cancel the current process? All unsaved data will be lost.';\n private confirmCancelWithOnlyOutdatedAttachmentsText: string = 'Information';\n private confirmCancelWithOutdatedAttachmentsText: string = 'Canceling the current process will not restore outdated attachments.';\n private navigationConfirmTitle: string = 'Unsaved changes on navigation';\n private navigationConfirmText: string = 'There are unsaved changes on the current page. Do you want to save the changes before navigation?';\n\n constructor(\n private dialog: MatDialog,\n ) { }\n\n hasOpenDialogs(): boolean {\n const { openDialogs } = this.dialog;\n\n return (openDialogs != null && openDialogs.length > 0);\n }\n\n showOkDialog(\n title?: string | null,\n text?: string | null,\n callback?: () => void,\n ): MatDialogRef {\n const parsedTitle = (title != null) ? title : this.defaultOkTitle;\n const parsedText = (text != null) ? text : this.defaultOkText;\n\n const dialogRef = this.dialog.open(BasicDialogComponent, {\n disableClose: true,\n closeOnNavigation: false,\n autoFocus: false,\n panelClass: ['collapp-dialog', 'collapp-dialog--info'],\n data: {\n title: parsedTitle,\n text: parsedText,\n type: BasicDialogType.INFO,\n },\n });\n\n dialogRef.afterClosed()\n .subscribe(() => {\n if (callback) {\n callback();\n }\n });\n\n return dialogRef;\n }\n\n showErrorDialog(\n title?: string | null,\n text?: string | null,\n callback?: () => void,\n ): MatDialogRef {\n const parsedTitle = (title != null) ? title : this.defaultErrorTitle;\n const parsedText = (text != null) ? text : this.defaultErrorText;\n\n const dialogRef = this.dialog.open(BasicDialogComponent, {\n disableClose: true,\n closeOnNavigation: false,\n autoFocus: false,\n panelClass: ['collapp-dialog', 'collapp-dialog--error'],\n data: {\n title: parsedTitle,\n text: parsedText,\n type: BasicDialogType.ERROR,\n },\n });\n\n dialogRef.afterClosed()\n .subscribe(() => {\n if (callback) {\n callback();\n }\n });\n\n return dialogRef;\n }\n\n /**\n * The confirmation callback will be executed once the dialog was confirmed.\n * If the confirmation callback completed, the dialog will be closed.\n *\n * @param title\n * @param text\n * @param confirmationCallback\n * @param cancellationCallback\n */\n showConfirmDialog(\n title?: string,\n text?: string,\n confirmationCallback?: () => Observable,\n cancellationCallback?: () => void,\n ): MatDialogRef {\n const parsedTitle = (title != null) ? title : this.defaultConfirmTitle;\n const parsedText = (text != null) ? text : this.defaultConfirmText;\n\n const dialogRef = this.dialog.open(BasicDialogComponent, {\n disableClose: true,\n closeOnNavigation: false,\n autoFocus: false,\n panelClass: ['collapp-dialog', 'collapp-dialog--prompt'],\n data: {\n title: parsedTitle,\n text: parsedText,\n type: BasicDialogType.PROMPT,\n confirmationCallback,\n },\n });\n\n dialogRef.afterClosed()\n .subscribe((result: boolean) => {\n // Result will be false, if confirmation was unsuccessful, or dialog was cancelled.\n if (!result && cancellationCallback) {\n cancellationCallback();\n }\n });\n\n return dialogRef;\n }\n\n /**\n * Show the navigation-confirmation dialog\n * abort navigation (cancellationCallback)\n * save changes and continue navigation -> ATTENTION: we need to be sure that it's properly saved\n * discard changes and continue navigation\n *\n * @param title\n * @param text\n * @param saveAndContinueCallback\n * @param discardAndContinueCallback\n */\n showNavigationConfirmDialog(\n title?: string,\n text?: string,\n saveAndContinueCallback?: () => Observable,\n discardAndContinueCallback?: () => Observable,\n ): MatDialogRef {\n const parsedTitle = (title != null) ? title : this.navigationConfirmTitle;\n const parsedText = (text != null) ? text : this.navigationConfirmText;\n\n const dialogRef = this.dialog.open(BasicDialogComponent, {\n disableClose: true,\n closeOnNavigation: false,\n autoFocus: false,\n panelClass: ['collapp-dialog', 'collapp-dialog--prompt'],\n data: {\n title: parsedTitle,\n text: parsedText,\n type: BasicDialogType.NAVIGATION_PROMPT,\n saveAndContinueCallback,\n discardAndContinueCallback,\n },\n });\n\n return dialogRef;\n }\n\n showOutdatedAttachmentsCancelDialog(\n useConfirmDialog: boolean = false,\n hasNewOutdatedAttachments: boolean = false,\n ): MatDialogRef {\n let dialogText: string | undefined;\n let dialogRef;\n if (useConfirmDialog) {\n dialogText = this.defaultConfirmText;\n\n if (hasNewOutdatedAttachments) {\n dialogText = `${dialogText}

    ${this.confirmCancelWithOutdatedAttachmentsText}`;\n }\n\n dialogRef = this.showConfirmDialog(undefined, dialogText);\n } else {\n const dialogTitle = this.confirmCancelWithOnlyOutdatedAttachmentsText;\n dialogText = this.confirmCancelWithOutdatedAttachmentsText;\n\n dialogRef = this.showOkDialog(dialogTitle, dialogText);\n }\n\n return dialogRef;\n }\n}\n","import { Inject, Injectable, PLATFORM_ID } from '@angular/core';\nimport { isPlatformBrowser } from '@angular/common';\nimport { WINDOW } from '../collapp-common';\n\nexport type BrowserInfo = Record & {\n name: string;\n version?: string;\n versionNumber?: number;\n platform: string;\n};\n\n@Injectable({\n providedIn: 'root',\n})\nexport class BrowserDetectionService {\n private _isBrowser: boolean;\n\n private _browser: BrowserInfo;\n\n // eslint-disable-next-line complexity\n constructor(\n // eslint-disable-next-line @typescript-eslint/ban-types\n @Inject(PLATFORM_ID) protected readonly _platformId: object,\n @Inject(WINDOW) protected window: Window,\n ) {\n this._isBrowser = isPlatformBrowser(this._platformId);\n\n const userAgent = (window && window.navigator && window.navigator.userAgent) || '';\n const matched = this.matchUserAgent(userAgent);\n const browser: any = {};\n\n if (matched.browser) {\n browser[matched.browser] = true;\n browser.version = matched.version;\n browser.versionNumber = parseInt(matched.versionNumber, 10);\n }\n if (matched.platform) {\n browser[matched.platform] = true;\n }\n if (browser.opr) {\n const opera = 'opera';\n matched.browser = opera;\n browser[opera] = true;\n }\n if (browser.rv) {\n const ie = 'msie';\n matched.browser = ie;\n browser[ie] = true;\n }\n if (browser.edge) {\n const edge = 'edge';\n matched.browser = edge;\n browser[edge] = true;\n }\n if (browser.safari && browser.android) {\n const android = 'android';\n matched.browser = android;\n browser[android] = true;\n }\n\n browser.name = matched.browser;\n browser.platform = matched.platform;\n\n this._browser = Object.freeze(browser);\n }\n\n isBrowser(): boolean {\n return this._isBrowser;\n }\n\n getInfo(): BrowserInfo {\n return this._browser;\n }\n\n getName(): string {\n return this._browser.name;\n }\n\n getPlatform(): string {\n return (this._browser.platform === 'win' ? 'windows' : this._browser.platform);\n }\n\n getVersion(): string | undefined {\n return this._browser.version;\n }\n\n getVersionNumber(): number | undefined {\n return this._browser.versionNumber;\n }\n\n isIE(): boolean {\n return this._browser.msie || false;\n }\n\n isEdge(): boolean {\n return this._browser.edge || false;\n }\n\n isIEOrEdge(): boolean {\n return this.isIE() || this.isEdge();\n }\n\n isMobile(): boolean {\n return (this._browser.android || this._browser.ipad || this._browser.iphone || this._browser['windows phone'] || false);\n }\n\n isDesktop(): boolean {\n return (this._browser.cros || this._browser.mac || this._browser.linux || this._browser.win || false);\n }\n\n isWebKit(): boolean {\n return (this._browser.chrome || this._browser.opr || this._browser.safari || false);\n }\n\n // eslint-disable-next-line complexity\n private matchUserAgent(\n userAgent: string,\n ): { browser: string; version: string; versionNumber: string; platform: string } {\n const ua = userAgent.toLowerCase();\n\n const match = /(edge)\\/([\\w.]+)/.exec(ua)\n || /(opr)[/]([\\w.]+)/.exec(ua)\n || /(chrome)[/]([\\w.]+)/.exec(ua)\n || /(version)(applewebkit)[/]([\\w.]+).*(safari)[/]([\\w.]+)/.exec(ua)\n || /(webkit)[/]([\\w.]+).*(version)[/]([\\w.]+).*(safari)[/]([\\w.]+)/.exec(ua)\n || /(webkit)[/]([\\w.]+)/.exec(ua)\n || /(opera)(?:.*version|)[/]([\\w.]+)/.exec(ua)\n || /(msie) ([\\w.]+)/.exec(ua)\n || (ua.indexOf('trident') >= 0 && /(rv)(?::| )([\\w.]+)/.exec(ua))\n || (ua.indexOf('compatible') < 0 && /(mozilla)(?:.*? rv:([\\w.]+)|)/.exec(ua))\n || [];\n\n const platformMatch = /(ipad)/.exec(ua)\n || /(iphone)/.exec(ua)\n || /(android)/.exec(ua)\n || /(windows phone)/.exec(ua)\n || /(win)/.exec(ua)\n || /(mac)/.exec(ua)\n || /(linux)/.exec(ua)\n || /(cros)/.exec(ua)\n || [];\n\n return {\n browser: match[5] || match[3] || match[1] || '',\n version: match[2] || match[4] || '0',\n versionNumber: match[4] || match[2] || '0',\n platform: platformMatch[0] || '',\n };\n }\n}\n","import { Injectable } from '@angular/core';\nimport { MatDialog, MatDialogRef } from '@angular/material/dialog';\nimport { BasicUser } from '../models/user.interface';\nimport {\n NotificationDialogComponent,\n NotificationDialogData,\n} from '../shared/dialogs/notification-dialog/notification-dialog.component';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class CollappDialogService {\n constructor(\n private dialog: MatDialog,\n ) { }\n\n hasOpenDialogs(): boolean {\n const { openDialogs } = this.dialog;\n\n return (openDialogs != null && openDialogs.length > 0);\n }\n\n showNotificationDialog(\n title?: string,\n message?: string,\n recipients?: BasicUser[],\n isCommentRequired?: boolean,\n showSendNotifications?: boolean,\n ): MatDialogRef {\n const parsedTitle = (title != null) ? title : 'Notification';\n const parsedMessage = (message != null) ? message : 'A notification will be sent';\n const parsedRecipients = (recipients != null) ? recipients : [];\n const parsedIsCommentRequired = (isCommentRequired != null) ? isCommentRequired : false;\n const parsedShowSendNotifications = (showSendNotifications != null) ? showSendNotifications : false;\n\n const dialogRef = this.dialog.open(\n NotificationDialogComponent,\n {\n disableClose: true,\n closeOnNavigation: false,\n autoFocus: false,\n panelClass: ['collapp-dialog', 'collapp-dialog--large'],\n data: {\n title: parsedTitle,\n message: parsedMessage,\n recipients: parsedRecipients,\n isCommentRequired: parsedIsCommentRequired,\n showSendNotifications: parsedShowSendNotifications,\n },\n },\n );\n\n return dialogRef;\n }\n}\n","import { assertRequiredProperties } from '../../utilities/api.utility';\nimport { CostCenterDto } from '../../interfaces/dtos/cost-center.dto';\n\nexport class CostCenterModel {\n constructor(\n readonly costCenter: string,\n readonly costCenterDescription: string,\n ) {}\n\n static fromJSON(json: CostCenterDto): CostCenterModel {\n assertRequiredProperties(json, [\n 'costCenter',\n ]);\n\n return new CostCenterModel(\n json.costCenter,\n json.costCenterDescription,\n );\n }\n\n get description(): string {\n return this.costCenterDescription;\n }\n\n toJSON(): CostCenterDto {\n return {\n costCenter: this.costCenter,\n costCenterDescription: this.costCenterDescription,\n };\n }\n}\n","import { Injectable, computed, inject, signal } from '@angular/core';\nimport { CollAppApiService } from '../api/services/collapp-api.service';\nimport { Observable, filter, firstValueFrom, map } from 'rxjs';\nimport { HttpEventType, HttpResponse } from '@angular/common/http';\nimport { UnitCostCenterModel } from '../api/models/dtos/unit-cost-center.dto.model';\nimport { CostCenterModel } from '../api/models/dtos/cost-center.dto.model';\nimport { UnitCostCenterActivityTypeModel } from '../api/models/dtos/unit-cost-center-activity-type.dto.model';\nimport { ActivityTypesService } from './activity-types.service';\nimport { ActivityTypeDto } from '../api/interfaces/dtos/unit-cost-center-activity-type.dto';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class CostCenterService {\n\n readonly costCenters = signal([]);\n readonly allCostCenters = signal([]);\n readonly availableCostCenters = computed(() => this.allCostCenters().filter(\n (costCenter) => !this.costCenters().some((cs) => cs?.costCenter === costCenter.costCenter)\n ));\n readonly canChangeCostCenter = computed(() => this.availableCostCenters().length > 0);\n readonly canAddCostCenter = computed(() => this.canChangeCostCenter() && this.availableCostCenters().length > 0);\n readonly allActivityTypesByCostCenter = signal>({});\n readonly isInitDone = signal(false);\n readonly showErrors = signal(false);\n readonly errors = computed(() => this.showErrors() ? this.getErrorMessages(this.costCenters()) : []);\n readonly isDirty = computed(() => {\n if (this.isInitDone() === false){\n return false;\n }\n const {initialCostCenters} = this;\n const currentCostCenters = this.costCenters();\n if (initialCostCenters.length !== currentCostCenters.length) {\n return true;\n }\n return currentCostCenters.some((costCenter, index) => {\n const initialCostCenter = initialCostCenters[index];\n if (initialCostCenter.costCenter !== costCenter.costCenter) {\n return true;\n }\n if (initialCostCenter.isDefault !== costCenter.isDefault) {\n return true;\n }\n if (initialCostCenter.unitCostCenterActivityTypes.length !== costCenter.unitCostCenterActivityTypes.length) {\n return true;\n }\n return costCenter.unitCostCenterActivityTypes.some((activityType, i) => {\n const initialActivityType = initialCostCenter.unitCostCenterActivityTypes[i];\n if (initialActivityType.activityType !== activityType.activityType) {\n return true;\n }\n if (initialActivityType.isDefault !== activityType.isDefault) {\n return true;\n }\n return false;\n });\n });\n });\n private initialCostCenters: UnitCostCenterModel[] = [];\n private readonly apiService = inject(CollAppApiService);\n private readonly activityTypeService = inject(ActivityTypesService);\n\n async init(parentUnitId: string, initialCostCenters: UnitCostCenterModel[] = []): Promise {\n if (!parentUnitId) {\n throw new Error('parentUnitId is required');\n // TODO: add logging\n }\n this.isInitDone.set(false);\n await this.setInitialCostCenters(initialCostCenters);\n await this.initAllCostCenters(parentUnitId);\n this.costCenters.set(initialCostCenters);\n this.isInitDone.set(true);\n }\n\n async changeCostCenterByIndex(index: number, costCenter: UnitCostCenterModel): Promise {\n if (!costCenter) {\n throw new Error('costCenter is required');\n }\n const isOldIndexDefault = this.costCenters()[index].isDefault;\n const newCostCenter = new UnitCostCenterModel(costCenter.unitCostCenterId, costCenter.costCenter, costCenter.description, isOldIndexDefault, costCenter.unitCostCenterActivityTypes);\n this.costCenters.set(this.costCenters().map((cc, i) => i === index ? newCostCenter : cc));\n await this.addActivityTypesByCostCenter(costCenter.costCenter);\n }\n\n async addActivityTypesByCostCenter(costCenter: string): Promise {\n if (!costCenter) {\n throw new Error('costCenter is required');\n }\n const allActivityTypesByCostCenter = this.allActivityTypesByCostCenter();\n const currentActivityTypesForCostCenter = allActivityTypesByCostCenter?.[costCenter];\n if (currentActivityTypesForCostCenter?.length) {\n return;\n }\n const activityTypes = (await firstValueFrom(this.activityTypeService.getActivityTypesByCostCenter$(costCenter))).map(r => UnitCostCenterActivityTypeModel.fromJSON(this.activityTypeToActivityTypeModel(r)));\n // add a new record to the signal\n this.allActivityTypesByCostCenter.set({...allActivityTypesByCostCenter, [costCenter]: activityTypes});\n }\n\n removeCostCenterByIndex(index: number): void {\n this.costCenters.set(this.costCenters().filter((_, i) => i !== index));\n }\n\n changeCostCenterDefaultByIndex(index: number): void {\n this.costCenters.set(this.costCenters().map((costCenter, i) => new UnitCostCenterModel(\n costCenter.unitCostCenterId,\n costCenter.costCenter,\n costCenter.description,\n i === index,\n costCenter.unitCostCenterActivityTypes,\n ))\n );\n }\n\n changeActivityTypeDefaultByIndex(costCenterIndex: number, activityTypeIndex: number): void {\n const costCenter = this.costCenters()[costCenterIndex];\n if (!costCenter) {\n throw new Error('costCenter with index not found');\n }\n const activityTypes = costCenter.unitCostCenterActivityTypes;\n const newActivityTypes = activityTypes.map((at, i) => new UnitCostCenterActivityTypeModel(at.activityType, i === activityTypeIndex, at.description, at.unitCostCenterActivityTypeId));\n const newCostCenter = new UnitCostCenterModel(costCenter.unitCostCenterId, costCenter.costCenter, costCenter.description, costCenter.isDefault, newActivityTypes);\n this.costCenters.set(this.costCenters().map((cc, i) => i === costCenterIndex ? newCostCenter : cc));\n }\n\n removeActivityTypeByIndex(costCenterIndex: number, activityTypeIndex: number): void {\n const costCenter = this.costCenters()[costCenterIndex];\n if (!costCenter) {\n throw new Error('costCenter with index not found');\n }\n const activityTypes = costCenter.unitCostCenterActivityTypes;\n const newActivityTypes = activityTypes.filter((_, i) => i !== activityTypeIndex);\n const newCostCenter = new UnitCostCenterModel(costCenter.unitCostCenterId, costCenter.costCenter, costCenter.description, costCenter.isDefault, newActivityTypes);\n this.costCenters.set(this.costCenters().map((cc, i) => i === costCenterIndex ? newCostCenter : cc));\n }\n\n changeActivityTypeByIndex(costCenterIndex: number, activityTypeIndex: number, activityType: UnitCostCenterActivityTypeModel): void {\n const costCenter = this.costCenters()[costCenterIndex];\n if (!costCenter) {\n throw new Error('costCenter with index not found');\n }\n const activityTypes = costCenter.unitCostCenterActivityTypes;\n const isOldActivityTypeDefault = activityTypes[activityTypeIndex].isDefault;\n const newActivityType = new UnitCostCenterActivityTypeModel(activityType.activityType, isOldActivityTypeDefault, activityType.description, activityType.unitCostCenterActivityTypeId);\n const newActivityTypes = activityTypes.map((at, i) => i === activityTypeIndex ? newActivityType : at);\n const newCostCenter = new UnitCostCenterModel(costCenter.unitCostCenterId, costCenter.costCenter, costCenter.description, costCenter.isDefault, newActivityTypes);\n this.costCenters.set(this.costCenters().map((cc, i) => i === costCenterIndex ? newCostCenter : cc));\n }\n\n addEmptyActivityTypeByIndex(costCenterIndex: number): void {\n const costCenter = this.costCenters()[costCenterIndex];\n if (!costCenter) {\n throw new Error('costCenter with index not found');\n }\n const activityTypes = costCenter.unitCostCenterActivityTypes;\n const isDefault = !this.isActivityTypeDefaultSetByIndex(costCenterIndex);\n const newActivityTypes = [...activityTypes, new UnitCostCenterActivityTypeModel('', isDefault, '')];\n const newCostCenter = new UnitCostCenterModel(costCenter.unitCostCenterId, costCenter.costCenter, costCenter.description, costCenter.isDefault, newActivityTypes);\n this.costCenters.set(this.costCenters().map((cc, i) => i === costCenterIndex ? newCostCenter : cc));\n }\n\n isActivityTypeDefaultSetByIndex(costCenterIndex: number): boolean {\n const costCenter = this.costCenters()[costCenterIndex];\n if (!costCenter) {\n throw new Error('costCenter with index not found');\n }\n return costCenter.unitCostCenterActivityTypes.some((at) => at.isDefault);\n }\n\n addEmptyCostCenter(): void {\n const shouldBeDefault = !this.costCenters().some((cc) => cc.isDefault);\n this.costCenters.set([...this.costCenters(), new UnitCostCenterModel(null, '', '', shouldBeDefault, [])]);\n }\n\n getDeletedCostCenters(): UnitCostCenterModel[] {\n return this.initialCostCenters.filter((costCenter) => !this.costCenters().some((cc) => cc.uid === costCenter.uid));\n }\n\n getDeletedCostCenterIds(): number[] {\n const deletedIds = this.getDeletedCostCenters().filter((cc) => !!cc.unitCostCenterId).map((cc) => Number(cc.unitCostCenterId));\n return deletedIds;\n }\n\n getDeletedActivityTypeIds(): number[] {\n return this.getDeletedActivityTypes().map((at) => at.unitCostCenterActivityTypeId).filter(at => at !== null) as number[];\n }\n\n // deleted activity types are excluded if the cost center is deleted\n getDeletedActivityTypes(): UnitCostCenterActivityTypeModel[] {\n return this.initialCostCenters\n .reduce((acc, costCenter) => {\n const currentCostCenter = this.costCenters().find((cc) => cc.costCenter === costCenter.costCenter);\n if (!currentCostCenter) {\n return [...acc, ...costCenter.unitCostCenterActivityTypes];\n }\n const currentActivityTypes = currentCostCenter.unitCostCenterActivityTypes;\n return [...acc, ...costCenter.unitCostCenterActivityTypes.filter((at) => !currentActivityTypes.some((cat) => cat.unitCostCenterActivityTypeId === at.unitCostCenterActivityTypeId))];\n }, []);\n }\n\n /**\n * There must be a default cost center\n * There must be at least one activity type for each cost center\n * All cost centers must have a unique costCenter (remove the dummy ones)\n * All activity types within each costCenter must have a unique activityType (remove the dummy ones)\n */\n getErrorMessages(costCenters: UnitCostCenterModel[]): string[] {\n const errorMessages: string[] = [];\n\n if (!costCenters.some((cc) => cc.isDefault)) {\n errorMessages.push('There must be a default cost center');\n }\n if (!costCenters.every((cc) => cc.unitCostCenterActivityTypes.length > 0)) {\n errorMessages.push('There must be at least one activity type for each cost center');\n }\n if (costCenters.length !== new Set(costCenters.map((cc) => cc.costCenter)).size) {\n errorMessages.push('A cost center is missing');\n }\n if (costCenters.some((cc) => cc.unitCostCenterActivityTypes.some((at) => at.activityType === ''))) {\n errorMessages.push('A activity is added but not filled out');\n }\n return errorMessages;\n }\n\n getCostCenterByUnitId$(unitId: number): Observable {\n return this.apiService.getContractCostCenters$(unitId)\n .pipe(\n filter((event) => event.type === HttpEventType.Response),\n map((response: HttpResponse) => response.body!.map(CostCenterModel.fromJSON)),\n );\n }\n\n private activityTypeToActivityTypeModel(activityType: ActivityTypeDto): UnitCostCenterActivityTypeModel {\n return UnitCostCenterActivityTypeModel.fromJSON({unitCostCenterActivityTypeId: null, activityType: activityType.activityTypeCode, isDefault: false, description: activityType.activityTypeDescription});\n }\n\n private async setInitialCostCenters(costCenters: UnitCostCenterModel[]): Promise {\n this.initialCostCenters = costCenters;\n await Promise.all(costCenters.map((costCenter) => this.addActivityTypesByCostCenter(costCenter.costCenter)));\n }\n\n private async initAllCostCenters(l3UnitId: string): Promise {\n const costCenters = await this.getUnitCostCenters(l3UnitId);\n this.allCostCenters.set(costCenters);\n }\n\n private getCostCenters$(unitId: string): Observable {\n return this.apiService\n .getUnitCostCentersByUnitId$(unitId)\n .pipe(\n filter((event) => event.type === HttpEventType.Response),\n map((response: HttpResponse) => response.body!.map(CostCenterModel.fromJSON)),\n\n );\n }\n\n // they are always missing the id and the activity types and isDefault is always false\n private getUnitCostCenters(unitId: string): Promise {\n return firstValueFrom((this.getCostCenters$(unitId)\n .pipe(\n map((response: CostCenterModel[]) => response.map(this.costCenterToUnitCostCenter)),\n )));\n }\n\n private costCenterToUnitCostCenter(costCenter: CostCenterModel): UnitCostCenterModel {\n return new UnitCostCenterModel(null, costCenter.costCenter, costCenter.description, false, []);\n }\n}\n","import { Injectable } from '@angular/core';\nimport { ApplicationInsightsService } from '../modules/application-insights';\nimport { ToastyService } from '../shared/toasty';\nimport { getToastForApiError } from '../helpers/error-message.utility';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class ErrorHandlerService {\n constructor(\n private appInsightsService: ApplicationInsightsService,\n private toastyService: ToastyService,\n ) {\n }\n\n /**\n * Tracks the error through Application Insights without notifying the user.\n */\n trackError(error: Error): void {\n this.appInsightsService.trackException({ exception: error });\n }\n\n /**\n * Displays an error toast to the user and tracks the error through Application Insights.\n */\n handleError(error: Error, title: string = 'An error occurred'): void {\n this.notifyUser(error, title);\n this.appInsightsService.trackException({ exception: error });\n }\n\n /**\n * Displays an error toast to the user.\n */\n notifyUser(error: Error, title: string = 'An error occurred'): void {\n this.toastyService.error(getToastForApiError(title, error));\n }\n}\n","import moment from 'moment';\nimport { ToastOptions } from '../shared/toasty';\n\n/**\n * Returns an options object for a Toasty error message, describing the given API error.\n *\n * @param title - The title of the message\n * @param error - The error coming from the API response\n */\nexport function getToastForApiError(title: string, error: Error): ToastOptions {\n const today = moment()\n .utc();\n const formattedDate = `${today.format('YYYY-MM-DD HH:mm:ss')} UTC`;\n const msg = `\n ${error.message.replace('\\n', '
    \\n')}\n ${error.name ? `(${error.name})` : ''}\n ${formattedDate}\n `;\n\n return {\n title,\n msg,\n };\n}\n","import { Injectable, Injector, OnDestroy } from '@angular/core';\nimport { Subject, Subscription } from 'rxjs';\nimport { takeUntil } from 'rxjs/operators';\nimport { ToastyService } from '../shared/toasty';\nimport { ProjectService } from '../api/services/project.service';\nimport { ErrorHandlerService } from './error-handler.service';\nimport { WorkPackageListOptions } from '../api/list-query-options';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class ExportService implements OnDestroy {\n private destroyed$: Subject = new Subject();\n\n constructor(\n private injector: Injector,\n private errorHandlerService: ErrorHandlerService,\n private toastyService: ToastyService,\n private projectService: ProjectService,\n ) { }\n\n ngOnDestroy(): void {\n this.destroyed$.next();\n this.destroyed$.complete();\n }\n\n provideWorkPackageExport(options: WorkPackageListOptions): Subscription {\n return this.projectService\n .getProjectExportList$(options)\n .pipe(\n takeUntil(this.destroyed$),\n )\n .subscribe(\n (fileDownload) => {\n this.toastyService.fileDownload('Your Export is ready', 'Workpackage List Export is ready.', 'Download Export', fileDownload);\n },\n (error: unknown) => {\n this.errorHandlerService.handleError(error as Error, 'Error wile preparing download link');\n }\n );\n }\n}\n","import { Injectable, NgZone } from '@angular/core';\n\ntype Terminal = boolean | 'match';\n\ninterface ListenerOptions {\n priority: number;\n terminal?: Terminal;\n terminalWhitelist?: string[];\n inputs?: boolean;\n}\n\ninterface Listener {\n priority: number;\n terminal: Terminal;\n terminalWhitelist: TerminalWhitelist;\n inputs: boolean;\n bindings: Bindings;\n}\n\ntype Handler = (event: KeyboardEvent) => boolean | void;\n\ninterface Bindings {\n [key: string]: Handler;\n}\n\ninterface NormalizedKeys {\n [key: string]: string;\n}\n\ninterface TerminalWhitelist {\n [key: string]: boolean;\n}\n\nexport type Unlisten = () => void;\n\n// Map to normalized keys across different browser implementations.\n// --\n// https://github.com/angular/angular/blob/master/packages/platform-browser/src/browser/browser_adapter.ts#L25-L42\n// https://github.com/angular/angular/blob/5.0.5/packages/platform-browser/src/browser/browser_adapter.ts#L25-L42\nconst KEY_MAP: any = {\n '\\b': 'Backspace',\n '\\t': 'Tab',\n '\\x7F': 'Delete',\n '\\x1B': 'Escape',\n Del: 'Delete',\n Esc: 'Escape',\n Left: 'ArrowLeft',\n Right: 'ArrowRight',\n Up: 'ArrowUp',\n Down: 'ArrowDown',\n Menu: 'ContextMenu',\n Scroll: 'ScrollLock',\n Win: 'OS',\n ' ': 'Space',\n '.': 'Dot',\n};\n\n// NOTE: These will only be applied after the key has been lower-cased. As such, both the\n// alias and the final value (in this mapping) should also be lower-case.\nconst KEY_ALIAS: any = {\n command: 'meta',\n ctrl: 'control',\n del: 'delete',\n down: 'arrowdown',\n esc: 'escape',\n left: 'arrowleft',\n right: 'arrowright',\n up: 'arrowup',\n};\n\n/**\n * @see https://www.bennadel.com/blog/3382-handling-global-keyboard-shortcuts-using-priority-and-terminality-in-angular-5-0-5.htm\n */\n@Injectable({\n providedIn: 'root',\n})\nexport class KeyboardShortcutsService {\n private listeners: Listener[];\n\n private normalizedKeys: NormalizedKeys;\n\n private zone: NgZone;\n\n // I initialize the keyboard shortcuts service.\n constructor(zone: NgZone) {\n this.zone = zone;\n\n this.listeners = [];\n this.normalizedKeys = Object.create(null);\n\n // Since we're going to create a root event-handler for the keydown event, we're\n // gonna do this outside of the NgZone. This way, we're not constantly triggering\n // change-detection for every key event - we'll only re-enter the Angular Zone\n // when we have an event that is actually being consumed by one of our components.\n this.zone.runOutsideAngular(\n (): void => {\n window.addEventListener('keydown', this.handleKeyboardEvent);\n },\n );\n }\n\n // ---\n // PUBLIC METHODS.\n // ---\n // I configure key-event listener at the given priority. Returns a Function that can\n // be used to unbind the listener.\n listen(bindings: Bindings, options: ListenerOptions): Unlisten {\n const listener = this.addListener({\n priority: options.priority,\n terminal: this.normalizeTerminal(options.terminal),\n terminalWhitelist: this.normalizeTerminalWhitelist(options.terminalWhitelist),\n inputs: this.normalizeInputs(options.inputs),\n bindings: this.normalizeBindings(bindings),\n });\n\n const unlisten = (): void => {\n this.removeListener(listener);\n };\n\n return unlisten;\n }\n\n // ---\n // PRIVATE METHODS.\n // ---\n // I add the listener to the internal collection in DESCENDING priority order.\n private addListener(listener: Listener): Listener {\n this.listeners.push(listener);\n this.listeners.sort(\n (a: Listener, b: Listener): number => {\n // We want to sort the listeners in DESCENDING priority order so that the\n // higher-priority items are at the start of the collection - this will\n // make it easier to loop over later (highest priority first).\n if (a.priority < b.priority) {\n return 1;\n } if (a.priority > b.priority) {\n return -1;\n }\n\n return 0;\n },\n );\n\n return listener;\n }\n\n // I get the normalized event-key from the given event.\n // --\n // CAUTION: Most of this logic is taken from the core KeyEventsPlugin code but,\n // with some of the logic removed. This is simplified for the demo.\n private getKeyFromEvent(event: KeyboardEvent): string {\n let key = (event.key || (event as any).keyIdentifier || 'Unidentified');\n\n if (key.startsWith('U+')) {\n key = String.fromCharCode(parseInt(key.slice(2), 16));\n }\n\n const parts = [KEY_MAP[key] || key];\n\n if (event.altKey) {\n parts.push('Alt');\n }\n if (event.ctrlKey) {\n parts.push('Control');\n }\n if (event.metaKey) {\n parts.push('Meta');\n }\n if (event.shiftKey) {\n parts.push('Shift');\n }\n\n return this.normalizeKey(parts.join('.'));\n }\n\n // I handle the keyboard events for the root handler (and delegate to the listeners).\n private handleKeyboardEvent = (event: KeyboardEvent): void => {\n const key = this.getKeyFromEvent(event);\n const isInputEvent = this.isEventFromInput(event);\n let handler: Handler;\n\n /* eslint-disable max-depth */\n\n // Iterate over the listeners in DESCENDING priority order.\n // eslint-disable-next-line no-restricted-syntax\n for (const listener of this.listeners) {\n handler = listener.bindings[key];\n if (handler) {\n // Execute handler if this is NOT an input event that we need to ignore.\n if (!isInputEvent || listener.inputs) {\n // Right now, we're executing outside of the NgZone. As such, we\n // have to re-enter the NgZone so that we can hook back into change-\n // detection. Plus, this will also catch errors and propagate them\n // through the application properly.\n const result = this.zone.runGuarded(\n (): boolean | void => handler(event), // eslint-disable-line no-loop-func\n );\n\n // If the handler returned an explicit False, we're going to treat\n // this listener as Terminal, regardless of the original settings.\n if (result === false) {\n return;\n }\n\n // If the handler returned an explicit True, we're going to treat\n // this listener as NOT Terminal, regardless of the original settings.\n if (result === true) {\n continue; // eslint-disable-line no-continue\n }\n }\n\n // If this listener is terminal for matches, stop propagation.\n if (listener.terminal === 'match') {\n return;\n }\n }\n\n // If this listener is terminal for all events, stop propagation (unless the\n // event is white-listed for propagation).\n if ((listener.terminal === true) && !listener.terminalWhitelist[key]) {\n return;\n }\n } // END: For-loop.\n\n /* eslint-enable max-depth */\n };\n\n // I determine if the given event originated from a form input element.\n private isEventFromInput(event: KeyboardEvent): boolean {\n if (event.target instanceof Node) {\n if ((event.target as HTMLElement).isContentEditable) {\n return true;\n }\n switch (event.target.nodeName) {\n case 'INPUT':\n case 'SELECT':\n case 'TEXTAREA':\n return true;\n default:\n return false;\n }\n }\n\n return false;\n }\n\n // I return a bindings collection in which the keys of the given bindings have been\n // normalized into a predictable format.\n private normalizeBindings(bindings: Bindings): Bindings {\n const normalized = Object.create(null);\n\n Object\n .keys(bindings)\n .forEach((key) => {\n normalized[this.normalizeKey(key)] = bindings[key];\n });\n\n return normalized;\n }\n\n // I normalize the inputs option.\n private normalizeInputs(inputs: boolean | undefined): boolean {\n if (inputs === undefined) {\n return false;\n }\n\n return inputs;\n }\n\n // I return the given key in a normalized, predictable format.\n private normalizeKey(key: string): string {\n if (!this.normalizedKeys[key]) {\n this.normalizedKeys[key] = key\n .toLowerCase()\n .split('.')\n .map(\n (segment): string => (KEY_ALIAS[segment] || segment),\n )\n .sort()\n .join('.');\n }\n\n return this.normalizedKeys[key];\n }\n\n // I normalize the terminal option.\n private normalizeTerminal(terminal: Terminal | undefined): Terminal {\n if (terminal === undefined) {\n return true;\n }\n\n return terminal;\n }\n\n // I normalize the terminalWhitelist option.\n private normalizeTerminalWhitelist(keys: string[] | undefined): TerminalWhitelist {\n const normalized = Object.create(null);\n\n if (keys) {\n keys.forEach((key) => {\n normalized[this.normalizeKey(key)] = true;\n });\n }\n\n return normalized;\n }\n\n // I remove the given listener from the internal collection.\n private removeListener(listenerToRemove: Listener): void {\n this.listeners = this.listeners.filter(\n (listener: Listener): boolean => listener !== listenerToRemove,\n );\n }\n}\n","import {\n ComponentRef,\n Inject,\n Injectable,\n Injector,\n OnDestroy,\n Renderer2,\n RendererFactory2,\n} from '@angular/core';\nimport { DOCUMENT } from '@angular/common';\nimport {\n CdkPortalOutletAttachedRef, ComponentPortal, Portal, ComponentType,\n} from '@angular/cdk/portal';\nimport { BehaviorSubject, Observable } from 'rxjs';\n\n/**\n * Calculates the width of the scrollbar of the users browser.\n */\nexport function calculateScrollBarWidth(document: HTMLDocument): number {\n // Create the measurement DIV\n const scrollDiv = document.createElement('div');\n scrollDiv.style.position = 'absolute';\n scrollDiv.style.top = '-9999px';\n scrollDiv.style.width = '100px';\n scrollDiv.style.height = '100px';\n scrollDiv.style.overflow = 'scroll';\n document.body.appendChild(scrollDiv);\n\n // Get the scrollbar width\n const scrollbarWidth = scrollDiv.offsetWidth - scrollDiv.clientWidth;\n\n // Delete the DIV\n document.body.removeChild(scrollDiv);\n\n return scrollbarWidth;\n}\n\n@Injectable({\n providedIn: 'root',\n})\nexport class LayoutService implements OnDestroy {\n // Observables for the CDK Portal Outlets in the main app component.\n readonly sidebarPortal$: Observable>;\n\n readonly navbarPortal$: Observable>;\n\n readonly asidePortal$: Observable>;\n\n // Observables with the component instances from the CDK Portal Outlets in the main app component.\n // !!! Do not keep references to these components in order to preserve the Angular lifecycle events !!!\n // These component references are used *ONLY* to facilitate router-specific tasks.\n readonly sidebarComponent$: Observable;\n\n readonly navbarComponent$: Observable;\n\n readonly asideComponent$: Observable;\n\n hasEmbeddedSidebar: boolean = false;\n\n // Subjects for the CDK Portal Outlets in the main app component.\n private sidebarPortalSubject$: BehaviorSubject = new BehaviorSubject(undefined);\n\n private navbarPortalSubject$: BehaviorSubject = new BehaviorSubject(undefined);\n\n private asidePortalSubject$: BehaviorSubject = new BehaviorSubject(undefined);\n\n // Subjects of the component instances from the CDK Portal Outlets in the main app component.\n private sidebarComponentSubject$: BehaviorSubject = new BehaviorSubject(undefined);\n\n private navbarComponentSubject$: BehaviorSubject = new BehaviorSubject(undefined);\n\n private asideComponentSubject$: BehaviorSubject = new BehaviorSubject(undefined);\n\n private renderer: Renderer2;\n\n private injector: Injector | undefined;\n\n constructor(\n @Inject(DOCUMENT) protected document: Document,\n protected rendererFactory: RendererFactory2,\n private defaultInjector: Injector,\n ) {\n this.injector = this.defaultInjector;\n\n this.sidebarPortal$ = this.sidebarPortalSubject$.asObservable();\n this.navbarPortal$ = this.navbarPortalSubject$.asObservable();\n this.asidePortal$ = this.asidePortalSubject$.asObservable();\n\n this.sidebarComponent$ = this.sidebarComponentSubject$.asObservable();\n this.navbarComponent$ = this.navbarComponentSubject$.asObservable();\n this.asideComponent$ = this.asideComponentSubject$.asObservable();\n\n this.renderer = rendererFactory.createRenderer(null, null);\n }\n\n ngOnDestroy(): void {\n this.sidebarPortalSubject$.complete();\n this.navbarPortalSubject$.complete();\n this.asidePortalSubject$.complete();\n this.sidebarComponentSubject$.complete();\n this.navbarComponentSubject$.complete();\n this.asideComponentSubject$.complete();\n }\n\n setSidebarComponent(callback?: () => Promise> | ComponentType): void {\n if (callback != null) {\n Promise.resolve(callback())\n .then((component) => {\n const sidebarComponentPortal = new ComponentPortal(\n component,\n null,\n this.injector,\n );\n\n this.sidebarPortalSubject$.next(sidebarComponentPortal);\n });\n } else {\n this.sidebarPortalSubject$.next(undefined);\n }\n }\n\n setNavbarComponent(callback?: () => Promise> | ComponentType): void {\n if (callback != null) {\n Promise.resolve(callback())\n .then((component) => {\n const navbarComponentPortal = new ComponentPortal(\n component,\n null,\n this.injector,\n );\n\n this.navbarPortalSubject$.next(navbarComponentPortal);\n });\n } else {\n this.navbarPortalSubject$.next(undefined);\n }\n }\n\n setAsideComponent(callback?: () => Promise> | ComponentType): void {\n if (callback != null) {\n Promise.resolve(callback())\n .then((component) => {\n const asideComponentPortal = new ComponentPortal(\n component,\n null,\n this.injector,\n );\n\n this.asidePortalSubject$.next(asideComponentPortal);\n });\n } else {\n this.asidePortalSubject$.next(undefined);\n }\n }\n\n setEmbeddedSidebar(hasSidebar: boolean): void {\n this.hasEmbeddedSidebar = hasSidebar;\n }\n\n setContext(injector: Injector): void {\n this.injector = injector;\n }\n\n resetContext(): void {\n this.injector = this.defaultInjector;\n }\n\n /**\n * Updates the reference of the current sidebar component.\n *\n * === Important ===\n * This event handler should be attached to the `attached` event of the\n * matching cdkPortalOutlet directive. This is necessary in order to acquire\n * a globally available reference to the component instantiated within the\n * component portal.\n * =================\n *\n * @param {CdkPortalOutletAttachedRef} ref\n */\n onSidebarPortalAttached(ref: CdkPortalOutletAttachedRef): void {\n if (ref != null && ref instanceof ComponentRef && ref.instance != null) {\n this.sidebarComponentSubject$.next(ref.instance);\n } else {\n this.sidebarComponentSubject$.next(undefined);\n }\n }\n\n /**\n * Updates the reference of the current navbar component.\n *\n * === Important ===\n * This event handler should be attached to the `attached` event of the\n * matching cdkPortalOutlet directive. This is necessary in order to acquire\n * a globally available reference to the component instantiated within the\n * component portal.\n * =================\n *\n * @param {CdkPortalOutletAttachedRef} ref\n */\n onNavbarPortalAttached(ref: CdkPortalOutletAttachedRef): void {\n if (ref != null && ref instanceof ComponentRef && ref.instance != null) {\n this.navbarComponentSubject$.next(ref.instance);\n } else {\n this.navbarComponentSubject$.next(undefined);\n }\n }\n\n /**\n * Updates the reference of the current aside component.\n *\n * === Important ===\n * This event handler should be attached to the `attached` event of the\n * matching cdkPortalOutlet directive. This is necessary in order to acquire\n * a globally available reference to the component instantiated within the\n * component portal.\n * =================\n *\n * @param {CdkPortalOutletAttachedRef} ref\n */\n onAsidePortalAttached(ref: CdkPortalOutletAttachedRef): void {\n if (ref != null && ref instanceof ComponentRef && ref.instance != null) {\n this.asideComponentSubject$.next(ref.instance);\n } else {\n this.asideComponentSubject$.next(undefined);\n }\n }\n}\n","import { Injectable, OnDestroy } from '@angular/core';\nimport { BehaviorSubject, Observable } from 'rxjs';\nimport { distinctUntilChanged, map } from 'rxjs/operators';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class LoadingIndicatorService implements OnDestroy {\n isLoading$: Observable;\n\n isGuardsCheckInProgress$: Observable;\n\n get isLoading(): boolean { return this.loadingRequestsSubject$.value > 0; }\n\n get isGuardsCheckInProgress(): boolean { return this.guardChecksSubject$.value > 0; }\n\n private loadingRequestsSubject$: BehaviorSubject = new BehaviorSubject(0);\n\n private guardChecksSubject$: BehaviorSubject = new BehaviorSubject(0);\n\n constructor() {\n this.isLoading$ = this.loadingRequestsSubject$\n .asObservable()\n .pipe(\n map((count) => count > 0),\n distinctUntilChanged(),\n );\n this.isGuardsCheckInProgress$ = this.guardChecksSubject$\n .asObservable()\n .pipe(\n map((count) => count > 0),\n distinctUntilChanged(),\n );\n }\n\n /** @inheritdoc */\n ngOnDestroy(): void {\n this.loadingRequestsSubject$.complete();\n this.guardChecksSubject$.complete();\n }\n\n /**\n * Adds a new loading request to the stack.\n */\n addLoadingRequest(): void {\n this.loadingRequestsSubject$.next(this.loadingRequestsSubject$.value + 1);\n }\n\n /**\n * Removes a loading request from the stack.\n */\n removeLoadingRequest(): void {\n if (this.loadingRequestsSubject$.value > 0) {\n this.loadingRequestsSubject$.next(this.loadingRequestsSubject$.value - 1);\n }\n }\n\n /**\n * Adds a new guards check to the stack.\n */\n addGuardsCheck(): void {\n this.guardChecksSubject$.next(this.guardChecksSubject$.value + 1);\n }\n\n /**\n * Removes a guards check from the stack.\n */\n removeGuardsCheck(): void {\n if (this.guardChecksSubject$.value > 0) {\n this.guardChecksSubject$.next(this.guardChecksSubject$.value - 1);\n }\n }\n}\n","import { Injectable } from '@angular/core';\nimport { ActivatedRouteSnapshot } from '@angular/router';\nimport { Observable, throwError } from 'rxjs';\n\nimport { catchError, mapTo, switchMap } from 'rxjs/operators';\nimport { Store } from '@ngxs/store';\nimport { ProjectService } from '../api/services/project.service';\nimport { ProjectScopeViewResponseModel } from '../api/models/responses/project-scope-view.response.model';\nimport { SetProjectScopeView } from '../state';\nimport { ErrorHandlerService } from './error-handler.service';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class ProjectScopeResolver {\n constructor(\n private projectService: ProjectService,\n private store: Store,\n private errorHandlerService: ErrorHandlerService,\n ) { }\n\n resolve(\n route: ActivatedRouteSnapshot,\n ): Observable {\n const { parent } = route;\n\n if (!parent || !parent.data || !parent.data.project) {\n throw new Error('Resolver is missing a project to resolve.');\n }\n\n const { project } = parent.data;\n\n if (project.projectId == null) {\n throw new Error('Resolved project doesn\\'t contain an ID.');\n }\n\n return this.projectService\n .getProjectScopeView$(project.projectId)\n .pipe(\n switchMap((result) => this.store.dispatch(new SetProjectScopeView(result))\n .pipe(\n mapTo(result),\n )),\n catchError((error: unknown) => {\n this.errorHandlerService.handleError(error as Error, 'Error loading project scope');\n\n return throwError(error);\n }),\n );\n }\n}\n","import { Injectable } from '@angular/core';\nimport { ActivatedRouteSnapshot, Router } from '@angular/router';\nimport { Observable, of, throwError } from 'rxjs';\nimport { catchError, mapTo, switchMap } from 'rxjs/operators';\nimport { Store } from '@ngxs/store';\n\nimport { ProjectService } from '../api/services/project.service';\nimport { ProjectViewResponseModel } from '../api/models/responses/project-view.response.model';\nimport { ClearViews, SetProjectView, UserStateActions } from '../state';\nimport { ProjectRecentListDtoModel } from '../api/models/dtos/project-recent-list.dto.model';\nimport { ErrorHandlerService } from './error-handler.service';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class ProjectViewResolver {\n constructor(\n private router: Router,\n private projectService: ProjectService,\n private store: Store,\n private errorHandlerService: ErrorHandlerService,\n ) { }\n\n resolve(\n route: ActivatedRouteSnapshot,\n ): Observable {\n const projectId = route.paramMap.get('id');\n\n if (projectId == null) {\n throw new Error('Route param \\'id\\' cannot be null');\n }\n\n return this.projectService\n .getProjectView$(+projectId)\n .pipe(\n switchMap((result) => this.store.dispatch(new ClearViews())\n .pipe(\n switchMap(() => this.store.dispatch(new SetProjectView(result))),\n mapTo(result),\n )),\n switchMap((project) => {\n const recentProject = new ProjectRecentListDtoModel(project.projectId, project.title);\n\n return this.store.dispatch(new UserStateActions.AddRecentProject(recentProject))\n .pipe(\n mapTo(project),\n // Ignore any errors\n catchError(() => of(project)),\n );\n }),\n catchError((error: unknown) => {\n this.errorHandlerService.handleError(error as Error, `An error has occurred while loading the project with the ID '${projectId}'`);\n\n this.router.navigate(['/projects', 'all']);\n\n return throwError(error);\n }),\n );\n }\n}\n","import { Injectable } from '@angular/core';\nimport { ActivatedRouteSnapshot } from '@angular/router';\nimport { Observable, throwError } from 'rxjs';\nimport { catchError, mapTo, switchMap } from 'rxjs/operators';\nimport { Store } from '@ngxs/store';\nimport { WorkPackageViewResponseModel } from '../api/models/responses/work-package-view.response.model';\nimport { ProjectService } from '../api/services/project.service';\nimport { SetWorkPackageView } from '../state';\nimport { ErrorHandlerService } from './error-handler.service';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class WorkPackageViewResolver {\n constructor(\n private projectService: ProjectService,\n private store: Store,\n private errorHandlerService: ErrorHandlerService,\n ) { }\n\n resolve(\n route: ActivatedRouteSnapshot,\n ): Observable {\n const projectId = route.paramMap.get('id');\n const workPackageId = route.paramMap.get('wpId');\n\n if (workPackageId == null) {\n throw new Error('Route param \\'wpId\\' cannot be null');\n }\n\n if (projectId == null) {\n throw new Error('Resolved project doesn\\'t contain an ID.');\n }\n\n return this.projectService\n .getWorkPackageView$(+projectId, +workPackageId)\n .pipe(\n switchMap((result) => this.store.dispatch(new SetWorkPackageView(result))\n .pipe(\n mapTo(result),\n )),\n catchError((error: unknown) => {\n this.errorHandlerService.handleError(error as Error, 'Error loading work package view');\n\n return throwError(error);\n }),\n );\n }\n}\n","@if (icon) {\n {{ icon }}\n}\n\n","import {\n ChangeDetectionStrategy,\n Component, HostBinding, Input, ViewEncapsulation,\n} from '@angular/core';\n\n/**\n * CSS Class Prefix\n */\nconst ALERT_CLASS = 'collapp-alert';\n\n@Component({\n selector: 'collapp-alert',\n templateUrl: './alert.component.html',\n styleUrls: ['./alert.component.scss'],\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush,\n standalone: false\n})\nexport class AlertComponent {\n @Input()\n type?: string;\n\n @Input()\n icon?: string;\n\n /**\n * Classes set from outside/context.\n */\n @Input()\n class?: string;\n\n @HostBinding('class')\n get className(): string {\n let className = ALERT_CLASS;\n\n if (this.type != null) {\n className = `${className} ${ALERT_CLASS}--${this.type}`;\n }\n\n if (this.class != null) {\n className = `${className} ${this.class}`;\n }\n\n return className;\n }\n}\n","import { NgModule } from '@angular/core';\nimport { MatIconModule } from '@angular/material/icon';\nimport { CommonModule } from '@angular/common';\nimport { AlertComponent } from './alert.component';\n\n@NgModule({\n imports: [\n CommonModule,\n MatIconModule,\n ],\n exports: [\n AlertComponent,\n ],\n declarations: [\n AlertComponent,\n ],\n})\nexport class AlertModule {\n}\n","import { Component, Input, ViewEncapsulation } from '@angular/core';\n\n@Component({\n selector: 'collapp-badge',\n templateUrl: './collapp-badge.component.html',\n styleUrls: ['./collapp-badge.component.scss'],\n encapsulation: ViewEncapsulation.None,\n standalone: false\n})\nexport class CollAppBadgeComponent {\n @Input() text: string = '';\n\n @Input() size: 'small' | 'medium' | 'large' = 'medium';\n}\n","\n {{ text }}\n\n","\n\n \n
    \n \n
    \n
    \n
    \n","import {\n ChangeDetectionStrategy, Component, EventEmitter, HostBinding, Input, Output,\n} from '@angular/core';\nimport { ListColumnInfo } from '../../api/meta-info/base';\nimport { ReadonlyCompleteMap } from '../../app.types';\n\nexport interface ColumnSelectorInfo {\n name: T;\n label: string;\n selected: boolean;\n}\n\n/* eslint-disable @typescript-eslint/no-unused-vars */\n\n/**\n * Constructs a ColumnSelectorInfo array that can be consumed by the .\n */\nexport function composeColumnSelectorInfoForList

    >(\n listColumnsInfo: T,\n selectedColumns: P[],\n): ColumnSelectorInfo

    [] {\n const colInfo = Array.from(listColumnsInfo.entries())\n .filter(([_key, value]) => value.selectable)\n .map(([key, value]) => ({\n name: key,\n label: value.label,\n selected: selectedColumns.includes(key),\n }));\n colInfo.toString = (): string => colInfo.map((col) => col.name).join(', ');\n\n return colInfo;\n}\n\n/* eslint-enable @typescript-eslint/no-unused-vars */\n\n@Component({\n selector: 'collapp-column-selector',\n templateUrl: './column-selector.component.html',\n changeDetection: ChangeDetectionStrategy.OnPush,\n standalone: false\n})\nexport class ColumnSelectorComponent {\n get columnsInfo(): ColumnSelectorInfo[] {\n return this._columnsInfo;\n }\n\n @Input()\n set columnsInfo(value: ColumnSelectorInfo[]) {\n const setColumnInfo = (value || []).map((item) => ({ ...item }));\n setColumnInfo.toString = (): string => setColumnInfo.map((col) => col.name).join(', ');\n this._columnsInfo = setColumnInfo;\n }\n\n @Output()\n // TODO rename\n // eslint-disable-next-line @angular-eslint/no-output-native\n readonly change: EventEmitter = new EventEmitter(true);\n\n @HostBinding('class')\n get class(): string { return 'collapp-column-selector'; }\n\n private _columnsInfo: ColumnSelectorInfo[] = [];\n\n preventMenuFromClosing(event: MouseEvent): void {\n event.stopPropagation();\n }\n\n triggerChange(event: string[]): void {\n this.change.emit(event);\n }\n}\n","import { SimpleNavItem } from './models/simple-nav-item.interface';\nimport { UserDtoModel } from './api/models/dtos/user.dto.model';\nimport { getAdministrationPermissions, getPowerBIPermissions, getReportingPermissions } from './app.permisions';\n\nexport interface PrimaryNavItem extends SimpleNavItem {\n shortname: string;\n icon: string;\n hidden: (user: UserDtoModel) => boolean;\n activeMenuRegex?: string;\n}\n\nexport const views: PrimaryNavItem[] = [\n {\n shortname: 'DASH',\n icon: 'ic-dashboard',\n name: 'Dashboard',\n adminClass: false,\n link: ['/dashboard'],\n activeMenuRegex: '/dashboard',\n hidden: (): boolean => false,\n },\n {\n shortname: 'PROJ',\n icon: 'ic-projects',\n name: 'Projects',\n adminClass: false,\n link: ['/projects'],\n activeMenuRegex: '^(?!.*work-packages?\\\\b).*\\\\bprojects\\\\b.*$',\n hidden: (): boolean => false,\n },\n {\n shortname: 'WP\\'s',\n icon: 'ic-workpackages',\n name: 'Work Packages',\n adminClass: false,\n link: ['/work-packages'],\n activeMenuRegex: 'work-packages',\n hidden: (): boolean => false,\n },\n {\n shortname: 'Q\\'s',\n icon: 'ic-questions',\n name: 'Questions',\n adminClass: false,\n link: ['/questions'],\n activeMenuRegex: '^/questions',\n hidden: (): boolean => false,\n },\n {\n shortname: 'SUPP',\n icon: 'ic-support',\n adminClass: false,\n name: 'Support',\n linkCode: 'support',\n activeMenuRegex: '^support',\n hidden: (): boolean => false,\n },\n {\n shortname: 'REPO1',\n icon: 'ic-timesheet',\n name: 'Timesheet',\n adminClass: false,\n link: ['/reporting/timesheet'],\n activeMenuRegex: '/reporting/timesheet',\n hidden: (user): boolean => !user.hasPermissions(getReportingPermissions()),\n },\n {\n shortname: 'REPO2',\n icon: 'ic-unitplanning',\n name: 'Unit Planning',\n adminClass: false,\n link: ['/reporting/unit-planning'],\n activeMenuRegex: '/reporting/unit-planning',\n hidden: (): boolean => false,\n },\n {\n shortname: 'ADM',\n icon: 'ic-administration',\n adminClass: true,\n name: 'Administration',\n link: ['/administration'],\n activeMenuRegex: '/administration',\n hidden: (user): boolean => !user.hasPermissions(getAdministrationPermissions()),\n },\n {\n shortname: 'PBI',\n icon: 'ic-powerbi',\n adminClass: true,\n name: 'PowerBI',\n linkCode: 'powerBI',\n hidden: (user): boolean => !user.hasPermissions(getPowerBIPermissions()),\n },\n {\n shortname: '404',\n icon: 'ic-info',\n name: 'Bad Link',\n adminClass: true,\n link: ['/wronglink'],\n hidden: (): boolean => true,\n },\n];\n","

    \n @if (user$ | async; as user) {\n \n
    \n @for (item of items; track navItemTrackByFn($index, item); let first = $first) {\n @if (item.link) {\n \n }\n @if (item.linkCode) {\n \n }\n }\n @for (item of adminItems; track navItemTrackByFn($index, item); let first = $first) {\n @if (item.link) {\n \n }\n @if (item.linkCode) {\n \n }\n }\n
    \n
    \n \n \n
    \n
    \n
    \n
    \n @if (user) {\n \n @if ((originalUser$ | async)) {\n \n \n \n \n \n \n }\n \n }\n arrow_drop_down\n
    {{user | collAppUser}}
    \n
    \n
    \n } @else {\n \n }\n
    \n
    \n\n\n \n
    \n
    \n {{user | collAppUser}}\n
    \n @if (user.unit) {\n
    \n {{user.unit | collAppUnit}}\n
    \n }\n @if (user.role) {\n
    \n {{user.role | collAppRole}}\n
    \n }\n
    \n \n Timecard\n {{\"common.planning\" | translate}}\n Calendar & Language\n Notification Settings\n Profile\n \n @if ((originalUser$ | async)) {\n \n }\n \n
    \n
    \n\n\n\n\n @if (!item.hidden(user)) {\n \n
    \n \n
    \n
    {{item.name}}
    \n
    \n }\n
    \n\n\n @if (!item.hidden(user)) {\n \n
    \n \n
    \n
    {{item.name}}
    \n
    \n }\n
    \n","import {\n Component, EventEmitter, HostBinding, Input, OnDestroy, Output, ViewEncapsulation, inject,\n} from '@angular/core';\nimport { NavigationEnd, Router, RouterEvent } from '@angular/router';\nimport { Observable, Subject } from 'rxjs';\nimport {\n filter, finalize, takeUntil, tap,\n} from 'rxjs/operators';\n\nimport { LoadingIndicatorService } from '../../../services/loading-indicator.service';\nimport { PrimaryNavItem, views } from '../../../app-nav-views';\nimport { UserSelectors } from '../../../state/user';\nimport { UserDtoModel } from '../../../api/models/dtos/user.dto.model';\nimport { SimpleNavItem } from '../../../models/simple-nav-item.interface';\nimport { AccessControlService } from '../../../services/access-control.service';\nimport { utoa } from '../../../helpers/login.utility';\nimport { ErrorHandlerService } from '../../../services/error-handler.service';\nimport { BaseDataSelectors } from '../../../state';\nimport { ResourceLinkDtoModel } from '../../../api/models/dtos/resource-link.dto.model';\nimport { SUBSTITUTED_USER_ID_PARAM_NAME } from 'src/app/app.component';\nimport { Store } from '@ngxs/store';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\n\n@Component({\n selector: 'collapp-primary-nav',\n templateUrl: './primary-nav.component.html',\n styleUrls: ['./primary-nav.component.scss'],\n encapsulation: ViewEncapsulation.None,\n standalone: false\n})\nexport class PrimaryNavigationComponent implements OnDestroy {\n @HostBinding('class.primary-nav')\n readonly primaryNavClass: boolean = true;\n\n @Input()\n open: boolean = true;\n\n @Output()\n readonly toggle: EventEmitter = new EventEmitter();\n\n private readonly store = inject(Store);\n\n user$: Observable = this.store.select(UserSelectors.user).pipe(filter(Boolean), takeUntilDestroyed());\n\n originalUser$: Observable = this.store.select(UserSelectors.originalUser).pipe(filter(Boolean), takeUntilDestroyed());\n\n links: ResourceLinkDtoModel[] = [];\n\n readonly menuItemTooltipDelay: number = 200;\n\n readonly profileUserTooltipDelay: number = 400;\n\n items: PrimaryNavItem[] = [];\n\n adminItems: PrimaryNavItem[] = [];\n\n userItems: PrimaryNavItem[] = [];\n\n private destroyed$: Subject = new Subject();\n\n private currentRoute: string = '';\n\n constructor(\n private accessControlService: AccessControlService,\n private router: Router,\n private loadingIndicatorService: LoadingIndicatorService,\n private errorHandlerService: ErrorHandlerService,\n ) {\n // prepare menu-items\n this.items = views.filter((view) => !view.adminClass);\n this.adminItems = views.filter((view) => view.adminClass);\n this.userItems = [\n {\n shortname: 'Timecard',\n icon: 'ic-timecard',\n name: 'Timecard',\n adminClass: false,\n link: ['/user/timecard'],\n activeMenuRegex: '/user/timecard',\n hidden: (): boolean => false,\n },\n {\n shortname: 'Planning',\n icon: 'ic-resourceplanning',\n name: 'Planning',\n adminClass: false,\n // Note you can not use PLANNING_PATH otherwise the app just does not load\n link: ['/user/planning'],\n activeMenuRegex: '/user/planning',\n hidden: (): boolean => false,\n }];\n\n this.store.select(BaseDataSelectors.links)\n .pipe(\n takeUntil(this.destroyed$),\n )\n .subscribe((links) => {\n this.links = links;\n });\n\n router.events\n .pipe(\n filter((event: any) => event instanceof NavigationEnd),\n tap((event: RouterEvent) => {\n this.currentRoute = event.url;\n }),\n takeUntil(this.destroyed$),\n )\n .subscribe((_) => {\n // nothing\n });\n }\n\n ngOnDestroy(): void {\n this.destroyed$.next();\n this.destroyed$.complete();\n }\n\n isAciveLink(item: PrimaryNavItem): boolean {\n return !!(this.currentRoute.match(`${item.activeMenuRegex}`)?.length);\n }\n\n toggleMenuOpen(): void {\n this.toggle.next();\n }\n\n logOutSubstituteUser(): void {\n this.loadingIndicatorService.addLoadingRequest();\n this.accessControlService.logoutSubstituteUser$()\n .pipe(\n finalize(() => {\n this.loadingIndicatorService.removeLoadingRequest();\n }),\n takeUntil(this.destroyed$),\n )\n .subscribe(\n () => {\n const currentUrl = this.router.routerState.snapshot.url;\n this.router.navigate(['/redirect', utoa(currentUrl.replace(SUBSTITUTED_USER_ID_PARAM_NAME, ''))]);\n },\n (error: unknown) => {\n this.errorHandlerService.handleError(error as Error, 'Could not log out from SU');\n },\n );\n }\n\n logOutUser(): void {\n this.accessControlService.logout();\n }\n\n decode(url: string): string {\n return window.decodeURIComponent(url);\n }\n\n getExternalLink(item: PrimaryNavItem): string | null {\n const url = this.links.find((link) => link.linkCode === item.linkCode)?.url;\n\n return url ? window.decodeURIComponent(url) : null;\n }\n\n /**\n * @TODO Merge similar functions `navItemTrackByFn`\n * @param {number} index\n * @param {SimpleNavItem} item\n */\n navItemTrackByFn(index: number, item: SimpleNavItem): string {\n return `${item.name}:${item.link ? item.link.join('/') : item.linkCode}`;\n }\n}\n","export const RETURN_URL_QUERY_PARAM = 'returnUrl';\nexport const DEFAULT_RETURN_URL = '/';\nexport const LOGIN_REDIRECT_DELAY: number = 2000;\n\nexport const REMOVE_CLASS_DELAY = 4000;\nexport const LIST_COLUMNS_SELECTION_CHANGE_DEBOUNCE_TIME: number = 100;\nexport const LIST_COLUMNS_FILTER_CHANGE_DEBOUNCE_TIME: number = 400;\nexport const LIST_COLUMNS_FILTER_CHANGE_DEBOUNCE_TIME_SMALL: number = 200;\n/** A very small debounce time (~2 browser ticks) to smooth out RXJS merge and prevent multiple calls */\nexport const DEBOUNCE_RXJS_MERGE: number = 32;\nexport const DEBOUNCE_CLICK_SMALL: number = 50;\nexport const DEBOUNCE_INPUT_CHANGE_SMALL: number = 400;\nexport const DEBOUNCE_INPUT_CHANGE_TIME_SMALL: number = 200;\nexport const DROPDOWN_FILTER_RESULTS_LIMIT: number = 10;\n// Unit Defect List\nexport const DEFECT_ELEM_HEIGHT = 35;\nexport const SCROLL_TO_ELEM_DELAY = 50;\n\nexport const UPLOAD_PAYLOAD_MAX_SIZE: number = 4 * 1024 * 1024 * 1024; // 4 GB\n\nexport const WEEK_SELECTOR_NUMBER_OF_WEEKS = 9;\n\nexport const MAX_FRACTION_DIGITS: number = 2;\n\nexport const HOURS_MIN_VALUE: number = -999999.99;\nexport const HOURS_MAX_VALUE: number = 999999.99;\nexport const USER_WORK_HOURS_PER_WEEK_MIN_VALUE: number = 0;\nexport const LEVEL_HOURS_MIN_VALUE: number = 0;\nexport const LEVEL_COST_MIN_VALUE: number = 0;\nexport const LEVEL_HOURLY_RATE_MIN_VALUE: number = 0;\nexport const WORK_PACKAGE_ESTIMATED_HOURS_MIN_VALUE: number = 0.01;\nexport const WORK_PACKAGE_RESPONSIBLE_PLANNED_HOURS_MIN_VALUE: number = 0;\nexport const WORK_PACKAGE_RESPONSIBLE_PLANNED_HOURS_AFTER_FORECAST_MIN_VALUE: number = 0.01;\nexport const UNIT_CONTRACT_HOURS_PER_WEEK_MIN_VALUE: number = 0;\n\n// === Table / List Configuration ===\n// ----------------------------------------------------------------------------\nexport const DEFAULT_PAGE_SIZE_OPTIONS = [10, 25, 50, 100];\nexport const DEFAULT_PAGE_SIZE = 25;\n\n// Project list\nexport const PROJECT_LIST_PAGE_SIZE_OPTIONS = [...DEFAULT_PAGE_SIZE_OPTIONS];\nexport const PROJECT_LIST_DEFAULT_PAGE_SIZE = DEFAULT_PAGE_SIZE;\n\n// Unit list\nexport const UNIT_LIST_PAGE_SIZE_OPTIONS = [...DEFAULT_PAGE_SIZE_OPTIONS];\nexport const UNIT_LIST_DEFAULT_PAGE_SIZE = DEFAULT_PAGE_SIZE;\n\n// Non-human resource list\nexport const NON_HUMAN_RESOURCE_LIST_PAGE_SIZE_OPTIONS = [...DEFAULT_PAGE_SIZE_OPTIONS];\nexport const NON_HUMAN_RESOURCE_LIST_DEFAULT_PAGE_SIZE = DEFAULT_PAGE_SIZE;\n\n// User list\nexport const USER_LIST_PAGE_SIZE_OPTIONS = [...DEFAULT_PAGE_SIZE_OPTIONS];\nexport const USER_LIST_DEFAULT_PAGE_SIZE = DEFAULT_PAGE_SIZE;\n\n// Work Package list\nexport const WORK_PACKAGE_LIST_PAGE_SIZE_OPTIONS = [...DEFAULT_PAGE_SIZE_OPTIONS];\nexport const WORK_PACKAGE_LIST_DEFAULT_PAGE_SIZE = DEFAULT_PAGE_SIZE;\nexport const WORK_PACKAGE_LIST_EXPORT_TIMEOUT = 5 * 60 * 1000; //5 minutes\n\n// Work Package Question list\nexport const WORK_PACKAGE_QUESTION_LIST_PAGE_SIZE_OPTIONS = [...DEFAULT_PAGE_SIZE_OPTIONS];\nexport const WORK_PACKAGE_QUESTION_LIST_DEFAULT_PAGE_SIZE = 10;\n\n// Questions list\nexport const QUESTIONS_LIST_PAGE_SIZE_OPTIONS = [...DEFAULT_PAGE_SIZE_OPTIONS];\nexport const QUESTIONS_LIST_DEFAULT_PAGE_SIZE = DEFAULT_PAGE_SIZE;\n\n// Resource Planning\nexport const USER_RESOURCE_LIST_PAGE_SIZE_OPTIONS = [...DEFAULT_PAGE_SIZE_OPTIONS];\nexport const USER_RESOURCE_LIST_DEFAULT_PAGE_SIZE = DEFAULT_PAGE_SIZE;\nexport const NON_HUMAN_RESOURCE_PLANNING_LIST_PAGE_SIZE_OPTIONS = [...DEFAULT_PAGE_SIZE_OPTIONS];\nexport const NON_HUMAN_RESOURCE_PLANNING_LIST_DEFAULT_PAGE_SIZE = DEFAULT_PAGE_SIZE;\n\nexport const WORK_PACKAGE_ACTIVITIES_DEFAULT_PAGE_SIZE = 10;\n// ----------------------------------------------------------------------------\n\n// === Form Validation ===\n// ----------------------------------------------------------------------------\n\n// --- TimeTracking / Planning --\nexport const WEEKLY_PLANNED_HOURS_MIN: number = 0;\nexport const WEEKLY_PLANNED_HOURS_MAX: number = 999999.99;\nexport const WEEKLY_PLANNED_HOURS_STEP: number = 0.1;\n\nexport const TIME_TRACKING_HOURS_MIN: number = 0;\nexport const TIME_TRACKING_HOURS_MAX: number = 24;\nexport const TIME_TRACKING_HOURS_STEP: number = 0.1;\n\n// ----------------------------------------------------------------------------\n\nexport const HOLIDAY_SEPARATOR = ';';\nexport const WORKING_DAYS_SPLIT_SYMBOL = ';';\n","import { Pipe, PipeTransform } from '@angular/core';\nimport { Store } from '@ngxs/store';\nimport { BaseDataSelectors } from '../state/base-data';\nimport { CountryDtoModel } from '../api/models/dtos/country.dto.model';\n\n@Pipe({\n name: 'collAppCountryName',\n standalone: false\n})\nexport class CollAppCountryNamePipe implements PipeTransform {\n constructor(\n private store: Store,\n ) {\n }\n\n transform(value?: string): any {\n if (value == null) {\n return '';\n }\n\n const country: CountryDtoModel | undefined = this.store\n .selectSnapshot(BaseDataSelectors.countryByCode(value));\n if (country) {\n return country.name;\n }\n\n return '';\n }\n}\n","\n {{ date | moment }}\n @if ((exceeded || overdue) && suffix) {\n ({{ suffix | moment }})\n }\n\n","import {\n ChangeDetectionStrategy, Component, HostBinding, Input, ViewEncapsulation,\n} from '@angular/core';\nimport moment from 'moment';\nimport { coerceBooleanProperty } from '@angular/cdk/coercion';\n\n@Component({\n selector: 'collapp-date',\n templateUrl: './date.component.html',\n styleUrls: ['./date.component.scss'],\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush,\n standalone: false\n})\nexport class CollappDateComponent {\n @HostBinding('class.collapp-date')\n hostClass: boolean = true;\n\n @HostBinding('class.collapp-date--exceeded')\n get exceededClassName(): boolean {\n return this._exceeded;\n }\n\n @HostBinding('class.collapp-date--overdue')\n get overdueClassName(): boolean {\n return this._overdue;\n }\n\n @Input()\n date: moment.Moment | null = null;\n\n @Input()\n suffix: moment.Moment | null = null;\n\n @Input()\n set exceeded(originalState: boolean) {\n this._exceeded = coerceBooleanProperty(originalState);\n }\n\n get exceeded(): boolean {\n return this._exceeded;\n }\n\n @Input()\n set overdue(originalState: boolean) {\n this._overdue = coerceBooleanProperty(originalState);\n }\n\n get overdue(): boolean {\n return this._overdue;\n }\n\n private _exceeded: boolean = false;\n\n private _overdue: boolean = false;\n}\n","
    \n

    {{title}}

    \n \n
    \n\n\n
    \n
    \n\n
    \n \n\n @if (type !== basicDialogType.NAVIGATION_PROMPT) {\n @if (type === basicDialogType.PROMPT) {\n No\n }\n @if (type === basicDialogType.PROMPT) {\n Yes\n }\n @if (type !== basicDialogType.PROMPT) {\n OK\n }\n }\n\n @if (type === basicDialogType.NAVIGATION_PROMPT) {\n Discard changes\n Save changes\n Abort navigation\n }\n
    \n","/* eslint-disable rxjs-angular/prefer-takeuntil */\nimport {\n Component, Inject, ViewEncapsulation, OnDestroy,\n} from '@angular/core';\nimport { MAT_DIALOG_DATA, MatDialogRef } from '@angular/material/dialog';\nimport { Observable, Subject } from 'rxjs';\nimport { take } from 'rxjs/operators';\n\n/**\n * Enum for basic dialog types.\n *\n * @enum {number}\n */\nexport enum BasicDialogType {\n INFO,\n ERROR,\n PROMPT,\n NAVIGATION_PROMPT,\n}\n\nexport interface BasicDialogData {\n type: BasicDialogType;\n title: string;\n text: string;\n confirmationCallback?: () => Observable;\n saveAndContinueCallback?: () => Observable;\n discardAndContinueCallback?: () => Observable;\n}\n\n@Component({\n templateUrl: './basic.dialog.component.html',\n styleUrls: ['./basic.dialog.component.scss'],\n encapsulation: ViewEncapsulation.None,\n standalone: false\n})\nexport class BasicDialogComponent implements OnDestroy {\n get type(): BasicDialogType { return this.data.type; }\n\n get title(): string { return this.data.title; }\n\n get text(): string { return this.data.text; }\n\n loading: boolean = false;\n\n basicDialogType: typeof BasicDialogType = BasicDialogType;\n\n private readonly destroyed$: Subject = new Subject();\n\n constructor(\n private dialogRef: MatDialogRef,\n @Inject(MAT_DIALOG_DATA) private data: BasicDialogData,\n ) { }\n\n ngOnDestroy(): void {\n this.destroyed$.next();\n this.destroyed$.complete();\n }\n\n /**\n * This closes the dialog, after the confirm callback has completed.\n */\n confirm(): void {\n this.doCallbackAndClose(this.data.confirmationCallback);\n }\n\n saveAndContinue(): void {\n this.doCallbackAndClose(this.data.saveAndContinueCallback);\n }\n\n ignoreAndContinue(): void {\n this.doCallbackAndClose(this.data.discardAndContinueCallback);\n }\n\n closeAndAbort(): void {\n this.closeDialog(false);\n }\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n private doCallbackAndClose(callbackRef: any): void {\n if (this.loading) {\n return;\n }\n\n this.loading = true;\n\n if (callbackRef) {\n callbackRef().pipe(\n take(1),\n ).subscribe((successful?: boolean) => {\n this.closeDialog((successful));\n });\n } else {\n this.closeDialog(true);\n }\n }\n\n private closeDialog(successful?: boolean): void {\n this.loading = false;\n this.dialogRef.close(successful);\n }\n}\n","
    \n

    \n {{ title }}\n

    \n \n
    \n\n
    \n \n

    \n {{ message }}\n

    \n\n
    \n \n
    \n \n \n \n @if (comment.hasError('required')) {\n \n Field is required.\n \n }\n \n
    \n @if (recipients.length > 0) {\n
    \n
    \n email\n
    \n
    \n Email notification will be sent to: {{ recipientsAsString }}\n
    \n
    \n }\n @if (recipients.length > 0 && showSendNotifications) {\n
    \n
    \n \n \n Send Notifications\n \n \n
    \n
    \n }\n
    \n
    \n
    \n\n
    \n \n Cancel\n \n OK\n \n
    \n
    \n","import {\n Component, Inject, OnDestroy, ViewEncapsulation,\n} from '@angular/core';\nimport { UntypedFormBuilder, UntypedFormControl, Validators } from '@angular/forms';\nimport { Subject } from 'rxjs';\nimport { MAT_DIALOG_DATA, MatDialogRef } from '@angular/material/dialog';\nimport { takeUntil } from 'rxjs/operators';\nimport { BasicUser } from '../../../models/user.interface';\nimport { TypedFormGroup } from '../../../form/typed-form-group';\nimport { TypedFormBuilder } from '../../../form/typed-form-builder';\nimport { BasicDialogComponent } from '../basic-dialog/basic.dialog.component';\nimport { BasicDialogService } from '../../../services/basic-dialog.service';\n\n/**\n * Data the dialog expects as input.\n */\nexport interface NotificationDialogData {\n title: string;\n message: string;\n recipients: BasicUser[];\n isCommentRequired: boolean;\n showSendNotifications: boolean;\n}\n\n/**\n * Response if dialog was confirmed\n */\nexport interface NotificationDialogResponse {\n comment: string;\n sendNotifications: boolean;\n}\n\n/**\n * Form of the dialog\n */\nexport interface NotificationDialogForm {\n comment: string;\n sendNotifications: boolean;\n}\n\n@Component({\n templateUrl: './notification-dialog.component.html',\n encapsulation: ViewEncapsulation.None,\n styleUrls: ['./notification-dialog.component.scss'],\n standalone: false\n})\nexport class NotificationDialogComponent implements OnDestroy {\n recipients: BasicUser[] = [];\n\n title: string = '';\n\n message: string = '';\n\n isCommentRequired: boolean = false;\n\n recipientsAsString: string = '';\n\n showSendNotifications: boolean = false;\n\n form: TypedFormGroup;\n\n get comment(): UntypedFormControl { return this.form.controls.comment as UntypedFormControl; }\n\n get sendNotifications(): UntypedFormControl { return this.form.controls.sendNotifications as UntypedFormControl; }\n\n private confirmDialogRef: MatDialogRef | null = null;\n\n /**\n * Triggers when the component is destroyed.\n * Necessary to inform other observers.\n *\n * @type {Subject}\n * @private\n */\n private destroyed$: Subject = new Subject();\n\n constructor(\n _formBuilder: UntypedFormBuilder,\n @Inject(MAT_DIALOG_DATA) data: NotificationDialogData,\n public dialogRef: MatDialogRef,\n private dialogService: BasicDialogService,\n ) {\n const {\n title, message, recipients, isCommentRequired, showSendNotifications,\n } = data;\n\n this.title = title;\n this.message = message;\n this.recipients = recipients;\n this.isCommentRequired = isCommentRequired;\n this.showSendNotifications = showSendNotifications;\n\n if (recipients && recipients.length > 0) {\n this.recipientsAsString = recipients\n .map((r) => r.fullName)\n .join(', ');\n }\n\n const formBuilder: TypedFormBuilder = _formBuilder as any;\n\n this.form = formBuilder.group({\n comment: [\n undefined,\n this.isCommentRequired ? [Validators.required] : [],\n ],\n sendNotifications: [\n true,\n ],\n });\n }\n\n cancel(): void {\n if (this.confirmDialogRef) {\n return;\n }\n\n if (this.form.pristine) {\n this.dialogRef.close();\n\n return;\n }\n\n this.confirmDialogRef = this.dialogService.showConfirmDialog();\n\n this.confirmDialogRef\n .afterClosed()\n .pipe(takeUntil(this.destroyed$))\n .subscribe((closeConfirmed) => {\n this.confirmDialogRef = null;\n if (closeConfirmed) {\n this.dialogRef.close();\n }\n });\n }\n\n confirm(): void {\n if (!this.form.valid) {\n this.form.markAllAsTouched();\n\n return;\n }\n\n this.dialogRef.close({\n comment: this.comment.value,\n sendNotifications: this.sendNotifications.value,\n });\n }\n\n ngOnDestroy(): void {\n this.destroyed$.next();\n this.destroyed$.complete();\n }\n}\n","import { Pipe, PipeTransform } from '@angular/core';\nimport { GateDtoModel } from '../api/models/dtos/gate.dto.model';\n\n@Pipe({\n name: 'collAppGate',\n standalone: false\n})\nexport class CollAppGatePipe implements PipeTransform {\n transform(value?: GateDtoModel): any {\n if (value == null) {\n return '';\n }\n\n return value.name;\n }\n}\n","import { Pipe, PipeTransform } from '@angular/core';\nimport { RoleDtoModel } from '../api/models/dtos/role.dto.model';\n\n@Pipe({\n name: 'collAppRole',\n standalone: false\n})\nexport class CollAppRolePipe implements PipeTransform {\n transform(value?: RoleDtoModel | (RoleDtoModel)[]): any {\n if (value == null) {\n return '';\n }\n\n if (Array.isArray(value)) {\n return value\n .map((role: RoleDtoModel) => role.name)\n .join(', ');\n }\n\n return value.name;\n }\n}\n","@for (column of columnsInternal; track trackByColumnName($index, column)) {\n {{ column.label | translate }}\n}\n","import {\n ChangeDetectionStrategy, Component, EventEmitter, HostBinding, Input, Output,\n} from '@angular/core';\nimport { MatCheckboxChange } from '@angular/material/checkbox';\nimport { ColumnSelectorInfo } from './column-selector.component';\n\n@Component({\n selector: 'collapp-column-selector-menu',\n templateUrl: './column-selector-menu.component.html',\n styleUrls: ['./column-selector-menu.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n standalone: false\n})\nexport class ColumnSelectorMenuComponent {\n @HostBinding('class')\n get class(): string { return 'collapp-column-selector-menu'; }\n\n @Input()\n isNewWay = false;\n\n @Input()\n set columns(value: ColumnSelectorInfo[]) {\n this.columnsInternal = (value || []).map((columnInfo) => Object.assign(Object.create(null), columnInfo));\n }\n\n @Output()\n // TODO rename\n // eslint-disable-next-line @angular-eslint/no-output-native\n readonly change: EventEmitter = new EventEmitter(true);\n\n columnsInternal: ColumnSelectorInfo[] = [];\n\n onColumnSelectionChange(column: ColumnSelectorInfo, event: MatCheckboxChange): void {\n column.selected = event.checked; // eslint-disable-line no-param-reassign\n\n const selectedColumns = this.columnsInternal\n .filter((columnInfo) => columnInfo.selected)\n .map((columnInfo) => columnInfo.name);\n\n this.change.emit(selectedColumns);\n }\n\n trackByColumnName(index: number, column: ColumnSelectorInfo): string {\n return column.name;\n }\n}\n","/* eslint-disable max-classes-per-file */\nimport { ModuleWithProviders, NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { FormsModule, ReactiveFormsModule } from '@angular/forms';\nimport { provideHttpClient, withInterceptorsFromDi } from '@angular/common/http';\nimport { NgxFileDropModule } from 'ngx-file-drop';\nimport { FlexLayoutModule } from '@angular/flex-layout';\nimport { NgxsModule } from '@ngxs/store';\nimport { RouterModule } from '@angular/router';\nimport { NgSelectMaterialModule } from '../components/ng-select-mat';\nimport { MaterialModule } from '../material.module';\nimport { CollAppCountryNamePipe } from './country-name.pipe';\nimport { CollAppGatePipe } from './gate.pipe';\nimport { CollAppRolePipe } from './role.pipe';\nimport { FormActionsComponent } from './form-actions/form-actions.component';\nimport { FormAttachmentsModule } from '../components/form-attachments';\nimport { FormSectionModule } from '../components/form-section';\nimport { CollappButtonModule } from '../components/collapp-button';\nimport { ProjectTreeStructureModule } from '../components/project-tree-structure';\nimport { ColumnSelectorComponent } from './column-selector/column-selector.component';\nimport { ColumnSelectorMenuComponent } from './column-selector/column-selector-menu.component';\nimport { BasicDialogComponent } from './dialogs/basic-dialog/basic.dialog.component';\nimport { PeopleSelectModule } from '../components/people-select';\nimport { PrimaryNavigationComponent } from './components/primary-nav/primary-nav.component';\nimport { PersonIconModule } from '../components/person-icon';\nimport { UnitSelectModule } from '../components/unit-select';\nimport { CollAppBadgeComponent } from './collapp-badge/collapp-badge.component';\nimport { PersonListItemComponent } from './person-list-item/person-list-item.component';\nimport { ShowMoreComponent } from './show-more/show-more.component';\nimport { ToastyModule } from './toasty';\nimport { CollAppProjectStatusPipe } from './project-status.pipe';\nimport { CollAppUnitPipe } from './unit.pipe';\nimport { SpinnerModule } from '../components/spinner';\nimport { ProgressBarComponent } from './progress-bar/progress-bar.component';\nimport { NotificationDialogComponent } from './dialogs/notification-dialog/notification-dialog.component';\nimport { PersonModule } from '../components/person';\nimport { sharedStates } from '../state';\nimport { DatesRangeModule } from '../components/dates-range';\nimport { ResponsiblesPipe } from './responsibles.pipe';\nimport { ResponsiblesTooltipPipe } from './responsibles-tooltip.pipe';\nimport { CollappDateComponent } from './date/date.component';\nimport { CollappCommonModule } from '../collapp-common';\nimport { AlertModule } from './alert/alert.module';\nimport { AlertComponent } from './alert/alert.component';\n\nconst sharedComponents = [\n CollappDateComponent,\n CollAppCountryNamePipe,\n CollAppProjectStatusPipe,\n CollAppGatePipe,\n CollAppRolePipe,\n CollAppUnitPipe,\n CollAppBadgeComponent,\n ColumnSelectorComponent,\n ColumnSelectorMenuComponent,\n BasicDialogComponent,\n FormActionsComponent,\n NotificationDialogComponent,\n PersonListItemComponent,\n PrimaryNavigationComponent,\n ProgressBarComponent,\n ShowMoreComponent,\n ResponsiblesPipe,\n ResponsiblesTooltipPipe,\n];\n\n/**\n * The Hidden Root Module Strategy™\n * We declare the SharedModule as usual, but in the forRoot() method, we use a module that\n * will be the SharedModule's singleton module. It will only get instantiated once, and used by the forRoot caller.\n *\n * Then in the lazy view we import SharedModule as usual, and that means that we don't instantiate stores or\n * services twice.\n *\n * It's a rather clean workaround for ModuleWithProviders not supporting \"imports\".\n */\n@NgModule({ declarations: [\n ...sharedComponents,\n ],\n exports: [\n CommonModule,\n CollappButtonModule,\n FormSectionModule,\n ProjectTreeStructureModule,\n UnitSelectModule,\n NgSelectMaterialModule,\n PeopleSelectModule,\n PersonModule,\n PersonIconModule,\n FormAttachmentsModule,\n SpinnerModule,\n DatesRangeModule,\n ...sharedComponents,\n AlertComponent,\n ], imports: [CommonModule,\n FormsModule,\n RouterModule,\n ReactiveFormsModule,\n MaterialModule,\n NgxFileDropModule,\n FlexLayoutModule,\n CollappCommonModule,\n CollappButtonModule,\n FormSectionModule,\n ProjectTreeStructureModule,\n UnitSelectModule,\n NgSelectMaterialModule,\n PeopleSelectModule,\n PersonModule,\n PersonIconModule,\n FormAttachmentsModule,\n SpinnerModule,\n DatesRangeModule,\n AlertModule], providers: [provideHttpClient(withInterceptorsFromDi())] })\nexport class SharedModule {\n static forRoot(): ModuleWithProviders {\n return {\n ngModule: RootSharedModule, // eslint-disable-line @typescript-eslint/no-use-before-define\n };\n }\n}\n\n/**\n * Special module that is only used when calling forRoot()\n */\n@NgModule({\n imports: [\n NgxsModule.forFeature([\n ...sharedStates,\n ]),\n\n // import so that the module calling forRoot() gets hold of all the stuff too.\n SharedModule,\n ToastyModule.forRoot(),\n ],\n providers: [ // Services that should be shared across modules\n ],\n exports: [\n SharedModule,\n ToastyModule,\n ],\n})\nexport class RootSharedModule {\n}\n","import {\n Component, HostBinding, Input, OnDestroy, ViewEncapsulation,\n} from '@angular/core';\nimport { Subject } from 'rxjs';\nimport { BasicUser } from '../../models/user.interface';\n\n@Component({\n selector: 'person-list-item',\n templateUrl: './person-list-item.component.html',\n styleUrls: ['./person-list-item.component.scss'],\n encapsulation: ViewEncapsulation.None,\n standalone: false\n})\nexport class PersonListItemComponent implements OnDestroy {\n @HostBinding('class.person-list-item')\n readonly personListItem: boolean = true;\n\n @Input()\n size: string = 'small';\n\n @Input()\n badge: string | null = null;\n\n @Input()\n tooltipSuffix: string | null = null;\n\n @Input()\n nameLength: 'large' | 'huge' |'normal' = 'normal';\n\n get user(): BasicUser | null | undefined {\n return this._user;\n }\n\n @Input()\n set user(value: BasicUser | null | undefined) {\n this._user = value;\n }\n\n private _user: BasicUser | null | undefined;\n\n private destroyed$: Subject = new Subject();\n\n ngOnDestroy(): void {\n this.destroyed$.next();\n this.destroyed$.complete();\n }\n}\n","\n\n {{ user | collAppUser }}\n\n","import {\n Component, ElementRef, Input, OnInit, ViewChild,\n} from '@angular/core';\n\n/**\n * @title Configurable progress-bar\n */\n@Component({\n selector: 'collapp-progress-bar',\n templateUrl: './progress-bar.component.html',\n styleUrls: ['./progress-bar.component.scss'],\n standalone: false\n})\nexport class ProgressBarComponent implements OnInit {\n @Input() color: string = 'primary';\n\n @Input() mode: string = 'determinate';\n\n @Input()\n get value(): number {\n return this._value;\n }\n\n set value(value: number) {\n this._value = value;\n this.setProgress(this.value);\n }\n\n @ViewChild('progressBar', { static: true }) progressBar!: ElementRef;\n\n @ViewChild('progressBarFill', { static: true })\n progressBarFill!: ElementRef;\n\n @ViewChild('progressBarLabelLight', { static: true })\n progressBarLabelLight!: ElementRef;\n\n progressBarWarn: boolean = false;\n\n progressBarLabel: number = 0;\n\n private _value: number = 0;\n\n ngOnInit(): void {\n this.setProgress(this.value);\n }\n\n private setProgress(progressValue: number): void {\n let newValue = progressValue;\n\n if (newValue > 100) {\n this.progressBarWarn = true;\n newValue = 100;\n }\n\n if (newValue < 0) {\n this.progressBarWarn = false;\n newValue = 0;\n }\n\n this.progressBarLabel = this.value;\n this.progressBarFill.nativeElement.style.width = progressValue > 100 ? '100%' : `${progressValue}%`;\n }\n}\n","
    \n
    {{ progressBarLabel }} %
    \n
    \n
    {{ progressBarLabel }} %
    \n
    \n
    \n","/**\n * Project status\n */\nexport enum ProjectStatus {\n Active = 0,\n Archived = 1,\n}\n","import { Pipe, PipeTransform } from '@angular/core';\nimport { ProjectStatus } from '../models/project-status.enum';\n\n@Pipe({\n name: 'collAppProjectStatus',\n standalone: false\n})\nexport class CollAppProjectStatusPipe implements PipeTransform {\n transform(value?: ProjectStatus): any {\n if (value == null) {\n return '';\n }\n\n if (value === ProjectStatus.Active) {\n return 'Active';\n }\n\n if (value === ProjectStatus.Archived) {\n return 'Archived';\n }\n\n throw new Error(`Unknown project status '${value}'`);\n }\n}\n","import { Pipe, PipeTransform } from '@angular/core';\nimport { isEmpty } from '../helpers/utilities';\n\n@Pipe({\n name: 'responsiblesTooltipPipe',\n standalone: false\n})\nexport class ResponsiblesTooltipPipe implements PipeTransform {\n transform(value: string): string | null {\n if (!isEmpty(value) && value.includes(', ')) {\n const listOfResponsibles = value.split(', ');\n if (listOfResponsibles.length < 3) {\n return null;\n }\n\n return value;\n }\n\n return null;\n }\n}\n","import { Pipe, PipeTransform } from '@angular/core';\nimport { isEmpty } from '../helpers/utilities';\n\n@Pipe({\n name: 'responsiblesPipe',\n standalone: false\n})\nexport class ResponsiblesPipe implements PipeTransform {\n transform(value: string, maxResponsibles: number): string {\n if (!isEmpty(value) && value.includes(', ')) {\n const listOfResponsibles = value.split(', ');\n if (listOfResponsibles.length <= maxResponsibles) {\n return value;\n }\n\n return `${listOfResponsibles\n .splice(0, maxResponsibles)\n .join(', ')} ...`;\n }\n\n return value;\n }\n}\n","import { Component, Input } from '@angular/core';\nimport {\n animate, state, style, transition, trigger,\n} from '@angular/animations';\n\n@Component({\n selector: 'collapp-show-more',\n templateUrl: './show-more.component.html',\n styleUrls: [\n './show-more.component.scss',\n ],\n animations: [\n trigger('collapsedExpanded', [\n state('collapsed', style({\n 'max-height': 0,\n })),\n state('expanded', style({\n 'max-height': 2000,\n })),\n transition('collapsed => expanded', [\n animate('0.5s'),\n ]),\n transition('expanded => collapsed', [\n animate('0.5s'),\n ]),\n ]),\n trigger('pointDownOrUp', [\n state('down', style({\n transform: 'rotate(0)',\n })),\n state('up', style({\n transform: 'rotate(180deg)',\n })),\n transition('down => up', [\n animate('0.25s'),\n ]),\n transition('up => down', [\n animate('0.25s'),\n ]),\n ]),\n ],\n standalone: false\n})\nexport class ShowMoreComponent {\n @Input() expanded: boolean = false;\n\n toggleState(): void {\n this.expanded = !this.expanded;\n }\n}\n","
    \n
    \n \n
    \n
    \n \n
    \n
    \n","// Copyright (C) 2016 Sergey Akopkokhyants\n// This project is licensed under the terms of the MIT license.\n// https://github.com/cadulis/ngx-toasty\n\nimport { ModuleWithProviders, NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { PortalModule } from '@angular/cdk/portal';\nimport { MatIconModule } from '@angular/material/icon';\nimport { ToastyComponent } from './toasty.component';\nimport { ToastComponent } from './toast.component';\nimport { ToastyConfig, ToastyService, toastyServiceFactory } from './toasty.service';\nimport { SafeHtmlPipe } from './safe.pipe';\n\nexport * from './toasty.service';\nexport * from './toasty.component';\nexport * from './toast.component';\n\nexport const providers = [\n ToastyConfig,\n { provide: ToastyService, useFactory: toastyServiceFactory, deps: [ToastyConfig] },\n];\n\n@NgModule({\n imports: [\n CommonModule,\n PortalModule,\n MatIconModule,\n ],\n declarations: [\n ToastComponent,\n ToastyComponent,\n SafeHtmlPipe,\n ],\n exports: [ToastComponent, ToastyComponent],\n providers,\n})\nexport class ToastyModule {\n static forRoot(): ModuleWithProviders {\n return {\n ngModule: ToastyModule,\n providers,\n };\n }\n}\n","import { DomSanitizer } from '@angular/platform-browser';\nimport { PipeTransform, Pipe } from '@angular/core';\n\n@Pipe({\n name: 'safeHtml',\n standalone: false\n})\nexport class SafeHtmlPipe implements PipeTransform {\n constructor(private domSanitized: DomSanitizer) {}\n\n transform(value: any): any {\n return this.domSanitized.bypassSecurityTrustHtml(value);\n }\n}\n","
    \n @if (toast.showClose) {\n
    \n close\n
    \n }\n @if (toast.portal || toast.title || toast.msg) {\n
    \n @if (toast.type === 'success') {\n check\n }\n @if (toast.type !== 'success') {\n {{toast.type}}\n }\n
    \n }\n @if (toast.portal || toast.title || toast.msg) {\n
    \n @if (toast.portal) {\n \n } @else {\n @if (toast.title) {\n \n }\n @if (toast.msg) {\n \n }\n }\n
    \n }\n
    ","// Copyright (C) 2016 Sergey Akopkokhyants\n// This project is licensed under the terms of the MIT license.\n// https://github.com/cadulis/ngx-toasty\n\nimport {\n Component, EventEmitter, InjectionToken, Input, OnInit, Output,\n} from '@angular/core';\n\nimport {\n animate, state, style, transition, trigger,\n} from '@angular/animations';\nimport { ToastData } from './toasty.service';\n\nexport const TOAST_DATA = new InjectionToken('ToastData');\n\n/**\n * How long the animation transitions should last.\n */\nconst TRANSITION_DURATION = 300;\n\n/**\n * A Toast component shows message with title and close button.\n */\n@Component({\n selector: 'ngx-toast',\n // TODO: check if it is possible with changeDetection: ChangeDetectionStrategy.OnPush,\n templateUrl: \"./toast.component.html\",\n animations: [\n trigger('flyInOut', [\n state('inactive', style({\n display: 'none',\n opacity: 0,\n })),\n state('active', style({})),\n state('removed', style({ opacity: 0 })),\n transition('inactive => active', animate(`${TRANSITION_DURATION}ms ease-in`)),\n transition('active => removed', animate(`${TRANSITION_DURATION}ms ease-in`)),\n ]),\n ],\n standalone: false\n})\nexport class ToastComponent implements OnInit {\n @Input() toast!: ToastData;\n\n @Output()\n readonly clickToast: EventEmitter = new EventEmitter();\n\n @Output()\n readonly closeToast: EventEmitter = new EventEmitter();\n\n ngOnInit(): void {\n const { toast } = this;\n\n // Set initial state\n toast.state = 'inactive';\n\n setTimeout(() => {\n // Start fadeIn animation\n toast.state = 'active';\n }, 100);\n\n setTimeout(() => {\n // Make sure toast remove animation happens before it is removed from the array\n toast.state = 'removed';\n }, toast.timeout - TRANSITION_DURATION);\n }\n\n /**\n * Event handler invokes when user clicks on toast.\n * This method emit new event into ToastyContainer to process click on toast.\n */\n click($event: any): void {\n if ($event.target.nodeName.toUpperCase() !== 'A') {\n $event.preventDefault();\n this.clickToast.next(this.toast);\n }\n }\n\n /**\n * Event handler invokes when user clicks on close button.\n * This method emit new event into ToastyContainer to close it.\n */\n close($event: any): void {\n $event.preventDefault();\n this.closeToast.next(this.toast);\n }\n}\n","
    \n @for (toast of toasts; track toastTrackByFn($index, toast)) {\n \n }\n
    ","// Copyright (C) 2016 Sergey Akopkokhyants\n// This project is licensed under the terms of the MIT license.\n// https://github.com/cadulis/ngx-toasty\nimport {\n Component, Input, OnDestroy, OnInit, ViewEncapsulation,\n} from '@angular/core';\nimport { Subject } from 'rxjs';\nimport { takeUntil } from 'rxjs/operators';\nimport { isFunction } from './toasty.utils';\nimport {\n ToastData, ToastyConfig, ToastyEvent, ToastyEventType, ToastyService,\n} from './toasty.service';\n\n/**\n * Toasty is container for Toast components\n */\n@Component({\n selector: 'ngx-toasty',\n templateUrl: \"./toasty.component.html\",\n styleUrls: ['./toasty.component.scss'],\n encapsulation: ViewEncapsulation.None,\n standalone: false\n})\nexport class ToastyComponent implements OnInit, OnDestroy {\n /**\n * Set of constants defins position of Toasty on the page.\n */\n private static POSITIONS: string[] = ['bottom-right', 'bottom-left', 'top-right', 'top-left', 'top-center', 'bottom-center', 'center-center'];\n\n @Input() set position(value: string) {\n let newValue = value;\n\n if (newValue) {\n const notFound = !ToastyComponent.POSITIONS.some((position) => position === newValue);\n\n if (notFound) {\n // Position was wrong - clear it here to use the one from config.\n newValue = this.config.position;\n }\n } else {\n newValue = this.config.position;\n }\n\n this._position = `toasty-position-${newValue}`;\n }\n\n get position(): string {\n return this._position;\n }\n\n // The storage for toasts.\n toasts: ToastData[] = [];\n\n private _position: string = '';\n\n private readonly destroyed$: Subject = new Subject();\n\n constructor(private config: ToastyConfig, private toastyService: ToastyService) {\n // Initialise position\n this.position = '';\n }\n\n /**\n * `ngOnInit` is called right after the directive's data-bound properties have been checked for the\n * first time, and before any of its children have been checked. It is invoked only once when the\n * directive is instantiated.\n */\n ngOnInit(): any {\n // We listen events from our service\n this.toastyService.events$\n .pipe(takeUntil(this.destroyed$))\n .subscribe((event: ToastyEvent) => {\n if (event.type === ToastyEventType.ADD) {\n // Add the new one\n this.add(event.value);\n } else if (event.type === ToastyEventType.CLEAR) {\n // Clear the one by number\n this.clear(event.value);\n } else if (event.type === ToastyEventType.CLEAR_ALL) {\n // Lets clear all toasts\n this.clearAll();\n }\n });\n }\n\n ngOnDestroy(): void {\n this.destroyed$.next();\n this.destroyed$.complete();\n }\n\n /**\n * Event listener of 'clickToast' event comes from ToastyComponent.\n * This method executes click option callback associated with this Toast.\n */\n clickToast(toast: ToastData): void {\n if (toast.onClick && isFunction(toast.onClick)) {\n this.clear(toast.id);\n toast.onClick.apply(this, toast);\n }\n }\n\n /**\n * Event listener of 'closeToast' event comes from ToastyComponent.\n * This method removes ToastComponent associated with this Toast.\n */\n closeToast(toast: ToastData): void {\n this.clear(toast.id);\n }\n\n /**\n * Add new Toast\n */\n add(toast: ToastData): void {\n // If we've gone over our limit, remove the earliest\n // one from the array (last toast)\n if (this.toasts.length >= this.config.limit) {\n this.toasts.pop();\n }\n\n // Add toasty to the beginning array\n this.toasts.unshift(toast);\n\n // If there's a timeout individually or globally,\n // set the toast to timeout\n if (toast.timeout) {\n this._setTimeout(toast);\n }\n }\n\n /**\n * Clear individual toast by id\n * @param id is unique identifier of Toast\n */\n clear(id: number): void {\n if (id) {\n this.toasts.forEach((value: any, key: number) => {\n if (value.id === id) {\n if (value.onRemove && isFunction(value.onRemove)) {\n value.onRemove.call(this, value);\n }\n this.toasts.splice(key, 1);\n }\n });\n } else {\n throw new Error('Please provide id of Toast to close');\n }\n }\n\n /**\n * Clear all toasts\n */\n clearAll(): void {\n this.toasts.forEach((value: any) => {\n if (value.onRemove && isFunction(value.onRemove)) {\n value.onRemove.call(this, value);\n }\n });\n this.toasts = [];\n }\n\n toastTrackByFn(index: number, toast: ToastData): any {\n return toast.id;\n }\n\n /**\n * Custom setTimeout function for specific setTimeouts on individual toasts.\n */\n private _setTimeout(toast: ToastData): void {\n window.setTimeout(() => {\n this.clear(toast.id);\n }, toast.timeout);\n }\n}\n","// Copyright (C) 2016 Sergey Akopkokhyants\n// This project is licensed under the terms of the MIT license.\n// https://github.com/cadulis/ngx-toasty\n\nimport { Injectable } from '@angular/core';\n\nimport { Observable, Subject } from 'rxjs';\nimport { Portal } from '@angular/cdk/portal';\nimport { isFunction, isNumber, isString } from './toasty.utils';\nimport { FileDownloadResponseModel } from '../../api/models/responses/file-download.response.model';\nimport moment from 'moment';\n\n/**\n * Options to configure specific Toast\n */\nexport interface ToastOptions {\n title?: string;\n msg?: string;\n portal?: Portal;\n showClose?: boolean;\n timeout?: number;\n onAdd?: () => void;\n onRemove?: () => void;\n onClick?: () => void;\n}\n\n/**\n * Structure of Toast\n */\nexport interface ToastData {\n id: number;\n title: string | null | undefined;\n msg: string | undefined;\n portal: Portal | undefined;\n state: 'inactive' | 'active' | 'removed';\n showClose: boolean;\n type: string;\n timeout: number;\n onAdd: (() => void) | null | undefined;\n onRemove: (() => void) | null | undefined;\n onClick: (() => void) | null | undefined;\n}\n\n/**\n * Default configuration foa all toats and toasty container\n */\n@Injectable({\n providedIn: 'root',\n})\nexport class ToastyConfig {\n // Maximum number of toasties to show at once\n limit: number = 5;\n\n // Whether to show the 'X' icon to close the toast\n showClose: boolean = true;\n\n // The window position where the toast pops up\n position: 'bottom-right' | 'bottom-left' | 'top-right' | 'top-left' | 'top-center' | 'bottom-center' | 'center-center' = 'top-right';\n\n // How long (in miliseconds) the toasty shows before it's removed. Set to null/0 to turn off.\n timeout: number = 4000;\n}\n\n/**\n * Event Types of Toasts\n */\nexport enum ToastyEventType {\n ADD,\n CLEAR,\n CLEAR_ALL,\n}\n\n/**\n * The different types of Toasts\n */\nexport enum ToastType {\n INFO = 'info',\n SUCCESS = 'success',\n ERROR = 'error',\n WARNING = 'warning',\n FILEDOWNLOAD = 'fileDownload',\n}\n\n/**\n * Event\n */\nexport class ToastyEvent {\n constructor(public type: ToastyEventType, public value?: any) {}\n}\n\n/**\n * Toasty service helps to create different kinds of Toasts\n */\n@Injectable({\n providedIn: 'root',\n})\nexport class ToastyService {\n events$: Observable;\n\n private eventSource$: Subject;\n\n private uniqueCounter: number = 0;\n\n constructor(private config: ToastyConfig) {\n this.eventSource$ = new Subject();\n this.events$ = this.eventSource$.asObservable();\n }\n\n /**\n * Create Toast of info type\n * @param {object} options Individual toasty config overrides\n */\n info(options: ToastOptions|string|number): number {\n return this.add(options, ToastType.INFO);\n }\n\n /**\n * Create Toast of success type\n * @param {object} options Individual toasty config overrides\n */\n success(options: ToastOptions|string|number): number {\n return this.add(options, ToastType.SUCCESS);\n }\n\n /**\n *\n * Show a Toast for provide a downloadable file\n *\n * @param title\n * @param text\n * @param linkName\n * @param response\n */\n fileDownload(title: string, text: string, linkName: string, response: FileDownloadResponseModel): number {\n if (title.length > 2 && linkName.length > 0 && response != null) {\n return this.add({\n title,\n msg: `${text}\n

    \n
    \n (valid until ${moment.utc(response.validUntil).local().format('YYYY-MM-DD HH:mm')})
    `,\n timeout: 0,\n }, ToastType.SUCCESS);\n }\n return -1;\n }\n\n /**\n * Create Toast of error type\n * @param {object} options Individual toasty config overrides\n */\n error(options: ToastOptions|string|number): number {\n let optionsNew: any = {};\n\n if ((isString(options) && options !== '') || isNumber(options)) {\n optionsNew = {\n msg: options.toString(),\n timeout: 0,\n };\n } else if (!Object.prototype.hasOwnProperty.call(options, 'timeout')) {\n optionsNew = { ...options, timeout: 0 };\n } else {\n optionsNew = options;\n }\n\n return this.add(optionsNew, ToastType.ERROR);\n }\n\n /**\n * Create Toast of warning type\n * @param {object} options Individual toasty config overrides\n */\n warning(options: ToastOptions|string|number): number {\n let optionsNew: any = {};\n\n if ((isString(options) && options !== '') || isNumber(options)) {\n optionsNew = {\n msg: options.toString(),\n timeout: 0,\n };\n } else if (!Object.prototype.hasOwnProperty.call(options, 'timeout')) {\n optionsNew = { ...options, timeout: 0 };\n } else {\n optionsNew = options;\n }\n\n return this.add(optionsNew, ToastType.WARNING);\n }\n\n // Clear all toasts\n clearAll(): void {\n // this.clearEmitter.next(null);\n this.emitEvent(new ToastyEvent(ToastyEventType.CLEAR_ALL));\n }\n\n // Clear the specific one\n clear(id: number): void {\n // this.clearEmitter.next(id);\n this.emitEvent(new ToastyEvent(ToastyEventType.CLEAR, id));\n }\n\n // Add a new toast item\n private add(options: ToastOptions|string|number, type: ToastType): number {\n let toastyOptions: ToastOptions | '';\n\n if ((isString(options) && options !== '') || isNumber(options)) {\n toastyOptions = {\n msg: options.toString(),\n };\n } else {\n toastyOptions = options;\n }\n\n if (!toastyOptions || (!toastyOptions.title && !toastyOptions.msg && !toastyOptions.portal)) {\n throw new Error('ng2-toasty: No toast title, message or portal specified!');\n }\n\n const newType = type || ToastType.INFO;\n\n // Set a unique counter for an id\n this.uniqueCounter += 1;\n\n // Set the local vs global config items\n const showClose = this._checkConfigItem(this.config, toastyOptions, 'showClose');\n\n // If there's a timeout individually or globally, set the toast to timeout\n // Allows a caller to pass null/0 and override the default. Can also set the default to null/0 to turn off.\n const timeout = (Object.prototype.hasOwnProperty.call(toastyOptions, 'timeout') ? toastyOptions.timeout : this.config.timeout) || 0;\n\n const toast: ToastData = {\n id: this.uniqueCounter,\n title: toastyOptions.title,\n msg: toastyOptions.msg,\n portal: toastyOptions.portal,\n state: 'inactive',\n showClose,\n type: newType,\n timeout,\n onAdd: toastyOptions.onAdd && isFunction(toastyOptions.onAdd) ? toastyOptions.onAdd : null,\n onRemove: toastyOptions.onRemove && isFunction(toastyOptions.onRemove) ? toastyOptions.onRemove : null,\n onClick: toastyOptions.onClick && isFunction(toastyOptions.onClick) ? toastyOptions.onClick : null,\n };\n\n // Push up a new toast item\n // this.toastsSubscriber.next(toast);\n // this.toastsEmitter.next(toast);\n this.emitEvent(new ToastyEvent(ToastyEventType.ADD, toast));\n // If we have a onAdd function, call it here\n if (toastyOptions.onAdd && isFunction(toastyOptions.onAdd)) {\n toastyOptions.onAdd.call(this, toast);\n }\n\n return this.uniqueCounter;\n }\n\n // Checks whether the local option is set, if not,\n // checks the global config\n private _checkConfigItem(config: any, options: any, property: string): any {\n if (options[property] === false) {\n return false;\n } if (!options[property]) {\n return config[property];\n }\n\n return true;\n }\n\n private emitEvent(event: ToastyEvent): void {\n if (this.eventSource$) {\n // Push up a new event\n this.eventSource$.next(event);\n }\n }\n}\n\n/**\n * Factory\n * @param config\n */\nexport function toastyServiceFactory(config: ToastyConfig): ToastyService {\n return new ToastyService(config);\n}\n","/**\n * Check and return true if an object is type of string\n */\nexport function isString(obj: any): obj is string {\n return typeof obj === 'string';\n}\n\n/**\n * Check and return true if an object is type of number\n */\nexport function isNumber(obj: any): obj is number {\n return typeof obj === 'number';\n}\n\n/**\n * Check and return true if an object is type of Function\n */\nexport function isFunction(obj: any): obj is () => any {\n return typeof obj === 'function';\n}\n","import { Pipe, PipeTransform } from '@angular/core';\nimport { Unit } from '../models/unit.interface';\n\n@Pipe({\n name: 'collAppUnit',\n standalone: false\n})\nexport class CollAppUnitPipe implements PipeTransform {\n transform(value?: Unit | Unit[] | null): any {\n if (value == null) {\n return '';\n }\n\n if (Array.isArray(value)) {\n return value\n .map((unit: Unit) => unit.name)\n .join(', ');\n }\n\n return value.name;\n }\n}\n","import { UserDtoModel } from '../../api/models/dtos/user.dto.model';\n\nexport class RefreshBaseData {\n static readonly type: string = '[App] Refresh Base Data';\n\n constructor(\n public user: UserDtoModel,\n public force: boolean = false,\n ) {}\n}\n\nexport class ClearBaseData {\n static readonly type: string = '[App] Clear Base Data';\n}\n\nexport class CreateUnit {\n static readonly type: string = '[App] Created Unit';\n\n constructor(public unitId: number) {}\n}\n\nexport class UpdateUnit {\n static readonly type: string = '[App] Updated Unit';\n\n constructor(public unitId: number) {}\n}\n\nexport class DisableUnit {\n static readonly type: string = '[App] Disabled Unit';\n\n constructor(public unitId: number) {}\n}\n\nexport class CreateQuestion {\n static readonly type: string = '[App] Create Question';\n}\n\nexport class UpdateQuestion {\n static readonly type: string = '[App] Update Question';\n}\n\nexport class CreateConclusion {\n static readonly type: string = '[App] Create Conclusion';\n}\n\nexport class CreateReopen {\n static readonly type: string = '[App] Create Reopen';\n}\n\nexport class CreateReply {\n static readonly type: string = '[App] Create Reply';\n}\n\n/**\n * Currently only used for dispatching events. No data is persisted in the store.\n */\nexport class CreateUser {\n static readonly type: string = '[App] Create User';\n\n // constructor(public user: UserListDtoModel) {}\n}\n\n/**\n * Currently only used for dispatching events. No data is persisted in the store.\n */\nexport class UpdateUser {\n static readonly type: string = '[App] Update User';\n\n // constructor(public user: UserListDtoModel) {}\n}\n\n/**\n * Currently only used for dispatching events. No data is persisted in the store.\n */\nexport class CreateNonHumanResource {\n static readonly type: string = '[App] Create Non-Human Resource';\n\n // constructor(public user: NonHumanResourceListDtoModel) {}\n}\n\n/**\n * Currently only used for dispatching events. No data is persisted in the store.\n */\nexport class UpdateNonHumanResource {\n static readonly type: string = '[App] Update Non-Human Resource';\n\n // constructor(public user: NonHumanResourceListDtoModel) {}\n}\n\nexport class MarkImpersonation {\n static readonly type: string = '[App] Mark impersonation';\n\n constructor(public state: boolean) {}\n}\n","import { Injectable } from '@angular/core';\nimport { Action, State, StateContext } from '@ngxs/store';\nimport { forkJoin, Observable, from } from 'rxjs';\nimport { map } from 'rxjs/operators';\nimport { BaseDataStateModel } from './base-data-state.model';\nimport { BaseDataService } from '../../api/services/base-data.service';\nimport { CountryDtoModel } from '../../api/models/dtos/country.dto.model';\nimport { GateDtoModel } from '../../api/models/dtos/gate.dto.model';\nimport { ClearBaseData, MarkImpersonation, RefreshBaseData } from './base-data.actions';\nimport { ProjectTypeDtoModel } from '../../api/models/dtos/project-type.dto.model';\nimport { RoleListDtoModel } from '../../api/models/dtos/role-list.dto.model';\nimport { RatingDtoModel } from '../../api/models/dtos/rating.dto.model';\nimport { ContractModel } from '../../api/contract-model';\nimport { ContractModelType } from '../../models/contract-model-type.enum';\nimport { ResourceLinkDtoModel } from '../../api/models/dtos/resource-link.dto.model';\n\nfunction countriesSortFn(a: CountryDtoModel, b: CountryDtoModel): number {\n return a.name.localeCompare(b.name);\n}\n\n// @TODO Move these to the API?\nconst baseContractModels: ContractModel[] = [\n {\n contractModelId: ContractModelType.NamedResources,\n name: 'Named Resources',\n },\n {\n contractModelId: ContractModelType.ProjectBasedOrder,\n name: 'Project-based Order',\n },\n];\n\nconst defaultBaseDataState: BaseDataStateModel = {\n countries: [],\n gates: [],\n projectTypes: [],\n roles: [],\n ratings: [],\n links: [],\n contractModels: [...baseContractModels],\n eTag: '',\n hasImpersonatedUser: false,\n};\n\n@State({\n name: 'baseData',\n defaults: defaultBaseDataState,\n})\n@Injectable({\n providedIn: 'root',\n})\nexport class BaseDataState {\n constructor(\n private baseDataService: BaseDataService,\n ) {}\n\n // eslint-disable-next-line max-lines-per-function\n @Action(RefreshBaseData)\n // eslint-disable-next-line complexity\n refreshBaseData$(\n ctx: StateContext,\n { user, force }: RefreshBaseData,\n ): Observable {\n const state = ctx.getState();\n\n const refresh = force || state.hasImpersonatedUser || state.eTag !== user.metadata?.fields.eTag_lookup;\n\n const requests = [\n refresh || state.countries.length === 0\n ? this.baseDataService.getAllCountries$()\n : from([state.countries]),\n refresh || state.gates.length === 0\n ? this.baseDataService.getAllGates$()\n : from([state.gates]),\n refresh || state.projectTypes.length === 0\n ? this.baseDataService.getAllProjectTypes$()\n : from([state.projectTypes]),\n refresh || state.roles.length === 0\n ? this.baseDataService.getAllRoles$()\n : from([state.roles.map((role) => RoleListDtoModel.fromJSON(role))]),\n refresh || state.ratings.length === 0\n ? this.baseDataService.getAllRatings$()\n : from([state.ratings]),\n refresh || state.links.length === 0\n ? this.baseDataService.getAllLinks$()\n : from([state.links]),\n ];\n\n return forkJoin(requests)\n .pipe(\n map(([\n countries,\n gates,\n projectTypes,\n roles,\n ratings,\n links,\n ]: [\n CountryDtoModel[],\n GateDtoModel[],\n ProjectTypeDtoModel[],\n RoleListDtoModel[],\n RatingDtoModel[],\n ResourceLinkDtoModel[]\n ]) => ({\n countries: [...countries].sort(countriesSortFn),\n gates,\n projectTypes,\n roles,\n ratings,\n links,\n })),\n map((result) => {\n ctx.patchState({\n ...result,\n eTag: user.metadata.fields.eTag_lookup,\n });\n\n return ctx.getState();\n }),\n );\n }\n\n @Action(ClearBaseData)\n clearBaseData(ctx: StateContext): void {\n ctx.setState(defaultBaseDataState);\n }\n\n @Action(MarkImpersonation)\n markImpersonation(ctx: StateContext, { state }: MarkImpersonation): void {\n ctx.patchState({\n hasImpersonatedUser: state,\n });\n }\n}\n","import { createSelector, Selector } from '@ngxs/store';\nimport { ProjectTypeCode } from '../../models/project-type.enum';\nimport { BaseDataState } from './base-data.state';\nimport { BaseDataStateModel } from './base-data-state.model';\nimport { CountryDtoModel } from '../../api/models/dtos/country.dto.model';\nimport { RoleListDtoModel } from '../../api/models/dtos/role-list.dto.model';\nimport { GateDtoModel } from '../../api/models/dtos/gate.dto.model';\nimport { RatingDtoModel } from '../../api/models/dtos/rating.dto.model';\nimport { ContractModel } from '../../api/contract-model';\nimport { ProjectTypeDtoModel } from '../../api/models/dtos/project-type.dto.model';\nimport { ResourceLinkDtoModel } from '../../api/models/dtos/resource-link.dto.model';\n\nexport class BaseDataSelectors {\n /**\n * Fetches a project type by its code (id), excluding types that can only be used as supplier.\n * @param code\n */\n static basicProjectTypeByCode(code: string): (state: BaseDataStateModel) => ProjectTypeDtoModel | undefined {\n return createSelector([BaseDataState], (state: BaseDataStateModel) => {\n const projectType = state.projectTypes.find((item) => item.projectTypeCode === code);\n\n if (projectType && !projectType.useOnlyAsSupplierProjectType) {\n return projectType;\n }\n\n return undefined;\n });\n }\n\n /**\n * Fetches a project type by its code (id). Includes all possibly project types.\n * @param code\n */\n static projectTypeByCode(code: string): (state: BaseDataStateModel) => ProjectTypeDtoModel | undefined {\n return createSelector(\n [BaseDataState],\n (state: BaseDataStateModel) => state.projectTypes.find((item) => item.projectTypeCode === code),\n );\n }\n\n /**\n * Fetches a role by its id.\n * @param roleId\n */\n static roleById(roleId: number): (state: BaseDataStateModel) => RoleListDtoModel | undefined {\n return createSelector(\n [BaseDataState],\n (state: BaseDataStateModel) => state.roles.find((item) => item.roleId === roleId),\n );\n }\n\n /**\n * Fetches a gate by its id.\n * @param gateId\n */\n static gateById(gateId: number): (state: BaseDataStateModel) => GateDtoModel | undefined {\n return createSelector(\n [BaseDataState],\n (state: BaseDataStateModel) => state.gates.find((item) => item.gateId === gateId),\n );\n }\n\n static countryByCode(code: string): (state: BaseDataStateModel) => CountryDtoModel | undefined {\n return createSelector(\n [BaseDataState],\n (state: BaseDataStateModel) => state.countries.find((country) => country.countryCode === code),\n );\n }\n\n @Selector([BaseDataState])\n static countries(state: BaseDataStateModel): CountryDtoModel[] {\n return state.countries;\n }\n\n @Selector([BaseDataState])\n static roles(state: BaseDataStateModel): RoleListDtoModel[] {\n return state.roles;\n }\n\n @Selector([BaseDataState])\n static gates(state: BaseDataStateModel): GateDtoModel[] {\n return state.gates;\n }\n\n @Selector([BaseDataState])\n static ratings(state: BaseDataStateModel): RatingDtoModel[] {\n return state.ratings;\n }\n\n @Selector([BaseDataState])\n static contractModels(state: BaseDataStateModel): ContractModel[] {\n return state.contractModels;\n }\n\n @Selector([BaseDataState])\n static links(state: BaseDataStateModel): ResourceLinkDtoModel[] {\n return state.links;\n }\n\n /**\n * Fetches the default project types, excluding types that can only be used as supplier.\n * @param state\n */\n @Selector([BaseDataState])\n static basicProjectTypes(state: BaseDataStateModel): ProjectTypeDtoModel[] {\n // Only use actual project types by\n // ignoring the ones marked as useOnlyAsSupplierProjectType & UseOnlyAsAdditionalSupplierProjectType\n // eslint-disable-next-line max-len\n return state.projectTypes.filter((projectType) => !projectType.useOnlyAsSupplierProjectType\n && !projectType.useOnlyAsAdditionalSupplierProjectType\n && projectType.projectTypeCode !== ProjectTypeCode.SameAsSupplier);\n }\n}\n","import { BaseDataState } from './base-data';\nimport { UserState } from './user';\nimport { ProjectState } from './project';\nimport {\n AttachmentListState,\n DashboardState,\n ProjectListState,\n QuestionsListState,\n SettingsState,\n TimecardsState,\n TimesheetState,\n UnitListState,\n UserListState,\n WorkPackageListState,\n WorkPackageQuestionListState,\n UserResourceListState,\n NonHumanResourceListState,\n NonHumanResourcePlanningListState,\n WorkPackageState,\n SkillsState,\n ActivitiesState,\n UserPlanningTotalsState,\n UnitPlanningTotalsState,\n UserPlanningRangeState,\n UnitPlanningRangeState,\n TimesheetRangeState,\n TimesheetTotalsState,\n WorkPackagePlanningTotalsState,\n WorkPackagePlanningRangeState,\n TimecardRangeState,\n WorkpackageSidepanelState,\n UserPlanningSidepanelState,\n UnitPlanningSidepanelIndexState,\n UserPlanningSidepanelIndexState,\n WorkPackageSidepanelIndexState,\n} from './settings';\nimport { UnitPlanningSidepanelState } from './settings/unit-planning-sidepanel';\nimport { ProjectPlanningRangeState } from './settings/project-planning-range/project-planning-range.state';\nimport { ProjectPlanningTotalsState } from './settings/project-planning-totals/project-planning-totals.state';\nimport { UnitPlanningState } from './settings/unit-planning/unit-planning.state';\n\nexport * from './base-data';\nexport * from './user';\nexport * from './project';\nexport * from './settings';\n\nexport const sharedStates = [\n AttachmentListState,\n BaseDataState,\n UserState,\n ProjectState,\n SettingsState,\n DashboardState,\n ProjectListState,\n TimecardsState,\n TimesheetState,\n UnitPlanningState,\n UnitListState,\n NonHumanResourceListState,\n UserListState,\n WorkPackageListState,\n WorkPackageQuestionListState,\n WorkPackageState,\n QuestionsListState,\n UserResourceListState,\n NonHumanResourcePlanningListState,\n SkillsState,\n ActivitiesState,\n UserPlanningTotalsState,\n UnitPlanningTotalsState,\n ProjectPlanningTotalsState,\n UserPlanningRangeState,\n UnitPlanningRangeState,\n ProjectPlanningRangeState,\n TimesheetRangeState,\n TimesheetTotalsState,\n WorkPackagePlanningTotalsState,\n WorkPackagePlanningRangeState,\n TimecardRangeState,\n WorkpackageSidepanelState,\n UserPlanningSidepanelState,\n UnitPlanningSidepanelState,\n UnitPlanningSidepanelIndexState,\n UserPlanningSidepanelIndexState,\n WorkPackageSidepanelIndexState,\n];\n","import { ProjectViewResponseModel } from '../../api/models/responses/project-view.response.model';\nimport { ProjectScopeViewResponseModel } from '../../api/models/responses/project-scope-view.response.model';\nimport { ProjectActivityViewResponseModel } from '../../api/models/responses/project-activity-view.response.model';\nimport { WorkPackageViewResponseModel } from '../../api/models/responses/work-package-view.response.model';\n\n/**\n * Some user action types\n */\nexport enum ProjectActionTypes {\n ClearViews = '[Project] Clear Views',\n SetProjectView = '[Project] Set Project View',\n\n SetProjectActivityView = '[Project] Set Activity View',\n SetProjectScopeView = '[Project] Set Scope View',\n SetWorkPackageView = '[Project] Set Work Package View',\n RefreshAllProjectViews = '[Project] Refresh All Project Views',\n RefreshProjectView = '[Project] Refresh Project View',\n RefreshProjectStructure = '[Project] Refresh Project Structure',\n RefreshWorkPackageView = '[Project] Refresh Work Package View',\n}\n\nexport class ClearViews {\n static readonly type: string = ProjectActionTypes.ClearViews;\n}\n\nexport class SetProjectView {\n static readonly type: string = ProjectActionTypes.SetProjectView;\n\n constructor(public view: ProjectViewResponseModel) {}\n}\n\nexport class SetProjectScopeView {\n static readonly type: string = ProjectActionTypes.SetProjectScopeView;\n\n constructor(public view: ProjectScopeViewResponseModel) {}\n}\n\nexport class SetWorkPackageView {\n static readonly type: string = ProjectActionTypes.SetWorkPackageView;\n\n constructor(public view: WorkPackageViewResponseModel) {}\n}\n\nexport class SetProjectActivityView {\n static readonly type: string = ProjectActionTypes.SetProjectActivityView;\n\n constructor(public view: ProjectActivityViewResponseModel) {}\n}\n\nexport class RefreshAllProjectViews {\n static readonly type: string = ProjectActionTypes.RefreshAllProjectViews;\n\n constructor(public projectId: number) {}\n}\n\nexport class RefreshProjectView {\n static readonly type: string = ProjectActionTypes.RefreshProjectView;\n\n constructor(public projectId: number) {}\n}\n\nexport class RefreshProjectStructure {\n static readonly type: string = ProjectActionTypes.RefreshProjectStructure;\n\n constructor(public projectId: number) {}\n}\n\nexport class RefreshWorkPackageView {\n static readonly type: string = ProjectActionTypes.RefreshWorkPackageView;\n\n constructor(public projectId: number, public workPackageId: number) {}\n}\n","import { Injectable } from '@angular/core';\nimport { Action, State, StateContext } from '@ngxs/store';\nimport { forkJoin, Observable } from 'rxjs';\nimport { map, tap } from 'rxjs/operators';\nimport { ProjectStateModel } from './project-state.model';\nimport {\n ClearViews,\n RefreshAllProjectViews,\n RefreshProjectStructure,\n RefreshProjectView,\n RefreshWorkPackageView,\n SetProjectActivityView,\n SetProjectScopeView,\n SetProjectView,\n SetWorkPackageView,\n} from './project.actions';\nimport { ProjectService } from '../../api/services/project.service';\nimport { ProjectViewResponseModel } from '../../api/models/responses/project-view.response.model';\nimport { ProjectScopeViewResponseModel } from '../../api/models/responses/project-scope-view.response.model';\nimport { WorkPackageViewResponseModel } from '../../api/models/responses/work-package-view.response.model';\nimport { LevelListNestedDtoModel } from '../../api/models/dtos/level-list-nested.dto.model';\n\nconst defaultProjectState: ProjectStateModel = {\n projectView: null,\n projectStructure: [],\n projectScopeView: null,\n projectActivityView: null,\n workPackageView: null,\n};\n\n@State({\n name: 'project',\n defaults: defaultProjectState,\n})\n@Injectable({\n providedIn: 'root',\n})\nexport class ProjectState {\n constructor(\n private projectService: ProjectService,\n ) {\n }\n\n @Action(ClearViews)\n clearViews({ patchState }: StateContext): void {\n patchState({ ...defaultProjectState });\n }\n\n @Action(SetProjectView)\n setProjectView({ patchState }: StateContext, { view }: SetProjectView): void {\n patchState({ projectView: view });\n }\n\n @Action(SetProjectScopeView)\n setProjectScopeView({ patchState }: StateContext, { view }: SetProjectScopeView): void {\n patchState({ projectScopeView: view });\n }\n\n @Action(SetProjectActivityView)\n setProjectActivityView(\n { patchState }: StateContext,\n { view }: SetProjectActivityView,\n ): void {\n patchState({ projectActivityView: view });\n }\n\n @Action(SetWorkPackageView)\n setWorkPackageView({ patchState }: StateContext, { view }: SetWorkPackageView): void {\n patchState({ workPackageView: view });\n }\n\n @Action(RefreshAllProjectViews)\n refreshAllProjectViews$(\n ctx: StateContext,\n { projectId }: RefreshAllProjectViews,\n ): Observable {\n return forkJoin([\n this.projectService.getProjectView$(projectId),\n this.projectService.getProjectScopeView$(projectId),\n // this.projectService.getProjectActivityView(projectId),\n ])\n .pipe(\n tap(([projectView, projectScopeView]: [ProjectViewResponseModel, ProjectScopeViewResponseModel]) => {\n ctx.patchState({\n projectView,\n projectScopeView,\n });\n }),\n map(() => ctx.getState()),\n );\n }\n\n @Action(RefreshProjectView)\n refreshProjectView$(\n ctx: StateContext,\n { projectId }: RefreshProjectView,\n ): Observable {\n return this.projectService\n .getProjectView$(projectId)\n .pipe(\n tap((projectView) => {\n ctx.patchState({ projectView });\n }),\n map(() => ctx.getState()),\n );\n }\n\n @Action(RefreshProjectStructure)\n refreshProjectStructure$(\n ctx: StateContext,\n { projectId }: RefreshProjectStructure,\n ): Observable {\n return this.projectService\n .getProjectStructure$(projectId)\n .pipe(\n tap((projectStructure) => {\n ctx.patchState({\n projectStructure: projectStructure.items as LevelListNestedDtoModel[],\n });\n }),\n map(() => ctx.getState()),\n );\n }\n\n @Action(RefreshWorkPackageView)\n refreshWorkPackageView$(\n ctx: StateContext,\n { projectId, workPackageId }: RefreshWorkPackageView,\n ): Observable {\n return this.projectService.getWorkPackageView$(projectId, workPackageId)\n .pipe(\n tap((workPackageView) => {\n ctx.patchState({\n workPackageView,\n });\n }),\n map(() => ctx.getState()),\n );\n }\n}\n","import { Selector } from '@ngxs/store';\nimport { ProjectState } from './project.state';\nimport { ProjectStateModel } from './project-state.model';\nimport { ProjectViewResponseModel } from '../../api/models/responses/project-view.response.model';\nimport { LevelListNestedDtoModel } from '../../api/models/dtos/level-list-nested.dto.model';\nimport { ProjectScopeViewResponseModel } from '../../api/models/responses/project-scope-view.response.model';\nimport { ProjectActivityViewResponseModel } from '../../api/models/responses/project-activity-view.response.model';\nimport { WorkPackageViewResponseModel } from '../../api/models/responses/work-package-view.response.model';\n\nexport class ProjectSelectors {\n @Selector([ProjectState])\n static projectView(state: ProjectStateModel): ProjectViewResponseModel | null {\n return state.projectView;\n }\n\n @Selector([ProjectState])\n static projectStructure(state: ProjectStateModel): LevelListNestedDtoModel[] {\n return state.projectStructure;\n }\n\n @Selector([ProjectState])\n static projectScopeView(state: ProjectStateModel): ProjectScopeViewResponseModel | null {\n return state.projectScopeView;\n }\n\n @Selector([ProjectState])\n static projectActivityView(state: ProjectStateModel): ProjectActivityViewResponseModel | null {\n return state.projectActivityView;\n }\n\n @Selector([ProjectState])\n static workPackageView(state: ProjectStateModel): WorkPackageViewResponseModel | null {\n return state.workPackageView;\n }\n\n @Selector([ProjectState])\n static projectState(state: ProjectStateModel): ProjectStateModel | null {\n return state;\n }\n}\n","import { ActivitiesStateModel } from './activities-state.model';\n\n/**\n * Action types for ActivitiesState\n */\nexport enum ActivitiesActionTypes {\n InitActivitiesSettings = '[Work Package API] Initialize Activities Settings',\n SetActivitiesSettings = '[Work Package API] Set Activities Settings',\n ResetActivitiesSettings = '[Work Package API] Reset Activities Settings',\n SaveActivitiesSettings = '[Work Package API] Save Work Package Activities Settings',\n}\n\nexport class InitActivitiesSettings {\n static readonly type: string = ActivitiesActionTypes.InitActivitiesSettings;\n\n constructor(public settings: ActivitiesStateModel) {}\n}\n\nexport class SetActivitiesSettings {\n static readonly type: string = ActivitiesActionTypes.SetActivitiesSettings;\n\n constructor(public settings: ActivitiesStateModel) {}\n}\n\nexport class ResetActivitiesSettings {\n static readonly type: string = ActivitiesActionTypes.ResetActivitiesSettings;\n}\n\nexport class SaveActivitiesSettings {\n static readonly type: string = ActivitiesActionTypes.SaveActivitiesSettings;\n\n constructor(public settings: ActivitiesStateModel) {}\n}\n","import { Injectable } from '@angular/core';\nimport { Observable } from 'rxjs';\nimport { Action, State, StateContext } from '@ngxs/store';\nimport { UserService } from '../../../api/services/user.service';\nimport { WORK_PACKAGE_ACTIVITIES_DEFAULT_PAGE_SIZE } from '../../../shared/constants';\nimport { GenericListState } from '../generic-list/generic-list.state';\nimport { ActivitiesStateModel } from './activities-state.model';\nimport {\n InitActivitiesSettings,\n ResetActivitiesSettings,\n SaveActivitiesSettings,\n SetActivitiesSettings,\n} from './activities.actions';\n\n/* eslint-disable @typescript-eslint/no-unused-vars */\n\nconst defaultActivitiesState: ActivitiesStateModel = {\n pageSize: WORK_PACKAGE_ACTIVITIES_DEFAULT_PAGE_SIZE,\n};\n\n/* eslint-enable @typescript-eslint/no-unused-vars */\n\n@State({\n name: 'activities',\n defaults: defaultActivitiesState,\n})\n@Injectable({\n providedIn: 'root',\n})\nexport class ActivitiesState extends GenericListState {\n constructor(\n private userService: UserService,\n ) {\n super();\n }\n\n @Action(InitActivitiesSettings)\n InitActivitiesSettings(ctx: StateContext, { settings }: InitActivitiesSettings): void {\n const { pageSize } = settings;\n\n ctx.patchState({\n pageSize: (pageSize > 0 ? pageSize : 10),\n });\n }\n\n @Action(SetActivitiesSettings)\n setActivitiesSettings$(\n ctx: StateContext,\n { settings }: SetActivitiesSettings,\n ): Observable {\n const { pageSize } = settings;\n\n ctx.patchState({\n pageSize: (pageSize > 0 ? pageSize : 10),\n });\n\n return ctx.dispatch(new SaveActivitiesSettings(ctx.getState()));\n }\n\n @Action(ResetActivitiesSettings)\n resetActivitiesSettings(ctx: StateContext): void {\n ctx.setState(defaultActivitiesState);\n }\n\n @Action(SaveActivitiesSettings)\n saveActivitiesSettings$(\n ctx: StateContext,\n { settings }: SaveActivitiesSettings,\n ): Observable {\n return this.userService.saveActivitiesSettings$(settings);\n }\n}\n","import { Selector } from '@ngxs/store';\nimport { ActivitiesState } from './activities.state';\nimport { ActivitiesStateModel } from './activities-state.model';\n\nexport class ActivitiesSelectors {\n @Selector([ActivitiesState])\n static options(state: ActivitiesStateModel): ActivitiesStateModel {\n return {\n pageSize: state.pageSize,\n };\n }\n}\n","import { GenericListOptions } from '../generic-list';\nimport { AttachmentColumnFilters } from '../../../api/filter-columns';\nimport { AttachmentListStateModel } from './attachment-list-state.model';\n\n/**\n * Action types for AttachmentListState\n */\nexport enum AttachmentListActionTypes {\n InitAttachmentListSettings = '[Attachments] Initialize Attachment List Settings',\n SaveAttachmentListOptions = '[Attachments] Save Options',\n SetAttachmentListSettings = '[Attachments] Set Attachment List Settings',\n ResetAttachmentListSettings = '[Attachments] Reset Attachment List Settings',\n SaveAttachmentListSettings = '[Attachments] Save Attachment List Settings',\n}\n\nexport interface AttachmentListOptions extends GenericListOptions {\n columnFilters: AttachmentColumnFilters;\n}\n\nexport class SaveAttachmentListOptions {\n static readonly type: string = AttachmentListActionTypes.SaveAttachmentListOptions;\n\n constructor(public options: AttachmentListOptions) {}\n}\n\nexport class InitAttachmentListSettings {\n static readonly type: string = AttachmentListActionTypes.InitAttachmentListSettings;\n\n constructor(public settings: AttachmentListStateModel) {}\n}\n\nexport class SetAttachmentListSettings {\n static readonly type: string = AttachmentListActionTypes.SetAttachmentListSettings;\n\n constructor(public settings: AttachmentListStateModel) {}\n}\n\nexport class ResetAttachmentListSettings {\n static readonly type: string = AttachmentListActionTypes.ResetAttachmentListSettings;\n}\n\nexport class SaveAttachmentListSettings {\n static readonly type: string = AttachmentListActionTypes.SaveAttachmentListSettings;\n\n constructor(public settings: AttachmentListStateModel) {}\n}\n","import { Selector } from '@ngxs/store';\nimport { AttachmentListState } from './attachment-list.state';\nimport { AttachmentListOptions } from './attachment-list.actions';\nimport { AttachmentListStateModel } from './attachment-list-state.model';\n\nexport class AttachmentListSelectors {\n @Selector([AttachmentListState])\n static selectedColumns(state: AttachmentListStateModel): AttachmentListStateModel['selectedColumns'] {\n return [...state.selectedColumns];\n }\n\n @Selector([AttachmentListState])\n static options(state: AttachmentListStateModel): AttachmentListOptions {\n return {\n pageIndex: state.pageIndex,\n pageSize: state.pageSize,\n columnFilters: state.columnFilters,\n sortColumn: state.sortColumn,\n sortDirection: state.sortDirection,\n };\n }\n}\n","import { Injectable } from '@angular/core';\nimport { Observable } from 'rxjs';\nimport { Action, State, StateContext } from '@ngxs/store';\nimport { AttachmentListStateModel } from './attachment-list-state.model';\nimport {\n InitAttachmentListSettings,\n ResetAttachmentListSettings,\n SaveAttachmentListOptions,\n SaveAttachmentListSettings,\n SetAttachmentListSettings,\n} from './attachment-list.actions';\nimport { attachmentsListColumnsInfo } from '../../../api/meta-info/attachments-list.info';\nimport { UserService } from '../../../api/services/user.service';\nimport { USER_LIST_DEFAULT_PAGE_SIZE } from '../../../shared/constants';\nimport { GenericListState } from '../generic-list/generic-list.state';\n\n/* eslint-disable @typescript-eslint/no-unused-vars */\n\nconst defaultAttachmentListState: AttachmentListStateModel = {\n selectedColumns: Array.from(attachmentsListColumnsInfo.entries())\n .filter(([_key, value]) => (value.selectable && value.selected))\n .map(([key, _value]) => key),\n pageIndex: 0,\n pageSize: USER_LIST_DEFAULT_PAGE_SIZE,\n columnFilters: {},\n sortColumn: '',\n sortDirection: '',\n};\n\n/* eslint-enable @typescript-eslint/no-unused-vars */\n\n@State({\n name: 'attachmentList',\n defaults: defaultAttachmentListState,\n})\n@Injectable({\n providedIn: 'root',\n})\nexport class AttachmentListState extends GenericListState {\n constructor(\n private userService: UserService,\n ) {\n super();\n }\n\n @Action(SaveAttachmentListOptions)\n setAttachmentListOptions$(\n ctx: StateContext,\n { options }: SaveAttachmentListOptions,\n ): Observable {\n ctx.patchState(this.cloneListOptions(options, attachmentsListColumnsInfo));\n\n return ctx.dispatch(new SaveAttachmentListSettings(ctx.getState()));\n }\n\n @Action(InitAttachmentListSettings)\n initAttachmentListSettings(\n ctx: StateContext,\n { settings }: InitAttachmentListSettings,\n ): void {\n ctx.patchState(this.cloneListSettings(settings, attachmentsListColumnsInfo));\n }\n\n @Action(SetAttachmentListSettings)\n setAttachmentListSettings(\n ctx: StateContext,\n { settings }: SetAttachmentListSettings,\n ): void {\n const newSettings = {\n ...settings,\n // @TODO AttachmentList has no selectable columns. This here prevents issues with\n // messed up user settings from previous \"bad\" saves\n selectedColumns: defaultAttachmentListState.selectedColumns,\n };\n ctx.patchState(this.cloneListSettings(newSettings, attachmentsListColumnsInfo));\n }\n\n @Action(ResetAttachmentListSettings)\n resetAttachmentListSettings(ctx: StateContext): void {\n ctx.setState(defaultAttachmentListState);\n }\n\n @Action(SaveAttachmentListSettings)\n saveAttachmentListSettings$(\n ctx: StateContext,\n { settings }: SaveAttachmentListSettings,\n ): Observable {\n return this.userService.saveAttachmentSettings$(settings);\n }\n}\n","import { DashboardWorkPackageViewType } from '../../../models/dashboard-work-package-view-type.enum';\nimport { WorkPackageCombinedFilterType } from '../../../modules/dashboard/dashboard-work-packages/filter-types';\nimport { DashboardStateModel } from './dashboard-state.model';\n\n/**\n * Action types for DashboardState\n */\nexport enum DashboardActionTypes {\n SetDashboardWorkPackagesFilter = '[Dashboard Page] Set Work Packages Filter',\n SetDashboardWorkPackageFilter = '[Dashboard Page] Set Dashboard Work Package Filter',\n SetDashboardSettings = '[User API] Set Dashboard Settings',\n ResetDashboardSettings = '[User API] Reset Dashboard Settings',\n SaveDashboardSettings = '[User API] Save Dashboard Settings',\n InitDashboardSettings = '[User API] Init Dashboard Settings',\n}\n\nexport class SetDashboardWorkPackagesFilter {\n static readonly type: string = DashboardActionTypes.SetDashboardWorkPackagesFilter;\n\n constructor(public filterType: WorkPackageCombinedFilterType) {}\n}\n\nexport class SetDashboardWorkPackageFilter {\n static readonly type: string = DashboardActionTypes.SetDashboardWorkPackageFilter;\n\n constructor(public viewType: DashboardWorkPackageViewType[]) {}\n}\n\nexport class SetDashboardSettings {\n static readonly type: string = DashboardActionTypes.SetDashboardSettings;\n\n constructor(public settings: DashboardStateModel) {}\n}\n\nexport class ResetDashboardSettings {\n static readonly type: string = DashboardActionTypes.ResetDashboardSettings;\n}\n\nexport class SaveDashboardSettings {\n static readonly type: string = DashboardActionTypes.SaveDashboardSettings;\n\n constructor(public settings: DashboardStateModel) {}\n}\n\nexport class InitDashboardSettings {\n static readonly type: string = DashboardActionTypes.InitDashboardSettings;\n\n constructor(public settings: DashboardStateModel) {}\n}\n","import { Injectable } from '@angular/core';\nimport { Action, State, StateContext } from '@ngxs/store';\nimport { Observable, of } from 'rxjs';\nimport { UserService } from '../../../api/services/user.service';\nimport { DashboardWorkPackageViewType } from '../../../models/dashboard-work-package-view-type.enum';\nimport { WorkPackageCombinedFilterType } from '../../../modules/dashboard/dashboard-work-packages/filter-types';\nimport { DashboardStateModel } from './dashboard-state.model';\nimport {\n InitDashboardSettings,\n ResetDashboardSettings,\n SaveDashboardSettings,\n SetDashboardSettings,\n SetDashboardWorkPackageFilter,\n SetDashboardWorkPackagesFilter,\n} from './dashboard.actions';\n\nconst defaultDashboardState: DashboardStateModel = {\n workPackagesFilter: WorkPackageCombinedFilterType.TO_BE_ISSUED,\n dashboardWorkPackageFilters: [\n DashboardWorkPackageViewType.SuppplierView,\n DashboardWorkPackageViewType.SubmitterView,\n DashboardWorkPackageViewType.SelfAssignedView,\n ],\n};\n\n@State({\n name: 'dashboard',\n defaults: defaultDashboardState,\n})\n@Injectable({\n providedIn: 'root',\n})\nexport class DashboardState {\n constructor(\n private userService: UserService,\n ) {\n }\n\n @Action(SetDashboardWorkPackagesFilter)\n setWorkPackagesFilter$(\n ctx: StateContext,\n { filterType }: SetDashboardWorkPackagesFilter,\n ): Observable {\n ctx.patchState({\n workPackagesFilter: filterType,\n });\n\n // @TODO Should dashboard settings be persisted?\n return of(undefined);\n // return ctx.dispatch(new SaveDashboardSettings(ctx.getState()));\n }\n\n @Action(SetDashboardWorkPackageFilter)\n setDashboardWorkPackageFilter$(\n ctx: StateContext,\n { viewType }: SetDashboardWorkPackageFilter,\n ): Observable {\n ctx.patchState({\n dashboardWorkPackageFilters: viewType,\n });\n\n return ctx.dispatch(new SaveDashboardSettings(ctx.getState()));\n }\n\n @Action(SetDashboardSettings)\n setDashboardSettings$(\n ctx: StateContext,\n { settings }: SetDashboardSettings,\n ): Observable {\n ctx.patchState({\n workPackagesFilter: settings.workPackagesFilter,\n dashboardWorkPackageFilters: settings.dashboardWorkPackageFilters,\n });\n\n return ctx.dispatch(new SaveDashboardSettings(ctx.getState()));\n }\n\n @Action(ResetDashboardSettings)\n resetDashboardSettings(ctx: StateContext): void {\n ctx.setState(defaultDashboardState);\n }\n\n @Action(SaveDashboardSettings)\n saveDashboardSettings$(\n ctx: StateContext,\n { settings }: SaveDashboardSettings,\n ): Observable {\n return this.userService.saveDashboardSettings$(settings.dashboardWorkPackageFilters);\n }\n\n @Action(InitDashboardSettings)\n initDashboardSettings(ctx: StateContext, { settings }: InitDashboardSettings): void {\n ctx.patchState(settings);\n }\n}\n","import { Selector } from '@ngxs/store';\nimport { WorkPackageCombinedFilterType } from '../../../modules/dashboard/dashboard-work-packages/filter-types';\nimport { DashboardState } from './dashboard.state';\nimport { DashboardStateModel } from './dashboard-state.model';\nimport { DashboardWorkPackageViewType } from '../../../models/dashboard-work-package-view-type.enum';\n\nexport class DashboardSelectors {\n @Selector([DashboardState])\n static workPackagesFilter(state: DashboardStateModel): WorkPackageCombinedFilterType {\n return state.workPackagesFilter;\n }\n\n @Selector([DashboardState])\n static dashboardWorkPackageFilters(state: DashboardStateModel): DashboardWorkPackageViewType[] {\n return state.dashboardWorkPackageFilters;\n }\n}\n","import { GenericListOptions } from './generic-list-options';\nimport { GenericListStateModel } from './generic-list-state.model';\nimport { ListColumnInfo, ObjectStringKeys } from '../../../api/meta-info/base';\nimport { ReadonlyCompleteMap } from '../../../app.types';\n\nexport abstract class GenericListState {\n /**\n * Clones the selected columns so that the resulting object can be used\n * directly in the stores' `patchState()` method.\n */\n protected cloneSelectedColumns(\n selectedColumns: ObjectStringKeys[] | null | undefined,\n viewListInfo: ReadonlyCompleteMap, ListColumnInfo>,\n ): { selectedColumns: ObjectStringKeys[] } {\n const sanitizedSelectedColumns = (selectedColumns ? [...selectedColumns] : [])\n .filter((columnKey) => {\n const colInfo = viewListInfo.get(columnKey);\n\n return (colInfo && colInfo.selectable) || false;\n });\n\n return {\n selectedColumns: sanitizedSelectedColumns,\n };\n }\n\n /**\n * Clones the list options so that the resulting object can be used\n * directly in the stores' `patchState()` method.\n */\n protected cloneListOptions(\n options: GenericListOptions,\n viewListInfo: ReadonlyCompleteMap,\n ): GenericListOptions {\n const {\n pageIndex,\n pageSize,\n columnFilters,\n sortColumn,\n sortDirection,\n } = options;\n\n const sanitizedColumnFilters: Record = {};\n\n if (columnFilters) {\n Object.keys(columnFilters).forEach((columnKey) => {\n const colInfo = viewListInfo.get(columnKey);\n if (\n colInfo\n && colInfo.selectable\n && colInfo.filterable\n ) {\n sanitizedColumnFilters[columnKey] = columnFilters[columnKey];\n }\n });\n }\n\n const sanitizedSortColumn = (\n sortColumn\n && viewListInfo.has(sortColumn)\n && viewListInfo.get(sortColumn).sortable\n ? sortColumn\n : ''\n );\n\n return {\n pageIndex: (pageIndex > 0 ? pageIndex : 0),\n pageSize: (pageSize > 0 ? pageSize : 10),\n columnFilters: sanitizedColumnFilters,\n sortColumn: sanitizedSortColumn,\n sortDirection,\n };\n }\n\n /**\n * Clones the list settings so that the resulting object can be used\n * directly in the stores' `patchState()` method.\n */\n protected cloneListSettings(\n settings: GenericListStateModel,\n viewListInfo: ReadonlyCompleteMap,\n ): GenericListStateModel {\n const {\n selectedColumns,\n pageIndex,\n pageSize,\n columnFilters,\n sortColumn,\n sortDirection,\n } = settings;\n\n const sanitizedSelectedColumns = (selectedColumns ? [...selectedColumns] : [])\n .filter((columnKey) => {\n const colInfo = viewListInfo.get(columnKey);\n\n return (colInfo && colInfo.selectable) || false;\n });\n\n const sanitizedColumnFilters: Record = {};\n if (columnFilters) {\n Object.keys(columnFilters).forEach((columnKey) => {\n if (\n sanitizedSelectedColumns.includes(columnKey)\n && viewListInfo.get(columnKey).filterable\n ) {\n sanitizedColumnFilters[columnKey] = columnFilters[columnKey];\n }\n });\n }\n\n const sanitizedSortColumn = (\n sortColumn\n && sanitizedSelectedColumns.includes(sortColumn)\n && viewListInfo.get(sortColumn).sortable\n ? sortColumn\n : ''\n );\n\n return {\n selectedColumns: sanitizedSelectedColumns,\n pageIndex: (pageIndex > 0 ? pageIndex : 0),\n pageSize: (pageSize > 0 ? pageSize : 10),\n columnFilters: sanitizedColumnFilters,\n sortColumn: sanitizedSortColumn,\n sortDirection,\n };\n }\n}\n","/**\n * Action types for settings.\n */\nexport enum SettingsActionTypes {\n SetTestString = '[Settings] Set Test String',\n}\n\nexport class SetTestString {\n static readonly type: string = SettingsActionTypes.SetTestString;\n\n constructor(public test: string) {}\n}\n","/**\n * Action types for TimecardsState\n */\nexport enum TimecardsActionTypes {\n SetNonProductiveCategoriesListExpandedState = '[Timecards Page] Set Non Productive Categories List Expanded State',\n SetProjectsListExpandedState = '[Timecards Page] Set Projects List Expanded State',\n AddExpandedProjectId = '[Timecards Page] Add Expanded Project Id',\n RemoveExpandedProjectId = '[Timecards Page] Remove Expanded Project Id',\n}\n\nexport class SetNonProductiveCategoriesListExpandedState {\n static readonly type: string = TimecardsActionTypes.SetNonProductiveCategoriesListExpandedState;\n\n constructor(readonly expanded: boolean) {}\n}\n\nexport class SetProjectsListExpandedState {\n static readonly type: string = TimecardsActionTypes.SetProjectsListExpandedState;\n\n constructor(readonly expanded: boolean) {}\n}\n\nexport class AddExpandedProjectId {\n static readonly type: string = TimecardsActionTypes.AddExpandedProjectId;\n\n constructor(readonly projectId: number) {}\n}\n\nexport class RemoveExpandedProjectId {\n static readonly type: string = TimecardsActionTypes.RemoveExpandedProjectId;\n\n constructor(readonly projectId: number) {}\n}\n","import { Injectable } from '@angular/core';\nimport { Action, State, StateContext } from '@ngxs/store';\nimport { TimecardsStateModel } from './timecards-state.model';\nimport {\n AddExpandedProjectId,\n RemoveExpandedProjectId,\n SetNonProductiveCategoriesListExpandedState,\n SetProjectsListExpandedState,\n} from './timecards.actions';\n\nconst defaultTimecardsState: TimecardsStateModel = {\n nonProductiveCategoriesListExpanded: false,\n projectsListExpanded: true,\n collapsedProjectsIds: [],\n};\n\n@State({\n name: 'timecards',\n defaults: defaultTimecardsState,\n})\n@Injectable({\n providedIn: 'root',\n})\nexport class TimecardsState {\n @Action(SetNonProductiveCategoriesListExpandedState)\n setNonProductiveCategoriesListExpandedState(\n ctx: StateContext,\n\n { expanded }: SetNonProductiveCategoriesListExpandedState,\n ): void {\n ctx.patchState({\n nonProductiveCategoriesListExpanded: expanded,\n });\n }\n\n @Action(SetProjectsListExpandedState)\n setProjectsListExpandedState(\n ctx: StateContext,\n { expanded }: SetProjectsListExpandedState,\n ): void {\n ctx.patchState({\n projectsListExpanded: expanded,\n });\n }\n\n @Action(AddExpandedProjectId)\n addExpandedProjectsId(ctx: StateContext, { projectId }: AddExpandedProjectId): void {\n const { collapsedProjectsIds } = ctx.getState();\n const set = new Set(collapsedProjectsIds);\n\n set.add(projectId);\n\n ctx.patchState({\n collapsedProjectsIds: Array.from(set),\n });\n }\n\n @Action(RemoveExpandedProjectId)\n removeExpandedProjectsId(\n ctx: StateContext,\n { projectId }: RemoveExpandedProjectId,\n ): void {\n const { collapsedProjectsIds } = ctx.getState();\n\n ctx.patchState({\n collapsedProjectsIds: collapsedProjectsIds.filter((id) => id !== projectId),\n });\n }\n}\n","import { Selector } from '@ngxs/store';\nimport { TimecardsState } from './timecards.state';\nimport { TimecardsStateModel } from './timecards-state.model';\n\nexport class TimecardsSelectors {\n @Selector([TimecardsState])\n static nonProductiveCategoriesListExpanded(state: TimecardsStateModel): boolean {\n return state.nonProductiveCategoriesListExpanded;\n }\n\n @Selector([TimecardsState])\n static projectsListExpanded(state: TimecardsStateModel): boolean {\n return state.projectsListExpanded;\n }\n\n @Selector([TimecardsState])\n static collapsedProjectsIds(state: TimecardsStateModel): number[] {\n return [...state.collapsedProjectsIds];\n }\n}\n","import { TimecardRangeStateModel } from './timecard-range-state.model';\n\n/**\n * Action types for TimecardRangeState\n */\nexport enum TimecardRangeActionTypes {\n InitTimecardRangeSettings = '[Timecard API] Initialize Timecard Range Settings',\n SetTimecardRangeSettings = '[Timecard API] Set Timecard Range Settings',\n ResetTimecardRangeSettings = '[Timecard API] Reset Timecard Range Settings',\n SaveTimecardRangeSettings = '[Timecard API] Save Timecard Range Settings',\n}\n\nexport class InitTimecardRangeSettings {\n static readonly type: string = TimecardRangeActionTypes.InitTimecardRangeSettings;\n\n constructor(public settings: TimecardRangeStateModel) {}\n}\n\nexport class SetTimecardRangeSettings {\n static readonly type: string = TimecardRangeActionTypes.SetTimecardRangeSettings;\n\n constructor(public settings: TimecardRangeStateModel) {}\n}\n\nexport class ResetTimecardRangeSettings {\n static readonly type: string = TimecardRangeActionTypes.ResetTimecardRangeSettings;\n}\n\nexport class SaveTimecardRangeSettings {\n static readonly type: string = TimecardRangeActionTypes.SaveTimecardRangeSettings;\n\n constructor(public settings: TimecardRangeStateModel) {}\n}\n","import { Injectable } from '@angular/core';\nimport { Observable } from 'rxjs';\nimport { Action, State, StateContext } from '@ngxs/store';\nimport { TimecardRangeStateModel } from './timecard-range-state.model';\nimport {\n InitTimecardRangeSettings,\n ResetTimecardRangeSettings,\n SaveTimecardRangeSettings,\n SetTimecardRangeSettings,\n} from './timecard-range.actions';\nimport { UserService } from '../../../api/services/user.service';\nimport { GenericListState } from '../generic-list/generic-list.state';\n\n/* eslint-disable @typescript-eslint/no-unused-vars */\n\nconst defaultTimecardRangeState: TimecardRangeStateModel = {\n range: null,\n};\n\n/* eslint-enable @typescript-eslint/no-unused-vars */\n\n@State({\n name: 'TimecardRange',\n defaults: defaultTimecardRangeState,\n})\n@Injectable({\n providedIn: 'root',\n})\nexport class TimecardRangeState extends GenericListState {\n constructor(\n private userService: UserService,\n ) {\n super();\n }\n\n @Action(InitTimecardRangeSettings)\n initTimecardRangeSettings(\n ctx: StateContext,\n { settings }: InitTimecardRangeSettings,\n ): void {\n ctx.patchState({\n range: settings.range,\n });\n }\n\n @Action(SetTimecardRangeSettings)\n setTimecardRangeSettings$(\n ctx: StateContext,\n { settings }: SetTimecardRangeSettings,\n ): Observable {\n ctx.patchState({\n range: settings.range,\n });\n\n return ctx.dispatch(new SaveTimecardRangeSettings(ctx.getState()));\n }\n\n @Action(ResetTimecardRangeSettings)\n resetTimecardRangeSettings(ctx: StateContext): void {\n ctx.setState(defaultTimecardRangeState);\n }\n\n @Action(SaveTimecardRangeSettings)\n saveTimecardRangeSettings$(\n ctx: StateContext,\n { settings }: SaveTimecardRangeSettings,\n ): Observable {\n return this.userService.saveTimecardRangeSettings$(settings);\n }\n}\n","import { WorkPackagePlanningRangeStateModel } from './work-package-planning-range-state.model';\n\n/**\n * Action types for WorkPackagePlanningRangeState\n */\nexport enum WorkPackagePlanningRangeActionTypes {\n InitWorkPackagePlanningRangeSettings = '[WP Planning API] Initialize WP Planning Range Settings',\n SetWorkPackagePlanningRangeSettings = '[WP Planning API] Set WP Planning Range Settings',\n ResetWorkPackagePlanningRangeSettings = '[WP Planning API] Reset WP Planning Range Settings',\n SaveWorkPackagePlanningRangeSettings = '[WP Planning API] Save WP Planning Range Settings',\n}\n\nexport class InitWorkPackagePlanningRangeSettings {\n static readonly type: string = WorkPackagePlanningRangeActionTypes.InitWorkPackagePlanningRangeSettings;\n\n constructor(public settings: WorkPackagePlanningRangeStateModel) {}\n}\n\nexport class SetWorkPackagePlanningRangeSettings {\n static readonly type: string = WorkPackagePlanningRangeActionTypes.SetWorkPackagePlanningRangeSettings;\n\n constructor(public settings: WorkPackagePlanningRangeStateModel) {}\n}\n\nexport class ResetWorkPackagePlanningRangeSettings {\n static readonly type: string = WorkPackagePlanningRangeActionTypes.ResetWorkPackagePlanningRangeSettings;\n}\n\nexport class SaveWorkPackagePlanningRangeSettings {\n static readonly type: string = WorkPackagePlanningRangeActionTypes.SaveWorkPackagePlanningRangeSettings;\n\n constructor(public settings: WorkPackagePlanningRangeStateModel) {}\n}\n","import { Injectable } from '@angular/core';\nimport { Observable } from 'rxjs';\nimport { Action, State, StateContext } from '@ngxs/store';\nimport { WorkPackagePlanningRangeStateModel } from './work-package-planning-range-state.model';\nimport {\n InitWorkPackagePlanningRangeSettings,\n ResetWorkPackagePlanningRangeSettings,\n SaveWorkPackagePlanningRangeSettings,\n SetWorkPackagePlanningRangeSettings,\n} from './work-package-planning-range.actions';\nimport { UserService } from '../../../api/services/user.service';\nimport { GenericListState } from '../generic-list/generic-list.state';\n\n/* eslint-disable @typescript-eslint/no-unused-vars */\n\nconst defaultWorkPackagePlanningRangeState: WorkPackagePlanningRangeStateModel = {\n range: null,\n};\n\n/* eslint-enable @typescript-eslint/no-unused-vars */\n\n@State({\n name: 'WorkPackagePlanningRange',\n defaults: defaultWorkPackagePlanningRangeState,\n})\n@Injectable({\n providedIn: 'root',\n})\nexport class WorkPackagePlanningRangeState extends GenericListState {\n constructor(\n private userService: UserService,\n ) {\n super();\n }\n\n @Action(InitWorkPackagePlanningRangeSettings)\n initWorkPackagePlanningRangeSettings(\n ctx: StateContext,\n { settings }: InitWorkPackagePlanningRangeSettings,\n ): void {\n ctx.patchState({\n range: settings.range,\n });\n }\n\n @Action(SetWorkPackagePlanningRangeSettings)\n setWorkPackagePlanningRangeSettings$(\n ctx: StateContext,\n { settings }: SetWorkPackagePlanningRangeSettings,\n ): Observable {\n ctx.patchState({\n range: settings.range,\n });\n\n return ctx.dispatch(new SaveWorkPackagePlanningRangeSettings(ctx.getState()));\n }\n\n @Action(ResetWorkPackagePlanningRangeSettings)\n resetWorkPackagePlanningRangeSettings(ctx: StateContext): void {\n ctx.setState(defaultWorkPackagePlanningRangeState);\n }\n\n @Action(SaveWorkPackagePlanningRangeSettings)\n saveWorkPackagePlanningRangeSettings$(\n ctx: StateContext,\n { settings }: SaveWorkPackagePlanningRangeSettings,\n ): Observable {\n return this.userService.saveWorkPackagePlanningRangeSettings$(settings);\n }\n}\n","import { WorkPackagePlanningTotalsStateModel } from './work-package-planning-totals-state.model';\n\n/**\n * Action types for WorkPackagePlanningTotalsState\n */\nexport enum WorkPackagePlanningTotalsActionTypes {\n InitWorkPackagePlanningTotalsSettings = '[WP Planning API] Initialize WP Planning Totals Settings',\n SetWorkPackagePlanningTotalsSettings = '[WP Planning API] Set WP Planning Totals Settings',\n ResetWorkPackagePlanningTotalsSettings = '[WP Planning API] Reset WP Planning Totals Settings',\n SaveWorkPackagePlanningTotalsSettings = '[WP Planning API] Save WP Planning Totals Settings',\n}\n\nexport class InitWorkPackagePlanningTotalsSettings {\n static readonly type: string = WorkPackagePlanningTotalsActionTypes.InitWorkPackagePlanningTotalsSettings;\n\n constructor(public settings: WorkPackagePlanningTotalsStateModel) {}\n}\n\nexport class SetWorkPackagePlanningTotalsSettings {\n static readonly type: string = WorkPackagePlanningTotalsActionTypes.SetWorkPackagePlanningTotalsSettings;\n\n constructor(public settings: WorkPackagePlanningTotalsStateModel) {}\n}\n\nexport class ResetWorkPackagePlanningTotalsSettings {\n static readonly type: string = WorkPackagePlanningTotalsActionTypes.ResetWorkPackagePlanningTotalsSettings;\n}\n\nexport class SaveWorkPackagePlanningTotalsSettings {\n static readonly type: string = WorkPackagePlanningTotalsActionTypes.SaveWorkPackagePlanningTotalsSettings;\n\n constructor(public settings: WorkPackagePlanningTotalsStateModel) {}\n}\n","import { Injectable } from '@angular/core';\nimport { Observable } from 'rxjs';\nimport { Action, State, StateContext } from '@ngxs/store';\nimport { WorkPackagePlanningTotalsStateModel } from './work-package-planning-totals-state.model';\nimport {\n InitWorkPackagePlanningTotalsSettings,\n ResetWorkPackagePlanningTotalsSettings,\n SaveWorkPackagePlanningTotalsSettings,\n SetWorkPackagePlanningTotalsSettings,\n} from './work-package-planning-totals.actions';\nimport { UserService } from '../../../api/services/user.service';\nimport { GenericListState } from '../generic-list/generic-list.state';\n\n/* eslint-disable @typescript-eslint/no-unused-vars */\n\nconst defaultWorkPackagePlanningTotalsState: WorkPackagePlanningTotalsStateModel = {\n selectedTotals: ['total'],\n};\n\n/* eslint-enable @typescript-eslint/no-unused-vars */\n\n@State({\n name: 'WorkPackagePlanningTotals',\n defaults: defaultWorkPackagePlanningTotalsState,\n})\n@Injectable({\n providedIn: 'root',\n})\nexport class WorkPackagePlanningTotalsState extends GenericListState {\n constructor(\n private userService: UserService,\n ) {\n super();\n }\n\n @Action(InitWorkPackagePlanningTotalsSettings)\n initWorkPackagePlanningTotalsSettings(\n ctx: StateContext,\n { settings }: InitWorkPackagePlanningTotalsSettings,\n ): void {\n ctx.patchState({\n selectedTotals: settings.selectedTotals,\n });\n }\n\n @Action(SetWorkPackagePlanningTotalsSettings)\n setWorkPackagePlanningTotalsSettings$(\n ctx: StateContext,\n { settings }: SetWorkPackagePlanningTotalsSettings,\n ): Observable {\n ctx.patchState({\n selectedTotals: settings.selectedTotals,\n });\n\n return ctx.dispatch(new SaveWorkPackagePlanningTotalsSettings(ctx.getState()));\n }\n\n @Action(ResetWorkPackagePlanningTotalsSettings)\n resetWorkPackagePlanningTotalsSettings(ctx: StateContext): void {\n ctx.setState(defaultWorkPackagePlanningTotalsState);\n }\n\n @Action(SaveWorkPackagePlanningTotalsSettings)\n saveWorkPackagePlanningTotalsSettings$(\n ctx: StateContext,\n { settings }: SaveWorkPackagePlanningTotalsSettings,\n ): Observable {\n return this.userService.saveWorkPackagePlanningTotalsSettings$(settings);\n }\n}\n","import { Injectable } from '@angular/core';\nimport { Observable } from 'rxjs';\nimport { Action, State, StateContext } from '@ngxs/store';\nimport { WorkpackageSidepanelStateModel } from './work-package-sidepanel-state.model';\nimport { UserService } from '../../../api/services/user.service';\nimport {\n CloseWorkpackageSidepanel,\n InitWorkpackageSidepanel,\n OpenWorkpackageSidepanel,\n ToggleWorkpackageSidepanel,\n} from './work-package-sidepanel.actions';\n\nconst openState: WorkpackageSidepanelStateModel = { isOpen: true };\nconst closedState: WorkpackageSidepanelStateModel = { isOpen: false };\nconst defaultState: WorkpackageSidepanelStateModel = openState;\n\n@State({\n name: 'WorkPackageSidePanel',\n defaults: defaultState,\n})\n@Injectable({\n providedIn: 'root',\n})\nexport class WorkpackageSidepanelState {\n constructor(\n private userService: UserService,\n ) { }\n\n @Action(InitWorkpackageSidepanel)\n initWorkpackageSidepanel(\n ctx: StateContext,\n { isOpen }: InitWorkpackageSidepanel,\n ): void {\n ctx.setState(\n isOpen,\n );\n }\n\n @Action(OpenWorkpackageSidepanel)\n openWorkpackageSidepanel$(ctx: StateContext): Observable {\n ctx.patchState(openState);\n\n return this.userService.saveWorkPackageSidepanel$(openState);\n }\n\n @Action(CloseWorkpackageSidepanel)\n closeWorkpackageSidepanel$(ctx: StateContext): Observable {\n ctx.patchState(closedState);\n\n return this.userService.saveWorkPackageSidepanel$(closedState);\n }\n\n @Action(ToggleWorkpackageSidepanel)\n toggleWorkpackageSidepanel$(ctx: StateContext): Observable {\n const action = ctx.getState().isOpen ? new CloseWorkpackageSidepanel() : new OpenWorkpackageSidepanel();\n\n return ctx.dispatch(action);\n }\n}\n","import { Injectable } from '@angular/core';\nimport { Action, State, StateContext } from '@ngxs/store';\nimport { SettingsStateModel } from './settings-state.model';\nimport { SetTestString } from './settings.actions';\nimport { AttachmentListState } from './attachment-list';\nimport { DashboardState } from './dashboard';\nimport { ProjectListState } from './project-list';\nimport { TimecardsState } from './timecards';\nimport { TimesheetState } from './timesheet';\nimport { UnitListState } from './unit-list';\nimport { UserListState } from './user-list';\nimport { WorkPackageListState } from './work-package-list';\nimport { WorkPackageQuestionListState } from './work-package-question-list';\nimport { QuestionsListState } from './questions-list';\nimport { UserResourceListState } from './user-resource-list';\nimport { NonHumanResourceListState } from './non-human-resource-list';\nimport { WorkPackageState } from './work-package';\nimport { SkillsState } from './skills';\nimport { ActivitiesState } from './activities';\nimport { UserPlanningTotalsState } from './user-planning-totals/user-planning-totals.state';\nimport { UnitPlanningTotalsState } from './unit-planning-totals';\nimport { UnitPlanningRangeState } from './unit-planning-range/unit-planning-range.state';\nimport { UserPlanningRangeState } from './user-planning-range/user-planning-range.state';\nimport { TimesheetRangeState } from './timesheet-range/timesheet-range.state';\nimport { TimecardRangeState } from './timecard-range/timecard-range.state';\nimport { WorkPackagePlanningRangeState } from './work-package-planning-range/work-package-planning-range.state';\nimport { WorkPackagePlanningTotalsState } from './work-package-planning-totals/work-package-planning-totals.state';\nimport { TimesheetTotalsState } from './timesheet-totals/timesheet-totals.state';\nimport { WorkpackageSidepanelState } from './work-package-sidepanel/work-package-sidepanel.state';\nimport { UserPlanningSidepanelState } from './user-planning-sidepanel/user-planning-sidepanel.state';\nimport { ProjectPlanningTotalsState } from './project-planning-totals/project-planning-totals.state';\nimport { UnitPlanningState } from './unit-planning/unit-planning.state';\n\nconst defaultSettingState: SettingsStateModel = {\n test: null,\n};\n\n@State({\n name: 'settings',\n defaults: defaultSettingState,\n children: [\n AttachmentListState,\n DashboardState,\n ProjectListState,\n TimecardsState,\n TimesheetState,\n SkillsState,\n UnitPlanningState,\n UnitListState,\n NonHumanResourceListState,\n UserListState,\n WorkPackageListState,\n WorkPackageQuestionListState,\n WorkPackageState,\n QuestionsListState,\n UserResourceListState,\n ActivitiesState,\n UserPlanningTotalsState,\n UnitPlanningTotalsState,\n ProjectPlanningTotalsState,\n UserPlanningRangeState,\n UnitPlanningRangeState,\n TimesheetRangeState,\n TimecardRangeState,\n WorkPackagePlanningRangeState,\n WorkPackagePlanningTotalsState,\n TimesheetTotalsState,\n WorkpackageSidepanelState,\n UserPlanningSidepanelState,\n ],\n})\n@Injectable({\n providedIn: 'root',\n})\nexport class SettingsState {\n @Action(SetTestString)\n setLoginUser({ patchState }: StateContext, { test }: SetTestString): void {\n patchState({\n test,\n });\n }\n}\n","import { Selector } from '@ngxs/store';\nimport { SettingsState } from './settings.state';\nimport { SettingsStateModel } from './settings-state.model';\n\nexport class SettingsSelectors {\n @Selector([SettingsState])\n static test(state: SettingsStateModel): string | null {\n return state.test;\n }\n}\n","import { Selector } from '@ngxs/store';\nimport { TimecardRangeStateModel } from './timecard-range-state.model';\nimport { TimecardRangeState } from './timecard-range.state';\n\nexport class TimecardRangeSelectors {\n @Selector([TimecardRangeState])\n static range(state: TimecardRangeStateModel): TimecardRangeStateModel['range'] {\n return state.range;\n }\n}\n","import { Selector } from '@ngxs/store';\nimport { WorkPackagePlanningRangeStateModel } from './work-package-planning-range-state.model';\nimport { WorkPackagePlanningRangeState } from './work-package-planning-range.state';\n\nexport class WorkPackagePlanningRangeSelectors {\n @Selector([WorkPackagePlanningRangeState])\n static range(state: WorkPackagePlanningRangeStateModel): WorkPackagePlanningRangeStateModel['range'] {\n return state.range;\n }\n}\n","import { Selector } from '@ngxs/store';\nimport { WorkPackagePlanningTotalsStateModel } from './work-package-planning-totals-state.model';\nimport { WorkPackagePlanningTotalsState } from './work-package-planning-totals.state';\n\nexport class WorkPackagePlanningTotalsSelectors {\n @Selector([WorkPackagePlanningTotalsState])\n static selectedTotals(state: WorkPackagePlanningTotalsStateModel): WorkPackagePlanningTotalsStateModel['selectedTotals'] {\n return state.selectedTotals;\n }\n}\n","import { Injectable } from '@angular/core';\nimport { Selector } from '@ngxs/store';\nimport { WorkpackageSidepanelStateModel } from './work-package-sidepanel-state.model';\nimport { WorkpackageSidepanelState } from './work-package-sidepanel.state';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class WorkpackageSidepanelSelectors {\n @Selector([WorkpackageSidepanelState])\n static isOpen(state: WorkpackageSidepanelStateModel): boolean {\n return state.isOpen;\n }\n}\n","import { UserPlanningSidepanelIndexStateModel } from './user-planning-sidepanel-index-state.model';\n\n/**\n * Action types for UserPlanningSidepanelIndex\n */\nexport enum UserPlanningSidepanelIndexActionTypes {\n InitUserPlanningSidepanelIndex = '[UserPlanningSidepanelIndex API] Initialize Sidepanel',\n SetUserPlanningSidepanelIndex = '[UserPlanningSidepanelIndex API] Set UserPlanningSidepanelIndex',\n ResetUserPlanningSidepanelIndex = '[UserPlanningSidepanelIndex API] Reset UserPlanningSidepanelIndex',\n}\n\nexport class InitUserPlanningSidepanelIndex {\n static readonly type: string = UserPlanningSidepanelIndexActionTypes.InitUserPlanningSidepanelIndex;\n\n constructor(public settings: UserPlanningSidepanelIndexStateModel) {}\n}\n\nexport class ResetUserPlanningSidepanelIndex {\n static readonly type: string = UserPlanningSidepanelIndexActionTypes.ResetUserPlanningSidepanelIndex;\n}\n\nexport class SetUserPlanningSidepanelIndex {\n static readonly type: string = UserPlanningSidepanelIndexActionTypes.SetUserPlanningSidepanelIndex;\n\n constructor(public settings: UserPlanningSidepanelIndexStateModel) {}\n}\n","import { Injectable } from '@angular/core';\nimport { Observable } from 'rxjs';\nimport { Action, State, StateContext } from '@ngxs/store';\nimport { UserPlanningSidepanelIndexStateModel } from './user-planning-sidepanel-index-state.model';\nimport { UserService } from '../../../api/services/user.service';\nimport {\n InitUserPlanningSidepanelIndex, ResetUserPlanningSidepanelIndex, SetUserPlanningSidepanelIndex,\n} from './user-planning-sidepanel-index.actions';\n\nconst defaultState: UserPlanningSidepanelIndexStateModel = { index: 0 };\n\n@State({\n name: 'UserPlanningSidePanelIndex',\n defaults: defaultState,\n})\n@Injectable({\n providedIn: 'root',\n})\nexport class UserPlanningSidepanelIndexState {\n constructor(\n private userService: UserService,\n ) { }\n\n @Action(InitUserPlanningSidepanelIndex)\n initUserPlanningSidepanelIndex(\n ctx: StateContext,\n { settings }: InitUserPlanningSidepanelIndex,\n ): void {\n ctx.setState(\n { index: settings.index },\n );\n }\n\n @Action(SetUserPlanningSidepanelIndex)\n setUserPlanningSidepanelIndex$(\n ctx: StateContext,\n { settings }: SetUserPlanningSidepanelIndex,\n ): Observable {\n ctx.patchState({ index: settings.index });\n\n return this.userService.saveUserPlanningSidePanelIndex$(ctx.getState());\n }\n\n @Action(ResetUserPlanningSidepanelIndex)\n resetUserPlanningSidepanelIndex(ctx: StateContext): void {\n ctx.setState(defaultState);\n }\n}\n","import { Injectable } from '@angular/core';\nimport { Selector } from '@ngxs/store';\nimport { UserPlanningSidepanelIndexStateModel } from './user-planning-sidepanel-index-state.model';\nimport { UserPlanningSidepanelIndexState } from './user-planning-sidepanel-index.state';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class UserPlanningSidepanelIndexSelectors {\n @Selector([UserPlanningSidepanelIndexState])\n static index(state: UserPlanningSidepanelIndexStateModel): number {\n return state.index;\n }\n}\n","import { WorkPackageSidepanelIndexStateModel } from './work-package-sidepanel-index-state.model';\n\n/**\n * Action types for WorkPackageSidepanelIndex\n */\nexport enum WorkPackageSidepanelIndexActionTypes {\n InitWorkPackageSidepanelIndex = '[WorkPackageSidepanelIndex API] Initialize Sidepanel',\n SetWorkPackageSidepanelIndex = '[WorkPackageSidepanelIndex API] Set WorkPackageSidepanelIndex',\n ResetWorkPackageSidepanelIndex = '[WorkPackageSidepanelIndex API] Reset WorkPackageSidepanelIndex',\n}\n\nexport class InitWorkPackageSidepanelIndex {\n static readonly type: string = WorkPackageSidepanelIndexActionTypes.InitWorkPackageSidepanelIndex;\n\n constructor(public settings: WorkPackageSidepanelIndexStateModel) {}\n}\n\nexport class ResetWorkPackageSidepanelIndex {\n static readonly type: string = WorkPackageSidepanelIndexActionTypes.ResetWorkPackageSidepanelIndex;\n}\n\nexport class SetWorkPackageSidepanelIndex {\n static readonly type: string = WorkPackageSidepanelIndexActionTypes.SetWorkPackageSidepanelIndex;\n\n constructor(public settings: WorkPackageSidepanelIndexStateModel) {}\n}\n","import { Injectable } from '@angular/core';\nimport { Observable } from 'rxjs';\nimport { Action, State, StateContext } from '@ngxs/store';\nimport { WorkPackageSidepanelIndexStateModel } from './work-package-sidepanel-index-state.model';\nimport { UserService } from '../../../api/services/user.service';\nimport {\n InitWorkPackageSidepanelIndex, ResetWorkPackageSidepanelIndex, SetWorkPackageSidepanelIndex,\n} from './work-package-sidepanel-index.actions';\n\nconst defaultState: WorkPackageSidepanelIndexStateModel = { index: 0 };\n\n@State({\n name: 'WorkPackageSidePanelIndex',\n defaults: defaultState,\n})\n@Injectable({\n providedIn: 'root',\n})\nexport class WorkPackageSidepanelIndexState {\n constructor(\n private userService: UserService,\n ) { }\n\n @Action(InitWorkPackageSidepanelIndex)\n initWorkPackageSidepanelIndex(\n ctx: StateContext,\n { settings }: InitWorkPackageSidepanelIndex,\n ): void {\n ctx.setState(\n { index: settings.index },\n );\n }\n\n @Action(SetWorkPackageSidepanelIndex)\n setWorkPackageSidepanelIndex$(\n ctx: StateContext,\n { settings }: SetWorkPackageSidepanelIndex,\n ): Observable {\n ctx.patchState({ index: settings.index });\n\n return this.userService.saveWorkPackageSidePanelIndex$(ctx.getState());\n }\n\n @Action(ResetWorkPackageSidepanelIndex)\n resetWorkPackageSidepanelIndex(ctx: StateContext): void {\n ctx.setState(defaultState);\n }\n}\n","import { Injectable } from '@angular/core';\nimport { Selector } from '@ngxs/store';\nimport { WorkPackageSidepanelIndexStateModel } from './work-package-sidepanel-index-state.model';\nimport { WorkPackageSidepanelIndexState } from './work-package-sidepanel-index.state';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class WorkPackageSidepanelIndexSelectors {\n @Selector([WorkPackageSidepanelIndexState])\n static index(state: WorkPackageSidepanelIndexStateModel): number {\n return state.index;\n }\n}\n","import { Injectable } from '@angular/core';\nimport { Observable } from 'rxjs';\nimport { Action, State, StateContext } from '@ngxs/store';\nimport { NonHumanResourceListStateModel } from './non-human-resource-list-state.model';\nimport {\n InitNonHumanResourceListSettings,\n ResetNonHumanResourceListOptions,\n ResetNonHumanResourceListSettings,\n SaveNonHumanResourceListSettings,\n SetNonHumanResourceListOptions,\n SetNonHumanResourceListSelectedColumns,\n SetNonHumanResourceListSettings,\n} from './non-human-resource-list.actions';\nimport { nonHumanResourcesListColumnsInfo } from '../../../api/meta-info/non-human-resources-list.info';\nimport { UserService } from '../../../api/services/user.service';\nimport { UNIT_LIST_DEFAULT_PAGE_SIZE } from '../../../shared/constants';\nimport { GenericListState } from '../generic-list/generic-list.state';\n\n/* eslint-disable @typescript-eslint/no-unused-vars */\n\nconst defaultNonHumanResourceListState: NonHumanResourceListStateModel = {\n selectedColumns: Array.from(nonHumanResourcesListColumnsInfo.entries())\n .filter(([_key, value]) => (value.selectable && value.selected))\n .map(([key, _value]) => key),\n pageIndex: 0,\n pageSize: UNIT_LIST_DEFAULT_PAGE_SIZE,\n columnFilters: {},\n sortColumn: '',\n sortDirection: '',\n};\n\n/* eslint-enable @typescript-eslint/no-unused-vars */\n\n@State({\n name: 'nonHumanResourceList',\n defaults: defaultNonHumanResourceListState,\n})\n@Injectable({\n providedIn: 'root',\n})\nexport class NonHumanResourceListState extends GenericListState {\n constructor(\n private userService: UserService,\n ) {\n super();\n }\n\n @Action(SetNonHumanResourceListSelectedColumns)\n setNonHumanResourceListSelectedColumns$(\n ctx: StateContext,\n { columns }: SetNonHumanResourceListSelectedColumns,\n ): Observable {\n ctx.patchState(this.cloneSelectedColumns(columns, nonHumanResourcesListColumnsInfo));\n\n return ctx.dispatch(new SaveNonHumanResourceListSettings(ctx.getState()));\n }\n\n @Action(SetNonHumanResourceListOptions)\n setNonHumanResourceListOptions$(\n ctx: StateContext,\n { options }: SetNonHumanResourceListOptions,\n ): Observable {\n ctx.patchState(this.cloneListOptions(options, nonHumanResourcesListColumnsInfo));\n\n return ctx.dispatch(new SaveNonHumanResourceListSettings(ctx.getState()));\n }\n\n @Action(ResetNonHumanResourceListOptions)\n resetNonHumanResourceListOptions$(ctx: StateContext): Observable {\n ctx.patchState({\n columnFilters: {},\n });\n\n return ctx.dispatch(new SaveNonHumanResourceListSettings(ctx.getState()));\n }\n\n @Action(InitNonHumanResourceListSettings)\n InitNonHumanResourceListSettings(\n ctx: StateContext,\n { settings }: InitNonHumanResourceListSettings,\n ): void {\n ctx.patchState(this.cloneListSettings(settings, nonHumanResourcesListColumnsInfo));\n }\n\n @Action(SetNonHumanResourceListSettings)\n setNonHumanResourceListSettings$(\n ctx: StateContext,\n { settings }: SetNonHumanResourceListSettings,\n ): Observable {\n ctx.patchState(this.cloneListSettings(settings, nonHumanResourcesListColumnsInfo));\n\n return ctx.dispatch(new SaveNonHumanResourceListSettings(ctx.getState()));\n }\n\n @Action(ResetNonHumanResourceListSettings)\n resetNonHumanResourceListSettings(ctx: StateContext): void {\n ctx.setState(defaultNonHumanResourceListState);\n }\n\n @Action(SaveNonHumanResourceListSettings)\n saveNonHumanResourceListSettings$(\n ctx: StateContext,\n { settings }: SaveNonHumanResourceListSettings,\n ): Observable {\n return this.userService.saveNonHumanResourceListSettings$(settings);\n }\n}\n","import { Selector } from '@ngxs/store';\nimport { NonHumanResourceListState } from './non-human-resource-list.state';\nimport { NonHumanResourceListOptions } from './non-human-resource-list.actions';\nimport { NonHumanResourceListStateModel } from './non-human-resource-list-state.model';\n\nexport class NonHumanResourceListSelectors {\n @Selector([NonHumanResourceListState])\n static selectedColumns(state: NonHumanResourceListStateModel): NonHumanResourceListStateModel['selectedColumns'] {\n return [...state.selectedColumns];\n }\n\n @Selector([NonHumanResourceListState])\n static options(state: NonHumanResourceListStateModel): NonHumanResourceListOptions {\n return {\n pageIndex: state.pageIndex,\n pageSize: state.pageSize,\n columnFilters: { ...state.columnFilters },\n sortColumn: state.sortColumn,\n sortDirection: state.sortDirection,\n };\n }\n}\n","import { GenericListOptions } from '../generic-list';\nimport { NonHumanResourcesListColumnKey } from '../../../api/meta-info/non-human-resources-list.info';\nimport { NonHumanResourceColumnFilters } from '../../../api/filter-columns';\nimport { NonHumanResourceListStateModel } from './non-human-resource-list-state.model';\n\n/**\n * Action types for NonHumanResourceListState\n */\nexport enum NonHumanResourceListActionTypes {\n SetNonHumanResourceListSelectedColumns = '[Non-Human Resource List Page] Set Selected Columns',\n SetNonHumanResourceListOptions = '[Non-Human Resource List Page] Set Options',\n ResetNonHumanResourceListOptions = '[Non-Human Resource List Page] Reset Options',\n InitNonHumanResourceListSettings = '[User API] Initialize Non-Human Resource List Settings',\n SetNonHumanResourceListSettings = '[User API] Set Non-Human Resource List Settings',\n ResetNonHumanResourceListSettings = '[User API] Reset Non-Human Resource List Settings',\n SaveNonHumanResourceListSettings = '[User API] Save Non-Human Resource List Settings',\n}\n\nexport interface NonHumanResourceListOptions extends GenericListOptions {\n columnFilters: NonHumanResourceColumnFilters;\n}\n\nexport class SetNonHumanResourceListSelectedColumns {\n static readonly type: string = NonHumanResourceListActionTypes.SetNonHumanResourceListSelectedColumns;\n\n constructor(public columns: NonHumanResourcesListColumnKey[]) {}\n}\n\nexport class SetNonHumanResourceListOptions {\n static readonly type: string = NonHumanResourceListActionTypes.SetNonHumanResourceListOptions;\n\n constructor(public options: NonHumanResourceListOptions) {}\n}\n\nexport class ResetNonHumanResourceListOptions {\n static readonly type: string = NonHumanResourceListActionTypes.ResetNonHumanResourceListOptions;\n}\n\nexport class InitNonHumanResourceListSettings {\n static readonly type: string = NonHumanResourceListActionTypes.InitNonHumanResourceListSettings;\n\n constructor(public settings: NonHumanResourceListStateModel) {}\n}\n\nexport class SetNonHumanResourceListSettings {\n static readonly type: string = NonHumanResourceListActionTypes.SetNonHumanResourceListSettings;\n\n constructor(public settings: NonHumanResourceListStateModel) {}\n}\n\nexport class ResetNonHumanResourceListSettings {\n static readonly type: string = NonHumanResourceListActionTypes.ResetNonHumanResourceListSettings;\n}\n\nexport class SaveNonHumanResourceListSettings {\n static readonly type: string = NonHumanResourceListActionTypes.SaveNonHumanResourceListSettings;\n\n constructor(public settings: NonHumanResourceListStateModel) {}\n}\n","import { GenericListOptions } from '../generic-list';\nimport { NonHumanResourcePlanningColumnFilters } from '../../../api/filter-columns';\nimport { NonHumanResourcePlanningListStateModel } from './non-human-resource-planning-list-state.model';\n\n/**\n * Action types for NonHumanResourcePlanningListState\n */\nexport enum NonHumanResourcePlanningListActionTypes {\n SetNonHumanResourcePlanningListSelectedColumns = '[Resource Planning NHR List Page] Set Selected Columns',\n SetNonHumanResourcePlanningListOptions = '[Resource Planning NHR List Page] Set Options',\n InitNonHumanResourcePlanningListSettings = '[Resource Planning NHR API] Initialize Resource Planning List Settings',\n SetNonHumanResourcePlanningListSettings = '[Resource Planning NHR API] Set Resource Planning List Settings',\n ResetNonHumanResourcePlanningListSettings = '[Resource Planning NHR API] Reset Resource Planning List Settings',\n SaveNonHumanResourcePlanningListSettings = '[Resource Planning NHR API] Save Resource Planning List Settings',\n}\n\nexport interface NonHumanResourcePlanningListOptions extends GenericListOptions {\n columnFilters: NonHumanResourcePlanningColumnFilters;\n}\n\nexport class SetNonHumanResourcePlanningListSelectedColumns {\n static readonly type: string = NonHumanResourcePlanningListActionTypes\n .SetNonHumanResourcePlanningListSelectedColumns;\n\n constructor(public columns: []) {}\n}\n\nexport class SetNonHumanResourcePlanningListOptions {\n static readonly type: string = NonHumanResourcePlanningListActionTypes\n .SetNonHumanResourcePlanningListOptions;\n\n constructor(public options: NonHumanResourcePlanningListOptions) {}\n}\n\nexport class InitNonHumanResourcePlanningListSettings {\n static readonly type: string = NonHumanResourcePlanningListActionTypes\n .InitNonHumanResourcePlanningListSettings;\n\n constructor(public settings: NonHumanResourcePlanningListStateModel) {}\n}\n\nexport class SetNonHumanResourcePlanningListSettings {\n static readonly type: string = NonHumanResourcePlanningListActionTypes\n .SetNonHumanResourcePlanningListSettings;\n\n constructor(public settings: NonHumanResourcePlanningListStateModel) {}\n}\n\nexport class ResetNonHumanResourcePlanningListSettings {\n static readonly type: string = NonHumanResourcePlanningListActionTypes\n .ResetNonHumanResourcePlanningListSettings;\n}\n\nexport class SaveNonHumanResourcePlanningListSettings {\n static readonly type: string = NonHumanResourcePlanningListActionTypes\n .SaveNonHumanResourcePlanningListSettings;\n\n constructor(public settings: NonHumanResourcePlanningListStateModel) {}\n}\n","import { ListColumnInfo, ListColumnsInfo, ObjectPropertyNames } from './base';\nimport { ReadonlyCompleteMap } from '../../app.types';\nimport { NonHumanResourceSlimDtoModel } from '../models/dtos/non-human-resource-slim.dto.model';\n\nexport type NonHumanResourcePlanningListColumnKeys = ObjectPropertyNames;\nconst nonHumanResourcePlanningListColumnsInfoObj: ListColumnsInfo = {\n nonHumanResourceId: {\n label: 'Equipment, Infrastructure, Tools Id',\n selected: false,\n selectable: false,\n sortable: false,\n filterable: false,\n },\n name: {\n label: 'Name',\n selected: false,\n selectable: false,\n sortable: false,\n filterable: false,\n },\n validFrom: {\n label: 'Valid From',\n selected: false,\n selectable: false,\n sortable: false,\n filterable: false,\n },\n validUntil: {\n label: 'Valid Until',\n selected: false,\n selectable: false,\n sortable: false,\n filterable: false,\n },\n};\n\n// Defines the sorting of columns!!!\n// The Map is not really readonly - we just pretend that it is :)\nexport const nonHumanResourcePlanningListColumnsInfo: ReadonlyCompleteMap<\nNonHumanResourcePlanningListColumnKeys,\nListColumnInfo\n> = new Map([\n ['nonHumanResourceId', nonHumanResourcePlanningListColumnsInfoObj.nonHumanResourceId],\n ['name', nonHumanResourcePlanningListColumnsInfoObj.name],\n ['validFrom', nonHumanResourcePlanningListColumnsInfoObj.validFrom],\n ['validUntil', nonHumanResourcePlanningListColumnsInfoObj.validUntil],\n]) as ReadonlyCompleteMap;\n","import { Injectable } from '@angular/core';\nimport { Observable } from 'rxjs';\nimport { Action, State, StateContext } from '@ngxs/store';\nimport { NonHumanResourcePlanningListStateModel } from './non-human-resource-planning-list-state.model';\nimport {\n InitNonHumanResourcePlanningListSettings,\n ResetNonHumanResourcePlanningListSettings,\n SaveNonHumanResourcePlanningListSettings,\n SetNonHumanResourcePlanningListOptions,\n SetNonHumanResourcePlanningListSelectedColumns,\n SetNonHumanResourcePlanningListSettings,\n} from './non-human-resource-planning-list.actions';\nimport { UserService } from '../../../api/services/user.service';\nimport { NON_HUMAN_RESOURCE_PLANNING_LIST_DEFAULT_PAGE_SIZE } from '../../../shared/constants';\nimport { GenericListState } from '../generic-list/generic-list.state';\nimport { nonHumanResourcePlanningListColumnsInfo } from '../../../api/meta-info/non-human-resources-planning-list.info';\n\n/* eslint-disable @typescript-eslint/no-unused-vars */\n\nconst defaultNonHumanResourcePlanningListState: NonHumanResourcePlanningListStateModel = {\n selectedColumns: Array.from(nonHumanResourcePlanningListColumnsInfo.entries())\n .filter(([_key, value]) => (value.selectable && value.selected))\n .map(([key, _value]) => key),\n pageIndex: 0,\n pageSize: NON_HUMAN_RESOURCE_PLANNING_LIST_DEFAULT_PAGE_SIZE,\n columnFilters: {},\n sortColumn: '',\n sortDirection: '',\n};\n\n/* eslint-enable @typescript-eslint/no-unused-vars */\n\n@State({\n name: 'nonHumanResourcePlanningList',\n defaults: defaultNonHumanResourcePlanningListState,\n})\n@Injectable({\n providedIn: 'root',\n})\nexport class NonHumanResourcePlanningListState extends GenericListState {\n constructor(\n private userService: UserService,\n ) {\n super();\n }\n\n @Action(SetNonHumanResourcePlanningListSelectedColumns)\n setNonHumanResourcePlanningListSelectedColumns$(\n ctx: StateContext,\n { columns }: SetNonHumanResourcePlanningListSelectedColumns,\n ): Observable {\n ctx.patchState(this.cloneSelectedColumns(columns, nonHumanResourcePlanningListColumnsInfo));\n\n return ctx.dispatch(new SaveNonHumanResourcePlanningListSettings(ctx.getState()));\n }\n\n @Action(SetNonHumanResourcePlanningListOptions)\n setNonHumanResourcePlanningListOptions$(\n ctx: StateContext,\n { options }: SetNonHumanResourcePlanningListOptions,\n ): Observable {\n ctx.patchState(this.cloneListOptions(options, nonHumanResourcePlanningListColumnsInfo));\n\n return ctx.dispatch(new SaveNonHumanResourcePlanningListSettings(ctx.getState()));\n }\n\n @Action(InitNonHumanResourcePlanningListSettings)\n initNonHumanResourcePlanningListSettings(\n ctx: StateContext,\n { settings }: InitNonHumanResourcePlanningListSettings,\n ): void {\n ctx.patchState(this.cloneListSettings(settings, nonHumanResourcePlanningListColumnsInfo));\n }\n\n @Action(SetNonHumanResourcePlanningListSettings)\n setNonHumanResourcePlanningListSettings$(\n ctx: StateContext,\n\n { settings }: SetNonHumanResourcePlanningListSettings,\n ): Observable {\n ctx.patchState(this.cloneListSettings(settings, nonHumanResourcePlanningListColumnsInfo));\n\n return ctx.dispatch(new SaveNonHumanResourcePlanningListSettings(ctx.getState()));\n }\n\n @Action(ResetNonHumanResourcePlanningListSettings)\n resetNonHumanResourcePlanningListSettings(ctx: StateContext): void {\n ctx.setState(defaultNonHumanResourcePlanningListState);\n }\n\n @Action(SaveNonHumanResourcePlanningListSettings)\n saveNonHumanResourcePlanningListSettings$(\n ctx: StateContext,\n { settings }: SaveNonHumanResourcePlanningListSettings,\n ): Observable {\n return this.userService.saveNonHumanResourcePlanningListSettings$(settings);\n }\n}\n","import { Selector } from '@ngxs/store';\nimport { NonHumanResourcePlanningListStateModel } from './non-human-resource-planning-list-state.model';\nimport { NonHumanResourcePlanningListOptions } from './non-human-resource-planning-list.actions';\nimport { NonHumanResourcePlanningListState } from './non-human-resource-planning-list.state';\n\nexport class NonHumanResourcePlanningListSelectors {\n @Selector([NonHumanResourcePlanningListState])\n static selectedColumns(state: NonHumanResourcePlanningListStateModel): NonHumanResourcePlanningListStateModel['selectedColumns'] {\n return state.selectedColumns;\n }\n\n @Selector([NonHumanResourcePlanningListState])\n static options(state: NonHumanResourcePlanningListStateModel): NonHumanResourcePlanningListOptions {\n return {\n pageIndex: state.pageIndex,\n pageSize: state.pageSize,\n columnFilters: state.columnFilters,\n sortColumn: state.sortColumn,\n sortDirection: state.sortDirection,\n };\n }\n}\n","import { Observable } from 'rxjs';\nimport { Action, State, StateContext } from '@ngxs/store';\nimport { Injectable } from '@angular/core';\nimport { ProjectListStateModel } from './project-list-state.model';\nimport {\n InitProjectListSettings,\n ResetProjectListOptions,\n ResetProjectListSettings,\n SaveProjectListSettings,\n SetProjectListOptions,\n SetProjectListSelectedColumns,\n SetProjectListSettings,\n} from './project-list.actions';\nimport { projectsListColumnsInfo } from '../../../api/meta-info/projects-list.info';\nimport { UserService } from '../../../api/services/user.service';\nimport { PROJECT_LIST_DEFAULT_PAGE_SIZE } from '../../../shared/constants';\nimport { GenericListState } from '../generic-list/generic-list.state';\n\n/* eslint-disable @typescript-eslint/no-unused-vars */\n\nconst defaultProjectListState: ProjectListStateModel = {\n selectedColumns: Array.from(projectsListColumnsInfo.entries())\n .filter(([_key, value]) => (value.selectable && value.selected))\n .map(([key, _value]) => key),\n pageIndex: 0,\n pageSize: PROJECT_LIST_DEFAULT_PAGE_SIZE,\n columnFilters: {},\n sortColumn: '',\n sortDirection: '',\n};\n\n/* eslint-enable @typescript-eslint/no-unused-vars */\n\n@State({\n name: 'projectList',\n defaults: defaultProjectListState,\n})\n@Injectable({\n providedIn: 'root',\n})\nexport class ProjectListState extends GenericListState {\n constructor(\n private userService: UserService,\n ) {\n super();\n }\n\n @Action(SetProjectListSelectedColumns)\n setProjectListSelectedColumns$(\n ctx: StateContext,\n { columns }: SetProjectListSelectedColumns,\n ): Observable {\n ctx.patchState(this.cloneSelectedColumns(columns, projectsListColumnsInfo));\n\n return ctx.dispatch(new SaveProjectListSettings(ctx.getState()));\n }\n\n @Action(SetProjectListOptions)\n setProjectListOptions$(\n ctx: StateContext,\n { options }: SetProjectListOptions,\n ): Observable {\n ctx.patchState(this.cloneListOptions(options, projectsListColumnsInfo));\n\n return ctx.dispatch(new SaveProjectListSettings(ctx.getState()));\n }\n\n @Action(ResetProjectListOptions)\n resetProjectListOptions$(ctx: StateContext): Observable {\n ctx.patchState({\n columnFilters: {},\n });\n\n return ctx.dispatch(new SaveProjectListSettings(ctx.getState()));\n }\n\n @Action(InitProjectListSettings)\n initProjectListSettings(\n ctx: StateContext,\n { settings }: InitProjectListSettings,\n ): void {\n ctx.patchState(this.cloneListSettings(settings, projectsListColumnsInfo));\n }\n\n @Action(SetProjectListSettings)\n setProjectListSettings$(\n ctx: StateContext,\n { settings }: SetProjectListSettings,\n ): Observable {\n ctx.patchState(this.cloneListSettings(settings, projectsListColumnsInfo));\n\n return ctx.dispatch(new SaveProjectListSettings(ctx.getState()));\n }\n\n @Action(ResetProjectListSettings)\n resetProjectListSettings(ctx: StateContext): void {\n ctx.setState(defaultProjectListState);\n }\n\n @Action(SaveProjectListSettings)\n saveProjectListSettings$(\n ctx: StateContext,\n { settings }: SaveProjectListSettings,\n ): Observable {\n return this.userService.saveProjectListSettings$(settings);\n }\n}\n","import { Selector } from '@ngxs/store';\nimport { ProjectListState } from './project-list.state';\nimport { ProjectListOptions } from './project-list.actions';\nimport { ProjectListStateModel } from './project-list-state.model';\n\nexport class ProjectListSelectors {\n @Selector([ProjectListState])\n static selectedColumns(state: ProjectListStateModel): ProjectListStateModel['selectedColumns'] {\n return [...state.selectedColumns];\n }\n\n @Selector([ProjectListState])\n static options(state: ProjectListStateModel): ProjectListOptions {\n return {\n pageIndex: state.pageIndex,\n pageSize: state.pageSize,\n columnFilters: { ...state.columnFilters },\n sortColumn: state.sortColumn,\n sortDirection: state.sortDirection,\n };\n }\n}\n","import { GenericListOptions } from '../generic-list';\nimport { ProjectsListColumnKey } from '../../../api/meta-info/projects-list.info';\nimport { ProjectColumnFilters } from '../../../api/filter-columns';\nimport { ProjectListStateModel } from './project-list-state.model';\n\n/**\n * Action types for ProjectListState\n */\nexport enum ProjectListActionTypes {\n SetProjectListSelectedColumns = '[Project List Page] Set Selected Columns',\n SetProjectListOptions = '[Project List Page] Set Options',\n ResetProjectListOptions = '[Project List Page] Reset Options',\n InitProjectListSettings = '[User API] Initialize Project List Settings',\n SetProjectListSettings = '[User API] Set Project List Settings',\n ResetProjectListSettings = '[User API] Reset Project List Settings',\n SaveProjectListSettings = '[User API] Save Project List Settings',\n}\n\nexport interface ProjectListOptions extends GenericListOptions {\n columnFilters: ProjectColumnFilters;\n}\n\nexport class SetProjectListSelectedColumns {\n static readonly type: string = ProjectListActionTypes.SetProjectListSelectedColumns;\n\n constructor(public columns: ProjectsListColumnKey[]) {}\n}\n\nexport class SetProjectListOptions {\n static readonly type: string = ProjectListActionTypes.SetProjectListOptions;\n\n constructor(public options: ProjectListOptions) {}\n}\n\nexport class ResetProjectListOptions {\n static readonly type: string = ProjectListActionTypes.ResetProjectListOptions;\n}\n\nexport class InitProjectListSettings {\n static readonly type: string = ProjectListActionTypes.InitProjectListSettings;\n\n constructor(public settings: ProjectListStateModel) {}\n}\n\nexport class SetProjectListSettings {\n static readonly type: string = ProjectListActionTypes.SetProjectListSettings;\n\n constructor(public settings: ProjectListStateModel) {}\n}\n\nexport class ResetProjectListSettings {\n static readonly type: string = ProjectListActionTypes.ResetProjectListSettings;\n}\n\nexport class SaveProjectListSettings {\n static readonly type: string = ProjectListActionTypes.SaveProjectListSettings;\n\n constructor(public settings: ProjectListStateModel) {}\n}\n","import { ProjectPlanningRangeStateModel } from './project-planning-range-state.model';\n\n/**\n * Action types for ProjectPlanningRangeState\n */\nexport enum ProjectPlanningRangeActionTypes {\n InitProjectPlanningRangeSettings = '[Project Planning API] Initialize Project Planning Range Settings',\n SetProjectPlanningRangeSettings = '[Project Planning API] Set Project Planning Range Settings',\n ResetProjectPlanningRangeSettings = '[Project Planning API] Reset Project Planning Range Settings',\n SaveProjectPlanningRangeSettings = '[Project Planning API] Save Project Planning Range Settings',\n}\n\nexport class InitProjectPlanningRangeSettings {\n static readonly type: string = ProjectPlanningRangeActionTypes.InitProjectPlanningRangeSettings;\n\n constructor(public settings: ProjectPlanningRangeStateModel) {}\n}\n\nexport class SetProjectPlanningRangeSettings {\n static readonly type: string = ProjectPlanningRangeActionTypes.SetProjectPlanningRangeSettings;\n\n constructor(public settings: ProjectPlanningRangeStateModel) {}\n}\n\nexport class ResetProjectPlanningRangeSettings {\n static readonly type: string = ProjectPlanningRangeActionTypes.ResetProjectPlanningRangeSettings;\n}\n\nexport class SaveProjectPlanningRangeSettings {\n static readonly type: string = ProjectPlanningRangeActionTypes.SaveProjectPlanningRangeSettings;\n\n constructor(public settings: ProjectPlanningRangeStateModel) {}\n}\n","import { Injectable } from '@angular/core';\nimport { Observable } from 'rxjs';\nimport { Action, State, StateContext } from '@ngxs/store';\nimport { ProjectPlanningRangeStateModel } from './project-planning-range-state.model';\nimport {\n InitProjectPlanningRangeSettings,\n ResetProjectPlanningRangeSettings,\n SaveProjectPlanningRangeSettings,\n SetProjectPlanningRangeSettings,\n} from './project-planning-range.actions';\nimport { UserService } from '../../../api/services/user.service';\nimport { GenericListState } from '../generic-list/generic-list.state';\n\n/* eslint-disable @typescript-eslint/no-unused-vars */\n\nconst defaultProjectPlanningRangeState: ProjectPlanningRangeStateModel = {\n range: null,\n};\n\n/* eslint-enable @typescript-eslint/no-unused-vars */\n\n@State({\n name: 'ProjectPlanningRange',\n defaults: defaultProjectPlanningRangeState,\n})\n@Injectable({\n providedIn: 'root',\n})\nexport class ProjectPlanningRangeState extends GenericListState {\n constructor(\n private userService: UserService,\n ) {\n super();\n }\n\n @Action(InitProjectPlanningRangeSettings)\n initProjectPlanningRangeSettings(\n ctx: StateContext,\n { settings }: InitProjectPlanningRangeSettings,\n ): void {\n ctx.patchState({\n range: settings.range,\n });\n }\n\n @Action(SetProjectPlanningRangeSettings)\n setProjectPlanningRangeSettings$(\n ctx: StateContext,\n { settings }: SetProjectPlanningRangeSettings,\n ): Observable {\n ctx.patchState({\n range: settings.range,\n });\n\n return ctx.dispatch(new SaveProjectPlanningRangeSettings(ctx.getState()));\n }\n\n @Action(ResetProjectPlanningRangeSettings)\n resetProjectPlanningRangeSettings(ctx: StateContext): void {\n ctx.setState(defaultProjectPlanningRangeState);\n }\n\n @Action(SaveProjectPlanningRangeSettings)\n saveProjectPlanningRangeSettings$(\n ctx: StateContext,\n { settings }: SaveProjectPlanningRangeSettings,\n ): Observable {\n return this.userService.saveProjectPlanningRangeSettings$(settings);\n }\n}\n","import { ProjectPlanningTotalsStateModel } from './project-planning-totals-state.model';\n\n/**\n * Action types for ProjectPlanningTotalsState\n */\nexport enum ProjectPlanningTotalsActionTypes {\n InitProjectPlanningTotalsSettings = '[Project Planning API] Initialize Project Planning Totals Settings',\n SetProjectPlanningTotalsSettings = '[Project Planning API] Set Project Planning Totals Settings',\n ResetProjectPlanningTotalsSettings = '[Project Planning API] Reset Project Planning Totals Settings',\n SaveProjectPlanningTotalsSettings = '[Project Planning API] Save Project Planning Totals Settings',\n}\n\nexport class InitProjectPlanningTotalsSettings {\n static readonly type: string = ProjectPlanningTotalsActionTypes.InitProjectPlanningTotalsSettings;\n\n constructor(public settings: ProjectPlanningTotalsStateModel) {}\n}\n\nexport class SetProjectPlanningTotalsSettings {\n static readonly type: string = ProjectPlanningTotalsActionTypes.SetProjectPlanningTotalsSettings;\n\n constructor(public settings: ProjectPlanningTotalsStateModel) {}\n}\n\nexport class ResetProjectPlanningTotalsSettings {\n static readonly type: string = ProjectPlanningTotalsActionTypes.ResetProjectPlanningTotalsSettings;\n}\n\nexport class SaveProjectPlanningTotalsSettings {\n static readonly type: string = ProjectPlanningTotalsActionTypes.SaveProjectPlanningTotalsSettings;\n\n constructor(public settings: ProjectPlanningTotalsStateModel) {}\n}\n","import { Injectable } from '@angular/core';\nimport { Observable } from 'rxjs';\nimport { Action, State, StateContext } from '@ngxs/store';\nimport { CapacityUnits } from '../../../modules/administration/non-human-resources/capacity-units';\nimport { ProjectPlanningTotalsStateModel } from './project-planning-totals-state.model';\nimport {\n InitProjectPlanningTotalsSettings,\n ResetProjectPlanningTotalsSettings,\n SaveProjectPlanningTotalsSettings,\n SetProjectPlanningTotalsSettings,\n} from './project-planning-totals.actions';\nimport { UserService } from '../../../api/services/user.service';\nimport { GenericListState } from '../generic-list/generic-list.state';\n\n/* eslint-disable @typescript-eslint/no-unused-vars */\n\nconst defaultProjectPlanningTotalsState: ProjectPlanningTotalsStateModel = {\n selectedTotals: ['total-available-to-be-planned', 'confirmed', 'reported', 'total'],\n selectedCapacityUnit: CapacityUnits.HoursWeek,\n};\n\n/* eslint-enable @typescript-eslint/no-unused-vars */\n\n@State({\n name: 'ProjectPlanningTotals',\n defaults: defaultProjectPlanningTotalsState,\n})\n@Injectable({\n providedIn: 'root',\n})\nexport class ProjectPlanningTotalsState extends GenericListState {\n constructor(\n private userService: UserService,\n ) {\n super();\n }\n\n @Action(InitProjectPlanningTotalsSettings)\n initProjectPlanningTotalsSettings(\n ctx: StateContext,\n { settings }: InitProjectPlanningTotalsSettings,\n ): void {\n ctx.patchState({\n selectedTotals: settings.selectedTotals,\n selectedCapacityUnit: settings.selectedCapacityUnit,\n });\n }\n\n @Action(SetProjectPlanningTotalsSettings)\n setProjectPlanningTotalsSettings$(\n ctx: StateContext,\n { settings }: SetProjectPlanningTotalsSettings,\n ): Observable {\n ctx.patchState({\n selectedTotals: settings.selectedTotals,\n selectedCapacityUnit: settings.selectedCapacityUnit,\n });\n\n return ctx.dispatch(new SaveProjectPlanningTotalsSettings(ctx.getState()));\n }\n\n @Action(ResetProjectPlanningTotalsSettings)\n resetProjectPlanningTotalsSettings(ctx: StateContext): void {\n ctx.setState(defaultProjectPlanningTotalsState);\n }\n\n @Action(SaveProjectPlanningTotalsSettings)\n saveProjectPlanningTotalsSettings$(\n ctx: StateContext,\n { settings }: SaveProjectPlanningTotalsSettings,\n ): Observable {\n return this.userService.saveProjectPlanningTotalsSettings$(settings);\n }\n}\n","import { Injectable } from '@angular/core';\nimport { Observable } from 'rxjs';\nimport { Action, State, StateContext } from '@ngxs/store';\nimport { QuestionsListStateModel } from './questions-list-state.model';\nimport {\n InitQuestionsListSettings,\n ResetQuestionsListOptions,\n ResetQuestionsListSettings,\n SaveQuestionsListSettings,\n SetQuestionsListOptions,\n SetQuestionsListSelectedColumns,\n SetQuestionsListSettings,\n} from './questions-list.actions';\nimport { questionsViewListColumnsInfo } from '../../../api/meta-info/questions-list.info';\nimport { UserService } from '../../../api/services/user.service';\nimport { QUESTIONS_LIST_DEFAULT_PAGE_SIZE } from '../../../shared/constants';\nimport { GenericListState } from '../generic-list/generic-list.state';\n\n/* eslint-disable @typescript-eslint/no-unused-vars */\n\nconst defaultQuestionsListState: QuestionsListStateModel = {\n selectedColumns: Array.from(questionsViewListColumnsInfo.entries())\n .filter(([_key, value]) => (value.selectable && value.selected))\n .map(([key, _value]) => key),\n pageIndex: 0,\n pageSize: QUESTIONS_LIST_DEFAULT_PAGE_SIZE,\n columnFilters: {},\n sortColumn: '',\n sortDirection: '',\n};\n\n/* eslint-enable @typescript-eslint/no-unused-vars */\n\n@State({\n name: 'questionsList',\n defaults: defaultQuestionsListState,\n})\n@Injectable({\n providedIn: 'root',\n})\nexport class QuestionsListState extends GenericListState {\n constructor(\n private userService: UserService,\n ) {\n super();\n }\n\n @Action(SetQuestionsListSelectedColumns)\n setQuestionsListSelectedColumns$(\n ctx: StateContext,\n { columns }: SetQuestionsListSelectedColumns,\n ): Observable {\n ctx.patchState(this.cloneSelectedColumns(columns, questionsViewListColumnsInfo));\n\n return ctx.dispatch(new SaveQuestionsListSettings(ctx.getState()));\n }\n\n @Action(SetQuestionsListOptions)\n setQuestionsListOptions$(\n ctx: StateContext,\n { options }: SetQuestionsListOptions,\n ): Observable {\n ctx.patchState(this.cloneListOptions(options, questionsViewListColumnsInfo));\n\n return ctx.dispatch(new SaveQuestionsListSettings(ctx.getState()));\n }\n\n @Action(ResetQuestionsListOptions)\n resetQuestionsListOptions$(ctx: StateContext): Observable {\n ctx.patchState({\n columnFilters: {},\n });\n\n return ctx.dispatch(new SaveQuestionsListSettings(ctx.getState()));\n }\n\n @Action(InitQuestionsListSettings)\n initQuestionsListSettings(\n ctx: StateContext,\n { settings }: InitQuestionsListSettings,\n ): void {\n ctx.patchState(this.cloneListSettings(settings, questionsViewListColumnsInfo));\n }\n\n @Action(SetQuestionsListSettings)\n setQuestionsListSettings$(\n ctx: StateContext,\n { settings }: SetQuestionsListSettings,\n ): Observable {\n ctx.patchState(this.cloneListSettings(settings, questionsViewListColumnsInfo));\n\n return ctx.dispatch(new SaveQuestionsListSettings(ctx.getState()));\n }\n\n @Action(ResetQuestionsListSettings)\n resetQuestionsListSettings(ctx: StateContext): void {\n ctx.setState(defaultQuestionsListState);\n }\n\n @Action(SaveQuestionsListSettings)\n saveQuestionsListSettings$(\n ctx: StateContext,\n { settings }: SaveQuestionsListSettings,\n ): Observable {\n return this.userService.SaveQuestionsListSettings$(settings);\n }\n}\n","import { Selector } from '@ngxs/store';\nimport { QuestionsListState } from './questions-list.state';\nimport { QuestionsListOptions } from './questions-list.actions';\nimport { QuestionsListStateModel } from './questions-list-state.model';\n\nexport class QuestionsListSelectors {\n @Selector([QuestionsListState])\n static selectedColumns(state: QuestionsListStateModel): QuestionsListStateModel['selectedColumns'] {\n return state.selectedColumns;\n }\n\n @Selector([QuestionsListState])\n static options(state: QuestionsListStateModel): QuestionsListOptions {\n return {\n pageIndex: state.pageIndex,\n pageSize: state.pageSize,\n columnFilters: state.columnFilters,\n sortColumn: state.sortColumn,\n sortDirection: state.sortDirection,\n };\n }\n}\n","import { GenericListOptions } from '../generic-list';\nimport { QuestionsViewListColumnKeys } from '../../../api/meta-info/questions-list.info';\nimport { QuestionsColumnFilters } from '../../../api/filter-columns';\nimport { QuestionsListStateModel } from './questions-list-state.model';\n\n/**\n * Action types for QuestionsListState\n */\nexport enum QuestionsListActionTypes {\n SetQuestionsListSelectedColumns = '[ Questions List Page] Set Selected Columns',\n SetQuestionsListOptions = '[ Questions List Page] Set Options',\n ResetQuestionsListOptions = '[ Questions List Page] Reset Options',\n InitQuestionsListSettings = '[ Questions API] Initialize Questions List Settings',\n SetQuestionsListSettings = '[ Questions API] Set Questions List Settings',\n ResetQuestionsListSettings = '[ Questions API] Reset Questions List Settings',\n SaveQuestionsListSettings = '[ Questions API] Save Questions List Settings',\n}\n\nexport interface QuestionsListOptions extends GenericListOptions {\n columnFilters: QuestionsColumnFilters;\n}\n\nexport class SetQuestionsListSelectedColumns {\n static readonly type: string = QuestionsListActionTypes.SetQuestionsListSelectedColumns;\n\n constructor(public columns: QuestionsViewListColumnKeys[]) {}\n}\n\nexport class SetQuestionsListOptions {\n static readonly type: string = QuestionsListActionTypes.SetQuestionsListOptions;\n\n constructor(public options: QuestionsListOptions) {}\n}\n\nexport class ResetQuestionsListOptions {\n static readonly type: string = QuestionsListActionTypes.ResetQuestionsListOptions;\n}\n\nexport class InitQuestionsListSettings {\n static readonly type: string = QuestionsListActionTypes.InitQuestionsListSettings;\n\n constructor(public settings: QuestionsListStateModel) {}\n}\n\nexport class SetQuestionsListSettings {\n static readonly type: string = QuestionsListActionTypes.SetQuestionsListSettings;\n\n constructor(public settings: QuestionsListStateModel) {}\n}\n\nexport class ResetQuestionsListSettings {\n static readonly type: string = QuestionsListActionTypes.ResetQuestionsListSettings;\n}\n\nexport class SaveQuestionsListSettings {\n static readonly type: string = QuestionsListActionTypes.SaveQuestionsListSettings;\n\n constructor(public settings: QuestionsListStateModel) {}\n}\n","import { UnitSkillDtoModel } from '../../../api/models/dtos/unit-skill.dto.model';\n\n/**\n * Store actions for manipulating skills user settings.\n */\nexport enum SkillsActionTypes {\n InitSkillsSettings = '[API] Init Skills Settings State',\n AddSkillsRecentUnit = '[Skills] Add Skills Recent Unit',\n}\n\n/**\n * In the backend only the cross utilization flag and a list of recent units are stored.\n * The week and year is not stored in the backend.\n */\nexport class InitSkillsSettings {\n static readonly type: string = SkillsActionTypes.InitSkillsSettings;\n\n constructor(\n readonly recentUnits: readonly UnitSkillDtoModel[],\n ) {}\n}\n\nexport class AddSkillsRecentUnit {\n static readonly type: string = SkillsActionTypes.AddSkillsRecentUnit;\n\n constructor(\n public unit: UnitSkillDtoModel,\n ) {}\n}\n","import { Selector } from '@ngxs/store';\nimport { SkillsState } from './skills.state';\nimport { SkillsStateModel } from './skills-state.model';\nimport { UnitSkillDtoModel } from '../../../api/models/dtos/unit-skill.dto.model';\n\nexport class SkillsSelectors {\n @Selector([SkillsState])\n static recentSkillsUnits(state: SkillsStateModel): readonly UnitSkillDtoModel[] {\n return state.recentUnits;\n }\n\n /**\n * Get the most recent / latest unit that was viewed.\n */\n @Selector([SkillsState])\n static mostRecentSkillsUnit(state: SkillsStateModel): UnitSkillDtoModel | undefined {\n return state.recentUnits.length > 0 ? state.recentUnits[0] : undefined;\n }\n}\n","import { Injectable } from '@angular/core';\nimport { Action, State, StateContext } from '@ngxs/store';\nimport { SkillsStateModel } from './skills-state.model';\nimport {\n AddSkillsRecentUnit,\n InitSkillsSettings,\n} from './skills.actions';\n\nconst MAX_NUMBER_OF_RECENT_UNITS = 3;\n\nconst defaultSkillsState: SkillsStateModel = {\n recentUnits: [],\n};\n\n@State({\n name: 'skills',\n defaults: defaultSkillsState,\n})\n@Injectable({\n providedIn: 'root',\n})\nexport class SkillsState {\n @Action(InitSkillsSettings)\n initUserSkillsSettingsState(ctx: StateContext, { recentUnits }: InitSkillsSettings): void {\n ctx.patchState({\n recentUnits,\n });\n }\n\n @Action(AddSkillsRecentUnit)\n addSkillsRecentUnit(\n { patchState, getState }: StateContext,\n { unit }: AddSkillsRecentUnit,\n ): void {\n const { recentUnits } = getState();\n\n // Check if given unit already exists in queue\n const existingUnitIndex = recentUnits.findIndex((element) => (element.unitId === unit.unitId));\n\n // Create a new array of units with the most recent in front.\n const updatedRecentUnits = [unit, ...recentUnits];\n\n if (existingUnitIndex !== -1) {\n // Remove duplicates\n updatedRecentUnits.splice(existingUnitIndex + 1, 1);\n }\n\n // Limit queue to a given maximum number of entries.\n updatedRecentUnits.length = Math.min(updatedRecentUnits.length, MAX_NUMBER_OF_RECENT_UNITS);\n\n patchState({\n recentUnits: updatedRecentUnits,\n });\n }\n}\n","// eslint-disable-next-line @typescript-eslint/no-namespace\nexport namespace TimecardViewExpandsActions {\n\n export class SetExpandsIds {\n static readonly type: string = 'SetExpandsIds';\n\n constructor(readonly expandedProjectIds: string[], readonly expandedSpecialRowNames: string[]) {}\n }\n}\n","import { Injectable } from '@angular/core';\nimport {\n Action, Selector, State, StateContext,\n} from '@ngxs/store';\nimport { TimecardViewExpandsActions } from './timecard-view-expands.actions';\n\nexport interface TimecardsViewExpandsStateModel {\n expandedProjectIds: string[];\n expandedSpecialRowNames: string[];\n}\n\nconst defaultTimecardViewExpandsState: TimecardsViewExpandsStateModel = {\n expandedProjectIds: [],\n expandedSpecialRowNames: [],\n};\n\n@State({\n name: 'TimecardViewExpandsState',\n defaults: defaultTimecardViewExpandsState,\n})\n@Injectable({\n providedIn: 'root',\n})\nexport class TimecardViewExpandsState {\n @Selector()\n // eslint-disable-next-line max-len\n static expandsStatus(state: TimecardsViewExpandsStateModel): TimecardsViewExpandsStateModel {\n return state;\n }\n\n @Action(TimecardViewExpandsActions.SetExpandsIds)\n // eslint-disable-next-line max-len\n setExpandsIds(ctx: StateContext, params: TimecardViewExpandsActions.SetExpandsIds): void {\n ctx.patchState({\n expandedProjectIds: params.expandedProjectIds,\n expandedSpecialRowNames: params.expandedSpecialRowNames,\n });\n }\n}\n","import { TimesheetRangeStateModel } from './timesheet-range-state.model';\n\n/**\n * Action types for TimesheetRangeState\n */\nexport enum TimesheetRangeActionTypes {\n InitTimesheetRangeSettings = '[Timesheet API] Initialize Timesheet Range Settings',\n SetTimesheetRangeSettings = '[Timesheet API] Set Timesheet Range Settings',\n ResetTimesheetRangeSettings = '[Timesheet API] Reset Timesheet Range Settings',\n SaveTimesheetRangeSettings = '[Timesheet API] Save Timesheet Range Settings',\n}\n\nexport class InitTimesheetRangeSettings {\n static readonly type: string = TimesheetRangeActionTypes.InitTimesheetRangeSettings;\n\n constructor(public settings: TimesheetRangeStateModel) {}\n}\n\nexport class SetTimesheetRangeSettings {\n static readonly type: string = TimesheetRangeActionTypes.SetTimesheetRangeSettings;\n\n constructor(public settings: TimesheetRangeStateModel) {}\n}\n\nexport class ResetTimesheetRangeSettings {\n static readonly type: string = TimesheetRangeActionTypes.ResetTimesheetRangeSettings;\n}\n\nexport class SaveTimesheetRangeSettings {\n static readonly type: string = TimesheetRangeActionTypes.SaveTimesheetRangeSettings;\n\n constructor(public settings: TimesheetRangeStateModel) {}\n}\n","import { Selector } from '@ngxs/store';\nimport { TimesheetRangeStateModel } from './timesheet-range-state.model';\nimport { TimesheetRangeState } from './timesheet-range.state';\n\nexport class TimesheetRangeSelectors {\n @Selector([TimesheetRangeState])\n static range(state: TimesheetRangeStateModel): TimesheetRangeStateModel['range'] {\n return state.range;\n }\n}\n","import { Injectable } from '@angular/core';\nimport { Observable } from 'rxjs';\nimport { Action, State, StateContext } from '@ngxs/store';\nimport { TimesheetRangeStateModel } from './timesheet-range-state.model';\nimport {\n InitTimesheetRangeSettings,\n ResetTimesheetRangeSettings,\n SaveTimesheetRangeSettings,\n SetTimesheetRangeSettings,\n} from './timesheet-range.actions';\nimport { UserService } from '../../../api/services/user.service';\nimport { GenericListState } from '../generic-list/generic-list.state';\n\n/* eslint-disable @typescript-eslint/no-unused-vars */\n\nconst defaultTimesheetRangeState: TimesheetRangeStateModel = {\n range: null,\n};\n\n/* eslint-enable @typescript-eslint/no-unused-vars */\n\n@State({\n name: 'TimesheetRange',\n defaults: defaultTimesheetRangeState,\n})\n@Injectable({\n providedIn: 'root',\n})\nexport class TimesheetRangeState extends GenericListState {\n constructor(\n private userService: UserService,\n ) {\n super();\n }\n\n @Action(InitTimesheetRangeSettings)\n initTimesheetRangeSettings(\n ctx: StateContext,\n { settings }: InitTimesheetRangeSettings,\n ): void {\n ctx.patchState({\n range: settings.range,\n });\n }\n\n @Action(SetTimesheetRangeSettings)\n setTimesheetRangeSettings$(\n ctx: StateContext,\n { settings }: SetTimesheetRangeSettings,\n ): Observable {\n ctx.patchState({\n range: settings.range,\n });\n\n return ctx.dispatch(new SaveTimesheetRangeSettings(ctx.getState()));\n }\n\n @Action(ResetTimesheetRangeSettings)\n resetTimesheetRangeSettings(ctx: StateContext): void {\n ctx.setState(defaultTimesheetRangeState);\n }\n\n @Action(SaveTimesheetRangeSettings)\n saveTimesheetRangeSettings$(\n ctx: StateContext,\n { settings }: SaveTimesheetRangeSettings,\n ): Observable {\n return this.userService.saveTimesheetRangeSettings$(settings);\n }\n}\n","import { TimesheetTotalsStateModel } from './timesheet-totals-state.model';\n\n/**\n * Action types for TimesheetTotalsState\n */\nexport enum TimesheetTotalsActionTypes {\n InitTimesheetTotalsSettings = '[WP Planning API] Initialize Timesheet Totals Settings',\n SetTimesheetTotalsSettings = '[Timesheet API] Set Timesheet Totals Settings',\n ResetTimesheetTotalsSettings = '[Timesheet API] Reset Timesheet Totals Settings',\n SaveTimesheetTotalsSettings = '[Timesheet API] Save Timesheet Totals Settings',\n}\n\nexport class InitTimesheetTotalsSettings {\n static readonly type: string = TimesheetTotalsActionTypes.InitTimesheetTotalsSettings;\n\n constructor(public settings: TimesheetTotalsStateModel) {}\n}\n\nexport class SetTimesheetTotalsSettings {\n static readonly type: string = TimesheetTotalsActionTypes.SetTimesheetTotalsSettings;\n\n constructor(public settings: TimesheetTotalsStateModel) {}\n}\n\nexport class ResetTimesheetTotalsSettings {\n static readonly type: string = TimesheetTotalsActionTypes.ResetTimesheetTotalsSettings;\n}\n\nexport class SaveTimesheetTotalsSettings {\n static readonly type: string = TimesheetTotalsActionTypes.SaveTimesheetTotalsSettings;\n\n constructor(public settings: TimesheetTotalsStateModel) {}\n}\n","import { Selector } from '@ngxs/store';\nimport { TimesheetTotalsStateModel } from './timesheet-totals-state.model';\nimport { TimesheetTotalsState } from './timesheet-totals.state';\n\nexport class TimesheetTotalsSelectors {\n @Selector([TimesheetTotalsState])\n static selectedTotals(state: TimesheetTotalsStateModel): TimesheetTotalsStateModel['selectedTotals'] {\n return state.selectedTotals;\n }\n}\n","import { Injectable } from '@angular/core';\nimport { Observable } from 'rxjs';\nimport { Action, State, StateContext } from '@ngxs/store';\nimport { TimesheetTotalsStateModel } from './timesheet-totals-state.model';\nimport {\n InitTimesheetTotalsSettings,\n ResetTimesheetTotalsSettings,\n SaveTimesheetTotalsSettings,\n SetTimesheetTotalsSettings,\n} from './timesheet-totals.actions';\nimport { UserService } from '../../../api/services/user.service';\nimport { GenericListState } from '../generic-list/generic-list.state';\n\n/* eslint-disable @typescript-eslint/no-unused-vars */\n\nconst defaultTimesheetTotalsState: TimesheetTotalsStateModel = {\n selectedTotals: ['total-hours', 'productive-hours', 'non-productive-hours'],\n};\n\n/* eslint-enable @typescript-eslint/no-unused-vars */\n\n@State({\n name: 'TimesheetTotals',\n defaults: defaultTimesheetTotalsState,\n})\n@Injectable({\n providedIn: 'root',\n})\nexport class TimesheetTotalsState extends GenericListState {\n constructor(\n private userService: UserService,\n ) {\n super();\n }\n\n @Action(InitTimesheetTotalsSettings)\n initTimesheetTotalsSettings(\n ctx: StateContext,\n { settings }: InitTimesheetTotalsSettings,\n ): void {\n ctx.patchState({\n selectedTotals: settings.selectedTotals,\n });\n }\n\n @Action(SetTimesheetTotalsSettings)\n setTimesheetTotalsSettings$(\n ctx: StateContext,\n { settings }: SetTimesheetTotalsSettings,\n ): Observable {\n ctx.patchState({\n selectedTotals: settings.selectedTotals,\n });\n\n return ctx.dispatch(new SaveTimesheetTotalsSettings(ctx.getState()));\n }\n\n @Action(ResetTimesheetTotalsSettings)\n resetTimesheetTotalsSettings(ctx: StateContext): void {\n ctx.setState(defaultTimesheetTotalsState);\n }\n\n @Action(SaveTimesheetTotalsSettings)\n saveTimesheetTotalsSettings$(\n ctx: StateContext,\n { settings }: SaveTimesheetTotalsSettings,\n ): Observable {\n return this.userService.saveTimesheetTotalsSettings$(settings);\n }\n}\n","import { UnitPlanningSlimDtoModel } from '../../../api/models/dtos/unit-planning-slim.dto.model';\nimport { UnitSlimDtoModel } from '../../../api/models/dtos/unit-slim.dto.model';\n\n/**\n * Store actions for manipulating timesheet user settings.\n */\nexport enum TimesheetActionTypes {\n InitUserTimesheetSettings = '[API] Init User Timesheet Settings State',\n SetTimesheetCrossUtilizationState = '[Timesheet] Set Timesheet Cross Utilization State',\n ResetTimesheetCrossUtilizationState = '[API] Reset Timesheet Cross Utilization State',\n SaveTimesheetCrossUtilizationSettings = '[API] Save Timesheet Cross Utilization Settings',\n AddTimesheetRecentUnit = '[Timesheet] Add Timesheet Recent Unit',\n AddExpandedUnitId = '[Timecards Page] Add Expanded Unit Id',\n RemoveExpandedUnitId = '[Timecards Page] Remove Expanded Unit Id',\n}\n\n/**\n * In the backend only the cross utilization flag and a list of recent units are stored.\n * The week and year is not stored in the backend.\n */\nexport class InitUserTimesheetSettings {\n static readonly type: string = TimesheetActionTypes.InitUserTimesheetSettings;\n\n constructor(\n readonly recentUnits: readonly UnitSlimDtoModel[],\n readonly withCrossUtilization: boolean,\n ) {}\n}\n\nexport class SetTimesheetCrossUtilizationState {\n static readonly type: string = TimesheetActionTypes.SetTimesheetCrossUtilizationState;\n\n constructor(readonly withCrossUtilization: boolean) {}\n}\n\nexport class ResetTimesheetCrossUtilizationState {\n static readonly type: string = TimesheetActionTypes.ResetTimesheetCrossUtilizationState;\n}\n\nexport class SaveTimesheetCrossUtilizationSettings {\n static readonly type: string = TimesheetActionTypes.SaveTimesheetCrossUtilizationSettings;\n\n constructor(public withCrossUtilization: boolean) {}\n}\n\nexport class AddTimesheetRecentUnit {\n static readonly type: string = TimesheetActionTypes.AddTimesheetRecentUnit;\n\n constructor(public unit: UnitSlimDtoModel | UnitPlanningSlimDtoModel) {}\n}\n\nexport class AddExpandedUnitId {\n static readonly type: string = TimesheetActionTypes.AddExpandedUnitId;\n\n constructor(readonly unitId: number) {}\n}\n\nexport class RemoveExpandedUnitId {\n static readonly type: string = TimesheetActionTypes.RemoveExpandedUnitId;\n\n constructor(readonly unitId: number) {}\n}\n","import { Selector } from '@ngxs/store';\nimport { TimesheetState } from './timesheet.state';\nimport { TimesheetStateModel } from './timesheet-state.model';\nimport { UnitSlimDtoModel } from '../../../api/models/dtos/unit-slim.dto.model';\nimport { UnitPlanningSlimDtoModel } from '../../../api/models/dtos/unit-planning-slim.dto.model';\n\nexport class TimesheetSelectors {\n @Selector([TimesheetState])\n static withCrossUtilizedUsers(state: TimesheetStateModel): boolean {\n return state.withCrossUtilization;\n }\n\n @Selector([TimesheetState])\n static recentTimesheetUnits(\n state: TimesheetStateModel,\n ): readonly (UnitSlimDtoModel | UnitPlanningSlimDtoModel)[] {\n return state.recentUnits;\n }\n\n /**\n * Get the most recent / latest unit that was viewed.\n */\n @Selector([TimesheetState])\n static mostRecentTimesheetUnit(\n state: TimesheetStateModel,\n ): UnitSlimDtoModel | UnitPlanningSlimDtoModel | undefined {\n return state.recentUnits.length > 0 ? state.recentUnits[0] : undefined;\n }\n\n @Selector([TimesheetState])\n static collapsedUnitIds(state: TimesheetStateModel): number[] {\n return [...state.collapsedUnitIds];\n }\n}\n","import { Injectable } from '@angular/core';\nimport { Action, State, StateContext } from '@ngxs/store';\nimport { Observable } from 'rxjs';\nimport { TimesheetStateModel } from './timesheet-state.model';\nimport {\n AddExpandedUnitId,\n AddTimesheetRecentUnit,\n InitUserTimesheetSettings,\n RemoveExpandedUnitId,\n ResetTimesheetCrossUtilizationState,\n SaveTimesheetCrossUtilizationSettings,\n SetTimesheetCrossUtilizationState,\n} from './timesheet.actions';\nimport { UserService } from '../../../api/services/user.service';\n\nconst MAX_NUMBER_OF_RECENT_UNITS = 4;\n\nconst defaultTimesheetState: TimesheetStateModel = {\n week: 0,\n year: 0,\n recentUnits: [],\n withCrossUtilization: false,\n collapsedUnitIds: [],\n};\n\n@State({\n name: 'timesheet',\n defaults: defaultTimesheetState,\n})\n@Injectable({\n providedIn: 'root',\n})\nexport class TimesheetState {\n constructor(\n private userService: UserService,\n ) {\n }\n\n @Action(InitUserTimesheetSettings)\n initUserTimesheetSettingsState(\n ctx: StateContext,\n { recentUnits, withCrossUtilization }: InitUserTimesheetSettings,\n ): void {\n ctx.patchState({\n recentUnits,\n withCrossUtilization,\n });\n }\n\n @Action(SetTimesheetCrossUtilizationState)\n setCrossUtilizationStateState$(\n ctx: StateContext,\n { withCrossUtilization }: SetTimesheetCrossUtilizationState,\n ): Observable {\n ctx.patchState({\n withCrossUtilization,\n });\n\n return ctx.dispatch(new SaveTimesheetCrossUtilizationSettings(withCrossUtilization));\n }\n\n @Action(ResetTimesheetCrossUtilizationState)\n resetUserCrossUtilizationState(ctx: StateContext): void {\n ctx.setState(defaultTimesheetState);\n }\n\n @Action(SaveTimesheetCrossUtilizationSettings)\n saveTimesheetSettings$(\n ctx: StateContext,\n { withCrossUtilization }: SaveTimesheetCrossUtilizationSettings,\n ): Observable {\n return this.userService.saveTimesheetCrossUtilizationSettings$(withCrossUtilization);\n }\n\n @Action(AddTimesheetRecentUnit)\n addTimesheetRecentUnit(\n { patchState, getState }: StateContext,\n { unit }: AddTimesheetRecentUnit,\n ): void {\n const { recentUnits } = getState();\n\n // Check if given unit already exists in queue\n const existingUnitIndex = recentUnits.findIndex((element) => (element.unitId === unit.unitId));\n\n // Create a new array of units with the most recent in front.\n const updatedRecentUnits = [unit, ...recentUnits];\n\n if (existingUnitIndex !== -1) {\n // Remove duplicates\n updatedRecentUnits.splice(existingUnitIndex + 1, 1);\n }\n\n // Limit queue to a given maximum number of entries.\n updatedRecentUnits.length = Math.min(updatedRecentUnits.length, MAX_NUMBER_OF_RECENT_UNITS);\n\n patchState({\n recentUnits: updatedRecentUnits,\n });\n }\n\n @Action(AddExpandedUnitId)\n addExpandedUnitsId(ctx: StateContext, { unitId }: AddExpandedUnitId): void {\n const { collapsedUnitIds } = ctx.getState();\n\n ctx.patchState({\n collapsedUnitIds: collapsedUnitIds.filter((id) => id !== unitId),\n });\n }\n\n @Action(RemoveExpandedUnitId)\n removeExpandedUnitsId(ctx: StateContext, { unitId }: RemoveExpandedUnitId): void {\n const { collapsedUnitIds } = ctx.getState();\n\n const set = new Set(collapsedUnitIds);\n\n set.add(unitId);\n\n ctx.patchState({\n collapsedUnitIds: Array.from(set),\n });\n }\n}\n","import { Injectable } from '@angular/core';\nimport { Observable } from 'rxjs';\nimport { Action, State, StateContext } from '@ngxs/store';\nimport { UnitListStateModel } from './unit-list-state.model';\nimport {\n InitUnitListSettings,\n ResetUnitListOptions,\n ResetUnitListSettings,\n SaveUnitListSettings,\n SetUnitListOptions,\n SetUnitListSelectedColumns,\n SetUnitListSettings,\n} from './unit-list.actions';\nimport { unitsListColumnsInfo } from '../../../api/meta-info/units-list.info';\nimport { UserService } from '../../../api/services/user.service';\nimport { UNIT_LIST_DEFAULT_PAGE_SIZE } from '../../../shared/constants';\nimport { GenericListState } from '../generic-list/generic-list.state';\n\n/* eslint-disable @typescript-eslint/no-unused-vars */\n\nconst defaultUnitListState: UnitListStateModel = {\n selectedColumns: Array.from(unitsListColumnsInfo.entries())\n .filter(([_key, value]) => (value.selectable && value.selected))\n .map(([key, _value]) => key),\n pageIndex: 0,\n pageSize: UNIT_LIST_DEFAULT_PAGE_SIZE,\n columnFilters: {},\n sortColumn: '',\n sortDirection: '',\n};\n\n/* eslint-enable @typescript-eslint/no-unused-vars */\n\n@State({\n name: 'unitList',\n defaults: defaultUnitListState,\n})\n@Injectable({\n providedIn: 'root',\n})\nexport class UnitListState extends GenericListState {\n constructor(\n private userService: UserService,\n ) {\n super();\n }\n\n @Action(SetUnitListSelectedColumns)\n setUnitListSelectedColumns$(\n ctx: StateContext,\n { columns }: SetUnitListSelectedColumns,\n ): Observable {\n ctx.patchState(this.cloneSelectedColumns(columns, unitsListColumnsInfo));\n\n return ctx.dispatch(new SaveUnitListSettings(ctx.getState()));\n }\n\n @Action(SetUnitListOptions)\n setUnitListOptions$(ctx: StateContext, { options }: SetUnitListOptions): Observable {\n ctx.patchState(this.cloneListOptions(options, unitsListColumnsInfo));\n\n return ctx.dispatch(new SaveUnitListSettings(ctx.getState()));\n }\n\n @Action(ResetUnitListOptions)\n resetUnitListOptions$(ctx: StateContext): Observable {\n ctx.patchState({\n columnFilters: {},\n });\n\n return ctx.dispatch(new SaveUnitListSettings(ctx.getState()));\n }\n\n @Action(InitUnitListSettings)\n InitUnitListSettings(ctx: StateContext, { settings }: InitUnitListSettings): void {\n ctx.patchState(this.cloneListSettings(settings, unitsListColumnsInfo));\n }\n\n @Action(SetUnitListSettings)\n setUnitListSettings$(\n ctx: StateContext,\n { settings }: SetUnitListSettings,\n ): Observable {\n ctx.patchState(this.cloneListSettings(settings, unitsListColumnsInfo));\n\n return ctx.dispatch(new SaveUnitListSettings(ctx.getState()));\n }\n\n @Action(ResetUnitListSettings)\n resetUnitListSettings(ctx: StateContext): void {\n ctx.setState(defaultUnitListState);\n }\n\n @Action(SaveUnitListSettings)\n saveUnitListSettings$(\n ctx: StateContext,\n { settings }: SaveUnitListSettings,\n ): Observable {\n return this.userService.saveUnitListSettings$(settings);\n }\n}\n","import { Selector } from '@ngxs/store';\nimport { UnitListState } from './unit-list.state';\nimport { UnitListOptions } from './unit-list.actions';\nimport { UnitListStateModel } from './unit-list-state.model';\n\nexport class UnitListSelectors {\n @Selector([UnitListState])\n static selectedColumns(state: UnitListStateModel): UnitListStateModel['selectedColumns'] {\n return [...state.selectedColumns];\n }\n\n @Selector([UnitListState])\n static options(state: UnitListStateModel): UnitListOptions {\n return {\n pageIndex: state.pageIndex,\n pageSize: state.pageSize,\n columnFilters: { ...state.columnFilters },\n sortColumn: state.sortColumn,\n sortDirection: state.sortDirection,\n };\n }\n}\n","import { GenericListOptions } from '../generic-list';\nimport { UnitsListColumnKey } from '../../../api/meta-info/units-list.info';\nimport { UnitColumnFilters } from '../../../api/filter-columns';\nimport { UnitListStateModel } from './unit-list-state.model';\n\n/**\n * Action types for UnitListState\n */\nexport enum UnitListActionTypes {\n SetUnitListSelectedColumns = '[Unit List Page] Set Selected Columns',\n SetUnitListOptions = '[Unit List Page] Set Options',\n ResetUnitListOptions = '[Unit List Page] Reset Options',\n InitUnitListSettings = '[User API] Initialize Unit List Settings',\n SetUnitListSettings = '[User API] Set Unit List Settings',\n ResetUnitListSettings = '[User API] Reset Unit List Settings',\n SaveUnitListSettings = '[User API] Save Unit List Settings',\n}\n\nexport interface UnitListOptions extends GenericListOptions {\n columnFilters: UnitColumnFilters;\n}\n\nexport class SetUnitListSelectedColumns {\n static readonly type: string = UnitListActionTypes.SetUnitListSelectedColumns;\n\n constructor(public columns: UnitsListColumnKey[]) {}\n}\n\nexport class SetUnitListOptions {\n static readonly type: string = UnitListActionTypes.SetUnitListOptions;\n\n constructor(public options: UnitListOptions) {}\n}\n\nexport class ResetUnitListOptions {\n static readonly type: string = UnitListActionTypes.ResetUnitListOptions;\n}\n\nexport class InitUnitListSettings {\n static readonly type: string = UnitListActionTypes.InitUnitListSettings;\n\n constructor(public settings: UnitListStateModel) {}\n}\n\nexport class SetUnitListSettings {\n static readonly type: string = UnitListActionTypes.SetUnitListSettings;\n\n constructor(public settings: UnitListStateModel) {}\n}\n\nexport class ResetUnitListSettings {\n static readonly type: string = UnitListActionTypes.ResetUnitListSettings;\n}\n\nexport class SaveUnitListSettings {\n static readonly type: string = UnitListActionTypes.SaveUnitListSettings;\n\n constructor(public settings: UnitListStateModel) {}\n}\n","import { UnitPlanningRangeStateModel } from './unit-planning-range-state.model';\n\n/**\n * Action types for UnitPlanningRangeState\n */\nexport enum UnitPlanningRangeActionTypes {\n InitUnitPlanningRangeSettings = '[Unit Planning API] Initialize Unit Planning Range Settings',\n SetUnitPlanningRangeSettings = '[Unit Planning API] Set Unit Planning Range Settings',\n ResetUnitPlanningRangeSettings = '[Unit Planning API] Reset Unit Planning Range Settings',\n SaveUnitPlanningRangeSettings = '[Unit Planning API] Save Unit Planning Range Settings',\n}\n\nexport class InitUnitPlanningRangeSettings {\n static readonly type: string = UnitPlanningRangeActionTypes.InitUnitPlanningRangeSettings;\n\n constructor(public settings: UnitPlanningRangeStateModel) {}\n}\n\nexport class SetUnitPlanningRangeSettings {\n static readonly type: string = UnitPlanningRangeActionTypes.SetUnitPlanningRangeSettings;\n\n constructor(public settings: UnitPlanningRangeStateModel) {}\n}\n\nexport class ResetUnitPlanningRangeSettings {\n static readonly type: string = UnitPlanningRangeActionTypes.ResetUnitPlanningRangeSettings;\n}\n\nexport class SaveUnitPlanningRangeSettings {\n static readonly type: string = UnitPlanningRangeActionTypes.SaveUnitPlanningRangeSettings;\n\n constructor(public settings: UnitPlanningRangeStateModel) {}\n}\n","import { Selector } from '@ngxs/store';\nimport { UnitPlanningRangeStateModel } from './unit-planning-range-state.model';\nimport { UnitPlanningRangeState } from './unit-planning-range.state';\n\nexport class UnitPlanningRangeSelectors {\n @Selector([UnitPlanningRangeState])\n static range(state: UnitPlanningRangeStateModel): UnitPlanningRangeStateModel['range'] {\n return state.range;\n }\n}\n","import { Injectable } from '@angular/core';\nimport { Observable } from 'rxjs';\nimport { Action, State, StateContext } from '@ngxs/store';\nimport { UnitPlanningRangeStateModel } from './unit-planning-range-state.model';\nimport {\n InitUnitPlanningRangeSettings,\n ResetUnitPlanningRangeSettings,\n SaveUnitPlanningRangeSettings,\n SetUnitPlanningRangeSettings,\n} from './unit-planning-range.actions';\nimport { UserService } from '../../../api/services/user.service';\nimport { GenericListState } from '../generic-list/generic-list.state';\n\n/* eslint-disable @typescript-eslint/no-unused-vars */\n\nconst defaultUnitPlanningRangeState: UnitPlanningRangeStateModel = {\n range: null,\n};\n\n/* eslint-enable @typescript-eslint/no-unused-vars */\n\n@State({\n name: 'UnitPlanningRange',\n defaults: defaultUnitPlanningRangeState,\n})\n@Injectable({\n providedIn: 'root',\n})\nexport class UnitPlanningRangeState extends GenericListState {\n constructor(\n private userService: UserService,\n ) {\n super();\n }\n\n @Action(InitUnitPlanningRangeSettings)\n initUnitPlanningRangeSettings(\n ctx: StateContext,\n { settings }: InitUnitPlanningRangeSettings,\n ): void {\n ctx.patchState({\n range: settings.range,\n });\n }\n\n @Action(SetUnitPlanningRangeSettings)\n setUnitPlanningRangeSettings$(\n ctx: StateContext,\n { settings }: SetUnitPlanningRangeSettings,\n ): Observable {\n ctx.patchState({\n range: settings.range,\n });\n\n return ctx.dispatch(new SaveUnitPlanningRangeSettings(ctx.getState()));\n }\n\n @Action(ResetUnitPlanningRangeSettings)\n resetUnitPlanningRangeSettings(ctx: StateContext): void {\n ctx.setState(defaultUnitPlanningRangeState);\n }\n\n @Action(SaveUnitPlanningRangeSettings)\n saveUnitPlanningRangeSettings$(\n ctx: StateContext,\n { settings }: SaveUnitPlanningRangeSettings,\n ): Observable {\n return this.userService.saveUnitPlanningRangeSettings$(settings);\n }\n}\n","import { UnitPlanningSidepanelIndexStateModel } from './unit-planning-sidepanel-index-state.model';\n\n/**\n * Action types for UnitPlanningSidepanelIndex\n */\nexport enum UnitPlanningSidepanelIndexActionTypes {\n InitUnitPlanningSidepanelIndex = '[UnitPlanningSidepanelIndex API] Initialize Sidepanel',\n SetUnitPlanningSidepanelIndex = '[UnitPlanningSidepanelIndex API] Set UnitPlanningSidepanelIndex',\n ResetUnitPlanningSidepanelIndex = '[UnitPlanningSidepanelIndex API] Reset UnitPlanningSidepanelIndex',\n}\n\nexport class InitUnitPlanningSidepanelIndex {\n static readonly type: string = UnitPlanningSidepanelIndexActionTypes.InitUnitPlanningSidepanelIndex;\n\n constructor(public settings: UnitPlanningSidepanelIndexStateModel) {}\n}\n\nexport class ResetUnitPlanningSidepanelIndex {\n static readonly type: string = UnitPlanningSidepanelIndexActionTypes.ResetUnitPlanningSidepanelIndex;\n}\n\nexport class SetUnitPlanningSidepanelIndex {\n static readonly type: string = UnitPlanningSidepanelIndexActionTypes.SetUnitPlanningSidepanelIndex;\n\n constructor(public settings: UnitPlanningSidepanelIndexStateModel) {}\n}\n","import { Injectable } from '@angular/core';\nimport { Selector } from '@ngxs/store';\nimport { UnitPlanningSidepanelIndexStateModel } from './unit-planning-sidepanel-index-state.model';\nimport { UnitPlanningSidepanelIndexState } from './unit-planning-sidepanel-index.state';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class UnitPlanningSidepanelIndexSelectors {\n @Selector([UnitPlanningSidepanelIndexState])\n static index(state: UnitPlanningSidepanelIndexStateModel): number {\n return state.index;\n }\n}\n","import { Injectable } from '@angular/core';\nimport { Observable } from 'rxjs';\nimport { Action, State, StateContext } from '@ngxs/store';\nimport { UnitPlanningSidepanelIndexStateModel } from './unit-planning-sidepanel-index-state.model';\nimport { UserService } from '../../../api/services/user.service';\nimport {\n InitUnitPlanningSidepanelIndex, ResetUnitPlanningSidepanelIndex, SetUnitPlanningSidepanelIndex,\n} from './unit-planning-sidepanel-index.actions';\n\nconst defaultState: UnitPlanningSidepanelIndexStateModel = { index: 0 };\n\n@State({\n name: 'UnitPlanningSidePanelIndex',\n defaults: defaultState,\n})\n@Injectable({\n providedIn: 'root',\n})\nexport class UnitPlanningSidepanelIndexState {\n constructor(\n private userService: UserService,\n ) { }\n\n @Action(InitUnitPlanningSidepanelIndex)\n initUnitPlanningSidepanelIndex(\n ctx: StateContext,\n { settings }: InitUnitPlanningSidepanelIndex,\n ): void {\n ctx.setState(\n { index: settings.index },\n );\n }\n\n @Action(SetUnitPlanningSidepanelIndex)\n setUnitPlanningSidepanelIndex$(\n ctx: StateContext,\n { settings }: SetUnitPlanningSidepanelIndex,\n ): Observable {\n ctx.patchState({ index: settings.index });\n\n return this.userService.saveUnitPlanningSidePanelIndex$(ctx.getState());\n }\n\n @Action(ResetUnitPlanningSidepanelIndex)\n resetUnitPlanningSidepanelIndex(ctx: StateContext): void {\n ctx.setState(defaultState);\n }\n}\n","import { UnitPlanningSidepanelStateModel } from './unit-planning-sidepanel-state.model';\n\n/**\n * Action types for UnitPlanningSidepanel\n */\nexport enum UnitPlanningSidepanelActionTypes {\n InitUnitPlanningSidepanel = '[UnitPlanningSidepanel API] Initialize Sidepanel isOpen',\n OpenUnitPlanningSidepanel = '[UnitPlanningSidepanel API] Set UnitPlanningSidepanel open',\n CloseUnitPlanningSidepanel = '[UnitPlanningSidepanel API] Set UnitPlanningSidepanel closed',\n ToggleUnitPlanningSidepanel = '[UnitPlanningSidepanel API] Toggle UnitPlanningSidepanel',\n}\n\nexport class InitUnitPlanningSidepanel {\n static readonly type: string = UnitPlanningSidepanelActionTypes.InitUnitPlanningSidepanel;\n\n constructor(public isOpen: UnitPlanningSidepanelStateModel) {}\n}\n\nexport class OpenUnitPlanningSidepanel {\n static readonly type: string = UnitPlanningSidepanelActionTypes.OpenUnitPlanningSidepanel;\n}\n\nexport class CloseUnitPlanningSidepanel {\n static readonly type: string = UnitPlanningSidepanelActionTypes.CloseUnitPlanningSidepanel;\n}\n\nexport class ToggleUnitPlanningSidepanel {\n static readonly type: string = UnitPlanningSidepanelActionTypes.ToggleUnitPlanningSidepanel;\n}\n","import { Injectable } from '@angular/core';\nimport { Selector } from '@ngxs/store';\nimport { UnitPlanningSidepanelStateModel } from './unit-planning-sidepanel-state.model';\nimport { UnitPlanningSidepanelState } from './unit-planning-sidepanel.state';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class UnitPlanningSidepanelSelectors {\n @Selector([UnitPlanningSidepanelState])\n static isOpen(state: UnitPlanningSidepanelStateModel): boolean {\n return state.isOpen;\n }\n}\n","import { Injectable } from '@angular/core';\nimport { Observable } from 'rxjs';\nimport { Action, State, StateContext } from '@ngxs/store';\nimport { UnitPlanningSidepanelStateModel } from './unit-planning-sidepanel-state.model';\nimport { UserService } from '../../../api/services/user.service';\nimport {\n CloseUnitPlanningSidepanel,\n InitUnitPlanningSidepanel,\n OpenUnitPlanningSidepanel,\n ToggleUnitPlanningSidepanel,\n} from './unit-planning-sidepanel.actions';\n\nconst openState: UnitPlanningSidepanelStateModel = { isOpen: true };\nconst closedState: UnitPlanningSidepanelStateModel = { isOpen: false };\nconst defaultState: UnitPlanningSidepanelStateModel = openState;\n\n@State({\n name: 'UnitPlanningSidePanel',\n defaults: defaultState,\n})\n@Injectable({\n providedIn: 'root',\n})\nexport class UnitPlanningSidepanelState {\n constructor(\n private userService: UserService,\n ) { }\n\n @Action(InitUnitPlanningSidepanel)\n initUnitPlanningSidepanel(\n ctx: StateContext,\n { isOpen }: InitUnitPlanningSidepanel,\n ): void {\n ctx.setState(\n isOpen,\n );\n }\n\n @Action(OpenUnitPlanningSidepanel)\n openUnitPlanningSidepanel$(ctx: StateContext): Observable {\n ctx.patchState(openState);\n\n return this.userService.saveUnitPlanningSidePanel$(openState);\n }\n\n @Action(CloseUnitPlanningSidepanel)\n closeUnitPlanningSidepanel$(ctx: StateContext): Observable {\n ctx.patchState(closedState);\n\n return this.userService.saveUnitPlanningSidePanel$(closedState);\n }\n\n @Action(ToggleUnitPlanningSidepanel)\n toggleUnitPlanningSidepanel$(ctx: StateContext): Observable {\n const action = ctx.getState().isOpen ? new CloseUnitPlanningSidepanel() : new OpenUnitPlanningSidepanel();\n\n return ctx.dispatch(action);\n }\n}\n","import { UnitPlanningTotalsStateModel } from './unit-planning-totals-state.model';\n\n/**\n * Action types for UnitPlanningTotalsState\n */\nexport enum UnitPlanningTotalsActionTypes {\n InitUnitPlanningTotalsSettings = '[Unit Planning API] Initialize Unit Planning Totals Settings',\n SetUnitPlanningTotalsSettings = '[Unit Planning API] Set Unit Planning Totals Settings',\n ResetUnitPlanningTotalsSettings = '[Unit Planning API] Reset Unit Planning Totals Settings',\n SaveUnitPlanningTotalsSettings = '[Unit Planning API] Save Unit Planning Totals Settings',\n}\n\nexport class InitUnitPlanningTotalsSettings {\n static readonly type: string = UnitPlanningTotalsActionTypes.InitUnitPlanningTotalsSettings;\n\n constructor(public settings: UnitPlanningTotalsStateModel) {}\n}\n\nexport class SetUnitPlanningTotalsSettings {\n static readonly type: string = UnitPlanningTotalsActionTypes.SetUnitPlanningTotalsSettings;\n\n constructor(public settings: UnitPlanningTotalsStateModel) {}\n}\n\nexport class ResetUnitPlanningTotalsSettings {\n static readonly type: string = UnitPlanningTotalsActionTypes.ResetUnitPlanningTotalsSettings;\n}\n\nexport class SaveUnitPlanningTotalsSettings {\n static readonly type: string = UnitPlanningTotalsActionTypes.SaveUnitPlanningTotalsSettings;\n\n constructor(public settings: UnitPlanningTotalsStateModel) {}\n}\n","import { Selector } from '@ngxs/store';\nimport { UnitPlanningTotalsStateModel } from './unit-planning-totals-state.model';\nimport { UnitPlanningTotalsState } from './unit-planning-totals.state';\n\nexport class UnitPlanningTotalsSelectors {\n @Selector([UnitPlanningTotalsState])\n static selectedTotals(state: UnitPlanningTotalsStateModel): UnitPlanningTotalsStateModel['selectedTotals'] {\n return state.selectedTotals;\n }\n\n @Selector([UnitPlanningTotalsState])\n static selectedCapacityUnit(state: UnitPlanningTotalsStateModel): UnitPlanningTotalsStateModel['selectedCapacityUnit'] {\n return state.selectedCapacityUnit;\n }\n}\n","import { Injectable } from '@angular/core';\nimport { Observable } from 'rxjs';\nimport { Action, State, StateContext } from '@ngxs/store';\nimport { CapacityUnits } from '../../../modules/administration/non-human-resources/capacity-units';\nimport { UnitPlanningTotalsStateModel } from './unit-planning-totals-state.model';\nimport {\n InitUnitPlanningTotalsSettings,\n ResetUnitPlanningTotalsSettings,\n SaveUnitPlanningTotalsSettings,\n SetUnitPlanningTotalsSettings,\n} from './unit-planning-totals.actions';\nimport { UserService } from '../../../api/services/user.service';\nimport { GenericListState } from '../generic-list/generic-list.state';\n\n/* eslint-disable @typescript-eslint/no-unused-vars */\n\nconst defaultUnitPlanningTotalsState: UnitPlanningTotalsStateModel = {\n selectedTotals: ['total-capacity', 'free-capacity', 'total', 'total-recorded'],\n selectedCapacityUnit: CapacityUnits.HoursWeek,\n};\n\n/* eslint-enable @typescript-eslint/no-unused-vars */\n\n@State({\n name: 'UnitPlanningTotals',\n defaults: defaultUnitPlanningTotalsState,\n})\n@Injectable({\n providedIn: 'root',\n})\nexport class UnitPlanningTotalsState extends GenericListState {\n constructor(\n private userService: UserService,\n ) {\n super();\n }\n\n @Action(InitUnitPlanningTotalsSettings)\n initUnitPlanningTotalsSettings(\n ctx: StateContext,\n { settings }: InitUnitPlanningTotalsSettings,\n ): void {\n ctx.patchState({\n selectedTotals: settings.selectedTotals,\n selectedCapacityUnit: settings.selectedCapacityUnit,\n });\n }\n\n @Action(SetUnitPlanningTotalsSettings)\n setUnitPlanningTotalsSettings$(\n ctx: StateContext,\n { settings }: SetUnitPlanningTotalsSettings,\n ): Observable {\n ctx.patchState({\n selectedTotals: settings.selectedTotals,\n selectedCapacityUnit: settings.selectedCapacityUnit,\n });\n\n return ctx.dispatch(new SaveUnitPlanningTotalsSettings(ctx.getState()));\n }\n\n @Action(ResetUnitPlanningTotalsSettings)\n resetUnitPlanningTotalsSettings(ctx: StateContext): void {\n ctx.setState(defaultUnitPlanningTotalsState);\n }\n\n @Action(SaveUnitPlanningTotalsSettings)\n saveUnitPlanningTotalsSettings$(\n ctx: StateContext,\n { settings }: SaveUnitPlanningTotalsSettings,\n ): Observable {\n return this.userService.saveUnitPlanningTotalsSettings$(settings);\n }\n}\n","import { UnitPlanningResourceDtoModel } from '../../../api/models/dtos/unit-planning-resource.dto.model';\nimport { PlanningCategorySelectItem } from '../../../components/planning-category-select';\nimport { SkillFilterModel } from '../../../components/skill-filter/skill-filter.component';\nimport { Unit } from '../../../models/unit.interface';\n\nexport enum UnitPlanningActionTypes {\n InitUnitPlanningSettings = '[API] Init Unit Planning Settings State',\n AddUnitPlanningRecentUnit = '[UnitPlanning] Add Unit Planning Recent Unit',\n SetUnitPlanningFilters = '[UnitPlanning] Set Unit Planning Filters',\n}\n\n/**\n * In the backend only a list of recent units is stored. The week and year is\n * not stored in the backend.\n */\nexport class InitUnitPlanningSettings {\n static readonly type: string = UnitPlanningActionTypes.InitUnitPlanningSettings;\n\n constructor(\n readonly recentUnits: readonly Unit[],\n ) {}\n}\n\nexport class AddUnitPlanningRecentUnit {\n static readonly type: string = UnitPlanningActionTypes.AddUnitPlanningRecentUnit;\n\n constructor(\n public unit: Unit,\n ) {}\n}\n\nexport class SetUnitPlanningFilters {\n static readonly type: string = UnitPlanningActionTypes.SetUnitPlanningFilters;\n\n constructor(\n public unit: number,\n public data: {\n selectedSkills?: SkillFilterModel[];\n selectedResources?: UnitPlanningResourceDtoModel[];\n selectedCategories?: PlanningCategorySelectItem[];\n },\n ) {}\n}\n","import { Injectable } from '@angular/core';\nimport {\n Action,\n Selector,\n State,\n StateContext,\n} from '@ngxs/store';\nimport { Unit } from '../../../models/unit.interface';\nimport { SkillFilterModel } from '../../../components/skill-filter/skill-filter.component';\nimport { PlanningCategorySelectItem } from '../../../components/planning-category-select';\nimport { UnitPlanningResourceDtoModel } from '../../../api/models/dtos/unit-planning-resource.dto.model';\nimport { UnitPlanningStateModel } from './unit-planning-state.model';\nimport { UserService } from '../../../api/services/user.service';\nimport {\n AddUnitPlanningRecentUnit,\n InitUnitPlanningSettings,\n SetUnitPlanningFilters,\n} from './unit-planning.actions';\n\nconst MAX_NUMBER_OF_RECENT_UNITS = 4;\n\nconst defaultUnitPlanningState: UnitPlanningStateModel = {\n recentUnits: [],\n unitSettings: {},\n};\n\n@State({\n name: 'unitPlanning',\n defaults: defaultUnitPlanningState,\n})\n@Injectable({\n providedIn: 'root',\n})\nexport class UnitPlanningState {\n constructor(\n private userService: UserService,\n ) {\n }\n\n @Selector([UnitPlanningState])\n static recentPlanningUnits(state: UnitPlanningStateModel): readonly Unit[] {\n return state.recentUnits;\n }\n\n /**\n * Get the most recent / latest unit that was viewed.\n */\n @Selector([UnitPlanningState])\n static mostRecentPlanningUnit(state: UnitPlanningStateModel): Unit | null {\n return state.recentUnits.length > 0 ? state.recentUnits[0] : null;\n }\n\n @Selector([UnitPlanningState])\n static unitSettingsForUnit(state: UnitPlanningStateModel, unit: number): ({\n selectedSkills?: SkillFilterModel[];\n selectedResources?: UnitPlanningResourceDtoModel[];\n selectedCategories?: PlanningCategorySelectItem[];\n }) | undefined {\n return state.unitSettings?.[unit] || undefined;\n }\n\n @Action(InitUnitPlanningSettings)\n initUnitPlanningSettingsState(\n ctx: StateContext,\n { recentUnits }: InitUnitPlanningSettings,\n ): void {\n ctx.patchState({\n recentUnits,\n });\n }\n\n @Action(AddUnitPlanningRecentUnit)\n addUnitPlanningRecentUnit(\n { patchState, getState }: StateContext,\n { unit }: AddUnitPlanningRecentUnit,\n ): void {\n const { recentUnits } = getState();\n\n // Check if given unit already exists in queue\n const existingUnitIndex = recentUnits.findIndex((element) => (element.unitId === unit.unitId));\n\n // Create a new array of units with the most recent in front.\n const updatedRecentUnits = [unit, ...recentUnits];\n\n if (existingUnitIndex !== -1) {\n // Remove duplicates\n updatedRecentUnits.splice(existingUnitIndex + 1, 1);\n }\n\n // Limit queue to a given maximum number of entries.\n updatedRecentUnits.length = Math.min(updatedRecentUnits.length, MAX_NUMBER_OF_RECENT_UNITS);\n\n patchState({\n recentUnits: updatedRecentUnits,\n });\n }\n\n @Action(SetUnitPlanningFilters)\n setUnitPlanningFilters(\n { patchState, getState }: StateContext,\n { unit, data }: SetUnitPlanningFilters,\n ): void {\n const { unitSettings } = getState();\n\n patchState({\n unitSettings: {\n ...unitSettings,\n [unit]: {\n selectedSkills: data.selectedSkills || unitSettings[unit]?.selectedSkills || [],\n selectedCategories: data.selectedCategories || unitSettings[unit]?.selectedCategories || [],\n selectedResources: data.selectedResources || unitSettings[unit]?.selectedResources || [],\n },\n },\n });\n }\n}\n","import { Injectable } from '@angular/core';\nimport { Observable } from 'rxjs';\nimport { Action, State, StateContext } from '@ngxs/store';\nimport { UserListStateModel } from './user-list-state.model';\nimport {\n InitUserListSettings,\n ResetUserListOptions,\n ResetUserListSettings,\n SaveUserListSettings,\n SetUserListOptions,\n SetUserListSelectedColumns,\n SetUserListSettings,\n} from './user-list.actions';\nimport { usersListColumnsInfo } from '../../../api/meta-info/users-list.info';\nimport { UserService } from '../../../api/services/user.service';\nimport { USER_LIST_DEFAULT_PAGE_SIZE } from '../../../shared/constants';\nimport { GenericListState } from '../generic-list/generic-list.state';\n\n/* eslint-disable @typescript-eslint/no-unused-vars */\n\nconst defaultUserListState: UserListStateModel = {\n selectedColumns: Array.from(usersListColumnsInfo.entries())\n .filter(([_key, value]) => (value.selectable && value.selected))\n .map(([key, _value]) => key),\n pageIndex: 0,\n pageSize: USER_LIST_DEFAULT_PAGE_SIZE,\n columnFilters: {},\n sortColumn: '',\n sortDirection: '',\n};\n\n/* eslint-enable @typescript-eslint/no-unused-vars */\n\n@State({\n name: 'userList',\n defaults: defaultUserListState,\n})\n@Injectable({\n providedIn: 'root',\n})\nexport class UserListState extends GenericListState {\n constructor(\n private userService: UserService,\n ) {\n super();\n }\n\n @Action(SetUserListSelectedColumns)\n setUserListSelectedColumns$(\n ctx: StateContext,\n { columns }: SetUserListSelectedColumns,\n ): Observable {\n ctx.patchState(this.cloneSelectedColumns(columns, usersListColumnsInfo));\n\n return ctx.dispatch(new SaveUserListSettings(ctx.getState()));\n }\n\n @Action(SetUserListOptions)\n setUserListOptions$(ctx: StateContext, { options }: SetUserListOptions): Observable {\n ctx.patchState(this.cloneListOptions(options, usersListColumnsInfo));\n\n return ctx.dispatch(new SaveUserListSettings(ctx.getState()));\n }\n\n @Action(ResetUserListOptions)\n resetUserListOptions$(ctx: StateContext): Observable {\n ctx.patchState({\n columnFilters: {},\n });\n\n return ctx.dispatch(new SaveUserListSettings(ctx.getState()));\n }\n\n @Action(InitUserListSettings)\n initUserListSettings(ctx: StateContext, { settings }: InitUserListSettings): void {\n ctx.patchState(this.cloneListSettings(settings, usersListColumnsInfo));\n }\n\n @Action(SetUserListSettings)\n setUserListSettings$(\n ctx: StateContext,\n { settings }: SetUserListSettings,\n ): Observable {\n ctx.patchState(this.cloneListSettings(settings, usersListColumnsInfo));\n\n return ctx.dispatch(new SaveUserListSettings(ctx.getState()));\n }\n\n @Action(ResetUserListSettings)\n resetUserListSettings(ctx: StateContext): void {\n ctx.setState(defaultUserListState);\n }\n\n @Action(SaveUserListSettings)\n saveUserListSettings$(\n ctx: StateContext,\n { settings }: SaveUserListSettings,\n ): Observable {\n return this.userService.saveUserListSettings$(settings);\n }\n}\n","import { Selector } from '@ngxs/store';\nimport { UserListState } from './user-list.state';\nimport { UserListOptions } from './user-list.actions';\nimport { UserListStateModel } from './user-list-state.model';\n\nexport class UserListSelectors {\n @Selector([UserListState])\n static selectedColumns(state: UserListStateModel): UserListStateModel['selectedColumns'] {\n return [...state.selectedColumns];\n }\n\n @Selector([UserListState])\n static options(state: UserListStateModel): UserListOptions {\n return {\n pageIndex: state.pageIndex,\n pageSize: state.pageSize,\n columnFilters: { ...state.columnFilters },\n sortColumn: state.sortColumn,\n sortDirection: state.sortDirection,\n };\n }\n}\n","import { GenericListOptions } from '../generic-list';\nimport { UsersListColumnKey } from '../../../api/meta-info/users-list.info';\nimport { UserColumnFilters } from '../../../api/filter-columns';\nimport { UserListStateModel } from './user-list-state.model';\n\n/**\n * Action types for UserListState\n */\nexport enum UserListActionTypes {\n SetUserListSelectedColumns = '[User List Page] Set Selected Columns',\n SetUserListOptions = '[User List Page] Set Options',\n ResetUserListOptions = '[User List Page] Reset Options',\n InitUserListSettings = '[User API] Initialize User List Settings',\n SetUserListSettings = '[User API] Set User List Settings',\n ResetUserListSettings = '[User API] Reset User List Settings',\n SaveUserListSettings = '[User API] Save User List Settings',\n}\n\nexport interface UserListOptions extends GenericListOptions {\n columnFilters: UserColumnFilters;\n}\n\nexport class SetUserListSelectedColumns {\n static readonly type: string = UserListActionTypes.SetUserListSelectedColumns;\n\n constructor(public columns: UsersListColumnKey[]) {}\n}\n\nexport class SetUserListOptions {\n static readonly type: string = UserListActionTypes.SetUserListOptions;\n\n constructor(public options: UserListOptions) {}\n}\n\nexport class ResetUserListOptions {\n static readonly type: string = UserListActionTypes.ResetUserListOptions;\n}\n\nexport class InitUserListSettings {\n static readonly type: string = UserListActionTypes.InitUserListSettings;\n\n constructor(public settings: UserListStateModel) {}\n}\n\nexport class SetUserListSettings {\n static readonly type: string = UserListActionTypes.SetUserListSettings;\n\n constructor(public settings: UserListStateModel) {}\n}\n\nexport class ResetUserListSettings {\n static readonly type: string = UserListActionTypes.ResetUserListSettings;\n}\n\nexport class SaveUserListSettings {\n static readonly type: string = UserListActionTypes.SaveUserListSettings;\n\n constructor(public settings: UserListStateModel) {}\n}\n","import { UserPlanningRangeStateModel } from './user-planning-range-state.model';\n\n/**\n * Action types for UserPlanningRangeState\n */\nexport enum UserPlanningRangeActionTypes {\n InitUserPlanningRangeSettings = '[User Planning API] Initialize User Planning Range Settings',\n SetUserPlanningRangeSettings = '[User Planning API] Set User Planning Range Settings',\n ResetUserPlanningRangeSettings = '[User Planning API] Reset User Planning Range Settings',\n SaveUserPlanningRangeSettings = '[User Planning API] Save User Planning Range Settings',\n}\n\nexport class InitUserPlanningRangeSettings {\n static readonly type: string = UserPlanningRangeActionTypes.InitUserPlanningRangeSettings;\n\n constructor(public settings: UserPlanningRangeStateModel) {}\n}\n\nexport class SetUserPlanningRangeSettings {\n static readonly type: string = UserPlanningRangeActionTypes.SetUserPlanningRangeSettings;\n\n constructor(public settings: UserPlanningRangeStateModel) {}\n}\n\nexport class ResetUserPlanningRangeSettings {\n static readonly type: string = UserPlanningRangeActionTypes.ResetUserPlanningRangeSettings;\n}\n\nexport class SaveUserPlanningRangeSettings {\n static readonly type: string = UserPlanningRangeActionTypes.SaveUserPlanningRangeSettings;\n\n constructor(public settings: UserPlanningRangeStateModel) {}\n}\n","import { Selector } from '@ngxs/store';\nimport { UserPlanningRangeStateModel } from './user-planning-range-state.model';\nimport { UserPlanningRangeState } from './user-planning-range.state';\n\nexport class UserPlanningRangeSelectors {\n @Selector([UserPlanningRangeState])\n static range(state: UserPlanningRangeStateModel): UserPlanningRangeStateModel['range'] {\n return state.range;\n }\n}\n","import { Injectable } from '@angular/core';\nimport { Observable } from 'rxjs';\nimport { Action, State, StateContext } from '@ngxs/store';\nimport { UserPlanningRangeStateModel } from './user-planning-range-state.model';\nimport {\n InitUserPlanningRangeSettings,\n ResetUserPlanningRangeSettings,\n SaveUserPlanningRangeSettings,\n SetUserPlanningRangeSettings,\n} from './user-planning-range.actions';\nimport { UserService } from '../../../api/services/user.service';\nimport { GenericListState } from '../generic-list/generic-list.state';\n\n/* eslint-disable @typescript-eslint/no-unused-vars */\n\nconst defaultUserPlanningRangeState: UserPlanningRangeStateModel = {\n range: null,\n};\n\n/* eslint-enable @typescript-eslint/no-unused-vars */\n\n@State({\n name: 'UserPlanningRange',\n defaults: defaultUserPlanningRangeState,\n})\n@Injectable({\n providedIn: 'root',\n})\nexport class UserPlanningRangeState extends GenericListState {\n constructor(\n private userService: UserService,\n ) {\n super();\n }\n\n @Action(InitUserPlanningRangeSettings)\n initUserPlanningRangeSettings(\n ctx: StateContext,\n { settings }: InitUserPlanningRangeSettings,\n ): void {\n ctx.patchState({\n range: settings.range,\n });\n }\n\n @Action(SetUserPlanningRangeSettings)\n setUserPlanningRangeSettings$(\n ctx: StateContext,\n { settings }: SetUserPlanningRangeSettings,\n ): Observable {\n ctx.patchState({\n range: settings.range,\n });\n\n return ctx.dispatch(new SaveUserPlanningRangeSettings(ctx.getState()));\n }\n\n @Action(ResetUserPlanningRangeSettings)\n resetUserPlanningRangeSettings(ctx: StateContext): void {\n ctx.setState(defaultUserPlanningRangeState);\n }\n\n @Action(SaveUserPlanningRangeSettings)\n saveUserPlanningRangeSettings$(\n ctx: StateContext,\n { settings }: SaveUserPlanningRangeSettings,\n ): Observable {\n return this.userService.saveUserPlanningRangeSettings$(settings);\n }\n}\n","import { Injectable } from '@angular/core';\nimport { Selector } from '@ngxs/store';\nimport { UserPlanningSidepanelStateModel } from './user-planning-sidepanel-state.model';\nimport { UserPlanningSidepanelState } from './user-planning-sidepanel.state';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class UserPlanningSidepanelSelectors {\n @Selector([UserPlanningSidepanelState])\n static isOpen(state: UserPlanningSidepanelStateModel): boolean {\n return state.isOpen;\n }\n}\n","import { UserPlanningSidepanelStateModel } from './user-planning-sidepanel-state.model';\n\n/**\n * Action types for UserPlanningSidepanel\n */\nexport enum UserPlanningSidepanelActionTypes {\n InitUserPlanningSidepanel = '[UserPlanningSidepanel API] Initialize Sidepanel isOpen',\n OpenUserPlanningSidepanel = '[UserPlanningSidepanel API] Set UserPlanningSidepanel open',\n CloseUserPlanningSidepanel = '[UserPlanningSidepanel API] Set UserPlanningSidepanel closed',\n ToggleUserPlanningSidepanel = '[UserPlanningSidepanel API] Toggle UserPlanningSidepanel',\n}\n\nexport class InitUserPlanningSidepanel {\n static readonly type: string = UserPlanningSidepanelActionTypes.InitUserPlanningSidepanel;\n\n constructor(public isOpen: UserPlanningSidepanelStateModel) {}\n}\n\nexport class OpenUserPlanningSidepanel {\n static readonly type: string = UserPlanningSidepanelActionTypes.OpenUserPlanningSidepanel;\n}\n\nexport class CloseUserPlanningSidepanel {\n static readonly type: string = UserPlanningSidepanelActionTypes.CloseUserPlanningSidepanel;\n}\n\nexport class ToggleUserPlanningSidepanel {\n static readonly type: string = UserPlanningSidepanelActionTypes.ToggleUserPlanningSidepanel;\n}\n","import { Injectable } from '@angular/core';\nimport { Observable } from 'rxjs';\nimport { Action, State, StateContext } from '@ngxs/store';\nimport { UserPlanningSidepanelStateModel } from './user-planning-sidepanel-state.model';\nimport { UserService } from '../../../api/services/user.service';\nimport {\n CloseUserPlanningSidepanel,\n InitUserPlanningSidepanel,\n OpenUserPlanningSidepanel,\n ToggleUserPlanningSidepanel,\n} from './user-planning-sidepanel.actions';\n\nconst openState: UserPlanningSidepanelStateModel = { isOpen: true };\nconst closedState: UserPlanningSidepanelStateModel = { isOpen: false };\nconst defaultState: UserPlanningSidepanelStateModel = openState;\n\n@State({\n name: 'UserPlanningSidePanel',\n defaults: defaultState,\n})\n@Injectable({\n providedIn: 'root',\n})\nexport class UserPlanningSidepanelState {\n constructor(\n private userService: UserService,\n ) { }\n\n @Action(InitUserPlanningSidepanel)\n initUserPlanningSidepanel(\n ctx: StateContext,\n { isOpen }: InitUserPlanningSidepanel,\n ): void {\n ctx.setState(\n isOpen,\n );\n }\n\n @Action(OpenUserPlanningSidepanel)\n openUserPlanningSidepanel$(ctx: StateContext): Observable {\n ctx.patchState(openState);\n\n return this.userService.saveUserPlanningSidePanel$(openState);\n }\n\n @Action(CloseUserPlanningSidepanel)\n closeUserPlanningSidepanel$(ctx: StateContext): Observable {\n ctx.patchState(closedState);\n\n return this.userService.saveUserPlanningSidePanel$(closedState);\n }\n\n @Action(ToggleUserPlanningSidepanel)\n toggleUserPlanningSidepanel$(ctx: StateContext): Observable {\n const action = ctx.getState().isOpen ? new CloseUserPlanningSidepanel() : new OpenUserPlanningSidepanel();\n\n return ctx.dispatch(action);\n }\n}\n","import { Selector } from '@ngxs/store';\nimport { UserPlanningTotalsStateModel } from './user-planning-totals-state.model';\nimport { UserPlanningTotalsState } from './user-planning-totals.state';\n\nexport class UserPlanningTotalsSelectors {\n @Selector([UserPlanningTotalsState])\n static selectedTotals(state: UserPlanningTotalsStateModel): UserPlanningTotalsStateModel['selectedTotals'] {\n return state.selectedTotals;\n }\n}\n","import { UserPlanningTotalsStateModel } from './user-planning-totals-state.model';\n\n/**\n * Action types for UserPlanningTotalsState\n */\nexport enum UserPlanningTotalsActionTypes {\n InitUserPlanningTotalsSettings = '[User Planning API] Initialize User Planning Totals Settings',\n SetUserPlanningTotalsSettings = '[User Planning API] Set User Planning Totals Settings',\n ResetUserPlanningTotalsSettings = '[User Planning API] Reset User Planning Totals Settings',\n SaveUserPlanningTotalsSettings = '[User Planning API] Save User Planning Totals Settings',\n}\n\nexport class InitUserPlanningTotalsSettings {\n static readonly type: string = UserPlanningTotalsActionTypes.InitUserPlanningTotalsSettings;\n\n constructor(public settings: UserPlanningTotalsStateModel) {}\n}\n\nexport class SetUserPlanningTotalsSettings {\n static readonly type: string = UserPlanningTotalsActionTypes.SetUserPlanningTotalsSettings;\n\n constructor(public settings: UserPlanningTotalsStateModel) {}\n}\n\nexport class ResetUserPlanningTotalsSettings {\n static readonly type: string = UserPlanningTotalsActionTypes.ResetUserPlanningTotalsSettings;\n}\n\nexport class SaveUserPlanningTotalsSettings {\n static readonly type: string = UserPlanningTotalsActionTypes.SaveUserPlanningTotalsSettings;\n\n constructor(public settings: UserPlanningTotalsStateModel) {}\n}\n","import { Injectable } from '@angular/core';\nimport { Observable } from 'rxjs';\nimport { Action, State, StateContext } from '@ngxs/store';\nimport { UserPlanningTotalsStateModel } from './user-planning-totals-state.model';\nimport {\n InitUserPlanningTotalsSettings,\n ResetUserPlanningTotalsSettings,\n SaveUserPlanningTotalsSettings,\n SetUserPlanningTotalsSettings,\n} from './user-planning-totals.actions';\nimport { UserService } from '../../../api/services/user.service';\nimport { GenericListState } from '../generic-list/generic-list.state';\n\n/* eslint-disable @typescript-eslint/no-unused-vars */\n\nconst defaultUserPlanningTotalsState: UserPlanningTotalsStateModel = {\n selectedTotals: ['row-total-capacity', 'row-free-capacity', 'row-total-planned-capacity', 'column-total-recorded'],\n};\n\n/* eslint-enable @typescript-eslint/no-unused-vars */\n\n@State({\n name: 'UserPlanningTotals',\n defaults: defaultUserPlanningTotalsState,\n})\n@Injectable({\n providedIn: 'root',\n})\nexport class UserPlanningTotalsState extends GenericListState {\n constructor(\n private userService: UserService,\n ) {\n super();\n }\n\n @Action(InitUserPlanningTotalsSettings)\n initUserPlanningTotalsSettings(\n ctx: StateContext,\n { settings }: InitUserPlanningTotalsSettings,\n ): void {\n ctx.patchState({\n selectedTotals: settings.selectedTotals,\n });\n }\n\n @Action(SetUserPlanningTotalsSettings)\n setUserPlanningTotalsSettings$(\n ctx: StateContext,\n { settings }: SetUserPlanningTotalsSettings,\n ): Observable {\n ctx.patchState({\n selectedTotals: settings.selectedTotals,\n });\n\n return ctx.dispatch(new SaveUserPlanningTotalsSettings(ctx.getState()));\n }\n\n @Action(ResetUserPlanningTotalsSettings)\n resetUserPlanningTotalsSettings(ctx: StateContext): void {\n ctx.setState(defaultUserPlanningTotalsState);\n }\n\n @Action(SaveUserPlanningTotalsSettings)\n saveUserPlanningTotalsSettings$(\n ctx: StateContext,\n { settings }: SaveUserPlanningTotalsSettings,\n ): Observable {\n return this.userService.saveUserPlanningTotalsSettings$(settings);\n }\n}\n","import { GenericListOptions } from '../generic-list';\nimport { UserResourceColumnFilters } from '../../../api/filter-columns';\nimport { UserResourceListStateModel } from './user-resource-list-state.model';\n\n/**\n * Action types for UserResourceListState\n */\nexport enum UserResourceListActionTypes {\n SetUserResourceListSelectedColumns = '[ Resource Planning List Page] Set Selected Columns',\n SetUserResourceListOptions = '[ Resource Planning List Page] Set Options',\n InitUserResourceListSettings = '[ Resource Planning API] Initialize Resource Planning List Settings',\n SetUserResourceListSettings = '[ Resource Planning API] Set Resource Planning List Settings',\n ResetUserResourceListSettings = '[ Resource Planning API] Reset Resource Planning List Settings',\n SaveUserResourceListSettings = '[ Resource Planning API] Save Resource Planning List Settings',\n}\n\nexport interface UserResourceListOptions extends GenericListOptions {\n columnFilters: UserResourceColumnFilters;\n}\n\nexport class SetUserResourceListSelectedColumns {\n static readonly type: string = UserResourceListActionTypes.SetUserResourceListSelectedColumns;\n\n constructor(public columns: []) {}\n}\n\nexport class SetUserResourceListOptions {\n static readonly type: string = UserResourceListActionTypes.SetUserResourceListOptions;\n\n constructor(public options: UserResourceListOptions) {}\n}\n\nexport class InitUserResourceListSettings {\n static readonly type: string = UserResourceListActionTypes.InitUserResourceListSettings;\n\n constructor(public settings: UserResourceListStateModel) {}\n}\n\nexport class SetUserResourceListSettings {\n static readonly type: string = UserResourceListActionTypes.SetUserResourceListSettings;\n\n constructor(public settings: UserResourceListStateModel) {}\n}\n\nexport class ResetUserResourceListSettings {\n static readonly type: string = UserResourceListActionTypes.ResetUserResourceListSettings;\n}\n\nexport class SaveUserResourceListSettings {\n static readonly type: string = UserResourceListActionTypes.SaveUserResourceListSettings;\n\n constructor(public settings: UserResourceListStateModel) {}\n}\n","import { Selector } from '@ngxs/store';\nimport { UserResourceListStateModel } from './user-resource-list-state.model';\nimport { UserResourceListOptions } from './user-resource-list.actions';\nimport { UserResourceListState } from './user-resource-list.state';\n\nexport class UserResourceListSelectors {\n @Selector([UserResourceListState])\n static selectedColumns(state: UserResourceListStateModel): UserResourceListStateModel['selectedColumns'] {\n return state.selectedColumns;\n }\n\n @Selector([UserResourceListState])\n static options(state: UserResourceListStateModel): UserResourceListOptions {\n return {\n pageIndex: state.pageIndex,\n pageSize: state.pageSize,\n columnFilters: state.columnFilters,\n sortColumn: state.sortColumn,\n sortDirection: state.sortDirection,\n };\n }\n}\n","import { ListColumnInfo, ListColumnsInfo, ObjectPropertyNames } from './base';\nimport { ReadonlyCompleteMap } from '../../app.types';\nimport { UserSlimDtoModel } from '../models/dtos/user-slim.dto.model';\n\nexport type UserResourceListColumnKeys = ObjectPropertyNames;\nconst userResourceListColumnsInfoObj: ListColumnsInfo = {\n userId: {\n label: 'User Id',\n selected: false,\n selectable: false,\n sortable: false,\n filterable: false,\n },\n id: {\n label: 'id',\n selected: false,\n selectable: false,\n sortable: false,\n filterable: false,\n },\n fullName: {\n label: 'Full Name',\n selected: false,\n selectable: false,\n sortable: false,\n filterable: false,\n },\n userWorkingDays: {\n label: 'User Working Days',\n selected: false,\n selectable: false,\n sortable: false,\n filterable: false,\n },\n email: {\n label: 'Email',\n selected: false,\n selectable: false,\n sortable: false,\n filterable: false,\n },\n photoUrl: {\n label: 'Photo URL',\n selected: false,\n selectable: false,\n sortable: false,\n filterable: false,\n },\n validFrom: {\n label: 'Valid From',\n selected: false,\n selectable: false,\n sortable: false,\n filterable: false,\n },\n validUntil: {\n label: 'Valid Until',\n selected: false,\n selectable: false,\n sortable: false,\n filterable: false,\n },\n};\n\n// Defines the sorting of columns!!!\n// The Map is not really readonly - we just pretend that it is :)\nexport const userResourceListColumnsInfo: ReadonlyCompleteMap<\nUserResourceListColumnKeys,\nListColumnInfo\n> = new Map([\n ['userId', userResourceListColumnsInfoObj.userId],\n ['fullName', userResourceListColumnsInfoObj.fullName],\n ['email', userResourceListColumnsInfoObj.email],\n ['photoUrl', userResourceListColumnsInfoObj.photoUrl],\n ['validFrom', userResourceListColumnsInfoObj.validFrom],\n ['validUntil', userResourceListColumnsInfoObj.validUntil],\n]) as ReadonlyCompleteMap;\n","import { Injectable } from '@angular/core';\nimport { Observable } from 'rxjs';\nimport { Action, State, StateContext } from '@ngxs/store';\nimport { UserResourceListStateModel } from './user-resource-list-state.model';\nimport {\n InitUserResourceListSettings,\n ResetUserResourceListSettings,\n SaveUserResourceListSettings,\n SetUserResourceListOptions,\n SetUserResourceListSelectedColumns,\n SetUserResourceListSettings,\n} from './user-resource-list.actions';\nimport { UserService } from '../../../api/services/user.service';\nimport { USER_RESOURCE_LIST_DEFAULT_PAGE_SIZE } from '../../../shared/constants';\nimport { GenericListState } from '../generic-list/generic-list.state';\nimport { userResourceListColumnsInfo } from '../../../api/meta-info/user-resources-list.info';\n\n/* eslint-disable @typescript-eslint/no-unused-vars */\n\nconst defaultUserResourceListState: UserResourceListStateModel = {\n selectedColumns: Array.from(userResourceListColumnsInfo.entries())\n .filter(([_key, value]) => (value.selectable && value.selected))\n .map(([key, _value]) => key),\n pageIndex: 0,\n pageSize: USER_RESOURCE_LIST_DEFAULT_PAGE_SIZE,\n columnFilters: {},\n sortColumn: '',\n sortDirection: '',\n};\n\n/* eslint-enable @typescript-eslint/no-unused-vars */\n\n@State({\n name: 'userResourceList',\n defaults: defaultUserResourceListState,\n})\n@Injectable({\n providedIn: 'root',\n})\nexport class UserResourceListState extends GenericListState {\n constructor(\n private userService: UserService,\n ) {\n super();\n }\n\n @Action(SetUserResourceListSelectedColumns)\n setUserResourceListSelectedColumns$(\n ctx: StateContext,\n { columns }: SetUserResourceListSelectedColumns,\n ): Observable {\n ctx.patchState(this.cloneSelectedColumns(columns, userResourceListColumnsInfo));\n\n return ctx.dispatch(new SaveUserResourceListSettings(ctx.getState()));\n }\n\n @Action(SetUserResourceListOptions)\n setUserResourceListOptions$(\n ctx: StateContext,\n { options }: SetUserResourceListOptions,\n ): Observable {\n ctx.patchState(this.cloneListOptions(options, userResourceListColumnsInfo));\n\n return ctx.dispatch(new SaveUserResourceListSettings(ctx.getState()));\n }\n\n @Action(InitUserResourceListSettings)\n initUserResourceListSettings(\n ctx: StateContext,\n { settings }: InitUserResourceListSettings,\n ): void {\n ctx.patchState(this.cloneListSettings(settings, userResourceListColumnsInfo));\n }\n\n @Action(SetUserResourceListSettings)\n setUserResourceListSettings$(\n ctx: StateContext,\n { settings }: SetUserResourceListSettings,\n ): Observable {\n ctx.patchState(this.cloneListSettings(settings, userResourceListColumnsInfo));\n\n return ctx.dispatch(new SaveUserResourceListSettings(ctx.getState()));\n }\n\n @Action(ResetUserResourceListSettings)\n resetUserResourceListSettings(ctx: StateContext): void {\n ctx.setState(defaultUserResourceListState);\n }\n\n @Action(SaveUserResourceListSettings)\n saveUserResourceListSettings$(\n ctx: StateContext,\n { settings }: SaveUserResourceListSettings,\n ): Observable {\n return this.userService.SaveUserResourceListSettings$(settings);\n }\n}\n","import { Injectable } from '@angular/core';\nimport { Observable } from 'rxjs';\nimport { Action, State, StateContext } from '@ngxs/store';\nimport { WorkPackageListStateModel } from './work-package-list-state.model';\nimport {\n InitWorkPackageListSettings,\n ResetWorkPackageListOptions,\n ResetWorkPackageListSettings,\n SaveWorkPackageListSettings,\n SetWorkPackageListOptions,\n SetWorkPackageListSelectedColumns,\n SetWorkPackageListSettings,\n} from './work-package-list.actions';\nimport { workPackageViewListColumnsInfo } from '../../../api/meta-info/work-packages-list.info';\nimport { UserService } from '../../../api/services/user.service';\nimport { WORK_PACKAGE_LIST_DEFAULT_PAGE_SIZE } from '../../../shared/constants';\nimport { GenericListState } from '../generic-list/generic-list.state';\n\n/* eslint-disable @typescript-eslint/no-unused-vars */\n\nconst defaultWorkPackageListState: WorkPackageListStateModel = {\n selectedColumns: Array.from(workPackageViewListColumnsInfo.entries())\n .filter(([_key, value]) => (value.selectable && value.selected))\n .map(([key, _value]) => key),\n pageIndex: 0,\n pageSize: WORK_PACKAGE_LIST_DEFAULT_PAGE_SIZE,\n columnFilters: {},\n sortColumn: '',\n sortDirection: '',\n};\n\n/* eslint-enable @typescript-eslint/no-unused-vars */\n\n@State({\n name: 'workPackageList',\n defaults: defaultWorkPackageListState,\n})\n@Injectable({\n providedIn: 'root',\n})\nexport class WorkPackageListState extends GenericListState {\n constructor(\n private userService: UserService,\n ) {\n super();\n }\n\n @Action(SetWorkPackageListSelectedColumns)\n setWorkPackageListSelectedColumns$(\n ctx: StateContext,\n { columns }: SetWorkPackageListSelectedColumns,\n ): Observable {\n ctx.patchState(this.cloneSelectedColumns(columns, workPackageViewListColumnsInfo));\n\n return ctx.dispatch(new SaveWorkPackageListSettings(ctx.getState()));\n }\n\n @Action(SetWorkPackageListOptions)\n setWorkPackageListOptions$(\n ctx: StateContext,\n { options }: SetWorkPackageListOptions,\n ): Observable {\n ctx.patchState(this.cloneListOptions(options, workPackageViewListColumnsInfo));\n\n return ctx.dispatch(new SaveWorkPackageListSettings(ctx.getState()));\n }\n\n @Action(ResetWorkPackageListOptions)\n resetWorkPackageListOptions$(ctx: StateContext): Observable {\n ctx.patchState({\n columnFilters: {},\n });\n\n return ctx.dispatch(new SaveWorkPackageListSettings(ctx.getState()));\n }\n\n @Action(InitWorkPackageListSettings)\n initWorkPackageListSettings(\n ctx: StateContext,\n { settings }: InitWorkPackageListSettings,\n ): void {\n ctx.patchState(this.cloneListSettings(settings, workPackageViewListColumnsInfo));\n }\n\n @Action(SetWorkPackageListSettings)\n setWorkPackageListSettings$(\n ctx: StateContext,\n { settings }: SetWorkPackageListSettings,\n ): Observable {\n ctx.patchState(this.cloneListSettings(settings, workPackageViewListColumnsInfo));\n\n return ctx.dispatch(new SaveWorkPackageListSettings(ctx.getState()));\n }\n\n @Action(ResetWorkPackageListSettings)\n resetWorkPackageListSettings(ctx: StateContext): void {\n ctx.setState(defaultWorkPackageListState);\n }\n\n @Action(SaveWorkPackageListSettings)\n saveWorkPackageListSettings$(\n ctx: StateContext,\n { settings }: SaveWorkPackageListSettings,\n ): Observable {\n return this.userService.saveWorkPackageListSettings$(settings);\n }\n}\n","import { Selector } from '@ngxs/store';\nimport { WorkPackageListState } from './work-package-list.state';\nimport { WorkPackageListOptions } from './work-package-list.actions';\nimport { WorkPackageListStateModel } from './work-package-list-state.model';\n\nexport class WorkPackageListSelectors {\n @Selector([WorkPackageListState])\n static selectedColumns(state: WorkPackageListStateModel): WorkPackageListStateModel['selectedColumns'] {\n return [...state.selectedColumns];\n }\n\n @Selector([WorkPackageListState])\n static options(state: WorkPackageListStateModel): WorkPackageListOptions {\n return {\n pageIndex: state.pageIndex,\n pageSize: state.pageSize,\n columnFilters: state.columnFilters,\n sortColumn: state.sortColumn,\n sortDirection: state.sortDirection,\n };\n }\n}\n","import { GenericListOptions } from '../generic-list';\nimport { WorkPackageViewListColumnKeys } from '../../../api/meta-info/work-packages-list.info';\nimport { WorkPackageColumnFilters } from '../../../api/filter-columns';\nimport { WorkPackageListStateModel } from './work-package-list-state.model';\n\n/**\n * Action types for WorkPackageListState\n */\nexport enum WorkPackageListActionTypes {\n SetWorkPackageListSelectedColumns = '[Work Package List Page] Set Selected Columns',\n SetWorkPackageListOptions = '[Work Package List Page] Set Options',\n ResetWorkPackageListOptions = '[Work Package List Page] Reset Options',\n InitWorkPackageListSettings = '[Work Package API] Initialize WorkPackage List Settings',\n SetWorkPackageListSettings = '[Work Package API] Set WorkPackage List Settings',\n ResetWorkPackageListSettings = '[Work Package API] Reset WorkPackage List Settings',\n SaveWorkPackageListSettings = '[Work Package API] Save Work Package List Settings',\n}\n\nexport interface WorkPackageListOptions extends GenericListOptions {\n columnFilters: WorkPackageColumnFilters;\n}\n\nexport class SetWorkPackageListSelectedColumns {\n static readonly type: string = WorkPackageListActionTypes.SetWorkPackageListSelectedColumns;\n// eslint-disable-next-line @typescript-eslint/no-empty-function\n constructor(public columns: WorkPackageViewListColumnKeys[]) {}\n}\n\nexport class SetWorkPackageListOptions {\n static readonly type: string = WorkPackageListActionTypes.SetWorkPackageListOptions;\n// eslint-disable-next-line @typescript-eslint/no-empty-function\n constructor(public options: WorkPackageListOptions) {}\n}\n\nexport class ResetWorkPackageListOptions {\n static readonly type: string = WorkPackageListActionTypes.ResetWorkPackageListOptions;\n}\n\nexport class InitWorkPackageListSettings {\n static readonly type: string = WorkPackageListActionTypes.InitWorkPackageListSettings;\n// eslint-disable-next-line @typescript-eslint/no-empty-function\n constructor(public settings: WorkPackageListStateModel) {}\n}\n\nexport class SetWorkPackageListSettings {\n static readonly type: string = WorkPackageListActionTypes.SetWorkPackageListSettings;\n// eslint-disable-next-line @typescript-eslint/no-empty-function\n constructor(public settings: WorkPackageListStateModel) {}\n}\n\nexport class ResetWorkPackageListSettings {\n static readonly type: string = WorkPackageListActionTypes.ResetWorkPackageListSettings;\n}\n\nexport class SaveWorkPackageListSettings {\n static readonly type: string = WorkPackageListActionTypes.SaveWorkPackageListSettings;\n// eslint-disable-next-line @typescript-eslint/no-empty-function\n constructor(public settings: WorkPackageListStateModel) {}\n}\n","import { GenericListOptions } from '../generic-list';\nimport { WorkPackageQuestionColumnFilters } from '../../../api/filter-columns';\nimport { WorkPackageQuestionListStateModel } from './work-package-question-list-state.model';\n\n/**\n * Action types for WorkPackageQuestionListState\n */\nexport enum WorkPackageQuestionListActionTypes {\n SetWorkPackageQuestionListSelectedColumns = '[ Work Package Question List Page] Set Selected Columns',\n SetWorkPackageQuestionListOptions = '[ Work Package Question List Page] Set Options',\n InitWorkPackageQuestionListSettings = '[ Work Package Question API] Initialize Work Package Question List Settings',\n SetWorkPackageQuestionListSettings = '[ Work Package Question API] Set Work Package Question List Settings',\n ResetWorkPackageQuestionListSettings = '[ Work Package Question API] Reset Work Package Question List Settings',\n SaveWorkPackageQuestionListSettings = '[ Work Package Question API] Save Work Package Question List Settings',\n}\n\nexport interface WorkPackageQuestionListOptions extends GenericListOptions {\n columnFilters: WorkPackageQuestionColumnFilters;\n}\n\nexport class SetWorkPackageQuestionListSelectedColumns {\n static readonly type: string = WorkPackageQuestionListActionTypes.SetWorkPackageQuestionListSelectedColumns;\n\n constructor(public columns: []) {}\n}\n\nexport class SetWorkPackageQuestionListOptions {\n static readonly type: string = WorkPackageQuestionListActionTypes.SetWorkPackageQuestionListOptions;\n\n constructor(public options: WorkPackageQuestionListOptions) {}\n}\n\nexport class InitWorkPackageQuestionListSettings {\n static readonly type: string = WorkPackageQuestionListActionTypes.InitWorkPackageQuestionListSettings;\n\n constructor(public settings: WorkPackageQuestionListStateModel) {}\n}\n\nexport class SetWorkPackageQuestionListSettings {\n static readonly type: string = WorkPackageQuestionListActionTypes.SetWorkPackageQuestionListSettings;\n\n constructor(public settings: WorkPackageQuestionListStateModel) {}\n}\n\nexport class ResetWorkPackageQuestionListSettings {\n static readonly type: string = WorkPackageQuestionListActionTypes.ResetWorkPackageQuestionListSettings;\n}\n\nexport class SaveWorkPackageQuestionListSettings {\n static readonly type: string = WorkPackageQuestionListActionTypes.SaveWorkPackageQuestionListSettings;\n\n constructor(public settings: WorkPackageQuestionListStateModel) {}\n}\n","import { ListColumnInfo, ListColumnsInfo, ObjectPropertyNames } from './base';\nimport { ReadonlyCompleteMap } from '../../app.types';\nimport { QuestionDtoModel } from '../models/dtos/question.dto.model';\n\nexport type WorkPackageQuestionListColumnKeys = ObjectPropertyNames;\nconst workPackageQuestionListColumnsInfoObj: ListColumnsInfo = {\n questionId: {\n label: 'Question Id',\n selected: false,\n selectable: false,\n sortable: false,\n filterable: false,\n },\n title: {\n label: 'Title',\n selected: false,\n selectable: false,\n sortable: false,\n filterable: false,\n },\n text: {\n label: 'Text',\n selected: false,\n selectable: false,\n sortable: false,\n filterable: false,\n },\n status: {\n label: 'Status',\n selected: false,\n selectable: false,\n sortable: false,\n filterable: false,\n },\n replyCounter: {\n label: 'Replies',\n selected: false,\n selectable: false,\n sortable: false,\n filterable: false,\n },\n createdOn: {\n label: 'Created On',\n selected: false,\n selectable: false,\n sortable: false,\n filterable: false,\n },\n creator: {\n label: 'Created By',\n selected: false,\n selectable: false,\n sortable: false,\n filterable: false,\n },\n attachments: {\n label: 'Attachments',\n selected: false,\n selectable: false,\n sortable: false,\n filterable: false,\n },\n creatorWorkPackageRole: {\n label: 'Creator Role',\n selected: false,\n selectable: false,\n sortable: false,\n filterable: false,\n },\n metadata: {\n label: 'Metadata',\n selected: false,\n selectable: false,\n sortable: false,\n filterable: false,\n },\n};\n\n// Defines the sorting of columns!!!\n// The Map is not really readonly - we just pretend that it is :)\nexport const workPackageQuestionListColumnsInfo: ReadonlyCompleteMap<\nWorkPackageQuestionListColumnKeys,\nListColumnInfo\n> = new Map([\n ['questionId', workPackageQuestionListColumnsInfoObj.questionId],\n ['title', workPackageQuestionListColumnsInfoObj.title],\n ['status', workPackageQuestionListColumnsInfoObj.text],\n ['replyCounter', workPackageQuestionListColumnsInfoObj.replyCounter],\n ['createdOn', workPackageQuestionListColumnsInfoObj.createdOn],\n ['creator', workPackageQuestionListColumnsInfoObj.creator],\n ['attachments', workPackageQuestionListColumnsInfoObj.attachments],\n ['creatorWorkPackageRole', workPackageQuestionListColumnsInfoObj.creatorWorkPackageRole],\n]) as ReadonlyCompleteMap;\n","import { Injectable } from '@angular/core';\nimport { Observable } from 'rxjs';\nimport { Action, State, StateContext } from '@ngxs/store';\nimport { WorkPackageQuestionListStateModel } from './work-package-question-list-state.model';\nimport {\n InitWorkPackageQuestionListSettings,\n ResetWorkPackageQuestionListSettings,\n SaveWorkPackageQuestionListSettings,\n SetWorkPackageQuestionListOptions,\n SetWorkPackageQuestionListSelectedColumns,\n SetWorkPackageQuestionListSettings,\n} from './work-package-question-list.actions';\nimport { UserService } from '../../../api/services/user.service';\nimport { USER_RESOURCE_LIST_DEFAULT_PAGE_SIZE } from '../../../shared/constants';\nimport { GenericListState } from '../generic-list/generic-list.state';\nimport { workPackageQuestionListColumnsInfo } from '../../../api/meta-info/work-package-questions-list.info';\n\n/* eslint-disable @typescript-eslint/no-unused-vars */\n\nconst defaultWorkPackageQuestionListState: WorkPackageQuestionListStateModel = {\n selectedColumns: Array.from(workPackageQuestionListColumnsInfo.entries())\n .filter(([_key, value]) => (value.selectable && value.selected))\n .map(([key, _value]) => key),\n pageIndex: 0,\n pageSize: USER_RESOURCE_LIST_DEFAULT_PAGE_SIZE,\n columnFilters: {},\n sortColumn: '',\n sortDirection: '',\n};\n\n/* eslint-enable @typescript-eslint/no-unused-vars */\n\n@State({\n name: 'workPackageQuestionList',\n defaults: defaultWorkPackageQuestionListState,\n})\n@Injectable({\n providedIn: 'root',\n})\nexport class WorkPackageQuestionListState extends GenericListState {\n constructor(\n private userService: UserService,\n ) {\n super();\n }\n\n @Action(SetWorkPackageQuestionListSelectedColumns)\n setWorkPackageQuestionListSelectedColumns$(\n ctx: StateContext,\n { columns }: SetWorkPackageQuestionListSelectedColumns,\n ): Observable {\n ctx.patchState(this.cloneSelectedColumns(columns, workPackageQuestionListColumnsInfo));\n\n return ctx.dispatch(new SaveWorkPackageQuestionListSettings(ctx.getState()));\n }\n\n @Action(SetWorkPackageQuestionListOptions)\n setWorkPackageQuestionListOptions$(\n ctx: StateContext,\n { options }: SetWorkPackageQuestionListOptions,\n ): Observable {\n ctx.patchState(this.cloneListOptions(options, workPackageQuestionListColumnsInfo));\n\n return ctx.dispatch(new SaveWorkPackageQuestionListSettings(ctx.getState()));\n }\n\n @Action(InitWorkPackageQuestionListSettings)\n initWorkPackageQuestionListSettings(\n ctx: StateContext,\n { settings }: InitWorkPackageQuestionListSettings,\n ): void {\n ctx.patchState(this.cloneListSettings(settings, workPackageQuestionListColumnsInfo));\n }\n\n @Action(SetWorkPackageQuestionListSettings)\n setWorkPackageQuestionListSettings$(\n ctx: StateContext,\n { settings }: SetWorkPackageQuestionListSettings,\n ): Observable {\n ctx.patchState(this.cloneListSettings(settings, workPackageQuestionListColumnsInfo));\n\n return ctx.dispatch(new SaveWorkPackageQuestionListSettings(ctx.getState()));\n }\n\n @Action(ResetWorkPackageQuestionListSettings)\n resetWorkPackageQuestionListSettings(ctx: StateContext): void {\n ctx.setState(defaultWorkPackageQuestionListState);\n }\n\n @Action(SaveWorkPackageQuestionListSettings)\n saveWorkPackageQuestionListSettings$(\n ctx: StateContext,\n { settings }: SaveWorkPackageQuestionListSettings,\n ): Observable {\n return this.userService.SaveWorkPackageQuestionListSettings$(settings);\n }\n}\n","import { Selector } from '@ngxs/store';\nimport { WorkPackageQuestionListStateModel } from './work-package-question-list-state.model';\nimport { WorkPackageQuestionListOptions } from './work-package-question-list.actions';\nimport { WorkPackageQuestionListState } from './work-package-question-list.state';\n\nexport class WorkPackageQuestionListSelectors {\n @Selector([WorkPackageQuestionListState])\n static selectedColumns(state: WorkPackageQuestionListStateModel): WorkPackageQuestionListStateModel['selectedColumns'] {\n return [...state.selectedColumns];\n }\n\n @Selector([WorkPackageQuestionListState])\n static options(state: WorkPackageQuestionListStateModel): WorkPackageQuestionListOptions {\n return {\n pageIndex: state.pageIndex,\n pageSize: state.pageSize,\n columnFilters: state.columnFilters,\n sortColumn: state.sortColumn,\n sortDirection: state.sortDirection,\n };\n }\n}\n","import { WorkpackageSidepanelStateModel } from './work-package-sidepanel-state.model';\n\n/**\n * Action types for WPSidepanel\n */\nexport enum WorkpackageSidepanelActionTypes {\n InitWorkpackageSidepanel = '[WPSidepanel API] Initialize Sidepanel isOpen',\n OpenWorkpackageSidepanel = '[WPSidepanel API] Set WPSidepanel open',\n CloseWorkpackageSidepanel = '[WPSidepanel API] Set WPSidepanel closed',\n ToggleWorkpackageSidepanel = '[WPSidepanel API] Toggle WPSidepanel',\n}\n\nexport class InitWorkpackageSidepanel {\n static readonly type: string = WorkpackageSidepanelActionTypes.InitWorkpackageSidepanel;\n\n constructor(public isOpen: WorkpackageSidepanelStateModel) {}\n}\n\nexport class OpenWorkpackageSidepanel {\n static readonly type: string = WorkpackageSidepanelActionTypes.OpenWorkpackageSidepanel;\n}\n\nexport class CloseWorkpackageSidepanel {\n static readonly type: string = WorkpackageSidepanelActionTypes.CloseWorkpackageSidepanel;\n}\n\nexport class ToggleWorkpackageSidepanel {\n static readonly type: string = WorkpackageSidepanelActionTypes.ToggleWorkpackageSidepanel;\n}\n","import { Unit } from '../../../models/unit.interface';\n\n/**\n * Store actions for manipulating timesheet user settings.\n */\nexport enum WorkPackageActionTypes {\n InitWorkPackageSettings = '[API] Init Work Package Settings State',\n AddWorkPackageRecentSupplierUnit = '[WorkPackage] Add Work Package Recent Supplier Unit',\n}\n\n/**\n * In the backend only a list of recent units is stored. The week and year is\n * not stored in the backend.\n */\nexport class InitWorkPackageSettings {\n static readonly type: string = WorkPackageActionTypes.InitWorkPackageSettings;\n\n constructor(\n readonly recentSupplierUnits: readonly Unit[],\n ) {}\n}\n\nexport class AddWorkPackageRecentSupplierUnit {\n static readonly type: string = WorkPackageActionTypes.AddWorkPackageRecentSupplierUnit;\n\n constructor(\n public unit: Unit,\n ) {}\n}\n","import { Injectable } from '@angular/core';\nimport { Action, State, StateContext } from '@ngxs/store';\nimport {\n AddWorkPackageRecentSupplierUnit,\n InitWorkPackageSettings,\n} from './work-package.actions';\nimport { UserService } from '../../../api/services/user.service';\nimport { WorkPackageStateModel } from './work-package-state.model';\n\nconst MAX_NUMBER_OF_RECENT_UNITS = 4;\n\nconst defaultWorkPackageState: WorkPackageStateModel = {\n recentSupplierUnits: [],\n};\n\n@State({\n name: 'workPackage',\n defaults: defaultWorkPackageState,\n})\n@Injectable({\n providedIn: 'root',\n})\nexport class WorkPackageState {\n constructor(\n private userService: UserService,\n ) {\n }\n\n @Action(InitWorkPackageSettings)\n initWorkPackageSettingsState(\n ctx: StateContext,\n { recentSupplierUnits }: InitWorkPackageSettings,\n ): void {\n ctx.patchState({\n recentSupplierUnits,\n });\n }\n\n @Action(AddWorkPackageRecentSupplierUnit)\n addWorkPackageRecentUnit(\n { patchState, getState }: StateContext,\n { unit }: AddWorkPackageRecentSupplierUnit,\n ): void {\n const { recentSupplierUnits } = getState();\n\n // Check if given unit already exists in queue\n const existingUnitIndex = recentSupplierUnits.findIndex((element) => (element.unitId === unit.unitId));\n\n // Create a new array of units with the most recent in front.\n const updatedRecentUnits = [unit, ...recentSupplierUnits];\n\n if (existingUnitIndex !== -1) {\n // Remove duplicates\n updatedRecentUnits.splice(existingUnitIndex + 1, 1);\n }\n\n // Limit queue to a given maximum number of entries.\n updatedRecentUnits.length = Math.min(updatedRecentUnits.length, MAX_NUMBER_OF_RECENT_UNITS);\n\n patchState({\n recentSupplierUnits: updatedRecentUnits,\n });\n }\n}\n","import { Selector } from '@ngxs/store';\nimport { Unit } from '../../../models/unit.interface';\nimport { WorkPackageStateModel } from './work-package-state.model';\nimport { WorkPackageState } from './work-package.state';\n\nexport class WorkPackageSelectors {\n @Selector([WorkPackageState])\n static recentUsedSupplierUnits(state: WorkPackageStateModel): readonly Unit[] {\n return state.recentSupplierUnits;\n }\n\n /**\n * Get the most recent / latest unit that was viewed.\n */\n @Selector([WorkPackageState])\n static mostRecentUsedSupplierUnits(state: WorkPackageStateModel): Unit | undefined {\n return state.recentSupplierUnits.length > 0 ? state.recentSupplierUnits[0] : undefined;\n }\n}\n","import { CollappFilterDropdownListRadioSetting } from '../../models/collapp-filter-dropdown-list-radio.interface';\nimport { ProjectPlanningFiltersSettingsModel } from '../../models/project-planning-filter-settings.interface';\nimport { UserDtoModel } from '../../api/models/dtos/user.dto.model';\nimport { ProjectRecentListDtoModel } from '../../api/models/dtos/project-recent-list.dto.model';\nimport { TimecardSettings } from '../../models/time-tracking-settings';\nimport { ProjectStructureFiltersSettingsModel } from '../../models/project-structure-filter-settings.interface';\nimport { DefaultUserLandingPageType } from 'src/app/models/default-user-landing-page-type.enum';\n\n// eslint-disable-next-line @typescript-eslint/no-namespace\nexport namespace UserStateActions {\n export class SetLoginUser {\n static readonly type: string = '[User] Set Login User';\n\n constructor(public user: UserDtoModel) {}\n }\n\n export class ClearLoginUser {\n static readonly type: string = '[User] Clear Login User';\n }\n\n export class ClearAllUserData {\n static readonly type: string = '[User] Clear All User Data';\n }\n\n export class SetOriginalUser {\n static readonly type: string = '[User] Set Original User';\n\n constructor(public user: UserDtoModel) {}\n }\n\n export class ClearOriginalUser {\n static readonly type: string = '[User] Clear Original User';\n }\n\n export class AddRecentProject {\n static readonly type: string = '[User] Add Recent Project';\n\n constructor(public project: ProjectRecentListDtoModel) {}\n }\n\n export class SetRecentProjects {\n static readonly type: string = '[User] Set Recent Projects';\n\n constructor(public projects: readonly ProjectRecentListDtoModel[]) {}\n }\n\n export class SetRecentTimecard {\n static readonly type: string = '[User] Set Recent Timecard';\n\n constructor(public timecard: TimecardSettings) {}\n }\n\n export class UpdateTimecard {\n static readonly type: string = '[User] Update Timecard';\n }\n\n export class UpdateUserTimeZone {\n static readonly type: string = '[User] Update User TimeZone';\n\n constructor(public timeZone: string, public offset: number) {}\n }\n\n export class UpdateUserLocalLanguageSettings {\n static readonly type: string = '[User] Update User Local Language Settings';\n\n constructor(public useLocal: boolean) {}\n }\n\n export class UpdateDefaultUserLandingPage {\n static readonly type: string = '[User] Update User Default Landing Page';\n\n constructor(public defaultUserLandingPage: DefaultUserLandingPageType) {}\n }\n\n export class UpdateUserWorkingDays {\n static readonly type: string = '[User] Update User Working Days';\n\n constructor(public workingDays: string) {}\n }\n\n export class UpdateProjectStructureFilterSettings {\n static readonly type: string = '[User] UpdateSettingsStructureFilters';\n\n constructor(\n public projectStructureHeaderFilterSettings: ProjectStructureFiltersSettingsModel,\n ) {}\n }\n\n export class UpdateTimecardHeaderFilterSettings {\n static readonly type: string = '[User] UpdateTimecardHeaderFilterSettings';\n\n constructor(\n public filterSettings: CollappFilterDropdownListRadioSetting[],\n ) {}\n }\n\n export class UpdatePlanningHeaderFilterSettings {\n static readonly type: string = '[User] UpdatePlanningHeaderFilterSettings';\n\n constructor(\n public filterSettings: CollappFilterDropdownListRadioSetting[],\n ) {}\n }\n\n export class UpdateProjectPlanningFilterSettings {\n static readonly type: string = '[User] UpdateSettingsProjectPlanningFilters';\n\n constructor(\n public projectPlanningHeaderFilterSettings: ProjectPlanningFiltersSettingsModel,\n ) {}\n }\n\n export class UpdateProjectPlanningCompactFilter {\n static readonly type: string = '[User] UpdateProjectPlanningCompactFilter';\n\n constructor(\n public projectPlanningCompactFilter: boolean,\n ) {}\n }\n}\n","import { createSelector, Selector } from '@ngxs/store';\nimport { CollappFilterDropdownListRadioSetting } from '../../models/collapp-filter-dropdown-list-radio.interface';\nimport { ProjectPlanningFiltersSettingsModel } from '../../models/project-planning-filter-settings.interface';\nimport { UserState } from './user.state';\nimport { UserStateModel } from './user-state.model';\nimport { UserDtoModel } from '../../api/models/dtos/user.dto.model';\nimport { UserPermissions } from '../../api/user-permissions';\nimport { ProjectRecentListDtoModel } from '../../api/models/dtos/project-recent-list.dto.model';\nimport { TimecardSettings } from '../../models/time-tracking-settings';\nimport { ProjectStructureFiltersSettingsModel } from '../../models/project-structure-filter-settings.interface';\n\nexport class UserSelectors {\n /**\n * Checks a specific permission of the user\n * @param permission\n */\n static permission(permission: string): (state: UserStateModel) => boolean {\n return createSelector([UserState], (state: UserStateModel) => (state.permissions[permission] === true));\n }\n\n @Selector([UserState])\n static user(state: UserStateModel): UserDtoModel | null {\n return state.user;\n }\n\n @Selector([UserState])\n static userTimeZone(state: UserStateModel): string | null {\n return (state.user ? state.user.timezone : null);\n }\n\n /**\n * @deprecated Use single permissions directly!\n * @param state\n */\n @Selector([UserState])\n static permissions(state: UserStateModel): UserPermissions {\n return { ...state.permissions };\n }\n\n @Selector([UserState])\n static recentProjects(state: UserStateModel): ProjectRecentListDtoModel[] {\n return state.recentProjects;\n }\n\n @Selector([UserState])\n static recentTimecard(state: UserStateModel): TimecardSettings | null {\n return state.recentTimecard;\n }\n\n @Selector([UserState])\n static originalUser(state: UserStateModel): UserDtoModel | null {\n return state.originalUser;\n }\n\n @Selector([UserState])\n static projectStructureFilterSettings(state: UserStateModel): ProjectStructureFiltersSettingsModel | null {\n return state.user?.settings.projectsStrucureHeaderFilters;\n }\n\n @Selector([UserState])\n static timecardHeaderFilterSettings(state: UserStateModel): CollappFilterDropdownListRadioSetting[] | null {\n return state.user?.settings.timecardHeaderfilters;\n }\n\n @Selector([UserState])\n static projectPlaningFilterSettings(state: UserStateModel): ProjectPlanningFiltersSettingsModel | null {\n return state.user?.settings.projectPlanningHeaderFilters;\n }\n\n @Selector([UserState])\n static projectPlanningCompactFilter(state: UserStateModel): boolean {\n return state.user?.settings.projectPlanningCompactFilter || false;\n }\n}\n","import { Injectable } from '@angular/core';\nimport { Action, State, StateContext } from '@ngxs/store';\nimport { Observable } from 'rxjs';\nimport { UserStateModel } from './user-state.model';\nimport { UserStateActions } from './user.actions';\nimport { ProjectRecentListDtoModel } from '../../api/models/dtos/project-recent-list.dto.model';\nimport { InitProjectListSettings, ResetProjectListSettings } from '../settings/project-list';\nimport { InitUnitListSettings, ResetUnitListSettings } from '../settings/unit-list';\nimport { InitUserListSettings, ResetUserListSettings } from '../settings/user-list';\nimport { InitWorkPackageListSettings, ResetWorkPackageListSettings } from '../settings/work-package-list';\nimport {\n InitWorkPackageQuestionListSettings,\n ResetWorkPackageQuestionListSettings,\n} from '../settings/work-package-question-list';\nimport { InitQuestionsListSettings, ResetQuestionsListSettings } from '../settings/questions-list';\nimport { InitUserResourceListSettings, ResetUserResourceListSettings } from '../settings/user-resource-list';\nimport { InitAttachmentListSettings, ResetAttachmentListSettings } from '../settings/attachment-list';\nimport { InitUserTimesheetSettings } from '../settings/timesheet';\nimport { InitNonHumanResourceListSettings, ResetNonHumanResourceListSettings } from '../settings/non-human-resource-list/non-human-resource-list.actions';\nimport { InitNonHumanResourcePlanningListSettings, ResetNonHumanResourcePlanningListSettings } from '../settings/non-human-resource-planning-list';\nimport { InitWorkPackageSettings } from '../settings/work-package';\nimport { InitWorkpackageSidepanel } from '../settings/work-package-sidepanel/work-package-sidepanel.actions';\nimport { InitSkillsSettings } from '../settings/skills';\nimport { InitActivitiesSettings, ResetActivitiesSettings } from '../settings/activities';\nimport { InitDashboardSettings } from '../settings/dashboard';\nimport { WorkPackageCombinedFilterType } from '../../modules/dashboard/dashboard-work-packages/filter-types';\nimport { InitUserPlanningTotalsSettings, ResetUserPlanningTotalsSettings } from '../settings/user-planning-totals';\nimport {\n InitTimecardRangeSettings,\n InitTimesheetRangeSettings,\n InitTimesheetTotalsSettings,\n InitUnitPlanningRangeSettings,\n InitUnitPlanningSidepanel,\n InitUnitPlanningTotalsSettings,\n InitWorkPackagePlanningRangeSettings,\n InitWorkPackagePlanningTotalsSettings,\n ResetTimecardRangeSettings,\n ResetTimesheetRangeSettings,\n ResetTimesheetTotalsSettings,\n ResetUnitPlanningRangeSettings,\n ResetUnitPlanningTotalsSettings,\n ResetWorkPackagePlanningRangeSettings,\n ResetWorkPackagePlanningTotalsSettings,\n InitUnitPlanningSidepanelIndex,\n InitUserPlanningSidepanelIndex,\n InitWorkPackageSidepanelIndex,\n} from '../settings';\n\nimport { InitUserPlanningRangeSettings, ResetUserPlanningRangeSettings } from '../settings/user-planning-range/user-planning-range.actions';\nimport { InitUserPlanningSidepanel } from '../settings/user-planning-sidepanel';\nimport { InitProjectPlanningRangeSettings, ResetProjectPlanningRangeSettings } from '../settings/project-planning-range/project-planning-range.actions';\nimport { InitProjectPlanningTotalsSettings, ResetProjectPlanningTotalsSettings } from '../settings/project-planning-totals/project-planning-totals.actions';\nimport { InitUnitPlanningSettings } from '../settings/unit-planning/unit-planning.actions';\n\nconst MAX_NUMBER_OF_RECENT_PROJECTS = 4; // Will be 1 less project in frontend\n\nexport const defaultUserState: Readonly = {\n user: null,\n originalUser: null,\n permissions: {},\n recentProjects: [],\n recentTimecard: null,\n};\n\n@State({\n name: 'user',\n defaults: { ...defaultUserState },\n})\n@Injectable({\n providedIn: 'root',\n})\nexport class UserState {\n // eslint-disable-next-line max-lines-per-function\n @Action(UserStateActions.SetLoginUser)\n // eslint-disable-next-line complexity, max-len\n setLoginUser({ patchState, dispatch }: StateContext, { user }: UserStateActions.SetLoginUser): Observable {\n patchState({\n user,\n permissions: user.permissions || {},\n });\n\n let recentProjects = [] as readonly ProjectRecentListDtoModel[];\n if (user.settings && user.settings.recentProjects) {\n recentProjects = user.settings.recentProjects;\n }\n\n const projectListSettingsAction = (user.settings.projectsTable != null\n ? new InitProjectListSettings(user.settings.projectsTable)\n : new ResetProjectListSettings()\n );\n\n const unitListSettingsAction = (user.settings.unitsTable != null\n ? new InitUnitListSettings(user.settings.unitsTable)\n : new ResetUnitListSettings()\n );\n\n const nonHumanResourceListSettingsAction = (user.settings.nonHumanResourcesTable != null\n ? new InitNonHumanResourceListSettings(user.settings.nonHumanResourcesTable)\n : new ResetNonHumanResourceListSettings()\n );\n\n const userListSettingsAction = (user.settings.usersTable != null\n ? new InitUserListSettings(user.settings.usersTable)\n : new ResetUserListSettings()\n );\n\n const workPackageListSettingsAction = (user.settings.workPackagesTable != null\n ? new InitWorkPackageListSettings(user.settings.workPackagesTable)\n : new ResetWorkPackageListSettings()\n );\n\n const activitiesSettingsAction = (user.settings.activities != null\n ? new InitActivitiesSettings(user.settings.activities)\n : new ResetActivitiesSettings()\n );\n\n const workPackageQuestionListSettingsAction = (user.settings.workPackageQuestionsTable != null\n ? new InitWorkPackageQuestionListSettings(user.settings.workPackageQuestionsTable)\n : new ResetWorkPackageQuestionListSettings()\n );\n\n const questionsListSettingsAction = (user.settings.questionsTable != null\n ? new InitQuestionsListSettings(user.settings.questionsTable)\n : new ResetQuestionsListSettings()\n );\n\n const userResourceListSettingsAction = (user.settings.userResourceTable != null\n ? new InitUserResourceListSettings(user.settings.userResourceTable)\n : new ResetUserResourceListSettings()\n );\n\n const attachmentsListSettingsAction = (user.settings.attachmentList != null\n ? new InitAttachmentListSettings(user.settings.attachmentList)\n : new ResetAttachmentListSettings()\n );\n\n const nonHumanResourcePlanningListSettingsAction = (user.settings.nonHumanResourcesPlanningTable != null\n ? new InitNonHumanResourcePlanningListSettings(user.settings.nonHumanResourcesPlanningTable)\n : new ResetNonHumanResourcePlanningListSettings()\n );\n\n const timesheetSettingsAction = new InitUserTimesheetSettings(\n user.settings.recentTimesheetUnits,\n user.settings.timesheetWithCrossUtilizeUsers || false,\n );\n\n const skillsSettingsAction = new InitSkillsSettings(\n user.settings.recentSkillUnits,\n );\n\n const unitPlanningSettingsAction = new InitUnitPlanningSettings(\n user.settings.recentPlanningUnits,\n );\n\n const workPackageSettingsAction = new InitWorkPackageSettings(\n user.settings.recentUsedSupplierUnits,\n );\n\n const workPackageSidepanelAction = new InitWorkpackageSidepanel({ isOpen: !!user.settings?.workPackageSidePanel });\n const userPlanningSidePanelAction = new InitUserPlanningSidepanel({\n isOpen: !!user.settings?.userPlanningSidePanel,\n });\n const unitPlanningSidePanelAction = new InitUnitPlanningSidepanel({\n isOpen: !!user.settings?.unitPlanningSidePanel,\n });\n\n const unitPlanningSidePanelIndexAction = new InitUnitPlanningSidepanelIndex({\n index: user.settings?.unitPlanningSidePanelIndex || 0,\n });\n const userPlanningSidePanelIndexAction = new InitUserPlanningSidepanelIndex({\n index: user.settings?.userPlanningSidePanelIndex || 0,\n });\n const workPackagePlanningSidePanelIndexAction = new InitWorkPackageSidepanelIndex({\n index: user.settings?.workPackageSidePanelIndex || 0,\n });\n\n const dashboardSettingsAction = new InitDashboardSettings({\n workPackagesFilter: WorkPackageCombinedFilterType.TO_BE_ISSUED,\n dashboardWorkPackageFilters: user.settings.dashboardWorkPackageFilters || [],\n });\n\n const userPlanningTotalsSettingsAction = (user.settings.userPlanningTotals != null\n ? new InitUserPlanningTotalsSettings({ selectedTotals: user.settings.userPlanningTotals })\n : new ResetUserPlanningTotalsSettings()\n );\n\n const unitPlanningTotalsSettingsAction = (user.settings.unitPlanningTotals != null\n && user.settings.unitPlanningCapacityUnit != null\n ? new InitUnitPlanningTotalsSettings({\n selectedTotals: user.settings.unitPlanningTotals,\n selectedCapacityUnit: user.settings.unitPlanningCapacityUnit,\n })\n : new ResetUnitPlanningTotalsSettings()\n );\n\n const unitPlanningRangeSettingsAction = (user.settings.unitPlanningRange != null\n ? new InitUnitPlanningRangeSettings({ range: user.settings.unitPlanningRange })\n : new ResetUnitPlanningRangeSettings()\n );\n\n const projectPlanningTotalsSettingsAction = (\n user.settings.unitPlanningCapacityUnit != null && user.settings.projectPlanningTotals != null\n ? new InitProjectPlanningTotalsSettings({\n selectedTotals: user.settings.projectPlanningTotals,\n selectedCapacityUnit: user.settings.projectPlanningCapacityUnit,\n })\n : new ResetProjectPlanningTotalsSettings()\n );\n\n const projectPlanningRangeSettingsAction = (user.settings.projectPlanningRange != null\n ? new InitProjectPlanningRangeSettings({ range: user.settings.projectPlanningRange })\n : new ResetProjectPlanningRangeSettings()\n );\n\n const userPlanningRangeSettingsAction = (user.settings.userPlanningRange != null\n ? new InitUserPlanningRangeSettings({ range: user.settings.userPlanningRange })\n : new ResetUserPlanningRangeSettings()\n );\n\n const timecardRangeSettingsAction = (user.settings.timecardRange != null\n ? new InitTimecardRangeSettings({ range: user.settings.timecardRange })\n : new ResetTimecardRangeSettings()\n );\n\n const timesheetRangeSettingsAction = (user.settings.timesheetRange != null\n ? new InitTimesheetRangeSettings({ range: user.settings.timesheetRange })\n : new ResetTimesheetRangeSettings()\n );\n\n const workPackagePlanningRangeSettingsAction = (user.settings.workPackagePlanningRange != null\n ? new InitWorkPackagePlanningRangeSettings({ range: user.settings.workPackagePlanningRange })\n : new ResetWorkPackagePlanningRangeSettings()\n );\n\n const workPackagePlanningTotalsSettingsAction = (user.settings.workPackagePlanningTotals != null\n ? new InitWorkPackagePlanningTotalsSettings({ selectedTotals: user.settings.workPackagePlanningTotals })\n : new ResetWorkPackagePlanningTotalsSettings()\n );\n\n const timesheetTotalsSettingsAction = (user.settings.timesheetTotals != null\n ? new InitTimesheetTotalsSettings({ selectedTotals: user.settings.timesheetTotals })\n : new ResetTimesheetTotalsSettings()\n );\n\n return dispatch([\n new UserStateActions.SetRecentProjects(recentProjects),\n projectListSettingsAction,\n unitListSettingsAction,\n nonHumanResourceListSettingsAction,\n userListSettingsAction,\n workPackageListSettingsAction,\n workPackageQuestionListSettingsAction,\n questionsListSettingsAction,\n userResourceListSettingsAction,\n attachmentsListSettingsAction,\n nonHumanResourcePlanningListSettingsAction,\n timesheetSettingsAction,\n unitPlanningSettingsAction,\n workPackageSettingsAction,\n skillsSettingsAction,\n activitiesSettingsAction,\n dashboardSettingsAction,\n userPlanningTotalsSettingsAction,\n unitPlanningTotalsSettingsAction,\n unitPlanningRangeSettingsAction,\n userPlanningRangeSettingsAction,\n timecardRangeSettingsAction,\n timesheetRangeSettingsAction,\n workPackagePlanningRangeSettingsAction,\n workPackagePlanningTotalsSettingsAction,\n timesheetTotalsSettingsAction,\n workPackageSidepanelAction,\n userPlanningSidePanelAction,\n unitPlanningSidePanelAction,\n unitPlanningSidePanelIndexAction,\n userPlanningSidePanelIndexAction,\n workPackagePlanningSidePanelIndexAction,\n projectPlanningTotalsSettingsAction,\n projectPlanningRangeSettingsAction,\n ]);\n }\n\n @Action(UserStateActions.ClearLoginUser)\n clearLoginUser({ patchState }: StateContext): void {\n patchState({\n user: null,\n permissions: {},\n });\n }\n\n @Action(UserStateActions.ClearAllUserData)\n clearAllUserData({ setState }: StateContext): void {\n setState({ ...defaultUserState });\n }\n\n @Action(UserStateActions.SetOriginalUser)\n setOriginalUser({ patchState }: StateContext, { user }: UserStateActions.SetLoginUser): void {\n patchState({\n originalUser: user,\n });\n }\n\n @Action(UserStateActions.ClearOriginalUser)\n clearOriginalUser({ patchState }: StateContext): void {\n patchState({\n originalUser: null,\n });\n }\n\n @Action(UserStateActions.AddRecentProject)\n // eslint-disable-next-line max-len\n addRecentProject({ patchState, getState }: StateContext, { project }: UserStateActions.AddRecentProject): void {\n let { recentProjects } = getState();\n\n // Check if given project already exists in queue\n const existingProjectIndex = recentProjects.findIndex((element) => (element.projectId === project.projectId));\n\n // Create a new array of projects with the most recent in front.\n recentProjects = [project, ...recentProjects];\n if (existingProjectIndex !== -1) {\n // Remove duplicates\n recentProjects.splice(existingProjectIndex + 1, 1);\n }\n\n // Limit queue to a given maximum number of entries.\n recentProjects.length = Math.min(recentProjects.length, MAX_NUMBER_OF_RECENT_PROJECTS);\n\n patchState({\n recentProjects,\n });\n }\n\n @Action(UserStateActions.SetRecentProjects)\n // eslint-disable-next-line max-len\n setRecentProjects({ patchState }: StateContext, { projects }: UserStateActions.SetRecentProjects): void {\n const recentProjects = [...projects];\n recentProjects.length = Math.min(recentProjects.length, MAX_NUMBER_OF_RECENT_PROJECTS);\n patchState({\n recentProjects,\n });\n }\n\n @Action(UserStateActions.SetRecentTimecard)\n // eslint-disable-next-line max-len\n setRecentTimecard({ patchState }: StateContext, { timecard }: UserStateActions.SetRecentTimecard): void {\n patchState({\n recentTimecard: timecard,\n });\n }\n\n @Action(UserStateActions.UpdateTimecard)\n updateTimecard({ patchState }: StateContext): void {\n patchState({});\n }\n\n /**\n * Update ProjectStructureFilterSettings into UserSettings\n * @param ctx\n * @param action\n */\n @Action(UserStateActions.UpdateProjectStructureFilterSettings)\n // eslint-disable-next-line max-len\n updateSettingsProjectStructureFilters(ctx: StateContext, action: UserStateActions.UpdateProjectStructureFilterSettings): void {\n const { user } = ctx.getState();\n if (user) {\n user.settings.projectsStrucureHeaderFilters = action.projectStructureHeaderFilterSettings;\n ctx.patchState({ user });\n }\n }\n\n /**\n * Update ProjectPlanningFilterSettings into UserSettings\n * @param ctx\n * @param action\n */\n @Action(UserStateActions.UpdateProjectPlanningFilterSettings)\n // eslint-disable-next-line max-len\n updateSettingsProjectPlanningFilters(ctx: StateContext, action: UserStateActions.UpdateProjectPlanningFilterSettings): void {\n const { user } = ctx.getState();\n if (user) {\n user.settings.projectPlanningHeaderFilters = action.projectPlanningHeaderFilterSettings;\n ctx.patchState({ user });\n }\n }\n\n /**\n * Update timecardHeaderFilterSettings into UserSettings\n * @param ctx\n * @param action\n */\n @Action(UserStateActions.UpdateTimecardHeaderFilterSettings)\n // eslint-disable-next-line max-len\n updateTimecardHeaderFilterSettings(ctx: StateContext, action: UserStateActions.UpdateTimecardHeaderFilterSettings): void {\n const { user } = ctx.getState();\n if (user) {\n user.settings.timecardHeaderfilters = action.filterSettings;\n ctx.patchState({ user });\n }\n }\n\n /**\n * UpdateplanningHeaderFilterSettings into UserSettings\n * @param ctx\n * @param action\n */\n @Action(UserStateActions.UpdatePlanningHeaderFilterSettings)\n // eslint-disable-next-line max-len\n updatePlanningHeaderFilterSettings(ctx: StateContext, action: UserStateActions.UpdatePlanningHeaderFilterSettings): void {\n const { user } = ctx.getState();\n if (user) {\n user.settings.planningHeaderfilters = action.filterSettings;\n ctx.patchState({ user });\n }\n }\n\n @Action(UserStateActions.UpdateProjectPlanningCompactFilter)\n // eslint-disable-next-line max-len\n updateProjectPlanningCompactFilter(ctx: StateContext, action: UserStateActions.UpdateProjectPlanningCompactFilter): void {\n const { user } = ctx.getState();\n if (user) {\n user.settings.projectPlanningCompactFilter = action.projectPlanningCompactFilter;\n ctx.patchState({ user });\n }\n }\n\n @Action(UserStateActions.UpdateUserTimeZone)\n updateUserTimeZone(\n { getState, patchState }: StateContext,\n { timeZone, offset }: UserStateActions.UpdateUserTimeZone,\n ): void {\n let { user } = getState();\n\n if (user) {\n user = user.clone({\n fullName: user.fullName,\n timezone: timeZone,\n timezoneOffset: offset,\n });\n\n patchState({\n user,\n });\n }\n }\n\n @Action(UserStateActions.UpdateUserWorkingDays)\n updateUserWorkingDays(\n { getState, patchState }: StateContext,\n { workingDays }: UserStateActions.UpdateUserWorkingDays,\n ): void {\n let { user } = getState();\n\n if (user) {\n user = user.clone({\n userWorkingDays: workingDays,\n });\n\n patchState({\n user,\n });\n }\n }\n\n @Action(UserStateActions.UpdateDefaultUserLandingPage)\n updateDefaultUserLandingPage(\n { getState, patchState }: StateContext,\n { defaultUserLandingPage }: UserStateActions.UpdateDefaultUserLandingPage,\n ): void {\n let { user } = getState();\n\n if (user) {\n user = user.clone({\n defaultUserLandingPage,\n });\n\n patchState({\n user,\n });\n }\n }\n\n @Action(UserStateActions.UpdateUserLocalLanguageSettings)\n updateUserLocalLanguageSettings(\n { getState, patchState }: StateContext,\n { useLocal }: UserStateActions.UpdateUserLocalLanguageSettings,\n ): void {\n let { user } = getState();\n\n if (user) {\n user = user.clone({\n displayInLocalLanguage: useLocal,\n });\n\n patchState({\n user,\n });\n }\n }\n}\n","import { EnvironmentConfig } from './environmentConfig';\n\n/**\n * This is the environment configuration for the 'integration' context of the project.\n *\n * The following contexts or environments are available:\n * - development (environment.ts): For local development.\n * - integration (environment.integration.ts): First deploy after merges. Development built for production.\n * - integration-local (environment.integration-local.ts): For testing the PWA build in local development.\n * - staging (environment.staging.ts): Staging environment before production (acceptance tests).\n * - production (environment.production.ts): Final stage for live application.\n *\n * @type {EnvironmentConfig}\n */\nexport const environment: EnvironmentConfig = {\n production: true,\n showBanner: true,\n title: 'Develop',\n apiEndpoint: '//api.dev.collapp.hitachienergy.com',\n msalApiEndpointResource: 'https://graph.windows.net',\n msalConfig: {\n apiEndpointId: 'af550fa7-b867-4206-a033-e0f70a7fa815',\n clientId: 'af550fa7-b867-4206-a033-e0f70a7fa815',\n instance: 'https://login.microsoftonline.com/e77d828a-dd9f-4787-bd3c-3b21d7b14ce6/',\n cacheLocation: 'localStorage',\n endpoints: {\n 'https://api.dev.collapp.hitachienergy.com': 'https://graph.windows.net',\n },\n },\n msalLoggingEnabled: true,\n azureBlobServiceUrl: 'https://abbcollappeudevg.blob.core.windows.net/?sv=2018-03-28&ss=b&srt=sco&sp=w&se=2222-04-01T17:23:46Z&st=2019-02-25T10:23:46Z&spr=https&sig=IaOc%2FFG%2FT8LLeYo%2Fpli15xE5VHomZ1wU3Y16sdD6MfY%3D',\n azureBlobTemporaryAttachmentsContainer: 'attachments-temp',\n instrumentationKey: 'e67711d5-73b1-4b64-a2f9-2a4bc6245130',\n ngxsDevelopmentModeEnabled: true,\n ngxsReduxDevtoolsEnabled: true,\n ngxsLoggingEnabled: true,\n};\n","import { Provider } from '@angular/core';\nimport { HTTP_INTERCEPTORS } from '@angular/common/http';\nimport { MsalInterceptor } from '@azure/msal-angular';\n\nimport { ImpersonationInterceptor } from './impersonation-interceptor';\nimport { AppInsightsInterceptor } from './app-insights-interceptor';\n\n/**\n * Http interceptor providers in outside-in order\n */\nexport const httpInterceptorProviders: Provider[] = [\n { provide: HTTP_INTERCEPTORS, useClass: ImpersonationInterceptor, multi: true },\n { provide: HTTP_INTERCEPTORS, useClass: AppInsightsInterceptor, multi: true },\n { provide: HTTP_INTERCEPTORS, useClass: MsalInterceptor, multi: true },\n];\n","import { Injectable } from '@angular/core';\nimport { HttpEvent, HttpHandler, HttpInterceptor, HttpRequest } from '@angular/common/http';\n\nimport { Observable } from 'rxjs';\nimport { AccessControlService } from '../services/access-control.service';\nimport { environment } from '../../environments/environment';\n\n/** Pass untouched request through to the next request handler. */\n@Injectable({\n providedIn: 'root',\n})\nexport class ImpersonationInterceptor implements HttpInterceptor {\n constructor(private accessControlService: AccessControlService) {}\n\n intercept(request: HttpRequest, next: HttpHandler): Observable> {\n // If the endpoint is not registered then pass\n // the request as it is to the next handler\n const isMystique = this.isMystique(request.url);\n if (!isMystique) {\n return next.handle(request);\n }\n\n if (\n this.accessControlService.substituteUserId\n && !request.headers.has('Mystique')\n ) {\n // Clone the request and replace the original headers with\n // cloned headers, updated with the new header params.\n const impersonatingRequest = request.clone({\n headers: request.headers.set('Mystique', this.accessControlService.substituteUserId),\n });\n\n return next.handle(impersonatingRequest);\n }\n\n return next.handle(request);\n }\n\n private isMystique(resource: string): boolean {\n return resource.includes(`${environment.apiEndpoint}`);\n }\n}\n","import { Injectable } from '@angular/core';\nimport { HttpEvent, HttpHandler, HttpInterceptor, HttpRequest } from '@angular/common/http';\nimport { Observable } from 'rxjs';\nimport { ApplicationInsightsService } from '../modules/application-insights';\n\n/** Pass untouched request through to the next request handler. */\n@Injectable({\n providedIn: 'root',\n})\nexport class AppInsightsInterceptor implements HttpInterceptor {\n constructor(\n private appInsightsService: ApplicationInsightsService,\n ) {}\n\n /** @inheritdoc */\n intercept(request: HttpRequest, next: HttpHandler): Observable> {\n // this.appInsightsService.trackDependency(UtilHelpers.newId(), request.method, request.urlWithParams);\n this.appInsightsService.trackEvent(\n `${request.method} ${request.url}`,\n {\n body: request.body,\n params: request.params ? request.params\n .keys()\n .map((key) => `${key}=${request.params.get(key)}`)\n .join('&') : '',\n },\n );\n\n return next.handle(request);\n }\n}\n","import { Inject, Injectable, NgZone } from '@angular/core';\nimport { DOCUMENT } from '@angular/common';\nimport { WINDOW } from '../collapp-common';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class ClipboardService {\n constructor(\n @Inject(DOCUMENT) private document: Document,\n @Inject(WINDOW) private window: Window,\n private zone: NgZone,\n ) {}\n\n /**\n * Copy the text value to the clipboard.\n *\n * @param {string} text\n */\n copy(text: string): Promise {\n // For modern browsers use the Async Clipboard API.\n if (this.window.navigator.clipboard) {\n return this.window.navigator.clipboard.writeText(text);\n }\n\n return new Promise((resolve, reject) => {\n this.zone.runOutsideAngular(() => {\n let success: boolean = false;\n\n // Fallback to document.execCommand('copy').\n const textArea = this.createTextArea();\n\n try {\n this.document.body.appendChild(textArea);\n\n // Set the value\n textArea.value = text;\n\n // Select the value (creating an active Selection range).\n textArea.focus();\n textArea.select();\n textArea.setSelectionRange(0, textArea.value.length);\n\n // Ask the browser to copy the current selection to the clipboard.\n success = this.document.execCommand('copy');\n textArea.blur();\n const selection = this.window.getSelection();\n if (selection) {\n selection.removeAllRanges();\n }\n\n success = success && this.isCopySuccessInIE11();\n } catch (error) {\n // ignore\n }\n\n // Remove the textarea from the DOM.\n textArea?.parentNode?.removeChild(textArea);\n\n this.zone.run(() => {\n if (success) {\n resolve();\n } else {\n reject();\n }\n });\n });\n });\n }\n\n /**\n * Create a textarea off-screen to hold the contents to copy.\n */\n private createTextArea(): HTMLTextAreaElement {\n const isRTL = (this.document.documentElement != null && this.document.documentElement.getAttribute('dir') === 'rtl') || false;\n const textArea: HTMLTextAreaElement = this.document.createElement('textarea');\n\n // Prevent zooming on iOS\n textArea.style.fontSize = '12pt';\n\n // Reset box model\n textArea.style.border = '0';\n textArea.style.padding = '0';\n textArea.style.margin = '0';\n\n // Move element out of screen horizontally\n textArea.style.position = 'absolute';\n textArea.style[isRTL ? 'right' : 'left'] = '-9999px';\n\n // Move element to the same position vertically\n const yPosition = this.window.pageYOffset\n || (this.document.documentElement != null ? this.document.documentElement.scrollTop : 0);\n\n textArea.style.top = `${yPosition}px`;\n\n textArea.setAttribute('readonly', '');\n\n return textArea;\n }\n\n /**\n * This is for IE11 returning true even if copy fails.\n */\n private isCopySuccessInIE11(): boolean {\n const { clipboardData } = this.window as any;\n if (clipboardData && clipboardData.getData) {\n if (!clipboardData.getData('Text')) {\n return false;\n }\n }\n\n return true;\n }\n}\n","import { ErrorHandler, Injectable, Injector } from '@angular/core';\nimport { ApplicationInsightsService } from '../modules/application-insights';\nimport { ToastyService } from '../shared/toasty';\nimport { environment } from '../../environments/environment';\nimport { hardReload } from '../helpers/hard-reload';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class GlobalErrorHandlerService extends ErrorHandler {\n constructor(\n private appInsightsService: ApplicationInsightsService,\n private injector: Injector,\n ) {\n super();\n }\n\n handleError(error: Error): void {\n super.handleError(error);\n\n this.appInsightsService.trackException({ exception: error });\n const chunkFailedMessage = /Loading chunk [\\d]+ failed/;\n if(chunkFailedMessage.test(error.message)) {\n hardReload();\n }\n\n if (!environment.production) {\n const toastyService = this.injector.get(ToastyService);\n\n toastyService.error({\n title: `Unhandled exception${error.name !== 'Error' ? `: ${error.name}` : ''}`,\n msg: error.message,\n });\n }\n }\n}\n","import { Injectable } from '@angular/core';\nimport { ActivatedRouteSnapshot, Router, UrlTree } from '@angular/router';\nimport { Observable } from 'rxjs';\nimport { map, skipWhile, take } from 'rxjs/operators';\nimport { AccessControlService } from '../services/access-control.service';\nimport { DEFAULT_RETURN_URL, RETURN_URL_QUERY_PARAM } from '../shared/constants';\nimport { atou, getRelativeUrlOrDefault } from '../helpers/login.utility';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class LoginGuard {\n constructor(\n private accessControlService: AccessControlService,\n private router: Router,\n ) { }\n\n /**\n * A guard deciding if a route can be activated.\n * If the guard returns `true`, navigation will continue. If the guard returns `false`,\n * navigation will be cancelled. If the guard returns a `UrlTree`, current navigation will\n * be cancelled and a new navigation will be kicked off to the `UrlTree` returned from the\n * guard.\n */\n canActivate(route: ActivatedRouteSnapshot): Observable | boolean {\n if (this.accessControlService.authenticated) {\n return this.accessControlService\n .accessControlPending$\n .pipe(\n skipWhile((accessControlPending) => accessControlPending),\n take(1),\n map(() => {\n if (this.accessControlService.access) {\n let foundReturnUrlCandidate = false;\n let returnUrl = DEFAULT_RETURN_URL;\n\n // Check the URL params for a return URL.\n if (route.queryParamMap.has(RETURN_URL_QUERY_PARAM)) {\n const returnUrlParam = route.queryParamMap.get(RETURN_URL_QUERY_PARAM);\n returnUrl = getRelativeUrlOrDefault(returnUrlParam, DEFAULT_RETURN_URL);\n foundReturnUrlCandidate = true;\n\n // Check for a base64 encoded payload\n } else {\n const pathFromHere = route.url\n .map((urlSegment) => urlSegment.path)\n .filter((path: string) => path !== '')\n .join('/');\n\n if (pathFromHere !== '') {\n const decodedReturnUrl = atou(pathFromHere);\n returnUrl = getRelativeUrlOrDefault(decodedReturnUrl, DEFAULT_RETURN_URL);\n foundReturnUrlCandidate = true;\n }\n }\n\n if (foundReturnUrlCandidate) {\n const parsedUrl = this.router.parseUrl(returnUrl);\n\n return parsedUrl;\n }\n }\n\n return true;\n }),\n );\n }\n\n // @TODO Sanitize route when returnUrl invalid?\n // this.router.navigate(\n // [basePath],\n // {\n // queryParams: {\n // returnUrl: (returnUrl === '/' ? null : returnUrl),\n // },\n // queryParamsHandling: 'merge',\n // replaceUrl: true,\n // }\n // );\n // ???? why true here?\n return true;\n }\n\n /**\n * A guard deciding if a child route can be activated.\n * If the guard returns `true`, navigation will continue. If the guard returns `false`,\n * navigation will be cancelled. If the guard returns a `UrlTree`, current navigation will\n * be cancelled and a new navigation will be kicked off to the `UrlTree` returned from the\n * guard.\n */\n canActivateChild(childRoute: ActivatedRouteSnapshot): Observable | boolean {\n return this.canActivate(childRoute);\n }\n\n // @TODO currently unused. may be needed when sanitizing returnUrl param.\n private getRouteBasePath(route: ActivatedRouteSnapshot): string {\n const isPathlessChildRoute = (\n route.routeConfig\n && (\n route.routeConfig.path === ''\n || route.routeConfig.path === '**'\n )\n );\n\n // The path of the rootline up until this component.\n const basePath = `/${\n (isPathlessChildRoute ? route.parent! : route)\n .pathFromRoot\n .map((activatedRoute) => activatedRoute.url\n .map((urlSegment) => urlSegment.path)\n .join('/'))\n .filter((path: string) => path !== '')\n .join('/')}`;\n\n return basePath;\n }\n}\n","import { ErrorHandler, TransferState, LOCALE_ID, Provider } from '@angular/core';\nimport {\n MsalBroadcastService,\n MsalGuard,\n MsalGuardConfiguration,\n MsalInterceptorConfiguration,\n MsalService,\n MSAL_GUARD_CONFIG,\n MSAL_INSTANCE,\n MSAL_INTERCEPTOR_CONFIG,\n} from '@azure/msal-angular';\nimport {\n BrowserCacheLocation,\n InteractionType,\n IPublicClientApplication,\n PublicClientApplication,\n} from '@azure/msal-browser';\nimport { ApplicationInsightsService } from './modules/application-insights';\nimport { httpInterceptorProviders } from './http-interceptors';\nimport { AccessGuard } from './guards/access.guard';\nimport { CanDeactivateGuard } from './guards/can-deactivate.guard';\nimport { UserService } from './api/services/user.service';\nimport { AccessControlService } from './services/access-control.service';\nimport { ClipboardService } from './services/clipboard.service';\nimport { CollAppApiService } from './api/services/collapp-api.service';\nimport { KeyboardShortcutsService } from './services/keyboard-shortcuts.service';\nimport { BaseDataService } from './api/services/base-data.service';\nimport { LayoutService } from './services/layout.service';\nimport { DashboardService } from './api/services/dashboard.service';\nimport { BasicDialogService } from './services/basic-dialog.service';\nimport { CollappDialogService } from './services/collapp-dialog.service';\nimport { ProjectService } from './api/services/project.service';\nimport { UnitService } from './api/services/unit.service';\nimport { ProjectViewResolver } from './services/project-view-resolver.service';\nimport { ProjectScopeResolver } from './services/project-scope-resolver.service';\nimport { WorkPackageViewResolver } from './services/work-package-view-resolver.service';\nimport { GlobalErrorHandlerService } from './services/global-error-handler.service';\nimport { ExportService } from './services/export.service';\nimport { LoginGuard } from './guards/login.guard';\nimport { TimeTrackingService } from './api/services/time-tracking.service';\nimport { NonHumanResourceService } from './api/services/non-human-resource.service';\nimport { environment } from '../environments/environment';\nimport { SkillsService } from './api/services/skills.service';\nimport '@angular/common/locales/global/de-CH';\nimport { WorkPackageDialogService } from './modules/projects-shared';\n\nconst isIE = window.navigator.userAgent.indexOf('MSIE ') > -1 || window.navigator.userAgent.indexOf('Trident/') > -1;\n\nexport function MSALInstanceFactory(): IPublicClientApplication {\n return new PublicClientApplication({\n auth: {\n clientId: environment.msalConfig.clientId,\n authority: environment.msalConfig.instance,\n redirectUri: environment.msalConfig.redirectUri,\n navigateToLoginRequestUrl: false,\n postLogoutRedirectUri: environment.msalConfig.redirectUri,\n },\n cache: {\n cacheLocation: BrowserCacheLocation.LocalStorage,\n storeAuthStateInCookie: isIE, // set to true for IE 11\n },\n });\n}\n\nexport function MSALInterceptorConfigFactory(): MsalInterceptorConfiguration {\n const protectedResourceMap = new Map();\n protectedResourceMap.set('https://graph.microsoft.com/v1.0/me', [\n 'user.read',\n ]);\n protectedResourceMap.set('//login.microsoftonline.com', ['user.read']);\n protectedResourceMap.set(`${environment.apiEndpoint}`, [\n `api://${environment.msalConfig.apiEndpointId}/read_as_user`,\n ]);\n\n return {\n interactionType: InteractionType.Redirect,\n protectedResourceMap,\n };\n}\n\nexport function MSALGuardConfigFactory(): MsalGuardConfiguration {\n return {\n authRequest: {\n scopes: [environment.msalConfig.tenant!],\n },\n interactionType: InteractionType.Redirect,\n };\n}\n\nexport const APP_PROVIDERS: Provider[] = [\n {\n provide: ErrorHandler,\n useClass: GlobalErrorHandlerService,\n },\n httpInterceptorProviders,\n ApplicationInsightsService,\n ClipboardService,\n CollAppApiService,\n KeyboardShortcutsService,\n UserService,\n AccessControlService,\n AccessGuard,\n LoginGuard,\n CanDeactivateGuard,\n BaseDataService,\n LayoutService,\n DashboardService,\n BasicDialogService,\n CollappDialogService,\n ProjectService,\n ProjectViewResolver,\n ProjectScopeResolver,\n TransferState,\n TimeTrackingService,\n UnitService,\n NonHumanResourceService,\n WorkPackageViewResolver,\n ExportService,\n SkillsService,\n WorkPackageDialogService,\n {\n provide: MSAL_INSTANCE,\n useFactory: MSALInstanceFactory,\n },\n {\n provide: MSAL_GUARD_CONFIG,\n useFactory: MSALGuardConfigFactory,\n },\n {\n provide: MSAL_INTERCEPTOR_CONFIG,\n useFactory: MSALInterceptorConfigFactory,\n },\n MsalGuard,\n MsalBroadcastService,\n MsalService,\n {\n provide: LOCALE_ID,\n useValue: 'de-CH',\n },\n];\n","import { Injectable } from '@angular/core';\nimport { PreloadingStrategy, Route } from '@angular/router';\nimport { Observable, of } from 'rxjs';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class CustomPreloadingStrategy implements PreloadingStrategy {\n preloadedModules: string[] = [];\n\n preload(route: Route, load: () => Observable): Observable {\n if (route.path && route.data && route.data.preload) {\n this.preloadedModules.push(route.path);\n\n return load();\n }\n\n return of(null);\n }\n}\n","import { Component } from '@angular/core';\n\n@Component({\n selector: 'collapp-not-found',\n templateUrl: './not-found.component.html',\n standalone: false\n})\nexport class NotFoundComponent { }\n","

    Error 404: Not found

    ","/**\n * Contains all the different user landing page types\n */\nexport enum DefaultUserLandingPageType {\n Dashboard = 0,\n Timecard = 1,\n MyPlanning = 2,\n Timesheet = 3,\n UnitPlanning = 4,\n}\n ","\n@switch (accessErrorType) {\n @case (accessErrorTypes.NONE) {\n

    \n You are authenticated!\n

    \n

    \n Use the navigation to start working with the application.\n

    \n
    \n

    \n \n

    \n }\n @case (accessErrorTypes.AUTHORIZATION_INVALID) {\n

    \n Access denied\n

    \n

    \n Hello {{ basicUserInfo?.fullName }}.\n

    \n

    \n Sorry! You cannot log in to CollApp. You are currently not assigned to any unit.\n

    \n
    \n

    \n If you're not {{ basicUserInfo?.fullName }}, please use the logout button to\n close the application and log in with a different user.\n

    \n

    \n \n

    \n }\n @case (accessErrorTypes.AUTHORIZATION_EXPIRED) {\n

    \n Access expired\n

    \n

    \n Hello {{ basicUserInfo?.fullName }}.\n

    \n

    \n Sorry! You cannot log in to CollApp. Your account expired on {{ basicUserInfo?.validUntil | momentLocal:'datetime' }} ({{ relativeAccessTime$ | async }}).\n

    \n
    \n

    \n If you're not {{ basicUserInfo?.fullName }}, please use the logout button to\n close the application and log in with a different user.\n

    \n

    \n \n

    \n }\n @case (accessErrorTypes.AUTHORIZATION_NOT_YET_VALID) {\n

    \n Awaiting activation\n

    \n

    \n Hello {{ basicUserInfo?.fullName }}.\n

    \n

    \n Sorry! Your account is not yet active. You can log in to CollApp after {{ basicUserInfo?.validFrom | momentLocal:'datetime' }} ({{ relativeAccessTime$ | async }}).\n

    \n
    \n

    \n If you're not {{ basicUserInfo?.fullName }}, please use the logout button to\n close the application and log in with a different user.\n

    \n

    \n \n

    \n }\n @case (accessErrorTypes.UNAUTHORIZED) {\n

    \n There was a problem with your authorization!\n

    \n

    \n You lack the basic privileges to access this application.\n

    \n @if (error) {\n

    \n {{error.name}}
    \n {{error.message}}
    \n Code: {{error.code}}\n

    \n }\n \n
    \n

    \n \n

    \n }\n @case (accessErrorTypes.AUTHENTICATION_ERROR) {\n @if (isRedirectingToAuthenticationProvider) {\n

    \n You are not authenticated.\n

    \n

    \n Please wait while we redirect you to the login screen.\n

    \n \n } @else {\n

    \n There was a problem with your authentication!\n

    \n @if (error) {\n

    \n {{error.name}}
    \n {{error.message}}
    \n Code: {{error.code}}\n

    \n }\n \n
    \n

    \n \n

    \n }\n }\n @case (accessErrorTypes.AUTHENTICATION_IN_PROGRESS) {\n

    \n Login in progress.\n

    \n

    \n Please wait while we verify your credentials.\n

    \n \n }\n}\n\n\n \n\n\n \n\n\n \n\n","import {\n Component,\n OnDestroy,\n OnInit,\n TemplateRef,\n ViewChild,\n} from '@angular/core';\nimport { ActivatedRoute, Router } from '@angular/router';\nimport { MatDialog, MatDialogRef } from '@angular/material/dialog';\nimport { Location } from '@angular/common';\nimport { MsalService } from '@azure/msal-angular';\nimport { Observable, Subject, timer } from 'rxjs';\nimport {\n distinctUntilChanged,\n map,\n share,\n takeUntil,\n filter,\n} from 'rxjs/operators';\n\nimport {\n AccessControlError,\n AccessControlService,\n AuthenticationEnd,\n AuthenticationUserInfoModel,\n} from '../../services/access-control.service';\nimport {\n KeyboardShortcutsService,\n Unlisten,\n} from '../../services/keyboard-shortcuts.service';\nimport {\n DEFAULT_RETURN_URL,\n LOGIN_REDIRECT_DELAY,\n RETURN_URL_QUERY_PARAM,\n} from '../../shared/constants';\nimport { getRelativeUrlOrDefault, utoa } from '../../helpers/login.utility';\nimport { Store } from '@ngxs/store';\nimport { UserSelectors } from 'src/app/state/user/user.selectors';\nimport { DefaultUserLandingPageType } from 'src/app/models/default-user-landing-page-type.enum';\nimport { UserDtoModel } from 'src/app/api/models/dtos/user.dto.model';\n\n/**\n * Types of possible authentication and authorization errors.\n */\nexport enum AccessErrorType {\n NONE,\n AUTHENTICATION_IN_PROGRESS,\n AUTHENTICATION_ERROR,\n UNAUTHORIZED,\n AUTHORIZATION_INVALID,\n AUTHORIZATION_EXPIRED,\n AUTHORIZATION_NOT_YET_VALID,\n}\n\n@Component({\n templateUrl: './login.component.html',\n standalone: false\n})\nexport class LoginComponent implements OnInit, OnDestroy {\n @ViewChild('overlay', { read: TemplateRef, static: true })\n private overlayTemplate!: TemplateRef;\n\n returnUrl: string = DEFAULT_RETURN_URL;\n\n base64EncodedReturnUrl: string = '';\n\n redirectUri: string = '';\n\n isRedirectingToAuthenticationProvider: boolean = false;\n\n error: AccessControlError | null = null;\n\n basicUserInfo: AuthenticationUserInfoModel | undefined;\n\n accessErrorTypes: typeof AccessErrorType = AccessErrorType;\n\n accessErrorType: AccessErrorType = AccessErrorType.NONE;\n\n relativeAccessTime$: Observable;\n\n private shortcutSubscription?: Unlisten;\n\n private dialogRef: MatDialogRef | null = null;\n\n private destroyed$: Subject = new Subject();\n\n constructor(\n public accessControlService: AccessControlService,\n private keyboardShortcutsService: KeyboardShortcutsService,\n private dialog: MatDialog,\n private route: ActivatedRoute,\n private location: Location,\n private msalService: MsalService,\n private router: Router,\n private store: Store,\n ) {\n this.relativeAccessTime$ = timer(0, 1000).pipe(\n map(() => {\n if (this.accessErrorType === AccessErrorType.AUTHORIZATION_EXPIRED) {\n return (\n (this.basicUserInfo\n && this.basicUserInfo.validUntil\n && this.basicUserInfo.validUntil.fromNow())\n || null\n );\n }\n if (\n this.accessErrorType === AccessErrorType.AUTHORIZATION_NOT_YET_VALID\n ) {\n return (\n (this.basicUserInfo\n && this.basicUserInfo.validFrom\n && this.basicUserInfo.validFrom.fromNow())\n || null\n );\n }\n\n return null;\n }),\n distinctUntilChanged(),\n takeUntil(this.destroyed$),\n share(),\n );\n }\n\n // eslint-disable-next-line max-lines-per-function\n ngOnInit(): void {\n if (this.accessControlService.getIsLoggedIn()) {\n this.router.navigate([this.getDefaultUserLandingPagePath(this.store.selectSnapshot(UserSelectors.user))]);\n }\n\n this.accessControlService.events$\n .pipe(\n filter((auth: AuthenticationEnd) => auth?.authenticated),\n takeUntil(this.destroyed$),\n )\n .subscribe((_) => {\n this.accessErrorType = this.getAccessErrorType();\n\n if (this.accessControlService.authenticated) {\n this.router.navigate(['/dashboard']);\n }\n });\n\n this.shortcutSubscription = this.keyboardShortcutsService.listen(\n {\n E: (event: KeyboardEvent): void => {\n // Since this is a native browser action, we want to cancel the\n // default behavior and isolate it as a local action.\n event.preventDefault();\n\n if (!this.dialogRef) {\n const dialogRef = this.dialog.open(this.overlayTemplate);\n\n dialogRef\n .afterClosed()\n .pipe(takeUntil(this.destroyed$))\n .subscribe(() => {\n this.dialogRef = null;\n });\n\n this.dialogRef = dialogRef;\n } else {\n this.dialogRef.close();\n }\n },\n },\n {\n priority: 10,\n },\n );\n\n // Cache the current state to prevent changes in the view,\n // for example when clicking the logout button while still in this view.\n // All results should be final at this time.\n this.error = this.accessControlService.error;\n this.basicUserInfo = this.accessControlService.getUserInfoFromError();\n\n this.accessErrorType = this.getAccessErrorType();\n\n this.route.queryParamMap\n .pipe(takeUntil(this.destroyed$))\n .subscribe((queryParamsMap) => {\n const returnUrlParam = queryParamsMap.get(RETURN_URL_QUERY_PARAM);\n // get return url from (route) parameters or default to '/'\n const returnUrl = getRelativeUrlOrDefault(\n returnUrlParam,\n DEFAULT_RETURN_URL,\n );\n\n this.returnUrl = returnUrl;\n this.base64EncodedReturnUrl = utoa(returnUrl);\n this.redirectUri = this.accessControlService.getAbsoluteUrl([\n '/login',\n this.base64EncodedReturnUrl,\n ]);\n });\n\n if (\n !this.accessControlService.authenticated\n && (!this.error || this.accessControlService.isUserLoginRequired(this.error))\n ) {\n this.isRedirectingToAuthenticationProvider = true;\n\n window.setTimeout(() => {\n if (this.location.path(true).includes('#')) {\n this.msalService\n .handleRedirectObservable()\n .pipe(takeUntil(this.destroyed$))\n .subscribe((_) => {\n this.accessControlService.start();\n });\n } else if (!this.accessControlService.accessControlPending) {\n this.login();\n }\n }, LOGIN_REDIRECT_DELAY);\n }\n }\n\n ngOnDestroy(): void {\n if (this.shortcutSubscription) {\n this.shortcutSubscription();\n }\n\n this.destroyed$.next();\n this.destroyed$.complete();\n }\n\n login(): void {\n this.accessControlService.login();\n }\n\n logout(): void {\n this.accessControlService.logout();\n }\n\n private getAccessErrorType(): AccessErrorType {\n if (!this.accessControlService.authenticated) {\n if (this.accessControlService.getIsLoginFailure()){\n return AccessErrorType.AUTHENTICATION_ERROR;\n }\n\n return AccessErrorType.AUTHENTICATION_IN_PROGRESS;\n }\n\n if (!this.accessControlService.authorized) {\n if (this.accessControlService.isUserAuthorizationCurrentlyInvalid()) {\n return AccessErrorType.AUTHORIZATION_INVALID;\n }\n\n if (this.accessControlService.isUserAuthorizationExpired()) {\n return AccessErrorType.AUTHORIZATION_EXPIRED;\n }\n\n if (this.accessControlService.isUserAuthorizationNotYetValid()) {\n return AccessErrorType.AUTHORIZATION_NOT_YET_VALID;\n }\n\n return AccessErrorType.UNAUTHORIZED;\n }\n\n return AccessErrorType.NONE;\n }\n\n private getDefaultUserLandingPagePath(user: UserDtoModel | null): string {\n switch(user?.defaultUserLandingPage){\n case DefaultUserLandingPageType.Dashboard:\n return \"/dashboard\";\n case DefaultUserLandingPageType.Timecard:\n return \"/user/timecard\";\n case DefaultUserLandingPageType.MyPlanning:\n return \"/user/planning\";\n case DefaultUserLandingPageType.Timesheet:\n return \"/reporting/timesheet\";\n case DefaultUserLandingPageType.UnitPlanning:\n return \"/reporting/unit-planning\";\n default: \n return \"/dashboard\";\n }\n }\n \n}\n","import { Component } from '@angular/core';\n\n@Component({\n templateUrl: './no-access.component.html',\n standalone: false\n})\nexport class NoAccessComponent { }\n","

    You do not have the correct permissions to view this page

    ","@if (error) {\n

    \n Error logging out.\n

    \n

    \n {{error.name}}
    \n {{error.message}}
    \n Code: {{error.code}}\n

    \n} @else {\n

    \n You have been logged out.\n

    \n

    \n Use the login button below to log back into the application.\n

    \n
    \n @if (!authenticated) {\n \n }\n}\n","import { Component, OnDestroy, OnInit } from '@angular/core';\nimport { Subject } from 'rxjs';\n\nimport { AccessControlError, AccessControlService } from '../../services/access-control.service';\n\n@Component({\n templateUrl: './logout.component.html',\n standalone: false\n})\nexport class LogoutComponent implements OnInit, OnDestroy {\n private destroyed$: Subject = new Subject();\n\n constructor(\n public accessControlService: AccessControlService,\n ) {\n }\n\n ngOnInit(): void {\n if ((this.authenticated || this.authorized) && !this.error) {\n this.logout();\n }\n }\n\n ngOnDestroy(): void {\n this.destroyed$.next();\n this.destroyed$.complete();\n }\n\n login(): void {\n this.accessControlService.login();\n }\n\n logout(): void {\n this.accessControlService.logout();\n }\n\n get authenticated(): boolean {\n return this.accessControlService.authenticated;\n }\n\n get authorized(): boolean {\n return this.accessControlService.authorized;\n }\n\n get error(): AccessControlError | null {\n return this.accessControlService.error;\n }\n}\n","import { Component, OnInit } from '@angular/core';\nimport { ActivatedRoute, Router } from '@angular/router';\nimport { DEFAULT_RETURN_URL } from '../shared/constants';\nimport { atou, getRelativeUrlOrDefault } from '../helpers/login.utility';\n\n@Component({\n template: '',\n standalone: false\n})\nexport class RedirectComponent implements OnInit {\n constructor(\n private router: Router,\n private route: ActivatedRoute,\n ) {\n }\n\n ngOnInit(): void {\n let returnUrl = DEFAULT_RETURN_URL;\n\n // Check for a base64 encoded payload\n const pathFromHere = this.route.snapshot.url\n .map((urlSegment) => urlSegment.path)\n .filter((path: string) => path !== '')\n .join('/');\n\n if (pathFromHere !== '') {\n const decodedReturnUrl = atou(pathFromHere);\n returnUrl = getRelativeUrlOrDefault(decodedReturnUrl, DEFAULT_RETURN_URL);\n }\n\n this.router.navigateByUrl(returnUrl);\n }\n}\n","import { NgModule } from '@angular/core';\nimport { RouterModule, Routes } from '@angular/router';\nimport { MsalGuard } from '@azure/msal-angular';\n\nimport { CustomPreloadingStrategy } from './helpers/custom-preloading-strategy';\n\nimport { AccessGuard } from './guards/access.guard';\n\nimport { NotFoundComponent } from './components/not-found/not-found.component';\nimport { LoginComponent } from './components/login/login.component';\nimport { NoAccessComponent } from './components/no-access/no-access.component';\nimport { getAdministrationPermissions, getReportingPermissions } from './app.permisions';\nimport { LogoutComponent } from './components/logout/logout.component';\nimport { LoginGuard } from './guards/login.guard';\nimport { RedirectComponent } from './components/redirect.component';\nimport type { DashboardModule } from './modules/dashboard';\nimport type { ProjectsModule } from './modules/projects';\nimport type { AdministrationModule } from './modules/administration';\nimport type { UserModule } from './modules/user';\nimport type { QuestionsModule } from './components/questions';\nimport type { WorkPackagesModule } from './modules/work-packages';\n\nconst routes: Routes = [\n {\n path: '',\n redirectTo: 'login',\n pathMatch: 'full',\n },\n {\n path: 'dashboard',\n loadChildren: () => import('./modules/dashboard')\n .then((m) => m.DashboardModule),\n canLoad: [AccessGuard],\n canActivate: [MsalGuard],\n data: {\n preload: true,\n },\n },\n {\n path: 'projects',\n loadChildren: () => import('./modules/projects')\n .then((m) => m.ProjectsModule),\n canLoad: [AccessGuard],\n canActivate: [MsalGuard],\n data: {\n preload: true,\n },\n },\n {\n path: 'projects/:id/work-packages',\n loadChildren: () => import('./modules/projects/work-package/wp.module')\n .then((m) => m.WpModule),\n canLoad: [AccessGuard],\n canActivate: [MsalGuard],\n },\n {\n path: 'work-packages',\n loadChildren: () => import('./modules/work-packages')\n .then((m) => m.WorkPackagesModule),\n canLoad: [AccessGuard],\n canActivate: [MsalGuard],\n data: {\n preload: true,\n },\n },\n {\n path: 'questions',\n loadChildren: () => import('./modules/questions')\n .then((m) => m.QuestionsModule),\n canLoad: [AccessGuard],\n canActivate: [MsalGuard],\n data: {\n preload: true,\n },\n },\n {\n path: 'administration',\n loadChildren: () => import('./modules/administration')\n .then((m) => m.AdministrationModule),\n canLoad: [AccessGuard],\n canActivate: [MsalGuard],\n data: {\n preload: false,\n permissions: getAdministrationPermissions(),\n },\n },\n {\n path: 'user',\n loadChildren: () => import('./modules/user')\n .then((m) => m.UserModule),\n canLoad: [AccessGuard],\n canActivate: [MsalGuard],\n data: {\n preload: true,\n },\n },\n {\n path: 'reporting',\n redirectTo: 'reporting/timesheet',\n pathMatch: 'full',\n },\n {\n path: 'reporting/timesheet',\n // eslint-disable-next-line arrow-parens\n loadChildren: () => import('./modules/timesheet/timesheet.module').then(m => m.TimesheetModule),\n canLoad: [AccessGuard],\n canActivate: [MsalGuard],\n data: {\n preload: false,\n permissions: getReportingPermissions(),\n },\n },\n {\n path: 'reporting/unit-planning',\n // eslint-disable-next-line arrow-parens\n loadChildren: () => import('./modules/unit-planning/unit-planning.module').then(m => m.UnitPlanningModule),\n canLoad: [AccessGuard],\n canActivate: [MsalGuard],\n data: {\n preload: false,\n permissions: true,\n },\n },\n {\n path: 'login',\n children: [\n {\n path: '**',\n component: LoginComponent,\n canActivate: [LoginGuard],\n },\n ],\n },\n {\n path: 'logout',\n component: LogoutComponent,\n },\n {\n path: 'redirect',\n children: [\n {\n path: '**',\n component: RedirectComponent,\n },\n ],\n },\n {\n path: 'no-access',\n component: NoAccessComponent,\n },\n {\n path: '**',\n component: NotFoundComponent,\n },\n];\n\n@NgModule({\n imports: [\n RouterModule.forRoot(\n routes,\n {\n useHash: false,\n preloadingStrategy: CustomPreloadingStrategy,\n scrollPositionRestoration: 'enabled',\n anchorScrolling: 'enabled'\n},\n ),\n ],\n exports: [RouterModule],\n providers: [CustomPreloadingStrategy],\n})\nexport class AppRoutingModule { }\n","// This component is part of @azure/msal-angular and can be imported and bootstrapped\nimport { Component, OnInit, OnDestroy } from '@angular/core';\nimport { MsalService } from '@azure/msal-angular';\nimport { Subject } from 'rxjs';\nimport { takeUntil } from 'rxjs/operators';\n\n@Component({\n selector: 'app-redirect', // Selector to be added to index.html\n template: '',\n standalone: false\n})\nexport class MsalRedirectComponent implements OnInit, OnDestroy {\n private readonly destroyed$: Subject = new Subject();\n\n constructor(private authService: MsalService) { }\n\n ngOnInit(): void {\n this.authService.handleRedirectObservable()\n .pipe(takeUntil(this.destroyed$))\n .subscribe();\n }\n\n ngOnDestroy(): void {\n this.destroyed$.next();\n this.destroyed$.complete();\n }\n}\n","import {\n NgModule, ModuleWithProviders, Optional, SkipSelf, ɵstringify as stringify,\n} from '@angular/core';\nimport { CommonModule } from '@angular/common';\n\nimport { AngularApplicationInsightsConfig, ApplicationInsightsService } from './application-insights.service';\n\n@NgModule({\n imports: [\n CommonModule,\n ],\n declarations: [],\n exports: [],\n providers: [\n ApplicationInsightsService,\n ],\n})\nexport class ApplicationInsightsModule {\n constructor(\n applicationInsightsService: ApplicationInsightsService,\n @Optional() @SkipSelf() parentModule?: ApplicationInsightsModule,\n ) {\n if (parentModule) {\n throw new Error(`${stringify(ApplicationInsightsModule)} is already loaded. Import it in the AppModule only.`);\n }\n applicationInsightsService.init();\n }\n\n static forRoot(config: AngularApplicationInsightsConfig): ModuleWithProviders {\n return {\n ngModule: ApplicationInsightsModule,\n providers: [\n { provide: AngularApplicationInsightsConfig, useValue: config },\n ApplicationInsightsService,\n ],\n };\n }\n}\n","import { MissingTranslationHandler, MissingTranslationHandlerParams } from '@ngx-translate/core';\n\nexport class CustomerMissingTranslationHandler implements MissingTranslationHandler {\n\n /**\n * This code is called when a translation is missing. Instead of using the fallback\n * language we're rendering the currently set language as prefix plus the actual\n * i18n key, so that it can easily be recognized.\n *\n * @param params\n * @returns {string}\n */\n handle(params: MissingTranslationHandlerParams): string {\n return params.key;\n }\n}\n","/**\n * This module is the entry for your App.\n *\n * Make sure to use the 3 constant APP_ imports so you don't have to keep\n * track of your root app dependencies here. Only import directly in this file if\n * there is something that is specific to the environment.\n */\n\nimport { BrowserModule } from '@angular/platform-browser';\nimport { NgModule } from '@angular/core';\nimport { HttpClient, provideHttpClient, withInterceptorsFromDi } from '@angular/common/http';\nimport { MsalModule } from '@azure/msal-angular';\nimport moment from 'moment';\n\nimport { APP_DECLARATIONS } from './app.declarations';\nimport { APP_PROVIDERS } from './app.providers';\n\nimport { AppRoutingModule } from './app-routing.module';\nimport { AppComponent } from './app.component';\nimport { MsalRedirectComponent } from './msal-redirect.component';\nimport { BrowserAnimationsModule } from '@angular/platform-browser/animations';\nimport { FormsModule, ReactiveFormsModule } from '@angular/forms';\nimport { NgxsModule } from '@ngxs/store';\nimport { NgxsStoragePluginModule } from '@ngxs/storage-plugin';\nimport { NgSelectMaterialModule } from './components/ng-select-mat';\nimport { ApplicationInsightsModule } from './modules/application-insights';\n\nimport { MaterialModule } from './material.module';\nimport { CollappMomentDateModule } from './collapp-moment-date-adapter';\nimport { CollappCommonModule } from './collapp-common';\nimport { SharedModule } from './shared';\nimport { environment } from '../environments/environment';\nimport { TimecardViewExpandsState } from './state/settings/timecard-view-expands/timecard-view-expands.state';\nimport { MissingTranslationHandler, TranslateLoader, TranslateModule } from '@ngx-translate/core';\nimport { TranslateHttpLoader } from '@ngx-translate/http-loader';\nimport { CustomerMissingTranslationHandler } from './helpers/CustomMissingTranslationHandler.class';\nimport { getEndpointUrl } from './api/utilities/api.utility';\n\n/*\n * Modifies moment to always include the current time zone when calling toJSON.\n * @see https://momentjs.com/docs/#/displaying/as-json/\n */\nmoment.fn.toJSON = function toJSON(): string {\n return this.utcOffset(0, true).toISOString(true);\n};\n\n/**\n * Create a custom translation loader\n * @param httpClient\n * @returns {TranslateHttpLoader}\n */\nexport function HttpLoaderFactory(httpClient: HttpClient): TranslateHttpLoader {\n return new TranslateHttpLoader(httpClient, getEndpointUrl(`/languages/`) , '');\n}\n\n/**\n * Factory for CustomerMissingTranslationHandler\n *\n * @returns {CustomerMissingTranslationHandler}\n */\nexport function createCustomerMissingTranslationHandler(): CustomerMissingTranslationHandler {\n return new CustomerMissingTranslationHandler();\n}\n\n@NgModule({ declarations: [\n AppComponent,\n MsalRedirectComponent,\n APP_DECLARATIONS,\n ],\n bootstrap: [\n AppComponent,\n MsalRedirectComponent,\n ], imports: [MsalModule,\n BrowserModule,\n AppRoutingModule,\n BrowserAnimationsModule,\n MaterialModule.forRoot(),\n TranslateModule.forRoot({\n missingTranslationHandler: {\n provide: MissingTranslationHandler,\n useFactory: createCustomerMissingTranslationHandler\n },\n loader: {\n provide: TranslateLoader,\n useFactory: HttpLoaderFactory,\n deps: [HttpClient]\n }\n }),\n FormsModule,\n ReactiveFormsModule,\n NgSelectMaterialModule,\n ApplicationInsightsModule.forRoot({\n instrumentationKey: environment.instrumentationKey,\n }),\n NgxsModule.forRoot([TimecardViewExpandsState], {\n // developmentMode: environment.ngxsDevelopmentModeEnabled,\n // @TODO Check https://github.com/ngrx/platform/issues/2404 (it's from NGRX, not NGXS, but same issue).\n developmentMode: false,\n }),\n NgxsStoragePluginModule.forRoot({\n keys: ['baseData'],\n }),\n CollappMomentDateModule,\n CollappCommonModule,\n SharedModule.forRoot()], providers: [APP_PROVIDERS, provideHttpClient(withInterceptorsFromDi())] })\nexport class AppModule { }\n","import { enableDebugTools } from '@angular/platform-browser';\nimport { ApplicationRef } from '@angular/core';\nimport { environment } from './environments/environment';\n\n// Angular debug tools in the dev console\n// https://github.com/angular/angular/blob/86405345b781a9dc2438c0fbe3e9409245647019/TOOLS_JS.md\nlet _decorateModuleRef = function identity(value: T): T { return value; };\n\nif (!environment.production) {\n _decorateModuleRef = (module: any) => {\n const applicationRef = module.injector.get(ApplicationRef);\n const appComponent = applicationRef.components[0];\n\n enableDebugTools(appComponent);\n\n return module;\n };\n} else {\n // Production\n // disableDebugTools();\n}\n\nexport const decorateModuleRef = _decorateModuleRef;\n","import { enableProdMode } from '@angular/core';\nimport { platformBrowserDynamic } from '@angular/platform-browser-dynamic';\n\nimport { AppModule } from './app/app.module';\nimport { environment } from './environments/environment';\nimport { decorateModuleRef } from './module-decorators';\n\nif (environment.production) {\n enableProdMode();\n}\n\nplatformBrowserDynamic()\n .bootstrapModule(AppModule)\n .then(decorateModuleRef)\n .catch((err) => {\n // eslint-disable-next-line no-console\n console.error(err);\n });\n","var map = {\n\t\"./de-ch\": 17757,\n\t\"./de-ch.js\": 17757,\n\t\"node_modules/moment/locale/de-ch\": 17757,\n\t\"node_modules/moment/locale/de-ch.js\": 17757\n};\n\n\nfunction webpackContext(req) {\n\tvar id = webpackContextResolve(req);\n\treturn __webpack_require__(id);\n}\nfunction webpackContextResolve(req) {\n\tif(!__webpack_require__.o(map, req)) {\n\t\tvar e = new Error(\"Cannot find module '\" + req + \"'\");\n\t\te.code = 'MODULE_NOT_FOUND';\n\t\tthrow e;\n\t}\n\treturn map[req];\n}\nwebpackContext.keys = function webpackContextKeys() {\n\treturn Object.keys(map);\n};\nwebpackContext.resolve = webpackContextResolve;\nmodule.exports = webpackContext;\nwebpackContext.id = 11368;"],"x_google_ignoreList":[560]}